@@ -373,181 +373,190 @@ void Foam::dfChemistryModel<ThermoType>::setNumerics(Cantera::ReactorNet &sim)
373373template < class ThermoType >
374374void Foam ::dfChemistryModel < ThermoType > ::correctThermo ()
375375{
376- psi_ .oldTime () ;
377-
378- forAll (T_ , celli )
376+ try
379377 {
380- forAll (Y_ , i )
381- {
382- yTemp_ [i ] = Y_ [i ][celli ];
383- }
384- CanteraGas_ -> setState_PY (p_ [celli ], yTemp_ .begin ());
385- if (mixture_ .heName ()== "ha" )
386- {
387- CanteraGas_ -> setState_HP (thermo_ .he ()[celli ], p_ [celli ]); // setState_HP needs (J/kg)
388- }
389- else if (mixture_ .heName ()== "ea" )
378+ psi_ .oldTime () ;
379+
380+ forAll (T_ , celli )
390381 {
391- scalar ha = thermo_ .he ()[celli ] + p_ [celli ]/rho_ [celli ];
392- CanteraGas_ -> setState_HP (ha , p_ [celli ]);
393- }
382+ forAll (Y_ , i )
383+ {
384+ yTemp_ [i ] = Y_ [i ][celli ];
385+ }
386+ CanteraGas_ -> setState_PY (p_ [celli ], yTemp_ .begin ());
387+ if (mixture_ .heName ()== "ha" )
388+ {
389+ CanteraGas_ -> setState_HP (thermo_ .he ()[celli ], p_ [celli ]); // setState_HP needs (J/kg)
390+ }
391+ else if (mixture_ .heName ()== "ea" )
392+ {
393+ scalar ha = thermo_ .he ()[celli ] + p_ [celli ]/rho_ [celli ];
394+ CanteraGas_ -> setState_HP (ha , p_ [celli ]);
395+ }
394396
395397
396- T_ [celli ] = CanteraGas_ -> temperature ();
398+ T_ [celli ] = CanteraGas_ -> temperature ();
397399
398- psi_ [celli ] = mixture_ .psi (p_ [celli ],T_ [celli ]);
400+ psi_ [celli ] = mixture_ .psi (p_ [celli ],T_ [celli ]);
399401
400- rho_ [celli ] = mixture_ .rho (p_ [celli ],T_ [celli ]);
402+ rho_ [celli ] = mixture_ .rho (p_ [celli ],T_ [celli ]);
401403
402- mu_ [celli ] = mixture_ .CanteraTransport ()-> viscosity (); // Pa-s
404+ mu_ [celli ] = mixture_ .CanteraTransport ()-> viscosity (); // Pa-s
403405
404- alpha_ [celli ] = mixture_ .CanteraTransport ()-> thermalConductivity ()/(CanteraGas_ -> cp_mass ()); // kg/(m*s)
405- // thermalConductivity() W/m/K
406- // cp_mass() J/kg/K
406+ alpha_ [celli ] = mixture_ .CanteraTransport ()-> thermalConductivity ()/(CanteraGas_ -> cp_mass ()); // kg/(m*s)
407+ // thermalConductivity() W/m/K
408+ // cp_mass() J/kg/K
407409
408- if (mixture_ .transportModelName () == "UnityLewis" )
409- {
410- forAll (rhoD_ , i )
410+ if (mixture_ .transportModelName () == "UnityLewis" )
411411 {
412- rhoD_ [i ][celli ] = alpha_ [celli ];
412+ forAll (rhoD_ , i )
413+ {
414+ rhoD_ [i ][celli ] = alpha_ [celli ];
415+ }
413416 }
414- }
415- else
416- {
417- mixture_ .CanteraTransport ()-> getMixDiffCoeffsMass (dTemp_ .begin ()); // m2/s
418-
419- CanteraGas_ -> getEnthalpy_RT (hrtTemp_ .begin ()); //hrtTemp_=m_h0_RT non-dimension
420- // constant::physicoChemical::R.value() J/(mol·k)
421- const scalar RT = constant ::physicoChemical ::R .value ()* 1e3 * T_ [celli ]; // J/kmol/K
422- forAll (rhoD_ , i )
417+ else
423418 {
424- rhoD_ [ i ][ celli ] = rho_ [ celli ] * dTemp_ [ i ];
419+ mixture_ . CanteraTransport () -> getMixDiffCoeffsMass ( dTemp_ . begin ()); // m2/s
425420
426- // CanteraGas_->molecularWeight(i) kg/kmol
427- hai_ [i ][celli ] = hrtTemp_ [i ]* RT /CanteraGas_ -> molecularWeight (i );
421+ CanteraGas_ -> getEnthalpy_RT (hrtTemp_ .begin ()); //hrtTemp_=m_h0_RT non-dimension
422+ // constant::physicoChemical::R.value() J/(mol·k)
423+ const scalar RT = constant ::physicoChemical ::R .value ()* 1e3 * T_ [celli ]; // J/kmol/K
424+ forAll (rhoD_ , i )
425+ {
426+ rhoD_ [i ][celli ] = rho_ [celli ]* dTemp_ [i ];
427+
428+ // CanteraGas_->molecularWeight(i) kg/kmol
429+ hai_ [i ][celli ] = hrtTemp_ [i ]* RT /CanteraGas_ -> molecularWeight (i );
430+ }
428431 }
429432 }
430- }
431433
432434
433- const volScalarField ::Boundary & pBf = p_ .boundaryField ();
435+ const volScalarField ::Boundary & pBf = p_ .boundaryField ();
434436
435- volScalarField ::Boundary & rhoBf = rho_ .boundaryFieldRef ();
437+ volScalarField ::Boundary & rhoBf = rho_ .boundaryFieldRef ();
436438
437- volScalarField ::Boundary & TBf = T_ .boundaryFieldRef ();
439+ volScalarField ::Boundary & TBf = T_ .boundaryFieldRef ();
438440
439- volScalarField ::Boundary & psiBf = psi_ .boundaryFieldRef ();
441+ volScalarField ::Boundary & psiBf = psi_ .boundaryFieldRef ();
440442
441- volScalarField ::Boundary & hBf = thermo_ .he ().boundaryFieldRef ();
443+ volScalarField ::Boundary & hBf = thermo_ .he ().boundaryFieldRef ();
442444
443- volScalarField ::Boundary & muBf = mu_ .boundaryFieldRef ();
445+ volScalarField ::Boundary & muBf = mu_ .boundaryFieldRef ();
444446
445- volScalarField ::Boundary & alphaBf = alpha_ .boundaryFieldRef ();
447+ volScalarField ::Boundary & alphaBf = alpha_ .boundaryFieldRef ();
446448
447- forAll (T_ .boundaryField (), patchi )
448- {
449- const fvPatchScalarField & pp = pBf [patchi ];
450- fvPatchScalarField & prho = rhoBf [patchi ];
451- fvPatchScalarField & pT = TBf [patchi ];
452- fvPatchScalarField & ppsi = psiBf [patchi ];
453- fvPatchScalarField & ph = hBf [patchi ];
454- fvPatchScalarField & pmu = muBf [patchi ];
455- fvPatchScalarField & palpha = alphaBf [patchi ];
456-
457- if (pT .fixesValue ())
449+ forAll (T_ .boundaryField (), patchi )
458450 {
459- forAll (pT , facei )
451+ const fvPatchScalarField & pp = pBf [patchi ];
452+ fvPatchScalarField & prho = rhoBf [patchi ];
453+ fvPatchScalarField & pT = TBf [patchi ];
454+ fvPatchScalarField & ppsi = psiBf [patchi ];
455+ fvPatchScalarField & ph = hBf [patchi ];
456+ fvPatchScalarField & pmu = muBf [patchi ];
457+ fvPatchScalarField & palpha = alphaBf [patchi ];
458+
459+ if (pT .fixesValue ())
460460 {
461- forAll (Y_ , i )
461+ forAll (pT , facei )
462462 {
463- yTemp_ [i ] = Y_ [i ].boundaryField ()[patchi ][facei ];
464- }
465- CanteraGas_ -> setState_TPY (pT [facei ], pp [facei ], yTemp_ .begin ());
463+ forAll (Y_ , i )
464+ {
465+ yTemp_ [i ] = Y_ [i ].boundaryField ()[patchi ][facei ];
466+ }
467+ CanteraGas_ -> setState_TPY (pT [facei ], pp [facei ], yTemp_ .begin ());
466468
467- ph [facei ] = CanteraGas_ -> enthalpy_mass ();
469+ ph [facei ] = CanteraGas_ -> enthalpy_mass ();
468470
469- ppsi [facei ] = mixture_ .psi (pp [facei ],pT [facei ]);
471+ ppsi [facei ] = mixture_ .psi (pp [facei ],pT [facei ]);
470472
471- prho [facei ] = mixture_ .rho (pp [facei ],pT [facei ]);
473+ prho [facei ] = mixture_ .rho (pp [facei ],pT [facei ]);
472474
473- pmu [facei ] = mixture_ .CanteraTransport ()-> viscosity ();
475+ pmu [facei ] = mixture_ .CanteraTransport ()-> viscosity ();
474476
475- palpha [facei ] = mixture_ .CanteraTransport ()-> thermalConductivity ()/(CanteraGas_ -> cp_mass ());
477+ palpha [facei ] = mixture_ .CanteraTransport ()-> thermalConductivity ()/(CanteraGas_ -> cp_mass ());
476478
477- if (mixture_ .transportModelName () == "UnityLewis" )
478- {
479- forAll (rhoD_ , i )
479+ if (mixture_ .transportModelName () == "UnityLewis" )
480480 {
481- rhoD_ [i ].boundaryFieldRef ()[patchi ][facei ] = palpha [facei ];
481+ forAll (rhoD_ , i )
482+ {
483+ rhoD_ [i ].boundaryFieldRef ()[patchi ][facei ] = palpha [facei ];
484+ }
482485 }
483- }
484- else
485- {
486- mixture_ .CanteraTransport ()-> getMixDiffCoeffsMass (dTemp_ .begin ());
487-
488- CanteraGas_ -> getEnthalpy_RT (hrtTemp_ .begin ());
489- const scalar RT = constant ::physicoChemical ::R .value ()* 1e3 * pT [facei ];
490- forAll (rhoD_ , i )
486+ else
491487 {
492- rhoD_ [i ].boundaryFieldRef ()[patchi ][facei ] = prho [facei ]* dTemp_ [i ];
488+ mixture_ .CanteraTransport ()-> getMixDiffCoeffsMass (dTemp_ .begin ());
489+
490+ CanteraGas_ -> getEnthalpy_RT (hrtTemp_ .begin ());
491+ const scalar RT = constant ::physicoChemical ::R .value ()* 1e3 * pT [facei ];
492+ forAll (rhoD_ , i )
493+ {
494+ rhoD_ [i ].boundaryFieldRef ()[patchi ][facei ] = prho [facei ]* dTemp_ [i ];
493495
494- hai_ [i ].boundaryFieldRef ()[patchi ][facei ] = hrtTemp_ [i ]* RT /CanteraGas_ -> molecularWeight (i );
496+ hai_ [i ].boundaryFieldRef ()[patchi ][facei ] = hrtTemp_ [i ]* RT /CanteraGas_ -> molecularWeight (i );
497+ }
495498 }
496499 }
497500 }
498- }
499- else
500- {
501- forAll (pT , facei )
501+ else
502502 {
503- forAll (Y_ , i )
504- {
505- yTemp_ [i ] = Y_ [i ].boundaryField ()[patchi ][facei ];
506- }
507- CanteraGas_ -> setState_PY (pp [facei ], yTemp_ .begin ());
508- if (mixture_ .heName ()== "ha" )
509- {
510- CanteraGas_ -> setState_HP (ph [facei ], pp [facei ]);
511- }
512- else if (mixture_ .heName ()== "ea" )
503+ forAll (pT , facei )
513504 {
514- scalar ha = ph [facei ] + pp [facei ]/prho [facei ];
515- CanteraGas_ -> setState_HP (ha , pp [facei ]);
516- }
505+ forAll (Y_ , i )
506+ {
507+ yTemp_ [i ] = Y_ [i ].boundaryField ()[patchi ][facei ];
508+ }
509+ CanteraGas_ -> setState_PY (pp [facei ], yTemp_ .begin ());
510+ if (mixture_ .heName ()== "ha" )
511+ {
512+ CanteraGas_ -> setState_HP (ph [facei ], pp [facei ]);
513+ }
514+ else if (mixture_ .heName ()== "ea" )
515+ {
516+ scalar ha = ph [facei ] + pp [facei ]/prho [facei ];
517+ CanteraGas_ -> setState_HP (ha , pp [facei ]);
518+ }
517519
518- pT [facei ] = CanteraGas_ -> temperature ();
520+ pT [facei ] = CanteraGas_ -> temperature ();
519521
520- ppsi [facei ] = mixture_ .psi (pp [facei ],pT [facei ]);
522+ ppsi [facei ] = mixture_ .psi (pp [facei ],pT [facei ]);
521523
522- prho [facei ] = mixture_ .rho (pp [facei ],pT [facei ]);
524+ prho [facei ] = mixture_ .rho (pp [facei ],pT [facei ]);
523525
524- pmu [facei ] = mixture_ .CanteraTransport ()-> viscosity ();
526+ pmu [facei ] = mixture_ .CanteraTransport ()-> viscosity ();
525527
526- palpha [facei ] = mixture_ .CanteraTransport ()-> thermalConductivity ()/(CanteraGas_ -> cp_mass ());
528+ palpha [facei ] = mixture_ .CanteraTransport ()-> thermalConductivity ()/(CanteraGas_ -> cp_mass ());
527529
528- if (mixture_ .transportModelName () == "UnityLewis" )
529- {
530- forAll (rhoD_ , i )
530+ if (mixture_ .transportModelName () == "UnityLewis" )
531531 {
532- rhoD_ [i ].boundaryFieldRef ()[patchi ][facei ] = palpha [facei ];
532+ forAll (rhoD_ , i )
533+ {
534+ rhoD_ [i ].boundaryFieldRef ()[patchi ][facei ] = palpha [facei ];
535+ }
533536 }
534- }
535- else
536- {
537- mixture_ .CanteraTransport ()-> getMixDiffCoeffsMass (dTemp_ .begin ());
538-
539- CanteraGas_ -> getEnthalpy_RT (hrtTemp_ .begin ());
540- const scalar RT = constant ::physicoChemical ::R .value ()* 1e3 * pT [facei ];
541- forAll (rhoD_ , i )
537+ else
542538 {
543- rhoD_ [ i ]. boundaryFieldRef ()[ patchi ][ facei ] = prho [ facei ] * dTemp_ [ i ] ;
539+ mixture_ . CanteraTransport () -> getMixDiffCoeffsMass ( dTemp_ . begin ()) ;
544540
545- hai_ [i ].boundaryFieldRef ()[patchi ][facei ] = hrtTemp_ [i ]* RT /CanteraGas_ -> molecularWeight (i );
541+ CanteraGas_ -> getEnthalpy_RT (hrtTemp_ .begin ());
542+ const scalar RT = constant ::physicoChemical ::R .value ()* 1e3 * pT [facei ];
543+ forAll (rhoD_ , i )
544+ {
545+ rhoD_ [i ].boundaryFieldRef ()[patchi ][facei ] = prho [facei ]* dTemp_ [i ];
546+
547+ hai_ [i ].boundaryFieldRef ()[patchi ][facei ] = hrtTemp_ [i ]* RT /CanteraGas_ -> molecularWeight (i );
548+ }
546549 }
547550 }
548551 }
549552 }
550553 }
554+ catch (Cantera ::CanteraError & err )
555+ {
556+ std ::cerr << err .what () << '\n' ;
557+ FatalErrorInFunction
558+ << abort (FatalError );
559+ }
551560}
552561
553562template < class ThermoType >
0 commit comments