Loading...
Searching...
No Matches
SimulatorUpdate.hpp
/*
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 SIMULATOR_UPDATE_HPP
#define SIMULATOR_UPDATE_HPP
#include <string>
#include <unordered_set>
namespace Opm {
struct SimulatorUpdate
{
static SimulatorUpdate serializationTestObject()
{
SimulatorUpdate simulatorUpdate;
simulatorUpdate.tran_update = true;
simulatorUpdate.well_structure_changed = true;
simulatorUpdate.affected_wells = {"test"};
simulatorUpdate.welpi_wells.insert("I-45");
return simulatorUpdate;
}
template<class Serializer>
void serializeOp(Serializer& serializer)
{
serializer(affected_wells);
serializer(welpi_wells);
serializer(tran_update);
serializer(well_structure_changed);
}
std::unordered_set<std::string> affected_wells{};
std::unordered_set<std::string> welpi_wells{};
bool tran_update{false};
bool well_structure_changed{false};
void append(const SimulatorUpdate& otherSimUpdate)
{
this->tran_update = this->tran_update || otherSimUpdate.tran_update;
this->well_structure_changed = this->well_structure_changed
|| otherSimUpdate.well_structure_changed;
this->affected_wells.insert(otherSimUpdate.affected_wells.begin(),
otherSimUpdate.affected_wells.end());
this->welpi_wells.insert(otherSimUpdate.welpi_wells.begin(),
otherSimUpdate.welpi_wells.end());
}
void reset()
{
this->tran_update = false;
this->well_structure_changed = false;
this->affected_wells.clear();
this->welpi_wells.clear();
}
bool operator==(const SimulatorUpdate& that) const
{
return (this->tran_update == that.tran_update)
&& (this->well_structure_changed == that.well_structure_changed)
&& (this->affected_wells == that.affected_wells)
&& (this->welpi_wells == that.welpi_wells)
;
}
};
} // namespace Opm
#endif // SIMULATOR_UPDATE_HPP
Opm::Serializer
Class for (de-)serializing.
Definition Serializer.hpp:91
Opm
This class implements a small container which holds the transmissibility mulitpliers for all the face...
Definition Exceptions.hpp:30
Opm::SimulatorUpdate
This struct is used to communicate back from the Schedule::applyAction() what needs to be updated in ...
Definition SimulatorUpdate.hpp:33
Opm::SimulatorUpdate::tran_update
bool tran_update
Whether or not a transmissibility multiplier keyword was invoked in an ACTIONX block.
Definition SimulatorUpdate.hpp:65
Opm::SimulatorUpdate::welpi_wells
std::unordered_set< std::string > welpi_wells
Wells affected only by WELPI for which the simulator needs to update its internal notion of the conne...
Definition SimulatorUpdate.hpp:59
Opm::SimulatorUpdate::well_structure_changed
bool well_structure_changed
Whether or not well structure changed in processing an ACTIONX block.
Definition SimulatorUpdate.hpp:72
Opm::SimulatorUpdate::affected_wells
std::unordered_set< std::string > affected_wells
Wells affected by ACTIONX and for which the simulator needs to reapply rates and state from the newly...
Definition SimulatorUpdate.hpp:55