mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
ENH: Modification of solid thermo, thermo baffles, pyrolysis and
tutorial, solvers solve for h in the solid
This commit is contained in:
@ -43,7 +43,7 @@ Description
|
||||
#include "regionProperties.H"
|
||||
#include "compressibleCourantNo.H"
|
||||
#include "solidRegionDiffNo.H"
|
||||
#include "basicSolidThermo.H"
|
||||
#include "solidThermo.H"
|
||||
#include "radiationModel.H"
|
||||
#include "porousZones.H"
|
||||
#include "IObasicSourceList.H"
|
||||
|
||||
@ -34,7 +34,7 @@ Description
|
||||
#include "turbulenceModel.H"
|
||||
#include "fixedGradientFvPatchFields.H"
|
||||
#include "regionProperties.H"
|
||||
#include "basicSolidThermo.H"
|
||||
#include "solidThermo.H"
|
||||
#include "radiationModel.H"
|
||||
#include "porousZones.H"
|
||||
#include "IObasicSourceList.H"
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
// Initialise solid field pointer lists
|
||||
PtrList<basicSolidThermo> porousSolidThermos(porousSolidRegions.size());
|
||||
PtrList<solidThermo> porousSolidThermos(porousSolidRegions.size());
|
||||
PtrList<IObasicSourceList> solidHeatSources(porousSolidRegions.size());
|
||||
PtrList<volScalarField> betavSolid(porousSolidRegions.size());
|
||||
|
||||
@ -14,7 +14,7 @@
|
||||
porousSolidThermos.set
|
||||
(
|
||||
i,
|
||||
basicSolidThermo::New(porousSolidRegions[i])
|
||||
solidThermo::New(porousSolidRegions[i])
|
||||
);
|
||||
Info<< " Adding sources\n" << endl;
|
||||
solidHeatSources.set
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
const fvMesh& mesh = porousSolidRegions[i];
|
||||
|
||||
basicSolidThermo& thermo = porousSolidThermos[i];
|
||||
solidThermo& thermo = porousSolidThermos[i];
|
||||
const volScalarField& betav = betavSolid[i];
|
||||
|
||||
tmp<volScalarField> trho = thermo.rho();
|
||||
@ -15,9 +15,9 @@
|
||||
const volScalarField& kappa = tkappa();
|
||||
//const volSymmTensorField& K = tK();
|
||||
|
||||
tmp<volScalarField> trhoCp = cp*rho;
|
||||
const volScalarField& rhoCp = trhoCp();
|
||||
tmp<volScalarField> talpha = thermo.alpha();
|
||||
const volScalarField& alpha = talpha();
|
||||
|
||||
volScalarField& T = thermo.T();
|
||||
volScalarField& h = thermo.he();
|
||||
|
||||
IObasicSourceList& sources = solidHeatSources[i];
|
||||
|
||||
@ -1,17 +1,17 @@
|
||||
{
|
||||
for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++)
|
||||
{
|
||||
tmp<fvScalarMatrix> TEqn
|
||||
tmp<fvScalarMatrix> hEqn
|
||||
(
|
||||
- fvm::laplacian(betav*kappa, T, "laplacian(K,T)")
|
||||
+ sources(rhoCp, T)
|
||||
- fvm::laplacian(betav*alpha, h, "laplacian(alpha,h)")
|
||||
+ sources(rho, h)
|
||||
);
|
||||
|
||||
TEqn().relax();
|
||||
TEqn().solve();
|
||||
hEqn().relax();
|
||||
hEqn().solve();
|
||||
}
|
||||
|
||||
Info<< "Min/max T:" << min(T).value() << ' ' << max(T).value() << endl;
|
||||
}
|
||||
|
||||
thermo.correct();
|
||||
|
||||
Info<< "Min/max T:" << min(thermo.T()) << ' ' << max(thermo.T()) << endl;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
// Initialise solid field pointer lists
|
||||
PtrList<basicSolidThermo> thermos(solidRegions.size());
|
||||
PtrList<solidThermo> thermos(solidRegions.size());
|
||||
|
||||
// Populate solid field pointer lists
|
||||
forAll(solidRegions, i)
|
||||
@ -11,6 +11,6 @@
|
||||
thermos.set
|
||||
(
|
||||
i,
|
||||
basicSolidThermo::New(solidRegions[i])
|
||||
solidThermo::New(solidRegions[i])
|
||||
);
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fvMesh& mesh = solidRegions[i];
|
||||
basicSolidThermo& thermo = thermos[i];
|
||||
solidThermo& thermo = thermos[i];
|
||||
|
||||
tmp<volScalarField> trho = thermo.rho();
|
||||
const volScalarField& rho = trho();
|
||||
@ -11,4 +11,7 @@
|
||||
//tmp<volSymmTensorField> tkappa = thermo.directionalkappa();
|
||||
const volScalarField& kappa = tkappa();
|
||||
|
||||
volScalarField& T = thermo.T();
|
||||
tmp<volScalarField> talpha = thermo.alpha();
|
||||
const volScalarField& alpha = talpha();
|
||||
|
||||
volScalarField& h = thermo.he();
|
||||
|
||||
@ -1,16 +1,15 @@
|
||||
{
|
||||
for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++)
|
||||
{
|
||||
fvScalarMatrix tEqn
|
||||
fvScalarMatrix hEqn
|
||||
(
|
||||
-fvm::laplacian(kappa, T)
|
||||
-fvm::laplacian(alpha, h)
|
||||
);
|
||||
tEqn.relax();
|
||||
tEqn.solve();
|
||||
hEqn.relax();
|
||||
hEqn.solve();
|
||||
}
|
||||
|
||||
Info<< "Min/max T:" << min(T).value() << ' '
|
||||
<< max(T).value() << endl;
|
||||
}
|
||||
|
||||
thermo.correct();
|
||||
|
||||
Info<< "Min/max T:" << min(thermo.T()) << ' ' << max(thermo.T()) << endl;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
// Initialise solid field pointer lists
|
||||
PtrList<basicSolidThermo> porousSolidThermos(porousSolidRegions.size());
|
||||
PtrList<solidThermo> porousSolidThermos(porousSolidRegions.size());
|
||||
PtrList<IObasicSourceList> solidHeatSources(porousSolidRegions.size());
|
||||
PtrList<volScalarField> betavSolid(porousSolidRegions.size());
|
||||
|
||||
@ -14,7 +14,7 @@
|
||||
porousSolidThermos.set
|
||||
(
|
||||
i,
|
||||
basicSolidThermo::New(porousSolidRegions[i])
|
||||
solidThermo::New(porousSolidRegions[i])
|
||||
);
|
||||
Info<< " Adding sources\n" << endl;
|
||||
solidHeatSources.set
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
fvMesh& mesh = porousSolidRegions[i];
|
||||
|
||||
basicSolidThermo& thermo = porousSolidThermos[i];
|
||||
solidThermo& thermo = porousSolidThermos[i];
|
||||
const volScalarField& betav = betavSolid[i];
|
||||
|
||||
tmp<volScalarField> trho = thermo.rho();
|
||||
@ -15,9 +15,12 @@
|
||||
const volScalarField& kappa = tkappa();
|
||||
//const volSymmTensorField& K = tK();
|
||||
|
||||
tmp<volScalarField> trhoCp = cp*rho;
|
||||
const volScalarField& rhoCp = trhoCp();
|
||||
//tmp<volScalarField> trhoCp = cp*rho;
|
||||
//const volScalarField& rhoCp = trhoCp();
|
||||
|
||||
volScalarField& T = thermo.T();
|
||||
tmp<volScalarField> talpha = thermo.alpha();
|
||||
const volScalarField& alpha = talpha();
|
||||
|
||||
volScalarField& h = thermo.he();
|
||||
|
||||
IObasicSourceList& sources = solidHeatSources[i];
|
||||
|
||||
@ -6,22 +6,22 @@ if (finalIter)
|
||||
{
|
||||
for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++)
|
||||
{
|
||||
tmp<fvScalarMatrix> TEqn
|
||||
tmp<fvScalarMatrix> hEqn
|
||||
(
|
||||
fvm::ddt(betav*rho*cp, T)
|
||||
- fvm::laplacian(betav*kappa, T, "laplacian(K,T)")
|
||||
+ sources(rhoCp, T)
|
||||
fvm::ddt(betav*rho, h)
|
||||
- fvm::laplacian(betav*alpha, h, "laplacian(alpha,h)")
|
||||
+ sources(rho, h)
|
||||
);
|
||||
|
||||
TEqn().relax();
|
||||
TEqn().solve(mesh.solver(T.select(finalIter)));
|
||||
hEqn().relax();
|
||||
hEqn().solve(mesh.solver(h.select(finalIter)));
|
||||
}
|
||||
|
||||
Info<< "Min/max T:" << min(T).value() << ' ' << max(T).value() << endl;
|
||||
}
|
||||
|
||||
thermo.correct();
|
||||
|
||||
Info<< "Min/max T:" << min(thermo.T()) << ' ' << max(thermo.T()) << endl;
|
||||
|
||||
if (finalIter)
|
||||
{
|
||||
mesh.data::remove("finalIteration");
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
// Initialise solid field pointer lists
|
||||
PtrList<basicSolidThermo> thermos(solidRegions.size());
|
||||
PtrList<solidThermo> thermos(solidRegions.size());
|
||||
|
||||
// Populate solid field pointer lists
|
||||
forAll(solidRegions, i)
|
||||
@ -8,5 +8,5 @@
|
||||
<< solidRegions[i].name() << nl << endl;
|
||||
|
||||
Info<< " Adding to thermos\n" << endl;
|
||||
thermos.set(i, basicSolidThermo::New(solidRegions[i]));
|
||||
thermos.set(i, solidThermo::New(solidRegions[i]));
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
fvMesh& mesh = solidRegions[i];
|
||||
basicSolidThermo& thermo = thermos[i];
|
||||
solidThermo& thermo = thermos[i];
|
||||
|
||||
tmp<volScalarField> trho = thermo.rho();
|
||||
const volScalarField& rho = trho();
|
||||
@ -7,9 +7,12 @@
|
||||
tmp<volScalarField> tcp = thermo.Cp();
|
||||
const volScalarField& cp = tcp();
|
||||
|
||||
tmp<volScalarField> talpha = thermo.alpha();
|
||||
const volScalarField& alpha = talpha();
|
||||
tmp<volScalarField> tkappa = thermo.kappa();
|
||||
const volScalarField& kappa = tkappa();
|
||||
|
||||
//tmp<volSymmTensorField> tkappa = thermo.directionalKappa();
|
||||
//const volSymmTensorField& kappa = tkappa();
|
||||
|
||||
volScalarField& T = thermo.T();
|
||||
volScalarField& h = thermo.he();
|
||||
|
||||
@ -6,20 +6,20 @@ if (finalIter)
|
||||
{
|
||||
for (int nonOrth=0; nonOrth<=nNonOrthCorr; nonOrth++)
|
||||
{
|
||||
tmp<fvScalarMatrix> TEqn
|
||||
tmp<fvScalarMatrix> hEqn
|
||||
(
|
||||
fvm::ddt(rho*cp, T)
|
||||
- fvm::laplacian(kappa, T)
|
||||
fvm::ddt(rho, h)
|
||||
- fvm::laplacian(alpha, h)
|
||||
);
|
||||
TEqn().relax();
|
||||
TEqn().solve(mesh.solver(T.select(finalIter)));
|
||||
hEqn().relax();
|
||||
hEqn().solve(mesh.solver(h.select(finalIter)));
|
||||
}
|
||||
|
||||
Info<< "Min/max T:" << min(T) << ' ' << max(T) << endl;
|
||||
}
|
||||
|
||||
thermo.correct();
|
||||
|
||||
Info<< "Min/max T:" << min(thermo.T()) << ' ' << max(thermo.T()) << endl;
|
||||
|
||||
if (finalIter)
|
||||
{
|
||||
mesh.data::remove("finalIteration");
|
||||
|
||||
@ -51,7 +51,7 @@ void noPyrolysis::constructThermoChemistry()
|
||||
solidChemistryModel::New(regionMesh()).ptr()
|
||||
);
|
||||
|
||||
solidThermo_.reset(&solidChemistry_->solidThermo());
|
||||
solidThermo_.reset(&solidChemistry_->solid());
|
||||
}
|
||||
|
||||
bool noPyrolysis::read()
|
||||
@ -151,13 +151,13 @@ const tmp<volScalarField> noPyrolysis::Cp() const
|
||||
}
|
||||
|
||||
|
||||
const volScalarField& noPyrolysis::kappaRad() const
|
||||
tmp<volScalarField> noPyrolysis::kappaRad() const
|
||||
{
|
||||
return (solidThermo_->kappaRad());
|
||||
}
|
||||
|
||||
|
||||
const volScalarField& noPyrolysis::kappa() const
|
||||
tmp<volScalarField> noPyrolysis::kappa() const
|
||||
{
|
||||
return (solidThermo_->kappa());
|
||||
}
|
||||
|
||||
@ -37,6 +37,7 @@ SourceFiles
|
||||
|
||||
#include "pyrolysisModel.H"
|
||||
#include "volFieldsFwd.H"
|
||||
#include "solidChemistryModel.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
@ -83,7 +84,7 @@ protected:
|
||||
autoPtr<solidChemistryModel> solidChemistry_;
|
||||
|
||||
//- Reference to solid thermo
|
||||
autoPtr<basicSolidThermo> solidThermo_;
|
||||
autoPtr<solidReactionThermo> solidThermo_;
|
||||
|
||||
|
||||
public:
|
||||
@ -124,10 +125,10 @@ public:
|
||||
virtual const tmp<volScalarField> Cp() const;
|
||||
|
||||
//- Return the region absorptivity [1/m]
|
||||
virtual const volScalarField& kappaRad() const;
|
||||
virtual tmp<volScalarField> kappaRad() const;
|
||||
|
||||
//- Return the region thermal conductivity [W/m/k]
|
||||
virtual const volScalarField& kappa() const;
|
||||
virtual tmp<volScalarField> kappa() const;
|
||||
|
||||
//- Return the total gas mass flux to primary region [kg/m2/s]
|
||||
virtual const surfaceScalarField& phiGas() const;
|
||||
|
||||
@ -37,8 +37,6 @@ SourceFiles
|
||||
|
||||
#include "runTimeSelectionTables.H"
|
||||
#include "volFieldsFwd.H"
|
||||
#include "solidChemistryModel.H"
|
||||
#include "basicSolidThermo.H"
|
||||
#include "regionModel1D.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
@ -218,10 +216,10 @@ public:
|
||||
virtual const tmp<volScalarField> Cp() const = 0;
|
||||
|
||||
//- Return the region absorptivity [1/m]
|
||||
virtual const volScalarField& kappaRad() const = 0;
|
||||
virtual tmp<volScalarField> kappaRad() const = 0;
|
||||
|
||||
//- Return the region thermal conductivity [W/m/k]
|
||||
virtual const volScalarField& kappa() const = 0;
|
||||
virtual tmp<volScalarField> kappa() const = 0;
|
||||
|
||||
//- Return the total gas mass flux to primary region [kg/m2/s]
|
||||
virtual const surfaceScalarField& phiGas() const = 0;
|
||||
|
||||
@ -54,7 +54,7 @@ void reactingOneDim::readReactingOneDimControls()
|
||||
{
|
||||
const dictionary& solution = this->solution().subDict("SIMPLE");
|
||||
solution.lookup("nNonOrthCorr") >> nNonOrthCorr_;
|
||||
time_.controlDict().lookup("maxDi") >> maxDiff_;
|
||||
time().controlDict().lookup("maxDi") >> maxDiff_;
|
||||
|
||||
coeffs().lookup("radFluxName") >> primaryRadFluxName_;
|
||||
coeffs().lookup("minimumDelta") >> minimumDelta_;
|
||||
@ -107,6 +107,8 @@ void reactingOneDim::updateQr()
|
||||
Qrp = max(Qrp, scalar(0.0));
|
||||
}
|
||||
|
||||
const volScalarField kappaRad_(kappaRad());
|
||||
|
||||
// Propagate Qr through 1-D regions
|
||||
forAll(intCoupledPatchIDs_, i)
|
||||
{
|
||||
@ -147,18 +149,17 @@ void reactingOneDim::updatePhiGas()
|
||||
forAll(gasTable, gasI)
|
||||
{
|
||||
tmp<volScalarField> tHsiGas =
|
||||
solidChemistry_->gasHs(p, T_, gasI);
|
||||
solidChemistry_->gasHs(solidThermo_.p(), solidThermo_.T(), gasI);
|
||||
|
||||
tmp<volScalarField> tRRiGas = solidChemistry_->RRg(gasI);
|
||||
|
||||
const volScalarField& HsiGas = tHsiGas();
|
||||
const volScalarField& RRiGas = tRRiGas();
|
||||
|
||||
const surfaceScalarField HsiGasf(fvc::interpolate(HsiGas));
|
||||
const surfaceScalarField RRiGasf(fvc::interpolate(RRiGas));
|
||||
|
||||
forAll(intCoupledPatchIDs_, i)
|
||||
{
|
||||
const label patchI = intCoupledPatchIDs_[i];
|
||||
|
||||
const scalarField& phiGasp = phiHsGas_.boundaryField()[patchI];
|
||||
|
||||
forAll(phiGasp, faceI)
|
||||
@ -286,16 +287,16 @@ void reactingOneDim::solveEnergy()
|
||||
Info<< "reactingOneDim::solveEnergy()" << endl;
|
||||
}
|
||||
|
||||
const volScalarField rhoCp(rho_*solidThermo_.Cp());
|
||||
tmp<volScalarField> alpha(solidThermo_.alpha());
|
||||
|
||||
const surfaceScalarField phiQr(fvc::interpolate(Qr_)*nMagSf());
|
||||
|
||||
const surfaceScalarField phiGas(fvc::interpolate(phiHsGas_));
|
||||
|
||||
fvScalarMatrix TEqn
|
||||
fvScalarMatrix hEqn
|
||||
(
|
||||
fvm::ddt(rhoCp, T_)
|
||||
- fvm::laplacian(kappa_, T_)
|
||||
fvm::ddt(rho_, h_)
|
||||
- fvm::laplacian(alpha, h_)
|
||||
==
|
||||
chemistrySh_
|
||||
+ fvc::div(phiQr)
|
||||
@ -306,17 +307,17 @@ void reactingOneDim::solveEnergy()
|
||||
{
|
||||
surfaceScalarField phiMesh
|
||||
(
|
||||
fvc::interpolate(rhoCp*T_)*regionMesh().phi()
|
||||
fvc::interpolate(rho_*h_)*regionMesh().phi()
|
||||
);
|
||||
|
||||
TEqn -= fvc::div(phiMesh);
|
||||
hEqn -= fvc::div(phiMesh);
|
||||
}
|
||||
|
||||
TEqn.relax();
|
||||
TEqn.solve();
|
||||
hEqn.relax();
|
||||
hEqn.solve();
|
||||
|
||||
Info<< "pyrolysis min/max(T) = " << min(T_).value() << ", "
|
||||
<< max(T_).value() << endl;
|
||||
Info<< "pyrolysis min/max(T) = " << min(solidThermo_.T()) << ", "
|
||||
<< max(solidThermo_.T()) << endl;
|
||||
}
|
||||
|
||||
|
||||
@ -347,12 +348,10 @@ reactingOneDim::reactingOneDim(const word& modelType, const fvMesh& mesh)
|
||||
:
|
||||
pyrolysisModel(modelType, mesh),
|
||||
solidChemistry_(solidChemistryModel::New(regionMesh())),
|
||||
solidThermo_(solidChemistry_->solidThermo()),
|
||||
kappaRad_(solidThermo_.kappaRad()),
|
||||
kappa_(solidThermo_.kappa()),
|
||||
rho_(solidThermo_.rho()),
|
||||
solidThermo_(solidChemistry_->solid()),
|
||||
rho_(solidThermo_.rhos()),
|
||||
Ys_(solidThermo_.composition().Y()),
|
||||
T_(solidThermo_.T()),
|
||||
h_(solidThermo_.he()),
|
||||
primaryRadFluxName_(coeffs().lookupOrDefault<word>("radFluxName", "Qr")),
|
||||
nNonOrthCorr_(-1),
|
||||
maxDiff_(10),
|
||||
@ -449,12 +448,10 @@ reactingOneDim::reactingOneDim
|
||||
:
|
||||
pyrolysisModel(modelType, mesh, dict),
|
||||
solidChemistry_(solidChemistryModel::New(regionMesh())),
|
||||
solidThermo_(solidChemistry_->solidThermo()),
|
||||
kappaRad_(solidThermo_.kappaRad()),
|
||||
kappa_(solidThermo_.kappa()),
|
||||
rho_(solidThermo_.rho()),
|
||||
solidThermo_(solidChemistry_->solid()),
|
||||
rho_(solidThermo_.rhos()),
|
||||
Ys_(solidThermo_.composition().Y()),
|
||||
T_(solidThermo_.T()),
|
||||
h_(solidThermo_.he()),
|
||||
primaryRadFluxName_(dict.lookupOrDefault<word>("radFluxName", "Qr")),
|
||||
nNonOrthCorr_(-1),
|
||||
maxDiff_(10),
|
||||
@ -585,11 +582,11 @@ scalar reactingOneDim::solidRegionDiffNo() const
|
||||
surfaceScalarField KrhoCpbyDelta
|
||||
(
|
||||
regionMesh().surfaceInterpolation::deltaCoeffs()
|
||||
* fvc::interpolate(kappa_)
|
||||
* fvc::interpolate(kappa())
|
||||
/ fvc::interpolate(Cp()*rho_)
|
||||
);
|
||||
|
||||
DiNum = max(KrhoCpbyDelta.internalField())*time_.deltaTValue();
|
||||
DiNum = max(KrhoCpbyDelta.internalField())*time().deltaTValue();
|
||||
}
|
||||
|
||||
return DiNum;
|
||||
@ -610,7 +607,7 @@ const volScalarField& reactingOneDim::rho() const
|
||||
|
||||
const volScalarField& reactingOneDim::T() const
|
||||
{
|
||||
return T_;
|
||||
return solidThermo_.T();
|
||||
}
|
||||
|
||||
|
||||
@ -620,15 +617,15 @@ const tmp<volScalarField> reactingOneDim::Cp() const
|
||||
}
|
||||
|
||||
|
||||
const volScalarField& reactingOneDim::kappaRad() const
|
||||
tmp<volScalarField> reactingOneDim::kappaRad() const
|
||||
{
|
||||
return kappaRad_;
|
||||
return solidThermo_.kappaRad();
|
||||
}
|
||||
|
||||
|
||||
const volScalarField& reactingOneDim::kappa() const
|
||||
tmp<volScalarField> reactingOneDim::kappa() const
|
||||
{
|
||||
return kappa_;
|
||||
return solidThermo_.kappa();
|
||||
}
|
||||
|
||||
|
||||
@ -643,7 +640,7 @@ void reactingOneDim::preEvolveRegion()
|
||||
pyrolysisModel::preEvolveRegion();
|
||||
|
||||
// Initialise all cells as able to react
|
||||
forAll(T_, cellI)
|
||||
forAll(h_, cellI)
|
||||
{
|
||||
solidChemistry_->setCellReacting(cellI, true);
|
||||
}
|
||||
|
||||
@ -36,6 +36,7 @@ SourceFiles
|
||||
#define reactingOneDim_H
|
||||
|
||||
#include "pyrolysisModel.H"
|
||||
#include "solidChemistryModel.H"
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
@ -78,16 +79,16 @@ protected:
|
||||
autoPtr<solidChemistryModel> solidChemistry_;
|
||||
|
||||
//- Reference to solid thermo
|
||||
basicSolidThermo& solidThermo_;
|
||||
solidReactionThermo& solidThermo_;
|
||||
|
||||
|
||||
// Reference to solid thermo properties
|
||||
|
||||
//- Absorption coefficient [1/m]
|
||||
const volScalarField& kappaRad_;
|
||||
|
||||
//- Thermal conductivity [W/m/K]
|
||||
const volScalarField& kappa_;
|
||||
// //- Absorption coefficient [1/m]
|
||||
// const volScalarField& kappaRad_;
|
||||
//
|
||||
// //- Thermal conductivity [W/m/K]
|
||||
// const volScalarField& kappa_;
|
||||
|
||||
//- Density [kg/m3]
|
||||
volScalarField& rho_;
|
||||
@ -96,7 +97,7 @@ protected:
|
||||
PtrList<volScalarField>& Ys_;
|
||||
|
||||
// Non-const access to temperature
|
||||
volScalarField& T_;
|
||||
volScalarField& h_;
|
||||
|
||||
|
||||
//- Name of the radiative flux in the primary region
|
||||
@ -230,10 +231,10 @@ public:
|
||||
virtual const tmp<volScalarField> Cp() const;
|
||||
|
||||
//- Return the region absorptivity [1/m]
|
||||
virtual const volScalarField& kappaRad() const;
|
||||
virtual tmp<volScalarField> kappaRad() const;
|
||||
|
||||
//- Return the region thermal conductivity [W/m/k]
|
||||
virtual const volScalarField& kappa() const;
|
||||
virtual tmp<volScalarField> kappa() const;
|
||||
|
||||
//- Return the total gas mass flux to primary region [kg/m2/s]
|
||||
virtual const surfaceScalarField& phiGas() const;
|
||||
|
||||
@ -222,9 +222,8 @@ void temperatureThermoBaffleFvPatchScalarField::write(Ostream& os) const
|
||||
os.writeKeyword("thermoType") << solidThermoType_
|
||||
<< token::END_STATEMENT << nl;
|
||||
|
||||
os.writeKeyword(word(solidThermoType_ + "Coeffs"));
|
||||
|
||||
os << dict_.subDict(solidThermoType_ + "Coeffs") << nl;
|
||||
os.writeKeyword("mixture");
|
||||
os << dict_.subDict("mixture") << nl;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -25,10 +25,13 @@ Class
|
||||
Foam::temperatureThermoBaffleFvPatchScalarField
|
||||
|
||||
Description
|
||||
Thermal bounday applied to both sides of the thermal baffle region and
|
||||
Thermal boundary applied to both sides:the baffle region and
|
||||
in the primary region.
|
||||
The primary region creates and evolves the thermal baffle heat transfer
|
||||
equation. The solid thermo and baffle dictionaries are located on the
|
||||
|
||||
The primary region creates it and evolves the thermal baffle heat transfer
|
||||
equation.
|
||||
|
||||
The solid thermo and baffle dictionaries are located on the
|
||||
primary region.
|
||||
|
||||
type compressible::temperatureThermoBaffle;
|
||||
@ -50,22 +53,44 @@ Description
|
||||
|
||||
|
||||
// Solid thermo
|
||||
thermoType constSolidThermo;
|
||||
thermoType
|
||||
heSolidThermo
|
||||
<pureSolidMixture
|
||||
<constIsoSolidTransport
|
||||
<constSolidRad
|
||||
<specieThermo
|
||||
<constSolidThermo<constRho>,sensibleEnthalpy>
|
||||
>
|
||||
>
|
||||
>
|
||||
>;
|
||||
|
||||
constSolidThermoCoeffs
|
||||
mixture
|
||||
{
|
||||
//- thermo properties
|
||||
rho rho [1 -3 0 0 0 0 0] 80;
|
||||
Cp Cp [0 2 -2 -1 0 0 0] 15;
|
||||
kappa kappa [1 1 -3 -1 0 0 0] 0.01;
|
||||
|
||||
//- radiative properties
|
||||
kappaRad kappaRad [0 -1 0 0 0 0 0] 0;
|
||||
sigmaS sigmaS [0 -1 0 0 0 0 0] 0;
|
||||
emissivity emissivity [0 0 0 0 0 0 0] 1;
|
||||
|
||||
//- chemical properties
|
||||
Hf Hf [0 2 -2 0 0 0 0] 0;
|
||||
specie
|
||||
{
|
||||
nMoles 1;
|
||||
molWeight 20;
|
||||
}
|
||||
transport
|
||||
{
|
||||
kappa 0.01;
|
||||
}
|
||||
radiation
|
||||
{
|
||||
sigmaS 0;
|
||||
kappaRad 0;
|
||||
emissivity 1;
|
||||
}
|
||||
thermodynamics
|
||||
{
|
||||
Hf 0;
|
||||
Cp 15;
|
||||
}
|
||||
density
|
||||
{
|
||||
rho 80;
|
||||
}
|
||||
}
|
||||
|
||||
value uniform 300;
|
||||
|
||||
@ -39,7 +39,9 @@ namespace thermoBaffleModels
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
defineTypeNameAndDebug(noThermo, 0);
|
||||
|
||||
addToRunTimeSelectionTable(thermoBaffleModel, noThermo, mesh);
|
||||
addToRunTimeSelectionTable(thermoBaffleModel, noThermo, dictionary);
|
||||
|
||||
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
|
||||
|
||||
@ -56,6 +58,18 @@ noThermo::noThermo(const word& modelType, const fvMesh& mesh)
|
||||
thermoBaffleModel(mesh)
|
||||
{}
|
||||
|
||||
|
||||
noThermo::noThermo
|
||||
(
|
||||
const word& modelType,
|
||||
const fvMesh& mesh,
|
||||
const dictionary& dict
|
||||
)
|
||||
:
|
||||
thermoBaffleModel(modelType, mesh, dict)
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||
|
||||
noThermo::~noThermo()
|
||||
@ -127,11 +141,11 @@ const volScalarField& noThermo::T() const
|
||||
}
|
||||
|
||||
|
||||
const basicSolidThermo& noThermo::thermo() const
|
||||
const solidThermo& noThermo::thermo() const
|
||||
{
|
||||
FatalErrorIn("const volScalarField& noThermo::T() const")
|
||||
<< "T field not available for " << type() << abort(FatalError);
|
||||
return reinterpret_cast<const basicSolidThermo&>(null);
|
||||
return reinterpret_cast<const solidThermo&>(null);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -85,6 +85,15 @@ public:
|
||||
//- Construct from type name and mesh
|
||||
noThermo(const word& modelType, const fvMesh& mesh);
|
||||
|
||||
//- Construct from components and dict
|
||||
noThermo
|
||||
(
|
||||
const word& modelType,
|
||||
const fvMesh& mesh,
|
||||
const dictionary& dict
|
||||
|
||||
);
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~noThermo();
|
||||
@ -96,7 +105,7 @@ public:
|
||||
// Thermo properties
|
||||
|
||||
//- Return const reference to the basicSolidThermo
|
||||
virtual const basicSolidThermo& thermo() const;
|
||||
virtual const solidThermo& thermo() const;
|
||||
|
||||
|
||||
// Fields
|
||||
|
||||
@ -95,8 +95,8 @@ void thermoBaffle2D::solveEnergy()
|
||||
|
||||
volScalarField& Q = tQ();
|
||||
|
||||
volScalarField rhoCp("rhoCp", thermo_->rho()*thermo_->Cp()());
|
||||
volScalarField kappa("kappa", thermo_->kappa());
|
||||
volScalarField rho("rho", thermo_->rho());
|
||||
volScalarField alpha("alpha", thermo_->alpha());
|
||||
|
||||
|
||||
//If region is one-dimension variable thickness
|
||||
@ -117,9 +117,9 @@ void thermoBaffle2D::solveEnergy()
|
||||
Qs_.boundaryField()[patchI][localFaceI]
|
||||
/thickness_[localFaceI];
|
||||
|
||||
rhoCp[cellId] *= delta_.value()/thickness_[localFaceI];
|
||||
rho[cellId] *= delta_.value()/thickness_[localFaceI];
|
||||
|
||||
kappa[cellId] *= delta_.value()/thickness_[localFaceI];
|
||||
alpha[cellId] *= delta_.value()/thickness_[localFaceI];
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -128,10 +128,10 @@ void thermoBaffle2D::solveEnergy()
|
||||
Q = Q_;
|
||||
}
|
||||
|
||||
fvScalarMatrix TEqn
|
||||
fvScalarMatrix hEqn
|
||||
(
|
||||
fvm::ddt(rhoCp, T_)
|
||||
- fvm::laplacian(kappa, T_)
|
||||
fvm::ddt(rho, h_)
|
||||
- fvm::laplacian(alpha, h_)
|
||||
==
|
||||
Q
|
||||
);
|
||||
@ -140,19 +140,19 @@ void thermoBaffle2D::solveEnergy()
|
||||
{
|
||||
surfaceScalarField phiMesh
|
||||
(
|
||||
fvc::interpolate(rhoCp*T_)*regionMesh().phi()
|
||||
fvc::interpolate(rho*h_)*regionMesh().phi()
|
||||
);
|
||||
|
||||
TEqn -= fvc::div(phiMesh);
|
||||
hEqn -= fvc::div(phiMesh);
|
||||
}
|
||||
|
||||
TEqn.relax();
|
||||
TEqn.solve();
|
||||
|
||||
Info<< "T gas min/max = " << min(T_).value() << ", "
|
||||
<< max(T_).value() << endl;
|
||||
hEqn.relax();
|
||||
hEqn.solve();
|
||||
|
||||
thermo_->correct();
|
||||
|
||||
Info<< "T min/max = " << min(thermo_->T()) << ", "
|
||||
<< max(thermo_->T()) << endl;
|
||||
}
|
||||
|
||||
|
||||
@ -168,8 +168,8 @@ thermoBaffle2D::thermoBaffle2D
|
||||
:
|
||||
thermoBaffleModel(modelType, mesh, dict),
|
||||
nNonOrthCorr_(readLabel(solution().lookup("nNonOrthCorr"))),
|
||||
thermo_(basicSolidThermo::New(regionMesh(), dict)),
|
||||
T_(thermo_->T()),
|
||||
thermo_(solidThermo::New(regionMesh(), dict)),
|
||||
h_(thermo_->he()),
|
||||
Qs_
|
||||
(
|
||||
IOobject
|
||||
@ -220,8 +220,8 @@ thermoBaffle2D::thermoBaffle2D
|
||||
:
|
||||
thermoBaffleModel(modelType, mesh),
|
||||
nNonOrthCorr_(readLabel(solution().lookup("nNonOrthCorr"))),
|
||||
thermo_(basicSolidThermo::New(regionMesh())),
|
||||
T_(thermo_->T()),
|
||||
thermo_(solidThermo::New(regionMesh())),
|
||||
h_(thermo_->he()),
|
||||
Qs_
|
||||
(
|
||||
IOobject
|
||||
@ -336,11 +336,11 @@ const volScalarField& thermoBaffle2D::kappa() const
|
||||
|
||||
const volScalarField& thermoBaffle2D::T() const
|
||||
{
|
||||
return T_;
|
||||
return thermo_->T();
|
||||
}
|
||||
|
||||
|
||||
const basicSolidThermo& thermoBaffle2D::thermo() const
|
||||
const solidThermo& thermoBaffle2D::thermo() const
|
||||
{
|
||||
return thermo_;
|
||||
}
|
||||
@ -348,21 +348,18 @@ const basicSolidThermo& thermoBaffle2D::thermo() const
|
||||
|
||||
void thermoBaffle2D::info() const
|
||||
{
|
||||
Info<< indent << "min/max(T) = " << min(T_).value() << ", "
|
||||
<< max(T_).value() << nl;
|
||||
|
||||
const labelList& coupledPatches = intCoupledPatchIDs();
|
||||
forAll (coupledPatches, i)
|
||||
{
|
||||
const label patchI = coupledPatches[i];
|
||||
const fvPatchScalarField& pT = T_.boundaryField()[patchI];
|
||||
const fvPatchScalarField& ph = h_.boundaryField()[patchI];
|
||||
const word patchName = regionMesh().boundary()[patchI].name();
|
||||
Info << indent << "Q : " << patchName << indent <<
|
||||
gSum
|
||||
(
|
||||
mag(regionMesh().Sf().boundaryField()[patchI])
|
||||
* pT.snGrad()
|
||||
* thermo_->kappa(patchI)
|
||||
* ph.snGrad()
|
||||
* thermo_->alpha(patchI)
|
||||
) << endl;
|
||||
}
|
||||
}
|
||||
|
||||
@ -85,10 +85,10 @@ protected:
|
||||
// Thermo properties
|
||||
|
||||
//- Solid thermo
|
||||
autoPtr<basicSolidThermo> thermo_;
|
||||
autoPtr<solidThermo> thermo_;
|
||||
|
||||
//- Temperature / [K]
|
||||
volScalarField& T_;
|
||||
//- Enthalpy/internal energy
|
||||
volScalarField& h_;
|
||||
|
||||
|
||||
// Source term fields
|
||||
@ -145,8 +145,8 @@ public:
|
||||
|
||||
// Thermo properties
|
||||
|
||||
//- Return const reference to the basicSolidThermo
|
||||
virtual const basicSolidThermo& thermo() const;
|
||||
//- Return const reference to the solidThermo
|
||||
virtual const solidThermo& thermo() const;
|
||||
|
||||
|
||||
// Fields
|
||||
@ -157,7 +157,7 @@ public:
|
||||
//- Return solid absortivity [1/m]
|
||||
virtual const volScalarField& kappaRad() const;
|
||||
|
||||
//- Return the film mean temperature [K]
|
||||
//- Return temperature [K]
|
||||
virtual const volScalarField& T() const;
|
||||
|
||||
//- Return density [Kg/m3]
|
||||
@ -169,26 +169,18 @@ public:
|
||||
|
||||
// Helper functions
|
||||
|
||||
//- Return sensible enthalpy as a function of temperature
|
||||
//- Return sensible enthalpy/internal energy
|
||||
// as a function of temperature
|
||||
// for a patch
|
||||
inline tmp<scalarField> hs
|
||||
inline tmp<scalarField> he
|
||||
(
|
||||
const scalarField& p,
|
||||
const scalarField& T,
|
||||
const label patchI
|
||||
) const;
|
||||
|
||||
//- Return sensible enthalpy as a function of temperature
|
||||
inline tmp<volScalarField> hs
|
||||
(
|
||||
const volScalarField& T
|
||||
) const;
|
||||
|
||||
//- Return temperature as a function of sensible enthalpy
|
||||
inline tmp<volScalarField> T
|
||||
(
|
||||
const volScalarField& hs
|
||||
) const;
|
||||
|
||||
//- Return sensible enthalpy/internal energy
|
||||
inline tmp<volScalarField> he() const;
|
||||
|
||||
// Evolution
|
||||
|
||||
|
||||
@ -39,64 +39,20 @@ namespace thermoBaffleModels
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
|
||||
inline tmp<scalarField> thermoBaffle2D::hs
|
||||
inline tmp<scalarField> thermoBaffle2D::he
|
||||
(
|
||||
const scalarField& p,
|
||||
const scalarField& T,
|
||||
const label patchI
|
||||
) const
|
||||
{
|
||||
const scalarField Cp(thermo_->Cp(patchI));
|
||||
return Cp*(T - 298.15);
|
||||
return thermo_->he(p, T, patchI);
|
||||
}
|
||||
|
||||
|
||||
inline tmp<volScalarField> thermoBaffle2D::hs
|
||||
(
|
||||
const volScalarField& T
|
||||
) const
|
||||
inline tmp<volScalarField> thermoBaffle2D::he() const
|
||||
{
|
||||
const volScalarField Cp = thermo_->Cp()();
|
||||
return tmp<volScalarField>
|
||||
(
|
||||
new volScalarField
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"hs(" + T.name() + ")",
|
||||
time().timeName(),
|
||||
regionMesh(),
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
Cp*(T - (dimensionedScalar("Tstd", dimTemperature, 298.15))),
|
||||
zeroGradientFvPatchScalarField::typeName
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
inline tmp<volScalarField> thermoBaffle2D::T
|
||||
(
|
||||
const volScalarField& hs
|
||||
) const
|
||||
{
|
||||
const volScalarField Cp = thermo_->Cp()();
|
||||
return tmp<volScalarField>
|
||||
(
|
||||
new volScalarField
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"T(" + hs.name() + ")",
|
||||
time().timeName(),
|
||||
regionMesh(),
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
hs/Cp + dimensionedScalar("Tstd", dimTemperature, 298.15),
|
||||
zeroGradientFvPatchScalarField::typeName
|
||||
)
|
||||
);
|
||||
return thermo_->he();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -38,7 +38,7 @@ SourceFiles
|
||||
#include "scalarIOField.H"
|
||||
#include "autoPtr.H"
|
||||
#include "volFieldsFwd.H"
|
||||
#include "basicSolidThermo.H"
|
||||
#include "solidThermo.H"
|
||||
#include "regionModel1D.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
@ -172,7 +172,7 @@ public:
|
||||
// Access
|
||||
|
||||
//- Return solid thermo
|
||||
virtual const basicSolidThermo& thermo() const = 0;
|
||||
virtual const solidThermo& thermo() const = 0;
|
||||
|
||||
//- Return thickness
|
||||
const scalarField& thickness() const
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
EXE_INC = \
|
||||
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||
-I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \
|
||||
-I/home/tom3/sergio/development/chtMultiRegionCoupledFoam/lnInclude
|
||||
-I$(LIB_SRC)/thermophysicalModels/specie/lnInclude
|
||||
|
||||
|
||||
LIB_LIBS = \
|
||||
-lfiniteVolume \
|
||||
|
||||
@ -40,7 +40,7 @@ namespace Foam
|
||||
defineTypeNameAndDebug(basicThermo, 0);
|
||||
defineRunTimeSelectionTable(basicThermo, fvMesh);
|
||||
}
|
||||
|
||||
/*
|
||||
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
|
||||
|
||||
Foam::wordList Foam::basicThermo::heBoundaryTypes()
|
||||
@ -95,7 +95,7 @@ void Foam::basicThermo::heBoundaryCorrection(volScalarField& h)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
@ -183,6 +183,92 @@ Foam::basicThermo::basicThermo(const fvMesh& mesh)
|
||||
{}
|
||||
|
||||
|
||||
|
||||
Foam::basicThermo::basicThermo(const fvMesh& mesh, const dictionary& dict)
|
||||
:
|
||||
IOdictionary
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"thermophysicalProperties",
|
||||
mesh.time().constant(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
dict
|
||||
),
|
||||
|
||||
p_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"p",
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::MUST_READ,
|
||||
IOobject::AUTO_WRITE
|
||||
),
|
||||
mesh
|
||||
),
|
||||
|
||||
psi_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"psi",
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh,
|
||||
dimensionSet(0, -2, 2, 0, 0)
|
||||
),
|
||||
|
||||
T_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"T",
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::MUST_READ,
|
||||
IOobject::AUTO_WRITE
|
||||
),
|
||||
mesh
|
||||
),
|
||||
|
||||
mu_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"mu",
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh,
|
||||
dimensionSet(1, -1, -1, 0, 0)
|
||||
),
|
||||
|
||||
alpha_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"alpha",
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh,
|
||||
dimensionSet(1, -1, -1, 0, 0)
|
||||
)
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::basicThermo::~basicThermo()
|
||||
|
||||
@ -77,18 +77,6 @@ protected:
|
||||
volScalarField alpha_;
|
||||
|
||||
|
||||
// Protected Member Functions
|
||||
|
||||
// Enthalpy/Internal energy
|
||||
|
||||
//- Return the enthalpy/internal energy field boundary types
|
||||
// by interrogating the temperature field boundary types
|
||||
wordList heBoundaryTypes();
|
||||
|
||||
//- Correct the enthalpy/internal energy field boundaries
|
||||
void heBoundaryCorrection(volScalarField& he);
|
||||
|
||||
|
||||
//- Construct as copy (not implemented)
|
||||
basicThermo(const basicThermo&);
|
||||
|
||||
@ -114,6 +102,9 @@ public:
|
||||
//- Construct from mesh
|
||||
basicThermo(const fvMesh&);
|
||||
|
||||
//- Construct from mesh
|
||||
basicThermo(const fvMesh&, const dictionary&);
|
||||
|
||||
|
||||
//- Selector
|
||||
static autoPtr<basicThermo> New(const fvMesh&);
|
||||
|
||||
@ -23,11 +23,11 @@ License
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "fixedEnergyFvPatchScalarField.H"
|
||||
#include "addToRunTimeSelectionTable.H"
|
||||
#include "fvPatchFieldMapper.H"
|
||||
#include "volFields.H"
|
||||
#include "basicThermo.H"
|
||||
#include "addToRunTimeSelectionTable.H"
|
||||
#include "fixedEnergyFvPatchScalarField.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
@ -102,6 +102,7 @@ void Foam::fixedEnergyFvPatchScalarField::updateCoeffs()
|
||||
"thermophysicalProperties"
|
||||
);
|
||||
|
||||
|
||||
const label patchi = patch().index();
|
||||
|
||||
const scalarField& pw = thermo.p().boundaryField()[patchi];
|
||||
|
||||
@ -134,6 +134,7 @@ public:
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -24,29 +24,75 @@ License
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "heThermo.H"
|
||||
#include "zeroGradientFvPatchFields.H"
|
||||
#include "fixedEnergyFvPatchScalarField.H"
|
||||
#include "gradientEnergyFvPatchScalarField.H"
|
||||
#include "mixedEnergyFvPatchScalarField.H"
|
||||
#include "temperatureJumpFvPatchScalarField.H"
|
||||
#include "energyJumpFvPatchScalarField.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
// * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * * //
|
||||
|
||||
template<class BasicThermo, class MixtureType>
|
||||
Foam::heThermo<BasicThermo, MixtureType>::heThermo(const fvMesh& mesh)
|
||||
:
|
||||
BasicThermo(mesh),
|
||||
MixtureType(*this, mesh),
|
||||
Foam::wordList Foam::heThermo<BasicThermo, MixtureType>::heBoundaryTypes()
|
||||
{
|
||||
const volScalarField::GeometricBoundaryField& tbf =
|
||||
this->T_.boundaryField();
|
||||
|
||||
he_
|
||||
wordList hbt = tbf.types();
|
||||
|
||||
forAll(tbf, patchi)
|
||||
{
|
||||
if (isA<fixedValueFvPatchScalarField>(tbf[patchi]))
|
||||
{
|
||||
hbt[patchi] = fixedEnergyFvPatchScalarField::typeName;
|
||||
}
|
||||
else if
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
MixtureType::thermoType::heName(),
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh,
|
||||
dimEnergy/dimMass,
|
||||
this->heBoundaryTypes()
|
||||
isA<zeroGradientFvPatchScalarField>(tbf[patchi])
|
||||
|| isA<fixedGradientFvPatchScalarField>(tbf[patchi])
|
||||
)
|
||||
{
|
||||
hbt[patchi] = gradientEnergyFvPatchScalarField::typeName;
|
||||
}
|
||||
else if(isA<mixedFvPatchScalarField>(tbf[patchi]))
|
||||
{
|
||||
hbt[patchi] = mixedEnergyFvPatchScalarField::typeName;
|
||||
}
|
||||
else if (isA<temperatureJumpFvPatchScalarField>(tbf[patchi]))
|
||||
{
|
||||
hbt[patchi] = energyJumpFvPatchScalarField::typeName;
|
||||
}
|
||||
}
|
||||
|
||||
return hbt;
|
||||
}
|
||||
|
||||
|
||||
template<class BasicThermo, class MixtureType>
|
||||
void Foam::heThermo<BasicThermo, MixtureType>::
|
||||
heBoundaryCorrection(volScalarField& h)
|
||||
{
|
||||
volScalarField::GeometricBoundaryField& hbf = h.boundaryField();
|
||||
|
||||
forAll(hbf, patchi)
|
||||
{
|
||||
if (isA<gradientEnergyFvPatchScalarField>(hbf[patchi]))
|
||||
{
|
||||
refCast<gradientEnergyFvPatchScalarField>(hbf[patchi]).gradient()
|
||||
= hbf[patchi].fvPatchField::snGrad();
|
||||
}
|
||||
else if (isA<mixedEnergyFvPatchScalarField>(hbf[patchi]))
|
||||
{
|
||||
refCast<mixedEnergyFvPatchScalarField>(hbf[patchi]).refGrad()
|
||||
= hbf[patchi].fvPatchField::snGrad();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
template<class BasicThermo, class MixtureType>
|
||||
void Foam::heThermo<BasicThermo, MixtureType>::init()
|
||||
{
|
||||
scalarField& heCells = he_.internalField();
|
||||
const scalarField& pCells = this->p_.internalField();
|
||||
@ -72,6 +118,63 @@ Foam::heThermo<BasicThermo, MixtureType>::heThermo(const fvMesh& mesh)
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
|
||||
template<class BasicThermo, class MixtureType>
|
||||
Foam::heThermo<BasicThermo, MixtureType>::heThermo(const fvMesh& mesh)
|
||||
:
|
||||
BasicThermo(mesh),
|
||||
MixtureType(*this, mesh),
|
||||
|
||||
he_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
MixtureType::thermoType::heName(),
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh,
|
||||
dimEnergy/dimMass,
|
||||
this->heBoundaryTypes()
|
||||
)
|
||||
{
|
||||
init();
|
||||
}
|
||||
|
||||
|
||||
template<class BasicThermo, class MixtureType>
|
||||
Foam::heThermo<BasicThermo, MixtureType>::heThermo
|
||||
(
|
||||
const fvMesh& mesh,
|
||||
const dictionary& dict
|
||||
)
|
||||
:
|
||||
BasicThermo(mesh, dict),
|
||||
MixtureType(*this, mesh),
|
||||
|
||||
he_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
MixtureType::thermoType::heName(),
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh,
|
||||
dimEnergy/dimMass,
|
||||
this->heBoundaryTypes()
|
||||
)
|
||||
{
|
||||
init();
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||
|
||||
template<class BasicThermo, class MixtureType>
|
||||
@ -550,9 +653,9 @@ Foam::tmp<Foam::scalarField> Foam::heThermo<BasicThermo, MixtureType>::THE
|
||||
const label patchi
|
||||
) const
|
||||
{
|
||||
|
||||
tmp<scalarField> tT(new scalarField(h.size()));
|
||||
scalarField& T = tT();
|
||||
|
||||
forAll(h, facei)
|
||||
{
|
||||
T[facei] = this->patchFaceMixture
|
||||
@ -658,6 +761,26 @@ Foam::heThermo<BasicThermo, MixtureType>::alphaEff
|
||||
}
|
||||
|
||||
|
||||
template<class BasicThermo, class MixtureType>
|
||||
Foam::tmp<Foam::scalarField>
|
||||
Foam::heThermo<BasicThermo, MixtureType>::alpha
|
||||
(
|
||||
const label patchi
|
||||
) const
|
||||
{
|
||||
return
|
||||
this->CpByCpv
|
||||
(
|
||||
this->p_.boundaryField()[patchi],
|
||||
this->T_.boundaryField()[patchi],
|
||||
patchi
|
||||
)
|
||||
*(
|
||||
this->alpha_.boundaryField()[patchi]
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
template<class BasicThermo, class MixtureType>
|
||||
bool Foam::heThermo<BasicThermo, MixtureType>::read()
|
||||
{
|
||||
|
||||
@ -60,6 +60,18 @@ protected:
|
||||
volScalarField he_;
|
||||
|
||||
|
||||
// Protected Member Functions
|
||||
|
||||
// Enthalpy/Internal energy
|
||||
|
||||
//- Return the enthalpy/internal energy field boundary types
|
||||
// by interrogating the temperature field boundary types
|
||||
wordList heBoundaryTypes();
|
||||
|
||||
//- Correct the enthalpy/internal energy field boundaries
|
||||
void heBoundaryCorrection(volScalarField& he);
|
||||
|
||||
|
||||
private:
|
||||
|
||||
// Private Member Functions
|
||||
@ -68,6 +80,10 @@ private:
|
||||
heThermo(const heThermo<BasicThermo, MixtureType>&);
|
||||
|
||||
|
||||
//- Initialize heThermo
|
||||
void init();
|
||||
|
||||
|
||||
public:
|
||||
|
||||
// Constructors
|
||||
@ -75,6 +91,9 @@ public:
|
||||
//- Construct from mesh
|
||||
heThermo(const fvMesh&);
|
||||
|
||||
//- Construct from mesh and dictionary
|
||||
heThermo(const fvMesh&, const dictionary&);
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~heThermo();
|
||||
@ -214,6 +233,7 @@ public:
|
||||
virtual tmp<volScalarField> kappa() const;
|
||||
|
||||
//- Thermal diffusivity of mixture for patch [J/m/s/K]
|
||||
|
||||
virtual tmp<scalarField> kappa
|
||||
(
|
||||
const label patchi
|
||||
@ -229,6 +249,7 @@ public:
|
||||
const label patchi
|
||||
) const;
|
||||
|
||||
|
||||
//- Effective thermal diffusivity of mixture [J/m/s/K]
|
||||
virtual tmp<volScalarField> alphaEff
|
||||
(
|
||||
@ -242,6 +263,12 @@ public:
|
||||
const label patchi
|
||||
) const;
|
||||
|
||||
//- Thermal diffusivity for enthalpy of mixture [kg/m/s]
|
||||
virtual tmp<scalarField> alpha
|
||||
(
|
||||
const label patchI
|
||||
) const;
|
||||
|
||||
|
||||
//- Read thermophysicalProperties dictionary
|
||||
virtual bool read();
|
||||
|
||||
@ -1,13 +1,10 @@
|
||||
basicSolidThermo/basicSolidThermo.C
|
||||
basicSolidThermo/basicSolidThermoNew.C
|
||||
solidThermo/solidThermo.C
|
||||
solidThermo/solidThermoNew.C
|
||||
|
||||
constSolidThermo/constSolidThermo.C
|
||||
directionalKSolidThermo/directionalKSolidThermo.C
|
||||
interpolatedSolidThermo/interpolatedSolidThermo.C
|
||||
interpolatedSolidThermo/interpolateSolid/interpolateSolid.C
|
||||
isotropicKSolidThermo/isotropicKSolidThermo.C
|
||||
mixtures/basicSolidMixture/basicSolidMixture.C
|
||||
|
||||
solidMixtureThermo/mixtures/basicSolidMixture/basicSolidMixture.C
|
||||
solidMixtureThermo/solidMixtureThermo/solidMixtureThermos.C
|
||||
solidReactionThermo/solidReactionThermo.C
|
||||
solidReactionThermo/solidReactionThermoNew.C
|
||||
heSolidThermo/heSolidThermos.C
|
||||
|
||||
LIB = $(FOAM_LIBBIN)/libbasicSolidThermo
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
EXE_INC = \
|
||||
-I$(LIB_SRC)/meshTools/lnInclude \
|
||||
-I$(LIB_SRC)/finiteVolume/lnInclude \
|
||||
-I$(LIB_SRC)/thermophysicalModels/basic/lnInclude \
|
||||
-I$(LIB_SRC)/thermophysicalModels/specie/lnInclude \
|
||||
-I$(LIB_SRC)/thermophysicalModels/solid/lnInclude
|
||||
|
||||
@ -8,4 +9,5 @@ LIB_LIBS = \
|
||||
-lmeshTools \
|
||||
-lfiniteVolume \
|
||||
-lspecie \
|
||||
-lsolid
|
||||
-lsolid \
|
||||
-lbasicThermophysicalModels
|
||||
|
||||
@ -1,310 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2012 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 "basicSolidThermo.H"
|
||||
#include "fvMesh.H"
|
||||
#include "HashTable.H"
|
||||
|
||||
/* * * * * * * * * * * * * * * private static data * * * * * * * * * * * * * */
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
defineTypeNameAndDebug(basicSolidThermo, 0);
|
||||
defineRunTimeSelectionTable(basicSolidThermo, mesh);
|
||||
defineRunTimeSelectionTable(basicSolidThermo, dictionary);
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::basicSolidThermo::basicSolidThermo(const fvMesh& mesh)
|
||||
:
|
||||
IOdictionary
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"solidThermophysicalProperties",
|
||||
mesh.time().constant(),
|
||||
mesh,
|
||||
IOobject::MUST_READ,
|
||||
IOobject::NO_WRITE
|
||||
)
|
||||
),
|
||||
mesh_(mesh),
|
||||
T_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"T",
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::MUST_READ,
|
||||
IOobject::AUTO_WRITE
|
||||
),
|
||||
mesh
|
||||
),
|
||||
rho_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"rho",
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh,
|
||||
dimMass/dimVolume
|
||||
),
|
||||
kappaRad_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"kappaRad",
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh,
|
||||
dimless/dimLength
|
||||
),
|
||||
sigmaS_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"sigmaS",
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh,
|
||||
dimless/dimLength
|
||||
),
|
||||
emissivity_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"emissivity",
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh,
|
||||
dimless
|
||||
)
|
||||
|
||||
{}
|
||||
|
||||
|
||||
Foam::basicSolidThermo::basicSolidThermo
|
||||
(
|
||||
const fvMesh& mesh,
|
||||
const dictionary& dict
|
||||
)
|
||||
:
|
||||
IOdictionary
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"solidThermophysicalProperties",
|
||||
mesh.time().constant(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
dict
|
||||
),
|
||||
mesh_(mesh),
|
||||
T_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"T",
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::MUST_READ,
|
||||
IOobject::AUTO_WRITE
|
||||
),
|
||||
mesh
|
||||
),
|
||||
rho_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"rho",
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh,
|
||||
dimMass/dimVolume
|
||||
),
|
||||
kappaRad_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"kappaRad",
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh,
|
||||
dimless/dimLength
|
||||
),
|
||||
sigmaS_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"sigmaS",
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh,
|
||||
dimless/dimLength
|
||||
),
|
||||
emissivity_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"emissivity",
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh,
|
||||
dimless
|
||||
)
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::basicSolidThermo::~basicSolidThermo()
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
Foam::volScalarField& Foam::basicSolidThermo::T()
|
||||
{
|
||||
return T_;
|
||||
}
|
||||
|
||||
|
||||
const Foam::volScalarField& Foam::basicSolidThermo::T() const
|
||||
{
|
||||
return T_;
|
||||
}
|
||||
|
||||
|
||||
const Foam::volScalarField& Foam::basicSolidThermo::rho() const
|
||||
{
|
||||
return rho_;
|
||||
}
|
||||
|
||||
|
||||
Foam::volScalarField& Foam::basicSolidThermo::rho()
|
||||
{
|
||||
return rho_;
|
||||
}
|
||||
|
||||
|
||||
const Foam::volScalarField& Foam::basicSolidThermo::kappaRad() const
|
||||
{
|
||||
return kappaRad_;
|
||||
}
|
||||
|
||||
|
||||
const Foam::volScalarField& Foam::basicSolidThermo::sigmaS() const
|
||||
{
|
||||
return sigmaS_;
|
||||
}
|
||||
|
||||
|
||||
const Foam::volScalarField& Foam::basicSolidThermo::emissivity() const
|
||||
{
|
||||
return emissivity_;
|
||||
}
|
||||
|
||||
|
||||
Foam::basicSolidMixture& Foam::basicSolidThermo::composition()
|
||||
{
|
||||
notImplemented("basicSolidThermo::composition()");
|
||||
return *reinterpret_cast<basicSolidMixture*>(0);
|
||||
}
|
||||
|
||||
|
||||
const Foam::basicSolidMixture& Foam::basicSolidThermo::composition() const
|
||||
{
|
||||
notImplemented("basicSolidThermo::composition() const");
|
||||
return *reinterpret_cast<const basicSolidMixture*>(0);
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::volScalarField> Foam::basicSolidThermo::hs() const
|
||||
{
|
||||
notImplemented("basicSolidThermo::hs() const");
|
||||
return volScalarField::null();
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::scalarField> Foam::basicSolidThermo::hs(const label patchI)
|
||||
const
|
||||
{
|
||||
notImplemented("basicSolidThermo::hs(const label) const");
|
||||
return scalarField::null();
|
||||
}
|
||||
|
||||
|
||||
bool Foam::basicSolidThermo::read()
|
||||
{
|
||||
return regIOobject::read();
|
||||
}
|
||||
|
||||
|
||||
bool Foam::basicSolidThermo::writeData(Ostream& os) const
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * IOStream operators * * * * * * * * * * * * * //
|
||||
|
||||
Foam::Ostream& Foam::operator<<(Ostream& os, const basicSolidThermo& s)
|
||||
{
|
||||
s.writeData(os);
|
||||
return os;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -1,339 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2012 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 "constSolidThermo.H"
|
||||
#include "addToRunTimeSelectionTable.H"
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
defineTypeNameAndDebug(constSolidThermo, 0);
|
||||
addToRunTimeSelectionTable(basicSolidThermo, constSolidThermo, mesh);
|
||||
addToRunTimeSelectionTable(basicSolidThermo, constSolidThermo, dictionary);
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::constSolidThermo::constSolidThermo
|
||||
(
|
||||
const fvMesh& mesh,
|
||||
const dictionary& dict
|
||||
)
|
||||
:
|
||||
basicSolidThermo(mesh, dict),
|
||||
dict_(dict.subDict(typeName + "Coeffs")),
|
||||
constKappa_(dimensionedScalar(dict_.lookup("kappa"))),
|
||||
kappa_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"kappa",
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh,
|
||||
constKappa_
|
||||
),
|
||||
constRho_(dimensionedScalar(dict_.lookup("rho"))),
|
||||
constCp_(dimensionedScalar(dict_.lookup("Cp"))),
|
||||
constHf_(dimensionedScalar(dict_.lookup("Hf"))),
|
||||
constEmissivity_(dimensionedScalar(dict_.lookup("emissivity"))),
|
||||
constKappaRad_(dimensionedScalar(dict_.lookup("kappaRad"))),
|
||||
constSigmaS_(dimensionedScalar(dict_.lookup("sigmaS")))
|
||||
{
|
||||
read();
|
||||
|
||||
kappa_ = constKappa_;
|
||||
|
||||
rho_ = constRho_;
|
||||
|
||||
emissivity_ = constEmissivity_;
|
||||
|
||||
kappaRad_ = constKappaRad_;
|
||||
|
||||
sigmaS_ = constSigmaS_;
|
||||
}
|
||||
|
||||
|
||||
Foam::constSolidThermo::constSolidThermo(const fvMesh& mesh)
|
||||
:
|
||||
basicSolidThermo(mesh),
|
||||
dict_(subDict(typeName + "Coeffs")),
|
||||
constKappa_(dimensionedScalar(dict_.lookup("kappa"))),
|
||||
kappa_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"kappa",
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh,
|
||||
constKappa_
|
||||
),
|
||||
constRho_(dimensionedScalar(dict_.lookup("rho"))),
|
||||
constCp_(dimensionedScalar(dict_.lookup("Cp"))),
|
||||
constHf_(dimensionedScalar(dict_.lookup("Hf"))),
|
||||
constEmissivity_(dimensionedScalar(dict_.lookup("emissivity"))),
|
||||
constKappaRad_(dimensionedScalar(dict_.lookup("kappaRad"))),
|
||||
constSigmaS_(dimensionedScalar(dict_.lookup("sigmaS")))
|
||||
{
|
||||
read();
|
||||
|
||||
kappa_ = constKappa_;
|
||||
|
||||
rho_ = constRho_;
|
||||
|
||||
emissivity_ = constEmissivity_;
|
||||
|
||||
kappaRad_ = constKappaRad_;
|
||||
|
||||
sigmaS_ = constSigmaS_;
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::constSolidThermo::~constSolidThermo()
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
void Foam::constSolidThermo::correct()
|
||||
{}
|
||||
|
||||
|
||||
Foam::tmp<Foam::volScalarField> Foam::constSolidThermo::kappa() const
|
||||
{
|
||||
return kappa_;
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::volSymmTensorField>
|
||||
Foam::constSolidThermo::directionalKappa() const
|
||||
{
|
||||
dimensionedSymmTensor t
|
||||
(
|
||||
constKappa_.name(),
|
||||
constKappa_.dimensions(),
|
||||
symmTensor
|
||||
(
|
||||
constKappa_.value(),
|
||||
0.0,
|
||||
0.0,
|
||||
constKappa_.value(),
|
||||
0.0,
|
||||
constKappa_.value()
|
||||
)
|
||||
);
|
||||
return tmp<volSymmTensorField>
|
||||
(
|
||||
new volSymmTensorField
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"kappa",
|
||||
mesh_.time().timeName(),
|
||||
mesh_,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh_,
|
||||
t
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::volScalarField> Foam::constSolidThermo::Cp() const
|
||||
{
|
||||
return tmp<volScalarField>
|
||||
(
|
||||
new volScalarField
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"Cp",
|
||||
mesh_.time().timeName(),
|
||||
mesh_,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh_,
|
||||
constCp_
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::volScalarField> Foam::constSolidThermo::Hf() const
|
||||
{
|
||||
return tmp<volScalarField>
|
||||
(
|
||||
new volScalarField
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"Hf",
|
||||
mesh_.time().timeName(),
|
||||
mesh_,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh_,
|
||||
constHf_
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::scalarField> Foam::constSolidThermo::kappa
|
||||
(
|
||||
const label patchI
|
||||
) const
|
||||
{
|
||||
return (kappa_.boundaryField()[patchI]);
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::symmTensorField> Foam::constSolidThermo::directionalKappa
|
||||
(
|
||||
const label patchI
|
||||
) const
|
||||
{
|
||||
symmTensor t
|
||||
(
|
||||
constKappa_.value(),
|
||||
0.0,
|
||||
0.0,
|
||||
constKappa_.value(),
|
||||
0.0,
|
||||
constKappa_.value()
|
||||
);
|
||||
return tmp<symmTensorField>
|
||||
(
|
||||
new symmTensorField
|
||||
(
|
||||
T_.boundaryField()[patchI].size(),
|
||||
t
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::scalarField> Foam::constSolidThermo::Cp
|
||||
(
|
||||
const label patchI
|
||||
) const
|
||||
{
|
||||
return tmp<scalarField>
|
||||
(
|
||||
new scalarField
|
||||
(
|
||||
T_.boundaryField()[patchI].size(),
|
||||
constCp_.value()
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::scalarField> Foam::constSolidThermo::Hf
|
||||
(
|
||||
const label patchI
|
||||
) const
|
||||
{
|
||||
return tmp<scalarField>
|
||||
(
|
||||
new scalarField
|
||||
(
|
||||
T_.boundaryField()[patchI].size(),
|
||||
constHf_.value()
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
bool Foam::constSolidThermo::read()
|
||||
{
|
||||
return read(subDict(typeName + "Coeffs"));
|
||||
}
|
||||
|
||||
|
||||
bool Foam::constSolidThermo::read(const dictionary& dict)
|
||||
{
|
||||
constRho_ = dimensionedScalar(dict.lookup("rho"));
|
||||
constCp_ = dimensionedScalar(dict.lookup("Cp"));
|
||||
constKappa_ = dimensionedScalar(dict.lookup("kappa"));
|
||||
constHf_ = dimensionedScalar(dict.lookup("Hf"));
|
||||
constEmissivity_ = dimensionedScalar(dict.lookup("emissivity"));
|
||||
constKappaRad_ = dimensionedScalar(dict_.lookup("kappaRad"));
|
||||
constSigmaS_ = dimensionedScalar(dict_.lookup("sigmaS"));
|
||||
|
||||
Info<< "Constructed constSolidThermo with" << nl
|
||||
<< " rho : " << constRho_ << nl
|
||||
<< " Cp : " << constCp_ << nl
|
||||
<< " kappa : " << constKappa_ << nl
|
||||
<< " Hf : " << constHf_ << nl
|
||||
<< " emissivity : " << constEmissivity_ << nl
|
||||
<< " kappaRad : " << constKappaRad_ << nl
|
||||
<< " sigmaS : " << constSigmaS_ << nl
|
||||
<< endl;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool Foam::constSolidThermo::writeData(Ostream& os) const
|
||||
{
|
||||
bool ok = basicSolidThermo::writeData(os);
|
||||
os.writeKeyword("rho") << constRho_ << token::END_STATEMENT << nl;
|
||||
os.writeKeyword("Cp") << constCp_ << token::END_STATEMENT << nl;
|
||||
os.writeKeyword("kappa") << constKappa_ << token::END_STATEMENT << nl;
|
||||
os.writeKeyword("Hf") << constHf_ << token::END_STATEMENT << nl;
|
||||
os.writeKeyword("kappaRad") << constKappaRad_ << token::END_STATEMENT << nl;
|
||||
os.writeKeyword("sigmaS") << constSigmaS_ << token::END_STATEMENT << nl;
|
||||
os.writeKeyword("emissivity") << constEmissivity_ << token::END_STATEMENT
|
||||
<< nl;
|
||||
return ok && os.good();
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * IOStream operators * * * * * * * * * * * * * //
|
||||
|
||||
Foam::Ostream& Foam::operator<<(Ostream& os, const constSolidThermo& s)
|
||||
{
|
||||
s.writeData(os);
|
||||
return os;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -1,165 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2012 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::constSolidThermo
|
||||
|
||||
Description
|
||||
The thermophysical properties of a constSolidThermo
|
||||
|
||||
SourceFiles
|
||||
constSolidThermo.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef constSolidThermo_H
|
||||
#define constSolidThermo_H
|
||||
|
||||
#include "basicSolidThermo.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class constSolidThermo Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class constSolidThermo
|
||||
:
|
||||
public basicSolidThermo
|
||||
{
|
||||
private:
|
||||
|
||||
// Private data
|
||||
|
||||
//- Dictionary
|
||||
dictionary dict_;
|
||||
|
||||
//- Constant thermal conductivity [W/(m.K)]
|
||||
dimensionedScalar constKappa_;
|
||||
|
||||
//- Thermal conductivity field[W/(m.K)]
|
||||
volScalarField kappa_;
|
||||
|
||||
//- Density [kg/m3]
|
||||
dimensionedScalar constRho_;
|
||||
|
||||
//- Specific heat capacity [J/(kg.K)]
|
||||
dimensionedScalar constCp_;
|
||||
|
||||
//- Heat of formation [J/kg]
|
||||
dimensionedScalar constHf_;
|
||||
|
||||
//- Emissivity
|
||||
dimensionedScalar constEmissivity_;
|
||||
|
||||
//- Absorptivity [1/m]
|
||||
dimensionedScalar constKappaRad_;
|
||||
|
||||
//- Scatter [1/m]
|
||||
dimensionedScalar constSigmaS_;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("constSolidThermo");
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from mesh
|
||||
constSolidThermo(const fvMesh& mesh);
|
||||
|
||||
//- Construct from mesh and dict
|
||||
constSolidThermo(const fvMesh& mesh, const dictionary& dict);
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~constSolidThermo();
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Update properties
|
||||
virtual void correct();
|
||||
|
||||
|
||||
// Derived thermal properties
|
||||
|
||||
//- Thermal conductivity [W/m/K]
|
||||
virtual tmp<volScalarField> kappa() const;
|
||||
|
||||
//- Thermal conductivity [W/m/K]
|
||||
virtual tmp<volSymmTensorField> directionalKappa() const;
|
||||
|
||||
//- Specific heat capacity [J/(kg.K)]
|
||||
virtual tmp<volScalarField> Cp() const;
|
||||
|
||||
//- Heat of formation [J/kg]
|
||||
virtual tmp<volScalarField> Hf() const;
|
||||
|
||||
|
||||
// Per patch calculation
|
||||
|
||||
//- Thermal conductivity [W//m/K]
|
||||
virtual tmp<scalarField> kappa(const label patchI) const;
|
||||
|
||||
//- Thermal conductivity [W//m/K]
|
||||
virtual tmp<symmTensorField>directionalKappa(const label) const;
|
||||
|
||||
//- Specific heat capacity [J/kg/K)]
|
||||
virtual tmp<scalarField> Cp(const label patchI) const;
|
||||
|
||||
//- Heat of formation [J/kg]
|
||||
virtual tmp<scalarField> Hf(const label patchI) const;
|
||||
|
||||
|
||||
|
||||
// I-O
|
||||
|
||||
//- Write the constSolidThermo properties
|
||||
virtual bool writeData(Ostream& os) const;
|
||||
|
||||
//- Read solidThermophysicalProperties dictionary
|
||||
virtual bool read();
|
||||
|
||||
//- Read solidThermophysicalProperties dictionary
|
||||
bool read(const dictionary&);
|
||||
|
||||
//- Ostream Operator
|
||||
friend Ostream& operator<<(Ostream& os, const constSolidThermo& s);
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -1,455 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2012 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 "directionalKSolidThermo.H"
|
||||
#include "addToRunTimeSelectionTable.H"
|
||||
#include "transform.H"
|
||||
#include "transformField.H"
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
defineTypeNameAndDebug(directionalKSolidThermo, 0);
|
||||
addToRunTimeSelectionTable
|
||||
(
|
||||
basicSolidThermo,
|
||||
directionalKSolidThermo,
|
||||
mesh
|
||||
);
|
||||
|
||||
addToRunTimeSelectionTable
|
||||
(
|
||||
basicSolidThermo,
|
||||
directionalKSolidThermo,
|
||||
dictionary
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::directionalKSolidThermo::directionalKSolidThermo
|
||||
(
|
||||
const fvMesh& mesh,
|
||||
const dictionary& dict
|
||||
)
|
||||
:
|
||||
interpolatedSolidThermo(mesh, typeName + "Coeffs", dict),
|
||||
directionalKappa_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"kappa",
|
||||
mesh_.time().timeName(),
|
||||
mesh_,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh_,
|
||||
dimEnergy/dimTime/(dimLength*dimTemperature)
|
||||
),
|
||||
ccTransforms_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"ccTransforms",
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh,
|
||||
dimLength
|
||||
)
|
||||
{
|
||||
init();
|
||||
}
|
||||
|
||||
|
||||
Foam::directionalKSolidThermo::directionalKSolidThermo(const fvMesh& mesh)
|
||||
:
|
||||
interpolatedSolidThermo(mesh, typeName + "Coeffs"),
|
||||
directionalKappa_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"kappa",
|
||||
mesh_.time().timeName(),
|
||||
mesh_,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh_,
|
||||
dimEnergy/dimTime/(dimLength*dimTemperature)
|
||||
),
|
||||
ccTransforms_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"ccTransforms",
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh,
|
||||
dimLength
|
||||
)
|
||||
{
|
||||
init();
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::directionalKSolidThermo::~directionalKSolidThermo()
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
void Foam::directionalKSolidThermo::init()
|
||||
{
|
||||
kappaValues_ =
|
||||
Field<vector>(subDict(typeName + "Coeffs").lookup("kappaValues"));
|
||||
|
||||
Info<< " kappa : " << kappaValues_ << nl << endl;
|
||||
|
||||
// Determine transforms for cell centres
|
||||
forAll(mesh_.C(), cellI)
|
||||
{
|
||||
vector dir = mesh_.C()[cellI] - coordSys_.origin();
|
||||
dir /= mag(dir);
|
||||
|
||||
// Define local coordinate system with
|
||||
// - e1 : axis from cc to centre
|
||||
// - e3 : rotation axis
|
||||
coordinateSystem cs
|
||||
(
|
||||
"cc",
|
||||
coordSys_.origin(),
|
||||
coordSys_.e3(), //z',e3
|
||||
dir //x',e1
|
||||
);
|
||||
|
||||
ccTransforms_[cellI] = cs.R();
|
||||
}
|
||||
|
||||
forAll(mesh_.C().boundaryField(), patchI)
|
||||
{
|
||||
const fvPatchVectorField& patchC = mesh_.C().boundaryField()[patchI];
|
||||
fvPatchTensorField& patchT = ccTransforms_.boundaryField()[patchI];
|
||||
|
||||
tensorField tc(patchT.size());
|
||||
forAll(tc, i)
|
||||
{
|
||||
vector dir = patchC[i] - coordSys_.origin();
|
||||
dir /= mag(dir);
|
||||
|
||||
coordinateSystem cs
|
||||
(
|
||||
"cc",
|
||||
coordSys_.origin(),
|
||||
coordSys_.e3(), //z',e3
|
||||
dir //x',e1
|
||||
);
|
||||
|
||||
tc[i] = cs.R();
|
||||
}
|
||||
patchT = tc;
|
||||
}
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "directionalKSolidThermo : dumping converted Kxx, Kyy, Kzz"
|
||||
<< endl;
|
||||
{
|
||||
volVectorField Kxx
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"Kxx",
|
||||
mesh_.time().timeName(),
|
||||
mesh_,
|
||||
IOobject::NO_READ,
|
||||
IOobject::AUTO_WRITE,
|
||||
false
|
||||
),
|
||||
mesh_,
|
||||
dimless
|
||||
);
|
||||
Kxx.internalField() = transform
|
||||
(
|
||||
ccTransforms_.internalField(),
|
||||
vectorField
|
||||
(
|
||||
ccTransforms_.internalField().size(),
|
||||
point(1, 0, 0)
|
||||
)
|
||||
);
|
||||
forAll(Kxx.boundaryField(), patchI)
|
||||
{
|
||||
Kxx.boundaryField()[patchI] = transform
|
||||
(
|
||||
ccTransforms_.boundaryField()[patchI],
|
||||
vectorField
|
||||
(
|
||||
ccTransforms_.boundaryField()[patchI].size(),
|
||||
point(1, 0, 0)
|
||||
)
|
||||
);
|
||||
}
|
||||
Kxx.write();
|
||||
}
|
||||
{
|
||||
volVectorField Kyy
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"Kyy",
|
||||
mesh_.time().timeName(),
|
||||
mesh_,
|
||||
IOobject::NO_READ,
|
||||
IOobject::AUTO_WRITE,
|
||||
false
|
||||
),
|
||||
mesh_,
|
||||
dimless
|
||||
);
|
||||
Kyy.internalField() = transform
|
||||
(
|
||||
ccTransforms_.internalField(),
|
||||
vectorField
|
||||
(
|
||||
ccTransforms_.internalField().size(),
|
||||
point(0, 1, 0)
|
||||
)
|
||||
);
|
||||
forAll(Kyy.boundaryField(), patchI)
|
||||
{
|
||||
Kyy.boundaryField()[patchI] = transform
|
||||
(
|
||||
ccTransforms_.boundaryField()[patchI],
|
||||
vectorField
|
||||
(
|
||||
ccTransforms_.boundaryField()[patchI].size(),
|
||||
point(0, 1, 0)
|
||||
)
|
||||
);
|
||||
}
|
||||
Kyy.write();
|
||||
}
|
||||
{
|
||||
volVectorField Kzz
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"Kzz",
|
||||
mesh_.time().timeName(),
|
||||
mesh_,
|
||||
IOobject::NO_READ,
|
||||
IOobject::AUTO_WRITE,
|
||||
false
|
||||
),
|
||||
mesh_,
|
||||
dimless
|
||||
);
|
||||
Kzz.internalField() = transform
|
||||
(
|
||||
ccTransforms_.internalField(),
|
||||
vectorField
|
||||
(
|
||||
ccTransforms_.internalField().size(),
|
||||
point(0, 0, 1)
|
||||
)
|
||||
);
|
||||
forAll(Kzz.boundaryField(), patchI)
|
||||
{
|
||||
Kzz.boundaryField()[patchI] = transform
|
||||
(
|
||||
ccTransforms_.boundaryField()[patchI],
|
||||
vectorField
|
||||
(
|
||||
ccTransforms_.boundaryField()[patchI].size(),
|
||||
point(0, 0, 1)
|
||||
)
|
||||
);
|
||||
}
|
||||
Kzz.write();
|
||||
}
|
||||
}
|
||||
|
||||
correct();
|
||||
}
|
||||
|
||||
|
||||
Foam::symmTensor Foam::directionalKSolidThermo::transformPrincipal
|
||||
(
|
||||
const tensor& tt,
|
||||
const vector& st
|
||||
) const
|
||||
{
|
||||
return symmTensor
|
||||
(
|
||||
tt.xx()*st.x()*tt.xx()
|
||||
+ tt.xy()*st.y()*tt.xy()
|
||||
+ tt.xz()*st.z()*tt.xz(),
|
||||
|
||||
tt.xx()*st.x()*tt.yx()
|
||||
+ tt.xy()*st.y()*tt.yy()
|
||||
+ tt.xz()*st.z()*tt.yz(),
|
||||
|
||||
tt.xx()*st.x()*tt.zx()
|
||||
+ tt.xy()*st.y()*tt.zy()
|
||||
+ tt.xz()*st.z()*tt.zz(),
|
||||
|
||||
tt.yx()*st.x()*tt.yx()
|
||||
+ tt.yy()*st.y()*tt.yy()
|
||||
+ tt.yz()*st.z()*tt.yz(),
|
||||
|
||||
tt.yx()*st.x()*tt.zx()
|
||||
+ tt.yy()*st.y()*tt.zy()
|
||||
+ tt.yz()*st.z()*tt.zz(),
|
||||
|
||||
tt.zx()*st.x()*tt.zx()
|
||||
+ tt.zy()*st.y()*tt.zy()
|
||||
+ tt.zz()*st.z()*tt.zz()
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
void Foam::directionalKSolidThermo::transformField
|
||||
(
|
||||
symmTensorField& fld,
|
||||
const tensorField& tt,
|
||||
const vectorField& st
|
||||
) const
|
||||
{
|
||||
fld.setSize(tt.size());
|
||||
forAll(fld, i)
|
||||
{
|
||||
fld[i] = transformPrincipal(tt[i], st[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Foam::directionalKSolidThermo::correct()
|
||||
{
|
||||
calculate();
|
||||
interpolatedSolidThermo::calculate();
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::volSymmTensorField>
|
||||
Foam::directionalKSolidThermo::directionalKappa() const
|
||||
{
|
||||
return directionalKappa_;
|
||||
}
|
||||
|
||||
|
||||
void Foam::directionalKSolidThermo::calculate()
|
||||
{
|
||||
// Correct directionalK
|
||||
Field<vector> localKappa
|
||||
(
|
||||
interpolateXY
|
||||
(
|
||||
T_.internalField(),
|
||||
TValues_,
|
||||
kappaValues_
|
||||
)
|
||||
);
|
||||
|
||||
// Transform into global coordinate system
|
||||
transformField
|
||||
(
|
||||
directionalKappa_.internalField(),
|
||||
ccTransforms_.internalField(),
|
||||
localKappa
|
||||
);
|
||||
|
||||
forAll(directionalKappa_.boundaryField(), patchI)
|
||||
{
|
||||
directionalKappa_.boundaryField()[patchI] ==
|
||||
this->directionalKappa(patchI)();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::symmTensorField> Foam::directionalKSolidThermo::directionalKappa
|
||||
(
|
||||
const label patchI
|
||||
) const
|
||||
{
|
||||
const fvPatchScalarField& patchT = T_.boundaryField()[patchI];
|
||||
|
||||
Field<vector> localKappa(interpolateXY(patchT, TValues_, kappaValues_));
|
||||
|
||||
tmp<symmTensorField> tglobalK(new symmTensorField(localKappa.size()));
|
||||
transformField
|
||||
(
|
||||
tglobalK(), ccTransforms_.boundaryField()[patchI], localKappa
|
||||
);
|
||||
|
||||
return tglobalK;
|
||||
}
|
||||
|
||||
|
||||
bool Foam::directionalKSolidThermo::read()
|
||||
{
|
||||
return read(subDict(typeName + "Coeffs"));
|
||||
}
|
||||
|
||||
|
||||
bool Foam::directionalKSolidThermo::read(const dictionary& dict)
|
||||
{
|
||||
coordSys_ = coordinateSystem(dict, mesh_);
|
||||
kappaValues_ =
|
||||
Field<vector>(subDict(typeName + "Coeffs").lookup("kappaValues"));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool Foam::directionalKSolidThermo::writeData(Ostream& os) const
|
||||
{
|
||||
bool ok = interpolatedSolidThermo::writeData(os);
|
||||
os.writeKeyword("kappaValues")
|
||||
<< kappaValues_ << token::END_STATEMENT << nl;
|
||||
return ok && os.good();
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * IOStream operators * * * * * * * * * * * * * //
|
||||
|
||||
Foam::Ostream& Foam::operator<<(Ostream& os, const directionalKSolidThermo& s)
|
||||
{
|
||||
s.writeData(os);
|
||||
return os;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -1,173 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2012 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::directionalKSolidThermo
|
||||
|
||||
Description
|
||||
Directional conductivity + table interpolation.
|
||||
|
||||
SourceFiles
|
||||
directionalKSolidThermo.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef directionalKSolidThermo_H
|
||||
#define directionalKSolidThermo_H
|
||||
|
||||
#include "coordinateSystem.H"
|
||||
#include "interpolatedSolidThermo.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class directionalKSolidThermo Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class directionalKSolidThermo
|
||||
:
|
||||
public interpolatedSolidThermo
|
||||
{
|
||||
// Private data
|
||||
|
||||
//- Thermal conductivity [W/(m.K)]
|
||||
volSymmTensorField directionalKappa_;
|
||||
|
||||
//- Thermal conductivity vector
|
||||
Field<vector> kappaValues_;
|
||||
|
||||
//- Coordinate system used for the directional properties
|
||||
coordinateSystem coordSys_;
|
||||
|
||||
//- Transformation for cell centres
|
||||
volTensorField ccTransforms_;
|
||||
|
||||
|
||||
// Private Member Functions
|
||||
|
||||
//- Transform principal values of symmTensor
|
||||
symmTensor transformPrincipal
|
||||
(
|
||||
const tensor& tt,
|
||||
const vector& st
|
||||
) const;
|
||||
|
||||
//- Transform principal values of symmTensor
|
||||
void transformField
|
||||
(
|
||||
symmTensorField& fld,
|
||||
const tensorField& tt,
|
||||
const vectorField& st
|
||||
) const;
|
||||
|
||||
//- Calculate properties
|
||||
void calculate();
|
||||
|
||||
//- Initialize thermo
|
||||
void init();
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("directionalKSolidThermo");
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from mesh
|
||||
directionalKSolidThermo(const fvMesh& mesh);
|
||||
|
||||
//- Construct from mesh and dictionary
|
||||
directionalKSolidThermo(const fvMesh& mesh, const dictionary& dict);
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~directionalKSolidThermo();
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Update properties
|
||||
virtual void correct();
|
||||
|
||||
//- Access functions
|
||||
|
||||
//- Thermal conductivity [W/m/K]
|
||||
virtual tmp<volScalarField> kappa() const
|
||||
{
|
||||
notImplemented("directionalKSolidThermo::kappa() const");
|
||||
return tmp<volScalarField>(NULL);
|
||||
}
|
||||
|
||||
//- Thermal conductivity [W/m/K]
|
||||
virtual tmp<volSymmTensorField> directionalKappa() const;
|
||||
|
||||
// Per patch calculation
|
||||
|
||||
//- Thermal conductivity [W//m/K]
|
||||
virtual tmp<scalarField> kappa(const label patchI) const
|
||||
{
|
||||
notImplemented
|
||||
(
|
||||
"directionalKSolidThermo::kappa(const label) const"
|
||||
);
|
||||
return tmp<scalarField>(NULL);
|
||||
}
|
||||
|
||||
//- Thermal conductivity [W//m/K]
|
||||
virtual tmp<symmTensorField> directionalKappa(const label) const;
|
||||
|
||||
|
||||
// I-O
|
||||
|
||||
//- Write the directionalKSolidThermo properties
|
||||
virtual bool writeData(Ostream& os) const;
|
||||
|
||||
//- Read the directionalKSolidThermo properties
|
||||
virtual bool read();
|
||||
|
||||
//- Read the directionalKSolidThermo properties
|
||||
bool read(const dictionary& dict);
|
||||
|
||||
//- Ostream Operator
|
||||
friend Ostream& operator<<
|
||||
(
|
||||
Ostream& os,
|
||||
const directionalKSolidThermo& s
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,534 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2012 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 "heSolidThermo.H"
|
||||
#include "volFields.H"
|
||||
|
||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||
|
||||
template<class MixtureType, class BasicSolidThermo>
|
||||
void Foam::heSolidThermo<MixtureType, BasicSolidThermo>::calculate()
|
||||
{
|
||||
|
||||
scalarField& TCells = this->T_.internalField();
|
||||
|
||||
const scalarField& hCells = this->he_.internalField();
|
||||
const scalarField& pCells = this->p_.internalField();
|
||||
scalarField& rhoCells = this->rho_.internalField();
|
||||
scalarField& alphaCells = this->alpha_.internalField();
|
||||
|
||||
forAll(TCells, celli)
|
||||
{
|
||||
const typename MixtureType::thermoType& mixture_ =
|
||||
this->cellMixture(celli);
|
||||
|
||||
const typename MixtureType::thermoType& volMixture_ =
|
||||
this->cellVolMixture(pCells[celli], TCells[celli], celli);
|
||||
|
||||
TCells[celli] = mixture_.THE
|
||||
(
|
||||
hCells[celli],
|
||||
pCells[celli],
|
||||
TCells[celli]
|
||||
);
|
||||
|
||||
rhoCells[celli] = volMixture_.rho(pCells[celli], TCells[celli]);
|
||||
|
||||
alphaCells[celli] =
|
||||
volMixture_.kappa(TCells[celli])
|
||||
/
|
||||
mixture_.Cpv(pCells[celli], TCells[celli]);
|
||||
}
|
||||
|
||||
forAll(this->T_.boundaryField(), patchi)
|
||||
{
|
||||
fvPatchScalarField& pp = this->p_.boundaryField()[patchi];
|
||||
fvPatchScalarField& pT = this->T_.boundaryField()[patchi];
|
||||
fvPatchScalarField& prho = this->rho_.boundaryField()[patchi];
|
||||
fvPatchScalarField& palpha = this->alpha_.boundaryField()[patchi];
|
||||
|
||||
fvPatchScalarField& ph = this->he_.boundaryField()[patchi];
|
||||
|
||||
if (pT.fixesValue())
|
||||
{
|
||||
forAll(pT, facei)
|
||||
{
|
||||
const typename MixtureType::thermoType& mixture_ =
|
||||
this->patchFaceMixture(patchi, facei);
|
||||
|
||||
const typename MixtureType::thermoType& volMixture_ =
|
||||
this->patchFaceVolMixture
|
||||
(
|
||||
pp[facei],
|
||||
pT[facei],
|
||||
patchi,
|
||||
facei
|
||||
);
|
||||
|
||||
ph[facei] = mixture_.HE(pp[facei], pT[facei]);
|
||||
prho[facei] = volMixture_.rho(pp[facei], pT[facei]);
|
||||
palpha[facei] =
|
||||
volMixture_.kappa(pT[facei])
|
||||
/ mixture_.Cpv(pp[facei], pT[facei]);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
forAll(pT, facei)
|
||||
{
|
||||
const typename MixtureType::thermoType& mixture_ =
|
||||
this->patchFaceMixture(patchi, facei);
|
||||
|
||||
const typename MixtureType::thermoType& volMixture_ =
|
||||
this->patchFaceVolMixture
|
||||
(
|
||||
pp[facei],
|
||||
pT[facei],
|
||||
patchi,
|
||||
facei
|
||||
);
|
||||
|
||||
pT[facei] = mixture_.THE(ph[facei], pp[facei] ,pT[facei]);
|
||||
prho[facei] = volMixture_.rho(pp[facei], pT[facei]);
|
||||
palpha[facei] =
|
||||
volMixture_.kappa(pT[facei])
|
||||
/ mixture_.Cpv(pp[facei], pT[facei]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
template<class MixtureType, class BasicSolidThermo>
|
||||
Foam::heSolidThermo<MixtureType, BasicSolidThermo>::
|
||||
heSolidThermo(const fvMesh& mesh)
|
||||
:
|
||||
heThermo<BasicSolidThermo, MixtureType>(mesh)
|
||||
{
|
||||
calculate();
|
||||
}
|
||||
|
||||
|
||||
template<class MixtureType, class BasicSolidThermo>
|
||||
Foam::heSolidThermo<MixtureType, BasicSolidThermo>::
|
||||
heSolidThermo(const fvMesh& mesh, const dictionary& dict)
|
||||
:
|
||||
heThermo<BasicSolidThermo, MixtureType>(mesh, dict)
|
||||
{
|
||||
calculate();
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||
|
||||
template<class MixtureType, class BasicSolidThermo>
|
||||
Foam::heSolidThermo<MixtureType, BasicSolidThermo>::~heSolidThermo()
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
template<class MixtureType, class BasicSolidThermo>
|
||||
void Foam::heSolidThermo<MixtureType, BasicSolidThermo>::correct()
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
Info<< "entering heSolidThermo<MixtureType>::correct()" << endl;
|
||||
}
|
||||
|
||||
calculate();
|
||||
|
||||
if (debug)
|
||||
{
|
||||
Info<< "exiting heSolidThermo<MixtureType>::correct()" << endl;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
template<class MixtureType, class BasicSolidThermo>
|
||||
Foam::tmp<Foam::volVectorField>
|
||||
Foam::heSolidThermo<MixtureType, BasicSolidThermo>::Kappa() const
|
||||
{
|
||||
const fvMesh& mesh = this->T_.mesh();
|
||||
|
||||
tmp<volVectorField> tKappa
|
||||
(
|
||||
new volVectorField
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"Kappa",
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh,
|
||||
dimEnergy/dimTime/dimLength/dimTemperature
|
||||
)
|
||||
);
|
||||
|
||||
volVectorField& Kappa = tKappa();
|
||||
vectorField& KappaCells = Kappa.internalField();
|
||||
const scalarField& TCells = this->T_.internalField();
|
||||
const scalarField& pCells = this->p_.internalField();
|
||||
|
||||
forAll(KappaCells, celli)
|
||||
{
|
||||
Kappa[celli] =
|
||||
this->cellVolMixture
|
||||
(
|
||||
pCells[celli],
|
||||
TCells[celli],
|
||||
celli
|
||||
).Kappa(TCells[celli]);
|
||||
}
|
||||
|
||||
forAll(Kappa.boundaryField(), patchi)
|
||||
{
|
||||
vectorField& Kappap = Kappa.boundaryField()[patchi];
|
||||
const scalarField& pT = this->T_.boundaryField()[patchi];
|
||||
const scalarField& pp = this->p_.boundaryField()[patchi];
|
||||
|
||||
forAll(Kappap, facei)
|
||||
{
|
||||
Kappap[facei] =
|
||||
this->patchFaceVolMixture
|
||||
(
|
||||
pp[facei],
|
||||
pT[facei],
|
||||
patchi,
|
||||
facei
|
||||
).Kappa(pT[facei]);
|
||||
}
|
||||
}
|
||||
|
||||
return tKappa;
|
||||
}
|
||||
|
||||
|
||||
template<class MixtureType, class BasicSolidThermo>
|
||||
Foam::tmp<Foam::volScalarField>
|
||||
Foam::heSolidThermo<MixtureType, BasicSolidThermo>::kappaRad() const
|
||||
{
|
||||
const fvMesh& mesh = this->T_.mesh();
|
||||
|
||||
tmp<volScalarField> tkappaRad
|
||||
(
|
||||
new volScalarField
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"kappaRad",
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh,
|
||||
inv(dimLength)
|
||||
)
|
||||
);
|
||||
|
||||
volScalarField& kappaRad = tkappaRad();
|
||||
scalarField& kappaRadCells = kappaRad.internalField();
|
||||
const scalarField& TCells = this->T_.internalField();
|
||||
const scalarField& pCells = this->p_.internalField();
|
||||
|
||||
forAll(kappaRadCells, celli)
|
||||
{
|
||||
kappaRadCells[celli] =
|
||||
this->cellVolMixture
|
||||
(
|
||||
pCells[celli],
|
||||
TCells[celli],
|
||||
celli
|
||||
).kappaRad(TCells[celli]);
|
||||
}
|
||||
|
||||
forAll(kappaRad.boundaryField(), patchi)
|
||||
{
|
||||
scalarField& kappaRadp = kappaRad.boundaryField()[patchi];
|
||||
const scalarField& pT = this->T_.boundaryField()[patchi];
|
||||
const scalarField& pp = this->p_.boundaryField()[patchi];
|
||||
|
||||
forAll(kappaRadp, facei)
|
||||
{
|
||||
kappaRadp[facei] =
|
||||
this->patchFaceVolMixture
|
||||
(
|
||||
pp[facei],
|
||||
pT[facei],
|
||||
patchi,
|
||||
facei
|
||||
).kappaRad(pT[facei]);
|
||||
}
|
||||
}
|
||||
|
||||
return tkappaRad;
|
||||
}
|
||||
|
||||
|
||||
template<class MixtureType, class BasicSolidThermo>
|
||||
Foam::tmp<Foam::volScalarField>
|
||||
Foam::heSolidThermo<MixtureType, BasicSolidThermo>::sigmaS() const
|
||||
{
|
||||
const fvMesh& mesh = this->T_.mesh();
|
||||
|
||||
tmp<volScalarField> tsigmaS
|
||||
(
|
||||
new volScalarField
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"sigmaS",
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh,
|
||||
inv(dimLength)
|
||||
)
|
||||
);
|
||||
|
||||
volScalarField& sigmaS = tsigmaS();
|
||||
scalarField& sigmaSCells = sigmaS.internalField();
|
||||
const scalarField& TCells = this->T_.internalField();
|
||||
const scalarField& pCells = this->p_.internalField();
|
||||
|
||||
forAll(sigmaSCells, celli)
|
||||
{
|
||||
sigmaSCells[celli] =
|
||||
this->cellVolMixture
|
||||
(
|
||||
pCells[celli],
|
||||
TCells[celli],
|
||||
celli
|
||||
).sigmaS(TCells[celli]);
|
||||
}
|
||||
|
||||
forAll(sigmaS.boundaryField(), patchi)
|
||||
{
|
||||
scalarField& sigmaSp = sigmaS.boundaryField()[patchi];
|
||||
const scalarField& pT = this->T_.boundaryField()[patchi];
|
||||
const scalarField& pp = this->p_.boundaryField()[patchi];
|
||||
|
||||
forAll(sigmaSp, facei)
|
||||
{
|
||||
sigmaSp[facei] =
|
||||
this->patchFaceVolMixture
|
||||
(
|
||||
pp[facei],
|
||||
pT[facei],
|
||||
patchi,
|
||||
facei
|
||||
).sigmaS(pT[facei]);
|
||||
}
|
||||
}
|
||||
|
||||
return tsigmaS;
|
||||
}
|
||||
|
||||
|
||||
template<class MixtureType, class BasicSolidThermo>
|
||||
Foam::tmp<Foam::volScalarField>
|
||||
Foam::heSolidThermo<MixtureType, BasicSolidThermo>::emissivity() const
|
||||
{
|
||||
const fvMesh& mesh = this->T_.mesh();
|
||||
|
||||
tmp<volScalarField> temissivity
|
||||
(
|
||||
new volScalarField
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"emissivity",
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh,
|
||||
inv(dimLength)
|
||||
)
|
||||
);
|
||||
|
||||
volScalarField& emissivity = temissivity();
|
||||
scalarField& emissivityCells = emissivity.internalField();
|
||||
const scalarField& TCells = this->T_.internalField();
|
||||
const scalarField& pCells = this->p_.internalField();
|
||||
|
||||
forAll(emissivityCells, celli)
|
||||
{
|
||||
emissivityCells[celli] =
|
||||
this->cellVolMixture
|
||||
(
|
||||
pCells[celli],
|
||||
TCells[celli],
|
||||
celli
|
||||
).emissivity(TCells[celli]);
|
||||
}
|
||||
|
||||
forAll(emissivity.boundaryField(), patchi)
|
||||
{
|
||||
scalarField& emissivityp = emissivity.boundaryField()[patchi];
|
||||
const scalarField& pT = this->T_.boundaryField()[patchi];
|
||||
const scalarField& pp = this->p_.boundaryField()[patchi];
|
||||
|
||||
forAll(emissivityp, facei)
|
||||
{
|
||||
emissivityp[facei] =
|
||||
this->patchFaceVolMixture
|
||||
(
|
||||
pp[facei],
|
||||
pT[facei],
|
||||
patchi,
|
||||
facei
|
||||
).emissivity(pT[facei]);
|
||||
}
|
||||
}
|
||||
|
||||
return temissivity;
|
||||
}
|
||||
|
||||
|
||||
template<class MixtureType, class BasicSolidThermo>
|
||||
Foam::tmp<Foam::vectorField>
|
||||
Foam::heSolidThermo<MixtureType, BasicSolidThermo>::Kappa
|
||||
(
|
||||
const label patchi
|
||||
) const
|
||||
{
|
||||
const scalarField& pp = this->p_.boundaryField()[patchi];
|
||||
const scalarField& Tp = this->T_.boundaryField()[patchi];
|
||||
tmp<vectorField> tKappa(new vectorField(pp.size()));
|
||||
|
||||
vectorField& Kappap = tKappa();
|
||||
|
||||
forAll(Tp, facei)
|
||||
{
|
||||
Kappap[facei] =
|
||||
this->patchFaceVolMixture
|
||||
(
|
||||
pp[facei],
|
||||
Tp[facei],
|
||||
patchi,
|
||||
facei
|
||||
).Kappa(Tp[facei]);
|
||||
}
|
||||
|
||||
return tKappa;
|
||||
}
|
||||
|
||||
|
||||
template<class MixtureType, class BasicSolidThermo>
|
||||
Foam::tmp<Foam::scalarField>
|
||||
Foam::heSolidThermo<MixtureType, BasicSolidThermo>::kappaRad
|
||||
(
|
||||
const label patchi
|
||||
) const
|
||||
{
|
||||
const scalarField& Tp = this->T_.boundaryField()[patchi];
|
||||
tmp<scalarField> tKappaRad(new scalarField(Tp.size()));
|
||||
scalarField& KappapRadp = tKappaRad();
|
||||
const scalarField& pp = this->p_.boundaryField()[patchi];
|
||||
|
||||
forAll(Tp, facei)
|
||||
{
|
||||
KappapRadp[facei] =
|
||||
this->patchFaceVolMixture
|
||||
(
|
||||
pp[facei],
|
||||
Tp[facei],
|
||||
patchi,
|
||||
facei
|
||||
).kappaRad(Tp[facei]);
|
||||
}
|
||||
|
||||
return tKappaRad;
|
||||
}
|
||||
|
||||
|
||||
template<class MixtureType, class BasicSolidThermo>
|
||||
Foam::tmp<Foam::scalarField>
|
||||
Foam::heSolidThermo<MixtureType, BasicSolidThermo>::sigmaS
|
||||
(
|
||||
const label patchi
|
||||
) const
|
||||
{
|
||||
const scalarField& Tp = this->T_.boundaryField()[patchi];
|
||||
tmp<scalarField> tsigmaS(new scalarField(Tp.size()));
|
||||
scalarField& sigmaSp = tsigmaS();
|
||||
const scalarField& pp = this->p_.boundaryField()[patchi];
|
||||
|
||||
|
||||
forAll(Tp, facei)
|
||||
{
|
||||
sigmaSp[facei] =
|
||||
this->patchFaceVolMixture
|
||||
(
|
||||
pp[facei],
|
||||
Tp[facei],
|
||||
patchi,
|
||||
facei
|
||||
).sigmaS(Tp[facei]);
|
||||
}
|
||||
|
||||
return tsigmaS;
|
||||
}
|
||||
|
||||
|
||||
template<class MixtureType, class BasicSolidThermo>
|
||||
Foam::tmp<Foam::scalarField>
|
||||
Foam::heSolidThermo<MixtureType, BasicSolidThermo>::emissivity
|
||||
(
|
||||
const label patchi
|
||||
) const
|
||||
{
|
||||
const scalarField& Tp = this->T_.boundaryField()[patchi];
|
||||
tmp<scalarField> temissivity(new scalarField(Tp.size()));
|
||||
scalarField& emissivity = temissivity();
|
||||
const scalarField& pp = this->p_.boundaryField()[patchi];
|
||||
|
||||
forAll(Tp, facei)
|
||||
{
|
||||
emissivity[facei] =
|
||||
this->patchFaceVolMixture
|
||||
(
|
||||
pp[facei],
|
||||
Tp[facei],
|
||||
patchi,
|
||||
facei
|
||||
).emissivity(Tp[facei]);
|
||||
}
|
||||
|
||||
return temissivity;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,151 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2012 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::heSolidThermo
|
||||
|
||||
Description
|
||||
Enthalpy, internal energy based for a solid mixture.
|
||||
|
||||
SourceFiles
|
||||
heSolidThermo.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef heSolidThermo_H
|
||||
#define heSolidThermo_H
|
||||
|
||||
#include "heThermo.H"
|
||||
#include "solidThermo.H"
|
||||
#include "coordinateSystem.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class heSolidThermo Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
template<class MixtureType, class BasicSolidThermo>
|
||||
class heSolidThermo
|
||||
:
|
||||
public heThermo<BasicSolidThermo, MixtureType>
|
||||
{
|
||||
|
||||
// Private Member Functions
|
||||
|
||||
//- Calculate the thermo variables
|
||||
void calculate();
|
||||
|
||||
//- Construct as copy (not implemented)
|
||||
heSolidThermo(const heSolidThermo<MixtureType, BasicSolidThermo>&);
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("heSolidThermo");
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from mesh
|
||||
heSolidThermo(const fvMesh&);
|
||||
|
||||
//- Construct from mesh and dictionary
|
||||
heSolidThermo(const fvMesh&, const dictionary&);
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~heSolidThermo();
|
||||
|
||||
|
||||
// Member functions
|
||||
|
||||
//- Update properties
|
||||
virtual void correct();
|
||||
|
||||
|
||||
// Derived thermal properties
|
||||
|
||||
//- Isotropic thermal conductivity [W/m/K]
|
||||
//virtual tmp<volScalarField> kappa() const;
|
||||
|
||||
//- Anisotropic thermal conductivity [W/m/K]
|
||||
virtual tmp<volVectorField> Kappa() const;
|
||||
|
||||
//- Absorption coefficient [1/m]
|
||||
virtual tmp<volScalarField> kappaRad() const;
|
||||
|
||||
//- Scatter coefficient
|
||||
virtual tmp<volScalarField> sigmaS() const;
|
||||
|
||||
//- Emissivity coefficient [1/m]
|
||||
virtual tmp<volScalarField> emissivity() const;
|
||||
|
||||
|
||||
// Per patch calculation
|
||||
|
||||
//- Anisotropic thermal conductivity [W//m/K]
|
||||
virtual tmp<vectorField> Kappa
|
||||
(
|
||||
const label patchI
|
||||
) const;
|
||||
|
||||
//- Absorption coefficient [1/m]
|
||||
virtual tmp<scalarField> kappaRad
|
||||
(
|
||||
const label patchI
|
||||
) const;
|
||||
|
||||
//- Scatter coefficient
|
||||
virtual tmp<scalarField> sigmaS
|
||||
(
|
||||
const label patchI
|
||||
) const;
|
||||
|
||||
//- Emissivity coefficient [1/m]
|
||||
virtual tmp<scalarField> emissivity
|
||||
(
|
||||
const label patchI
|
||||
) const;
|
||||
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
|
||||
#ifdef NoRepository
|
||||
# include "heSolidThermo.C"
|
||||
#endif
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -2,7 +2,7 @@
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011 OpenFOAM Foundation
|
||||
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
@ -23,74 +23,106 @@ License
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "makeSolidMixtureThermo.H"
|
||||
|
||||
#include "makeSolidThermo.H"
|
||||
|
||||
#include "constRho.H"
|
||||
|
||||
#include "constSolidThermo.H"
|
||||
#include "exponentialSolidThermo.H"
|
||||
|
||||
#include "constSolidTransport.H"
|
||||
#include "constIsoSolidTransport.H"
|
||||
#include "constAnIsoSolidTransport.H"
|
||||
#include "exponentialSolidTransport.H"
|
||||
|
||||
#include "constSolidRad.H"
|
||||
|
||||
#include "basicSolidThermo.H"
|
||||
|
||||
#include "pureSolidMixture.H"
|
||||
#include "multiComponentSolidMixture.H"
|
||||
#include "reactingSolidMixture.H"
|
||||
|
||||
#include "sensibleEnthalpy.H"
|
||||
#include "sensibleInternalEnergy.H"
|
||||
#include "specieThermo.H"
|
||||
|
||||
#include "heThermo.H"
|
||||
|
||||
#include "solidThermo.H"
|
||||
#include "solidReactionThermo.H"
|
||||
#include "heSolidThermo.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
/* * * * * * * * * * * * * * * private static data * * * * * * * * * * * * * */
|
||||
/* * * * * * * * * * * * * * * * * Enthalpy-based * * * * * * * * * * * * * */
|
||||
|
||||
makeSolidMixtureThermo
|
||||
makeSolidThermo
|
||||
(
|
||||
basicSolidThermo,
|
||||
solidMixtureThermo,
|
||||
multiComponentSolidMixture,
|
||||
constSolidTransport,
|
||||
solidThermo,
|
||||
heSolidThermo,
|
||||
pureSolidMixture,
|
||||
constIsoSolidTransport,
|
||||
constSolidRad,
|
||||
sensibleEnthalpy,
|
||||
constSolidThermo,
|
||||
constRho
|
||||
);
|
||||
|
||||
makeSolidMixtureThermo
|
||||
makeSolidThermo
|
||||
(
|
||||
basicSolidThermo,
|
||||
solidMixtureThermo,
|
||||
multiComponentSolidMixture,
|
||||
exponentialSolidTransport,
|
||||
constSolidRad,
|
||||
exponentialSolidThermo,
|
||||
constRho
|
||||
);
|
||||
|
||||
makeSolidMixtureThermo
|
||||
(
|
||||
basicSolidThermo,
|
||||
solidMixtureThermo,
|
||||
reactingSolidMixture,
|
||||
exponentialSolidTransport,
|
||||
constSolidRad,
|
||||
exponentialSolidThermo,
|
||||
constRho
|
||||
);
|
||||
|
||||
makeSolidMixtureThermo
|
||||
(
|
||||
basicSolidThermo,
|
||||
solidMixtureThermo,
|
||||
reactingSolidMixture,
|
||||
constSolidTransport,
|
||||
solidThermo,
|
||||
heSolidThermo,
|
||||
pureSolidMixture,
|
||||
constAnIsoSolidTransport,
|
||||
constSolidRad,
|
||||
sensibleEnthalpy,
|
||||
constSolidThermo,
|
||||
constRho
|
||||
);
|
||||
|
||||
makeSolidThermo
|
||||
(
|
||||
solidThermo,
|
||||
heSolidThermo,
|
||||
pureSolidMixture,
|
||||
exponentialSolidTransport,
|
||||
constSolidRad,
|
||||
sensibleEnthalpy,
|
||||
exponentialSolidThermo,
|
||||
constRho
|
||||
);
|
||||
|
||||
makeSolidThermo
|
||||
(
|
||||
solidThermo,
|
||||
heSolidThermo,
|
||||
multiComponentSolidMixture,
|
||||
constIsoSolidTransport,
|
||||
constSolidRad,
|
||||
sensibleEnthalpy,
|
||||
constSolidThermo,
|
||||
constRho
|
||||
);
|
||||
|
||||
// Reacting solid thermo
|
||||
makeSolidThermo
|
||||
(
|
||||
solidReactionThermo,
|
||||
heSolidThermo,
|
||||
reactingSolidMixture,
|
||||
constIsoSolidTransport,
|
||||
constSolidRad,
|
||||
sensibleEnthalpy,
|
||||
constSolidThermo,
|
||||
constRho
|
||||
);
|
||||
|
||||
/* * * * * * * * * * * * * * Internal-energy-based * * * * * * * * * * * * * */
|
||||
/*
|
||||
|
||||
*/
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
@ -1,114 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011 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 "interpolateSolid.H"
|
||||
#include "interpolateXY.H"
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::interpolateSolid::interpolateSolid(const dictionary& dict)
|
||||
{
|
||||
read(dict);
|
||||
|
||||
Info<< "Constructed solid thermo with samples" << nl
|
||||
<< " T : " << TValues_ << nl
|
||||
<< " rho : " << rhoValues_ << nl
|
||||
<< " cp : " << cpValues_ << nl
|
||||
<< " Hf : " << HfValues_ << nl
|
||||
<< " emissivity : " << emissivityValues_ << nl
|
||||
<< " kappaRad : " << kappaRadValues_ << nl
|
||||
<< " sigmaS : " << sigmaSValues_ << nl;
|
||||
|
||||
|
||||
if
|
||||
(
|
||||
(TValues_.size() != rhoValues_.size())
|
||||
&& (TValues_.size() != cpValues_.size())
|
||||
&& (TValues_.size() != rhoValues_.size())
|
||||
&& (TValues_.size() != HfValues_.size())
|
||||
&& (TValues_.size() != emissivityValues_.size())
|
||||
)
|
||||
{
|
||||
FatalIOErrorIn("interpolateSolid::read()", dict)
|
||||
<< "Size of property tables should be equal to size of Temperature"
|
||||
<< " values " << TValues_.size()
|
||||
<< exit(FatalIOError);
|
||||
}
|
||||
|
||||
for (label i = 1; i < TValues_.size(); i++)
|
||||
{
|
||||
if (TValues_[i] <= TValues_[i-1])
|
||||
{
|
||||
FatalIOErrorIn("interpolateSolid::read()", dict)
|
||||
<< "Temperature values are not in increasing order "
|
||||
<< TValues_ << exit(FatalIOError);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::interpolateSolid::~interpolateSolid()
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
bool Foam::interpolateSolid::writeData(Ostream& os) const
|
||||
{
|
||||
|
||||
os.writeKeyword("TValues") << TValues_ << token::END_STATEMENT << nl;
|
||||
os.writeKeyword("rhoValues") << rhoValues_ << token::END_STATEMENT << nl;
|
||||
os.writeKeyword("cpValues") << cpValues_ << token::END_STATEMENT << nl;
|
||||
os.writeKeyword("HfValues") << HfValues_ << token::END_STATEMENT << nl;
|
||||
os.writeKeyword("emissivityValues") << emissivityValues_ <<
|
||||
token::END_STATEMENT << nl;
|
||||
os.writeKeyword("kappaRadValues") << kappaRadValues_
|
||||
<< token::END_STATEMENT << nl;
|
||||
os.writeKeyword("sigmaSValues") << sigmaSValues_
|
||||
<< token::END_STATEMENT << nl;
|
||||
|
||||
|
||||
return os.good();
|
||||
}
|
||||
|
||||
|
||||
bool Foam::interpolateSolid::read(const dictionary& dict)
|
||||
{
|
||||
TValues_ = Field<scalar>(dict.lookup("TValues"));
|
||||
rhoValues_ = Field<scalar>(dict.lookup("rhoValues"));
|
||||
cpValues_ = Field<scalar>(dict.lookup("cpValues"));
|
||||
kappaRadValues_ = Field<scalar>(dict.lookup("kappaRadValues"));
|
||||
sigmaSValues_ = Field<scalar>(dict.lookup("sigmaSValues"));
|
||||
HfValues_ = Field<scalar>(dict.lookup("HfValues"));
|
||||
emissivityValues_ = Field<scalar>(dict.lookup("emissivityValues"));
|
||||
sigmaSValues_ = Field<scalar>(dict.lookup("sigmaSValues"));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -1,352 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2012 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 "interpolatedSolidThermo.H"
|
||||
#include "interpolateXY.H"
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||
|
||||
Foam::tmp<Foam::scalarField> Foam::interpolatedSolidThermo::rho
|
||||
(
|
||||
const label patchI
|
||||
) const
|
||||
{
|
||||
return tmp<scalarField>
|
||||
(
|
||||
new scalarField
|
||||
(
|
||||
interpolateXY
|
||||
(
|
||||
T_.boundaryField()[patchI],
|
||||
TValues_,
|
||||
rhoValues_
|
||||
)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::scalarField> Foam::interpolatedSolidThermo::emissivity
|
||||
(
|
||||
const label patchI
|
||||
) const
|
||||
{
|
||||
return tmp<scalarField>
|
||||
(
|
||||
new scalarField
|
||||
(
|
||||
interpolateXY
|
||||
(
|
||||
T_.boundaryField()[patchI],
|
||||
TValues_,
|
||||
emissivityValues_
|
||||
)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::scalarField> Foam::interpolatedSolidThermo::kappaRad
|
||||
(
|
||||
const label patchI
|
||||
) const
|
||||
{
|
||||
return tmp<scalarField>
|
||||
(
|
||||
new scalarField
|
||||
(
|
||||
interpolateXY
|
||||
(
|
||||
T_.boundaryField()[patchI],
|
||||
TValues_,
|
||||
kappaRadValues_
|
||||
)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::scalarField> Foam::interpolatedSolidThermo::sigmaS
|
||||
(
|
||||
const label patchI
|
||||
) const
|
||||
{
|
||||
return tmp<scalarField>
|
||||
(
|
||||
new scalarField
|
||||
(
|
||||
interpolateXY
|
||||
(
|
||||
T_.boundaryField()[patchI],
|
||||
TValues_,
|
||||
sigmaSValues_
|
||||
)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::interpolatedSolidThermo::interpolatedSolidThermo
|
||||
(
|
||||
const fvMesh& mesh,
|
||||
const word dictName
|
||||
)
|
||||
:
|
||||
basicSolidThermo(mesh),
|
||||
interpolateSolid(subDict(dictName)),
|
||||
dict_(subDict(dictName))
|
||||
{
|
||||
calculate();
|
||||
}
|
||||
|
||||
|
||||
Foam::interpolatedSolidThermo::interpolatedSolidThermo
|
||||
(
|
||||
const fvMesh& mesh,
|
||||
const word dictName,
|
||||
const dictionary& dict
|
||||
)
|
||||
:
|
||||
basicSolidThermo(mesh, dict),
|
||||
interpolateSolid(subDict(dictName)),
|
||||
dict_(subDict(dictName))
|
||||
{
|
||||
calculate();
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::interpolatedSolidThermo::~interpolatedSolidThermo()
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
void Foam::interpolatedSolidThermo::calculate()
|
||||
{
|
||||
// Correct rho
|
||||
rho_.internalField() = interpolateXY
|
||||
(
|
||||
T_.internalField(),
|
||||
TValues_,
|
||||
rhoValues_
|
||||
);
|
||||
|
||||
forAll(rho_.boundaryField(), patchI)
|
||||
{
|
||||
rho_.boundaryField()[patchI] == this->rho(patchI)();
|
||||
}
|
||||
|
||||
// Correct emissivity
|
||||
emissivity_.internalField() = interpolateXY
|
||||
(
|
||||
T_.internalField(),
|
||||
TValues_,
|
||||
emissivityValues_
|
||||
);
|
||||
|
||||
forAll(emissivity_.boundaryField(), patchI)
|
||||
{
|
||||
emissivity_.boundaryField()[patchI] == this->emissivity(patchI)();
|
||||
}
|
||||
|
||||
|
||||
// Correct absorptivity
|
||||
kappaRad_.internalField() = interpolateXY
|
||||
(
|
||||
T_.internalField(),
|
||||
TValues_,
|
||||
kappaRadValues_
|
||||
);
|
||||
|
||||
forAll(kappaRad_.boundaryField(), patchI)
|
||||
{
|
||||
kappaRad_.boundaryField()[patchI] == this->kappaRad(patchI)();
|
||||
}
|
||||
|
||||
|
||||
// Correct scatter
|
||||
sigmaS_.internalField() = interpolateXY
|
||||
(
|
||||
T_.internalField(),
|
||||
TValues_,
|
||||
sigmaSValues_
|
||||
);
|
||||
|
||||
forAll(sigmaS_.boundaryField(), patchI)
|
||||
{
|
||||
sigmaS_.boundaryField()[patchI] == this->sigmaS(patchI)();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::volScalarField> Foam::interpolatedSolidThermo::Cp() const
|
||||
{
|
||||
tmp<volScalarField> tCp
|
||||
(
|
||||
new volScalarField
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"Cp",
|
||||
mesh_.time().timeName(),
|
||||
mesh_,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh_,
|
||||
dimEnergy/(dimMass*dimTemperature)
|
||||
)
|
||||
);
|
||||
volScalarField& Cp = tCp();
|
||||
|
||||
Cp.internalField() = interpolateXY
|
||||
(
|
||||
T_.internalField(),
|
||||
TValues_,
|
||||
cpValues_
|
||||
);
|
||||
|
||||
forAll(Cp.boundaryField(), patchI)
|
||||
{
|
||||
Cp.boundaryField()[patchI] == this->Cp(patchI)();
|
||||
}
|
||||
|
||||
return tCp;
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::volScalarField> Foam::interpolatedSolidThermo::Hf() const
|
||||
{
|
||||
tmp<volScalarField> tHf
|
||||
(
|
||||
new volScalarField
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"Hf",
|
||||
mesh_.time().timeName(),
|
||||
mesh_,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh_,
|
||||
dimEnergy/dimMass
|
||||
)
|
||||
);
|
||||
volScalarField& Hf = tHf();
|
||||
|
||||
Hf.internalField() = interpolateXY
|
||||
(
|
||||
T_.internalField(),
|
||||
TValues_,
|
||||
HfValues_
|
||||
);
|
||||
|
||||
forAll(Hf.boundaryField(), patchI)
|
||||
{
|
||||
Hf.boundaryField()[patchI] == this->Hf(patchI)();
|
||||
}
|
||||
|
||||
return tHf;
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::scalarField> Foam::interpolatedSolidThermo::Cp
|
||||
(
|
||||
const label patchI
|
||||
) const
|
||||
{
|
||||
return tmp<scalarField>
|
||||
(
|
||||
new scalarField
|
||||
(
|
||||
interpolateXY
|
||||
(
|
||||
T_.boundaryField()[patchI],
|
||||
TValues_,
|
||||
cpValues_
|
||||
)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::scalarField> Foam::interpolatedSolidThermo::Hf
|
||||
(
|
||||
const label patchI
|
||||
) const
|
||||
{
|
||||
return tmp<scalarField>
|
||||
(
|
||||
new scalarField
|
||||
(
|
||||
interpolateXY
|
||||
(
|
||||
T_.boundaryField()[patchI],
|
||||
TValues_,
|
||||
HfValues_
|
||||
)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
bool Foam::interpolatedSolidThermo::read()
|
||||
{
|
||||
return read(dict_);
|
||||
}
|
||||
|
||||
|
||||
bool Foam::interpolatedSolidThermo::read(const dictionary& dict)
|
||||
{
|
||||
bool ok = interpolateSolid::read(dict);
|
||||
return ok;
|
||||
}
|
||||
|
||||
|
||||
bool Foam::interpolatedSolidThermo::writeData(Ostream& os) const
|
||||
{
|
||||
bool ok = basicSolidThermo::writeData(os);
|
||||
ok = interpolateSolid::writeData(os);
|
||||
|
||||
return ok && os.good();
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * IOStream operators * * * * * * * * * * * * * //
|
||||
|
||||
Foam::Ostream& Foam::operator<<(Ostream& os, const interpolatedSolidThermo& s)
|
||||
{
|
||||
s.writeData(os);
|
||||
return os;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -1,151 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2012 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::interpolatedSolidThermo
|
||||
|
||||
Description
|
||||
Table interpolated solid thermo
|
||||
|
||||
SourceFiles
|
||||
interpolatedSolidThermo.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef interpolatedSolidThermo_H
|
||||
#define interpolatedSolidThermo_H
|
||||
|
||||
#include "basicSolidThermo.H"
|
||||
#include "interpolateSolid.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class interpolatedSolidThermo Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class interpolatedSolidThermo
|
||||
:
|
||||
public basicSolidThermo,
|
||||
public interpolateSolid
|
||||
{
|
||||
private:
|
||||
|
||||
// Private data
|
||||
|
||||
//- Dictionary
|
||||
const dictionary dict_;
|
||||
|
||||
|
||||
// Helper functions
|
||||
|
||||
//- Density [kg/m3]
|
||||
tmp<scalarField> rho(const label patchI) const;
|
||||
|
||||
//- Scatter coefficient [1/m]
|
||||
tmp<scalarField> sigmaS(const label) const;
|
||||
|
||||
//- Absorption coefficient [1/m]
|
||||
tmp<scalarField> kappaRad(const label) const;
|
||||
|
||||
//- Emissivity []
|
||||
tmp<scalarField> emissivity(const label) const;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from mesh
|
||||
interpolatedSolidThermo(const fvMesh& mesh, const word);
|
||||
|
||||
//- Construct from mesh and dictionary
|
||||
interpolatedSolidThermo
|
||||
(
|
||||
const fvMesh& mesh,
|
||||
const word,
|
||||
const dictionary& dict
|
||||
);
|
||||
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~interpolatedSolidThermo();
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Calculate properties
|
||||
void calculate();
|
||||
|
||||
|
||||
// Derived properties
|
||||
|
||||
//- Specific heat capacity [J/(kg.K)]
|
||||
virtual tmp<volScalarField> Cp() const;
|
||||
|
||||
//- Heat of formation [J/kg]
|
||||
virtual tmp<volScalarField> Hf() const;
|
||||
|
||||
|
||||
// Per patch calculation
|
||||
|
||||
//- Specific heat capacity [J/kg/K)]
|
||||
virtual tmp<scalarField> Cp(const label patchI) const;
|
||||
|
||||
//- Heat of formation [J/kg]
|
||||
virtual tmp<scalarField> Hf(const label patchI) const;
|
||||
|
||||
|
||||
// I-O
|
||||
|
||||
//- Write the interpolatedSolidThermo properties
|
||||
virtual bool writeData(Ostream& os) const;
|
||||
|
||||
//- Read the interpolatedSolidThermo properties
|
||||
virtual bool read();
|
||||
|
||||
//- Read the interpolatedSolidThermo properties
|
||||
bool read(const dictionary& dict);
|
||||
|
||||
//- Ostream Operator
|
||||
friend Ostream& operator<<
|
||||
(
|
||||
Ostream& os,
|
||||
const interpolatedSolidThermo& s
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -1,172 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2012 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 "isotropicKSolidThermo.H"
|
||||
#include "addToRunTimeSelectionTable.H"
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
defineTypeNameAndDebug(isotropicKSolidThermo, 0);
|
||||
addToRunTimeSelectionTable
|
||||
(
|
||||
basicSolidThermo,
|
||||
isotropicKSolidThermo,
|
||||
mesh
|
||||
);
|
||||
|
||||
addToRunTimeSelectionTable
|
||||
(
|
||||
basicSolidThermo,
|
||||
isotropicKSolidThermo,
|
||||
dictionary
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::isotropicKSolidThermo::isotropicKSolidThermo
|
||||
(
|
||||
const fvMesh& mesh,
|
||||
const dictionary& dict
|
||||
)
|
||||
:
|
||||
interpolatedSolidThermo(mesh, typeName + "Coeffs", dict),
|
||||
kappa_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"kappa",
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh,
|
||||
dimEnergy/dimTime/(dimLength*dimTemperature)
|
||||
),
|
||||
kappaValues_
|
||||
(
|
||||
Field<scalar>(subDict(typeName + "Coeffs").lookup("kappaValues"))
|
||||
)
|
||||
{
|
||||
Info<< " kappa : " << kappaValues_ << nl << endl;
|
||||
correct();
|
||||
}
|
||||
|
||||
|
||||
Foam::isotropicKSolidThermo::isotropicKSolidThermo(const fvMesh& mesh)
|
||||
:
|
||||
interpolatedSolidThermo(mesh, typeName + "Coeffs"),
|
||||
kappa_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"kappa",
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh,
|
||||
dimEnergy/dimTime/(dimLength*dimTemperature)
|
||||
),
|
||||
kappaValues_
|
||||
(
|
||||
Field<scalar>(subDict(typeName + "Coeffs").lookup("kappaValues"))
|
||||
)
|
||||
{
|
||||
Info<< " kappa : " << kappaValues_ << nl <<endl;
|
||||
correct();
|
||||
}
|
||||
|
||||
|
||||
void Foam::isotropicKSolidThermo::correct()
|
||||
{
|
||||
// Correct K
|
||||
kappa_.internalField() = interpolateXY
|
||||
(
|
||||
T_.internalField(),
|
||||
TValues_,
|
||||
kappaValues_
|
||||
);
|
||||
|
||||
forAll(kappa_.boundaryField(), patchI)
|
||||
{
|
||||
kappa_.boundaryField()[patchI] == interpolateXY
|
||||
(
|
||||
T_.boundaryField()[patchI],
|
||||
TValues_,
|
||||
kappaValues_
|
||||
);
|
||||
}
|
||||
|
||||
interpolatedSolidThermo::calculate();
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::volScalarField> Foam::isotropicKSolidThermo::kappa() const
|
||||
{
|
||||
return kappa_;
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::scalarField> Foam::isotropicKSolidThermo::kappa
|
||||
(
|
||||
const label patchI
|
||||
) const
|
||||
{
|
||||
return kappa_.boundaryField()[patchI];
|
||||
}
|
||||
|
||||
|
||||
bool Foam::isotropicKSolidThermo::read()
|
||||
{
|
||||
kappaValues_ =
|
||||
Field<scalar>(subDict(typeName + "Coeffs").lookup("kappaValues"));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool Foam::isotropicKSolidThermo::writeData(Ostream& os) const
|
||||
{
|
||||
os.writeKeyword("kappaValues") << kappaValues_
|
||||
<< token::END_STATEMENT << nl;
|
||||
bool ok = interpolatedSolidThermo::writeData(os);
|
||||
|
||||
return ok && os.good();
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::isotropicKSolidThermo::~isotropicKSolidThermo()
|
||||
{}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -1,145 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2012 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::isotropicKSolidThermo
|
||||
|
||||
Description
|
||||
Directional conductivity + table interpolation.
|
||||
|
||||
SourceFiles
|
||||
isotropicKSolidThermo.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef directionalSolidThermo_H
|
||||
#define directionalSolidThermo_H
|
||||
|
||||
#include "interpolatedSolidThermo.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class isotropicKSolidThermo Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class isotropicKSolidThermo
|
||||
:
|
||||
public interpolatedSolidThermo
|
||||
{
|
||||
// Private data
|
||||
|
||||
//- Thermal conductivity [W/(m.K)]
|
||||
volScalarField kappa_;
|
||||
|
||||
//- Thermal conductivity vector
|
||||
Field<scalar> kappaValues_;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("isotropicKSolidThermo");
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from mesh
|
||||
isotropicKSolidThermo(const fvMesh& mesh);
|
||||
|
||||
//- Construct from mesh and dicionary
|
||||
isotropicKSolidThermo(const fvMesh& mesh, const dictionary& dict);
|
||||
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~isotropicKSolidThermo();
|
||||
|
||||
|
||||
// Member functions
|
||||
|
||||
//- Update properties
|
||||
virtual void correct();
|
||||
|
||||
// Access functions
|
||||
|
||||
//- Constant access to K
|
||||
virtual tmp<volScalarField> kappa() const;
|
||||
|
||||
//- Thermal conductivity [W/m/K]
|
||||
virtual tmp<volSymmTensorField> directionalKappa() const
|
||||
{
|
||||
notImplemented
|
||||
(
|
||||
"directionalKSolidThermo::directionalKappa() const"
|
||||
);
|
||||
return tmp<volSymmTensorField>(NULL);
|
||||
}
|
||||
|
||||
|
||||
// Per patch calculation
|
||||
|
||||
//- Thermal conductivity [W/m/K]
|
||||
virtual tmp<scalarField> kappa(const label patchI) const;
|
||||
|
||||
//- Thermal conductivity [W/m/K]
|
||||
virtual tmp<symmTensorField> directionalKappa(const label) const
|
||||
{
|
||||
notImplemented
|
||||
(
|
||||
"directionalKSolidThermo::directionalKappa(const label)"
|
||||
"const"
|
||||
);
|
||||
return tmp<symmTensorField>(NULL);
|
||||
}
|
||||
|
||||
|
||||
// I-O
|
||||
|
||||
//- Read solidThermophysicalProperties dictionary
|
||||
virtual bool read();
|
||||
|
||||
//- Write properties
|
||||
virtual bool writeData(Ostream& os) const;
|
||||
|
||||
//- Ostream Operator
|
||||
friend Ostream& operator<<
|
||||
(
|
||||
Ostream& os,
|
||||
const isotropicKSolidThermo& s
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -35,6 +35,7 @@ Description
|
||||
#include "volFields.H"
|
||||
#include "speciesTable.H"
|
||||
#include "PtrList.H"
|
||||
#include "error.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
@ -63,6 +64,10 @@ protected:
|
||||
|
||||
public:
|
||||
|
||||
//- The base class of the mixture
|
||||
typedef basicSolidMixture basicMixtureType;
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from word list and mesh
|
||||
@ -108,34 +113,102 @@ public:
|
||||
inline bool contains(const word& specieName) const;
|
||||
|
||||
|
||||
// Derived cell based properties.
|
||||
// Per specie thermo properties
|
||||
|
||||
//- Heat capacity at constant pressure [J/(kg K)]
|
||||
virtual scalar Cp
|
||||
(
|
||||
const label specieI,
|
||||
const scalar p,
|
||||
const scalar T
|
||||
) const = 0;
|
||||
|
||||
//- Heat capacity at constant volume [J/(kg K)]
|
||||
virtual scalar Cv
|
||||
(
|
||||
const label specieI,
|
||||
const scalar p,
|
||||
const scalar T
|
||||
) const = 0;
|
||||
|
||||
//- Absolute enthalpy [J/kg]
|
||||
virtual scalar Ha
|
||||
(
|
||||
const label specieI,
|
||||
const scalar p,
|
||||
const scalar T
|
||||
) const = 0;
|
||||
|
||||
//- Sensible enthalpy [J/kg]
|
||||
virtual scalar Hs
|
||||
(
|
||||
const label specieI,
|
||||
const scalar p,
|
||||
const scalar T
|
||||
) const = 0;
|
||||
|
||||
//- Chemical enthalpy [J/kg]
|
||||
virtual scalar Hc(const label specieI) const = 0;
|
||||
|
||||
//- Density [Kg/m3]
|
||||
virtual scalar rho
|
||||
(
|
||||
const label specieI,
|
||||
const scalar p,
|
||||
const scalar T
|
||||
) const = 0;
|
||||
|
||||
|
||||
// Per specie transport properties
|
||||
|
||||
//- Thermal conductivity [W/m/K]
|
||||
virtual scalar kappa
|
||||
(
|
||||
const label specieI,
|
||||
const scalar p,
|
||||
const scalar T
|
||||
) const = 0;
|
||||
|
||||
//- An-isotropic thermal conductivity [W/m/K]
|
||||
virtual vector Kappa
|
||||
(
|
||||
const label specieI,
|
||||
const scalar p,
|
||||
const scalar T
|
||||
) const = 0;
|
||||
|
||||
//- Thermal diffusivity of enthalpy/internal energy [kg/m/s]
|
||||
virtual scalar alpha
|
||||
(
|
||||
const label specieI,
|
||||
const scalar p,
|
||||
const scalar T
|
||||
) const = 0;
|
||||
|
||||
|
||||
// Cell based properties with on the run mixture calculation
|
||||
|
||||
//- Density
|
||||
virtual scalar rho(scalar T, label celli) const = 0;
|
||||
virtual scalar rho(scalar p, scalar T, label celli) const = 0;
|
||||
|
||||
//- Absorption coefficient
|
||||
virtual scalar kappaRad(scalar T, label celli) const = 0;
|
||||
virtual scalar kappaRad(scalar p, scalar T, label celli) const = 0;
|
||||
|
||||
//- Scatter coefficient
|
||||
virtual scalar sigmaS(scalar T, label celli) const = 0;
|
||||
virtual scalar sigmaS(scalar p, scalar T, label celli) const = 0;
|
||||
|
||||
//- Thermal conductivity
|
||||
virtual scalar kappa(scalar T, label celli) const = 0;
|
||||
virtual scalar kappa(scalar p, scalar T, label celli) const = 0;
|
||||
|
||||
//- Emissivity coefficient
|
||||
virtual scalar emissivity(scalar T, label celli) const = 0;
|
||||
|
||||
//- Formation enthalpy
|
||||
virtual scalar hf(scalar T, label celli) const = 0;
|
||||
|
||||
//- Sensible enthalpy
|
||||
virtual scalar hs(scalar T, label celli) const = 0;
|
||||
|
||||
//- Total enthalpy
|
||||
virtual scalar h(scalar T, label celli) const = 0;
|
||||
virtual scalar emissivity
|
||||
(
|
||||
scalar p, scalar T, label celli
|
||||
) const = 0;
|
||||
|
||||
//- Specific heat capacity
|
||||
virtual scalar Cp(scalar T, label celli) const = 0;
|
||||
virtual scalar Cp(scalar p, scalar T, label celli) const = 0;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@ -0,0 +1,228 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2012 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/>.
|
||||
|
||||
Description
|
||||
Mixture instantiation
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
#include "basicMixture.H"
|
||||
#include "makeBasicMixture.H"
|
||||
|
||||
|
||||
#include "constRho.H"
|
||||
|
||||
#include "constSolidThermo.H"
|
||||
#include "exponentialSolidThermo.H"
|
||||
|
||||
#include "constIsoSolidTransport.H"
|
||||
#include "constAnIsoSolidTransport.H"
|
||||
#include "exponentialSolidTransport.H"
|
||||
|
||||
#include "constSolidRad.H"
|
||||
|
||||
#include "sensibleInternalEnergy.H"
|
||||
#include "sensibleEnthalpy.H"
|
||||
#include "specieThermo.H"
|
||||
|
||||
#include "pureSolidMixture.H"
|
||||
#include "multiComponentSolidMixture.H"
|
||||
#include "reactingSolidMixture.H"
|
||||
|
||||
#include "addToRunTimeSelectionTable.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
/* * * * * * * * * * * * * * * private static data * * * * * * * * * * * * * */
|
||||
|
||||
makeBasicMixture
|
||||
(
|
||||
pureSolidMixture,
|
||||
constIsoSolidTransport,
|
||||
sensibleEnthalpy,
|
||||
constSolidThermo,
|
||||
constRho
|
||||
);
|
||||
|
||||
makeBasicMixture
|
||||
(
|
||||
pureSolidMixture,
|
||||
constAnIsoSolidTransport,
|
||||
sensibleEnthalpy,
|
||||
constSolidThermo,
|
||||
constRho
|
||||
);
|
||||
|
||||
makeBasicMixture
|
||||
(
|
||||
pureSolidMixture,
|
||||
exponentialSolidTransport,
|
||||
sensibleEnthalpy,
|
||||
exponentialSolidThermo,
|
||||
constRho
|
||||
);
|
||||
|
||||
makeBasicMixture
|
||||
(
|
||||
multiComponentSolidMixture,
|
||||
constIsoSolidTransport,
|
||||
sensibleEnthalpy,
|
||||
constSolidThermo,
|
||||
constRho
|
||||
);
|
||||
|
||||
makeBasicMixture
|
||||
(
|
||||
reactingSolidMixture,
|
||||
constIsoSolidTransport,
|
||||
sensibleEnthalpy,
|
||||
constSolidThermo,
|
||||
constRho
|
||||
);
|
||||
|
||||
|
||||
/*
|
||||
makeBasicMixture
|
||||
(
|
||||
pureMixture,
|
||||
sutherlandTransport,
|
||||
sensibleInternalEnergy,
|
||||
eConstThermo,
|
||||
perfectGas
|
||||
);
|
||||
|
||||
makeBasicMixture
|
||||
(
|
||||
pureMixture,
|
||||
constTransport,
|
||||
sensibleInternalEnergy,
|
||||
hConstThermo,
|
||||
perfectGas
|
||||
);
|
||||
|
||||
makeBasicMixture
|
||||
(
|
||||
pureMixture,
|
||||
sutherlandTransport,
|
||||
sensibleInternalEnergy,
|
||||
hConstThermo,
|
||||
perfectGas
|
||||
);
|
||||
|
||||
makeBasicMixture
|
||||
(
|
||||
pureMixture,
|
||||
sutherlandTransport,
|
||||
sensibleInternalEnergy,
|
||||
janafThermo,
|
||||
perfectGas
|
||||
);
|
||||
|
||||
makeBasicMixture
|
||||
(
|
||||
pureMixture,
|
||||
constTransport,
|
||||
sensibleEnthalpy,
|
||||
hConstThermo,
|
||||
perfectGas
|
||||
);
|
||||
|
||||
makeBasicMixture
|
||||
(
|
||||
pureMixture,
|
||||
sutherlandTransport,
|
||||
sensibleEnthalpy,
|
||||
hConstThermo,
|
||||
perfectGas
|
||||
);
|
||||
|
||||
makeBasicMixture
|
||||
(
|
||||
pureMixture,
|
||||
sutherlandTransport,
|
||||
sensibleEnthalpy,
|
||||
janafThermo,
|
||||
perfectGas
|
||||
);
|
||||
|
||||
makeBasicMixture
|
||||
(
|
||||
pureMixture,
|
||||
constTransport,
|
||||
sensibleEnthalpy,
|
||||
hConstThermo,
|
||||
incompressible
|
||||
);
|
||||
|
||||
makeBasicPolyMixture
|
||||
(
|
||||
pureMixture,
|
||||
3,
|
||||
sensibleEnthalpy
|
||||
);
|
||||
|
||||
makeBasicPolyMixture
|
||||
(
|
||||
pureMixture,
|
||||
8,
|
||||
sensibleEnthalpy
|
||||
);
|
||||
|
||||
|
||||
makeBasicMixture
|
||||
(
|
||||
pureMixture,
|
||||
constTransport,
|
||||
sensibleEnthalpy,
|
||||
hConstThermo,
|
||||
isobaricPerfectGas
|
||||
);
|
||||
|
||||
makeBasicMixture
|
||||
(
|
||||
pureMixture,
|
||||
sutherlandTransport,
|
||||
sensibleEnthalpy,
|
||||
hConstThermo,
|
||||
isobaricPerfectGas
|
||||
);
|
||||
|
||||
makeBasicMixture
|
||||
(
|
||||
pureMixture,
|
||||
sutherlandTransport,
|
||||
sensibleEnthalpy,
|
||||
janafThermo,
|
||||
isobaricPerfectGas
|
||||
);
|
||||
*/
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,408 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011 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 "multiComponentSolidMixture.H"
|
||||
|
||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||
|
||||
template<class ThermoType>
|
||||
const ThermoType& Foam::multiComponentSolidMixture<ThermoType>::
|
||||
constructSolidData
|
||||
(
|
||||
const dictionary& thermoSolidDict
|
||||
)
|
||||
{
|
||||
forAll(components_, i)
|
||||
{
|
||||
solidData_.set
|
||||
(
|
||||
i,
|
||||
new ThermoType
|
||||
(
|
||||
thermoSolidDict.subDict(components_[i] + "Coeffs")
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
return solidData_[0];
|
||||
}
|
||||
|
||||
|
||||
template<class ThermoType>
|
||||
void Foam::multiComponentSolidMixture<ThermoType>::correctMassFractions()
|
||||
{
|
||||
volScalarField Yt("Yt", Y_[0]);
|
||||
|
||||
for (label n=1; n<Y_.size(); n++)
|
||||
{
|
||||
Yt += Y_[n];
|
||||
}
|
||||
|
||||
forAll(Y_, n)
|
||||
{
|
||||
Y_[n] /= Yt;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
template<class ThermoType>
|
||||
Foam::scalar Foam::multiComponentSolidMixture<ThermoType>::X
|
||||
(
|
||||
label specieI, label celli, scalar p, scalar T
|
||||
) const
|
||||
{
|
||||
scalar rhoInv = 0.0;
|
||||
forAll(solidData_, i)
|
||||
{
|
||||
rhoInv += Y_[i][celli]/solidData_[i].rho(p, T);
|
||||
}
|
||||
|
||||
scalar X = Y_[specieI][celli]/solidData_[specieI].rho(p, T);
|
||||
|
||||
return (X/rhoInv);
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
template<class ThermoType>
|
||||
Foam::multiComponentSolidMixture<ThermoType>::multiComponentSolidMixture
|
||||
(
|
||||
const dictionary& thermoSolidDict,
|
||||
const fvMesh& mesh
|
||||
)
|
||||
:
|
||||
basicSolidMixture
|
||||
(
|
||||
thermoSolidDict.lookup("solidComponents"),
|
||||
mesh
|
||||
),
|
||||
solidData_(components_.size()),
|
||||
mixture_("mixture", constructSolidData(thermoSolidDict)),
|
||||
mixtureVol_("mixture", constructSolidData(thermoSolidDict))
|
||||
{
|
||||
correctMassFractions();
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
|
||||
template<class ThermoType>
|
||||
const ThermoType& Foam::multiComponentSolidMixture<ThermoType>::cellVolMixture
|
||||
(
|
||||
const scalar p,
|
||||
const scalar T,
|
||||
const label celli
|
||||
) const
|
||||
{
|
||||
scalar rhoInv = 0.0;
|
||||
forAll(solidData_, i)
|
||||
{
|
||||
rhoInv += Y_[i][celli]/solidData_[i].rho(p, T);
|
||||
}
|
||||
|
||||
mixtureVol_ = Y_[0][celli]/solidData_[0].rho(p, T)/rhoInv*solidData_[0];
|
||||
|
||||
for (label n=1; n<Y_.size(); n++)
|
||||
{
|
||||
mixtureVol_ +=
|
||||
Y_[n][celli]/solidData_[n].rho(p, T)/rhoInv*solidData_[n];
|
||||
}
|
||||
|
||||
return mixtureVol_;
|
||||
}
|
||||
|
||||
|
||||
template<class ThermoType>
|
||||
const ThermoType& Foam::multiComponentSolidMixture<ThermoType>::cellMixture
|
||||
(
|
||||
const label celli
|
||||
) const
|
||||
{
|
||||
mixture_ = Y_[0][celli]*solidData_[0];
|
||||
for (label n=1; n<Y_.size(); n++)
|
||||
{
|
||||
mixture_ += Y_[n][celli]*solidData_[n];
|
||||
}
|
||||
|
||||
return mixture_;
|
||||
}
|
||||
|
||||
|
||||
template<class ThermoType>
|
||||
const ThermoType& Foam::multiComponentSolidMixture<ThermoType>::
|
||||
patchFaceVolMixture
|
||||
(
|
||||
const scalar p,
|
||||
const scalar T,
|
||||
const label patchi,
|
||||
const label facei
|
||||
) const
|
||||
{
|
||||
scalar rhoInv = 0.0;
|
||||
forAll(solidData_, i)
|
||||
{
|
||||
rhoInv += Y_[i].boundaryField()[patchi][facei]/solidData_[i].rho(p, T);
|
||||
}
|
||||
|
||||
mixtureVol_ =
|
||||
Y_[0].boundaryField()[patchi][facei]
|
||||
/ solidData_[0].rho(p, T)
|
||||
/ rhoInv
|
||||
* solidData_[0];
|
||||
|
||||
for (label n=1; n<Y_.size(); n++)
|
||||
{
|
||||
mixtureVol_ +=
|
||||
Y_[n].boundaryField()[patchi][facei]
|
||||
/ solidData_[n].rho(p,T)
|
||||
/ rhoInv
|
||||
* solidData_[n];
|
||||
}
|
||||
|
||||
return mixtureVol_;
|
||||
}
|
||||
|
||||
|
||||
template<class ThermoType>
|
||||
const ThermoType& Foam::multiComponentSolidMixture<ThermoType>::
|
||||
patchFaceMixture
|
||||
(
|
||||
const label patchi,
|
||||
const label facei
|
||||
) const
|
||||
{
|
||||
|
||||
mixture_ =
|
||||
Y_[0].boundaryField()[patchi][facei]*solidData_[0];
|
||||
|
||||
for (label n=1; n<Y_.size(); n++)
|
||||
{
|
||||
mixture_ += Y_[n].boundaryField()[patchi][facei]*solidData_[n];
|
||||
}
|
||||
|
||||
return mixture_;
|
||||
}
|
||||
|
||||
|
||||
template<class ThermoType>
|
||||
Foam::scalar Foam::multiComponentSolidMixture<ThermoType>::Cp
|
||||
(
|
||||
const label specieI, const scalar p, const scalar T
|
||||
) const
|
||||
{
|
||||
return solidData_[specieI].Cp(p, T);
|
||||
}
|
||||
|
||||
|
||||
template<class ThermoType>
|
||||
Foam::scalar Foam::multiComponentSolidMixture<ThermoType>::Cv
|
||||
(
|
||||
const label specieI, const scalar p, const scalar T
|
||||
) const
|
||||
{
|
||||
return solidData_[specieI].Cv(p, T);
|
||||
}
|
||||
|
||||
|
||||
template<class ThermoType>
|
||||
Foam::scalar Foam::multiComponentSolidMixture<ThermoType>::Ha
|
||||
(
|
||||
const label specieI, const scalar p, const scalar T
|
||||
) const
|
||||
{
|
||||
return solidData_[specieI].Ha(p, T);
|
||||
}
|
||||
|
||||
|
||||
template<class ThermoType>
|
||||
Foam::scalar Foam::multiComponentSolidMixture<ThermoType>::Hs
|
||||
(
|
||||
const label specieI, const scalar p, const scalar T
|
||||
) const
|
||||
{
|
||||
return solidData_[specieI].Hs(p, T);
|
||||
}
|
||||
|
||||
|
||||
template<class ThermoType>
|
||||
Foam::scalar Foam::multiComponentSolidMixture<ThermoType>::Hc
|
||||
(
|
||||
const label specieI
|
||||
) const
|
||||
{
|
||||
return solidData_[specieI].Hc();
|
||||
}
|
||||
|
||||
|
||||
template<class ThermoType>
|
||||
Foam::scalar Foam::multiComponentSolidMixture<ThermoType>::rho
|
||||
(
|
||||
const label specieI, const scalar p, const scalar T
|
||||
) const
|
||||
{
|
||||
return solidData_[specieI].rho(p, T);
|
||||
}
|
||||
|
||||
|
||||
template<class ThermoType>
|
||||
Foam::scalar Foam::multiComponentSolidMixture<ThermoType>::kappa
|
||||
(
|
||||
const label specieI, const scalar p, const scalar T
|
||||
) const
|
||||
{
|
||||
return solidData_[specieI].kappa(T);
|
||||
}
|
||||
|
||||
|
||||
template<class ThermoType>
|
||||
Foam::vector Foam::multiComponentSolidMixture<ThermoType>::Kappa
|
||||
(
|
||||
const label specieI, const scalar p, const scalar T
|
||||
) const
|
||||
{
|
||||
return solidData_[specieI].Kappa(T);
|
||||
}
|
||||
|
||||
|
||||
template<class ThermoType>
|
||||
Foam::scalar Foam::multiComponentSolidMixture<ThermoType>::alpha
|
||||
(
|
||||
const label specieI, const scalar p, const scalar T
|
||||
) const
|
||||
{
|
||||
return solidData_[specieI].kappa(T)/solidData_[specieI].Cpv(p, T);
|
||||
}
|
||||
|
||||
|
||||
|
||||
template<class ThermoType>
|
||||
Foam::scalar Foam::multiComponentSolidMixture<ThermoType>::rho
|
||||
(
|
||||
scalar p, scalar T, label celli
|
||||
) const
|
||||
{
|
||||
scalar tmp = 0.0;
|
||||
forAll(solidData_, i)
|
||||
{
|
||||
tmp += solidData_[i].rho(p, T)*X(i, celli, p, T);
|
||||
}
|
||||
return tmp;
|
||||
}
|
||||
|
||||
|
||||
template<class ThermoType>
|
||||
Foam::scalar Foam::multiComponentSolidMixture<ThermoType>::kappaRad
|
||||
(
|
||||
scalar p, scalar T, label celli
|
||||
) const
|
||||
{
|
||||
scalar tmp = 0.0;
|
||||
forAll(solidData_, i)
|
||||
{
|
||||
tmp += solidData_[i].kappaRad(T)*X(i, celli, p, T);
|
||||
}
|
||||
return tmp;
|
||||
}
|
||||
|
||||
|
||||
template<class ThermoType>
|
||||
Foam::scalar Foam::multiComponentSolidMixture<ThermoType>::sigmaS
|
||||
(
|
||||
scalar p, scalar T, label celli
|
||||
) const
|
||||
{
|
||||
scalar tmp = 0.0;
|
||||
forAll(solidData_, i)
|
||||
{
|
||||
tmp += solidData_[i].sigmaS(T)*X(i, celli, p, T);
|
||||
}
|
||||
return tmp;
|
||||
}
|
||||
|
||||
|
||||
template<class ThermoType>
|
||||
Foam::scalar Foam::multiComponentSolidMixture<ThermoType>::kappa
|
||||
(
|
||||
scalar p, scalar T, label celli
|
||||
) const
|
||||
{
|
||||
scalar tmp = 0.0;
|
||||
forAll(solidData_, i)
|
||||
{
|
||||
tmp += solidData_[i].kappa(T)*X(i, celli, p, T);
|
||||
}
|
||||
return tmp;
|
||||
}
|
||||
|
||||
|
||||
template<class ThermoType>
|
||||
Foam::scalar Foam::multiComponentSolidMixture<ThermoType>::emissivity
|
||||
(
|
||||
scalar p, scalar T, label celli
|
||||
) const
|
||||
{
|
||||
scalar tmp = 0.0;
|
||||
forAll(solidData_, i)
|
||||
{
|
||||
tmp += solidData_[i].emissivity(T)*X(i, celli, p, T);
|
||||
}
|
||||
return tmp;
|
||||
}
|
||||
|
||||
|
||||
template<class ThermoType>
|
||||
Foam::scalar Foam::multiComponentSolidMixture<ThermoType>::Cp
|
||||
(
|
||||
scalar p, scalar T, label celli
|
||||
) const
|
||||
{
|
||||
scalar tmp = 0.0;
|
||||
forAll(solidData_, i)
|
||||
{
|
||||
tmp += solidData_[i].Cp(p, T)*Y_[i][celli];
|
||||
}
|
||||
return tmp;
|
||||
}
|
||||
|
||||
|
||||
template<class ThermoType>
|
||||
void Foam::multiComponentSolidMixture<ThermoType>::read
|
||||
(
|
||||
const dictionary& thermoDict
|
||||
)
|
||||
{
|
||||
forAll(components_, i)
|
||||
{
|
||||
solidData_[i] =
|
||||
ThermoType(thermoDict.subDict(components_[i] + "Coeffs"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,246 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011 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::multiComponentSolidMixture
|
||||
|
||||
Description
|
||||
Foam::multiComponentSolidMixture
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef multiComponentSolidMixture_H
|
||||
#define multiComponentSolidMixture_H
|
||||
|
||||
#include "PtrList.H"
|
||||
#include "autoPtr.H"
|
||||
#include "basicSolidMixture.H"
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class multiComponentSolidMixture Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
template<class ThermoType>
|
||||
class multiComponentSolidMixture
|
||||
:
|
||||
public basicSolidMixture
|
||||
{
|
||||
|
||||
// Private data
|
||||
|
||||
//- Solid data
|
||||
PtrList<ThermoType> solidData_;
|
||||
|
||||
//- Temporary storage for the mass cell/face mixture thermo data
|
||||
mutable ThermoType mixture_;
|
||||
|
||||
//- Temporary storage for the volume weighted
|
||||
// cell/face mixture thermo data
|
||||
mutable ThermoType mixtureVol_;
|
||||
|
||||
|
||||
// Private Member Functions
|
||||
|
||||
//- Correct the mass fractions to sum to 1
|
||||
void correctMassFractions();
|
||||
|
||||
//- Return molar fraction for specieI in celli
|
||||
scalar X(label specieI, label celli, scalar p, scalar T) const;
|
||||
|
||||
//- Construct solid data
|
||||
const ThermoType& constructSolidData(const dictionary&);
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- The type of thermodynamics this mixture is instantiated for
|
||||
typedef ThermoType thermoType;
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("multiComponentSolidMixture");
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from dictionary and mesh
|
||||
multiComponentSolidMixture(const dictionary&, const fvMesh&);
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~multiComponentSolidMixture()
|
||||
{}
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
|
||||
const ThermoType& cellMixture(const label celli) const;
|
||||
|
||||
const ThermoType& patchFaceMixture
|
||||
(
|
||||
const label patchi,
|
||||
const label facei
|
||||
) const;
|
||||
|
||||
const ThermoType& cellVolMixture
|
||||
(
|
||||
const scalar p,
|
||||
const scalar T,
|
||||
const label celli
|
||||
) const;
|
||||
|
||||
const ThermoType& patchFaceVolMixture
|
||||
(
|
||||
const scalar p,
|
||||
const scalar T,
|
||||
const label patchi,
|
||||
const label facei
|
||||
) const;
|
||||
|
||||
//- Return the raw solid data
|
||||
const PtrList<ThermoType>& solidData() const
|
||||
{
|
||||
return solidData_;
|
||||
}
|
||||
|
||||
//- Read dictionary
|
||||
void read(const dictionary&);
|
||||
|
||||
|
||||
// Per specie thermo properties
|
||||
|
||||
//- Heat capacity at constant pressure [J/(kg K)]
|
||||
virtual scalar Cp
|
||||
(
|
||||
const label specieI,
|
||||
const scalar p,
|
||||
const scalar T
|
||||
) const;
|
||||
|
||||
//- Heat capacity at constant volume [J/(kg K)]
|
||||
virtual scalar Cv
|
||||
(
|
||||
const label specieI,
|
||||
const scalar p,
|
||||
const scalar T
|
||||
) const;
|
||||
|
||||
//- Absolute enthalpy [J/kg]
|
||||
virtual scalar Ha
|
||||
(
|
||||
const label specieI,
|
||||
const scalar p,
|
||||
const scalar T
|
||||
) const;
|
||||
|
||||
//- Sensible enthalpy [J/kg]
|
||||
virtual scalar Hs
|
||||
(
|
||||
const label specieI,
|
||||
const scalar p,
|
||||
const scalar T
|
||||
) const;
|
||||
|
||||
//- Chemical enthalpy [J/kg]
|
||||
virtual scalar Hc(const label specieI) const;
|
||||
|
||||
//- Density [Kg/m3]
|
||||
virtual scalar rho
|
||||
(
|
||||
const label specieI,
|
||||
const scalar p,
|
||||
const scalar T
|
||||
) const;
|
||||
|
||||
|
||||
// Per specie transport properties
|
||||
|
||||
//- Thermal conductivity [W/m/K]
|
||||
virtual scalar kappa
|
||||
(
|
||||
const label specieI,
|
||||
const scalar p,
|
||||
const scalar T
|
||||
) const;
|
||||
|
||||
//- An-isotropic thermal conductivity [W/m/K]
|
||||
virtual vector Kappa
|
||||
(
|
||||
const label specieI,
|
||||
const scalar p,
|
||||
const scalar T
|
||||
) const;
|
||||
|
||||
//- Thermal diffusivity of enthalpy/internal energy [kg/m/s]
|
||||
virtual scalar alpha
|
||||
(
|
||||
const label specieI,
|
||||
const scalar p,
|
||||
const scalar T
|
||||
) const;
|
||||
|
||||
|
||||
// Cell based properties with on the run mixture calculation.
|
||||
|
||||
//- Density
|
||||
virtual scalar rho(scalar p, scalar T, label celli) const;
|
||||
|
||||
//- Absorption coefficient
|
||||
virtual scalar kappaRad(scalar p, scalar T, label celli) const;
|
||||
|
||||
//- Scatter coefficient
|
||||
virtual scalar sigmaS(scalar p, scalar T, label celli) const;
|
||||
|
||||
//- Thermal conductivity
|
||||
virtual scalar kappa(scalar p, scalar T, label celli) const;
|
||||
|
||||
//- Emissivity coefficient
|
||||
virtual scalar emissivity(scalar p, scalar T, label celli) const;
|
||||
|
||||
//- Specific heat capacity
|
||||
virtual scalar Cp(scalar p, scalar T, label celli) const;
|
||||
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#ifdef NoRepository
|
||||
# include "multiComponentSolidMixture.C"
|
||||
#endif
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,68 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011 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 "pureSolidMixture.H"
|
||||
#include "fvMesh.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
template<class ThermoType>
|
||||
pureSolidMixture<ThermoType>::pureSolidMixture
|
||||
(
|
||||
const dictionary& thermoDict,
|
||||
const fvMesh& mesh
|
||||
)
|
||||
:
|
||||
basicMixture(thermoDict, mesh),
|
||||
mixture_(thermoDict.subDict("mixture"))
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||
|
||||
template<class ThermoType>
|
||||
pureSolidMixture<ThermoType>::~pureSolidMixture()
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
template<class ThermoType>
|
||||
void pureSolidMixture<ThermoType>::read(const dictionary& thermoDict)
|
||||
{
|
||||
mixture_ = ThermoType(thermoDict.subDict("mixture"));
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -22,21 +22,20 @@ License
|
||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Class
|
||||
Foam::interpolateSolid
|
||||
Foam::pureSolidMixture
|
||||
|
||||
Description
|
||||
Helping class for T-interpolated solid thermo.
|
||||
Foam::pureSolidMixture
|
||||
|
||||
SourceFiles
|
||||
interpolateSolid.C
|
||||
pureSolidMixture.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef interpolateSolid_H
|
||||
#define interpolateSolid_H
|
||||
#include "volFields.H"
|
||||
#include "dictionary.H"
|
||||
#include "interpolateXY.H"
|
||||
#ifndef pureSolidMixture_H
|
||||
#define pureSolidMixture_H
|
||||
|
||||
#include "basicMixture.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
@ -44,51 +43,81 @@ namespace Foam
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class interpolateSolid Declaration
|
||||
Class pureSolidMixture Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class interpolateSolid
|
||||
template<class ThermoType>
|
||||
class pureSolidMixture
|
||||
:
|
||||
public basicMixture
|
||||
{
|
||||
protected:
|
||||
// Private data
|
||||
|
||||
// Protected data
|
||||
ThermoType mixture_;
|
||||
|
||||
Field<scalar> TValues_;
|
||||
|
||||
Field<scalar> rhoValues_;
|
||||
|
||||
Field<scalar> cpValues_;
|
||||
|
||||
Field<scalar> HfValues_;
|
||||
|
||||
Field<scalar> emissivityValues_;
|
||||
|
||||
Field<scalar> kappaRadValues_;
|
||||
|
||||
Field<scalar> sigmaSValues_;
|
||||
//- Construct as copy (not implemented)
|
||||
pureSolidMixture(const pureSolidMixture<ThermoType>&);
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- The type of thermodynamics this mixture is instantiated for
|
||||
typedef ThermoType thermoType;
|
||||
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("pureSolidMixture");
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from mesh
|
||||
interpolateSolid(const dictionary&);
|
||||
//- Construct from dictionary and mesh
|
||||
pureSolidMixture(const dictionary&, const fvMesh&);
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~interpolateSolid();
|
||||
virtual ~pureSolidMixture();
|
||||
|
||||
|
||||
// Member Functions
|
||||
// Member functions
|
||||
|
||||
// I-O
|
||||
const ThermoType& cellMixture(const label) const
|
||||
{
|
||||
return mixture_;
|
||||
}
|
||||
|
||||
//- Read the interpolateSolid properties
|
||||
bool read(const dictionary& dict);
|
||||
const ThermoType& cellVolMixture
|
||||
(
|
||||
const scalar,
|
||||
const scalar,
|
||||
const label
|
||||
) const
|
||||
{
|
||||
return mixture_;
|
||||
}
|
||||
|
||||
//- Write the interpolateSolid properties
|
||||
bool writeData(Ostream& os) const;
|
||||
const ThermoType& patchFaceMixture
|
||||
(
|
||||
const label,
|
||||
const label
|
||||
) const
|
||||
{
|
||||
return mixture_;
|
||||
}
|
||||
|
||||
const ThermoType& patchFaceVolMixture
|
||||
(
|
||||
const scalar,
|
||||
const scalar,
|
||||
const label,
|
||||
const label
|
||||
) const
|
||||
{
|
||||
return mixture_;
|
||||
}
|
||||
|
||||
//- Read dictionary
|
||||
void read(const dictionary&);
|
||||
};
|
||||
|
||||
|
||||
@ -96,6 +125,12 @@ public:
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
|
||||
#ifdef NoRepository
|
||||
# include "pureSolidMixture.C"
|
||||
#endif
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
@ -67,6 +67,8 @@ public:
|
||||
//- The type of thermo package this mixture is instantiated for
|
||||
typedef ThermoSolidType thermoType;
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("reactingSolidMixture");
|
||||
|
||||
// Constructors
|
||||
|
||||
@ -1,250 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011 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 "multiComponentSolidMixture.H"
|
||||
|
||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||
|
||||
template<class ThermoSolidType>
|
||||
void Foam::multiComponentSolidMixture<ThermoSolidType>::correctMassFractions()
|
||||
{
|
||||
volScalarField Yt("Yt", Y_[0]);
|
||||
|
||||
for (label n=1; n<Y_.size(); n++)
|
||||
{
|
||||
Yt += Y_[n];
|
||||
}
|
||||
|
||||
forAll(Y_, n)
|
||||
{
|
||||
Y_[n] /= Yt;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
template<class ThermoSolidType>
|
||||
Foam::scalar Foam::multiComponentSolidMixture<ThermoSolidType>::X
|
||||
(
|
||||
label iComp, label celli, scalar T
|
||||
) const
|
||||
{
|
||||
scalar rhoInv = 0.0;
|
||||
forAll(solidData_, i)
|
||||
{
|
||||
rhoInv += Y_[i][celli]/solidData_[i].rho(T);
|
||||
}
|
||||
|
||||
scalar X = Y_[iComp][celli]/solidData_[iComp].rho(T);
|
||||
|
||||
return (X/rhoInv);
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
template<class ThermoSolidType>
|
||||
Foam::multiComponentSolidMixture<ThermoSolidType>::multiComponentSolidMixture
|
||||
(
|
||||
const dictionary& thermoSolidDict,
|
||||
const fvMesh& mesh
|
||||
)
|
||||
:
|
||||
basicSolidMixture
|
||||
(
|
||||
thermoSolidDict.lookup("solidComponents"),
|
||||
mesh
|
||||
),
|
||||
solidData_(components_.size())
|
||||
{
|
||||
|
||||
forAll(components_, i)
|
||||
{
|
||||
solidData_.set
|
||||
(
|
||||
i,
|
||||
new ThermoSolidType
|
||||
(
|
||||
thermoSolidDict.subDict(components_[i] + "Coeffs")
|
||||
)
|
||||
);
|
||||
}
|
||||
correctMassFractions();
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
template<class ThermoSolidType>
|
||||
Foam::scalar Foam::multiComponentSolidMixture<ThermoSolidType>::rho
|
||||
(
|
||||
scalar T, label celli
|
||||
) const
|
||||
{
|
||||
scalar tmp = 0.0;
|
||||
forAll(solidData_, i)
|
||||
{
|
||||
tmp += solidData_[i].rho(T)*X(i, celli, T);
|
||||
}
|
||||
return tmp;
|
||||
}
|
||||
|
||||
|
||||
template<class ThermoSolidType>
|
||||
Foam::scalar Foam::multiComponentSolidMixture<ThermoSolidType>::hf
|
||||
(
|
||||
scalar, label celli
|
||||
) const
|
||||
{
|
||||
scalar tmp = 0.0;
|
||||
forAll(solidData_, i)
|
||||
{
|
||||
tmp += solidData_[i].hf()*Y_[i][celli];
|
||||
}
|
||||
return tmp;
|
||||
}
|
||||
|
||||
|
||||
template<class ThermoSolidType>
|
||||
Foam::scalar Foam::multiComponentSolidMixture<ThermoSolidType>::hs
|
||||
(
|
||||
scalar T, label celli
|
||||
) const
|
||||
{
|
||||
scalar tmp = 0.0;
|
||||
forAll(solidData_, i)
|
||||
{
|
||||
tmp += solidData_[i].hs(T)*Y_[i][celli];
|
||||
}
|
||||
return tmp;
|
||||
}
|
||||
|
||||
|
||||
template<class ThermoSolidType>
|
||||
Foam::scalar Foam::multiComponentSolidMixture<ThermoSolidType>::h
|
||||
(
|
||||
scalar T, label celli
|
||||
) const
|
||||
{
|
||||
scalar tmp = 0.0;
|
||||
forAll(solidData_, i)
|
||||
{
|
||||
tmp += solidData_[i].h(T)*Y_[i][celli];
|
||||
}
|
||||
return tmp;
|
||||
}
|
||||
|
||||
|
||||
template<class ThermoSolidType>
|
||||
Foam::scalar Foam::multiComponentSolidMixture<ThermoSolidType>::kappaRad
|
||||
(
|
||||
scalar T, label celli
|
||||
) const
|
||||
{
|
||||
scalar tmp = 0.0;
|
||||
forAll(solidData_, i)
|
||||
{
|
||||
tmp += solidData_[i].kappaRad(T)*X(i, celli, T);
|
||||
}
|
||||
return tmp;
|
||||
}
|
||||
|
||||
|
||||
template<class ThermoSolidType>
|
||||
Foam::scalar Foam::multiComponentSolidMixture<ThermoSolidType>::sigmaS
|
||||
(
|
||||
scalar T, label celli
|
||||
) const
|
||||
{
|
||||
scalar tmp = 0.0;
|
||||
forAll(solidData_, i)
|
||||
{
|
||||
tmp += solidData_[i].sigmaS(T)*X(i, celli, T);
|
||||
}
|
||||
return tmp;
|
||||
}
|
||||
|
||||
|
||||
template<class ThermoSolidType>
|
||||
Foam::scalar Foam::multiComponentSolidMixture<ThermoSolidType>::kappa
|
||||
(
|
||||
scalar T, label celli
|
||||
) const
|
||||
{
|
||||
scalar tmp = 0.0;
|
||||
forAll(solidData_, i)
|
||||
{
|
||||
tmp += solidData_[i].kappa(T)*X(i, celli, T);
|
||||
}
|
||||
return tmp;
|
||||
}
|
||||
|
||||
|
||||
template<class ThermoSolidType>
|
||||
Foam::scalar Foam::multiComponentSolidMixture<ThermoSolidType>::emissivity
|
||||
(
|
||||
scalar T, label celli
|
||||
) const
|
||||
{
|
||||
scalar tmp = 0.0;
|
||||
forAll(solidData_, i)
|
||||
{
|
||||
tmp += solidData_[i].emissivity(T)*X(i, celli, T);
|
||||
}
|
||||
return tmp;
|
||||
}
|
||||
|
||||
|
||||
template<class ThermoSolidType>
|
||||
Foam::scalar Foam::multiComponentSolidMixture<ThermoSolidType>::Cp
|
||||
(
|
||||
scalar T, label celli
|
||||
) const
|
||||
{
|
||||
scalar tmp = 0.0;
|
||||
forAll(solidData_, i)
|
||||
{
|
||||
tmp += solidData_[i].Cp(T)*Y_[i][celli];
|
||||
}
|
||||
return tmp;
|
||||
}
|
||||
|
||||
|
||||
template<class ThermoSolidType>
|
||||
void Foam::multiComponentSolidMixture<ThermoSolidType>::read
|
||||
(
|
||||
const dictionary& thermoDict
|
||||
)
|
||||
{
|
||||
forAll(components_, i)
|
||||
{
|
||||
solidData_[i] =
|
||||
ThermoSolidType(thermoDict.subDict(components_[i] + "Coeffs"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -1,141 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011 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::multiComponentSolidMixture
|
||||
|
||||
Description
|
||||
Foam::multiComponentSolidMixture
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef multiComponentSolidMixture_H
|
||||
#define multiComponentSolidMixture_H
|
||||
|
||||
#include "PtrList.H"
|
||||
#include "autoPtr.H"
|
||||
#include "basicSolidMixture.H"
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class multiComponentSolidMixture Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
template<class ThermoSolidType>
|
||||
class multiComponentSolidMixture
|
||||
:
|
||||
public basicSolidMixture
|
||||
{
|
||||
|
||||
// Private data
|
||||
|
||||
//- Solid data
|
||||
PtrList<ThermoSolidType> solidData_;
|
||||
|
||||
|
||||
// Private Member Functions
|
||||
|
||||
//- Correct the mass fractions to sum to 1
|
||||
void correctMassFractions();
|
||||
|
||||
//- Return molar fraction for component i in celli and at T
|
||||
scalar X(label i, label celli, scalar T) const;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from dictionary and mesh
|
||||
multiComponentSolidMixture(const dictionary&, const fvMesh&);
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~multiComponentSolidMixture()
|
||||
{}
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Return the raw solid data
|
||||
const PtrList<ThermoSolidType>& solidData() const
|
||||
{
|
||||
return solidData_;
|
||||
}
|
||||
|
||||
//- Read dictionary
|
||||
void read(const dictionary&);
|
||||
|
||||
|
||||
// Cell-based properties
|
||||
|
||||
//- Density
|
||||
virtual scalar rho(scalar T, label celli) const;
|
||||
|
||||
//- Absorption coefficient
|
||||
virtual scalar kappaRad(scalar T, label celli) const;
|
||||
|
||||
//- Scatter coefficient
|
||||
virtual scalar sigmaS(scalar T, label celli) const;
|
||||
|
||||
//- Thermal conductivity
|
||||
virtual scalar kappa(scalar T, label celli) const;
|
||||
|
||||
//- Emissivity coefficient
|
||||
virtual scalar emissivity(scalar T, label celli) const;
|
||||
|
||||
//- Formation enthalpy
|
||||
virtual scalar hf(scalar T, label celli) const;
|
||||
|
||||
//- Sensible enthalpy
|
||||
virtual scalar hs(scalar T, label celli) const;
|
||||
|
||||
//- Total enthalpy
|
||||
virtual scalar h(scalar T, label celli) const;
|
||||
|
||||
//- Specific heat capacity
|
||||
virtual scalar Cp(scalar T, label celli) const;
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#ifdef NoRepository
|
||||
# include "multiComponentSolidMixture.C"
|
||||
#endif
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -1,68 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011 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/>.
|
||||
|
||||
InClass
|
||||
Foam::solidMixtureThermo
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef makeSolidMixtureThermo_H
|
||||
#define makeSolidMixtureThermo_H
|
||||
|
||||
#include "addToRunTimeSelectionTable.H"
|
||||
#include "solidMixtureThermo.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#define makeSolidMixtureThermo(CThermo,MixtureThermo,Mixture,Transport,Radiation,Thermo,Rho)\
|
||||
\
|
||||
typedef MixtureThermo<Mixture<Transport<Radiation<Thermo<Rho> > > > > \
|
||||
MixtureThermo##Mixture##Transport##Radiation##Thermo##Rho; \
|
||||
\
|
||||
defineTemplateTypeNameAndDebugWithName \
|
||||
( \
|
||||
MixtureThermo##Mixture##Transport##Radiation##Thermo##Rho, \
|
||||
#MixtureThermo \
|
||||
"<"#Mixture"<"#Transport"<"#Radiation"<"#Thermo"<"#Rho">>>>>", \
|
||||
0 \
|
||||
); \
|
||||
\
|
||||
addToRunTimeSelectionTable \
|
||||
( \
|
||||
CThermo, \
|
||||
MixtureThermo##Mixture##Transport##Radiation##Thermo##Rho, \
|
||||
mesh \
|
||||
); \
|
||||
\
|
||||
addToRunTimeSelectionTable \
|
||||
( \
|
||||
CThermo, \
|
||||
MixtureThermo##Mixture##Transport##Radiation##Thermo##Rho, \
|
||||
dictionary \
|
||||
);
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -1,466 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2012 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 "solidMixtureThermo.H"
|
||||
#include "fvMesh.H"
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||
|
||||
template<class MixtureType>
|
||||
void Foam::solidMixtureThermo<MixtureType>::calculate()
|
||||
{
|
||||
|
||||
scalarField& rhoCells = rho_.internalField();
|
||||
scalarField& kappaCells = kappa_.internalField();
|
||||
scalarField& kappaRadCells = kappaRad_.internalField();
|
||||
scalarField& sigmaSCells = sigmaS_.internalField();
|
||||
scalarField& emissivityCells = emissivity_.internalField();
|
||||
|
||||
const volScalarField::InternalField& iT = T_.internalField();
|
||||
|
||||
forAll(iT, celli)
|
||||
{
|
||||
rhoCells[celli] = MixtureType::rho(iT[celli], celli);
|
||||
kappaRadCells[celli] = MixtureType::kappaRad(iT[celli], celli);
|
||||
sigmaSCells[celli] = MixtureType::sigmaS(iT[celli], celli);
|
||||
kappaCells[celli] = MixtureType::kappa(iT[celli], celli);
|
||||
emissivityCells[celli] = MixtureType::emissivity(iT[celli], celli);
|
||||
}
|
||||
|
||||
const volScalarField::GeometricBoundaryField& bT = T_.boundaryField();
|
||||
|
||||
forAll(bT, patchI)
|
||||
{
|
||||
rho_.boundaryField()[patchI] == this->rho(patchI)();
|
||||
kappa_.boundaryField()[patchI] == this->kappa(patchI)();
|
||||
kappaRad_.boundaryField()[patchI] == this->kappaRad(patchI)();
|
||||
sigmaS_.boundaryField()[patchI] == this->sigmaS(patchI)();
|
||||
emissivity_.boundaryField()[patchI] == this->emissivity(patchI)();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
template<class MixtureType>
|
||||
Foam::tmp<Foam::scalarField> Foam::solidMixtureThermo<MixtureType>::rho
|
||||
(
|
||||
const label patchI
|
||||
) const
|
||||
{
|
||||
const scalarField& patchT = T_.boundaryField()[patchI];
|
||||
const polyPatch& pp = mesh_.boundaryMesh()[patchI];
|
||||
const labelUList& cells = pp.faceCells();
|
||||
|
||||
tmp<scalarField> tRho(new scalarField(patchT.size()));
|
||||
scalarField& Rho = tRho();
|
||||
|
||||
forAll(patchT, celli)
|
||||
{
|
||||
Rho[celli] = MixtureType::rho(patchT[celli], cells[celli]);
|
||||
}
|
||||
|
||||
return tRho;
|
||||
}
|
||||
|
||||
|
||||
template<class MixtureType>
|
||||
Foam::tmp<Foam::scalarField> Foam::solidMixtureThermo<MixtureType>::sigmaS
|
||||
(
|
||||
const label patchI
|
||||
) const
|
||||
{
|
||||
const scalarField& patchT = T_.boundaryField()[patchI];
|
||||
const polyPatch& pp = mesh_.boundaryMesh()[patchI];
|
||||
const labelUList& cells = pp.faceCells();
|
||||
|
||||
tmp<scalarField> tsigmaS(new scalarField(patchT.size()));
|
||||
scalarField& sigmaS = tsigmaS();
|
||||
|
||||
forAll(patchT, celli)
|
||||
{
|
||||
sigmaS[celli] =
|
||||
MixtureType::sigmaS(patchT[celli], cells[celli]);
|
||||
}
|
||||
|
||||
return tsigmaS;
|
||||
}
|
||||
|
||||
|
||||
template<class MixtureType>
|
||||
Foam::tmp<Foam::scalarField> Foam::solidMixtureThermo<MixtureType>::kappaRad
|
||||
(
|
||||
const label patchI
|
||||
) const
|
||||
{
|
||||
const scalarField& patchT = T_.boundaryField()[patchI];
|
||||
const polyPatch& pp = mesh_.boundaryMesh()[patchI];
|
||||
const labelUList& cells = pp.faceCells();
|
||||
|
||||
tmp<scalarField> tKappaRad(new scalarField(patchT.size()));
|
||||
scalarField& kappaRad = tKappaRad();
|
||||
|
||||
forAll(patchT, celli)
|
||||
{
|
||||
kappaRad[celli] =
|
||||
MixtureType::kappaRad(patchT[celli], cells[celli]);
|
||||
}
|
||||
|
||||
return tKappaRad;
|
||||
}
|
||||
|
||||
|
||||
template<class MixtureType>
|
||||
Foam::tmp<Foam::scalarField> Foam::solidMixtureThermo<MixtureType>::emissivity
|
||||
(
|
||||
const label patchI
|
||||
) const
|
||||
{
|
||||
const scalarField& patchT = T_.boundaryField()[patchI];
|
||||
const polyPatch& pp = mesh_.boundaryMesh()[patchI];
|
||||
const labelUList& cells = pp.faceCells();
|
||||
|
||||
tmp<scalarField> te(new scalarField(patchT.size()));
|
||||
scalarField& e = te();
|
||||
|
||||
forAll(patchT, celli)
|
||||
{
|
||||
e[celli] = MixtureType::emissivity(patchT[celli], cells[celli]);
|
||||
}
|
||||
|
||||
return te;
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
template<class MixtureType>
|
||||
Foam::solidMixtureThermo<MixtureType>::solidMixtureThermo
|
||||
(
|
||||
const fvMesh& mesh
|
||||
)
|
||||
:
|
||||
basicSolidThermo(mesh),
|
||||
MixtureType(*this, mesh),
|
||||
kappa_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"kappa",
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::AUTO_WRITE
|
||||
),
|
||||
mesh,
|
||||
dimEnergy/dimTime/(dimLength*dimTemperature)
|
||||
)
|
||||
{
|
||||
calculate();
|
||||
}
|
||||
|
||||
|
||||
template<class MixtureType>
|
||||
Foam::solidMixtureThermo<MixtureType>::solidMixtureThermo
|
||||
(
|
||||
const fvMesh& mesh,
|
||||
const dictionary& dict
|
||||
)
|
||||
:
|
||||
basicSolidThermo(mesh, dict),
|
||||
MixtureType(*this, mesh),
|
||||
kappa_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"kappa",
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::AUTO_WRITE
|
||||
),
|
||||
mesh,
|
||||
dimEnergy/dimTime/(dimLength*dimTemperature)
|
||||
)
|
||||
{
|
||||
calculate();
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||
|
||||
template<class MixtureType>
|
||||
Foam::solidMixtureThermo<MixtureType>::~solidMixtureThermo()
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
template<class MixtureType>
|
||||
void Foam::solidMixtureThermo<MixtureType>::correct()
|
||||
{
|
||||
calculate();
|
||||
}
|
||||
|
||||
|
||||
template<class MixtureType>
|
||||
Foam::tmp<Foam::volScalarField> Foam::solidMixtureThermo<MixtureType>::
|
||||
kappa() const
|
||||
{
|
||||
return kappa_;
|
||||
}
|
||||
|
||||
|
||||
template<class MixtureType>
|
||||
Foam::tmp<Foam::volScalarField>
|
||||
Foam::solidMixtureThermo<MixtureType>::Cp() const
|
||||
{
|
||||
tmp<volScalarField> tCp
|
||||
(
|
||||
new volScalarField
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"Cp",
|
||||
mesh_.time().timeName(),
|
||||
mesh_,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh_,
|
||||
dimEnergy/(dimMass*dimTemperature)
|
||||
)
|
||||
);
|
||||
volScalarField& Cp = tCp();
|
||||
|
||||
const volScalarField::InternalField& iT = T_.internalField();
|
||||
|
||||
forAll(iT, celli)
|
||||
{
|
||||
Cp[celli] = MixtureType::Cp(T_[celli], celli);
|
||||
}
|
||||
|
||||
volScalarField::GeometricBoundaryField& bCp = Cp.boundaryField();
|
||||
|
||||
forAll(bCp, patchI)
|
||||
{
|
||||
bCp[patchI] == this->Cp(patchI)();
|
||||
}
|
||||
|
||||
return tCp;
|
||||
}
|
||||
|
||||
|
||||
template<class MixtureType>
|
||||
Foam::tmp<Foam::volScalarField>
|
||||
Foam::solidMixtureThermo<MixtureType>::hs() const
|
||||
{
|
||||
tmp<volScalarField> ths
|
||||
(
|
||||
new volScalarField
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"Hs",
|
||||
mesh_.time().timeName(),
|
||||
mesh_,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh_,
|
||||
dimEnergy/(dimMass*dimTemperature)
|
||||
)
|
||||
);
|
||||
volScalarField& hs = ths();
|
||||
|
||||
const volScalarField::InternalField& iT = T_.internalField();
|
||||
|
||||
forAll(iT, celli)
|
||||
{
|
||||
hs[celli] = MixtureType::hs(T_[celli], celli);
|
||||
}
|
||||
|
||||
volScalarField::GeometricBoundaryField& bHs = hs.boundaryField();
|
||||
|
||||
forAll(bHs, patchI)
|
||||
{
|
||||
bHs[patchI] == this->hs(patchI)();
|
||||
}
|
||||
|
||||
return ths;
|
||||
}
|
||||
|
||||
|
||||
template<class MixtureType>
|
||||
Foam::tmp<Foam::volScalarField>
|
||||
Foam::solidMixtureThermo<MixtureType>::Hf() const
|
||||
{
|
||||
tmp<volScalarField> thF
|
||||
(
|
||||
new volScalarField
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"hF",
|
||||
mesh_.time().timeName(),
|
||||
mesh_,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh_,
|
||||
dimEnergy/(dimMass*dimTemperature)
|
||||
)
|
||||
);
|
||||
volScalarField& hf = thF();
|
||||
|
||||
const volScalarField::InternalField& iT = T_.internalField();
|
||||
|
||||
forAll(iT, celli)
|
||||
{
|
||||
hf[celli] = MixtureType::hf(T_[celli], celli);
|
||||
}
|
||||
|
||||
volScalarField::GeometricBoundaryField& bhf = hf.boundaryField();
|
||||
|
||||
forAll(bhf, patchI)
|
||||
{
|
||||
bhf[patchI] == this->Hf(patchI)();
|
||||
}
|
||||
|
||||
return thF;
|
||||
}
|
||||
|
||||
|
||||
template<class MixtureType>
|
||||
Foam::tmp<Foam::scalarField> Foam::solidMixtureThermo<MixtureType>::kappa
|
||||
(
|
||||
const label patchI
|
||||
) const
|
||||
{
|
||||
const scalarField& patchT = T_.boundaryField()[patchI];
|
||||
const polyPatch& pp = mesh_.boundaryMesh()[patchI];
|
||||
const labelUList& cells = pp.faceCells();
|
||||
|
||||
tmp<scalarField> tkappa(new scalarField(patchT.size()));
|
||||
scalarField& kappa = tkappa();
|
||||
|
||||
forAll(patchT, celli)
|
||||
{
|
||||
kappa[celli] = MixtureType::kappa(patchT[celli], cells[celli]);
|
||||
}
|
||||
|
||||
return tkappa;
|
||||
}
|
||||
|
||||
|
||||
template<class MixtureType>
|
||||
Foam::tmp<Foam::scalarField> Foam::solidMixtureThermo<MixtureType>::Cp
|
||||
(
|
||||
const label patchI
|
||||
) const
|
||||
{
|
||||
const scalarField& patchT = T_.boundaryField()[patchI];
|
||||
const polyPatch& pp = mesh_.boundaryMesh()[patchI];
|
||||
const labelUList& cells = pp.faceCells();
|
||||
|
||||
tmp<scalarField> tCp(new scalarField(patchT.size()));
|
||||
scalarField& Cp = tCp();
|
||||
|
||||
forAll(patchT, celli)
|
||||
{
|
||||
Cp[celli] = MixtureType::Cp(patchT[celli], cells[celli]);
|
||||
}
|
||||
|
||||
return tCp;
|
||||
}
|
||||
|
||||
|
||||
template<class MixtureType>
|
||||
Foam::tmp<Foam::scalarField> Foam::solidMixtureThermo<MixtureType>::hs
|
||||
(
|
||||
const label patchI
|
||||
) const
|
||||
{
|
||||
const scalarField& patchT = T_.boundaryField()[patchI];
|
||||
const polyPatch& pp = mesh_.boundaryMesh()[patchI];
|
||||
const labelUList& cells = pp.faceCells();
|
||||
|
||||
tmp<scalarField> ths(new scalarField(patchT.size()));
|
||||
scalarField& hs = ths();
|
||||
|
||||
forAll(patchT, celli)
|
||||
{
|
||||
hs[celli] = MixtureType::hs(patchT[celli], cells[celli]);
|
||||
}
|
||||
|
||||
return ths;
|
||||
}
|
||||
|
||||
|
||||
template<class MixtureType>
|
||||
Foam::tmp<Foam::scalarField> Foam::solidMixtureThermo<MixtureType>::Hf
|
||||
(
|
||||
const label patchI
|
||||
) const
|
||||
{
|
||||
const scalarField& patchT = T_.boundaryField()[patchI];
|
||||
const polyPatch& pp = mesh_.boundaryMesh()[patchI];
|
||||
const labelUList& cells = pp.faceCells();
|
||||
|
||||
tmp<scalarField> tHf(new scalarField(patchT.size()));
|
||||
scalarField& Hf = tHf();
|
||||
|
||||
forAll(patchT, celli)
|
||||
{
|
||||
Hf[celli] = MixtureType::hf(patchT[celli], cells[celli]);
|
||||
}
|
||||
|
||||
return tHf;
|
||||
}
|
||||
|
||||
|
||||
template<class MixtureType>
|
||||
bool Foam::solidMixtureThermo<MixtureType>::read()
|
||||
{
|
||||
if (basicSolidThermo::read())
|
||||
{
|
||||
MixtureType::read(*this);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
template<class MixtureType>
|
||||
bool Foam::solidMixtureThermo<MixtureType>::writeData(Ostream& os) const
|
||||
{
|
||||
bool ok = basicSolidThermo::writeData(os);
|
||||
return ok && os.good();
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -1,188 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2012 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::solidMixtureThermo
|
||||
|
||||
Description
|
||||
Foam::solidMixtureThermo
|
||||
|
||||
SourceFiles
|
||||
solidMixtureThermo.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef solidMixtureThermo_H
|
||||
#define solidMixtureThermo_H
|
||||
|
||||
#include "basicSolidThermo.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class solidMixtureThermo Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
template<class MixtureType>
|
||||
class solidMixtureThermo
|
||||
:
|
||||
public basicSolidThermo,
|
||||
public MixtureType
|
||||
{
|
||||
protected:
|
||||
|
||||
// Protected data
|
||||
|
||||
//- Thermal conductivity [W/m/K]
|
||||
volScalarField kappa_;
|
||||
|
||||
|
||||
private:
|
||||
|
||||
// Private Member Functions
|
||||
|
||||
//- Calculate K
|
||||
void calculate();
|
||||
|
||||
|
||||
// Per patch helpers to get mixture properties on a patch
|
||||
|
||||
tmp<scalarField> rho(const label patchI) const;
|
||||
|
||||
tmp<scalarField> sigmaS(const label patchI) const;
|
||||
|
||||
tmp<scalarField> kappaRad(const label patchI) const;
|
||||
|
||||
tmp<scalarField> emissivity(const label patchI) const;
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("solidMixtureThermo");
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from mesh
|
||||
solidMixtureThermo(const fvMesh&);
|
||||
|
||||
//- Construct from mesh and dictionary
|
||||
solidMixtureThermo(const fvMesh&, const dictionary&);
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~solidMixtureThermo();
|
||||
|
||||
|
||||
// Member functions
|
||||
|
||||
//- Update properties
|
||||
virtual void correct();
|
||||
|
||||
//- Return the compostion of the solid mixture
|
||||
virtual MixtureType& composition()
|
||||
{
|
||||
return *this;
|
||||
}
|
||||
|
||||
//- Return the compostion of the solid mixture
|
||||
virtual const MixtureType& composition() const
|
||||
{
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
// Derived thermal properties
|
||||
|
||||
//- Thermal conductivity [W/m/K]
|
||||
virtual tmp<volScalarField> kappa() const;
|
||||
|
||||
//- Thermal conductivity [W/m/K]
|
||||
virtual tmp<volSymmTensorField> directionalKappa() const
|
||||
{
|
||||
notImplemented("solidMixtureThermo::directionalKappa() const");
|
||||
return tmp<volSymmTensorField>(NULL);
|
||||
}
|
||||
|
||||
//- Specific heat capacity [J/(kg.K)]
|
||||
virtual tmp<volScalarField> Cp() const;
|
||||
|
||||
//- Sensible enthalpy [J/(kg.K)]
|
||||
virtual tmp<volScalarField> hs() const;
|
||||
|
||||
//- Heat of formation [J/kg]
|
||||
virtual tmp<volScalarField> Hf() const;
|
||||
|
||||
|
||||
// Per patch calculation
|
||||
|
||||
//- Thermal conductivity [W/(m.K)]
|
||||
virtual tmp<scalarField> kappa(const label patchI) const;
|
||||
|
||||
//- Thermal conductivity [W/(m.K)]
|
||||
virtual tmp<symmTensorField> directionalKappa(const label) const
|
||||
{
|
||||
notImplemented
|
||||
(
|
||||
"solidMixtureThermo::directionalKappa(const label) const"
|
||||
);
|
||||
return tmp<symmTensorField>(NULL);
|
||||
}
|
||||
|
||||
|
||||
//- Specific heat capacity [J/(kg.K)]
|
||||
virtual tmp<scalarField> Cp(const label patchI) const;
|
||||
|
||||
//- Sensible enthalpy [J/(kg.K)]
|
||||
virtual tmp<scalarField> hs(const label patchI) const;
|
||||
|
||||
//- Heat of formation [J/kg]
|
||||
virtual tmp<scalarField> Hf(const label patchI) const;
|
||||
|
||||
|
||||
//- Read thermophysicalProperties dictionary
|
||||
virtual bool read();
|
||||
|
||||
//- Write the basicSolidThermo properties
|
||||
virtual bool writeData(Ostream& os) const;
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#ifdef NoRepository
|
||||
# include "solidMixtureThermo.C"
|
||||
#endif
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -23,40 +23,39 @@ License
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "solidReactionThermo.H"
|
||||
#include "fvMesh.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
defineTypeNameAndDebug(solidReactionThermo, 0);
|
||||
defineRunTimeSelectionTable(solidReactionThermo, mesh);
|
||||
defineRunTimeSelectionTable(solidReactionThermo, dictionary);
|
||||
}
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
template<class thermo>
|
||||
inline Foam::constSolidTransport<thermo>::constSolidTransport
|
||||
(
|
||||
const thermo& t,
|
||||
const scalar kappa
|
||||
)
|
||||
Foam::solidReactionThermo::solidReactionThermo(const fvMesh& mesh)
|
||||
:
|
||||
thermo(t),
|
||||
kappa_(kappa)
|
||||
solidThermo(mesh)
|
||||
{}
|
||||
|
||||
|
||||
template<class thermo>
|
||||
inline Foam::constSolidTransport<thermo>::constSolidTransport
|
||||
Foam::solidReactionThermo::solidReactionThermo
|
||||
(
|
||||
const word& name,
|
||||
const constSolidTransport& ct
|
||||
const fvMesh& mesh,
|
||||
const dictionary& dict
|
||||
)
|
||||
:
|
||||
thermo(name, ct),
|
||||
kappa_(ct.kappa_)
|
||||
solidThermo(mesh, dict)
|
||||
{}
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
template<class thermo>
|
||||
inline Foam::scalar Foam::constSolidTransport<thermo>::
|
||||
kappa(const scalar T) const
|
||||
{
|
||||
return kappa_;
|
||||
}
|
||||
Foam::solidReactionThermo::~solidReactionThermo()
|
||||
{}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,128 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2012 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::solidReactionThermo
|
||||
|
||||
Description
|
||||
Foam::solidReactionThermo
|
||||
|
||||
SourceFiles
|
||||
solidReactionThermo.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef solidReactionThermo_H
|
||||
#define solidReactionThermo_H
|
||||
|
||||
#include "rhoThermo.H"
|
||||
#include "basicSolidMixture.H"
|
||||
#include "solidThermo.H"
|
||||
#include "autoPtr.H"
|
||||
#include "runTimeSelectionTables.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class solidReactionThermo Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
|
||||
class solidReactionThermo
|
||||
:
|
||||
public solidThermo
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("solidReactionThermo");
|
||||
|
||||
|
||||
//- Declare run-time constructor selection tables
|
||||
declareRunTimeSelectionTable
|
||||
(
|
||||
autoPtr,
|
||||
solidReactionThermo,
|
||||
mesh,
|
||||
(const fvMesh& mesh),
|
||||
(mesh)
|
||||
);
|
||||
|
||||
// Declare run-time constructor selection tables
|
||||
declareRunTimeSelectionTable
|
||||
(
|
||||
autoPtr,
|
||||
solidReactionThermo,
|
||||
dictionary,
|
||||
(const fvMesh& mesh, const dictionary& dict),
|
||||
(mesh, dict)
|
||||
);
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from mesh
|
||||
solidReactionThermo(const fvMesh&);
|
||||
|
||||
//- Construct from dictionary and mesh
|
||||
solidReactionThermo(const fvMesh&, const dictionary&);
|
||||
|
||||
|
||||
// Selectors
|
||||
|
||||
//- Standard selection based on fvMesh
|
||||
static autoPtr<solidReactionThermo> New(const fvMesh&);
|
||||
|
||||
//- Standard selection based on fvMesh amd dictionary
|
||||
static autoPtr<solidReactionThermo> New
|
||||
(
|
||||
const fvMesh&,
|
||||
const dictionary&
|
||||
);
|
||||
|
||||
//- Destructor
|
||||
virtual ~solidReactionThermo();
|
||||
|
||||
|
||||
// Member functions
|
||||
|
||||
//- Return the composition of the multi-component mixture
|
||||
virtual basicSolidMixture& composition() = 0;
|
||||
|
||||
//- Return the composition of the multi-component mixture
|
||||
virtual const basicSolidMixture& composition() const = 0;
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,106 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2012 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 "solidReactionThermo.H"
|
||||
#include "fvMesh.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::autoPtr<Foam::solidReactionThermo> Foam::solidReactionThermo::New
|
||||
(
|
||||
const fvMesh& mesh
|
||||
)
|
||||
{
|
||||
// get model name, but do not register the dictionary
|
||||
// otherwise it is registered in the database twice
|
||||
const word modelType
|
||||
(
|
||||
IOdictionary
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"thermophysicalProperties",
|
||||
mesh.time().constant(),
|
||||
mesh,
|
||||
IOobject::MUST_READ_IF_MODIFIED,
|
||||
IOobject::NO_WRITE,
|
||||
false
|
||||
)
|
||||
).lookup("thermoType")
|
||||
);
|
||||
|
||||
Info<< "Selecting thermodynamics package " << modelType << endl;
|
||||
|
||||
meshConstructorTable::iterator cstrIter =
|
||||
meshConstructorTablePtr_->find(modelType);
|
||||
|
||||
if (cstrIter == meshConstructorTablePtr_->end())
|
||||
{
|
||||
FatalErrorIn("solidReactionThermo::New(const fvMesh&)")
|
||||
<< "Unknown solidReactionThermo type "
|
||||
<< modelType << nl << nl
|
||||
<< "Valid solidReactionThermo types:" << nl
|
||||
<< meshConstructorTablePtr_->sortedToc() << nl
|
||||
<< exit(FatalError);
|
||||
}
|
||||
|
||||
return autoPtr<solidReactionThermo>(cstrIter()(mesh));
|
||||
}
|
||||
|
||||
|
||||
Foam::autoPtr<Foam::solidReactionThermo> Foam::solidReactionThermo::New
|
||||
(
|
||||
const fvMesh& mesh, const dictionary& dict
|
||||
)
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
Info<< "solidReactionThermo::New(const fvMesh&, const dictionary&): "
|
||||
<< "constructing solidReactionThermo"
|
||||
<< endl;
|
||||
}
|
||||
|
||||
const word thermoType = dict.lookup("thermoType");
|
||||
|
||||
dictionaryConstructorTable::iterator cstrIter =
|
||||
dictionaryConstructorTablePtr_->find(thermoType);
|
||||
|
||||
if (cstrIter == dictionaryConstructorTablePtr_->end())
|
||||
{
|
||||
FatalErrorIn
|
||||
(
|
||||
"solidReactionThermo::New(const fvMesh&, const dictionary&)"
|
||||
) << "Unknown solidReactionThermo type " << thermoType
|
||||
<< endl << endl
|
||||
<< "Valid solidReactionThermo types are :" << endl
|
||||
<< dictionaryConstructorTablePtr_->toc()
|
||||
<< exit(FatalError);
|
||||
}
|
||||
|
||||
return autoPtr<solidReactionThermo>(cstrIter()(mesh, dict));
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,146 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2012 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/>.
|
||||
|
||||
InClass
|
||||
Foam::solidThermo
|
||||
|
||||
Description
|
||||
Macros for creating solid thermo packages
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef makeSolidThermo_H
|
||||
#define makesolidThermo_H
|
||||
|
||||
#include "addToRunTimeSelectionTable.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
#define makeSolidThermo(BaseThermo,Cthermo,Mixture,Transport,Radiation,Type,Thermo,Rho)\
|
||||
\
|
||||
typedef Cthermo \
|
||||
< \
|
||||
Mixture \
|
||||
< \
|
||||
Transport \
|
||||
< \
|
||||
Radiation \
|
||||
< \
|
||||
specieThermo \
|
||||
< \
|
||||
Thermo \
|
||||
< \
|
||||
Rho \
|
||||
>, \
|
||||
Type \
|
||||
> \
|
||||
> \
|
||||
> \
|
||||
>, \
|
||||
BaseThermo \
|
||||
> Cthermo##Mixture##Transport##Radiation##Type##Thermo##Rho##BaseThermo; \
|
||||
\
|
||||
defineTemplateTypeNameAndDebugWithName \
|
||||
( \
|
||||
Cthermo##Mixture##Transport##Radiation##Type##Thermo##Rho##BaseThermo, \
|
||||
#Cthermo \
|
||||
"<" \
|
||||
#Mixture \
|
||||
"<" \
|
||||
#Transport \
|
||||
"<" \
|
||||
#Radiation \
|
||||
"<specieThermo<" \
|
||||
#Thermo \
|
||||
"<" \
|
||||
#Rho \
|
||||
">," \
|
||||
#Type \
|
||||
">>>>" \
|
||||
">", \
|
||||
0 \
|
||||
); \
|
||||
\
|
||||
\
|
||||
typedef Mixture \
|
||||
< \
|
||||
Transport \
|
||||
< \
|
||||
Radiation \
|
||||
< \
|
||||
specieThermo \
|
||||
< \
|
||||
Thermo \
|
||||
< \
|
||||
Rho \
|
||||
>, \
|
||||
Type \
|
||||
> \
|
||||
> \
|
||||
> \
|
||||
> Mixture##Transport##Radiation##Type##Thermo##Rho; \
|
||||
\
|
||||
\
|
||||
\
|
||||
defineTemplateTypeNameAndDebugWithName \
|
||||
( \
|
||||
Mixture##Transport##Radiation##Type##Thermo##Rho, \
|
||||
#Mixture \
|
||||
"<" \
|
||||
#Transport \
|
||||
"<" \
|
||||
#Radiation \
|
||||
"<specieThermo<" \
|
||||
#Thermo \
|
||||
"<" \
|
||||
#Rho \
|
||||
">," \
|
||||
#Type \
|
||||
">>>>", \
|
||||
0 \
|
||||
); \
|
||||
\
|
||||
addToRunTimeSelectionTable \
|
||||
( \
|
||||
BaseThermo, \
|
||||
Cthermo##Mixture##Transport##Radiation##Type##Thermo##Rho##BaseThermo, \
|
||||
mesh \
|
||||
); \
|
||||
\
|
||||
addToRunTimeSelectionTable \
|
||||
( \
|
||||
BaseThermo, \
|
||||
Cthermo##Mixture##Transport##Radiation##Type##Thermo##Rho##BaseThermo, \
|
||||
dictionary \
|
||||
);
|
||||
|
||||
|
||||
}
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,146 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2012 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 "solidThermo.H"
|
||||
#include "fvMesh.H"
|
||||
#include "volFields.H"
|
||||
#include "HashTable.H"
|
||||
|
||||
/* * * * * * * * * * * * * * * private static data * * * * * * * * * * * * * */
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
defineTypeNameAndDebug(solidThermo, 0);
|
||||
defineRunTimeSelectionTable(solidThermo, mesh);
|
||||
defineRunTimeSelectionTable(solidThermo, dictionary);
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::solidThermo::solidThermo(const fvMesh& mesh)
|
||||
:
|
||||
basicThermo(mesh),
|
||||
rho_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"rho",
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh,
|
||||
dimMass/dimVolume
|
||||
)
|
||||
{}
|
||||
|
||||
|
||||
Foam::solidThermo::solidThermo
|
||||
(
|
||||
const fvMesh& mesh,
|
||||
const dictionary& dict
|
||||
)
|
||||
:
|
||||
basicThermo(mesh, dict),
|
||||
rho_
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"rho",
|
||||
mesh.time().timeName(),
|
||||
mesh,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh,
|
||||
dimMass/dimVolume
|
||||
)
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::solidThermo::~solidThermo()
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
Foam::volScalarField& Foam::solidThermo::T()
|
||||
{
|
||||
return this->T_;
|
||||
}
|
||||
|
||||
|
||||
const Foam::volScalarField& Foam::solidThermo::T() const
|
||||
{
|
||||
return this->T_;
|
||||
}
|
||||
|
||||
|
||||
const Foam::volScalarField& Foam::solidThermo::rhos() const
|
||||
{
|
||||
return rho_;
|
||||
}
|
||||
|
||||
|
||||
Foam::volScalarField& Foam::solidThermo::rhos()
|
||||
{
|
||||
return rho_;
|
||||
}
|
||||
|
||||
|
||||
const Foam::volScalarField& Foam::solidThermo::p() const
|
||||
{
|
||||
return this->p_;
|
||||
}
|
||||
|
||||
|
||||
Foam::volScalarField& Foam::solidThermo::p()
|
||||
{
|
||||
return this->p_;
|
||||
}
|
||||
|
||||
|
||||
const Foam::volScalarField& Foam::solidThermo::alpha() const
|
||||
{
|
||||
return this->alpha_;
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::volScalarField> Foam::solidThermo::rho() const
|
||||
{
|
||||
return tmp<volScalarField>(rho_);
|
||||
}
|
||||
|
||||
|
||||
bool Foam::solidThermo::read()
|
||||
{
|
||||
return regIOobject::read();
|
||||
}
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -22,20 +22,18 @@ License
|
||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Class
|
||||
Foam::basicSolidThermo
|
||||
Foam::solidThermo
|
||||
|
||||
Description
|
||||
|
||||
Basic solid thermodynamic properties
|
||||
|
||||
SourceFiles
|
||||
basicSolidThermo.C
|
||||
newBasicThermo.C
|
||||
solidThermo.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef basicSolidThermo_H
|
||||
#define basicSolidThermo_H
|
||||
#ifndef solidThermo_H
|
||||
#define solidThermo_H
|
||||
|
||||
#include "volFields.H"
|
||||
#include "runTimeSelectionTables.H"
|
||||
@ -43,6 +41,7 @@ SourceFiles
|
||||
#include "IOdictionary.H"
|
||||
#include "autoPtr.H"
|
||||
#include "basicSolidMixture.H"
|
||||
#include "basicThermo.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
@ -50,48 +49,33 @@ namespace Foam
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class basicSolidThermo Declaration
|
||||
Class solidThermo Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class basicSolidThermo
|
||||
class solidThermo
|
||||
:
|
||||
public IOdictionary
|
||||
public basicThermo
|
||||
{
|
||||
|
||||
protected:
|
||||
|
||||
// Protected data
|
||||
|
||||
const fvMesh& mesh_;
|
||||
|
||||
// Fields
|
||||
|
||||
//- Temperature [K]
|
||||
volScalarField T_;
|
||||
|
||||
//- Density [kg/m3]
|
||||
volScalarField rho_;
|
||||
|
||||
//- Absorption coefficient [1/m]
|
||||
volScalarField kappaRad_;
|
||||
|
||||
//- Scatter coeffcient [1/m]
|
||||
volScalarField sigmaS_;
|
||||
|
||||
//- Emissivity coeffcient []
|
||||
volScalarField emissivity_;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("basicSolidThermo");
|
||||
TypeName("solidThermo");
|
||||
|
||||
// Declare run-time constructor selection tables
|
||||
declareRunTimeSelectionTable
|
||||
(
|
||||
autoPtr,
|
||||
basicSolidThermo,
|
||||
solidThermo,
|
||||
mesh,
|
||||
(const fvMesh& mesh),
|
||||
(mesh)
|
||||
@ -102,7 +86,7 @@ public:
|
||||
declareRunTimeSelectionTable
|
||||
(
|
||||
autoPtr,
|
||||
basicSolidThermo,
|
||||
solidThermo,
|
||||
dictionary,
|
||||
(const fvMesh& mesh, const dictionary& dict),
|
||||
(mesh, dict)
|
||||
@ -112,22 +96,22 @@ public:
|
||||
// Constructors
|
||||
|
||||
//- Construct from mesh
|
||||
basicSolidThermo(const fvMesh&);
|
||||
solidThermo(const fvMesh&);
|
||||
|
||||
//- Construct from mesh and dict
|
||||
basicSolidThermo(const fvMesh&, const dictionary& dict);
|
||||
solidThermo(const fvMesh&, const dictionary& dict);
|
||||
|
||||
//- Return a pointer to a new basicSolidThermo created from
|
||||
//- Return a pointer to a new solidThermo created from
|
||||
// the solidThermophysicalProperties dictionary
|
||||
static autoPtr<basicSolidThermo> New(const fvMesh&);
|
||||
static autoPtr<solidThermo> New(const fvMesh&);
|
||||
|
||||
//- Return a pointer to a new basicSolidThermo created from
|
||||
//- Return a pointer to a new solidThermo created from
|
||||
// local dictionary
|
||||
static autoPtr<basicSolidThermo> New(const fvMesh&, const dictionary&);
|
||||
static autoPtr<solidThermo> New(const fvMesh&, const dictionary&);
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~basicSolidThermo();
|
||||
virtual ~solidThermo();
|
||||
|
||||
|
||||
// Member functions
|
||||
@ -135,85 +119,131 @@ public:
|
||||
//- Update properties
|
||||
virtual void correct() = 0;
|
||||
|
||||
//- Return the composition of the solid mixture
|
||||
virtual basicSolidMixture& composition();
|
||||
|
||||
//- Return the composition of the solid mixture
|
||||
virtual const basicSolidMixture& composition() const;
|
||||
|
||||
|
||||
// Access to thermodynamic state variables
|
||||
|
||||
//- Temperature [K]
|
||||
//- Constant access to temperature [K]
|
||||
virtual const volScalarField& T() const;
|
||||
|
||||
//- non-const access for T
|
||||
//- Non constant access to temperature [K]
|
||||
virtual volScalarField& T();
|
||||
|
||||
//- Density [kg/m^3]
|
||||
virtual const volScalarField& rho() const;
|
||||
//- Solid density [kg/m3]
|
||||
virtual const volScalarField& rhos() const;
|
||||
|
||||
//- non-const access for rho
|
||||
virtual volScalarField& rho();
|
||||
//- Non-const access for solid density [kg/m3]
|
||||
virtual volScalarField& rhos();
|
||||
|
||||
//- Absorption coefficient [1/m]
|
||||
virtual const volScalarField& kappaRad() const;
|
||||
|
||||
//- Emissivity coefficient
|
||||
virtual const volScalarField& sigmaS() const;
|
||||
//- Constant access to p [Pa]
|
||||
virtual const volScalarField& p() const;
|
||||
|
||||
//- Emissivity coefficient [1/m]
|
||||
virtual const volScalarField& emissivity() const;
|
||||
//- Non-constant access to p [Pa]
|
||||
virtual volScalarField& p();
|
||||
|
||||
|
||||
// Access to transport state variables
|
||||
|
||||
//- Thermal diffusivity for enthalpy of mixture [kg/m/s]
|
||||
virtual const volScalarField& alpha() const;
|
||||
|
||||
|
||||
// Derived thermal properties
|
||||
|
||||
//- Enthalpy/Internal energy [J/kg]
|
||||
virtual const volScalarField& he() const = 0;
|
||||
|
||||
//- Enthalpy/Internal energy [J/kg]
|
||||
// Non-const access allowed for transport equations
|
||||
virtual volScalarField& he() = 0;
|
||||
|
||||
//- Thermal conductivity [W/m/K]
|
||||
virtual tmp<volScalarField> kappa() const = 0;
|
||||
|
||||
//- Thermal conductivity [W/m/K]
|
||||
virtual tmp<volSymmTensorField> directionalKappa() const = 0;
|
||||
virtual tmp<volVectorField> Kappa() const = 0;
|
||||
|
||||
//- Absorption coefficient [1/m]
|
||||
virtual tmp<volScalarField> kappaRad() const = 0;
|
||||
|
||||
//- Scatter coefficient
|
||||
virtual tmp<volScalarField> sigmaS() const = 0;
|
||||
|
||||
//- Emissivity coefficient [1/m]
|
||||
virtual tmp<volScalarField> emissivity() const = 0;
|
||||
|
||||
//- Specific heat capacity [J/kg/K]
|
||||
virtual tmp<volScalarField> Cp() const = 0;
|
||||
|
||||
//- Sensible enthalpy [J/kg]
|
||||
virtual tmp<volScalarField> hs() const;
|
||||
|
||||
//- Heat of formation [J/kg]
|
||||
virtual tmp<volScalarField> Hf() const = 0;
|
||||
virtual tmp<volScalarField> hc() const = 0;
|
||||
|
||||
//- Density [kg/m^3]
|
||||
virtual tmp<volScalarField> rho() const;
|
||||
|
||||
|
||||
// Per patch calculation
|
||||
|
||||
//- Thermal conductivity [W//m/K]
|
||||
virtual tmp<scalarField> kappa(const label patchI) const = 0;
|
||||
|
||||
//- Thermal conductivity [W//m/K]
|
||||
virtual tmp<symmTensorField> directionalKappa
|
||||
//- Enthalpy/Internal energy [J/kg]
|
||||
virtual tmp<scalarField> he
|
||||
(
|
||||
const label
|
||||
const scalarField& p,
|
||||
const scalarField& T,
|
||||
const label patchi
|
||||
) const = 0;
|
||||
|
||||
|
||||
//- Specific heat capacity [J/kg/K)]
|
||||
virtual tmp<scalarField> Cp(const label patchI) const = 0;
|
||||
virtual tmp<scalarField> Cp
|
||||
(
|
||||
const scalarField& p,
|
||||
const scalarField& T,
|
||||
const label patchI
|
||||
) const = 0;
|
||||
|
||||
//- Sensible enthalpy [J/kg]
|
||||
virtual tmp<scalarField> hs(const label patchI) const;
|
||||
|
||||
//- Heat of formation [J/kg]
|
||||
virtual tmp<scalarField> Hf(const label patchI) const = 0;
|
||||
//- Isotropic thermal conductivity [W//m/K]
|
||||
virtual tmp<scalarField> kappa
|
||||
(
|
||||
const label patchI
|
||||
) const = 0;
|
||||
|
||||
//- Anisotropic thermal conductivity [W/m/K]
|
||||
virtual tmp<vectorField> Kappa
|
||||
(
|
||||
const label patchI
|
||||
) const = 0;
|
||||
|
||||
//- Thermal diffusivity for enthalpy of mixture [kg/m/s]
|
||||
virtual tmp<scalarField> alpha
|
||||
(
|
||||
const label patchI
|
||||
) const = 0;
|
||||
|
||||
//- Absorption coefficient [1/m]
|
||||
virtual tmp<scalarField> kappaRad
|
||||
(
|
||||
const label patchI
|
||||
) const = 0;
|
||||
|
||||
//- Scatter coefficient
|
||||
virtual tmp<scalarField> sigmaS
|
||||
(
|
||||
const label patchI
|
||||
) const = 0;
|
||||
|
||||
//- Emissivity coefficient [1/m]
|
||||
virtual tmp<scalarField> emissivity
|
||||
(
|
||||
const label patchI
|
||||
) const = 0;
|
||||
|
||||
|
||||
// I-O
|
||||
|
||||
//- Write the basicSolidThermo properties
|
||||
virtual bool writeData(Ostream& os) const = 0;
|
||||
|
||||
//- Read thermophysicalProperties dictionary
|
||||
virtual bool read() = 0;
|
||||
virtual bool read();
|
||||
|
||||
//- Ostream Operator
|
||||
friend Ostream& operator<<(Ostream& os, const basicSolidThermo& s);
|
||||
};
|
||||
|
||||
|
||||
@ -23,19 +23,19 @@ License
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "basicSolidThermo.H"
|
||||
#include "solidThermo.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::autoPtr<Foam::basicSolidThermo> Foam::basicSolidThermo::New
|
||||
Foam::autoPtr<Foam::solidThermo> Foam::solidThermo::New
|
||||
(
|
||||
const fvMesh& mesh
|
||||
)
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
Info<< "basicSolidThermo::New(const fvMesh&): "
|
||||
<< "constructing basicSolidThermo"
|
||||
Info<< "solidThermo::New(const fvMesh&): "
|
||||
<< "constructing solidThermo"
|
||||
<< endl;
|
||||
}
|
||||
|
||||
@ -45,7 +45,7 @@ Foam::autoPtr<Foam::basicSolidThermo> Foam::basicSolidThermo::New
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"solidThermophysicalProperties",
|
||||
"thermophysicalProperties",
|
||||
mesh.time().constant(),
|
||||
mesh,
|
||||
IOobject::MUST_READ_IF_MODIFIED,
|
||||
@ -62,7 +62,7 @@ Foam::autoPtr<Foam::basicSolidThermo> Foam::basicSolidThermo::New
|
||||
{
|
||||
FatalErrorIn
|
||||
(
|
||||
"basicSolidThermo::New(const fvMesh&)"
|
||||
"solidThermo::New(const fvMesh&)"
|
||||
) << "Unknown solidThermo type " << thermoType
|
||||
<< endl << endl
|
||||
<< "Valid solidThermo types are :" << endl
|
||||
@ -70,19 +70,19 @@ Foam::autoPtr<Foam::basicSolidThermo> Foam::basicSolidThermo::New
|
||||
<< exit(FatalError);
|
||||
}
|
||||
|
||||
return autoPtr<basicSolidThermo>(cstrIter()(mesh));
|
||||
return autoPtr<solidThermo>(cstrIter()(mesh));
|
||||
}
|
||||
|
||||
|
||||
Foam::autoPtr<Foam::basicSolidThermo> Foam::basicSolidThermo::New
|
||||
Foam::autoPtr<Foam::solidThermo> Foam::solidThermo::New
|
||||
(
|
||||
const fvMesh& mesh, const dictionary& dict
|
||||
)
|
||||
{
|
||||
if (debug)
|
||||
{
|
||||
Info<< "basicSolidThermo::New(const fvMesh&, const dictionary&): "
|
||||
<< "constructing basicSolidThermo"
|
||||
Info<< "solidThermo::New(const fvMesh&, const dictionary&): "
|
||||
<< "constructing solidThermo"
|
||||
<< endl;
|
||||
}
|
||||
|
||||
@ -95,7 +95,7 @@ Foam::autoPtr<Foam::basicSolidThermo> Foam::basicSolidThermo::New
|
||||
{
|
||||
FatalErrorIn
|
||||
(
|
||||
"basicSolidThermo::New(const fvMesh&, const dictionary&)"
|
||||
"solidThermo::New(const fvMesh&, const dictionary&)"
|
||||
) << "Unknown solidThermo type " << thermoType
|
||||
<< endl << endl
|
||||
<< "Valid solidThermo types are :" << endl
|
||||
@ -103,7 +103,7 @@ Foam::autoPtr<Foam::basicSolidThermo> Foam::basicSolidThermo::New
|
||||
<< exit(FatalError);
|
||||
}
|
||||
|
||||
return autoPtr<basicSolidThermo>(cstrIter()(mesh, dict));
|
||||
return autoPtr<solidThermo>(cstrIter()(mesh, dict));
|
||||
}
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
@ -25,10 +25,11 @@ License
|
||||
|
||||
#include "radiationCoupledBase.H"
|
||||
#include "volFields.H"
|
||||
#include "basicSolidThermo.H"
|
||||
|
||||
|
||||
#include "mappedPatchBase.H"
|
||||
#include "fvPatchFieldMapper.H"
|
||||
#include "solidThermo.H"
|
||||
|
||||
// * * * * * * * * * * * * * Static Member Data * * * * * * * * * * * * * * //
|
||||
|
||||
@ -142,6 +143,12 @@ Foam::scalarField Foam::radiationCoupledBase::emissivity() const
|
||||
|
||||
const polyMesh& nbrMesh = mpp.sampleMesh();
|
||||
|
||||
const solidThermo& thermo =
|
||||
nbrMesh.lookupObject<solidThermo>
|
||||
(
|
||||
"thermophysicalProperties"
|
||||
);
|
||||
|
||||
// Force recalculation of mapping and schedule
|
||||
const mapDistribute& distMap = mpp.map();
|
||||
|
||||
@ -150,29 +157,10 @@ Foam::scalarField Foam::radiationCoupledBase::emissivity() const
|
||||
nbrMesh
|
||||
).boundary()[mpp.samplePolyPatch().index()];
|
||||
|
||||
if (nbrMesh.foundObject<volScalarField>("emissivity"))
|
||||
{
|
||||
tmp<scalarField> temissivity
|
||||
(
|
||||
new scalarField
|
||||
(
|
||||
nbrPatch.lookupPatchField<volScalarField, scalar>
|
||||
(
|
||||
"emissivity"
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
scalarField emissivity(temissivity);
|
||||
// Use direct map mapping to exchange data
|
||||
scalarField emissivity(thermo.emissivity(nbrPatch.index()));
|
||||
distMap.distribute(emissivity);
|
||||
//Pout << emissivity << endl;
|
||||
|
||||
return emissivity;
|
||||
}
|
||||
else
|
||||
{
|
||||
return scalarField(0);
|
||||
}
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
@ -357,6 +357,7 @@ void Foam::radiation::viewFactor::calculate()
|
||||
>(QrPatch);
|
||||
|
||||
const scalarList eb = Qrp.emissivity();
|
||||
|
||||
const scalarList& Hoi = Qrp.Qro();
|
||||
|
||||
const polyPatch& pp = coarseMesh_.boundaryMesh()[patchID];
|
||||
@ -373,10 +374,6 @@ void Foam::radiation::viewFactor::calculate()
|
||||
|
||||
labelListList coarseToFine(invertOneToMany(nAgglom, agglom));
|
||||
|
||||
//scalarList Tave(pp.size(), 0.0);
|
||||
//scalarList Eave(Tave.size(), 0.0);
|
||||
//scalarList Hoiave(Tave.size(), 0.0);
|
||||
|
||||
forAll(coarseToFine, coarseI)
|
||||
{
|
||||
const label coarseFaceID = coarsePatchFace[coarseI];
|
||||
@ -395,10 +392,6 @@ void Foam::radiation::viewFactor::calculate()
|
||||
Eave[coarseI] += (eb[faceI]*sf[faceI])/area;
|
||||
Hoiave[coarseI] += (Hoi[faceI]*sf[faceI])/area;
|
||||
}
|
||||
|
||||
//localCoarseTave.append(Tave[coarseI]);
|
||||
//localCoarseEave.append(Eave[coarseI]);
|
||||
//localCoarseHoave.append(Hoiave[coarseI]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -37,25 +37,48 @@ Description
|
||||
#include "constSolidThermo.H"
|
||||
#include "exponentialSolidThermo.H"
|
||||
|
||||
#include "constSolidTransport.H"
|
||||
#include "constIsoSolidTransport.H"
|
||||
#include "constAnIsoSolidTransport.H"
|
||||
#include "exponentialSolidTransport.H"
|
||||
|
||||
#include "constSolidRad.H"
|
||||
|
||||
#include "sensibleEnthalpy.H"
|
||||
#include "specieThermo.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
typedef constSolidTransport<constSolidRad<constSolidThermo<constRho> > >
|
||||
constSolidThermoPhysics;
|
||||
|
||||
typedef constSolidTransport
|
||||
typedef
|
||||
constIsoSolidTransport
|
||||
<
|
||||
constSolidRad
|
||||
<
|
||||
specieThermo
|
||||
<
|
||||
constSolidThermo
|
||||
<
|
||||
constRho
|
||||
>,
|
||||
sensibleEnthalpy
|
||||
>
|
||||
>
|
||||
>
|
||||
constSolidThermoPhysics;
|
||||
|
||||
typedef
|
||||
exponentialSolidTransport
|
||||
<
|
||||
constSolidRad
|
||||
<
|
||||
specieThermo
|
||||
<
|
||||
exponentialSolidThermo
|
||||
<
|
||||
constRho
|
||||
>,
|
||||
sensibleEnthalpy
|
||||
>
|
||||
>
|
||||
>
|
||||
|
||||
@ -43,6 +43,13 @@ namespace Foam
|
||||
|
||||
template<class thermo> class constSolidRad;
|
||||
|
||||
template<class thermo>
|
||||
inline constSolidRad<thermo> operator*
|
||||
(
|
||||
const scalar,
|
||||
const constSolidRad<thermo>&
|
||||
);
|
||||
|
||||
template<class thermo>
|
||||
Ostream& operator<<
|
||||
(
|
||||
@ -110,6 +117,22 @@ public:
|
||||
inline scalar emissivity(scalar T) const;
|
||||
|
||||
|
||||
// Member operators
|
||||
|
||||
inline constSolidRad& operator=(const constSolidRad&);
|
||||
inline void operator+=(const constSolidRad&);
|
||||
inline void operator-=(const constSolidRad&);
|
||||
|
||||
|
||||
// Friend operators
|
||||
|
||||
friend constSolidRad operator* <thermo>
|
||||
(
|
||||
const scalar,
|
||||
const constSolidRad&
|
||||
);
|
||||
|
||||
|
||||
// Ostream Operator
|
||||
|
||||
friend Ostream& operator<< <thermo>
|
||||
|
||||
@ -25,15 +25,10 @@ License
|
||||
|
||||
#include "constSolidRad.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||
|
||||
template<class thermo>
|
||||
inline constSolidRad<thermo>::constSolidRad
|
||||
inline Foam::constSolidRad<thermo>::constSolidRad
|
||||
(
|
||||
const thermo& t,
|
||||
const scalar kappaRad,
|
||||
@ -52,7 +47,7 @@ inline constSolidRad<thermo>::constSolidRad
|
||||
|
||||
|
||||
template<class thermo>
|
||||
inline constSolidRad<thermo>::constSolidRad
|
||||
inline Foam::constSolidRad<thermo>::constSolidRad
|
||||
(
|
||||
const word& name,
|
||||
const constSolidRad& pg
|
||||
@ -66,14 +61,16 @@ inline constSolidRad<thermo>::constSolidRad
|
||||
|
||||
|
||||
template<class thermo>
|
||||
inline autoPtr<constSolidRad<thermo> > constSolidRad<thermo>::clone() const
|
||||
inline Foam::autoPtr<Foam::constSolidRad<thermo> >
|
||||
Foam::constSolidRad<thermo>::clone() const
|
||||
{
|
||||
return autoPtr<constSolidRad<thermo> >(new constSolidRad<thermo>(*this));
|
||||
}
|
||||
|
||||
|
||||
template<class thermo>
|
||||
inline autoPtr<constSolidRad<thermo> > constSolidRad<thermo>::New(Istream& is)
|
||||
inline Foam::autoPtr<Foam::constSolidRad<thermo> >
|
||||
Foam::constSolidRad<thermo>::New(Istream& is)
|
||||
{
|
||||
return autoPtr<constSolidRad<thermo> >(new constSolidRad<thermo>(is));
|
||||
}
|
||||
@ -82,28 +79,101 @@ inline autoPtr<constSolidRad<thermo> > constSolidRad<thermo>::New(Istream& is)
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
template<class thermo>
|
||||
inline scalar constSolidRad<thermo>::kappaRad(scalar) const
|
||||
inline Foam::scalar Foam::constSolidRad<thermo>::kappaRad(scalar) const
|
||||
{
|
||||
return kappaRad_;
|
||||
}
|
||||
|
||||
|
||||
template<class thermo>
|
||||
inline scalar constSolidRad<thermo>::sigmaS(scalar) const
|
||||
inline Foam::scalar Foam::constSolidRad<thermo>::sigmaS(scalar) const
|
||||
{
|
||||
return sigmaS_;
|
||||
}
|
||||
|
||||
|
||||
template<class thermo>
|
||||
inline scalar constSolidRad<thermo>::emissivity(scalar) const
|
||||
inline Foam::scalar Foam::constSolidRad<thermo>::emissivity(scalar) const
|
||||
{
|
||||
return emissivity_;
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
|
||||
|
||||
template<class thermo>
|
||||
inline Foam::constSolidRad<thermo>&
|
||||
Foam::constSolidRad<thermo>::operator=(const constSolidRad<thermo>& ct)
|
||||
{
|
||||
thermo::operator=(ct);
|
||||
|
||||
kappaRad_ = ct.kappaRad_;
|
||||
sigmaS_ = ct.sigmaS_;
|
||||
emissivity_ = ct.emissivity_;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
template<class thermo>
|
||||
inline void Foam::constSolidRad<thermo>::operator+=
|
||||
(
|
||||
const constSolidRad<thermo>& ct
|
||||
)
|
||||
{
|
||||
scalar molr1 = this->nMoles();
|
||||
|
||||
thermo::operator+=(ct);
|
||||
|
||||
molr1 /= this->nMoles();
|
||||
scalar molr2 = ct.nMoles()/this->nMoles();
|
||||
|
||||
kappaRad_ = molr1*kappaRad_ + molr2*ct.kappaRad_;
|
||||
sigmaS_ = molr1*sigmaS_ + molr2*ct.sigmaS_;
|
||||
emissivity_ = molr1*emissivity_ + molr2*ct.emissivity_;
|
||||
}
|
||||
|
||||
|
||||
template<class thermo>
|
||||
inline void Foam::constSolidRad<thermo>::operator-=
|
||||
(
|
||||
const constSolidRad<thermo>& ct
|
||||
)
|
||||
{
|
||||
scalar molr1 = this->nMoles();
|
||||
|
||||
thermo::operator-=(ct);
|
||||
|
||||
molr1 /= this->nMoles();
|
||||
scalar molr2 = ct.nMoles()/this->nMoles();
|
||||
|
||||
kappaRad_ = molr1*kappaRad_ - molr2*ct.kappaRad_;
|
||||
sigmaS_ = molr1*sigmaS_ - molr2*ct.sigmaS_;
|
||||
emissivity_ = molr1*emissivity_ - molr2*ct.emissivity_;
|
||||
}
|
||||
|
||||
// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * //
|
||||
|
||||
template<class thermo>
|
||||
inline Foam::constSolidRad<thermo> Foam::operator*
|
||||
(
|
||||
const scalar s,
|
||||
const constSolidRad<thermo>& ct
|
||||
)
|
||||
{
|
||||
return constSolidRad<thermo>
|
||||
(
|
||||
s*static_cast<const thermo&>(ct),
|
||||
ct.kappaRad_,
|
||||
ct.sigmaS_,
|
||||
ct.emissivity_
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -29,6 +29,7 @@ License
|
||||
|
||||
Foam::constRho::constRho(const dictionary& dict)
|
||||
:
|
||||
specie(dict),
|
||||
rho_(readScalar(dict.subDict("density").lookup("rho")))
|
||||
{}
|
||||
|
||||
@ -37,6 +38,7 @@ Foam::constRho::constRho(const dictionary& dict)
|
||||
|
||||
Foam::Ostream& Foam::operator<<(Ostream& os, const constRho& cr)
|
||||
{
|
||||
os << static_cast<const specie&>(cr);
|
||||
os << cr.rho_;
|
||||
|
||||
os.check("Ostream& operator<<(Ostream& os, const constRho& cr)");
|
||||
|
||||
@ -37,6 +37,7 @@ SourceFiles
|
||||
#define constRho_H
|
||||
|
||||
#include "dictionary.H"
|
||||
#include "specie.H"
|
||||
#include "autoPtr.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
@ -44,11 +45,23 @@ SourceFiles
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
|
||||
class constRho;
|
||||
|
||||
inline constRho operator*
|
||||
(
|
||||
const scalar,
|
||||
const constRho&
|
||||
);
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class constRho Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class constRho
|
||||
:
|
||||
public specie
|
||||
{
|
||||
// Private data
|
||||
|
||||
@ -60,15 +73,20 @@ public:
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from components
|
||||
inline constRho(scalar rho);
|
||||
|
||||
//- Construct from dictionary
|
||||
//constRho(Istream&);
|
||||
constRho(const dictionary& dict);
|
||||
|
||||
//- Construct as named copy
|
||||
inline constRho(const constRho&);
|
||||
inline constRho(const word&, const constRho&);
|
||||
|
||||
//- Construct from components
|
||||
inline constRho
|
||||
(
|
||||
const specie& t,
|
||||
const scalar rho
|
||||
);
|
||||
|
||||
//- Construct and return a clone
|
||||
inline autoPtr<constRho> clone() const;
|
||||
@ -80,9 +98,23 @@ public:
|
||||
// Member functions
|
||||
|
||||
//- Return density [kg/m3]
|
||||
inline scalar rho(scalar T) const;
|
||||
inline scalar rho(scalar p, scalar T) const;
|
||||
|
||||
|
||||
// Member operators
|
||||
|
||||
inline constRho& operator=(const constRho&);
|
||||
inline void operator+=(const constRho&);
|
||||
inline void operator-=(const constRho&);
|
||||
|
||||
// Friend operators
|
||||
|
||||
friend constRho operator*
|
||||
(
|
||||
const scalar,
|
||||
const constRho&
|
||||
);
|
||||
|
||||
// Ostream Operator
|
||||
|
||||
friend Ostream& operator<<(Ostream&, const constRho&);
|
||||
|
||||
@ -25,25 +25,23 @@ License
|
||||
|
||||
#include "constRho.H"
|
||||
|
||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||
|
||||
inline Foam::constRho::constRho
|
||||
(
|
||||
scalar rho
|
||||
)
|
||||
:
|
||||
rho_(rho)
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
inline Foam::constRho::constRho(const constRho& pg)
|
||||
inline Foam::constRho::constRho(const word& name, const constRho& pg)
|
||||
:
|
||||
specie(name, pg),
|
||||
rho_(pg.rho_)
|
||||
{}
|
||||
|
||||
|
||||
inline Foam::constRho::constRho(const specie& t, const scalar rho)
|
||||
:
|
||||
specie(t),
|
||||
rho_(rho)
|
||||
{}
|
||||
|
||||
|
||||
inline Foam::autoPtr<Foam::constRho> Foam::constRho::clone() const
|
||||
{
|
||||
return autoPtr<constRho>(new constRho(*this));
|
||||
@ -58,10 +56,63 @@ inline Foam::autoPtr<Foam::constRho> Foam::constRho::New(const dictionary& is)
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
inline Foam::scalar Foam::constRho::rho(scalar) const
|
||||
inline Foam::scalar Foam::constRho::rho(scalar, scalar) const
|
||||
{
|
||||
return rho_;
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
|
||||
|
||||
inline Foam::constRho& Foam::constRho::operator=(const constRho& ct)
|
||||
{
|
||||
specie::operator=(ct);
|
||||
rho_ = ct.rho_;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
inline void Foam::constRho::operator+=(const constRho& ct)
|
||||
{
|
||||
scalar molr1 = this->nMoles();
|
||||
|
||||
specie::operator+=(ct);
|
||||
|
||||
molr1 /= this->nMoles();
|
||||
scalar molr2 = ct.nMoles()/this->nMoles();
|
||||
|
||||
rho_ = molr1*rho_ + molr2*ct.rho_;
|
||||
}
|
||||
|
||||
|
||||
inline void Foam::constRho::operator-=(const constRho& ct)
|
||||
{
|
||||
scalar molr1 = this->nMoles();
|
||||
|
||||
specie::operator-=(ct);
|
||||
|
||||
molr1 /= this->nMoles();
|
||||
scalar molr2 = ct.nMoles()/this->nMoles();
|
||||
|
||||
rho_ = molr1*rho_ - molr2*ct.rho_;
|
||||
|
||||
}
|
||||
|
||||
// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * //
|
||||
|
||||
|
||||
inline Foam::constRho Foam::operator*
|
||||
(
|
||||
const scalar s,
|
||||
const constRho& ct
|
||||
)
|
||||
{
|
||||
return constRho
|
||||
(
|
||||
s*static_cast<const specie&>(ct),
|
||||
ct.rho_
|
||||
);
|
||||
}
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -46,6 +46,37 @@ namespace Foam
|
||||
|
||||
template<class rhoType> class constSolidThermo;
|
||||
|
||||
template<class rhoType>
|
||||
inline constSolidThermo<rhoType> operator*
|
||||
(
|
||||
const scalar,
|
||||
const constSolidThermo<rhoType>&
|
||||
);
|
||||
|
||||
/*
|
||||
template<class rhoType>
|
||||
inline constSolidThermo<rhoType> operator+
|
||||
(
|
||||
const constSolidThermo<rhoType>&,
|
||||
const constSolidThermo<rhoType>&
|
||||
);
|
||||
|
||||
template<class rhoType>
|
||||
inline constSolidThermo<rhoType> operator-
|
||||
(
|
||||
const constSolidThermo<rhoType>&,
|
||||
const constSolidThermo<rhoType>&
|
||||
);
|
||||
|
||||
|
||||
|
||||
template<class rhoType>
|
||||
inline constSolidThermo<rhoType> operator==
|
||||
(
|
||||
const constSolidThermo<rhoType>&,
|
||||
const constSolidThermo<rhoType>&
|
||||
);
|
||||
*/
|
||||
template<class rhoType>
|
||||
Ostream& operator<<
|
||||
(
|
||||
@ -99,19 +130,40 @@ public:
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Limit the temperature to be in the range Tlow_ to Thigh_
|
||||
inline scalar limit(const scalar T) const;
|
||||
|
||||
// Fundamental properties
|
||||
|
||||
//- Heat capacity at constant pressure [J/(kg K)]
|
||||
inline scalar Cp(const scalar T) const;
|
||||
//- Heat capacity at constant pressure [J/(kmol K)]
|
||||
inline scalar cp(const scalar p, const scalar T) const;
|
||||
|
||||
//- Enthalpy [J/kg]
|
||||
inline scalar h(const scalar T) const;
|
||||
//- Absolute enthalpy [J/kmol]
|
||||
inline scalar ha(const scalar p, const scalar T) const;
|
||||
|
||||
//- Sensible enthalpy [J/kg]
|
||||
inline scalar hs(const scalar T) const;
|
||||
//- Sensible enthalpy [J/kmol]
|
||||
inline scalar hs(const scalar p, const scalar T) const;
|
||||
|
||||
//- Enthalpy of formation [J/kg]
|
||||
inline scalar hf() const;
|
||||
//- Chemical enthalpy [J/kmol]
|
||||
inline scalar hc() const;
|
||||
|
||||
//- Entropy [J/(kmol K)]
|
||||
inline scalar s(const scalar p, const scalar T) const;
|
||||
|
||||
|
||||
// Member operators
|
||||
|
||||
inline constSolidThermo& operator=(const constSolidThermo&);
|
||||
inline void operator+=(const constSolidThermo&);
|
||||
inline void operator-=(const constSolidThermo&);
|
||||
|
||||
// Friend operators
|
||||
|
||||
friend constSolidThermo operator* <rhoType>
|
||||
(
|
||||
const scalar,
|
||||
const constSolidThermo&
|
||||
);
|
||||
|
||||
|
||||
// IOstream Operators
|
||||
|
||||
@ -78,42 +78,137 @@ Foam::constSolidThermo<rhoType>::New(dictionary& is)
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
template<class rhoType>
|
||||
inline Foam::scalar Foam::constSolidThermo<rhoType>::Cp
|
||||
(
|
||||
const scalar
|
||||
) const
|
||||
{
|
||||
return Cp_;
|
||||
}
|
||||
|
||||
|
||||
template<class rhoType>
|
||||
inline Foam::scalar Foam::constSolidThermo<rhoType>::h
|
||||
inline Foam::scalar Foam::constSolidThermo<rhoType>::limit
|
||||
(
|
||||
const scalar T
|
||||
) const
|
||||
{
|
||||
scalar hOffset = Cp_*(specie::Tstd);
|
||||
return T;
|
||||
}
|
||||
|
||||
return (Cp_*T + Hf_ - hOffset);
|
||||
|
||||
template<class rhoType>
|
||||
inline Foam::scalar Foam::constSolidThermo<rhoType>::cp
|
||||
(
|
||||
const scalar, const scalar
|
||||
) const
|
||||
{
|
||||
return Cp_*this->W();
|
||||
}
|
||||
|
||||
|
||||
template<class rhoType>
|
||||
inline Foam::scalar Foam::constSolidThermo<rhoType>::ha
|
||||
(
|
||||
const scalar p, const scalar T
|
||||
) const
|
||||
{
|
||||
scalar hOffset = Cp_*(specie::Tstd);
|
||||
return (Cp_*T + Hf_ - hOffset)*this->W();
|
||||
}
|
||||
|
||||
|
||||
template<class rhoType>
|
||||
inline Foam::scalar Foam::constSolidThermo<rhoType>::hs
|
||||
(
|
||||
const scalar T
|
||||
const scalar p, const scalar T
|
||||
) const
|
||||
{
|
||||
return h(T) - Hf_;
|
||||
scalar hOffset = Cp_*(specie::Tstd);
|
||||
return (Cp_*T - hOffset)*this->W();
|
||||
}
|
||||
|
||||
|
||||
template<class rhoType>
|
||||
inline Foam::scalar Foam::constSolidThermo<rhoType>::hf() const
|
||||
inline Foam::scalar Foam::constSolidThermo<rhoType>::hc() const
|
||||
{
|
||||
return Hf_;
|
||||
return Hf_*this->W();
|
||||
}
|
||||
|
||||
|
||||
template<class rhoType>
|
||||
inline Foam::scalar Foam::constSolidThermo<rhoType>::s
|
||||
(
|
||||
const scalar p, const scalar T
|
||||
) const
|
||||
{
|
||||
notImplemented
|
||||
(
|
||||
"scalar constSolidThermo<rhoType>::"
|
||||
"s(const scalar p, const scalar T) const"
|
||||
);
|
||||
return T;
|
||||
}
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
|
||||
|
||||
template<class rhoType>
|
||||
inline Foam::constSolidThermo<rhoType>&
|
||||
Foam::constSolidThermo<rhoType>::operator=
|
||||
(
|
||||
const constSolidThermo<rhoType>& ct
|
||||
)
|
||||
{
|
||||
rhoType::operator=(ct);
|
||||
|
||||
Hf_ = ct.Hf_;
|
||||
Cp_ = ct.Cp_;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
template<class rhoType>
|
||||
inline void Foam::constSolidThermo<rhoType>::operator+=
|
||||
(
|
||||
const constSolidThermo<rhoType>& ct
|
||||
)
|
||||
{
|
||||
scalar molr1 = this->nMoles();
|
||||
|
||||
rhoType::operator+=(ct);
|
||||
|
||||
molr1 /= this->nMoles();
|
||||
scalar molr2 = ct.nMoles()/this->nMoles();
|
||||
|
||||
Cp_ = molr1*Cp_ + molr2*ct.Cp_;
|
||||
Hf_ = molr1*Hf_ + molr2*ct.Hf_;
|
||||
}
|
||||
|
||||
|
||||
template<class rhoType>
|
||||
inline void Foam::constSolidThermo<rhoType>::operator-=
|
||||
(
|
||||
const constSolidThermo<rhoType>& ct
|
||||
)
|
||||
{
|
||||
scalar molr1 = this->nMoles();
|
||||
|
||||
rhoType::operator-=(ct);
|
||||
|
||||
molr1 /= this->nMoles();
|
||||
scalar molr2 = ct.nMoles()/this->nMoles();
|
||||
|
||||
Cp_ = molr1*Cp_ - molr2*ct.Cp_;
|
||||
Hf_ = molr1*Hf_ - molr2*ct.Hf_;
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * //
|
||||
|
||||
template<class rhoType>
|
||||
inline Foam::constSolidThermo<rhoType> Foam::operator*
|
||||
(
|
||||
const scalar s,
|
||||
const constSolidThermo<rhoType>& ct
|
||||
)
|
||||
{
|
||||
return constSolidThermo<rhoType>
|
||||
(
|
||||
s*static_cast<const rhoType&>(ct),
|
||||
ct.Cp_,
|
||||
ct.Hf_
|
||||
);
|
||||
}
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -47,6 +47,14 @@ namespace Foam
|
||||
|
||||
template<class rhoType> class exponentialSolidThermo;
|
||||
|
||||
template<class rhoType>
|
||||
inline exponentialSolidThermo<rhoType> operator*
|
||||
(
|
||||
const scalar,
|
||||
const exponentialSolidThermo<rhoType>&
|
||||
);
|
||||
|
||||
|
||||
template<class rhoType>
|
||||
Ostream& operator<<
|
||||
(
|
||||
@ -109,17 +117,46 @@ public:
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Heat capacity at constant pressure [J/(kg K)]
|
||||
inline scalar Cp(const scalar T) const;
|
||||
//- Limit the temperature to be in the range Tlow_ to Thigh_
|
||||
inline scalar limit(const scalar T) const;
|
||||
|
||||
//- Enthalpy [J/kmol]
|
||||
inline scalar h(const scalar T) const;
|
||||
|
||||
// Fundamental properties
|
||||
|
||||
//- Heat capacity at constant pressure [J/(kg K)]
|
||||
inline scalar cp(const scalar p, const scalar T) const;
|
||||
|
||||
//- Absolute enthalpy [J/kmol]
|
||||
inline scalar ha(const scalar p, const scalar T) const;
|
||||
|
||||
//- Sensible enthalpy [J/kg]
|
||||
inline scalar hs(const scalar T) const;
|
||||
inline scalar hs(const scalar p, const scalar T) const;
|
||||
|
||||
//- Formation enthalpy [J/kg]
|
||||
inline scalar hf() const;
|
||||
//- chemical enthalpy [J/kg]
|
||||
inline scalar hc() const;
|
||||
|
||||
//- Entropy [J/(kmol K)]
|
||||
inline scalar s(const scalar p, const scalar T) const;
|
||||
|
||||
|
||||
// Member operators
|
||||
|
||||
inline exponentialSolidThermo& operator=
|
||||
(
|
||||
const exponentialSolidThermo&
|
||||
);
|
||||
inline void operator+=(const exponentialSolidThermo&);
|
||||
inline void operator-=(const exponentialSolidThermo&);
|
||||
|
||||
|
||||
// Friend operators
|
||||
|
||||
|
||||
friend exponentialSolidThermo operator* <rhoType>
|
||||
(
|
||||
const scalar,
|
||||
const exponentialSolidThermo&
|
||||
);
|
||||
|
||||
|
||||
// Ostream Operator
|
||||
|
||||
@ -28,7 +28,6 @@ License
|
||||
|
||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||
|
||||
|
||||
template<class rhoType>
|
||||
inline void Foam::exponentialSolidThermo<rhoType>::checkT(const scalar T) const
|
||||
{
|
||||
@ -45,6 +44,20 @@ inline void Foam::exponentialSolidThermo<rhoType>::checkT(const scalar T) const
|
||||
}
|
||||
|
||||
|
||||
template<class rhoType>
|
||||
inline Foam::scalar Foam::exponentialSolidThermo<rhoType>::integrateCp
|
||||
(
|
||||
const scalar T
|
||||
) const
|
||||
{
|
||||
return
|
||||
(
|
||||
c0_*pow(T, n0_ + 1.0)
|
||||
/(pow(Tref_, n0_)*(n0_ + 1.0))
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
template<class rhoType>
|
||||
@ -83,40 +96,36 @@ inline Foam::exponentialSolidThermo<rhoType>::exponentialSolidThermo
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
template<class rhoType>
|
||||
inline Foam::scalar Foam::exponentialSolidThermo<rhoType>::integrateCp
|
||||
inline Foam::scalar Foam::exponentialSolidThermo<rhoType>::limit
|
||||
(
|
||||
const scalar T
|
||||
) const
|
||||
{
|
||||
return
|
||||
(
|
||||
c0_*pow(T, n0_ + 1.0)
|
||||
/(pow(Tref_, n0_)*(n0_ + 1.0))
|
||||
);
|
||||
return T;
|
||||
}
|
||||
|
||||
|
||||
template<class rhoType>
|
||||
inline Foam::scalar Foam::exponentialSolidThermo<rhoType>::Cp
|
||||
inline Foam::scalar Foam::exponentialSolidThermo<rhoType>::cp
|
||||
(
|
||||
const scalar T
|
||||
const scalar p, const scalar T
|
||||
) const
|
||||
{
|
||||
return c0_*pow(T/Tref_, n0_);
|
||||
return c0_*pow(T/Tref_, n0_)*this->W();
|
||||
}
|
||||
|
||||
|
||||
template<class rhoType>
|
||||
inline Foam::scalar Foam::exponentialSolidThermo<rhoType>::h
|
||||
inline Foam::scalar Foam::exponentialSolidThermo<rhoType>::ha
|
||||
(
|
||||
const scalar T
|
||||
const scalar p, const scalar T
|
||||
) const
|
||||
{
|
||||
scalar hOffset = integrateCp(specie::Tstd);
|
||||
|
||||
return
|
||||
(
|
||||
integrateCp(T) + Hf_ - hOffset
|
||||
(integrateCp(T) + Hf_ - hOffset)*this->W()
|
||||
);
|
||||
}
|
||||
|
||||
@ -124,18 +133,113 @@ inline Foam::scalar Foam::exponentialSolidThermo<rhoType>::h
|
||||
template<class rhoType>
|
||||
inline Foam::scalar Foam::exponentialSolidThermo<rhoType>::hs
|
||||
(
|
||||
const scalar T
|
||||
const scalar p, const scalar T
|
||||
) const
|
||||
{
|
||||
return h(T) - Hf_;
|
||||
scalar hOffset = integrateCp(specie::Tstd);
|
||||
return (integrateCp(T) - hOffset)*this->W();
|
||||
}
|
||||
|
||||
|
||||
template<class rhoType>
|
||||
inline Foam::scalar Foam::exponentialSolidThermo<rhoType>::hf() const
|
||||
inline Foam::scalar Foam::exponentialSolidThermo<rhoType>::hc() const
|
||||
{
|
||||
return Hf_;
|
||||
return Hf_*this->W();
|
||||
}
|
||||
|
||||
|
||||
template<class rhoType>
|
||||
inline Foam::scalar Foam::exponentialSolidThermo<rhoType>::s
|
||||
(
|
||||
const scalar p, const scalar T
|
||||
) const
|
||||
{
|
||||
notImplemented
|
||||
(
|
||||
"scalar exponentialSolidThermo<rhoType>::"
|
||||
"s(const scalar p, const scalar T) const"
|
||||
);
|
||||
return T;
|
||||
}
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
|
||||
|
||||
|
||||
template<class rhoType>
|
||||
inline Foam::exponentialSolidThermo<rhoType>&
|
||||
Foam::exponentialSolidThermo<rhoType>::operator=
|
||||
(
|
||||
const exponentialSolidThermo<rhoType>& ct
|
||||
)
|
||||
{
|
||||
rhoType::operator=(ct);
|
||||
|
||||
Hf_ = ct.Hf_;
|
||||
c0_ = ct.c0_;
|
||||
n0_ = ct.n0_;
|
||||
Tref_ = ct.Tref_;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
template<class rhoType>
|
||||
inline void Foam::exponentialSolidThermo<rhoType>::operator+=
|
||||
(
|
||||
const exponentialSolidThermo<rhoType>& ct
|
||||
)
|
||||
{
|
||||
scalar molr1 = this->nMoles();
|
||||
|
||||
rhoType::operator+=(ct);
|
||||
|
||||
molr1 /= this->nMoles();
|
||||
scalar molr2 = ct.nMoles()/this->nMoles();
|
||||
|
||||
Hf_ = molr1*Hf_ + molr2*ct.Hf_;
|
||||
c0_ = molr1*c0_ + molr2*ct.c0_;
|
||||
n0_ = (molr1*n0_ + molr2*ct.n0_);
|
||||
Tref_ = (molr1*Tref_ + molr2*ct.Tref_);
|
||||
}
|
||||
|
||||
|
||||
template<class rhoType>
|
||||
inline void Foam::exponentialSolidThermo<rhoType>::operator-=
|
||||
(
|
||||
const exponentialSolidThermo<rhoType>& ct
|
||||
)
|
||||
{
|
||||
scalar molr1 = this->nMoles();
|
||||
|
||||
rhoType::operator-=(ct);
|
||||
|
||||
molr1 /= this->nMoles();
|
||||
scalar molr2 = ct.nMoles()/this->nMoles();
|
||||
|
||||
Hf_ = molr1*Hf_ - molr2*ct.Hf_;
|
||||
c0_ = (molr1*c0_ - molr2*ct.c0_);
|
||||
n0_ = (molr1*n0_ - molr2*ct.n0_);
|
||||
Tref_ = (molr1*Tref_ - molr2*ct.Tref_);
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * //
|
||||
|
||||
template<class rhoType>
|
||||
inline Foam::exponentialSolidThermo<rhoType> Foam::operator*
|
||||
(
|
||||
const scalar s,
|
||||
const exponentialSolidThermo<rhoType>& ct
|
||||
)
|
||||
{
|
||||
return exponentialSolidThermo<rhoType>
|
||||
(
|
||||
s*static_cast<const rhoType&>(ct),
|
||||
ct.Hf_,
|
||||
ct.c0_,
|
||||
ct.n0_,
|
||||
ct.Tref_
|
||||
);
|
||||
}
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -23,19 +23,40 @@ License
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "basicSolidThermo.H"
|
||||
#include "constAnIsoSolidTransport.H"
|
||||
#include "IOstreams.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
const Foam::volScalarField& Foam::basicSolidThermo::T() const
|
||||
template<class thermo>
|
||||
Foam::constAnIsoSolidTransport<thermo>::constAnIsoSolidTransport
|
||||
(
|
||||
const dictionary& dict
|
||||
)
|
||||
:
|
||||
thermo(dict),
|
||||
kappa_(dict.subDict("transport").lookup("kappa"))
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * //
|
||||
|
||||
template<class thermo>
|
||||
Foam::Ostream& Foam::operator<<
|
||||
(
|
||||
Ostream& os,
|
||||
const constAnIsoSolidTransport<thermo>& ct
|
||||
)
|
||||
{
|
||||
return T_;
|
||||
}
|
||||
operator<<(os, static_cast<const thermo&>(ct));
|
||||
os << tab << ct.kappa_;
|
||||
|
||||
os.check
|
||||
(
|
||||
"Ostream& operator<<(Ostream& os,const constAnIsoSolidTransport& ct)"
|
||||
);
|
||||
|
||||
Foam::volScalarField& Foam::basicSolidThermo::T()
|
||||
{
|
||||
return T_;
|
||||
return os;
|
||||
}
|
||||
|
||||
|
||||
@ -0,0 +1,158 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2012 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::constAnIsoSolidTransport
|
||||
|
||||
Description
|
||||
Constant properties Transport package.
|
||||
Templated into a given thermodynamics package (needed for thermal
|
||||
conductivity).
|
||||
|
||||
SourceFiles
|
||||
constAnIsoSolidTransportI.H
|
||||
constAnIsoSolidTransport.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef constAnIsoSolidTransport_H
|
||||
#define constAnIsoSolidTransport_H
|
||||
#include "vector.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
template<class thermo> class constAnIsoSolidTransport;
|
||||
|
||||
template<class thermo>
|
||||
inline constAnIsoSolidTransport<thermo> operator*
|
||||
(
|
||||
const scalar,
|
||||
const constAnIsoSolidTransport<thermo>&
|
||||
);
|
||||
|
||||
template<class thermo>
|
||||
Ostream& operator<<
|
||||
(
|
||||
Ostream&,
|
||||
const constAnIsoSolidTransport<thermo>&
|
||||
);
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class constAnIsoSolidTransport Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
template<class thermo>
|
||||
class constAnIsoSolidTransport
|
||||
:
|
||||
public thermo
|
||||
{
|
||||
// Private data
|
||||
|
||||
//- Constant anisotropic thermal conductivity.
|
||||
vector kappa_;
|
||||
|
||||
|
||||
// Private Member Functions
|
||||
|
||||
//- Construct from components
|
||||
inline constAnIsoSolidTransport
|
||||
(
|
||||
const thermo& t,
|
||||
const vector kappa
|
||||
);
|
||||
|
||||
|
||||
public:
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct as named copy
|
||||
inline constAnIsoSolidTransport
|
||||
(
|
||||
const word&,
|
||||
const constAnIsoSolidTransport&
|
||||
);
|
||||
|
||||
//- Construct from Istream
|
||||
//constAnIsoSolidTransport(Istream&);
|
||||
constAnIsoSolidTransport(const dictionary&);
|
||||
|
||||
|
||||
// Member functions
|
||||
|
||||
//- Isotropic thermal conductivity [W/mK]
|
||||
inline scalar kappa(const scalar T) const;
|
||||
|
||||
//- Un-isotropic thermal conductivity [W/mK]
|
||||
inline vector Kappa(const scalar T) const;
|
||||
|
||||
|
||||
// Member operators
|
||||
|
||||
inline constAnIsoSolidTransport& operator=
|
||||
(
|
||||
const constAnIsoSolidTransport&
|
||||
);
|
||||
inline void operator+=(const constAnIsoSolidTransport&);
|
||||
inline void operator-=(const constAnIsoSolidTransport&);
|
||||
|
||||
// Friend operators
|
||||
|
||||
friend constAnIsoSolidTransport operator* <thermo>
|
||||
(
|
||||
const scalar,
|
||||
const constAnIsoSolidTransport&
|
||||
);
|
||||
|
||||
|
||||
// Ostream Operator
|
||||
|
||||
friend Ostream& operator<< <thermo>
|
||||
(
|
||||
Ostream&,
|
||||
const constAnIsoSolidTransport&
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#include "constAnIsoSolidTransportI.H"
|
||||
|
||||
#ifdef NoRepository
|
||||
# include "constAnIsoSolidTransport.C"
|
||||
#endif
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,130 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2012 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/>.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
template<class thermo>
|
||||
inline Foam::constAnIsoSolidTransport<thermo>::constAnIsoSolidTransport
|
||||
(
|
||||
const thermo& t,
|
||||
const vector kappa
|
||||
)
|
||||
:
|
||||
thermo(t),
|
||||
kappa_(kappa)
|
||||
{}
|
||||
|
||||
|
||||
template<class thermo>
|
||||
inline Foam::constAnIsoSolidTransport<thermo>::constAnIsoSolidTransport
|
||||
(
|
||||
const word& name,
|
||||
const constAnIsoSolidTransport& ct
|
||||
)
|
||||
:
|
||||
thermo(name, ct),
|
||||
kappa_(ct.kappa_)
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
template<class thermo>
|
||||
inline Foam::scalar Foam::constAnIsoSolidTransport<thermo>::
|
||||
kappa(const scalar T) const
|
||||
{
|
||||
return mag(kappa_);
|
||||
}
|
||||
|
||||
template<class thermo>
|
||||
inline Foam::vector Foam::constAnIsoSolidTransport<thermo>::
|
||||
Kappa(const scalar T) const
|
||||
{
|
||||
return kappa_;
|
||||
}
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
|
||||
|
||||
template<class thermo>
|
||||
inline Foam::constAnIsoSolidTransport<thermo>&
|
||||
Foam::constAnIsoSolidTransport<thermo>::operator=
|
||||
(
|
||||
const constAnIsoSolidTransport<thermo>& ct
|
||||
)
|
||||
{
|
||||
kappa_ = ct.kappa_;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
template<class thermo>
|
||||
inline void Foam::constAnIsoSolidTransport<thermo>::operator+=
|
||||
(
|
||||
const constAnIsoSolidTransport<thermo>& ct
|
||||
)
|
||||
{
|
||||
scalar molr1 = this->nMoles();
|
||||
|
||||
molr1 /= this->nMoles();
|
||||
scalar molr2 = ct.nMoles()/this->nMoles();
|
||||
|
||||
kappa_ = molr1*kappa_ + molr2*ct.kappa_;
|
||||
}
|
||||
|
||||
|
||||
template<class thermo>
|
||||
inline void Foam::constAnIsoSolidTransport<thermo>::operator-=
|
||||
(
|
||||
const constAnIsoSolidTransport<thermo>& ct
|
||||
)
|
||||
{
|
||||
scalar molr1 = this->nMoles();
|
||||
|
||||
molr1 /= this->nMoles();
|
||||
scalar molr2 = ct.nMoles()/this->nMoles();
|
||||
|
||||
kappa_ = molr1*kappa_ - molr2*ct.kappa_;
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * //
|
||||
|
||||
|
||||
template<class thermo>
|
||||
inline Foam::constAnIsoSolidTransport<thermo> Foam::operator*
|
||||
(
|
||||
const scalar s,
|
||||
const constAnIsoSolidTransport<thermo>& ct
|
||||
)
|
||||
{
|
||||
return constAnIsoSolidTransport<thermo>
|
||||
(
|
||||
s*static_cast<const thermo&>(ct),
|
||||
ct.kappa_
|
||||
);
|
||||
}
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -23,13 +23,13 @@ License
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#include "constSolidTransport.H"
|
||||
#include "constIsoSolidTransport.H"
|
||||
#include "IOstreams.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
template<class thermo>
|
||||
Foam::constSolidTransport<thermo>::constSolidTransport(const dictionary& dict)
|
||||
Foam::constIsoSolidTransport<thermo>::constIsoSolidTransport(const dictionary& dict)
|
||||
:
|
||||
thermo(dict),
|
||||
kappa_(readScalar(dict.subDict("transport").lookup("kappa")))
|
||||
@ -42,13 +42,16 @@ template<class thermo>
|
||||
Foam::Ostream& Foam::operator<<
|
||||
(
|
||||
Ostream& os,
|
||||
const constSolidTransport<thermo>& ct
|
||||
const constIsoSolidTransport<thermo>& ct
|
||||
)
|
||||
{
|
||||
operator<<(os, static_cast<const thermo&>(ct));
|
||||
os << tab << ct.kappa_;
|
||||
|
||||
os.check("Ostream& operator<<(Ostream& os,const constSolidTransport& ct)");
|
||||
os.check
|
||||
(
|
||||
"Ostream& operator<<(Ostream& os,const constIsoSolidTransport& ct)"
|
||||
);
|
||||
|
||||
return os;
|
||||
}
|
||||
@ -22,7 +22,7 @@ License
|
||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Class
|
||||
Foam::constSolidTransport
|
||||
Foam::constIsoSolidTransport
|
||||
|
||||
Description
|
||||
Constant properties Transport package.
|
||||
@ -30,48 +30,57 @@ Description
|
||||
conductivity).
|
||||
|
||||
SourceFiles
|
||||
constSolidTransportI.H
|
||||
constSolidTransport.C
|
||||
constIsoSolidTransportI.H
|
||||
constIsoSolidTransport.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef constSolidTransport_H
|
||||
#define constSolidTransport_H
|
||||
#ifndef constIsoSolidTransport_H
|
||||
#define constIsoSolidTransport_H
|
||||
|
||||
#include "vector.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
template<class thermo> class constSolidTransport;
|
||||
template<class thermo> class constIsoSolidTransport;
|
||||
|
||||
template<class thermo>
|
||||
inline constIsoSolidTransport<thermo> operator*
|
||||
(
|
||||
const scalar,
|
||||
const constIsoSolidTransport<thermo>&
|
||||
);
|
||||
|
||||
template<class thermo>
|
||||
Ostream& operator<<
|
||||
(
|
||||
Ostream&,
|
||||
const constSolidTransport<thermo>&
|
||||
const constIsoSolidTransport<thermo>&
|
||||
);
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class constSolidTransport Declaration
|
||||
Class constIsoSolidTransport Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
template<class thermo>
|
||||
class constSolidTransport
|
||||
class constIsoSolidTransport
|
||||
:
|
||||
public thermo
|
||||
{
|
||||
// Private data
|
||||
|
||||
//- Constant thermal conductivity.
|
||||
//- Constant isotropic thermal conductivity.
|
||||
scalar kappa_;
|
||||
|
||||
|
||||
// Private Member Functions
|
||||
|
||||
//- Construct from components
|
||||
inline constSolidTransport
|
||||
inline constIsoSolidTransport
|
||||
(
|
||||
const thermo& t,
|
||||
const scalar kappa
|
||||
@ -83,25 +92,51 @@ public:
|
||||
// Constructors
|
||||
|
||||
//- Construct as named copy
|
||||
inline constSolidTransport(const word&, const constSolidTransport&);
|
||||
inline constIsoSolidTransport
|
||||
(
|
||||
const word&,
|
||||
const constIsoSolidTransport&
|
||||
);
|
||||
|
||||
//- Construct from Istream
|
||||
//constSolidTransport(Istream&);
|
||||
constSolidTransport(const dictionary&);
|
||||
//constIsoSolidTransport(Istream&);
|
||||
constIsoSolidTransport(const dictionary&);
|
||||
|
||||
|
||||
// Member functions
|
||||
|
||||
//- Thermal conductivity [W/mK]
|
||||
//- Isotropic thermal conductivity [W/mK]
|
||||
inline scalar kappa(const scalar T) const;
|
||||
|
||||
//- Un-isotropic thermal conductivity [W/mK]
|
||||
inline vector Kappa(const scalar T) const;
|
||||
|
||||
|
||||
// Member operators
|
||||
|
||||
inline constIsoSolidTransport& operator=
|
||||
(
|
||||
const constIsoSolidTransport&
|
||||
);
|
||||
inline void operator+=(const constIsoSolidTransport&);
|
||||
inline void operator-=(const constIsoSolidTransport&);
|
||||
|
||||
|
||||
// Friend operators
|
||||
|
||||
friend constIsoSolidTransport operator* <thermo>
|
||||
(
|
||||
const scalar,
|
||||
const constIsoSolidTransport&
|
||||
);
|
||||
|
||||
|
||||
// Ostream Operator
|
||||
|
||||
friend Ostream& operator<< <thermo>
|
||||
(
|
||||
Ostream&,
|
||||
const constSolidTransport&
|
||||
const constIsoSolidTransport&
|
||||
);
|
||||
};
|
||||
|
||||
@ -112,10 +147,10 @@ public:
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#include "constSolidTransportI.H"
|
||||
#include "constIsoSolidTransportI.H"
|
||||
|
||||
#ifdef NoRepository
|
||||
# include "constSolidTransport.C"
|
||||
# include "constIsoSolidTransport.C"
|
||||
#endif
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
@ -0,0 +1,134 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2011-2012 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/>.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
template<class thermo>
|
||||
inline Foam::constIsoSolidTransport<thermo>::constIsoSolidTransport
|
||||
(
|
||||
const thermo& t,
|
||||
const scalar kappa
|
||||
)
|
||||
:
|
||||
thermo(t),
|
||||
kappa_(kappa)
|
||||
{}
|
||||
|
||||
|
||||
template<class thermo>
|
||||
inline Foam::constIsoSolidTransport<thermo>::constIsoSolidTransport
|
||||
(
|
||||
const word& name,
|
||||
const constIsoSolidTransport& ct
|
||||
)
|
||||
:
|
||||
thermo(name, ct),
|
||||
kappa_(ct.kappa_)
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
template<class thermo>
|
||||
inline Foam::scalar Foam::constIsoSolidTransport<thermo>::
|
||||
kappa(const scalar T) const
|
||||
{
|
||||
return kappa_;
|
||||
}
|
||||
|
||||
template<class thermo>
|
||||
inline Foam::vector Foam::constIsoSolidTransport<thermo>::
|
||||
Kappa(const scalar T) const
|
||||
{
|
||||
return vector(kappa_, kappa_, kappa_);
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
|
||||
|
||||
template<class thermo>
|
||||
inline Foam::constIsoSolidTransport<thermo>&
|
||||
Foam::constIsoSolidTransport<thermo>::operator=
|
||||
(
|
||||
const constIsoSolidTransport<thermo>& ct
|
||||
)
|
||||
{
|
||||
thermo::operator=(ct);
|
||||
kappa_ = ct.kappa_;
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
template<class thermo>
|
||||
inline void Foam::constIsoSolidTransport<thermo>::operator+=
|
||||
(
|
||||
const constIsoSolidTransport<thermo>& ct
|
||||
)
|
||||
{
|
||||
scalar molr1 = this->nMoles();
|
||||
thermo::operator+=(ct);
|
||||
|
||||
molr1 /= this->nMoles();
|
||||
scalar molr2 = ct.nMoles()/this->nMoles();
|
||||
|
||||
kappa_ = molr1*kappa_ + molr2*ct.kappa_;
|
||||
}
|
||||
|
||||
|
||||
template<class thermo>
|
||||
inline void Foam::constIsoSolidTransport<thermo>::operator-=
|
||||
(
|
||||
const constIsoSolidTransport<thermo>& ct
|
||||
)
|
||||
{
|
||||
scalar molr1 = this->nMoles();
|
||||
|
||||
thermo::operator-=(ct);
|
||||
|
||||
molr1 /= this->nMoles();
|
||||
scalar molr2 = ct.nMoles()/this->nMoles();
|
||||
|
||||
kappa_ = molr1*kappa_ - molr2*ct.kappa_;
|
||||
}
|
||||
|
||||
// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * //
|
||||
|
||||
|
||||
template<class thermo>
|
||||
inline Foam::constIsoSolidTransport<thermo> Foam::operator*
|
||||
(
|
||||
const scalar s,
|
||||
const constIsoSolidTransport<thermo>& ct
|
||||
)
|
||||
{
|
||||
return constIsoSolidTransport<thermo>
|
||||
(
|
||||
s*static_cast<const thermo&>(ct),
|
||||
ct.kappa_
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -44,6 +44,13 @@ namespace Foam
|
||||
|
||||
template<class thermo> class exponentialSolidTransport;
|
||||
|
||||
template<class thermo>
|
||||
inline exponentialSolidTransport<thermo> operator*
|
||||
(
|
||||
const scalar,
|
||||
const exponentialSolidTransport<thermo>&
|
||||
);
|
||||
|
||||
template<class thermo>
|
||||
Ostream& operator<<
|
||||
(
|
||||
@ -106,6 +113,27 @@ public:
|
||||
//- Thermal conductivity [W/mK]
|
||||
inline scalar kappa(const scalar T) const;
|
||||
|
||||
//- Thermal conductivity [W/mK]
|
||||
inline vector Kappa(const scalar T) const;
|
||||
|
||||
|
||||
// Member operators
|
||||
|
||||
inline exponentialSolidTransport& operator=
|
||||
(
|
||||
const exponentialSolidTransport&
|
||||
);
|
||||
inline void operator+=(const exponentialSolidTransport&);
|
||||
inline void operator-=(const exponentialSolidTransport&);
|
||||
|
||||
|
||||
// Friend operators
|
||||
|
||||
friend exponentialSolidTransport operator* <thermo>
|
||||
(
|
||||
const scalar,
|
||||
const exponentialSolidTransport&
|
||||
);
|
||||
|
||||
// Ostream Operator
|
||||
|
||||
|
||||
@ -67,5 +67,91 @@ inline Foam::scalar Foam::exponentialSolidTransport<thermo>::kappa
|
||||
}
|
||||
|
||||
|
||||
template<class thermo>
|
||||
inline Foam::vector Foam::exponentialSolidTransport<thermo>::Kappa
|
||||
(
|
||||
const scalar T
|
||||
) const
|
||||
{
|
||||
const scalar kappa(kappa0_*pow(T/Tref_, n0_));
|
||||
return vector(kappa, kappa, kappa);
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
|
||||
|
||||
|
||||
template<class thermo>
|
||||
inline Foam::exponentialSolidTransport<thermo>&
|
||||
Foam::exponentialSolidTransport<thermo>::operator=
|
||||
(
|
||||
const exponentialSolidTransport<thermo>& ct
|
||||
)
|
||||
{
|
||||
//thermo::operator=(ct);
|
||||
|
||||
kappa0_ = ct.kappa0_;
|
||||
n0_ = ct.n0_;
|
||||
Tref_ = ct.Tref_;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
template<class thermo>
|
||||
inline void Foam::exponentialSolidTransport<thermo>::operator+=
|
||||
(
|
||||
const exponentialSolidTransport<thermo>& ct
|
||||
)
|
||||
{
|
||||
scalar molr1 = this->nMoles();
|
||||
|
||||
//thermo::operator+=(ct);
|
||||
|
||||
molr1 /= this->nMoles();
|
||||
scalar molr2 = ct.nMoles()/this->nMoles();
|
||||
|
||||
kappa0_ = molr1*kappa0_ + molr2*ct.kappa0_;
|
||||
n0_ = (molr1*n0_ + molr2*ct.n0_);
|
||||
Tref_ = (molr1*Tref_ + molr2*ct.Tref_);
|
||||
}
|
||||
|
||||
|
||||
template<class thermo>
|
||||
inline void Foam::exponentialSolidTransport<thermo>::operator-=
|
||||
(
|
||||
const exponentialSolidTransport<thermo>& ct
|
||||
)
|
||||
{
|
||||
scalar molr1 = this->nMoles();
|
||||
|
||||
//thermo::operator-=(ct);
|
||||
|
||||
molr1 /= this->nMoles();
|
||||
scalar molr2 = ct.nMoles()/this->nMoles();
|
||||
|
||||
kappa0_ = (molr1*kappa0_ - molr2*ct.kappa0_);
|
||||
n0_ = (molr1*n0_ - molr2*ct.n0_);
|
||||
Tref_ = (molr1*Tref_ - molr2*ct.Tref_);
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * //
|
||||
|
||||
template<class thermo>
|
||||
inline Foam::exponentialSolidTransport<thermo> Foam::operator*
|
||||
(
|
||||
const scalar s,
|
||||
const exponentialSolidTransport<thermo>& ct
|
||||
)
|
||||
{
|
||||
return exponentialSolidTransport<thermo>
|
||||
(
|
||||
s*static_cast<const thermo&>(ct),
|
||||
ct.kappa0_,
|
||||
ct.n0_,
|
||||
ct.Tref_
|
||||
);
|
||||
}
|
||||
|
||||
// ************************************************************************* //
|
||||
|
||||
@ -39,7 +39,7 @@ ODESolidChemistryModel
|
||||
:
|
||||
CompType(mesh, solidThermoName),
|
||||
ODE(),
|
||||
Ys_(this->solidThermo().composition().Y()),
|
||||
Ys_(this->solid().composition().Y()),
|
||||
pyrolisisGases_
|
||||
(
|
||||
mesh.lookupObject<dictionary>
|
||||
@ -47,13 +47,12 @@ ODESolidChemistryModel
|
||||
),
|
||||
reactions_
|
||||
(
|
||||
static_cast<const reactingSolidMixture<SolidThermo>& >
|
||||
(this->solidThermo().composition())
|
||||
dynamic_cast<const reactingSolidMixture<SolidThermo>& >(this->solid())
|
||||
),
|
||||
solidThermo_
|
||||
(
|
||||
static_cast<const reactingSolidMixture<SolidThermo>& >
|
||||
(this->solidThermo().composition()).solidData()
|
||||
dynamic_cast<const reactingSolidMixture<SolidThermo>& >
|
||||
(this->solid()).solidData()
|
||||
),
|
||||
gasThermo_(pyrolisisGases_.size()),
|
||||
nGases_(pyrolisisGases_.size()),
|
||||
@ -137,7 +136,7 @@ ODESolidChemistryModel
|
||||
);
|
||||
// Calculate inital values of Ysi0 = rho*delta*Yi
|
||||
Ys0_[fieldI].internalField() =
|
||||
this->solidThermo().rho()
|
||||
this->solid().rho()
|
||||
*max(Ys_[fieldI], scalar(0.001))*mesh.V();
|
||||
}
|
||||
}
|
||||
@ -208,20 +207,20 @@ ODESolidChemistryModel<CompType, SolidThermo, GasThermo>::omega
|
||||
|
||||
scalar omegai = omega
|
||||
(
|
||||
R, c, T, 0.0, pf, cf, lRef, pr, cr, rRef
|
||||
R, c, T, p, pf, cf, lRef, pr, cr, rRef
|
||||
);
|
||||
scalar rhoL = 0.0;
|
||||
forAll(R.slhs(), s)
|
||||
{
|
||||
label si = R.slhs()[s];
|
||||
om[si] -= omegai;
|
||||
rhoL = solidThermo_[si].rho(T);
|
||||
rhoL = solidThermo_[si].rho(p, T);
|
||||
}
|
||||
scalar sr = 0.0;
|
||||
forAll(R.srhs(), s)
|
||||
{
|
||||
label si = R.srhs()[s];
|
||||
scalar rhoR = solidThermo_[si].rho(T);
|
||||
scalar rhoR = solidThermo_[si].rho(p, T);
|
||||
sr = rhoR/rhoL;
|
||||
om[si] += sr*omegai;
|
||||
|
||||
@ -266,9 +265,9 @@ Foam::ODESolidChemistryModel<CompType, SolidThermo, GasThermo>::omega
|
||||
c1[i] = max(0.0, c[i]);
|
||||
}
|
||||
|
||||
scalar kf = R.kf(0.0, T, c1);
|
||||
scalar kf = R.kf(p, T, c1);
|
||||
|
||||
scalar exponent = R.nReact();
|
||||
const scalar exponent = R.nReact();
|
||||
|
||||
const label Nl = R.slhs().size();
|
||||
|
||||
@ -286,18 +285,20 @@ Foam::ODESolidChemistryModel<CompType, SolidThermo, GasThermo>::omega
|
||||
|
||||
|
||||
template<class CompType, class SolidThermo, class GasThermo>
|
||||
void Foam::ODESolidChemistryModel<CompType, SolidThermo, GasThermo>::derivatives
|
||||
void Foam::ODESolidChemistryModel<CompType, SolidThermo, GasThermo>::
|
||||
derivatives
|
||||
(
|
||||
const scalar time,
|
||||
const scalarField &c,
|
||||
scalarField& dcdt
|
||||
) const
|
||||
{
|
||||
scalar T = c[nSpecie_];
|
||||
const scalar T = c[nSpecie_];
|
||||
const scalar p = c[nSpecie_ + 1];
|
||||
|
||||
dcdt = 0.0;
|
||||
|
||||
dcdt = omega(c, T, 0);
|
||||
dcdt = omega(c, T, p);
|
||||
|
||||
//Total mass concentration
|
||||
scalar cTot = 0.0;
|
||||
@ -312,8 +313,8 @@ void Foam::ODESolidChemistryModel<CompType, SolidThermo, GasThermo>::derivatives
|
||||
{
|
||||
scalar dYidt = dcdt[i]/cTot;
|
||||
scalar Yi = c[i]/cTot;
|
||||
newCp += Yi*solidThermo_[i].Cp(T);
|
||||
newhi -= dYidt*solidThermo_[i].hf();
|
||||
newCp += Yi*solidThermo_[i].Cp(p, T);
|
||||
newhi -= dYidt*solidThermo_[i].Hc();
|
||||
}
|
||||
|
||||
scalar dTdt = newhi/newCp;
|
||||
@ -334,7 +335,8 @@ void Foam::ODESolidChemistryModel<CompType, SolidThermo, GasThermo>::jacobian
|
||||
scalarSquareMatrix& dfdc
|
||||
) const
|
||||
{
|
||||
scalar T = c[nSpecie_];
|
||||
const scalar T = c[nSpecie_];
|
||||
const scalar p = c[nSpecie_ + 1];
|
||||
|
||||
scalarField c2(nSpecie_, 0.0);
|
||||
|
||||
@ -352,13 +354,13 @@ void Foam::ODESolidChemistryModel<CompType, SolidThermo, GasThermo>::jacobian
|
||||
}
|
||||
|
||||
// length of the first argument must be nSolids
|
||||
dcdt = omega(c2, T, 0.0);
|
||||
dcdt = omega(c2, T, p);
|
||||
|
||||
for (label ri=0; ri<reactions_.size(); ri++)
|
||||
{
|
||||
const solidReaction& R = reactions_[ri];
|
||||
|
||||
scalar kf0 = R.kf(0.0, T, c2);
|
||||
scalar kf0 = R.kf(p, T, c2);
|
||||
|
||||
forAll(R.slhs(), j)
|
||||
{
|
||||
@ -409,8 +411,8 @@ void Foam::ODESolidChemistryModel<CompType, SolidThermo, GasThermo>::jacobian
|
||||
|
||||
// calculate the dcdT elements numerically
|
||||
scalar delta = 1.0e-8;
|
||||
scalarField dcdT0 = omega(c2, T - delta, 0);
|
||||
scalarField dcdT1 = omega(c2, T + delta, 0);
|
||||
scalarField dcdT0 = omega(c2, T - delta, p);
|
||||
scalarField dcdT1 = omega(c2, T + delta, p);
|
||||
|
||||
for (label i=0; i<nEqns(); i++)
|
||||
{
|
||||
@ -464,7 +466,7 @@ Foam::ODESolidChemistryModel<CompType, SolidThermo, GasThermo>::Sh() const
|
||||
{
|
||||
forAll(Sh, cellI)
|
||||
{
|
||||
scalar hf = solidThermo_[i].hf();
|
||||
scalar hf = solidThermo_[i].Hc();
|
||||
Sh[cellI] -= hf*RRs_[i][cellI];
|
||||
}
|
||||
}
|
||||
@ -532,7 +534,7 @@ calculate()
|
||||
IOobject::NO_WRITE,
|
||||
false
|
||||
),
|
||||
this->solidThermo().rho()
|
||||
this->solid().rho()
|
||||
);
|
||||
|
||||
if (this->mesh().changing())
|
||||
@ -567,7 +569,8 @@ calculate()
|
||||
if (reactingCells_[celli])
|
||||
{
|
||||
scalar rhoi = rho[celli];
|
||||
scalar Ti = this->solidThermo().T()[celli];
|
||||
scalar Ti = this->solid().T()[celli];
|
||||
scalar pi = this->solid().p()[celli];
|
||||
|
||||
scalarField c(nSpecie_, 0.0);
|
||||
for (label i=0; i<nSolids_; i++)
|
||||
@ -575,7 +578,7 @@ calculate()
|
||||
c[i] = rhoi*Ys_[i][celli]*delta;
|
||||
}
|
||||
|
||||
const scalarField dcdt = omega(c, Ti, 0.0, true);
|
||||
const scalarField dcdt = omega(c, Ti, pi, true);
|
||||
|
||||
forAll(RRs_, i)
|
||||
{
|
||||
@ -611,7 +614,7 @@ Foam::ODESolidChemistryModel<CompType, SolidThermo, GasThermo>::solve
|
||||
IOobject::NO_WRITE,
|
||||
false
|
||||
),
|
||||
this->solidThermo().rho()
|
||||
this->solid().rho()
|
||||
);
|
||||
|
||||
if (this->mesh().changing())
|
||||
@ -649,7 +652,8 @@ Foam::ODESolidChemistryModel<CompType, SolidThermo, GasThermo>::solve
|
||||
cellCounter_ = celli;
|
||||
|
||||
scalar rhoi = rho[celli];
|
||||
scalar Ti = this->solidThermo().T()[celli];
|
||||
scalar Ti = this->solid().T()[celli];
|
||||
scalar pi = this->solid().p()[celli];
|
||||
|
||||
scalarField c(nSpecie_, 0.0);
|
||||
scalarField c0(nSpecie_, 0.0);
|
||||
@ -672,7 +676,7 @@ Foam::ODESolidChemistryModel<CompType, SolidThermo, GasThermo>::solve
|
||||
// calculate the chemical source terms
|
||||
while (timeLeft > SMALL)
|
||||
{
|
||||
tauC = this->solve(c, Ti, 0.0, t, dt);
|
||||
tauC = this->solve(c, Ti, pi, t, dt);
|
||||
t += dt;
|
||||
|
||||
// update the temperature
|
||||
@ -693,9 +697,9 @@ Foam::ODESolidChemistryModel<CompType, SolidThermo, GasThermo>::solve
|
||||
{
|
||||
scalar dYi = dcdt[i]/cTot;
|
||||
scalar Yi = c[i]/cTot;
|
||||
newCp += Yi*solidThermo_[i].Cp(Ti);
|
||||
newhi -= dYi*solidThermo_[i].hf();
|
||||
invRho += Yi/solidThermo_[i].rho(Ti);
|
||||
newCp += Yi*solidThermo_[i].Cp(pi, Ti);
|
||||
newhi -= dYi*solidThermo_[i].Hc();
|
||||
invRho += Yi/solidThermo_[i].rho(pi, Ti);
|
||||
}
|
||||
|
||||
scalar dTi = (newhi/newCp)*dt;
|
||||
@ -722,7 +726,7 @@ Foam::ODESolidChemistryModel<CompType, SolidThermo, GasThermo>::solve
|
||||
}
|
||||
|
||||
// Update Ys0_
|
||||
dc = omega(c0, Ti, 0.0, true);
|
||||
dc = omega(c0, Ti, pi, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -44,7 +44,7 @@ Foam::solidChemistryModel::solidChemistryModel
|
||||
)
|
||||
:
|
||||
basicChemistryModel(mesh),
|
||||
solidThermo_(basicSolidThermo::New(mesh)) //, thermoTypeName))
|
||||
solidThermo_(solidReactionThermo::New(mesh)) //, thermoTypeName))
|
||||
{}
|
||||
|
||||
|
||||
|
||||
@ -40,7 +40,7 @@ SourceFiles
|
||||
#include "basicChemistryModel.H"
|
||||
#include "autoPtr.H"
|
||||
#include "runTimeSelectionTables.H"
|
||||
#include "basicSolidThermo.H"
|
||||
#include "solidReactionThermo.H"
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
@ -73,7 +73,7 @@ protected:
|
||||
// Protected data
|
||||
|
||||
//- Solid thermo package
|
||||
autoPtr<basicSolidThermo> solidThermo_;
|
||||
autoPtr<solidReactionThermo> solidThermo_;
|
||||
|
||||
|
||||
public:
|
||||
@ -118,10 +118,10 @@ public:
|
||||
// Member Functions
|
||||
|
||||
//- Return access to the solid thermo package
|
||||
inline basicSolidThermo& solidThermo();
|
||||
inline solidReactionThermo& solid();
|
||||
|
||||
//- Return const access to the solid thermo package
|
||||
inline const basicSolidThermo& solidThermo() const;
|
||||
inline const solidReactionThermo& solid() const;
|
||||
|
||||
//- Return total gases mass source term [kg/m3/s]
|
||||
virtual tmp<volScalarField> RRg() const = 0;
|
||||
|
||||
@ -25,14 +25,14 @@ License
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
inline Foam::basicSolidThermo& Foam::solidChemistryModel::solidThermo()
|
||||
inline Foam::solidReactionThermo& Foam::solidChemistryModel::solid()
|
||||
{
|
||||
return solidThermo_();
|
||||
}
|
||||
|
||||
|
||||
inline const Foam::basicSolidThermo&
|
||||
Foam::solidChemistryModel::solidThermo() const
|
||||
inline const Foam::solidReactionThermo&
|
||||
Foam::solidChemistryModel::solid() const
|
||||
{
|
||||
return solidThermo_();
|
||||
}
|
||||
|
||||
@ -25,7 +25,7 @@ License
|
||||
|
||||
#include "temperatureCoupledBase.H"
|
||||
#include "volFields.H"
|
||||
#include "basicSolidThermo.H"
|
||||
#include "solidThermo.H"
|
||||
#include "turbulenceModel.H"
|
||||
#include "basicThermo.H"
|
||||
|
||||
@ -105,10 +105,10 @@ Foam::tmp<Foam::scalarField> Foam::temperatureCoupledBase::kappa
|
||||
|
||||
case SOLIDTHERMO:
|
||||
{
|
||||
const basicSolidThermo& thermo =
|
||||
mesh.lookupObject<basicSolidThermo>
|
||||
const solidThermo& thermo =
|
||||
mesh.lookupObject<solidThermo>
|
||||
(
|
||||
"solidThermophysicalProperties"
|
||||
"thermophysicalProperties"
|
||||
);
|
||||
return thermo.kappa(patch_.index());
|
||||
}
|
||||
@ -118,12 +118,21 @@ Foam::tmp<Foam::scalarField> Foam::temperatureCoupledBase::kappa
|
||||
{
|
||||
const vectorField n(patch_.nf());
|
||||
|
||||
const basicSolidThermo& thermo =
|
||||
mesh.lookupObject<basicSolidThermo>
|
||||
const solidThermo& thermo =
|
||||
mesh.lookupObject<solidThermo>
|
||||
(
|
||||
"solidThermophysicalProperties"
|
||||
);
|
||||
return n & thermo.directionalKappa(patch_.index()) & n;
|
||||
// note SAF : Temporarily!
|
||||
//return n & thermo.Kappa(patch_.index()) & n;
|
||||
/*
|
||||
scalarField isoK =
|
||||
(thermo.Kappa(patch_.index())[0] +
|
||||
thermo.Kappa(patch_.index())[1] +
|
||||
thermo.Kappa(patch_.index())[2]) / 3.0;
|
||||
*/
|
||||
|
||||
return scalarField(0);
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
@ -219,48 +219,32 @@ void temperatureThermoBaffle1DFvPatchScalarField<solidType>::updateCoeffs()
|
||||
|
||||
|
||||
// local properties
|
||||
const scalarField alphaw = model.alphaEff()().boundaryField()[patchI];
|
||||
const scalarField kappaw = model.kappaEff()().boundaryField()[patchI];
|
||||
|
||||
const fvPatchScalarField& hew =
|
||||
model.thermo().he().boundaryField()[patchI];
|
||||
|
||||
const scalarField qDot(alphaw*hew.snGrad());
|
||||
|
||||
const scalarField& Tp =
|
||||
const fvPatchScalarField& Tp =
|
||||
patch().template lookupPatchField<volScalarField, scalar>(TName_);
|
||||
|
||||
const scalarField& pp = model.thermo().p().boundaryField()[patchI];
|
||||
const scalarField qDot(kappaw*Tp.snGrad());
|
||||
|
||||
tmp<scalarField> Ti = patchInternalField();
|
||||
|
||||
const scalarField Cpw(model.thermo().Cp(pp, Ti, patchI));
|
||||
|
||||
scalarField myh(patch().deltaCoeffs()*alphaw*Cpw);
|
||||
|
||||
scalarField alphawCp(alphaw*Cpw);
|
||||
|
||||
scalarField myh(patch().deltaCoeffs()*kappaw);
|
||||
|
||||
// nbr properties
|
||||
scalarField nbrAlphaw =
|
||||
model.alphaEff()().boundaryField()[nbrPatchI];
|
||||
mpp.map().distribute(nbrAlphaw);
|
||||
|
||||
const fvPatchScalarField& nbrHw =
|
||||
model.thermo().he().boundaryField()[nbrPatchI];
|
||||
scalarField nbrKappaw =
|
||||
model.kappaEff()().boundaryField()[nbrPatchI];
|
||||
mpp.map().distribute(nbrKappaw);
|
||||
|
||||
const scalarField& nbrHwPp =
|
||||
model.thermo().p().boundaryField()[nbrPatchI];
|
||||
const fvPatchScalarField& nbrTw =
|
||||
model.thermo().T().boundaryField()[nbrPatchI];
|
||||
|
||||
scalarField nbrQDot
|
||||
(
|
||||
model.alphaEff()().boundaryField()[nbrPatchI]*nbrHw.snGrad()
|
||||
model.kappaEff()().boundaryField()[nbrPatchI]*nbrTw.snGrad()
|
||||
);
|
||||
mpp.map().distribute(nbrQDot);
|
||||
|
||||
scalarField nbrTp =
|
||||
nbrPatch.template lookupPatchField<volScalarField, scalar>(TName_);
|
||||
mpp.map().distribute(nbrTp);
|
||||
|
||||
const temperatureThermoBaffle1DFvPatchScalarField& nbrField =
|
||||
refCast<const temperatureThermoBaffle1DFvPatchScalarField>
|
||||
(
|
||||
@ -273,17 +257,15 @@ void temperatureThermoBaffle1DFvPatchScalarField<solidType>::updateCoeffs()
|
||||
scalarField nbrTi(nbrField.patchInternalField());
|
||||
mpp.map().distribute(nbrTi);
|
||||
|
||||
const scalarField nbrCpw
|
||||
(
|
||||
model.thermo().Cp(nbrHwPp, nbrField.patchInternalField(), nbrPatchI)
|
||||
);
|
||||
scalarField nbrTp =
|
||||
nbrPatch.template lookupPatchField<volScalarField, scalar>(TName_);
|
||||
mpp.map().distribute(nbrTp);
|
||||
|
||||
scalarField nbrh
|
||||
(
|
||||
nbrPatch.deltaCoeffs()*nbrCpw
|
||||
*model.alphaEff()().boundaryField()[nbrPatchI]
|
||||
nbrPatch.deltaCoeffs()
|
||||
*model.kappaEff()().boundaryField()[nbrPatchI]
|
||||
);
|
||||
|
||||
mpp.map().distribute(nbrh);
|
||||
|
||||
|
||||
@ -296,7 +278,7 @@ void temperatureThermoBaffle1DFvPatchScalarField<solidType>::updateCoeffs()
|
||||
// Create fields for solid properties
|
||||
forAll(KDeltaw, i)
|
||||
{
|
||||
KDeltaw[i] = solid_().kappa((Tp[i] + nbrTp[i])/2.0)/thickness_[i];
|
||||
KDeltaw[i] = solid_().kappa((Tp[i] + nbrTw[i])/2.0)/thickness_[i];
|
||||
}
|
||||
|
||||
const scalarField q
|
||||
@ -304,7 +286,6 @@ void temperatureThermoBaffle1DFvPatchScalarField<solidType>::updateCoeffs()
|
||||
(Ti() - nbrTi)/(1.0/KDeltaw + 1.0/nbrh + 1.0/myh)
|
||||
);
|
||||
|
||||
|
||||
forAll(qDot, i)
|
||||
{
|
||||
if (Qs_[i] == 0)
|
||||
@ -327,21 +308,21 @@ void temperatureThermoBaffle1DFvPatchScalarField<solidType>::updateCoeffs()
|
||||
/
|
||||
(
|
||||
1.0
|
||||
+ patch().deltaCoeffs()[i]*alphawCp[i]/KDeltaw[i]
|
||||
+ patch().deltaCoeffs()[i]*kappaw[i]/KDeltaw[i]
|
||||
);
|
||||
}
|
||||
else if (q[i] < 0)
|
||||
{
|
||||
this->refValue()[i] = 0.0;
|
||||
this->refGrad()[i] =
|
||||
(-nbrQDot[i] + Q[i]*thickness_[i])/alphawCp[i];
|
||||
(-nbrQDot[i] + Q[i]*thickness_[i])/kappaw[i];
|
||||
this->valueFraction()[i] = 0.0;
|
||||
}
|
||||
else
|
||||
{
|
||||
scalar Qt = Q[i]*thickness_[i];
|
||||
this->refValue()[i] = 0.0;
|
||||
this->refGrad()[i] = Qt/2/alphawCp[i];
|
||||
this->refGrad()[i] = Qt/2/kappaw[i];
|
||||
this->valueFraction()[i] = 0.0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -64,6 +64,7 @@ class temperatureThermoBaffle1DFvPatchScalarField
|
||||
autoPtr<solidType> solidPtr_;
|
||||
|
||||
// Solid dictionaries
|
||||
dictionary specieDict_;
|
||||
dictionary transportDict_;
|
||||
dictionary radiationDict_;
|
||||
dictionary thermoDict_;
|
||||
@ -76,6 +77,7 @@ class temperatureThermoBaffle1DFvPatchScalarField
|
||||
solidThermoData(const dictionary& dict)
|
||||
:
|
||||
solidPtr_(new solidType(dict)),
|
||||
specieDict_(dict.subDict("specie")),
|
||||
transportDict_(dict.subDict("transport")),
|
||||
radiationDict_(dict.subDict("radiation")),
|
||||
thermoDict_(dict.subDict("thermodynamics")),
|
||||
@ -87,6 +89,7 @@ class temperatureThermoBaffle1DFvPatchScalarField
|
||||
solidThermoData()
|
||||
:
|
||||
solidPtr_(),
|
||||
specieDict_(),
|
||||
transportDict_(),
|
||||
radiationDict_(),
|
||||
thermoDict_(),
|
||||
@ -103,6 +106,8 @@ class temperatureThermoBaffle1DFvPatchScalarField
|
||||
|
||||
void write(Ostream& os) const
|
||||
{
|
||||
os.writeKeyword("specie");
|
||||
os << specieDict_ << nl;
|
||||
os.writeKeyword("transport");
|
||||
os << transportDict_ << nl;
|
||||
os.writeKeyword("radiation");
|
||||
|
||||
@ -53,7 +53,7 @@ boundaryField
|
||||
|
||||
"(region0_to.*)"
|
||||
{
|
||||
type fixedFluxPressure;
|
||||
type buoyantPressure;
|
||||
value $internalField;
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user