adapt to the refactoring of the thermal laws in opm-material

This commit is contained in:
Andreas Lauser 2017-12-11 12:58:30 +01:00
parent c0f013e25e
commit db2977b0bf
5 changed files with 53 additions and 31 deletions

View File

@ -40,7 +40,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/heatconduction/Somerton.hpp> #include <opm/material/thermal/SomertonHeatConductionLaw.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>
#include <opm/common/Unused.hpp> #include <opm/common/Unused.hpp>
@ -131,9 +132,13 @@ private:
public: public:
// define the material law parameterized by absolute saturations // define the material law parameterized by absolute saturations
typedef Opm::Somerton<FluidSystem, Scalar> type; typedef Opm::SomertonHeatConductionLaw<FluidSystem, Scalar> type;
}; };
// set the heat law for the solid phase
SET_TYPE_PROP(Co2InjectionBaseProblem, SolidEnergyLaw,
Opm::ConstantSolidHeatCapLaw<typename GET_PROP_TYPE(TypeTag, Scalar)>);
// Use the algebraic multi-grid linear solver for this problem // Use the algebraic multi-grid linear solver for this problem
SET_TAG_PROP(Co2InjectionBaseProblem, LinearSolverSplice, ParallelAmgLinearSolver); SET_TAG_PROP(Co2InjectionBaseProblem, LinearSolverSplice, ParallelAmgLinearSolver);
@ -217,9 +222,10 @@ class Co2InjectionProblem : public GET_PROP_TYPE(TypeTag, BaseProblem)
typedef typename GET_PROP_TYPE(TypeTag, BoundaryRateVector) BoundaryRateVector; typedef typename GET_PROP_TYPE(TypeTag, BoundaryRateVector) BoundaryRateVector;
typedef typename GET_PROP_TYPE(TypeTag, MaterialLaw) MaterialLaw; typedef typename GET_PROP_TYPE(TypeTag, MaterialLaw) MaterialLaw;
typedef typename GET_PROP_TYPE(TypeTag, Simulator) Simulator; typedef typename GET_PROP_TYPE(TypeTag, Simulator) Simulator;
typedef typename GET_PROP_TYPE(TypeTag, MaterialLawParams) MaterialLawParams;
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, HeatConductionLaw) HeatConductionLaw; typedef typename GET_PROP_TYPE(TypeTag, HeatConductionLaw) HeatConductionLaw;
typedef typename GET_PROP_TYPE(TypeTag, SolidEnergyLawParams) SolidEnergyLawParams;
typedef typename HeatConductionLaw::Params HeatConductionLawParams; typedef typename HeatConductionLaw::Params HeatConductionLawParams;
typedef Opm::MathToolbox<Evaluation> Toolbox; typedef Opm::MathToolbox<Evaluation> Toolbox;
@ -292,6 +298,11 @@ public:
// parameters for the somerton law of heat conduction // parameters for the somerton law of heat conduction
computeHeatCondParams_(fineHeatCondParams_, finePorosity_); computeHeatCondParams_(fineHeatCondParams_, finePorosity_);
computeHeatCondParams_(coarseHeatCondParams_, coarsePorosity_); computeHeatCondParams_(coarseHeatCondParams_, coarsePorosity_);
// assume the volumetric heat capacity of granite
solidHeatLawParams_.setSolidHeatCapacity(790.0 // specific heat capacity of granite [J / (kg K)]
* 2700.0); // density of granite [kg/m^3]
solidHeatLawParams_.finalize();
} }
/*! /*!
@ -422,25 +433,25 @@ public:
} }
/*! /*!
* \copydoc FvBaseMultiPhaseProblem::heatCapacitySolid * \brief Return the parameters for the heat 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>
Scalar heatCapacitySolid(const Context& context OPM_UNUSED, const SolidEnergyLawParams&
solidHeatLawParams(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 790 // specific heat capacity of granite [J / (kg K)]
* 2700; // density of granite [kg/m^3]
}
/*! /*!
* \copydoc FvBaseMultiPhaseProblem::heatConductionParams * \copydoc FvBaseMultiPhaseProblem::heatConductionParams
*/ */
template <class Context> template <class Context>
const HeatConductionLawParams & const HeatConductionLawParams &
heatConductionParams(const Context& context, unsigned spaceIdx, unsigned timeIdx) const heatConductionLawParams(const Context& context,
unsigned spaceIdx,
unsigned timeIdx) const
{ {
const GlobalPosition& pos = context.pos(spaceIdx, timeIdx); const GlobalPosition& pos = context.pos(spaceIdx, timeIdx);
if (isFineMaterial_(pos)) if (isFineMaterial_(pos))
@ -624,6 +635,7 @@ private:
HeatConductionLawParams fineHeatCondParams_; HeatConductionLawParams fineHeatCondParams_;
HeatConductionLawParams coarseHeatCondParams_; HeatConductionLawParams coarseHeatCondParams_;
SolidEnergyLawParams solidHeatLawParams_;
Scalar temperature_; Scalar temperature_;
Scalar maxDepth_; Scalar maxDepth_;

View File

@ -35,7 +35,7 @@
#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/heatconduction/Somerton.hpp> #include <opm/material/thermal/SomertonHeatConductionLaw.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>
@ -104,7 +104,7 @@ private:
public: public:
// define the material law parameterized by absolute saturations // define the material law parameterized by absolute saturations
typedef Opm::Somerton<FluidSystem, Scalar> type; typedef Opm::SomertonHeatConductionLaw<FluidSystem, Scalar> type;
}; };
// The default for the end time of the simulation // The default for the end time of the simulation

View File

@ -34,7 +34,7 @@
#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/heatconduction/Somerton.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>
@ -104,7 +104,7 @@ private:
public: public:
// define the material law parameterized by absolute saturations // define the material law parameterized by absolute saturations
typedef Opm::Somerton<FluidSystem, Scalar> type; typedef Opm::SomertonHeatConductionLaw<FluidSystem, Scalar> type;
}; };
// The default for the end time of the simulation // The default for the end time of the simulation

View File

@ -37,7 +37,7 @@
#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/heatconduction/Somerton.hpp> #include <opm/material/thermal/SomertonHeatConductionLaw.hpp>
#include <opm/common/Unused.hpp> #include <opm/common/Unused.hpp>
#include <dune/grid/yaspgrid.hh> #include <dune/grid/yaspgrid.hh>
@ -97,7 +97,7 @@ private:
public: public:
// define the material law parameterized by absolute saturations // define the material law parameterized by absolute saturations
typedef Opm::Somerton<FluidSystem, Scalar> type; typedef Opm::SomertonHeatConductionLaw<FluidSystem, Scalar> type;
}; };
// Enable gravity // Enable gravity

View File

@ -38,7 +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/heatconduction/Somerton.hpp> #include <opm/material/thermal/SomertonHeatConductionLaw.hpp>
#include <opm/material/thermal/ConstantSolidHeatCapLaw.hpp>
#include <opm/material/constraintsolvers/ComputeFromReferencePhase.hpp> #include <opm/material/constraintsolvers/ComputeFromReferencePhase.hpp>
#include <opm/common/Unused.hpp> #include <opm/common/Unused.hpp>
@ -96,9 +97,13 @@ private:
public: public:
// define the material law parameterized by absolute saturations // define the material law parameterized by absolute saturations
typedef Opm::Somerton<FluidSystem, Scalar> type; typedef Opm::SomertonHeatConductionLaw<FluidSystem, Scalar> type;
}; };
// set the heat law for the solid phase
SET_TYPE_PROP(WaterAirBaseProblem, SolidEnergyLaw,
Opm::ConstantSolidHeatCapLaw<typename GET_PROP_TYPE(TypeTag, Scalar)>);
// Set the fluid system. in this case, we use the one which describes // Set the fluid system. in this case, we use the one which describes
// air and water // air and water
SET_TYPE_PROP(WaterAirBaseProblem, FluidSystem, SET_TYPE_PROP(WaterAirBaseProblem, FluidSystem,
@ -206,8 +211,8 @@ 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, HeatConductionLaw) HeatConductionLaw;
typedef typename GET_PROP_TYPE(TypeTag, HeatConductionLawParams) HeatConductionLawParams; typedef typename GET_PROP_TYPE(TypeTag, HeatConductionLawParams) HeatConductionLawParams;
typedef typename GET_PROP_TYPE(TypeTag, SolidEnergyLawParams) SolidEnergyLawParams;
typedef typename GridView::ctype CoordScalar; typedef typename GridView::ctype CoordScalar;
typedef Dune::FieldVector<CoordScalar, dimWorld> GlobalPosition; typedef Dune::FieldVector<CoordScalar, dimWorld> GlobalPosition;
@ -263,6 +268,11 @@ public:
// parameters for the somerton law of heat conduction // parameters for the somerton law of heat conduction
computeHeatCondParams_(fineHeatCondParams_, finePorosity_); computeHeatCondParams_(fineHeatCondParams_, finePorosity_);
computeHeatCondParams_(coarseHeatCondParams_, coarsePorosity_); computeHeatCondParams_(coarseHeatCondParams_, coarsePorosity_);
// assume the volumetric heat capacity of granite
solidHeatLawParams_.setSolidHeatCapacity(790.0 // specific heat capacity of granite [J / (kg K)]
* 2700.0); // density of granite [kg/m^3]
solidHeatLawParams_.finalize();
} }
/*! /*!
@ -348,26 +358,25 @@ public:
} }
/*! /*!
* \copydoc FvBaseMultiPhaseProblem::heatCapacitySolid * \brief Return the parameters for the heat 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>
Scalar heatCapacitySolid(const Context& context OPM_UNUSED, const SolidEnergyLawParams&
solidHeatLawParams(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
790 // specific heat capacity of granite [J / (kg K)]
* 2700; // density of granite [kg/m^3]
}
/*! /*!
* \copydoc FvBaseMultiPhaseProblem::heatConductionParams * \copydoc FvBaseMultiPhaseProblem::heatConductionParams
*/ */
template <class Context> template <class Context>
const HeatConductionLawParams& const HeatConductionLawParams&
heatConductionParams(const Context& context, unsigned spaceIdx, unsigned timeIdx) const heatConductionLawParams(const Context& context,
unsigned spaceIdx,
unsigned timeIdx) const
{ {
const GlobalPosition& pos = context.pos(spaceIdx, timeIdx); const GlobalPosition& pos = context.pos(spaceIdx, timeIdx);
if (isFineMaterial_(pos)) if (isFineMaterial_(pos))
@ -570,6 +579,7 @@ private:
HeatConductionLawParams fineHeatCondParams_; HeatConductionLawParams fineHeatCondParams_;
HeatConductionLawParams coarseHeatCondParams_; HeatConductionLawParams coarseHeatCondParams_;
SolidEnergyLawParams solidHeatLawParams_;
Scalar maxDepth_; Scalar maxDepth_;
Scalar eps_; Scalar eps_;