20#ifndef OPM_PARSER_NNC_HPP
21#define OPM_PARSER_NNC_HPP
29#include <opm/common/OpmLog/KeywordLocation.hpp>
37 NNCdata(
size_t c1,
size_t c2,
double t)
38 : cell1(c1), cell2(c2), trans(t)
42 bool operator==(
const NNCdata& data)
const
44 return cell1 == data.cell1 &&
45 cell2 == data.cell2 &&
49 template<
class Serializer>
59 bool operator<(
const NNCdata& other)
const
61 return std::tie(this->cell1, this->cell2) < std::tie(other.cell1, other.cell2);
106 virtual ~NNC() =
default;
110 static NNC serializationTestObject();
112 virtual bool addNNC(
const size_t cell1,
const size_t cell2,
const double trans);
115 virtual void merge(
const std::vector<NNCdata>& nncs);
117 const std::vector<NNCdata>&
input()
const {
return m_input; }
119 const std::vector<NNCdata>&
edit()
const {
return m_edit; }
121 const std::vector<NNCdata>&
editr()
const {
return m_editr; }
127 bool operator==(
const NNC& data)
const;
129 template<
class Serializer>
135 serializer(m_nnc_location);
136 serializer(m_edit_location);
137 serializer(m_editr_location);
142 void load_input(
const EclipseGrid& grid,
const Deck& deck);
143 void load_edit(
const EclipseGrid& grid,
const Deck& deck);
144 void load_editr(
const EclipseGrid& grid,
const Deck& deck);
145 void add_edit(
const NNCdata& edit_node);
148 std::vector<NNCdata> m_input;
150 std::vector<NNCdata> m_edit;
152 std::vector<NNCdata> m_editr;
153 std::optional<KeywordLocation> m_nnc_location;
154 std::optional<KeywordLocation> m_edit_location;
155 std::optional<KeywordLocation> m_editr_location;
157 friend class NNCDiffGrid;
161class NNCDataContainer
164 NNCDataContainer() =
default;
165 virtual ~NNCDataContainer() =
default;
167 virtual bool addNNC(
const size_t cell1,
const size_t cell2,
const double trans);
170 const std::vector<NNCdata>& input()
const {
return nnc_container; }
172 bool operator==(
const NNCDataContainer& other)
const;
175 std::vector<NNCdata> nnc_container;
184class NNCDataContainerDiffGrid :
public NNCDataContainer
187 NNCDataContainerDiffGrid() =
default;
188 ~NNCDataContainerDiffGrid()
override =
default;
190 bool addNNC(
const size_t cell1,
const size_t cell2,
191 const double trans)
override;
193 void swap_adj(std::size_t grid1, std::size_t grid2);
195 bool operator==(
const NNCDataContainerDiffGrid& other)
const;
202 NNCCollection() =
default;
221 bool hasCrossGridNNC(std::size_t grid1, std::size_t grid2)
const;
222 bool empty()
const {
return m_sameGridNNCs.empty() && m_diffGridNNCs.empty(); }
228 bool hasSameGridNNC(std::size_t grid)
const;
235 bool hasGlobalNNC()
const {
return hasSameGridNNC(0); };
241 if (hasSameGridNNC(grid_index))
243 for (
const auto& entry : m_diffGridNNCs) {
244 if (entry.first.first == grid_index || entry.first.second == grid_index)
254 return m_sameGridNNCs;
260 return m_diffGridNNCs;
284 const std::vector<std::vector<NNCdata>>& outputNnc,
285 const std::vector<std::vector<NNCdata>>& outputNncGlobalLocal,
286 const std::vector<std::vector<std::vector<NNCdata>>>& outputAmalgamatedNnc);
290 return m_sameGridNNCs == other.m_sameGridNNCs &&
291 m_diffGridNNCs == other.m_diffGridNNCs;
297 std::map<std::size_t, NNCDataContainer> m_sameGridNNCs;
300 std::map<std::pair<std::size_t,std::size_t>, NNCDataContainerDiffGrid> m_diffGridNNCs;
About cell information and dimension: The actual grid information is held in a pointer to an ERT ecl_...
Definition EclipseGrid.hpp:62
Definition GridDims.hpp:31
Definition KeywordLocation.hpp:27
bool hasNNCForGrid(std::size_t grid_index) const
Returns true if the given grid has any NNC involvement: same-grid NNCs, or cross-grid NNCs with any o...
Definition NNC.hpp:239
const std::map< std::pair< std::size_t, std::size_t >, NNCDataContainerDiffGrid > & diff_grid_nnc() const
Returns a view of all cross-grid NNCs keyed by normalised (g1,g2) pairs.
Definition NNC.hpp:258
const NNCDataContainer & getGlobalNNC() const
Returns a const reference to the global (grid 0) same-grid NNC.
Definition NNC.cpp:542
static NNCCollection fromLGROutputContainers(const std::vector< std::vector< NNCdata > > &outputNnc, const std::vector< std::vector< NNCdata > > &outputNncGlobalLocal, const std::vector< std::vector< std::vector< NNCdata > > > &outputAmalgamatedNnc)
Build an NNCCollection from the three output containers produced by EclGenericWriter::exportNncStruct...
Definition NNC.cpp:564
const NNCDataContainerDiffGrid & getNNC(std::size_t grid1, std::size_t grid2) const
Returns a const reference to the cross-grid NNC for the (grid1, grid2) pair.
Definition NNC.cpp:462
const std::map< std::size_t, NNCDataContainer > & same_grid_nnc() const
Returns a view of all same-grid NNCs as (grid_index, NNC) pairs.
Definition NNC.hpp:252
void addNNC(std::size_t grid1, std::size_t grid2, NNCDataContainerDiffGrid nnc)
Add a cross-grid NNC between grid1 and grid2.
Definition NNC.cpp:443
bool addNNC(const size_t cell1, const size_t cell2, const double trans) override
Inserts a cross-grid NNC entry without enforcing any cell ordering, since cell1 and cell2 belong to d...
Definition NNC.cpp:406
void swap_adj(std::size_t grid1, std::size_t grid2)
Swaps cell1 and cell2 in every entry when grid1 > grid2, so that the container is always stored in no...
Definition NNC.cpp:414
virtual bool addNNC(const size_t cell1, const size_t cell2, const double trans)
Inserts an NNC entry (cell1, cell2, trans) into the container, enforcing cell1 <= cell2.
Definition NNC.cpp:379
const std::vector< NNCdata > & input() const
Get the combined information from NNC.
Definition NNC.hpp:117
virtual void merge(const std::vector< NNCdata > &nncs)
Merge additional NNCs into sorted NNCs.
Definition NNC.cpp:289
const std::vector< NNCdata > & editr() const
Get the information from EDITNNCR keyword.
Definition NNC.hpp:121
const std::vector< NNCdata > & edit() const
Get the information from EDITNNC keyword.
Definition NNC.hpp:119
Class for (de-)serializing.
Definition Serializer.hpp:94
This class implements a small container which holds the transmissibility mulitpliers for all the face...
Definition Exceptions.hpp:30