ICFERST  22-06
Reservoir simulator based on DCVFEM, Dynamic Mesh optimisation and Surface-based modelling
multi_eos.F90 File Reference
#include "fdebug.h"
Include dependency graph for multi_eos.F90:

Modules

module  multiphase_eos
 This module contains subroutines related to the equations of state and other properties such as relative permeabilities, capillary, flash, etc.
 

Functions/Subroutines

subroutine multiphase_eos::calculate_all_rhos (state, packed_state, Mdims, get_RhoCp)
 : Computes the density for the phases and the derivatives of the density More...
 
subroutine multiphase_eos::cap_bulk_rho (state, ncomp, nphase, cv_nonods, Density_Component, Density, Density_Cp, compute_rhoCP)
 : Computes the bulk density for components and the derivatives of the density More...
 
subroutine multiphase_eos::calculate_component_rho (state, packed_state, Mdims)
 : Computes the density for the components and the derivatives of the density This is were the action is actually done, the other calculate rhos are wrappers More...
 
subroutine multiphase_eos::calculate_rho_drhodp (state, packed_state, iphase, icomp, nphase, ncomp, eos_option_path, rho, drhodp)
 : Computes the density and the derivative of the density More...
 
subroutine linear_eos_formula (rho_internal)
 
subroutine multiphase_eos::calculate_porous_rho_drhop (state, packed_state, Mdims, cv_ndgln, drhodp_porous)
 In this subroutine we calculate and update the density of the porous media based on the compressibility given in Diamond (ele-wise). We also calculate the drho/dp term for the porous media which then goes into the DERIV term in the continuity equation (cv-wise). More...
 
subroutine multiphase_eos::density_polynomial (eos_coefs, pressure, temperature, Density_Field)
 : Define de density as a polynomial More...
 
subroutine multiphase_eos::assign_equation_of_state (eos_option_path_out)
 : Read from diamond and decide which sort of density representation do we have More...
 
subroutine multiphase_eos::calculate_porousmedia_absorptionterms (nphase, state, packed_state, PorousMedia_absorp, Mdims, CV_funs, CV_GIdims, Mspars, ndgln, upwnd, suf_sig_diagten_bc)
 : Here we compute the absorption for porous media This is the sigma term defined in the papers and contains The permeability, the relative permeability, the viscosity and the saturation More...
 
subroutine calculate_porousmedia_adv_terms (nphase, state, packed_state, PorousMedia_absorp, Mdims, ndgln, upwnd, viscosities)
 : Computes the absorption and its derivatives against the saturation More...
 
subroutine calculate_suf_sig_diagten_bc (nphase, packed_state, suf_sig_diagten_bc, Mdims, CV_funs, CV_GIdims, Mspars, ndgln, PorousMedia_absorp, state, inv_perm, viscosities)
 : Computes the absorption and its derivatives against the saturation on the boundary More...
 
subroutine set_viscosity (nphase, Mdims, state, visc_phases)
 : For porous media, just sets the viscosity as a scalar More...
 
subroutine multiphase_eos::calculate_absorption2 (nphase, packed_state, PorousMedia_absorp, Mdims, ndgln, SATURA, viscosities, inv_PorousMedia_absorp)
 : Subroutine where the absorption for the porous media is actually computed More...
 
subroutine multiphase_eos::get_material_absorption (nphase, iphase, material_absorption, sat, visc, CV_Immobile_fract, Corey_exponent, Endpoint_relperm)
 :Calculates the relative permeability for 1, 2 (Brooks-corey) or 3 (stone's model) phases More...
 
subroutine multiphase_eos::get_relperm (nphase, iphase, sat, CV_Immobile_fract, Corey_exponent, Endpoint_relperm, Kr)
 :Calculates the relative permeability for 1, 2 (Brooks-corey) or 3 (stone's model) phases More...
 
subroutine relperm_corey_epsilon (Kr)
 : Brooks corey model of relperm. This subroutine add a small quantity to the corey function to avoid getting a relperm=0 that may give problems when dividing it to obtain the sigma. More...
 
subroutine relperm_stone (Kr)
 :This subroutine calculates the relative permeability for three phases First phase has to be water, second oil and the third gas We use Stone's model II adapted, and for the two phases we use the Corey model Model explained in: Aziz, K. And Settari, T.:“Petroleum Reservoir Simulation” Applied Science Publishers, London, 30-38, 1979. More...
 
subroutine multiphase_eos::calculate_capillary_pressure (packed_state, NDGLN, totele, cv_nloc, CV_funs)
 : In this subroutine the capilalry pressure is computed based on the saturation and the formula used More...
 
pure real function get_cappressure (sat, Pe, a, CV_Immobile_Fraction, Imbibition_term, iphase)
 :This functions returns the capillary pressure for a certain input saturation More...
 
real function multiphase_eos::get_devcappressure (sat, Pe, a, CV_Immobile_Fraction, iphase, nphase)
 :This functions returns the derivative of the capillary pressure with respect to the saturation More...
 
subroutine multiphase_eos::calculate_u_source_cv (Mdims, state, packed_state, den, u_source_cv)
 : This subroutine computed the gravity effect, i.e. rho * g More...
 
subroutine multiphase_eos::calculate_diffusivity (state, packed_state, Mdims, ndgln, ScalarAdvectionField_Diffusion, TracerName, divide_by_rho_CP)
 : Here we compute component/solute/thermal diffusion coefficient More...
 
subroutine multiphase_eos::calculate_solute_dispersity (state, packed_state, Mdims, ndgln, density, SoluteDispersion)
 : Dispersion for porous media For thermal, the field density needs to be passed down, which ensures that even for boussinesq a reference density is still used More...
 
subroutine multiphase_eos::calculate_viscosity (state, Mdims, ndgln, Momentum_Diffusion, Momentum_Diffusion2)
 : Computes the viscosity effect as a momemtum diffusion, this is zero for porous media More...
 
subroutine multiphase_eos::update_velocity_absorption (states, ndim, nphase, velocity_absorption)
 :<INERTIA ONLY>Computes velocity absorption from diamond information More...
 
subroutine multiphase_eos::update_velocity_absorption_coriolis (states, ndim, nphase, velocity_absorption)
 :Computes velocity absorption associated to coriolis forces from diamond information More...
 
subroutine multiphase_eos::update_velocity_source (states, Mdims, u_source)
 :Computes velocity source from diamond information More...
 
real function multiphase_eos::saturation_temperature (pressure)
 : ???? More...
 
subroutine multiphase_eos::get_rockfluidprop (state, packed_state, Mdims, ndgln, current_time, update_only)
 :Gets the relperm max, the relperm exponent and the immobile fractions and stores them into packed state By index this is: 1) immobile fraction, 2) relperm max, 3)relperm exponent 4)Capillary entry pressure 5) Capillary exponent 6) Capillary imbition term The effective inmobile fraction is the min(inmobile,saturation_flipping formula), being the saturation the value after a succesful non-linear solver convergence! This NEEDS to be called after a succesful non-linear solver (with update_only) More...
 
subroutine update_saturation_flipping (sat_flip, sat, old_Sat)
 : This internal subroutine checks the if we are flipping from drainage to imbibition, or the other way round, and updates if required the value stored in Saturation_flipping Saturation_flipping stores both the value and the history, being positive if the phase is increasing and negative if the phase is decreasing. Therefore its minimum absolute value is non-zero NOTE: Currently the trapping can only increase, i.e. no thermal effects have been considered More...
 
real function multiphase_eos::jwl (A, B, w, R1, R2, E0, p, roe, ro)
 JWL equation functions. More...
 
real function multiphase_eos::diffjwl (A, B, w, R1, R2, E0, roe, ro)
 Diff of JWL equation functions. More...
 
real function, dimension(jwln) multiphase_eos::jwldensity (eos_coefs, pressure, ro0, JWLn)
 Density of JWL equation functions. More...
 
subroutine multiphase_eos::initialise_porous_media (Mdims, ndgln, packed_state, state, exit_initialise_porous_media)
 : Initialising porous media models Given a free water level (FWL) we simulate capillary gravity equilibration, control volumes below FWL is kept at residual lighter phase saturation This subroutine is called after each timestep and saturations overidden below FWL with the heavier phase More...
 
real function multiphase_eos::retrieve_reference_density (state, packed_state, iphase, icomp, nphase)
 : For boussinesq porous media we need the reference density to ensure consistency when mixing with the porous density/Cp etc. In this subroutine we retrieve the value given a phase, component. More...
 
subroutine multiphase_eos::flash_gas_dissolution (state, packed_state, Mdims, ndgln)
 : subroutine to dissolv phase2 into phase1. Currently only for system for phase 1 = water, phase 2 = gas Dissolve instantaneously the amount introduced in diamond in mol/m3 for CO2 a reference number is 38 mol/m3. Requires the first phase to have a concentration field More...
 

Variables

real, parameter multiphase_eos::flooding_hmin = 1e-5
 

Function/Subroutine Documentation

◆ calculate_porousmedia_adv_terms()

subroutine calculate_porousmedia_absorptionterms::calculate_porousmedia_adv_terms ( integer, intent(in)  nphase,
type( state_type ), dimension( : ), intent(in)  state,
type( state_type ), intent(inout)  packed_state,
type (multi_field), intent(inout)  PorousMedia_absorp,
type( multi_dimensions ), intent(in)  Mdims,
type( multi_ndgln ), intent(in)  ndgln,
type (porous_adv_coefs), intent(inout)  upwnd,
real, dimension(:,:), intent(in)  viscosities 
)

: Computes the absorption and its derivatives against the saturation

Here is the call graph for this function:
Here is the caller graph for this function:

◆ calculate_suf_sig_diagten_bc()

subroutine calculate_porousmedia_absorptionterms::calculate_suf_sig_diagten_bc ( integer, intent(in)  nphase,
type( state_type ), intent(inout)  packed_state,
real, dimension( mdims%stotel * mdims%cv_snloc * mdims%nphase, mdims%ndim ), intent(inout)  suf_sig_diagten_bc,
type(multi_dimensions), intent(in)  Mdims,
type(multi_shape_funs), intent(inout)  CV_funs,
type(multi_gi_dimensions), intent(in)  CV_GIdims,
type (multi_sparsities), intent(in)  Mspars,
type(multi_ndgln), intent(in)  ndgln,
type (multi_field), intent(inout)  PorousMedia_absorp,
type(state_type), dimension( : ), intent(in)  state,
real, dimension(:, :, :), intent(in), target  inv_perm,
real, dimension(:,:), intent(in)  viscosities 
)

: Computes the absorption and its derivatives against the saturation on the boundary

Here is the call graph for this function:
Here is the caller graph for this function:

◆ get_cappressure()

pure real function calculate_capillary_pressure::get_cappressure ( real, intent(in)  sat,
real, intent(in)  Pe,
real, intent(in)  a,
real, dimension(:), intent(in)  CV_Immobile_Fraction,
real, intent(in)  Imbibition_term,
integer, intent(in)  iphase 
)

:This functions returns the capillary pressure for a certain input saturation

Here is the caller graph for this function:

◆ linear_eos_formula()

subroutine calculate_rho_drhodp::linear_eos_formula ( real, dimension( : ), intent(inout)  rho_internal)
Here is the caller graph for this function:

◆ relperm_corey_epsilon()

subroutine get_relperm::relperm_corey_epsilon ( real, intent(inout)  Kr)

: Brooks corey model of relperm. This subroutine add a small quantity to the corey function to avoid getting a relperm=0 that may give problems when dividing it to obtain the sigma.

Here is the caller graph for this function:

◆ relperm_stone()

subroutine get_relperm::relperm_stone ( real, intent(inout)  Kr)

:This subroutine calculates the relative permeability for three phases First phase has to be water, second oil and the third gas We use Stone's model II adapted, and for the two phases we use the Corey model Model explained in: Aziz, K. And Settari, T.:“Petroleum Reservoir Simulation” Applied Science Publishers, London, 30-38, 1979.

Here is the caller graph for this function:

◆ set_viscosity()

subroutine calculate_porousmedia_absorptionterms::set_viscosity ( integer, intent(in)  nphase,
type( multi_dimensions ), intent(in)  Mdims,
type( state_type ), dimension( : ), intent(in)  state,
real, dimension(:,:), intent(inout)  visc_phases 
)

: For porous media, just sets the viscosity as a scalar

Here is the caller graph for this function:

◆ update_saturation_flipping()

subroutine get_rockfluidprop::update_saturation_flipping ( real, intent(inout)  sat_flip,
real, intent(in)  sat,
real, intent(in)  old_Sat 
)

: This internal subroutine checks the if we are flipping from drainage to imbibition, or the other way round, and updates if required the value stored in Saturation_flipping Saturation_flipping stores both the value and the history, being positive if the phase is increasing and negative if the phase is decreasing. Therefore its minimum absolute value is non-zero NOTE: Currently the trapping can only increase, i.e. no thermal effects have been considered

Here is the caller graph for this function: