From 5c296cbc8ec8e44422cee8001ba77c63e6ea1d0d Mon Sep 17 00:00:00 2001 From: Henry Weller Date: Mon, 28 Nov 2022 17:52:09 +0000 Subject: [PATCH] constAnisoSolidThermo: New solid thermophysical properties class support anisotropic thermal conductivity Description Uniform or non-uniform constant anisotropic solid thermodynamic properties Each physical property can specified as either \c uniform in which case the value entry is read, \c zonal in which case the value entry and zone list are read or \c file in which case the field file in read from the constant directory. The thermal conductivity \c Kappa is anisotropic and read as a diagonal tensor or diagonal tensor field provided in the form of a vector or vector field. Usage Example of uniform constant solid properties specification: \verbatim thermoType constAnisoSolidThermo; rho { type uniform; value 8940; } Cv { type uniform; value 385; } Kappa { type uniform; value (380 100 100); } \endverbatim Example of zonal constant solid properties specification where Kappa is different in different zones: \verbatim thermoType constSolidThermo; rho { type uniform; value 8940; } Cv { type uniform; value 385; } Kappa { type zonal; value (380 380 380); zones { heater (560 560 560); insulation (10 100 100); } } \endverbatim Example of non-uniform constant solid properties specification: \verbatim thermoType constAnisoSolidThermo; rho { type file; } Cv { type file; } Kappa { type file; } \endverbatim where each of the field files are read from the constant directory. --- .../solid/anisotropic/anisotropic.C | 12 +- .../solidThermo/Make/files | 1 + .../constAnisoSolidThermo.C | 75 +++++++ .../constAnisoSolidThermo.H | 188 ++++++++++++++++++ 4 files changed, 271 insertions(+), 5 deletions(-) create mode 100644 src/thermophysicalModels/solidThermo/constAnisoSolidThermo/constAnisoSolidThermo.C create mode 100644 src/thermophysicalModels/solidThermo/constAnisoSolidThermo/constAnisoSolidThermo.H diff --git a/src/ThermophysicalTransportModels/solid/anisotropic/anisotropic.C b/src/ThermophysicalTransportModels/solid/anisotropic/anisotropic.C index c1bb47287a..a0c72c4661 100644 --- a/src/ThermophysicalTransportModels/solid/anisotropic/anisotropic.C +++ b/src/ThermophysicalTransportModels/solid/anisotropic/anisotropic.C @@ -131,15 +131,15 @@ Foam::solidThermophysicalTransportModels::anisotropic::anisotropic { if (iter().isDict()) { - const word& name = iter().keyword(); + const word& zoneName = iter().keyword(); const dictionary& dict = iter().dict(); - Info<< " " << name << endl; + Info<< " " << zoneName << endl; zoneCoordinateSystems_.insert ( - name, - coordinateSystem::New(name, dict).ptr() + zoneName, + coordinateSystem::New(zoneName, dict).ptr() ); } } @@ -266,11 +266,13 @@ Foam::solidThermophysicalTransportModels::anisotropic::Kappa() const const labelList& zoneCells = mesh.cellZones()[iter().name()]; const coordinateSystem& cs = iter(); + symmTensorField& KappaIf = Kappa; + forAll(zoneCells, i) { const label celli = zoneCells[i]; - Kappa[celli] = + KappaIf[celli] = cs.R().transformDiagTensor ( mesh.C()[celli], diff --git a/src/thermophysicalModels/solidThermo/Make/files b/src/thermophysicalModels/solidThermo/Make/files index 858b87cf29..79e2deea97 100644 --- a/src/thermophysicalModels/solidThermo/Make/files +++ b/src/thermophysicalModels/solidThermo/Make/files @@ -1,5 +1,6 @@ solidThermo/solidThermo.C solidThermo/solidThermos.C constSolidThermo/constSolidThermo.C +constAnisoSolidThermo/constAnisoSolidThermo.C LIB = $(FOAM_LIBBIN)/libsolidThermo diff --git a/src/thermophysicalModels/solidThermo/constAnisoSolidThermo/constAnisoSolidThermo.C b/src/thermophysicalModels/solidThermo/constAnisoSolidThermo/constAnisoSolidThermo.C new file mode 100644 index 0000000000..fd1d364a74 --- /dev/null +++ b/src/thermophysicalModels/solidThermo/constAnisoSolidThermo/constAnisoSolidThermo.C @@ -0,0 +1,75 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | Website: https://openfoam.org + \\ / A nd | Copyright (C) 2022 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 "constAnisoSolidThermo.H" +#include "addToRunTimeSelectionTable.H" + +/* * * * * * * * * * * * * * * Private Static Data * * * * * * * * * * * * * */ + +namespace Foam +{ + defineTypeNameAndDebug(constAnisoSolidThermo, 0); + addToRunTimeSelectionTable(basicThermo, constAnisoSolidThermo, fvMesh); + addToRunTimeSelectionTable(solidThermo, constAnisoSolidThermo, fvMesh); +} + + +// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // + +Foam::constAnisoSolidThermo::constAnisoSolidThermo +( + const fvMesh& mesh, + const word& phaseName +) +: + constSolidThermo(mesh, false, phaseName), + Kappa_(readProperty("Kappa", kappa_.dimensions())) +{ + kappa_ = mag(Kappa_); +} + + +// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * // + +Foam::constAnisoSolidThermo::~constAnisoSolidThermo() +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +const Foam::volScalarField& Foam::constAnisoSolidThermo::kappa() const +{ + NotImplemented; + return kappa_; +} + + +const Foam::volVectorField& Foam::constAnisoSolidThermo::Kappa() const +{ + return Kappa_; +} + + +// ************************************************************************* // diff --git a/src/thermophysicalModels/solidThermo/constAnisoSolidThermo/constAnisoSolidThermo.H b/src/thermophysicalModels/solidThermo/constAnisoSolidThermo/constAnisoSolidThermo.H new file mode 100644 index 0000000000..4ee025e0e8 --- /dev/null +++ b/src/thermophysicalModels/solidThermo/constAnisoSolidThermo/constAnisoSolidThermo.H @@ -0,0 +1,188 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / F ield | OpenFOAM: The Open Source CFD Toolbox + \\ / O peration | Website: https://openfoam.org + \\ / A nd | Copyright (C) 2022 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::constAnisoSolidThermo + +Description + Uniform or non-uniform constant anisotropic solid thermodynamic properties + + Each physical property can specified as either \c uniform in which case the + value entry is read, \c zonal in which case the value entry and zone list + are read or \c file in which case the field file in read from the constant + directory. The thermal conductivity \c Kappa is anisotropic and read as a + diagonal tensor or diagonal tensor field provided in the form of a vector + or vector field. + +Usage + Example of uniform constant solid properties specification: + \verbatim + thermoType constAnisoSolidThermo; + + rho + { + type uniform; + value 8940; + } + + Cv + { + type uniform; + value 385; + } + + Kappa + { + type uniform; + value (380 100 100); + } + \endverbatim + + Example of zonal constant solid properties specification where Kappa is + different in different zones: + \verbatim + thermoType constSolidThermo; + + rho + { + type uniform; + value 8940; + } + + Cv + { + type uniform; + value 385; + } + + Kappa + { + type zonal; + value (380 380 380); + + zones + { + heater (560 560 560); + insulation (10 100 100); + } + } + \endverbatim + + Example of non-uniform constant solid properties specification: + \verbatim + thermoType constAnisoSolidThermo; + + rho + { + type file; + } + + Cv + { + type file; + } + + Kappa + { + type file; + } + \endverbatim + where each of the field files are read from the constant directory. + +SourceFiles + constAnisoSolidThermo.C + +\*---------------------------------------------------------------------------*/ + +#ifndef constAnisoSolidThermo_H +#define constAnisoSolidThermo_H + +#include "constSolidThermo.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class constAnisoSolidThermo Declaration +\*---------------------------------------------------------------------------*/ + +class constAnisoSolidThermo +: + public constSolidThermo +{ + // Private data + + //- Anisotropic thermal conductivity [W/m/K] + volVectorField Kappa_; + + +public: + + //- Runtime type information + TypeName("constAnisoSolidThermo"); + + + // Constructors + + //- Construct from mesh and phase name + constAnisoSolidThermo + ( + const fvMesh&, + const word& phaseName = word::null + ); + + + //- Destructor + virtual ~constAnisoSolidThermo(); + + + // Member Functions + + // Access to transport state variables + + //- Return false as the thermal conductivity is anisotropic + virtual bool isotropic() const + { + return false; + } + + //- Isotropic thermal conductivity [W/m/K] + // Not implemented + virtual const volScalarField& kappa() const; + + //- Anisotropic thermal conductivity [W/m/K] + virtual const volVectorField& Kappa() const; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* //