Merge pull request #264 from andlaus/thermal_renames_and_fixes

consistently rename "heat conduction" to "thermal conduction" and use "solid energy" laws
This commit is contained in:
Andreas Lauser
2018-01-05 13:59:24 +01:00
committed by GitHub
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&
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 solidEnergyLawParams_; }
return 790 // specific heat capacity of granite [J / (kg K)]
* 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_;