InterfaceCompositionPhaseChangePhaseSystem.C
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration | Website: https://openfoam.org
5  \\ / A nd | Copyright (C) 2015-2020 OpenFOAM Foundation
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8 License
9  This file is part of OpenFOAM.
10 
11  OpenFOAM is free software: you can redistribute it and/or modify it
12  under the terms of the GNU General Public License as published by
13  the Free Software Foundation, either version 3 of the License, or
14  (at your option) any later version.
15 
16  OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
19  for more details.
20 
21  You should have received a copy of the GNU General Public License
22  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
23 
24 \*---------------------------------------------------------------------------*/
25 
28 #include "heatTransferModel.H"
30 #include "fvmSup.H"
31 
32 // * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * //
33 
34 template<class BasePhaseSystem>
37 dmdtfs() const
38 {
39  autoPtr<phaseSystem::dmdtfTable> dmdtPtr(new phaseSystem::dmdtfTable);
40  phaseSystem::dmdtfTable& dmdtfs = dmdtPtr();
41 
43  (
44  interfaceCompositionModelTable,
45  interfaceCompositionModels_,
46  interfaceCompositionModelIter
47  )
48  {
49  const phasePair& pair =
50  this->phasePairs_[interfaceCompositionModelIter.key()];
51 
52  forAllConstIter(phasePair, pair, pairIter)
53  {
54  const autoPtr<interfaceCompositionModel>& compositionModelPtr =
55  interfaceCompositionModelIter()[pairIter.index()];
56 
57  if (!compositionModelPtr.valid()) continue;
58 
59  const interfaceCompositionModel& compositionModel =
60  compositionModelPtr();
61 
62  const phaseModel& phase = *pairIter;
63 
65  (
66  hashedWordList,
67  compositionModel.species(),
68  specieIter
69  )
70  {
71  const word& specie = *specieIter;
72 
73  tmp<volScalarField> dmidtf
74  (
75  (pairIter.index() == 0 ? +1 : -1)
76  *(
77  *(*dmidtfSus_[pair])[specie]
78  + *(*dmidtfSps_[pair])[specie]*phase.Y(specie)
79  )
80  );
81 
82  if (dmdtfs.found(pair))
83  {
84  *dmdtfs[pair] += dmidtf;
85  }
86  else
87  {
88  dmdtfs.insert(pair, dmidtf.ptr());
89  }
90  }
91  }
92  }
93 
94  return dmdtPtr;
95 }
96 
97 
98 template<class BasePhaseSystem>
101 dmidtfs() const
102 {
103  autoPtr<phaseSystem::dmidtfTable> dmidtfsPtr(new phaseSystem::dmidtfTable);
104  phaseSystem::dmidtfTable& dmidtfs = dmidtfsPtr();
105 
107  (
108  interfaceCompositionModelTable,
109  interfaceCompositionModels_,
110  interfaceCompositionModelIter
111  )
112  {
113  const phasePair& pair =
114  this->phasePairs_[interfaceCompositionModelIter.key()];
115 
116  if (!dmidtfs.found(pair))
117  {
118  dmidtfs.insert(pair, new HashPtrTable<volScalarField>());
119  }
120 
121  forAllConstIter(phasePair, pair, pairIter)
122  {
123  const autoPtr<interfaceCompositionModel>& compositionModelPtr =
124  interfaceCompositionModelIter()[pairIter.index()];
125 
126  if (!compositionModelPtr.valid()) continue;
127 
128  const interfaceCompositionModel& compositionModel =
129  compositionModelPtr();
130 
131  const phaseModel& phase = *pairIter;
132 
134  (
135  hashedWordList,
136  compositionModel.species(),
137  specieIter
138  )
139  {
140  const word& specie = *specieIter;
141 
142 
143  tmp<volScalarField> dmidtf
144  (
145  (pairIter.index() == 0 ? +1 : -1)
146  *(
147  *(*dmidtfSus_[pair])[specie]
148  + *(*dmidtfSps_[pair])[specie]*phase.Y(specie)
149  )
150  );
151 
152  if (dmidtfs[pair]->found(specie))
153  {
154  *(*dmidtfs[pair])[specie] += dmidtf;
155  }
156  else
157  {
158  dmidtfs[pair]->insert(specie, dmidtf.ptr());
159  }
160  }
161  }
162  }
163 
164  return dmidtfsPtr;
165 }
166 
167 
168 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
169 
170 template<class BasePhaseSystem>
173 (
174  const fvMesh& mesh
175 )
176 :
177  BasePhaseSystem(mesh),
178  nInterfaceCorrectors_
179  (
180  this->template lookupOrDefault<label>("nInterfaceCorrectors", 1)
181  )
182 {
184  (
185  "interfaceComposition",
186  interfaceCompositionModels_
187  );
188 
190  (
191  "diffusiveMassTransfer",
192  diffusiveMassTransferModels_,
193  false
194  );
195 
196  // Check that models have been specified in the correct combinations
198  (
199  interfaceCompositionModelTable,
200  interfaceCompositionModels_,
201  interfaceCompositionModelIter
202  )
203  {
204  const phasePair& pair =
205  this->phasePairs_[interfaceCompositionModelIter.key()];
206 
207  if (!this->diffusiveMassTransferModels_.found(pair))
208  {
210  << "A diffusive mass transfer model the " << pair
211  << " pair is not specified. This is required by the "
212  << "corresponding interface composition model."
213  << exit(FatalError);
214  }
215 
216  forAllConstIter(phasePair, pair, pairIter)
217  {
218  if
219  (
220  interfaceCompositionModelIter()[pairIter.index()].valid()
221  && !diffusiveMassTransferModels_[pair][pairIter.index()].valid()
222  )
223  {
225  << "A mass transfer model for the " << (*pairIter).name()
226  << " side of the " << pair << " pair is not "
227  << "specified. This is required by the corresponding "
228  << "interface composition model."
229  << exit(FatalError);
230  }
231  }
232 
233  if
234  (
235  !this->heatTransferModels_.found(pair)
236  || !this->heatTransferModels_[pair].first().valid()
237  || !this->heatTransferModels_[pair].second().valid()
238  )
239  {
241  << "A heat transfer model for both sides of the " << pair
242  << "pair is not specified. This is required by the "
243  << "corresponding interface composition model"
244  << exit(FatalError);
245  }
246  }
247 
248  // Generate mass transfer fields, initially assumed to be zero
250  (
251  interfaceCompositionModelTable,
252  interfaceCompositionModels_,
253  interfaceCompositionModelIter
254  )
255  {
256  const phasePair& pair =
257  this->phasePairs_[interfaceCompositionModelIter.key()];
258 
259  dmidtfSus_.insert(pair, new HashPtrTable<volScalarField>());
260  dmidtfSps_.insert(pair, new HashPtrTable<volScalarField>());
261 
262  forAllConstIter(phasePair, pair, pairIter)
263  {
264  const autoPtr<interfaceCompositionModel>& compositionModelPtr =
265  interfaceCompositionModelIter()[pairIter.index()];
266 
267  if (!compositionModelPtr.valid()) continue;
268 
269  const interfaceCompositionModel& compositionModel =
270  compositionModelPtr();
271 
273  (
274  hashedWordList,
275  compositionModel.species(),
276  specieIter
277  )
278  {
279  const word& specie = *specieIter;
280 
281  dmidtfSus_[pair]->insert
282  (
283  specie,
284  new volScalarField
285  (
286  IOobject
287  (
289  (
291  (
292  "interfaceCompositionPhaseChange:dmidtfSu",
293  specie
294  ),
295  pair.name()
296  ),
297  this->mesh().time().timeName(),
298  this->mesh()
299  ),
300  this->mesh(),
302  )
303  );
304 
305  dmidtfSps_[pair]->insert
306  (
307  specie,
308  new volScalarField
309  (
310  IOobject
311  (
313  (
315  (
316  "interfaceCompositionPhaseChange:dmidtfSp",
317  specie
318  ),
319  pair.name()
320  ),
321  this->mesh().time().timeName(),
322  this->mesh()
323  ),
324  this->mesh(),
326  )
327  );
328  }
329  }
330  }
331 }
332 
333 
334 // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
335 
336 template<class BasePhaseSystem>
339 {}
340 
341 
342 // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
343 
344 template<class BasePhaseSystem>
347 (
348  const phasePairKey& key
349 ) const
350 {
351  tmp<volScalarField> tDmdtf = BasePhaseSystem::dmdtf(key);
352 
353  if (interfaceCompositionModels_.found(key))
354  {
355  const phasePair& pair = this->phasePairs_[key];
356 
357  forAllConstIter(phasePair, pair, pairIter)
358  {
359  const autoPtr<interfaceCompositionModel>& compositionModelPtr =
360  interfaceCompositionModels_[key][pairIter.index()];
361 
362  if (!compositionModelPtr.valid()) continue;
363 
364  const interfaceCompositionModel& compositionModel =
365  compositionModelPtr();
366 
367  const phaseModel& phase = *pairIter;
368 
370  (
371  hashedWordList,
372  compositionModel.species(),
373  specieIter
374  )
375  {
376  const word& specie = *specieIter;
377 
378  tDmdtf.ref() +=
379  Pair<word>::compare(pair, key)
380  *(
381  *(*dmidtfSus_[pair])[specie]
382  - *(*dmidtfSps_[pair])[specie]*phase.Y(specie)
383  );
384  }
385  }
386  }
387 
388  return tDmdtf;
389 }
390 
391 
392 template<class BasePhaseSystem>
395 {
396  PtrList<volScalarField> dmdts(BasePhaseSystem::dmdts());
397 
398  autoPtr<phaseSystem::dmdtfTable> dmdtfsPtr = this->dmdtfs();
399  const phaseSystem::dmdtfTable& dmdtfs = dmdtfsPtr();
400 
401  forAllConstIter(phaseSystem::dmdtfTable, dmdtfs, dmdtfsIter)
402  {
403  const phasePair& pair = this->phasePairs_[dmdtfsIter.key()];
404  const phaseModel& phase = pair.phase1();
405  const phaseModel& otherPhase = pair.phase2();
406 
407  addField(phase, "dmdt", *dmdtfsIter(), dmdts);
408  addField(otherPhase, "dmdt", - *dmdtfsIter(), dmdts);
409  }
410 
411  return dmdts;
412 }
413 
414 
415 template<class BasePhaseSystem>
419 {
420  autoPtr<phaseSystem::momentumTransferTable> eqnsPtr =
422 
423  phaseSystem::momentumTransferTable& eqns = eqnsPtr();
424 
425  this->addDmdtUfs(dmdtfs(), eqns);
426 
427  return eqnsPtr;
428 }
429 
430 
431 template<class BasePhaseSystem>
435 {
436  autoPtr<phaseSystem::momentumTransferTable> eqnsPtr =
437  BasePhaseSystem::momentumTransferf();
438 
439  phaseSystem::momentumTransferTable& eqns = eqnsPtr();
440 
441  this->addDmdtUfs(dmdtfs(), eqns);
442 
443  return eqnsPtr;
444 }
445 
446 
447 template<class BasePhaseSystem>
450 heatTransfer() const
451 {
452  autoPtr<phaseSystem::heatTransferTable> eqnsPtr =
453  BasePhaseSystem::heatTransfer();
454 
455  phaseSystem::heatTransferTable& eqns = eqnsPtr();
456 
457  this->addDmidtHef(dmidtfs(), eqns);
458 
459  return eqnsPtr;
460 }
461 
462 
463 template<class BasePhaseSystem>
466 specieTransfer() const
467 {
468  autoPtr<phaseSystem::specieTransferTable> eqnsPtr =
470 
471  phaseSystem::specieTransferTable& eqns = eqnsPtr();
472 
473  // Explicit
474  /*
475  this->addDmidtYf(dmidtfs(), eqns);
476  */
477 
478  // Semi-implicit
480  (
481  interfaceCompositionModelTable,
482  interfaceCompositionModels_,
483  interfaceCompositionModelIter
484  )
485  {
486  const phasePair& pair =
487  this->phasePairs_[interfaceCompositionModelIter.key()];
488 
489  forAllConstIter(phasePair, pair, pairIter)
490  {
491  const autoPtr<interfaceCompositionModel>& compositionModelPtr =
492  interfaceCompositionModelIter()[pairIter.index()];
493 
494  if (!compositionModelPtr.valid()) continue;
495 
496  const interfaceCompositionModel& compositionModel =
497  compositionModelPtr();
498 
499  const phaseModel& phase = *pairIter;
500  const phaseModel& otherPhase = pairIter.otherPhase();
501 
503  (
504  hashedWordList,
505  compositionModel.species(),
506  specieIter
507  )
508  {
509  const word& specie = *specieIter;
510 
511  // Implicit transport through this phase
512  *eqns[phase.Y(specie).name()] +=
513  *(*dmidtfSus_[pair])[specie]
514  + fvm::Sp(*(*dmidtfSps_[pair])[specie], phase.Y(specie));
515 
516  // Explicit transport out of the other phase
517  if (eqns.found(IOobject::groupName(specie, otherPhase.name())))
518  {
519  *eqns[otherPhase.Y(specie).name()] -=
520  *(*dmidtfSus_[pair])[specie]
521  + *(*dmidtfSps_[pair])[specie]*phase.Y(specie);
522  }
523  }
524  }
525  }
526 
527  return eqnsPtr;
528 }
529 
530 
531 template<class BasePhaseSystem>
533 correct()
534 {
536 
537  // Sum up the contribution from each interface composition model
539  (
540  interfaceCompositionModelTable,
541  interfaceCompositionModels_,
542  interfaceCompositionModelIter
543  )
544  {
545  const phasePair& pair =
546  this->phasePairs_[interfaceCompositionModelIter.key()];
547 
548  const volScalarField& Tf(*this->Tf_[pair]);
549 
550  forAllConstIter(phasePair, pair, pairIter)
551  {
552  const autoPtr<interfaceCompositionModel>& compositionModelPtr =
553  interfaceCompositionModelIter()[pairIter.index()];
554 
555  if (!compositionModelPtr.valid()) continue;
556 
557  const interfaceCompositionModel& compositionModel =
558  compositionModelPtr();
559 
560  const phaseModel& phase = *pairIter;
561 
562  const volScalarField K
563  (
564  diffusiveMassTransferModels_[pair][pairIter.index()]->K()
565  );
566 
568  (
569  hashedWordList,
570  compositionModel.species(),
571  specieIter
572  )
573  {
574  const word& specie = *specieIter;
575 
576  const volScalarField KD(K*compositionModel.D(specie));
577  const volScalarField Yf(compositionModel.Yf(specie, Tf));
578 
579  *(*dmidtfSus_[pair])[specie] = phase.rho()*KD*Yf;
580  *(*dmidtfSps_[pair])[specie] = - phase.rho()*KD;
581  }
582  }
583  }
584 }
585 
586 
587 template<class BasePhaseSystem>
590 {
591  // This loop solves for the interface temperatures, Tf, and updates the
592  // interface composition models.
593  //
594  // In the presence of thermally-coupled mass transfer, the relation between
595  // heat transfers across the interface between phases 1 and 2 is:
596  //
597  // Q1 + Q2 = mDot*L
598  // H1*(Tf - T1) + H2*(Tf - T1) = K*rho*(Yfi - Yi)*Li
599  //
600  // Where Q1 and Q2 are the net transfer into phases 1 and 2 respectively,
601  // H1 and H2 are the heat transfer coefficients on either side, Tf is the
602  // temperature at the interface, mDot is the mass transfer rate from phase
603  // 2 to phase 1, and L is the latent heat of phase 2 minus phase 1, K is
604  // the diffusive mass transfer coefficient, Yfi - Yi is the concentration
605  // difference of a transferring specie between the interface and the bulk
606  // driving the transfer, Li is the latent heat change of the specie, and
607  // rho is the density in the phase in which the diffusive mass transfer is
608  // being represented.
609  //
610  // Yfi is likely to be a strong non-linear (typically exponential) function
611  // of Tf, so the solution for the temperature is newton-accelerated.
612 
614  (
615  interfaceCompositionModelTable,
616  interfaceCompositionModels_,
617  interfaceCompositionModelIter
618  )
619  {
620  const phasePair& pair =
621  this->phasePairs_[interfaceCompositionModelIter.key()];
622 
623  const volScalarField H1(this->heatTransferModels_[pair].first()->K());
624  const volScalarField H2(this->heatTransferModels_[pair].second()->K());
625  const dimensionedScalar HSmall("small", heatTransferModel::dimK, small);
626 
627  volScalarField& Tf = *this->Tf_[pair];
628 
629  for (label i = 0; i < nInterfaceCorrectors_; ++ i)
630  {
631  tmp<volScalarField> dmdtLf =
633  (
634  IOobject::groupName("dmdtLf", pair.name()),
635  this->mesh(),
637  );
638  tmp<volScalarField> dmdtLfPrime =
640  (
641  IOobject::groupName("dmdtLfPrime", pair.name()),
642  this->mesh(),
643  dimensionedScalar(dmdtLf().dimensions()/dimTemperature, 0)
644  );
645 
646  // Add latent heats from forward and backward models
647  if (this->interfaceCompositionModels_[pair].first().valid())
648  {
649  this->interfaceCompositionModels_[pair].first()->addDmdtL
650  (
651  diffusiveMassTransferModels_[pair].first()->K(),
652  Tf,
653  dmdtLf.ref(),
654  dmdtLfPrime.ref()
655  );
656  }
657  if (this->interfaceCompositionModels_[pair].second().valid())
658  {
659  this->interfaceCompositionModels_[pair].second()->addDmdtL
660  (
661  - diffusiveMassTransferModels_[pair].second()->K(),
662  Tf,
663  dmdtLf.ref(),
664  dmdtLfPrime.ref()
665  );
666  }
667 
668  // Update the interface temperature by applying one step of newton's
669  // method to the interface relation
670  Tf -=
671  (
672  H1*(Tf - pair.phase1().thermo().T())
673  + H2*(Tf - pair.phase2().thermo().T())
674  - dmdtLf
675  )
676  /(
677  max(H1 + H2 - dmdtLfPrime, HSmall)
678  );
679 
680  Tf.correctBoundaryConditions();
681 
682  Info<< "Tf." << pair.name()
683  << ": min = " << min(Tf.primitiveField())
684  << ", mean = " << average(Tf.primitiveField())
685  << ", max = " << max(Tf.primitiveField())
686  << endl;
687 
688  // Update the interface compositions
689  if (this->interfaceCompositionModels_[pair].first().valid())
690  {
691  this->interfaceCompositionModels_[pair].first()->update(Tf);
692  }
693  if (this->interfaceCompositionModels_[pair].second().valid())
694  {
695  this->interfaceCompositionModels_[pair].second()->update(Tf);
696  }
697  }
698  }
699 }
700 
701 
702 template<class BasePhaseSystem>
704 {
705  if (BasePhaseSystem::read())
706  {
707  bool readOK = true;
708 
709  // Models ...
710 
711  return readOK;
712  }
713  else
714  {
715  return false;
716  }
717 }
718 
719 
720 // ************************************************************************* //
virtual autoPtr< phaseSystem::specieTransferTable > specieTransfer() const
Return the specie transfer matrices.
virtual ~InterfaceCompositionPhaseChangePhaseSystem()
Destructor.
virtual PtrList< volScalarField > dmdts() const
Return the mass transfer rates for each phase.
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
Definition: label.H:59
errorManipArg< error, int > exit(error &err, const int errNo=1)
Definition: errorManip.H:124
error FatalError
dimensioned< Type > max(const dimensioned< Type > &, const dimensioned< Type > &)
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
Definition: error.H:319
HashPtrTable< fvVectorMatrix > momentumTransferTable
Definition: phaseSystem.H:75
InterfaceCompositionPhaseChangePhaseSystem(const fvMesh &)
Construct from fvMesh.
phasePairTable phasePairs_
Phase pairs.
Definition: phaseSystem.H:163
static int compare(const Pair< Type > &a, const Pair< Type > &b)
Compare Pairs.
Definition: Pair.H:142
IOobject(const word &name, const fileName &instance, const objectRegistry &registry, readOption r=NO_READ, writeOption w=NO_WRITE, bool registerObject=true)
Construct from name, instance, registry, io options.
Definition: IOobject.C:177
static tmp< GeometricField< scalar, fvPatchField, volMesh > > New(const word &name, const Internal &, const PtrList< fvPatchField< scalar >> &)
Return a temporary field constructed from name,.
Ostream & endl(Ostream &os)
Add newline and flush stream.
Definition: Ostream.H:251
tmp< volScalarField > K(const phaseModel &alpha1, const phaseModel &alpha2) const
Curvature of interface between two phases.
HashPtrTable< fvScalarMatrix > heatTransferTable
Definition: phaseSystem.H:77
HashPtrTable< fvScalarMatrix > specieTransferTable
Definition: phaseSystem.H:79
static word timeName(const scalar, const int precision=precision_)
Return time name of given scalar time.
Definition: Time.C:622
void read(Istream &, label &, const dictionary &)
In-place read with dictionary lookup.
tmp< fvMatrix< Type > > Sp(const volScalarField::Internal &, const GeometricField< Type, fvPatchField, volMesh > &)
const Time & time() const
Return the top-level database.
Definition: fvMesh.H:239
CGAL::Exact_predicates_exact_constructions_kernel K
virtual void correctInterfaceThermo()
Correct the interface temperatures.
virtual tmp< volScalarField > dmdtf(const phasePairKey &key) const
Return the mass transfer rate for an interface.
static const dimensionSet dimK
Coefficient dimensions.
bool insert(const Key &, const T &newElmt)
Insert a new hashedEntry.
Definition: HashTableI.H:80
GeometricField< scalar, fvPatchField, volMesh > volScalarField
Definition: volFieldsFwd.H:57
const dimensionSet dimVolume(pow3(dimLength))
Definition: dimensionSets.H:58
static word groupName(Name name, const word &group)
const dimensionSet dimTemperature(0, 0, 0, 1, 0, 0, 0)
Definition: dimensionSets.H:52
HashPtrTable< volScalarField, phasePairKey, phasePairKey::hash > dmdtfTable
Definition: phaseSystem.H:91
dimensioned< Type > average(const DimensionedField< Type, GeoMesh > &df)
forAllConstIter(PtrDictionary< phaseModel >, mixture.phases(), phase)
Definition: pEqn.H:29
virtual PtrList< volScalarField > dmdts() const
Return the mass transfer rates for each phase.
virtual void correct()
Correct the fluid properties other than those listed below.
phaseSystem::specieTransferTable & specieTransfer(specieTransferPtr())
Info<< "Predicted p max-min : "<< max(p).value()<< " "<< min(p).value()<< endl;rho==max(rho0+psi *p, rhoMin);# 1 "/home/ubuntu/OpenFOAM-8/applications/solvers/multiphase/cavitatingFoam/alphavPsi.H" 1{ alphav=max(min((rho - rholSat)/(rhovSat - rholSat), scalar(1)), scalar(0));alphal=1.0 - alphav;Info<< "max-min alphav: "<< max(alphav).value()<< " "<< min(alphav).value()<< endl;psiModel-> correct()
Definition: pEqn.H:68
virtual autoPtr< phaseSystem::momentumTransferTable > momentumTransfer()
Return the momentum transfer matrices for the cell-based algorithm.
dimensioned< Type > min(const dimensioned< Type > &, const dimensioned< Type > &)
const dimensionSet dimEnergy
phaseSystem::momentumTransferTable & momentumTransfer(momentumTransferPtr())
const dimensionSet dimDensity
dimensioned< scalar > dimensionedScalar
Dimensioned scalar obtained from generic dimensioned type.
A templated 1D list of pointers to objects of type <T>, where the size of the array is known and used...
Definition: List.H:70
void generatePairsAndSubModels(const word &modelName, HashTable< autoPtr< modelType >, phasePairKey, phasePairKey::hash > &models, const bool correctFixedFluxBCs=true)
Generate pairs and sub-model tables.
const dimensionSet dimTime(0, 0, 1, 0, 0, 0, 0)
Definition: dimensionSets.H:51
messageStream Info
An auto-pointer similar to the STL auto_ptr but with automatic casting to a reference to the type and...
Definition: PtrList.H:52
A class for managing temporary objects.
Definition: PtrList.H:53
T * first()
Return the first entry.
Definition: UILList.H:109
virtual autoPtr< phaseSystem::momentumTransferTable > momentumTransferf()
Return the momentum transfer matrices for the face-based algorithm.
const fvMesh & mesh() const
Return the mesh.
Definition: phaseSystemI.H:28
virtual autoPtr< phaseSystem::heatTransferTable > heatTransfer() const
Return the heat transfer matrices.
bool found
virtual bool read()
Read base phaseProperties dictionary.
Calculate the matrix for implicit and explicit sources.
Class to provide interfacial heat and mass transfer between a number of phases according to a interfa...