Compare commits
28 Commits
release/20
...
release/20
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c72d2bf460 | ||
|
|
dfddff0562 | ||
|
|
1371b5706d | ||
|
|
b571dd9d66 | ||
|
|
ad746440e0 | ||
|
|
2bae3b2300 | ||
|
|
75a2a7e0ee | ||
|
|
917fc523ad | ||
|
|
28e492ecb9 | ||
|
|
ec1c315968 | ||
|
|
cf72ef0330 | ||
|
|
10a3bc4b56 | ||
|
|
8b4d8f1734 | ||
|
|
7cea357930 | ||
|
|
720fb8dcab | ||
|
|
8e56b44201 | ||
|
|
b14c5fc1a9 | ||
|
|
565d6b76dc | ||
|
|
ac840312e7 | ||
|
|
5e800ae2e7 | ||
|
|
2e0583cc74 | ||
|
|
8365eaed0b | ||
|
|
571582c881 | ||
|
|
6439ae1cea | ||
|
|
e796916057 | ||
|
|
63b663228a | ||
|
|
bf475b73b4 | ||
|
|
1e734020f1 |
@@ -247,7 +247,11 @@ install(FILES etc/opm_bash_completion.sh.in DESTINATION share/opm/etc)
|
|||||||
if (OPM_ENABLE_PYTHON)
|
if (OPM_ENABLE_PYTHON)
|
||||||
# -------------------------------------------------------------------------
|
# -------------------------------------------------------------------------
|
||||||
# 1: Wrap C++ functionality in Python
|
# 1: Wrap C++ functionality in Python
|
||||||
|
if (EXISTS "/etc/debian_version")
|
||||||
|
set(PYTHON_PACKAGE_PATH "dist-packages")
|
||||||
|
else()
|
||||||
set(PYTHON_PACKAGE_PATH "site-packages")
|
set(PYTHON_PACKAGE_PATH "site-packages")
|
||||||
|
endif()
|
||||||
set(PYTHON_INSTALL_PREFIX "lib/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}/${PYTHON_PACKAGE_PATH}" CACHE STRING "Subdirectory to install Python modules in")
|
set(PYTHON_INSTALL_PREFIX "lib/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}/${PYTHON_PACKAGE_PATH}" CACHE STRING "Subdirectory to install Python modules in")
|
||||||
|
|
||||||
make_directory(${PROJECT_BINARY_DIR}/python)
|
make_directory(${PROJECT_BINARY_DIR}/python)
|
||||||
|
|||||||
@@ -16,6 +16,9 @@ if(ZOLTAN_ROOT)
|
|||||||
set(ZOLTAN_NO_DEFAULT_PATH "NO_DEFAULT_PATH")
|
set(ZOLTAN_NO_DEFAULT_PATH "NO_DEFAULT_PATH")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# We only need zoltan with MPI. Otherwise usage of alugrid is broken.
|
||||||
|
find_package(MPI)
|
||||||
|
|
||||||
# Make sure we have checked for the underlying partitioners.
|
# Make sure we have checked for the underlying partitioners.
|
||||||
find_package(PTScotch)
|
find_package(PTScotch)
|
||||||
#find_package(ParMETIS)
|
#find_package(ParMETIS)
|
||||||
@@ -39,20 +42,23 @@ find_library(ZOLTAN_LIBRARIES
|
|||||||
${ZOLTAN_NO_DEFAULT_PATH})
|
${ZOLTAN_NO_DEFAULT_PATH})
|
||||||
|
|
||||||
set (ZOLTAN_FOUND FALSE)
|
set (ZOLTAN_FOUND FALSE)
|
||||||
if (ZOLTAN_INCLUDE_DIRS OR ZOLTAN_LIBRARIES)
|
|
||||||
set(ZOLTAN_FOUND TRUE)
|
set (ZOLTAN_CONFIG_VAR HAVE_ZOLTAN)
|
||||||
|
|
||||||
|
# print a message to indicate status of this package
|
||||||
|
include (FindPackageHandleStandardArgs)
|
||||||
|
|
||||||
|
find_package_handle_standard_args(ZOLTAN
|
||||||
|
DEFAULT_MSG
|
||||||
|
ZOLTAN_LIBRARIES
|
||||||
|
ZOLTAN_INCLUDE_DIRS
|
||||||
|
MPI_FOUND
|
||||||
|
)
|
||||||
|
|
||||||
|
if (ZOLTAN_FOUND)
|
||||||
set(HAVE_ZOLTAN 1)
|
set(HAVE_ZOLTAN 1)
|
||||||
set(ZOLTAN_LIBRARIES ${ZOLTAN_LIBRARIES} ${PARMETIS_LIBRARIES} ${PTSCOTCH_LIBRARIES})
|
set(ZOLTAN_LIBRARIES ${ZOLTAN_LIBRARIES} ${PARMETIS_LIBRARIES} ${PTSCOTCH_LIBRARIES})
|
||||||
set(ZOLTAN_INCLUDE_DIRS ${ZOLTAN_INCLUDE_DIRS} ${PARMETIS_INCLUDE_DIRS}
|
set(ZOLTAN_INCLUDE_DIRS ${ZOLTAN_INCLUDE_DIRS} ${PARMETIS_INCLUDE_DIRS}
|
||||||
${PTSCOTCH_INCLUDE_DIRS})
|
${PTSCOTCH_INCLUDE_DIRS})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set (ZOLTAN_CONFIG_VAR HAVE_ZOLTAN)
|
|
||||||
|
|
||||||
# print a message to indicate status of this package
|
|
||||||
include (FindPackageHandleStandardArgs)
|
|
||||||
find_package_handle_standard_args(ZOLTAN
|
|
||||||
DEFAULT_MSG
|
|
||||||
ZOLTAN_LIBRARIES
|
|
||||||
ZOLTAN_INCLUDE_DIRS
|
|
||||||
)
|
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ is_compiler_gcc_compatible ()
|
|||||||
include(TestCXXAcceptsFlag)
|
include(TestCXXAcceptsFlag)
|
||||||
|
|
||||||
macro (opm_defaults opm)
|
macro (opm_defaults opm)
|
||||||
|
|
||||||
|
message("Processing opm_defaults ${opm}")
|
||||||
# if we are installing a development version (default when checking out of
|
# if we are installing a development version (default when checking out of
|
||||||
# VCS), then remember which directories were used when configuring. package
|
# VCS), then remember which directories were used when configuring. package
|
||||||
# distribution should disable this option.
|
# distribution should disable this option.
|
||||||
|
|||||||
@@ -42,7 +42,13 @@ macro (find_openmp opm)
|
|||||||
# enabling OpenMP is supposedly enough to make the compiler link with
|
# enabling OpenMP is supposedly enough to make the compiler link with
|
||||||
# the appropriate libraries
|
# the appropriate libraries
|
||||||
find_package (OpenMP ${${opm}_QUIET})
|
find_package (OpenMP ${${opm}_QUIET})
|
||||||
|
|
||||||
|
if(OpenMP_CXX_FOUND)
|
||||||
|
list (APPEND ${opm}_LIBRARIES OpenMP::OpenMP_CXX)
|
||||||
|
else()
|
||||||
list (APPEND ${opm}_LIBRARIES ${OpenMP_LIBRARIES})
|
list (APPEND ${opm}_LIBRARIES ${OpenMP_LIBRARIES})
|
||||||
|
endif()
|
||||||
|
|
||||||
if (OPENMP_FOUND)
|
if (OPENMP_FOUND)
|
||||||
add_options (C ALL_BUILDS "${OpenMP_C_FLAGS}")
|
add_options (C ALL_BUILDS "${OpenMP_C_FLAGS}")
|
||||||
add_options (CXX ALL_BUILDS "${OpenMP_CXX_FLAGS}")
|
add_options (CXX ALL_BUILDS "${OpenMP_CXX_FLAGS}")
|
||||||
|
|||||||
2
debian/changelog
vendored
2
debian/changelog
vendored
@@ -1,4 +1,4 @@
|
|||||||
opm-common (2019.04-pre~xenial) xenial; urgency=medium
|
opm-common (2020.04-1~xenial) xenial; urgency=medium
|
||||||
|
|
||||||
* New release
|
* New release
|
||||||
|
|
||||||
|
|||||||
4
debian/control
vendored
4
debian/control
vendored
@@ -16,7 +16,7 @@ Vcs-Browser: https://github.com/OPM/opm-common
|
|||||||
|
|
||||||
Package: libopm-common1
|
Package: libopm-common1
|
||||||
Section: libs
|
Section: libs
|
||||||
Pre-Depends: ${misc:Pre-Depends}, multiarch-support
|
Pre-Depends: ${misc:Pre-Depends}
|
||||||
Architecture: any
|
Architecture: any
|
||||||
Multi-Arch: same
|
Multi-Arch: same
|
||||||
Depends: ${shlibs:Depends}, ${misc:Depends}
|
Depends: ${shlibs:Depends}, ${misc:Depends}
|
||||||
@@ -56,7 +56,7 @@ Description: OPM common library -- documentation
|
|||||||
|
|
||||||
Package: python3-opm-common
|
Package: python3-opm-common
|
||||||
Section: libs
|
Section: libs
|
||||||
Pre-Depends: ${misc:Pre-Depends}, multiarch-support
|
Pre-Depends: ${misc:Pre-Depends}
|
||||||
Architecture: any
|
Architecture: any
|
||||||
Multi-Arch: same
|
Multi-Arch: same
|
||||||
Depends: ${shlibs:Depends}, ${misc:Depends}, libopm-common1, python3-numpy, python3-decorator
|
Depends: ${shlibs:Depends}, ${misc:Depends}, libopm-common1, python3-numpy, python3-decorator
|
||||||
|
|||||||
@@ -5,8 +5,8 @@
|
|||||||
|
|
||||||
Module: opm-common
|
Module: opm-common
|
||||||
Description: Open Porous Media Initiative shared infrastructure
|
Description: Open Porous Media Initiative shared infrastructure
|
||||||
Version: 2020.04-pre
|
Version: 2020.04
|
||||||
Label: 2020.04-pre
|
Label: 2020.04
|
||||||
Maintainer: opm@opm-project.org
|
Maintainer: opm@opm-project.org
|
||||||
MaintainerName: OPM community
|
MaintainerName: OPM community
|
||||||
Url: http://opm-project.org
|
Url: http://opm-project.org
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ set (opm-common_DEPS
|
|||||||
list(APPEND opm-common_DEPS
|
list(APPEND opm-common_DEPS
|
||||||
# various runtime library enhancements
|
# various runtime library enhancements
|
||||||
"Boost 1.44.0 COMPONENTS system unit_test_framework REQUIRED"
|
"Boost 1.44.0 COMPONENTS system unit_test_framework REQUIRED"
|
||||||
|
"OpenMP QUIET"
|
||||||
)
|
)
|
||||||
|
|
||||||
find_package_deps(opm-common)
|
find_package_deps(opm-common)
|
||||||
|
|||||||
@@ -49,9 +49,6 @@ namespace Opm {
|
|||||||
inline currentGroupConstraints& set( Opm::Group::ProductionCMode cpc,
|
inline currentGroupConstraints& set( Opm::Group::ProductionCMode cpc,
|
||||||
Opm::Group::InjectionCMode cgic,
|
Opm::Group::InjectionCMode cgic,
|
||||||
Opm::Group::InjectionCMode cwic);
|
Opm::Group::InjectionCMode cwic);
|
||||||
|
|
||||||
inline bool has();
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -110,12 +107,6 @@ namespace Opm {
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool currentGroupConstraints::has() {
|
|
||||||
return ((&this->currentGasInjectionConstraint != nullptr) && (&this->currentGasInjectionConstraint != nullptr)
|
|
||||||
&& (&this->currentProdConstraint != nullptr));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}} // Opm::data
|
}} // Opm::data
|
||||||
|
|
||||||
#endif //OPM_OUTPUT_GROUPS_HPP
|
#endif //OPM_OUTPUT_GROUPS_HPP
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
along with OPM. If not, see <http://www.gnu.org/licenses/>.
|
along with OPM. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <optional>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include <opm/parser/eclipse/EclipseState/Schedule/Group/Group.hpp>
|
#include <opm/parser/eclipse/EclipseState/Schedule/Group/Group.hpp>
|
||||||
@@ -29,7 +30,7 @@ namespace Opm {
|
|||||||
|
|
||||||
class GTNode {
|
class GTNode {
|
||||||
public:
|
public:
|
||||||
GTNode(const Group& group, const GTNode* parent);
|
GTNode(const Group& group, std::size_t level, const std::optional<std::string>& parent_name);
|
||||||
|
|
||||||
void add_group(const GTNode& child_group);
|
void add_group(const GTNode& child_group);
|
||||||
void add_well(const Well& well);
|
void add_well(const Well& well);
|
||||||
@@ -37,11 +38,13 @@ public:
|
|||||||
const std::vector<Well>& wells() const;
|
const std::vector<Well>& wells() const;
|
||||||
const std::vector<GTNode>& groups() const;
|
const std::vector<GTNode>& groups() const;
|
||||||
const std::string& name() const;
|
const std::string& name() const;
|
||||||
const GTNode& parent() const;
|
const std::string& parent_name() const;
|
||||||
|
|
||||||
const Group& group() const;
|
const Group& group() const;
|
||||||
private:
|
private:
|
||||||
const Group m_group;
|
const Group m_group;
|
||||||
const GTNode * m_parent;
|
std::size_t m_level;
|
||||||
|
std::optional<std::string> m_parent_name;
|
||||||
/*
|
/*
|
||||||
Class T with a stl container <T> - supposedly undefined behavior before
|
Class T with a stl container <T> - supposedly undefined behavior before
|
||||||
C++17 - but it compiles without warnings.
|
C++17 - but it compiles without warnings.
|
||||||
|
|||||||
@@ -24,6 +24,7 @@
|
|||||||
#include <map>
|
#include <map>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
#include <opm/parser/eclipse/EclipseState/Schedule/MSW/icd.hpp>
|
#include <opm/parser/eclipse/EclipseState/Schedule/MSW/icd.hpp>
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
#include <map>
|
#include <map>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
#include <opm/parser/eclipse/EclipseState/Schedule/MSW/icd.hpp>
|
#include <opm/parser/eclipse/EclipseState/Schedule/MSW/icd.hpp>
|
||||||
|
|
||||||
|
|||||||
@@ -367,8 +367,7 @@ namespace Opm
|
|||||||
const UnitSystem& unit_system);
|
const UnitSystem& unit_system);
|
||||||
|
|
||||||
DynamicState<std::shared_ptr<RPTConfig>> rpt_config;
|
DynamicState<std::shared_ptr<RPTConfig>> rpt_config;
|
||||||
|
GTNode groupTree(const std::string& root_node, std::size_t report_step, std::size_t level, const std::optional<std::string>& parent_name) const;
|
||||||
GTNode groupTree(const std::string& root_node, std::size_t report_step, const GTNode * parent) const;
|
|
||||||
void updateGroup(std::shared_ptr<Group> group, size_t reportStep);
|
void updateGroup(std::shared_ptr<Group> group, size_t reportStep);
|
||||||
bool checkGroups(const ParseContext& parseContext, ErrorGuard& errors);
|
bool checkGroups(const ParseContext& parseContext, ErrorGuard& errors);
|
||||||
void updateUDQActive( std::size_t timeStep, std::shared_ptr<UDQActive> udq );
|
void updateUDQActive( std::size_t timeStep, std::shared_ptr<UDQActive> udq );
|
||||||
|
|||||||
@@ -106,6 +106,7 @@ namespace Opm {
|
|||||||
constexpr const double hour = 60 * minute;
|
constexpr const double hour = 60 * minute;
|
||||||
constexpr const double day = 24 * hour;
|
constexpr const double day = 24 * hour;
|
||||||
constexpr const double year = 365 * day;
|
constexpr const double year = 365 * day;
|
||||||
|
constexpr const double ecl_year = 365.25 * day;
|
||||||
/// @}
|
/// @}
|
||||||
|
|
||||||
/// \name Volume
|
/// \name Volume
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
%define tag final
|
%define tag final
|
||||||
|
|
||||||
Name: opm-common
|
Name: opm-common
|
||||||
Version: 2018.10
|
Version: 2020.04
|
||||||
Release: 0
|
Release: 0
|
||||||
Summary: Open Porous Media - common helpers and buildsystem
|
Summary: Open Porous Media - common helpers and buildsystem
|
||||||
License: GPL-3.0
|
License: GPL-3.0
|
||||||
|
|||||||
@@ -309,7 +309,10 @@ bool cmp(const ESmry& smry, const ERsm& rsm) {
|
|||||||
const auto& smry_vector = smry.get(node);
|
const auto& smry_vector = smry.get(node);
|
||||||
const auto& rsm_vector = rsm.get(key);
|
const auto& rsm_vector = rsm.get(key);
|
||||||
for (std::size_t index = 0; index < smry_vector.size(); index++) {
|
for (std::size_t index = 0; index < smry_vector.size(); index++) {
|
||||||
if (!cmp::scalar_equal(static_cast<double>(smry_vector[index]), rsm_vector[index]))
|
const double diff = static_cast<double>(smry_vector[index]) - rsm_vector[index];
|
||||||
|
const double sum = std::fabs(static_cast<double>(smry_vector[index])) + std::fabs(rsm_vector[index]);
|
||||||
|
|
||||||
|
if (diff > 1e-5 * sum)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
#include <ctime>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
@@ -33,6 +34,8 @@
|
|||||||
#include <opm/common/utility/TimeService.hpp>
|
#include <opm/common/utility/TimeService.hpp>
|
||||||
#include <opm/io/eclipse/ESmry.hpp>
|
#include <opm/io/eclipse/ESmry.hpp>
|
||||||
|
|
||||||
|
#include "project-version.h"
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
constexpr std::size_t column_width { 8 } ;
|
constexpr std::size_t column_width { 8 } ;
|
||||||
@@ -47,11 +50,20 @@ namespace {
|
|||||||
// the fact that the dashed header line has 127 rather than 130 dashes has no provenance
|
// the fact that the dashed header line has 127 rather than 130 dashes has no provenance
|
||||||
const std::string divider_line { std::string(total_width - 3, '-') } ;
|
const std::string divider_line { std::string(total_width - 3, '-') } ;
|
||||||
|
|
||||||
const std::string block_header_line(const std::string& run_name, const std::string& comment) {
|
const std::vector<std::string> month_names = {"JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"};
|
||||||
return "SUMMARY OF RUN " + run_name + " OPM FLOW " + comment;
|
|
||||||
|
std::string format_date(const std::chrono::system_clock::time_point& tp) {
|
||||||
|
auto ts = Opm::TimeStampUTC( std::chrono::system_clock::to_time_t(tp) );
|
||||||
|
char buffer[12];
|
||||||
|
std::snprintf(buffer, 12, "%2d-%3s-%4d", ts.day(), month_names[ts.month() - 1].c_str(), ts.year());
|
||||||
|
return std::string(buffer, 11);
|
||||||
|
}
|
||||||
|
|
||||||
|
const std::string block_header_line(const std::string& run_name) {
|
||||||
|
std::string date_string = format_date( std::chrono::system_clock::from_time_t( std::time(nullptr)));
|
||||||
|
return "SUMMARY OF RUN " + run_name + " at: " + date_string + " OPM FLOW " + PROJECT_VERSION_NAME;
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::vector<std::string> month_names = {"JAN", "FEB", "MAR", "APR", "MAI", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"};
|
|
||||||
|
|
||||||
void write_line(std::ostream& os, const std::string& line, char prefix = ' ') {
|
void write_line(std::ostream& os, const std::string& line, char prefix = ' ') {
|
||||||
os << prefix << std::setw(total_width) << std::left << line << '\n';
|
os << prefix << std::setw(total_width) << std::left << line << '\n';
|
||||||
@@ -127,12 +139,6 @@ namespace {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
std::string format_date(const std::chrono::system_clock::time_point& tp) {
|
|
||||||
auto ts = Opm::TimeStampUTC( std::chrono::system_clock::to_time_t(tp) );
|
|
||||||
char buffer[12];
|
|
||||||
std::snprintf(buffer, 12, "%2d-%3s-%4d", ts.day(), month_names[ts.month() - 1].c_str(), ts.year());
|
|
||||||
return std::string(buffer, 11);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -141,7 +147,7 @@ namespace Opm::EclIO {
|
|||||||
void ESmry::write_block(std::ostream& os, bool write_dates, const std::vector<std::string>& time_column, const std::vector<SummaryNode>& vectors) const {
|
void ESmry::write_block(std::ostream& os, bool write_dates, const std::vector<std::string>& time_column, const std::vector<SummaryNode>& vectors) const {
|
||||||
write_line(os, block_separator_line, '1');
|
write_line(os, block_separator_line, '1');
|
||||||
write_line(os, divider_line);
|
write_line(os, divider_line);
|
||||||
write_line(os, block_header_line(inputFileName.stem(), "VERSION 1910 ANYTHING CAN GO HERE: USER, MACHINE ETC."));
|
write_line(os, block_header_line(inputFileName.stem()));
|
||||||
write_line(os, divider_line);
|
write_line(os, divider_line);
|
||||||
|
|
||||||
std::vector<std::pair<std::vector<float>, int>> data;
|
std::vector<std::pair<std::vector<float>, int>> data;
|
||||||
@@ -197,6 +203,16 @@ void ESmry::write_rsm(std::ostream& os) const {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
/*
|
||||||
|
Ensure that the YEARS vector is the first in the data_vectors; could in
|
||||||
|
principle embark on a more general sorting here.
|
||||||
|
*/
|
||||||
|
if (data_vectors[0].keyword != "YEARS") {
|
||||||
|
auto years_iter = std::find_if(data_vectors.begin(), data_vectors.end(), [](const SummaryNode& node) { return (node.keyword == "YEARS"); });
|
||||||
|
if (years_iter != data_vectors.end())
|
||||||
|
std::swap(data_vectors[0], *years_iter);
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<std::list<SummaryNode>> data_vector_blocks;
|
std::vector<std::list<SummaryNode>> data_vector_blocks;
|
||||||
constexpr std::size_t data_column_count { column_count - 1 } ;
|
constexpr std::size_t data_column_count { column_count - 1 } ;
|
||||||
for (std::size_t i { 0 } ; i < data_vectors.size(); i += data_column_count) {
|
for (std::size_t i { 0 } ; i < data_vectors.size(); i += data_column_count) {
|
||||||
@@ -204,6 +220,7 @@ void ESmry::write_rsm(std::ostream& os) const {
|
|||||||
data_vector_blocks.emplace_back(data_vectors.begin() + i, data_vectors.begin() + last);
|
data_vector_blocks.emplace_back(data_vectors.begin() + i, data_vectors.begin() + last);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this->LoadData();
|
||||||
std::vector<std::string> time_column;
|
std::vector<std::string> time_column;
|
||||||
if (this->hasKey("DAY") && this->hasKey("MONTH") && this->hasKey("YEAR")) {
|
if (this->hasKey("DAY") && this->hasKey("MONTH") && this->hasKey("YEAR")) {
|
||||||
write_dates = true;
|
write_dates = true;
|
||||||
|
|||||||
@@ -1815,7 +1815,7 @@ namespace Evaluator {
|
|||||||
|
|
||||||
const auto val = st.get_elapsed() + stepSize;
|
const auto val = st.get_elapsed() + stepSize;
|
||||||
|
|
||||||
st.update(this->saveKey_, convert::to(val, year));
|
st.update(this->saveKey_, convert::to(val, ecl_year));
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -2477,7 +2477,6 @@ configureTimeVectors(const EclipseState& es, const SummaryConfig& sumcfg)
|
|||||||
.makeParameter(kw, dfltwgname, dfltnum, "", std::move(eval));
|
.makeParameter(kw, dfltwgname, dfltnum, "", std::move(eval));
|
||||||
}
|
}
|
||||||
|
|
||||||
#if NOT_YET
|
|
||||||
// YEARS
|
// YEARS
|
||||||
{
|
{
|
||||||
const auto& kw = std::string("YEARS");
|
const auto& kw = std::string("YEARS");
|
||||||
@@ -2488,7 +2487,6 @@ configureTimeVectors(const EclipseState& es, const SummaryConfig& sumcfg)
|
|||||||
this->outputParameters_
|
this->outputParameters_
|
||||||
.makeParameter(kw, dfltwgname, dfltnum, kw, std::move(eval));
|
.makeParameter(kw, dfltwgname, dfltnum, kw, std::move(eval));
|
||||||
}
|
}
|
||||||
#endif // NOT_YET
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <fnmatch.h>
|
#include <fnmatch.h>
|
||||||
|
#include <stdexcept>
|
||||||
|
|
||||||
#include <opm/parser/eclipse/EclipseState/Schedule/Action/ActionContext.hpp>
|
#include <opm/parser/eclipse/EclipseState/Schedule/Action/ActionContext.hpp>
|
||||||
#include <opm/parser/eclipse/EclipseState/Schedule/Action/ActionValue.hpp>
|
#include <opm/parser/eclipse/EclipseState/Schedule/Action/ActionValue.hpp>
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
|
#include <stdexcept>
|
||||||
|
|
||||||
#include <opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.hpp>
|
#include <opm/parser/eclipse/EclipseState/SummaryConfig/SummaryConfig.hpp>
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#include <opm/parser/eclipse/EclipseState/Schedule/Action/ActionValue.hpp>
|
#include <opm/parser/eclipse/EclipseState/Schedule/Action/ActionValue.hpp>
|
||||||
|
|
||||||
|
#include <stdexcept>
|
||||||
|
|
||||||
namespace Opm {
|
namespace Opm {
|
||||||
namespace Action {
|
namespace Action {
|
||||||
|
|||||||
@@ -21,10 +21,12 @@
|
|||||||
|
|
||||||
namespace Opm {
|
namespace Opm {
|
||||||
|
|
||||||
GTNode::GTNode(const Group& group_arg, const GTNode * parent_arg) :
|
GTNode::GTNode(const Group& group_arg, std::size_t level, const std::optional<std::string>& parent_name) :
|
||||||
m_group(group_arg),
|
m_group(group_arg),
|
||||||
m_parent(parent_arg)
|
m_level(level),
|
||||||
{}
|
m_parent_name(parent_name)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
const std::string& GTNode::name() const {
|
const std::string& GTNode::name() const {
|
||||||
return this->m_group.name();
|
return this->m_group.name();
|
||||||
@@ -34,9 +36,9 @@ const Group& GTNode::group() const {
|
|||||||
return this->m_group;
|
return this->m_group;
|
||||||
}
|
}
|
||||||
|
|
||||||
const GTNode& GTNode::parent() const {
|
const std::string& GTNode::parent_name() const {
|
||||||
if (this->m_parent)
|
if (this->m_parent_name.has_value())
|
||||||
return *this->m_parent;
|
return *this->m_parent_name;
|
||||||
|
|
||||||
throw std::invalid_argument("Tried to access parent of root in GroupTree. Root: " + this->name());
|
throw std::invalid_argument("Tried to access parent of root in GroupTree. Root: " + this->name());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
#include <opm/parser/eclipse/EclipseState/Schedule/MSW/Valve.hpp>
|
#include <opm/parser/eclipse/EclipseState/Schedule/MSW/Valve.hpp>
|
||||||
|
|
||||||
#include <cassert>
|
#include <cassert>
|
||||||
|
#include <stdexcept>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
namespace Opm {
|
namespace Opm {
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
#include <iterator>
|
||||||
#include <unordered_set>
|
#include <unordered_set>
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
@@ -479,16 +480,19 @@ namespace Opm {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
std::size_t head_index = 0;
|
std::size_t head_index = 0;
|
||||||
while (head_index < segments.size()) {
|
while (head_index < segments.size()) {
|
||||||
auto head_iter = std::find_if(segments.begin() + head_index, segments.end(),
|
const auto& head_segment = segments[head_index];
|
||||||
|
if (segment_set.count(head_segment.outletSegment()) != 0) {
|
||||||
|
auto head_iter = std::find_if(std::next(segments.begin(), head_index), segments.end(),
|
||||||
[&segment_set] (const Segment& segment) { return (segment_set.count(segment.outletSegment()) == 0); });
|
[&segment_set] (const Segment& segment) { return (segment_set.count(segment.outletSegment()) == 0); });
|
||||||
|
|
||||||
if (head_iter == segments.end())
|
if (head_iter == segments.end())
|
||||||
throw std::logic_error("Loop detected in branch/segment structure");
|
throw std::logic_error("Loop detected in branch/segment structure");
|
||||||
|
|
||||||
segment_set.erase( head_iter->segmentNumber() );
|
|
||||||
std::swap( segments[head_index], *head_iter);
|
std::swap( segments[head_index], *head_iter);
|
||||||
|
}
|
||||||
|
segment_set.erase( segments[head_index].segmentNumber() );
|
||||||
head_index++;
|
head_index++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,8 @@
|
|||||||
*/
|
*/
|
||||||
#include <opm/parser/eclipse/EclipseState/Schedule/OilVaporizationProperties.hpp>
|
#include <opm/parser/eclipse/EclipseState/Schedule/OilVaporizationProperties.hpp>
|
||||||
|
|
||||||
|
#include <stdexcept>
|
||||||
|
|
||||||
namespace Opm {
|
namespace Opm {
|
||||||
|
|
||||||
OilVaporizationProperties::OilVaporizationProperties()
|
OilVaporizationProperties::OilVaporizationProperties()
|
||||||
|
|||||||
@@ -2218,9 +2218,9 @@ void Schedule::invalidNamePattern( const std::string& namePattern, std::size_t
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
GTNode Schedule::groupTree(const std::string& root_node, std::size_t report_step, const GTNode * parent) const {
|
GTNode Schedule::groupTree(const std::string& root_node, std::size_t report_step, std::size_t level, const std::optional<std::string>& parent_name) const {
|
||||||
auto root_group = this->getGroup(root_node, report_step);
|
auto root_group = this->getGroup(root_node, report_step);
|
||||||
GTNode tree(root_group, parent);
|
GTNode tree(root_group, level, parent_name);
|
||||||
|
|
||||||
for (const auto& wname : root_group.wells()) {
|
for (const auto& wname : root_group.wells()) {
|
||||||
const auto& well = this->getWell(wname, report_step);
|
const auto& well = this->getWell(wname, report_step);
|
||||||
@@ -2228,7 +2228,7 @@ void Schedule::invalidNamePattern( const std::string& namePattern, std::size_t
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (const auto& gname : root_group.groups()) {
|
for (const auto& gname : root_group.groups()) {
|
||||||
auto child_group = this->groupTree(gname, report_step, std::addressof(tree));
|
auto child_group = this->groupTree(gname, report_step, level + 1, root_node);
|
||||||
tree.add_group(child_group);
|
tree.add_group(child_group);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2236,7 +2236,7 @@ void Schedule::invalidNamePattern( const std::string& namePattern, std::size_t
|
|||||||
}
|
}
|
||||||
|
|
||||||
GTNode Schedule::groupTree(const std::string& root_node, std::size_t report_step) const {
|
GTNode Schedule::groupTree(const std::string& root_node, std::size_t report_step) const {
|
||||||
return this->groupTree(root_node, report_step, nullptr);
|
return this->groupTree(root_node, report_step, 0, {});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -628,7 +628,7 @@ bool Well::updateConnections(std::shared_ptr<WellConnections> connections_arg) {
|
|||||||
|
|
||||||
bool Well::updateConnections(std::shared_ptr<WellConnections> connections_arg, const EclipseGrid& grid, const std::vector<int>& pvtnum) {
|
bool Well::updateConnections(std::shared_ptr<WellConnections> connections_arg, const EclipseGrid& grid, const std::vector<int>& pvtnum) {
|
||||||
bool update = this->updateConnections(connections_arg);
|
bool update = this->updateConnections(connections_arg);
|
||||||
if (this->pvt_table == 0) {
|
if (this->pvt_table == 0 && this->connections->size() > 0) {
|
||||||
const auto& lowest = this->connections->lowest();
|
const auto& lowest = this->connections->lowest();
|
||||||
auto active_index = grid.activeIndex(lowest.global_index());
|
auto active_index = grid.activeIndex(lowest.global_index());
|
||||||
this->pvt_table = pvtnum[active_index];
|
this->pvt_table = pvtnum[active_index];
|
||||||
|
|||||||
@@ -431,12 +431,16 @@ inline std::array< size_t, 3> directionIndices(const Opm::Connection::Direction
|
|||||||
|
|
||||||
|
|
||||||
const Connection& WellConnections::lowest() const {
|
const Connection& WellConnections::lowest() const {
|
||||||
|
if (this->m_connections.empty())
|
||||||
|
throw std::logic_error("Tried to get lowest connection from empty set");
|
||||||
|
|
||||||
const auto max_iter = std::max_element(this->m_connections.begin(),
|
const auto max_iter = std::max_element(this->m_connections.begin(),
|
||||||
this->m_connections.end(),
|
this->m_connections.end(),
|
||||||
[](const Connection& c1, const Connection& c2)
|
[](const Connection& c1, const Connection& c2)
|
||||||
{
|
{
|
||||||
return c1.depth() < c2.depth();
|
return c1.depth() < c2.depth();
|
||||||
});
|
});
|
||||||
|
|
||||||
return *max_iter;
|
return *max_iter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"name": "HMMULTSG",
|
||||||
|
"sections": [
|
||||||
|
"GRID"
|
||||||
|
],
|
||||||
|
"data": {
|
||||||
|
"value_type": "DOUBLE",
|
||||||
|
"dimension": "1"
|
||||||
|
}
|
||||||
|
}
|
||||||
21
src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PRVD
Normal file
21
src/opm/parser/eclipse/share/keywords/000_Eclipse100/P/PRVD
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"name": "PRVD",
|
||||||
|
"sections": [
|
||||||
|
"SOLUTION"
|
||||||
|
],
|
||||||
|
"size": {
|
||||||
|
"keyword": "EQLDIMS",
|
||||||
|
"item": "NTEQUL"
|
||||||
|
},
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "DATA",
|
||||||
|
"value_type": "DOUBLE",
|
||||||
|
"size_type": "ALL",
|
||||||
|
"dimension": [
|
||||||
|
"Length",
|
||||||
|
"Pressure"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "DEADOIL",
|
|
||||||
"sections": [
|
|
||||||
"RUNSPEC"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "THERMEX1",
|
|
||||||
"sections": [
|
|
||||||
"PROPS"
|
|
||||||
],
|
|
||||||
"size": {
|
|
||||||
"keyword": "TABDIMS",
|
|
||||||
"item": "NUM_STATE_EQ"
|
|
||||||
},
|
|
||||||
"comment": "and this also cannot (yet?) be specified.",
|
|
||||||
"items": [
|
|
||||||
{
|
|
||||||
"name": "EXPANSION_COEFF",
|
|
||||||
"value_type": "DOUBLE",
|
|
||||||
"size_type": "ALL",
|
|
||||||
"dimension": [
|
|
||||||
"1/AbsoluteTemperature"
|
|
||||||
],
|
|
||||||
"default": 0
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "PERMRED",
|
"name": "PERMFACT",
|
||||||
"sections": [
|
"sections": [
|
||||||
"PROPS"
|
"PROPS"
|
||||||
],
|
],
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
"dimension": "1"
|
"dimension": "1"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "PERMREDMULT",
|
"name": "PERMFACTMULT",
|
||||||
"value_type": "DOUBLE",
|
"value_type": "DOUBLE",
|
||||||
"dimension": "1"
|
"dimension": "1"
|
||||||
}
|
}
|
||||||
27
src/opm/parser/eclipse/share/keywords/900_OPM/P/PVTGW
Normal file
27
src/opm/parser/eclipse/share/keywords/900_OPM/P/PVTGW
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
{
|
||||||
|
"name": "PVTGW",
|
||||||
|
"sections": [
|
||||||
|
"PROPS"
|
||||||
|
],
|
||||||
|
"num_tables": {
|
||||||
|
"keyword": "TABDIMS",
|
||||||
|
"item": "NTPVT"
|
||||||
|
},
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "GAS_PRESSURE",
|
||||||
|
"value_type": "DOUBLE",
|
||||||
|
"dimension": "Pressure"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "DATA",
|
||||||
|
"size_type": "ALL",
|
||||||
|
"value_type": "DOUBLE",
|
||||||
|
"dimension": [
|
||||||
|
"OilDissolutionFactor",
|
||||||
|
"OilDissolutionFactor",
|
||||||
|
"Viscosity"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
28
src/opm/parser/eclipse/share/keywords/900_OPM/P/PVTGWO
Normal file
28
src/opm/parser/eclipse/share/keywords/900_OPM/P/PVTGWO
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"name": "PVTGWO",
|
||||||
|
"sections": [
|
||||||
|
"PROPS"
|
||||||
|
],
|
||||||
|
"num_tables": {
|
||||||
|
"keyword": "TABDIMS",
|
||||||
|
"item": "NTPVT"
|
||||||
|
},
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "GAS_PRESSURE",
|
||||||
|
"value_type": "DOUBLE",
|
||||||
|
"dimension": "Pressure"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "DATA",
|
||||||
|
"size_type": "ALL",
|
||||||
|
"value_type": "DOUBLE",
|
||||||
|
"dimension": [
|
||||||
|
"OilDissolutionFactor",
|
||||||
|
"OilDissolutionFactor",
|
||||||
|
"OilDissolutionFactor",
|
||||||
|
"Viscosity"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
29
src/opm/parser/eclipse/share/keywords/900_OPM/R/RWGSALT
Normal file
29
src/opm/parser/eclipse/share/keywords/900_OPM/R/RWGSALT
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"name": "RWGSALT",
|
||||||
|
"sections": [
|
||||||
|
"PROPS"
|
||||||
|
],
|
||||||
|
"num_tables": {
|
||||||
|
"keyword": "TABDIMS",
|
||||||
|
"item": "NTPVT"
|
||||||
|
},
|
||||||
|
"items": [
|
||||||
|
{
|
||||||
|
"name": "RESERVOIR_PRESSURE",
|
||||||
|
"value_type": "DOUBLE",
|
||||||
|
"dimension": "Pressure"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "SALT_CONCENTRATION",
|
||||||
|
"value_type": "DOUBLE",
|
||||||
|
"size_type": "ALL",
|
||||||
|
"dimension": "Mass/Length*Length*Length"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "DATA",
|
||||||
|
"size_type": "ALL",
|
||||||
|
"value_type":"DOUBLE",
|
||||||
|
"dimension": "OilDissolutionFactor"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -345,6 +345,7 @@ set( keywords
|
|||||||
000_Eclipse100/H/HMMLTWCN
|
000_Eclipse100/H/HMMLTWCN
|
||||||
000_Eclipse100/H/HMMULTxx
|
000_Eclipse100/H/HMMULTxx
|
||||||
000_Eclipse100/H/HMMULTFT
|
000_Eclipse100/H/HMMULTFT
|
||||||
|
000_Eclipse100/H/HMMULTSG
|
||||||
000_Eclipse100/H/HMPROPS
|
000_Eclipse100/H/HMPROPS
|
||||||
000_Eclipse100/H/HMROCK
|
000_Eclipse100/H/HMROCK
|
||||||
000_Eclipse100/H/HMROCKT
|
000_Eclipse100/H/HMROCKT
|
||||||
@@ -629,6 +630,7 @@ set( keywords
|
|||||||
000_Eclipse100/P/PROPS
|
000_Eclipse100/P/PROPS
|
||||||
000_Eclipse100/P/PRIORITY
|
000_Eclipse100/P/PRIORITY
|
||||||
000_Eclipse100/P/PRORDER
|
000_Eclipse100/P/PRORDER
|
||||||
|
000_Eclipse100/P/PRVD
|
||||||
000_Eclipse100/P/PSTEADY
|
000_Eclipse100/P/PSTEADY
|
||||||
000_Eclipse100/P/PSWRG
|
000_Eclipse100/P/PSWRG
|
||||||
000_Eclipse100/P/PSWRO
|
000_Eclipse100/P/PSWRO
|
||||||
@@ -1047,7 +1049,6 @@ set( keywords
|
|||||||
001_Eclipse300/C/COMPS
|
001_Eclipse300/C/COMPS
|
||||||
001_Eclipse300/C/CREF
|
001_Eclipse300/C/CREF
|
||||||
001_Eclipse300/C/CREFS
|
001_Eclipse300/C/CREFS
|
||||||
001_Eclipse300/D/DEADOIL
|
|
||||||
001_Eclipse300/D/DREF
|
001_Eclipse300/D/DREF
|
||||||
001_Eclipse300/D/DREFS
|
001_Eclipse300/D/DREFS
|
||||||
001_Eclipse300/D/DZV
|
001_Eclipse300/D/DZV
|
||||||
@@ -1073,7 +1074,6 @@ set( keywords
|
|||||||
001_Eclipse300/T/THCROCK
|
001_Eclipse300/T/THCROCK
|
||||||
001_Eclipse300/T/THCWATER
|
001_Eclipse300/T/THCWATER
|
||||||
001_Eclipse300/T/THERMAL
|
001_Eclipse300/T/THERMAL
|
||||||
001_Eclipse300/T/THERMEX1
|
|
||||||
001_Eclipse300/T/TREF
|
001_Eclipse300/T/TREF
|
||||||
001_Eclipse300/T/TREFS
|
001_Eclipse300/T/TREFS
|
||||||
001_Eclipse300/W/WINJTEMP
|
001_Eclipse300/W/WINJTEMP
|
||||||
@@ -1092,15 +1092,18 @@ set( keywords
|
|||||||
900_OPM/M/MINPVFIL
|
900_OPM/M/MINPVFIL
|
||||||
900_OPM/O/OCOMPIDX
|
900_OPM/O/OCOMPIDX
|
||||||
900_OPM/O/OILDENT
|
900_OPM/O/OILDENT
|
||||||
900_OPM/P/PERMRED
|
900_OPM/P/PERMFACT
|
||||||
900_OPM/P/PINTDIMS
|
900_OPM/P/PINTDIMS
|
||||||
900_OPM/P/PLYVMH
|
900_OPM/P/PLYVMH
|
||||||
900_OPM/P/PLYMWINJ
|
900_OPM/P/PLYMWINJ
|
||||||
900_OPM/P/POLYMW
|
900_OPM/P/POLYMW
|
||||||
900_OPM/P/PRECSALT
|
900_OPM/P/PRECSALT
|
||||||
|
900_OPM/P/PVTGW
|
||||||
|
900_OPM/P/PVTGWO
|
||||||
900_OPM/P/PYACTION
|
900_OPM/P/PYACTION
|
||||||
900_OPM/P/PYINPUT
|
900_OPM/P/PYINPUT
|
||||||
900_OPM/R/RHO
|
900_OPM/R/RHO
|
||||||
|
900_OPM/R/RWGSALT
|
||||||
900_OPM/S/SALTPVD
|
900_OPM/S/SALTPVD
|
||||||
900_OPM/S/SALTSOL
|
900_OPM/S/SALTSOL
|
||||||
900_OPM/S/SKPRPOLY
|
900_OPM/S/SKPRPOLY
|
||||||
|
|||||||
@@ -475,13 +475,13 @@ BOOST_AUTO_TEST_CASE(GroupTree2TEST) {
|
|||||||
auto gt = schedule.groupTree(0);
|
auto gt = schedule.groupTree(0);
|
||||||
BOOST_CHECK_EQUAL(gt.wells().size(), 0);
|
BOOST_CHECK_EQUAL(gt.wells().size(), 0);
|
||||||
BOOST_CHECK_EQUAL(gt.group().name(), "FIELD");
|
BOOST_CHECK_EQUAL(gt.group().name(), "FIELD");
|
||||||
BOOST_CHECK_THROW(gt.parent(), std::invalid_argument);
|
BOOST_CHECK_THROW(gt.parent_name(), std::invalid_argument);
|
||||||
|
|
||||||
auto cg = gt.groups();
|
auto cg = gt.groups();
|
||||||
auto pg = cg[0];
|
auto pg = cg[0];
|
||||||
BOOST_CHECK_EQUAL(cg.size(), 1);
|
BOOST_CHECK_EQUAL(cg.size(), 1);
|
||||||
BOOST_CHECK_EQUAL(pg.group().name(), "PLATFORM");
|
BOOST_CHECK_EQUAL(pg.group().name(), "PLATFORM");
|
||||||
BOOST_CHECK_EQUAL(pg.parent().name(), "FIELD");
|
BOOST_CHECK_EQUAL(pg.parent_name(), "FIELD");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user