reactingOneDim.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) 2011-2018 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 "reactingOneDim.H"
28 #include "fvm.H"
29 #include "fvcDiv.H"
30 #include "fvcVolumeIntegrate.H"
31 #include "fvcLaplacian.H"
33 
34 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
35 
36 namespace Foam
37 {
38 namespace regionModels
39 {
40 namespace pyrolysisModels
41 {
42 
43 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
44 
45 defineTypeNameAndDebug(reactingOneDim, 0);
46 
47 addToRunTimeSelectionTable(pyrolysisModel, reactingOneDim, mesh);
48 addToRunTimeSelectionTable(pyrolysisModel, reactingOneDim, dictionary);
49 
50 // * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
51 
52 void reactingOneDim::readReactingOneDimControls()
53 {
54  const dictionary& solution = this->solution().subDict("SIMPLE");
55  solution.lookup("nNonOrthCorr") >> nNonOrthCorr_;
56  time().controlDict().lookup("maxDi") >> maxDiff_;
57 
58  coeffs().lookup("minimumDelta") >> minimumDelta_;
59 
60  coeffs().lookup("gasHSource") >> gasHSource_;
61  coeffs().lookup("qrHSource") >> qrHSource_;
63  coeffs().lookupOrDefault<bool>("useChemistrySolvers", true);
64 }
65 
66 
68 {
70  {
71  readReactingOneDimControls();
72  return true;
73  }
74  else
75  {
76  return false;
77  }
78 }
79 
80 
82 {
83  if (pyrolysisModel::read(dict))
84  {
85  readReactingOneDimControls();
86  return true;
87  }
88  else
89  {
90  return false;
91  }
92 }
93 
94 
96 {
97  // Update local qr from coupled qr field
98  qr_ == dimensionedScalar("zero", qr_.dimensions(), 0.0);
99 
100  // Retrieve field from coupled region using mapped boundary conditions
102 
103  volScalarField::Boundary& qrBf = qr_.boundaryFieldRef();
104 
106  {
107  const label patchi = intCoupledPatchIDs_[i];
108 
109  // qr is positive going in the solid
110  // If the surface is emitting the radiative flux is set to zero
111  qrBf[patchi] = max(qrBf[patchi], scalar(0));
112  }
113 
114  const vectorField& cellC = regionMesh().cellCentres();
115 
117 
118  // Propagate qr through 1-D regions
119  label localPyrolysisFacei = 0;
121  {
122  const label patchi = intCoupledPatchIDs_[i];
123 
124  const scalarField& qrp = qr_.boundaryField()[patchi];
125  const vectorField& Cf = regionMesh().Cf().boundaryField()[patchi];
126 
127  forAll(qrp, facei)
128  {
129  const scalar qr0 = qrp[facei];
130  point Cf0 = Cf[facei];
131  const labelList& cells = boundaryFaceCells_[localPyrolysisFacei++];
132  scalar kappaInt = 0.0;
133  forAll(cells, k)
134  {
135  const label celli = cells[k];
136  const point& Cf1 = cellC[celli];
137  const scalar delta = mag(Cf1 - Cf0);
138  kappaInt += kappa()[celli]*delta;
139  qr_[celli] = qr0*exp(-kappaInt);
140  Cf0 = Cf1;
141  }
142  }
143  }
144 }
145 
146 
148 {
149  phiHsGas_ == dimensionedScalar("zero", phiHsGas_.dimensions(), 0.0);
150  phiGas_ == dimensionedScalar("zero", phiGas_.dimensions(), 0.0);
151 
152  const speciesTable& gasTable = solidChemistry_->gasTable();
153 
154  forAll(gasTable, gasI)
155  {
156  tmp<volScalarField> tHsiGas =
157  solidChemistry_->gasHs(solidThermo_->p(), solidThermo_->T(), gasI);
158 
159  const volScalarField& HsiGas = tHsiGas();
160 
161  const volScalarField::Internal& RRiGas =
162  solidChemistry_->RRg(gasI);
163 
164  surfaceScalarField::Boundary& phiGasBf =
166 
167  label totalFaceId = 0;
169  {
170  const label patchi = intCoupledPatchIDs_[i];
171 
172  scalarField& phiGasp = phiGasBf[patchi];
173  const scalarField& cellVol = regionMesh().V();
174 
175  forAll(phiGasp, facei)
176  {
177  const labelList& cells = boundaryFaceCells_[totalFaceId++];
178  scalar massInt = 0.0;
179  forAllReverse(cells, k)
180  {
181  const label celli = cells[k];
182  massInt += RRiGas[celli]*cellVol[celli];
183  phiHsGas_[celli] += massInt*HsiGas[celli];
184  }
185 
186  phiGasp[facei] += massInt;
187 
188  if (debug)
189  {
190  Info<< " Gas : " << gasTable[gasI]
191  << " on patch : " << patchi
192  << " mass produced at face(local) : "
193  << facei
194  << " is : " << massInt
195  << " [kg/s] " << endl;
196  }
197  }
198  }
199  }
200 }
201 
202 
204 {
205  if (qrHSource_)
206  {
207  updateqr();
208  }
209 
210  updatePhiGas();
211 }
212 
213 
215 {
216  if (!moveMesh_)
217  {
218  return;
219  }
220 
221  const scalarField newV(mass0/rho_);
222 
223  Info<< "Initial/final volumes = " << gSum(regionMesh().V()) << ", "
224  << gSum(newV) << " [m3]" << endl;
225 
226  // move the mesh
227  const labelList moveMap = moveMesh(regionMesh().V() - newV, minimumDelta_);
228 
229  // flag any cells that have not moved as non-reacting
230  forAll(moveMap, i)
231  {
232  if (moveMap[i] == 0)
233  {
234  solidChemistry_->setCellReacting(i, false);
235  }
236  }
237 }
238 
239 
241 {
242  if (debug)
243  {
244  InfoInFunction << endl;
245  }
246 
247  const scalarField mass0 = rho_*regionMesh().V();
248 
249  fvScalarMatrix rhoEqn
250  (
251  fvm::ddt(rho_) == -solidChemistry_->RRg()
252  );
253 
254  if (regionMesh().moving())
255  {
256  surfaceScalarField phiRhoMesh
257  (
259  );
260 
261  rhoEqn += fvc::div(phiRhoMesh);
262  }
263 
264  rhoEqn.solve();
265 
266  updateMesh(mass0);
267 }
268 
269 
271 {
272  if (debug)
273  {
274  InfoInFunction << endl;
275  }
276 
277  volScalarField Yt(0.0*Ys_[0]);
278 
279  for (label i=0; i<Ys_.size()-1; i++)
280  {
281  volScalarField& Yi = Ys_[i];
282 
283  fvScalarMatrix YiEqn
284  (
285  fvm::ddt(rho_, Yi) == solidChemistry_->RRs(i)
286  );
287 
288  if (regionMesh().moving())
289  {
290  surfaceScalarField phiYiRhoMesh
291  (
293  );
294 
295  YiEqn += fvc::div(phiYiRhoMesh);
296 
297  }
298 
299  YiEqn.solve(regionMesh().solver("Yi"));
300  Yi.max(0.0);
301  Yt += Yi;
302  }
303 
304  Ys_[Ys_.size() - 1] = 1.0 - Yt;
305 
306 }
307 
308 
310 {
311  if (debug)
312  {
313  InfoInFunction << endl;
314  }
315 
317 
318  fvScalarMatrix hEqn
319  (
320  fvm::ddt(rho_, h_)
323  - fvc::laplacian(kappa(), T())
324  ==
326  - fvm::Sp(solidChemistry_->RRg(), h_)
327  );
328 
329  if (gasHSource_)
330  {
332  hEqn += fvc::div(phiGas);
333  }
334 
335  if (qrHSource_)
336  {
338  hEqn += fvc::div(phiqr);
339  }
340 
341  if (regionMesh().moving())
342  {
343  surfaceScalarField phihMesh
344  (
346  );
347 
348  hEqn += fvc::div(phihMesh);
349  }
350 
351  hEqn.relax();
352  hEqn.solve();
353 }
354 
355 
357 {
358  totalGasMassFlux_ = 0;
360  {
361  const label patchi = intCoupledPatchIDs_[i];
363  }
364 
365  if (infoOutput_)
366  {
368 
369  addedGasMass_ +=
371  lostSolidMass_ +=
373  }
374 }
375 
376 
377 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
378 
379 reactingOneDim::reactingOneDim
380 (
381  const word& modelType,
382  const fvMesh& mesh,
383  const word& regionType
384 )
385 :
386  pyrolysisModel(modelType, mesh, regionType),
390  rho_
391  (
392  IOobject
393  (
394  "rho",
395  regionMesh().time().timeName(),
396  regionMesh(),
399  ),
400  solidThermo_->rho()
401  ),
402  Ys_(solidThermo_->composition().Y()),
403  h_(solidThermo_->he()),
404  nNonOrthCorr_(-1),
405  maxDiff_(10),
406  minimumDelta_(1e-4),
407 
408  phiGas_
409  (
410  IOobject
411  (
412  "phiGas",
413  time().timeName(),
414  regionMesh(),
417  ),
418  regionMesh(),
419  dimensionedScalar("zero", dimMass/dimTime, 0.0)
420  ),
421 
422  phiHsGas_
423  (
424  IOobject
425  (
426  "phiHsGas",
427  time().timeName(),
428  regionMesh(),
431  ),
432  regionMesh(),
433  dimensionedScalar("zero", dimEnergy/dimTime, 0.0)
434  ),
435 
437  (
438  IOobject
439  (
440  "chemistryQdot",
441  time().timeName(),
442  regionMesh(),
445  ),
446  regionMesh(),
448  ),
449 
450  qr_
451  (
452  IOobject
453  (
454  "qr",
455  time().timeName(),
456  regionMesh(),
459  ),
460  regionMesh()
461  ),
462 
464  addedGasMass_(dimensionedScalar("zero", dimMass, 0.0)),
465  totalGasMassFlux_(0.0),
467  gasHSource_(false),
468  qrHSource_(false),
470 {
471  if (active_)
472  {
473  read();
474  }
475 }
476 
477 
478 reactingOneDim::reactingOneDim
479 (
480  const word& modelType,
481  const fvMesh& mesh,
482  const dictionary& dict,
483  const word& regionType
484 )
485 :
486  pyrolysisModel(modelType, mesh, dict, regionType),
490  rho_
491  (
492  IOobject
493  (
494  "rho",
495  regionMesh().time().timeName(),
496  regionMesh(),
499  ),
500  solidThermo_->rho()
501  ),
502  Ys_(solidThermo_->composition().Y()),
503  h_(solidThermo_->he()),
504  nNonOrthCorr_(-1),
505  maxDiff_(10),
506  minimumDelta_(1e-4),
507 
508  phiGas_
509  (
510  IOobject
511  (
512  "phiGas",
513  time().timeName(),
514  regionMesh(),
517  ),
518  regionMesh(),
519  dimensionedScalar("zero", dimMass/dimTime, 0.0)
520  ),
521 
522  phiHsGas_
523  (
524  IOobject
525  (
526  "phiHsGas",
527  time().timeName(),
528  regionMesh(),
531  ),
532  regionMesh(),
533  dimensionedScalar("zero", dimEnergy/dimTime, 0.0)
534  ),
535 
537  (
538  IOobject
539  (
540  "chemistryQdot",
541  time().timeName(),
542  regionMesh(),
545  ),
546  regionMesh(),
548  ),
549 
550  qr_
551  (
552  IOobject
553  (
554  "qr",
555  time().timeName(),
556  regionMesh(),
559  ),
560  regionMesh()
561  ),
562 
564  addedGasMass_(dimensionedScalar("zero", dimMass, 0.0)),
565  totalGasMassFlux_(0.0),
567  gasHSource_(false),
568  qrHSource_(false),
570 {
571  if (active_)
572  {
573  read(dict);
574  }
575 }
576 
577 
578 // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
579 
581 {}
582 
583 
584 // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
585 
587 {
588  label index = 0;
590  {
591  if (primaryPatchIDs_[i] == patchi)
592  {
593  index = i;
594  break;
595  }
596  }
597 
598  const label localPatchId = intCoupledPatchIDs_[index];
599 
600  const scalar massAdded = phiGas_.boundaryField()[localPatchId][facei];
601 
602  if (debug)
603  {
604  Info<< "\nPyrolysis region: " << type() << "added mass : "
605  << massAdded << endl;
606  }
607 
608  return massAdded;
609 }
610 
611 
613 {
614  scalar DiNum = -great;
615 
616  if (regionMesh().nInternalFaces() > 0)
617  {
618  surfaceScalarField KrhoCpbyDelta
619  (
623  );
624 
625  DiNum = max(KrhoCpbyDelta.primitiveField())*time().deltaTValue();
626  }
627 
628  return DiNum;
629 }
630 
631 
633 {
634  return maxDiff_;
635 }
636 
637 
639 {
640  return rho_;
641 }
642 
643 
645 {
646  return solidThermo_->T();
647 }
648 
649 
651 {
652  return solidThermo_->Cp();
653 }
654 
655 
657 {
658  return radiation_->absorptionEmission().a();
659 }
660 
661 
663 {
664  return solidThermo_->kappa();
665 }
666 
667 
669 {
670  return phiGas_;
671 }
672 
673 
675 {
677 
678  // Initialise all cells as able to react
679  forAll(h_, celli)
680  {
681  solidChemistry_->setCellReacting(celli, true);
682  }
683 }
684 
685 
687 {
688  Info<< "\nEvolving pyrolysis in region: " << regionMesh().name() << endl;
689 
691  {
692  solidChemistry_->solve(time().deltaTValue());
693  }
694  else
695  {
696  solidChemistry_->calculate();
697  }
698 
699  solveContinuity();
700 
701  chemistryQdot_ = solidChemistry_->Qdot()();
702 
703  updateFields();
704 
706 
707  for (int nonOrth=0; nonOrth<=nNonOrthCorr_; nonOrth++)
708  {
709  solveEnergy();
710  }
711 
713 
714  solidThermo_->correct();
715 
716  Info<< "pyrolysis min/max(T) = "
717  << gMin(solidThermo_->T().primitiveField())
718  << ", "
719  << gMax(solidThermo_->T().primitiveField())
720  << endl;
721 }
722 
723 
725 {
726  Info<< "\nPyrolysis in region: " << regionMesh().name() << endl;
727 
728  Info<< indent << "Total gas mass produced [kg] = "
729  << addedGasMass_.value() << nl
730  << indent << "Total solid mass lost [kg] = "
731  << lostSolidMass_.value() << nl
732  << indent << "Total pyrolysis gases [kg/s] = "
733  << totalGasMassFlux_ << nl
734  << indent << "Total heat release rate [J/s] = "
735  << totalHeatRR_.value() << nl;
736 }
737 
738 
739 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
740 
741 } // End namespace Foam
742 } // End namespace regionModels
743 } // End namespace pyrolysisModels
744 
745 // ************************************************************************* //
scalar DiNum
virtual const volScalarField & T() const
Return const temperature [K].
scalar delta
bool useChemistrySolvers_
Use chemistry solvers (ode or sequential)
#define forAll(list, i)
Loop across all elements in list.
Definition: UList.H:428
volScalarField chemistryQdot_
Heat release rate [J/s/m3].
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
Ostream & indent(Ostream &os)
Indent stream.
Definition: Ostream.H:226
dimensionedScalar addedGasMass_
Cumulative mass generation of the gas phase [kg].
surfaceScalarField & phi
bool moving() const
Is mesh moving.
Definition: polyMesh.H:502
A list of keyword definitions, which are a keyword followed by any number of values (e...
Definition: dictionary.H:137
dimensioned< Type > max(const dimensioned< Type > &, const dimensioned< Type > &)
const surfaceVectorField & Cf() const
Return face centres as surfaceVectorField.
Type gMin(const FieldField< Field, Type > &f)
virtual tmp< volScalarField > kappa() const
Return the region thermal conductivity [W/m/k].
const Boundary & boundaryField() const
Return const-reference to the boundary field.
scalar totalGasMassFlux_
Total mass gas flux at the pyrolysing walls [kg/s].
dimensionedSymmTensor sqr(const dimensionedVector &dv)
tmp< GeometricField< Type, fvPatchField, volMesh > > div(const GeometricField< Type, fvsPatchField, surfaceMesh > &ssf)
Definition: fvcDiv.C:47
virtual const surfaceScalarField & phiGas() const
Return the total gas mass flux to primary region [kg/m2/s].
Ostream & endl(Ostream &os)
Add newline and flush stream.
Definition: Ostream.H:256
tmp< labelField > moveMesh(const scalarList &deltaV, const scalar minDelta=0.0)
Move mesh points according to change in cell volumes.
#define forAllReverse(list, i)
Reverse loop across all elements in list.
Definition: UList.H:440
dimensioned< Type > domainIntegrate(const GeometricField< Type, fvPatchField, volMesh > &vf)
const Internal::FieldType & primitiveField() const
Return a const-reference to the internal field.
autoPtr< solidReactionThermo > solidThermo_
Reference to solid thermo.
label k
Boltzmann constant.
const Time & time() const
Return the reference to the time database.
Definition: regionModelI.H:37
tmp< fvMatrix< Type > > Sp(const volScalarField::Internal &, const GeometricField< Type, fvPatchField, volMesh > &)
const DimensionedField< scalar, volMesh > & V() const
Return cell volumes.
tmp< GeometricField< Type, fvPatchField, volMesh > > laplacian(const GeometricField< Type, fvPatchField, volMesh > &vf, const word &name)
Definition: fvcLaplacian.C:45
virtual bool read()
Read control parameters.
autoPtr< radiation::radiationModel > radiation_
Pointer to radiation model.
scalar minimumDelta_
Minimum delta for combustion.
Macros for easy insertion into run-time selection tables.
dimensionedScalar totalHeatRR_
Total heat release rate [J/s].
void solveSpeciesMass()
Solve solid species mass conservation.
const dictionary & subDict(const word &) const
Find and return a sub-dictionary.
Definition: dictionary.C:692
dictionary()
Construct top-level dictionary null.
Definition: dictionary.C:238
static autoPtr< basicSolidChemistryModel > New(solidReactionThermo &thermo)
Selector.
Switch moveMesh_
Flag to allow mesh movement.
Definition: regionModel1D.H:96
autoPtr< basicSolidChemistryModel > solidChemistry_
Reference to the solid chemistry model.
const volScalarField & rho() const
Fields.
const dimensionSet dimVolume(pow3(dimLength))
Definition: dimensionSets.H:58
const dimensionSet & dimensions() const
Return dimensions.
static autoPtr< radiationModel > New(const volScalarField &T)
Return a reference to the selected radiation model.
Type gSum(const FieldField< Field, Type > &f)
surfaceScalarField phiGas_
Total gas mass flux to the primary region [kg/m2/s].
dimensionedScalar exp(const dimensionedScalar &ds)
const cellShapeList & cells
virtual void preEvolveRegion()
Pre-evolve region.
Definition: regionModel.C:519
A class for handling words, derived from string.
Definition: word.H:59
Calculate the laplacian of the given field.
labelListList boundaryFaceCells_
Global cell IDs.
Definition: regionModel1D.H:81
const dictionary & solution() const
Return the solution dictionary.
Definition: regionModelI.H:103
tmp< fvMatrix< Type > > ddt(const GeometricField< Type, fvPatchField, volMesh > &vf)
Definition: fvmDdt.C:46
scalar deltaTValue() const
Return time step value.
Definition: TimeStateI.H:41
const Type & value() const
Return const reference to value.
const fvMesh & regionMesh() const
Return the region mesh database.
Definition: regionModelI.H:61
virtual void info()
Provide some feedback.
virtual scalar maxDiff() const
Return max diffusivity allowed in the solid.
Volume integrate volField creating a volField.
A special matrix type and solver, designed for finite volume solutions of scalar equations. Face addressing is used to make all matrix assembly and solution loops vectorise.
Definition: fvPatchField.H:72
Switch infoOutput_
Active information output.
Definition: regionModel.H:93
word timeName
Definition: getTimeIndex.H:3
volScalarField phiHsGas_
Sensible enthalpy gas flux [J/m2/s].
const vectorField & cellCentres() const
void updateqr()
Update radiative flux in pyrolysis region.
bool qrHSource_
Add in depth radiation source term.
Calculate the divergence of the given field.
virtual scalar solidRegionDiffNo() const
Mean diffusion number of the solid region.
virtual const tmp< volScalarField > Cp() const
Return specific heat capacity [J/kg/K].
static const char nl
Definition: Ostream.H:265
const surfaceScalarField & nMagSf() const
Return the face area magnitudes / [m2].
Switch active_
Active flag.
Definition: regionModel.H:90
Type gMax(const FieldField< Field, Type > &f)
void updateMesh(const scalarField &mass0)
Update/move mesh based on change in mass.
fileName::Type type(const fileName &, const bool followLink=true)
Return the file type: DIRECTORY or FILE.
Definition: POSIX.C:481
const dimensionSet dimEnergy
static tmp< GeometricField< Type, fvsPatchField, surfaceMesh > > interpolate(const GeometricField< Type, fvPatchField, volMesh > &tvf, const surfaceScalarField &faceFlux, Istream &schemeData)
Interpolate field onto faces using scheme given by Istream.
dimensionedScalar lostSolidMass_
Cumulative lost mass of the condensed phase [kg].
virtual scalar addMassSources(const label patchi, const label facei)
External hook to add mass to the primary region.
virtual tmp< volScalarField > kappaRad() const
Return the region absorptivity [1/m].
label patchi
static autoPtr< solidReactionThermo > New(const fvMesh &, const word &phaseName=word::null)
Standard selection based on fvMesh.
T lookupOrDefault(const word &, const T &, bool recursive=false, bool patternMatch=true) const
Find and return a T,.
const word & name() const
Return reference to name.
Definition: fvMesh.H:257
Boundary & boundaryFieldRef()
Return a reference to the boundary field.
A wordList with hashed indices for faster lookup by name.
dimensioned< scalar > dimensionedScalar
Dimensioned scalar obtained from generic dimensioned type.
tmp< fvMatrix< Type > > laplacian(const GeometricField< Type, fvPatchField, volMesh > &vf, const word &name)
Definition: fvmLaplacian.C:46
const Time & time_
Reference to the time database.
Definition: regionModel.H:87
void max(const dimensioned< Type > &)
Mesh data needed to do the Finite Volume discretisation.
Definition: fvMesh.H:78
virtual void evolveRegion()
Evolve the pyrolysis equations.
Field with dimensions and associated with geometry type GeoMesh which is used to size the field and a...
const dictionary & controlDict() const
Definition: Time.H:271
void updatePhiGas()
Update enthalpy flux for pyrolysis gases.
const dimensionSet dimTime(0, 0, 1, 0, 0, 0, 0)
Definition: dimensionSets.H:51
void correctBoundaryConditions()
Correct boundary field.
messageStream Info
label nNonOrthCorr_
Number of non-orthogonal correctors.
dimensioned< scalar > mag(const dimensioned< Type > &)
PtrList< volScalarField > & Ys_
List of solid components.
const doubleScalar e
Elementary charge.
Definition: doubleScalar.H:98
const dimensionSet dimMass(1, 0, 0, 0, 0, 0, 0)
Definition: dimensionSets.H:49
void solveContinuity()
Solve continuity equation.
labelList intCoupledPatchIDs_
List of patch IDs internally coupled with the primary region.
Definition: regionModel.H:114
A class for managing temporary objects.
Definition: PtrList.H:53
const dictionary & coeffs() const
Return the model coefficients dictionary.
Definition: regionModelI.H:96
const dimensionedScalar alpha
Fine-structure constant: default SI units: [].
IOobject defines the attributes of an object for which implicit objectRegistry management is supporte...
Definition: IOobject.H:92
bool gasHSource_
Add gas enthalpy source term.
virtual void preEvolveRegion()
Pre-evolve region.
volScalarField qr_
Coupled region radiative heat flux [W/m2].
labelList primaryPatchIDs_
List of patch IDs on the primary region coupled to this region.
Definition: regionModel.H:111
const surfaceScalarField & deltaCoeffs() const
Return reference to cell-centre difference coefficients.
dimensionedScalar deltaT() const
Return time step.
Definition: TimeStateI.H:53
bool read()
Read control parameters from dictionary.
Namespace for OpenFOAM.
addToRunTimeSelectionTable(pyrolysisModel, noPyrolysis, mesh)
volScalarField Yt(0.0 *Y[0])
ITstream & lookup(const word &, bool recursive=false, bool patternMatch=true) const
Find and return an entry data stream.
Definition: dictionary.C:576
#define InfoInFunction
Report an information message using Foam::Info.