38 template<
class BasePhaseSystem>
46 this->generatePairsAndSubModels(
"massTransferModel", massTransferModels_);
50 if (!dmdt_.found(iterModel()->pair()))
76 template<
class BasePhaseSystem>
81 const phasePairKey& keyik,
82 const phasePairKey& keyki,
101 if (massTransferModels_.found(keyik))
103 const autoPtr<interfaceCompositionModel>& interfacePtr =
104 massTransferModels_[keyik];
106 word speciesName = interfacePtr->transferSpecie();
108 const word species(speciesName.substr(0, speciesName.find(
'.')));
110 L -=
neg(dmdtNetki)*interfacePtr->L(species,
T);
113 if (massTransferModels_.found(keyki))
115 const autoPtr<interfaceCompositionModel>& interfacePtr =
116 massTransferModels_[keyki];
118 word speciesName = interfacePtr->transferSpecie();
120 const word species(speciesName.substr(0, speciesName.find(
'.')));
122 L +=
pos(dmdtNetki)*interfacePtr->L(species,
T);
131 template<
class BasePhaseSystem>
135 const phasePairKey& key
149 auto& dmdt = tdmdt.ref();
151 if (dmdt_.found(key))
160 template<
class BasePhaseSystem>
168 auto& eqn = teqn.ref();
172 const phaseModel&
phasei = iteri()();
176 for (++iterk; iterk != this->phaseModels_.end(); ++iterk)
178 if (iteri()().
name() != iterk()().
name())
180 const phaseModel& phasek = iterk()();
183 const phasePairKey keyik(
phasei.name(), phasek.name(),
true);
186 const phasePairKey keyki(phasek.name(),
phasei.name(),
true);
200 auto& dmdtNetki = tdmdtNetki.ref();
213 auto& Sp = tSp.ref();
226 auto& Su = tSu.ref();
229 if (massTransferModels_.found(keyik))
231 autoPtr<interfaceCompositionModel>& interfacePtr =
232 massTransferModels_[keyik];
234 dmdtNetki -= *dmdt_[keyik];
236 tmp<volScalarField> KSp =
244 tmp<volScalarField> KSu =
253 if (!KSp.valid() && !KSu.valid())
260 if (massTransferModels_.found(keyki))
262 autoPtr<interfaceCompositionModel>& interfacePtr =
263 massTransferModels_[keyki];
265 dmdtNetki += *dmdt_[keyki];
268 tmp<volScalarField> KSp =
276 tmp<volScalarField> KSu =
285 if (!KSp.valid() && !KSu.valid())
291 tmp<volScalarField>
L = calculateL(dmdtNetki, keyik, keyki,
T);
302 template<
class BasePhaseSystem>
310 auto& eqn = teqn.ref();
323 auto& Sp = tSp.ref();
336 auto& Su = tSu.ref();
340 const phasePair& pair = iter()();
342 const phaseModel&
phase1 = pair.phase1();
343 const phaseModel&
phase2 = pair.phase2();
345 const phasePairKey key12
352 if (massTransferModels_.found(key12))
354 autoPtr<interfaceCompositionModel>& interfacePtr =
355 massTransferModels_[key12];
357 tmp<volScalarField> KSp =
365 - this->coeffs(
phase1.name())
366 + this->coeffs(
phase2.name())
370 tmp<volScalarField> KSu =
378 - this->coeffs(
phase1.name())
379 + this->coeffs(
phase2.name())
384 if (!KSp.valid() && !KSu.valid())
389 - this->coeffs(
phase1.name())
390 + this->coeffs(
phase2.name())
395 const phasePairKey key21
402 if (massTransferModels_.found(key21))
404 autoPtr<interfaceCompositionModel>& interfacePtr =
405 massTransferModels_[key21];
407 tmp<volScalarField> KSp =
415 - this->coeffs(
phase1.name())
416 + this->coeffs(
phase2.name())
420 tmp<volScalarField> KSu =
428 - this->coeffs(
phase1.name())
429 + this->coeffs(
phase2.name())
434 if (!KSp.valid() && !KSu.valid())
439 - this->coeffs(
phase1.name())
440 + this->coeffs(
phase2.name())
452 template<
class BasePhaseSystem>
460 const phaseModel&
phasei = iteri()();
464 for (++iterk; iterk != this->phaseModels_.end(); ++iterk)
466 if (iteri()().
name() != iterk()().
name())
468 const phaseModel& phasek = iterk()();
471 const phasePairKey keyik(
phasei.name(), phasek.name(),
true);
474 const phasePairKey keyki(phasek.name(),
phasei.name(),
true);
476 if (massTransferModels_.found(keyik))
478 autoPtr<interfaceCompositionModel>& interfacePtr =
479 massTransferModels_[keyik];
481 tmp<volScalarField> Kexp = interfacePtr->Kexp(
T);
483 *dmdt_[keyik] = Kexp.ref();
487 if (massTransferModels_.found(keyki))
489 autoPtr<interfaceCompositionModel>& interfacePtr =
490 massTransferModels_[keyki];
493 const tmp<volScalarField> Kexp = interfacePtr->Kexp(
T);
495 *dmdt_[keyki] = Kexp.ref();
503 template<
class BasePhaseSystem>
512 bool includeDivU(
true);
516 const phasePair& pair = iter()();
518 const phaseModel&
phase1 = pair.phase1();
519 const phaseModel&
phase2 = pair.phase2();
524 tmp<volScalarField> tCoeffs1 = this->coeffs(
phase1.name());
527 tmp<volScalarField> tCoeffs2 = this->coeffs(
phase2.name());
531 const phasePairKey key12
538 tmp<volScalarField> tdmdt12(this->dmdt(key12));
541 if (massTransferModels_.found(key12))
543 autoPtr<interfaceCompositionModel>& interfacePtr =
544 massTransferModels_[key12];
546 tmp<volScalarField> KSu =
554 includeDivU = interfacePtr->includeDivU();
559 const phasePairKey key21
566 tmp<volScalarField> tdmdt21(this->dmdt(key21));
569 if (massTransferModels_.found(key21))
571 autoPtr<interfaceCompositionModel>& interfacePtr =
572 massTransferModels_[key21];
574 tmp<volScalarField> KSu =
582 includeDivU = interfacePtr->includeDivU();
615 scalar dmdt21 = dmdtNet[celli];
616 scalar coeffs12Cell = coeffs12[celli];
618 scalar alpha1Limited =
max(
min(
alpha1[celli], 1.0), 0.0);
621 SuPhase1[celli] += coeffs1[celli]*dmdt21;
627 if (coeffs12Cell > 0)
630 SpPhase1[celli] -= dmdt21*coeffs12Cell;
632 else if (coeffs12Cell < 0)
636 dmdt21*coeffs12Cell*alpha1Limited;
641 if (coeffs12Cell > 0)
645 dmdt21*coeffs12Cell*alpha1Limited;
647 else if (coeffs12Cell < 0)
650 SpPhase1[celli] -= dmdt21*coeffs12Cell;
658 scalar dmdt12 = -dmdtNet[celli];
659 scalar coeffs21Cell = -coeffs12[celli];
661 scalar alpha2Limited =
max(
min(
alpha2[celli], 1.0), 0.0);
664 SuPhase2[celli] += coeffs2[celli]*dmdt12;
670 if (coeffs21Cell > 0)
673 SpPhase2[celli] -= dmdt12*coeffs21Cell;
675 else if (coeffs21Cell < 0)
679 dmdt12*coeffs21Cell*alpha2Limited;
684 if (coeffs21Cell > 0)
688 coeffs21Cell*dmdt12*alpha2Limited;
690 else if (coeffs21Cell < 0)
693 SpPhase2[celli] -= dmdt12*coeffs21Cell;
702 max(
gMax((dmdt21*coeffs1)()),
gMax((dmdt12*coeffs2)()));
707 template<
class BasePhaseSystem>
710 const phaseModel& phase,
713 const word speciesName
719 if (iter()->transferSpecie() == speciesName)
723 this->
Su()[phase.name()]
724 + this->
Sp()[phase.name()]*phase.oldTime();
730 template<
class BasePhaseSystem>
733 bool includeVolChange(
true);
736 if (!iter()->includeVolChange())
738 includeVolChange =
false;
741 return includeVolChange;