20#ifndef OPM_POLYMERPROPERTIES_HEADER_INCLUDED
21#define OPM_POLYMERPROPERTIES_HEADER_INCLUDED
23#include <opm/parser/eclipse/Deck/Deck.hpp>
24#include <opm/parser/eclipse/EclipseState/EclipseState.hpp>
28#include <opm/common/ErrorMacros.hpp>
63 const std::vector<double>& c_vals_visc,
64 const std::vector<double>& visc_mult_vals,
65 const std::vector<double>& c_vals_ads,
66 const std::vector<double>& ads_vals,
67 const std::vector<double>& water_vel_vals,
68 const std::vector<double>& shear_vrf_vals
71 mix_param_(mix_param),
72 rock_density_(rock_density),
73 dead_pore_vol_(dead_pore_vol),
74 res_factor_(res_factor),
75 c_max_ads_(c_max_ads),
76 ads_index_(ads_index),
77 c_vals_visc_(c_vals_visc),
78 visc_mult_vals_(visc_mult_vals),
79 c_vals_ads_(c_vals_ads),
81 water_vel_vals_(water_vel_vals),
82 shear_vrf_vals_(shear_vrf_vals)
91 void set(
double c_max,
98 const std::vector<double>& c_vals_visc,
99 const std::vector<double>& visc_mult_vals,
100 const std::vector<double>& c_vals_ads,
101 const std::vector<double>& ads_vals,
102 const std::vector<double>& water_vel_vals,
103 const std::vector<double>& shear_vrf_vals
107 mix_param_ = mix_param;
108 rock_density_ = rock_density;
109 dead_pore_vol_ = dead_pore_vol;
110 res_factor_ = res_factor;
111 c_max_ads_ = c_max_ads;
112 c_vals_visc_ = c_vals_visc;
113 visc_mult_vals_ = visc_mult_vals;
114 c_vals_ads_ = c_vals_ads;
115 ads_vals_ = ads_vals;
116 ads_index_ = ads_index;
117 water_vel_vals_ = water_vel_vals;
118 shear_vrf_vals_ = shear_vrf_vals;
121 void readFromDeck(Opm::DeckConstPtr deck, Opm::EclipseStateConstPtr eclipseState)
124 auto tables = eclipseState->getTableManager();
125 const auto& plymaxTable = tables->getPlymaxTables().getTable<PlymaxTable>(0);
126 const auto plmixparRecord = deck->getKeyword(
"PLMIXPAR")->getRecord(0);
129 assert(plymaxTable.numRows() == 1);
131 c_max_ = plymaxTable.getPolymerConcentrationColumn()[0];
132 mix_param_ = plmixparRecord->getItem(
"TODD_LONGSTAFF")->getSIDouble(0);
135 const auto& plyrockTable = tables->getPlyrockTables().getTable<PlyrockTable>(0);
138 assert(plyrockTable.numRows() == 1);
140 dead_pore_vol_ = plyrockTable.getDeadPoreVolumeColumn()[0];
141 res_factor_ = plyrockTable.getResidualResistanceFactorColumn()[0];
142 rock_density_ = plyrockTable.getRockDensityFactorColumn()[0];
144 c_max_ads_ = plyrockTable.getMaxAdsorbtionColumn()[0];
147 const auto& plyviscTable = tables->getPlyviscTables().getTable<PlyviscTable>(0);
150 c_vals_visc_ = plyviscTable.getPolymerConcentrationColumn();
151 visc_mult_vals_ = plyviscTable.getViscosityMultiplierColumn();
154 const auto& plyadsTable = tables->getPlyadsTables().getTable<PlyadsTable>(0);
156 c_vals_ads_ = plyadsTable.getPolymerConcentrationColumn();
157 ads_vals_ = plyadsTable.getAdsorbedPolymerColumn();
159 has_plyshlog_ = deck->hasKeyword(
"PLYSHLOG");
160 has_shrate_ = deck->hasKeyword(
"SHRATE");
164 const auto& plyshlogTable = tables->getPlyshlogTables().getTable<PlyshlogTable>(0);
166 water_vel_vals_ = plyshlogTable.getWaterVelocityColumn();
167 shear_vrf_vals_ = plyshlogTable.getShearMultiplierColumn();
170 Opm::UnitSystem unitSystem = *deck->getActiveUnitSystem();
173 siFactor = unitSystem.parse(
"1/Time")->getSIScaling();
174 DeckKeywordConstPtr shrateKeyword = deck->getKeyword(
"SHRATE");
175 std::vector<double> shrate_readin = shrateKeyword->getSIDoubleData();
176 if (shrate_readin.size() == 1) {
177 shrate_ = shrate_readin[0];
178 }
else if (shrate_readin.size() == 0) {
181 OPM_THROW(std::logic_error,
"Only NTPVT == 1 is allowed for SHRATE keyword now !\n");
184 siFactor = unitSystem.parse(
"Length/Time")->getSIScaling();
187 for (
size_t i = 0; i < water_vel_vals_.size(); ++i) {
188 water_vel_vals_[i] *= siFactor;
192 plyshlog_ref_conc_ = plyshlogTable.getRefPolymerConcentration();
194 if (plyshlogTable.hasRefSalinity()) {
195 has_plyshlog_ref_salinity_ =
true;
196 plyshlog_ref_salinity_ = plyshlogTable.getRefSalinity();
198 has_plyshlog_ref_salinity_ =
false;
201 if (plyshlogTable.hasRefTemperature()) {
202 has_plyshlog_ref_temp_ =
true;
203 plyshlog_ref_temp_ = plyshlogTable.getRefTemperature();
205 has_plyshlog_ref_temp_ =
false;
265 double& dc_ads_dc)
const;
270 double& c_ads,
double& dc_ads_dc)
const;
273 double& mu_w_eff)
const;
277 ,
double dmu_w_eff_dc)
const;
280 double& inv_mu_w_eff)
const;
284 double& inv_mu_w_eff,
285 double& dinv_mu_w_eff_dc)
const;
288 const double* relperm,
289 double& eff_relperm_wat)
const;
293 const double* relperm,
294 const double* drelperm_ds,
295 double& eff_relperm_wat,
296 double& deff_relperm_wat_ds,
297 double& deff_relperm_wat_dc)
const;
302 const double* relperm,
308 const double* relperm,
309 const double* drelpermds,
312 double& dmobwatdc)
const;
317 const double* relperm,
318 const double* drelperm_ds,
322 bool if_with_der)
const;
327 const double* relperm,
328 double& totmob)
const;
333 const double* relperm,
334 const double* drelpermds,
336 double* dtotmob_dsdc)
const;
341 const double* relperm,
342 const double* drelperm_ds,
344 double* dtotmob_dsdc,
345 bool if_with_der)
const;
350 double& dmc_dc)
const;
353 double& dmc_dc,
bool if_with_der)
const;
356 bool computeShearMultLog(std::vector<double>& water_vel, std::vector<double>& visc_mult, std::vector<double>& shear_mult)
const;
361 double rock_density_;
362 double dead_pore_vol_;
373 std::vector<double> c_vals_visc_;
374 std::vector<double> visc_mult_vals_;
375 std::vector<double> c_vals_ads_;
376 std::vector<double> ads_vals_;
377 std::vector<double> water_vel_vals_;
378 std::vector<double> shear_vrf_vals_;
380 double plyshlog_ref_conc_;
381 double plyshlog_ref_salinity_;
382 double plyshlog_ref_temp_;
383 bool has_plyshlog_ref_salinity_;
384 bool has_plyshlog_ref_temp_;
387 void simpleAdsorptionBoth(
double c,
double& c_ads,
388 double& dc_ads_dc,
bool if_with_der)
const;
389 void adsorptionBoth(
double c,
double cmax,
390 double& c_ads,
double& dc_ads_dc,
391 bool if_with_der)
const;
392 void effectiveInvViscBoth(
const double c,
const double* visc,
393 double& inv_mu_w_eff,
394 double& dinv_mu_w_eff_dc,
bool if_with_der)
const;
395 void effectiveRelpermBoth(
const double c,
397 const double* relperm,
398 const double* drelperm_ds,
399 double& eff_relperm_wat,
400 double& deff_relperm_wat_ds,
401 double& deff_relperm_wat_dc,
402 bool if_with_der)
const;
std::vector< double > & cmax
Definition: GravityColumnSolverPolymer_impl.hpp:78
Definition: PolymerProperties.hpp:35
void effectiveTotalMobility(const double c, const double cmax, const double *visc, const double *relperm, double &totmob) const
double shearVrfWithDer(const double velocity, double &der) const
void effectiveInvVisc(const double c, const double *visc, double &inv_mu_w_eff) const
double viscMult(double c) const
double deadPoreVol() const
double rockDensity() const
bool computeShearMultLog(std::vector< double > &water_vel, std::vector< double > &visc_mult, std::vector< double > &shear_mult) const
Computing the shear multiplier based on the water velocity/shear rate with PLYSHLOG keyword.
const std::vector< double > & shearViscosityReductionFactor() const
the viscosity reduction factor PLYSHLOG table
PolymerProperties(double c_max, double mix_param, double rock_density, double dead_pore_vol, double res_factor, double c_max_ads, AdsorptionBehaviour ads_index, const std::vector< double > &c_vals_visc, const std::vector< double > &visc_mult_vals, const std::vector< double > &c_vals_ads, const std::vector< double > &ads_vals, const std::vector< double > &water_vel_vals, const std::vector< double > &shear_vrf_vals)
Definition: PolymerProperties.hpp:56
void computeMc(const double &c, double &mc) const
void effectiveViscWithDer(const double c, const double *visc, double &mu_w_eff, double dmu_w_eff_dc) const
void effectiveMobilitiesWithDer(const double c, const double cmax, const double *visc, const double *relperm, const double *drelpermds, double *mob, double *dmob_ds, double &dmobwatdc) const
double plyshlogRefConc() const
the reference polymer concentration in PLYSHLOG
PolymerProperties(Opm::DeckConstPtr deck, Opm::EclipseStateConstPtr eclipseState)
Definition: PolymerProperties.hpp:86
void effectiveMobilities(const double c, const double cmax, const double *visc, const double *relperm, double *mob) const
void effectiveInvViscWithDer(const double c, const double *visc, double &inv_mu_w_eff, double &dinv_mu_w_eff_dc) const
PolymerProperties()
Definition: PolymerProperties.hpp:37
void effectiveTotalMobilityBoth(const double c, const double cmax, const double *visc, const double *relperm, const double *drelperm_ds, double &totmob, double *dtotmob_dsdc, bool if_with_der) const
void computeMcWithDer(const double &c, double &mc, double &dmc_dc) const
double plyshlogRefSalinity() const
the reference salinity in PLYSHLOG
void simpleAdsorptionWithDer(double c, double &c_ads, double &dc_ads_dc) const
void effectiveMobilitiesBoth(const double c, const double cmax, const double *visc, const double *relperm, const double *drelperm_ds, double *mob, double *dmob_ds, double &dmobwat_dc, bool if_with_der) const
void effectiveTotalMobilityWithDer(const double c, const double cmax, const double *visc, const double *relperm, const double *drelpermds, double &totmob, double *dtotmob_dsdc) const
double shearVrf(const double velocity) const
AdsorptionBehaviour
Definition: PolymerProperties.hpp:41
@ NoDesorption
Definition: PolymerProperties.hpp:41
@ Desorption
Definition: PolymerProperties.hpp:41
bool hasPlyshlog() const
indicate whehter PLYSHLOG is specified
void effectiveVisc(const double c, const double *visc, double &mu_w_eff) const
void effectiveRelperm(const double c, const double cmax, const double *relperm, double &eff_relperm_wat) const
const std::vector< double > & shearWaterVelocity() const
the water velocity or water shear rate in PLYSHLOG table
void set(double c_max, double mix_param, double rock_density, double dead_pore_vol, double res_factor, double c_max_ads, AdsorptionBehaviour ads_index, const std::vector< double > &c_vals_visc, const std::vector< double > &visc_mult_vals, const std::vector< double > &c_vals_ads, const std::vector< double > &ads_vals, const std::vector< double > &water_vel_vals, const std::vector< double > &shear_vrf_vals)
Definition: PolymerProperties.hpp:91
void adsorptionWithDer(double c, double cmax, double &c_ads, double &dc_ads_dc) const
double viscMultWithDer(double c, double *der) const
void readFromDeck(Opm::DeckConstPtr deck, Opm::EclipseStateConstPtr eclipseState)
Definition: PolymerProperties.hpp:121
double shrate() const
the value of SHRATE
bool hasShrate() const
indicate whether SHRATE keyword is specified
bool hasPlyshlogRefTemp() const
indicate whether reference temperature is specified in PLYSHLOG
bool hasPlyshlogRefSalinity() const
indicate wheter reference salinity is specified in PLYSHLOG
double plyshlogRefTemp() const
the reference temperature in PLYSHLOG
void simpleAdsorption(double c, double &c_ads) const
void effectiveRelpermWithDer(const double c, const double cmax, const double *relperm, const double *drelperm_ds, double &eff_relperm_wat, double &deff_relperm_wat_ds, double &deff_relperm_wat_dc) const
void computeMcBoth(const double &c, double &mc, double &dmc_dc, bool if_with_der) const
void adsorption(double c, double cmax, double &c_ads) const
Definition: CompressibleTpfaPolymer.hpp:33