263 ParentType::finishInit();
265 temperature_ = EWOMS_GET_PARAM(TypeTag, Scalar, Temperature);
266 maxDepth_ = EWOMS_GET_PARAM(TypeTag, Scalar, MaxDepth);
267 wellWidth_ = EWOMS_GET_PARAM(TypeTag, Scalar, WellWidth);
269 std::vector<std::pair<Scalar, Scalar> > Bo = {
271 { 1.82504e+06, 1.15 },
272 { 3.54873e+06, 1.207 },
273 { 6.99611e+06, 1.295 },
274 { 1.38909e+07, 1.435 },
275 { 1.73382e+07, 1.5 },
276 { 2.07856e+07, 1.565 },
277 { 2.76804e+07, 1.695 },
278 { 3.45751e+07, 1.827 }
280 std::vector<std::pair<Scalar, Scalar> > muo = {
282 { 1.82504e+06, 0.000975 },
283 { 3.54873e+06, 0.00091 },
284 { 6.99611e+06, 0.00083 },
285 { 1.38909e+07, 0.000695 },
286 { 1.73382e+07, 0.000641 },
287 { 2.07856e+07, 0.000594 },
288 { 2.76804e+07, 0.00051 },
289 { 3.45751e+07, 0.000449 }
291 std::vector<std::pair<Scalar, Scalar> > Rs = {
292 { 101353, 0.178108 },
293 { 1.82504e+06, 16.1187 },
294 { 3.54873e+06, 32.0594 },
295 { 6.99611e+06, 66.0779 },
296 { 1.38909e+07, 113.276 },
297 { 1.73382e+07, 138.033 },
298 { 2.07856e+07, 165.64 },
299 { 2.76804e+07, 226.197 },
300 { 3.45751e+07, 288.178 }
302 std::vector<std::pair<Scalar, Scalar> > Bg = {
304 { 1.82504e+06, 0.0678972 },
305 { 3.54873e+06, 0.0352259 },
306 { 6.99611e+06, 0.0179498 },
307 { 1.38909e+07, 0.00906194 },
308 { 1.73382e+07, 0.00726527 },
309 { 2.07856e+07, 0.00606375 },
310 { 2.76804e+07, 0.00455343 },
311 { 3.45751e+07, 0.00364386 },
312 { 6.21542e+07, 0.00216723 }
314 std::vector<std::pair<Scalar, Scalar> > mug = {
316 { 1.82504e+06, 9.6e-06 },
317 { 3.54873e+06, 1.12e-05 },
318 { 6.99611e+06, 1.4e-05 },
319 { 1.38909e+07, 1.89e-05 },
320 { 1.73382e+07, 2.08e-05 },
321 { 2.07856e+07, 2.28e-05 },
322 { 2.76804e+07, 2.68e-05 },
323 { 3.45751e+07, 3.09e-05 },
324 { 6.21542e+07, 4.7e-05 }
327 Scalar rhoRefO = 786.0;
328 Scalar rhoRefG = 0.97;
329 Scalar rhoRefW = 1037.0;
330 FluidSystem::initBegin(1);
331 FluidSystem::setEnableDissolvedGas(
true);
332 FluidSystem::setEnableVaporizedOil(
false);
333 FluidSystem::setReferenceDensities(rhoRefO, rhoRefW, rhoRefG, 0);
335 Opm::GasPvtMultiplexer<Scalar> *gasPvt =
new Opm::GasPvtMultiplexer<Scalar>;
336 gasPvt->setApproach(GasPvtApproach::DryGas);
337 auto& dryGasPvt = gasPvt->template getRealPvt<GasPvtApproach::DryGas>();
338 dryGasPvt.setNumRegions(1);
339 dryGasPvt.setReferenceDensities(0, rhoRefO, rhoRefG, rhoRefW);
340 dryGasPvt.setGasFormationVolumeFactor(0, Bg);
341 dryGasPvt.setGasViscosity(0, mug);
343 Opm::OilPvtMultiplexer<Scalar> *oilPvt =
new Opm::OilPvtMultiplexer<Scalar>;
344 oilPvt->setApproach(OilPvtApproach::LiveOil);
345 auto& liveOilPvt = oilPvt->template getRealPvt<OilPvtApproach::LiveOil>();
346 liveOilPvt.setNumRegions(1);
347 liveOilPvt.setReferenceDensities(0, rhoRefO, rhoRefG, rhoRefW);
348 liveOilPvt.setSaturatedOilGasDissolutionFactor(0, Rs);
349 liveOilPvt.setSaturatedOilFormationVolumeFactor(0, Bo);
350 liveOilPvt.setSaturatedOilViscosity(0, muo);
352 Opm::WaterPvtMultiplexer<Scalar> *waterPvt =
new Opm::WaterPvtMultiplexer<Scalar>;
353 waterPvt->setApproach(WaterPvtApproach::ConstantCompressibilityWater);
354 auto& ccWaterPvt = waterPvt->template getRealPvt<WaterPvtApproach::ConstantCompressibilityWater>();
355 ccWaterPvt.setNumRegions(1);
356 ccWaterPvt.setReferenceDensities(0, rhoRefO, rhoRefG, rhoRefW);
357 ccWaterPvt.setViscosity(0, 9.6e-4);
358 ccWaterPvt.setCompressibility(0, 1.450377e-10);
364 using GasPvtSharedPtr = std::shared_ptr<Opm::GasPvtMultiplexer<Scalar> >;
365 FluidSystem::setGasPvt(GasPvtSharedPtr(gasPvt));
367 using OilPvtSharedPtr = std::shared_ptr<Opm::OilPvtMultiplexer<Scalar> >;
368 FluidSystem::setOilPvt(OilPvtSharedPtr(oilPvt));
370 using WaterPvtSharedPtr = std::shared_ptr<Opm::WaterPvtMultiplexer<Scalar> >;
371 FluidSystem::setWaterPvt(WaterPvtSharedPtr(waterPvt));
373 FluidSystem::initEnd();
379 fineK_ = this->toDimMatrix_(1e-12);
380 coarseK_ = this->toDimMatrix_(1e-11);
384 coarsePorosity_ = 0.3;
386 for (
unsigned phaseIdx = 0; phaseIdx < numPhases; ++phaseIdx) {
387 fineMaterialParams_.setPcMinSat(phaseIdx, 0.0);
388 fineMaterialParams_.setPcMaxSat(phaseIdx, 0.0);
390 coarseMaterialParams_.setPcMinSat(phaseIdx, 0.0);
391 coarseMaterialParams_.setPcMaxSat(phaseIdx, 0.0);
395 fineMaterialParams_.finalize();
396 coarseMaterialParams_.finalize();
398 materialParams_.resize(this->model().numGridDof());
399 ElementContext elemCtx(this->simulator());
400 auto eIt = this->simulator().gridView().template begin<0>();
401 const auto& eEndIt = this->simulator().gridView().template end<0>();
402 for (; eIt != eEndIt; ++eIt) {
403 elemCtx.updateStencil(*eIt);
404 size_t nDof = elemCtx.numPrimaryDof(0);
405 for (
unsigned dofIdx = 0; dofIdx < nDof; ++ dofIdx) {
406 unsigned globalDofIdx = elemCtx.globalSpaceIndex(dofIdx, 0);
407 const GlobalPosition& pos = elemCtx.pos(dofIdx, 0);
409 if (isFineMaterial_(pos))
410 materialParams_[globalDofIdx] = &fineMaterialParams_;
412 materialParams_[globalDofIdx] = &coarseMaterialParams_;
419 this->simulator().startNextEpisode(100.0*24*60*60);