diff --git a/src/regionModels/surfaceFilmModels/Make/files b/src/regionModels/surfaceFilmModels/Make/files index 15accdfa79..0f6502d8e5 100644 --- a/src/regionModels/surfaceFilmModels/Make/files +++ b/src/regionModels/surfaceFilmModels/Make/files @@ -56,6 +56,7 @@ $(THERMOMODELS)/filmViscosityModel/filmViscosityModel/filmViscosityModelNew.C $(THERMOMODELS)/filmViscosityModel/constantViscosity/constantViscosity.C $(THERMOMODELS)/filmViscosityModel/liquidViscosity/liquidViscosity.C $(THERMOMODELS)/filmViscosityModel/thixotropicViscosity/thixotropicViscosity.C +$(THERMOMODELS)/filmViscosityModel/ArrheniusViscosity/ArrheniusViscosity.C /* Boundary conditions */ diff --git a/src/regionModels/surfaceFilmModels/submodels/thermo/filmViscosityModel/ArrheniusViscosity/ArrheniusViscosity.C b/src/regionModels/surfaceFilmModels/submodels/thermo/filmViscosityModel/ArrheniusViscosity/ArrheniusViscosity.C new file mode 100644 index 0000000000..4d6daeafcb --- /dev/null +++ b/src/regionModels/surfaceFilmModels/submodels/thermo/filmViscosityModel/ArrheniusViscosity/ArrheniusViscosity.C @@ -0,0 +1,93 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2015 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 "ArrheniusViscosity.H" +#include "addToRunTimeSelectionTable.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +namespace regionModels +{ +namespace surfaceFilmModels +{ + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +defineTypeNameAndDebug(ArrheniusViscosity, 0); + +addToRunTimeSelectionTable +( + filmViscosityModel, + ArrheniusViscosity, + dictionary +); + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +ArrheniusViscosity::ArrheniusViscosity +( + surfaceFilmModel& owner, + const dictionary& dict, + volScalarField& mu +) +: + filmViscosityModel(typeName, owner, dict, mu), + viscosity_(filmViscosityModel::New(owner, coeffDict_, mu)), + k1_("k1", dimTemperature, coeffDict_.lookup("k1")), + k2_("k2", dimTemperature, coeffDict_.lookup("k2")), + Tref_("Tref", dimTemperature, coeffDict_.lookup("Tref")) +{} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +ArrheniusViscosity::~ArrheniusViscosity() +{} + + +// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * // + +void ArrheniusViscosity::correct +( + const volScalarField& p, + const volScalarField& T +) +{ + viscosity_->correct(p, T); + mu_ *= exp(k1_*((1/(T + k2_)) - 1/(Tref_ + k2_))); + mu_.correctBoundaryConditions(); +} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace surfaceFilmModels +} // End namespace regionModels +} // End namespace Foam + +// ************************************************************************* // diff --git a/src/regionModels/surfaceFilmModels/submodels/thermo/filmViscosityModel/ArrheniusViscosity/ArrheniusViscosity.H b/src/regionModels/surfaceFilmModels/submodels/thermo/filmViscosityModel/ArrheniusViscosity/ArrheniusViscosity.H new file mode 100644 index 0000000000..ddeed31c45 --- /dev/null +++ b/src/regionModels/surfaceFilmModels/submodels/thermo/filmViscosityModel/ArrheniusViscosity/ArrheniusViscosity.H @@ -0,0 +1,134 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | + \\ / A nd | Copyright (C) 2015 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::ArrheniusViscosity + +Description + The Arrhenius temperature-dependent viscosity model multiplies the viscosity + of a base model by an Arrhenius-type temperature function: + + mu = mu0*exp(k1*(1/(T + k2) - 1/(Tref + k2))) + + Where: + mu0 is the base-model viscosity + k1 and k2 are Arrhenius coefficients + T is the local temperature + Tref is the reference temperature + +SourceFiles + ArrheniusViscosity.C + +\*---------------------------------------------------------------------------*/ + +#ifndef ArrheniusViscosity_H +#define ArrheniusViscosity_H + +#include "filmViscosityModel.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ +namespace regionModels +{ +namespace surfaceFilmModels +{ + +/*---------------------------------------------------------------------------*\ + Class ArrheniusViscosity Declaration +\*---------------------------------------------------------------------------*/ + +class ArrheniusViscosity +: + public filmViscosityModel +{ + // Private member functions + + //- Disallow default bitwise copy construct + ArrheniusViscosity(const ArrheniusViscosity&); + + //- Disallow default bitwise assignment + void operator=(const ArrheniusViscosity&); + + +protected: + + // Protected data + + //- Base viscosity model + autoPtr viscosity_; + + //- Coefficient k1 + dimensionedScalar k1_; + + //- Coefficient k2 + dimensionedScalar k2_; + + //- Reference temperature + dimensionedScalar Tref_; + + +public: + + //- Runtime type information + TypeName("Arrhenius"); + + + // Constructors + + //- Construct from surface film model + ArrheniusViscosity + ( + surfaceFilmModel& owner, + const dictionary& dict, + volScalarField& mu + ); + + + //- Destructor + virtual ~ArrheniusViscosity(); + + + // Member Functions + + //- Correct + virtual void correct + ( + const volScalarField& p, + const volScalarField& T + ); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace surfaceFilmModels +} // End namespace regionModels +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/regionModels/surfaceFilmModels/submodels/thermo/filmViscosityModel/thixotropicViscosity/thixotropicViscosity.C b/src/regionModels/surfaceFilmModels/submodels/thermo/filmViscosityModel/thixotropicViscosity/thixotropicViscosity.C index 9fa338f2c4..bb0546f193 100644 --- a/src/regionModels/surfaceFilmModels/submodels/thermo/filmViscosityModel/thixotropicViscosity/thixotropicViscosity.C +++ b/src/regionModels/surfaceFilmModels/submodels/thermo/filmViscosityModel/thixotropicViscosity/thixotropicViscosity.C @@ -53,33 +53,6 @@ addToRunTimeSelectionTable ); -// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * // - -void thixotropicViscosity::updateMu() -{ - const kinematicSingleLayer& film = filmType(); - - // Blend based on mass fraction of added- to existing film mass - const dimensionedScalar m0("zero", dimMass, 0.0); - const dimensionedScalar mSMALL("SMALL", dimMass, ROOTVSMALL); - const volScalarField deltaMass("deltaMass", max(m0, film.deltaMass())); - const volScalarField filmMass("filmMass", film.netMass() + mSMALL); - - // Weighting field to blend new and existing mass contributions - const volScalarField w - ( - "w", - max(scalar(0.0), min(scalar(1.0), deltaMass/(deltaMass + filmMass))) - ); - - mu_ = - w*muInf_ - + (1 - w)*muInf_/(sqr(1.0 - K_*lambda_) + ROOTVSMALL); - - mu_.correctBoundaryConditions(); -} - - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // thixotropicViscosity::thixotropicViscosity @@ -113,9 +86,7 @@ thixotropicViscosity::thixotropicViscosity lambda_.min(1.0); lambda_.max(0.0); - // Initialise viscosity to inf value - // - cannot call updateMu() since this calls film.netMass() which - // cannot be evaluated yet (still in construction) + // Initialise viscosity to inf value because it cannot be evaluated yet mu_ = muInf_; mu_.correctBoundaryConditions(); } @@ -177,7 +148,30 @@ void thixotropicViscosity::correct lambda_.min(1.0); lambda_.max(0.0); - updateMu(); + + // Blend based on mass fraction of added- to existing film mass + const dimensionedScalar m0("zero", dimMass, 0.0); + const dimensionedScalar mSMALL("SMALL", dimMass, ROOTVSMALL); + const volScalarField deltaMass + ( + "thixotropicViscosity:deltaMass", + max(m0, film.deltaMass()) + ); + const volScalarField filmMass + ( + "thixotropicViscosity:filmMass", + film.netMass() + mSMALL + ); + + // Weighting field to blend new and existing mass contributions + const volScalarField w + ( + "thixotropicViscosity:w", + max(scalar(0.0), min(scalar(1.0), deltaMass/(deltaMass + filmMass))) + ); + + mu_ = w*muInf_ + (1 - w)*muInf_/(sqr(1.0 - K_*lambda_) + ROOTVSMALL); + mu_.correctBoundaryConditions(); } diff --git a/src/regionModels/surfaceFilmModels/submodels/thermo/filmViscosityModel/thixotropicViscosity/thixotropicViscosity.H b/src/regionModels/surfaceFilmModels/submodels/thermo/filmViscosityModel/thixotropicViscosity/thixotropicViscosity.H index ac1a2ac2f0..78661661a6 100644 --- a/src/regionModels/surfaceFilmModels/submodels/thermo/filmViscosityModel/thixotropicViscosity/thixotropicViscosity.H +++ b/src/regionModels/surfaceFilmModels/submodels/thermo/filmViscosityModel/thixotropicViscosity/thixotropicViscosity.H @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | - \\ / A nd | Copyright (C) 2013-2014 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2013-2015 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -56,7 +56,6 @@ Description \mu_{\infty} | limiting viscosity when \f$ \lambda = 0 \f$ \endvartable - Reference: \verbatim Barnes H A, 1997. Thixotropy - a review. J. Non-Newtonian Fluid @@ -90,8 +89,6 @@ class thixotropicViscosity : public filmViscosityModel { -private: - // Private member functions //- Disallow default bitwise copy construct @@ -132,12 +129,6 @@ protected: volScalarField lambda_; - // Protected Member Functions - - //- Update the viscosity - void updateMu(); - - public: //- Runtime type information @@ -161,14 +152,12 @@ public: // Member Functions - // Evolution - - //- Correct - virtual void correct - ( - const volScalarField& p, - const volScalarField& T - ); + //- Correct + virtual void correct + ( + const volScalarField& p, + const volScalarField& T + ); };