mirror of
https://github.com/OPM/opm-simulators.git
synced 2024-12-23 07:53:29 -06:00
d5f470cb68
This patch refactors (hopefully) all parts of opm-core that are needed by the fully implicite black oil solver in opm-autodiff and that inherently relied on UnstructuredGrid. We added a new simple grid interface consisting out of free functions that will allow us to use CpGrid without copying it to an UnstructuredGrid by the means of the GridAdapter. Using this interface we have add methods that allow specifying the grid information (global_cell, cartdims, etc.) wherever possible to prevent introducing grid parameters for the type of the grid. Unfortunately this was not possible everywhere.
235 lines
11 KiB
C++
235 lines
11 KiB
C++
/*
|
|
Copyright 2012 SINTEF ICT, Applied Mathematics.
|
|
|
|
This file is part of the Open Porous Media project (OPM).
|
|
|
|
OPM is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
OPM is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with OPM. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef OPM_INITSTATE_HEADER_INCLUDED
|
|
#define OPM_INITSTATE_HEADER_INCLUDED
|
|
|
|
struct UnstructuredGrid;
|
|
|
|
namespace Opm
|
|
{
|
|
|
|
namespace parameter { class ParameterGroup; }
|
|
class EclipseGridParser;
|
|
class IncompPropertiesInterface;
|
|
class BlackoilPropertiesInterface;
|
|
|
|
/// \file
|
|
///
|
|
/// Functions for initializing a reservoir state.
|
|
|
|
/// Initialize a two-phase state from parameters.
|
|
/// The following parameters are accepted (defaults):
|
|
/// - convection_testcase (false) -- Water in the 'left' part of the grid.
|
|
/// - ref_pressure (100) -- Initial pressure in bar for all cells
|
|
/// (if convection_testcase is true),
|
|
/// or pressure at woc depth.
|
|
/// - segregation_testcase (false) -- Water above the woc instead of below.
|
|
/// - water_oil_contact (none) -- Depth of water-oil contact (woc).
|
|
/// - init_saturation (none) -- Initial water saturation for all cells.
|
|
///
|
|
/// If convection_testcase is true, the saturation is initialised
|
|
/// as indicated, and pressure is initialised to a constant value
|
|
/// ('ref_pressure').
|
|
/// If segregation_testcase is true, the saturation is initialised
|
|
/// as indicated, and pressure is initialised hydrostatically.
|
|
/// Otherwise we have 3 cases:
|
|
/// 1. If 'water_oil_contact' is given, saturation is initialised
|
|
/// accordingly.
|
|
/// 2. If 'water_oil_contact' is not given, but 'init_saturation'
|
|
/// is given, water saturation is set to that value everywhere.
|
|
/// 3. If neither are given, water saturation is set to minimum.
|
|
///
|
|
/// In all three cases, pressure is initialised hydrostatically.
|
|
/// In case 2) and 3), the depth of the first cell is used as reference depth.
|
|
template <class State>
|
|
void initStateBasic(const UnstructuredGrid& grid,
|
|
const IncompPropertiesInterface& props,
|
|
const parameter::ParameterGroup& param,
|
|
const double gravity,
|
|
State& state);
|
|
|
|
/// Initialize a two-phase state from parameters.
|
|
/// The following parameters are accepted (defaults):
|
|
/// - convection_testcase (false) -- Water in the 'left' part of the grid.
|
|
/// - ref_pressure (100) -- Initial pressure in bar for all cells
|
|
/// (if convection_testcase is true),
|
|
/// or pressure at woc depth.
|
|
/// - segregation_testcase (false) -- Water above the woc instead of below.
|
|
/// - water_oil_contact (none) -- Depth of water-oil contact (woc).
|
|
/// - init_saturation (none) -- Initial water saturation for all cells.
|
|
///
|
|
/// If convection_testcase is true, the saturation is initialised
|
|
/// as indicated, and pressure is initialised to a constant value
|
|
/// ('ref_pressure').
|
|
/// If segregation_testcase is true, the saturation is initialised
|
|
/// as indicated, and pressure is initialised hydrostatically.
|
|
/// Otherwise we have 3 cases:
|
|
/// 1. If 'water_oil_contact' is given, saturation is initialised
|
|
/// accordingly.
|
|
/// 2. If 'water_oil_contact' is not given, but 'init_saturation'
|
|
/// is given, water saturation is set to that value everywhere.
|
|
/// 3. If neither are given, water saturation is set to minimum.
|
|
///
|
|
/// In all three cases, pressure is initialised hydrostatically.
|
|
/// In case 2) and 3), the depth of the first cell is used as reference depth.
|
|
template <class FaceCells, class CCI, class FCI, class State>
|
|
void initStateBasic(int number_of_cells,
|
|
const int* global_cell,
|
|
const int* cartdims,
|
|
int number_of_faces,
|
|
FaceCells face_cells,
|
|
FCI begin_face_centroids,
|
|
CCI begin_cell_centroids,
|
|
int dimensions,
|
|
const IncompPropertiesInterface& props,
|
|
const parameter::ParameterGroup& param,
|
|
const double gravity,
|
|
State& state);
|
|
|
|
/// Initialize a blackoil state from parameters.
|
|
/// The following parameters are accepted (defaults):
|
|
/// - convection_testcase (false) -- Water in the 'left' part of the grid.
|
|
/// - ref_pressure (100) -- Initial pressure in bar for all cells
|
|
/// (if convection_testcase is true),
|
|
/// or pressure at woc depth.
|
|
/// - water_oil_contact (none) -- Depth of water-oil contact (woc).
|
|
/// If convection_testcase is true, the saturation is initialised
|
|
/// as indicated, and pressure is initialised to a constant value
|
|
/// ('ref_pressure').
|
|
/// Otherwise we have 2 cases:
|
|
/// 1. If 'water_oil_contact' is given, saturation is initialised
|
|
/// accordingly.
|
|
/// 2. Water saturation is set to minimum.
|
|
/// In both cases, pressure is initialised hydrostatically.
|
|
/// In case 2., the depth of the first cell is used as reference depth.
|
|
template <class State>
|
|
void initStateBasic(const UnstructuredGrid& grid,
|
|
const BlackoilPropertiesInterface& props,
|
|
const parameter::ParameterGroup& param,
|
|
const double gravity,
|
|
State& state);
|
|
|
|
/// Initialize a blackoil state from parameters.
|
|
/// The following parameters are accepted (defaults):
|
|
/// - convection_testcase (false) -- Water in the 'left' part of the grid.
|
|
/// - ref_pressure (100) -- Initial pressure in bar for all cells
|
|
/// (if convection_testcase is true),
|
|
/// or pressure at woc depth.
|
|
/// - water_oil_contact (none) -- Depth of water-oil contact (woc).
|
|
/// If convection_testcase is true, the saturation is initialised
|
|
/// as indicated, and pressure is initialised to a constant value
|
|
/// ('ref_pressure').
|
|
/// Otherwise we have 2 cases:
|
|
/// 1. If 'water_oil_contact' is given, saturation is initialised
|
|
/// accordingly.
|
|
/// 2. Water saturation is set to minimum.
|
|
/// In both cases, pressure is initialised hydrostatically.
|
|
/// In case 2., the depth of the first cell is used as reference depth.
|
|
template <class FaceCells, class FCI, class CCI, class State>
|
|
void initStateBasic(int number_of_cells,
|
|
const int* global_cell,
|
|
const int* cartdims,
|
|
int number_of_faces,
|
|
FaceCells face_cells,
|
|
FCI begin_face_centroids,
|
|
CCI begin_cell_centroids,
|
|
int dimensions,
|
|
const BlackoilPropertiesInterface& props,
|
|
const parameter::ParameterGroup& param,
|
|
const double gravity,
|
|
State& state);
|
|
|
|
/// Initialize a two-phase state from input deck.
|
|
/// If EQUIL is present:
|
|
/// - saturation is set according to the water-oil contact,
|
|
/// - pressure is set to hydrostatic equilibrium.
|
|
/// Otherwise:
|
|
/// - saturation is set according to SWAT,
|
|
/// - pressure is set according to PRESSURE.
|
|
template <class Props, class State>
|
|
void initStateFromDeck(const UnstructuredGrid& grid,
|
|
const Props& props,
|
|
const EclipseGridParser& deck,
|
|
const double gravity,
|
|
State& state);
|
|
|
|
/// Initialize a two-phase state from input deck.
|
|
/// If EQUIL is present:
|
|
/// - saturation is set according to the water-oil contact,
|
|
/// - pressure is set to hydrostatic equilibrium.
|
|
/// Otherwise:
|
|
/// - saturation is set according to SWAT,
|
|
/// - pressure is set according to PRESSURE.
|
|
template <class FaceCells, class FCI, class CCI, class Props, class State>
|
|
void initStateFromDeck(int number_of_cells,
|
|
const int* global_cell,
|
|
const int* cartdims,
|
|
int number_of_faces,
|
|
FaceCells face_cells,
|
|
FCI begin_face_centroids,
|
|
CCI begin_cell_centroids,
|
|
int dimensions,
|
|
const Props& props,
|
|
const EclipseGridParser& deck,
|
|
const double gravity,
|
|
State& state);
|
|
|
|
/// Initialize a two-phase water-oil blackoil state from input deck.
|
|
/// If EQUIL is present:
|
|
/// - saturation is set according to the water-oil contact,
|
|
/// - pressure is set to hydrostatic equilibrium.
|
|
/// Otherwise:
|
|
/// - saturation is set according to SWAT,
|
|
/// - pressure is set according to PRESSURE.
|
|
/// In addition, this function sets surfacevol.
|
|
template <class Props, class State>
|
|
void initBlackoilStateFromDeck(const UnstructuredGrid& grid,
|
|
const Props& props,
|
|
const EclipseGridParser& deck,
|
|
const double gravity,
|
|
State& state);
|
|
|
|
/// Initialize a two-phase water-oil blackoil state from input deck.
|
|
/// If EQUIL is present:
|
|
/// - saturation is set according to the water-oil contact,
|
|
/// - pressure is set to hydrostatic equilibrium.
|
|
/// Otherwise:
|
|
/// - saturation is set according to SWAT,
|
|
/// - pressure is set according to PRESSURE.
|
|
/// In addition, this function sets surfacevol.
|
|
template <class FaceCells, class FCI, class CCI, class Props, class State>
|
|
void initBlackoilStateFromDeck(int number_of_cells,
|
|
const int* global_cell,
|
|
const int* cartdims,
|
|
int number_of_faces,
|
|
FaceCells face_cells,
|
|
FCI begin_face_centroids,
|
|
CCI begin_cell_centroids,
|
|
int dimensions,
|
|
const Props& props,
|
|
const EclipseGridParser& deck,
|
|
const double gravity,
|
|
State& state);
|
|
} // namespace Opm
|
|
|
|
#include <opm/core/simulator/initState_impl.hpp>
|
|
|
|
#endif // OPM_INITSTATE_HEADER_INCLUDED
|