speciesSorptionFvPatchScalarField.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 | www.openfoam.com
6 \\/ M anipulation |
7-------------------------------------------------------------------------------
8 Copyright (C) 2022 OpenCFD Ltd.
9-------------------------------------------------------------------------------
10License
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
26Class
27 Foam::speciesSorptionFvPatchScalarField
28
29Group
30 grpGenericBoundaryConditions
31
32Description
33 This boundary condition provides a first-order zero-gradient
34 condition for a given scalar field to model time-dependent
35 adsorption-desorption processes.
36
37 \f[
38 \frac{d c}{d t} = k_{ads} (c_{eq} - c_{abs})
39 \f]
40
41 where
42 \vartable
43 c_{eq} | Equilibrium concentration
44 c_{abs} | Absorbed at wall
45 k_{ads} | Adsorption rate constant [1/s]
46 \endvartable
47
48 \f[
49 c_{eq} = c_{max} \frac{k_l \, c_{int}}{1 + k_l \, c_{int}}
50 \f]
51
52 where
53 \vartable
54 c_{max} | Maximum concentration
55 k_l | Langmuir constant
56 c_{int} | Local cell value concentration
57 \endvartable
58
59Usage
60 Example of the boundary condition specification:
61 \verbatim
62 <patchName>
63 {
64 // Mandatory entries
65 type speciesSorption;
66 equilibriumModel <word>;
67 kinematicModel <word>;
68 kabs <scalar>;
69 kl <scalar>;
70 max <scalar>;
71 thickness <PatchFunction1<scalar>>;
72 rhoS <scalar>;
73
74 // Optional entries
75 dfldp <scalarField>;
76 mass <scalarField>;
77 pName <word>;
78
79 // Inherited entries
80 ...
81 }
82 \endverbatim
83
84 where the entries mean:
85 \table
86 Property | Description | Type | Reqd | Deflt
87 type | Type name: speciesSorption | word | yes | -
88 equilibriumModel | Equilibrium model | word | yes | -
89 kinematicModel | Kinematic model | word | yes | -
90 kabs | Adsorption rate constant [1/s] | scalar | yes | -
91 kl | Langmuir constant [1/Pa] | scalar | yes | -
92 max | Maximum concentation at wall [mol/kg] | scalar | yes | -
93 thickness| Solid thickness along the patch <!--
94 --> | PatchFunction1<scalar> | yes | -
95 rhoS | Solid density | scalar | yes | -
96 dfldp | Source on cells next to patch | scalarField | no | Zero
97 mass | Absorbed mass per kg of absorbent [mol/kg] <!--
98 --> | scalarField | no | Zero
99 pName | Name of operand pressure field | word | no | p
100 \endtable
101
102 Options for the \c equilibriumModel entry:
103 \verbatim
104 Langmuir | Langmuir model
105 \endverbatim
106
107 Options for the \c kinematicModel entry:
108 \verbatim
109 PseudoFirstOrder | Pseudo first-order model
110 \endverbatim
111
112 The inherited entries are elaborated in:
113 - \link zeroGradientFvPatchFields.H \endlink
114 - \link PatchFunction1.H \endlink
115
116SourceFiles
117 speciesSorptionFvPatchScalarField.C
118
119\*---------------------------------------------------------------------------*/
120
121#ifndef Foam_speciesSorptionFvPatchScalarField_H
122#define Foam_speciesSorptionFvPatchScalarField_H
123
124#include "boundarySourcePatch.H"
126#include "PatchFunction1.H"
127
128// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
129
130namespace Foam
131{
132
133/*---------------------------------------------------------------------------*\
134 Class speciesSorptionFvPatchScalarField Declaration
135\*---------------------------------------------------------------------------*/
136
137class speciesSorptionFvPatchScalarField
138:
139 public zeroGradientFvPatchField<scalar>,
140 public boundarySourcePatch
141{
142public:
143
144 // Public Enumeration
145
146 //- Options for the equilibrum model
147 enum equilibriumModelType : char
148 {
149 LANGMUIR = 0
150 };
151
152 //- Options for the kinematic model
153 enum kineticModelType : char
154 {
156 };
157
158 //- Names for equilibriumModelType
159 static const Enum<equilibriumModelType> equilibriumModelTypeNames;
160
161 //- Names for kineticModelType
162 static const Enum<kineticModelType> kinematicModelTypeNames;
163
164
165private:
166
167 // Private Data
168
169 //- Equilibrium model
170 enum equilibriumModelType equilibriumModel_;
171
172 //- Kinematic model
173 enum kineticModelType kinematicModel_;
174
175 //- Solid thickness along the patch
176 autoPtr<PatchFunction1<scalar>> thicknessPtr_;
177
178 //- Adsorption rate constant [1/sec]
179 scalar kabs_;
180
181 //- Langmuir adsorption constant [1/Pa]
182 scalar kl_;
183
184 //- Maximum density on patch [mol/kg]
185 scalar max_;
186
187 //- Solid density
188 scalar rhoS_;
189
190 //- Name of operand pressure field
191 word pName_;
192
193 //- Source on cells next to patch [mol/kg/sec]
194 scalarField dfldp_;
195
196 //- Absorbed mass per kg of absorbent [mol/kg]
197 scalarField mass_;
198
199
200 // Private Member Functions
201
202 //- Calculate the mole fraction fields
203 tmp<scalarField> calcMoleFractions() const;
204
205 //- Lookup (or create) field for output
206 volScalarField& field(const word&, const dimensionSet&) const;
207
208
209public:
210
211 //- Runtime type information
212 TypeName("speciesSorption");
213
214
215 // Constructors
216
217 //- Construct from patch and internal field
219 (
220 const fvPatch&,
221 const DimensionedField<scalar, volMesh>&
222 );
223
224 //- Construct from patch, internal field and dictionary
226 (
227 const fvPatch&,
228 const DimensionedField<scalar, volMesh>&,
229 const dictionary&
230 );
231
232 //- Construct by mapping given
233 //- speciesSorptionFvPatchScalarField onto a new patch
235 (
237 const fvPatch&,
239 const fvPatchFieldMapper&
240 );
241
242 //- Construct as copy
244 (
246 );
247
248 //- Construct and return a clone
250 {
254 );
256
257 //- Construct as copy setting internal field reference
259 (
262 );
263
264 //- Construct and return a clone setting internal field reference
266 (
268 ) const
269 {
271 (
273 );
274 }
275
276
277 // Member Functions
278
279 // Mapping
280
281 //- Map (and resize as needed) from self given a mapping object
282 virtual void autoMap
283 (
284 const fvPatchFieldMapper&
285 );
286
287 //- Reverse map the given fvPatchField onto this fvPatchField
288 virtual void rmap
289 (
290 const fvPatchScalarField&,
291 const labelList&
292 );
293
294
295 // Evaluation
296
297 //- Source of cells next to the patch
298 virtual tmp<scalarField> patchSource() const;
299
300 //- Access to mass
301 tmp<scalarField> mass() const;
302
303 //- Update the coefficients associated with the patch field
304 virtual void updateCoeffs();
305
306
307 // I-O
308
309 //- Write
310 virtual void write(Ostream&) const;
312
313
314// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
315
316} // End namespace Foam
317
318// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
319
320#endif
321
322// ************************************************************************* //
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
Enum is a wrapper around a list of names/values that represent particular enumeration (or int) values...
Definition: Enum.H:61
An Ostream is an abstract base class for all output systems (streams, files, token lists,...
Definition: Ostream.H:62
Pointer management similar to std::unique_ptr, with some additional methods and type checking.
Definition: autoPtr.H:66
Pure virtual class for sources on cells next to patches.
A list of keyword definitions, which are a keyword followed by a number of values (eg,...
Definition: dictionary.H:126
Dimension set for the base types, which can be used to implement rigorous dimension checking for alge...
Definition: dimensionSet.H:109
A FieldMapper for finite-volume patch fields.
A finiteVolume patch using a polyPatch and a fvBoundaryMesh.
Definition: fvPatch.H:71
This boundary condition provides a first-order zero-gradient condition for a given scalar field to mo...
virtual void autoMap(const fvPatchFieldMapper &)
Map (and resize as needed) from self given a mapping object.
static const Enum< kineticModelType > kinematicModelTypeNames
Names for kineticModelType.
virtual tmp< fvPatchScalarField > clone(const DimensionedField< scalar, volMesh > &iF) const
Construct and return a clone setting internal field reference.
speciesSorptionFvPatchScalarField(const fvPatch &, const DimensionedField< scalar, volMesh > &)
Construct from patch and internal field.
virtual tmp< fvPatchScalarField > clone() const
Construct and return a clone.
virtual void rmap(const fvPatchScalarField &, const labelList &)
Reverse map the given fvPatchField onto this fvPatchField.
virtual void updateCoeffs()
Update the coefficients associated with the patch field.
TypeName("speciesSorption")
Runtime type information.
virtual tmp< scalarField > patchSource() const
Source of cells next to the patch.
tmp< scalarField > mass() const
Access to mass.
static const Enum< equilibriumModelType > equilibriumModelTypeNames
Names for equilibriumModelType.
A class for managing temporary objects.
Definition: tmp.H:65
A class for handling words, derived from Foam::string.
Definition: word.H:68
This boundary condition applies a zero-gradient condition from the patch internal field onto the patc...
rDeltaTY field()
Namespace for OpenFOAM.
GeometricField< scalar, fvPatchField, volMesh > volScalarField
Definition: volFieldsFwd.H:82
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
runTime write()
#define TypeName(TypeNameString)
Declare a ClassName() with extra virtual type info.
Definition: typeInfo.H:73