pairPatchAgglomerationTemplates.C
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration |
5  \\ / A nd | www.openfoam.com
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8  Copyright (C) 2011 OpenFOAM Foundation
9 -------------------------------------------------------------------------------
10 License
11  This file is part of OpenFOAM.
12 
13  OpenFOAM is free software: you can redistribute it and/or modify it
14  under the terms of the GNU General Public License as published by
15  the Free Software Foundation, either version 3 of the License, or
16  (at your option) any later version.
17 
18  OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
19  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
20  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
21  for more details.
22 
23  You should have received a copy of the GNU General Public License
24  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
25 
26 \*---------------------------------------------------------------------------*/
27 
28 #include "pairPatchAgglomeration.H"
29 
30 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
31 
32 template<class Type>
34 (
35  Field<Type>& cf,
36  const Field<Type>& ff,
37  const label fineLevelIndex
38 ) const
39 {
40  const labelList& fineToCoarse = restrictAddressing_[fineLevelIndex];
41 
42  if (ff.size() != fineToCoarse.size())
43  {
45  << "field does not correspond to level " << fineLevelIndex
46  << " sizes: field = " << ff.size()
47  << " level = " << fineToCoarse.size()
48  << abort(FatalError);
49  }
50 
52 
53  forAll(ff, i)
54  {
55  cf[fineToCoarse[i]] += ff[i];
56  }
57 }
58 
59 
60 template<class Type>
62 (
63  Field<Type>& ff,
64  const Field<Type>& cf,
65  const label coarseLevelIndex
66 ) const
67 {
68  const labelList& fineToCoarse = restrictAddressing_[coarseLevelIndex];
69 
70  forAll(fineToCoarse, i)
71  {
72  ff[i] = cf[fineToCoarse[i]];
73  }
74 }
75 
76 
77 // ************************************************************************* //
forAll
#define forAll(list, i)
Loop across all elements in list.
Definition: stdFoam.H:296
Foam::Field
Generic templated field type.
Definition: Field.H:63
Foam::FatalError
error FatalError
Foam::abort
errorManip< error > abort(error &err)
Definition: errorManip.H:144
Foam::pairPatchAgglomeration::restrictField
void restrictField(Field< Type > &cf, const Field< Type > &ff, const label fineLevelIndex) const
Restrict (integrate by summation) cell field.
Definition: pairPatchAgglomerationTemplates.C:34
Foam::fv::ff
const FieldField< fvPatchField, Type > & ff(const FieldField< fvPatchField, Type > &bf)
Definition: CrankNicolsonDdtScheme.C:275
FatalErrorInFunction
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
Definition: error.H:453
pairPatchAgglomeration.H
Foam::List< label >
Foam::pTraits
A traits class, which is primarily used for primitives.
Definition: pTraits.H:56
Foam::pairPatchAgglomeration::prolongField
void prolongField(Field< Type > &ff, const Field< Type > &cf, const label coarseLevelIndex) const
Prolong (interpolate by injection) cell field.
Definition: pairPatchAgglomerationTemplates.C:62