alphaContactAngleFvPatchScalarField.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 | Copyright (C) 2011-2013 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 \*---------------------------------------------------------------------------*/
25 
28 #include "fvPatchFieldMapper.H"
29 #include "volMesh.H"
30 
31 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
32 
33 namespace Foam
34 {
35  defineTypeNameAndDebug(alphaContactAngleFvPatchScalarField, 0);
36 
37  template<>
38  const char* Foam::NamedEnum
39  <
41  4
42  >::names[] =
43  {
44  "none",
45  "gradient",
46  "zeroGradient",
47  "alpha"
48  };
49 }
50 
51 
52 const Foam::NamedEnum
53 <
55  4
57 
58 
59 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
60 
62 (
63  const fvPatch& p,
65 )
66 :
67  fixedGradientFvPatchScalarField(p, iF),
68  limit_(lcZeroGradient)
69 {}
70 
71 
73 (
75  const fvPatch& p,
77  const fvPatchFieldMapper& mapper
78 )
79 :
80  fixedGradientFvPatchScalarField(acpsf, p, iF, mapper),
81  limit_(acpsf.limit_)
82 {}
83 
84 
86 (
87  const fvPatch& p,
89  const dictionary& dict
90 )
91 :
92  fixedGradientFvPatchScalarField(p, iF),
93  limit_(limitControlNames_.read(dict.lookup("limit")))
94 {
95  if (dict.found("gradient"))
96  {
97  gradient() = scalarField("gradient", dict, p.size());
98  fixedGradientFvPatchScalarField::updateCoeffs();
99  fixedGradientFvPatchScalarField::evaluate();
100  }
101  else
102  {
103  fvPatchField<scalar>::operator=(patchInternalField());
104  gradient() = 0.0;
105  }
106 }
107 
108 
110 (
112 )
113 :
114  fixedGradientFvPatchScalarField(acpsf),
115  limit_(acpsf.limit_)
116 {}
117 
118 
120 (
123 )
124 :
125  fixedGradientFvPatchScalarField(acpsf, iF),
126  limit_(acpsf.limit_)
127 {}
128 
129 
130 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
131 
133 (
134  const Pstream::commsTypes
135 )
136 {
137  if (limit_ == lcGradient)
138  {
139  gradient() =
140  patch().deltaCoeffs()
141  *(
142  max(min
143  (
144  *this + gradient()/patch().deltaCoeffs(),
145  scalar(1)), scalar(0)
146  ) - *this
147  );
148  }
149  else if (limit_ == lcZeroGradient)
150  {
151  gradient() = 0.0;
152  }
153 
154  fixedGradientFvPatchScalarField::evaluate();
155 
156  if (limit_ == lcAlpha)
157  {
158  scalarField::operator=(max(min(*this, scalar(1)), scalar(0)));
159  }
160 }
161 
162 
164 (
165  Ostream& os
166 ) const
167 {
169  os.writeKeyword("limit")
170  << limitControlNames_[limit_] << token::END_STATEMENT << nl;
171 }
172 
173 
174 // ************************************************************************* //
Foam::fvPatchField
Abstract base class with a fat-interface to all derived classes covering all possible ways in which t...
Definition: fvPatchField.H:65
Foam::alphaContactAngleFvPatchScalarField::limitControls
limitControls
Alpha limit options.
Definition: alphaContactAngleFvPatchScalarField.H:92
p
p
Definition: pEqn.H:62
volMesh.H
Foam::alphaContactAngleFvPatchScalarField::alphaContactAngleFvPatchScalarField
alphaContactAngleFvPatchScalarField(const fvPatch &, const DimensionedField< scalar, volMesh > &)
Construct from patch and internal field.
Definition: alphaContactAngleFvPatchScalarField.C:62
fvPatchFieldMapper.H
Foam::alphaContactAngleFvPatchScalarField::limitControlNames_
static const NamedEnum< limitControls, 4 > limitControlNames_
Definition: alphaContactAngleFvPatchScalarField.H:100
Foam::nl
static const char nl
Definition: Ostream.H:260
Foam::fvPatch
A finiteVolume patch using a polyPatch and a fvBoundaryMesh.
Definition: fvPatch.H:61
alphaContactAngleFvPatchScalarField.H
Foam::alphaContactAngleFvPatchScalarField::write
virtual void write(Ostream &) const
Write.
Definition: alphaContactAngleFvPatchScalarField.C:164
dict
dictionary dict
Definition: searchingEngine.H:14
Foam::dictionary
A list of keyword definitions, which are a keyword followed by any number of values (e....
Definition: dictionary.H:137
addToRunTimeSelectionTable.H
Macros for easy insertion into run-time selection tables.
Foam
Namespace for OpenFOAM.
Definition: combustionModel.C:30
Foam::alphaContactAngleFvPatchScalarField::limit_
limitControls limit_
Definition: alphaContactAngleFvPatchScalarField.H:101
Foam::alphaContactAngleFvPatchScalarField
Abstract base class for alphaContactAngle boundary conditions.
Definition: alphaContactAngleFvPatchScalarField.H:81
Foam::max
dimensioned< Type > max(const dimensioned< Type > &, const dimensioned< Type > &)
Foam::UPstream::commsTypes
commsTypes
Types of communications.
Definition: UPstream.H:64
scalarField
volScalarField scalarField(fieldObject, mesh)
Foam::Ostream::writeKeyword
Ostream & writeKeyword(const keyType &)
Write the keyword followed by an appropriate indentation.
Definition: Ostream.C:59
Foam::fvPatchFieldMapper
Foam::fvPatchFieldMapper.
Definition: fvPatchFieldMapper.H:45
Foam::Ostream
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
Definition: Ostream.H:53
Foam::alphaContactAngleFvPatchScalarField::evaluate
virtual void evaluate(const Pstream::commsTypes commsType=Pstream::blocking)
Evaluate the patch field.
Definition: alphaContactAngleFvPatchScalarField.C:133
Foam::defineTypeNameAndDebug
defineTypeNameAndDebug(combustionModel, 0)
Foam::min
dimensioned< Type > min(const dimensioned< Type > &, const dimensioned< Type > &)
write
Tcoeff write()
Foam::NamedEnum
Initialise the NamedEnum HashTable from the static list of names.
Definition: NamedEnum.H:52
Foam::DimensionedField
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
Definition: DimensionedField.H:51