mirror of
https://github.com/OPM/opm-simulators.git
synced 2024-12-22 15:33: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.
44 lines
1.7 KiB
C++
44 lines
1.7 KiB
C++
#include "BlackoilState.hpp"
|
|
#include <opm/core/props/BlackoilPropertiesInterface.hpp>
|
|
|
|
using namespace Opm;
|
|
|
|
void
|
|
BlackoilState::init(int number_of_cells, int number_of_phases, int num_phases) {
|
|
SimulatorState::init(number_of_cells, number_of_phases, num_phases);
|
|
gor_.resize(number_of_cells, 0.) ;
|
|
rv_.resize(number_of_cells,0.);
|
|
// surfvol_ intentionally empty, left to initBlackoilSurfvol
|
|
}
|
|
|
|
void
|
|
BlackoilState::init(const UnstructuredGrid& g, int num_phases)
|
|
{
|
|
init(g.number_of_cells, g.number_of_faces, num_phases);
|
|
}
|
|
/// Set the first saturation to either its min or max value in
|
|
/// the indicated cells. The second saturation value s2 is set
|
|
/// to (1.0 - s1) for each cell. Any further saturation values
|
|
/// are unchanged.
|
|
void
|
|
BlackoilState::setFirstSat(const std::vector<int>& cells,
|
|
const Opm::BlackoilPropertiesInterface& props,
|
|
ExtremalSat es) {
|
|
SimulatorState::setFirstSat(cells, props, es);
|
|
}
|
|
|
|
bool
|
|
BlackoilState::equals(const SimulatorState& other,
|
|
double epsilon) const {
|
|
const BlackoilState* that = dynamic_cast <const BlackoilState*> (&other);
|
|
bool equal = that != 0;
|
|
equal = equal && SimulatorState::equals (other, epsilon);
|
|
equal = equal && SimulatorState::vectorApproxEqual(this->surfacevol(),
|
|
that->surfacevol(),
|
|
epsilon);
|
|
equal = equal && SimulatorState::vectorApproxEqual(this->gasoilratio(),
|
|
that->gasoilratio(),
|
|
epsilon);
|
|
return equal;
|
|
}
|