From f05bcb541c68f11b92491e62758b7d2f62944688 Mon Sep 17 00:00:00 2001 From: Henry Weller Date: Wed, 26 Oct 2022 16:31:25 +0100 Subject: [PATCH] solidDisplacementFoam: Updated to solve for the solid temperature in energy conservative form consistent with the solid solver module and solidThermo. --- .../readThermophysicalProperties.H | 2 - .../solidDisplacementFoam.C | 21 +- .../solidDisplacementThermo.C | 472 +----------------- .../solidDisplacementThermo.H | 256 +--------- .../solidDisplacementFoam/plateHole/0/T | 3 +- .../plateHole/constant/physicalProperties | 2 +- .../plateHole/system/fvSchemes | 6 +- .../plateHole/system/fvSolution | 2 +- .../beamEndLoad/constant/physicalProperties | 2 +- 9 files changed, 27 insertions(+), 739 deletions(-) diff --git a/applications/solvers/stressAnalysis/solidDisplacementFoam/readThermophysicalProperties.H b/applications/solvers/stressAnalysis/solidDisplacementFoam/readThermophysicalProperties.H index 7d7e56dcd0..91aed1e02d 100644 --- a/applications/solvers/stressAnalysis/solidDisplacementFoam/readThermophysicalProperties.H +++ b/applications/solvers/stressAnalysis/solidDisplacementFoam/readThermophysicalProperties.H @@ -12,8 +12,6 @@ if (thermo.thermalStress()) const volScalarField& E(thermo.E()); const volScalarField& nu(thermo.nu()); -const volScalarField Cp(thermo.Cp()); - Info<< "Calculating Lame's coefficients\n" << endl; const volScalarField mu(E/(2*(1 + nu))); diff --git a/applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementFoam.C b/applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementFoam.C index 01fe8eae3c..29d0c5c35b 100644 --- a/applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementFoam.C +++ b/applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementFoam.C @@ -73,20 +73,25 @@ int main(int argc, char *argv[]) if (thermo.thermalStress()) { - volScalarField& T = thermo.T(); - fvScalarMatrix TEqn + volScalarField& e = thermo.he(); + + fvScalarMatrix eEqn ( - fvm::ddt(rho, Cp, T) - + thermophysicalTransport->divq(T) + fvm::ddt(rho, e) + + thermophysicalTransport->divq(e) == - fvModels.source(rho*Cp, T) + fvModels.source(rho, e) ); - fvConstraints.constrain(TEqn); + eEqn.relax(); - TEqn.solve(); + fvConstraints.constrain(eEqn); - fvConstraints.constrain(T); + eEqn.solve(); + + fvConstraints.constrain(e); + + thermo.correct(); } { diff --git a/applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementThermo/solidDisplacementThermo.C b/applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementThermo/solidDisplacementThermo.C index 85ea6ddbdb..4e93d14d04 100644 --- a/applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementThermo/solidDisplacementThermo.C +++ b/applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementThermo/solidDisplacementThermo.C @@ -24,12 +24,8 @@ License \*---------------------------------------------------------------------------*/ #include "solidDisplacementThermo.H" -#include "fvMesh.H" -#include "fvmLaplacian.H" -#include "fvcSnGrad.H" -#include "surfaceInterpolate.H" -/* * * * * * * * * * * * * * * private static data * * * * * * * * * * * * * */ +/* * * * * * * * * * * * * * * Private Static Data * * * * * * * * * * * * * */ namespace Foam { @@ -37,45 +33,6 @@ namespace Foam } -void Foam::solidDisplacementThermo::readProperty(volScalarField& prop) const -{ - const dictionary& propDict(subDict(prop.name())); - const word propType(propDict.lookup("type")); - - if (propType == "uniform") - { - prop == dimensionedScalar - ( - prop.name(), - prop.dimensions(), - propDict.lookup("value") - ); - } - else if (propType == "field") - { - const volScalarField propField - ( - IOobject - ( - prop.name(), - prop.mesh().time().timeName(0), - prop.mesh(), - IOobject::MUST_READ, - IOobject::NO_WRITE - ), - prop.mesh() - ); - prop == propField; - } - else - { - FatalErrorInFunction - << "Valid type entries are uniform or field for " << prop.name() - << abort(FatalError); - } -} - - // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::solidDisplacementThermo::solidDisplacementThermo @@ -84,82 +41,13 @@ Foam::solidDisplacementThermo::solidDisplacementThermo const word& phaseName ) : - solidThermo::composite(mesh, phaseName), + constSolidThermo(mesh, phaseName), planeStress_(lookup("planeStress")), thermalStress_(lookup("thermalStress")), - Cp_ - ( - IOobject - ( - phasePropertyName("Cp"), - mesh.time().timeName(), - mesh, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh, - dimEnergy/dimMass/dimTemperature - ), - kappa_ - ( - IOobject - ( - phasePropertyName("kappa"), - mesh.time().timeName(), - mesh, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh, - Cp_.dimensions()*dimensionSet(1, -1, -1, 0, 0) - ), - E_ - ( - IOobject - ( - phasePropertyName("E"), - mesh.time().timeName(), - mesh, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh, - dimPressure - ), - nu_ - ( - IOobject - ( - phasePropertyName("nu"), - mesh.time().timeName(), - mesh, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh, - dimless - ), - alphav_ - ( - IOobject - ( - phasePropertyName("alphav"), - mesh.time().timeName(), - mesh, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh, - dimless/dimTemperature - ) -{ - readProperty(rho_); - readProperty(Cp_); - readProperty(kappa_); - readProperty(E_); - readProperty(nu_); - readProperty(alphav_); -} + E_(readProperty("E", dimPressure)), + nu_(readProperty("nu", dimless)), + alphav_(readProperty("alphav", dimless/dimTemperature)) +{} // * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // @@ -170,21 +58,6 @@ Foam::solidDisplacementThermo::~solidDisplacementThermo() // * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // -Foam::tmp Foam::solidDisplacementThermo::rho() const -{ - return rho_; -} - - -Foam::tmp Foam::solidDisplacementThermo::rho -( - const label patchi -) const -{ - return rho_.boundaryField()[patchi]; -} - - const Foam::volScalarField& Foam::solidDisplacementThermo::E() const { return E_; @@ -230,337 +103,4 @@ const Foam::scalarField& Foam::solidDisplacementThermo::alphav } -Foam::volScalarField& Foam::solidDisplacementThermo::he() -{ - NotImplemented; - return rho_; -} - - -const Foam::volScalarField& Foam::solidDisplacementThermo::he() const -{ - NotImplemented; - return rho_; -} - - -Foam::tmp Foam::solidDisplacementThermo::he -( - const scalarField& T, - const labelList& cells -) const -{ - NotImplemented; - return tmp(nullptr); -} - -Foam::tmp Foam::solidDisplacementThermo::he -( - const volScalarField& p, - const volScalarField& T -) const -{ - NotImplemented; - return tmp(nullptr); -} - - -Foam::tmp Foam::solidDisplacementThermo::he -( - const scalarField& T, - const label patchi -) const -{ - NotImplemented; - return tmp(nullptr); -} - - -Foam::tmp Foam::solidDisplacementThermo::hs() const -{ - NotImplemented; - return tmp(nullptr); -} - - -Foam::tmp Foam::solidDisplacementThermo::hs -( - const volScalarField& p, - const volScalarField& T -) const -{ - NotImplemented; - return tmp(nullptr); -} - - -Foam::tmp Foam::solidDisplacementThermo::hs -( - const scalarField& T, - const label patchi -) const -{ - NotImplemented; - return tmp(nullptr); -} - - -Foam::tmp Foam::solidDisplacementThermo::hs -( - const scalarField& T, - const labelList& cells -) const -{ - NotImplemented; - return tmp(nullptr); -} - - -Foam::tmp Foam::solidDisplacementThermo::ha() const -{ - NotImplemented; - return tmp(nullptr); -} - - -Foam::tmp Foam::solidDisplacementThermo::ha -( - const volScalarField& p, - const volScalarField& T -) const -{ - NotImplemented; - return tmp(nullptr); -} - - -Foam::tmp Foam::solidDisplacementThermo::ha -( - const scalarField& T, - const label patchi -) const -{ - NotImplemented; - return tmp(nullptr); -} - - -Foam::tmp Foam::solidDisplacementThermo::ha -( - const scalarField& T, - const labelList& cells -) const -{ - NotImplemented; - return tmp(nullptr); -} - - -Foam::tmp Foam::solidDisplacementThermo::hc() const -{ - NotImplemented; - return tmp(nullptr); -} - - -Foam::tmp Foam::solidDisplacementThermo::THE -( - const volScalarField& h, - const volScalarField& p, - const volScalarField& T0 -) const -{ - NotImplemented; - return tmp(nullptr); -} - - -Foam::tmp Foam::solidDisplacementThermo::THE -( - const scalarField& he, - const scalarField& T0, - const labelList& cells -) const -{ - NotImplemented; - return tmp(nullptr); -} - - -Foam::tmp Foam::solidDisplacementThermo::THE -( - const scalarField& he, - const scalarField& T0, - const label patchi -) const -{ - NotImplemented; - return tmp(nullptr); -} - - -const Foam::volScalarField& Foam::solidDisplacementThermo::Cp() const -{ - return Cp_; -} - - -const Foam::volScalarField& Foam::solidDisplacementThermo::Cv() const -{ - return Cp_; -} - - -Foam::tmp Foam::solidDisplacementThermo::Cp -( - const scalarField& T, - const label patchi -) const -{ - return Cp_.boundaryField()[patchi]; -} - - -Foam::tmp Foam::solidDisplacementThermo::Cv -( - const scalarField& T, - const label patchi -) const -{ - return Cp_.boundaryField()[patchi]; -} - - -Foam::tmp Foam::solidDisplacementThermo::Cpv() const -{ - return Cp_; -} - - -Foam::tmp Foam::solidDisplacementThermo::Cpv -( - const scalarField& T, - const label patchi -) const -{ - return Cp_.boundaryField()[patchi]; -} - - -const Foam::volScalarField& Foam::solidDisplacementThermo::kappa() const -{ - return kappa_; -} - - -Foam::tmp Foam::solidDisplacementThermo::alphahe() const -{ - NotImplemented; - return tmp(nullptr); -} - - -Foam::tmp Foam::solidDisplacementThermo::alphahe -( - const label patchi -) const -{ - NotImplemented; - return tmp(nullptr); -} - - -Foam::tmp Foam::solidDisplacementThermo::kappaEff -( - const volScalarField& alphat -) const -{ - NotImplemented; - return tmp(nullptr); -} - - -Foam::tmp Foam::solidDisplacementThermo::kappaEff -( - const scalarField& alphat, - const label patchi -) const -{ - NotImplemented; - return tmp(nullptr); -} - - -Foam::tmp Foam::solidDisplacementThermo::alphaEff -( - const volScalarField& alphat -) const -{ - NotImplemented; - return tmp(nullptr); -} - - -Foam::tmp Foam::solidDisplacementThermo::alphaEff -( - const scalarField& alphat, - const label patchi -) const -{ - NotImplemented; - return tmp(nullptr); -} - - -Foam::tmp Foam::solidDisplacementThermo::Kappa() const -{ - NotImplemented; - return tmp(nullptr); -} - - -Foam::tmp Foam::solidDisplacementThermo::Kappa -( - const label patchi -) const -{ - NotImplemented; - return tmp(nullptr); -} - - -Foam::tmp Foam::solidDisplacementThermo::KappaLocal -( - const label patchi -) const -{ - NotImplemented; - return tmp(nullptr); -} - - -void Foam::solidDisplacementThermo::correct() -{} - - -bool Foam::solidDisplacementThermo::read() -{ - return regIOobject::read(); -} - - -Foam::tmp -Foam::solidDisplacementThermo::q() const -{ - return -fvc::interpolate(kappa_)*fvc::snGrad(T()); -} - - -Foam::tmp -Foam::solidDisplacementThermo::divq(volScalarField& T) const -{ - return -fvm::laplacian(kappa_, T); -} - - // ************************************************************************* // diff --git a/applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementThermo/solidDisplacementThermo.H b/applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementThermo/solidDisplacementThermo.H index 08b0bdd431..00a4f6d18b 100644 --- a/applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementThermo/solidDisplacementThermo.H +++ b/applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementThermo/solidDisplacementThermo.H @@ -35,7 +35,7 @@ SourceFiles #ifndef solidDisplacementThermo_H #define solidDisplacementThermo_H -#include "solidThermo.H" +#include "constSolidThermo.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -48,7 +48,7 @@ namespace Foam class solidDisplacementThermo : - public solidThermo::composite + public constSolidThermo { // Private data @@ -58,12 +58,6 @@ class solidDisplacementThermo //- Switch to enable thermal stress Switch thermalStress_; - //- Heat capacity at constant pressure [J/kg/K] - volScalarField Cp_; - - //- Thermal conductivity [W/m/K] - volScalarField kappa_; - //- Youngs modulus [Pa] volScalarField E_; @@ -74,11 +68,6 @@ class solidDisplacementThermo volScalarField alphav_; - // Private Member Functions - - void readProperty(volScalarField& prop) const; - - public: //- Runtime type information @@ -101,26 +90,6 @@ public: // Member Functions - //- Return the name of the thermo physics - virtual word thermoName() const - { - return type(); - } - - //- Return true if the equation of state is incompressible - // i.e. rho != f(p) - virtual bool incompressible() const - { - return true; - } - - //- Return true if the equation of state is isochoric - // i.e. rho = const - virtual bool isochoric() const - { - return true; - } - //- Returns true to enable plane stress bool planeStress() const { @@ -136,12 +105,6 @@ public: // Access to thermophysical state variables - //- Density [kg/m^3] - virtual tmp rho() const; - - //- Density for patch [kg/m^3] - virtual tmp rho(const label patchi) const; - //- Youngs modulus [Pa] virtual const volScalarField& E() const; @@ -159,221 +122,6 @@ public: //- Volumetric thermal expansion coefficient for a patch [1/T] virtual const scalarField& alphav(const label patchi) const; - - //- Enthalpy/Internal energy [J/kg] - // Non-const access allowed for transport equations - virtual volScalarField& he(); - - //- Enthalpy/Internal energy [J/kg] - virtual const volScalarField& he() const; - - //- Heat capacity at constant pressure [J/kg/K] - virtual const volScalarField& Cp() const; - - //- Heat capacity at constant volume [J/kg/K] - virtual const volScalarField& Cv() const; - - - // Access to transport state variables - - //- Thermal conductivity of mixture [W/m/K] - virtual const volScalarField& kappa() const; - - - // Fields derived from thermodynamic state variables - - //- Enthalpy/Internal energy - // for given pressure and temperature [J/kg] - virtual tmp he - ( - const volScalarField& p, - const volScalarField& T - ) const; - - //- Enthalpy/Internal energy for cell-set [J/kg] - virtual tmp he - ( - const scalarField& T, - const labelList& cells - ) const; - - //- Enthalpy/Internal energy for patch [J/kg] - virtual tmp he - ( - const scalarField& T, - const label patchi - ) const; - - //- Sensible enthalpy [J/kg] - virtual tmp hs() const; - - //- Sensible enthalpy - // for given pressure and temperature [J/kg] - virtual tmp hs - ( - const volScalarField& p, - const volScalarField& T - ) const; - - //- Sensible enthalpy for cell-set [J/kg] - virtual tmp hs - ( - const scalarField& T, - const labelList& cells - ) const; - - //- Sensible enthalpy for patch [J/kg] - virtual tmp hs - ( - const scalarField& T, - const label patchi - ) const; - - //- Absolute enthalpy [J/kg/K] - virtual tmp ha() const; - - //- Absolute enthalpy - // for given pressure and temperature [J/kg] - virtual tmp ha - ( - const volScalarField& p, - const volScalarField& T - ) const; - - //- Absolute enthalpy for patch [J/kg/K] - virtual tmp ha - ( - const scalarField& T, - const label patchi - ) const; - - //- Absolute enthalpy for cell-set [J/kg] - virtual tmp ha - ( - const scalarField& T, - const labelList& cells - ) const; - - //- Enthalpy of formation [J/kg] - virtual tmp hc() const; - - //- Temperature from enthalpy/internal energy - virtual tmp THE - ( - const volScalarField& h, - const volScalarField& p, - const volScalarField& T0 // starting temperature - ) const; - - //- Temperature from enthalpy/internal energy for cell-set - virtual tmp THE - ( - const scalarField& he, - const scalarField& T0, // starting temperature - const labelList& cells - ) const; - - //- Temperature from enthalpy/internal energy for patch - virtual tmp THE - ( - const scalarField& he, - const scalarField& T0, // starting temperature - const label patchi - ) const; - - //- Heat capacity at constant pressure for patch [J/kg/K] - virtual tmp Cp - ( - const scalarField& T, - const label patchi - ) const; - - //- Heat capacity at constant volume for patch [J/kg/K] - virtual tmp Cv - ( - const scalarField& T, - const label patchi - ) const; - - //- Heat capacity at constant pressure/volume [J/kg/K] - virtual tmp Cpv() const; - - //- Heat capacity at constant pressure/volume for patch [J/kg/K] - virtual tmp Cpv - ( - const scalarField& T, - const label patchi - ) const; - - - // Fields derived from transport state variables - - //- Thermal diffusivity for energy of mixture [kg/m/s] - virtual tmp alphahe() const; - - //- Thermal diffusivity for energy of mixture for patch [kg/m/s] - virtual tmp alphahe(const label patchi) const; - - //- Effective thermal turbulent conductivity - // of mixture [W/m/K] - virtual tmp kappaEff - ( - const volScalarField& - ) const; - - //- Effective thermal turbulent diffusivity of mixture [kg/m/s] - virtual tmp alphaEff - ( - const volScalarField& alphat - ) const; - - //- Effective thermal turbulent conductivity - // of mixture for patch [W/m/K] - virtual tmp kappaEff - ( - const scalarField& alphat, - const label patchi - ) const; - - //- Effective thermal turbulent diffusivity of mixture - // for patch [kg/m/s] - virtual tmp alphaEff - ( - const scalarField& alphat, - const label patchi - ) const; - - //- Return true if thermal conductivity is isotropic - virtual bool isotropic() const - { - return true; - } - - //- Anisotropic thermal conductivity [W/m/K] - virtual tmp Kappa() const; - - //- Anisotropic thermal conductivity [W/m/K] - virtual tmp Kappa(const label patchi) const; - - //- Anisotropic thermal conductivity for patch - // in the local coordinate system [W/m/K] - virtual tmp KappaLocal(const label patchi) const; - - //- Return the heat flux - virtual tmp q() const; - - //- Return the source term for the energy equation - virtual tmp divq(volScalarField& he) const; - - - //- Update properties - virtual void correct(); - - - // I-O - - //- Read thermophysicalProperties dictionary - virtual bool read(); }; diff --git a/tutorials/stressAnalysis/solidDisplacementFoam/plateHole/0/T b/tutorials/stressAnalysis/solidDisplacementFoam/plateHole/0/T index d73bf3dbc2..22b53127d0 100644 --- a/tutorials/stressAnalysis/solidDisplacementFoam/plateHole/0/T +++ b/tutorials/stressAnalysis/solidDisplacementFoam/plateHole/0/T @@ -37,7 +37,8 @@ boundaryField } hole { - type zeroGradient; + type fixedValue; + value uniform 400; } frontAndBack { diff --git a/tutorials/stressAnalysis/solidDisplacementFoam/plateHole/constant/physicalProperties b/tutorials/stressAnalysis/solidDisplacementFoam/plateHole/constant/physicalProperties index 04ca5d6ce9..45e9c1b86f 100644 --- a/tutorials/stressAnalysis/solidDisplacementFoam/plateHole/constant/physicalProperties +++ b/tutorials/stressAnalysis/solidDisplacementFoam/plateHole/constant/physicalProperties @@ -32,7 +32,7 @@ E value 2e+11; } -Cp +Cv { type uniform; value 434; diff --git a/tutorials/stressAnalysis/solidDisplacementFoam/plateHole/system/fvSchemes b/tutorials/stressAnalysis/solidDisplacementFoam/plateHole/system/fvSchemes index 8a3297752d..2173306930 100644 --- a/tutorials/stressAnalysis/solidDisplacementFoam/plateHole/system/fvSchemes +++ b/tutorials/stressAnalysis/solidDisplacementFoam/plateHole/system/fvSchemes @@ -27,8 +27,6 @@ ddtSchemes gradSchemes { default leastSquares; - grad(D) leastSquares; - grad(T) leastSquares; } divSchemes @@ -39,9 +37,7 @@ divSchemes laplacianSchemes { - default none; - laplacian(DD,D) Gauss linear corrected; - laplacian(kappa,T) Gauss linear corrected; + default Gauss linear corrected; } interpolationSchemes diff --git a/tutorials/stressAnalysis/solidDisplacementFoam/plateHole/system/fvSolution b/tutorials/stressAnalysis/solidDisplacementFoam/plateHole/system/fvSolution index e3594b3f80..405c325ec9 100644 --- a/tutorials/stressAnalysis/solidDisplacementFoam/plateHole/system/fvSolution +++ b/tutorials/stressAnalysis/solidDisplacementFoam/plateHole/system/fvSolution @@ -16,7 +16,7 @@ FoamFile solvers { - "(D|T)" + "(D|e)" { solver GAMG; tolerance 1e-06; diff --git a/tutorials/stressAnalysis/solidEquilibriumDisplacementFoam/beamEndLoad/constant/physicalProperties b/tutorials/stressAnalysis/solidEquilibriumDisplacementFoam/beamEndLoad/constant/physicalProperties index 29a34a5253..1c795f8876 100644 --- a/tutorials/stressAnalysis/solidEquilibriumDisplacementFoam/beamEndLoad/constant/physicalProperties +++ b/tutorials/stressAnalysis/solidEquilibriumDisplacementFoam/beamEndLoad/constant/physicalProperties @@ -32,7 +32,7 @@ E value 2e+11; } -Cp +Cv { type uniform; value 434;