Remove trailing whitespace systematically
[foam-extend-3.2.git] / src / finiteVolume / finiteVolume / gradSchemes / gradScheme / gradScheme.C
blob91bebf91b6058695de8860496832d6ad9e569545
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | foam-extend: Open Source CFD
4    \\    /   O peration     |
5     \\  /    A nd           | For copyright notice see file Copyright
6      \\/     M anipulation  |
7 -------------------------------------------------------------------------------
8 License
9     This file is part of foam-extend.
11     foam-extend is free software: you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by the
13     Free Software Foundation, either version 3 of the License, or (at your
14     option) any later version.
16     foam-extend is distributed in the hope that it will be useful, but
17     WITHOUT ANY WARRANTY; without even the implied warranty of
18     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19     General Public License for more details.
21     You should have received a copy of the GNU General Public License
22     along with foam-extend.  If not, see <http://www.gnu.org/licenses/>.
24 Description
25     Abstract base class for finite volume calculus gradient schemes.
27 \*---------------------------------------------------------------------------*/
29 #include "fv.H"
30 #include "HashTable.H"
31 #include "primitiveFields.H"
33 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
35 namespace Foam
38 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
40 namespace fv
43 // * * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * //
45 template<class Type>
46 tmp<gradScheme<Type> > gradScheme<Type>::New
48     const fvMesh& mesh,
49     Istream& schemeData
52     if (fv::debug)
53     {
54         Info<< "gradScheme<Type>::New(Istream& schemeData) : "
55                "constructing gradScheme<Type>"
56             << endl;
57     }
59     if (schemeData.eof())
60     {
61         FatalIOErrorIn
62         (
63             "gradScheme<Type>::New(Istream& schemeData)",
64             schemeData
65         )   << "Grad scheme not specified" << endl << endl
66             << "Valid grad schemes are :" << endl
67             << IstreamConstructorTablePtr_->sortedToc()
68             << exit(FatalIOError);
69     }
71     word schemeName(schemeData);
73     typename IstreamConstructorTable::iterator cstrIter =
74         IstreamConstructorTablePtr_->find(schemeName);
76     if (cstrIter == IstreamConstructorTablePtr_->end())
77     {
78         FatalIOErrorIn
79         (
80             "gradScheme<Type>::New(Istream& schemeData)",
81             schemeData
82         )   << "unknown grad scheme " << schemeName << endl << endl
83             << "Valid grad schemes are :" << endl
84             << IstreamConstructorTablePtr_->sortedToc()
85             << exit(FatalIOError);
86     }
88     return cstrIter()(mesh, schemeData);
92 // * * * * * * * * * * * * * * * * Destructor  * * * * * * * * * * * * * * * //
94 template<class Type>
95 gradScheme<Type>::~gradScheme()
99 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
101 template<class Type>
102 tmp<blockVectorMatrix> gradScheme<Type>::fvmGrad
104     const GeometricField<Type, fvPatchField, volMesh>& vf
105 ) const
107     FatalIOErrorIn
108     (
109         "tmp<blockVectorMatrix> fvmGrad\n",
110         "(\n"
111         "    GeometricField<Type, fvPatchField, volMesh>&"
112         ")\n"
113     )   << "Implicit gradient operator currently defined only for Gauss grad."
114         << abort(FatalIOError);
116     tmp<blockVectorMatrix> tbm
117     (
118         new blockVectorMatrix
119         (
120            vf.mesh()
121         )
122     );
124     return tbm;
128 template<class Type>
129 void gradScheme<Type>::correctBoundaryConditions
131     const GeometricField<Type, fvPatchField, volMesh>& vsf,
132     GeometricField
133     <
134         typename outerProduct<vector, Type>::type, fvPatchField, volMesh
135     >& gGrad
138     forAll (vsf.boundaryField(), patchi)
139     {
140         if (!vsf.boundaryField()[patchi].coupled())
141         {
142             vectorField n = vsf.mesh().boundary()[patchi].nf();
144             gGrad.boundaryField()[patchi] += n*
145             (
146                 vsf.boundaryField()[patchi].snGrad()
147               - (n & gGrad.boundaryField()[patchi])
148             );
149         }
150     }
152     // Note: coupled boundaries provide patchNeighbourField, which is only
153     // updated on correct boundary conditions.  Therefore, evaluateCoupled()
154     // should be called here. HJ, Apr/2013
155     gGrad.boundaryField().evaluateCoupled();
159 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
161 } // End namespace fv
163 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
165 } // End namespace Foam
167 // ************************************************************************* //