consistently rename "heat conduction" to "thermal conduction" and use "solid energy" laws

according to wikipedia the term "heat" is the energy transferred due
to a temperature gradient, i.e., it only makes sense if such a
gradient is present and this is not necessary for the storage term.

this means that technically the term "heat conductivity" is
meaningful, but "thermal conductivity" is IMO more consistent.

this has partially already been done in opm-material and eWoms it was
pretty inconsistent, so it also requires a patch in opm-material.
This commit is contained in:
Andreas Lauser 2018-01-04 15:26:07 +01:00
parent f5cfd8f768
commit 4f92ec5865
6 changed files with 143 additions and 163 deletions

View File

@ -40,7 +40,7 @@
#include <opm/material/fluidmatrixinteractions/RegularizedBrooksCorey.hpp> #include <opm/material/fluidmatrixinteractions/RegularizedBrooksCorey.hpp>
#include <opm/material/fluidmatrixinteractions/EffToAbsLaw.hpp> #include <opm/material/fluidmatrixinteractions/EffToAbsLaw.hpp>
#include <opm/material/fluidmatrixinteractions/MaterialTraits.hpp> #include <opm/material/fluidmatrixinteractions/MaterialTraits.hpp>
#include <opm/material/thermal/SomertonHeatConductionLaw.hpp> #include <opm/material/thermal/SomertonThermalConductionLaw.hpp>
#include <opm/material/thermal/ConstantSolidHeatCapLaw.hpp> #include <opm/material/thermal/ConstantSolidHeatCapLaw.hpp>
#include <opm/material/binarycoefficients/Brine_CO2.hpp> #include <opm/material/binarycoefficients/Brine_CO2.hpp>
#include <opm/material/common/UniformTabulated2DFunction.hpp> #include <opm/material/common/UniformTabulated2DFunction.hpp>
@ -123,8 +123,8 @@ public:
typedef Opm::EffToAbsLaw<EffMaterialLaw> type; typedef Opm::EffToAbsLaw<EffMaterialLaw> type;
}; };
// Set the heat conduction law // Set the thermal conduction law
SET_PROP(Co2InjectionBaseProblem, HeatConductionLaw) SET_PROP(Co2InjectionBaseProblem, ThermalConductionLaw)
{ {
private: private:
typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar; typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar;
@ -132,10 +132,10 @@ private:
public: public:
// define the material law parameterized by absolute saturations // define the material law parameterized by absolute saturations
typedef Opm::SomertonHeatConductionLaw<FluidSystem, Scalar> type; typedef Opm::SomertonThermalConductionLaw<FluidSystem, Scalar> type;
}; };
// set the heat law for the solid phase // set the energy storage law for the solid phase
SET_TYPE_PROP(Co2InjectionBaseProblem, SolidEnergyLaw, SET_TYPE_PROP(Co2InjectionBaseProblem, SolidEnergyLaw,
Opm::ConstantSolidHeatCapLaw<typename GET_PROP_TYPE(TypeTag, Scalar)>); Opm::ConstantSolidHeatCapLaw<typename GET_PROP_TYPE(TypeTag, Scalar)>);
@ -224,9 +224,9 @@ class Co2InjectionProblem : public GET_PROP_TYPE(TypeTag, BaseProblem)
typedef typename GET_PROP_TYPE(TypeTag, Simulator) Simulator; typedef typename GET_PROP_TYPE(TypeTag, Simulator) Simulator;
typedef typename GET_PROP_TYPE(TypeTag, Model) Model; typedef typename GET_PROP_TYPE(TypeTag, Model) Model;
typedef typename GET_PROP_TYPE(TypeTag, MaterialLawParams) MaterialLawParams; typedef typename GET_PROP_TYPE(TypeTag, MaterialLawParams) MaterialLawParams;
typedef typename GET_PROP_TYPE(TypeTag, HeatConductionLaw) HeatConductionLaw; typedef typename GET_PROP_TYPE(TypeTag, ThermalConductionLaw) ThermalConductionLaw;
typedef typename GET_PROP_TYPE(TypeTag, SolidEnergyLawParams) SolidEnergyLawParams; typedef typename GET_PROP_TYPE(TypeTag, SolidEnergyLawParams) SolidEnergyLawParams;
typedef typename HeatConductionLaw::Params HeatConductionLawParams; typedef typename ThermalConductionLaw::Params ThermalConductionLawParams;
typedef Opm::MathToolbox<Evaluation> Toolbox; typedef Opm::MathToolbox<Evaluation> Toolbox;
typedef typename GridView::ctype CoordScalar; typedef typename GridView::ctype CoordScalar;
@ -295,14 +295,14 @@ public:
fineMaterialParams_.finalize(); fineMaterialParams_.finalize();
coarseMaterialParams_.finalize(); coarseMaterialParams_.finalize();
// parameters for the somerton law of heat conduction // parameters for the somerton law thermal conduction
computeHeatCondParams_(fineHeatCondParams_, finePorosity_); computeThermalCondParams_(fineThermalCondParams_, finePorosity_);
computeHeatCondParams_(coarseHeatCondParams_, coarsePorosity_); computeThermalCondParams_(coarseThermalCondParams_, coarsePorosity_);
// assume the volumetric heat capacity of granite // assume constant heat capacity and granite
solidHeatLawParams_.setSolidHeatCapacity(790.0 // specific heat capacity of granite [J / (kg K)] solidEnergyLawParams_.setSolidHeatCapacity(790.0 // specific heat capacity of granite [J / (kg K)]
* 2700.0); // density of granite [kg/m^3] * 2700.0); // density of granite [kg/m^3]
solidHeatLawParams_.finalize(); solidEnergyLawParams_.finalize();
} }
/*! /*!
@ -439,24 +439,24 @@ public:
*/ */
template <class Context> template <class Context>
const SolidEnergyLawParams& const SolidEnergyLawParams&
solidHeatLawParams(const Context& context OPM_UNUSED, solidEnergyLawParams(const Context& context OPM_UNUSED,
unsigned spaceIdx OPM_UNUSED, unsigned spaceIdx OPM_UNUSED,
unsigned timeIdx OPM_UNUSED) const unsigned timeIdx OPM_UNUSED) const
{ return solidHeatLawParams_; } { return solidEnergyLawParams_; }
/*! /*!
* \copydoc FvBaseMultiPhaseProblem::heatConductionParams * \copydoc FvBaseMultiPhaseProblem::thermalConductionParams
*/ */
template <class Context> template <class Context>
const HeatConductionLawParams & const ThermalConductionLawParams &
heatConductionLawParams(const Context& context, thermalConductionLawParams(const Context& context,
unsigned spaceIdx, unsigned spaceIdx,
unsigned timeIdx) const unsigned timeIdx) const
{ {
const GlobalPosition& pos = context.pos(spaceIdx, timeIdx); const GlobalPosition& pos = context.pos(spaceIdx, timeIdx);
if (isFineMaterial_(pos)) if (isFineMaterial_(pos))
return fineHeatCondParams_; return fineThermalCondParams_;
return coarseHeatCondParams_; return coarseThermalCondParams_;
} }
//! \} //! \}
@ -606,7 +606,7 @@ private:
bool inHighTemperatureRegion_(const GlobalPosition& pos) const bool inHighTemperatureRegion_(const GlobalPosition& pos) const
{ return (pos[0] > 20) && (pos[0] < 30) && (pos[1] > 5) && (pos[1] < 35); } { return (pos[0] > 20) && (pos[0] < 30) && (pos[1] > 5) && (pos[1] < 35); }
void computeHeatCondParams_(HeatConductionLawParams& params, Scalar poro) void computeThermalCondParams_(ThermalConductionLawParams& params, Scalar poro)
{ {
Scalar lambdaWater = 0.6; Scalar lambdaWater = 0.6;
Scalar lambdaGranite = 2.8; Scalar lambdaGranite = 2.8;
@ -633,9 +633,9 @@ private:
MaterialLawParams fineMaterialParams_; MaterialLawParams fineMaterialParams_;
MaterialLawParams coarseMaterialParams_; MaterialLawParams coarseMaterialParams_;
HeatConductionLawParams fineHeatCondParams_; ThermalConductionLawParams fineThermalCondParams_;
HeatConductionLawParams coarseHeatCondParams_; ThermalConductionLawParams coarseThermalCondParams_;
SolidEnergyLawParams solidHeatLawParams_; SolidEnergyLawParams solidEnergyLawParams_;
Scalar temperature_; Scalar temperature_;
Scalar maxDepth_; Scalar maxDepth_;

View File

@ -35,7 +35,8 @@
#include <opm/material/fluidsystems/H2OAirMesityleneFluidSystem.hpp> #include <opm/material/fluidsystems/H2OAirMesityleneFluidSystem.hpp>
#include <opm/material/fluidmatrixinteractions/ThreePhaseParkerVanGenuchten.hpp> #include <opm/material/fluidmatrixinteractions/ThreePhaseParkerVanGenuchten.hpp>
#include <opm/material/fluidmatrixinteractions/LinearMaterial.hpp> #include <opm/material/fluidmatrixinteractions/LinearMaterial.hpp>
#include <opm/material/thermal/SomertonHeatConductionLaw.hpp> #include <opm/material/thermal/ConstantSolidHeatCapLaw.hpp>
#include <opm/material/thermal/SomertonThermalConductionLaw.hpp>
#include <opm/material/constraintsolvers/MiscibleMultiPhaseComposition.hpp> #include <opm/material/constraintsolvers/MiscibleMultiPhaseComposition.hpp>
#include <opm/material/fluidmatrixinteractions/MaterialTraits.hpp> #include <opm/material/fluidmatrixinteractions/MaterialTraits.hpp>
#include <opm/common/Valgrind.hpp> #include <opm/common/Valgrind.hpp>
@ -95,8 +96,12 @@ public:
typedef Opm::ThreePhaseParkerVanGenuchten<Traits> type; typedef Opm::ThreePhaseParkerVanGenuchten<Traits> type;
}; };
// Set the heat conduction law // set the energy storage law for the solid phase
SET_PROP(CuvetteBaseProblem, HeatConductionLaw) SET_TYPE_PROP(CuvetteBaseProblem, SolidEnergyLaw,
Opm::ConstantSolidHeatCapLaw<typename GET_PROP_TYPE(TypeTag, Scalar)>);
// Set the thermal conduction law
SET_PROP(CuvetteBaseProblem, ThermalConductionLaw)
{ {
private: private:
typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar; typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar;
@ -104,7 +109,7 @@ private:
public: public:
// define the material law parameterized by absolute saturations // define the material law parameterized by absolute saturations
typedef Opm::SomertonHeatConductionLaw<FluidSystem, Scalar> type; typedef Opm::SomertonThermalConductionLaw<FluidSystem, Scalar> type;
}; };
// The default for the end time of the simulation // The default for the end time of the simulation
@ -155,8 +160,8 @@ class CuvetteProblem : public GET_PROP_TYPE(TypeTag, BaseProblem)
typedef typename GET_PROP_TYPE(TypeTag, GridView) GridView; typedef typename GET_PROP_TYPE(TypeTag, GridView) GridView;
typedef typename GET_PROP_TYPE(TypeTag, MaterialLaw) MaterialLaw; typedef typename GET_PROP_TYPE(TypeTag, MaterialLaw) MaterialLaw;
typedef typename GET_PROP_TYPE(TypeTag, MaterialLawParams) MaterialLawParams; typedef typename GET_PROP_TYPE(TypeTag, MaterialLawParams) MaterialLawParams;
typedef typename GET_PROP_TYPE(TypeTag, HeatConductionLaw) HeatConductionLaw; typedef typename GET_PROP_TYPE(TypeTag, ThermalConductionLawParams) ThermalConductionLawParams;
typedef typename GET_PROP_TYPE(TypeTag, HeatConductionLawParams) HeatConductionLawParams; typedef typename GET_PROP_TYPE(TypeTag, SolidEnergyLawParams) SolidEnergyLawParams;
typedef typename GET_PROP_TYPE(TypeTag, EqVector) EqVector; typedef typename GET_PROP_TYPE(TypeTag, EqVector) EqVector;
typedef typename GET_PROP_TYPE(TypeTag, PrimaryVariables) PrimaryVariables; typedef typename GET_PROP_TYPE(TypeTag, PrimaryVariables) PrimaryVariables;
typedef typename GET_PROP_TYPE(TypeTag, RateVector) RateVector; typedef typename GET_PROP_TYPE(TypeTag, RateVector) RateVector;
@ -264,8 +269,13 @@ public:
fineMaterialParams_.finalize(); fineMaterialParams_.finalize();
coarseMaterialParams_.finalize(); coarseMaterialParams_.finalize();
// initialize parameters for the heat conduction law // initialize parameters for the thermal conduction law
computeHeatCondParams_(heatCondParams_, finePorosity_); computeThermalCondParams_(thermalCondParams_, finePorosity_);
// assume constant volumetric heat capacity and granite
solidEnergyLawParams_.setSolidHeatCapacity(790.0 // specific heat capacity of granite [J / (kg K)]
* 2700.0); // density of granite [kg/m^3]
solidEnergyLawParams_.finalize();
initInjectFluidState_(); initInjectFluidState_();
} }
@ -365,26 +375,14 @@ public:
} }
/*! /*!
* \copydoc FvBaseMultiPhaseProblem::heatConductionParams * \copydoc FvBaseMultiPhaseProblem::thermalConductionParams
*/ */
template <class Context> template <class Context>
const HeatConductionLawParams & const ThermalConductionLawParams &
heatConductionParams(const Context& context OPM_UNUSED, thermalConductionParams(const Context& context OPM_UNUSED,
unsigned spaceIdx OPM_UNUSED, unsigned spaceIdx OPM_UNUSED,
unsigned timeIdx OPM_UNUSED) const unsigned timeIdx OPM_UNUSED) const
{ return heatCondParams_; } { return thermalCondParams_; }
/*!
* \copydoc FvBaseMultiPhaseProblem::heatCapacitySolid
*/
template <class Context>
Scalar heatCapacitySolid(const Context& context OPM_UNUSED,
unsigned spaceIdx OPM_UNUSED,
unsigned timeIdx OPM_UNUSED) const
{
return 850 // specific heat capacity [J / (kg K)]
* 2650; // density of sand [kg/m^3]
}
//! \} //! \}
@ -563,7 +561,7 @@ private:
} }
} }
void computeHeatCondParams_(HeatConductionLawParams& params, Scalar poro) void computeThermalCondParams_(ThermalConductionLawParams& params, Scalar poro)
{ {
Scalar lambdaGranite = 2.8; // [W / (K m)] Scalar lambdaGranite = 2.8; // [W / (K m)]
@ -627,7 +625,8 @@ private:
MaterialLawParams fineMaterialParams_; MaterialLawParams fineMaterialParams_;
MaterialLawParams coarseMaterialParams_; MaterialLawParams coarseMaterialParams_;
HeatConductionLawParams heatCondParams_; ThermalConductionLawParams thermalCondParams_;
SolidEnergyLawParams solidEnergyLawParams_;
Opm::CompositionalFluidState<Scalar, FluidSystem> injectFluidState_; Opm::CompositionalFluidState<Scalar, FluidSystem> injectFluidState_;

View File

@ -45,7 +45,7 @@
#include <opm/material/fluidmatrixinteractions/LinearMaterial.hpp> #include <opm/material/fluidmatrixinteractions/LinearMaterial.hpp>
#include <opm/material/fluidmatrixinteractions/EffToAbsLaw.hpp> #include <opm/material/fluidmatrixinteractions/EffToAbsLaw.hpp>
#include <opm/material/fluidmatrixinteractions/MaterialTraits.hpp> #include <opm/material/fluidmatrixinteractions/MaterialTraits.hpp>
#include <opm/material/thermal/SomertonHeatConductionLaw.hpp> #include <opm/material/thermal/SomertonThermalConductionLaw.hpp>
#include <opm/material/thermal/ConstantSolidHeatCapLaw.hpp> #include <opm/material/thermal/ConstantSolidHeatCapLaw.hpp>
#include <opm/material/fluidsystems/TwoPhaseImmiscibleFluidSystem.hpp> #include <opm/material/fluidsystems/TwoPhaseImmiscibleFluidSystem.hpp>
#include <opm/material/components/SimpleH2O.hpp> #include <opm/material/components/SimpleH2O.hpp>
@ -127,8 +127,8 @@ public:
// Enable the energy equation // Enable the energy equation
SET_BOOL_PROP(FractureProblem, EnableEnergy, true); SET_BOOL_PROP(FractureProblem, EnableEnergy, true);
// Set the heat conduction law // Set the thermal conduction law
SET_PROP(FractureProblem, HeatConductionLaw) SET_PROP(FractureProblem, ThermalConductionLaw)
{ {
private: private:
typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar; typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar;
@ -136,10 +136,10 @@ private:
public: public:
// define the material law parameterized by absolute saturations // define the material law parameterized by absolute saturations
typedef Opm::SomertonHeatConductionLaw<FluidSystem, Scalar> type; typedef Opm::SomertonThermalConductionLaw<FluidSystem, Scalar> type;
}; };
// set the heat law for the solid phase // set the energy storage law for the solid phase
SET_TYPE_PROP(FractureProblem, SolidEnergyLaw, SET_TYPE_PROP(FractureProblem, SolidEnergyLaw,
Opm::ConstantSolidHeatCapLaw<typename GET_PROP_TYPE(TypeTag, Scalar)>); Opm::ConstantSolidHeatCapLaw<typename GET_PROP_TYPE(TypeTag, Scalar)>);
@ -190,7 +190,7 @@ class FractureProblem : public GET_PROP_TYPE(TypeTag, BaseProblem)
typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar; typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar;
typedef typename GET_PROP_TYPE(TypeTag, MaterialLaw) MaterialLaw; typedef typename GET_PROP_TYPE(TypeTag, MaterialLaw) MaterialLaw;
typedef typename GET_PROP_TYPE(TypeTag, MaterialLawParams) MaterialLawParams; typedef typename GET_PROP_TYPE(TypeTag, MaterialLawParams) MaterialLawParams;
typedef typename GET_PROP_TYPE(TypeTag, HeatConductionLawParams) HeatConductionLawParams; typedef typename GET_PROP_TYPE(TypeTag, ThermalConductionLawParams) ThermalConductionLawParams;
typedef typename GET_PROP_TYPE(TypeTag, SolidEnergyLawParams) SolidEnergyLawParams; typedef typename GET_PROP_TYPE(TypeTag, SolidEnergyLawParams) SolidEnergyLawParams;
typedef typename GET_PROP_TYPE(TypeTag, Model) Model; typedef typename GET_PROP_TYPE(TypeTag, Model) Model;
@ -278,8 +278,8 @@ public:
fracturePorosity_ = 0.25; fracturePorosity_ = 0.25;
fractureWidth_ = 1e-3; // [m] fractureWidth_ = 1e-3; // [m]
// parameters for the somerton law of heat conduction // initialize the energy-related parameters
initThermalParams_(heatCondParams_, matrixPorosity_); initEnergyParams_(thermalConductionParams_, matrixPorosity_);
} }
/*! /*!
@ -420,26 +420,26 @@ public:
{ return fractureWidth_; } { return fractureWidth_; }
/*! /*!
* \brief Return the parameters for the heat storage law of the rock * \copydoc FvBaseMultiPhaseProblem::thermalConductionParams
*/
template <class Context>
const ThermalConductionLawParams&
thermalConductionLawParams(const Context& context OPM_UNUSED,
unsigned spaceIdx OPM_UNUSED,
unsigned timeIdx OPM_UNUSED) const
{ return thermalConductionParams_; }
/*!
* \brief Return the parameters for the energy storage law of the rock
* *
* In this case, we assume the rock-matrix to be granite. * In this case, we assume the rock-matrix to be granite.
*/ */
template <class Context> template <class Context>
const SolidEnergyLawParams& const SolidEnergyLawParams&
solidHeatLawParams(const Context& context OPM_UNUSED, solidEnergyLawParams(const Context& context OPM_UNUSED,
unsigned spaceIdx OPM_UNUSED, unsigned spaceIdx OPM_UNUSED,
unsigned timeIdx OPM_UNUSED) const unsigned timeIdx OPM_UNUSED) const
{ return solidHeatLawParams_; } { return solidEnergyParams_; }
/*!
* \copydoc FvBaseMultiPhaseProblem::heatConductionParams
*/
template <class Context>
const HeatConductionLawParams &
heatConductionLawParams(const Context& context OPM_UNUSED,
unsigned spaceIdx OPM_UNUSED,
unsigned timeIdx OPM_UNUSED) const
{ return heatCondParams_; }
// \} // \}
@ -581,12 +581,12 @@ private:
bool onUpperBoundary_(const GlobalPosition& pos) const bool onUpperBoundary_(const GlobalPosition& pos) const
{ return pos[1] > this->boundingBoxMax()[1] - eps_; } { return pos[1] > this->boundingBoxMax()[1] - eps_; }
void initThermalParams_(HeatConductionLawParams& params, Scalar poro) void initEnergyParams_(ThermalConductionLawParams& params, Scalar poro)
{ {
// assume the volumetric heat capacity of granite // assume the volumetric heat capacity of granite
solidHeatLawParams_.setSolidHeatCapacity(790.0 // specific heat capacity of granite [J / (kg K)] solidEnergyParams_.setSolidHeatCapacity(790.0 // specific heat capacity of granite [J / (kg K)]
* 2700.0); // density of granite [kg/m^3] * 2700.0); // density of granite [kg/m^3]
solidHeatLawParams_.finalize(); solidEnergyParams_.finalize();
Scalar lambdaGranite = 2.8; // [W / (K m)] Scalar lambdaGranite = 2.8; // [W / (K m)]
@ -633,8 +633,8 @@ private:
MaterialLawParams fractureMaterialParams_; MaterialLawParams fractureMaterialParams_;
MaterialLawParams matrixMaterialParams_; MaterialLawParams matrixMaterialParams_;
HeatConductionLawParams heatCondParams_; ThermalConductionLawParams thermalConductionParams_;
SolidEnergyLawParams solidHeatLawParams_; SolidEnergyLawParams solidEnergyParams_;
Scalar temperature_; Scalar temperature_;
Scalar eps_; Scalar eps_;

View File

@ -34,7 +34,6 @@
#include <opm/material/fluidmatrixinteractions/ThreePhaseParkerVanGenuchten.hpp> #include <opm/material/fluidmatrixinteractions/ThreePhaseParkerVanGenuchten.hpp>
#include <opm/material/fluidmatrixinteractions/MaterialTraits.hpp> #include <opm/material/fluidmatrixinteractions/MaterialTraits.hpp>
#include <opm/material/constraintsolvers/ComputeFromReferencePhase.hpp> #include <opm/material/constraintsolvers/ComputeFromReferencePhase.hpp>
#include <opm/material/thermal/SomertonHeatConductionLaw.hpp>
#include <opm/common/Valgrind.hpp> #include <opm/common/Valgrind.hpp>
#include <opm/common/Unused.hpp> #include <opm/common/Unused.hpp>
@ -95,18 +94,6 @@ public:
typedef Opm::ThreePhaseParkerVanGenuchten<Traits> type; typedef Opm::ThreePhaseParkerVanGenuchten<Traits> type;
}; };
// Set the heat conduction law
SET_PROP(InfiltrationBaseProblem, HeatConductionLaw)
{
private:
typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar;
typedef typename GET_PROP_TYPE(TypeTag, FluidSystem) FluidSystem;
public:
// define the material law parameterized by absolute saturations
typedef Opm::SomertonHeatConductionLaw<FluidSystem, Scalar> type;
};
// The default for the end time of the simulation // The default for the end time of the simulation
SET_SCALAR_PROP(InfiltrationBaseProblem, EndTime, 6e3); SET_SCALAR_PROP(InfiltrationBaseProblem, EndTime, 6e3);
@ -318,20 +305,6 @@ public:
unsigned timeIdx OPM_UNUSED) const unsigned timeIdx OPM_UNUSED) const
{ return materialParams_; } { return materialParams_; }
/*!
* \copydoc FvBaseMultiPhaseProblem::heatCapacitySolid
*
* In this case, we assume the rock-matrix to be quartz.
*/
template <class Context>
Scalar heatCapacitySolid(const Context& context OPM_UNUSED,
unsigned spaceIdx OPM_UNUSED,
unsigned timeIdx OPM_UNUSED) const
{
return 850. // specific heat capacity [J / (kg K)]
* 2650.; // density of sand [kg/m^3]
}
//! \} //! \}
/*! /*!

View File

@ -37,7 +37,8 @@
#include <opm/material/fluidmatrixinteractions/EffToAbsLaw.hpp> #include <opm/material/fluidmatrixinteractions/EffToAbsLaw.hpp>
#include <opm/material/fluidmatrixinteractions/LinearMaterial.hpp> #include <opm/material/fluidmatrixinteractions/LinearMaterial.hpp>
#include <opm/material/fluidmatrixinteractions/MaterialTraits.hpp> #include <opm/material/fluidmatrixinteractions/MaterialTraits.hpp>
#include <opm/material/thermal/SomertonHeatConductionLaw.hpp> #include <opm/material/thermal/ConstantSolidHeatCapLaw.hpp>
#include <opm/material/thermal/SomertonThermalConductionLaw.hpp>
#include <opm/common/Unused.hpp> #include <opm/common/Unused.hpp>
#include <dune/grid/yaspgrid.hh> #include <dune/grid/yaspgrid.hh>
@ -88,8 +89,8 @@ public:
typedef Opm::EffToAbsLaw<EffMaterialLaw> type; typedef Opm::EffToAbsLaw<EffMaterialLaw> type;
}; };
// Set the heat conduction law // Set the thermal conduction law
SET_PROP(ObstacleBaseProblem, HeatConductionLaw) SET_PROP(ObstacleBaseProblem, ThermalConductionLaw)
{ {
private: private:
typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar; typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar;
@ -97,9 +98,13 @@ private:
public: public:
// define the material law parameterized by absolute saturations // define the material law parameterized by absolute saturations
typedef Opm::SomertonHeatConductionLaw<FluidSystem, Scalar> type; typedef Opm::SomertonThermalConductionLaw<FluidSystem, Scalar> type;
}; };
// set the energy storage law for the solid phase
SET_TYPE_PROP(ObstacleBaseProblem, SolidEnergyLaw,
Opm::ConstantSolidHeatCapLaw<typename GET_PROP_TYPE(TypeTag, Scalar)>);
// Enable gravity // Enable gravity
SET_BOOL_PROP(ObstacleBaseProblem, EnableGravity, true); SET_BOOL_PROP(ObstacleBaseProblem, EnableGravity, true);
@ -155,8 +160,8 @@ class ObstacleProblem : public GET_PROP_TYPE(TypeTag, BaseProblem)
typedef typename GET_PROP_TYPE(TypeTag, FluidSystem) FluidSystem; typedef typename GET_PROP_TYPE(TypeTag, FluidSystem) FluidSystem;
typedef typename GET_PROP_TYPE(TypeTag, MaterialLaw) MaterialLaw; typedef typename GET_PROP_TYPE(TypeTag, MaterialLaw) MaterialLaw;
typedef typename GET_PROP_TYPE(TypeTag, MaterialLawParams) MaterialLawParams; typedef typename GET_PROP_TYPE(TypeTag, MaterialLawParams) MaterialLawParams;
typedef typename GET_PROP_TYPE(TypeTag, HeatConductionLaw) HeatConductionLaw; typedef typename GET_PROP_TYPE(TypeTag, ThermalConductionLawParams) ThermalConductionLawParams;
typedef typename HeatConductionLaw::Params HeatConductionLawParams; typedef typename GET_PROP_TYPE(TypeTag, SolidEnergyLawParams) SolidEnergyLawParams;
enum { enum {
// Grid and world dimension // Grid and world dimension
@ -238,9 +243,14 @@ public:
fineMaterialParams_.finalize(); fineMaterialParams_.finalize();
coarseMaterialParams_.finalize(); coarseMaterialParams_.finalize();
// parameters for the somerton law of heat conduction // parameters for the somerton law of thermal conduction
computeHeatCondParams_(fineHeatCondParams_, finePorosity_); computeThermalCondParams_(fineThermalCondParams_, finePorosity_);
computeHeatCondParams_(coarseHeatCondParams_, coarsePorosity_); computeThermalCondParams_(coarseThermalCondParams_, coarsePorosity_);
// assume constant volumetric heat capacity and granite
solidEnergyLawParams_.setSolidHeatCapacity(790.0 // specific heat capacity of granite [J / (kg K)]
* 2700.0); // density of granite [kg/m^3]
solidEnergyLawParams_.finalize();
initFluidStates_(); initFluidStates_();
} }
@ -350,33 +360,30 @@ public:
} }
/*! /*!
* \copydoc FvBaseMultiPhaseProblem::heatCapacitySolid * \brief Return the parameters for the energy storage law of the rock
* *
* For this problem, we assume that the solid phase of the porous * In this case, we assume the rock-matrix to be granite.
* medium is granite.
*/ */
template <class Context> template <class Context>
Scalar heatCapacitySolid(const Context& context OPM_UNUSED, const SolidEnergyLawParams&
unsigned spaceIdx OPM_UNUSED, solidEnergyLawParams(const Context& context OPM_UNUSED,
unsigned timeIdx OPM_UNUSED) const unsigned spaceIdx OPM_UNUSED,
{ unsigned timeIdx OPM_UNUSED) const
return 790 // specific heat capacity of granite [J / (kg K)] { return solidEnergyLawParams_; }
* 2700; // density of granite [kg/m^3]
}
/*! /*!
* \copydoc FvBaseMultiPhaseProblem::heatConductionParams * \copydoc FvBaseMultiPhaseProblem::thermalConductionParams
*/ */
template <class Context> template <class Context>
const HeatConductionLawParams & const ThermalConductionLawParams &
heatConductionParams(const Context& context, thermalConductionParams(const Context& context,
unsigned spaceIdx, unsigned spaceIdx,
unsigned timeIdx) const unsigned timeIdx) const
{ {
const GlobalPosition& pos = context.pos(spaceIdx, timeIdx); const GlobalPosition& pos = context.pos(spaceIdx, timeIdx);
if (isFineMaterial_(pos)) if (isFineMaterial_(pos))
return fineHeatCondParams_; return fineThermalCondParams_;
return coarseHeatCondParams_; return coarseThermalCondParams_;
} }
//! \} //! \}
@ -530,7 +537,7 @@ private:
/*setEnthalpy=*/false); /*setEnthalpy=*/false);
} }
void computeHeatCondParams_(HeatConductionLawParams& params, Scalar poro) void computeThermalCondParams_(ThermalConductionLawParams& params, Scalar poro)
{ {
Scalar lambdaWater = 0.6; Scalar lambdaWater = 0.6;
Scalar lambdaGranite = 2.8; Scalar lambdaGranite = 2.8;
@ -553,8 +560,9 @@ private:
MaterialLawParams fineMaterialParams_; MaterialLawParams fineMaterialParams_;
MaterialLawParams coarseMaterialParams_; MaterialLawParams coarseMaterialParams_;
HeatConductionLawParams fineHeatCondParams_; ThermalConductionLawParams fineThermalCondParams_;
HeatConductionLawParams coarseHeatCondParams_; ThermalConductionLawParams coarseThermalCondParams_;
SolidEnergyLawParams solidEnergyLawParams_;
Opm::CompositionalFluidState<Scalar, FluidSystem> inletFluidState_; Opm::CompositionalFluidState<Scalar, FluidSystem> inletFluidState_;
Opm::CompositionalFluidState<Scalar, FluidSystem> outletFluidState_; Opm::CompositionalFluidState<Scalar, FluidSystem> outletFluidState_;

View File

@ -38,8 +38,8 @@
#include <opm/material/fluidmatrixinteractions/RegularizedBrooksCorey.hpp> #include <opm/material/fluidmatrixinteractions/RegularizedBrooksCorey.hpp>
#include <opm/material/fluidmatrixinteractions/EffToAbsLaw.hpp> #include <opm/material/fluidmatrixinteractions/EffToAbsLaw.hpp>
#include <opm/material/fluidmatrixinteractions/MaterialTraits.hpp> #include <opm/material/fluidmatrixinteractions/MaterialTraits.hpp>
#include <opm/material/thermal/SomertonHeatConductionLaw.hpp>
#include <opm/material/thermal/ConstantSolidHeatCapLaw.hpp> #include <opm/material/thermal/ConstantSolidHeatCapLaw.hpp>
#include <opm/material/thermal/SomertonThermalConductionLaw.hpp>
#include <opm/material/constraintsolvers/ComputeFromReferencePhase.hpp> #include <opm/material/constraintsolvers/ComputeFromReferencePhase.hpp>
#include <opm/common/Unused.hpp> #include <opm/common/Unused.hpp>
@ -88,8 +88,8 @@ public:
typedef Opm::EffToAbsLaw<EffMaterialLaw> type; typedef Opm::EffToAbsLaw<EffMaterialLaw> type;
}; };
// Set the heat conduction law // Set the thermal conduction law
SET_PROP(WaterAirBaseProblem, HeatConductionLaw) SET_PROP(WaterAirBaseProblem, ThermalConductionLaw)
{ {
private: private:
typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar; typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar;
@ -97,10 +97,10 @@ private:
public: public:
// define the material law parameterized by absolute saturations // define the material law parameterized by absolute saturations
typedef Opm::SomertonHeatConductionLaw<FluidSystem, Scalar> type; typedef Opm::SomertonThermalConductionLaw<FluidSystem, Scalar> type;
}; };
// set the heat law for the solid phase // set the energy storage law for the solid phase
SET_TYPE_PROP(WaterAirBaseProblem, SolidEnergyLaw, SET_TYPE_PROP(WaterAirBaseProblem, SolidEnergyLaw,
Opm::ConstantSolidHeatCapLaw<typename GET_PROP_TYPE(TypeTag, Scalar)>); Opm::ConstantSolidHeatCapLaw<typename GET_PROP_TYPE(TypeTag, Scalar)>);
@ -211,7 +211,7 @@ class WaterAirProblem : public GET_PROP_TYPE(TypeTag, BaseProblem)
typedef typename GET_PROP_TYPE(TypeTag, Model) Model; typedef typename GET_PROP_TYPE(TypeTag, Model) Model;
typedef typename GET_PROP_TYPE(TypeTag, MaterialLaw) MaterialLaw; typedef typename GET_PROP_TYPE(TypeTag, MaterialLaw) MaterialLaw;
typedef typename GET_PROP_TYPE(TypeTag, MaterialLawParams) MaterialLawParams; typedef typename GET_PROP_TYPE(TypeTag, MaterialLawParams) MaterialLawParams;
typedef typename GET_PROP_TYPE(TypeTag, HeatConductionLawParams) HeatConductionLawParams; typedef typename GET_PROP_TYPE(TypeTag, ThermalConductionLawParams) ThermalConductionLawParams;
typedef typename GET_PROP_TYPE(TypeTag, SolidEnergyLawParams) SolidEnergyLawParams; typedef typename GET_PROP_TYPE(TypeTag, SolidEnergyLawParams) SolidEnergyLawParams;
typedef typename GridView::ctype CoordScalar; typedef typename GridView::ctype CoordScalar;
@ -265,14 +265,14 @@ public:
fineMaterialParams_.finalize(); fineMaterialParams_.finalize();
coarseMaterialParams_.finalize(); coarseMaterialParams_.finalize();
// parameters for the somerton law of heat conduction // parameters for the somerton law of thermal conduction
computeHeatCondParams_(fineHeatCondParams_, finePorosity_); computeThermalCondParams_(fineThermalCondParams_, finePorosity_);
computeHeatCondParams_(coarseHeatCondParams_, coarsePorosity_); computeThermalCondParams_(coarseThermalCondParams_, coarsePorosity_);
// assume the volumetric heat capacity of granite // assume constant volumetric heat capacity and granite
solidHeatLawParams_.setSolidHeatCapacity(790.0 // specific heat capacity of granite [J / (kg K)] solidEnergyLawParams_.setSolidHeatCapacity(790.0 // specific heat capacity of granite [J / (kg K)]
* 2700.0); // density of granite [kg/m^3] * 2700.0); // density of granite [kg/m^3]
solidHeatLawParams_.finalize(); solidEnergyLawParams_.finalize();
} }
/*! /*!
@ -358,30 +358,30 @@ public:
} }
/*! /*!
* \brief Return the parameters for the heat storage law of the rock * \brief Return the parameters for the energy storage law of the rock
* *
* In this case, we assume the rock-matrix to be granite. * In this case, we assume the rock-matrix to be granite.
*/ */
template <class Context> template <class Context>
const SolidEnergyLawParams& const SolidEnergyLawParams&
solidHeatLawParams(const Context& context OPM_UNUSED, solidEnergyLawParams(const Context& context OPM_UNUSED,
unsigned spaceIdx OPM_UNUSED, unsigned spaceIdx OPM_UNUSED,
unsigned timeIdx OPM_UNUSED) const unsigned timeIdx OPM_UNUSED) const
{ return solidHeatLawParams_; } { return solidEnergyLawParams_; }
/*! /*!
* \copydoc FvBaseMultiPhaseProblem::heatConductionParams * \copydoc FvBaseMultiPhaseProblem::thermalConductionParams
*/ */
template <class Context> template <class Context>
const HeatConductionLawParams& const ThermalConductionLawParams&
heatConductionLawParams(const Context& context, thermalConductionLawParams(const Context& context,
unsigned spaceIdx, unsigned spaceIdx,
unsigned timeIdx) const unsigned timeIdx) const
{ {
const GlobalPosition& pos = context.pos(spaceIdx, timeIdx); const GlobalPosition& pos = context.pos(spaceIdx, timeIdx);
if (isFineMaterial_(pos)) if (isFineMaterial_(pos))
return fineHeatCondParams_; return fineThermalCondParams_;
return coarseHeatCondParams_; return coarseThermalCondParams_;
} }
//! \} //! \}
@ -530,7 +530,7 @@ private:
CFRP::solve(fs, paramCache, liquidPhaseIdx, /*setViscosity=*/false, /*setEnthalpy=*/true); CFRP::solve(fs, paramCache, liquidPhaseIdx, /*setViscosity=*/false, /*setEnthalpy=*/true);
} }
void computeHeatCondParams_(HeatConductionLawParams& params, Scalar poro) void computeThermalCondParams_(ThermalConductionLawParams& params, Scalar poro)
{ {
Scalar lambdaGranite = 2.8; // [W / (K m)] Scalar lambdaGranite = 2.8; // [W / (K m)]
@ -577,9 +577,9 @@ private:
MaterialLawParams fineMaterialParams_; MaterialLawParams fineMaterialParams_;
MaterialLawParams coarseMaterialParams_; MaterialLawParams coarseMaterialParams_;
HeatConductionLawParams fineHeatCondParams_; ThermalConductionLawParams fineThermalCondParams_;
HeatConductionLawParams coarseHeatCondParams_; ThermalConductionLawParams coarseThermalCondParams_;
SolidEnergyLawParams solidHeatLawParams_; SolidEnergyLawParams solidEnergyLawParams_;
Scalar maxDepth_; Scalar maxDepth_;
Scalar eps_; Scalar eps_;