From 640027e73a53373c8305dbf9bfdae85f1042bbdd Mon Sep 17 00:00:00 2001 From: Henry Weller Date: Wed, 30 Oct 2019 15:17:34 +0000 Subject: [PATCH] solidDisplacementFoam: Updated thermophysical property handling to use solidDisplacementThermo derived from solidThermo. This allows the standard heat transfer boundary conditions, for example externalWallHeatFluxTemperature, to be used with solidDisplacementFoam and also significantly simplifies the code. Additionally solidDisplacementFoam and solidEquilibriumDisplacementFoam have been updated to handle spatially varying physical properties in a conservative manner both for the stress and heat transfer. This means that the stress field sigma is now dynamic rather than kinematic as it was previously. For uniform property fields the behaviour of the solvers is the same as it was before this update. --- .../solidDisplacementFoam/Allwmake | 12 + .../solidDisplacementFoam/Make/options | 5 + .../solidDisplacementFoam/calculateStress.H | 74 +-- .../solidDisplacementFoam/createFieldRefs.H | 1 + .../solidDisplacementFoam/createFields.H | 7 +- .../tractionDisplacementFvPatchVectorField.C | 67 +-- .../readMechanicalProperties.H | 196 ------- .../readThermalProperties.H | 219 -------- .../readThermophysicalProperties.H | 29 + .../solidDisplacementFoam.C | 17 +- .../solidDisplacementThermo/Make/files | 3 + .../solidDisplacementThermo/Make/options | 8 + .../solidDisplacementThermo.C | 515 ++++++++++++++++++ .../solidDisplacementThermo.H | 358 ++++++++++++ .../Make/files | 0 .../Make/options | 15 + .../calculateStress.H | 0 .../createControls.H | 0 .../createFields.H | 2 +- .../kineticEnergyLimiter.H | 0 .../readSteadyStressFoamControls.H | 0 .../solidEquilibriumDisplacementFoam.C | 5 +- ...DisplacementCorrectionFvPatchVectorField.C | 44 +- ...DisplacementCorrectionFvPatchVectorField.H | 0 .../Make/options | 10 - .../greyMeanSolid/greyMeanSolid.C | 2 +- .../greyMeanSolid/greyMeanSolid.H | 4 +- .../solidThermo/solidThermo/solidThermo.C | 6 +- .../solidThermo/solidThermo/solidThermo.H | 11 - .../plateHole/constant/mechanicalProperties | 39 -- ...malProperties => thermophysicalProperties} | 25 +- .../plateHole/system/fvSchemes | 2 +- .../beamEndLoad/0/T | 53 ++ .../beamEndLoad/constant/thermalProperties | 39 -- ...calProperties => thermophysicalProperties} | 19 + 35 files changed, 1149 insertions(+), 638 deletions(-) create mode 100755 applications/solvers/stressAnalysis/solidDisplacementFoam/Allwmake create mode 100644 applications/solvers/stressAnalysis/solidDisplacementFoam/createFieldRefs.H delete mode 100644 applications/solvers/stressAnalysis/solidDisplacementFoam/readMechanicalProperties.H delete mode 100644 applications/solvers/stressAnalysis/solidDisplacementFoam/readThermalProperties.H create mode 100644 applications/solvers/stressAnalysis/solidDisplacementFoam/readThermophysicalProperties.H create mode 100644 applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementThermo/Make/files create mode 100644 applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementThermo/Make/options create mode 100644 applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementThermo/solidDisplacementThermo.C create mode 100644 applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementThermo/solidDisplacementThermo.H rename applications/solvers/stressAnalysis/{ => solidDisplacementFoam}/solidEquilibriumDisplacementFoam/Make/files (100%) create mode 100644 applications/solvers/stressAnalysis/solidDisplacementFoam/solidEquilibriumDisplacementFoam/Make/options rename applications/solvers/stressAnalysis/{ => solidDisplacementFoam}/solidEquilibriumDisplacementFoam/calculateStress.H (100%) rename applications/solvers/stressAnalysis/{ => solidDisplacementFoam}/solidEquilibriumDisplacementFoam/createControls.H (100%) rename applications/solvers/stressAnalysis/{ => solidDisplacementFoam}/solidEquilibriumDisplacementFoam/createFields.H (95%) rename applications/solvers/stressAnalysis/{ => solidDisplacementFoam}/solidEquilibriumDisplacementFoam/kineticEnergyLimiter.H (100%) rename applications/solvers/stressAnalysis/{ => solidDisplacementFoam}/solidEquilibriumDisplacementFoam/readSteadyStressFoamControls.H (100%) rename applications/solvers/stressAnalysis/{ => solidDisplacementFoam}/solidEquilibriumDisplacementFoam/solidEquilibriumDisplacementFoam.C (95%) rename applications/solvers/stressAnalysis/{ => solidDisplacementFoam}/solidEquilibriumDisplacementFoam/tractionDisplacementCorrection/tractionDisplacementCorrectionFvPatchVectorField.C (86%) rename applications/solvers/stressAnalysis/{ => solidDisplacementFoam}/solidEquilibriumDisplacementFoam/tractionDisplacementCorrection/tractionDisplacementCorrectionFvPatchVectorField.H (100%) delete mode 100644 applications/solvers/stressAnalysis/solidEquilibriumDisplacementFoam/Make/options delete mode 100644 tutorials/stressAnalysis/solidDisplacementFoam/plateHole/constant/mechanicalProperties rename tutorials/stressAnalysis/solidDisplacementFoam/plateHole/constant/{thermalProperties => thermophysicalProperties} (81%) create mode 100644 tutorials/stressAnalysis/solidEquilibriumDisplacementFoam/beamEndLoad/0/T delete mode 100644 tutorials/stressAnalysis/solidEquilibriumDisplacementFoam/beamEndLoad/constant/thermalProperties rename tutorials/stressAnalysis/solidEquilibriumDisplacementFoam/beamEndLoad/constant/{mechanicalProperties => thermophysicalProperties} (82%) diff --git a/applications/solvers/stressAnalysis/solidDisplacementFoam/Allwmake b/applications/solvers/stressAnalysis/solidDisplacementFoam/Allwmake new file mode 100755 index 0000000000..81a330a6e5 --- /dev/null +++ b/applications/solvers/stressAnalysis/solidDisplacementFoam/Allwmake @@ -0,0 +1,12 @@ +#!/bin/sh +cd ${0%/*} || exit 1 # Run from this directory + +# Parse arguments for library compilation +. $WM_PROJECT_DIR/wmake/scripts/AllwmakeParseArguments + +wmake $targetType solidDisplacementThermo + +wmake $targetType +wmake $targetType solidEquilibriumDisplacementFoam + +#------------------------------------------------------------------------------ diff --git a/applications/solvers/stressAnalysis/solidDisplacementFoam/Make/options b/applications/solvers/stressAnalysis/solidDisplacementFoam/Make/options index d3ab5a843b..52346e3cfa 100644 --- a/applications/solvers/stressAnalysis/solidDisplacementFoam/Make/options +++ b/applications/solvers/stressAnalysis/solidDisplacementFoam/Make/options @@ -1,11 +1,16 @@ EXE_INC = \ -I. \ + -IsolidDisplacementThermo \ -IderivedFvPatchFields/tractionDisplacement \ -IderivedFvPatchFields/hydrostaticDisplacement \ + -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/solidThermo/lnInclude \ -I$(LIB_SRC)/finiteVolume/lnInclude \ -I$(LIB_SRC)/meshTools/lnInclude EXE_LIBS = \ -lfiniteVolume \ + -lsolidThermo \ + -lsolidDisplacementThermo \ -lfvOptions \ -lmeshTools diff --git a/applications/solvers/stressAnalysis/solidDisplacementFoam/calculateStress.H b/applications/solvers/stressAnalysis/solidDisplacementFoam/calculateStress.H index d3bdb20ee4..0703b841e2 100644 --- a/applications/solvers/stressAnalysis/solidDisplacementFoam/calculateStress.H +++ b/applications/solvers/stressAnalysis/solidDisplacementFoam/calculateStress.H @@ -1,39 +1,39 @@ - if (runTime.writeTime()) +if (runTime.writeTime()) +{ + volSymmTensorField sigma + ( + IOobject + ( + "sigma", + runTime.timeName(), + mesh, + IOobject::NO_READ, + IOobject::AUTO_WRITE + ), + rho*sigmaD + ); + + if (thermo.thermalStress()) { - volSymmTensorField sigma - ( - IOobject - ( - "sigma", - runTime.timeName(), - mesh, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - rho*sigmaD - ); - - if (thermalStress) - { - const volScalarField& T = Tptr(); - sigma = sigma - I*(rho*threeKalpha*T); - } - - volScalarField sigmaEq - ( - IOobject - ( - "sigmaEq", - runTime.timeName(), - mesh, - IOobject::NO_READ, - IOobject::AUTO_WRITE - ), - sqrt((3.0/2.0)*magSqr(dev(sigma))) - ); - - Info<< "Max sigmaEq = " << max(sigmaEq).value() - << endl; - - runTime.write(); + const volScalarField& T = Tptr(); + sigma = sigma - I*(rho*threeKalpha*T); } + + volScalarField sigmaEq + ( + IOobject + ( + "sigmaEq", + runTime.timeName(), + mesh, + IOobject::NO_READ, + IOobject::AUTO_WRITE + ), + sqrt((3.0/2.0)*magSqr(dev(sigma))) + ); + + Info<< "Max sigmaEq = " << max(sigmaEq).value() + << endl; + + runTime.write(); +} diff --git a/applications/solvers/stressAnalysis/solidDisplacementFoam/createFieldRefs.H b/applications/solvers/stressAnalysis/solidDisplacementFoam/createFieldRefs.H new file mode 100644 index 0000000000..b206dd7cf0 --- /dev/null +++ b/applications/solvers/stressAnalysis/solidDisplacementFoam/createFieldRefs.H @@ -0,0 +1 @@ +const volScalarField& rho(thermo.rho()); diff --git a/applications/solvers/stressAnalysis/solidDisplacementFoam/createFields.H b/applications/solvers/stressAnalysis/solidDisplacementFoam/createFields.H index f5adee051c..40b16ad481 100644 --- a/applications/solvers/stressAnalysis/solidDisplacementFoam/createFields.H +++ b/applications/solvers/stressAnalysis/solidDisplacementFoam/createFields.H @@ -1,6 +1,5 @@ -#include "readMechanicalProperties.H" -#include "readThermalProperties.H" -mesh.Sf(); +#include "readThermophysicalProperties.H" + Info<< "Reading field D\n" << endl; volVectorField D ( @@ -18,7 +17,7 @@ volVectorField D autoPtr Tptr(nullptr); -if (thermalStress) +if (thermo.thermalStress()) { Info<< "Reading field T\n" << endl; Tptr.reset diff --git a/applications/solvers/stressAnalysis/solidDisplacementFoam/derivedFvPatchFields/tractionDisplacement/tractionDisplacementFvPatchVectorField.C b/applications/solvers/stressAnalysis/solidDisplacementFoam/derivedFvPatchFields/tractionDisplacement/tractionDisplacementFvPatchVectorField.C index 3b46083d27..8cc8029286 100644 --- a/applications/solvers/stressAnalysis/solidDisplacementFoam/derivedFvPatchFields/tractionDisplacement/tractionDisplacementFvPatchVectorField.C +++ b/applications/solvers/stressAnalysis/solidDisplacementFoam/derivedFvPatchFields/tractionDisplacement/tractionDisplacementFvPatchVectorField.C @@ -24,7 +24,7 @@ License \*---------------------------------------------------------------------------*/ #include "tractionDisplacementFvPatchVectorField.H" -#include "volFields.H" +#include "solidDisplacementThermo.H" #include "addToRunTimeSelectionTable.H" // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // @@ -138,59 +138,50 @@ void Foam::tractionDisplacementFvPatchVectorField::updateCoeffs() return; } - const dictionary& mechanicalProperties = - db().lookupObject("mechanicalProperties"); + const label patchi = patch().index(); - const dictionary& thermalProperties = - db().lookupObject("thermalProperties"); + const solidDisplacementThermo& thermo = + db().lookupObject + ( + solidDisplacementThermo::dictName + ); + const scalarField& E = thermo.E(patchi); + const scalarField& nu = thermo.nu(patchi); - const fvPatchField& rho = - patch().lookupPatchField("rho"); + const scalarField mu(E/(2.0*(1.0 + nu))); + const scalarField lambda + ( + thermo.planeStress() + ? nu*E/((1 + nu)*(1 - nu)) + : nu*E/((1 + nu)*(1 - 2*nu)) + ); + const scalarField threeK + ( + thermo.planeStress() + ? E/(1 - nu) + : E/(1 - 2*nu) + ); - const fvPatchField& rhoE = - patch().lookupPatchField("E"); + const scalarField twoMuLambda(2*mu + lambda); - const fvPatchField& nu = - patch().lookupPatchField("nu"); - - scalarField E(rhoE/rho); - scalarField mu(E/(2.0*(1.0 + nu))); - scalarField lambda(nu*E/((1.0 + nu)*(1.0 - 2.0*nu))); - scalarField threeK(E/(1.0 - 2.0*nu)); - - Switch planeStress(mechanicalProperties.lookup("planeStress")); - - if (planeStress) - { - lambda = nu*E/((1.0 + nu)*(1.0 - nu)); - threeK = E/(1.0 - nu); - } - - scalarField twoMuLambda(2*mu + lambda); - - vectorField n(patch().nf()); + const vectorField n(patch().nf()); const fvPatchField& sigmaD = patch().lookupPatchField("sigmaD"); gradient() = ( - (traction_ - pressure_*n)/rho + (traction_ - pressure_*n) + twoMuLambda*fvPatchField::snGrad() - (n & sigmaD) )/twoMuLambda; - Switch thermalStress(thermalProperties.lookup("thermalStress")); - - if (thermalStress) + if (thermo.thermalStress()) { - const fvPatchField& threeKalpha= - patch().lookupPatchField("threeKalpha"); + const scalarField& alphav = thermo.alphav(patchi); - const fvPatchField& T = - patch().lookupPatchField("T"); - - gradient() += n*threeKalpha*T/twoMuLambda; + gradient() += + n*threeK*alphav*thermo.T().boundaryField()[patchi]/twoMuLambda; } fixedGradientFvPatchVectorField::updateCoeffs(); diff --git a/applications/solvers/stressAnalysis/solidDisplacementFoam/readMechanicalProperties.H b/applications/solvers/stressAnalysis/solidDisplacementFoam/readMechanicalProperties.H deleted file mode 100644 index 961e771912..0000000000 --- a/applications/solvers/stressAnalysis/solidDisplacementFoam/readMechanicalProperties.H +++ /dev/null @@ -1,196 +0,0 @@ - Info<< "Reading mechanical properties\n" << endl; - - IOdictionary mechanicalProperties - ( - IOobject - ( - "mechanicalProperties", - runTime.constant(), - mesh, - IOobject::MUST_READ_IF_MODIFIED, - IOobject::NO_WRITE - ) - ); - - const dictionary& rhoDict(mechanicalProperties.subDict("rho")); - word rhoType(rhoDict.lookup("type")); - - autoPtr rhoPtr; - - IOobject rhoIO - ( - "rho", - runTime.timeName(0), - mesh, - IOobject::NO_READ, - IOobject::NO_WRITE - ); - - if (rhoType == "uniform") - { - scalar rhoValue(readScalar(rhoDict.lookup("value"))); - - rhoPtr.reset - ( - new volScalarField - ( - rhoIO, - mesh, - dimensionedScalar - ( - dimMass/dimVolume, - rhoValue - ) - ) - ); - } - else if (rhoType == "field") - { - rhoIO.readOpt() = IOobject::MUST_READ; - - rhoPtr.reset - ( - new volScalarField - ( - rhoIO, - mesh - ) - ); - } - else - { - FatalErrorInFunction - << "Valid type entries are uniform or field for rho" - << abort(FatalError); - } - - volScalarField& rho = rhoPtr(); - - const dictionary& EDict(mechanicalProperties.subDict("E")); - word EType(EDict.lookup("type")); - - autoPtr EPtr; - - IOobject EHeader - ( - "E", - runTime.timeName(0), - mesh, - IOobject::NO_READ, - IOobject::NO_WRITE - ); - - if (EType == "uniform") - { - scalar rhoEValue(readScalar(EDict.lookup("value"))); - - EPtr.reset - ( - new volScalarField - ( - EHeader, - mesh, - dimensionedScalar - ( - dimMass/dimLength/sqr(dimTime), - rhoEValue - ) - ) - ); - } - else if (EType == "field") - { - EHeader.readOpt() = IOobject::MUST_READ; - - EPtr.reset - ( - new volScalarField - ( - EHeader, - mesh - ) - ); - } - else - { - FatalErrorInFunction - << "Valid type entries are uniform or field for E" - << abort(FatalError); - } - - volScalarField& rhoE = EPtr(); - - autoPtr nuPtr; - - IOobject nuIO - ( - "nu", - runTime.timeName(0), - mesh, - IOobject::NO_READ, - IOobject::NO_WRITE - ); - - const dictionary& nuDict(mechanicalProperties.subDict("nu")); - word nuType(nuDict.lookup("type")); - - if (nuType == "uniform") - { - scalar nuValue(readScalar(nuDict.lookup("value"))); - nuPtr.reset - ( - new volScalarField - ( - nuIO, - mesh, - dimensionedScalar - ( - dimless, - nuValue - ) - ) - ); - } - else if (nuType == "field") - { - nuIO.readOpt() = IOobject::MUST_READ; - nuPtr.reset - ( - new volScalarField - ( - nuIO, - mesh - ) - ); - } - else - { - FatalErrorInFunction - << "Valid type entries are uniform or field for nu" - << abort(FatalError); - } - - volScalarField& nu = nuPtr(); - - Info<< "Normalising E : E/rho\n" << endl; - volScalarField E(rhoE/rho); - - Info<< "Calculating Lame's coefficients\n" << endl; - - volScalarField mu(E/(2.0*(1.0 + nu))); - volScalarField lambda(nu*E/((1.0 + nu)*(1.0 - 2.0*nu))); - volScalarField threeK(E/(1.0 - 2.0*nu)); - - Switch planeStress(mechanicalProperties.lookup("planeStress")); - - if (planeStress) - { - Info<< "Plane Stress\n" << endl; - - lambda = nu*E/((1.0 + nu)*(1.0 - nu)); - threeK = E/(1.0 - nu); - } - else - { - Info<< "Plane Strain\n" << endl; - } diff --git a/applications/solvers/stressAnalysis/solidDisplacementFoam/readThermalProperties.H b/applications/solvers/stressAnalysis/solidDisplacementFoam/readThermalProperties.H deleted file mode 100644 index 7b53ce2295..0000000000 --- a/applications/solvers/stressAnalysis/solidDisplacementFoam/readThermalProperties.H +++ /dev/null @@ -1,219 +0,0 @@ -Info<< "Reading thermal properties\n" << endl; - -IOdictionary thermalProperties -( - IOobject - ( - "thermalProperties", - runTime.constant(), - mesh, - IOobject::MUST_READ_IF_MODIFIED, - IOobject::NO_WRITE - ) -); - -Switch thermalStress(thermalProperties.lookup("thermalStress")); - -volScalarField threeKalpha -( - IOobject - ( - "threeKalpha", - runTime.timeName(), - mesh, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh, - dimensionedScalar(dimensionSet(0, 2, -2 , -1, 0), 0) -); - - -volScalarField DT -( - IOobject - ( - "DT", - runTime.timeName(), - mesh, - IOobject::NO_READ, - IOobject::NO_WRITE - ), - mesh, - dimensionedScalar(dimensionSet(0, 2, -1 , 0, 0), 0) -); - - -// Cache "k" for use in thermal BCs -autoPtr rhoKPtr; - -if (thermalStress) -{ - IOobject CIO - ( - "C", - runTime.timeName(0), - mesh, - IOobject::NO_READ, - IOobject::NO_WRITE - ); - - autoPtr CPtr; - - const dictionary& CDict(thermalProperties.subDict("C")); - word CType(CDict.lookup("type")); - if (CType == "uniform") - { - scalar CValue(readScalar(CDict.lookup("value"))); - - CPtr.reset - ( - new volScalarField - ( - CIO, - mesh, - dimensionedScalar - ( - dimensionSet(0, 2, -2 , -1, 0), - CValue - ) - ) - ); - - } - else if (CType == "field") - { - CIO.readOpt() = IOobject::MUST_READ; - - CPtr.reset - ( - new volScalarField - ( - CIO, - mesh - ) - ); - } - else - { - FatalErrorInFunction - << "Valid type entries are uniform or field for C" - << abort(FatalError); - } - - volScalarField& C = CPtr(); - - IOobject rhoKIO - ( - "k", - runTime.timeName(0), - mesh, - IOobject::NO_READ, - IOobject::NO_WRITE - ); - - const dictionary& kDict(thermalProperties.subDict("k")); - word kType(kDict.lookup("type")); - if (kType == "uniform") - { - scalar rhoKValue(readScalar(kDict.lookup("value"))); - - rhoKPtr.reset - ( - new volScalarField - ( - rhoKIO, - mesh, - dimensionedScalar - ( - dimensionSet(1, 1, -3 , -1, 0), - rhoKValue - ) - ) - ); - - } - else if (kType == "field") - { - rhoKIO.readOpt() = IOobject::MUST_READ; - - rhoKPtr.reset - ( - new volScalarField - ( - rhoKIO, - mesh - ) - ); - } - else - { - FatalErrorInFunction - << "Valid type entries are uniform or field for K" - << abort(FatalError); - } - - volScalarField& rhoK = rhoKPtr(); - - autoPtr alphaPtr; - - IOobject alphaIO - ( - "alpha", - runTime.timeName(0), - mesh, - IOobject::NO_READ, - IOobject::NO_WRITE - ); - - - const dictionary& alphaDict(thermalProperties.subDict("alpha")); - word alphaType(alphaDict.lookup("type")); - - if (alphaType == "uniform") - { - scalar alphaValue(readScalar(alphaDict.lookup("value"))); - alphaPtr.reset - ( - new volScalarField - ( - alphaIO, - mesh, - dimensionedScalar - ( - inv(dimTemperature), - alphaValue - ) - ) - ); - } - else if (alphaType == "field") - { - alphaIO.readOpt() = IOobject::MUST_READ; - - alphaPtr.reset - ( - new volScalarField - ( - alphaIO, - mesh - ) - ); - } - else - { - FatalErrorInFunction - << "Valid type entries are uniform or field for alpha" - << abort(FatalError); - } - - volScalarField& alpha = alphaPtr(); - - Info<< "Normalising k : k/rho\n" << endl; - volScalarField k(rhoK/rho); - - Info<< "Calculating thermal coefficients\n" << endl; - - threeKalpha = threeK*alpha; - DT = k/C; -} diff --git a/applications/solvers/stressAnalysis/solidDisplacementFoam/readThermophysicalProperties.H b/applications/solvers/stressAnalysis/solidDisplacementFoam/readThermophysicalProperties.H new file mode 100644 index 0000000000..46e80d955c --- /dev/null +++ b/applications/solvers/stressAnalysis/solidDisplacementFoam/readThermophysicalProperties.H @@ -0,0 +1,29 @@ +Info<< "Reading thermophysical properties\n" << endl; + +solidDisplacementThermo thermo(mesh); + +const volScalarField& E(thermo.E()); +const volScalarField& nu(thermo.nu()); + +const volScalarField Cp(thermo.Cp()); +const volScalarField kappa(thermo.kappa()); + +Info<< "Calculating Lame's coefficients\n" << endl; + +const volScalarField mu(E/(2*(1 + nu))); + +const volScalarField lambda +( + thermo.planeStress() + ? nu*E/((1 + nu)*(1 - nu)) + : nu*E/((1 + nu)*(1 - 2*nu)) +); + +const volScalarField threeK +( + thermo.planeStress() + ? E/(1 - nu) + : E/(1 - 2*nu) +); + +const volScalarField threeKalpha("threeKalpha", threeK*thermo.alphav()); diff --git a/applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementFoam.C b/applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementFoam.C index ae37b99386..31df2258f1 100644 --- a/applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementFoam.C +++ b/applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2011-2018 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2019 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -36,8 +36,8 @@ Description \*---------------------------------------------------------------------------*/ #include "fvCFD.H" +#include "solidDisplacementThermo.H" #include "fvOptions.H" -#include "Switch.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -50,6 +50,7 @@ int main(int argc, char *argv[]) #include "createMesh.H" #include "createControls.H" #include "createFields.H" + #include "createFieldRefs.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -66,12 +67,14 @@ int main(int argc, char *argv[]) do { - if (thermalStress) + if (thermo.thermalStress()) { volScalarField& T = Tptr(); fvScalarMatrix TEqn ( - fvm::ddt(T) == fvm::laplacian(DT, T) + fvOptions(T) + fvm::ddt(rho, Cp, T) + == fvm::laplacian(kappa, T) + + fvOptions(rho*Cp, T) ); fvOptions.constrain(TEqn); @@ -84,14 +87,14 @@ int main(int argc, char *argv[]) { fvVectorMatrix DEqn ( - fvm::d2dt2(D) + fvm::d2dt2(rho, D) == fvm::laplacian(2*mu + lambda, D, "laplacian(DD,D)") + divSigmaExp - + fvOptions.d2dt2(D) + + rho*fvOptions.d2dt2(D) ); - if (thermalStress) + if (thermo.thermalStress()) { const volScalarField& T = Tptr(); DEqn += fvc::grad(threeKalpha*T); diff --git a/applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementThermo/Make/files b/applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementThermo/Make/files new file mode 100644 index 0000000000..fab0590bb7 --- /dev/null +++ b/applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementThermo/Make/files @@ -0,0 +1,3 @@ +solidDisplacementThermo.C + +LIB = $(FOAM_LIBBIN)/libsolidDisplacementThermo diff --git a/applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementThermo/Make/options b/applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementThermo/Make/options new file mode 100644 index 0000000000..9149b94244 --- /dev/null +++ b/applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementThermo/Make/options @@ -0,0 +1,8 @@ +EXE_INC = \ + -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/solidThermo/lnInclude \ + -I$(LIB_SRC)/finiteVolume/lnInclude + +EXE_LIBS = \ + -lfiniteVolume \ + -lsolidThermo diff --git a/applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementThermo/solidDisplacementThermo.C b/applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementThermo/solidDisplacementThermo.C new file mode 100644 index 0000000000..1890a80646 --- /dev/null +++ b/applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementThermo/solidDisplacementThermo.C @@ -0,0 +1,515 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | Website: https://openfoam.org + \\ / A nd | Copyright (C) 2019 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 "solidDisplacementThermo.H" +#include "fvMesh.H" + +/* * * * * * * * * * * * * * * private static data * * * * * * * * * * * * * */ + +namespace Foam +{ + defineTypeNameAndDebug(solidDisplacementThermo, 0); +} + + +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(), + readScalar(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 +( + const fvMesh& mesh, + const word& phaseName +) +: + solidThermo(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_); +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +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_; +} + + +const Foam::scalarField& Foam::solidDisplacementThermo::E +( + const label patchi +) const +{ + return E_.boundaryField()[patchi]; +} + + +const Foam::volScalarField& Foam::solidDisplacementThermo::nu() const +{ + return nu_; +} + + +const Foam::scalarField& Foam::solidDisplacementThermo::nu +( + const label patchi +) const +{ + return nu_.boundaryField()[patchi]; +} + + +const Foam::volScalarField& Foam::solidDisplacementThermo::alphav() const +{ + return alphav_; +} + + +const Foam::scalarField& Foam::solidDisplacementThermo::alphav +( + const label patchi +) const +{ + return alphav_.boundaryField()[patchi]; +} + + +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::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 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); +} + + +Foam::tmp Foam::solidDisplacementThermo::Cp() 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 +{ + return Cp_; +} + + +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]; +} + + +Foam::tmp Foam::solidDisplacementThermo::CpByCpv() const +{ + NotImplemented; + return tmp(nullptr); +} + + +Foam::tmp Foam::solidDisplacementThermo::CpByCpv +( + const scalarField& T, + const label patchi +) const +{ + NotImplemented; + return tmp(nullptr); +} + + + +Foam::tmp Foam::solidDisplacementThermo::kappa() const +{ + return kappa_; +} + + +Foam::tmp Foam::solidDisplacementThermo::kappa +( + const label patchi +) const +{ + return kappa_.boundaryField()[patchi]; +} + + +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); +} + + +void Foam::solidDisplacementThermo::correct() +{} + + +bool Foam::solidDisplacementThermo::read() +{ + return regIOobject::read(); +} + + +// ************************************************************************* // diff --git a/applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementThermo/solidDisplacementThermo.H b/applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementThermo/solidDisplacementThermo.H new file mode 100644 index 0000000000..7deb5979da --- /dev/null +++ b/applications/solvers/stressAnalysis/solidDisplacementFoam/solidDisplacementThermo/solidDisplacementThermo.H @@ -0,0 +1,358 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | Website: https://openfoam.org + \\ / A nd | Copyright (C) 2019 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::solidDisplacementThermo + +Description + Fundamental solid thermodynamic properties + +SourceFiles + solidDisplacementThermo.C + +\*---------------------------------------------------------------------------*/ + +#ifndef solidDisplacementThermo_H +#define solidDisplacementThermo_H + +#include "solidThermo.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class solidDisplacementThermo Declaration +\*---------------------------------------------------------------------------*/ + +class solidDisplacementThermo +: + public solidThermo +{ + // Private data + + //- Switch to enable plane stress + Switch planeStress_; + + //- Switch to enable thermal stress + Switch thermalStress_; + + //- Heat capacity at constant pressure [J/kg/K] + volScalarField Cp_; + + //- Thermal diffusivity for temperature [W/m/K] + volScalarField kappa_; + + //- Youngs modulus [Pa] + volScalarField E_; + + //- Poisson's ratio [] + volScalarField nu_; + + //- Volumetric thermal expansion coefficient [1/T] + volScalarField alphav_; + + + // Private member functions + + void readProperty(volScalarField& prop) const; + + +public: + + //- Runtime type information + TypeName("solidDisplacementThermo"); + + + // Constructors + + //- Construct from mesh and phase name + solidDisplacementThermo + ( + const fvMesh&, + const word& phaseName = word::null + ); + + + //- Destructor + virtual ~solidDisplacementThermo(); + + + // 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 + { + return planeStress_; + } + + //- Returns true to enable thermal stress + bool thermalStress() const + { + return thermalStress_; + } + + + // 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; + + //- Youngs modulus for a patch [Pa] + virtual const scalarField& E(const label patchi) const; + + //- Poisson's ratio [] + virtual const volScalarField& nu() const; + + //- Poisson's ratio for a patch[] + virtual const scalarField& nu(const label patchi) const; + + //- Volumetric thermal expansion coefficient [1/T] + virtual const volScalarField& alphav() const; + + //- 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; + + + // 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; + + //- 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; + + //- Chemical enthalpy [J/kg] + virtual tmp hc() 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 [J/kg/K] + virtual tmp Cp() 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 [J/kg/K] + virtual tmp Cv() 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; + + //- Heat capacity ratio [] + virtual tmp CpByCpv() const; + + //- Heat capacity ratio for patch [] + virtual tmp CpByCpv + ( + const scalarField& T, + const label patchi + ) const; + + + // Fields derived from transport state variables + + //- Thermal diffusivity for temperature of mixture [W/m/K] + virtual tmp kappa() const; + + //- Thermal diffusivity for temperature of mixture for patch [W/m/K] + virtual tmp kappa(const label patchi) const; + + //- 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 diffusivity for temperature + // 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 diffusivity for temperature + // 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; + + + //- Update properties + virtual void correct(); + + + // I-O + + //- Read thermophysicalProperties dictionary + virtual bool read(); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/applications/solvers/stressAnalysis/solidEquilibriumDisplacementFoam/Make/files b/applications/solvers/stressAnalysis/solidDisplacementFoam/solidEquilibriumDisplacementFoam/Make/files similarity index 100% rename from applications/solvers/stressAnalysis/solidEquilibriumDisplacementFoam/Make/files rename to applications/solvers/stressAnalysis/solidDisplacementFoam/solidEquilibriumDisplacementFoam/Make/files diff --git a/applications/solvers/stressAnalysis/solidDisplacementFoam/solidEquilibriumDisplacementFoam/Make/options b/applications/solvers/stressAnalysis/solidDisplacementFoam/solidEquilibriumDisplacementFoam/Make/options new file mode 100644 index 0000000000..76059b4b75 --- /dev/null +++ b/applications/solvers/stressAnalysis/solidDisplacementFoam/solidEquilibriumDisplacementFoam/Make/options @@ -0,0 +1,15 @@ +EXE_INC = \ + -I. \ + -I.. \ + -I../solidDisplacementThermo \ + -ItractionDisplacementCorrection \ + -I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \ + -I$(LIB_SRC)/thermophysicalModels/solidThermo/lnInclude \ + -I$(LIB_SRC)/finiteVolume/lnInclude \ + -I$(LIB_SRC)/meshTools/lnInclude + +EXE_LIBS = \ + -lfiniteVolume \ + -lsolidThermo \ + -lsolidDisplacementThermo \ + -lmeshTools diff --git a/applications/solvers/stressAnalysis/solidEquilibriumDisplacementFoam/calculateStress.H b/applications/solvers/stressAnalysis/solidDisplacementFoam/solidEquilibriumDisplacementFoam/calculateStress.H similarity index 100% rename from applications/solvers/stressAnalysis/solidEquilibriumDisplacementFoam/calculateStress.H rename to applications/solvers/stressAnalysis/solidDisplacementFoam/solidEquilibriumDisplacementFoam/calculateStress.H diff --git a/applications/solvers/stressAnalysis/solidEquilibriumDisplacementFoam/createControls.H b/applications/solvers/stressAnalysis/solidDisplacementFoam/solidEquilibriumDisplacementFoam/createControls.H similarity index 100% rename from applications/solvers/stressAnalysis/solidEquilibriumDisplacementFoam/createControls.H rename to applications/solvers/stressAnalysis/solidDisplacementFoam/solidEquilibriumDisplacementFoam/createControls.H diff --git a/applications/solvers/stressAnalysis/solidEquilibriumDisplacementFoam/createFields.H b/applications/solvers/stressAnalysis/solidDisplacementFoam/solidEquilibriumDisplacementFoam/createFields.H similarity index 95% rename from applications/solvers/stressAnalysis/solidEquilibriumDisplacementFoam/createFields.H rename to applications/solvers/stressAnalysis/solidDisplacementFoam/solidEquilibriumDisplacementFoam/createFields.H index 2eebc995fe..01217b7bdf 100644 --- a/applications/solvers/stressAnalysis/solidEquilibriumDisplacementFoam/createFields.H +++ b/applications/solvers/stressAnalysis/solidDisplacementFoam/solidEquilibriumDisplacementFoam/createFields.H @@ -1,4 +1,4 @@ -#include "readMechanicalProperties.H" +#include "readThermophysicalProperties.H" Info<< "Reading displacement field D\n" << endl; volVectorField D diff --git a/applications/solvers/stressAnalysis/solidEquilibriumDisplacementFoam/kineticEnergyLimiter.H b/applications/solvers/stressAnalysis/solidDisplacementFoam/solidEquilibriumDisplacementFoam/kineticEnergyLimiter.H similarity index 100% rename from applications/solvers/stressAnalysis/solidEquilibriumDisplacementFoam/kineticEnergyLimiter.H rename to applications/solvers/stressAnalysis/solidDisplacementFoam/solidEquilibriumDisplacementFoam/kineticEnergyLimiter.H diff --git a/applications/solvers/stressAnalysis/solidEquilibriumDisplacementFoam/readSteadyStressFoamControls.H b/applications/solvers/stressAnalysis/solidDisplacementFoam/solidEquilibriumDisplacementFoam/readSteadyStressFoamControls.H similarity index 100% rename from applications/solvers/stressAnalysis/solidEquilibriumDisplacementFoam/readSteadyStressFoamControls.H rename to applications/solvers/stressAnalysis/solidDisplacementFoam/solidEquilibriumDisplacementFoam/readSteadyStressFoamControls.H diff --git a/applications/solvers/stressAnalysis/solidEquilibriumDisplacementFoam/solidEquilibriumDisplacementFoam.C b/applications/solvers/stressAnalysis/solidDisplacementFoam/solidEquilibriumDisplacementFoam/solidEquilibriumDisplacementFoam.C similarity index 95% rename from applications/solvers/stressAnalysis/solidEquilibriumDisplacementFoam/solidEquilibriumDisplacementFoam.C rename to applications/solvers/stressAnalysis/solidDisplacementFoam/solidEquilibriumDisplacementFoam/solidEquilibriumDisplacementFoam.C index 37f9273067..19587106d0 100644 --- a/applications/solvers/stressAnalysis/solidEquilibriumDisplacementFoam/solidEquilibriumDisplacementFoam.C +++ b/applications/solvers/stressAnalysis/solidDisplacementFoam/solidEquilibriumDisplacementFoam/solidEquilibriumDisplacementFoam.C @@ -2,7 +2,7 @@ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org - \\ / A nd | Copyright (C) 2011-2018 OpenFOAM Foundation + \\ / A nd | Copyright (C) 2011-2019 OpenFOAM Foundation \\/ M anipulation | ------------------------------------------------------------------------------- License @@ -36,7 +36,7 @@ Description \*---------------------------------------------------------------------------*/ #include "fvCFD.H" -#include "Switch.H" +#include "solidDisplacementThermo.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -50,6 +50,7 @@ int main(int argc, char *argv[]) #include "createMesh.H" #include "createControls.H" #include "createFields.H" + #include "createFieldRefs.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // diff --git a/applications/solvers/stressAnalysis/solidEquilibriumDisplacementFoam/tractionDisplacementCorrection/tractionDisplacementCorrectionFvPatchVectorField.C b/applications/solvers/stressAnalysis/solidDisplacementFoam/solidEquilibriumDisplacementFoam/tractionDisplacementCorrection/tractionDisplacementCorrectionFvPatchVectorField.C similarity index 86% rename from applications/solvers/stressAnalysis/solidEquilibriumDisplacementFoam/tractionDisplacementCorrection/tractionDisplacementCorrectionFvPatchVectorField.C rename to applications/solvers/stressAnalysis/solidDisplacementFoam/solidEquilibriumDisplacementFoam/tractionDisplacementCorrection/tractionDisplacementCorrectionFvPatchVectorField.C index 0c524bea64..db8132e683 100644 --- a/applications/solvers/stressAnalysis/solidEquilibriumDisplacementFoam/tractionDisplacementCorrection/tractionDisplacementCorrectionFvPatchVectorField.C +++ b/applications/solvers/stressAnalysis/solidDisplacementFoam/solidEquilibriumDisplacementFoam/tractionDisplacementCorrection/tractionDisplacementCorrectionFvPatchVectorField.C @@ -24,8 +24,8 @@ License \*---------------------------------------------------------------------------*/ #include "tractionDisplacementCorrectionFvPatchVectorField.H" +#include "solidDisplacementThermo.H" #include "addToRunTimeSelectionTable.H" -#include "volFields.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -145,32 +145,26 @@ void tractionDisplacementCorrectionFvPatchVectorField::updateCoeffs() return; } - const dictionary& mechanicalProperties = db().lookupObject + const label patchi = patch().index(); + + const solidDisplacementThermo& thermo = + db().lookupObject + ( + solidDisplacementThermo::dictName + ); + + const scalarField& E = thermo.E(patchi); + const scalarField& nu = thermo.nu(patchi); + + const scalarField mu(E/(2.0*(1.0 + nu))); + const scalarField lambda ( - "mechanicalProperties" + thermo.planeStress() + ? nu*E/((1 + nu)*(1 - nu)) + : nu*E/((1 + nu)*(1 - 2*nu)) ); - const fvPatchField& rho = - patch().lookupPatchField("rho"); - - const fvPatchField& rhoE = - patch().lookupPatchField("E"); - - const fvPatchField& nu = - patch().lookupPatchField("nu"); - - scalarField E(rhoE/rho); - scalarField mu(E/(2.0*(1.0 + nu))); - scalarField lambda(nu*E/((1.0 + nu)*(1.0 - 2.0*nu))); - - Switch planeStress(mechanicalProperties.lookup("planeStress")); - - if (planeStress) - { - lambda = nu*E/((1.0 + nu)*(1.0 - nu)); - } - - vectorField n(patch().nf()); + const vectorField n(patch().nf()); const fvPatchField& sigmaD = patch().lookupPatchField("sigmaD"); @@ -180,7 +174,7 @@ void tractionDisplacementCorrectionFvPatchVectorField::updateCoeffs() gradient() = ( - (traction_ + pressure_*n)/rho - (n & (sigmaD + sigmaExp)) + (traction_ + pressure_*n) - (n & (sigmaD + sigmaExp)) )/(2.0*mu + lambda); fixedGradientFvPatchVectorField::updateCoeffs(); diff --git a/applications/solvers/stressAnalysis/solidEquilibriumDisplacementFoam/tractionDisplacementCorrection/tractionDisplacementCorrectionFvPatchVectorField.H b/applications/solvers/stressAnalysis/solidDisplacementFoam/solidEquilibriumDisplacementFoam/tractionDisplacementCorrection/tractionDisplacementCorrectionFvPatchVectorField.H similarity index 100% rename from applications/solvers/stressAnalysis/solidEquilibriumDisplacementFoam/tractionDisplacementCorrection/tractionDisplacementCorrectionFvPatchVectorField.H rename to applications/solvers/stressAnalysis/solidDisplacementFoam/solidEquilibriumDisplacementFoam/tractionDisplacementCorrection/tractionDisplacementCorrectionFvPatchVectorField.H diff --git a/applications/solvers/stressAnalysis/solidEquilibriumDisplacementFoam/Make/options b/applications/solvers/stressAnalysis/solidEquilibriumDisplacementFoam/Make/options deleted file mode 100644 index 24377db11c..0000000000 --- a/applications/solvers/stressAnalysis/solidEquilibriumDisplacementFoam/Make/options +++ /dev/null @@ -1,10 +0,0 @@ -EXE_INC = \ - -I. \ - -I../solidDisplacementFoam \ - -ItractionDisplacementCorrection \ - -I$(LIB_SRC)/finiteVolume/lnInclude \ - -I$(LIB_SRC)/meshTools/lnInclude - -EXE_LIBS = \ - -lfiniteVolume \ - -lmeshTools diff --git a/src/radiationModels/absorptionEmissionModels/greyMeanSolid/greyMeanSolid.C b/src/radiationModels/absorptionEmissionModels/greyMeanSolid/greyMeanSolid.C index 71e98303c0..f9adb08829 100644 --- a/src/radiationModels/absorptionEmissionModels/greyMeanSolid/greyMeanSolid.C +++ b/src/radiationModels/absorptionEmissionModels/greyMeanSolid/greyMeanSolid.C @@ -96,7 +96,7 @@ Foam::radiationModels::absorptionEmissionModels::greyMeanSolid::greyMeanSolid : absorptionEmissionModel(dict, mesh), coeffsDict_((dict.optionalSubDict(typeName + "Coeffs"))), - thermo_(mesh.lookupObject(basicThermo::dictName)), + thermo_(mesh.lookupObject(basicThermo::dictName)), speciesNames_(0), mixture_(dynamic_cast(thermo_)), solidData_(mixture_.Y().size()) diff --git a/src/radiationModels/absorptionEmissionModels/greyMeanSolid/greyMeanSolid.H b/src/radiationModels/absorptionEmissionModels/greyMeanSolid/greyMeanSolid.H index 4cd32c2ca5..159a5ac42b 100644 --- a/src/radiationModels/absorptionEmissionModels/greyMeanSolid/greyMeanSolid.H +++ b/src/radiationModels/absorptionEmissionModels/greyMeanSolid/greyMeanSolid.H @@ -49,7 +49,7 @@ SourceFiles #define greyMeanSolid_H #include "absorptionEmissionModel.H" -#include "solidThermo.H" +#include "solidPressureThermo.H" #include "basicSpecieMixture.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -85,7 +85,7 @@ private: dictionary coeffsDict_; //- SLG thermo package - const solidThermo& thermo_; + const solidPressureThermo& thermo_; //- Hash table of species names HashTable