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-2019 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
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 {
150  phiGas_ == dimensionedScalar(phiGas_.dimensions(), 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 =
165  phiGas_.boundaryFieldRef();
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) << " [m^3]" << 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("Yi");
300  Yi.max(0.0);
301  Yt += Yi;
302  }
303 
304  Ys_[Ys_.size() - 1] = 1.0 - Yt;
305 }
306 
307 
309 {
310  if (debug)
311  {
312  InfoInFunction << endl;
313  }
314 
316 
317  fvScalarMatrix hEqn
318  (
319  fvm::ddt(rho_, h_)
322  - fvc::laplacian(kappa(), T())
323  ==
325  - fvm::Sp(solidChemistry_->RRg(), h_)
326  );
327 
328  if (gasHSource_)
329  {
331  hEqn += fvc::div(phiGas);
332  }
333 
334  if (qrHSource_)
335  {
337  hEqn += fvc::div(phiqr);
338  }
339 
340  if (regionMesh().moving())
341  {
342  surfaceScalarField phihMesh
343  (
345  );
346 
347  hEqn += fvc::div(phihMesh);
348  }
349 
350  hEqn.relax();
351  hEqn.solve();
352 }
353 
354 
356 {
357  totalGasMassFlux_ = 0;
359  {
360  const label patchi = intCoupledPatchIDs_[i];
362  }
363 
364  if (infoOutput_)
365  {
367 
368  addedGasMass_ +=
370  lostSolidMass_ +=
372  }
373 }
374 
375 
376 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
377 
379 (
380  const word& modelType,
381  const fvMesh& mesh,
382  const word& regionType
383 )
384 :
385  pyrolysisModel(modelType, mesh, regionType),
389  rho_
390  (
391  IOobject
392  (
393  "rho",
394  regionMesh().time().timeName(),
395  regionMesh(),
398  ),
399  solidThermo_->rho()
400  ),
401  Ys_(solidThermo_->composition().Y()),
402  h_(solidThermo_->he()),
403  nNonOrthCorr_(-1),
404  maxDiff_(10),
405  minimumDelta_(1e-4),
406 
407  phiGas_
408  (
409  IOobject
410  (
411  "phiGas",
412  time().timeName(),
413  regionMesh(),
416  ),
417  regionMesh(),
419  ),
420 
421  phiHsGas_
422  (
423  IOobject
424  (
425  "phiHsGas",
426  time().timeName(),
427  regionMesh(),
430  ),
431  regionMesh(),
433  ),
434 
436  (
437  IOobject
438  (
439  "chemistryQdot",
440  time().timeName(),
441  regionMesh(),
444  ),
445  regionMesh(),
447  ),
448 
449  qr_
450  (
451  IOobject
452  (
453  "qr",
454  time().timeName(),
455  regionMesh(),
458  ),
459  regionMesh()
460  ),
461 
464  totalGasMassFlux_(0.0),
466  gasHSource_(false),
467  qrHSource_(false),
469 {
470  if (active_)
471  {
472  read();
473  }
474 }
475 
476 
478 (
479  const word& modelType,
480  const fvMesh& mesh,
481  const dictionary& dict,
482  const word& regionType
483 )
484 :
485  pyrolysisModel(modelType, mesh, dict, regionType),
489  rho_
490  (
491  IOobject
492  (
493  "rho",
494  regionMesh().time().timeName(),
495  regionMesh(),
498  ),
499  solidThermo_->rho()
500  ),
501  Ys_(solidThermo_->composition().Y()),
502  h_(solidThermo_->he()),
503  nNonOrthCorr_(-1),
504  maxDiff_(10),
505  minimumDelta_(1e-4),
506 
507  phiGas_
508  (
509  IOobject
510  (
511  "phiGas",
512  time().timeName(),
513  regionMesh(),
516  ),
517  regionMesh(),
519  ),
520 
521  phiHsGas_
522  (
523  IOobject
524  (
525  "phiHsGas",
526  time().timeName(),
527  regionMesh(),
530  ),
531  regionMesh(),
533  ),
534 
536  (
537  IOobject
538  (
539  "chemistryQdot",
540  time().timeName(),
541  regionMesh(),
544  ),
545  regionMesh(),
547  ),
548 
549  qr_
550  (
551  IOobject
552  (
553  "qr",
554  time().timeName(),
555  regionMesh(),
558  ),
559  regionMesh()
560  ),
561 
564  totalGasMassFlux_(0.0),
566  gasHSource_(false),
567  qrHSource_(false),
569 {
570  if (active_)
571  {
572  read(dict);
573  }
574 }
575 
576 
577 // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
578 
580 {}
581 
582 
583 // * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
584 
586 {
587  label index = 0;
589  {
590  if (primaryPatchIDs_[i] == patchi)
591  {
592  index = i;
593  break;
594  }
595  }
596 
597  const label localPatchId = intCoupledPatchIDs_[index];
598 
599  const scalar massAdded = phiGas_.boundaryField()[localPatchId][facei];
600 
601  if (debug)
602  {
603  Info<< "\nPyrolysis region: " << type() << "added mass : "
604  << massAdded << endl;
605  }
606 
607  return massAdded;
608 }
609 
610 
612 {
613  scalar DiNum = -great;
614 
615  if (regionMesh().nInternalFaces() > 0)
616  {
617  surfaceScalarField KrhoCpbyDelta
618  (
622  );
623 
624  DiNum = max(KrhoCpbyDelta.primitiveField())*time().deltaTValue();
625  }
626 
627  return DiNum;
628 }
629 
630 
632 {
633  return maxDiff_;
634 }
635 
636 
638 {
639  return rho_;
640 }
641 
642 
644 {
645  return solidThermo_->T();
646 }
647 
648 
650 {
651  return solidThermo_->Cp();
652 }
653 
654 
656 {
657  return radiation_->absorptionEmission().a();
658 }
659 
660 
662 {
663  return solidThermo_->kappa();
664 }
665 
666 
668 {
669  return phiGas_;
670 }
671 
672 
674 {
676 
677  // Initialise all cells as able to react
678  forAll(h_, celli)
679  {
680  solidChemistry_->setCellReacting(celli, true);
681  }
682 }
683 
684 
686 {
687  Info<< "\nEvolving pyrolysis in region: " << regionMesh().name() << endl;
688 
690  {
691  solidChemistry_->solve(time().deltaTValue());
692  }
693  else
694  {
695  solidChemistry_->calculate();
696  }
697 
698  solveContinuity();
699 
700  chemistryQdot_ = solidChemistry_->Qdot()();
701 
702  updateFields();
703 
705 
706  for (int nonOrth=0; nonOrth<=nNonOrthCorr_; nonOrth++)
707  {
708  solveEnergy();
709  }
710 
712 
713  solidThermo_->correct();
714 
715  Info<< "pyrolysis min/max(T) = "
716  << gMin(solidThermo_->T().primitiveField())
717  << ", "
718  << gMax(solidThermo_->T().primitiveField())
719  << endl;
720 }
721 
722 
724 {
725  Info<< "\nPyrolysis in region: " << regionMesh().name() << endl;
726 
727  Info<< indent << "Total gas mass produced [kg] = "
728  << addedGasMass_.value() << nl
729  << indent << "Total solid mass lost [kg] = "
730  << lostSolidMass_.value() << nl
731  << indent << "Total pyrolysis gases [kg/s] = "
732  << totalGasMassFlux_ << nl
733  << indent << "Total heat release rate [J/s] = "
734  << totalHeatRR_.value() << nl;
735 }
736 
737 
738 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
739 
740 } // End namespace Foam
741 } // End namespace regionModels
742 } // End namespace pyrolysisModels
743 
744 // ************************************************************************* //
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:434
volScalarField chemistryQdot_
Heat release rate [J/s/m^3].
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:512
A list of keyword definitions, which are a keyword followed by any number of values (e...
Definition: dictionary.H:158
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/m^2/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:446
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.
static autoPtr< radiationModel > New(const volScalarField &T)
Return a reference to the selected 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:699
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.
Type gSum(const FieldField< Field, Type > &f)
surfaceScalarField phiGas_
Total gas mass flux to the primary region [kg/m^2/s].
dimensionedScalar exp(const dimensionedScalar &ds)
const cellShapeList & cells
reactingOneDim(const word &modelType, const fvMesh &mesh, const word &regionType)
Construct from type name and mesh.
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:90
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 / [m^2].
Switch active_
Active flag.
Definition: regionModel.H:87
Type gMax(const FieldField< Field, Type > &f)
void updateMesh(const scalarField &mass0)
Update/move mesh based on change in mass.
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.
autoPtr< radiationModel > radiation_
Pointer to radiation model.
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:253
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:84
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.
fileType type(const fileName &, const bool checkVariants=true, const bool followLink=true)
Return the file type: directory or file.
Definition: POSIX.C:488
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
const dimensionSet & dimensions() const
Return const reference to dimensions.
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
pyrolysisModel(const fvMesh &mesh, const word &regionType)
Construct null from mesh.
const dimensionSet dimMass(1, 0, 0, 0, 0, 0, 0)
Definition: dimensionSets.H:49
volScalarField alpha(IOobject("alpha", runTime.timeName(), mesh, IOobject::READ_IF_PRESENT, IOobject::AUTO_WRITE), lambda *max(Ua &U, zeroSensitivity))
void solveContinuity()
Solve continuity equation.
labelList intCoupledPatchIDs_
List of patch IDs internally coupled with the primary region.
Definition: regionModel.H:111
A class for managing temporary objects.
Definition: PtrList.H:53
const dictionary & coeffs() const
Return the model coefficients dictionary.
Definition: regionModelI.H:96
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/m^2].
labelList primaryPatchIDs_
List of patch IDs on the primary region coupled to this region.
Definition: regionModel.H:108
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:583
#define InfoInFunction
Report an information message using Foam::Info.