- a solvent specific updateState is used to assure that the correct oil
saturation is used to detect phase transision
- presence of gas is compensated for in the oil phase
the hydrocarbonstate is stored in the reservoir state and
used instead of the primalvariable_
The initial hydrocarbonstate is computed using
initHydroCarbonState(...);
- For some cases (for instance involving solvent flow) the reasoning for
only adding the pressure derivatives seems to fail. As getting the
sparsity pattern is non-trivial, in terms of work, the full sparsity
pattern is only added when specified by the parameter
"require_full_sparsity_pattern"
- For solvent runs "require_full_sparsity_pattern" defaults to true for
all other runs the default is to only extract the sparsity pattern from
the pressure derivatives.
A boolen user parameter is added to controll the computation of well
potential.
This is a temporary fix to assure that no extra computation time is used
on well potential calculation if it is not needed. The long term fix
will require a more thorough revising of the well group implementation.
- the computation of well potentials in the model class calculates the
well potentials using computeWellFlux()
- in this way the well potential calculations also handle well where
some perforations are closed by the simulator due to cross-flow.
- the well potentials pr perforation and phase is stored in the well
state.
The solvent specify part of computeWellConnectionPressures is factored
out to computePropertiesForWellConnectionPressures in order to reuse
the computeWellConnectionPressures from the base model.
Computation of properties used in computeConnectionPressureDelta
is factored out to computePropertiesForWellConnectionPressures
The motivation is to be able to use a modified version of
computePropertiesForWellConnectionPressures in the solvent model
The following changes are done in order to remove the duplicated code in
assemble().
- extractWellPerfProperties takes SolutionState as input (only used in
the solvent model)
- the computation of effective parameters is moved to computeAccum()
With these changes the solvent model can use assemble() from the base
model.
The Todd-Longstaff model is extended to incorporate pressure effects
The solvent viscosity is then caculated as
mu_eff = mu_s^(1-\alpha * \omega) * mu_mix^(\alpha * \omega)
where \omega accounts for the porous media effects and \alpha =
\alpha(pressure) accounts for the miscibility of the solvent and oil
when contacted.
The \alpha values can be given using the TLPMIXPA keyword
If no entries are given to TLPMIXPA the table specified using PMISC will
be used as default.
IF TLPMIXPA does not appear in the grid \alpha = 1 and the pressure
effect is neglected.
This is tested in test_solventprops_ad.cpp
The well potentials are caculated based on the well rates and pressure
drawdown at every time step. They are used to calculate default guide
rates used in group controlled wells.
well_perforation_pressure_diffs is stored in
WellStateFullyImplicitBlackoil as it is needed in the well potential
calculations.
- The initial rates are only set to target values for single phase
producers (orat, wrat, grat).
- For injectors compi is used to determine the initial target rates.
The relative permeabilty endpoints are scaled by the miscibility
function. The endpoints is not supposed to be negative therefore all
negative values are replaced by zero.
A power method where both f and g are ADB variables is added
using the general derivative rule
(f^g)' = f^g * ln(f) * g' + g * f^(g-1) * f'
Tests are added to test_block.cpp
Density and viscosity are given as input instead of calculated inside
computeMassFlux. This allow for modifying the properties prior to
calling computeMassFlux which avoids code duplication in the solvent
implementation.
The most significant bug was in the computation of effective saturation
fraction for the gas phase. The current implementation differs from the
manual.
Add method to calculateEffectiveProperties (viscosity and density)
using the Todd and Longstaff model.
The effective properties are stored in mu_eff_ and b_eff_ in the
BlackoilSolventModel and accessed using fluidReciprocFVF and
fluidViscosity
MinpvfillProps is only called if OPMFIL is true, while
the pinchProcessor is only called if OPMFIL is false.
Currently opmfil is hardcoded to true i.e.
The pinchProcessor is never called and the minpvfillProps is always
called.
Methods that returns the scaled critical gas (SGCR) saturation and the
scaled critical gas in oil saturation (SOGCR) is added to
BlackoilPropsAdFromDeck and BlackoilPropsAdInterface
A test is added in test_boprops_ad and fluid.data is modified to make
the test non trivial.
getCellCenter() in EclipseGrid no longer returns
tuble<double,double,double> but array<double,3>
This simplifies its usage.
Variable name is changed from cellCentroid to cellCenter to emphasize a
difference between the value in the unstructured grid and in EclispeGrid
The cell center in EclipseGrid is computed based on averaging the
corners of the cells as in Eclipse and not computing the centroid of the
cell as in the unstructured grid in opm.
The material balance scaling is extended to the solvent model
The gas value is used as default and an updateEquationsScaling() method
is added.
Minor modifications is done to the BlackoilModelBase.hpp and
BlackoilModelBase_impl.hpp in order to re-use code from the base case.
Solvent is accounted for in the calculations of well connection
pressures by adjusting the surface_density and the b-factor
TODO: Restructuring to avoid code duplication with
BlackoilModelBase_impl
The surface density input in well_perforation_densities() in
WellDensitySegmented.hpp is changed from one value pr. phase to one
value pr phase and perforation. This allow for different densities in
different perforation. The test is changed accordingly.