Fix tutorials: typo in tutorials/viscoelastic/viscoelasticFluidFoam/S-MDCPP/constant...
[OpenFOAM-1.6-ext.git] / src / finiteVolume / fields / fvPatchFields / constraint / regionCouple / regionCoupleFvPatchField.H
blob8d608d1e8f9043dd1172a16a7d66b521d0dd0081
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright held by original author
6      \\/     M anipulation  |
7 -------------------------------------------------------------------------------
8 License
9     This file is part of OpenFOAM.
11     OpenFOAM 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 2 of the License, or (at your
14     option) any later version.
16     OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
19     for more details.
21     You should have received a copy of the GNU General Public License
22     along with OpenFOAM; if not, write to the Free Software Foundation,
23     Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
25 Class
26     regionCoupleFvPatchField
28 Description
29     Region couple patch field
31 Author
32     Hrvoje Jasak, Wikki Ltd.  All rights reserved
34 SourceFiles
35     regionCoupleFvPatchField.C
37 \*---------------------------------------------------------------------------*/
39 #ifndef regionCoupleFvPatchField_H
40 #define regionCoupleFvPatchField_H
42 #include "coupledFvPatchField.H"
43 #include "regionCoupleLduInterfaceField.H"
44 #include "regionCoupleFvPatch.H"
46 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
48 namespace Foam
51 /*---------------------------------------------------------------------------*\
52                   Class regionCoupleFvPatchField Declaration
53 \*---------------------------------------------------------------------------*/
55 template<class Type>
56 class regionCoupleFvPatchField
58     public regionCoupleLduInterfaceField,
59     public coupledFvPatchField<Type>
61     // Private data
63         //- Local reference cast into the regionCouple patch
64         const regionCoupleFvPatch& regionCouplePatch_;
66         //- Name of remote field to couple to
67         word remoteFieldName_;
69         //- Matrix update buffer
70         mutable scalarField matrixUpdateBuffer_;
73 protected:
75         //- Return contents of a matrix update buffer
76         const scalarField& matrixUpdateBuffer() const
77         {
78             return matrixUpdateBuffer_;
79         }
82 public:
84     //- Runtime type information
85 //     TypeName(regionCoupleFvPatch::typeName_());
86     TypeName("regionCoupling");
89     // Constructors
91         //- Construct from patch and internal field
92         regionCoupleFvPatchField
93         (
94             const fvPatch&,
95             const DimensionedField<Type, volMesh>&
96         );
98         //- Construct from patch, internal field and dictionary
99         regionCoupleFvPatchField
100         (
101             const fvPatch&,
102             const DimensionedField<Type, volMesh>&,
103             const dictionary&
104         );
106         //- Construct by mapping given regionCoupleFvPatchField onto a new patch
107         regionCoupleFvPatchField
108         (
109             const regionCoupleFvPatchField<Type>&,
110             const fvPatch&,
111             const DimensionedField<Type, volMesh>&,
112             const fvPatchFieldMapper&
113         );
115         //- Construct as copy setting internal field reference
116         regionCoupleFvPatchField
117         (
118             const regionCoupleFvPatchField<Type>&,
119             const DimensionedField<Type, volMesh>&
120         );
122         //- Construct and return a clone
123         virtual tmp<fvPatchField<Type> > clone() const
124         {
125             return tmp<fvPatchField<Type> >
126             (
127                 new regionCoupleFvPatchField<Type>(*this)
128             );
129         }
131         //- Construct and return a clone setting internal field reference
132         virtual tmp<fvPatchField<Type> > clone
133         (
134             const DimensionedField<Type, volMesh>& iF
135         ) const
136         {
137             return tmp<fvPatchField<Type> >
138             (
139                 new regionCoupleFvPatchField<Type>(*this, iF)
140             );
141         }
144     // Member functions
146         // Evaluation functions
148             //- Return remote field name
149             const word& remoteFieldName() const
150             {
151                 return remoteFieldName_;
152             }
154             //- Return shadow patch field
155             const regionCoupleFvPatchField<Type>& shadowPatchField() const;
157             //- Return neighbour field given internal cell data
158             virtual tmp<Field<Type> > patchNeighbourField() const;
160             //- Evaluate the patch field
161             virtual void evaluate
162             (
163                 const Pstream::commsTypes commsType
164             );
166             //- Initialise neighbour matrix update
167             virtual void initInterfaceMatrixUpdate
168             (
169                 const scalarField& psiInternal,
170                 scalarField& result,
171                 const lduMatrix& m,
172                 const scalarField& coeffs,
173                 const direction cmpt,
174                 const Pstream::commsTypes commsType
175             ) const;
177             //- Update result field based on interface functionality
178             virtual void updateInterfaceMatrix
179             (
180                 const scalarField& psiInternal,
181                 scalarField& result,
182                 const lduMatrix&,
183                 const scalarField& coeffs,
184                 const direction cmpt,
185                 const Pstream::commsTypes commsType
186             ) const;
189         //- Write
190         virtual void write(Ostream&) const;
195 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
197 } // End namespace Foam
199 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
201 #ifdef NoRepository
202 #   include "regionCoupleFvPatchField.C"
203 #endif
205 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
207 #endif
209 // ************************************************************************* //