36 #ifndef OPM_SETUPGRIDANDPROPS_HEADER 37 #define OPM_SETUPGRIDANDPROPS_HEADER 39 #include <opm/core/utility/parameters/ParameterGroup.hpp> 40 #include <opm/parser/eclipse/Units/Units.hpp> 41 #include <dune/grid/CpGrid.hpp> 42 #include <opm/porsol/common/ReservoirPropertyCapillary.hpp> 43 #include <opm/parser/eclipse/Parser/Parser.hpp> 44 #include <opm/parser/eclipse/Parser/ParseContext.hpp> 45 #include <opm/parser/eclipse/Deck/Deck.hpp> 47 #include <opm/common/utility/platform_dependent/disable_warnings.h> 49 #include <boost/filesystem.hpp> 51 #include <opm/common/utility/platform_dependent/reenable_warnings.h> 64 bool useJ< ReservoirPropertyCapillary<3> >();
69 template <
template <
int>
class ResProp>
76 std::string fileformat = param.getDefault<std::string>(
"fileformat",
"cartesian");
77 if (fileformat ==
"sintef_legacy") {
78 std::string grid_prefix = param.get<std::string>(
"grid_prefix");
79 grid.readSintefLegacyFormat(grid_prefix);
80 OPM_MESSAGE(
"Warning: We do not yet read legacy reservoir properties. Using defaults.");
81 res_prop.init(grid.size(0));
82 }
else if (fileformat ==
"eclipse") {
83 std::string ecl_file = param.get<std::string>(
"filename");
85 Opm::ParseContext parseContext;
87 auto deck = parser.parseFile(ecl_file , parseContext);
88 if (param.has(
"z_tolerance")) {
89 std::cerr <<
"****** Warning: z_tolerance parameter is obsolete, use PINCH in deck input instead\n";
91 bool periodic_extension = param.getDefault<
bool>(
"periodic_extension",
false);
92 bool clip_z = param.getDefault<
bool>(
"clip_z",
false);
93 bool turn_normals = param.getDefault<
bool>(
"turn_normals",
false);
95 Opm::EclipseGrid inputGrid(deck);
96 grid.processEclipseFormat(inputGrid, periodic_extension, turn_normals, clip_z);
99 if (param.getDefault(
"output_ecl",
false)) {
100 OPM_THROW(std::runtime_error,
"Saving to EGRID files is not yet implemented");
108 double perm_threshold_md = param.getDefault(
"perm_threshold_md", 0.0);
109 double perm_threshold = Opm::unit::convert::from(perm_threshold_md, Opm::prefix::milli*Opm::unit::darcy);
110 std::string rock_list = param.getDefault<std::string>(
"rock_list",
"no_list");
111 std::string* rl_ptr = (rock_list ==
"no_list") ? 0 : &rock_list;
112 bool use_j = param.getDefault(
"use_jfunction_scaling",
useJ<ResProp<3> >());
116 sigma = param.getDefault(
"sigma", sigma);
117 theta = param.getDefault(
"theta", theta);
119 if (param.has(
"viscosity1") || param.has(
"viscosity2")) {
120 double v1 = param.getDefault(
"viscosity1", 0.001);
121 double v2 = param.getDefault(
"viscosity2", 0.003);
122 res_prop.setViscosities(v1, v2);
124 res_prop.init(deck, grid.globalCell(), perm_threshold, rl_ptr,
125 use_j, sigma, theta);
126 }
else if (fileformat ==
"cartesian") {
127 std::array<int, 3> dims = {{ param.getDefault<
int>(
"nx", 1),
128 param.getDefault<
int>(
"ny", 1),
129 param.getDefault<
int>(
"nz", 1) }};
130 std::array<double, 3> cellsz = {{ param.getDefault<
double>(
"dx", 1.0),
131 param.getDefault<
double>(
"dy", 1.0),
132 param.getDefault<
double>(
"dz", 1.0) }};
133 grid.createCartesian(dims, cellsz);
134 double default_poro = param.getDefault(
"default_poro", 0.2);
135 double default_perm_md = param.getDefault(
"default_perm_md", 100.0);
136 double default_perm = Opm::unit::convert::from(default_perm_md, Opm::prefix::milli*Opm::unit::darcy);
137 OPM_MESSAGE(
"Warning: For generated cartesian grids, we use uniform reservoir properties.");
138 res_prop.init(grid.size(0), default_poro, default_perm);
140 OPM_THROW(std::runtime_error,
"Unknown file format string: " << fileformat);
142 if (param.getDefault(
"use_unique_boundary_ids",
false)) {
143 grid.setUniqueBoundaryIds(
true);
150 template <
template <
int>
class ResProp>
152 bool periodic_extension,
156 double perm_threshold,
157 const std::string& rock_list,
158 bool use_jfunction_scaling,
162 ResProp<3>& res_prop)
164 Opm::EclipseGrid eg(deck);
165 const std::string* rl_ptr = (rock_list ==
"no_list") ? 0 : &rock_list;
166 grid.processEclipseFormat(eg, periodic_extension, turn_normals, clip_z);
167 res_prop.init(deck, grid.globalCell(), perm_threshold, rl_ptr, use_jfunction_scaling, sigma, theta);
169 grid.setUniqueBoundaryIds(
true);
176 #endif // OPENRS_SETUPGRIDANDPROPS_HEADER void setupGridAndPropsEclipse(const Opm::Deck &deck, bool periodic_extension, bool turn_normals, bool clip_z, bool unique_bids, double perm_threshold, const std::string &rock_list, bool use_jfunction_scaling, double sigma, double theta, Dune::CpGrid &grid, ResProp< 3 > &res_prop)
Definition: setupGridAndProps.hpp:151
Class for immiscible dead oil and dry gas.
Definition: applier.hpp:18
void setupGridAndProps(const Opm::ParameterGroup ¶m, Dune::CpGrid &grid, ResProp< 3 > &res_prop)
Definition: setupGridAndProps.hpp:70
bool useJ()
Helper for determining whether we should.
Definition: setupGridAndProps.hpp:58