26 #include "BlendedInterfacialModel.H"
32 template<
class ModelType>
33 template<
class GeometricField>
39 forAll(phase1_.phi()->boundaryField(), patchI)
43 isA<fixedValueFvsPatchScalarField>
45 phase1_.phi()->boundaryField()[patchI]
49 field.boundaryField()[patchI]
50 = pTraits<typename GeometricField::value_type>::zero;
58 template<
class ModelType>
63 const blendingMethod& blending,
64 autoPtr<ModelType> model,
65 autoPtr<ModelType> model1In2,
66 autoPtr<ModelType> model2In1,
67 const bool correctFixedFluxBCs
74 model1In2_(model1In2),
75 model2In1_(model2In1),
76 correctFixedFluxBCs_(correctFixedFluxBCs)
80 template<
class ModelType>
84 const blendingMethod& blending,
85 const phasePair& pair,
86 const orderedPhasePair& pair1In2,
87 const orderedPhasePair& pair2In1,
88 const bool correctFixedFluxBCs
94 correctFixedFluxBCs_(correctFixedFluxBCs)
96 if (modelTable.found(pair))
108 if (modelTable.found(pair1In2))
114 modelTable[pair1In2],
120 if (modelTable.found(pair2In1))
126 modelTable[pair2In1],
136 template<
class ModelType>
143 template<
class ModelType>
146 const class phaseModel& phase
152 : model2In1_.valid();
156 template<
class ModelType>
159 const class phaseModel& phase
162 return &phase == &(phase1_) ? model1In2_ : model2In1_;
166 template<
class ModelType>
170 tmp<volScalarField>
f1, f2;
172 if (model_.valid() || model1In2_.valid())
174 f1 = blending_.f1(phase1_, phase2_);
177 if (model_.valid() || model2In1_.valid())
179 f2 = blending_.f2(phase1_, phase2_);
182 tmp<volScalarField>
x
188 ModelType::typeName +
":K",
189 phase1_.mesh().time().timeName(),
202 x() += model_->K()*(scalar(1) -
f1() - f2());
204 if (model1In2_.valid())
206 x() += model1In2_->K()*
f1;
208 if (model2In1_.valid())
210 x() += model2In1_->K()*f2;
216 && (model_.valid() || model1In2_.valid() || model2In1_.valid())
219 correctFixedFluxBCs(
x());
226 template<
class ModelType>
230 tmp<volScalarField>
f1, f2;
232 if (model_.valid() || model1In2_.valid())
234 f1 = blending_.f1(phase1_, phase2_);
237 if (model_.valid() || model2In1_.valid())
239 f2 = blending_.f2(phase1_, phase2_);
242 tmp<volScalarField>
x
248 ModelType::typeName +
":K",
249 phase1_.mesh().time().timeName(),
262 x() += model_->K(residualAlpha)*(scalar(1) -
f1() - f2());
264 if (model1In2_.valid())
266 x() += model1In2_->K(residualAlpha)*
f1;
268 if (model2In1_.valid())
270 x() += model2In1_->K(residualAlpha)*f2;
276 && (model_.valid() || model1In2_.valid() || model2In1_.valid())
279 correctFixedFluxBCs(
x());
286 template<
class ModelType>
290 tmp<surfaceScalarField>
f1, f2;
292 if (model_.valid() || model1In2_.valid())
296 blending_.f1(phase1_, phase2_)
300 if (model_.valid() || model2In1_.valid())
304 blending_.f2(phase1_, phase2_)
308 tmp<surfaceScalarField>
x
314 ModelType::typeName +
":Kf",
315 phase1_.mesh().time().timeName(),
328 x() += model_->Kf()*(scalar(1) -
f1() - f2());
331 if (model1In2_.valid())
333 x() += model1In2_->Kf()*
f1;
336 if (model2In1_.valid())
338 x() += model2In1_->Kf()*f2;
344 && (model_.valid() || model1In2_.valid() || model2In1_.valid())
347 correctFixedFluxBCs(
x());
354 template<
class ModelType>
359 tmp<volScalarField>
f1, f2;
361 if (model_.valid() || model1In2_.valid())
363 f1 = blending_.f1(phase1_, phase2_);
366 if (model_.valid() || model2In1_.valid())
368 f2 = blending_.f2(phase1_, phase2_);
371 tmp<GeometricField<Type, fvPatchField, volMesh> >
x
373 new GeometricField<Type, fvPatchField, volMesh>
377 ModelType::typeName +
":F",
378 phase1_.mesh().time().timeName(),
385 dimensioned<Type>(
"zero", ModelType::dimF, pTraits<Type>::zero)
391 x() += model_->F()*(scalar(1) -
f1() - f2());
394 if (model1In2_.valid())
396 x() += model1In2_->F()*
f1;
399 if (model2In1_.valid())
401 x() -= model2In1_->F()*f2;
407 && (model_.valid() || model1In2_.valid() || model2In1_.valid())
410 correctFixedFluxBCs(
x());
417 template<
class ModelType>
421 tmp<surfaceScalarField>
f1, f2;
423 if (model_.valid() || model1In2_.valid())
427 blending_.f1(phase1_, phase2_)
431 if (model_.valid() || model2In1_.valid())
435 blending_.f2(phase1_, phase2_)
439 tmp<surfaceScalarField>
x
445 ModelType::typeName +
":Ff",
446 phase1_.mesh().time().timeName(),
459 x() += model_->Ff()*(scalar(1) -
f1() - f2());
462 if (model1In2_.valid())
464 x() += model1In2_->Ff()*
f1;
467 if (model2In1_.valid())
469 x() -= model2In1_->Ff()*f2;
475 && (model_.valid() || model1In2_.valid() || model2In1_.valid())
478 correctFixedFluxBCs(
x());
485 template<
class ModelType>
489 tmp<volScalarField>
f1, f2;
491 if (model_.valid() || model1In2_.valid())
493 f1 = blending_.f1(phase1_, phase2_);
496 if (model_.valid() || model2In1_.valid())
498 f2 = blending_.f2(phase1_, phase2_);
501 tmp<volScalarField>
x
507 ModelType::typeName +
":D",
508 phase1_.mesh().time().timeName(),
521 x() += model_->D()*(scalar(1) -
f1() - f2());
523 if (model1In2_.valid())
525 x() += model1In2_->D()*
f1;
527 if (model2In1_.valid())
529 x() += model2In1_->D()*f2;
535 && (model_.valid() || model1In2_.valid() || model2In1_.valid())
538 correctFixedFluxBCs(
x());