28 #include "BlendedInterfacialModel.H" 32 template<
class modelType>
61 template<
class modelType>
64 const word& modelName,
73 dictTable modelDicts(lookup(modelName));
75 generatePairs(modelDicts);
77 createSubModels(modelDicts, models);
81 template<
class modelType>
84 const word& modelName,
91 const bool correctFixedFluxBCs
98 modelTypeTable tempModels;
99 generatePairsAndSubModels(modelName, tempModels);
103 blendingMethods_.found(modelName)
104 ? blendingMethods_[modelName]
105 : blendingMethods_.found(member(modelName))
106 ? blendingMethods_[member(modelName)]
107 : blendingMethods_[
"default"]
121 const phasePairKey
key(iter.key().first(), iter.key().second());
122 const phasePairKey key1In2(
key.first(),
key.second(),
true);
123 const phasePairKey key2In1(
key.second(),
key.first(),
true);
128 autoPtr<BlendedInterfacialModel<modelType>>
130 new BlendedInterfacialModel<modelType>
132 phaseModels_[
key.first()],
133 phaseModels_[
key.second()],
135 tempModels.found(
key ) ? tempModels[
key ] : noModel,
136 tempModels.found(key1In2) ? tempModels[key1In2] : noModel,
137 tempModels.found(key2In1) ? tempModels[key2In1] : noModel,
143 if (!phasePairs_.found(
key))
152 phaseModels_[
key.first()],
153 phaseModels_[
key.second()]
162 template<
class modelType>
165 const word& modelName,
168 Pair<autoPtr<modelType>>,
172 const bool correctFixedFluxBCs
181 const phaseModel& phase = phaseModels_[
phasei];
183 modelTypeTable tempModels;
184 generatePairsAndSubModels
191 forAllIter(
typename modelTypeTable, tempModels, tempModelIter)
193 const phasePairKey&
key(tempModelIter.key());
195 if (!models.found(
key))
200 Pair<autoPtr<modelType>>()
204 const phasePair& pair = phasePairs_[
key];
206 if (!pair.contains(phase))
209 <<
"A two-sided " << modelType::typeName <<
" was " 210 <<
"specified for the " << phase.name() <<
" side of the " 211 << pair <<
" pair, but that phase is not part of that pair." 215 models[
key][pair.index(phase)].reset(tempModelIter().ptr());
221 template<
class GeoField>
224 const phaseModel& phase,
225 const word& fieldName,
227 PtrList<GeoField>& fieldList
230 if (fieldList.set(phase.index()))
232 fieldList[phase.index()] +=
field;
249 template<
class GeoField>
252 const phaseModel& phase,
253 const word& fieldName,
254 const GeoField&
field,
255 PtrList<GeoField>& fieldList
262 template<
class GeoField>
266 const word& fieldName,
290 template<
class GeoField>
293 const phaseModel& phase,
294 const word& fieldName,
295 const GeoField&
field,
296 HashPtrTable<GeoField>& fieldTable
299 addField(phase, fieldName, tmp<GeoField>(
field), fieldTable);
305 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
315 if (fieldList.set(
phasei))
330 this->mesh_.time().timeName(),
341 template<
class Type,
template<
class>
class PatchField,
class GeoMesh>
345 const dimensionSet& dims,
346 HashPtrTable<GeometricField<Type, PatchField, GeoMesh>>& fieldTable
351 const phaseModel& phase = this->phaseModels_[
phasei];
353 if (fieldTable.
set(phase.name()))
361 new GeometricField<Type, PatchField, GeoMesh>
366 this->mesh_.time().timeName(),
370 dimensioned<Type>(dims,
Zero)
377 template<
class modelType>
415 template<
class modelType>
435 template<
class modelType>
438 const phaseModel& dispersed,
439 const phaseModel& continuous
446 template<
class modelType>
457 template<
class modelType>
489 template<
class modelType>
497 BlendedInterfacialModel<modelType>::typeName,
502 if (
mesh().foundObject<BlendedInterfacialModel<modelType>>(
name))
513 BlendedInterfacialModel<modelType>::typeName,
const BlendedInterfacialModel< modelType > & lookupBlendedSubModel(const phasePair &key) const
Return a blended sub model between a phase pair.
#define forAllIter(Container, container, iter)
Iterate across all elements in the container object.
const Type & lookupObject(const word &name, const bool recursive=false) const
Lookup and return const reference to the object of the given Type. Fatal if not found or the wrong ty...
errorManipArg< error, int > exit(error &err, const int errNo=1)
error FatalError
Error stream (stdout output on all processes), with additional 'FOAM FATAL ERROR' header text and sta...
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
bool found(const Key &key) const
Same as contains()
phasePairKey::hasher hash
Alternative name for functor.
std::enable_if< std::is_same< bool, TypeT >::value, bool >::type set(const label i, bool val=true)
A bitSet::set() method for a list of bool.
phasePairTable phasePairs_
Phase pairs.
bool foundBlendedSubModel(const phasePair &key) const
Check availability of a blended sub model for a given phase pair.
tmp< DimensionedField< TypeR, GeoMesh > > New(const tmp< DimensionedField< TypeR, GeoMesh >> &tf1, const word &name, const dimensionSet &dimensions, const bool initCopy=false)
Global function forwards to reuseTmpDimensionedField::New.
Generic GeometricField class.
Generic dimensioned Type class.
A HashTable of pointers to objects of type <T>, with deallocation management of the pointers...
void createSubModels(const dictTable &modelDicts, HashTable< autoPtr< modelType >, phasePairKey, phasePairKey::hash > &models)
Generate pairs and sub-model tables.
#define forAllConstIter(Container, container, iter)
Iterate across all elements in the container object.
Hashing functor for phasePairKey.
#define forAll(list, i)
Loop across all elements in list.
static word groupName(StringType base, const word &group)
Create dot-delimited name.group string.
Dimension set for the base types, which can be used to implement rigorous dimension checking for alge...
word name(const expressions::valueTypeCode typeCode)
A word representation of a valueTypeCode. Empty for expressions::valueTypeCode::INVALID.
A class for handling words, derived from Foam::string.
bool set(const Key &key, T *ptr)
Assign a new entry, overwrites existing.
bool foundSubModel(const phasePair &key) const
Check availability of a sub model for a given phase pair.
A HashTable similar to std::unordered_map.
const modelType & lookupSubModel(const phasePair &key) const
Return a sub model between a phase pair.
An ordered or unorder pair of phase names. Typically specified as follows.
void fillFields(const word &name, const dimensionSet &dims, PtrList< GeometricField< Type, PatchField, GeoMesh >> &fieldList) const
Fill up gaps in a phase-indexed list of fields with zeros.
void generatePairsAndSubModels(const word &modelName, HashTable< autoPtr< modelType >, phasePairKey, phasePairKey::hash > &models)
Generate pairs and sub-model tables.
void addField(const phaseModel &phase, const word &fieldName, tmp< GeoField > field, PtrList< GeoField > &fieldList) const
Add the field to a phase-indexed list, with the given name,.
auto key(const Type &t) -> typename std::enable_if< std::is_enum< Type >::value, typename std::underlying_type< Type >::type >::type
A list of pointers to objects of type <T>, with allocation/deallocation management of the pointers...
Single incompressible phase derived from the phase-fraction. Used as part of the multiPhaseMixture fo...
const word & name() const
bool foundObject(const word &name, const bool recursive=false) const
Is the named Type found?
Generic mesh wrapper used by volMesh, surfaceMesh, pointMesh etc.
A class for managing temporary objects.
Defines the attributes of an object for which implicit objectRegistry management is supported...
Single incompressible phase derived from the phase-fraction. Used as part of the multiPhaseMixture fo...
Description for mass transfer between a pair of phases. The direction of the mass transfer is from th...
const word & name() const
static constexpr const zero Zero
Global zero (0)