26 #include "BlendedInterfacialModel.H"
32 template<
class modelType>
33 template<
class GeometricField>
39 forAll(pair_.phase1().phi().boundaryField(), patchI)
43 isA<fixedValueFvsPatchScalarField>
45 pair_.phase1().phi().boundaryField()[patchI]
49 field.boundaryField()[patchI]
50 = pTraits<typename GeometricField::value_type>::zero;
58 template<
class modelType>
61 const phasePair::dictTable& modelTable,
62 const blendingMethod& blending,
63 const phasePair& pair,
64 const orderedPhasePair& pair1In2,
65 const orderedPhasePair& pair2In1,
66 const bool correctFixedFluxBCs
73 correctFixedFluxBCs_(correctFixedFluxBCs)
75 if (modelTable.found(
pair_))
87 if (modelTable.found(pair1In2_))
93 modelTable[pair1In2_],
99 if (modelTable.found(pair2In1_))
105 modelTable[pair2In1_],
115 template<
class modelType>
122 template<
class modelType>
126 tmp<volScalarField>
f1, f2;
128 if (model_.valid() || model1In2_.valid())
130 f1 = blending_.f1(pair1In2_.dispersed(), pair2In1_.dispersed());
133 if (model_.valid() || model2In1_.valid())
135 f2 = blending_.f2(pair1In2_.dispersed(), pair2In1_.dispersed());
138 tmp<volScalarField>
x
144 modelType::typeName +
":K",
145 pair_.phase1().mesh().time().timeName(),
146 pair_.phase1().mesh(),
151 pair_.phase1().mesh(),
158 x() += model_->K()*(
f1() - f2());
161 if (model1In2_.valid())
163 x() += model1In2_->K()*(1 -
f1);
166 if (model2In1_.valid())
168 x() += model2In1_->K()*f2;
174 && (model_.valid() || model1In2_.valid() || model2In1_.valid())
177 correctFixedFluxBCs(
x());
184 template<
class modelType>
188 tmp<surfaceScalarField>
f1, f2;
190 if (model_.valid() || model1In2_.valid())
194 blending_.f1(pair1In2_.dispersed(), pair2In1_.dispersed())
198 if (model_.valid() || model2In1_.valid())
202 blending_.f2(pair1In2_.dispersed(), pair2In1_.dispersed())
206 tmp<surfaceScalarField>
x
212 modelType::typeName +
":Kf",
213 pair_.phase1().mesh().time().timeName(),
214 pair_.phase1().mesh(),
219 pair_.phase1().mesh(),
226 x() += model_->Kf()*(
f1() - f2());
229 if (model1In2_.valid())
231 x() += model1In2_->Kf()*(1 -
f1);
234 if (model2In1_.valid())
236 x() += model2In1_->Kf()*f2;
242 && (model_.valid() || model1In2_.valid() || model2In1_.valid())
245 correctFixedFluxBCs(
x());
252 template<
class modelType>
257 tmp<volScalarField>
f1, f2;
259 if (model_.valid() || model1In2_.valid())
261 f1 = blending_.f1(pair1In2_.dispersed(), pair2In1_.dispersed());
264 if (model_.valid() || model2In1_.valid())
266 f2 = blending_.f2(pair1In2_.dispersed(), pair2In1_.dispersed());
269 tmp<GeometricField<Type, fvPatchField, volMesh> >
x
271 new GeometricField<Type, fvPatchField, volMesh>
275 modelType::typeName +
":F",
276 pair_.phase1().mesh().time().timeName(),
277 pair_.phase1().mesh(),
282 pair_.phase1().mesh(),
283 dimensioned<Type>(
"zero", modelType::dimF, pTraits<Type>::zero)
289 x() += model_->F()*(
f1() - f2());
292 if (model1In2_.valid())
294 x() += model1In2_->F()*(1 -
f1);
297 if (model2In1_.valid())
299 x() -= model2In1_->F()*f2;
305 && (model_.valid() || model1In2_.valid() || model2In1_.valid())
308 correctFixedFluxBCs(
x());
315 template<
class modelType>
319 tmp<surfaceScalarField>
f1, f2;
321 if (model_.valid() || model1In2_.valid())
325 blending_.f1(pair1In2_.dispersed(), pair2In1_.dispersed())
329 if (model_.valid() || model2In1_.valid())
333 blending_.f2(pair1In2_.dispersed(), pair2In1_.dispersed())
337 tmp<surfaceScalarField>
x
343 modelType::typeName +
":Ff",
344 pair_.phase1().mesh().time().timeName(),
345 pair_.phase1().mesh(),
350 pair_.phase1().mesh(),
357 x() += model_->Ff()*(
f1() - f2());
360 if (model1In2_.valid())
362 x() += model1In2_->Ff()*(1 -
f1);
365 if (model2In1_.valid())
367 x() -= model2In1_->Ff()*f2;
373 && (model_.valid() || model1In2_.valid() || model2In1_.valid())
376 correctFixedFluxBCs(
x());
383 template<
class modelType>
387 tmp<volScalarField>
f1, f2;
389 if (model_.valid() || model1In2_.valid())
391 f1 = blending_.f1(pair1In2_.dispersed(), pair2In1_.dispersed());
394 if (model_.valid() || model2In1_.valid())
396 f2 = blending_.f2(pair1In2_.dispersed(), pair2In1_.dispersed());
399 tmp<volScalarField>
x
405 modelType::typeName +
":D",
406 pair_.phase1().mesh().time().timeName(),
407 pair_.phase1().mesh(),
412 pair_.phase1().mesh(),
419 x() += model_->D()*(
f1() - f2());
422 if (model1In2_.valid())
424 x() += model1In2_->D()*(1 -
f1);
427 if (model2In1_.valid())
429 x() += model2In1_->D()*f2;
435 && (model_.valid() || model1In2_.valid() || model2In1_.valid())
438 correctFixedFluxBCs(
x());
445 template<
class modelType>
448 const class phaseModel& phase
452 &phase == &(pair_.phase1())
454 : model2In1_.valid();
458 template<
class modelType>
461 const class phaseModel& phase
464 return &phase == &(pair_.phase1()) ? model1In2_ : model2In1_;