commit
4b3231c9ef
@ -104,6 +104,7 @@ if(ENABLE_ECL_INPUT)
|
||||
src/opm/parser/eclipse/EclipseState/Schedule/Action/ActionValue.cpp
|
||||
src/opm/parser/eclipse/EclipseState/Schedule/Action/ASTNode.cpp
|
||||
src/opm/parser/eclipse/EclipseState/Schedule/Action/Condition.cpp
|
||||
src/opm/parser/eclipse/EclipseState/Schedule/Action/Enums.cpp
|
||||
src/opm/parser/eclipse/EclipseState/Schedule/Action/State.cpp
|
||||
src/opm/parser/eclipse/EclipseState/Schedule/ArrayDimChecker.cpp
|
||||
src/opm/parser/eclipse/EclipseState/Schedule/eval_uda.cpp
|
||||
@ -284,6 +285,7 @@ if(ENABLE_ECL_OUTPUT)
|
||||
src/opm/io/eclipse/ExtSmryOutput.cpp
|
||||
src/opm/io/eclipse/RestartFileView.cpp
|
||||
src/opm/io/eclipse/SummaryNode.cpp
|
||||
src/opm/io/eclipse/rst/action.cpp
|
||||
src/opm/io/eclipse/rst/aquifer.cpp
|
||||
src/opm/io/eclipse/rst/connection.cpp
|
||||
src/opm/io/eclipse/rst/group.cpp
|
||||
@ -489,6 +491,9 @@ if(ENABLE_ECL_OUTPUT)
|
||||
tests/SOFR_TEST.DATA
|
||||
tests/UDQ_BASE.DATA
|
||||
tests/UDQ_RESTART.DATA
|
||||
tests/UDQ_ACTIONX.X0007
|
||||
tests/UDQ_ACTIONX.DATA
|
||||
tests/UDQ_ACTIONX_RESTART.DATA
|
||||
tests/UDQ_TEST_WCONPROD_IUAD-2.DATA
|
||||
tests/9_4C_WINJ_GINJ_UDQ_MSW-UDARATE_TEST_PACK.DATA
|
||||
tests/UDQ_ACTIONX_TEST1.DATA
|
||||
@ -763,6 +768,7 @@ if(ENABLE_ECL_INPUT)
|
||||
opm/parser/eclipse/EclipseState/Schedule/Action/Actions.hpp
|
||||
opm/parser/eclipse/EclipseState/Schedule/Action/ActionX.hpp
|
||||
opm/parser/eclipse/EclipseState/Schedule/Action/Condition.hpp
|
||||
opm/parser/eclipse/EclipseState/Schedule/Action/Enums.hpp
|
||||
opm/parser/eclipse/EclipseState/Schedule/Action/ASTNode.hpp
|
||||
opm/parser/eclipse/EclipseState/Schedule/Action/PyAction.hpp
|
||||
opm/parser/eclipse/EclipseState/Schedule/Action/State.hpp
|
||||
@ -873,6 +879,7 @@ if(ENABLE_ECL_OUTPUT)
|
||||
opm/io/eclipse/ExtSmryOutput.hpp
|
||||
opm/io/eclipse/RestartFileView.hpp
|
||||
opm/io/eclipse/SummaryNode.hpp
|
||||
opm/io/eclipse/rst/action.hpp
|
||||
opm/io/eclipse/rst/aquifer.hpp
|
||||
opm/io/eclipse/rst/connection.hpp
|
||||
opm/io/eclipse/rst/group.hpp
|
||||
|
74
opm/io/eclipse/rst/action.hpp
Normal file
74
opm/io/eclipse/rst/action.hpp
Normal file
@ -0,0 +1,74 @@
|
||||
/*
|
||||
Copyright 2021 Equinor ASA.
|
||||
|
||||
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 RST_ACTIONX
|
||||
#define RST_ACTIONX
|
||||
|
||||
#include <ctime>
|
||||
#include <optional>
|
||||
#include <string>
|
||||
#include <variant>
|
||||
#include <vector>
|
||||
|
||||
#include <opm/parser/eclipse/EclipseState/Schedule/Action/Enums.hpp>
|
||||
|
||||
namespace Opm {
|
||||
|
||||
namespace RestartIO {
|
||||
|
||||
struct RstAction {
|
||||
struct Quantity {
|
||||
std::variant<std::string, double> quantity;
|
||||
std::optional<std::string> wgname;
|
||||
|
||||
Quantity() = default;
|
||||
Quantity(const std::string * zacn, double sacn_value);
|
||||
Quantity(const std::string& quantity);
|
||||
Quantity(double value);
|
||||
};
|
||||
|
||||
|
||||
struct Condition {
|
||||
static bool valid(const std::string * zacn, const int * iacn);
|
||||
Condition(const std::string * zacn, const int * iacn, const double * sacn);
|
||||
Action::Logical logic;
|
||||
Action::Comparator cmp_op;
|
||||
Quantity lhs;
|
||||
Quantity rhs;
|
||||
bool left_paren{false};
|
||||
bool right_paren{false};
|
||||
|
||||
std::vector<std::string> tokens() const;
|
||||
};
|
||||
|
||||
|
||||
RstAction(const std::string& name_arg, int max_run_arg, double min_wait_arg, std::time_t start_time, std::vector<Condition> conditions_arg);
|
||||
|
||||
std::string name;
|
||||
int max_run;
|
||||
double min_wait;
|
||||
std::time_t start_time;
|
||||
std::vector<Condition> conditions;
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endif
|
@ -89,7 +89,7 @@ struct RstHeader {
|
||||
int nwell_udq;
|
||||
int ngroup_udq;
|
||||
int nfield_udq;
|
||||
|
||||
int num_action;
|
||||
|
||||
bool e300_radial;
|
||||
bool e100_radial;
|
||||
|
@ -28,6 +28,7 @@
|
||||
#include <opm/io/eclipse/rst/group.hpp>
|
||||
#include <opm/io/eclipse/rst/well.hpp>
|
||||
#include <opm/io/eclipse/rst/udq.hpp>
|
||||
#include <opm/io/eclipse/rst/action.hpp>
|
||||
|
||||
#include <opm/parser/eclipse/Units/UnitSystem.hpp>
|
||||
|
||||
@ -37,6 +38,7 @@
|
||||
namespace Opm {
|
||||
class EclipseGrid;
|
||||
class Parser;
|
||||
class Actdims;
|
||||
} // namespace Opm
|
||||
|
||||
namespace Opm { namespace EclIO {
|
||||
@ -63,6 +65,7 @@ struct RstState {
|
||||
std::vector<RstGroup> groups;
|
||||
std::vector<RstUDQ> udqs;
|
||||
RstUDQActive udq_active;
|
||||
std::vector<RstAction> actions;
|
||||
Tuning tuning;
|
||||
|
||||
private:
|
||||
@ -99,6 +102,15 @@ private:
|
||||
const std::vector<double>& dudg,
|
||||
const std::vector<double>& dudf);
|
||||
|
||||
void add_actions(const Actdims& actdims,
|
||||
std::time_t sim_time,
|
||||
const std::vector<std::string>& zact,
|
||||
const std::vector<int>& iact,
|
||||
const std::vector<float>& sact,
|
||||
const std::vector<std::string>& zacn,
|
||||
const std::vector<int>& iacn,
|
||||
const std::vector<double>& sacn);
|
||||
|
||||
};
|
||||
|
||||
}} // namespace Opm::RestartIO
|
||||
|
@ -38,7 +38,7 @@ namespace Opm { namespace RestartIO { namespace Helpers { namespace VectorItems
|
||||
// The same enum is used for both lefthand side and righthand side quantities;
|
||||
// although not all values can be used on both sides.
|
||||
namespace Value {
|
||||
enum QuantiyType {
|
||||
enum QuantityType {
|
||||
Field = 1,
|
||||
Well = 2,
|
||||
Group = 3,
|
||||
@ -63,6 +63,7 @@ namespace Opm { namespace RestartIO { namespace Helpers { namespace VectorItems
|
||||
namespace SACN {
|
||||
|
||||
enum index : std::vector<int>::size_type {
|
||||
LHSValue0 = 0,
|
||||
RHSValue0 = 2,
|
||||
LHSValue1 = 4,
|
||||
RHSValue1 = 5,
|
||||
@ -78,15 +79,19 @@ namespace Opm { namespace RestartIO { namespace Helpers { namespace VectorItems
|
||||
|
||||
namespace ZACN {
|
||||
enum index : std::vector<int>::size_type {
|
||||
Quantity = 0,
|
||||
LHSQuantity = 0,
|
||||
RHSQuantity = 1,
|
||||
Comparator = 2,
|
||||
Well = 3,
|
||||
LHSWell = 3,
|
||||
RHSWell = 4,
|
||||
Group = 5,
|
||||
LHSGroup = 5,
|
||||
RHSGroup = 6
|
||||
};
|
||||
|
||||
constexpr std::size_t RHSOffset = 1;
|
||||
constexpr std::size_t ConditionSize = 13;
|
||||
}
|
||||
|
||||
|
@ -38,6 +38,11 @@ namespace Opm {
|
||||
class DeckKeyword;
|
||||
class WellMatcher;
|
||||
|
||||
namespace RestartIO {
|
||||
struct RstAction;
|
||||
}
|
||||
|
||||
|
||||
namespace Action {
|
||||
class State;
|
||||
|
||||
@ -71,6 +76,7 @@ public:
|
||||
ActionX(const std::string& name, size_t max_run, double max_wait, std::time_t start_time);
|
||||
ActionX(const DeckKeyword& kw, std::time_t start_time);
|
||||
ActionX(const DeckRecord& record, std::time_t start_time);
|
||||
explicit ActionX(const RestartIO::RstAction& rst_action);
|
||||
|
||||
static ActionX serializeObject();
|
||||
|
||||
|
@ -24,6 +24,8 @@
|
||||
#include <vector>
|
||||
|
||||
#include <opm/common/OpmLog/KeywordLocation.hpp>
|
||||
#include <opm/parser/eclipse/EclipseState/Schedule/Action/Enums.hpp>
|
||||
#include <opm/io/eclipse/rst/action.hpp>
|
||||
|
||||
namespace Opm {
|
||||
|
||||
@ -34,7 +36,9 @@ class Quantity {
|
||||
public:
|
||||
Quantity() = default;
|
||||
|
||||
Quantity(const std::string& arg) :
|
||||
explicit Quantity(const RestartIO::RstAction::Quantity& rst_quantity);
|
||||
|
||||
explicit Quantity(const std::string& arg) :
|
||||
quantity(arg)
|
||||
{}
|
||||
|
||||
@ -63,23 +67,8 @@ public:
|
||||
class Condition {
|
||||
public:
|
||||
|
||||
enum class Logical {
|
||||
AND,
|
||||
OR,
|
||||
END
|
||||
};
|
||||
|
||||
enum class Comparator {
|
||||
EQUAL,
|
||||
GREATER,
|
||||
LESS,
|
||||
GREATER_EQUAL,
|
||||
LESS_EQUAL,
|
||||
INVALID
|
||||
};
|
||||
|
||||
|
||||
Condition() = default;
|
||||
explicit Condition(const RestartIO::RstAction::Condition& rst_condition);
|
||||
Condition(const std::vector<std::string>& tokens, const KeywordLocation& location);
|
||||
|
||||
|
||||
@ -94,7 +83,6 @@ enum class Comparator {
|
||||
|
||||
static Logical logic_from_int(int);
|
||||
int logic_as_int() const;
|
||||
static Comparator comparator_from_int(int);
|
||||
int comparator_as_int() const;
|
||||
int paren_as_int() const;
|
||||
bool open_paren() const;
|
||||
|
51
opm/parser/eclipse/EclipseState/Schedule/Action/Enums.hpp
Normal file
51
opm/parser/eclipse/EclipseState/Schedule/Action/Enums.hpp
Normal file
@ -0,0 +1,51 @@
|
||||
/*
|
||||
Copyright 2021 Equinor ASA.
|
||||
|
||||
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 ACTION_ENUMS_HPP
|
||||
#define ACTION_ENUMS_HPP
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace Opm {
|
||||
namespace Action {
|
||||
|
||||
enum class Logical {
|
||||
AND,
|
||||
OR,
|
||||
END
|
||||
};
|
||||
|
||||
enum class Comparator {
|
||||
EQUAL,
|
||||
GREATER,
|
||||
LESS,
|
||||
GREATER_EQUAL,
|
||||
LESS_EQUAL,
|
||||
INVALID
|
||||
};
|
||||
|
||||
|
||||
Comparator comparator_from_int(int cmp_int);
|
||||
std::string comparator_as_string(Comparator cmp);
|
||||
Logical logic_from_int(int int_logic);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
146
src/opm/io/eclipse/rst/action.cpp
Normal file
146
src/opm/io/eclipse/rst/action.cpp
Normal file
@ -0,0 +1,146 @@
|
||||
/*
|
||||
Copyright 2021 Equinor ASA.
|
||||
|
||||
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/>.
|
||||
*/
|
||||
#include <cmath>
|
||||
|
||||
#include <opm/io/eclipse/rst/action.hpp>
|
||||
#include <opm/output/eclipse/VectorItems/action.hpp>
|
||||
#include <opm/common/utility/String.hpp>
|
||||
#include <opm/common/utility/TimeService.hpp>
|
||||
|
||||
namespace Opm {
|
||||
namespace RestartIO {
|
||||
|
||||
namespace IACN = Helpers::VectorItems::IACN;
|
||||
namespace SACN = Helpers::VectorItems::SACN;
|
||||
namespace ZACN = Helpers::VectorItems::ZACN;
|
||||
|
||||
|
||||
RstAction::RstAction(const std::string& name_arg, int max_run_arg, double min_wait_arg, std::time_t start_time_arg, std::vector<RstAction::Condition> conditions_arg)
|
||||
: name(name_arg)
|
||||
, max_run(max_run_arg)
|
||||
, min_wait(min_wait_arg)
|
||||
, start_time(start_time_arg)
|
||||
, conditions(conditions_arg)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
RstAction::Quantity::Quantity(const std::string * zacn, double sacn_value) {
|
||||
auto str_quantity = trim_copy(zacn[ZACN::Quantity]);
|
||||
if (str_quantity.empty()) {
|
||||
this->quantity = sacn_value;
|
||||
return;
|
||||
}
|
||||
|
||||
this->quantity = str_quantity;
|
||||
if (str_quantity[0] == 'W')
|
||||
this->wgname = trim_copy(zacn[ZACN::Well]);
|
||||
else if (str_quantity[0] == 'G')
|
||||
this->wgname = trim_copy(zacn[ZACN::Group]);
|
||||
}
|
||||
|
||||
RstAction::Quantity::Quantity(const std::string& q)
|
||||
: quantity(q)
|
||||
{
|
||||
}
|
||||
|
||||
RstAction::Quantity::Quantity(double value)
|
||||
: quantity(value)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
RstAction::Condition::Condition(const std::string * zacn, const int * iacn, const double * sacn)
|
||||
: logic(Action::logic_from_int(iacn[IACN::TerminalLogic]))
|
||||
, cmp_op(Action::comparator_from_int(iacn[IACN::Comparator]))
|
||||
{
|
||||
auto type_index = IACN::LHSQuantityType;
|
||||
auto rhs_value = sacn[SACN::RHSValue0];
|
||||
if (iacn[type_index] == IACN::Value::Day) {
|
||||
this->lhs = RstAction::Quantity("DAY");
|
||||
this->rhs = RstAction::Quantity(rhs_value);
|
||||
return;
|
||||
}
|
||||
|
||||
if (iacn[type_index] == IACN::Value::Month) {
|
||||
this->lhs = RstAction::Quantity("MNTH");
|
||||
this->rhs = RstAction::Quantity(TimeService::eclipseMonthNames().at(static_cast<int>(rhs_value)));
|
||||
return;
|
||||
}
|
||||
|
||||
if (iacn[type_index] == IACN::Value::Year) {
|
||||
this->lhs = RstAction::Quantity("YEAR");
|
||||
this->rhs = RstAction::Quantity(rhs_value);
|
||||
return;
|
||||
}
|
||||
|
||||
this->lhs = RstAction::Quantity(zacn, sacn[SACN::LHSValue0]);
|
||||
this->rhs = RstAction::Quantity(&zacn[ZACN::RHSOffset], sacn[SACN::RHSValue0]);
|
||||
this->left_paren = (iacn[IACN::Paren] == IACN::Value::Open);
|
||||
this->right_paren = (iacn[IACN::Paren] == IACN::Value::Close);
|
||||
}
|
||||
|
||||
bool RstAction::Condition::valid(const std::string * zacn, const int * iacn) {
|
||||
auto type_index = IACN::LHSQuantityType;
|
||||
if (iacn[type_index] == IACN::Value::Day)
|
||||
return true;
|
||||
|
||||
if (iacn[type_index] == IACN::Value::Month)
|
||||
return true;
|
||||
|
||||
if (iacn[type_index] == IACN::Value::Year)
|
||||
return true;
|
||||
|
||||
auto str_quantity = trim_copy(zacn[ZACN::LHSQuantity]);
|
||||
return !str_quantity.empty();
|
||||
}
|
||||
|
||||
std::vector<std::string> RstAction::Condition::tokens() const {
|
||||
std::vector<std::string> tokens;
|
||||
if (this->left_paren)
|
||||
tokens.push_back("(");
|
||||
|
||||
tokens.push_back(std::get<std::string>(this->lhs.quantity));
|
||||
if (this->lhs.wgname.has_value())
|
||||
tokens.push_back(this->lhs.wgname.value());
|
||||
|
||||
tokens.push_back(Action::comparator_as_string(this->cmp_op));
|
||||
|
||||
if (std::holds_alternative<std::string>(this->rhs.quantity))
|
||||
tokens.push_back(std::get<std::string>(this->rhs.quantity));
|
||||
else
|
||||
tokens.push_back(format_double(std::get<double>(this->rhs.quantity)));
|
||||
|
||||
if (this->rhs.wgname.has_value())
|
||||
tokens.push_back(this->rhs.wgname.value());
|
||||
|
||||
if (this->right_paren)
|
||||
tokens.push_back(")");
|
||||
|
||||
if (this->logic == Action::Logical::AND)
|
||||
tokens.push_back("AND");
|
||||
|
||||
if (this->logic == Action::Logical::OR)
|
||||
tokens.push_back("OR");
|
||||
|
||||
return tokens;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -90,6 +90,7 @@ RstHeader::RstHeader(const Opm::UnitSystem& unit_system, const std::vector<int>&
|
||||
nwell_udq(intehead[VI::intehead::NO_WELL_UDQS]),
|
||||
ngroup_udq(intehead[VI::intehead::NO_GROUP_UDQS]),
|
||||
nfield_udq(intehead[VI::intehead::NO_FIELD_UDQS]),
|
||||
num_action(intehead[VI::intehead::NOOFACTIONS]),
|
||||
//
|
||||
e300_radial(logihead[VI::logihead::E300Radial]),
|
||||
e100_radial(logihead[VI::logihead::E100Radial]),
|
||||
@ -127,7 +128,7 @@ RstHeader::RstHeader(const Opm::UnitSystem& unit_system, const std::vector<int>&
|
||||
std::time_t RstHeader::sim_time() const {
|
||||
TimeStampUTC ts(this->year, this->month, this->mday);
|
||||
ts.hour(this->hour);
|
||||
ts.minutes(this->minute);
|
||||
ts.minutes(this->minute);
|
||||
ts.microseconds(this->microsecond);
|
||||
return asTimeT(ts);
|
||||
}
|
||||
|
@ -28,6 +28,7 @@
|
||||
#include <opm/io/eclipse/rst/connection.hpp>
|
||||
#include <opm/io/eclipse/rst/well.hpp>
|
||||
#include <opm/io/eclipse/rst/state.hpp>
|
||||
#include <opm/output/eclipse/WriteRestartHelpers.hpp>
|
||||
|
||||
#include <opm/parser/eclipse/Parser/Parser.hpp>
|
||||
#include <opm/output/eclipse/UDQDims.hpp>
|
||||
@ -35,6 +36,8 @@
|
||||
#include <opm/output/eclipse/VectorItems/well.hpp>
|
||||
#include <opm/output/eclipse/VectorItems/intehead.hpp>
|
||||
#include <opm/output/eclipse/VectorItems/doubhead.hpp>
|
||||
#include <opm/parser/eclipse/EclipseState/Schedule/Action/Actdims.hpp>
|
||||
#include <opm/parser/eclipse/EclipseState/Schedule/Action/Condition.hpp>
|
||||
|
||||
|
||||
namespace {
|
||||
@ -60,6 +63,7 @@ namespace {
|
||||
{
|
||||
return Opm::UDQ::updateType(iudq[udq_index * Opm::UDQDims::entriesPerIUDQ()]);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
namespace VI = ::Opm::RestartIO::Helpers::VectorItems;
|
||||
@ -261,6 +265,55 @@ void RstState::add_udqs(const std::vector<int>& iudq,
|
||||
}
|
||||
}
|
||||
|
||||
std::string oper_string(Action::Logical logic) {
|
||||
if (logic == Action::Logical::AND)
|
||||
return "AND";
|
||||
|
||||
if (logic == Action::Logical::OR)
|
||||
return "OR";
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
void RstState::add_actions(const Actdims& actdims,
|
||||
std::time_t sim_time,
|
||||
const std::vector<std::string>& zact,
|
||||
const std::vector<int>& iact,
|
||||
const std::vector<float>& sact,
|
||||
const std::vector<std::string>& zacn,
|
||||
const std::vector<int>& iacn,
|
||||
const std::vector<double>& sacn)
|
||||
{
|
||||
auto zact_action_size = RestartIO::Helpers::entriesPerZACT();
|
||||
auto iact_action_size = RestartIO::Helpers::entriesPerIACT();
|
||||
auto sact_action_size = RestartIO::Helpers::entriesPerSACT();
|
||||
auto zacn_action_size = RestartIO::Helpers::entriesPerZACN(actdims);
|
||||
auto iacn_action_size = RestartIO::Helpers::entriesPerIACN(actdims);
|
||||
auto sacn_action_size = RestartIO::Helpers::entriesPerSACN(actdims);
|
||||
|
||||
auto zacn_cond_size = 13;
|
||||
auto iacn_cond_size = 26;
|
||||
auto sacn_cond_size = 16;
|
||||
|
||||
for (std::size_t index=0; index < static_cast<std::size_t>(this->header.num_action); index++) {
|
||||
std::vector<RstAction::Condition> conditions;
|
||||
for (std::size_t icond = 0; icond < actdims.max_conditions(); icond++) {
|
||||
const auto zacn_offset = index * zacn_action_size + icond * zacn_cond_size;
|
||||
const auto iacn_offset = index * iacn_action_size + icond * iacn_cond_size;
|
||||
const auto sacn_offset = index * sacn_action_size + icond * sacn_cond_size;
|
||||
|
||||
if (RstAction::Condition::valid(&zacn[zacn_offset], &iacn[iacn_offset]))
|
||||
conditions.emplace_back(&zacn[zacn_offset], &iacn[iacn_offset], &sacn[sacn_offset]);
|
||||
}
|
||||
|
||||
const auto& name = zact[index * zact_action_size + 0];
|
||||
const auto& max_run = iact[index * iact_action_size + 5];
|
||||
const auto& min_wait = this->unit_system.to_si(UnitSystem::measure::time, sact[index * sact_action_size + 3]);
|
||||
this->actions.emplace_back(name, max_run, min_wait, sim_time, conditions );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
const RstWell& RstState::get_well(const std::string& wname) const {
|
||||
const auto well_iter = std::find_if(this->wells.begin(),
|
||||
@ -275,7 +328,7 @@ const RstWell& RstState::get_well(const std::string& wname) const {
|
||||
}
|
||||
|
||||
RstState RstState::load(std::shared_ptr<EclIO::RestartFileView> rstView,
|
||||
const Runspec&,
|
||||
const Runspec& runspec,
|
||||
const Parser&,
|
||||
const ::Opm::EclipseGrid* grid)
|
||||
{
|
||||
@ -330,6 +383,17 @@ RstState RstState::load(std::shared_ptr<EclIO::RestartFileView> rstView,
|
||||
}
|
||||
}
|
||||
|
||||
if (state.header.num_action > 0) {
|
||||
const auto& zact = rstView->getKeyword<std::string>("ZACT");
|
||||
const auto& iact = rstView->getKeyword<int>("IACT");
|
||||
const auto& sact = rstView->getKeyword<float>("SACT");
|
||||
const auto& zacn = rstView->getKeyword<std::string>("ZACN");
|
||||
const auto& iacn = rstView->getKeyword<int>("IACN");
|
||||
const auto& sacn = rstView->getKeyword<double>("SACN");
|
||||
state.add_actions(runspec.actdims(), state.header.sim_time(), zact, iact, sact, zacn, iacn, sacn);
|
||||
}
|
||||
|
||||
|
||||
return state;
|
||||
}
|
||||
|
||||
|
@ -36,6 +36,7 @@
|
||||
#include <opm/parser/eclipse/EclipseState/Schedule/Action/Actions.hpp>
|
||||
#include <opm/parser/eclipse/EclipseState/Schedule/Action/ActionX.hpp>
|
||||
#include <opm/parser/eclipse/EclipseState/Schedule/Action/Actdims.hpp>
|
||||
#include <opm/parser/eclipse/EclipseState/Schedule/Action/Enums.hpp>
|
||||
#include <opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQEnums.hpp>
|
||||
#include <opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQParams.hpp>
|
||||
#include <opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQFunctionTable.hpp>
|
||||
@ -73,7 +74,7 @@ namespace {
|
||||
{"Y", 0},
|
||||
};*/
|
||||
|
||||
using cmp_enum = Opm::Action::Condition::Comparator;
|
||||
using cmp_enum = Opm::Action::Comparator;
|
||||
const std::map<cmp_enum, int> cmpToIacn_12 = {
|
||||
{cmp_enum::GREATER, 0},
|
||||
{cmp_enum::LESS, 1},
|
||||
@ -90,7 +91,7 @@ const std::map<std::string, int> rhsQuantityToIndex = {
|
||||
{"G", 3},
|
||||
};
|
||||
|
||||
using logic_enum = Opm::Action::Condition::Logical;
|
||||
using logic_enum = Opm::Action::Logical;
|
||||
|
||||
const std::map<logic_enum, int> logicalToIndex_17 = {
|
||||
{logic_enum::AND, 1},
|
||||
@ -331,7 +332,7 @@ const std::map<logic_enum, int> logicalToIndex_17 = {
|
||||
int first_greater = 0;
|
||||
{
|
||||
const auto& first_cond = actx_cond[0];
|
||||
if (first_cond.cmp == Opm::Action::Condition::Comparator::LESS)
|
||||
if (first_cond.cmp == Opm::Action::Comparator::LESS)
|
||||
first_greater = 1;
|
||||
}
|
||||
|
||||
@ -378,7 +379,7 @@ const std::map<logic_enum, int> logicalToIndex_17 = {
|
||||
parenFirstCond = true;
|
||||
insideParen = true;
|
||||
}
|
||||
if (cond_it->logic == Opm::Action::Condition::Logical::AND) {
|
||||
if (cond_it->logic == Opm::Action::Logical::AND) {
|
||||
allPrevLogicOp_AND = true;
|
||||
}
|
||||
} else {
|
||||
@ -402,9 +403,9 @@ const std::map<logic_enum, int> logicalToIndex_17 = {
|
||||
}
|
||||
|
||||
// update the previous logic-sequence
|
||||
if (parenFirstCond && cond_it->logic == Opm::Action::Condition::Logical::OR) {
|
||||
if (parenFirstCond && cond_it->logic == Opm::Action::Logical::OR) {
|
||||
allPrevLogicOp_AND = false;
|
||||
} else if (!insideParen && cond_it->logic == Opm::Action::Condition::Logical::OR) {
|
||||
} else if (!insideParen && cond_it->logic == Opm::Action::Logical::OR) {
|
||||
allPrevLogicOp_AND = false;
|
||||
}
|
||||
}
|
||||
|
@ -91,9 +91,7 @@ std::size_t Opm::RestartIO::Helpers::entriesPerIACN(const Opm::Actdims& actdims)
|
||||
|
||||
std::size_t Opm::RestartIO::Helpers::entriesPerSACN(const Opm::Actdims& actdims)
|
||||
{
|
||||
//16
|
||||
std::size_t no_entries = 16 * actdims.max_conditions();
|
||||
return no_entries;
|
||||
return Opm::RestartIO::Helpers::VectorItems::SACN::ConditionSize * actdims.max_conditions();
|
||||
}
|
||||
|
||||
std::size_t Opm::RestartIO::Helpers::entriesPerIACT()
|
||||
|
@ -755,12 +755,12 @@ Opm::RestartIO::InteHEAD&
|
||||
Opm::RestartIO::InteHEAD::
|
||||
variousUDQ_ACTIONXParam()
|
||||
{
|
||||
this -> data_[159] = 4;
|
||||
this -> data_[160] = 5;
|
||||
this -> data_[161] = 9;
|
||||
this -> data_[246] = 26;
|
||||
this -> data_[247] = 16;
|
||||
this -> data_[248] = 13;
|
||||
this -> data_[159] = 4; // entriesPerZACT??
|
||||
this -> data_[160] = 5; // entriesPerSACT??
|
||||
this -> data_[161] = 9; // entriesPerIACT??
|
||||
this -> data_[246] = 26; // entriesPerIACN (multiply max_conditions)
|
||||
this -> data_[247] = 16; // entriesPerSACN (multiply max_conditions)
|
||||
this -> data_[248] = 13; // entriesPerZACN (multiply max_conditions)
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
@ -28,6 +28,7 @@
|
||||
#include <opm/parser/eclipse/EclipseState/Schedule/Action/State.hpp>
|
||||
#include <opm/parser/eclipse/EclipseState/Schedule/Well/WellMatcher.hpp>
|
||||
#include <opm/parser/eclipse/Parser/ParserKeywords/W.hpp>
|
||||
#include <opm/io/eclipse/rst/action.hpp>
|
||||
|
||||
#include "ActionParser.hpp"
|
||||
|
||||
@ -60,6 +61,22 @@ ActionX::ActionX(const std::string& name, size_t max_run, double min_wait, std::
|
||||
m_start_time(start_time)
|
||||
{}
|
||||
|
||||
ActionX::ActionX(const RestartIO::RstAction& rst_action)
|
||||
: m_name(rst_action.name)
|
||||
, m_max_run(rst_action.max_run)
|
||||
, m_min_wait(rst_action.min_wait),
|
||||
m_start_time(rst_action.start_time)
|
||||
{
|
||||
std::vector<std::string> tokens;
|
||||
for (const auto& rst_condition : rst_action.conditions) {
|
||||
this->m_conditions.emplace_back(rst_condition);
|
||||
const auto& cond_tokens = rst_condition.tokens();
|
||||
tokens.insert(tokens.end(), cond_tokens.begin(), cond_tokens.end());
|
||||
}
|
||||
this->condition = Action::AST(tokens);
|
||||
}
|
||||
|
||||
|
||||
|
||||
ActionX::ActionX(const DeckRecord& record, std::time_t start_time) :
|
||||
ActionX( record.getItem("NAME").getTrimmedString(0),
|
||||
@ -70,6 +87,9 @@ ActionX::ActionX(const DeckRecord& record, std::time_t start_time) :
|
||||
{}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
ActionX::ActionX(const DeckKeyword& kw, std::time_t start_time) :
|
||||
ActionX(kw.getRecord(0), start_time)
|
||||
{
|
||||
@ -102,8 +122,8 @@ ActionX ActionX::serializeObject()
|
||||
Condition cond;
|
||||
cond.lhs = quant;
|
||||
cond.rhs = quant;
|
||||
cond.logic = Condition::Logical::AND;
|
||||
cond.cmp = Condition::Comparator::GREATER_EQUAL;
|
||||
cond.logic = Logical::AND;
|
||||
cond.cmp = Comparator::GREATER_EQUAL;
|
||||
cond.cmp_string = "test3";
|
||||
result.m_conditions = {cond};
|
||||
|
||||
|
@ -17,13 +17,17 @@
|
||||
along with OPM. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <fmt/format.h>
|
||||
#include <string>
|
||||
|
||||
|
||||
#include <opm/output/eclipse/VectorItems/action.hpp>
|
||||
#include <opm/common/utility/String.hpp>
|
||||
#include <opm/parser/eclipse/Deck/DeckKeyword.hpp>
|
||||
#include <opm/parser/eclipse/EclipseState/Schedule/Action/ActionValue.hpp>
|
||||
#include <opm/parser/eclipse/EclipseState/Schedule/Action/Condition.hpp>
|
||||
#include <opm/parser/eclipse/EclipseState/Schedule/Action/Enums.hpp>
|
||||
#include <opm/io/eclipse/rst/action.hpp>
|
||||
|
||||
#include "ActionParser.hpp"
|
||||
|
||||
@ -34,44 +38,26 @@ namespace Action {
|
||||
|
||||
namespace {
|
||||
|
||||
Condition::Comparator comparator(TokenType tt) {
|
||||
Comparator comparator(TokenType tt) {
|
||||
if (tt == TokenType::op_eq)
|
||||
return Condition::Comparator::EQUAL;
|
||||
return Comparator::EQUAL;
|
||||
|
||||
if (tt == TokenType::op_gt)
|
||||
return Condition::Comparator::GREATER;
|
||||
return Comparator::GREATER;
|
||||
|
||||
if (tt == TokenType::op_lt)
|
||||
return Condition::Comparator::LESS;
|
||||
return Comparator::LESS;
|
||||
|
||||
if (tt == TokenType::op_le)
|
||||
return Condition::Comparator::LESS_EQUAL;
|
||||
return Comparator::LESS_EQUAL;
|
||||
|
||||
if (tt == TokenType::op_ge)
|
||||
return Condition::Comparator::GREATER_EQUAL;
|
||||
return Comparator::GREATER_EQUAL;
|
||||
|
||||
return Condition::Comparator::INVALID;
|
||||
return Comparator::INVALID;
|
||||
}
|
||||
|
||||
|
||||
std::string cmp2string(Condition::Comparator cmp) {
|
||||
if (cmp == Condition::Comparator::EQUAL)
|
||||
return "=";
|
||||
|
||||
if (cmp == Condition::Comparator::GREATER)
|
||||
return ">";
|
||||
|
||||
if (cmp == Condition::Comparator::LESS)
|
||||
return "<";
|
||||
|
||||
if (cmp == Condition::Comparator::LESS_EQUAL)
|
||||
return "<=";
|
||||
|
||||
if (cmp == Condition::Comparator::GREATER_EQUAL)
|
||||
return ">=";
|
||||
|
||||
throw std::logic_error("Bug in opm/flow - should not be here");
|
||||
}
|
||||
|
||||
std::string strip_quotes(const std::string& s) {
|
||||
if (s[0] == '\'')
|
||||
@ -82,6 +68,18 @@ std::string strip_quotes(const std::string& s) {
|
||||
|
||||
}
|
||||
|
||||
Quantity::Quantity(const RestartIO::RstAction::Quantity& rst_quantity)
|
||||
{
|
||||
if (std::holds_alternative<std::string>(rst_quantity.quantity))
|
||||
this->quantity = std::get<std::string>(rst_quantity.quantity);
|
||||
else
|
||||
this->quantity = format_double(std::get<double>(rst_quantity.quantity));
|
||||
|
||||
if (rst_quantity.wgname.has_value())
|
||||
this->add_arg(rst_quantity.wgname.value());
|
||||
}
|
||||
|
||||
|
||||
void Quantity::add_arg(const std::string& arg) {
|
||||
this->args.push_back(strip_quotes(arg));
|
||||
}
|
||||
@ -127,6 +125,17 @@ int Quantity::int_type() const {
|
||||
}
|
||||
|
||||
|
||||
Condition::Condition(const RestartIO::RstAction::Condition& rst_condition)
|
||||
: lhs(rst_condition.lhs)
|
||||
, rhs(rst_condition.rhs)
|
||||
, logic(rst_condition.logic)
|
||||
, cmp(rst_condition.cmp_op)
|
||||
, left_paren(rst_condition.left_paren)
|
||||
, right_paren(rst_condition.right_paren)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
Condition::Condition(const std::vector<std::string>& tokens, const KeywordLocation& location) {
|
||||
std::size_t token_index = 0;
|
||||
if (tokens[0] == "(") {
|
||||
@ -146,7 +155,7 @@ Condition::Condition(const std::vector<std::string>& tokens, const KeywordLocati
|
||||
token_index += 1;
|
||||
} else {
|
||||
this->cmp = comp;
|
||||
this->cmp_string = cmp2string(this->cmp);
|
||||
this->cmp_string = comparator_as_string(this->cmp);
|
||||
token_index += 1;
|
||||
break;
|
||||
}
|
||||
@ -164,9 +173,9 @@ Condition::Condition(const std::vector<std::string>& tokens, const KeywordLocati
|
||||
|
||||
auto token_type = Parser::get_type(tokens[token_index]);
|
||||
if (token_type == TokenType::op_and)
|
||||
this->logic = Condition::Logical::AND;
|
||||
this->logic = Logical::AND;
|
||||
else if (token_type == TokenType::op_or)
|
||||
this->logic = Condition::Logical::OR;
|
||||
this->logic = Logical::OR;
|
||||
else if (token_type == TokenType::close_paren)
|
||||
this->right_paren = true;
|
||||
else
|
||||
@ -207,19 +216,6 @@ int Condition::paren_as_int() const {
|
||||
}
|
||||
|
||||
|
||||
Condition::Logical Condition::logic_from_int(int int_logic) {
|
||||
if (int_logic == 0)
|
||||
return Logical::END;
|
||||
|
||||
if (int_logic == 1)
|
||||
return Logical::AND;
|
||||
|
||||
if (int_logic == 2)
|
||||
return Logical::OR;
|
||||
|
||||
throw std::logic_error("Unknown integer value");
|
||||
}
|
||||
|
||||
int Condition::logic_as_int() const {
|
||||
switch (this->logic) {
|
||||
case Logical::END:
|
||||
@ -233,37 +229,21 @@ int Condition::logic_as_int() const {
|
||||
}
|
||||
}
|
||||
|
||||
Condition::Comparator Condition::comparator_from_int(int cmp_int) {
|
||||
switch (cmp_int) {
|
||||
case 1:
|
||||
return Condition::Comparator::GREATER;
|
||||
case 2:
|
||||
return Condition::Comparator::LESS;
|
||||
case 3:
|
||||
return Condition::Comparator::GREATER_EQUAL;
|
||||
case 4:
|
||||
return Condition::Comparator::LESS_EQUAL;
|
||||
case 5:
|
||||
return Condition::Comparator::EQUAL;
|
||||
default:
|
||||
throw std::logic_error("What the f...?");
|
||||
}
|
||||
}
|
||||
|
||||
int Condition::comparator_as_int() const {
|
||||
switch (this->cmp) {
|
||||
case Condition::Comparator::GREATER:
|
||||
case Comparator::GREATER:
|
||||
return 1;
|
||||
case Condition::Comparator::LESS:
|
||||
case Comparator::LESS:
|
||||
return 2;
|
||||
case Condition::Comparator::GREATER_EQUAL:
|
||||
case Comparator::GREATER_EQUAL:
|
||||
return 3;
|
||||
case Condition::Comparator::LESS_EQUAL:
|
||||
case Comparator::LESS_EQUAL:
|
||||
return 4;
|
||||
case Condition::Comparator::EQUAL:
|
||||
case Comparator::EQUAL:
|
||||
return 5;
|
||||
default:
|
||||
throw std::logic_error("What the f...?");
|
||||
throw std::logic_error(fmt::format("Unhandeled value: {} in enum comparison", static_cast<int>(this->cmp)));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,81 @@
|
||||
/*
|
||||
Copyright 2021 Equinor ASA.
|
||||
|
||||
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/>.
|
||||
*/
|
||||
|
||||
#include <fmt/format.h>
|
||||
#include <stdexcept>
|
||||
|
||||
#include <opm/parser/eclipse/EclipseState/Schedule/Action/Enums.hpp>
|
||||
|
||||
namespace Opm {
|
||||
namespace Action {
|
||||
|
||||
Logical logic_from_int(int int_logic) {
|
||||
if (int_logic == 0)
|
||||
return Logical::END;
|
||||
|
||||
if (int_logic == 1)
|
||||
return Logical::AND;
|
||||
|
||||
if (int_logic == 2)
|
||||
return Logical::OR;
|
||||
|
||||
throw std::logic_error("Unknown integer value");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Comparator comparator_from_int(int cmp_int) {
|
||||
switch (cmp_int) {
|
||||
case 1:
|
||||
return Comparator::GREATER;
|
||||
case 2:
|
||||
return Comparator::LESS;
|
||||
case 3:
|
||||
return Comparator::GREATER_EQUAL;
|
||||
case 4:
|
||||
return Comparator::LESS_EQUAL;
|
||||
case 5:
|
||||
return Comparator::EQUAL;
|
||||
default:
|
||||
throw std::logic_error(fmt::format("Integer value: {} could not be converted to ACTIONX comparator", cmp_int));
|
||||
}
|
||||
}
|
||||
|
||||
std::string comparator_as_string(Comparator cmp) {
|
||||
if (cmp == Comparator::EQUAL)
|
||||
return "=";
|
||||
|
||||
if (cmp == Comparator::GREATER)
|
||||
return ">";
|
||||
|
||||
if (cmp == Comparator::LESS)
|
||||
return "<";
|
||||
|
||||
if (cmp == Comparator::LESS_EQUAL)
|
||||
return "<=";
|
||||
|
||||
if (cmp == Comparator::GREATER_EQUAL)
|
||||
return ">=";
|
||||
|
||||
throw std::logic_error("Bug in opm/flow - should not be here");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -1467,6 +1467,14 @@ namespace {
|
||||
}
|
||||
this->snapshots.back().udq_active.update( std::move(udq_active) );
|
||||
}
|
||||
|
||||
|
||||
if (!rst_state.actions.empty()) {
|
||||
auto actions = this->snapshots.back().actions();
|
||||
for (const auto& rst_action : rst_state.actions)
|
||||
actions.add( Action::ActionX(rst_action) );
|
||||
this->snapshots.back().actions.update( std::move(actions) );
|
||||
}
|
||||
}
|
||||
|
||||
std::shared_ptr<const Python> Schedule::python() const
|
||||
|
569
tests/UDQ_ACTIONX.DATA
Normal file
569
tests/UDQ_ACTIONX.DATA
Normal file
@ -0,0 +1,569 @@
|
||||
RUNSPEC
|
||||
TITLE
|
||||
'Generic' 'Reservoir'
|
||||
NOECHO
|
||||
DIMENS
|
||||
3 5 4 /
|
||||
START
|
||||
22 'AUG' 2018 /
|
||||
OIL
|
||||
GAS
|
||||
WATER
|
||||
DISGAS
|
||||
METRIC
|
||||
TABDIMS
|
||||
1 1 130 24 1 20 /
|
||||
EQLDIMS
|
||||
2 100 20 /
|
||||
WELLDIMS
|
||||
230 120 50 80 /
|
||||
UNIFIN
|
||||
UNIFOUT
|
||||
UDQDIMS
|
||||
50 25 0 50 50 0 0
|
||||
50 0 20 /
|
||||
UDADIMS
|
||||
10 1* 10 /
|
||||
GRID
|
||||
NOECHO
|
||||
INIT
|
||||
GRIDFILE
|
||||
0 1 /
|
||||
MAPAXES
|
||||
0 100 0 0 100 0 /
|
||||
NOECHO
|
||||
SPECGRID
|
||||
3 5 4 1 'F' /
|
||||
COORD
|
||||
2000 2000 2000 1999.5638 2000 2039.9619 2199.8096
|
||||
2000 2008.7239 2199.3735 2000 2048.6858 2399.6193 2000
|
||||
2017.4478 2399.1831 2000 2057.4097 2599.4289 2000 2026.1716
|
||||
2598.9927 2000 2066.1336 2000 2200 2000 1999.5638
|
||||
2200 2039.9619 2199.8096 2200 2008.7239 2199.3735 2200
|
||||
2048.6858 2399.6193 2200 2017.4478 2399.1831 2200 2057.4097
|
||||
2599.4289 2200 2026.1716 2598.9927 2200 2066.1336 2000
|
||||
2400 2000 1999.5638 2400 2039.9619 2199.8096 2400
|
||||
2008.7239 2199.3735 2400 2048.6858 2399.6193 2400 2017.4478
|
||||
2399.1831 2400 2057.4097 2599.4289 2400 2026.1716 2598.9927
|
||||
2400 2066.1336 2000 2600 2000 1999.5638 2600
|
||||
2039.9619 2199.8096 2600 2008.7239 2199.3735 2600 2048.6858
|
||||
2399.6193 2600 2017.4478 2399.1831 2600 2057.4097 2599.4289
|
||||
2600 2026.1716 2598.9927 2600 2066.1336 2000 2800
|
||||
2000 1999.5638 2800 2039.9619 2199.8096 2800 2008.7239
|
||||
2199.3735 2800 2048.6858 2399.6193 2800 2017.4478 2399.1831
|
||||
2800 2057.4097 2599.4289 2800 2026.1716 2598.9927 2800
|
||||
2066.1336 2000 3000 2000 1999.5638 3000 2039.9619
|
||||
2199.8096 3000 2008.7239 2199.3735 3000 2048.6858 2399.6193
|
||||
3000 2017.4478 2399.1831 3000 2057.4097 2599.4289 3000
|
||||
2026.1716 2598.9927 3000 2066.1336 /
|
||||
ZCORN
|
||||
2000 2008.7239 2008.7239 2017.4478 2017.4478 2026.1716 2000
|
||||
2008.7239 2008.7239 2017.4478 2017.4478 2026.1716 2000 2008.7239
|
||||
2008.7239 2017.4478 2017.4478 2026.1716 2000 2008.7239 2008.7239
|
||||
2017.4478 2017.4478 2026.1716 2000 2008.7239 2008.7239 2017.4478
|
||||
2017.4478 2026.1716 2000 2008.7239 2008.7239 2017.4478 2017.4478
|
||||
2026.1716 2000 2008.7239 2008.7239 2017.4478 2017.4478 2026.1716
|
||||
2000 2008.7239 2008.7239 2017.4478 2017.4478 2026.1716 2000
|
||||
2008.7239 2008.7239 2017.4478 2017.4478 2026.1716 2000 2008.7239
|
||||
2008.7239 2017.4478 2017.4478 2026.1716 2009.9905 2018.7144 2018.7144
|
||||
2027.4382 2027.4382 2036.1621 2009.9905 2018.7144 2018.7144 2027.4382
|
||||
2027.4382 2036.1621 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382
|
||||
2036.1621 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621
|
||||
2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 2009.9905
|
||||
2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 2009.9905 2018.7144
|
||||
2018.7144 2027.4382 2027.4382 2036.1621 2009.9905 2018.7144 2018.7144
|
||||
2027.4382 2027.4382 2036.1621 2009.9905 2018.7144 2018.7144 2027.4382
|
||||
2027.4382 2036.1621 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382
|
||||
2036.1621 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621
|
||||
2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 2009.9905
|
||||
2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 2009.9905 2018.7144
|
||||
2018.7144 2027.4382 2027.4382 2036.1621 2009.9905 2018.7144 2018.7144
|
||||
2027.4382 2027.4382 2036.1621 2009.9905 2018.7144 2018.7144 2027.4382
|
||||
2027.4382 2036.1621 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382
|
||||
2036.1621 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621
|
||||
2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 2009.9905
|
||||
2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 2019.981 2028.7048
|
||||
2028.7048 2037.4287 2037.4287 2046.1526 2019.981 2028.7048 2028.7048
|
||||
2037.4287 2037.4287 2046.1526 2019.981 2028.7048 2028.7048 2037.4287
|
||||
2037.4287 2046.1526 2019.981 2028.7048 2028.7048 2037.4287 2037.4287
|
||||
2046.1526 2019.981 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526
|
||||
2019.981 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 2019.981
|
||||
2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 2019.981 2028.7048
|
||||
2028.7048 2037.4287 2037.4287 2046.1526 2019.981 2028.7048 2028.7048
|
||||
2037.4287 2037.4287 2046.1526 2019.981 2028.7048 2028.7048 2037.4287
|
||||
2037.4287 2046.1526 2019.981 2028.7048 2028.7048 2037.4287 2037.4287
|
||||
2046.1526 2019.981 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526
|
||||
2019.981 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 2019.981
|
||||
2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 2019.981 2028.7048
|
||||
2028.7048 2037.4287 2037.4287 2046.1526 2019.981 2028.7048 2028.7048
|
||||
2037.4287 2037.4287 2046.1526 2019.981 2028.7048 2028.7048 2037.4287
|
||||
2037.4287 2046.1526 2019.981 2028.7048 2028.7048 2037.4287 2037.4287
|
||||
2046.1526 2019.981 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526
|
||||
2019.981 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 2029.9714
|
||||
2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 2029.9714 2038.6953
|
||||
2038.6953 2047.4192 2047.4192 2056.1431 2029.9714 2038.6953 2038.6953
|
||||
2047.4192 2047.4192 2056.1431 2029.9714 2038.6953 2038.6953 2047.4192
|
||||
2047.4192 2056.1431 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192
|
||||
2056.1431 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431
|
||||
2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 2029.9714
|
||||
2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 2029.9714 2038.6953
|
||||
2038.6953 2047.4192 2047.4192 2056.1431 2029.9714 2038.6953 2038.6953
|
||||
2047.4192 2047.4192 2056.1431 2029.9714 2038.6953 2038.6953 2047.4192
|
||||
2047.4192 2056.1431 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192
|
||||
2056.1431 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431
|
||||
2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 2029.9714
|
||||
2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 2029.9714 2038.6953
|
||||
2038.6953 2047.4192 2047.4192 2056.1431 2029.9714 2038.6953 2038.6953
|
||||
2047.4192 2047.4192 2056.1431 2029.9714 2038.6953 2038.6953 2047.4192
|
||||
2047.4192 2056.1431 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192
|
||||
2056.1431 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431
|
||||
2039.9619 2048.6858 2048.6858 2057.4097 2057.4097 2066.1336 2039.9619
|
||||
2048.6858 2048.6858 2057.4097 2057.4097 2066.1336 2039.9619 2048.6858
|
||||
2048.6858 2057.4097 2057.4097 2066.1336 2039.9619 2048.6858 2048.6858
|
||||
2057.4097 2057.4097 2066.1336 2039.9619 2048.6858 2048.6858 2057.4097
|
||||
2057.4097 2066.1336 2039.9619 2048.6858 2048.6858 2057.4097 2057.4097
|
||||
2066.1336 2039.9619 2048.6858 2048.6858 2057.4097 2057.4097 2066.1336
|
||||
2039.9619 2048.6858 2048.6858 2057.4097 2057.4097 2066.1336 2039.9619
|
||||
2048.6858 2048.6858 2057.4097 2057.4097 2066.1336 2039.9619 2048.6858
|
||||
2048.6858 2057.4097 2057.4097 2066.1336 /
|
||||
PORO
|
||||
0.25 0.25 0.25 0.25 0.25 0.25 0.25
|
||||
0.25 0.25 0.25 0.25 0.25 0.25 0.25
|
||||
0.25 0.2 0.2 0.2 0.2 0.2 0.2
|
||||
0.2 0.2 0.2 0.2 0.2 0.2 0.2
|
||||
0.2 0.2 0.23 0.23 0.23 0.23 0.23
|
||||
0.23 0.23 0.23 0.23 0.23 0.23 0.23
|
||||
0.23 0.23 0.23 0.18 0.18 0.18 0.18
|
||||
0.18 0.18 0.18 0.18 0.18 0.18 0.18
|
||||
0.18 0.18 0.18 0.18 /
|
||||
PERMX
|
||||
500 500 500 500 500 500 500
|
||||
500 500 500 500 500 500 500
|
||||
500 100 100 100 100 100 100
|
||||
100 100 100 100 100 100 100
|
||||
100 100 1000 1000 1000 1000 1000
|
||||
1000 1000 1000 1000 1000 1000 1000
|
||||
1000 1000 1000 250 250 250 250
|
||||
250 250 250 250 250 250 250
|
||||
250 250 250 250 /
|
||||
COPY
|
||||
'PERMX' 'PERMY' /
|
||||
'PERMX' 'PERMZ' /
|
||||
/
|
||||
MULTIPLY
|
||||
'PERMZ' 0.1 /
|
||||
/
|
||||
MULTZ
|
||||
1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1
|
||||
1 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0
|
||||
0 0 1 1 1 1 1
|
||||
1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1
|
||||
1 1 1 1 /
|
||||
EDIT
|
||||
PROPS
|
||||
SGOF
|
||||
0 0 1 0 0.0183 0.001480314 0.8127534
|
||||
0 0.0366 0.004696335 0.675857 0 0.0549 0.009371694
|
||||
0.5622753 0 0.0732 0.01546379 0.4663578 0 0.0915
|
||||
0.02298664 0.385133 0 0.1098 0.03197913 0.3164995 0
|
||||
0.1281 0.04249268 0.2587408 0 0.1464 0.05458466 0.2103665
|
||||
0 0.1647 0.06831379 0.1700565 0 0.183 0.08373629
|
||||
0.1366388 0 0.2013 0.1009022 0.1090792 0 0.2196
|
||||
0.1198516 0.08647139 0 0.2379 0.1406109 0.06802822 0
|
||||
0.2562 0.1631885 0.05307051 0 0.2745 0.1875705 0.04101619
|
||||
0 0.2928 0.2137163 0.03136912 0 0.3111 0.2415547
|
||||
0.02370834 0 0.3294 0.2709792 0.01767817 0 0.3477
|
||||
0.3018447 0.01297907 0 0.366 0.3339653 0.009359652 0
|
||||
0.3843 0.3671116 0.006609586 0 0.4026 0.401011 0.00455345
|
||||
0 0.4209 0.4353486 0.003045475 0 0.4392 0.4697695
|
||||
0.001965044 0 0.4575 0.5038828 0.001212868 0 0.4758
|
||||
0.5372664 0.0007077659 0 0.4941 0.5694721 0.000383946 0
|
||||
0.5124 0.6000285 0.0001887263 0 0.5307 0.6284408 8.062741e-05
|
||||
0 0.549 0.6541796 2.778023e-05 0 0.5673 0.676644
|
||||
6.602397e-06 0 0.5856 0.6950468 7.048731e-07 0 0.61
|
||||
0.71 0 0 0.6275 0.7825 0 0
|
||||
0.645 0.855 0 0 0.6625 0.9275 0
|
||||
0 0.68 1 0 0 /
|
||||
SWOF
|
||||
0.32 0 1 0 0.3365 3.00925e-08 0.9804566
|
||||
0 0.353 7.541952e-07 0.9391194 0 0.3695 5.01876e-06
|
||||
0.8832853 0 0.386 1.941502e-05 0.8178788 0 0.4025
|
||||
5.581854e-05 0.7471578 0 0.419 0.0001330574 0.674704 0
|
||||
0.4355 0.0002787865 0.60333 0 0.452 0.0005316304 0.535068
|
||||
0 0.4685 0.0009436502 0.4712431 0 0.485 0.001583182
|
||||
0.412597 0 0.5015 0.002538082 0.3594268 0 0.518
|
||||
0.00391938 0.3117147 0 0.5345 0.005865308 0.2692366 0
|
||||
0.551 0.008545575 0.2316458 0 0.5675 0.01216566 0.1985336
|
||||
0 0.584 0.01697073 0.169471 0 0.6005 0.0232485
|
||||
0.1440352 0 0.617 0.03133019 0.1218258 0 0.6335
|
||||
0.04158825 0.1024735 0 0.65 0.05442925 0.08564409 0
|
||||
0.6665 0.07028023 0.0710386 0 0.683 0.08956673 0.05839253
|
||||
0 0.6995 0.1126816 0.0474734 0 0.716 0.1399451
|
||||
0.03807806 0 0.7325 0.1715593 0.03002991 0 0.749
|
||||
0.2075632 0.02317622 0 0.7655 0.2478002 0.01738581 0
|
||||
0.782 0.2919105 0.01254709 0 0.7985 0.3393688 0.008566921
|
||||
0 0.815 0.3895919 0.005370427 0 0.8315 0.4421811
|
||||
0.002903191 0 0.848 0.4975608 0.001139647 0 0.87
|
||||
0.59168 0 0 0.8885714 0.6500114 0 0
|
||||
0.9071429 0.7083429 0 0 0.9257143 0.7666743 0
|
||||
0 0.9442857 0.8250057 0 0 0.9628571 0.8833371
|
||||
0 0 0.9814286 0.9416686 0 0 1
|
||||
1 0 0 /
|
||||
PVDG
|
||||
20 0.061895 0.01299 40 0.030252 0.01383 60
|
||||
0.019844 0.0145 80 0.014686 0.0152 100 0.011627
|
||||
0.01596 120 0.009619 0.01682 140 0.008213 0.0178
|
||||
160 0.007184 0.0189 197.66 0.00582 0.0216 231.13
|
||||
0.005042 0.02477 261.31 0.004561 0.02844 288.87 0.004255
|
||||
0.03272 314.34 0.004062 0.03783 338.2 0.003953 0.0441
|
||||
360.83 0.003947 0.0521 382.58 0.003915 0.06273 403.6
|
||||
0.003912 0.07723 423.77 0.003907 0.09631 /
|
||||
PVTO
|
||||
19.6 20 1.12324 0.96519 55 1.11698 1.03237
|
||||
90 1.11127 1.10051 125 1.10602 1.16942 160
|
||||
1.10119 1.2389 195 1.09672 1.30876 230 1.09256
|
||||
1.37884 265 1.08868 1.44899 300 1.08504 1.51908
|
||||
335 1.08164 1.58903 370 1.07843 1.65876 /
|
||||
31.5 40 1.15981 0.85738 75 1.15288 0.91402
|
||||
110 1.14657 0.97137 145 1.14079 1.02927 180
|
||||
1.13546 1.08759 215 1.13053 1.14617 250 1.12595
|
||||
1.20488 285 1.12168 1.2636 320 1.11768 1.32224
|
||||
355 1.11394 1.38073 390 1.11042 1.43898 /
|
||||
42.4 60 1.191 0.7868 95 1.184 0.8364
|
||||
130 1.177 0.8866 165 1.171 0.9371 200
|
||||
1.165 0.988 235 1.16 1.039 270 1.155
|
||||
1.0902 305 1.15 1.1413 340 1.146 1.1922
|
||||
375 1.142 1.2431 410 1.138 1.2936 /
|
||||
53.4 80 1.222 0.7175 115 1.214 0.7608
|
||||
150 1.206 0.8045 185 1.2 0.8485 220
|
||||
1.194 0.8928 255 1.188 0.9371 290 1.183
|
||||
0.9815 325 1.178 1.0258 360 1.173 1.07
|
||||
395 1.169 1.1141 430 1.165 1.1579 /
|
||||
64.6 100 1.252 0.6544 135 1.244 0.6923
|
||||
170 1.236 0.7305 205 1.229 0.7689 240
|
||||
1.222 0.8075 275 1.216 0.8461 310 1.211
|
||||
0.8847 345 1.205 0.9233 380 1.2 0.9618
|
||||
415 1.196 1 450 1.191 1.0381 /
|
||||
76.3 120 1.284 0.5978 155 1.275 0.6312
|
||||
190 1.266 0.6648 225 1.259 0.6985 260
|
||||
1.252 0.7323 295 1.245 0.7661 330 1.239
|
||||
0.7999 365 1.234 0.8337 400 1.229 0.8673
|
||||
435 1.224 0.9007 470 1.219 0.934 /
|
||||
88.5 140 1.316 0.5477 175 1.307 0.5749
|
||||
210 1.298 0.602 245 1.29 0.629 280
|
||||
1.282 0.6559 315 1.276 0.6827 350 1.269
|
||||
0.7095 385 1.263 0.7362 420 1.258 0.7629
|
||||
455 1.253 0.7895 490 1.248 0.8161 /
|
||||
101.3 160 1.35 0.502 195 1.34 0.5227
|
||||
230 1.331 0.5432 265 1.322 0.5635 300
|
||||
1.314 0.5835 335 1.307 0.6034 370 1.3
|
||||
0.6231 405 1.294 0.6426 440 1.288 0.662
|
||||
475 1.283 0.6813 /
|
||||
114.7 180 1.385 0.4636 215 1.375 0.482
|
||||
250 1.365 0.5003 285 1.356 0.5183 320
|
||||
1.347 0.5362 355 1.34 0.5538 390 1.333
|
||||
0.5712 425 1.326 0.5885 460 1.32 0.6055
|
||||
495 1.314 0.6222 /
|
||||
128.9 200 1.422 0.429 235 1.411 0.4455
|
||||
270 1.401 0.4618 305 1.391 0.4779 340
|
||||
1.382 0.4938 375 1.374 0.5096 410 1.367
|
||||
0.5252 445 1.36 0.5406 480 1.353 0.5558 /
|
||||
143.8 220 1.461 0.3977 255 1.449 0.4125
|
||||
290 1.438 0.4271 325 1.428 0.4415 360
|
||||
1.419 0.4558 395 1.41 0.4699 430 1.402
|
||||
0.4839 465 1.395 0.4977 /
|
||||
159.5 240 1.502 0.3692 275 1.489 0.3825
|
||||
310 1.478 0.3956 345 1.467 0.4086 380
|
||||
1.458 0.4214 415 1.449 0.4341 450 1.44
|
||||
0.4466 485 1.432 0.459 /
|
||||
184 268.79 1.565 0.3324 303.79 1.551 0.3438
|
||||
338.79 1.539 0.3551 373.79 1.528 0.3663 408.79
|
||||
1.517 0.3774 443.79 1.508 0.3883 478.79 1.499
|
||||
0.3991 /
|
||||
226.3 306.18 1.679 0.2855 341.18 1.664 0.2949
|
||||
376.18 1.65 0.3041 411.18 1.637 0.3132 446.18
|
||||
1.625 0.3222 481.18 1.614 0.3311 /
|
||||
268.6 339.93 1.792 0.2517 374.93 1.775 0.2597
|
||||
409.93 1.76 0.2675 444.93 1.746 0.2751 479.93
|
||||
1.732 0.2827 /
|
||||
310.9 371.44 1.903 0.2265 406.44 1.885 0.2333
|
||||
441.44 1.868 0.2401 476.44 1.853 0.2468 /
|
||||
353.3 401.66 2.013 0.2071 436.66 1.993 0.2132
|
||||
471.66 1.975 0.2192 /
|
||||
/
|
||||
PVTW
|
||||
344.83 1.0292 4.002e-05 0.36 0 /
|
||||
ROCK
|
||||
383 4.12e-05 /
|
||||
DENSITY
|
||||
842.3 1001.1 0.9 /
|
||||
REGIONS
|
||||
EQLNUM
|
||||
1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1
|
||||
1 1 2 2 2 2 2
|
||||
2 2 2 2 2 2 2
|
||||
2 2 2 2 2 2 2
|
||||
2 2 2 2 2 2 2
|
||||
2 2 2 2 /
|
||||
SOLUTION
|
||||
EQUIL
|
||||
2030 382.4 2030 0 500 0 1
|
||||
1 0 /
|
||||
2050 382.4 2050 0 500 0 1
|
||||
1 0 /
|
||||
RSVD
|
||||
1500 180 4000 180 /
|
||||
1500 180 4000 180 /
|
||||
RPTRST
|
||||
'BASIC=2' 'PBPD' /
|
||||
SUMMARY
|
||||
FOPR
|
||||
FOPRH
|
||||
FGPR
|
||||
FGPRH
|
||||
FWPR
|
||||
FWPRH
|
||||
FWIR
|
||||
FWIP
|
||||
FOIP
|
||||
FGIP
|
||||
FWCT
|
||||
FWCTH
|
||||
FGOR
|
||||
FGORH
|
||||
FPR
|
||||
RPR
|
||||
/
|
||||
ROIP
|
||||
/
|
||||
ROIPL
|
||||
/
|
||||
ROIPG
|
||||
/
|
||||
RGIP
|
||||
/
|
||||
RGIPL
|
||||
/
|
||||
RGIPG
|
||||
/
|
||||
RGPR
|
||||
/
|
||||
RGPT
|
||||
/
|
||||
GWIR
|
||||
/
|
||||
GVIR
|
||||
/
|
||||
GOPR
|
||||
/
|
||||
GWPR
|
||||
/
|
||||
GLPR
|
||||
/
|
||||
GLPR
|
||||
/
|
||||
GVPR
|
||||
/
|
||||
WOPR
|
||||
/
|
||||
WOPRH
|
||||
/
|
||||
WGPR
|
||||
/
|
||||
WGPRH
|
||||
/
|
||||
WWPR
|
||||
/
|
||||
WWPRH
|
||||
/
|
||||
WOPT
|
||||
/
|
||||
WWPT
|
||||
/
|
||||
WGPT
|
||||
/
|
||||
WOPTH
|
||||
/
|
||||
WWPTH
|
||||
/
|
||||
WGPTH
|
||||
/
|
||||
WWCT
|
||||
/
|
||||
WWCTH
|
||||
/
|
||||
WGOR
|
||||
/
|
||||
WGORH
|
||||
/
|
||||
WWIR
|
||||
/
|
||||
WWIRH
|
||||
/
|
||||
WGIR
|
||||
/
|
||||
WGIRH
|
||||
/
|
||||
WWIT
|
||||
/
|
||||
WWITH
|
||||
/
|
||||
WGIT
|
||||
/
|
||||
WGITH
|
||||
/
|
||||
WBHP
|
||||
/
|
||||
WTHP
|
||||
/
|
||||
WPI
|
||||
/
|
||||
WVPR
|
||||
/
|
||||
WBP
|
||||
/
|
||||
WBP4
|
||||
/
|
||||
WBP9
|
||||
/
|
||||
WMCTL
|
||||
/
|
||||
WLPR
|
||||
/
|
||||
FMWIN
|
||||
FMWPR
|
||||
GMWPR
|
||||
'UPPER' 'LOWER' /
|
||||
GMWIN
|
||||
'UPPER' 'LOWER' /
|
||||
WUPR1
|
||||
'OP*' /
|
||||
WUPR3
|
||||
'OP*' /
|
||||
SCHEDULE
|
||||
GRUPTREE
|
||||
'UPPER' 'TEST' /
|
||||
'LOWER' 'TEST' /
|
||||
/
|
||||
WELSPECS
|
||||
'OPU01' 'UPPER' 1 2 2002 'OIL' 0
|
||||
'STD' 'SHUT' 'YES' 0 'SEG' /
|
||||
'OPU02' 'UPPER' 1 4 2002 'OIL' 0
|
||||
'STD' 'SHUT' 'YES' 0 'SEG' /
|
||||
'OPL01' 'LOWER' 1 2 2025 'OIL' 0
|
||||
'STD' 'SHUT' 'YES' 0 'SEG' /
|
||||
'OPL02' 'LOWER' 1 4 2025 'OIL' 0
|
||||
'STD' 'SHUT' 'YES' 0 'SEG' /
|
||||
/
|
||||
WELSPECS
|
||||
'WIU01' 'UPPER' 3 3 2030 'WATER' 0
|
||||
'STD' 'SHUT' 'YES' 0 'SEG' /
|
||||
'WIL01' 'LOWER' 3 3 2050 'WATER' 0
|
||||
'STD' 'SHUT' 'YES' 0 'SEG' /
|
||||
/
|
||||
COMPDAT
|
||||
'OPU01' 1 2 1 1 'OPEN' 0
|
||||
1* 0.241 1* 2.5 0 'Z' /
|
||||
'OPU02' 1 4 1 1 'OPEN' 0
|
||||
1* 0.241 1* 2.5 0 'Z' /
|
||||
'OPL01' 1 2 3 3 'OPEN' 0
|
||||
1* 0.241 1* 2.5 0 'Z' /
|
||||
'OPL02' 1 4 3 3 'OPEN' 0
|
||||
1* 0.241 1* 2.5 0 'Z' /
|
||||
'WIU01' 3 3 2 2 'OPEN' 0
|
||||
1* 0.241 1* 2.5 0 'Z' /
|
||||
'WIL01' 3 3 4 4 'OPEN' 0
|
||||
1* 0.241 1* 2.5 0 'Z' /
|
||||
/
|
||||
WCONPROD
|
||||
'OPU*' 'SHUT' 'GRUP' 1500 2* 2500 1*
|
||||
60 /
|
||||
'OPL*' 'SHUT' 'GRUP' 1500 2* 2500 1*
|
||||
60 /
|
||||
/
|
||||
WCONINJE
|
||||
'WIU*' 'WATER' 'SHUT' 'GRUP' 10500 1* 500 /
|
||||
'WIL*' 'WATER' 'SHUT' 'GRUP' 10500 1* 500 /
|
||||
/
|
||||
UDQ
|
||||
DEFINE 'WUPR1' 1/(WWCT 'OP*' ) /
|
||||
DEFINE 'WUPR3' SORTA(WUPR1) /
|
||||
/
|
||||
GCONPROD
|
||||
'TEST' 'LRAT' 6000 2* 6000 'RATE' 'NO' /
|
||||
'LOWER' 'FLD' 6000 2* 6000 'RATE' 'YES'
|
||||
1* 'FORM' /
|
||||
'UPPER' 'FLD' 3000 2* 6000 'RATE' 'YES'
|
||||
1* 'FORM' /
|
||||
/
|
||||
GCONINJE
|
||||
'LOWER' 'WATER' 'VREP' 3* 1.2 /
|
||||
'UPPER' 'WATER' 'VREP' 3* 2 /
|
||||
/
|
||||
GUIDERAT
|
||||
0 'OIL' 1 0.5 1 1 0
|
||||
0 'YES' 0.5 /
|
||||
ACTIONX
|
||||
'ACT01' 10 /
|
||||
FMWPR >= 4 AND /
|
||||
WUPR3 'OP*' = 1 /
|
||||
/
|
||||
WELOPEN
|
||||
'?' 'SHUT' 0 0 0 /
|
||||
/
|
||||
ENDACTIO
|
||||
DATES
|
||||
1 'SEP' 2018 /
|
||||
/
|
||||
WELOPEN
|
||||
'OPL01' 'OPEN' /
|
||||
/
|
||||
DATES
|
||||
1 'OCT' 2018 /
|
||||
/
|
||||
WELOPEN
|
||||
'WIL01' 'OPEN' /
|
||||
/
|
||||
DATES
|
||||
1 'NOV' 2018 /
|
||||
/
|
||||
WELOPEN
|
||||
'OPL02' 'OPEN' /
|
||||
/
|
||||
DATES
|
||||
1 'DEC' 2018 /
|
||||
/
|
||||
WELOPEN
|
||||
'OPU01' 'OPEN' /
|
||||
/
|
||||
DATES
|
||||
1 'MAY' 2019 /
|
||||
/
|
||||
WELOPEN
|
||||
'OPU02' 'OPEN' /
|
||||
/
|
||||
DATES
|
||||
1 'JUN' 2019 /
|
||||
/
|
||||
WELOPEN
|
||||
'WIU01' 'OPEN' /
|
||||
/
|
||||
DATES
|
||||
1 'JAN' 2021 /
|
||||
/
|
||||
DATES
|
||||
1 'MAR' 2021 /
|
||||
/
|
||||
DATES
|
||||
1 'MAY' 2021 /
|
||||
/
|
||||
DATES
|
||||
1 'JUL' 2021 /
|
||||
/
|
BIN
tests/UDQ_ACTIONX.X0007
Normal file
BIN
tests/UDQ_ACTIONX.X0007
Normal file
Binary file not shown.
563
tests/UDQ_ACTIONX_RESTART.DATA
Normal file
563
tests/UDQ_ACTIONX_RESTART.DATA
Normal file
@ -0,0 +1,563 @@
|
||||
RUNSPEC
|
||||
TITLE
|
||||
'Generic' 'Reservoir'
|
||||
NOECHO
|
||||
DIMENS
|
||||
3 5 4 /
|
||||
START
|
||||
22 'AUG' 2018 /
|
||||
OIL
|
||||
GAS
|
||||
WATER
|
||||
DISGAS
|
||||
METRIC
|
||||
TABDIMS
|
||||
1 1 130 24 1 20 /
|
||||
EQLDIMS
|
||||
2 100 20 /
|
||||
WELLDIMS
|
||||
230 120 50 80 /
|
||||
UNIFOUT
|
||||
UDQDIMS
|
||||
50 25 0 50 50 0 0
|
||||
50 0 20 /
|
||||
UDADIMS
|
||||
10 1* 10 /
|
||||
GRID
|
||||
NOECHO
|
||||
INIT
|
||||
GRIDFILE
|
||||
0 1 /
|
||||
MAPAXES
|
||||
0 100 0 0 100 0 /
|
||||
NOECHO
|
||||
SPECGRID
|
||||
3 5 4 1 'F' /
|
||||
COORD
|
||||
2000 2000 2000 1999.5638 2000 2039.9619 2199.8096
|
||||
2000 2008.7239 2199.3735 2000 2048.6858 2399.6193 2000
|
||||
2017.4478 2399.1831 2000 2057.4097 2599.4289 2000 2026.1716
|
||||
2598.9927 2000 2066.1336 2000 2200 2000 1999.5638
|
||||
2200 2039.9619 2199.8096 2200 2008.7239 2199.3735 2200
|
||||
2048.6858 2399.6193 2200 2017.4478 2399.1831 2200 2057.4097
|
||||
2599.4289 2200 2026.1716 2598.9927 2200 2066.1336 2000
|
||||
2400 2000 1999.5638 2400 2039.9619 2199.8096 2400
|
||||
2008.7239 2199.3735 2400 2048.6858 2399.6193 2400 2017.4478
|
||||
2399.1831 2400 2057.4097 2599.4289 2400 2026.1716 2598.9927
|
||||
2400 2066.1336 2000 2600 2000 1999.5638 2600
|
||||
2039.9619 2199.8096 2600 2008.7239 2199.3735 2600 2048.6858
|
||||
2399.6193 2600 2017.4478 2399.1831 2600 2057.4097 2599.4289
|
||||
2600 2026.1716 2598.9927 2600 2066.1336 2000 2800
|
||||
2000 1999.5638 2800 2039.9619 2199.8096 2800 2008.7239
|
||||
2199.3735 2800 2048.6858 2399.6193 2800 2017.4478 2399.1831
|
||||
2800 2057.4097 2599.4289 2800 2026.1716 2598.9927 2800
|
||||
2066.1336 2000 3000 2000 1999.5638 3000 2039.9619
|
||||
2199.8096 3000 2008.7239 2199.3735 3000 2048.6858 2399.6193
|
||||
3000 2017.4478 2399.1831 3000 2057.4097 2599.4289 3000
|
||||
2026.1716 2598.9927 3000 2066.1336 /
|
||||
ZCORN
|
||||
2000 2008.7239 2008.7239 2017.4478 2017.4478 2026.1716 2000
|
||||
2008.7239 2008.7239 2017.4478 2017.4478 2026.1716 2000 2008.7239
|
||||
2008.7239 2017.4478 2017.4478 2026.1716 2000 2008.7239 2008.7239
|
||||
2017.4478 2017.4478 2026.1716 2000 2008.7239 2008.7239 2017.4478
|
||||
2017.4478 2026.1716 2000 2008.7239 2008.7239 2017.4478 2017.4478
|
||||
2026.1716 2000 2008.7239 2008.7239 2017.4478 2017.4478 2026.1716
|
||||
2000 2008.7239 2008.7239 2017.4478 2017.4478 2026.1716 2000
|
||||
2008.7239 2008.7239 2017.4478 2017.4478 2026.1716 2000 2008.7239
|
||||
2008.7239 2017.4478 2017.4478 2026.1716 2009.9905 2018.7144 2018.7144
|
||||
2027.4382 2027.4382 2036.1621 2009.9905 2018.7144 2018.7144 2027.4382
|
||||
2027.4382 2036.1621 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382
|
||||
2036.1621 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621
|
||||
2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 2009.9905
|
||||
2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 2009.9905 2018.7144
|
||||
2018.7144 2027.4382 2027.4382 2036.1621 2009.9905 2018.7144 2018.7144
|
||||
2027.4382 2027.4382 2036.1621 2009.9905 2018.7144 2018.7144 2027.4382
|
||||
2027.4382 2036.1621 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382
|
||||
2036.1621 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621
|
||||
2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 2009.9905
|
||||
2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 2009.9905 2018.7144
|
||||
2018.7144 2027.4382 2027.4382 2036.1621 2009.9905 2018.7144 2018.7144
|
||||
2027.4382 2027.4382 2036.1621 2009.9905 2018.7144 2018.7144 2027.4382
|
||||
2027.4382 2036.1621 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382
|
||||
2036.1621 2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621
|
||||
2009.9905 2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 2009.9905
|
||||
2018.7144 2018.7144 2027.4382 2027.4382 2036.1621 2019.981 2028.7048
|
||||
2028.7048 2037.4287 2037.4287 2046.1526 2019.981 2028.7048 2028.7048
|
||||
2037.4287 2037.4287 2046.1526 2019.981 2028.7048 2028.7048 2037.4287
|
||||
2037.4287 2046.1526 2019.981 2028.7048 2028.7048 2037.4287 2037.4287
|
||||
2046.1526 2019.981 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526
|
||||
2019.981 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 2019.981
|
||||
2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 2019.981 2028.7048
|
||||
2028.7048 2037.4287 2037.4287 2046.1526 2019.981 2028.7048 2028.7048
|
||||
2037.4287 2037.4287 2046.1526 2019.981 2028.7048 2028.7048 2037.4287
|
||||
2037.4287 2046.1526 2019.981 2028.7048 2028.7048 2037.4287 2037.4287
|
||||
2046.1526 2019.981 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526
|
||||
2019.981 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 2019.981
|
||||
2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 2019.981 2028.7048
|
||||
2028.7048 2037.4287 2037.4287 2046.1526 2019.981 2028.7048 2028.7048
|
||||
2037.4287 2037.4287 2046.1526 2019.981 2028.7048 2028.7048 2037.4287
|
||||
2037.4287 2046.1526 2019.981 2028.7048 2028.7048 2037.4287 2037.4287
|
||||
2046.1526 2019.981 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526
|
||||
2019.981 2028.7048 2028.7048 2037.4287 2037.4287 2046.1526 2029.9714
|
||||
2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 2029.9714 2038.6953
|
||||
2038.6953 2047.4192 2047.4192 2056.1431 2029.9714 2038.6953 2038.6953
|
||||
2047.4192 2047.4192 2056.1431 2029.9714 2038.6953 2038.6953 2047.4192
|
||||
2047.4192 2056.1431 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192
|
||||
2056.1431 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431
|
||||
2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 2029.9714
|
||||
2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 2029.9714 2038.6953
|
||||
2038.6953 2047.4192 2047.4192 2056.1431 2029.9714 2038.6953 2038.6953
|
||||
2047.4192 2047.4192 2056.1431 2029.9714 2038.6953 2038.6953 2047.4192
|
||||
2047.4192 2056.1431 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192
|
||||
2056.1431 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431
|
||||
2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 2029.9714
|
||||
2038.6953 2038.6953 2047.4192 2047.4192 2056.1431 2029.9714 2038.6953
|
||||
2038.6953 2047.4192 2047.4192 2056.1431 2029.9714 2038.6953 2038.6953
|
||||
2047.4192 2047.4192 2056.1431 2029.9714 2038.6953 2038.6953 2047.4192
|
||||
2047.4192 2056.1431 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192
|
||||
2056.1431 2029.9714 2038.6953 2038.6953 2047.4192 2047.4192 2056.1431
|
||||
2039.9619 2048.6858 2048.6858 2057.4097 2057.4097 2066.1336 2039.9619
|
||||
2048.6858 2048.6858 2057.4097 2057.4097 2066.1336 2039.9619 2048.6858
|
||||
2048.6858 2057.4097 2057.4097 2066.1336 2039.9619 2048.6858 2048.6858
|
||||
2057.4097 2057.4097 2066.1336 2039.9619 2048.6858 2048.6858 2057.4097
|
||||
2057.4097 2066.1336 2039.9619 2048.6858 2048.6858 2057.4097 2057.4097
|
||||
2066.1336 2039.9619 2048.6858 2048.6858 2057.4097 2057.4097 2066.1336
|
||||
2039.9619 2048.6858 2048.6858 2057.4097 2057.4097 2066.1336 2039.9619
|
||||
2048.6858 2048.6858 2057.4097 2057.4097 2066.1336 2039.9619 2048.6858
|
||||
2048.6858 2057.4097 2057.4097 2066.1336 /
|
||||
PORO
|
||||
0.25 0.25 0.25 0.25 0.25 0.25 0.25
|
||||
0.25 0.25 0.25 0.25 0.25 0.25 0.25
|
||||
0.25 0.2 0.2 0.2 0.2 0.2 0.2
|
||||
0.2 0.2 0.2 0.2 0.2 0.2 0.2
|
||||
0.2 0.2 0.23 0.23 0.23 0.23 0.23
|
||||
0.23 0.23 0.23 0.23 0.23 0.23 0.23
|
||||
0.23 0.23 0.23 0.18 0.18 0.18 0.18
|
||||
0.18 0.18 0.18 0.18 0.18 0.18 0.18
|
||||
0.18 0.18 0.18 0.18 /
|
||||
PERMX
|
||||
500 500 500 500 500 500 500
|
||||
500 500 500 500 500 500 500
|
||||
500 100 100 100 100 100 100
|
||||
100 100 100 100 100 100 100
|
||||
100 100 1000 1000 1000 1000 1000
|
||||
1000 1000 1000 1000 1000 1000 1000
|
||||
1000 1000 1000 250 250 250 250
|
||||
250 250 250 250 250 250 250
|
||||
250 250 250 250 /
|
||||
COPY
|
||||
'PERMX' 'PERMY' /
|
||||
'PERMX' 'PERMZ' /
|
||||
/
|
||||
MULTIPLY
|
||||
'PERMZ' 0.1 /
|
||||
/
|
||||
MULTZ
|
||||
1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1
|
||||
1 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0
|
||||
0 0 1 1 1 1 1
|
||||
1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1
|
||||
1 1 1 1 /
|
||||
EDIT
|
||||
PROPS
|
||||
SGOF
|
||||
0 0 1 0 0.0183 0.001480314 0.8127534
|
||||
0 0.0366 0.004696335 0.675857 0 0.0549 0.009371694
|
||||
0.5622753 0 0.0732 0.01546379 0.4663578 0 0.0915
|
||||
0.02298664 0.385133 0 0.1098 0.03197913 0.3164995 0
|
||||
0.1281 0.04249268 0.2587408 0 0.1464 0.05458466 0.2103665
|
||||
0 0.1647 0.06831379 0.1700565 0 0.183 0.08373629
|
||||
0.1366388 0 0.2013 0.1009022 0.1090792 0 0.2196
|
||||
0.1198516 0.08647139 0 0.2379 0.1406109 0.06802822 0
|
||||
0.2562 0.1631885 0.05307051 0 0.2745 0.1875705 0.04101619
|
||||
0 0.2928 0.2137163 0.03136912 0 0.3111 0.2415547
|
||||
0.02370834 0 0.3294 0.2709792 0.01767817 0 0.3477
|
||||
0.3018447 0.01297907 0 0.366 0.3339653 0.009359652 0
|
||||
0.3843 0.3671116 0.006609586 0 0.4026 0.401011 0.00455345
|
||||
0 0.4209 0.4353486 0.003045475 0 0.4392 0.4697695
|
||||
0.001965044 0 0.4575 0.5038828 0.001212868 0 0.4758
|
||||
0.5372664 0.0007077659 0 0.4941 0.5694721 0.000383946 0
|
||||
0.5124 0.6000285 0.0001887263 0 0.5307 0.6284408 8.062741e-05
|
||||
0 0.549 0.6541796 2.778023e-05 0 0.5673 0.676644
|
||||
6.602397e-06 0 0.5856 0.6950468 7.048731e-07 0 0.61
|
||||
0.71 0 0 0.6275 0.7825 0 0
|
||||
0.645 0.855 0 0 0.6625 0.9275 0
|
||||
0 0.68 1 0 0 /
|
||||
SWOF
|
||||
0.32 0 1 0 0.3365 3.00925e-08 0.9804566
|
||||
0 0.353 7.541952e-07 0.9391194 0 0.3695 5.01876e-06
|
||||
0.8832853 0 0.386 1.941502e-05 0.8178788 0 0.4025
|
||||
5.581854e-05 0.7471578 0 0.419 0.0001330574 0.674704 0
|
||||
0.4355 0.0002787865 0.60333 0 0.452 0.0005316304 0.535068
|
||||
0 0.4685 0.0009436502 0.4712431 0 0.485 0.001583182
|
||||
0.412597 0 0.5015 0.002538082 0.3594268 0 0.518
|
||||
0.00391938 0.3117147 0 0.5345 0.005865308 0.2692366 0
|
||||
0.551 0.008545575 0.2316458 0 0.5675 0.01216566 0.1985336
|
||||
0 0.584 0.01697073 0.169471 0 0.6005 0.0232485
|
||||
0.1440352 0 0.617 0.03133019 0.1218258 0 0.6335
|
||||
0.04158825 0.1024735 0 0.65 0.05442925 0.08564409 0
|
||||
0.6665 0.07028023 0.0710386 0 0.683 0.08956673 0.05839253
|
||||
0 0.6995 0.1126816 0.0474734 0 0.716 0.1399451
|
||||
0.03807806 0 0.7325 0.1715593 0.03002991 0 0.749
|
||||
0.2075632 0.02317622 0 0.7655 0.2478002 0.01738581 0
|
||||
0.782 0.2919105 0.01254709 0 0.7985 0.3393688 0.008566921
|
||||
0 0.815 0.3895919 0.005370427 0 0.8315 0.4421811
|
||||
0.002903191 0 0.848 0.4975608 0.001139647 0 0.87
|
||||
0.59168 0 0 0.8885714 0.6500114 0 0
|
||||
0.9071429 0.7083429 0 0 0.9257143 0.7666743 0
|
||||
0 0.9442857 0.8250057 0 0 0.9628571 0.8833371
|
||||
0 0 0.9814286 0.9416686 0 0 1
|
||||
1 0 0 /
|
||||
PVDG
|
||||
20 0.061895 0.01299 40 0.030252 0.01383 60
|
||||
0.019844 0.0145 80 0.014686 0.0152 100 0.011627
|
||||
0.01596 120 0.009619 0.01682 140 0.008213 0.0178
|
||||
160 0.007184 0.0189 197.66 0.00582 0.0216 231.13
|
||||
0.005042 0.02477 261.31 0.004561 0.02844 288.87 0.004255
|
||||
0.03272 314.34 0.004062 0.03783 338.2 0.003953 0.0441
|
||||
360.83 0.003947 0.0521 382.58 0.003915 0.06273 403.6
|
||||
0.003912 0.07723 423.77 0.003907 0.09631 /
|
||||
PVTO
|
||||
19.6 20 1.12324 0.96519 55 1.11698 1.03237
|
||||
90 1.11127 1.10051 125 1.10602 1.16942 160
|
||||
1.10119 1.2389 195 1.09672 1.30876 230 1.09256
|
||||
1.37884 265 1.08868 1.44899 300 1.08504 1.51908
|
||||
335 1.08164 1.58903 370 1.07843 1.65876 /
|
||||
31.5 40 1.15981 0.85738 75 1.15288 0.91402
|
||||
110 1.14657 0.97137 145 1.14079 1.02927 180
|
||||
1.13546 1.08759 215 1.13053 1.14617 250 1.12595
|
||||
1.20488 285 1.12168 1.2636 320 1.11768 1.32224
|
||||
355 1.11394 1.38073 390 1.11042 1.43898 /
|
||||
42.4 60 1.191 0.7868 95 1.184 0.8364
|
||||
130 1.177 0.8866 165 1.171 0.9371 200
|
||||
1.165 0.988 235 1.16 1.039 270 1.155
|
||||
1.0902 305 1.15 1.1413 340 1.146 1.1922
|
||||
375 1.142 1.2431 410 1.138 1.2936 /
|
||||
53.4 80 1.222 0.7175 115 1.214 0.7608
|
||||
150 1.206 0.8045 185 1.2 0.8485 220
|
||||
1.194 0.8928 255 1.188 0.9371 290 1.183
|
||||
0.9815 325 1.178 1.0258 360 1.173 1.07
|
||||
395 1.169 1.1141 430 1.165 1.1579 /
|
||||
64.6 100 1.252 0.6544 135 1.244 0.6923
|
||||
170 1.236 0.7305 205 1.229 0.7689 240
|
||||
1.222 0.8075 275 1.216 0.8461 310 1.211
|
||||
0.8847 345 1.205 0.9233 380 1.2 0.9618
|
||||
415 1.196 1 450 1.191 1.0381 /
|
||||
76.3 120 1.284 0.5978 155 1.275 0.6312
|
||||
190 1.266 0.6648 225 1.259 0.6985 260
|
||||
1.252 0.7323 295 1.245 0.7661 330 1.239
|
||||
0.7999 365 1.234 0.8337 400 1.229 0.8673
|
||||
435 1.224 0.9007 470 1.219 0.934 /
|
||||
88.5 140 1.316 0.5477 175 1.307 0.5749
|
||||
210 1.298 0.602 245 1.29 0.629 280
|
||||
1.282 0.6559 315 1.276 0.6827 350 1.269
|
||||
0.7095 385 1.263 0.7362 420 1.258 0.7629
|
||||
455 1.253 0.7895 490 1.248 0.8161 /
|
||||
101.3 160 1.35 0.502 195 1.34 0.5227
|
||||
230 1.331 0.5432 265 1.322 0.5635 300
|
||||
1.314 0.5835 335 1.307 0.6034 370 1.3
|
||||
0.6231 405 1.294 0.6426 440 1.288 0.662
|
||||
475 1.283 0.6813 /
|
||||
114.7 180 1.385 0.4636 215 1.375 0.482
|
||||
250 1.365 0.5003 285 1.356 0.5183 320
|
||||
1.347 0.5362 355 1.34 0.5538 390 1.333
|
||||
0.5712 425 1.326 0.5885 460 1.32 0.6055
|
||||
495 1.314 0.6222 /
|
||||
128.9 200 1.422 0.429 235 1.411 0.4455
|
||||
270 1.401 0.4618 305 1.391 0.4779 340
|
||||
1.382 0.4938 375 1.374 0.5096 410 1.367
|
||||
0.5252 445 1.36 0.5406 480 1.353 0.5558 /
|
||||
143.8 220 1.461 0.3977 255 1.449 0.4125
|
||||
290 1.438 0.4271 325 1.428 0.4415 360
|
||||
1.419 0.4558 395 1.41 0.4699 430 1.402
|
||||
0.4839 465 1.395 0.4977 /
|
||||
159.5 240 1.502 0.3692 275 1.489 0.3825
|
||||
310 1.478 0.3956 345 1.467 0.4086 380
|
||||
1.458 0.4214 415 1.449 0.4341 450 1.44
|
||||
0.4466 485 1.432 0.459 /
|
||||
184 268.79 1.565 0.3324 303.79 1.551 0.3438
|
||||
338.79 1.539 0.3551 373.79 1.528 0.3663 408.79
|
||||
1.517 0.3774 443.79 1.508 0.3883 478.79 1.499
|
||||
0.3991 /
|
||||
226.3 306.18 1.679 0.2855 341.18 1.664 0.2949
|
||||
376.18 1.65 0.3041 411.18 1.637 0.3132 446.18
|
||||
1.625 0.3222 481.18 1.614 0.3311 /
|
||||
268.6 339.93 1.792 0.2517 374.93 1.775 0.2597
|
||||
409.93 1.76 0.2675 444.93 1.746 0.2751 479.93
|
||||
1.732 0.2827 /
|
||||
310.9 371.44 1.903 0.2265 406.44 1.885 0.2333
|
||||
441.44 1.868 0.2401 476.44 1.853 0.2468 /
|
||||
353.3 401.66 2.013 0.2071 436.66 1.993 0.2132
|
||||
471.66 1.975 0.2192 /
|
||||
/
|
||||
PVTW
|
||||
344.83 1.0292 4.002e-05 0.36 0 /
|
||||
ROCK
|
||||
383 4.12e-05 /
|
||||
DENSITY
|
||||
842.3 1001.1 0.9 /
|
||||
REGIONS
|
||||
EQLNUM
|
||||
1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1
|
||||
1 1 1 1 1 1 1
|
||||
1 1 2 2 2 2 2
|
||||
2 2 2 2 2 2 2
|
||||
2 2 2 2 2 2 2
|
||||
2 2 2 2 2 2 2
|
||||
2 2 2 2 /
|
||||
SOLUTION
|
||||
RESTART
|
||||
'UDQ_ACTIONX' 7 /
|
||||
RPTRST
|
||||
'BASIC=2' 'PBPD' /
|
||||
SUMMARY
|
||||
FOPR
|
||||
FOPRH
|
||||
FGPR
|
||||
FGPRH
|
||||
FWPR
|
||||
FWPRH
|
||||
FWIR
|
||||
FWIP
|
||||
FOIP
|
||||
FGIP
|
||||
FWCT
|
||||
FWCTH
|
||||
FGOR
|
||||
FGORH
|
||||
FPR
|
||||
RPR
|
||||
/
|
||||
ROIP
|
||||
/
|
||||
ROIPL
|
||||
/
|
||||
ROIPG
|
||||
/
|
||||
RGIP
|
||||
/
|
||||
RGIPL
|
||||
/
|
||||
RGIPG
|
||||
/
|
||||
RGPR
|
||||
/
|
||||
RGPT
|
||||
/
|
||||
GWIR
|
||||
/
|
||||
GVIR
|
||||
/
|
||||
GOPR
|
||||
/
|
||||
GWPR
|
||||
/
|
||||
GLPR
|
||||
/
|
||||
GLPR
|
||||
/
|
||||
GVPR
|
||||
/
|
||||
WOPR
|
||||
/
|
||||
WOPRH
|
||||
/
|
||||
WGPR
|
||||
/
|
||||
WGPRH
|
||||
/
|
||||
WWPR
|
||||
/
|
||||
WWPRH
|
||||
/
|
||||
WOPT
|
||||
/
|
||||
WWPT
|
||||
/
|
||||
WGPT
|
||||
/
|
||||
WOPTH
|
||||
/
|
||||
WWPTH
|
||||
/
|
||||
WGPTH
|
||||
/
|
||||
WWCT
|
||||
/
|
||||
WWCTH
|
||||
/
|
||||
WGOR
|
||||
/
|
||||
WGORH
|
||||
/
|
||||
WWIR
|
||||
/
|
||||
WWIRH
|
||||
/
|
||||
WGIR
|
||||
/
|
||||
WGIRH
|
||||
/
|
||||
WWIT
|
||||
/
|
||||
WWITH
|
||||
/
|
||||
WGIT
|
||||
/
|
||||
WGITH
|
||||
/
|
||||
WBHP
|
||||
/
|
||||
WTHP
|
||||
/
|
||||
WPI
|
||||
/
|
||||
WVPR
|
||||
/
|
||||
WBP
|
||||
/
|
||||
WBP4
|
||||
/
|
||||
WBP9
|
||||
/
|
||||
WMCTL
|
||||
/
|
||||
WLPR
|
||||
/
|
||||
FMWIN
|
||||
FMWPR
|
||||
GMWPR
|
||||
'UPPER' 'LOWER' /
|
||||
GMWIN
|
||||
'UPPER' 'LOWER' /
|
||||
WUPR1
|
||||
'OP*' /
|
||||
WUPR3
|
||||
'OP*' /
|
||||
SCHEDULE
|
||||
SKIPREST
|
||||
GRUPTREE
|
||||
'UPPER' 'TEST' /
|
||||
'LOWER' 'TEST' /
|
||||
/
|
||||
WELSPECS
|
||||
'OPU01' 'UPPER' 1 2 2002 'OIL' 0
|
||||
'STD' 'SHUT' 'YES' 0 'SEG' /
|
||||
'OPU02' 'UPPER' 1 4 2002 'OIL' 0
|
||||
'STD' 'SHUT' 'YES' 0 'SEG' /
|
||||
'OPL01' 'LOWER' 1 2 2025 'OIL' 0
|
||||
'STD' 'SHUT' 'YES' 0 'SEG' /
|
||||
'OPL02' 'LOWER' 1 4 2025 'OIL' 0
|
||||
'STD' 'SHUT' 'YES' 0 'SEG' /
|
||||
/
|
||||
WELSPECS
|
||||
'WIU01' 'UPPER' 3 3 2030 'WATER' 0
|
||||
'STD' 'SHUT' 'YES' 0 'SEG' /
|
||||
'WIL01' 'LOWER' 3 3 2050 'WATER' 0
|
||||
'STD' 'SHUT' 'YES' 0 'SEG' /
|
||||
/
|
||||
COMPDAT
|
||||
'OPU01' 1 2 1 1 'OPEN' 0
|
||||
1* 0.241 1* 2.5 0 'Z' /
|
||||
'OPU02' 1 4 1 1 'OPEN' 0
|
||||
1* 0.241 1* 2.5 0 'Z' /
|
||||
'OPL01' 1 2 3 3 'OPEN' 0
|
||||
1* 0.241 1* 2.5 0 'Z' /
|
||||
'OPL02' 1 4 3 3 'OPEN' 0
|
||||
1* 0.241 1* 2.5 0 'Z' /
|
||||
'WIU01' 3 3 2 2 'OPEN' 0
|
||||
1* 0.241 1* 2.5 0 'Z' /
|
||||
'WIL01' 3 3 4 4 'OPEN' 0
|
||||
1* 0.241 1* 2.5 0 'Z' /
|
||||
/
|
||||
WCONPROD
|
||||
'OPU*' 'SHUT' 'GRUP' 1500 2* 2500 1*
|
||||
60 /
|
||||
'OPL*' 'SHUT' 'GRUP' 1500 2* 2500 1*
|
||||
60 /
|
||||
/
|
||||
WCONINJE
|
||||
'WIU*' 'WATER' 'SHUT' 'GRUP' 10500 1* 500 /
|
||||
'WIL*' 'WATER' 'SHUT' 'GRUP' 10500 1* 500 /
|
||||
/
|
||||
UDQ
|
||||
DEFINE 'WUPR1' 1/(WWCT 'OP*' ) /
|
||||
DEFINE 'WUPR3' SORTA(WUPR1) /
|
||||
/
|
||||
GCONPROD
|
||||
'TEST' 'LRAT' 6000 2* 6000 'RATE' 'NO' /
|
||||
'LOWER' 'FLD' 6000 2* 6000 'RATE' 'YES'
|
||||
1* 'FORM' /
|
||||
'UPPER' 'FLD' 3000 2* 6000 'RATE' 'YES'
|
||||
1* 'FORM' /
|
||||
/
|
||||
GCONINJE
|
||||
'LOWER' 'WATER' 'VREP' 3* 1.2 /
|
||||
'UPPER' 'WATER' 'VREP' 3* 2 /
|
||||
/
|
||||
GUIDERAT
|
||||
0 'OIL' 1 0.5 1 1 0
|
||||
0 'YES' 0.5 /
|
||||
ACTIONX
|
||||
'ACT01' 10 /
|
||||
FMWPR >= 4 AND /
|
||||
WUPR3 'OP*' = 1 /
|
||||
/
|
||||
WELOPEN
|
||||
'?' 'SHUT' 0 0 0 /
|
||||
/
|
||||
ENDACTIO
|
||||
DATES
|
||||
1 'SEP' 2018 /
|
||||
/
|
||||
WELOPEN
|
||||
'OPL01' 'OPEN' /
|
||||
/
|
||||
DATES
|
||||
1 'OCT' 2018 /
|
||||
/
|
||||
WELOPEN
|
||||
'WIL01' 'OPEN' /
|
||||
/
|
||||
DATES
|
||||
1 'NOV' 2018 /
|
||||
/
|
||||
WELOPEN
|
||||
'OPL02' 'OPEN' /
|
||||
/
|
||||
DATES
|
||||
1 'DEC' 2018 /
|
||||
/
|
||||
WELOPEN
|
||||
'OPU01' 'OPEN' /
|
||||
/
|
||||
DATES
|
||||
1 'MAY' 2019 /
|
||||
/
|
||||
WELOPEN
|
||||
'OPU02' 'OPEN' /
|
||||
/
|
||||
DATES
|
||||
1 'JUN' 2019 /
|
||||
/
|
||||
WELOPEN
|
||||
'WIU01' 'OPEN' /
|
||||
/
|
||||
DATES
|
||||
1 'JAN' 2021 /
|
||||
/
|
||||
DATES
|
||||
1 'MAR' 2021 /
|
||||
/
|
||||
DATES
|
||||
1 'MAY' 2021 /
|
||||
/
|
||||
DATES
|
||||
1 'JUL' 2021 /
|
||||
/
|
@ -702,7 +702,7 @@ BOOST_AUTO_TEST_CASE(Conditions) {
|
||||
BOOST_CHECK_THROW(Action::Condition cond({"WWCT", "OPX", ">"}, location), std::invalid_argument);
|
||||
|
||||
Action::Condition cond({"WWCT", "OPX", ">", "0.75", "AND"}, location);
|
||||
BOOST_CHECK(cond.cmp == Action::Condition::Comparator::GREATER);
|
||||
BOOST_CHECK(cond.cmp == Action::Comparator::GREATER);
|
||||
BOOST_CHECK(cond.cmp_string == ">" );
|
||||
BOOST_CHECK_EQUAL(cond.lhs.quantity, "WWCT");
|
||||
BOOST_CHECK_EQUAL(cond.lhs.args.size(), 1U);
|
||||
@ -712,10 +712,10 @@ BOOST_AUTO_TEST_CASE(Conditions) {
|
||||
|
||||
BOOST_CHECK_EQUAL(cond.rhs.quantity, "0.75");
|
||||
BOOST_CHECK_EQUAL(cond.rhs.args.size(), 0U);
|
||||
BOOST_CHECK(cond.logic == Action::Condition::Logical::AND);
|
||||
BOOST_CHECK(cond.logic == Action::Logical::AND);
|
||||
|
||||
Action::Condition cond2({"WWCT", "OPX", "<=", "WSOPR", "OPX", "235"}, location);
|
||||
BOOST_CHECK(cond2.cmp == Action::Condition::Comparator::LESS_EQUAL);
|
||||
BOOST_CHECK(cond2.cmp == Action::Comparator::LESS_EQUAL);
|
||||
BOOST_CHECK(cond2.cmp_string == "<=" );
|
||||
BOOST_CHECK_EQUAL(cond2.lhs.quantity, "WWCT");
|
||||
BOOST_CHECK_EQUAL(cond2.lhs.args.size(), 1U);
|
||||
@ -725,7 +725,7 @@ BOOST_AUTO_TEST_CASE(Conditions) {
|
||||
BOOST_CHECK_EQUAL(cond2.rhs.args.size(), 2U);
|
||||
BOOST_CHECK_EQUAL(cond2.rhs.args[0], "OPX");
|
||||
BOOST_CHECK_EQUAL(cond2.rhs.args[1], "235");
|
||||
BOOST_CHECK(cond2.logic == Action::Condition::Logical::END);
|
||||
BOOST_CHECK(cond2.logic == Action::Logical::END);
|
||||
}
|
||||
|
||||
|
||||
@ -808,8 +808,8 @@ TSTEP
|
||||
|
||||
const auto& cond0 = conditions[0];
|
||||
BOOST_CHECK_EQUAL(cond0.lhs.quantity, "WWCT");
|
||||
BOOST_CHECK(cond0.cmp == Action::Condition::Comparator::GREATER);
|
||||
BOOST_CHECK(cond0.logic == Action::Condition::Logical::AND);
|
||||
BOOST_CHECK(cond0.cmp == Action::Comparator::GREATER);
|
||||
BOOST_CHECK(cond0.logic == Action::Logical::AND);
|
||||
BOOST_CHECK_EQUAL(cond0.lhs.args.size(), 1U);
|
||||
BOOST_CHECK_EQUAL(cond0.lhs.args[0], "OPX");
|
||||
BOOST_CHECK_EQUAL(cond0.rhs.args.size(), 0U);
|
||||
@ -817,8 +817,8 @@ TSTEP
|
||||
|
||||
const auto& cond1 = conditions[1];
|
||||
BOOST_CHECK_EQUAL(cond1.lhs.quantity, "FPR");
|
||||
BOOST_CHECK(cond1.cmp == Action::Condition::Comparator::LESS);
|
||||
BOOST_CHECK(cond1.logic == Action::Condition::Logical::END);
|
||||
BOOST_CHECK(cond1.cmp == Action::Comparator::LESS);
|
||||
BOOST_CHECK(cond1.logic == Action::Logical::END);
|
||||
|
||||
/*****************************************************************/
|
||||
|
||||
@ -829,16 +829,16 @@ TSTEP
|
||||
const auto& condB = actB.conditions();
|
||||
BOOST_CHECK_EQUAL(condB.size() , 1U);
|
||||
BOOST_CHECK_EQUAL(condB[0].lhs.quantity, "FWCT");
|
||||
BOOST_CHECK(condB[0].cmp == Action::Condition::Comparator::LESS_EQUAL);
|
||||
BOOST_CHECK(condB[0].logic == Action::Condition::Logical::END);
|
||||
BOOST_CHECK(condB[0].cmp == Action::Comparator::LESS_EQUAL);
|
||||
BOOST_CHECK(condB[0].logic == Action::Logical::END);
|
||||
BOOST_CHECK_EQUAL(condB[0].cmp_string, "<=");
|
||||
|
||||
const auto& actA = actions2["A"];
|
||||
const auto& condA = actA.conditions();
|
||||
BOOST_CHECK_EQUAL(condA.size() , 1U);
|
||||
BOOST_CHECK_EQUAL(condA[0].lhs.quantity, "WOPR");
|
||||
BOOST_CHECK(condA[0].cmp == Action::Condition::Comparator::EQUAL);
|
||||
BOOST_CHECK(condA[0].logic == Action::Condition::Logical::END);
|
||||
BOOST_CHECK(condA[0].cmp == Action::Comparator::EQUAL);
|
||||
BOOST_CHECK(condA[0].logic == Action::Logical::END);
|
||||
BOOST_CHECK_EQUAL(condA[0].cmp_string , "=");
|
||||
|
||||
std::size_t index = 0;
|
||||
|
@ -171,3 +171,11 @@ BOOST_AUTO_TEST_CASE(LoadUDQRestartSim) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(LoadActionRestartSim) {
|
||||
const auto& [sched, restart_sched] = load_schedule_pair("UDQ_ACTIONX.DATA", "UDQ_ACTIONX_RESTART.DATA", "UDQ_ACTIONX.X0007", 7);
|
||||
const auto& input_actions = sched[7].actions();
|
||||
const auto& rst_actions = restart_sched[7].actions();
|
||||
|
||||
BOOST_CHECK_EQUAL(input_actions.ecl_size(), rst_actions.ecl_size());
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user