87struct MaterialLaw<TypeTag, TTag::DiffusionBaseProblem>
90 using Scalar = GetPropType<TypeTag, Properties::Scalar>;
91 using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>;
93 static_assert(FluidSystem::numPhases == 2,
94 "A fluid system with two phases is required "
97 using Traits = Opm::TwoPhaseMaterialTraits<Scalar,
98 FluidSystem::liquidPhaseIdx,
99 FluidSystem::gasPhaseIdx>;
102 using type = Opm::LinearMaterial<Traits>;
172 using ParentType = GetPropType<TypeTag, Properties::BaseProblem>;
174 using Scalar = GetPropType<TypeTag, Properties::Scalar>;
175 using GridView = GetPropType<TypeTag, Properties::GridView>;
176 using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>;
177 using PrimaryVariables = GetPropType<TypeTag, Properties::PrimaryVariables>;
178 using Simulator = GetPropType<TypeTag, Properties::Simulator>;
179 using Model = GetPropType<TypeTag, Properties::Model>;
183 numPhases = FluidSystem::numPhases,
186 liquidPhaseIdx = FluidSystem::liquidPhaseIdx,
187 gasPhaseIdx = FluidSystem::gasPhaseIdx,
190 H2OIdx = FluidSystem::H2OIdx,
191 N2Idx = FluidSystem::N2Idx,
194 dim = GridView::dimension,
195 dimWorld = GridView::dimensionworld
198 using EqVector = GetPropType<TypeTag, Properties::EqVector>;
199 using RateVector = GetPropType<TypeTag, Properties::RateVector>;
200 using BoundaryRateVector = GetPropType<TypeTag, Properties::BoundaryRateVector>;
202 using MaterialLaw = GetPropType<TypeTag, Properties::MaterialLaw>;
203 using MaterialLawParams = GetPropType<TypeTag, Properties::MaterialLawParams>;
205 using CoordScalar =
typename GridView::ctype;
206 using GlobalPosition = Dune::FieldVector<CoordScalar, dimWorld>;
208 using DimMatrix = Dune::FieldMatrix<Scalar, dimWorld, dimWorld>;
215 : ParentType(simulator)
223 ParentType::finishInit();
227 temperature_ = 273.15 + 20.0;
229 materialParams_.finalize();
231 K_ = this->toDimMatrix_(1e-12);
233 setupInitialFluidStates_();
245 {
return std::string(
"diffusion_") + Model::name(); }
253 this->model().checkConservativeness();
257 this->model().globalStorage(storage);
260 if (this->gridView().comm().rank() == 0) {
261 std::cout <<
"Storage: " << storage << std::endl << std::flush;
276 template <
class Context>
285 template <
class Context>
294 template <
class Context>
295 const MaterialLawParams&
299 {
return materialParams_; }
304 template <
class Context>
308 {
return temperature_; }
322 template <
class Context>
327 { values.setNoFlow(); }
339 template <
class Context>
341 const Context& context,
343 unsigned timeIdx)
const
345 const auto& pos = context.pos(spaceIdx, timeIdx);
346 if (onLeftSide_(pos))
347 values.assignNaive(leftInitialFluidState_);
349 values.assignNaive(rightInitialFluidState_);
358 template <
class Context>
363 { rate = Scalar(0.0); }
368 bool onLeftSide_(
const GlobalPosition& pos)
const
369 {
return pos[0] < (this->boundingBoxMin()[0] + this->boundingBoxMax()[0]) / 2; }
371 void setupInitialFluidStates_()
374 leftInitialFluidState_.setTemperature(temperature_);
377 leftInitialFluidState_.setSaturation(liquidPhaseIdx, Sl);
378 leftInitialFluidState_.setSaturation(gasPhaseIdx, 1 - Sl);
381 leftInitialFluidState_.setPressure(liquidPhaseIdx, p);
382 leftInitialFluidState_.setPressure(gasPhaseIdx, p);
385 leftInitialFluidState_.setMoleFraction(gasPhaseIdx, H2OIdx, xH2O);
386 leftInitialFluidState_.setMoleFraction(gasPhaseIdx, N2Idx, 1 - xH2O);
388 using CFRP = Opm::ComputeFromReferencePhase<Scalar, FluidSystem>;
389 typename FluidSystem::template ParameterCache<Scalar> paramCache;
390 CFRP::solve(leftInitialFluidState_, paramCache, gasPhaseIdx,
394 rightInitialFluidState_.assign(leftInitialFluidState_);
396 rightInitialFluidState_.setMoleFraction(gasPhaseIdx, H2OIdx, xH2O);
397 rightInitialFluidState_.setMoleFraction(gasPhaseIdx, N2Idx, 1 - xH2O);
398 CFRP::solve(rightInitialFluidState_, paramCache, gasPhaseIdx,
403 MaterialLawParams materialParams_;
405 Opm::CompositionalFluidState<Scalar, FluidSystem> leftInitialFluidState_;
406 Opm::CompositionalFluidState<Scalar, FluidSystem> rightInitialFluidState_;