/* 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 . */ #ifndef OPM_PERFDATA_HEADER_INCLUDED #define OPM_PERFDATA_HEADER_INCLUDED #include #include #include #include namespace Opm { class PerfData { private: bool injector; public: PerfData() = default; PerfData(std::size_t num_perf, double pressure_first_connection_, bool injector_, std::size_t num_phases); static PerfData serializationTestObject(); std::size_t size() const; bool empty() const; bool try_assign(const PerfData& other); template void serializeOp(Serializer& serializer) { serializer(pressure_first_connection); serializer(pressure); serializer(rates); serializer(phase_rates); serializer(phase_mixing_rates); serializer(solvent_rates); serializer(polymer_rates); serializer(brine_rates); serializer(prod_index); serializer(micp_rates); serializer(cell_index); serializer(connection_transmissibility_factor); serializer(connection_d_factor); serializer(connection_compaction_tmult); serializer(satnum_id); serializer(ecl_index); serializer(water_throughput); serializer(skin_pressure); serializer(water_velocity); serializer(filtrate_data); } bool operator==(const PerfData&) const; // Note to maintainers: If you make changes to this list of data // members, then please update the constructor, operator==(), // serializationTestObject(), and serializeOp() accordingly. Moreover, // if you're adding a new member representing a dynamically calculated // result, e.g., a flow rate, then please update try_assign() as well. double pressure_first_connection{}; std::vector pressure{}; std::vector rates{}; std::vector phase_rates{}; std::vector> phase_mixing_rates{}; std::vector solvent_rates{}; std::vector polymer_rates{}; std::vector brine_rates{}; std::vector prod_index{}; std::vector micp_rates{}; std::vector cell_index{}; std::vector connection_transmissibility_factor{}; std::vector connection_d_factor{}; std::vector connection_compaction_tmult{}; std::vector satnum_id{}; std::vector ecl_index{}; // The water_throughput, skin_pressure and water_velocity variables are // only used for injectors to check the injectivity. std::vector water_throughput{}; std::vector skin_pressure{}; std::vector water_velocity{}; ConnFiltrateData filtrate_data{}; }; } // namespace Opm #endif // OPM_PERFDATA_HEADER_INCLUDED