diff --git a/src/fvOptions/sources/derived/solidificationMeltingSource/solidificationMeltingSource.C b/src/fvOptions/sources/derived/solidificationMeltingSource/solidificationMeltingSource.C deleted file mode 100644 index 5f336ca33..000000000 --- a/src/fvOptions/sources/derived/solidificationMeltingSource/solidificationMeltingSource.C +++ /dev/null @@ -1,342 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2014-2018 OpenFOAM Foundation - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM. If not, see . - -\*---------------------------------------------------------------------------*/ - -#include "solidificationMeltingSource.H" -#include "fvMatrices.H" -#include "basicThermo.H" -#include "uniformDimensionedFields.H" -#include "zeroGradientFvPatchFields.H" -#include "extrapolatedCalculatedFvPatchFields.H" -#include "addToRunTimeSelectionTable.H" -#include "geometricOneField.H" - -// * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * // - -namespace Foam -{ - template<> - const char* NamedEnum - < - fv::solidificationMeltingSource::thermoMode, - 2 - >::names[] = - { - "thermo", - "lookup" - }; - - namespace fv - { - defineTypeNameAndDebug(solidificationMeltingSource, 0); - - addToRunTimeSelectionTable - ( - option, - solidificationMeltingSource, - dictionary - ); - } -} - -const Foam::NamedEnum - Foam::fv::solidificationMeltingSource::thermoModeTypeNames_; - - -// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // - -Foam::tmp -Foam::fv::solidificationMeltingSource::Cp() const -{ - switch (mode_) - { - case mdThermo: - { - const basicThermo& thermo = - mesh_.lookupObject(basicThermo::dictName); - - return thermo.Cp(); - break; - } - case mdLookup: - { - if (CpName_ == "CpRef") - { - scalar CpRef = readScalar(coeffs_.lookup("CpRef")); - - return tmp - ( - new volScalarField - ( - IOobject - ( - name_ + ":Cp", - mesh_.time().timeName(), - mesh_, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh_, - dimensionedScalar - ( - "Cp", - dimEnergy/dimMass/dimTemperature, - CpRef - ), - extrapolatedCalculatedFvPatchScalarField::typeName - ) - ); - } - else - { - return mesh_.lookupObject(CpName_); - } - - break; - } - default: - { - FatalErrorInFunction - << "Unhandled thermo mode: " << thermoModeTypeNames_[mode_] - << abort(FatalError); - } - } - - return tmp(nullptr); -} - - -Foam::vector Foam::fv::solidificationMeltingSource::g() const -{ - if (mesh_.foundObject("g")) - { - const uniformDimensionedVectorField& value = - mesh_.lookupObject("g"); - return value.value(); - } - else - { - return coeffs_.lookup("g"); - } -} - - -void Foam::fv::solidificationMeltingSource::update(const volScalarField& Cp) -{ - if (curTimeIndex_ == mesh_.time().timeIndex()) - { - return; - } - - if (debug) - { - Info<< type() << ": " << name_ << " - updating phase indicator" << endl; - } - - // update old time alpha1 field - alpha1_.oldTime(); - - const volScalarField& T = mesh_.lookupObject(TName_); - - forAll(cells_, i) - { - const label celli = cells_[i]; - - const scalar Tc = T[celli]; - const scalar Cpc = Cp[celli]; - const scalar alpha1New = - alpha1_[celli] - + relax_*Cpc - *( - Tc - - max - ( - Tsol_, - Tsol_ - + (Tliq_ - Tsol_)*(alpha1_[celli] - alpha1e_)/(1 - alpha1e_) - ) - )/L_; - - alpha1_[celli] = max(0, min(alpha1New, 1)); - deltaT_[i] = - Tc - - max - ( - Tsol_, - Tsol_ - + (Tliq_ - Tsol_)*(alpha1_[celli] - alpha1e_)/(1 - alpha1e_) - ); - } - - alpha1_.correctBoundaryConditions(); - - curTimeIndex_ = mesh_.time().timeIndex(); -} - - -// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - -Foam::fv::solidificationMeltingSource::solidificationMeltingSource -( - const word& sourceName, - const word& modelType, - const dictionary& dict, - const fvMesh& mesh -) -: - cellSetOption(sourceName, modelType, dict, mesh), - Tsol_(readScalar(coeffs_.lookup("Tsol"))), - Tliq_(coeffs_.lookupOrDefault("Tliq", Tsol_)), - alpha1e_(coeffs_.lookupOrDefault("alpha1e", 0)), - L_(readScalar(coeffs_.lookup("L"))), - relax_(coeffs_.lookupOrDefault("relax", 0.9)), - mode_(thermoModeTypeNames_.read(coeffs_.lookup("thermoMode"))), - rhoRef_(readScalar(coeffs_.lookup("rhoRef"))), - TName_(coeffs_.lookupOrDefault("T", "T")), - CpName_(coeffs_.lookupOrDefault("Cp", "Cp")), - UName_(coeffs_.lookupOrDefault("U", "U")), - phiName_(coeffs_.lookupOrDefault("phi", "phi")), - Cu_(coeffs_.lookupOrDefault("Cu", 100000)), - q_(coeffs_.lookupOrDefault("q", 0.001)), - beta_(readScalar(coeffs_.lookup("beta"))), - alpha1_ - ( - IOobject - ( - name_ + ":alpha1", - mesh.time().timeName(), - mesh, - IOobject::READ_IF_PRESENT, - IOobject::AUTO_WRITE - ), - mesh, - dimensionedScalar("alpha1", dimless, 0), - zeroGradientFvPatchScalarField::typeName - ), - curTimeIndex_(-1), - deltaT_(cells_.size(), 0) -{ - fieldNames_.setSize(2); - fieldNames_[0] = UName_; - - switch (mode_) - { - case mdThermo: - { - const basicThermo& thermo = - mesh_.lookupObject(basicThermo::dictName); - - fieldNames_[1] = thermo.he().name(); - break; - } - case mdLookup: - { - fieldNames_[1] = TName_; - break; - } - default: - { - FatalErrorInFunction - << "Unhandled thermo mode: " << thermoModeTypeNames_[mode_] - << abort(FatalError); - } - } - - applied_.setSize(fieldNames_.size(), false); -} - - -// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // - -void Foam::fv::solidificationMeltingSource::addSup -( - fvMatrix& eqn, - const label fieldi -) -{ - apply(geometricOneField(), eqn); -} - - -void Foam::fv::solidificationMeltingSource::addSup -( - const volScalarField& rho, - fvMatrix& eqn, - const label fieldi -) -{ - apply(rho, eqn); -} - - -void Foam::fv::solidificationMeltingSource::addSup -( - fvMatrix& eqn, - const label fieldi -) -{ - if (debug) - { - Info<< type() << ": applying source to " << eqn.psi().name() << endl; - } - - const volScalarField Cp(this->Cp()); - - update(Cp); - - vector g = this->g(); - - scalarField& Sp = eqn.diag(); - vectorField& Su = eqn.source(); - const scalarField& V = mesh_.V(); - - forAll(cells_, i) - { - const label celli = cells_[i]; - - const scalar Vc = V[celli]; - const scalar alpha1c = alpha1_[celli]; - - const scalar S = -Cu_*sqr(1.0 - alpha1c)/(pow3(alpha1c) + q_); - const vector Sb = rhoRef_*g*beta_*deltaT_[i]; - - Sp[celli] += Vc*S; - Su[celli] += Vc*Sb; - } -} - - -void Foam::fv::solidificationMeltingSource::addSup -( - const volScalarField& rho, - fvMatrix& eqn, - const label fieldi -) -{ - // Momentum source uses a Boussinesq approximation - redirect - addSup(eqn, fieldi); -} - - -// ************************************************************************* // diff --git a/src/fvOptions/sources/derived/solidificationMeltingSource/solidificationMeltingSource.H b/src/fvOptions/sources/derived/solidificationMeltingSource/solidificationMeltingSource.H deleted file mode 100644 index 441ee1a08..000000000 --- a/src/fvOptions/sources/derived/solidificationMeltingSource/solidificationMeltingSource.H +++ /dev/null @@ -1,289 +0,0 @@ -/*---------------------------------------------------------------------------*\ - ========= | - \\ / F ield | OpenFOAM: The Open Source CFD Toolbox - \\ / O peration | - \\ / A nd | Copyright (C) 2014-2018 OpenFOAM Foundation - \\/ M anipulation | -------------------------------------------------------------------------------- -License - This file is part of OpenFOAM. - - OpenFOAM is free software: you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - OpenFOAM is distributed in the hope that it will be useful, but WITHOUT - ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - for more details. - - You should have received a copy of the GNU General Public License - along with OpenFOAM. If not, see . - -Class - Foam::fv::solidificationMeltingSource - -Description - This source is designed to model the effect of solidification and melting - processes, e.g. windhield defrosting. - - The isotherm phase change occurs at the melting temperature, \c Tsol (= \c - Tliq). The not isotherm phase change occurs between solidus and liquidus - temperature, \c Tsol < \c Tliq respectively, as long as the melt fraction is - greater than the max eutectic melt fraction, \c alpha1e (0 = - pure_substance, 1 = eutectic_mixture is not permitted) , i.e. eutectic to - initial solvent concentration difference, where a linear eutectic melt - fraction to temperature relation is considered - lever rule. - - The presence of the solid phase in the flow field is incorporated into the - model as a momentum porosity contribution; the energy associated with the - phase change is added as an enthalpy contribution. - - References: - \verbatim - Voller, V. R., & Prakash, C. (1987). - A fixed grid numerical modelling methodology for convection-diffusion - mushy region phase-change problems. - International Journal of Heat and Mass Transfer, 30(8), 1709-1719. - - Swaminathan, C. R., & Voller, V. R. (1992). - A general enthalpy method for modeling solidification processes. - Metallurgical transactions B, 23(5), 651-664. - \endverbatim - - The model generates the field \c \:alpha1 which can be visualised to - to show the melt distribution as a fraction [0-1]. - -Usage - Example usage: - \verbatim - solidificationMeltingSource1 - { - type solidificationMeltingSource; - active yes; - - selectionMode cellZone; - cellZone iceZone; - - Tsol 273; - L 334000; - thermoMode thermo; - beta 50e-6; - rhoRef 800; - } - \endverbatim - - Where: - \table - Property | Description | Required | Default value - Tsol | Solidus temperature [K] | yes | - Tliq | Liquidus temperature [K] | no | Tsol - alpha1e | Max eutectic melt fraction [0-1[ | no | 0 - L | Latent heat of fusion [J/kg] | yes | - relax | Relaxation coefficient [0-1] | no | 0.9 - thermoMode | Thermo mode [thermo|lookup] | yes | - rhoRef | Reference (solid) density [kg/m^3] | yes | - rho | Name of density field | no | rho - T | Name of temperature field | no | T - Cp | Name of specific heat field | no | Cp - U | Name of velocity field | no | U - phi | Name of flux field | no | phi - Cu | Model coefficient [1/s] | no | 100000 - q | Model coefficient | no | 0.001 - beta | Thermal expansion coefficient [1/K] | yes | - g | Accelerartion due to gravity | no | - \endtable - -SourceFiles - solidificationMeltingSource.C - solidificationMeltingSourceIO.C - -\*---------------------------------------------------------------------------*/ - -#ifndef solidificationMeltingSource_H -#define solidificationMeltingSource_H - -#include "fvMesh.H" -#include "volFields.H" -#include "cellSetOption.H" -#include "NamedEnum.H" - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -namespace Foam -{ -namespace fv -{ - -/*---------------------------------------------------------------------------*\ - Class solidificationMeltingSource Declaration -\*---------------------------------------------------------------------------*/ - -class solidificationMeltingSource -: - public cellSetOption -{ -public: - - enum thermoMode - { - mdThermo, - mdLookup - }; - - static const NamedEnum thermoModeTypeNames_; - - -private: - - // Private data - - //- Temperature at which isotherm melting occurs - // and not isotherm melting starts e.g. eutectic [K] - scalar Tsol_; - - //- Temperature at which not isotherm melting stops (Tliq > Tsol) [K] - scalar Tliq_; - - //- Max eutectic melt fraction [0-1[ - // where 0 = pure substance is default value, - // 1 = eutectic mixture is not permitted - scalar alpha1e_; - - //- Latent heat of fusion [J/kg] - scalar L_; - - //- Phase fraction under-relaxation coefficient - scalar relax_; - - //- Thermodynamics mode - thermoMode mode_; - - //- Reference density - typically the solid density - scalar rhoRef_; - - //- Name of temperature field - default = "T" (optional) - word TName_; - - //- Name of specific heat capacity field - default = "Cp" (optional) - word CpName_; - - //- Name of velocity field - default = "U" (optional) - word UName_; - - //- Name of flux field - default = "phi" (optional) - word phiName_; - - //- Mushy region momentum sink coefficient [1/s]; default = 10^5 - scalar Cu_; - - //- Coefficient used in porosity calc - default = 0.001 - scalar q_; - - //- Thermal expansion coefficient [1/K] - scalar beta_; - - //- Phase fraction indicator field - volScalarField alpha1_; - - //- Current time index (used for updating) - label curTimeIndex_; - - //- Temperature change cached for source calculation when alpha1 updated - scalarField deltaT_; - - - // Private Member Functions - - //- Return the specific heat capacity field - tmp Cp() const; - - //- Return the gravity vector - vector g() const; - - //- Update the model - void update(const volScalarField& Cp); - - //- Helper function to apply to the energy equation - template - void apply(const RhoFieldType& rho, fvMatrix& eqn); - - //- Disallow default bitwise copy construct - solidificationMeltingSource(const solidificationMeltingSource&); - - //- Disallow default bitwise assignment - void operator=(const solidificationMeltingSource&); - - -public: - - //- Runtime type information - TypeName("solidificationMeltingSource"); - - - // Constructors - - //- Construct from explicit source name and mesh - solidificationMeltingSource - ( - const word& sourceName, - const word& modelType, - const dictionary& dict, - const fvMesh& mesh - ); - - - // Member Functions - - // Add explicit and implicit contributions - - //- Add explicit contribution to enthalpy equation - virtual void addSup(fvMatrix& eqn, const label fieldi); - - //- Add implicit contribution to momentum equation - virtual void addSup(fvMatrix& eqn, const label fieldi); - - - // Add explicit and implicit contributions to compressible equation - - //- Add explicit contribution to compressible enthalpy equation - virtual void addSup - ( - const volScalarField& rho, - fvMatrix& eqn, - const label fieldi - ); - - //- Add implicit contribution to compressible momentum equation - virtual void addSup - ( - const volScalarField& rho, - fvMatrix& eqn, - const label fieldi - ); - - - // IO - - //- Read source dictionary - virtual bool read(const dictionary& dict); -}; - - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -} // End namespace fv -} // End namespace Foam - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#ifdef NoRepository - #include "solidificationMeltingSourceTemplates.C" -#endif - -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -#endif - -// ************************************************************************* //