Merge pull request #2649 from joakim-hove/actdims-rename

Rename actDims in AggregateActionxData
This commit is contained in:
Joakim Hove
2021-09-04 19:10:47 +02:00
committed by GitHub
12 changed files with 95 additions and 92 deletions

View File

@@ -302,7 +302,7 @@ if(ENABLE_ECL_OUTPUT)
src/opm/output/eclipse/AggregateUDQData.cpp
src/opm/output/eclipse/AggregateWellData.cpp
src/opm/output/eclipse/AggregateWListData.cpp
src/opm/output/eclipse/CreateActionxDims.cpp
src/opm/output/eclipse/CreateActionRSTDims.cpp
src/opm/output/eclipse/CreateDoubHead.cpp
src/opm/output/eclipse/CreateInteHead.cpp
src/opm/output/eclipse/CreateLogiHead.cpp

View File

@@ -54,14 +54,11 @@ namespace Opm { namespace RestartIO { namespace Helpers {
class AggregateActionxData
{
public:
explicit AggregateActionxData(const std::vector<int>& actDims);
void captureDeclaredActionxData( const Opm::Schedule& sched,
const Opm::UnitSystem& units,
const Opm::Action::State& action_state,
const Opm::SummaryState& st,
const std::vector<int>& actDims,
const std::size_t simStep);
AggregateActionxData(const Opm::Schedule& sched,
const Opm::Action::State& action_state,
const Opm::SummaryState& st,
const std::size_t simStep);
const std::vector<int>& getIACT() const
{
@@ -100,6 +97,12 @@ public:
}
private:
AggregateActionxData( const std::vector<int>& rst_dims,
const Opm::Schedule& sched,
const Opm::Action::State& action_state,
const Opm::SummaryState& st,
const std::size_t simStep);
/// Aggregate 'IACT' array (Integer) for all ACTIONX data (9 integers pr UDQ)
WindowedArray<int> iACT_;

View File

@@ -63,8 +63,7 @@ namespace Opm { namespace RestartIO { namespace Helpers {
const std::vector<int>& inteHead);
std::vector<int>
createActionxDims( const Runspec& rspec,
const Schedule& sched,
createActionRSTDims(const Schedule& sched,
const std::size_t simStep);
}}} // Opm::RestartIO::Helpers

View File

@@ -45,7 +45,8 @@ public:
static Actions serializeObject();
size_t size() const;
std::size_t py_size() const;
std::size_t ecl_size() const;
int max_input_lines() const;
bool empty() const;
void add(const ActionX& action);

View File

@@ -197,6 +197,7 @@ namespace Opm
double stepLength(std::size_t timeStep) const;
std::optional<int> exitStatus() const;
const UnitSystem& getUnits() const { return this->m_static.m_unit_system; }
const Runspec& runspec() const { return this->m_static.m_runspec; }
std::size_t numWells() const;
std::size_t numWells(std::size_t timestep) const;

View File

@@ -667,27 +667,20 @@ const std::map<cmp_enum, int> cmpToIndex = {
// =====================================================================
Opm::RestartIO::Helpers::AggregateActionxData::
AggregateActionxData(const std::vector<int>& actDims)
: iACT_ (iACT::allocate(actDims)),
sACT_ (sACT::allocate(actDims)),
zACT_ (zACT::allocate(actDims)),
zLACT_(zLACT::allocate(actDims)),
zACN_ (zACN::allocate(actDims)),
iACN_ (iACN::allocate(actDims)),
sACN_ (sACN::allocate(actDims))
{}
// ---------------------------------------------------------------------
void
Opm::RestartIO::Helpers::AggregateActionxData::
captureDeclaredActionxData( const Opm::Schedule& sched,
const Opm::UnitSystem& units,
const Opm::Action::State& action_state,
const Opm::SummaryState& st,
const std::vector<int>& actDims,
const std::size_t simStep)
AggregateActionxData( const std::vector<int>& rst_dims,
const Opm::Schedule& sched,
const Opm::Action::State& action_state,
const Opm::SummaryState& st,
const std::size_t simStep)
: iACT_ (iACT::allocate(rst_dims))
, sACT_ (sACT::allocate(rst_dims))
, zACT_ (zACT::allocate(rst_dims))
, zLACT_(zLACT::allocate(rst_dims))
, zACN_ (zACN::allocate(rst_dims))
, iACN_ (iACN::allocate(rst_dims))
, sACN_ (sACN::allocate(rst_dims))
{
const auto& acts = sched[simStep].actions.get();
std::size_t act_ind = 0;
for (auto actx_it = acts.begin(); actx_it < acts.end(); actx_it++) {
@@ -698,7 +691,7 @@ captureDeclaredActionxData( const Opm::Schedule& sched,
{
auto s_act = this->sACT_[act_ind];
sACT::staticContrib(*actx_it, units, s_act);
sACT::staticContrib(*actx_it, sched.getUnits(), s_act);
}
{
@@ -708,7 +701,7 @@ captureDeclaredActionxData( const Opm::Schedule& sched,
{
auto z_lact = this->zLACT_[act_ind];
zLACT::staticContrib(*actx_it, actDims[8], z_lact);
zLACT::staticContrib(*actx_it, rst_dims[8], z_lact);
}
{
@@ -730,3 +723,16 @@ captureDeclaredActionxData( const Opm::Schedule& sched,
}
}
Opm::RestartIO::Helpers::AggregateActionxData::
AggregateActionxData( const Opm::Schedule& sched,
const Opm::Action::State& action_state,
const Opm::SummaryState& st,
const std::size_t simStep)
: AggregateActionxData( Opm::RestartIO::Helpers::createActionRSTDims(sched, simStep),
sched,
action_state,
st,
simStep )
{
}

View File

@@ -43,7 +43,7 @@ namespace {
// The number of actions (no of Actionx)
std::size_t noOfActions(const Opm::Action::Actions& acts)
{
std::size_t no_entries = acts.size();
std::size_t no_entries = acts.ecl_size();
return no_entries;
}
@@ -67,9 +67,9 @@ std::size_t entriesPerZACT()
}
// (The max number of characters in an action statement / (8 - chars pr string)) * (max over actions of number of lines pr ACTIONX)
std::size_t entriesPerZLACT(const Opm::Runspec& rspec, const Opm::Action::Actions& acts)
std::size_t entriesPerZLACT(const Opm::Actdims& actdims, const Opm::Action::Actions& acts)
{
int max_char_pr_line = rspec.actdims().max_characters();
int max_char_pr_line = actdims.max_characters();
std::size_t no_entries_pr_line = ((max_char_pr_line % 8) == 0) ? max_char_pr_line / 8 : (max_char_pr_line / 8) + 1;
std::size_t no_entries = no_entries_pr_line * acts.max_input_lines();
@@ -77,33 +77,33 @@ std::size_t entriesPerZLACT(const Opm::Runspec& rspec, const Opm::Action::Action
}
// The max number of characters in an action statement * (max over actions of number of lines pr ACTIONX) / (8 - chars pr string)
std::size_t entriesPerLine(const Opm::Runspec& rspec)
std::size_t entriesPerLine(const Opm::Actdims& actdims)
{
int max_char_pr_line = rspec.actdims().max_characters();
int max_char_pr_line = actdims.max_characters();
std::size_t no_entries_pr_line = ((max_char_pr_line % 8) == 0) ? max_char_pr_line / 8 : (max_char_pr_line / 8) + 1;
return no_entries_pr_line;
}
std::size_t entriesPerZACN(const Opm::Runspec& rspec)
std::size_t entriesPerZACN(const Opm::Actdims& actdims)
{
//(Max number of conditions pr ACTIONX) * ((max no characters pr line = 104) / (8 - characters pr string)(104/8 = 13)
std::size_t no_entries = rspec.actdims().max_conditions() * 13;
std::size_t no_entries = actdims.max_conditions() * 13;
return no_entries;
}
std::size_t entriesPerIACN(const Opm::Runspec& rspec)
std::size_t entriesPerIACN(const Opm::Actdims& actdims)
{
//26*Max number of conditions pr ACTIONX
std::size_t no_entries = 26 * rspec.actdims().max_conditions();
std::size_t no_entries = 26 * actdims.max_conditions();
return no_entries;
}
std::size_t entriesPerSACN(const Opm::Runspec& rspec)
std::size_t entriesPerSACN(const Opm::Actdims& actdims)
{
//16
std::size_t no_entries = 16 * rspec.actdims().max_conditions();
std::size_t no_entries = 16 * actdims.max_conditions();
return no_entries;
}
@@ -117,23 +117,23 @@ std::size_t entriesPerSACN(const Opm::Runspec& rspec)
std::vector<int>
Opm::RestartIO::Helpers::
createActionxDims( const Runspec& rspec,
const Schedule& sched,
const std::size_t simStep)
createActionRSTDims(const Schedule& sched,
const std::size_t simStep)
{
const auto& acts = sched[simStep].actions.get();
std::vector<int> actDims(9);
const auto& actdims = sched.runspec().actdims();
std::vector<int> action_rst_dims(9);
//No of Actionx keywords
actDims[0] = noOfActions(acts);
actDims[1] = entriesPerIACT();
actDims[2] = entriesPerSACT();
actDims[3] = entriesPerZACT();
actDims[4] = entriesPerZLACT(rspec, acts);
actDims[5] = entriesPerZACN(rspec);
actDims[6] = entriesPerIACN(rspec);
actDims[7] = entriesPerSACN(rspec);
actDims[8] = entriesPerLine(rspec);
action_rst_dims[0] = noOfActions(acts);
action_rst_dims[1] = entriesPerIACT();
action_rst_dims[2] = entriesPerSACT();
action_rst_dims[3] = entriesPerZACT();
action_rst_dims[4] = entriesPerZLACT(actdims, acts);
action_rst_dims[5] = entriesPerZACN(actdims);
action_rst_dims[6] = entriesPerIACN(actdims);
action_rst_dims[7] = entriesPerSACN(actdims);
action_rst_dims[8] = entriesPerLine(actdims);
return actDims;
return action_rst_dims;
}

View File

@@ -353,7 +353,7 @@ namespace {
return { 0, 0, 0, 0 };
}
const auto& no_act = acts.size();
const auto& no_act = acts.ecl_size();
const auto max_lines_pr_action = acts.max_input_lines();
const auto max_cond_per_action = rspec.actdims().max_conditions();
const auto max_characters_per_line = rspec.actdims().max_characters();

View File

@@ -351,34 +351,27 @@ namespace {
void writeActionx(const int report_step,
const int sim_step,
const EclipseState& es,
const Schedule& schedule,
const Opm::UnitSystem& units,
const Action::State& action_state,
const SummaryState& sum_state,
EclIO::OutputStream::Restart& rstFile)
{
if (report_step == 0) {
// Initial condition. No ACTION* data yet.
if (report_step == 0)
return;
if (schedule[sim_step].actions().ecl_size() == 0)
return;
}
// write ACTIONX - data to restart file
const std::size_t simStep = static_cast<size_t> (sim_step);
const auto actDims = Opm::RestartIO::Helpers::createActionxDims(es.runspec(), schedule, simStep);
auto actionxData = Opm::RestartIO::Helpers::AggregateActionxData(actDims);
actionxData.captureDeclaredActionxData(schedule, units, action_state, sum_state, actDims, simStep);
if (actDims[0] >= 1) {
rstFile.write("IACT", actionxData.getIACT());
rstFile.write("SACT", actionxData.getSACT());
rstFile.write("ZACT", actionxData.getZACT());
rstFile.write("ZLACT", actionxData.getZLACT());
rstFile.write("ZACN", actionxData.getZACN());
rstFile.write("IACN", actionxData.getIACN());
rstFile.write("SACN", actionxData.getSACN());
}
Opm::RestartIO::Helpers::AggregateActionxData actionxData{schedule, action_state, sum_state, simStep};
rstFile.write("IACT", actionxData.getIACT());
rstFile.write("SACT", actionxData.getSACT());
rstFile.write("ZACT", actionxData.getZACT());
rstFile.write("ZLACT", actionxData.getZLACT());
rstFile.write("ZACN", actionxData.getZACN());
rstFile.write("IACN", actionxData.getIACN());
rstFile.write("SACN", actionxData.getSACN());
}
void writeWell(int sim_step,
@@ -794,7 +787,7 @@ void save(EclIO::OutputStream::Restart& rstFile,
sumState, inteHD, value.aquifer, aquiferData, rstFile);
}
writeActionx(report_step, sim_step, es, schedule, units, action_state, sumState, rstFile);
writeActionx(report_step, sim_step, schedule, action_state, sumState, rstFile);
writeSolution(value, schedule, udqState, report_step, sim_step,
ecl_compatible_rst, write_double, inteHD, rstFile);

View File

@@ -41,10 +41,13 @@ Actions Actions::serializeObject()
}
size_t Actions::size() const {
std::size_t Actions::ecl_size() const {
return this->actions.size();
}
std::size_t Actions::py_size() const {
return this->pyactions.size();
}
bool Actions::empty() const {
return this->actions.empty() && this->pyactions.empty();

View File

@@ -179,12 +179,12 @@ BOOST_AUTO_TEST_CASE(TestActions) {
Opm::Action::Actions config;
std::vector<std::string> matching_wells;
auto python = std::make_shared<Opm::Python>();
BOOST_CHECK_EQUAL(config.size(), 0U);
BOOST_CHECK_EQUAL(config.ecl_size(), 0U);
BOOST_CHECK(config.empty());
Opm::Action::ActionX action1("NAME", 10, 100, 0);
config.add(action1);
BOOST_CHECK_EQUAL(config.size(), 1U);
BOOST_CHECK_EQUAL(config.ecl_size(), 1U);
BOOST_CHECK(!config.empty());
double min_wait = 86400;
@@ -192,7 +192,7 @@ BOOST_AUTO_TEST_CASE(TestActions) {
{
Opm::Action::ActionX action("NAME", max_eval, min_wait, asTimeT(TimeStampUTC(TimeStampUTC::YMD{ 2000, 7, 1 })) );
config.add(action);
BOOST_CHECK_EQUAL(config.size(), 1U);
BOOST_CHECK_EQUAL(config.ecl_size(), 1U);
Opm::Action::ActionX action3("NAME3", 1000000, 0, asTimeT(TimeStampUTC(TimeStampUTC::YMD{ 2000, 7, 1 })) );
@@ -783,10 +783,10 @@ TSTEP
Runspec runspec (deck);
Schedule sched(deck, grid1, fp, runspec, python);
const auto& actions0 = sched[0].actions.get();
BOOST_CHECK_EQUAL(actions0.size(), 0U);
BOOST_CHECK_EQUAL(actions0.ecl_size(), 0U);
const auto& actions1 = sched[1].actions.get();
BOOST_CHECK_EQUAL(actions1.size(), 1U);
BOOST_CHECK_EQUAL(actions1.ecl_size(), 1U);
const auto& act1 = actions1.get("B");
@@ -823,7 +823,7 @@ TSTEP
/*****************************************************************/
const auto& actions2 = sched[2].actions.get();
BOOST_CHECK_EQUAL(actions2.size(), 2U);
BOOST_CHECK_EQUAL(actions2.ecl_size(), 2U);
const auto& actB = actions2.get("B");
const auto& condB = actB.conditions();

View File

@@ -113,7 +113,6 @@ BOOST_AUTO_TEST_CASE (Declared_Actionx_data)
Opm::Action::State action_state;
Opm::Schedule sched = simCase.sched;
Opm::EclipseGrid grid = simCase.grid;
const auto& usys = es.getUnits();
const auto& ioConfig = es.getIOConfig();
//const auto& restart = es.cfg().restart();
@@ -146,10 +145,8 @@ BOOST_AUTO_TEST_CASE (Declared_Actionx_data)
auto udqData = Opm::RestartIO::Helpers::AggregateUDQData(udqDims);
udqData.captureDeclaredUDQData(sched, rptStep, udq_state, ih);
const auto actDims = Opm::RestartIO::Helpers::createActionxDims(rspec, sched, rptStep);
auto actionxData = Opm::RestartIO::Helpers::AggregateActionxData(actDims);
actionxData.captureDeclaredActionxData(sched, usys, action_state, st, actDims, rptStep);
const auto actDims = Opm::RestartIO::Helpers::createActionRSTDims(sched, rptStep);
Opm::RestartIO::Helpers::AggregateActionxData actionxData{sched, action_state, st, rptStep};
{
/*
Check of InteHEAD and DoubHEAD data for UDQ variables