lagrangian: Moved composition modelling into the thermo cloud

The thermo parcel now supports thermophysical property modelling. This
particle does not store phase or specie fractions so it only provides a
single phase with a uniform composition. Additional specification is
required in the cloud subModel configuration in order to select the
specie. For example:

    compositionModel singlePhaseMixture;

    singlePhaseMixtureCoeffs
    {
        phases
        (
            solid
            {
                CaCO3   1;
            }
        );
    }
This commit is contained in:
Will Bainbridge
2021-05-12 14:20:11 +01:00
parent 5c8dc9c2f1
commit 40d3dbbd02
22 changed files with 184 additions and 197 deletions

View File

@ -32,15 +32,6 @@ License
template<class CloudType> template<class CloudType>
void Foam::ReactingCloud<CloudType>::setModels() void Foam::ReactingCloud<CloudType>::setModels()
{ {
compositionModel_.reset
(
CompositionModel<ReactingCloud<CloudType>>::New
(
this->subModelProperties(),
*this
).ptr()
);
phaseChangeModel_.reset phaseChangeModel_.reset
( (
PhaseChangeModel<ReactingCloud<CloudType>>::New PhaseChangeModel<ReactingCloud<CloudType>>::New
@ -77,7 +68,6 @@ void Foam::ReactingCloud<CloudType>::cloudReset(ReactingCloud<CloudType>& c)
{ {
CloudType::cloudReset(c); CloudType::cloudReset(c);
compositionModel_.reset(c.compositionModel_.ptr());
phaseChangeModel_.reset(c.phaseChangeModel_.ptr()); phaseChangeModel_.reset(c.phaseChangeModel_.ptr());
} }
@ -98,12 +88,11 @@ Foam::ReactingCloud<CloudType>::ReactingCloud
CloudType(cloudName, rho, U, g, carrierThermo, false), CloudType(cloudName, rho, U, g, carrierThermo, false),
cloudCopyPtr_(nullptr), cloudCopyPtr_(nullptr),
constProps_(this->particleProperties()), constProps_(this->particleProperties()),
compositionModel_(nullptr),
phaseChangeModel_(nullptr) phaseChangeModel_(nullptr)
{ {
setModels(); setModels();
rhoTrans_.setSize(compositionModel_->carrier().species().size()); rhoTrans_.setSize(this->composition().carrier().species().size());
if (readFields) if (readFields)
{ {
@ -114,7 +103,7 @@ Foam::ReactingCloud<CloudType>::ReactingCloud
// Set storage for mass source fields and initialise to zero // Set storage for mass source fields and initialise to zero
forAll(rhoTrans_, i) forAll(rhoTrans_, i)
{ {
const word& specieName = compositionModel_->carrier().species()[i]; const word& specieName = this->composition().carrier().species()[i];
rhoTrans_.set rhoTrans_.set
( (
i, i,
@ -151,13 +140,12 @@ Foam::ReactingCloud<CloudType>::ReactingCloud
CloudType(c, name), CloudType(c, name),
cloudCopyPtr_(nullptr), cloudCopyPtr_(nullptr),
constProps_(c.constProps_), constProps_(c.constProps_),
compositionModel_(c.compositionModel_->clone()),
phaseChangeModel_(c.phaseChangeModel_->clone()), phaseChangeModel_(c.phaseChangeModel_->clone()),
rhoTrans_(c.rhoTrans_.size()) rhoTrans_(c.rhoTrans_.size())
{ {
forAll(c.rhoTrans_, i) forAll(c.rhoTrans_, i)
{ {
const word& specieName = compositionModel_->carrier().species()[i]; const word& specieName = this->composition().carrier().species()[i];
rhoTrans_.set rhoTrans_.set
( (
i, i,
@ -190,7 +178,6 @@ Foam::ReactingCloud<CloudType>::ReactingCloud
CloudType(mesh, name, c), CloudType(mesh, name, c),
cloudCopyPtr_(nullptr), cloudCopyPtr_(nullptr),
constProps_(), constProps_(),
compositionModel_(c.compositionModel_->clone()),
phaseChangeModel_(nullptr), phaseChangeModel_(nullptr),
rhoTrans_(0) rhoTrans_(0)
{} {}
@ -214,7 +201,7 @@ void Foam::ReactingCloud<CloudType>::setParcelThermoProperties
{ {
CloudType::setParcelThermoProperties(parcel, lagrangianDt); CloudType::setParcelThermoProperties(parcel, lagrangianDt);
parcel.Y() = composition().YMixture0(); parcel.Y() = this->composition().YMixture0();
} }
@ -233,7 +220,7 @@ void Foam::ReactingCloud<CloudType>::checkParcelProperties
checkSuppliedComposition checkSuppliedComposition
( (
parcel.Y(), parcel.Y(),
composition().YMixture0(), this->composition().YMixture0(),
"YMixture" "YMixture"
); );
} }
@ -339,14 +326,4 @@ void Foam::ReactingCloud<CloudType>::info()
} }
template<class CloudType>
void Foam::ReactingCloud<CloudType>::writeFields() const
{
if (compositionModel_.valid())
{
CloudType::particleType::writeFields(*this, this->composition());
}
}
// ************************************************************************* // // ************************************************************************* //

View File

@ -54,9 +54,6 @@ namespace Foam
// Forward declaration of classes // Forward declaration of classes
template<class CloudType>
class CompositionModel;
template<class CloudType> template<class CloudType>
class PhaseChangeModel; class PhaseChangeModel;
@ -111,10 +108,6 @@ protected:
// References to the cloud sub-models // References to the cloud sub-models
//- Reacting composition model
autoPtr<CompositionModel<ReactingCloud<CloudType>>>
compositionModel_;
//- Reacting phase change model //- Reacting phase change model
autoPtr<PhaseChangeModel<ReactingCloud<CloudType>>> autoPtr<PhaseChangeModel<ReactingCloud<CloudType>>>
phaseChangeModel_; phaseChangeModel_;
@ -220,10 +213,6 @@ public:
// Sub-models // Sub-models
//- Return const access to reacting composition model
inline const CompositionModel<ReactingCloud<CloudType>>&
composition() const;
//- Return const access to reacting phase change model //- Return const access to reacting phase change model
inline const PhaseChangeModel<ReactingCloud<CloudType>>& inline const PhaseChangeModel<ReactingCloud<CloudType>>&
phaseChange() const; phaseChange() const;
@ -316,9 +305,6 @@ public:
//- Print cloud information //- Print cloud information
void info(); void info();
//- Write the field data for the cloud
virtual void writeFields() const;
// Member Operators // Member Operators

View File

@ -51,14 +51,6 @@ Foam::ReactingCloud<CloudType>::constProps()
} }
template<class CloudType>
inline const Foam::CompositionModel<Foam::ReactingCloud<CloudType>>&
Foam::ReactingCloud<CloudType>::composition() const
{
return compositionModel_;
}
template<class CloudType> template<class CloudType>
inline const Foam::PhaseChangeModel<Foam::ReactingCloud<CloudType>>& inline const Foam::PhaseChangeModel<Foam::ReactingCloud<CloudType>>&
Foam::ReactingCloud<CloudType>::phaseChange() const Foam::ReactingCloud<CloudType>::phaseChange() const

View File

@ -26,6 +26,7 @@ License
#include "ThermoCloud.H" #include "ThermoCloud.H"
#include "integrationScheme.H" #include "integrationScheme.H"
#include "HeatTransferModel.H" #include "HeatTransferModel.H"
#include "CompositionModel.H"
// * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * // // * * * * * * * * * * * * * Protected Member Functions * * * * * * * * * * //
@ -41,6 +42,15 @@ void Foam::ThermoCloud<CloudType>::setModels()
).ptr() ).ptr()
); );
compositionModel_.reset
(
CompositionModel<ThermoCloud<CloudType>>::New
(
this->subModelProperties(),
*this
).ptr()
);
TIntegrator_.reset TIntegrator_.reset
( (
integrationScheme::New integrationScheme::New
@ -117,6 +127,8 @@ void Foam::ThermoCloud<CloudType>::cloudReset(ThermoCloud<CloudType>& c)
CloudType::cloudReset(c); CloudType::cloudReset(c);
heatTransferModel_.reset(c.heatTransferModel_.ptr()); heatTransferModel_.reset(c.heatTransferModel_.ptr());
compositionModel_.reset(c.compositionModel_.ptr());
TIntegrator_.reset(c.TIntegrator_.ptr()); TIntegrator_.reset(c.TIntegrator_.ptr());
radiation_ = c.radiation_; radiation_ = c.radiation_;
@ -144,6 +156,7 @@ Foam::ThermoCloud<CloudType>::ThermoCloud
T_(carrierThermo.T()), T_(carrierThermo.T()),
p_(carrierThermo.p()), p_(carrierThermo.p()),
heatTransferModel_(nullptr), heatTransferModel_(nullptr),
compositionModel_(nullptr),
TIntegrator_(nullptr), TIntegrator_(nullptr),
radiation_(false), radiation_(false),
radAreaP_(nullptr), radAreaP_(nullptr),
@ -212,6 +225,7 @@ Foam::ThermoCloud<CloudType>::ThermoCloud
T_(c.T()), T_(c.T()),
p_(c.p()), p_(c.p()),
heatTransferModel_(c.heatTransferModel_->clone()), heatTransferModel_(c.heatTransferModel_->clone()),
compositionModel_(c.compositionModel_->clone()),
TIntegrator_(c.TIntegrator_->clone()), TIntegrator_(c.TIntegrator_->clone()),
radiation_(c.radiation_), radiation_(c.radiation_),
radAreaP_(nullptr), radAreaP_(nullptr),
@ -322,6 +336,7 @@ Foam::ThermoCloud<CloudType>::ThermoCloud
T_(c.T()), T_(c.T()),
p_(c.p()), p_(c.p()),
heatTransferModel_(nullptr), heatTransferModel_(nullptr),
compositionModel_(nullptr),
TIntegrator_(nullptr), TIntegrator_(nullptr),
radiation_(false), radiation_(false),
radAreaP_(nullptr), radAreaP_(nullptr),
@ -481,4 +496,14 @@ void Foam::ThermoCloud<CloudType>::info()
} }
template<class CloudType>
void Foam::ThermoCloud<CloudType>::writeFields() const
{
if (compositionModel_.valid())
{
CloudType::particleType::writeFields(*this, this->composition());
}
}
// ************************************************************************* // // ************************************************************************* //

View File

@ -58,6 +58,9 @@ class integrationScheme;
template<class CloudType> template<class CloudType>
class HeatTransferModel; class HeatTransferModel;
template<class CloudType>
class CompositionModel;
/*---------------------------------------------------------------------------*\ /*---------------------------------------------------------------------------*\
Class ThermoCloudName Declaration Class ThermoCloudName Declaration
@ -127,6 +130,10 @@ protected:
autoPtr<HeatTransferModel<ThermoCloud<CloudType>>> autoPtr<HeatTransferModel<ThermoCloud<CloudType>>>
heatTransferModel_; heatTransferModel_;
//- Reacting composition model
autoPtr<CompositionModel<ThermoCloud<CloudType>>>
compositionModel_;
// Reference to the particle integration schemes // Reference to the particle integration schemes
@ -257,6 +264,10 @@ public:
inline const HeatTransferModel<ThermoCloud<CloudType>>& inline const HeatTransferModel<ThermoCloud<CloudType>>&
heatTransfer() const; heatTransfer() const;
//- Return const access to reacting composition model
inline const CompositionModel<ThermoCloud<CloudType>>&
composition() const;
// Integration schemes // Integration schemes
@ -385,6 +396,9 @@ public:
//- Print cloud information //- Print cloud information
void info(); void info();
//- Write the field data for the cloud
virtual void writeFields() const;
// Member Operators // Member Operators

View File

@ -91,6 +91,14 @@ Foam::ThermoCloud<CloudType>::heatTransfer() const
} }
template<class CloudType>
inline const Foam::CompositionModel<Foam::ThermoCloud<CloudType>>&
Foam::ThermoCloud<CloudType>::composition() const
{
return compositionModel_;
}
template<class CloudType> template<class CloudType>
inline const Foam::integrationScheme& inline const Foam::integrationScheme&
Foam::ThermoCloud<CloudType>::TIntegrator() const Foam::ThermoCloud<CloudType>::TIntegrator() const

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org \\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2011-2020 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2021 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -170,8 +170,8 @@ void Foam::ReactingMultiphaseParcel<ParcelType>::calc
const scalar dt const scalar dt
) )
{ {
typedef typename TrackCloudType::reactingCloudType reactingCloudType; typedef typename TrackCloudType::thermoCloudType thermoCloudType;
const CompositionModel<reactingCloudType>& composition = const CompositionModel<thermoCloudType>& composition =
cloud.composition(); cloud.composition();
@ -547,8 +547,8 @@ void Foam::ReactingMultiphaseParcel<ParcelType>::calcDevolatilisation
return; return;
} }
typedef typename TrackCloudType::reactingCloudType reactingCloudType; typedef typename TrackCloudType::thermoCloudType thermoCloudType;
const CompositionModel<reactingCloudType>& composition = const CompositionModel<thermoCloudType>& composition =
cloud.composition(); cloud.composition();

View File

@ -57,9 +57,11 @@ void Foam::ReactingParcel<ParcelType>::calcPhaseChange
scalarField& Cs scalarField& Cs
) )
{ {
typedef typename TrackCloudType::reactingCloudType reactingCloudType; typedef typename TrackCloudType::thermoCloudType thermoCloudType;
const CompositionModel<reactingCloudType>& composition = const CompositionModel<thermoCloudType>& composition =
cloud.composition(); cloud.composition();
typedef typename TrackCloudType::reactingCloudType reactingCloudType;
PhaseChangeModel<reactingCloudType>& phaseChange = cloud.phaseChange(); PhaseChangeModel<reactingCloudType>& phaseChange = cloud.phaseChange();
if (YPhase < small) if (YPhase < small)
@ -383,8 +385,8 @@ void Foam::ReactingParcel<ParcelType>::calc
const scalar dt const scalar dt
) )
{ {
typedef typename TrackCloudType::reactingCloudType reactingCloudType; typedef typename TrackCloudType::thermoCloudType thermoCloudType;
const CompositionModel<reactingCloudType>& composition = const CompositionModel<thermoCloudType>& composition =
cloud.composition(); cloud.composition();

View File

@ -122,47 +122,8 @@ public:
}; };
class trackingData //- Use base tracking data
: typedef typename ParcelType::trackingData trackingData;
public ParcelType::trackingData
{
private:
// Private Data
// Interpolators for continuous phase fields
//- Interpolator for continuous phase pressure field
autoPtr<interpolation<scalar>> pInterp_;
// Cached continuous phase properties
//- Pressure [Pa]
scalar pc_;
public:
// Constructors
//- Construct from components
template<class TrackCloudType>
inline trackingData(const TrackCloudType& cloud);
// Member Functions
//- Return const access to the interpolator for continuous phase
// pressure field
inline const interpolation<scalar>& pInterp() const;
//- Return the continuous phase pressure
inline scalar pc() const;
//- Access the continuous phase pressure
inline scalar& pc();
};
protected: protected:
@ -407,7 +368,6 @@ public:
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#include "ReactingParcelI.H" #include "ReactingParcelI.H"
#include "ReactingParcelTrackingDataI.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View File

@ -1,68 +0,0 @@
/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2011-2020 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/>.
\*---------------------------------------------------------------------------*/
template<class ParcelType>
template<class TrackCloudType>
inline Foam::ReactingParcel<ParcelType>::trackingData::trackingData
(
const TrackCloudType& cloud
)
:
ParcelType::trackingData(cloud),
pInterp_
(
interpolation<scalar>::New
(
cloud.solution().interpolationSchemes(),
cloud.p()
)
),
pc_(Zero)
{}
template<class ParcelType>
inline const Foam::interpolation<Foam::scalar>&
Foam::ReactingParcel<ParcelType>::trackingData::pInterp() const
{
return pInterp_();
}
template<class ParcelType>
inline Foam::scalar Foam::ReactingParcel<ParcelType>::trackingData::pc() const
{
return pc_;
}
template<class ParcelType>
inline Foam::scalar& Foam::ReactingParcel<ParcelType>::trackingData::pc()
{
return pc_;
}
// ************************************************************************* //

View File

@ -64,8 +64,8 @@ void Foam::SprayParcel<ParcelType>::calc
const scalar dt const scalar dt
) )
{ {
typedef typename TrackCloudType::reactingCloudType reactingCloudType; typedef typename TrackCloudType::thermoCloudType thermoCloudType;
const CompositionModel<reactingCloudType>& composition = const CompositionModel<thermoCloudType>& composition =
cloud.composition(); cloud.composition();
// Check if parcel belongs to liquid core // Check if parcel belongs to liquid core
@ -153,8 +153,8 @@ void Foam::SprayParcel<ParcelType>::calcAtomization
const scalar dt const scalar dt
) )
{ {
typedef typename TrackCloudType::reactingCloudType reactingCloudType; typedef typename TrackCloudType::thermoCloudType thermoCloudType;
const CompositionModel<reactingCloudType>& composition = const CompositionModel<thermoCloudType>& composition =
cloud.composition(); cloud.composition();
typedef typename TrackCloudType::sprayCloudType sprayCloudType; typedef typename TrackCloudType::sprayCloudType sprayCloudType;
@ -325,8 +325,8 @@ Foam::scalar Foam::SprayParcel<ParcelType>::chi
{ {
// Modifications to take account of the flash boiling on primary break-up // Modifications to take account of the flash boiling on primary break-up
typedef typename TrackCloudType::reactingCloudType reactingCloudType; typedef typename TrackCloudType::thermoCloudType thermoCloudType;
const CompositionModel<reactingCloudType>& composition = const CompositionModel<thermoCloudType>& composition =
cloud.composition(); cloud.composition();
scalar chi = 0.0; scalar chi = 0.0;

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org \\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2011-2020 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2021 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -203,6 +203,10 @@ void Foam::ThermoParcel<ParcelType>::calc
Sph Sph
); );
// Update the heat capacity
static const scalarField Y(1, 1);
Cp_ = cloud.composition().Cp(0, Y, td.pc(), T0);
// Motion // Motion
// ~~~~~~ // ~~~~~~

View File

@ -174,6 +174,9 @@ public:
// Interpolators for continuous phase fields // Interpolators for continuous phase fields
//- Interpolator for continuous phase pressure field
autoPtr<interpolation<scalar>> pInterp_;
//- Temperature field interpolator //- Temperature field interpolator
autoPtr<interpolation<scalar>> TInterp_; autoPtr<interpolation<scalar>> TInterp_;
@ -189,6 +192,9 @@ public:
// Cached continuous phase properties // Cached continuous phase properties
//- Pressure [Pa]
scalar pc_;
//- Temperature [K] //- Temperature [K]
scalar Tc_; scalar Tc_;
@ -213,6 +219,10 @@ public:
//- Return access to the locally stored carrier kappa field //- Return access to the locally stored carrier kappa field
inline const volScalarField& kappa() const; inline const volScalarField& kappa() const;
//- Return const access to the interpolator for continuous phase
// pressure field
inline const interpolation<scalar>& pInterp() const;
//- Return const access to the interpolator for continuous //- Return const access to the interpolator for continuous
// phase temperature field // phase temperature field
inline const interpolation<scalar>& TInterp() const; inline const interpolation<scalar>& TInterp() const;
@ -229,6 +239,12 @@ public:
// radiation field // radiation field
inline const interpolation<scalar>& GInterp() const; inline const interpolation<scalar>& GInterp() const;
//- Return the continuous phase pressure
inline scalar pc() const;
//- Access the continuous phase pressure
inline scalar& pc();
//- Return the continuous phase temperature //- Return the continuous phase temperature
inline scalar Tc() const; inline scalar Tc() const;
@ -428,6 +444,14 @@ public:
template<class CloudType> template<class CloudType>
static void writeFields(const CloudType& c); static void writeFields(const CloudType& c);
//- Write
template<class CloudType, class CompositionType>
static void writeFields
(
const CloudType& c,
const CompositionType& compModel
);
// Ostream Operator // Ostream Operator

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org \\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2011-2020 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2021 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -128,6 +128,18 @@ void Foam::ThermoParcel<ParcelType>::writeFields(const CloudType& c)
} }
template<class ParcelType>
template<class CloudType, class CompositionType>
void Foam::ThermoParcel<ParcelType>::writeFields
(
const CloudType& c,
const CompositionType& compModel
)
{
ThermoParcel<ParcelType>::writeFields(c);
}
// * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * // // * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * //
template<class ParcelType> template<class ParcelType>

View File

@ -33,6 +33,14 @@ inline Foam::ThermoParcel<ParcelType>::trackingData::trackingData
ParcelType::trackingData(cloud), ParcelType::trackingData(cloud),
Cp_(cloud.carrierThermo().Cp()), Cp_(cloud.carrierThermo().Cp()),
kappa_(cloud.carrierThermo().kappa()), kappa_(cloud.carrierThermo().kappa()),
pInterp_
(
interpolation<scalar>::New
(
cloud.solution().interpolationSchemes(),
cloud.p()
)
),
TInterp_ TInterp_
( (
interpolation<scalar>::New interpolation<scalar>::New
@ -58,6 +66,7 @@ inline Foam::ThermoParcel<ParcelType>::trackingData::trackingData
) )
), ),
GInterp_(nullptr), GInterp_(nullptr),
pc_(Zero),
Tc_(Zero), Tc_(Zero),
Cpc_(Zero) Cpc_(Zero)
{ {
@ -92,6 +101,14 @@ Foam::ThermoParcel<ParcelType>::trackingData::kappa() const
} }
template<class ParcelType>
inline const Foam::interpolation<Foam::scalar>&
Foam::ThermoParcel<ParcelType>::trackingData::pInterp() const
{
return pInterp_();
}
template<class ParcelType> template<class ParcelType>
inline const Foam::interpolation<Foam::scalar>& inline const Foam::interpolation<Foam::scalar>&
Foam::ThermoParcel<ParcelType>::trackingData::TInterp() const Foam::ThermoParcel<ParcelType>::trackingData::TInterp() const
@ -131,6 +148,20 @@ Foam::ThermoParcel<ParcelType>::trackingData::GInterp() const
} }
template<class ParcelType>
inline Foam::scalar Foam::ThermoParcel<ParcelType>::trackingData::pc() const
{
return pc_;
}
template<class ParcelType>
inline Foam::scalar& Foam::ThermoParcel<ParcelType>::trackingData::pc()
{
return pc_;
}
template<class ParcelType> template<class ParcelType>
inline Foam::scalar Foam::ThermoParcel<ParcelType>::trackingData::Tc() const inline Foam::scalar Foam::ThermoParcel<ParcelType>::trackingData::Tc() const
{ {

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org \\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2011-2020 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2021 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -37,9 +37,9 @@ License
// Thermodynamic // Thermodynamic
#include "makeParcelHeatTransferModels.H" #include "makeParcelHeatTransferModels.H"
#include "makeParcelCompositionModels.H"
// Reacting // Reacting
#include "makeReactingParcelCompositionModels.H"
#include "makeReactingParcelPhaseChangeModels.H" #include "makeReactingParcelPhaseChangeModels.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -56,9 +56,9 @@ makeReactingParcelSurfaceFilmModels(reactingCloud);
// Thermo sub-models // Thermo sub-models
makeParcelHeatTransferModels(reactingCloud); makeParcelHeatTransferModels(reactingCloud);
makeParcelCompositionModels(reactingCloud);
// Reacting sub-models // Reacting sub-models
makeReactingParcelCompositionModels(reactingCloud);
makeReactingParcelPhaseChangeModels(reactingCloud); makeReactingParcelPhaseChangeModels(reactingCloud);

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org \\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2011-2020 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2021 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -36,9 +36,9 @@ License
// Thermodynamic // Thermodynamic
#include "makeParcelHeatTransferModels.H" #include "makeParcelHeatTransferModels.H"
#include "makeParcelCompositionModels.H"
// Reacting // Reacting
#include "makeReactingParcelCompositionModels.H"
#include "makeReactingParcelPhaseChangeModels.H" #include "makeReactingParcelPhaseChangeModels.H"
#include "makeReactingParcelSurfaceFilmModels.H" #include "makeReactingParcelSurfaceFilmModels.H"
@ -60,9 +60,9 @@ makeSprayParcelStochasticCollisionModels(sprayCloud);
// Thermo sub-models // Thermo sub-models
makeParcelHeatTransferModels(sprayCloud); makeParcelHeatTransferModels(sprayCloud);
makeParcelCompositionModels(sprayCloud);
// Reacting sub-models // Reacting sub-models
makeReactingParcelCompositionModels(sprayCloud);
makeReactingParcelPhaseChangeModels(sprayCloud); makeReactingParcelPhaseChangeModels(sprayCloud);
makeReactingParcelSurfaceFilmModels(sprayCloud); makeReactingParcelSurfaceFilmModels(sprayCloud);

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org \\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2011-2020 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2021 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -37,6 +37,10 @@ License
// Thermodynamic // Thermodynamic
#include "makeParcelHeatTransferModels.H" #include "makeParcelHeatTransferModels.H"
#include "makeParcelCompositionModels.H"
#include "NoComposition.H"
#include "SinglePhaseMixture.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -52,6 +56,6 @@ makeParcelSurfaceFilmModels(thermoCloud);
// Thermo sub-models // Thermo sub-models
makeParcelHeatTransferModels(thermoCloud); makeParcelHeatTransferModels(thermoCloud);
makeParcelCompositionModels(thermoCloud);
// ************************************************************************* // // ************************************************************************* //

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org \\ / O peration | Website: https://openfoam.org
\\ / A nd | Copyright (C) 2011-2020 OpenFOAM Foundation \\ / A nd | Copyright (C) 2011-2021 OpenFOAM Foundation
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -23,8 +23,8 @@ License
\*---------------------------------------------------------------------------*/ \*---------------------------------------------------------------------------*/
#ifndef makeReactingParcelCompositionModels_H #ifndef makeParcelCompositionModels_H
#define makeReactingParcelCompositionModels_H #define makeParcelCompositionModels_H
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
@ -33,7 +33,7 @@ License
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#define makeReactingParcelCompositionModels(CloudType) \ #define makeParcelCompositionModels(CloudType) \
\ \
makeCompositionModel(CloudType); \ makeCompositionModel(CloudType); \
makeCompositionModelType(NoComposition, CloudType); \ makeCompositionModelType(NoComposition, CloudType); \

View File

@ -269,17 +269,17 @@ public:
#define makeCompositionModel(CloudType) \ #define makeCompositionModel(CloudType) \
\ \
typedef Foam::CloudType::reactingCloudType reactingCloudType; \ typedef Foam::CloudType::thermoCloudType thermoCloudType; \
defineNamedTemplateTypeNameAndDebug \ defineNamedTemplateTypeNameAndDebug \
( \ ( \
Foam::CompositionModel<reactingCloudType>, \ Foam::CompositionModel<thermoCloudType>, \
0 \ 0 \
); \ ); \
namespace Foam \ namespace Foam \
{ \ { \
defineTemplateRunTimeSelectionTable \ defineTemplateRunTimeSelectionTable \
( \ ( \
CompositionModel<reactingCloudType>, \ CompositionModel<thermoCloudType>, \
dictionary \ dictionary \
); \ ); \
} }
@ -287,12 +287,12 @@ public:
#define makeCompositionModelType(SS, CloudType) \ #define makeCompositionModelType(SS, CloudType) \
\ \
typedef Foam::CloudType::reactingCloudType reactingCloudType; \ typedef Foam::CloudType::thermoCloudType thermoCloudType; \
defineNamedTemplateTypeNameAndDebug(Foam::SS<reactingCloudType>, 0); \ defineNamedTemplateTypeNameAndDebug(Foam::SS<thermoCloudType>, 0); \
\ \
Foam::CompositionModel<reactingCloudType>:: \ Foam::CompositionModel<thermoCloudType>:: \
adddictionaryConstructorToTable<Foam::SS<reactingCloudType>> \ adddictionaryConstructorToTable<Foam::SS<thermoCloudType>> \
add##SS##CloudType##reactingCloudType##ConstructorToTable_; add##SS##CloudType##thermoCloudType##ConstructorToTable_;
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

View File

@ -41,6 +41,7 @@ solution
U cellPoint; U cellPoint;
Cp cell; Cp cell;
kappa cell; kappa cell;
p cell;
T cell; T cell;
G cell; G cell;
} }
@ -108,6 +109,8 @@ subModels
radiation on; radiation on;
compositionModel singlePhaseMixture;
standardWallInteractionCoeffs standardWallInteractionCoeffs
{ {
type rebound; type rebound;
@ -119,6 +122,17 @@ subModels
{ {
BirdCorrection false; BirdCorrection false;
} }
singlePhaseMixtureCoeffs
{
phases
(
solid
{
CaCO3 1;
}
);
}
} }

View File

@ -47,6 +47,8 @@ solids
} }
ash; ash;
CaCO3;
} }