ReactingMultiphaseParcel.C
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration |
5  \\ / A nd | www.openfoam.com
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8  Copyright (C) 2011-2017 OpenFOAM Foundation
9  Copyright (C) 2019 OpenCFD Ltd.
10 -------------------------------------------------------------------------------
11 License
12  This file is part of OpenFOAM.
13 
14  OpenFOAM is free software: you can redistribute it and/or modify it
15  under the terms of the GNU General Public License as published by
16  the Free Software Foundation, either version 3 of the License, or
17  (at your option) any later version.
18 
19  OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
20  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
21  FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
22  for more details.
23 
24  You should have received a copy of the GNU General Public License
25  along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
26 
27 \*---------------------------------------------------------------------------*/
28 
30 #include "mathematicalConstants.H"
31 
32 using namespace Foam::constant::mathematical;
33 
34 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
35 
36 template<class ParcelType>
38 
39 template<class ParcelType>
41 
42 template<class ParcelType>
44 
45 
46 // * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * * //
47 
48 template<class ParcelType>
49 template<class TrackCloudType>
51 (
52  TrackCloudType& cloud,
53  trackingData& td,
54  const scalar p,
55  const scalar T,
56  const label idG,
57  const label idL,
58  const label idS
59 ) const
60 {
61  return
62  this->Y_[GAS]*cloud.composition().Cp(idG, YGas_, p, T)
63  + this->Y_[LIQ]*cloud.composition().Cp(idL, YLiquid_, p, T)
64  + this->Y_[SLD]*cloud.composition().Cp(idS, YSolid_, p, T);
65 }
66 
67 
68 template<class ParcelType>
69 template<class TrackCloudType>
71 (
72  TrackCloudType& cloud,
73  trackingData& td,
74  const scalar p,
75  const scalar T,
76  const label idG,
77  const label idL,
78  const label idS
79 ) const
80 {
81  return
82  this->Y_[GAS]*cloud.composition().Hs(idG, YGas_, p, T)
83  + this->Y_[LIQ]*cloud.composition().Hs(idL, YLiquid_, p, T)
84  + this->Y_[SLD]*cloud.composition().Hs(idS, YSolid_, p, T);
85 }
86 
87 
88 template<class ParcelType>
89 template<class TrackCloudType>
91 (
92  TrackCloudType& cloud,
93  trackingData& td,
94  const scalar p,
95  const scalar T,
96  const label idG,
97  const label idL,
98  const label idS
99 ) const
100 {
101  return
102  this->Y_[GAS]*cloud.composition().L(idG, YGas_, p, T)
103  + this->Y_[LIQ]*cloud.composition().L(idL, YLiquid_, p, T)
104  + this->Y_[SLD]*cloud.composition().L(idS, YSolid_, p, T);
105 }
106 
107 
108 template<class ParcelType>
110 (
111  const scalar mass0,
112  const scalarField& dMassGas,
113  const scalarField& dMassLiquid,
114  const scalarField& dMassSolid
115 )
116 {
117  scalarField& YMix = this->Y_;
118 
119  scalar massGas =
120  this->updateMassFraction(mass0*YMix[GAS], dMassGas, YGas_);
121  scalar massLiquid =
122  this->updateMassFraction(mass0*YMix[LIQ], dMassLiquid, YLiquid_);
123  scalar massSolid =
124  this->updateMassFraction(mass0*YMix[SLD], dMassSolid, YSolid_);
125 
126  scalar massNew = max(massGas + massLiquid + massSolid, ROOTVSMALL);
127 
128  YMix[GAS] = massGas/massNew;
129  YMix[LIQ] = massLiquid/massNew;
130  YMix[SLD] = massSolid/massNew;
131 
132  scalar Ytotal = sum(YMix);
133 
134  YMix[GAS] /= Ytotal;
135  YMix[LIQ] /= Ytotal;
136  YMix[SLD] /= Ytotal;
137 
138  return massNew;
139 }
140 
141 
142 // * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * * //
143 
144 template<class ParcelType>
145 template<class TrackCloudType>
147 (
148  TrackCloudType& cloud,
149  trackingData& td
150 )
151 {
152  ParcelType::setCellValues(cloud, td);
153 }
154 
155 
156 template<class ParcelType>
157 template<class TrackCloudType>
159 (
160  TrackCloudType& cloud,
161  trackingData& td,
162  const scalar dt
163 )
164 {
165  // Re-use correction from reacting parcel
166  ParcelType::cellValueSourceCorrection(cloud, td, dt);
167 }
168 
169 
170 template<class ParcelType>
171 template<class TrackCloudType>
173 (
174  TrackCloudType& cloud,
175  trackingData& td,
176  const scalar dt
177 )
178 {
179  typedef typename TrackCloudType::reactingCloudType reactingCloudType;
181  cloud.composition();
182 
183  // Define local properties at beginning of timestep
184  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
185 
186  const scalar np0 = this->nParticle_;
187  const scalar d0 = this->d_;
188  const vector& U0 = this->U_;
189  const scalar T0 = this->T_;
190  const scalar mass0 = this->mass();
191 
192  const scalar pc = td.pc();
193 
194  const scalarField& YMix = this->Y_;
195  const label idG = composition.idGas();
196  const label idL = composition.idLiquid();
197  const label idS = composition.idSolid();
198 
199 
200  // Calc surface values
201  scalar Ts, rhos, mus, Prs, kappas;
202  this->calcSurfaceValues(cloud, td, T0, Ts, rhos, mus, Prs, kappas);
203  scalar Res = this->Re(rhos, U0, td.Uc(), d0, mus);
204 
205 
206  // Sources
207  //~~~~~~~~
208 
209  // Explicit momentum source for particle
210  vector Su = Zero;
211 
212  // Linearised momentum source coefficient
213  scalar Spu = 0.0;
214 
215  // Momentum transfer from the particle to the carrier phase
216  vector dUTrans = Zero;
217 
218  // Explicit enthalpy source for particle
219  scalar Sh = 0.0;
220 
221  // Linearised enthalpy source coefficient
222  scalar Sph = 0.0;
223 
224  // Sensible enthalpy transfer from the particle to the carrier phase
225  scalar dhsTrans = 0.0;
226 
227 
228  // 1. Compute models that contribute to mass transfer - U, T held constant
229  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
230 
231  // Phase change in liquid phase
232  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
233 
234  // Mass transfer due to phase change
235  scalarField dMassPC(YLiquid_.size(), Zero);
236 
237  // Molar flux of species emitted from the particle (kmol/m^2/s)
238  scalar Ne = 0.0;
239 
240  // Sum Ni*Cpi*Wi of emission species
241  scalar NCpW = 0.0;
242 
243  // Surface concentrations of emitted species
244  scalarField Cs(composition.carrier().species().size(), Zero);
245 
246  // Calc mass and enthalpy transfer due to phase change
247  this->calcPhaseChange
248  (
249  cloud,
250  td,
251  dt,
252  Res,
253  Prs,
254  Ts,
255  mus/rhos,
256  d0,
257  T0,
258  mass0,
259  idL,
260  YMix[LIQ],
261  YLiquid_,
262  dMassPC,
263  Sh,
264  Ne,
265  NCpW,
266  Cs
267  );
268 
269 
270  // Devolatilisation
271  // ~~~~~~~~~~~~~~~~
272 
273  // Mass transfer due to devolatilisation
274  scalarField dMassDV(YGas_.size(), Zero);
275 
276  // Calc mass and enthalpy transfer due to devolatilisation
277  calcDevolatilisation
278  (
279  cloud,
280  td,
281  dt,
282  this->age_,
283  Ts,
284  d0,
285  T0,
286  mass0,
287  this->mass0_,
288  YMix[GAS]*YGas_,
289  YMix[LIQ]*YLiquid_,
290  YMix[SLD]*YSolid_,
291  canCombust_,
292  dMassDV,
293  Sh,
294  Ne,
295  NCpW,
296  Cs
297  );
298 
299  // Surface reactions
300  // ~~~~~~~~~~~~~~~~~
301 
302  // Change in carrier phase composition due to surface reactions
303  scalarField dMassSRGas(YGas_.size(), Zero);
304  scalarField dMassSRLiquid(YLiquid_.size(), Zero);
305  scalarField dMassSRSolid(YSolid_.size(), Zero);
306  scalarField dMassSRCarrier(composition.carrier().species().size(), Zero);
307 
308  // Calc mass and enthalpy transfer due to surface reactions
309  calcSurfaceReactions
310  (
311  cloud,
312  td,
313  dt,
314  d0,
315  Res,
316  mus/rhos,
317  T0,
318  mass0,
319  canCombust_,
320  Ne,
321  YMix,
322  YGas_,
323  YLiquid_,
324  YSolid_,
325  dMassSRGas,
326  dMassSRLiquid,
327  dMassSRSolid,
328  dMassSRCarrier,
329  Sh,
330  dhsTrans
331  );
332 
333  // 2. Update the parcel properties due to change in mass
334  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
335 
336  scalarField dMassGas(dMassDV + dMassSRGas);
337  scalarField dMassLiquid(dMassPC + dMassSRLiquid);
338  scalarField dMassSolid(dMassSRSolid);
339 
340  scalar mass1 = mass0 - sum(dMassGas) - sum(dMassLiquid) - sum(dMassSolid);
341 
342  // Remove the particle when mass falls below minimum threshold
343  if (np0*mass1 < cloud.constProps().minParcelMass())
344  {
345  td.keepParticle = false;
346 
347  if (cloud.solution().coupled())
348  {
349  scalar dm = np0*mass0;
350 
351  // Absorb parcel into carrier phase
352  forAll(YGas_, i)
353  {
354  label gid = composition.localToCarrierId(GAS, i);
355  cloud.rhoTrans(gid)[this->cell()] += dm*YMix[GAS]*YGas_[i];
356  }
357  forAll(YLiquid_, i)
358  {
359  label gid = composition.localToCarrierId(LIQ, i);
360  cloud.rhoTrans(gid)[this->cell()] += dm*YMix[LIQ]*YLiquid_[i];
361  }
362 
363  // No mapping between solid components and carrier phase
364  /*
365  forAll(YSolid_, i)
366  {
367  label gid = composition.localToCarrierId(SLD, i);
368  cloud.rhoTrans(gid)[this->cell()] += dm*YMix[SLD]*YSolid_[i];
369  }
370  */
371 
372  cloud.UTrans()[this->cell()] += dm*U0;
373 
374  cloud.hsTrans()[this->cell()] +=
375  dm*HsEff(cloud, td, pc, T0, idG, idL, idS);
376 
377  cloud.phaseChange().addToPhaseChangeMass(np0*mass1);
378  }
379 
380  return;
381  }
382 
383  (void)updateMassFractions(mass0, dMassGas, dMassLiquid, dMassSolid);
384 
385  // Update particle density or diameter
386  if (cloud.constProps().constantVolume())
387  {
388  this->rho_ = mass1/this->volume();
389  }
390  else
391  {
392  this->d_ = cbrt(mass1/this->rho_*6.0/pi);
393  }
394 
395  // Correct surface values due to emitted species
396  this->correctSurfaceValues(cloud, td, Ts, Cs, rhos, mus, Prs, kappas);
397  Res = this->Re(rhos, U0, td.Uc(), this->d_, mus);
398 
399 
400  // 3. Compute heat- and momentum transfers
401  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
402 
403  // Heat transfer
404  // ~~~~~~~~~~~~~
405 
406  // Calculate new particle temperature
407  this->T_ =
408  this->calcHeatTransfer
409  (
410  cloud,
411  td,
412  dt,
413  Res,
414  Prs,
415  kappas,
416  NCpW,
417  Sh,
418  dhsTrans,
419  Sph
420  );
421 
422 
423  this->Cp_ = CpEff(cloud, td, pc, this->T_, idG, idL, idS);
424 
425 
426  // Motion
427  // ~~~~~~
428 
429  // Calculate new particle velocity
430  this->U_ =
431  this->calcVelocity(cloud, td, dt, Res, mus, mass1, Su, dUTrans, Spu);
432 
433 
434  // 4. Accumulate carrier phase source terms
435  // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
436 
437  if (cloud.solution().coupled())
438  {
439  // Transfer mass lost to carrier mass, momentum and enthalpy sources
440  forAll(YGas_, i)
441  {
442  scalar dm = np0*dMassGas[i];
443  label gid = composition.localToCarrierId(GAS, i);
444  scalar hs = composition.carrier().Hs(gid, pc, T0);
445  cloud.rhoTrans(gid)[this->cell()] += dm;
446  cloud.UTrans()[this->cell()] += dm*U0;
447  cloud.hsTrans()[this->cell()] += dm*hs;
448  }
449  forAll(YLiquid_, i)
450  {
451  scalar dm = np0*dMassLiquid[i];
452  label gid = composition.localToCarrierId(LIQ, i);
453  scalar hs = composition.carrier().Hs(gid, pc, T0);
454  cloud.rhoTrans(gid)[this->cell()] += dm;
455  cloud.UTrans()[this->cell()] += dm*U0;
456  cloud.hsTrans()[this->cell()] += dm*hs;
457  }
458 
459  // No mapping between solid components and carrier phase
460  /*
461  forAll(YSolid_, i)
462  {
463  scalar dm = np0*dMassSolid[i];
464  label gid = composition.localToCarrierId(SLD, i);
465  scalar hs = composition.carrier().Hs(gid, pc, T0);
466  cloud.rhoTrans(gid)[this->cell()] += dm;
467  cloud.UTrans()[this->cell()] += dm*U0;
468  cloud.hsTrans()[this->cell()] += dm*hs;
469  }
470  */
471 
472  forAll(dMassSRCarrier, i)
473  {
474  scalar dm = np0*dMassSRCarrier[i];
475  scalar hs = composition.carrier().Hs(i, pc, T0);
476  cloud.rhoTrans(i)[this->cell()] += dm;
477  cloud.UTrans()[this->cell()] += dm*U0;
478  cloud.hsTrans()[this->cell()] += dm*hs;
479  }
480 
481  // Update momentum transfer
482  cloud.UTrans()[this->cell()] += np0*dUTrans;
483  cloud.UCoeff()[this->cell()] += np0*Spu;
484 
485  // Update sensible enthalpy transfer
486  cloud.hsTrans()[this->cell()] += np0*dhsTrans;
487  cloud.hsCoeff()[this->cell()] += np0*Sph;
488 
489  // Update radiation fields
490  if (cloud.radiation())
491  {
492  const scalar ap = this->areaP();
493  const scalar T4 = pow4(T0);
494  cloud.radAreaP()[this->cell()] += dt*np0*ap;
495  cloud.radT4()[this->cell()] += dt*np0*T4;
496  cloud.radAreaPT4()[this->cell()] += dt*np0*ap*T4;
497  }
498  }
499 }
500 
501 
502 // * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
503 
504 template<class ParcelType>
505 template<class TrackCloudType>
507 (
508  TrackCloudType& cloud,
509  trackingData& td,
510  const scalar dt,
511  const scalar age,
512  const scalar Ts,
513  const scalar d,
514  const scalar T,
515  const scalar mass,
516  const scalar mass0,
517  const scalarField& YGasEff,
518  const scalarField& YLiquidEff,
519  const scalarField& YSolidEff,
520  label& canCombust,
521  scalarField& dMassDV,
522  scalar& Sh,
523  scalar& N,
524  scalar& NCpW,
525  scalarField& Cs
526 ) const
527 {
528  // Check that model is active
529  if (!cloud.devolatilisation().active())
530  {
531  return;
532  }
533 
534  // Initialise demand-driven constants
535  (void)cloud.constProps().TDevol();
536  (void)cloud.constProps().LDevol();
537 
538  // Check that the parcel temperature is within necessary limits for
539  // devolatilisation to occur
540  if (T < cloud.constProps().TDevol() || canCombust == -1)
541  {
542  return;
543  }
544 
545  typedef typename TrackCloudType::reactingCloudType reactingCloudType;
547  cloud.composition();
548 
549 
550  // Total mass of volatiles evolved
551  cloud.devolatilisation().calculate
552  (
553  dt,
554  age,
555  mass0,
556  mass,
557  T,
558  YGasEff,
559  YLiquidEff,
560  YSolidEff,
561  canCombust,
562  dMassDV
563  );
564 
565  scalar dMassTot = sum(dMassDV);
566 
567  cloud.devolatilisation().addToDevolatilisationMass
568  (
569  this->nParticle_*dMassTot
570  );
571 
572  Sh -= dMassTot*cloud.constProps().LDevol()/dt;
573 
574  // Update molar emissions
575  if (cloud.heatTransfer().BirdCorrection())
576  {
577  // Molar average molecular weight of carrier mix
578  const scalar Wc = max(SMALL, td.rhoc()*RR*td.Tc()/td.pc());
579 
580  // Note: hardcoded gaseous diffusivities for now
581  // TODO: add to carrier thermo
582  const scalar beta = sqr(cbrt(15.0) + cbrt(15.0));
583 
584  forAll(dMassDV, i)
585  {
586  const label id = composition.localToCarrierId(GAS, i);
587  const scalar Cp = composition.carrier().Cp(id, td.pc(), Ts);
588  const scalar W = composition.carrier().W(id);
589  const scalar Ni = dMassDV[i]/(this->areaS(d)*dt*W);
590 
591  // Dab calc'd using API vapour mass diffusivity function
592  const scalar Dab =
593  3.6059e-3*(pow(1.8*Ts, 1.75))
594  *sqrt(1.0/W + 1.0/Wc)
595  /(td.pc()*beta);
596 
597  N += Ni;
598  NCpW += Ni*Cp*W;
599  Cs[id] += Ni*d/(2.0*Dab);
600  }
601  }
602 }
603 
604 
605 template<class ParcelType>
606 template<class TrackCloudType>
608 (
609  TrackCloudType& cloud,
610  trackingData& td,
611  const scalar dt,
612  const scalar d,
613  const scalar Re,
614  const scalar nu,
615  const scalar T,
616  const scalar mass,
617  const label canCombust,
618  const scalar N,
619  const scalarField& YMix,
620  const scalarField& YGas,
621  const scalarField& YLiquid,
622  const scalarField& YSolid,
623  scalarField& dMassSRGas,
624  scalarField& dMassSRLiquid,
625  scalarField& dMassSRSolid,
626  scalarField& dMassSRCarrier,
627  scalar& Sh,
628  scalar& dhsTrans
629 ) const
630 {
631  // Check that model is active
632  if (!cloud.surfaceReaction().active())
633  {
634  return;
635  }
636 
637  // Initialise demand-driven constants
638  (void)cloud.constProps().hRetentionCoeff();
639  (void)cloud.constProps().TMax();
640 
641  // Check that model is active
642  if (canCombust != 1)
643  {
644  return;
645  }
646 
647 
648  // Update surface reactions
649  const scalar hReaction = cloud.surfaceReaction().calculate
650  (
651  dt,
652  Re,
653  nu,
654  this->cell(),
655  d,
656  T,
657  td.Tc(),
658  td.pc(),
659  td.rhoc(),
660  mass,
661  YGas,
662  YLiquid,
663  YSolid,
664  YMix,
665  N,
666  dMassSRGas,
667  dMassSRLiquid,
668  dMassSRSolid,
669  dMassSRCarrier
670  );
671 
672  cloud.surfaceReaction().addToSurfaceReactionMass
673  (
674  this->nParticle_
675  *(sum(dMassSRGas) + sum(dMassSRLiquid) + sum(dMassSRSolid))
676  );
677 
678  const scalar xsi = min(T/cloud.constProps().TMax(), 1.0);
679  const scalar coeff =
680  (1.0 - xsi*xsi)*cloud.constProps().hRetentionCoeff();
681 
682  Sh += coeff*hReaction/dt;
683 
684  dhsTrans += (1.0 - coeff)*hReaction;
685 }
686 
687 
688 // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
689 
690 template<class ParcelType>
692 (
694 )
695 :
696  ParcelType(p),
697  YGas_(p.YGas_),
698  YLiquid_(p.YLiquid_),
699  YSolid_(p.YSolid_),
700  canCombust_(p.canCombust_)
701 {}
702 
703 
704 template<class ParcelType>
706 (
707  const ReactingMultiphaseParcel<ParcelType>& p,
708  const polyMesh& mesh
709 )
710 :
711  ParcelType(p, mesh),
712  YGas_(p.YGas_),
713  YLiquid_(p.YLiquid_),
714  YSolid_(p.YSolid_),
715  canCombust_(p.canCombust_)
716 {}
717 
718 
719 // * * * * * * * * * * * * * * IOStream operators * * * * * * * * * * * * * //
720 
722 
723 // ************************************************************************* //
Foam::constant::thermodynamic::RR
const scalar RR
Universal gas constant: default in [J/(kmol K)].
Definition: thermodynamicConstants.C:46
mathematicalConstants.H
p
volScalarField & p
Definition: createFieldRefs.H:8
Foam::ReactingMultiphaseParcel::cellValueSourceCorrection
void cellValueSourceCorrection(TrackCloudType &cloud, trackingData &td, const scalar dt)
Correct cell values using latest transfer information.
Definition: ReactingMultiphaseParcel.C:159
Foam::ReactingMultiphaseParcel::calc
void calc(TrackCloudType &cloud, trackingData &td, const scalar dt)
Update parcel properties over the time interval.
Definition: ReactingMultiphaseParcel.C:173
Foam::ReactingMultiphaseParcel::trackingData
ParcelType::trackingData trackingData
Use base tracking data.
Definition: ReactingMultiphaseParcel.H:129
Foam::Zero
static constexpr const zero Zero
Global zero (0)
Definition: zero.H:131
Foam::ReactingMultiphaseParcel::SLD
static const label SLD
Definition: ReactingMultiphaseParcel.H:79
Foam::fieldTypes::volume
const wordList volume
Standard volume field types (scalar, vector, tensor, etc)
composition
basicSpecieMixture & composition
Definition: createFieldRefs.H:6
Foam::min
label min(const labelHashSet &set, label minValue=labelMax)
Find the min value in labelHashSet, optionally limited by second argument.
Definition: hashSets.C:33
forAll
#define forAll(list, i)
Loop across all elements in list.
Definition: stdFoam.H:296
nu
volScalarField & nu
Definition: readMechanicalProperties.H:176
Su
zeroField Su
Definition: alphaSuSp.H:1
Foam::CompositionModel
Templated reacting parcel composition model class Consists of carrier species (via thermo package),...
Definition: ReactingCloud.H:58
Foam::pow4
dimensionedScalar pow4(const dimensionedScalar &ds)
Definition: dimensionedScalar.C:100
Foam::Field< scalar >
ReactingMultiphaseParcelIO.C
Foam::ReactingMultiphaseParcel
Multiphase variant of the reacting parcel class with one/two-way coupling with the continuous phase.
Definition: ReactingMultiphaseParcel.H:55
ReactingMultiphaseParcel.H
Foam::T
void T(FieldField< Field, Type > &f1, const FieldField< Field, Type > &f2)
Definition: FieldFieldFunctions.C:58
beta
dimensionedScalar beta("beta", dimless/dimTemperature, laminarTransport)
Foam::pow
dimensionedScalar pow(const dimensionedScalar &ds, const dimensionedScalar &expt)
Definition: dimensionedScalar.C:75
Foam::max
label max(const labelHashSet &set, label maxValue=labelMin)
Find the max value in labelHashSet, optionally limited by second argument.
Definition: hashSets.C:47
Foam::ReactingMultiphaseParcel::calcSurfaceReactions
void calcSurfaceReactions(TrackCloudType &cloud, trackingData &td, const scalar dt, const scalar d, const scalar Re, const scalar nu, const scalar T, const scalar mass, const label canCombust, const scalar N, const scalarField &YMix, const scalarField &YGas, const scalarField &YLiquid, const scalarField &YSolid, scalarField &dMassSRGas, scalarField &dMassSRLiquid, scalarField &dMassSRSolid, scalarField &dMassSRCarrier, scalar &Sh, scalar &dhsTrans) const
Calculate surface reactions.
Definition: ReactingMultiphaseParcel.C:608
mesh
dynamicFvMesh & mesh
Definition: createDynamicFvMesh.H:6
Foam::ReactingMultiphaseParcel::LIQ
static const label LIQ
Definition: ReactingMultiphaseParcel.H:78
Foam::cloud
A cloud is a registry collection of lagrangian particles.
Definition: cloud.H:57
Foam::ReactingMultiphaseParcel::GAS
static const label GAS
Definition: ReactingMultiphaseParcel.H:77
Foam::sqr
dimensionedSymmTensor sqr(const dimensionedVector &dv)
Definition: dimensionedSymmTensor.C:51
Foam::constant::mathematical
Mathematical constants.
Foam::constant::mathematical::pi
constexpr scalar pi(M_PI)
Foam::Vector< scalar >
Foam::sqrt
dimensionedScalar sqrt(const dimensionedScalar &ds)
Definition: dimensionedScalar.C:144
Foam::ReactingMultiphaseParcel::setCellValues
void setCellValues(TrackCloudType &cloud, trackingData &td)
Set cell values.
Definition: ReactingMultiphaseParcel.C:147
Foam::Re
scalarField Re(const UList< complex > &cf)
Extract real component.
Definition: complexField.C:159
Cp
const volScalarField & Cp
Definition: EEqn.H:7
Foam::sum
dimensioned< Type > sum(const DimensionedField< Type, GeoMesh > &df)
Definition: DimensionedFieldFunctions.C:327
Cs
const scalarField & Cs
Definition: solveBulkSurfactant.H:10
Foam::ReactingMultiphaseParcel::calcDevolatilisation
void calcDevolatilisation(TrackCloudType &cloud, trackingData &td, const scalar dt, const scalar age, const scalar Ts, const scalar d, const scalar T, const scalar mass, const scalar mass0, const scalarField &YGasEff, const scalarField &YLiquidEff, const scalarField &YSolidEff, label &canCombust, scalarField &dMassDV, scalar &Sh, scalar &N, scalar &NCpW, scalarField &Cs) const
Calculate Devolatilisation.
Definition: ReactingMultiphaseParcel.C:507
Foam::ReactingMultiphaseParcel::ReactingMultiphaseParcel
ReactingMultiphaseParcel(const polyMesh &mesh, const barycentric &coordinates, const label celli, const label tetFacei, const label tetPti)
Construct from mesh, position and topology.
Definition: ReactingMultiphaseParcelI.H:71
N
const Vector< label > N(dict.get< Vector< label >>("N"))
Foam::cbrt
dimensionedScalar cbrt(const dimensionedScalar &ds)
Definition: dimensionedScalar.C:155
T0
scalar T0
Definition: createFields.H:22
Foam::cell
A cell is defined as a list of faces with extra functionality.
Definition: cell.H:54