solidThermophysicalTransportModel: new thermophysical transport model for solids
to handle isotropic and anisotropic is a consistent, general and extensible
manner, replacing the horrible hacks which were in solidThermo.
This is entirely consistent with thermophysicalTransportModel for fluids and
provides the q() and divq() for the solid energy conservation equations. The
transport model and properties are specified in the optional
thermophysicalTransport dictionary, the default model being isotropic if this
dictionary file is not present, thus providing complete backward-compatibility
for the common isotropic cases.
Anisotropic thermal conductivity is now handled in a much more general manner by
the anisotropic model:
Class
Foam::solidThermophysicalTransportModels::anisotropic
Description
Solid thermophysical transport model for anisotropic thermal conductivity
The anisotropic thermal conductivity field is evaluated from the solid
material anisotropic kappa specified in the physicalProperties dictionary
transformed into the global coordinate system using default
coordinate system and optionally additional coordinate systems specified
per-zone in the thermophysicalProperties dictionary.
Usage
Example of the anisotropic thermal conductivity specification in
thermophysicalProperties with two zone-based coordinate systems in
addition to the default:
\verbatim
model anisotropic;
// Default coordinate system
coordinateSystem
{
type cartesian;
origin (0 0 0);
coordinateRotation
{
type cylindrical;
e3 (1 0 0);
}
}
// Optional zone coordinate systems
zones
{
coil1
{
type cartesian;
origin (0.1 0.2 0.7);
coordinateRotation
{
type cylindrical;
e3 (0.5 0.866 0);
}
}
coil2
{
type cartesian;
origin (0.4 0.5 1);
coordinateRotation
{
type cylindrical;
e3 (0.866 0.5 0);
}
}
}
\endverbatim
This development required substantial rationalisation of solidThermo,
coordinateSystems and updates to the solid solver module, solidDisplacementFoam,
the wallHeatFlux functionObject, thermalBaffle and all coupled thermal boundary
conditions.
This commit is contained in:
@ -17,7 +17,7 @@ EXE_LIBS = \
|
||||
-lmomentumTransportModels \
|
||||
-lcompressibleMomentumTransportModels \
|
||||
-lthermophysicalTransportModels \
|
||||
-lfluidThermophysicalModels \
|
||||
-lcoupledThermophysicalTransportModels \
|
||||
-lmulticomponentThermophysicalModels \
|
||||
-lspecie \
|
||||
-llaminarFlameSpeedModels \
|
||||
|
||||
@ -41,7 +41,7 @@ EXE_LIBS = \
|
||||
-lspecie \
|
||||
-lmomentumTransportModels \
|
||||
-lcompressibleMomentumTransportModels \
|
||||
-lthermophysicalTransportModels \
|
||||
-lcoupledThermophysicalTransportModels \
|
||||
-llaminarFlameSpeedModels \
|
||||
-lfiniteVolume \
|
||||
-lfvModels \
|
||||
|
||||
@ -18,5 +18,5 @@ EXE_LIBS = \
|
||||
-lrhoCentralFoam \
|
||||
-lmomentumTransportModels \
|
||||
-lcompressibleMomentumTransportModels \
|
||||
-lthermophysicalTransportModels \
|
||||
-lcoupledThermophysicalTransportModels \
|
||||
-lmeshTools
|
||||
|
||||
@ -16,7 +16,7 @@ EXE_LIBS = \
|
||||
-lspecie \
|
||||
-lmomentumTransportModels \
|
||||
-lcompressibleMomentumTransportModels \
|
||||
-lthermophysicalTransportModels \
|
||||
-lcoupledThermophysicalTransportModels \
|
||||
-lfiniteVolume \
|
||||
-lsampling \
|
||||
-lmeshTools \
|
||||
|
||||
@ -18,4 +18,4 @@ EXE_LIBS = \
|
||||
-lspecie \
|
||||
-lmomentumTransportModels \
|
||||
-lcompressibleMomentumTransportModels \
|
||||
-lthermophysicalTransportModels
|
||||
-lcoupledThermophysicalTransportModels
|
||||
|
||||
@ -17,7 +17,7 @@ LIB_LIBS = \
|
||||
-lfluidThermophysicalModels \
|
||||
-lmomentumTransportModels \
|
||||
-lcompressibleMomentumTransportModels \
|
||||
-lthermophysicalTransportModels \
|
||||
-lcoupledThermophysicalTransportModels \
|
||||
-lfiniteVolume \
|
||||
-lmeshTools \
|
||||
-lsampling \
|
||||
|
||||
@ -28,7 +28,7 @@ LIB_LIBS = \
|
||||
-lmulticomponentThermophysicalModels \
|
||||
-lmomentumTransportModels \
|
||||
-lcompressibleMomentumTransportModels \
|
||||
-lthermophysicalTransportModels \
|
||||
-lcoupledThermophysicalTransportModels \
|
||||
-lfluidMulticomponentThermophysicalTransportModels \
|
||||
-lfiniteVolume \
|
||||
-lfvModels \
|
||||
|
||||
@ -2,13 +2,14 @@ EXE_INC = \
|
||||
-I$(LIB_SRC)/physicalProperties/lnInclude \
|
||||
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
|
||||
-I$(LIB_SRC)/thermophysicalModels/solidThermo/lnInclude \
|
||||
-I$(LIB_SRC)/finiteVolume/cfdTools \
|
||||
-I$(LIB_SRC)/ThermophysicalTransportModels/solidThermophysicalTransportModels/lnInclude \
|
||||
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||
-I$(LIB_SRC)/meshTools/lnInclude \
|
||||
-I$(LIB_SRC)/sampling/lnInclude
|
||||
|
||||
LIB_LIBS = \
|
||||
-lsolidThermo \
|
||||
-lsolidThermophysicalTransportModels \
|
||||
-lspecie \
|
||||
-lfiniteVolume \
|
||||
-lmeshTools \
|
||||
|
||||
@ -76,9 +76,6 @@ void Foam::solvers::solid::correctDiNum()
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::solvers::solid::solid(fvMesh& mesh)
|
||||
@ -90,6 +87,8 @@ Foam::solvers::solid::solid(fvMesh& mesh)
|
||||
|
||||
T(thermo.T()),
|
||||
|
||||
thermophysicalTransport(solidThermophysicalTransportModel::New(thermo)),
|
||||
|
||||
DiNum(0)
|
||||
{
|
||||
// Read the controls
|
||||
@ -174,7 +173,7 @@ void Foam::solvers::solid::thermophysicalPredictor()
|
||||
fvScalarMatrix eEqn
|
||||
(
|
||||
fvm::ddt(rho, e)
|
||||
+ thermo.divq(e)
|
||||
+ thermophysicalTransport->divq(e)
|
||||
==
|
||||
fvModels().source(rho, e)
|
||||
);
|
||||
|
||||
@ -38,7 +38,7 @@ SourceFiles
|
||||
#define solid_H
|
||||
|
||||
#include "solver.H"
|
||||
#include "solidThermo.H"
|
||||
#include "solidThermophysicalTransportModel.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
@ -74,6 +74,12 @@ protected:
|
||||
volScalarField& T;
|
||||
|
||||
|
||||
// Thermophysical transport
|
||||
|
||||
//- Pointer to the solid thermophysical transport model
|
||||
autoPtr<solidThermophysicalTransportModel> thermophysicalTransport;
|
||||
|
||||
|
||||
// Time-step controls
|
||||
|
||||
scalar DiNum;
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2015-2021 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2015-2022 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -349,7 +349,7 @@ public:
|
||||
|
||||
// Transport
|
||||
|
||||
//- Effective thermal turbulent diffusivity for temperature
|
||||
//- Effective thermal turbulent conductivity
|
||||
// of mixture for patch [W/m/K]
|
||||
virtual tmp<scalarField> kappaEff(const label patchi) const = 0;
|
||||
|
||||
|
||||
@ -6,13 +6,15 @@ EXE_INC = \
|
||||
-I$(LIB_SRC)/physicalProperties/lnInclude \
|
||||
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
|
||||
-I$(LIB_SRC)/thermophysicalModels/solidThermo/lnInclude \
|
||||
-I$(LIB_SRC)/ThermophysicalTransportModels/solidThermophysicalTransportModels/lnInclude \
|
||||
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||
-I$(LIB_SRC)/meshTools/lnInclude
|
||||
|
||||
EXE_LIBS = \
|
||||
-lfiniteVolume \
|
||||
-lsolidThermo \
|
||||
-lsolidDisplacementThermo \
|
||||
-lsolidThermophysicalTransportModels \
|
||||
-lfiniteVolume \
|
||||
-lmeshTools \
|
||||
-lfvModels \
|
||||
-lfvConstraints \
|
||||
-lmeshTools
|
||||
-lfvConstraints
|
||||
|
||||
@ -2,6 +2,13 @@ Info<< "Reading thermophysical properties\n" << endl;
|
||||
|
||||
solidDisplacementThermo thermo(mesh);
|
||||
|
||||
autoPtr<solidThermophysicalTransportModel> thermophysicalTransport;
|
||||
|
||||
if (thermo.thermalStress())
|
||||
{
|
||||
thermophysicalTransport = solidThermophysicalTransportModel::New(thermo);
|
||||
}
|
||||
|
||||
const volScalarField& E(thermo.E());
|
||||
const volScalarField& nu(thermo.nu());
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2011-2021 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -37,6 +37,7 @@ Description
|
||||
|
||||
#include "fvCFD.H"
|
||||
#include "solidDisplacementThermo.H"
|
||||
#include "solidThermophysicalTransportModel.H"
|
||||
#include "fvModels.H"
|
||||
#include "fvConstraints.H"
|
||||
|
||||
@ -76,7 +77,7 @@ int main(int argc, char *argv[])
|
||||
fvScalarMatrix TEqn
|
||||
(
|
||||
fvm::ddt(rho, Cp, T)
|
||||
+ thermo.divq(T)
|
||||
+ thermophysicalTransport->divq(T)
|
||||
==
|
||||
fvModels.source(rho*Cp, T)
|
||||
);
|
||||
|
||||
@ -61,7 +61,7 @@ class solidDisplacementThermo
|
||||
//- Heat capacity at constant pressure [J/kg/K]
|
||||
volScalarField Cp_;
|
||||
|
||||
//- Thermal diffusivity for temperature [W/m/K]
|
||||
//- Thermal conductivity [W/m/K]
|
||||
volScalarField kappa_;
|
||||
|
||||
//- Youngs modulus [Pa]
|
||||
@ -176,7 +176,7 @@ public:
|
||||
|
||||
// Access to transport state variables
|
||||
|
||||
//- Thermal diffusivity for temperature of mixture [W/m/K]
|
||||
//- Thermal conductivity of mixture [W/m/K]
|
||||
virtual const volScalarField& kappa() const;
|
||||
|
||||
|
||||
@ -314,7 +314,7 @@ public:
|
||||
//- Thermal diffusivity for energy of mixture for patch [kg/m/s]
|
||||
virtual tmp<scalarField> alphahe(const label patchi) const;
|
||||
|
||||
//- Effective thermal turbulent diffusivity for temperature
|
||||
//- Effective thermal turbulent conductivity
|
||||
// of mixture [W/m/K]
|
||||
virtual tmp<volScalarField> kappaEff
|
||||
(
|
||||
@ -327,7 +327,7 @@ public:
|
||||
const volScalarField& alphat
|
||||
) const;
|
||||
|
||||
//- Effective thermal turbulent diffusivity for temperature
|
||||
//- Effective thermal turbulent conductivity
|
||||
// of mixture for patch [W/m/K]
|
||||
virtual tmp<scalarField> kappaEff
|
||||
(
|
||||
|
||||
@ -6,6 +6,7 @@ EXE_INC = \
|
||||
-I$(LIB_SRC)/physicalProperties/lnInclude \
|
||||
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
|
||||
-I$(LIB_SRC)/thermophysicalModels/solidThermo/lnInclude \
|
||||
-I$(LIB_SRC)/ThermophysicalTransportModels/solidThermophysicalTransportModels/lnInclude \
|
||||
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||
-I$(LIB_SRC)/meshTools/lnInclude
|
||||
|
||||
@ -13,4 +14,5 @@ EXE_LIBS = \
|
||||
-lfiniteVolume \
|
||||
-lsolidThermo \
|
||||
-lsolidDisplacementThermo \
|
||||
-lsolidThermophysicalTransportModels \
|
||||
-lmeshTools
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2011-2021 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -26,8 +26,7 @@ Application
|
||||
|
||||
Description
|
||||
Steady-state segregated finite-volume solver of linear-elastic,
|
||||
small-strain deformation of a solid body, with optional thermal
|
||||
diffusion and thermal stresses.
|
||||
small-strain deformation of a solid body.
|
||||
|
||||
Simple linear elasticity structural analysis code.
|
||||
Solves for the displacement vector field D, also generating the
|
||||
@ -37,6 +36,7 @@ Description
|
||||
|
||||
#include "fvCFD.H"
|
||||
#include "solidDisplacementThermo.H"
|
||||
#include "solidThermophysicalTransportModel.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
|
||||
@ -307,7 +307,7 @@ protected:
|
||||
//- Is the mesh moving
|
||||
bool moving_;
|
||||
|
||||
//- Is the mesh topology changing
|
||||
//- Has the mesh topology changed
|
||||
bool topoChanged_;
|
||||
|
||||
|
||||
@ -528,7 +528,7 @@ public:
|
||||
return moving_;
|
||||
}
|
||||
|
||||
//- Is mesh topology changing
|
||||
//- Has the mesh topology changed
|
||||
bool topoChanged() const
|
||||
{
|
||||
return topoChanged_;
|
||||
|
||||
@ -8,5 +8,7 @@ wmake $targetType
|
||||
wmake $targetType fluidMulticomponentThermo
|
||||
wmake $targetType phaseFluidThermo
|
||||
wmake $targetType phaseFluidMulticomponentThermo
|
||||
wmake $targetType solidThermophysicalTransportModels
|
||||
wmake $targetType coupledThermophysicalTransportModels
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
@ -1,9 +1,6 @@
|
||||
thermophysicalTransportModel/thermophysicalTransportModel.C
|
||||
|
||||
BCs = derivedFvPatchFields
|
||||
$(BCs)/externalTemperature/externalTemperatureFvPatchScalarField.C
|
||||
$(BCs)/temperatureCoupledBase/temperatureCoupledBase.C
|
||||
$(BCs)/coupledTemperature/coupledTemperatureFvPatchScalarField.C
|
||||
$(BCs)/thermalBaffle1D/thermalBaffle1DFvPatchScalarFields.C
|
||||
$(BCs)/totalFlowRateAdvectiveDiffusive/totalFlowRateAdvectiveDiffusiveFvPatchScalarField.C
|
||||
$(BCs)/externalCoupledTemperatureMixed/externalCoupledTemperatureMixedFvPatchScalarField.C
|
||||
|
||||
@ -0,0 +1,5 @@
|
||||
externalTemperature/externalTemperatureFvPatchScalarField.C
|
||||
patchKappa/patchKappa.C
|
||||
coupledTemperature/coupledTemperatureFvPatchScalarField.C
|
||||
|
||||
LIB = $(FOAM_LIBBIN)/libcoupledThermophysicalTransportModels
|
||||
@ -0,0 +1,19 @@
|
||||
EXE_INC = \
|
||||
-I$(LIB_SRC)/ThermophysicalTransportModels/lnInclude \
|
||||
-I$(LIB_SRC)/ThermophysicalTransportModels/solidThermophysicalTransportModels/lnInclude \
|
||||
-I$(LIB_SRC)/MomentumTransportModels/momentumTransportModels/lnInclude \
|
||||
-I$(LIB_SRC)/MomentumTransportModels/compressible/lnInclude \
|
||||
-I$(LIB_SRC)/physicalProperties/lnInclude \
|
||||
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
|
||||
-I$(LIB_SRC)/thermophysicalModels/solidThermo/lnInclude \
|
||||
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||
-I$(LIB_SRC)/meshTools/lnInclude \
|
||||
|
||||
LIB_LIBS = \
|
||||
-lfluidThermophysicalModels \
|
||||
-lsolidThermo \
|
||||
-lthermophysicalTransportModels \
|
||||
-lmomentumTransportModels \
|
||||
-lsolidThermophysicalTransportModels \
|
||||
-lfiniteVolume \
|
||||
-lmeshTools
|
||||
@ -24,10 +24,11 @@ License
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "coupledTemperatureFvPatchScalarField.H"
|
||||
#include "addToRunTimeSelectionTable.H"
|
||||
#include "fvPatchFieldMapper.H"
|
||||
#include "patchKappa.H"
|
||||
#include "volFields.H"
|
||||
#include "fvPatchFieldMapper.H"
|
||||
#include "mappedPatchBase.H"
|
||||
#include "addToRunTimeSelectionTable.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
@ -39,7 +40,6 @@ coupledTemperatureFvPatchScalarField
|
||||
)
|
||||
:
|
||||
mixedFvPatchScalarField(p, iF),
|
||||
temperatureCoupledBase(patch()),
|
||||
TnbrName_("undefined-Tnbr"),
|
||||
qrNbrName_("undefined-qrNbr"),
|
||||
qrName_("undefined-qr"),
|
||||
@ -63,7 +63,6 @@ coupledTemperatureFvPatchScalarField
|
||||
)
|
||||
:
|
||||
mixedFvPatchScalarField(p, iF),
|
||||
temperatureCoupledBase(patch(), dict),
|
||||
TnbrName_(dict.lookupOrDefault<word>("Tnbr", "T")),
|
||||
qrNbrName_(dict.lookupOrDefault<word>("qrNbr", "none")),
|
||||
qrName_(dict.lookupOrDefault<word>("qr", "none")),
|
||||
@ -147,7 +146,6 @@ coupledTemperatureFvPatchScalarField
|
||||
)
|
||||
:
|
||||
mixedFvPatchScalarField(psf, p, iF, mapper),
|
||||
temperatureCoupledBase(patch(), psf),
|
||||
TnbrName_(psf.TnbrName_),
|
||||
qrNbrName_(psf.qrNbrName_),
|
||||
qrName_(psf.qrName_),
|
||||
@ -166,7 +164,6 @@ coupledTemperatureFvPatchScalarField
|
||||
)
|
||||
:
|
||||
mixedFvPatchScalarField(psf, iF),
|
||||
temperatureCoupledBase(patch(), psf),
|
||||
TnbrName_(psf.TnbrName_),
|
||||
qrNbrName_(psf.qrNbrName_),
|
||||
qrName_(psf.qrName_),
|
||||
@ -225,12 +222,14 @@ void Foam::coupledTemperatureFvPatchScalarField::updateCoeffs()
|
||||
: mpp.distribute(coupledTemperatureNbr)
|
||||
);
|
||||
|
||||
const scalarField KDelta(kappa(*this)*patch().deltaCoeffs());
|
||||
const scalarField kappa(patchKappa(patch()).kappa());
|
||||
|
||||
const scalarField KDelta(kappa*patch().deltaCoeffs());
|
||||
|
||||
const scalarField KDeltaNbr
|
||||
(
|
||||
contactRes_ == 0
|
||||
? mpp.distribute(coupledTemperatureNbr.kappa(coupledTemperatureNbr)
|
||||
? mpp.distribute(patchKappa(patchNbr).kappa()
|
||||
*patchNbr.deltaCoeffs())
|
||||
: tmp<scalarField>(new scalarField(size(), contactRes_))
|
||||
);
|
||||
@ -272,13 +271,13 @@ void Foam::coupledTemperatureFvPatchScalarField::updateCoeffs()
|
||||
|
||||
this->valueFraction() = KDeltaNbr/(KDeltaNbr + KDelta);
|
||||
this->refValue() = TcNbr;
|
||||
this->refGrad() = (qs_ + qr + qrNbr)/kappa(*this);
|
||||
this->refGrad() = (qs_ + qr + qrNbr)/kappa;
|
||||
|
||||
mixedFvPatchScalarField::updateCoeffs();
|
||||
|
||||
if (debug)
|
||||
{
|
||||
scalar Q = gSum(kappa(*this)*patch().magSf()*snGrad());
|
||||
scalar Q = gSum(kappa*patch().magSf()*snGrad());
|
||||
|
||||
Info<< patch().boundaryMesh().mesh().name() << ':'
|
||||
<< patch().name() << ':'
|
||||
@ -310,8 +309,6 @@ void Foam::coupledTemperatureFvPatchScalarField::write
|
||||
writeEntry(os, "qr", qrName_);
|
||||
writeEntry(os, "thicknessLayers", thicknessLayers_);
|
||||
writeEntry(os, "kappaLayers", kappaLayers_);
|
||||
|
||||
temperatureCoupledBase::write(os);
|
||||
}
|
||||
|
||||
|
||||
@ -39,7 +39,7 @@ Description
|
||||
and qs is the optional source heat flux.
|
||||
|
||||
The thermal conductivity \c kappa can either be retrieved from various
|
||||
possible sources, as detailed in the class temperatureCoupledBase.
|
||||
possible sources, as detailed in the class patchKappa.
|
||||
|
||||
Usage
|
||||
\table
|
||||
@ -72,7 +72,7 @@ Usage
|
||||
should be specified, not both.
|
||||
|
||||
See also
|
||||
Foam::temperatureCoupledBase
|
||||
Foam::patchKappa
|
||||
|
||||
SourceFiles
|
||||
coupledTemperatureFvPatchScalarField.C
|
||||
@ -83,7 +83,6 @@ SourceFiles
|
||||
#define coupledTemperatureFvPatchScalarField_H
|
||||
|
||||
#include "mixedFvPatchFields.H"
|
||||
#include "temperatureCoupledBase.H"
|
||||
#include "scalarField.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
@ -97,8 +96,7 @@ namespace Foam
|
||||
|
||||
class coupledTemperatureFvPatchScalarField
|
||||
:
|
||||
public mixedFvPatchScalarField,
|
||||
public temperatureCoupledBase
|
||||
public mixedFvPatchScalarField
|
||||
{
|
||||
// Private Data
|
||||
|
||||
@ -24,13 +24,13 @@ License
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "externalTemperatureFvPatchScalarField.H"
|
||||
#include "patchKappa.H"
|
||||
#include "volFields.H"
|
||||
#include "physicoChemicalConstants.H"
|
||||
#include "addToRunTimeSelectionTable.H"
|
||||
|
||||
using Foam::constant::physicoChemical::sigma;
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::externalTemperatureFvPatchScalarField::
|
||||
@ -41,7 +41,6 @@ externalTemperatureFvPatchScalarField
|
||||
)
|
||||
:
|
||||
mixedFvPatchScalarField(p, iF),
|
||||
temperatureCoupledBase(patch()),
|
||||
haveQ_(false),
|
||||
Q_(NaN),
|
||||
haveq_(false),
|
||||
@ -72,7 +71,6 @@ externalTemperatureFvPatchScalarField
|
||||
)
|
||||
:
|
||||
mixedFvPatchScalarField(p, iF),
|
||||
temperatureCoupledBase(patch(), dict),
|
||||
haveQ_(dict.found("Q")),
|
||||
Q_(haveQ_ ? dict.lookup<scalar>("Q") : NaN),
|
||||
haveq_(dict.found("q")),
|
||||
@ -146,7 +144,6 @@ externalTemperatureFvPatchScalarField
|
||||
)
|
||||
:
|
||||
mixedFvPatchScalarField(ptf, p, iF, mapper),
|
||||
temperatureCoupledBase(patch(), ptf),
|
||||
haveQ_(ptf.haveQ_),
|
||||
Q_(ptf.Q_),
|
||||
haveq_(ptf.haveq_),
|
||||
@ -177,7 +174,6 @@ externalTemperatureFvPatchScalarField
|
||||
)
|
||||
:
|
||||
mixedFvPatchScalarField(tppsf, iF),
|
||||
temperatureCoupledBase(patch(), tppsf),
|
||||
haveQ_(tppsf.haveQ_),
|
||||
Q_(tppsf.Q_),
|
||||
haveq_(tppsf.haveq_),
|
||||
@ -311,10 +307,12 @@ void Foam::externalTemperatureFvPatchScalarField::updateCoeffs()
|
||||
qTot += q_;
|
||||
}
|
||||
|
||||
const scalarField kappa(patchKappa(patch()).kappa());
|
||||
|
||||
// Evaluate
|
||||
if (!haveh_)
|
||||
{
|
||||
refGrad() = qTot/kappa(*this);
|
||||
refGrad() = qTot/kappa;
|
||||
refValue() = Tp;
|
||||
valueFraction() = 0;
|
||||
}
|
||||
@ -356,7 +354,7 @@ void Foam::externalTemperatureFvPatchScalarField::updateCoeffs()
|
||||
|
||||
const scalarField kappaDeltaCoeffs
|
||||
(
|
||||
this->kappa(*this)*patch().deltaCoeffs()
|
||||
kappa*patch().deltaCoeffs()
|
||||
);
|
||||
|
||||
refGrad() = 0;
|
||||
@ -386,7 +384,7 @@ void Foam::externalTemperatureFvPatchScalarField::updateCoeffs()
|
||||
|
||||
if (debug)
|
||||
{
|
||||
const scalar Q = gSum(kappa(*this)*patch().magSf()*snGrad());
|
||||
const scalar Q = gSum(kappa*patch().magSf()*snGrad());
|
||||
|
||||
Info<< patch().boundaryMesh().mesh().name() << ':'
|
||||
<< patch().name() << ':'
|
||||
@ -408,8 +406,6 @@ void Foam::externalTemperatureFvPatchScalarField::write
|
||||
{
|
||||
fvPatchScalarField::write(os);
|
||||
|
||||
temperatureCoupledBase::write(os);
|
||||
|
||||
if (haveQ_)
|
||||
{
|
||||
writeEntry(os, "Q", Q_);
|
||||
@ -46,8 +46,9 @@ Description
|
||||
resistances can be specified through thicknessLayers and kappaLayers
|
||||
entries.
|
||||
|
||||
The thermal conductivity \c kappa can either be retrieved from various
|
||||
possible sources, as detailed in the class temperatureCoupledBase.
|
||||
The patch thermal conductivity \c kappa is obtained from the
|
||||
Foam::patchKappa base class so that this boundary condition can be applied
|
||||
directly to either fluid or solid regions.
|
||||
|
||||
The ambient temperature Ta is specified as a Foam::Function1 of time but
|
||||
uniform is space.
|
||||
@ -83,7 +84,7 @@ Usage
|
||||
\endverbatim
|
||||
|
||||
See also
|
||||
Foam::temperatureCoupledBase
|
||||
Foam::patchKappa
|
||||
Foam::mixedFvPatchScalarField
|
||||
|
||||
SourceFiles
|
||||
@ -95,7 +96,6 @@ SourceFiles
|
||||
#define externalTemperatureFvPatchScalarField_H
|
||||
|
||||
#include "mixedFvPatchFields.H"
|
||||
#include "temperatureCoupledBase.H"
|
||||
#include "Function1.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
@ -109,8 +109,7 @@ namespace Foam
|
||||
|
||||
class externalTemperatureFvPatchScalarField
|
||||
:
|
||||
public mixedFvPatchScalarField,
|
||||
public temperatureCoupledBase
|
||||
public mixedFvPatchScalarField
|
||||
{
|
||||
// Private Data
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2022 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -23,37 +23,13 @@ License
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "temperatureCoupledBase.H"
|
||||
#include "fluidThermo.H"
|
||||
#include "solidThermo.H"
|
||||
#include "patchKappa.H"
|
||||
#include "thermophysicalTransportModel.H"
|
||||
#include "solidThermophysicalTransportModel.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::temperatureCoupledBase::temperatureCoupledBase
|
||||
(
|
||||
const fvPatch& patch
|
||||
)
|
||||
:
|
||||
patch_(patch)
|
||||
{}
|
||||
|
||||
|
||||
Foam::temperatureCoupledBase::temperatureCoupledBase
|
||||
(
|
||||
const fvPatch& patch,
|
||||
const dictionary& dict
|
||||
)
|
||||
:
|
||||
patch_(patch)
|
||||
{}
|
||||
|
||||
|
||||
Foam::temperatureCoupledBase::temperatureCoupledBase
|
||||
(
|
||||
const fvPatch& patch,
|
||||
const temperatureCoupledBase& base
|
||||
)
|
||||
Foam::patchKappa::patchKappa(const fvPatch& patch)
|
||||
:
|
||||
patch_(patch)
|
||||
{}
|
||||
@ -61,53 +37,58 @@ Foam::temperatureCoupledBase::temperatureCoupledBase
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
Foam::tmp<Foam::scalarField> Foam::temperatureCoupledBase::kappa
|
||||
(
|
||||
const fvPatchScalarField& Tp
|
||||
) const
|
||||
Foam::tmp<Foam::scalarField> Foam::patchKappa::kappa() const
|
||||
{
|
||||
const fvMesh& mesh = patch_.boundaryMesh().mesh();
|
||||
const label patchi = patch_.index();
|
||||
|
||||
const word& phase(Tp.internalField().group());
|
||||
|
||||
const word ttmName
|
||||
if
|
||||
(
|
||||
IOobject::groupName
|
||||
mesh.foundObject<thermophysicalTransportModel>
|
||||
(
|
||||
thermophysicalTransportModel::typeName,
|
||||
phase
|
||||
thermophysicalTransportModel::typeName
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
if (mesh.foundObject<thermophysicalTransportModel>(ttmName))
|
||||
{
|
||||
const thermophysicalTransportModel& ttm =
|
||||
mesh.lookupObject<thermophysicalTransportModel>(ttmName);
|
||||
mesh.lookupObject<thermophysicalTransportModel>
|
||||
(
|
||||
thermophysicalTransportModel::typeName
|
||||
);
|
||||
|
||||
return ttm.kappaEff(patchi);
|
||||
}
|
||||
else if (mesh.foundObject<solidThermo>(physicalProperties::typeName))
|
||||
else if
|
||||
(
|
||||
mesh.foundObject<solidThermophysicalTransportModel>
|
||||
(
|
||||
solidThermophysicalTransportModel::typeName
|
||||
)
|
||||
)
|
||||
{
|
||||
const solidThermo& thermo =
|
||||
mesh.lookupObject<solidThermo>(physicalProperties::typeName);
|
||||
const solidThermophysicalTransportModel& sttm =
|
||||
mesh.lookupObject<solidThermophysicalTransportModel>
|
||||
(
|
||||
solidThermophysicalTransportModel::typeName
|
||||
);
|
||||
|
||||
if (!thermo.isotropic())
|
||||
if (!sttm.thermo().isotropic())
|
||||
{
|
||||
const symmTensorField kappa(thermo.KappaLocal(patchi));
|
||||
const symmTensorField kappa(sttm.Kappa(patchi));
|
||||
const vectorField n(patch_.nf());
|
||||
|
||||
return n & kappa & n;
|
||||
}
|
||||
else
|
||||
{
|
||||
return thermo.kappa().boundaryField()[patchi];
|
||||
return sttm.kappa(patchi);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
FatalErrorInFunction
|
||||
<< "Cannot find a fluidThermo or solidThermo instance"
|
||||
<< "Cannot find a thermophysicalTransportModel "
|
||||
"or solidThermophysicalTransportModel instance"
|
||||
<< exit(FatalError);
|
||||
|
||||
return scalarField::null();
|
||||
@ -115,8 +96,4 @@ Foam::tmp<Foam::scalarField> Foam::temperatureCoupledBase::kappa
|
||||
}
|
||||
|
||||
|
||||
void Foam::temperatureCoupledBase::write(Ostream& os) const
|
||||
{}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2011-2020 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2022 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -22,36 +22,24 @@ License
|
||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Class
|
||||
Foam::temperatureCoupledBase
|
||||
Foam::patchKappa
|
||||
|
||||
Description
|
||||
Common functions used in temperature coupled boundaries.
|
||||
Provides the patch thermal conductivity \c kappa for the fluid or solid
|
||||
region an appropriate.
|
||||
|
||||
The thermal conductivity \c kappa is obtained from the region fluidThermo
|
||||
or solidThermo as appropriate.
|
||||
|
||||
For turbulent fluid regions \c kappa is obtained from the
|
||||
thermophysicalTransportModel \c kappaEff.
|
||||
|
||||
For solid regions kappa may be obtained from the anisotropic alpha field
|
||||
by specifying the optional \c alphaAni field name.
|
||||
|
||||
\par Keywords provided by this class:
|
||||
\table
|
||||
Property | Description | Required | Default value
|
||||
alphaAni | Name of the non-isotropic alpha | no |
|
||||
\endtable
|
||||
For fluid regions \c kappaEff is obtained from the
|
||||
Foam::thermophysicalTransportModel and for solid regions
|
||||
\c kappa is obtained from the Foam::solidThermophysicalTransportModel.
|
||||
|
||||
SourceFiles
|
||||
temperatureCoupledBase.C
|
||||
patchKappa.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef temperatureCoupledBase_H
|
||||
#define temperatureCoupledBase_H
|
||||
#ifndef patchKappa_H
|
||||
#define patchKappa_H
|
||||
|
||||
#include "scalarField.H"
|
||||
#include "NamedEnum.H"
|
||||
#include "fvPatch.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
@ -60,14 +48,14 @@ namespace Foam
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class temperatureCoupledBase Declaration
|
||||
Class patchKappa Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class temperatureCoupledBase
|
||||
class patchKappa
|
||||
{
|
||||
// Private data
|
||||
|
||||
//- Underlying patch
|
||||
//- Reference to the region patch
|
||||
const fvPatch& patch_;
|
||||
|
||||
|
||||
@ -76,33 +64,16 @@ public:
|
||||
// Constructors
|
||||
|
||||
//- Construct from patch
|
||||
temperatureCoupledBase
|
||||
patchKappa
|
||||
(
|
||||
const fvPatch& patch
|
||||
);
|
||||
|
||||
//- Construct from patch and dictionary
|
||||
temperatureCoupledBase
|
||||
(
|
||||
const fvPatch& patch,
|
||||
const dictionary& dict
|
||||
);
|
||||
|
||||
//- Construct from patch and temperatureCoupledBase
|
||||
temperatureCoupledBase
|
||||
(
|
||||
const fvPatch& patch,
|
||||
const temperatureCoupledBase& base
|
||||
);
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Given patch temperature calculate corresponding K field
|
||||
tmp<scalarField> kappa(const fvPatchScalarField& Tp) const;
|
||||
|
||||
//- Write
|
||||
void write(Ostream&) const;
|
||||
//- Thermal conductivity for patch [W/m/K]
|
||||
tmp<scalarField> kappa() const;
|
||||
};
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2020-2021 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2020-2022 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -51,6 +51,8 @@ FickianFourier
|
||||
{
|
||||
read();
|
||||
this->correct();
|
||||
|
||||
this->printCoeffs(typeName);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2020-2021 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2020-2022 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -51,6 +51,8 @@ MaxwellStefanFourier
|
||||
{
|
||||
read();
|
||||
this->correct();
|
||||
|
||||
this->printCoeffs(typeName);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2020-2021 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2020-2022 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -32,9 +32,7 @@ template<class BasicThermophysicalTransportModel>
|
||||
void Foam::laminarThermophysicalTransportModel
|
||||
<
|
||||
BasicThermophysicalTransportModel
|
||||
>::printCoeffs
|
||||
(
|
||||
const word& type)
|
||||
>::printCoeffs(const word& type)
|
||||
{
|
||||
if (printCoeffs_)
|
||||
{
|
||||
|
||||
@ -146,7 +146,7 @@ public:
|
||||
return coeffDict_;
|
||||
}
|
||||
|
||||
//- Effective thermal turbulent diffusivity for temperature
|
||||
//- Effective thermal turbulent conductivity
|
||||
// of mixture [W/m/K]
|
||||
virtual tmp<volScalarField> kappaEff() const
|
||||
{
|
||||
@ -157,7 +157,7 @@ public:
|
||||
);
|
||||
}
|
||||
|
||||
//- Effective thermal turbulent diffusivity for temperature
|
||||
//- Effective thermal turbulent conductivity
|
||||
// of mixture for patch [W/m/K]
|
||||
virtual tmp<scalarField> kappaEff(const label patchi) const
|
||||
{
|
||||
|
||||
@ -0,0 +1,5 @@
|
||||
solidThermophysicalTransportModel/solidThermophysicalTransportModel.C
|
||||
isotropic/isotropic.C
|
||||
anisotropic/anisotropic.C
|
||||
|
||||
LIB = $(FOAM_LIBBIN)/libsolidThermophysicalTransportModels
|
||||
@ -0,0 +1,13 @@
|
||||
EXE_INC = \
|
||||
-I$(LIB_SRC)/physicalProperties/lnInclude \
|
||||
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
|
||||
-I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \
|
||||
-I$(LIB_SRC)/thermophysicalModels/solidThermo/lnInclude \
|
||||
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||
-I$(LIB_SRC)/meshTools/lnInclude \
|
||||
|
||||
LIB_LIBS = \
|
||||
-lsolidThermo \
|
||||
-lspecie \
|
||||
-lfiniteVolume \
|
||||
-lmeshTools
|
||||
@ -0,0 +1,342 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / 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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "anisotropic.H"
|
||||
#include "fvmLaplacian.H"
|
||||
#include "fvcLaplacian.H"
|
||||
#include "fvcSnGrad.H"
|
||||
#include "addToRunTimeSelectionTable.H"
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace solidThermophysicalTransportModels
|
||||
{
|
||||
defineTypeNameAndDebug(anisotropic, 0);
|
||||
addToRunTimeSelectionTable
|
||||
(
|
||||
solidThermophysicalTransportModel,
|
||||
anisotropic,
|
||||
dictionary
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||
|
||||
void Foam::solidThermophysicalTransportModels::anisotropic::
|
||||
setZonesPatchFaces() const
|
||||
{
|
||||
// Find all the patch faces adjacent to zones
|
||||
|
||||
const fvMesh& mesh = thermo().mesh();
|
||||
const fvBoundaryMesh& patches = mesh.boundary();
|
||||
const labelList& own = mesh.faceOwner();
|
||||
|
||||
zonesPatchFaces_.setSize(zoneCoordinateSystems_.size());
|
||||
label zonei = 0;
|
||||
|
||||
forAllConstIter
|
||||
(
|
||||
PtrDictionary<coordinateSystem>,
|
||||
zoneCoordinateSystems_,
|
||||
iter
|
||||
)
|
||||
{
|
||||
zonesPatchFaces_[zonei].setSize(patches.size());
|
||||
|
||||
const labelList& zoneCells = mesh.cellZones()[iter().name()];
|
||||
|
||||
// Cell in zone
|
||||
boolList cellInZone(mesh.nCells(), false);
|
||||
|
||||
forAll(zoneCells, i)
|
||||
{
|
||||
cellInZone[zoneCells[i]] = true;
|
||||
}
|
||||
|
||||
forAll(patches, patchi)
|
||||
{
|
||||
const fvPatch& pp = patches[patchi];
|
||||
|
||||
zonesPatchFaces_[zonei][patchi].setSize(pp.size());
|
||||
|
||||
label nZonePatchFaces = 0;
|
||||
|
||||
forAll(pp, patchFacei)
|
||||
{
|
||||
const label facei = pp.start() + patchFacei;
|
||||
|
||||
if (cellInZone[own[facei]])
|
||||
{
|
||||
zonesPatchFaces_[zonei][patchi][nZonePatchFaces++] =
|
||||
patchFacei;
|
||||
}
|
||||
}
|
||||
|
||||
zonesPatchFaces_[zonei][patchi].setSize(nZonePatchFaces);
|
||||
}
|
||||
|
||||
zonei++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::solidThermophysicalTransportModels::anisotropic::anisotropic
|
||||
(
|
||||
const solidThermo& thermo
|
||||
)
|
||||
:
|
||||
solidThermophysicalTransportModel(typeName, thermo),
|
||||
coordinateSystem_(coordinateSystem::New(thermo.mesh(), coeffDict()))
|
||||
{
|
||||
if (coeffDict().found("zones"))
|
||||
{
|
||||
const dictionary& zonesDict(coeffDict().subDict("zones"));
|
||||
|
||||
Info<< " Reading coordinate system for zones:" << endl;
|
||||
|
||||
forAllConstIter(dictionary, zonesDict, iter)
|
||||
{
|
||||
if (iter().isDict())
|
||||
{
|
||||
const word& name = iter().keyword();
|
||||
const dictionary& dict = iter().dict();
|
||||
|
||||
Info<< " " << name << endl;
|
||||
|
||||
zoneCoordinateSystems_.insert
|
||||
(
|
||||
name,
|
||||
coordinateSystem::New(name, dict).ptr()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Find all the patch faces adjacent to zones
|
||||
setZonesPatchFaces();
|
||||
|
||||
Info << endl;
|
||||
}
|
||||
|
||||
this->printCoeffs(typeName);
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
bool Foam::solidThermophysicalTransportModels::anisotropic::read()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::volSymmTensorField>
|
||||
Foam::solidThermophysicalTransportModels::anisotropic::Kappa() const
|
||||
{
|
||||
const solidThermo& thermo = this->thermo();
|
||||
const fvMesh& mesh = thermo.mesh();
|
||||
|
||||
if (zoneCoordinateSystems_.size() && mesh.topoChanged())
|
||||
{
|
||||
setZonesPatchFaces();
|
||||
}
|
||||
|
||||
const tmp<volVectorField> tmaterialKappa(thermo.Kappa());
|
||||
const volVectorField& materialKappa = tmaterialKappa();
|
||||
|
||||
tmp<volSymmTensorField> tKappa
|
||||
(
|
||||
volSymmTensorField::New
|
||||
(
|
||||
"Kappa",
|
||||
mesh,
|
||||
dimensionedSymmTensor(materialKappa.dimensions(), Zero)
|
||||
)
|
||||
);
|
||||
volSymmTensorField& Kappa = tKappa.ref();
|
||||
|
||||
Kappa.primitiveFieldRef() =
|
||||
coordinateSystem_.R(mesh.C()).transformDiagTensor(materialKappa);
|
||||
|
||||
forAll(Kappa.boundaryField(), patchi)
|
||||
{
|
||||
Kappa.boundaryFieldRef()[patchi] =
|
||||
coordinateSystem_.R(mesh.boundary()[patchi].Cf())
|
||||
.transformDiagTensor(materialKappa.boundaryField()[patchi]);
|
||||
}
|
||||
|
||||
label zonei = 0;
|
||||
|
||||
forAllConstIter
|
||||
(
|
||||
PtrDictionary<coordinateSystem>,
|
||||
zoneCoordinateSystems_,
|
||||
iter
|
||||
)
|
||||
{
|
||||
const labelList& zoneCells = mesh.cellZones()[iter().name()];
|
||||
const coordinateSystem& cs = iter();
|
||||
|
||||
forAll(zoneCells, i)
|
||||
{
|
||||
const label celli = zoneCells[i];
|
||||
|
||||
Kappa[celli] =
|
||||
cs.R().transformDiagTensor
|
||||
(
|
||||
mesh.C()[celli],
|
||||
materialKappa[celli]
|
||||
);
|
||||
}
|
||||
|
||||
forAll(zonesPatchFaces_[zonei], patchi)
|
||||
{
|
||||
symmTensorField& KappaPf = Kappa.boundaryFieldRef()[patchi];
|
||||
|
||||
const vectorField& materialKappaPf =
|
||||
materialKappa.boundaryField()[patchi];
|
||||
|
||||
const vectorField& CPf = mesh.boundary()[patchi].Cf();
|
||||
|
||||
forAll(zonesPatchFaces_[zonei][patchi], zonePatchFacei)
|
||||
{
|
||||
const label patchFacei =
|
||||
zonesPatchFaces_[zonei][patchi][zonePatchFacei];
|
||||
|
||||
KappaPf[patchFacei] =
|
||||
cs.R().transformDiagTensor
|
||||
(
|
||||
CPf[patchFacei],
|
||||
materialKappaPf[patchFacei]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
zonei++;
|
||||
}
|
||||
|
||||
return tKappa;
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::symmTensorField>
|
||||
Foam::solidThermophysicalTransportModels::anisotropic::Kappa
|
||||
(
|
||||
const label patchi
|
||||
) const
|
||||
{
|
||||
const solidThermo& thermo = this->thermo();
|
||||
const vectorField& CPf = thermo.mesh().boundary()[patchi].Cf();
|
||||
|
||||
const vectorField materialKappaPf(thermo.Kappa(patchi));
|
||||
|
||||
tmp<symmTensorField> tKappa
|
||||
(
|
||||
coordinateSystem_.R(CPf).transformDiagTensor(materialKappaPf)
|
||||
);
|
||||
symmTensorField& KappaPf = tKappa.ref();
|
||||
|
||||
label zonei = 0;
|
||||
|
||||
forAllConstIter
|
||||
(
|
||||
PtrDictionary<coordinateSystem>,
|
||||
zoneCoordinateSystems_,
|
||||
iter
|
||||
)
|
||||
{
|
||||
const coordinateSystem& cs = iter();
|
||||
|
||||
forAll(zonesPatchFaces_[zonei][patchi], zonePatchFacei)
|
||||
{
|
||||
const label patchFacei =
|
||||
zonesPatchFaces_[zonei][patchi][zonePatchFacei];
|
||||
|
||||
KappaPf[patchFacei] =
|
||||
cs.R().transformDiagTensor
|
||||
(
|
||||
CPf[patchFacei],
|
||||
materialKappaPf[patchFacei]
|
||||
);
|
||||
}
|
||||
|
||||
zonei++;
|
||||
}
|
||||
|
||||
return tKappa;
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::surfaceScalarField>
|
||||
Foam::solidThermophysicalTransportModels::anisotropic::q() const
|
||||
{
|
||||
const solidThermo& thermo = this->thermo();
|
||||
const fvMesh& mesh = thermo.mesh();
|
||||
|
||||
return surfaceScalarField::New
|
||||
(
|
||||
"q",
|
||||
-fvm::laplacian(Kappa(), thermo.T())().flux()/mesh.magSf()
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::fvScalarMatrix>
|
||||
Foam::solidThermophysicalTransportModels::anisotropic::divq
|
||||
(
|
||||
volScalarField& e
|
||||
) const
|
||||
{
|
||||
const solidThermo& thermo = this->thermo();
|
||||
const volSymmTensorField Kappa(this->Kappa());
|
||||
|
||||
// Return heat flux source as an implicit energy correction
|
||||
// to the temperature gradient flux
|
||||
return
|
||||
-fvc::laplacian(Kappa, thermo.T())
|
||||
-correction
|
||||
(
|
||||
fvm::laplacian
|
||||
(
|
||||
Kappa/thermo.Cv(),
|
||||
e,
|
||||
"laplacian(alphae,e)"
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
void Foam::solidThermophysicalTransportModels::anisotropic::correct()
|
||||
{
|
||||
solidThermophysicalTransportModel::correct();
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,172 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / 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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
Class
|
||||
Foam::solidThermophysicalTransportModels::anisotropic
|
||||
|
||||
Description
|
||||
Solid thermophysical transport model for anisotropic thermal conductivity
|
||||
|
||||
The anisotropic thermal conductivity field is evaluated from the solid
|
||||
material anisotropic kappa specified in the physicalProperties dictionary
|
||||
transformed into the global coordinate system using default
|
||||
coordinate system and optionally additional coordinate systems specified
|
||||
per-zone in the thermophysicalProperties dictionary.
|
||||
|
||||
Usage
|
||||
Example of the anisotropic thermal conductivity specification in
|
||||
thermophysicalProperties with two zone-based coordinate systems in
|
||||
addition to the default:
|
||||
|
||||
\verbatim
|
||||
model anisotropic;
|
||||
|
||||
// Default coordinate system
|
||||
coordinateSystem
|
||||
{
|
||||
type cartesian;
|
||||
origin (0 0 0);
|
||||
coordinateRotation
|
||||
{
|
||||
type cylindrical;
|
||||
e3 (1 0 0);
|
||||
}
|
||||
}
|
||||
|
||||
// Optional zone coordinate systems
|
||||
zones
|
||||
{
|
||||
coil1
|
||||
{
|
||||
type cartesian;
|
||||
origin (0.1 0.2 0.7);
|
||||
coordinateRotation
|
||||
{
|
||||
type cylindrical;
|
||||
e3 (0.5 0.866 0);
|
||||
}
|
||||
}
|
||||
|
||||
coil2
|
||||
{
|
||||
type cartesian;
|
||||
origin (0.4 0.5 1);
|
||||
coordinateRotation
|
||||
{
|
||||
type cylindrical;
|
||||
e3 (0.866 0.5 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
\endverbatim
|
||||
|
||||
SourceFiles
|
||||
anisotropic.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef anisotropic_H
|
||||
#define anisotropic_H
|
||||
|
||||
#include "solidThermophysicalTransportModel.H"
|
||||
#include "coordinateSystem.H"
|
||||
#include "PtrDictionary.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace solidThermophysicalTransportModels
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class anisotropic Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class anisotropic
|
||||
:
|
||||
public solidThermophysicalTransportModel
|
||||
{
|
||||
// Private member data
|
||||
|
||||
coordinateSystem coordinateSystem_;
|
||||
|
||||
//- Optional zone coordinate systems
|
||||
PtrDictionary<coordinateSystem> zoneCoordinateSystems_;
|
||||
|
||||
// List of patch faces adjacent to coordinate zones
|
||||
mutable labelListListList zonesPatchFaces_;
|
||||
|
||||
//- Find all the patch faces adjacent to zones
|
||||
void setZonesPatchFaces() const;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("anisotropic");
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from solid thermophysical properties
|
||||
anisotropic(const solidThermo& thermo);
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~anisotropic()
|
||||
{}
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Read thermophysicalTransport dictionary
|
||||
virtual bool read();
|
||||
|
||||
//- Thermal conductivity [W/m/K]
|
||||
virtual tmp<volSymmTensorField> Kappa() const;
|
||||
|
||||
//- Thermal conductivity for patch [W/m/K]
|
||||
virtual tmp<symmTensorField> Kappa(const label patchi) const;
|
||||
|
||||
//- Return the heat flux [W/m^2]
|
||||
virtual tmp<surfaceScalarField> q() const;
|
||||
|
||||
//- Return the source term for the energy equation
|
||||
virtual tmp<fvScalarMatrix> divq(volScalarField& he) const;
|
||||
|
||||
//- Correct the anisotropic viscosity
|
||||
virtual void correct();
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace solidThermophysicalTransportModels
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,135 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / 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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "isotropic.H"
|
||||
#include "fvmLaplacian.H"
|
||||
#include "fvcLaplacian.H"
|
||||
#include "fvcSnGrad.H"
|
||||
#include "addToRunTimeSelectionTable.H"
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace solidThermophysicalTransportModels
|
||||
{
|
||||
defineTypeNameAndDebug(isotropic, 0);
|
||||
addToRunTimeSelectionTable
|
||||
(
|
||||
solidThermophysicalTransportModel,
|
||||
isotropic,
|
||||
dictionary
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::solidThermophysicalTransportModels::isotropic::isotropic
|
||||
(
|
||||
const solidThermo& thermo
|
||||
)
|
||||
:
|
||||
solidThermophysicalTransportModel(typeName, thermo)
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
const Foam::dictionary&
|
||||
Foam::solidThermophysicalTransportModels::isotropic::coeffDict() const
|
||||
{
|
||||
return dictionary::null;
|
||||
}
|
||||
|
||||
|
||||
bool Foam::solidThermophysicalTransportModels::isotropic::read()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::volSymmTensorField>
|
||||
Foam::solidThermophysicalTransportModels::isotropic::Kappa() const
|
||||
{
|
||||
NotImplemented;
|
||||
return volSymmTensorField::null();
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::symmTensorField>
|
||||
Foam::solidThermophysicalTransportModels::isotropic::Kappa
|
||||
(
|
||||
const label patchi
|
||||
) const
|
||||
{
|
||||
NotImplemented;
|
||||
return symmTensorField::null();
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::surfaceScalarField>
|
||||
Foam::solidThermophysicalTransportModels::isotropic::q() const
|
||||
{
|
||||
return surfaceScalarField::New
|
||||
(
|
||||
"q",
|
||||
-fvc::interpolate(kappa())*fvc::snGrad(thermo().T())
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::fvScalarMatrix>
|
||||
Foam::solidThermophysicalTransportModels::isotropic::divq
|
||||
(
|
||||
volScalarField& e
|
||||
) const
|
||||
{
|
||||
const solidThermo& thermo = this->thermo();
|
||||
|
||||
// Return heat flux source as an implicit energy correction
|
||||
// to the temperature gradient flux
|
||||
return
|
||||
-fvc::laplacian(kappa(), thermo.T())
|
||||
-correction
|
||||
(
|
||||
fvm::laplacian
|
||||
(
|
||||
kappa()/thermo.Cv(),
|
||||
e,
|
||||
"laplacian(alphae,e)"
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
void Foam::solidThermophysicalTransportModels::isotropic::correct()
|
||||
{
|
||||
solidThermophysicalTransportModel::correct();
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,111 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / 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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
Class
|
||||
Foam::solidThermophysicalTransportModels::isotropic
|
||||
|
||||
Description
|
||||
Solid thermophysical transport model for isotropic thermal conductivity
|
||||
|
||||
This is the default transport model for solids and selected automatically if
|
||||
the thermophysicalTransport dictionary is not present in the constant or
|
||||
region directory.
|
||||
|
||||
SourceFiles
|
||||
isotropic.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef isotropic_H
|
||||
#define isotropic_H
|
||||
|
||||
#include "solidThermophysicalTransportModel.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace solidThermophysicalTransportModels
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class isotropic Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class isotropic
|
||||
:
|
||||
public solidThermophysicalTransportModel
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("isotropic");
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from solid thermophysical properties
|
||||
isotropic(const solidThermo& thermo);
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~isotropic()
|
||||
{}
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Const access to the coefficients dictionary
|
||||
virtual const dictionary& coeffDict() const;
|
||||
|
||||
//- Read thermophysicalTransport dictionary
|
||||
virtual bool read();
|
||||
|
||||
//- Thermal conductivity [W/m/K]
|
||||
virtual tmp<volSymmTensorField> Kappa() const;
|
||||
|
||||
//- Thermal conductivity for patch [W/m/K]
|
||||
virtual tmp<symmTensorField> Kappa(const label patchi) const;
|
||||
|
||||
//- Return the heat flux [W/m^2]
|
||||
virtual tmp<surfaceScalarField> q() const;
|
||||
|
||||
//- Return the source term for the energy equation
|
||||
virtual tmp<fvScalarMatrix> divq(volScalarField& he) const;
|
||||
|
||||
//- Correct the isotropic viscosity
|
||||
virtual void correct();
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace solidThermophysicalTransportModels
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,172 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / 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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "solidThermophysicalTransportModel.H"
|
||||
#include "isotropic.H"
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
defineTypeNameAndDebug(solidThermophysicalTransportModel, 0);
|
||||
defineRunTimeSelectionTable(solidThermophysicalTransportModel, dictionary);
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * //
|
||||
|
||||
void Foam::solidThermophysicalTransportModel::printCoeffs
|
||||
(const word& type)
|
||||
{
|
||||
if (printCoeffs_)
|
||||
{
|
||||
Info<< coeffDict_.dictName() << coeffDict_ << endl;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::solidThermophysicalTransportModel::solidThermophysicalTransportModel
|
||||
(
|
||||
const word& type,
|
||||
const solidThermo& thermo
|
||||
)
|
||||
:
|
||||
IOdictionary
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
typeName,
|
||||
thermo.mesh().time().constant(),
|
||||
thermo.mesh(),
|
||||
IOobject::READ_IF_PRESENT,
|
||||
IOobject::NO_WRITE
|
||||
)
|
||||
),
|
||||
|
||||
thermo_(thermo),
|
||||
printCoeffs_(lookupOrDefault<Switch>("printCoeffs", false)),
|
||||
coeffDict_(optionalSubDict(type + "Coeffs"))
|
||||
{
|
||||
// Add run-time re-reading of thermophysicalTransport dictionary
|
||||
// after construction to avoid problems if the dictionary is not present
|
||||
readOpt() = IOobject::MUST_READ_IF_MODIFIED;
|
||||
addWatch();
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * Selectors * * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::autoPtr<Foam::solidThermophysicalTransportModel>
|
||||
Foam::solidThermophysicalTransportModel::New(const solidThermo& thermo)
|
||||
{
|
||||
typeIOobject<IOdictionary> header
|
||||
(
|
||||
solidThermophysicalTransportModel::typeName,
|
||||
thermo.mesh().time().constant(),
|
||||
thermo.mesh(),
|
||||
IOobject::MUST_READ,
|
||||
IOobject::NO_WRITE,
|
||||
false
|
||||
);
|
||||
|
||||
if (header.headerOk())
|
||||
{
|
||||
const word modelType(IOdictionary(header).lookup("model"));
|
||||
|
||||
Info<< "Selecting solid thermophysical transport model "
|
||||
<< modelType << endl;
|
||||
|
||||
typename dictionaryConstructorTable::iterator cstrIter =
|
||||
dictionaryConstructorTablePtr_->find(modelType);
|
||||
|
||||
if (cstrIter == dictionaryConstructorTablePtr_->end())
|
||||
{
|
||||
FatalErrorInFunction
|
||||
<< "Unknown solid thermophysical transport model "
|
||||
<< modelType << nl << nl
|
||||
<< "Available models:" << endl
|
||||
<< dictionaryConstructorTablePtr_->sortedToc()
|
||||
<< exit(FatalError);
|
||||
}
|
||||
|
||||
return autoPtr<solidThermophysicalTransportModel>
|
||||
(
|
||||
cstrIter()(thermo)
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
Info<< "Selecting default solid thermophysical transport model "
|
||||
<< solidThermophysicalTransportModels::isotropic::typeName
|
||||
<< endl;
|
||||
|
||||
return autoPtr<solidThermophysicalTransportModel>
|
||||
(
|
||||
new solidThermophysicalTransportModels::isotropic(thermo)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
Foam::tmp<Foam::volScalarField>
|
||||
Foam::solidThermophysicalTransportModel::kappa() const
|
||||
{
|
||||
return thermo().kappa();
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::scalarField>
|
||||
Foam::solidThermophysicalTransportModel::kappa
|
||||
(
|
||||
const label patchi
|
||||
) const
|
||||
{
|
||||
return thermo().kappa().boundaryField()[patchi];
|
||||
}
|
||||
|
||||
|
||||
bool Foam::solidThermophysicalTransportModel::read()
|
||||
{
|
||||
if (regIOobject::read())
|
||||
{
|
||||
coeffDict_ <<= optionalSubDict(type() + "Coeffs");
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Foam::solidThermophysicalTransportModel::correct()
|
||||
{}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,179 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / 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 <http://www.gnu.org/licenses/>.
|
||||
|
||||
Class
|
||||
Foam::solidThermophysicalTransportModel
|
||||
|
||||
Description
|
||||
Abstract base class for thermophysical transport models
|
||||
(RAS, LES and laminar).
|
||||
|
||||
SourceFiles
|
||||
solidThermophysicalTransportModel.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef solidThermophysicalTransportModel_H
|
||||
#define solidThermophysicalTransportModel_H
|
||||
|
||||
#include "solidThermo.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class solidThermophysicalTransportModel Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class solidThermophysicalTransportModel
|
||||
:
|
||||
public IOdictionary
|
||||
{
|
||||
protected:
|
||||
|
||||
// Protected data
|
||||
|
||||
//- Reference to the solid thermophysical properties
|
||||
const solidThermo& thermo_;
|
||||
|
||||
//- Flag to print the model coeffs at run-time
|
||||
Switch printCoeffs_;
|
||||
|
||||
//- Model coefficients dictionary
|
||||
dictionary coeffDict_;
|
||||
|
||||
|
||||
// Protected Member Functions
|
||||
|
||||
//- Print model coefficients
|
||||
virtual void printCoeffs(const word& type);
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("thermophysicalTransport");
|
||||
|
||||
|
||||
// Declare run-time constructor selection table
|
||||
|
||||
declareRunTimeSelectionTable
|
||||
(
|
||||
autoPtr,
|
||||
solidThermophysicalTransportModel,
|
||||
dictionary,
|
||||
(
|
||||
const solidThermo& thermo
|
||||
),
|
||||
(thermo)
|
||||
);
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from solid thermophysical properties
|
||||
solidThermophysicalTransportModel
|
||||
(
|
||||
const word& type,
|
||||
const solidThermo& thermo
|
||||
);
|
||||
|
||||
//- Disallow default bitwise copy construction
|
||||
solidThermophysicalTransportModel
|
||||
(
|
||||
const solidThermophysicalTransportModel&
|
||||
) = delete;
|
||||
|
||||
|
||||
// Selectors
|
||||
|
||||
//- Return a reference to the selected thermophysical transport model
|
||||
static autoPtr<solidThermophysicalTransportModel> New
|
||||
(
|
||||
const solidThermo& thermo
|
||||
);
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~solidThermophysicalTransportModel()
|
||||
{}
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Read model coefficients if they have changed
|
||||
virtual bool read() = 0;
|
||||
|
||||
//- Access function to solid thermophysical properties
|
||||
virtual const solidThermo& thermo() const
|
||||
{
|
||||
return thermo_;
|
||||
}
|
||||
|
||||
//- Const access to the coefficients dictionary
|
||||
virtual const dictionary& coeffDict() const
|
||||
{
|
||||
return coeffDict_;
|
||||
}
|
||||
|
||||
//- Thermal conductivity [W/m/K]
|
||||
virtual tmp<volScalarField> kappa() const;
|
||||
|
||||
//- Thermal conductivity for patch [W/m/K]
|
||||
virtual tmp<scalarField> kappa(const label patchi) const;
|
||||
|
||||
//- Thermal conductivity [W/m/K]
|
||||
virtual tmp<volSymmTensorField> Kappa() const = 0;
|
||||
|
||||
//- Thermal conductivity for patch [W/m/K]
|
||||
virtual tmp<symmTensorField> Kappa(const label patchi) const = 0;
|
||||
|
||||
//- Return the heat flux [W/m^2]
|
||||
virtual tmp<surfaceScalarField> q() const = 0;
|
||||
|
||||
//- Return the source term for the energy equation
|
||||
virtual tmp<fvScalarMatrix> divq(volScalarField& he) const = 0;
|
||||
|
||||
//- Solve the thermophysical transport model equations
|
||||
// and correct the transport coefficients
|
||||
virtual void correct() = 0;
|
||||
|
||||
|
||||
// Member Operators
|
||||
|
||||
//- Disallow default bitwise assignment
|
||||
void operator=(const solidThermophysicalTransportModel&) = delete;
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2020-2021 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2020-2022 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -90,22 +90,23 @@ public:
|
||||
//- Read model coefficients if they have changed
|
||||
virtual bool read() = 0;
|
||||
|
||||
//- Access function to momentum transport model
|
||||
const compressibleMomentumTransportModel& momentumTransport() const
|
||||
{
|
||||
return momentumTransportModel_;
|
||||
}
|
||||
|
||||
//- Access function to incompressible transport model
|
||||
//- Access function to fluid thermophysical properties
|
||||
virtual const fluidThermo& thermo() const = 0;
|
||||
|
||||
//- Const access to the coefficients dictionary
|
||||
virtual const dictionary& coeffDict() const = 0;
|
||||
|
||||
//- Effective thermal turbulent diffusivity for temperature
|
||||
//- Effective thermal turbulent conductivity
|
||||
// of mixture [W/m/K]
|
||||
virtual tmp<volScalarField> kappaEff() const = 0;
|
||||
|
||||
//- Effective thermal turbulent diffusivity for temperature
|
||||
//- Effective thermal turbulent conductivity
|
||||
// of mixture for patch [W/m/K]
|
||||
virtual tmp<scalarField> kappaEff(const label patchi) const = 0;
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2020-2021 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2020-2022 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -53,6 +53,8 @@ FickianEddyDiffusivity
|
||||
{
|
||||
read();
|
||||
this->correct();
|
||||
|
||||
this->printCoeffs(typeName);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2020 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2020-2022 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -146,11 +146,11 @@ public:
|
||||
return coeffDict_;
|
||||
}
|
||||
|
||||
//- Effective thermal turbulent diffusivity for temperature
|
||||
//- Effective thermal turbulent conductivity
|
||||
// of mixture [W/m/K]
|
||||
virtual tmp<volScalarField> kappaEff() const = 0;
|
||||
|
||||
//- Effective thermal turbulent diffusivity for temperature
|
||||
//- Effective thermal turbulent conductivity
|
||||
// of mixture for patch [W/m/K]
|
||||
virtual tmp<scalarField> kappaEff(const label patchi) const = 0;
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2020 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2020-2022 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -146,11 +146,11 @@ public:
|
||||
return coeffDict_;
|
||||
}
|
||||
|
||||
//- Effective thermal turbulent diffusivity for temperature
|
||||
//- Effective thermal turbulent conductivity
|
||||
// of mixture [W/m/K]
|
||||
virtual tmp<volScalarField> kappaEff() const = 0;
|
||||
|
||||
//- Effective thermal turbulent diffusivity for temperature
|
||||
//- Effective thermal turbulent conductivity
|
||||
// of mixture for patch [W/m/K]
|
||||
virtual tmp<scalarField> kappaEff(const label patchi) const = 0;
|
||||
|
||||
|
||||
@ -135,14 +135,14 @@ public:
|
||||
return alphat()().boundaryField()[patchi];
|
||||
}
|
||||
|
||||
//- Effective thermal turbulent diffusivity for temperature
|
||||
//- Effective thermal turbulent conductivity
|
||||
// of mixture [W/m/K]
|
||||
virtual tmp<volScalarField> kappaEff() const
|
||||
{
|
||||
return this->thermo().kappa() + this->thermo().Cp()*alphat();
|
||||
}
|
||||
|
||||
//- Effective thermal turbulent diffusivity for temperature
|
||||
//- Effective thermal turbulent conductivity
|
||||
// of mixture for patch [W/m/K]
|
||||
virtual tmp<scalarField> kappaEff(const label patchi) const
|
||||
{
|
||||
|
||||
@ -56,7 +56,9 @@ nonUnityLewisEddyDiffusivity
|
||||
),
|
||||
|
||||
Sct_("Sct", dimless, this->coeffDict_)
|
||||
{}
|
||||
{
|
||||
this->printCoeffs(typeName);
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2020 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2020-2022 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -63,7 +63,9 @@ unityLewisEddyDiffusivity
|
||||
thermo,
|
||||
false
|
||||
)
|
||||
{}
|
||||
{
|
||||
this->printCoeffs(typeName);
|
||||
}
|
||||
|
||||
|
||||
template<class TurbulenceThermophysicalTransportModel>
|
||||
@ -116,7 +118,12 @@ unityLewisEddyDiffusivity
|
||||
),
|
||||
momentumTransport.mesh()
|
||||
)
|
||||
{}
|
||||
{
|
||||
if (type == typeName)
|
||||
{
|
||||
this->printCoeffs(type);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
@ -143,14 +143,14 @@ public:
|
||||
return alphat()().boundaryField()[patchi];
|
||||
}
|
||||
|
||||
//- Effective thermal turbulent diffusivity for temperature
|
||||
//- Effective thermal turbulent conductivity
|
||||
// of mixture [W/m/K]
|
||||
virtual tmp<volScalarField> kappaEff() const
|
||||
{
|
||||
return this->thermo().kappa() + this->thermo().Cp()*alphat();
|
||||
}
|
||||
|
||||
//- Effective thermal turbulent diffusivity for temperature
|
||||
//- Effective thermal turbulent conductivity
|
||||
// of mixture for patch [W/m/K]
|
||||
virtual tmp<scalarField> kappaEff(const label patchi) const
|
||||
{
|
||||
|
||||
@ -89,7 +89,7 @@ void Foam::porosityModels::DarcyForchheimer::calcTransformModelData()
|
||||
D_[zoneI][0].yy() = dXYZ_.value().y();
|
||||
D_[zoneI][0].zz() = dXYZ_.value().z();
|
||||
|
||||
D_[zoneI][0] = coordSys_.R().transformTensor(D_[zoneI][0]);
|
||||
D_[zoneI][0] = coordSys_.R().transform(Zero, D_[zoneI][0]);
|
||||
|
||||
// leading 0.5 is from 1/2*rho
|
||||
F_[zoneI][0] = Zero;
|
||||
@ -97,7 +97,7 @@ void Foam::porosityModels::DarcyForchheimer::calcTransformModelData()
|
||||
F_[zoneI][0].yy() = 0.5*fXYZ_.value().y();
|
||||
F_[zoneI][0].zz() = 0.5*fXYZ_.value().z();
|
||||
|
||||
F_[zoneI][0] = coordSys_.R().transformTensor(F_[zoneI][0]);
|
||||
F_[zoneI][0] = coordSys_.R().transform(Zero, F_[zoneI][0]);
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -128,8 +128,8 @@ void Foam::porosityModels::DarcyForchheimer::calcTransformModelData()
|
||||
UIndirectList<vector>(mesh_.C(), cells)()
|
||||
);
|
||||
|
||||
D_[zoneI] = R.transformTensor(D_[zoneI]);
|
||||
F_[zoneI] = R.transformTensor(F_[zoneI]);
|
||||
D_[zoneI] = R.transform(D_[zoneI]);
|
||||
F_[zoneI] = R.transform(F_[zoneI]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2012-2021 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2012-2022 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -144,13 +144,13 @@ void Foam::porosityModels::fixedCoeff::calcTransformModelData()
|
||||
alpha_[zoneI][0].xx() = alphaXYZ_.value().x();
|
||||
alpha_[zoneI][0].yy() = alphaXYZ_.value().y();
|
||||
alpha_[zoneI][0].zz() = alphaXYZ_.value().z();
|
||||
alpha_[zoneI][0] = coordSys_.R().transformTensor(alpha_[zoneI][0]);
|
||||
alpha_[zoneI][0] = coordSys_.R().transform(Zero, alpha_[zoneI][0]);
|
||||
|
||||
beta_[zoneI][0] = Zero;
|
||||
beta_[zoneI][0].xx() = betaXYZ_.value().x();
|
||||
beta_[zoneI][0].yy() = betaXYZ_.value().y();
|
||||
beta_[zoneI][0].zz() = betaXYZ_.value().z();
|
||||
beta_[zoneI][0] = coordSys_.R().transformTensor(beta_[zoneI][0]);
|
||||
beta_[zoneI][0] = coordSys_.R().transform(Zero, beta_[zoneI][0]);
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -180,8 +180,8 @@ void Foam::porosityModels::fixedCoeff::calcTransformModelData()
|
||||
UIndirectList<vector>(mesh_.C(), cells)()
|
||||
);
|
||||
|
||||
alpha_[zoneI] = R.transformTensor(alpha_[zoneI]);
|
||||
beta_[zoneI] = R.transformTensor(beta_[zoneI]);
|
||||
alpha_[zoneI] = R.transform(alpha_[zoneI]);
|
||||
beta_[zoneI] = R.transform(beta_[zoneI]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2013-2020 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2013-2022 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -26,7 +26,7 @@ Class
|
||||
|
||||
Description
|
||||
Calculates and outputs the second largest eigenvalue of the sum of the
|
||||
square of the symmetrical and anti-symmetrical parts of the velocity
|
||||
square of the symmetric and anti-symmetric parts of the velocity
|
||||
gradient tensor.
|
||||
|
||||
See also
|
||||
|
||||
@ -12,7 +12,8 @@ EXE_INC = \
|
||||
-I$(LIB_SRC)/MomentumTransportModels/momentumTransportModels/lnInclude \
|
||||
-I$(LIB_SRC)/MomentumTransportModels/incompressible/lnInclude \
|
||||
-I$(LIB_SRC)/MomentumTransportModels/compressible/lnInclude \
|
||||
-I$(LIB_SRC)/ThermophysicalTransportModels/lnInclude
|
||||
-I$(LIB_SRC)/ThermophysicalTransportModels/lnInclude \
|
||||
-I$(LIB_SRC)/ThermophysicalTransportModels/solidThermophysicalTransportModels/lnInclude
|
||||
|
||||
LIB_LIBS = \
|
||||
-lfiniteVolume \
|
||||
@ -23,6 +24,7 @@ LIB_LIBS = \
|
||||
-lincompressibleMomentumTransportModels \
|
||||
-lcompressibleMomentumTransportModels \
|
||||
-lthermophysicalTransportModels \
|
||||
-lsolidThermophysicalTransportModels \
|
||||
-lmeshTools \
|
||||
-lsurfMesh \
|
||||
-llagrangian \
|
||||
|
||||
@ -25,6 +25,7 @@ License
|
||||
|
||||
#include "wallHeatFlux.H"
|
||||
#include "thermophysicalTransportModel.H"
|
||||
#include "solidThermophysicalTransportModel.H"
|
||||
#include "solidThermo.H"
|
||||
#include "surfaceInterpolate.H"
|
||||
#include "fvcGrad.H"
|
||||
@ -219,12 +220,21 @@ bool Foam::functionObjects::wallHeatFlux::execute()
|
||||
|
||||
return store(fieldName, calcWallHeatFlux(ttm.q()));
|
||||
}
|
||||
else if (foundObject<solidThermo>(physicalProperties::typeName))
|
||||
else if
|
||||
(
|
||||
foundObject<solidThermophysicalTransportModel>
|
||||
(
|
||||
solidThermophysicalTransportModel::typeName
|
||||
)
|
||||
)
|
||||
{
|
||||
const solidThermo& thermo =
|
||||
lookupObject<solidThermo>(physicalProperties::typeName);
|
||||
const solidThermophysicalTransportModel& sttm =
|
||||
lookupObject<solidThermophysicalTransportModel>
|
||||
(
|
||||
solidThermophysicalTransportModel::typeName
|
||||
);
|
||||
|
||||
return store(fieldName, calcWallHeatFlux(thermo.q()));
|
||||
return store(fieldName, calcWallHeatFlux(sttm.q()));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2011-2020 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -125,24 +125,21 @@ Foam::EulerCoordinateRotation::EulerCoordinateRotation
|
||||
|
||||
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::vector Foam::EulerCoordinateRotation::transform(const vector& st) const
|
||||
Foam::vector Foam::EulerCoordinateRotation::transform(const vector& v) const
|
||||
{
|
||||
return (R_ & st);
|
||||
return (R_ & v);
|
||||
}
|
||||
|
||||
|
||||
Foam::vector Foam::EulerCoordinateRotation::invTransform
|
||||
(
|
||||
const vector& st
|
||||
) const
|
||||
Foam::vector Foam::EulerCoordinateRotation::invTransform(const vector& v) const
|
||||
{
|
||||
return (Rtr_ & st);
|
||||
return (Rtr_ & v);
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::vectorField> Foam::EulerCoordinateRotation::transform
|
||||
(
|
||||
const vectorField& st
|
||||
const vectorField& vf
|
||||
) const
|
||||
{
|
||||
NotImplemented;
|
||||
@ -152,7 +149,7 @@ Foam::tmp<Foam::vectorField> Foam::EulerCoordinateRotation::transform
|
||||
|
||||
Foam::tmp<Foam::vectorField> Foam::EulerCoordinateRotation::invTransform
|
||||
(
|
||||
const vectorField& st
|
||||
const vectorField& vf
|
||||
) const
|
||||
{
|
||||
NotImplemented;
|
||||
@ -160,9 +157,9 @@ Foam::tmp<Foam::vectorField> Foam::EulerCoordinateRotation::invTransform
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::tensorField> Foam::EulerCoordinateRotation::transformTensor
|
||||
Foam::tmp<Foam::tensorField> Foam::EulerCoordinateRotation::transform
|
||||
(
|
||||
const tensorField& st
|
||||
const tensorField& volSymmTensorField
|
||||
) const
|
||||
{
|
||||
NotImplemented;
|
||||
@ -170,38 +167,40 @@ Foam::tmp<Foam::tensorField> Foam::EulerCoordinateRotation::transformTensor
|
||||
}
|
||||
|
||||
|
||||
Foam::tensor Foam::EulerCoordinateRotation::transformTensor
|
||||
Foam::tensor Foam::EulerCoordinateRotation::transform
|
||||
(
|
||||
const tensor& st
|
||||
const vector& p,
|
||||
const tensor& t
|
||||
) const
|
||||
{
|
||||
return (R_ & st & Rtr_);
|
||||
return (R_ & t & Rtr_);
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::symmTensorField> Foam::EulerCoordinateRotation::
|
||||
transformVector
|
||||
transformDiagTensor
|
||||
(
|
||||
const vectorField& st
|
||||
const vectorField& vf
|
||||
) const
|
||||
{
|
||||
tmp<symmTensorField> tfld(new symmTensorField(st.size()));
|
||||
tmp<symmTensorField> tfld(new symmTensorField(vf.size()));
|
||||
symmTensorField& fld = tfld.ref();
|
||||
|
||||
forAll(fld, i)
|
||||
{
|
||||
fld[i] = transformPrincipal(R_, st[i]);
|
||||
fld[i] = transformVectorDiagTensor(R_, vf[i]);
|
||||
}
|
||||
return tfld;
|
||||
}
|
||||
|
||||
|
||||
Foam::symmTensor Foam::EulerCoordinateRotation::transformVector
|
||||
Foam::symmTensor Foam::EulerCoordinateRotation::transformDiagTensor
|
||||
(
|
||||
const vector& st
|
||||
const vector& p,
|
||||
const vector& v
|
||||
) const
|
||||
{
|
||||
return transformPrincipal(R_, st);
|
||||
return transformVectorDiagTensor(R_, v);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2011-2020 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -145,33 +145,37 @@ public:
|
||||
}
|
||||
|
||||
//- Transform vectorField using transformation tensor field
|
||||
virtual tmp<vectorField> transform(const vectorField& st) const;
|
||||
virtual tmp<vectorField> transform(const vectorField& vf) const;
|
||||
|
||||
//- Transform vector using transformation tensor
|
||||
virtual vector transform(const vector& st) const;
|
||||
virtual vector transform(const vector& v) const;
|
||||
|
||||
//- Inverse transform vectorField using transformation tensor field
|
||||
virtual tmp<vectorField> invTransform(const vectorField& st) const;
|
||||
virtual tmp<vectorField> invTransform(const vectorField& vf) const;
|
||||
|
||||
//- Inverse transform vector using transformation tensor
|
||||
virtual vector invTransform(const vector& st) const;
|
||||
virtual vector invTransform(const vector& v) const;
|
||||
|
||||
//- Transform tensor field using transformation tensorField
|
||||
virtual tmp<tensorField> transformTensor(const tensorField& st) const;
|
||||
virtual tmp<tensorField> transform(const tensorField& tf) const;
|
||||
|
||||
//- Transform tensor using transformation tensorField
|
||||
virtual tensor transformTensor(const tensor& st) const;
|
||||
virtual tensor transform(const vector& p, const tensor& t) const;
|
||||
|
||||
//- Transform vectorField using transformation tensorField and return
|
||||
// symmetrical tensorField
|
||||
virtual tmp<symmTensorField> transformVector
|
||||
//- Transform diagTensor masquerading as a vector using transformation
|
||||
// tensor and return symmTensor
|
||||
virtual symmTensor transformDiagTensor
|
||||
(
|
||||
const vectorField& st
|
||||
const vector& p,
|
||||
const vector& v
|
||||
) const;
|
||||
|
||||
//- Transform vector using transformation tensor and return
|
||||
// symmetrical tensor
|
||||
virtual symmTensor transformVector(const vector& st) const;
|
||||
//- Transform diagTensorField masquerading as a vectorField
|
||||
// using transformation tensorField and return symmTensorField
|
||||
virtual tmp<symmTensorField> transformDiagTensor
|
||||
(
|
||||
const vectorField& vf
|
||||
) const;
|
||||
|
||||
|
||||
// Write
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2011-2020 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -125,24 +125,21 @@ Foam::STARCDCoordinateRotation::STARCDCoordinateRotation
|
||||
|
||||
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::vector Foam::STARCDCoordinateRotation::transform(const vector& st) const
|
||||
Foam::vector Foam::STARCDCoordinateRotation::transform(const vector& v) const
|
||||
{
|
||||
return (R_ & st);
|
||||
return (R_ & v);
|
||||
}
|
||||
|
||||
|
||||
Foam::vector Foam::STARCDCoordinateRotation::invTransform
|
||||
(
|
||||
const vector& st
|
||||
) const
|
||||
Foam::vector Foam::STARCDCoordinateRotation::invTransform(const vector& v) const
|
||||
{
|
||||
return (Rtr_ & st);
|
||||
return (Rtr_ & v);
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::vectorField> Foam::STARCDCoordinateRotation::transform
|
||||
(
|
||||
const vectorField& st
|
||||
const vectorField& vf
|
||||
) const
|
||||
{
|
||||
NotImplemented;
|
||||
@ -152,7 +149,7 @@ Foam::tmp<Foam::vectorField> Foam::STARCDCoordinateRotation::transform
|
||||
|
||||
Foam::tmp<Foam::vectorField> Foam::STARCDCoordinateRotation::invTransform
|
||||
(
|
||||
const vectorField& st
|
||||
const vectorField& vf
|
||||
) const
|
||||
{
|
||||
NotImplemented;
|
||||
@ -160,9 +157,9 @@ Foam::tmp<Foam::vectorField> Foam::STARCDCoordinateRotation::invTransform
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::tensorField> Foam::STARCDCoordinateRotation::transformTensor
|
||||
Foam::tmp<Foam::tensorField> Foam::STARCDCoordinateRotation::transform
|
||||
(
|
||||
const tensorField& st
|
||||
const tensorField& tf
|
||||
) const
|
||||
{
|
||||
NotImplemented;
|
||||
@ -170,38 +167,40 @@ Foam::tmp<Foam::tensorField> Foam::STARCDCoordinateRotation::transformTensor
|
||||
}
|
||||
|
||||
|
||||
Foam::tensor Foam::STARCDCoordinateRotation::transformTensor
|
||||
Foam::tensor Foam::STARCDCoordinateRotation::transform
|
||||
(
|
||||
const tensor& st
|
||||
const vector& p,
|
||||
const tensor& t
|
||||
) const
|
||||
{
|
||||
return (R_ & st & Rtr_);
|
||||
return (R_ & t & Rtr_);
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::symmTensorField> Foam::STARCDCoordinateRotation::
|
||||
transformVector
|
||||
transformDiagTensor
|
||||
(
|
||||
const vectorField& st
|
||||
const vectorField& vf
|
||||
) const
|
||||
{
|
||||
tmp<symmTensorField> tfld(new symmTensorField(st.size()));
|
||||
tmp<symmTensorField> tfld(new symmTensorField(vf.size()));
|
||||
symmTensorField& fld = tfld.ref();
|
||||
|
||||
forAll(fld, i)
|
||||
{
|
||||
fld[i] = transformPrincipal(R_, st[i]);
|
||||
fld[i] = transformVectorDiagTensor(R_, vf[i]);
|
||||
}
|
||||
return tfld;
|
||||
}
|
||||
|
||||
|
||||
Foam::symmTensor Foam::STARCDCoordinateRotation::transformVector
|
||||
Foam::symmTensor Foam::STARCDCoordinateRotation::transformDiagTensor
|
||||
(
|
||||
const vector& st
|
||||
const vector& p,
|
||||
const vector& v
|
||||
) const
|
||||
{
|
||||
return transformPrincipal(R_, st);
|
||||
return transformVectorDiagTensor(R_, v);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2011-2020 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -146,33 +146,37 @@ public:
|
||||
}
|
||||
|
||||
//- Transform vectorField using transformation tensor field
|
||||
virtual tmp<vectorField> transform(const vectorField& st) const;
|
||||
virtual tmp<vectorField> transform(const vectorField& vf) const;
|
||||
|
||||
//- Transform vector using transformation tensor
|
||||
virtual vector transform(const vector& st) const;
|
||||
virtual vector transform(const vector& v) const;
|
||||
|
||||
//- Inverse transform vectorField using transformation tensor field
|
||||
virtual tmp<vectorField> invTransform(const vectorField& st) const;
|
||||
virtual tmp<vectorField> invTransform(const vectorField& vf) const;
|
||||
|
||||
//- Inverse transform vector using transformation tensor
|
||||
virtual vector invTransform(const vector& st) const;
|
||||
virtual vector invTransform(const vector& v) const;
|
||||
|
||||
//- Transform tensor field using transformation tensorField
|
||||
virtual tmp<tensorField> transformTensor(const tensorField& st) const;
|
||||
virtual tmp<tensorField> transform(const tensorField& tf) const;
|
||||
|
||||
//- Transform tensor using transformation tensorField
|
||||
virtual tensor transformTensor(const tensor& st) const;
|
||||
virtual tensor transform(const vector& p, const tensor& t) const;
|
||||
|
||||
//- Transform vectorField using transformation tensorField and return
|
||||
// symmetrical tensorField
|
||||
virtual tmp<symmTensorField> transformVector
|
||||
//- Transform diagTensor masquerading as a vector using transformation
|
||||
// tensor and return symmTensor
|
||||
virtual symmTensor transformDiagTensor
|
||||
(
|
||||
const vectorField& st
|
||||
const vector& p,
|
||||
const vector& v
|
||||
) const;
|
||||
|
||||
//- Transform vector using transformation tensor and return
|
||||
// symmetrical tensor
|
||||
virtual symmTensor transformVector(const vector& st) const;
|
||||
//- Transform diagTensorField masquerading as a vectorField
|
||||
// using transformation tensorField and return symmTensorField
|
||||
virtual tmp<symmTensorField> transformDiagTensor
|
||||
(
|
||||
const vectorField& vf
|
||||
) const;
|
||||
|
||||
|
||||
// Write
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2011-2020 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -146,37 +146,37 @@ Foam::axesRotation::axesRotation
|
||||
|
||||
Foam::tmp<Foam::vectorField> Foam::axesRotation::transform
|
||||
(
|
||||
const vectorField& st
|
||||
const vectorField& vf
|
||||
) const
|
||||
{
|
||||
return (R_ & st);
|
||||
return (R_ & vf);
|
||||
}
|
||||
|
||||
|
||||
Foam::vector Foam::axesRotation::transform(const vector& st) const
|
||||
Foam::vector Foam::axesRotation::transform(const vector& v) const
|
||||
{
|
||||
return (R_ & st);
|
||||
return (R_ & v);
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::vectorField> Foam::axesRotation::invTransform
|
||||
(
|
||||
const vectorField& st
|
||||
const vectorField& vf
|
||||
) const
|
||||
{
|
||||
return (Rtr_ & st);
|
||||
return (Rtr_ & vf);
|
||||
}
|
||||
|
||||
|
||||
Foam::vector Foam::axesRotation::invTransform(const vector& st) const
|
||||
Foam::vector Foam::axesRotation::invTransform(const vector& v) const
|
||||
{
|
||||
return (Rtr_ & st);
|
||||
return (Rtr_ & v);
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::tensorField> Foam::axesRotation::transformTensor
|
||||
Foam::tmp<Foam::tensorField> Foam::axesRotation::transform
|
||||
(
|
||||
const tensorField& st
|
||||
const tensorField& tf
|
||||
) const
|
||||
{
|
||||
NotImplemented;
|
||||
@ -184,37 +184,39 @@ Foam::tmp<Foam::tensorField> Foam::axesRotation::transformTensor
|
||||
}
|
||||
|
||||
|
||||
Foam::tensor Foam::axesRotation::transformTensor
|
||||
Foam::tensor Foam::axesRotation::transform
|
||||
(
|
||||
const tensor& st
|
||||
const vector& p,
|
||||
const tensor& t
|
||||
) const
|
||||
{
|
||||
return (R_ & st & Rtr_);
|
||||
return (R_ & t & Rtr_);
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::symmTensorField> Foam::axesRotation::transformVector
|
||||
Foam::tmp<Foam::symmTensorField> Foam::axesRotation::transformDiagTensor
|
||||
(
|
||||
const vectorField& st
|
||||
const vectorField& vf
|
||||
) const
|
||||
{
|
||||
tmp<symmTensorField> tfld(new symmTensorField(st.size()));
|
||||
tmp<symmTensorField> tfld(new symmTensorField(vf.size()));
|
||||
symmTensorField& fld = tfld.ref();
|
||||
|
||||
forAll(fld, i)
|
||||
{
|
||||
fld[i] = transformPrincipal(R_, st[i]);
|
||||
fld[i] = transformVectorDiagTensor(R_, vf[i]);
|
||||
}
|
||||
return tfld;
|
||||
}
|
||||
|
||||
|
||||
Foam::symmTensor Foam::axesRotation::transformVector
|
||||
Foam::symmTensor Foam::axesRotation::transformDiagTensor
|
||||
(
|
||||
const vector& st
|
||||
const vector& p,
|
||||
const vector& v
|
||||
) const
|
||||
{
|
||||
return transformPrincipal(R_, st);
|
||||
return transformVectorDiagTensor(R_, v);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2011-2020 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -154,34 +154,38 @@ public:
|
||||
return Rtr_.z();
|
||||
}
|
||||
|
||||
//- Transform vectorField using transformation tensor field
|
||||
virtual tmp<vectorField> transform(const vectorField& st) const;
|
||||
|
||||
//- Transform vector using transformation tensor
|
||||
virtual vector transform(const vector& st) const;
|
||||
virtual vector transform(const vector& v) const;
|
||||
|
||||
//- Inverse transform vectorField using transformation tensor field
|
||||
virtual tmp<vectorField> invTransform(const vectorField& st) const;
|
||||
//- Transform vectorField using transformation tensor field
|
||||
virtual tmp<vectorField> transform(const vectorField& tf) const;
|
||||
|
||||
//- Inverse transform vector using transformation tensor
|
||||
virtual vector invTransform(const vector& st) const;
|
||||
virtual vector invTransform(const vector& v) const;
|
||||
|
||||
//- Transform tensor field using transformation tensorField
|
||||
virtual tmp<tensorField> transformTensor(const tensorField& st) const;
|
||||
//- Inverse transform vectorField using transformation tensor field
|
||||
virtual tmp<vectorField> invTransform(const vectorField& vf) const;
|
||||
|
||||
//- Transform tensor using transformation tensorField
|
||||
virtual tensor transformTensor(const tensor& st) const;
|
||||
virtual tensor transform(const vector& p, const tensor& t) const;
|
||||
|
||||
//- Transform vectorField using transformation tensorField and return
|
||||
// symmetric tensorField
|
||||
virtual tmp<symmTensorField> transformVector
|
||||
//- Transform tensor field using transformation tensorField
|
||||
virtual tmp<tensorField> transform(const tensorField& tf) const;
|
||||
|
||||
//- Transform diagTensor masquerading as a vector using transformation
|
||||
// tensor and return symmTensor
|
||||
virtual symmTensor transformDiagTensor
|
||||
(
|
||||
const vectorField& st
|
||||
const vector& p,
|
||||
const vector& v
|
||||
) const;
|
||||
|
||||
//- Transform vector using transformation tensor and return
|
||||
// symmetric tensor
|
||||
virtual symmTensor transformVector(const vector& st) const;
|
||||
//- Transform diagTensorField masquerading as a vectorField
|
||||
// using transformation tensorField and return symmTensorField
|
||||
virtual tmp<symmTensorField> transformDiagTensor
|
||||
(
|
||||
const vectorField& vf
|
||||
) const;
|
||||
|
||||
|
||||
// Member Operators
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2011-2020 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -39,7 +39,7 @@ namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::symmTensor Foam::coordinateRotation::transformPrincipal
|
||||
Foam::symmTensor Foam::coordinateRotation::transformVectorDiagTensor
|
||||
(
|
||||
const tensor& tt,
|
||||
const vector& st
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2011-2020 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -74,8 +74,12 @@ protected:
|
||||
|
||||
// Protected member functions
|
||||
|
||||
//- Transform principal
|
||||
symmTensor transformPrincipal(const tensor&, const vector&) const;
|
||||
//- Transform the vector as if it is a diagonal tensor
|
||||
symmTensor transformVectorDiagTensor
|
||||
(
|
||||
const tensor&,
|
||||
const vector&
|
||||
) const;
|
||||
|
||||
|
||||
public:
|
||||
@ -162,35 +166,43 @@ public:
|
||||
}
|
||||
|
||||
//- Transform vector using transformation tensor
|
||||
virtual vector transform(const vector& st) const = 0;
|
||||
virtual vector transform(const vector& v) const = 0;
|
||||
|
||||
//- Transform vectorField using transformation tensor field
|
||||
virtual tmp<vectorField> transform(const vectorField& st) const = 0;
|
||||
virtual tmp<vectorField> transform(const vectorField& vf) const = 0;
|
||||
|
||||
//- Inverse transform vector using transformation tensor
|
||||
virtual vector invTransform(const vector& st) const = 0;
|
||||
virtual vector invTransform(const vector& v) const = 0;
|
||||
|
||||
//- Inverse transform vectorField using transformation tensor field
|
||||
virtual tmp<vectorField> invTransform(const vectorField& st) const = 0;
|
||||
virtual tmp<vectorField> invTransform(const vectorField& vf) const = 0;
|
||||
|
||||
//- Transform tensor using transformation tensorField
|
||||
virtual tensor transformTensor(const tensor& st) const = 0;
|
||||
|
||||
//- Transform tensor field using transformation tensorField
|
||||
virtual tmp<tensorField> transformTensor
|
||||
virtual tensor transform
|
||||
(
|
||||
const tensorField& st
|
||||
const vector& p,
|
||||
const tensor& t
|
||||
) const = 0;
|
||||
|
||||
//- Transform vector using transformation tensor and return
|
||||
// symmetrical tensor
|
||||
virtual symmTensor transformVector(const vector& st) const = 0;
|
||||
|
||||
//- Transform vectorField using transformation tensorField and return
|
||||
// symmetrical tensorField
|
||||
virtual tmp<symmTensorField> transformVector
|
||||
//- Transform tensor field using transformation tensorField
|
||||
virtual tmp<tensorField> transform
|
||||
(
|
||||
const vectorField& st
|
||||
const tensorField& tf
|
||||
) const = 0;
|
||||
|
||||
//- Transform diagTensor masquerading as a vector using transformation
|
||||
// tensor and return symmTensor
|
||||
virtual symmTensor transformDiagTensor
|
||||
(
|
||||
const vector& p,
|
||||
const vector& v
|
||||
) const = 0;
|
||||
|
||||
//- Transform diagTensorField masquerading as a vectorField
|
||||
// using transformation tensorField and return symmTensorField
|
||||
virtual tmp<symmTensorField> transformDiagTensor
|
||||
(
|
||||
const vectorField& vf
|
||||
) const = 0;
|
||||
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2011-2021 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -204,7 +204,7 @@ Foam::vector Foam::cylindrical::invTransform
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::tensorField> Foam::cylindrical::transformTensor
|
||||
Foam::tmp<Foam::tensorField> Foam::cylindrical::transform
|
||||
(
|
||||
const tensorField& tf
|
||||
) const
|
||||
@ -219,17 +219,18 @@ Foam::tmp<Foam::tensorField> Foam::cylindrical::transformTensor
|
||||
}
|
||||
|
||||
|
||||
Foam::tensor Foam::cylindrical::transformTensor
|
||||
Foam::tensor Foam::cylindrical::transform
|
||||
(
|
||||
const vector& p,
|
||||
const tensor& t
|
||||
) const
|
||||
{
|
||||
NotImplemented;
|
||||
return Zero;
|
||||
const tensor R(this->R(p));
|
||||
return (R & t & R.T());
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::symmTensorField> Foam::cylindrical::transformVector
|
||||
Foam::tmp<Foam::symmTensorField> Foam::cylindrical::transformDiagTensor
|
||||
(
|
||||
const vectorField& vf
|
||||
) const
|
||||
@ -247,19 +248,19 @@ Foam::tmp<Foam::symmTensorField> Foam::cylindrical::transformVector
|
||||
const tensorField& R = Rptr_();
|
||||
forAll(fld, i)
|
||||
{
|
||||
fld[i] = transformPrincipal(R[i], vf[i]);
|
||||
fld[i] = transformVectorDiagTensor(R[i], vf[i]);
|
||||
}
|
||||
return tfld;
|
||||
}
|
||||
|
||||
|
||||
Foam::symmTensor Foam::cylindrical::transformVector
|
||||
Foam::symmTensor Foam::cylindrical::transformDiagTensor
|
||||
(
|
||||
const vector& p,
|
||||
const vector& v
|
||||
) const
|
||||
{
|
||||
NotImplemented;
|
||||
return Zero;
|
||||
return transformVectorDiagTensor(R(p), v);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2011-2020 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -185,18 +185,22 @@ public:
|
||||
virtual vector invTransform(const vector& v, const label cmptI) const;
|
||||
|
||||
//- Transform tensor using transformation tensorField
|
||||
virtual tensor transformTensor(const tensor& t) const;
|
||||
virtual tensor transform(const vector& p, const tensor& t) const;
|
||||
|
||||
//- Transform tensor field using transformation tensorField
|
||||
virtual tmp<tensorField> transformTensor(const tensorField& tf) const;
|
||||
virtual tmp<tensorField> transform(const tensorField& tf) const;
|
||||
|
||||
//- Transform vector using transformation tensor and return
|
||||
// symmetrical tensor
|
||||
virtual symmTensor transformVector(const vector& v) const;
|
||||
//- Transform diagTensor masquerading as a vector using transformation
|
||||
// tensor and return symmTensor
|
||||
virtual symmTensor transformDiagTensor
|
||||
(
|
||||
const vector& p,
|
||||
const vector& v
|
||||
) const;
|
||||
|
||||
//- Transform vectorField using transformation tensorField and return
|
||||
// symmetrical tensorField
|
||||
virtual tmp<symmTensorField> transformVector
|
||||
//- Transform diagTensorField masquerading as a vectorField
|
||||
// using transformation tensorField and return symmTensorField
|
||||
virtual tmp<symmTensorField> transformDiagTensor
|
||||
(
|
||||
const vectorField& vf
|
||||
) const;
|
||||
|
||||
@ -5,8 +5,8 @@ EXE_INC = \
|
||||
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
|
||||
-I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \
|
||||
-I$(LIB_SRC)/radiationModels/lnInclude \
|
||||
-I$(LIB_SRC)/MomentumTransportModels/compressible/lnInclude \
|
||||
-I$(LIB_SRC)/ThermophysicalTransportModels/lnInclude \
|
||||
-I$(LIB_SRC)/ThermophysicalTransportModels/solidThermophysicalTransportModels/lnInclude \
|
||||
-I$(LIB_SRC)/dynamicMesh/lnInclude \
|
||||
-I$(LIB_SRC)/mesh/extrudeModel/lnInclude \
|
||||
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||
@ -16,8 +16,8 @@ LIB_LIBS = \
|
||||
-lregionModels \
|
||||
-lsolidThermo \
|
||||
-lmomentumTransportModels \
|
||||
-lcompressibleMomentumTransportModels \
|
||||
-lthermophysicalTransportModels \
|
||||
-lsolidThermophysicalTransportModels \
|
||||
-lcoupledThermophysicalTransportModels \
|
||||
-lradiationModels \
|
||||
-ldynamicMesh \
|
||||
-lfiniteVolume \
|
||||
|
||||
@ -47,7 +47,7 @@ defineTypeNameAndDebug(thermalBaffle, 0);
|
||||
|
||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||
|
||||
tmp<volScalarField::Internal> thermalBaffle::calcDelta() const
|
||||
tmp<volScalarField::Internal> thermalBaffle::calcThickness() const
|
||||
{
|
||||
if (intCoupledPatchIDs_.size() != 2)
|
||||
{
|
||||
@ -131,7 +131,7 @@ tmp<volScalarField::Internal> thermalBaffle::calcDelta() const
|
||||
);
|
||||
|
||||
// Unpack distances into a dimensioned field and return
|
||||
tmp<volScalarField::Internal> tDelta
|
||||
tmp<volScalarField::Internal> tThickness
|
||||
(
|
||||
new volScalarField::Internal
|
||||
(
|
||||
@ -148,7 +148,7 @@ tmp<volScalarField::Internal> thermalBaffle::calcDelta() const
|
||||
dimLength
|
||||
)
|
||||
);
|
||||
volScalarField::Internal& delta = tDelta.ref();
|
||||
volScalarField::Internal& thickness = tThickness.ref();
|
||||
|
||||
forAll(cellInfoDeltas, celli)
|
||||
{
|
||||
@ -162,10 +162,10 @@ tmp<volScalarField::Internal> thermalBaffle::calcDelta() const
|
||||
<< exit(FatalError);
|
||||
}
|
||||
|
||||
delta[celli] = cellInfoDeltas[celli].data();
|
||||
thickness[celli] = cellInfoDeltas[celli].data();
|
||||
}
|
||||
|
||||
return tDelta;
|
||||
return tThickness;
|
||||
}
|
||||
|
||||
|
||||
@ -189,40 +189,17 @@ void thermalBaffle::solveEnergy()
|
||||
{
|
||||
DebugInFunction << endl;
|
||||
|
||||
// Modify thermo density and diffusivity to take into account the thickness
|
||||
volScalarField dByT
|
||||
(
|
||||
volScalarField::New
|
||||
(
|
||||
"dByT",
|
||||
regionMesh(),
|
||||
dimless,
|
||||
extrapolatedCalculatedFvPatchField<scalar>::typeName
|
||||
)
|
||||
);
|
||||
dByT.ref() = delta_/thickness_;
|
||||
dByT.correctBoundaryConditions();
|
||||
const volScalarField rho("rho", thermo_->rho()*dByT);
|
||||
const volScalarField alphahe("alphahe", thermo_->alphahe()*dByT);
|
||||
volScalarField& e = thermo_->he();
|
||||
const volScalarField& rho = thermo_->rho();
|
||||
|
||||
fvScalarMatrix hEqn
|
||||
(
|
||||
fvm::ddt(rho, he_)
|
||||
- fvm::laplacian(alphahe, he_)
|
||||
fvm::ddt(rho, e)
|
||||
+ thermophysicalTransport_->divq(e)
|
||||
==
|
||||
Q_ + Qs_/thickness_
|
||||
);
|
||||
|
||||
if (regionMesh().moving())
|
||||
{
|
||||
surfaceScalarField phiMesh
|
||||
(
|
||||
fvc::interpolate(rho*he_)*regionMesh().phi()
|
||||
);
|
||||
|
||||
hEqn -= fvc::div(phiMesh);
|
||||
}
|
||||
|
||||
hEqn.relax();
|
||||
hEqn.solve();
|
||||
|
||||
@ -243,22 +220,10 @@ thermalBaffle::thermalBaffle
|
||||
)
|
||||
:
|
||||
regionModel(mesh, "thermalBaffle", modelType, dict, true),
|
||||
delta_(calcDelta()),
|
||||
thickness_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"thickness",
|
||||
regionMesh().pointsInstance(),
|
||||
regionMesh(),
|
||||
IOobject::READ_IF_PRESENT,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
delta_
|
||||
),
|
||||
thickness_(calcThickness()),
|
||||
nNonOrthCorr_(solution().lookup<label>("nNonOrthCorr")),
|
||||
thermo_(solidThermo::New(regionMesh())),
|
||||
he_(thermo_->he()),
|
||||
thermophysicalTransport_(solidThermophysicalTransportModel::New(thermo())),
|
||||
Qs_
|
||||
(
|
||||
IOobject
|
||||
@ -319,36 +284,6 @@ void thermalBaffle::evolveRegion()
|
||||
}
|
||||
|
||||
|
||||
const tmp<volScalarField> thermalBaffle::Cp() const
|
||||
{
|
||||
return thermo_->Cp();
|
||||
}
|
||||
|
||||
|
||||
const volScalarField& thermalBaffle::kappaRad() const
|
||||
{
|
||||
return radiation_->absorptionEmission().a();
|
||||
}
|
||||
|
||||
|
||||
const volScalarField& thermalBaffle::rho() const
|
||||
{
|
||||
return thermo_->rho();
|
||||
}
|
||||
|
||||
|
||||
const volScalarField& thermalBaffle::kappa() const
|
||||
{
|
||||
return thermo_->kappa();
|
||||
}
|
||||
|
||||
|
||||
const volScalarField& thermalBaffle::T() const
|
||||
{
|
||||
return thermo_->T();
|
||||
}
|
||||
|
||||
|
||||
const solidThermo& thermalBaffle::thermo() const
|
||||
{
|
||||
return thermo_;
|
||||
@ -362,7 +297,7 @@ void thermalBaffle::info()
|
||||
forAll(coupledPatches, i)
|
||||
{
|
||||
const label patchi = coupledPatches[i];
|
||||
const fvPatchScalarField& phe = he_.boundaryField()[patchi];
|
||||
const fvPatchScalarField& phe = thermo_->he().boundaryField()[patchi];
|
||||
const word patchName = regionMesh().boundary()[patchi].name();
|
||||
|
||||
Info<< indent << "Q : " << patchName << indent
|
||||
|
||||
@ -36,10 +36,10 @@ SourceFiles
|
||||
#ifndef thermalBaffle_H
|
||||
#define thermalBaffle_H
|
||||
|
||||
#include "radiationModel.H"
|
||||
#include "regionModel.H"
|
||||
#include "solidThermo.H"
|
||||
#include "volFieldsFwd.H"
|
||||
#include "solidThermophysicalTransportModel.H"
|
||||
#include "radiationModel.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
@ -59,7 +59,7 @@ class thermalBaffle
|
||||
// Private Member Functions
|
||||
|
||||
//- Calculate the baffle mesh thickness
|
||||
tmp<volScalarField::Internal> calcDelta() const;
|
||||
tmp<volScalarField::Internal> calcThickness() const;
|
||||
|
||||
|
||||
protected:
|
||||
@ -68,10 +68,7 @@ protected:
|
||||
|
||||
// Geometric parameters
|
||||
|
||||
//- Baffle mesh thickness
|
||||
volScalarField::Internal delta_;
|
||||
|
||||
//- Baffle physical thickness
|
||||
//- Baffle thickness
|
||||
volScalarField::Internal thickness_;
|
||||
|
||||
|
||||
@ -86,8 +83,11 @@ protected:
|
||||
//- Solid thermo
|
||||
autoPtr<solidThermo> thermo_;
|
||||
|
||||
//- Enthalpy/internal energy
|
||||
volScalarField& he_;
|
||||
|
||||
// Thermophysical transport
|
||||
|
||||
//- Pointer to the solid thermophysical transport model
|
||||
autoPtr<solidThermophysicalTransportModel> thermophysicalTransport_;
|
||||
|
||||
|
||||
// Source term fields
|
||||
@ -154,24 +154,6 @@ public:
|
||||
const solidThermo& thermo() const;
|
||||
|
||||
|
||||
// Fields
|
||||
|
||||
//- Return the film specific heat capacity [J/kg/K]
|
||||
const tmp<volScalarField> Cp() const;
|
||||
|
||||
//- Return solid absorptivity [1/m]
|
||||
const volScalarField& kappaRad() const;
|
||||
|
||||
//- Return temperature [K]
|
||||
const volScalarField& T() const;
|
||||
|
||||
//- Return density [Kg/m^3]
|
||||
const volScalarField& rho() const;
|
||||
|
||||
//- Return thermal conductivity [W/m/K]
|
||||
const volScalarField& kappa() const;
|
||||
|
||||
|
||||
// Evolution
|
||||
|
||||
//- Pre-evolve thermal baffle
|
||||
|
||||
@ -268,6 +268,8 @@ Foam::basicThermo::implementation::implementation
|
||||
:
|
||||
physicalProperties(mesh, phaseName),
|
||||
|
||||
mesh_(mesh),
|
||||
|
||||
phaseName_(phaseName),
|
||||
|
||||
T_
|
||||
|
||||
@ -200,6 +200,9 @@ public:
|
||||
//- Non-const access the properties dictionary
|
||||
virtual IOdictionary& properties() = 0;
|
||||
|
||||
//- Return const access to the mesh
|
||||
virtual const fvMesh& mesh() const = 0;
|
||||
|
||||
//- Phase name
|
||||
virtual const word& phaseName() const = 0;
|
||||
|
||||
@ -427,6 +430,12 @@ class basicThermo::implementation
|
||||
virtual public basicThermo,
|
||||
public physicalProperties
|
||||
{
|
||||
// Private Member Data
|
||||
|
||||
//- Reference to the mesh
|
||||
const fvMesh& mesh_;
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
// Protected data
|
||||
@ -484,6 +493,12 @@ public:
|
||||
return *this;
|
||||
}
|
||||
|
||||
//- Return const access to the mesh
|
||||
virtual const fvMesh& mesh() const
|
||||
{
|
||||
return mesh_;
|
||||
}
|
||||
|
||||
//- Phase name
|
||||
virtual const word& phaseName() const
|
||||
{
|
||||
|
||||
@ -53,7 +53,7 @@ Foam::heThermo<BasicThermo, MixtureType>::volScalarFieldProperty
|
||||
volScalarField::New
|
||||
(
|
||||
IOobject::groupName(psiName, this->group()),
|
||||
this->T_.mesh(),
|
||||
this->mesh(),
|
||||
psiDim
|
||||
)
|
||||
);
|
||||
|
||||
@ -70,13 +70,13 @@ Foam::basicChemistryModel::basicChemistryModel
|
||||
IOobject
|
||||
(
|
||||
thermo.phasePropertyName("chemistryProperties"),
|
||||
thermo.T().mesh().time().constant(),
|
||||
thermo.T().mesh(),
|
||||
thermo.mesh().time().constant(),
|
||||
thermo.mesh(),
|
||||
IOobject::MUST_READ_IF_MODIFIED,
|
||||
IOobject::NO_WRITE
|
||||
)
|
||||
),
|
||||
mesh_(thermo.T().mesh()),
|
||||
mesh_(thermo.mesh()),
|
||||
thermo_(thermo),
|
||||
chemistry_(lookup("chemistry")),
|
||||
deltaTChemIni_(lookup<scalar>("initialChemicalTimeStep")),
|
||||
|
||||
@ -74,7 +74,7 @@ protected:
|
||||
|
||||
// Protected data
|
||||
|
||||
//- Reference to the mesh database
|
||||
//- Reference to the mesh
|
||||
const fvMesh& mesh_;
|
||||
|
||||
//- Reference to the thermo
|
||||
@ -140,7 +140,7 @@ public:
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Return const access to the mesh database
|
||||
//- Return const access to the mesh
|
||||
inline const fvMesh& mesh() const;
|
||||
|
||||
//- Return const access to the thermo
|
||||
|
||||
@ -39,8 +39,8 @@ Foam::autoPtr<Foam::basicChemistryModel> Foam::basicChemistryModel::New
|
||||
IOobject
|
||||
(
|
||||
thermo.phasePropertyName("chemistryProperties"),
|
||||
thermo.T().mesh().time().constant(),
|
||||
thermo.T().mesh(),
|
||||
thermo.mesh().time().constant(),
|
||||
thermo.mesh(),
|
||||
IOobject::MUST_READ,
|
||||
IOobject::NO_WRITE,
|
||||
false
|
||||
|
||||
@ -81,7 +81,7 @@ Foam::chemistryModel<ThermoType>::chemistryModel
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
thermo.T().mesh(),
|
||||
thermo.mesh(),
|
||||
dimensionedScalar(dimMass/dimVolume/dimTime, 0)
|
||||
)
|
||||
);
|
||||
|
||||
@ -72,7 +72,7 @@ Foam::laminarFlameSpeedModels::constant::operator()() const
|
||||
return volScalarField::New
|
||||
(
|
||||
"Su0",
|
||||
psiuMulticomponentThermo_.T().mesh(),
|
||||
psiuMulticomponentThermo_.mesh(),
|
||||
Su_
|
||||
);
|
||||
}
|
||||
|
||||
@ -120,7 +120,7 @@ public:
|
||||
//- Isotropic thermal conductivity [W/m/K]
|
||||
inline scalar kappa(const scalar p, const scalar T) const;
|
||||
|
||||
//- Un-isotropic thermal conductivity [W/m/K]
|
||||
//- Anisotropic thermal conductivity [W/m/K]
|
||||
inline vector Kappa(const scalar p, const scalar T) const;
|
||||
|
||||
//- Dynamic viscosity [kg/m/s]
|
||||
|
||||
@ -121,7 +121,7 @@ public:
|
||||
//- Isotropic thermal conductivity [W/m/K]
|
||||
inline scalar kappa(const scalar p, const scalar T) const;
|
||||
|
||||
//- Un-isotropic thermal conductivity [W/m/K]
|
||||
//- Anisotropic thermal conductivity [W/m/K]
|
||||
inline vector Kappa(const scalar p, const scalar T) const;
|
||||
|
||||
//- Dynamic viscosity [kg/m/s]
|
||||
|
||||
@ -190,7 +190,7 @@ template<class BasicSolidThermo, class MixtureType>
|
||||
Foam::tmp<Foam::volVectorField>
|
||||
Foam::heSolidThermo<BasicSolidThermo, MixtureType>::Kappa() const
|
||||
{
|
||||
const fvMesh& mesh = this->T_.mesh();
|
||||
const fvMesh& mesh = this->mesh();
|
||||
|
||||
tmp<volVectorField> tKappa
|
||||
(
|
||||
@ -268,113 +268,4 @@ Foam::heSolidThermo<BasicSolidThermo, MixtureType>::Kappa
|
||||
}
|
||||
|
||||
|
||||
template<class BasicSolidThermo, class MixtureType>
|
||||
Foam::tmp<Foam::volSymmTensorField>
|
||||
Foam::heSolidThermo<BasicSolidThermo, MixtureType>::KappaLocal() const
|
||||
{
|
||||
const fvMesh& mesh = this->T_.mesh();
|
||||
|
||||
const coordinateSystem coordinates
|
||||
(
|
||||
coordinateSystem::New(mesh, this->properties())
|
||||
);
|
||||
|
||||
const tmp<volVectorField> tKappa(Kappa());
|
||||
const volVectorField& Kappa = tKappa();
|
||||
|
||||
tmp<volSymmTensorField> tKappaLocal
|
||||
(
|
||||
volSymmTensorField::New
|
||||
(
|
||||
"KappaLocal",
|
||||
mesh,
|
||||
dimensionedSymmTensor(Kappa.dimensions(), Zero)
|
||||
)
|
||||
);
|
||||
volSymmTensorField& KappaLocal = tKappaLocal.ref();
|
||||
|
||||
KappaLocal.primitiveFieldRef() =
|
||||
coordinates.R(mesh.C()).transformVector(Kappa);
|
||||
|
||||
forAll(KappaLocal.boundaryField(), patchi)
|
||||
{
|
||||
KappaLocal.boundaryFieldRef()[patchi] =
|
||||
coordinates.R(mesh.boundary()[patchi].Cf())
|
||||
.transformVector(Kappa.boundaryField()[patchi]);
|
||||
}
|
||||
|
||||
return tKappaLocal;
|
||||
}
|
||||
|
||||
|
||||
template<class BasicSolidThermo, class MixtureType>
|
||||
Foam::tmp<Foam::symmTensorField>
|
||||
Foam::heSolidThermo<BasicSolidThermo, MixtureType>::KappaLocal
|
||||
(
|
||||
const label patchi
|
||||
) const
|
||||
{
|
||||
const fvMesh& mesh = this->T_.mesh();
|
||||
|
||||
const coordinateSystem coordinates
|
||||
(
|
||||
coordinateSystem::New(mesh, this->properties())
|
||||
);
|
||||
|
||||
return
|
||||
coordinates.R(mesh.boundary()[patchi].Cf())
|
||||
.transformVector(Kappa(patchi));
|
||||
}
|
||||
|
||||
|
||||
template<class BasicSolidThermo, class MixtureType>
|
||||
Foam::tmp<Foam::surfaceScalarField>
|
||||
Foam::heSolidThermo<BasicSolidThermo, MixtureType>::q() const
|
||||
{
|
||||
const fvMesh& mesh = this->T_.mesh();
|
||||
mesh.schemes().setFluxRequired(this->T_.name());
|
||||
|
||||
return
|
||||
- (
|
||||
isotropic()
|
||||
? fvm::laplacian(this->kappa(), this->T_)().flux()
|
||||
: fvm::laplacian(KappaLocal(), this->T_)().flux()
|
||||
)/mesh.magSf();
|
||||
}
|
||||
|
||||
|
||||
template<class BasicSolidThermo, class MixtureType>
|
||||
Foam::tmp<Foam::fvScalarMatrix>
|
||||
Foam::heSolidThermo<BasicSolidThermo, MixtureType>::divq
|
||||
(
|
||||
volScalarField& e
|
||||
) const
|
||||
{
|
||||
return
|
||||
- (
|
||||
isotropic()
|
||||
? fvc::laplacian(this->kappa(), this->T_)
|
||||
+ correction
|
||||
(
|
||||
fvm::laplacian
|
||||
(
|
||||
this->kappa()/this->Cv(),
|
||||
e,
|
||||
"laplacian(alphae,e)"
|
||||
)
|
||||
)
|
||||
: fvc::laplacian(KappaLocal(), this->T_)
|
||||
+ correction
|
||||
(
|
||||
fvm::laplacian
|
||||
(
|
||||
KappaLocal()/this->Cv(),
|
||||
e,
|
||||
"laplacian(alphae,e)"
|
||||
)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2011-2021 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -56,9 +56,6 @@ class heSolidThermo
|
||||
//- Calculate the thermo variables
|
||||
void calculate();
|
||||
|
||||
//- Return the anisotropic Kappa in the local coordinate system
|
||||
tmp<volSymmTensorField> KappaLocal() const;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
@ -103,16 +100,6 @@ public:
|
||||
//- Anisotropic thermal conductivity [W/m/K]
|
||||
virtual tmp<vectorField> Kappa(const label patchi) const;
|
||||
|
||||
//- Anisotropic thermal conductivity for patch
|
||||
// in the local coordinate system [W/m/K]
|
||||
virtual tmp<symmTensorField> KappaLocal(const label patchi) const;
|
||||
|
||||
//- Return the heat flux [W/m^2]
|
||||
virtual tmp<surfaceScalarField> q() const;
|
||||
|
||||
//- Return the source term for the energy equation
|
||||
virtual tmp<fvScalarMatrix> divq(volScalarField& he) const;
|
||||
|
||||
|
||||
// Member Operators
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration | Website: https://openfoam.org
|
||||
\\ / A nd | Copyright (C) 2011-2021 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2022 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -117,16 +117,6 @@ public:
|
||||
|
||||
//- Anisotropic thermal conductivity for patch [W/m/K]
|
||||
virtual tmp<vectorField> Kappa(const label patchi) const = 0;
|
||||
|
||||
//- Anisotropic thermal conductivity for patch
|
||||
// in the local coordinate system [W/m/K]
|
||||
virtual tmp<symmTensorField> KappaLocal(const label patchi) const = 0;
|
||||
|
||||
//- Return the heat flux [W]
|
||||
virtual tmp<surfaceScalarField> q() const = 0;
|
||||
|
||||
//- Return the source term for the energy equation
|
||||
virtual tmp<fvScalarMatrix> divq(volScalarField& he) const = 0;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@ -31,8 +31,7 @@ gradSchemes
|
||||
|
||||
laplacianSchemes
|
||||
{
|
||||
default none;
|
||||
laplacian(alphahe,e) Gauss linear uncorrected;
|
||||
default Gauss linear uncorrected;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user