MaxwellStefan.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) 2021-2023 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 
26 #include "MaxwellStefan.H"
27 #include "fvcDiv.H"
28 #include "fvcLaplacian.H"
29 #include "fvcSnGrad.H"
30 #include "fvmSup.H"
31 #include "surfaceInterpolate.H"
32 #include "Function2Evaluate.H"
33 
34 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
35 
36 namespace Foam
37 {
38 
39 // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
40 
41 template<class BasicThermophysicalTransportModel>
44 {
45  const basicSpecieMixture& composition = this->thermo().composition();
46  const label d = composition.defaultSpecie();
47 
48  // Calculate the molecular weight of the mixture and the mole fractions
49  scalar Wm = 0;
50 
51  forAll(W, i)
52  {
53  X[i] = Y[i]/W[i];
54  Wm += X[i];
55  }
56 
57  Wm = 1/Wm;
58  X *= Wm;
59 
60  // i counter for the specie sub-system without the default specie
61  label is = 0;
62 
63  // Calculate the A and B matrices from the binary mass diffusion
64  // coefficients and specie mole fractions
65  forAll(X, i)
66  {
67  if (i != d)
68  {
69  A(is, is) = -X[i]*Wm/(DD(i, d)*W[d]);
70  B(is, is) = -(X[i]*Wm/W[d] + (1 - X[i])*Wm/W[i]);
71 
72  // j counter for the specie sub-system without the default specie
73  label js = 0;
74 
75  forAll(X, j)
76  {
77  if (j != i)
78  {
79  A(is, is) -= X[j]*Wm/(DD(i, j)*W[i]);
80 
81  if (j != d)
82  {
83  A(is, js) =
84  X[i]*(Wm/(DD(i, j)*W[j]) - Wm/(DD(i, d)*W[d]));
85 
86  B(is, js) = X[i]*(Wm/W[j] - Wm/W[d]);
87  }
88  }
89 
90  if (j != d)
91  {
92  js++;
93  }
94  }
95 
96  is++;
97  }
98  }
99 
100  // LU decompose A and invert
101  A.decompose();
102  A.inv(invA);
103 
104  // Calculate the generalised Fick's law diffusion coefficients
105  multiply(D, invA, B);
106 }
107 
108 
109 template<class BasicThermophysicalTransportModel>
112 {
113  const basicSpecieMixture& composition = this->thermo().composition();
114  const label d = composition.defaultSpecie();
115 
116  // For each cell or patch face
117  forAll(*(YPtrs[0]), pi)
118  {
119  forAll(W, i)
120  {
121  // Map YPtrs -> Y
122  Y[i] = (*YPtrs[i])[pi];
123 
124  // Map DijPtrs -> DD
125  forAll(W, j)
126  {
127  DD(i, j) = (*DijPtrs[i][j])[pi];
128  }
129  }
130 
131  // Transform DD -> D
132  transformDiffusionCoefficient();
133 
134  // i counter for the specie sub-system without the default specie
135  label is = 0;
136 
137  forAll(W, i)
138  {
139  if (i != d)
140  {
141  // j counter for the specie sub-system
142  // without the default specie
143  label js = 0;
144 
145  // Map D -> DijPtrs
146  forAll(W, j)
147  {
148  if (j != d)
149  {
150  (*DijPtrs[i][j])[pi] = D(is, js);
151 
152  js++;
153  }
154  }
155 
156  is++;
157  }
158  }
159  }
160 }
161 
162 
163 template<class BasicThermophysicalTransportModel>
165 (
166  List<PtrList<volScalarField>>& Dij
167 ) const
168 {
169  const basicSpecieMixture& composition = this->thermo().composition();
170  const PtrList<volScalarField>& Y = composition.Y();
171  const volScalarField& Y0 = Y[0];
172 
173  forAll(W, i)
174  {
175  // Map composition.Y() internal fields -> YPtrs
176  YPtrs[i] = &Y[i].primitiveField();
177 
178  // Map Dii_ internal fields -> DijPtrs
179  DijPtrs[i][i] = &Dii_[i].primitiveFieldRef();
180 
181  // Map Dij internal fields -> DijPtrs
182  forAll(W, j)
183  {
184  if (j != i)
185  {
186  DijPtrs[i][j] = &Dij[i][j].primitiveFieldRef();
187  }
188  }
189  }
190 
191  // Transform binary mass diffusion coefficients internal field DijPtrs ->
192  // generalised Fick's law diffusion coefficients DijPtrs
193  transformDiffusionCoefficientFields();
194 
195  forAll(Y0.boundaryField(), patchi)
196  {
197  forAll(W, i)
198  {
199  // Map composition.Y() patch fields -> YPtrs
200  YPtrs[i] = &Y[i].boundaryField()[patchi];
201 
202  // Map Dii_ patch fields -> DijPtrs
203  DijPtrs[i][i] = &Dii_[i].boundaryFieldRef()[patchi];
204 
205  // Map Dij patch fields -> DijPtrs
206  forAll(W, j)
207  {
208  if (j != i)
209  {
210  DijPtrs[i][j] = &Dij[i][j].boundaryFieldRef()[patchi];
211  }
212  }
213  }
214 
215  // Transform binary mass diffusion coefficients patch field DijPtrs ->
216  // generalised Fick's law diffusion coefficients DijPtrs
217  transformDiffusionCoefficientFields();
218  }
219 }
220 
221 
222 template<class BasicThermophysicalTransportModel>
224 {
226  const label d = composition.defaultSpecie();
227 
229  const volScalarField& p = this->thermo().p();
230  const volScalarField& T = this->thermo().T();
231  const volScalarField& rho = this->momentumTransport().rho();
232 
233  Dii_.setSize(Y.size());
234  jexp_.setSize(Y.size());
235 
237 
238  // Evaluate the specie binary mass diffusion coefficient functions
239  // and initialise the explicit part of the specie mass flux fields
240  forAll(Y, i)
241  {
242  if (i != d)
243  {
244  if (jexp_.set(i))
245  {
246  jexp_[i] = Zero;
247  }
248  else
249  {
250  jexp_.set
251  (
252  i,
254  (
255  "jexp" + Y[i].name(),
256  Y[i].mesh(),
257  dimensionedScalar(dimensionSet(1, -2, -1, 0, 0), 0)
258  )
259  );
260  }
261  }
262 
263  Dii_.set(i, evaluate(DFuncs_[i][i], dimViscosity, p, T));
264 
265  Dij[i].setSize(Y.size());
266 
267  forAll(Y, j)
268  {
269  if (j > i)
270  {
271  Dij[i].set(j, evaluate(DFuncs_[i][j], dimViscosity, p, T));
272  }
273  else if (j < i)
274  {
275  Dij[i].set(j, Dij[j][i].clone());
276  }
277  }
278  }
279 
280  //- Transform the binary mass diffusion coefficients into the
281  // the generalised Fick's law diffusion coefficients
282  transform(Dij);
283 
284  // Accumulate the explicit part of the specie mass flux fields
285  forAll(Y, j)
286  {
287  if (j != d)
288  {
289  const surfaceScalarField snGradYj(fvc::snGrad(Y[j]));
290 
291  forAll(Y, i)
292  {
293  if (i != d && i != j)
294  {
295  jexp_[i] -= fvc::interpolate(rho*Dij[i][j])*snGradYj;
296  }
297  }
298  }
299  }
300 
301  // Optionally add the Soret thermal diffusion contribution to the
302  // explicit part of the specie mass flux fields
303  if (DTFuncs_.size())
304  {
306 
307  forAll(Y, i)
308  {
309  if (i != d)
310  {
311  jexp_[i] -= fvc::interpolate
312  (
313  evaluate(DTFuncs_[i], dimDynamicViscosity, p, T)
314  )*gradTbyT;
315  }
316  }
317  }
318 }
319 
320 
321 template<class BasicThermophysicalTransportModel>
322 const PtrList<volScalarField>&
324 {
325  if (!Dii_.size())
326  {
327  updateDii();
328  }
329 
330  return Dii_;
331 }
332 
333 
334 template<class BasicThermophysicalTransportModel>
335 const PtrList<surfaceScalarField>&
337 {
338  if (!jexp_.size())
339  {
340  updateDii();
341  }
342 
343  return jexp_;
344 }
345 
346 
347 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
348 
349 template<class BasicThermophysicalTransportModel>
351 (
352  const word& type,
353  const momentumTransportModel& momentumTransport,
354  const thermoModel& thermo
355 )
356 :
357  BasicThermophysicalTransportModel
358  (
359  type,
360  momentumTransport,
361  thermo
362  ),
363 
364  UpdateableMeshObject(*this, thermo.mesh()),
365 
366  DFuncs_(this->thermo().composition().species().size()),
367 
368  DTFuncs_
369  (
370  this->coeffDict_.found("DT")
371  ? this->thermo().composition().species().size()
372  : 0
373  ),
374 
375  W(this->thermo().composition().species().size()),
376 
377  YPtrs(W.size()),
378  DijPtrs(W.size()),
379 
380  Y(W.size()),
381  X(W.size()),
382  DD(W.size()),
383  A(W.size() - 1),
384  B(A.m()),
385  invA(A.m()),
386  D(W.size())
387 {
388  const basicSpecieMixture& composition = this->thermo().composition();
389 
390  // Set the molecular weights of the species
391  forAll(W, i)
392  {
393  W[i] = composition.Wi(i);
394  }
395 }
396 
397 
398 // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
399 
400 template<class BasicThermophysicalTransportModel>
402 {
403  if
404  (
406  )
407  {
409  const speciesTable& species = composition.species();
410 
411  const dictionary& Ddict = this->coeffDict_.subDict("D");
412 
413  // Read the array of specie binary mass diffusion coefficient functions
414  forAll(species, i)
415  {
416  DFuncs_[i].setSize(species.size());
417 
418  forAll(species, j)
419  {
420  if (j >= i)
421  {
422  const word nameij(species[i] + '-' + species[j]);
423  const word nameji(species[j] + '-' + species[i]);
424 
425  word Dname;
426 
427  if (Ddict.found(nameij) && Ddict.found(nameji))
428  {
429  if (i != j)
430  {
432  << "Binary mass diffusion coefficients "
433  "for both " << nameij << " and " << nameji
434  << " provided, using " << nameij << endl;
435  }
436 
437  Dname = nameij;
438  }
439  else if (Ddict.found(nameij))
440  {
441  Dname = nameij;
442  }
443  else if (Ddict.found(nameji))
444  {
445  Dname = nameji;
446  }
447  else
448  {
450  << "Binary mass diffusion coefficients for pair "
451  << nameij << " or " << nameji << " not provided"
452  << exit(FatalIOError);
453  }
454 
455  DFuncs_[i].set
456  (
457  j,
458  Function2<scalar>::New(Dname, Ddict).ptr()
459  );
460  }
461  }
462  }
463 
464  // Optionally read the List of specie Soret thermal diffusion
465  // coefficient functions
466  if (this->coeffDict_.found("DT"))
467  {
468  const dictionary& DTdict = this->coeffDict_.subDict("DT");
469 
470  forAll(species, i)
471  {
472  DTFuncs_.set
473  (
474  i,
475  Function2<scalar>::New(species[i], DTdict).ptr()
476  );
477  }
478  }
479 
480  return true;
481  }
482  else
483  {
484  return false;
485  }
486 }
487 
488 
489 template<class BasicThermophysicalTransportModel>
491 (
492  const volScalarField& Yi
493 ) const
494 {
496 
497  return volScalarField::New
498  (
499  "DEff",
500  this->momentumTransport().rho()*Dii()[composition.index(Yi)]
501  );
502 }
503 
504 
505 template<class BasicThermophysicalTransportModel>
507 (
508  const volScalarField& Yi,
509  const label patchi
510 ) const
511 {
513 
514  return
515  this->momentumTransport().rho().boundaryField()[patchi]
516  *Dii()[composition.index(Yi)].boundaryField()[patchi];
517 }
518 
519 
520 template<class BasicThermophysicalTransportModel>
523 {
525  (
527  (
529  (
530  "q",
531  this->momentumTransport().alphaRhoPhi().group()
532  ),
533  -fvc::interpolate(this->alpha()*this->kappaEff())
534  *fvc::snGrad(this->thermo().T())
535  )
536  );
537 
539  const label d = composition.defaultSpecie();
540 
542 
543  if (Y.size())
544  {
545  surfaceScalarField sumJ
546  (
548  (
549  "sumJ",
550  Y[0].mesh(),
552  )
553  );
554 
555  surfaceScalarField sumJh
556  (
558  (
559  "sumJh",
560  Y[0].mesh(),
562  )
563  );
564 
565  forAll(Y, i)
566  {
567  if (i != d)
568  {
569  const volScalarField hi
570  (
571  composition.Hs(i, this->thermo().p(), this->thermo().T())
572  );
573 
574  const surfaceScalarField ji(this->j(Y[i]));
575  sumJ += ji;
576 
577  sumJh += ji*fvc::interpolate(hi);
578  }
579  }
580 
581  {
582  const label i = d;
583 
584  const volScalarField hi
585  (
586  composition.Hs(i, this->thermo().p(), this->thermo().T())
587  );
588 
589  sumJh -= sumJ*fvc::interpolate(hi);
590  }
591 
592  tmpq.ref() += sumJh;
593  }
594 
595  return tmpq;
596 }
597 
598 
599 template<class BasicThermophysicalTransportModel>
601 (
603 ) const
604 {
605  tmp<fvScalarMatrix> tmpDivq
606  (
607  fvm::Su
608  (
609  -fvc::laplacian(this->alpha()*this->kappaEff(), this->thermo().T()),
610  he
611  )
612  );
613 
615  const label d = composition.defaultSpecie();
616 
618 
619  tmpDivq.ref() -=
620  fvm::laplacianCorrection(this->alpha()*this->alphaEff(), he);
621 
622  surfaceScalarField sumJ
623  (
625  (
626  "sumJ",
627  he.mesh(),
629  )
630  );
631 
632  surfaceScalarField sumJh
633  (
635  (
636  "sumJh",
637  he.mesh(),
638  dimensionedScalar(sumJ.dimensions()*he.dimensions(), 0)
639  )
640  );
641 
642  forAll(Y, i)
643  {
644  if (i != d)
645  {
646  const volScalarField hi
647  (
648  composition.Hs(i, this->thermo().p(), this->thermo().T())
649  );
650 
651  const surfaceScalarField ji(this->j(Y[i]));
652  sumJ += ji;
653 
654  sumJh += ji*fvc::interpolate(hi);
655  }
656  }
657 
658  {
659  const label i = d;
660 
661  const volScalarField hi
662  (
663  composition.Hs(i, this->thermo().p(), this->thermo().T())
664  );
665 
666  sumJh -= sumJ*fvc::interpolate(hi);
667  }
668 
669  tmpDivq.ref() += fvc::div(sumJh*he.mesh().magSf());
670 
671  return tmpDivq;
672 }
673 
674 
675 template<class BasicThermophysicalTransportModel>
677 (
678  const volScalarField& Yi
679 ) const
680 {
682  const label d = composition.defaultSpecie();
683 
684  if (composition.index(Yi) == d)
685  {
687 
689  (
691  (
693  (
694  "j" + name(d),
695  this->momentumTransport().alphaRhoPhi().group()
696  ),
697  Yi.mesh(),
699  )
700  );
701 
702  surfaceScalarField& jd = tjd.ref();
703 
704  forAll(Y, i)
705  {
706  if (i != d)
707  {
708  jd -= this->j(Y[i]);
709  }
710  }
711 
712  return tjd;
713  }
714  else
715  {
716  return
717  BasicThermophysicalTransportModel::j(Yi)
718  + jexp()[composition.index(Yi)];
719  }
720 }
721 
722 
723 template<class BasicThermophysicalTransportModel>
725 (
726  volScalarField& Yi
727 ) const
728 {
730  return
731  BasicThermophysicalTransportModel::divj(Yi)
732  + fvc::div(jexp()[composition.index(Yi)]*Yi.mesh().magSf());
733 }
734 
735 
736 template<class BasicThermophysicalTransportModel>
738 {
739  BasicThermophysicalTransportModel::predict();
740  updateDii();
741 }
742 
743 
744 template<class BasicThermophysicalTransportModel>
746 {
747  return true;
748 }
749 
750 
751 template<class BasicThermophysicalTransportModel>
753 (
754  const polyTopoChangeMap& map
755 )
756 {
757  // Delete the cached Dii and jexp, will be re-created in predict
758  Dii_.clear();
759  jexp_.clear();
760 }
761 
762 
763 template<class BasicThermophysicalTransportModel>
765 (
766  const polyMeshMap& map
767 )
768 {
769  // Delete the cached Dii and jexp, will be re-created in predict
770  Dii_.clear();
771  jexp_.clear();
772 }
773 
774 
775 template<class BasicThermophysicalTransportModel>
777 (
778  const polyDistributionMap& map
779 )
780 {
781  // Delete the cached Dii and jexp, will be re-created in predict
782  Dii_.clear();
783  jexp_.clear();
784 }
785 
786 
787 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
788 
789 } // End namespace Foam
790 
791 // ************************************************************************* //
static const Foam::dimensionedScalar A("A", Foam::dimPressure, 611.21)
static const Foam::dimensionedScalar B("B", Foam::dimless, 18.678)
static const Foam::dimensionedScalar D("D", Foam::dimTemperature, 257.14)
bool found
#define forAll(list, i)
Loop across all elements in list.
Definition: UList.H:434
const dimensionSet & dimensions() const
Return dimensions.
const Mesh & mesh() const
Return mesh.
Run-time selectable function of two variables.
Definition: Function2.H:64
Generic GeometricField class.
static tmp< GeometricField< Type, PatchField, GeoMesh > > New(const word &name, const Internal &, const PtrList< PatchField< Type >> &)
Return a temporary field constructed from name,.
static word groupName(Name name, const word &group)
A 1D array of objects of type <T>, where the size of the vector is known and used for subscript bound...
Definition: List.H:91
void size(const label)
Override size to be inconsistent with allocated storage.
Definition: ListI.H:164
virtual bool movePoints()
Update for mesh motion.
virtual tmp< volScalarField > DEff(const volScalarField &Yi) const
Effective mass diffusion coefficient.
virtual tmp< fvScalarMatrix > divq(volScalarField &he) const
Return the source term for the energy equation.
virtual tmp< fvScalarMatrix > divj(volScalarField &Yi) const
Return the source term for the given specie mass-fraction equation.
virtual void predict()
Update the diffusion coefficients and flux corrections.
virtual void mapMesh(const polyMeshMap &map)
Update from another mesh using the given map.
virtual tmp< surfaceScalarField > j(const volScalarField &Yi) const
Return the specie flux for the given specie mass-fraction [kg/m^2/s].
virtual tmp< surfaceScalarField > q() const
Return the heat flux [W/m^2].
virtual void distribute(const polyDistributionMap &map)
Redistribute or update using the given distribution map.
MaxwellStefan(const word &type, const momentumTransportModel &momentumTransport, const thermoModel &thermo)
Construct from a momentum transport model and a thermo model.
BasicThermophysicalTransportModel::thermoModel thermoModel
BasicThermophysicalTransportModel::momentumTransportModel momentumTransportModel
virtual void topoChange(const polyTopoChangeMap &map)
Update topology using the given map.
virtual bool read()
Read thermophysicalTransport dictionary.
A templated 1D list of pointers to objects of type <T>, where the size of the array is known and used...
Definition: PtrList.H:75
Specialisation of basicMixture for a mixture consisting of a number for molecular species.
virtual scalar rho(const label speciei, const scalar p, const scalar T) const =0
Density [kg/m^3].
virtual scalar Hs(const label speciei, const scalar p, const scalar T) const =0
Sensible enthalpy [J/kg].
const speciesTable & species() const
Return the table of species.
label defaultSpecie() const
Return the index of the default specie.
PtrList< volScalarField > & Y()
Return the mass-fraction fields.
label index(const volScalarField &Yi) const
Return the specie index of the given mass-fraction field.
virtual const volScalarField & T() const =0
Temperature [K].
A list of keyword definitions, which are a keyword followed by any number of values (e....
Definition: dictionary.H:160
const dictionary & subDict(const word &) const
Find and return a sub-dictionary.
Definition: dictionary.C:998
bool found(const word &, bool recursive=false, bool patternMatch=true) const
Search dictionary for given keyword.
Definition: dictionary.C:659
Dimension set for the base types.
Definition: dimensionSet.H:122
virtual basicSpecieMixture & composition()=0
Return the composition of the multi-component mixture.
virtual volScalarField & p()=0
Pressure [Pa].
A wordList with hashed indices for faster lookup by name.
Class containing mesh-to-mesh mapping information after a mesh distribution where we send parts of me...
Class containing mesh-to-mesh mapping information.
Definition: polyMeshMap.H:51
Class containing mesh-to-mesh mapping information after a change in polyMesh topology.
A class for managing temporary objects.
Definition: tmp.H:55
T & ref() const
Return non-const reference or generate a fatal error.
Definition: tmpI.H:181
Base class for multi-component Maxwell Stefan generalised Fick's law diffusion coefficients based tem...
A class for handling words, derived from string.
Definition: word.H:62
volSymmTensorField invA(inv(I *UEqn.A()+drag->Dcu()))
#define FatalIOErrorInFunction(ios)
Report an error message using Foam::FatalIOError.
Definition: error.H:318
Calculate the divergence of the given field.
Calculate the laplacian of the given field.
Calculate the snGrad of the given volField.
Calculate the matrix for implicit and explicit sources.
label patchi
volScalarField alpha(IOobject("alpha", runTime.name(), mesh, IOobject::READ_IF_PRESENT, IOobject::AUTO_WRITE), lambda *max(Ua &U, zeroSensitivity))
#define WarningInFunction
Report a warning using Foam::Warning.
void read(Istream &, label &, const dictionary &)
In-place read with dictionary lookup.
const char *const group
Group name for atomic constants.
static tmp< SurfaceField< Type > > interpolate(const VolField< Type > &tvf, const surfaceScalarField &faceFlux, Istream &schemeData)
Interpolate field onto faces using scheme given by Istream.
tmp< VolField< Type > > laplacian(const VolField< Type > &vf, const word &name)
Definition: fvcLaplacian.C:45
tmp< VolField< Type > > div(const SurfaceField< Type > &ssf)
Definition: fvcDiv.C:47
tmp< SurfaceField< Type > > snGrad(const VolField< Type > &vf, const word &name)
Definition: fvcSnGrad.C:45
tmp< fvMatrix< Type > > Su(const DimensionedField< Type, volMesh > &, const VolField< Type > &)
tmp< fvMatrix< Type > > laplacianCorrection(const VolField< scalar > &gamma, const VolField< Type > &vf)
Definition: fvmLaplacian.C:340
Namespace for OpenFOAM.
const dimensionSet dimViscosity
errorManipArg< error, int > exit(error &err, const int errNo=1)
Definition: errorManip.H:124
dimensioned< scalar > dimensionedScalar
Dimensioned scalar obtained from generic dimensioned type.
static const zero Zero
Definition: zero.H:97
const dimensionSet dimDynamicViscosity
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
const dimensionSet dimEnergy
Ostream & endl(Ostream &os)
Add newline and flush stream.
Definition: Ostream.H:251
SurfaceField< scalar > surfaceScalarField
const dimensionSet dimTime
scalarList W(const fluidMulticomponentThermo &thermo)
VolField< scalar > volScalarField
Definition: volFieldsFwd.H:61
dimensionSet transform(const dimensionSet &)
Definition: dimensionSet.C:483
T clone(const T &t)
Definition: List.H:55
IOerror FatalIOError
const dimensionSet dimMass
void evaluate(GeometricField< Type, PatchField, GeoMesh > &result, const Function1< Type > &func, const GeometricField< Type, PatchField, GeoMesh > &x)
const dimensionSet dimArea
word name(const complex &)
Return a string representation of a complex.
Definition: complex.C:47
void T(FieldField< Field, Type > &f1, const FieldField< Field, Type > &f2)
void multiply(FieldField< Field, Type > &f, const FieldField< Field, Type > &f1, const FieldField< Field, scalar > &f2)
fileType type(const fileName &, const bool checkVariants=true, const bool followLink=true)
Return the file type: directory or file.
Definition: POSIX.C:488
thermo he()
scalarList Y0(nSpecie, 0.0)
basicSpecieMixture & composition
volScalarField & p
PtrList< volScalarField > & Y
fluidMulticomponentThermo & thermo
Definition: createFields.H:31