PelePhysics icon indicating copy to clipboard operation
PelePhysics copied to clipboard

Adapt Spray module for use with Manifold EOS

Open baperry2 opened this issue 2 months ago • 0 comments

Right now these are incompatible. Major steps to implementation:

  • [ ] Propagate eosparm through all EOS calls (as was done in LMeX here: https://github.com/AMReX-Combustion/PeleLMeX/pull/414)
  • [ ] Modify GasPhaseVals struct: For manifold model, need to map from transported "species" (actually the manifold parameters) to gas phase composition in terms of actual species
  • [ ] Apply source terms to correct quantities. For species, this is just a matter of using the existing mapping system to map from the liquid components to mixture fraction, etc. For enthalpy, still needs to be determined. An initial approach would be to ignore the enthalpy lost from phase change.

Places where EOS calls are currently made within the EOS module as a strating point for modifications:

$cd PelePhysics/Source/Spray
$rgrep -i eos
./SpraySetup.cpp:260:  pele::physics::eos::speciesNames<pele::physics::PhysicsType::eos_type>(
./SpraySetup.cpp:285:  auto eos = pele::physics::PhysicsType::eos();
./SpraySetup.cpp:286:  eos.T2Hi(m_sprayData->ref_T, fuelEnth.data());
./Drag.H:148:    pele::physics::EosType,
./Drag.H:151:  auto eos = pele::physics::PhysicsType::eos();
./Drag.H:220:    eos.T2Cpi(T_skin, cp_n.data());
./Drag.H:221:    eos.T2Hi(T_part, h_part.data());
./SprayParticles.cpp:51:    pele::physics::EosType,
./SprayParticles.cpp:74:    pele::physics::EosType,
./SprayParticles.cpp:157:    pele::physics::EosType,
./SprayParticles.cpp:329:          auto eos = pele::physics::PhysicsType::eos();
./SprayParticles.cpp:334:          eos.molecular_weight(gpv.mw.data());
./SprayParticles.H:201:      pele::physics::EosType,
./SprayParticles.H:218:      pele::physics::EosType,
./SprayParticles.H:235:      pele::physics::EosType,
./BreakupSplash/WallFilm.H:38:    pele::physics::EosType,
./BreakupSplash/WallFilm.H:41:  auto eos = pele::physics::PhysicsType::eos();
./BreakupSplash/WallFilm.H:90:  eos.T2Cpi(T_skin, cp_n.data());
./BreakupSplash/WallFilm.H:91:  eos.T2Hi(T_film, h_film.data());
./SprayInterpolation.H:112:  auto eos = pele::physics::PhysicsType::eos();
./SprayInterpolation.H:149:      eos.EY2T(intEng, mass_frac.data(), T_i);

Initial thoughts on each (some are minor, some are major):

./SpraySetup.cpp:260:  pele::physics::eos::speciesNames<pele::physics::PhysicsType::eos_type>(

    Mapping for species names between spray and gas phase. Should be straightforward.
    A pointer to eosparm (probably both host and device) will have to be added to the spray particle container
    POTENTIAL ISSUE: although spray source can dump into ZMIX, for equilibrium calcs we will need the actual
                     gas phase concentration of fuel. Probably need to modify GasPhaseVals struct

./SpraySetup.cpp:285:  auto eos = pele::physics::PhysicsType::eos();
./SpraySetup.cpp:286:  eos.T2Hi(m_sprayData->ref_T, fuelEnth.data());

    Used for finding reference gas phase enthalpy, which gets rolled into the latent heat of vaporization
    Can probably be bypassed initially for manifold spray ignoring latent heat

./Drag.H:148:    pele::physics::EosType,

    Just interfaces for passing transparm - nothing important here

./Drag.H:151:  auto eos = pele::physics::PhysicsType::eos();
./Drag.H:220:    eos.T2Cpi(T_skin, cp_n.data());
./Drag.H:221:    eos.T2Hi(T_part, h_part.data());

    ?? Could be difficult - need to harmonize between gas species and manifold quantities

./SprayParticles.cpp:51:    pele::physics::EosType,
./SprayParticles.cpp:74:    pele::physics::EosType,
./SprayParticles.cpp:157:    pele::physics::EosType,

    Just interfaces for passing transparm - nothing important here

./SprayParticles.cpp:329:          auto eos = pele::physics::PhysicsType::eos();
./SprayParticles.cpp:334:          eos.molecular_weight(gpv.mw.data());

    ?? gas phase molecular weight in GPV - is this needed for all gas species and why?

./SprayParticles.H:201:      pele::physics::EosType,
./SprayParticles.H:218:      pele::physics::EosType,
./SprayParticles.H:235:      pele::physics::EosType,

    Just interfaces for passing transparm - nothing important here

./BreakupSplash/WallFilm.H:38:    pele::physics::EosType,

    Just interfaces for passing transparm - nothing important here

./BreakupSplash/WallFilm.H:41:  auto eos = pele::physics::PhysicsType::eos();
./BreakupSplash/WallFilm.H:90:  eos.T2Cpi(T_skin, cp_n.data());
./BreakupSplash/WallFilm.H:91:  eos.T2Hi(T_film, h_film.data());

./SprayInterpolation.H:112:  auto eos = pele::physics::PhysicsType::eos();
./SprayInterpolation.H:149:      eos.EY2T(intEng, mass_frac.data(), T_i);

    Only used for PeleC
    But - interpolating gas phase vals will need to change - we need actual species
    ** This is really the main challenges**

CC: @SreejithNREL @shashankNREL @justint1997

baperry2 avatar Dec 20 '24 23:12 baperry2