OPM-188: Fixup after review
This commit is contained in:
@@ -18,45 +18,34 @@
|
||||
*/
|
||||
|
||||
#include "EclipseReader.hpp"
|
||||
#include <iostream>
|
||||
#include <opm/core/simulator/WellState.hpp>
|
||||
#include <algorithm>
|
||||
|
||||
#include <ert/ecl/ecl_file.h>
|
||||
|
||||
namespace Opm
|
||||
{
|
||||
void restoreOPM_XWELKeyword(const std::string restart_filename, int reportstep, WellState& wellstate)
|
||||
void restoreOPM_XWELKeyword(const std::string& restart_filename, int reportstep, WellState& wellstate)
|
||||
{
|
||||
const char * keyword = "OPM_XWEL";
|
||||
const char* filename = restart_filename.c_str();
|
||||
|
||||
ecl_file_type* file_type = ecl_file_open(filename, 0);
|
||||
bool block_selected = ecl_file_select_rstblock_report_step(file_type , reportstep);
|
||||
|
||||
if (block_selected) {
|
||||
ecl_kw_type* xwel = ecl_file_iget_named_kw(file_type , keyword, 0);
|
||||
const double* xwel_data = ecl_kw_get_double_ptr(xwel);
|
||||
size_t offset = 0;
|
||||
if (file_type != NULL) {
|
||||
bool block_selected = ecl_file_select_rstblock_report_step(file_type , reportstep);
|
||||
|
||||
for (size_t i = 0; i < wellstate.bhp().size(); ++i) {
|
||||
wellstate.bhp()[i] = xwel_data[offset++];
|
||||
if (block_selected) {
|
||||
ecl_kw_type* xwel = ecl_file_iget_named_kw(file_type , keyword, 0);
|
||||
const double* xwel_data = ecl_kw_get_double_ptr(xwel);
|
||||
|
||||
std::copy_n(xwel_data + wellstate.getRestartTemperatureOffset(), wellstate.temperature().size(), wellstate.temperature().begin());
|
||||
std::copy_n(xwel_data + wellstate.getRestartBhpOffset(), wellstate.bhp().size(), wellstate.bhp().begin());
|
||||
std::copy_n(xwel_data + wellstate.getRestartPerfPressOffset(), wellstate.perfPress().size(), wellstate.perfPress().begin());
|
||||
std::copy_n(xwel_data + wellstate.getRestartPerfRatesOffset(), wellstate.perfRates().size(), wellstate.perfRates().begin());
|
||||
std::copy_n(xwel_data + wellstate.getRestartWellRatesOffset(), wellstate.wellRates().size(), wellstate.wellRates().begin());
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < wellstate.perfPress().size(); ++i) {
|
||||
wellstate.perfPress()[i] = xwel_data[offset++];
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < wellstate.perfRates().size(); ++i) {
|
||||
wellstate.perfRates()[i] = xwel_data[offset++];
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < wellstate.temperature().size(); ++i) {
|
||||
wellstate.temperature()[i] = xwel_data[offset++];
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < wellstate.wellRates().size(); ++i) {
|
||||
wellstate.wellRates()[i] = xwel_data[offset++];
|
||||
}
|
||||
ecl_file_close(file_type);
|
||||
}
|
||||
}
|
||||
} // namespace Opm
|
||||
|
||||
@@ -17,7 +17,7 @@ namespace Opm
|
||||
/// \param wellstate
|
||||
/// An instance of a WellState object, with correct size for each of the 5 contained std::vector<double> objects.
|
||||
///
|
||||
void restoreOPM_XWELKeyword(const std::string restart_filename, int report_step, WellState& wellState);
|
||||
void restoreOPM_XWELKeyword(const std::string& restart_filename, int report_step, WellState& wellState);
|
||||
}
|
||||
|
||||
#endif // ECLIPSEREADER_HPP
|
||||
|
||||
@@ -328,28 +328,12 @@ public:
|
||||
iwel_data[ offset + IWEL_STATUS_ITEM ] = EclipseWriter::eclipseWellStatusMask(well->getStatus(currentStep));
|
||||
}
|
||||
|
||||
void addRestartFileXwelData(std::vector<double>& xwel_data, const WellState& wellState) const {
|
||||
size_t offset = 0;
|
||||
|
||||
for (size_t i = 0; i < wellState.bhp().size(); ++i) {
|
||||
xwel_data[offset++] = wellState.bhp()[i];
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < wellState.perfPress().size(); ++i) {
|
||||
xwel_data[offset++] = wellState.perfPress()[i];
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < wellState.perfRates().size(); ++i) {
|
||||
xwel_data[offset++] = wellState.perfRates()[i];
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < wellState.temperature().size(); ++i) {
|
||||
xwel_data[offset++] = wellState.temperature()[i];
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < wellState.wellRates().size(); ++i) {
|
||||
xwel_data[offset++] = wellState.wellRates()[i];
|
||||
}
|
||||
void addRestartFileXwelData(const WellState& wellState, std::vector<double>& xwel_data) const {
|
||||
std::copy_n(wellState.bhp().begin(), wellState.bhp().size(), xwel_data.begin() + wellState.getRestartBhpOffset());
|
||||
std::copy_n(wellState.perfPress().begin(), wellState.perfPress().size(), xwel_data.begin() + wellState.getRestartPerfPressOffset());
|
||||
std::copy_n(wellState.perfRates().begin(), wellState.perfRates().size(), xwel_data.begin() + wellState.getRestartPerfRatesOffset());
|
||||
std::copy_n(wellState.temperature().begin(), wellState.temperature().size(), xwel_data.begin() + wellState.getRestartTemperatureOffset());
|
||||
std::copy_n(wellState.wellRates().begin(), wellState.wellRates().size(), xwel_data.begin() + wellState.getRestartWellRatesOffset());
|
||||
}
|
||||
|
||||
void addRestartFileIconData(std::vector<int>& icon_data, CompletionSetConstPtr completions , size_t wellICONOffset) const {
|
||||
@@ -1286,11 +1270,10 @@ void EclipseWriter::writeTimeStep(const SimulatorTimerInterface& timer,
|
||||
|
||||
EclipseWriterDetails::Restart restartHandle(outputDir_, baseName_, timer.reportStepNum(), ioConfig);
|
||||
|
||||
int sz = wellState.bhp().size() + wellState.perfPress().size() + wellState.perfRates().size() + wellState.temperature().size() + wellState.wellRates().size();
|
||||
const size_t sz = wellState.bhp().size() + wellState.perfPress().size() + wellState.perfRates().size() + wellState.temperature().size() + wellState.wellRates().size();
|
||||
std::vector<double> xwell_data( sz , 0 );
|
||||
|
||||
EclipseWriterDetails::Restart restartHandle(outputDir_, baseName_, timer.reportStepNum());
|
||||
restartHandle.addRestartFileXwelData(xwell_data, wellState);
|
||||
restartHandle.addRestartFileXwelData(wellState, xwell_data);
|
||||
|
||||
for (size_t iwell = 0; iwell < wells_ptr.size(); ++iwell) {
|
||||
WellConstPtr well = wells_ptr[iwell];
|
||||
|
||||
@@ -127,6 +127,26 @@ namespace Opm
|
||||
std::vector<double>& perfPress() { return perfpress_; }
|
||||
const std::vector<double>& perfPress() const { return perfpress_; }
|
||||
|
||||
size_t getRestartBhpOffset() const {
|
||||
return 0;
|
||||
}
|
||||
|
||||
size_t getRestartPerfPressOffset() const {
|
||||
return bhp_.size();
|
||||
}
|
||||
|
||||
size_t getRestartPerfRatesOffset() const {
|
||||
return getRestartPerfPressOffset() + perfpress_.size();
|
||||
}
|
||||
|
||||
size_t getRestartTemperatureOffset() const {
|
||||
return getRestartPerfRatesOffset() + perfrates_.size();
|
||||
}
|
||||
|
||||
size_t getRestartWellRatesOffset() const {
|
||||
return getRestartTemperatureOffset() + temperature_.size();
|
||||
}
|
||||
|
||||
private:
|
||||
std::vector<double> bhp_;
|
||||
std::vector<double> temperature_;
|
||||
|
||||
@@ -258,7 +258,7 @@ BOOST_AUTO_TEST_CASE(EclipseReadWriteWellStateData)
|
||||
|
||||
const char * test_area_path = test_work_area_get_cwd(test_area);
|
||||
std::string slash = "/";
|
||||
std::string restart_filename = test_area_path + slash + eclipse_restart_filename;
|
||||
const std::string restart_filename = test_area_path + slash + eclipse_restart_filename;
|
||||
std::shared_ptr<Opm::WellState> wellStateRestored(new Opm::WellState());
|
||||
wellStateRestored->init(wells, *blackoilState);
|
||||
Opm::restoreOPM_XWELKeyword(restart_filename, 1, *wellStateRestored);
|
||||
|
||||
Reference in New Issue
Block a user