diff --git a/src/finiteVolume/cfdTools/general/porosityModel/solidification/solidification.C b/src/finiteVolume/cfdTools/general/porosityModel/solidification/solidification.C index ac60cf0d04c971bf3881dee843e96058da4f19e6..68d3edcf774cab5822d157e55284aa0218558c06 100644 --- a/src/finiteVolume/cfdTools/general/porosityModel/solidification/solidification.C +++ b/src/finiteVolume/cfdTools/general/porosityModel/solidification/solidification.C @@ -53,6 +53,7 @@ Foam::porosityModels::solidification::solidification : porosityModel(name, modelType, mesh, dict, cellZoneName), TName_(coeffs_.lookupOrDefault<word>("T", "T")), + alphaName_(coeffs_.lookupOrDefault<word>("alpha", "none")), rhoName_(coeffs_.lookupOrDefault<word>("rho", "rho")), D_(Function1<scalar>::New("D", coeffs_)) {} diff --git a/src/finiteVolume/cfdTools/general/porosityModel/solidification/solidification.H b/src/finiteVolume/cfdTools/general/porosityModel/solidification/solidification.H index 7f86849f64d4fc1d8e8fc23a79be4d1f88f31f86..119ba5680533c16dfadd90b3d3e8c5d90ee46198 100644 --- a/src/finiteVolume/cfdTools/general/porosityModel/solidification/solidification.H +++ b/src/finiteVolume/cfdTools/general/porosityModel/solidification/solidification.H @@ -31,12 +31,13 @@ Description is represented as a porous blockage with the drag-coefficient evaluated from \f[ - S = - \rho D(T) U + S = - \alpha \rho D(T) U \f] where \vartable - D(T) | User-defined drag-coefficient as function of temperature + \alpha | Optional phase-fraction of solidifying phase + D(T) | User-defined drag-coefficient as function of temperature \endvartable Note that the latent heat of solidification is not included and the @@ -55,6 +56,9 @@ Description (330.5 0) // Liquid above 330.5K ); + // Optional phase-fraction of solidifying phase + alpha alpha.liquid; + // Solidification porosity is isotropic // use the global coordinate system coordinateSystem @@ -103,6 +107,9 @@ class solidification //- Name of temperature field, default = "T" word TName_; + //- Name of optional phase-fraction field, default = "none" + word alphaName_; + //- Name of density field, default = "rho" word rhoName_; @@ -112,6 +119,27 @@ class solidification // Private Member Functions + //- Apply resistance + template<class AlphaFieldType, class RhoFieldType> + void apply + ( + scalarField& Udiag, + const scalarField& V, + const AlphaFieldType& alpha, + const RhoFieldType& rho, + const volVectorField& U + ) const; + + //- Apply resistance + template<class AlphaFieldType, class RhoFieldType> + void apply + ( + tensorField& AU, + const AlphaFieldType& alpha, + const RhoFieldType& rho, + const volVectorField& U + ) const; + //- Apply resistance template<class RhoFieldType> void apply diff --git a/src/finiteVolume/cfdTools/general/porosityModel/solidification/solidificationTemplates.C b/src/finiteVolume/cfdTools/general/porosityModel/solidification/solidificationTemplates.C index 71b290af17819ee85fbf1aa85e7fd5193bc84346..d9ea04d59eb99dcbed77a68179efad455eb17fd7 100644 --- a/src/finiteVolume/cfdTools/general/porosityModel/solidification/solidificationTemplates.C +++ b/src/finiteVolume/cfdTools/general/porosityModel/solidification/solidificationTemplates.C @@ -24,14 +24,16 @@ License \*---------------------------------------------------------------------------*/ #include "volFields.H" +#include "geometricOneField.H" // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // -template<class RhoFieldType> +template<class AlphaFieldType, class RhoFieldType> void Foam::porosityModels::solidification::apply ( scalarField& Udiag, const scalarField& V, + const AlphaFieldType& alpha, const RhoFieldType& rho, const volVectorField& U ) const @@ -48,16 +50,18 @@ void Foam::porosityModels::solidification::apply forAll(cells, i) { const label celli = cells[i]; - Udiag[celli] += V[celli]*rho[celli]*D_->value(T[celli]); + Udiag[celli] += + V[celli]*alpha[celli]*rho[celli]*D_->value(T[celli]); } } } -template<class RhoFieldType> +template<class AlphaFieldType, class RhoFieldType> void Foam::porosityModels::solidification::apply ( tensorField& AU, + const AlphaFieldType& alpha, const RhoFieldType& rho, const volVectorField& U ) const @@ -74,10 +78,60 @@ void Foam::porosityModels::solidification::apply forAll(cells, i) { const label celli = cells[i]; - AU[celli] += tensor::I*rho[celli]*D_->value(T[celli]); + AU[celli] += + tensor::I*alpha[celli]*rho[celli]*D_->value(T[celli]); } } } +template<class RhoFieldType> +void Foam::porosityModels::solidification::apply +( + scalarField& Udiag, + const scalarField& V, + const RhoFieldType& rho, + const volVectorField& U +) const +{ + if (alphaName_ == "none") + { + return apply(Udiag, V, geometricOneField(), rho, U); + } + else + { + const volScalarField& alpha = mesh_.lookupObject<volScalarField> + ( + IOobject::groupName(alphaName_, U.group()) + ); + + return apply(Udiag, V, alpha, rho, U); + } +} + + +template<class RhoFieldType> +void Foam::porosityModels::solidification::apply +( + tensorField& AU, + const RhoFieldType& rho, + const volVectorField& U +) const +{ + if (alphaName_ == "none") + { + return apply(AU, geometricOneField(), rho, U); + } + else + { + const volScalarField& alpha = mesh_.lookupObject<volScalarField> + ( + IOobject::groupName(alphaName_, U.group()) + ); + + return apply(AU, alpha, rho, U); + } +} + + // ************************************************************************* //