fvPatchField.H
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration |
5  \\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8 License
9  This file is part of OpenFOAM.
10 
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
13  the Free Software Foundation, either version 3 of the License, or
14  (at your option) any later version.
15 
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.
20 
21  You should have received a copy of the GNU General Public License
22  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
23 
24 Class
25  Foam::fvPatchField
26 
27 Description
28  Abstract base class with a fat-interface to all derived classes
29  covering all possible ways in which they might be used.
30 
31  The first level of derivation is to basic patchFields which cover
32  zero-gradient, fixed-gradient, fixed-value and mixed conditions.
33 
34  The next level of derivation covers all the specialised types with
35  specific evaluation proceedures, particularly with respect to specific
36  fields.
37 
38 SourceFiles
39  fvPatchField.C
40  fvPatchFieldNew.C
41 
42 \*---------------------------------------------------------------------------*/
43 
44 #ifndef fvPatchField_H
45 #define fvPatchField_H
46 
47 #include "fvPatch.H"
48 #include "DimensionedField.H"
49 
50 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
51 
52 namespace Foam
53 {
54 
55 // Forward declaration of classes
56 
57 class objectRegistry;
58 class dictionary;
59 class fvPatchFieldMapper;
60 class volMesh;
61 
62 
63 // Forward declaration of friend functions and operators
64 
65 template<class Type>
66 class fvPatchField;
67 
68 template<class Type>
70 
71 template<class Type>
72 class fvMatrix;
73 
74 template<class Type>
75 Ostream& operator<<(Ostream&, const fvPatchField<Type>&);
76 
77 
78 /*---------------------------------------------------------------------------*\
79  Class fvPatchField Declaration
80 \*---------------------------------------------------------------------------*/
81 
82 template<class Type>
83 class fvPatchField
84 :
85  public Field<Type>
86 {
87  // Private data
88 
89  //- Reference to patch
90  const fvPatch& patch_;
91 
92  //- Reference to internal field
93  const DimensionedField<Type, volMesh>& internalField_;
94 
95  //- Update index used so that updateCoeffs is called only once during
96  // the construction of the matrix
97  bool updated_;
98 
99  //- Update index used so that manipulateMatrix is called only once
100  // during the construction of the matrix
101  bool manipulatedMatrix_;
102 
103  //- Optional patch type, used to allow specified boundary conditions
104  // to be applied to constraint patches by providing the constraint
105  // patch type as 'patchType'
106  word patchType_;
107 
108 
109 public:
111  typedef fvPatch Patch;
113 
114 
115  //- Runtime type information
116  TypeName("fvPatchField");
117 
118  //- Debug switch to disallow the use of genericFvPatchField
119  static int disallowGenericFvPatchField;
120 
121 
122  // Declare run-time constructor selection tables
123 
125  (
126  tmp,
127  fvPatchField,
128  patch,
129  (
130  const fvPatch& p,
132  ),
133  (p, iF)
134  );
135 
137  (
138  tmp,
139  fvPatchField,
140  patchMapper,
141  (
142  const fvPatchField<Type>& ptf,
143  const fvPatch& p,
145  const fvPatchFieldMapper& m
146  ),
147  (dynamic_cast<const fvPatchFieldType&>(ptf), p, iF, m)
148  );
149 
151  (
152  tmp,
153  fvPatchField,
154  dictionary,
155  (
156  const fvPatch& p,
158  const dictionary& dict
159  ),
160  (p, iF, dict)
161  );
162 
163 
164  // Constructors
165 
166  //- Construct from patch and internal field
168  (
169  const fvPatch&,
171  );
172 
173  //- Construct from patch, internal field and value
175  (
176  const fvPatch&,
178  const Type& value
179  );
180 
181  //- Construct from patch and internal field and patch type
183  (
184  const fvPatch&,
186  const word& patchType
187  );
188 
189  //- Construct from patch and internal field and patch field
191  (
192  const fvPatch&,
194  const Field<Type>&
195  );
196 
197  //- Construct from patch, internal field and dictionary
199  (
200  const fvPatch&,
202  const dictionary&,
203  const bool valueRequired=false
204  );
205 
206  //- Construct by mapping the given fvPatchField onto a new patch
208  (
209  const fvPatchField<Type>&,
210  const fvPatch&,
212  const fvPatchFieldMapper&
213  );
214 
215  //- Construct as copy
217 
218  //- Construct and return a clone
219  virtual tmp<fvPatchField<Type>> clone() const
220  {
221  return tmp<fvPatchField<Type>>(new fvPatchField<Type>(*this));
222  }
223 
224  //- Construct as copy setting internal field reference
226  (
227  const fvPatchField<Type>&,
229  );
230 
231  //- Construct and return a clone setting internal field reference
233  (
235  ) const
236  {
237  return tmp<fvPatchField<Type>>(new fvPatchField<Type>(*this, iF));
238  }
239 
240 
241  // Selectors
242 
243  //- Return a pointer to a new patchField created on freestore given
244  // patch and internal field
245  // (does not set the patch field values)
247  (
248  const word&,
249  const fvPatch&,
251  );
252 
253  //- Return a pointer to a new patchField created on freestore given
254  // patch and internal field
255  // (does not set the patch field values).
256  // Allows override of constraint type
258  (
259  const word&,
260  const word& actualPatchType,
261  const fvPatch&,
263  );
264 
265  //- Return a pointer to a new patchField created on freestore from
266  // a given fvPatchField mapped onto a new patch
268  (
269  const fvPatchField<Type>&,
270  const fvPatch&,
272  const fvPatchFieldMapper&
273  );
274 
275  //- Return a pointer to a new patchField created on freestore
276  // from dictionary
278  (
279  const fvPatch&,
281  const dictionary&
282  );
283 
284  //- Return a pointer to a new calculatedFvPatchField created on
285  // freestore without setting patchField values
287  (
288  const fvPatch&
289  );
290 
291  //- Return a pointer to a new calculatedFvPatchField created on
292  // freestore without setting patchField values
293  template<class Type2>
295  (
296  const fvPatchField<Type2>&
297  );
298 
299 
300  //- Destructor
301  virtual ~fvPatchField<Type>()
302  {}
303 
304 
305  // Member functions
306 
307  // Attributes
308 
309  //- Return the type of the calculated for of fvPatchField
310  static const word& calculatedType();
311 
312  //- Return true if this patch field fixes a value.
313  // Needed to check if a level has to be specified while solving
314  // Poissons equations.
315  virtual bool fixesValue() const
316  {
317  return false;
318  }
319 
320  //- Return true if the value of the patch field
321  // is altered by assignment (the default)
322  virtual bool assignable() const
323  {
324  return true;
325  }
326 
327  //- Return true if this patch field is coupled
328  virtual bool coupled() const
329  {
330  return false;
331  }
332 
333 
334  // Access
335 
336  //- Return local objectRegistry
337  const objectRegistry& db() const;
338 
339  //- Return patch
340  const fvPatch& patch() const
341  {
342  return patch_;
343  }
344 
345  //- Return dimensioned internal field reference
347  internalField() const
348  {
349  return internalField_;
350  }
351 
352  //- Return internal field reference
353  const Field<Type>& primitiveField() const
354  {
355  return internalField_;
356  }
357 
358  //- Optional patch type
359  const word& patchType() const
360  {
361  return patchType_;
362  }
363 
364  //- Optional patch type
365  word& patchType()
366  {
367  return patchType_;
368  }
369 
370  //- Return true if the boundary condition has already been updated
371  bool updated() const
372  {
373  return updated_;
374  }
375 
376  //- Return true if the matrix has already been manipulated
377  bool manipulatedMatrix() const
378  {
379  return manipulatedMatrix_;
380  }
381 
382 
383  // Mapping functions
384 
385  //- Map (and resize as needed) from self given a mapping object
386  virtual void autoMap
387  (
388  const fvPatchFieldMapper&
389  );
390 
391  //- Reverse map the given fvPatchField onto this fvPatchField
392  virtual void rmap
393  (
394  const fvPatchField<Type>&,
395  const labelList&
396  );
397 
398 
399  // Evaluation functions
400 
401  //- Return patch-normal gradient
402  virtual tmp<Field<Type>> snGrad() const;
403 
404  //- Return patch-normal gradient for coupled-patches
405  // using the deltaCoeffs provided
407  (
408  const scalarField& deltaCoeffs
409  ) const
410  {
412  return *this;
413  }
414 
415  //- Update the coefficients associated with the patch field
416  // Sets Updated to true
417  virtual void updateCoeffs();
418 
419  //- Update the coefficients associated with the patch field
420  // with a weight field (0..1). This weight field is ususally
421  // provided as the amount of geometric overlap for 'duplicate'
422  // patches. Sets Updated to true
423  virtual void updateWeightedCoeffs(const scalarField& weights);
424 
425  //- Return internal field next to patch as patch field
426  virtual tmp<Field<Type>> patchInternalField() const;
427 
428  //- Return internal field next to patch as patch field
429  virtual void patchInternalField(Field<Type>&) const;
430 
431  //- Return patchField on the opposite patch of a coupled patch
432  virtual tmp<Field<Type>> patchNeighbourField() const
433  {
435  return *this;
436  }
437 
438  //- Initialise the evaluation of the patch field
439  virtual void initEvaluate
440  (
441  const Pstream::commsTypes commsType=Pstream::blocking
442  )
443  {}
444 
445  //- Evaluate the patch field, sets Updated to false
446  virtual void evaluate
447  (
448  const Pstream::commsTypes commsType=Pstream::blocking
449  );
450 
451 
452  //- Return the matrix diagonal coefficients corresponding to the
453  // evaluation of the value of this patchField with given weights
455  (
456  const tmp<Field<scalar>>&
457  ) const
458  {
460  return *this;
461  }
462 
463  //- Return the matrix source coefficients corresponding to the
464  // evaluation of the value of this patchField with given weights
466  (
467  const tmp<Field<scalar>>&
468  ) const
469  {
471  return *this;
472  }
473 
474  //- Return the matrix diagonal coefficients corresponding to the
475  // evaluation of the gradient of this patchField
476  virtual tmp<Field<Type>> gradientInternalCoeffs() const
477  {
479  return *this;
480  }
481 
482  //- Return the matrix diagonal coefficients corresponding to the
483  // evaluation of the gradient of this coupled patchField
484  // using the deltaCoeffs provided
486  (
487  const scalarField& deltaCoeffs
488  ) const
489  {
491  return *this;
492  }
493 
494  //- Return the matrix source coefficients corresponding to the
495  // evaluation of the gradient of this patchField
496  virtual tmp<Field<Type>> gradientBoundaryCoeffs() const
497  {
499  return *this;
500  }
501 
502  //- Return the matrix source coefficients corresponding to the
503  // evaluation of the gradient of this coupled patchField
504  // using the deltaCoeffs provided
506  (
507  const scalarField& deltaCoeffs
508  ) const
509  {
511  return *this;
512  }
513 
514 
515  //- Manipulate matrix
516  virtual void manipulateMatrix(fvMatrix<Type>& matrix);
517 
518  //- Manipulate matrix with given weights
519  virtual void manipulateMatrix
520  (
521  fvMatrix<Type>& matrix,
522  const scalarField& weights
523  );
524 
525 
526  // I-O
527 
528  //- Write
529  virtual void write(Ostream&) const;
530 
531  //- Helper function to write the keyword and entry only if the
532  // values are not equal. The value is then output as value2
533  template<class EntryType>
535  (
536  Ostream& os,
537  const word& entryName,
538  const EntryType& value1,
539  const EntryType& value2
540  ) const;
541 
542 
543  // Check
544 
545  //- Check fvPatchField<Type> against given fvPatchField<Type>
546  void check(const fvPatchField<Type>&) const;
547 
548 
549  // Member operators
550 
551  virtual void operator=(const UList<Type>&);
552 
553  virtual void operator=(const fvPatchField<Type>&);
554  virtual void operator+=(const fvPatchField<Type>&);
555  virtual void operator-=(const fvPatchField<Type>&);
556  virtual void operator*=(const fvPatchField<scalar>&);
557  virtual void operator/=(const fvPatchField<scalar>&);
558 
559  virtual void operator+=(const Field<Type>&);
560  virtual void operator-=(const Field<Type>&);
561 
562  virtual void operator*=(const Field<scalar>&);
563  virtual void operator/=(const Field<scalar>&);
564 
565  virtual void operator=(const Type&);
566  virtual void operator+=(const Type&);
567  virtual void operator-=(const Type&);
568  virtual void operator*=(const scalar);
569  virtual void operator/=(const scalar);
570 
571 
572  // Force an assignment irrespective of form of patch
573 
574  virtual void operator==(const fvPatchField<Type>&);
575  virtual void operator==(const Field<Type>&);
576  virtual void operator==(const Type&);
577 
578 
579  // Ostream operator
580 
581  friend Ostream& operator<< <Type>(Ostream&, const fvPatchField<Type>&);
582 };
583 
584 
585 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
586 
587 } // End namespace Foam
588 
589 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
590 
591 #ifdef NoRepository
592  #include "fvPatchField.C"
593  #include "calculatedFvPatchField.H"
594 #endif
595 
597 #define makeFvPatchField(fvPatchTypeField) \
598  \
599 defineNamedTemplateTypeNameAndDebug(fvPatchTypeField, 0); \
600 template<> \
601 int fvPatchTypeField::disallowGenericFvPatchField \
602 ( \
603  debug::debugSwitch("disallowGenericFvPatchField", 0) \
604 ); \
605 defineTemplateRunTimeSelectionTable(fvPatchTypeField, patch); \
606 defineTemplateRunTimeSelectionTable(fvPatchTypeField, patchMapper); \
607 defineTemplateRunTimeSelectionTable(fvPatchTypeField, dictionary);
608 
610 #define addToPatchFieldRunTimeSelection(PatchTypeField, typePatchTypeField) \
611  addToRunTimeSelectionTable \
612  ( \
613  PatchTypeField, \
614  typePatchTypeField, \
615  patch \
616  ); \
617  addToRunTimeSelectionTable \
618  ( \
619  PatchTypeField, \
620  typePatchTypeField, \
621  patchMapper \
622  ); \
623  addToRunTimeSelectionTable \
624  ( \
625  PatchTypeField, \
626  typePatchTypeField, \
627  dictionary \
628  );
629 
630 
631 // use with caution
632 #define addRemovableToPatchFieldRunTimeSelection\
633 (PatchTypeField, typePatchTypeField) \
634  \
635  addRemovableToRunTimeSelectionTable \
636  ( \
637  PatchTypeField, \
638  typePatchTypeField, \
639  patch \
640  ); \
641  addRemovableToRunTimeSelectionTable \
642  ( \
643  PatchTypeField, \
644  typePatchTypeField, \
645  patchMapper \
646  ); \
647  addRemovableToRunTimeSelectionTable \
648  ( \
649  PatchTypeField, \
650  typePatchTypeField, \
651  dictionary \
652  );
653 
654 
655 // for non-templated patch fields
656 #define makePatchTypeField(PatchTypeField, typePatchTypeField) \
657  defineTypeNameAndDebug(typePatchTypeField, 0); \
658  addToPatchFieldRunTimeSelection(PatchTypeField, typePatchTypeField)
659 
660 // for non-templated patch fields - use with caution
661 #define makeRemovablePatchTypeField(PatchTypeField, typePatchTypeField) \
662  defineTypeNameAndDebug(typePatchTypeField, 0); \
663  addRemovableToPatchFieldRunTimeSelection(PatchTypeField, typePatchTypeField)
664 
665 
666 // for templated patch fields
667 #define makeTemplatePatchTypeField(PatchTypeField, typePatchTypeField) \
668  defineNamedTemplateTypeNameAndDebug(typePatchTypeField, 0); \
669  addToPatchFieldRunTimeSelection(PatchTypeField, typePatchTypeField)
670 
672 #define makePatchFields(type) \
673  makeTemplatePatchTypeField \
674  ( \
675  fvPatchScalarField, \
676  type##FvPatchScalarField \
677  ); \
678  makeTemplatePatchTypeField \
679  ( \
680  fvPatchVectorField, \
681  type##FvPatchVectorField \
682  ); \
683  makeTemplatePatchTypeField \
684  ( \
685  fvPatchSphericalTensorField, \
686  type##FvPatchSphericalTensorField \
687  ); \
688  makeTemplatePatchTypeField \
689  ( \
690  fvPatchSymmTensorField, \
691  type##FvPatchSymmTensorField \
692  ); \
693  makeTemplatePatchTypeField \
694  ( \
695  fvPatchTensorField, \
696  type##FvPatchTensorField \
697  );
698 
700 #define makePatchFieldsTypeName(type) \
701  defineNamedTemplateTypeNameAndDebug(type##FvPatchScalarField, 0); \
702  defineNamedTemplateTypeNameAndDebug(type##FvPatchVectorField, 0); \
703  defineNamedTemplateTypeNameAndDebug(type##FvPatchSphericalTensorField, 0);\
704  defineNamedTemplateTypeNameAndDebug(type##FvPatchSymmTensorField, 0); \
705  defineNamedTemplateTypeNameAndDebug(type##FvPatchTensorField, 0)
706 
708 #define makePatchTypeFieldTypedefs(type) \
709  typedef type##FvPatchField<scalar> type##FvPatchScalarField; \
710  typedef type##FvPatchField<vector> type##FvPatchVectorField; \
711  typedef type##FvPatchField<sphericalTensor> \
712  type##FvPatchSphericalTensorField; \
713  typedef type##FvPatchField<symmTensor> type##FvPatchSymmTensorField; \
714  typedef type##FvPatchField<tensor> type##FvPatchTensorField;
715 
716 
717 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
718 
719 #endif
720 
721 // ************************************************************************* //
const fvPatch & patch() const
Return patch.
Definition: fvPatchField.H:339
virtual void evaluate(const Pstream::commsTypes commsType=Pstream::blocking)
Evaluate the patch field, sets Updated to false.
Definition: fvPatchField.C:332
virtual tmp< fvPatchField< Type > > clone() const
Construct and return a clone.
Definition: fvPatchField.H:218
virtual void autoMap(const fvPatchFieldMapper &)
Map (and resize as needed) from self given a mapping object.
Definition: fvPatchField.C:240
virtual tmp< Field< Type > > gradientBoundaryCoeffs() const
Return the matrix source coefficients corresponding to the.
Definition: fvPatchField.H:495
virtual bool coupled() const
Return true if this patch field is coupled.
Definition: fvPatchField.H:327
declareRunTimeSelectionTable(tmp, fvPatchField, patch,(const fvPatch &p, const DimensionedField< Type, volMesh > &iF),(p, iF))
const word & patchType() const
Optional patch type.
Definition: fvPatchField.H:358
A list of keyword definitions, which are a keyword followed by any number of values (e...
Definition: dictionary.H:137
static int disallowGenericFvPatchField
Debug switch to disallow the use of genericFvPatchField.
Definition: fvPatchField.H:118
virtual tmp< Field< Type > > patchInternalField() const
Return internal field next to patch as patch field.
Definition: fvPatchField.C:225
commsTypes
Types of communications.
Definition: UPstream.H:64
const Field< Type > & primitiveField() const
Return internal field reference.
Definition: fvPatchField.H:352
virtual void operator*=(const fvPatchField< scalar > &)
Definition: fvPatchField.C:439
A finiteVolume patch using a polyPatch and a fvBoundaryMesh.
Definition: fvPatch.H:61
Abstract base class with a fat-interface to all derived classes covering all possible ways in which t...
Definition: fvPatchField.H:65
virtual void initEvaluate(const Pstream::commsTypes commsType=Pstream::blocking)
Initialise the evaluation of the patch field.
Definition: fvPatchField.H:439
static const word & calculatedType()
Return the type of the calculated for of fvPatchField.
virtual bool assignable() const
Return true if the value of the patch field.
Definition: fvPatchField.H:321
virtual void operator==(const fvPatchField< Type > &)
Definition: fvPatchField.C:562
virtual tmp< Field< Type > > patchNeighbourField() const
Return patchField on the opposite patch of a coupled patch.
Definition: fvPatchField.H:431
virtual tmp< Field< Type > > valueInternalCoeffs(const tmp< Field< scalar >> &) const
Return the matrix diagonal coefficients corresponding to the.
Definition: fvPatchField.H:454
Pre-declare SubField and related Field type.
Definition: Field.H:57
A class for handling words, derived from string.
Definition: word.H:59
virtual tmp< Field< Type > > gradientInternalCoeffs() const
Return the matrix diagonal coefficients corresponding to the.
Definition: fvPatchField.H:475
virtual void operator/=(const fvPatchField< scalar > &)
Definition: fvPatchField.C:456
Foam::fvPatchFieldMapper.
This boundary condition is not designed to be evaluated; it is assmued that the value is assigned via...
bool updated() const
Return true if the boundary condition has already been updated.
Definition: fvPatchField.H:370
virtual void rmap(const fvPatchField< Type > &, const labelList &)
Reverse map the given fvPatchField onto this fvPatchField.
Definition: fvPatchField.C:302
A special matrix type and solver, designed for finite volume solutions of scalar equations. Face addressing is used to make all matrix assembly and solution loops vectorise.
Definition: fvPatchField.H:71
static tmp< fvPatchField< Type > > New(const word &, const fvPatch &, const DimensionedField< Type, volMesh > &)
Return a pointer to a new patchField created on freestore given.
virtual void manipulateMatrix(fvMatrix< Type > &matrix)
Manipulate matrix.
Definition: fvPatchField.C:345
virtual bool fixesValue() const
Return true if this patch field fixes a value.
Definition: fvPatchField.H:314
void check(const fvPatchField< Type > &) const
Check fvPatchField<Type> against given fvPatchField<Type>
Definition: fvPatchField.C:205
virtual tmp< Field< Type > > snGrad() const
Return patch-normal gradient.
Definition: fvPatchField.C:217
An Ostream is an abstract base class for all output systems (streams, files, token lists...
Definition: Ostream.H:53
virtual void operator-=(const fvPatchField< Type > &)
Definition: fvPatchField.C:428
virtual void operator+=(const fvPatchField< Type > &)
Definition: fvPatchField.C:417
const objectRegistry & db() const
Return local objectRegistry.
Definition: fvPatchField.C:198
TypeName("fvPatchField")
Runtime type information.
calculatedFvPatchField< Type > Calculated
Definition: fvPatchField.H:111
void writeEntryIfDifferent(Ostream &os, const word &entryName, const EntryType &value1, const EntryType &value2) const
Helper function to write the keyword and entry only if the.
Definition: fvPatchField.C:378
virtual void updateCoeffs()
Update the coefficients associated with the patch field.
Definition: fvPatchField.C:312
virtual void operator=(const UList< Type > &)
Definition: fvPatchField.C:396
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
static tmp< fvPatchField< Type > > NewCalculatedType(const fvPatch &)
Return a pointer to a new calculatedFvPatchField created on.
virtual void updateWeightedCoeffs(const scalarField &weights)
Update the coefficients associated with the patch field.
Definition: fvPatchField.C:319
A class for managing temporary objects.
Definition: PtrList.H:54
Registry of regIOobjects.
#define NotImplemented
Issue a FatalErrorIn for a function not currently implemented.
Definition: error.H:366
virtual tmp< Field< Type > > valueBoundaryCoeffs(const tmp< Field< scalar >> &) const
Return the matrix source coefficients corresponding to the.
Definition: fvPatchField.H:465
fvPatchField(const fvPatch &, const DimensionedField< Type, volMesh > &)
Construct from patch and internal field.
Definition: fvPatchField.C:36
bool manipulatedMatrix() const
Return true if the matrix has already been manipulated.
Definition: fvPatchField.H:376
const DimensionedField< Type, volMesh > & internalField() const
Return dimensioned internal field reference.
Definition: fvPatchField.H:346
Namespace for OpenFOAM.
virtual void write(Ostream &) const
Write.
Definition: fvPatchField.C:363