diff --git a/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/KinematicSurfaceFilm/KinematicSurfaceFilm.C b/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/KinematicSurfaceFilm/KinematicSurfaceFilm.C index a62ae95ed1..a08e87e5c5 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/KinematicSurfaceFilm/KinematicSurfaceFilm.C +++ b/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/KinematicSurfaceFilm/KinematicSurfaceFilm.C @@ -130,47 +130,56 @@ Foam::vector Foam::KinematicSurfaceFilm::splashDirection template -void Foam::KinematicSurfaceFilm::init(bool binitThermo) +void Foam::KinematicSurfaceFilm::initFilmModels() { const fvMesh& mesh = this->owner().mesh(); // set up filmModel pointer - filmModel_ = - const_cast - ( - mesh.time().objectRegistry::template findObject - < - regionFilm - > - ( - "surfaceFilmProperties" - ) - ); - - - // set up areaFilms - const wordList names = - mesh.time().objectRegistry::template - sortedNames(); - - forAll(names, i) + if (!filmModel_) { - const regionModels::regionFaModel* regionFa = - mesh.time().objectRegistry::template findObject - < - regionModels::regionFaModel - >(names[i]); - - if (regionFa && isA(*regionFa)) - { - areaFilm& film = - const_cast(refCast(*regionFa)); - areaFilms_.append(&film); - } + filmModel_ = + const_cast + ( + mesh.time().objectRegistry::template findObject + < + regionFilm + > + ( + "surfaceFilmProperties" + ) + ); } - // Initiate thermo ref for filmModel - if (filmModel_ && binitThermo) + if (areaFilms_.size() == 0) + { + // set up areaFilms + const wordList names = + mesh.time().objectRegistry::template + sortedNames(); + + forAll(names, i) + { + const regionModels::regionFaModel* regionFa = + mesh.time().objectRegistry::template findObject + < + regionModels::regionFaModel + >(names[i]); + + if (regionFa && isA(*regionFa)) + { + areaFilm& film = + const_cast(refCast(*regionFa)); + areaFilms_.append(&film); + } + } + } +} + + +template +void Foam::KinematicSurfaceFilm::init(bool binitThermo) +{ + if (binitThermo) { this->coeffDict().readEntry("pRef", pRef_); this->coeffDict().readEntry("TRef", TRef_); @@ -569,9 +578,8 @@ Foam::KinematicSurfaceFilm::KinematicSurfaceFilm this->coeffDict().readEntry("Adry", Adry_); this->coeffDict().readEntry("Awet", Awet_); this->coeffDict().readEntry("Cf", Cf_); + init(initThermo); } - - init(initThermo); } @@ -596,7 +604,10 @@ Foam::KinematicSurfaceFilm::KinematicSurfaceFilm Cf_(sfm.Cf_), nParcelsSplashed_(sfm.nParcelsSplashed_) { - init(initThermo); + if (interactionType_ == itSplashBai) + { + init(initThermo); + } } @@ -614,59 +625,64 @@ bool Foam::KinematicSurfaceFilm::transferParcel bool bInteraction(false); + initFilmModels(); + // Check the singleLayer film models - if (filmModel_ && filmModel_->isRegionPatch(patchi)) + if (filmModel_) { - const label facei = pp.whichFace(p.face()); - - switch (interactionType_) + if (filmModel_->isRegionPatch(patchi)) { - case itBounce: + const label facei = pp.whichFace(p.face()); + + switch (interactionType_) { - bounceInteraction(p, pp, facei, keepParticle); - - break; - } - case itAbsorb: - { - const scalar m = p.nParticle()*p.mass(); - - absorbInteraction - (*filmModel_, p, pp, facei, m, keepParticle); - - break; - } - case itSplashBai: - { - bool dry = this->deltaFilmPatch_[patchi][facei] < deltaWet_; - - const scalarField X(thermo_->size(), 1); - const scalar mu = thermo_->mu(pRef_, TRef_, X); - const scalar sigma = thermo_->sigma(pRef_, TRef_, X); - - if (dry) + case itBounce: { - drySplashInteraction - (*filmModel_, sigma, mu, p, pp, facei, keepParticle); - } - else - { - wetSplashInteraction - (*filmModel_, sigma, mu, p, pp, facei, keepParticle); - } + bounceInteraction(p, pp, facei, keepParticle); - break; - } - default: - { - FatalErrorInFunction - << "Unknown interaction type enumeration" - << abort(FatalError); + break; + } + case itAbsorb: + { + const scalar m = p.nParticle()*p.mass(); + + absorbInteraction + (*filmModel_, p, pp, facei, m, keepParticle); + + break; + } + case itSplashBai: + { + bool dry = this->deltaFilmPatch_[patchi][facei] < deltaWet_; + + const scalarField X(thermo_->size(), 1); + const scalar mu = thermo_->mu(pRef_, TRef_, X); + const scalar sigma = thermo_->sigma(pRef_, TRef_, X); + + if (dry) + { + drySplashInteraction + (*filmModel_, sigma, mu, p, pp, facei, keepParticle); + } + else + { + wetSplashInteraction + (*filmModel_, sigma, mu, p, pp, facei, keepParticle); + } + + break; + } + default: + { + FatalErrorInFunction + << "Unknown interaction type enumeration" + << abort(FatalError); + } } + + // Transfer parcel/parcel interactions complete + bInteraction = true; } - - // Transfer parcel/parcel interactions complete - bInteraction = true; } diff --git a/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/KinematicSurfaceFilm/KinematicSurfaceFilm.H b/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/KinematicSurfaceFilm/KinematicSurfaceFilm.H index 393151506e..55d3fb5610 100644 --- a/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/KinematicSurfaceFilm/KinematicSurfaceFilm.H +++ b/src/lagrangian/intermediate/submodels/Kinematic/SurfaceFilmModel/KinematicSurfaceFilm/KinematicSurfaceFilm.H @@ -192,9 +192,12 @@ protected: const vector& nf ) const; - //- Initialise pointers of films + //- Initialise thermo void init(bool binitThermo); + //- Initialise pointers of films + void initFilmModels(); + // Injection from sheet (ejection) helper functions diff --git a/src/lagrangian/intermediate/submodels/Thermodynamic/SurfaceFilmModel/ThermoSurfaceFilm/ThermoSurfaceFilm.C b/src/lagrangian/intermediate/submodels/Thermodynamic/SurfaceFilmModel/ThermoSurfaceFilm/ThermoSurfaceFilm.C index 287810e368..045cc208fb 100644 --- a/src/lagrangian/intermediate/submodels/Thermodynamic/SurfaceFilmModel/ThermoSurfaceFilm/ThermoSurfaceFilm.C +++ b/src/lagrangian/intermediate/submodels/Thermodynamic/SurfaceFilmModel/ThermoSurfaceFilm/ThermoSurfaceFilm.C @@ -72,68 +72,72 @@ bool Foam::ThermoSurfaceFilm::transferParcel { const label patchi = pp.index(); + this->initFilmModels(); + bool bInteraction(false); // Check the singleLayer film models - if (this->filmModel_ && this->filmModel_->isRegionPatch(patchi)) + if (this->filmModel_) { - const label facei = pp.whichFace(p.face()); - - switch (this->interactionType_) + if (this->filmModel_->isRegionPatch(patchi)) { - case KinematicSurfaceFilm::itBounce: + const label facei = pp.whichFace(p.face()); + + switch (this->interactionType_) { - this->bounceInteraction(p, pp, facei, keepParticle); - - break; - } - case KinematicSurfaceFilm::itAbsorb: - { - const scalar m = p.nParticle()*p.mass(); - - this->absorbInteraction // - (*(this->filmModel_), p, pp, facei, m, keepParticle); - - break; - } - case KinematicSurfaceFilm::itSplashBai: - { - // Local pressure - const scalar pc = thermo_.thermo().p()[p.cell()]; - const liquidProperties& liq = thermo_.liquids().properties()[0]; - const scalar sigma = liq.sigma(pc, p.T()); - const scalar mu = liq.mu(pc, p.T()); - - bool dry = this->deltaFilmPatch_[patchi][facei] < this->deltaWet_; - - if (dry) + case KinematicSurfaceFilm::itBounce: { - this->drySplashInteraction // - (*(this->filmModel_), sigma, mu, p, pp, facei, keepParticle); - } - else - { - this->wetSplashInteraction // - (*(this->filmModel_), sigma, mu, p, pp, facei, keepParticle); - } + this->bounceInteraction(p, pp, facei, keepParticle); - break; - } - default: - { - FatalErrorInFunction - << "Unknown interaction type enumeration" - << abort(FatalError); + break; + } + case KinematicSurfaceFilm::itAbsorb: + { + const scalar m = p.nParticle()*p.mass(); + + this->absorbInteraction // + (*(this->filmModel_), p, pp, facei, m, keepParticle); + + break; + } + case KinematicSurfaceFilm::itSplashBai: + { + // Local pressure + const scalar pc = thermo_.thermo().p()[p.cell()]; + const liquidProperties& liq = thermo_.liquids().properties()[0]; + const scalar sigma = liq.sigma(pc, p.T()); + const scalar mu = liq.mu(pc, p.T()); + + bool dry = this->deltaFilmPatch_[patchi][facei] < this->deltaWet_; + + if (dry) + { + this->drySplashInteraction // + (*(this->filmModel_), sigma, mu, p, pp, facei, keepParticle); + } + else + { + this->wetSplashInteraction // + (*(this->filmModel_), sigma, mu, p, pp, facei, keepParticle); + } + + break; + } + default: + { + FatalErrorInFunction + << "Unknown interaction type enumeration" + << abort(FatalError); + } } + + // Transfer parcel/parcel interactions complete + bInteraction = true; } - - // Transfer parcel/parcel interactions complete - bInteraction = true; } for (areaFilm& film : this->areaFilms_) { - if (patchi == film.patchID()) { const label facei = pp.whichFace(p.face()); diff --git a/src/regionFaModels/liquidFilm/liquidFilmBase.C b/src/regionFaModels/liquidFilm/liquidFilmBase.C index 3544ac980f..5ae3955485 100644 --- a/src/regionFaModels/liquidFilm/liquidFilmBase.C +++ b/src/regionFaModels/liquidFilm/liquidFilmBase.C @@ -272,9 +272,8 @@ scalar liquidFilmBase::CourantNumber() const reduce(CoNum, maxOp()); reduce(velMag, maxOp()); - Info<< "Film Courant Number: " - << " max: " << CoNum - << " Film velocity magnitude: (h)" << velMag << endl; + Info<< "Max film Courant Number: " << CoNum + << " Film velocity magnitude: " << velMag << endl; return CoNum; } diff --git a/src/regionFaModels/liquidFilm/liquidFilmModel/liquidFilmModel.C b/src/regionFaModels/liquidFilm/liquidFilmModel/liquidFilmModel.C index fb385b22ca..15a4149e01 100644 --- a/src/regionFaModels/liquidFilm/liquidFilmModel/liquidFilmModel.C +++ b/src/regionFaModels/liquidFilm/liquidFilmModel/liquidFilmModel.C @@ -304,13 +304,13 @@ const volScalarField& liquidFilmModel::cloudMassTrans() const return cloudMassTrans_; } + const volScalarField& liquidFilmModel::cloudDiameterTrans() const { return cloudDiameterTrans_; } - void liquidFilmModel::preEvolveRegion() { liquidFilmBase::preEvolveRegion(); @@ -359,17 +359,16 @@ void liquidFilmModel::info() const DimensionedField& sf = regionMesh().S(); - Info<< indent << "min/max(mag(Uf)) = " << gMin(mag(Uf_.field())) << ", " + Info<< indent << "min/max(mag(Uf)) = " + << gMin(mag(Uf_.field())) << ", " << gMax(mag(Uf_.field())) << nl - << indent << "min/max(delta) = " << gMin(h_.field()) << ", " << gMax(h_.field()) << nl + << indent << "min/max(delta) = " + << gMin(h_.field()) << ", " << gMax(h_.field()) << nl << indent << "coverage = " << gSum(alpha()().field()*mag(sf.field()))/gSum(mag(sf.field())) << nl << indent << "total mass = " << gSum(availableMass_) << nl; - - Info<< indent << CourantNumber() << endl; - injection_.info(Info); }