mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
Merge branch 'feature-age-comfort' into 'develop'
INT: age/comfort: New field function objects See merge request Development/openfoam!512
This commit is contained in:
@ -128,4 +128,7 @@ DMD/DMDModels/DMDModel/DMDModel.C
|
||||
DMD/DMDModels/DMDModel/DMDModelNew.C
|
||||
DMD/DMDModels/derived/STDMD/STDMD.C
|
||||
|
||||
age/age.C
|
||||
comfort/comfort.C
|
||||
|
||||
LIB = $(FOAM_LIBBIN)/libfieldFunctionObjects
|
||||
|
||||
296
src/functionObjects/field/age/age.C
Normal file
296
src/functionObjects/field/age/age.C
Normal file
@ -0,0 +1,296 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | www.openfoam.com
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
Copyright (C) 2018-2021 OpenFOAM Foundation
|
||||
Copyright (C) 2021 OpenCFD Ltd.
|
||||
-------------------------------------------------------------------------------
|
||||
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 "age.H"
|
||||
#include "fvmDiv.H"
|
||||
#include "fvmLaplacian.H"
|
||||
#include "fvOptions.H"
|
||||
#include "turbulentTransportModel.H"
|
||||
#include "turbulentFluidThermoModel.H"
|
||||
#include "turbulenceModel.H"
|
||||
#include "inletOutletFvPatchField.H"
|
||||
#include "wallFvPatch.H"
|
||||
#include "zeroGradientFvPatchField.H"
|
||||
#include "addToRunTimeSelectionTable.H"
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace functionObjects
|
||||
{
|
||||
defineTypeNameAndDebug(age, 0);
|
||||
addToRunTimeSelectionTable(functionObject, age, dictionary);
|
||||
}
|
||||
}
|
||||
|
||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||
|
||||
Foam::wordList Foam::functionObjects::age::patchTypes() const
|
||||
{
|
||||
wordList result
|
||||
(
|
||||
mesh_.boundary().size(),
|
||||
inletOutletFvPatchField<scalar>::typeName
|
||||
);
|
||||
|
||||
forAll(mesh_.boundary(), patchi)
|
||||
{
|
||||
if (isA<wallFvPatch>(mesh_.boundary()[patchi]))
|
||||
{
|
||||
result[patchi] = zeroGradientFvPatchField<scalar>::typeName;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
bool Foam::functionObjects::age::converged
|
||||
(
|
||||
const int nCorr,
|
||||
const scalar initialResidual
|
||||
) const
|
||||
{
|
||||
if (initialResidual < tolerance_)
|
||||
{
|
||||
Info<< "Field " << typeName
|
||||
<< " converged in " << nCorr << " correctors"
|
||||
<< nl << endl;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
template<class GeoField>
|
||||
Foam::autoPtr<GeoField>
|
||||
Foam::functionObjects::age::newField
|
||||
(
|
||||
const word& baseName,
|
||||
const wordList patches
|
||||
) const
|
||||
{
|
||||
return autoPtr<GeoField>::New
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
scopedName(baseName),
|
||||
time_.timeName(),
|
||||
mesh_,
|
||||
IOobject::NO_READ,
|
||||
IOobject::NO_WRITE
|
||||
),
|
||||
mesh_,
|
||||
dimensioned<typename GeoField::value_type>(dimTime, Zero),
|
||||
patches
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::functionObjects::age::age
|
||||
(
|
||||
const word& name,
|
||||
const Time& runTime,
|
||||
const dictionary& dict
|
||||
)
|
||||
:
|
||||
fvMeshFunctionObject(name, runTime, dict)
|
||||
{
|
||||
read(dict);
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
bool Foam::functionObjects::age::read(const dictionary& dict)
|
||||
{
|
||||
if (fvMeshFunctionObject::read(dict))
|
||||
{
|
||||
phiName_ = dict.getOrDefault<word>("phi", "phi");
|
||||
rhoName_ = dict.getOrDefault<word>("rho", "rho");
|
||||
schemesField_ = dict.getOrDefault<word>("schemesField", typeName);
|
||||
tolerance_ = dict.getOrDefault<scalar>("tolerance", 1e-5);
|
||||
nCorr_ = dict.getOrDefault<int>("nCorr", 5);
|
||||
diffusion_ = dict.getOrDefault<bool>("diffusion", false);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
bool Foam::functionObjects::age::execute()
|
||||
{
|
||||
auto tage = tmp<volScalarField>::New
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
typeName,
|
||||
mesh_.time().timeName(),
|
||||
mesh_,
|
||||
IOobject::READ_IF_PRESENT,
|
||||
IOobject::AUTO_WRITE,
|
||||
false
|
||||
),
|
||||
mesh_,
|
||||
dimensionedScalar(dimTime, 0),
|
||||
patchTypes()
|
||||
);
|
||||
volScalarField& age = tage.ref();
|
||||
|
||||
const word divScheme("div(phi," + schemesField_ + ")");
|
||||
|
||||
// Set under-relaxation coeff
|
||||
scalar relaxCoeff = 0;
|
||||
if (mesh_.relaxEquation(schemesField_))
|
||||
{
|
||||
relaxCoeff = mesh_.equationRelaxationFactor(schemesField_);
|
||||
}
|
||||
|
||||
Foam::fv::options& fvOptions(Foam::fv::options::New(mesh_));
|
||||
|
||||
|
||||
// This only works because the null constructed inletValue for an
|
||||
// inletOutletFvPatchField is zero. If we needed any other value we would
|
||||
// have to loop over the inletOutlet patches and explicitly set the
|
||||
// inletValues. We would need to change the interface of inletOutlet in
|
||||
// order to do this.
|
||||
|
||||
const auto& phi = mesh_.lookupObject<surfaceScalarField>(phiName_);
|
||||
|
||||
if (phi.dimensions() == dimMass/dimTime)
|
||||
{
|
||||
const auto& rho = mesh_.lookupObject<volScalarField>(rhoName_);
|
||||
|
||||
tmp<volScalarField> tmuEff;
|
||||
word laplacianScheme;
|
||||
|
||||
if (diffusion_)
|
||||
{
|
||||
tmuEff =
|
||||
mesh_.lookupObject<compressible::turbulenceModel>
|
||||
(
|
||||
turbulenceModel::propertiesName
|
||||
).muEff();
|
||||
|
||||
laplacianScheme =
|
||||
"laplacian(" + tmuEff().name() + ',' + schemesField_ + ")";
|
||||
}
|
||||
|
||||
for (int i = 0; i <= nCorr_; ++i)
|
||||
{
|
||||
fvScalarMatrix ageEqn
|
||||
(
|
||||
fvm::div(phi, age, divScheme) == rho //+ fvOptions(rho, age)
|
||||
);
|
||||
|
||||
if (diffusion_)
|
||||
{
|
||||
ageEqn -= fvm::laplacian(tmuEff(), age, laplacianScheme);
|
||||
}
|
||||
|
||||
ageEqn.relax(relaxCoeff);
|
||||
|
||||
fvOptions.constrain(ageEqn);
|
||||
|
||||
if (converged(i, ageEqn.solve().initialResidual()))
|
||||
{
|
||||
break;
|
||||
};
|
||||
|
||||
fvOptions.correct(age);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
tmp<volScalarField> tnuEff;
|
||||
word laplacianScheme;
|
||||
|
||||
if (diffusion_)
|
||||
{
|
||||
tnuEff =
|
||||
mesh_.lookupObject<incompressible::turbulenceModel>
|
||||
(
|
||||
turbulenceModel::propertiesName
|
||||
).nuEff();
|
||||
|
||||
laplacianScheme =
|
||||
"laplacian(" + tnuEff().name() + ',' + schemesField_ + ")";
|
||||
}
|
||||
|
||||
for (int i = 0; i <= nCorr_; ++i)
|
||||
{
|
||||
fvScalarMatrix ageEqn
|
||||
(
|
||||
fvm::div(phi, age, divScheme)
|
||||
== dimensionedScalar(1) + fvOptions(age)
|
||||
);
|
||||
|
||||
if (diffusion_)
|
||||
{
|
||||
ageEqn -= fvm::laplacian(tnuEff(), age, laplacianScheme);
|
||||
}
|
||||
|
||||
ageEqn.relax(relaxCoeff);
|
||||
|
||||
fvOptions.constrain(ageEqn);
|
||||
|
||||
if (converged(i, ageEqn.solve().initialResidual()))
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
fvOptions.correct(age);
|
||||
}
|
||||
}
|
||||
|
||||
Info<< "Min/max age:"
|
||||
<< min(age).value() << ' '
|
||||
<< max(age).value()
|
||||
<< endl;
|
||||
|
||||
// Workaround
|
||||
word fieldName = typeName;
|
||||
|
||||
return store(fieldName, tage);
|
||||
}
|
||||
|
||||
|
||||
bool Foam::functionObjects::age::write()
|
||||
{
|
||||
return writeObject(typeName);
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
196
src/functionObjects/field/age/age.H
Normal file
196
src/functionObjects/field/age/age.H
Normal file
@ -0,0 +1,196 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | www.openfoam.com
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
Copyright (C) 2018-2021 OpenFOAM Foundation
|
||||
Copyright (C) 2021 OpenCFD Ltd.
|
||||
-------------------------------------------------------------------------------
|
||||
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::functionObjects::age
|
||||
|
||||
Description
|
||||
Calculates and writes out the time taken for a particle to travel from an
|
||||
inlet to the location. Solves the following equation when incompressible:
|
||||
|
||||
\f[
|
||||
\div (\phi t) = 1
|
||||
\f]
|
||||
|
||||
where
|
||||
\vartable
|
||||
t | Age [s]
|
||||
\phi | Volumetric flux [m^3/s]
|
||||
\endvartable
|
||||
|
||||
Boundary conditions are generated automatically as \c zeroGradient
|
||||
on all walls and \c inletOutlet everywhere else.
|
||||
|
||||
Usage
|
||||
Minimal example by using \c system/controlDict.functions:
|
||||
\verbatim
|
||||
age1
|
||||
{
|
||||
// Mandatory entries
|
||||
type age;
|
||||
libs (fieldFunctionObjects);
|
||||
|
||||
// Optional entries
|
||||
phi <word>;
|
||||
rho <word>;
|
||||
schemesField <word>;
|
||||
tolerance <scalar>;
|
||||
nCorr <int>;
|
||||
diffusion <bool>;
|
||||
|
||||
// Inherited entries
|
||||
...
|
||||
}
|
||||
\endverbatim
|
||||
|
||||
where the entries mean:
|
||||
\table
|
||||
Property | Description | Type | Reqd | Deflt
|
||||
type | Type name: age | word | yes | -
|
||||
libs | Library name: fieldFunctionObjects | word | yes | -
|
||||
phi | Name of flux field | word | no | phi
|
||||
rho | Name of density field | word | no | rho
|
||||
schemesField | Name of the field from which schemes are taken <!--
|
||||
--> | word | no | age
|
||||
tolerance | Solver residual control | scalar | no | 1e-5
|
||||
nCorr | Maximum number of correctors | int | no | 5
|
||||
diffusion | Flag to turn on/off the diffusion term | bool | no | false
|
||||
\endtable
|
||||
|
||||
The inherited entries are elaborated in:
|
||||
- \link functionObject.H \endlink
|
||||
|
||||
See also
|
||||
- Foam::functionObjects::comfort
|
||||
|
||||
SourceFiles
|
||||
age.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef functionObjects_age_H
|
||||
#define functionObjects_age_H
|
||||
|
||||
#include "fvMeshFunctionObject.H"
|
||||
#include "volFields.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace functionObjects
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class age Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class age
|
||||
:
|
||||
public fvMeshFunctionObject
|
||||
{
|
||||
// Private Data
|
||||
|
||||
//- The name of the flux field
|
||||
word phiName_;
|
||||
|
||||
//- The name of the density field
|
||||
word rhoName_;
|
||||
|
||||
//- Name of field from which schemes are taken
|
||||
word schemesField_;
|
||||
|
||||
//- Convergence tolerance
|
||||
scalar tolerance_;
|
||||
|
||||
//- Number of corrections
|
||||
int nCorr_;
|
||||
|
||||
//- Flag to turn on/off the diffusion term
|
||||
bool diffusion_;
|
||||
|
||||
|
||||
// Private Member Functions
|
||||
|
||||
//- The list of patch types for the age field
|
||||
wordList patchTypes() const;
|
||||
|
||||
//- Return true if convergence is reached
|
||||
bool converged(const int nCorr, const scalar initialResidual) const;
|
||||
|
||||
//- Create and allocate a new zero geometric field
|
||||
template<class GeoField>
|
||||
autoPtr<GeoField> newField
|
||||
(
|
||||
const word& baseName,
|
||||
const wordList
|
||||
) const;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("age");
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from Time and dictionary
|
||||
age
|
||||
(
|
||||
const word& name,
|
||||
const Time& runTime,
|
||||
const dictionary& dict
|
||||
);
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~age() = default;
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Read the data
|
||||
virtual bool read(const dictionary&);
|
||||
|
||||
//- Execute
|
||||
virtual bool execute();
|
||||
|
||||
//- Write
|
||||
virtual bool write();
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace functionObjects
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
478
src/functionObjects/field/comfort/comfort.C
Normal file
478
src/functionObjects/field/comfort/comfort.C
Normal file
@ -0,0 +1,478 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | www.openfoam.com
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
Copyright (C) 2019 OpenFOAM Foundation
|
||||
Copyright (C) 2021 OpenCFD Ltd.
|
||||
-------------------------------------------------------------------------------
|
||||
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 "comfort.H"
|
||||
#include "wallFvPatch.H"
|
||||
#include "addToRunTimeSelectionTable.H"
|
||||
|
||||
// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace functionObjects
|
||||
{
|
||||
defineTypeNameAndDebug(comfort, 0);
|
||||
addToRunTimeSelectionTable(functionObject, comfort, dictionary);
|
||||
}
|
||||
}
|
||||
|
||||
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
|
||||
|
||||
Foam::tmp<Foam::volScalarField> Foam::functionObjects::comfort::magU() const
|
||||
{
|
||||
tmp<volScalarField> tmagU = mag(lookupObject<volVectorField>("U"));
|
||||
volScalarField& magU = tmagU.ref();
|
||||
|
||||
// Flag to use the averaged velocity field in the domain.
|
||||
// Consistent with EN ISO 7730 but does not make physical sense
|
||||
if (meanVelocity_)
|
||||
{
|
||||
magU = magU.weightedAverage(mesh_.V());
|
||||
}
|
||||
|
||||
return tmagU;
|
||||
}
|
||||
|
||||
|
||||
Foam::dimensionedScalar Foam::functionObjects::comfort::Trad() const
|
||||
{
|
||||
dimensionedScalar Trad(Trad_);
|
||||
|
||||
// The mean radiation is calculated by the mean wall temperatures
|
||||
// which are summed and divided by the area | only walls are taken into
|
||||
// account. This approach might be correct for a squared room but will
|
||||
// defintely be inconsistent for complex room geometries. The norm does
|
||||
// not provide any information about the calculation of this quantity.
|
||||
if (!TradSet_)
|
||||
{
|
||||
const volScalarField::Boundary& TBf =
|
||||
lookupObject<volScalarField>("T").boundaryField();
|
||||
|
||||
scalar areaIntegral = 0;
|
||||
scalar TareaIntegral = 0;
|
||||
|
||||
forAll(TBf, patchi)
|
||||
{
|
||||
const fvPatchScalarField& pT = TBf[patchi];
|
||||
const fvPatch& pTBf = TBf[patchi].patch();
|
||||
const scalarField& pSf = pTBf.magSf();
|
||||
|
||||
if (isType<wallFvPatch>(pTBf))
|
||||
{
|
||||
areaIntegral += gSum(pSf);
|
||||
TareaIntegral += gSum(pSf*pT);
|
||||
}
|
||||
}
|
||||
|
||||
Trad.value() = TareaIntegral/areaIntegral;
|
||||
}
|
||||
|
||||
// Bounds based on EN ISO 7730
|
||||
if ((Trad.value() < 283.15) || (Trad.value() > 313.15))
|
||||
{
|
||||
WarningInFunction
|
||||
<< "The calculated mean wall radiation temperature is out of the\n"
|
||||
<< "bounds specified in EN ISO 7730:2005\n"
|
||||
<< "Valid range is 10 degC < T < 40 degC\n"
|
||||
<< "The actual value is: " << Trad - 273.15 << nl << endl;
|
||||
}
|
||||
|
||||
return Trad;
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::volScalarField> Foam::functionObjects::comfort::pSat() const
|
||||
{
|
||||
static const dimensionedScalar kPaToPa(dimPressure, 1000);
|
||||
static const dimensionedScalar A(dimless, 16.6563);
|
||||
static const dimensionedScalar B(dimTemperature, 4030.183);
|
||||
static const dimensionedScalar C(dimTemperature, -38.15);
|
||||
|
||||
tmp<volScalarField> tpSat = volScalarField::New("pSat", mesh_, pSat_);
|
||||
|
||||
// Calculate the saturation pressure if no user input is given
|
||||
if (pSat_.value() == 0)
|
||||
{
|
||||
const auto& T = lookupObject<volScalarField>("T");
|
||||
|
||||
// Equation based on ISO 7730:2006
|
||||
tpSat = kPaToPa*exp(A - B/(T + C));
|
||||
}
|
||||
|
||||
return tpSat;
|
||||
}
|
||||
|
||||
|
||||
Foam::tmp<Foam::volScalarField> Foam::functionObjects::comfort::Tcloth
|
||||
(
|
||||
volScalarField& hc,
|
||||
const dimensionedScalar& metabolicRateSI,
|
||||
const dimensionedScalar& extWorkSI,
|
||||
const volScalarField& T,
|
||||
const dimensionedScalar& Trad
|
||||
)
|
||||
{
|
||||
const dimensionedScalar factor1(dimTemperature, 308.85);
|
||||
|
||||
const dimensionedScalar factor2
|
||||
(
|
||||
dimTemperature/metabolicRateSI.dimensions(),
|
||||
0.028
|
||||
);
|
||||
|
||||
const dimensionedScalar factor3
|
||||
(
|
||||
dimMass/pow3(dimTime)/pow4(dimTemperature),
|
||||
3.96e-8
|
||||
);
|
||||
|
||||
// Heat transfer coefficient based on forced convection [W/m^2/K]
|
||||
const volScalarField hcForced
|
||||
(
|
||||
dimensionedScalar(hc.dimensions()/sqrt(dimVelocity), 12.1)
|
||||
*sqrt(magU())
|
||||
);
|
||||
|
||||
// Tcl [K] (surface cloth temperature)
|
||||
tmp<volScalarField> tTcl
|
||||
(
|
||||
volScalarField::New
|
||||
(
|
||||
"Tcl",
|
||||
T.mesh(),
|
||||
dimTemperature
|
||||
)
|
||||
);
|
||||
volScalarField& Tcl = tTcl.ref();
|
||||
|
||||
// Initial guess
|
||||
Tcl = T;
|
||||
|
||||
label i = 0;
|
||||
|
||||
Tcl.storePrevIter();
|
||||
|
||||
// Same temperatures as for the radiation
|
||||
const dimensionedScalar Tmin(dimTemperature, 283.15);
|
||||
const dimensionedScalar Tmax(dimTemperature, 313.15);
|
||||
|
||||
// Iterative solving of equation (2)
|
||||
do
|
||||
{
|
||||
Tcl = (Tcl + Tcl.prevIter())/2;
|
||||
Tcl.storePrevIter();
|
||||
|
||||
// Heat transfer coefficient based on natural convection
|
||||
volScalarField hcNatural
|
||||
(
|
||||
dimensionedScalar(hc.dimensions()/pow025(dimTemperature), 2.38)
|
||||
*pow025(mag(Tcl - T))
|
||||
);
|
||||
|
||||
// Set heat transfer coefficient based on equation (3)
|
||||
hc =
|
||||
pos(hcForced - hcNatural)*hcForced
|
||||
+ neg0(hcForced - hcNatural)*hcNatural;
|
||||
|
||||
// Calculate surface temperature based on equation (2)
|
||||
Tcl =
|
||||
factor1
|
||||
- factor2*(metabolicRateSI - extWorkSI)
|
||||
- Icl_*factor3*fcl_*(pow4(Tcl) - pow4(Trad))
|
||||
- Icl_*fcl_*hc*(Tcl - T);
|
||||
|
||||
// Make sure that Tcl is in some physical limit (same range as we used
|
||||
// for the radiative estimation - based on ISO EN 7730:2005)
|
||||
Tcl.clip(Tmin, Tmax);
|
||||
|
||||
} while (!converged(Tcl) && i++ < maxClothIter_);
|
||||
|
||||
if (i == maxClothIter_)
|
||||
{
|
||||
WarningInFunction
|
||||
<< "The surface cloth temperature did not converge within " << i
|
||||
<< " iterations" << nl;
|
||||
}
|
||||
|
||||
return tTcl;
|
||||
}
|
||||
|
||||
|
||||
bool Foam::functionObjects::comfort::converged
|
||||
(
|
||||
const volScalarField& phi
|
||||
) const
|
||||
{
|
||||
return
|
||||
max(mag(phi.primitiveField() - phi.prevIter().primitiveField()))
|
||||
< tolerance_;
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
Foam::functionObjects::comfort::comfort
|
||||
(
|
||||
const word& name,
|
||||
const Time& runTime,
|
||||
const dictionary& dict
|
||||
)
|
||||
:
|
||||
fvMeshFunctionObject(name, runTime, dict),
|
||||
clothing_("clothing", dimless, 0),
|
||||
metabolicRate_("metabolicRate", dimMass/pow3(dimTime), 0.8),
|
||||
extWork_("extWork", dimMass/pow3(dimTime), 0),
|
||||
Trad_("Trad", dimTemperature, 0),
|
||||
relHumidity_("relHumidity", dimless, 0.5),
|
||||
pSat_("pSat", dimPressure, 0),
|
||||
Icl_("Icl", pow3(dimTime)*dimTemperature/dimMass, 0),
|
||||
fcl_("fcl", dimless, 0),
|
||||
tolerance_(1e-4),
|
||||
maxClothIter_(100),
|
||||
TradSet_(false),
|
||||
meanVelocity_(false)
|
||||
{
|
||||
read(dict);
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
bool Foam::functionObjects::comfort::read(const dictionary& dict)
|
||||
{
|
||||
if (fvMeshFunctionObject::read(dict))
|
||||
{
|
||||
clothing_.readIfPresent(dict);
|
||||
metabolicRate_.readIfPresent(dict);
|
||||
extWork_.readIfPresent(dict);
|
||||
pSat_.readIfPresent(dict);
|
||||
tolerance_ = dict.getOrDefault("tolerance", 1e-4);
|
||||
maxClothIter_ = dict.getOrDefault("maxClothIter", 100);
|
||||
meanVelocity_ = dict.getOrDefault<bool>("meanVelocity", false);
|
||||
|
||||
// Read relative humidity if provided and convert from % to fraction
|
||||
if (dict.found(relHumidity_.name()))
|
||||
{
|
||||
relHumidity_.read(dict);
|
||||
relHumidity_ /= 100;
|
||||
}
|
||||
|
||||
// Read radiation temperature if provided
|
||||
if (dict.found(Trad_.name()))
|
||||
{
|
||||
TradSet_ = true;
|
||||
Trad_.read(dict);
|
||||
}
|
||||
|
||||
Icl_ = dimensionedScalar(Icl_.dimensions(), 0.155)*clothing_;
|
||||
|
||||
fcl_.value() =
|
||||
Icl_.value() <= 0.078
|
||||
? 1.0 + 1.290*Icl_.value()
|
||||
: 1.05 + 0.645*Icl_.value();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
bool Foam::functionObjects::comfort::execute()
|
||||
{
|
||||
// Assign and build fields
|
||||
const dimensionedScalar Trad(this->Trad());
|
||||
const volScalarField pSat(this->pSat());
|
||||
|
||||
const dimensionedScalar metabolicRateSI(58.15*metabolicRate_);
|
||||
const dimensionedScalar extWorkSI(58.15*extWork_);
|
||||
|
||||
const auto& T = lookupObject<volScalarField>("T");
|
||||
|
||||
// Heat transfer coefficient [W/m^2/K]
|
||||
// This field is updated in Tcloth()
|
||||
volScalarField hc
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"hc",
|
||||
mesh_.time().timeName(),
|
||||
mesh_
|
||||
),
|
||||
mesh_,
|
||||
dimensionedScalar(dimMass/pow3(dimTime)/dimTemperature, 0)
|
||||
);
|
||||
|
||||
// Calculate the surface temperature of the cloth by an iterative
|
||||
// process using equation (2) from DIN EN ISO 7730 [degC]
|
||||
const volScalarField Tcloth
|
||||
(
|
||||
this->Tcloth
|
||||
(
|
||||
hc,
|
||||
metabolicRateSI,
|
||||
extWorkSI,
|
||||
T,
|
||||
Trad
|
||||
)
|
||||
);
|
||||
|
||||
// Calculate the PMV quantity
|
||||
const dimensionedScalar factor1(pow3(dimTime)/dimMass, 0.303);
|
||||
const dimensionedScalar factor2
|
||||
(
|
||||
dimless/metabolicRateSI.dimensions(),
|
||||
-0.036
|
||||
);
|
||||
const dimensionedScalar factor3(factor1.dimensions(), 0.028);
|
||||
const dimensionedScalar factor4(dimLength/dimTime, 3.05e-3);
|
||||
const dimensionedScalar factor5(dimPressure, 5733);
|
||||
const dimensionedScalar factor6(dimTime/dimLength, 6.99);
|
||||
const dimensionedScalar factor8(metabolicRateSI.dimensions(), 58.15);
|
||||
const dimensionedScalar factor9(dimless/dimPressure, 1.7e-5);
|
||||
const dimensionedScalar factor10(dimPressure, 5867);
|
||||
const dimensionedScalar factor11(dimless/dimTemperature, 0.0014);
|
||||
const dimensionedScalar factor12(dimTemperature, 307.15);
|
||||
const dimensionedScalar factor13
|
||||
(
|
||||
dimMass/pow3(dimTime)/pow4(dimTemperature),
|
||||
3.96e-8
|
||||
);
|
||||
|
||||
const scalar factor7
|
||||
(
|
||||
// Special treatment of Term4
|
||||
// if metaRate - extWork < factor8, set to zero
|
||||
(metabolicRateSI - extWorkSI).value() < factor8.value() ? 0 : 0.42
|
||||
);
|
||||
|
||||
Info<< "Calculating the predicted mean vote (PMV)" << endl;
|
||||
|
||||
// Equation (1)
|
||||
tmp<volScalarField> PMV =
|
||||
(
|
||||
// Term1: Thermal sensation transfer coefficient
|
||||
(factor1*exp(factor2*metabolicRateSI) + factor3)
|
||||
*(
|
||||
(metabolicRateSI - extWorkSI)
|
||||
|
||||
// Term2: Heat loss difference through skin
|
||||
- factor4
|
||||
*(
|
||||
factor5
|
||||
- factor6*(metabolicRateSI - extWorkSI)
|
||||
- pSat*relHumidity_
|
||||
)
|
||||
|
||||
// Term3: Heat loss through sweating
|
||||
- factor7*(metabolicRateSI - extWorkSI - factor8)
|
||||
|
||||
// Term4: Heat loss through latent respiration
|
||||
- factor9*metabolicRateSI*(factor10 - pSat*relHumidity_)
|
||||
|
||||
// Term5: Heat loss through dry respiration
|
||||
- factor11*metabolicRateSI*(factor12 - T)
|
||||
|
||||
// Term6: Heat loss through radiation
|
||||
- factor13*fcl_*(pow4(Tcloth) - pow4(Trad))
|
||||
|
||||
// Term7: Heat loss through convection
|
||||
- fcl_*hc*(Tcloth - T)
|
||||
)
|
||||
);
|
||||
|
||||
Info<< "Calculating the predicted percentage of dissatisfaction (PPD)"
|
||||
<< endl;
|
||||
|
||||
// Equation (5)
|
||||
tmp<volScalarField> PPD =
|
||||
100 - 95*exp(-0.03353*pow4(PMV()) - 0.21790*sqr(PMV()));
|
||||
|
||||
Info<< "Calculating the draught rating (DR)\n";
|
||||
|
||||
const dimensionedScalar Umin(dimVelocity, 0.05);
|
||||
const dimensionedScalar Umax(dimVelocity, 0.5);
|
||||
const dimensionedScalar pre(dimless, 0.37);
|
||||
const dimensionedScalar C1(dimVelocity, 3.14);
|
||||
|
||||
// Limit the velocity field to the values given in EN ISO 7733
|
||||
volScalarField Umag(mag(lookupObject<volVectorField>("U")));
|
||||
Umag.clip(Umin, Umax);
|
||||
|
||||
// Calculate the turbulent intensity if turbulent kinetic energy field k
|
||||
// exists
|
||||
volScalarField TI
|
||||
(
|
||||
IOobject
|
||||
(
|
||||
"TI",
|
||||
mesh_.time().timeName(),
|
||||
mesh_
|
||||
),
|
||||
mesh_,
|
||||
dimensionedScalar(dimless, 0)
|
||||
);
|
||||
|
||||
if (foundObject<volScalarField>("k"))
|
||||
{
|
||||
const auto& k = lookupObject<volScalarField>("k");
|
||||
TI = sqrt(2/3*k)/Umag;
|
||||
}
|
||||
|
||||
// For unit correctness
|
||||
const dimensionedScalar correctUnit
|
||||
(
|
||||
dimensionSet(0, -1.62, 1.62, -1, 0, 0, 0),
|
||||
1
|
||||
);
|
||||
|
||||
// Equation (6)
|
||||
tmp<volScalarField> DR =
|
||||
correctUnit*(factor12 - T)*pow(Umag - Umin, 0.62)*(pre*Umag*TI + C1);
|
||||
|
||||
// Workaround
|
||||
word fieldNamePMV = "PMV";
|
||||
word fieldNamePPD = "PPD";
|
||||
word fieldNameDR = "DR";
|
||||
|
||||
return
|
||||
store(fieldNamePMV, PMV)
|
||||
&& store(fieldNamePPD, PPD)
|
||||
&& store(fieldNameDR, DR);
|
||||
}
|
||||
|
||||
bool Foam::functionObjects::comfort::write()
|
||||
{
|
||||
return
|
||||
writeObject("PMV")
|
||||
&& writeObject("PPD")
|
||||
&& writeObject("DR");
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
246
src/functionObjects/field/comfort/comfort.H
Normal file
246
src/functionObjects/field/comfort/comfort.H
Normal file
@ -0,0 +1,246 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | www.openfoam.com
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
Copyright (C) 2019-2021 OpenFOAM Foundation
|
||||
Copyright (C) 2021 OpenCFD Ltd.
|
||||
-------------------------------------------------------------------------------
|
||||
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::functionObjects::comfort
|
||||
|
||||
Description
|
||||
Calculates the thermal comfort quantities predicted mean vote (PMV),
|
||||
predicted percentage of dissatisfaction (PPD) and the draught rate (DR)
|
||||
based on DIN ISO EN 7730:2005.
|
||||
|
||||
The draught rate is defined for velocities between 0 m/s and 0.5 m/s. Values
|
||||
larger than 0.5 m/s will be set to 0.5 m/s. Furthermore, the draught rate is
|
||||
defined between 20 degC and 26 degC. A temperature limitation is not
|
||||
implemented. The draught rate is mainly used for HVAC analysis in rooms.
|
||||
|
||||
Usage
|
||||
Minimal example by using \c system/controlDict.functions:
|
||||
\verbatim
|
||||
comfort1
|
||||
{
|
||||
// Mandatory entries
|
||||
type comfort;
|
||||
libs (fieldFunctionObjects);
|
||||
|
||||
// Optional entries
|
||||
clothing <scalar>;
|
||||
metabolicRate <scalar>;
|
||||
extWork <scalar>;
|
||||
Trad <scalar>;
|
||||
relHumidity <scalar>;
|
||||
pSat <scalar>;
|
||||
tolerance <scalar>;
|
||||
maxClothIter <int>;
|
||||
meanVelocity <bool>;
|
||||
|
||||
// Inherited entries
|
||||
...
|
||||
}
|
||||
\endverbatim
|
||||
|
||||
where the entries mean:
|
||||
\table
|
||||
Property | Description | Type | Reqd | Deflt
|
||||
type | Type name: comfort | word | yes | -
|
||||
libs | Library name: fieldFunctionObjects | word | yes | -
|
||||
clothing | The insulation value of the cloth | scalar | no | 0
|
||||
metabolicRate | The metabolic rate | scalar | no | 0.8
|
||||
extWork | The external work | scalar | no | 0
|
||||
Trad | Radiation temperature | scalar | no | 0
|
||||
relHumidity | Relative humidity of the air | scalar | no | 0.5
|
||||
pSat | Saturation pressure of water | scalar | no | -1
|
||||
tolerance | Residual control for the cloth temperature <!--
|
||||
--> | scalar | no | 1e-4
|
||||
maxClothIter | Maximum number of iterations | int | no | 100
|
||||
meanVelocity | Flag to use a constant mean velocity <!--
|
||||
--> in the whole domain | bool | no | false
|
||||
\endtable
|
||||
|
||||
The inherited entries are elaborated in:
|
||||
- \link functionObject.H \endlink
|
||||
|
||||
\table
|
||||
Predicted Mean Vote (PMV) | evaluation
|
||||
+ 3 | hot
|
||||
+ 2 | warm
|
||||
+ 1 | slightly warm
|
||||
+ 0 | neutral
|
||||
- 1 | slightly cool
|
||||
- 2 | cool
|
||||
- 3 | cold
|
||||
\endtable
|
||||
|
||||
\table
|
||||
Draught rate based on 7730 | category
|
||||
0 - 10 | I - fine
|
||||
10 - 20 | II - okay
|
||||
20 - 30 | III - intermedian
|
||||
> 30 | bad - commonly too high
|
||||
\endtable
|
||||
|
||||
See also
|
||||
- Foam::functionObjects::age
|
||||
|
||||
SourceFiles
|
||||
comfort.C
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef comfort_H
|
||||
#define comfort_H
|
||||
|
||||
#include "fvMeshFunctionObject.H"
|
||||
#include "volFields.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
namespace functionObjects
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class comfort Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
class comfort
|
||||
:
|
||||
public fvMeshFunctionObject
|
||||
{
|
||||
// Private Data
|
||||
|
||||
//- Clothing [-]
|
||||
dimensionedScalar clothing_;
|
||||
|
||||
//- Metabolic rate [kg/s^3]
|
||||
dimensionedScalar metabolicRate_;
|
||||
|
||||
//- External work [kg/s^3]
|
||||
dimensionedScalar extWork_;
|
||||
|
||||
//- Mean radiation temperature [K]
|
||||
dimensionedScalar Trad_;
|
||||
|
||||
//- Relative humidity [percentage]
|
||||
dimensionedScalar relHumidity_;
|
||||
|
||||
//- Saturation pressure of water [Pa]
|
||||
dimensionedScalar pSat_;
|
||||
|
||||
//- Thermal insulation of clothing [W/m^2/K]
|
||||
dimensionedScalar Icl_;
|
||||
|
||||
//- Prefactor of cloth area [-]
|
||||
dimensionedScalar fcl_;
|
||||
|
||||
//- Tolerance criteria for iterative process to find Tcl
|
||||
scalar tolerance_;
|
||||
|
||||
//- Maximum number of correctors for cloth temperature
|
||||
int maxClothIter_;
|
||||
|
||||
//- Flag to set to true if the radiation temperature is provided
|
||||
bool TradSet_;
|
||||
|
||||
//- Flag to use volume weighted velocity field for caluclation
|
||||
bool meanVelocity_;
|
||||
|
||||
|
||||
// Private Member Functions
|
||||
|
||||
//- Calculate the magnitude of the velocity [m/s]
|
||||
tmp<volScalarField> magU() const;
|
||||
|
||||
//- Calculate the radiation temperature in the domain using a simple
|
||||
//- approach [K]
|
||||
dimensionedScalar Trad() const;
|
||||
|
||||
//- Calculate the saturation pressure based on 7730:2005
|
||||
//- Possible options: adding different calculation methods such as
|
||||
//- the formulation based on Magnus or others [Pa]
|
||||
tmp<volScalarField> pSat() const;
|
||||
|
||||
//- Calculate and return the surface temperature of the cloth [K]
|
||||
//- and the heat transfer coefficient hc [W/m^2/K]
|
||||
tmp<volScalarField> Tcloth
|
||||
(
|
||||
volScalarField& hc,
|
||||
const dimensionedScalar& metabolicRateSI,
|
||||
const dimensionedScalar& extWorkSI,
|
||||
const volScalarField& TdegC,
|
||||
const dimensionedScalar& Trad
|
||||
);
|
||||
|
||||
//- Return true if the cloth temperature iteration has converged
|
||||
bool converged(const volScalarField&) const;
|
||||
|
||||
|
||||
public:
|
||||
|
||||
//- Runtime type information
|
||||
TypeName("comfort");
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct from Time and dictionary
|
||||
comfort
|
||||
(
|
||||
const word& name,
|
||||
const Time& runTime,
|
||||
const dictionary& dict
|
||||
);
|
||||
|
||||
|
||||
//- Destructor
|
||||
virtual ~comfort() = default;
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
//- Read the data needed for the comfort calculation
|
||||
virtual bool read(const dictionary&);
|
||||
|
||||
//- Calculate the predicted mean vote (PMV)
|
||||
//- and predicted percentage dissatisfaction (PPD) fields
|
||||
virtual bool execute();
|
||||
|
||||
//- Write the PPD and PMV fields
|
||||
virtual bool write();
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace functionObjects
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,41 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class volScalarField;
|
||||
object DR;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
dimensions [0 0 0 0 0 0 0];
|
||||
|
||||
internalField uniform 0;
|
||||
|
||||
boundaryField
|
||||
{
|
||||
walls
|
||||
{
|
||||
type calculated;
|
||||
value uniform 0;
|
||||
}
|
||||
inlet
|
||||
{
|
||||
type calculated;
|
||||
value uniform 16.61;
|
||||
}
|
||||
outlet
|
||||
{
|
||||
type calculated;
|
||||
value uniform 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,43 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class volScalarField;
|
||||
object PMV;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
dimensions [0 0 0 0 0 0 0];
|
||||
|
||||
internalField uniform 1.40936;
|
||||
|
||||
boundaryField
|
||||
{
|
||||
walls
|
||||
{
|
||||
type calculated;
|
||||
value uniform 1.40936;
|
||||
}
|
||||
|
||||
inlet
|
||||
{
|
||||
type calculated;
|
||||
value uniform -1.18438;
|
||||
}
|
||||
|
||||
outlet
|
||||
{
|
||||
type calculated;
|
||||
value uniform 1.40936;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,43 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class volScalarField;
|
||||
object PPD;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
dimensions [0 0 0 0 0 0 0];
|
||||
|
||||
internalField uniform 46.0115;
|
||||
|
||||
boundaryField
|
||||
{
|
||||
walls
|
||||
{
|
||||
type calculated;
|
||||
value uniform 46.0115;
|
||||
}
|
||||
|
||||
inlet
|
||||
{
|
||||
type calculated;
|
||||
value uniform 34.4876;
|
||||
}
|
||||
|
||||
outlet
|
||||
{
|
||||
type calculated;
|
||||
value uniform 46.0115;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,42 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class volScalarField;
|
||||
object T;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
dimensions [0 0 0 1 0 0 0];
|
||||
|
||||
internalField uniform 302;
|
||||
|
||||
boundaryField
|
||||
{
|
||||
walls
|
||||
{
|
||||
type fixedValue;
|
||||
value $internalField;
|
||||
}
|
||||
|
||||
inlet
|
||||
{
|
||||
type fixedValue;
|
||||
value uniform 290;
|
||||
}
|
||||
|
||||
outlet
|
||||
{
|
||||
type zeroGradient;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,42 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class volVectorField;
|
||||
object U;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
dimensions [0 1 -1 0 0 0 0];
|
||||
|
||||
internalField uniform (0 0 0);
|
||||
|
||||
boundaryField
|
||||
{
|
||||
walls
|
||||
{
|
||||
type noSlip;
|
||||
}
|
||||
|
||||
inlet
|
||||
{
|
||||
type fixedValue;
|
||||
value uniform (0.2 0 0);
|
||||
}
|
||||
|
||||
outlet
|
||||
{
|
||||
type pressureInletOutletVelocity;
|
||||
value $internalField;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,44 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class volScalarField;
|
||||
object alphat;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
dimensions [1 -1 -1 0 0 0 0];
|
||||
|
||||
internalField uniform 0;
|
||||
|
||||
boundaryField
|
||||
{
|
||||
walls
|
||||
{
|
||||
type compressible::alphatJayatillekeWallFunction;
|
||||
Prt 0.85;
|
||||
value $internalField;
|
||||
}
|
||||
|
||||
inlet
|
||||
{
|
||||
type calculated;
|
||||
value $internalField;
|
||||
}
|
||||
|
||||
outlet
|
||||
{
|
||||
type calculated;
|
||||
value $internalField;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,44 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class volScalarField;
|
||||
object epsilon;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
dimensions [0 2 -3 0 0 0 0];
|
||||
|
||||
internalField uniform 0.23;
|
||||
|
||||
boundaryField
|
||||
{
|
||||
walls
|
||||
{
|
||||
type epsilonWallFunction;
|
||||
value $internalField;
|
||||
}
|
||||
|
||||
inlet
|
||||
{
|
||||
type turbulentMixingLengthDissipationRateInlet;
|
||||
mixingLength 0.0168;
|
||||
value $internalField;
|
||||
}
|
||||
|
||||
outlet
|
||||
{
|
||||
type inletOutlet;
|
||||
inletValue $internalField;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,44 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class volScalarField;
|
||||
object k;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
dimensions [0 2 -2 0 0 0 0];
|
||||
|
||||
internalField uniform 8e-2;
|
||||
|
||||
boundaryField
|
||||
{
|
||||
walls
|
||||
{
|
||||
type kqRWallFunction;
|
||||
value $internalField;
|
||||
}
|
||||
|
||||
inlet
|
||||
{
|
||||
type turbulentIntensityKineticEnergyInlet;
|
||||
intensity 0.14;
|
||||
value $internalField;
|
||||
}
|
||||
|
||||
outlet
|
||||
{
|
||||
type inletOutlet;
|
||||
inletValue $internalField;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,43 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class volScalarField;
|
||||
object nut;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
dimensions [0 2 -1 0 0 0 0];
|
||||
|
||||
internalField uniform 0;
|
||||
|
||||
boundaryField
|
||||
{
|
||||
walls
|
||||
{
|
||||
type nutkWallFunction;
|
||||
value $internalField;
|
||||
}
|
||||
|
||||
inlet
|
||||
{
|
||||
type calculated;
|
||||
value $internalField;
|
||||
}
|
||||
|
||||
outlet
|
||||
{
|
||||
type calculated;
|
||||
value $internalField;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,43 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class volScalarField;
|
||||
object p;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
dimensions [1 -1 -2 0 0 0 0];
|
||||
|
||||
internalField uniform 1e5;
|
||||
|
||||
boundaryField
|
||||
{
|
||||
walls
|
||||
{
|
||||
type calculated;
|
||||
value $internalField;
|
||||
}
|
||||
|
||||
inlet
|
||||
{
|
||||
type calculated;
|
||||
value $internalField;
|
||||
}
|
||||
|
||||
outlet
|
||||
{
|
||||
type calculated;
|
||||
value $internalField;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,44 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class volScalarField;
|
||||
object p_rgh;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
dimensions [1 -1 -2 0 0 0 0];
|
||||
|
||||
internalField uniform 0;
|
||||
|
||||
boundaryField
|
||||
{
|
||||
walls
|
||||
{
|
||||
type fixedFluxPressure;
|
||||
value $internalField;
|
||||
}
|
||||
|
||||
outlet
|
||||
{
|
||||
type prghPressure;
|
||||
p $internalField;
|
||||
value $internalField;
|
||||
}
|
||||
|
||||
inlet
|
||||
{
|
||||
type fixedFluxPressure;
|
||||
value $internalField;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
8
tutorials/heatTransfer/buoyantSimpleFoam/comfortHotRoom/Allclean
Executable file
8
tutorials/heatTransfer/buoyantSimpleFoam/comfortHotRoom/Allclean
Executable file
@ -0,0 +1,8 @@
|
||||
#!/bin/sh
|
||||
cd "${0%/*}" || exit # Run from this directory
|
||||
. ${WM_PROJECT_DIR:?}/bin/tools/CleanFunctions # Tutorial clean functions
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
cleanCase0
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
35
tutorials/heatTransfer/buoyantSimpleFoam/comfortHotRoom/Allrun
Executable file
35
tutorials/heatTransfer/buoyantSimpleFoam/comfortHotRoom/Allrun
Executable file
@ -0,0 +1,35 @@
|
||||
#!/bin/sh
|
||||
cd "${0%/*}" || exit # Run from this directory
|
||||
. ${WM_PROJECT_DIR:?}/bin/tools/RunFunctions # Tutorial run functions
|
||||
#------------------------------------------------------------------------------
|
||||
|
||||
restore0Dir
|
||||
|
||||
runApplication blockMesh
|
||||
|
||||
runApplication topoSet
|
||||
|
||||
runApplication createPatch -overwrite
|
||||
|
||||
runApplication decomposePar
|
||||
|
||||
runParallel $(getApplication)
|
||||
|
||||
runApplication reconstructPar
|
||||
|
||||
|
||||
# restart
|
||||
|
||||
latestTime=$(foamListTimes -latestTime)
|
||||
|
||||
mv -f "$latestTime" "$latestTime".bak
|
||||
|
||||
rm -rf processor*
|
||||
|
||||
runParallel -s decompose redistributePar -decompose -latestTime
|
||||
|
||||
runParallel -s 2 $(getApplication)
|
||||
|
||||
runParallel -s reconstruct redistributePar -reconstruct -latestTime
|
||||
|
||||
#------------------------------------------------------------------------------
|
||||
@ -0,0 +1,21 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class uniformDimensionedVectorField;
|
||||
object g;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
dimensions [0 1 -2 0 0 0 0];
|
||||
value (0 0 -9.81);
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,53 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class dictionary;
|
||||
object thermophysicalProperties;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
thermoType
|
||||
{
|
||||
type heRhoThermo;
|
||||
mixture pureMixture;
|
||||
transport const;
|
||||
thermo hConst;
|
||||
equationOfState Boussinesq;
|
||||
specie specie;
|
||||
energy sensibleEnthalpy;
|
||||
}
|
||||
|
||||
mixture
|
||||
{
|
||||
specie
|
||||
{
|
||||
molWeight 28.9;
|
||||
}
|
||||
equationOfState
|
||||
{
|
||||
rho0 1;
|
||||
T0 300;
|
||||
beta 3e-03;
|
||||
}
|
||||
thermodynamics
|
||||
{
|
||||
Cp 1040;
|
||||
Hf 0;
|
||||
}
|
||||
transport
|
||||
{
|
||||
mu 1e-05;
|
||||
Pr 0.7;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,25 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class dictionary;
|
||||
object turbulenceProperties;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
simulationType RAS;
|
||||
|
||||
RAS
|
||||
{
|
||||
model kEpsilon;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,36 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
ageOfAir
|
||||
{
|
||||
// Mandatory entries
|
||||
type age;
|
||||
libs (fieldFunctionObjects);
|
||||
|
||||
// Optional entries
|
||||
phi phi;
|
||||
rho rho;
|
||||
schemesField age;
|
||||
tolerance 1e-5;
|
||||
nCorr 5;
|
||||
diffusion on;
|
||||
|
||||
// Inherited entries
|
||||
region region0;
|
||||
enabled true;
|
||||
log true;
|
||||
timeStart 0;
|
||||
timeEnd 10000;
|
||||
executeControl writeTime;
|
||||
executeInterval -1;
|
||||
writeControl writeTime;
|
||||
writeInterval -1;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,39 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
comfort
|
||||
{
|
||||
// Mandatory entries
|
||||
type comfort;
|
||||
libs (fieldFunctionObjects);
|
||||
|
||||
// Optional entries
|
||||
clothing 0.5;
|
||||
metabolicRate 1.2;
|
||||
extWork 0.0;
|
||||
// Trad 0.0;
|
||||
relHumidity 60.0;
|
||||
pSat 0.0;
|
||||
tolerance 1e-4;
|
||||
maxClothIter 100;
|
||||
meanVelocity false;
|
||||
|
||||
// Inherited entries
|
||||
region region0;
|
||||
enabled true;
|
||||
log true;
|
||||
timeStart 0;
|
||||
timeEnd 10000;
|
||||
executeControl writeTime;
|
||||
executeInterval -1;
|
||||
writeControl writeTime;
|
||||
writeInterval -1;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,47 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class dictionary;
|
||||
object blockMeshDict;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
scale 1;
|
||||
|
||||
vertices
|
||||
(
|
||||
(0 0 0)
|
||||
(0 0 1.6)
|
||||
(0 3 1.6)
|
||||
(0 3 0)
|
||||
|
||||
(4 0 0)
|
||||
(4 0 1.6)
|
||||
(4 3 1.6)
|
||||
(4 3 0)
|
||||
);
|
||||
|
||||
blocks
|
||||
(
|
||||
hex (0 3 2 1 4 7 6 5) (40 20 60) simpleGrading (1 1 1)
|
||||
);
|
||||
|
||||
defaultPatch
|
||||
{
|
||||
name walls;
|
||||
type wall;
|
||||
}
|
||||
|
||||
boundary
|
||||
();
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,54 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class dictionary;
|
||||
object controlDict;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
application buoyantSimpleFoam;
|
||||
|
||||
startFrom latestTime;
|
||||
|
||||
startTime 0;
|
||||
|
||||
stopAt endTime;
|
||||
|
||||
endTime 3000;
|
||||
|
||||
deltaT 1;
|
||||
|
||||
writeControl timeStep;
|
||||
|
||||
writeInterval 100;
|
||||
|
||||
purgeWrite 0;
|
||||
|
||||
writeFormat ascii;
|
||||
|
||||
writePrecision 8;
|
||||
|
||||
writeCompression off;
|
||||
|
||||
timeFormat general;
|
||||
|
||||
timePrecision 6;
|
||||
|
||||
runTimeModifiable false;
|
||||
|
||||
functions
|
||||
{
|
||||
#include "FOage"
|
||||
#include "FOcomfort"
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,48 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class dictionary;
|
||||
object createPatchDict;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
pointSync false;
|
||||
|
||||
writeCyclicMatch false;
|
||||
|
||||
patches
|
||||
(
|
||||
{
|
||||
name inlet;
|
||||
|
||||
patchInfo
|
||||
{
|
||||
type patch;
|
||||
}
|
||||
|
||||
constructFrom set;
|
||||
set inlet;
|
||||
}
|
||||
{
|
||||
name outlet;
|
||||
|
||||
patchInfo
|
||||
{
|
||||
type patch;
|
||||
}
|
||||
|
||||
constructFrom set;
|
||||
set outlet;
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,27 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class dictionary;
|
||||
object decomposeParDict;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
numberOfSubdomains 8;
|
||||
|
||||
method hierarchical;
|
||||
|
||||
coeffs
|
||||
{
|
||||
n (4 2 1);
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,39 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class dictionary;
|
||||
object fvOptions;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
limitTAir
|
||||
{
|
||||
type limitTemperature;
|
||||
min 280;
|
||||
max 310;
|
||||
selectionMode all;
|
||||
active yes;
|
||||
}
|
||||
|
||||
dampVelocity
|
||||
{
|
||||
type velocityDampingConstraint;
|
||||
active yes;
|
||||
|
||||
velocityDampingConstraintCoeffs
|
||||
{
|
||||
selectionMode all;
|
||||
UMax 10;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,61 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class dictionary;
|
||||
object fvSchemes;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
ddtSchemes
|
||||
{
|
||||
default steadyState;
|
||||
}
|
||||
|
||||
gradSchemes
|
||||
{
|
||||
default Gauss linear;
|
||||
}
|
||||
|
||||
divSchemes
|
||||
{
|
||||
default none;
|
||||
|
||||
div(phi,U) bounded Gauss upwind;
|
||||
div(phi,h) bounded Gauss upwind;
|
||||
|
||||
div(phi,k) bounded Gauss upwind;
|
||||
div(phi,epsilon) bounded Gauss upwind;
|
||||
div(phi,K) bounded Gauss upwind;
|
||||
|
||||
div(phi,Ekp) bounded Gauss linear;
|
||||
|
||||
div(((rho*nuEff)*dev2(T(grad(U))))) Gauss linear;
|
||||
|
||||
div(phi,age) bounded Gauss upwind;
|
||||
}
|
||||
|
||||
laplacianSchemes
|
||||
{
|
||||
default Gauss linear orthogonal;
|
||||
}
|
||||
|
||||
interpolationSchemes
|
||||
{
|
||||
default linear;
|
||||
}
|
||||
|
||||
snGradSchemes
|
||||
{
|
||||
default orthogonal;
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,73 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class dictionary;
|
||||
object fvSolution;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
solvers
|
||||
{
|
||||
p_rgh
|
||||
{
|
||||
solver GAMG;
|
||||
smoother GaussSeidel;
|
||||
tolerance 1e-8;
|
||||
relTol 0.01;
|
||||
}
|
||||
|
||||
"(U|h|k|epsilon)"
|
||||
{
|
||||
solver PBiCGStab;
|
||||
preconditioner DILU;
|
||||
tolerance 1e-7;
|
||||
relTol 0.1;
|
||||
}
|
||||
|
||||
age
|
||||
{
|
||||
$U;
|
||||
relTol 0.001;
|
||||
}
|
||||
}
|
||||
|
||||
SIMPLE
|
||||
{
|
||||
momentumPredictor false;
|
||||
nNonOrthogonalCorrectors 0;
|
||||
|
||||
residualControl
|
||||
{
|
||||
p_rgh 1e-6;
|
||||
U 1e-6;
|
||||
h 1e-6;
|
||||
"(k|epsilon)" 1e-6;
|
||||
}
|
||||
}
|
||||
|
||||
relaxationFactors
|
||||
{
|
||||
fields
|
||||
{
|
||||
p_rgh 0.7;
|
||||
}
|
||||
|
||||
equations
|
||||
{
|
||||
U 0.3;
|
||||
h 0.3;
|
||||
"(k|epsilon|R)" 0.7;
|
||||
age 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
@ -0,0 +1,42 @@
|
||||
/*--------------------------------*- C++ -*----------------------------------*\
|
||||
| ========= | |
|
||||
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
|
||||
| \\ / O peration | Version: v2106 |
|
||||
| \\ / A nd | Website: www.openfoam.com |
|
||||
| \\/ M anipulation | |
|
||||
\*---------------------------------------------------------------------------*/
|
||||
FoamFile
|
||||
{
|
||||
version 2.0;
|
||||
format ascii;
|
||||
class dictionary;
|
||||
object topoSetDict;
|
||||
}
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
actions
|
||||
(
|
||||
{
|
||||
name inlet;
|
||||
type faceSet;
|
||||
action new;
|
||||
source boxToFace;
|
||||
sourceInfo
|
||||
{
|
||||
box (-0.001 0.25 1.1)(0.001 0.75 1.3);
|
||||
}
|
||||
}
|
||||
{
|
||||
name outlet;
|
||||
type faceSet;
|
||||
action new;
|
||||
source boxToFace;
|
||||
sourceInfo
|
||||
{
|
||||
box (1.75 2.999 0.3)(2.25 3.001 0.5);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
Reference in New Issue
Block a user