treat AQUFLUX keyword in SCHEDULE as individual events

We only check these keywords at the report step that the keywords are
specified.

Not totally sure how it will affect the RESTART, while it is not hard to
switch back.
This commit is contained in:
Kai Bao
2023-02-16 15:38:24 +01:00
parent d3b629a76e
commit 35b095dfbc
9 changed files with 21 additions and 19 deletions

View File

@@ -28,6 +28,7 @@
#include <cstddef>
#include <vector>
#include <unordered_set>
namespace Opm {
class TableManager;
@@ -56,7 +57,7 @@ public:
void loadFromRestart(const RestartIO::RstAquifer& aquifers,
const TableManager& tables);
void appendAqufluxSchedule(const std::vector<int>& ids);
void appendAqufluxSchedule(const std::unordered_set<int>& ids);
static AquiferConfig serializationTestObject();

View File

@@ -116,7 +116,7 @@ namespace Opm {
// For the ease of the implementation, we create inactive aquifer in the AquiferConfig.
// At the moment, it only works for Constant Flux Aquifers(AQUFLUX) as indicated by the function name
// When we know and decide to handle the same for AQUFETP and AQUCT, this part will be refactored
void appendAqufluxSchedule(const std::vector<int> ids);
void appendAqufluxSchedule(const std::unordered_set<int>& ids);
template<class Serializer>
void serializeOp(Serializer& serializer)

View File

@@ -261,8 +261,8 @@ namespace Opm
const Well& getWell(std::size_t well_index, std::size_t timeStep) const;
const Well& getWell(const std::string& wellName, std::size_t timeStep) const;
const Well& getWellatEnd(const std::string& well_name) const;
// get the list of the constant flux aquifer through the whole schedule
std::vector<int> getAquiferFluxListEnd() const;
// get the list of the constant flux aquifer specified in the whole schedule
std::unordered_set<int> getAquiferFluxSchedule() const;
std::vector<Well> getWells(std::size_t timeStep) const;
std::vector<Well> getWellsatEnd() const;
void shut_well(const std::string& well_name, std::size_t report_step);
@@ -367,7 +367,6 @@ namespace Opm
this->template pack_unpack_map<int, VFPInjTable>(serializer);
this->template pack_unpack_map<std::string, Group>(serializer);
this->template pack_unpack_map<std::string, Well>(serializer);
this->template pack_unpack_map<int, AquiferFlux>(serializer);
}
template <typename T, class Serializer>

View File

@@ -467,8 +467,6 @@ namespace Opm {
return this->groups;
else if constexpr ( std::is_same_v<T, Well> )
return this->wells;
else if constexpr ( std::is_same_v<T, AquiferFlux> )
return this->aqufluxs;
else
static_assert(always_false2<K,T>::value, "Template type <K,T> not supported in get_map()");
}
@@ -478,7 +476,7 @@ namespace Opm {
map_member<std::string, Group> groups;
map_member<std::string, Well> wells;
// constant flux aquifers
map_member<int, AquiferFlux> aqufluxs;
std::unordered_map<int, AquiferFlux> aqufluxs;
std::unordered_map<std::string, double> target_wellpi;
std::optional<NextStep> next_tstep;
@@ -506,6 +504,7 @@ namespace Opm {
serializer(m_message_limits);
serializer(m_whistctl_mode);
serializer(target_wellpi);
serializer(aqufluxs);
}