My Project
Loading...
Searching...
No Matches
LookUpData.hh
1//===========================================================================
2//
3// File: LookUpData.hh
4//
5// Created: Tue May 23 14:44:00 2023
6//
7// Author(s): Antonella Ritorto <antonella.ritorto@opm-op.com>
8//
9//
10// $Date$
11//
12// $Revision$
13//
14//===========================================================================
15
16/*
17 Copyright 2023 Equinor ASA.
18
19 This file is part of The Open Porous Media project (OPM).
20
21 OPM is free software: you can redistribute it and/or modify
22 it under the terms of the GNU General Public License as published by
23 the Free Software Foundation, either version 3 of the License, or
24 (at your option) any later version.
25
26 OPM is distributed in the hope that it will be useful,
27 but WITHOUT ANY WARRANTY; without even the implied warranty of
28 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
29 GNU General Public License for more details.
30
31 You should have received a copy of the GNU General Public License
32 along with OPM. If not, see <http://www.gnu.org/licenses/>.
33*/
34
35#include <dune/grid/common/mcmgmapper.hh>
36
37#include <opm/grid/cpgrid/Entity.hpp>
38
39#include <type_traits>
40#include <vector>
41
42namespace Dune
43{
44class CpGrid;
45
46namespace cpgrid
47{
48template<int codim> class Entity;
49}
50
51}
52
53namespace Opm
54{
55
62template <typename Grid, typename GridView>
64{
65public:
68 explicit LookUpData(const GridView& gridView) :
69 gridView_(gridView),
70 elemMapper_(gridView, Dune::mcmgElementLayout())
71 {
72 }
73
86 template<typename EntityType, typename FeatureType>
87 FeatureType operator()(const EntityType& elem, const std::vector<FeatureType>& feature_vec) const;
88
100 template<typename FeatureType>
101 FeatureType operator()(const int& elemIdx, const std::vector<FeatureType>& feature_vec) const;
102
110 template<typename EntityType, typename GridType = Grid>
111 typename std::enable_if_t<!std::is_same_v<GridType,Dune::CpGrid>,int> getOriginIndexFromEntity(const EntityType& elem) const;
112
120 template<typename EntityType, typename GridType = Grid>
121 typename std::enable_if_t<std::is_same_v<GridType,Dune::CpGrid>,int> getOriginIndexFromEntity(const EntityType& elem) const;
122
129 template<typename GridType>
130 typename std::enable_if_t<!std::is_same_v<GridType,Dune::CpGrid>,int> getOriginIndex(const int& elemIdx) const;
131
138 template<typename GridType = Grid>
139 typename std::enable_if_t<std::is_same_v<GridType,Dune::CpGrid>,int> getOriginIndex(const int& elemIdx) const;
140
141
142protected:
143 const GridView& gridView_;
144 Dune::MultipleCodimMultipleGeomTypeMapper<GridView> elemMapper_;
145}; // end LookUpData class
146
153template<typename Grid, typename GridView>
155{
156public:
161 explicit LookUpCartesianData(const GridView& gridView,
162 const Dune::CartesianIndexMapper<Grid>& mapper) :
163 gridView_(gridView),
164 elemMapper_(gridView, Dune::mcmgElementLayout()),
165 cartMapper_(&mapper)
166 {
167 }
168
181 template<typename EntityType, typename FeatureType>
182 FeatureType operator()(const EntityType& elem,const std::vector<FeatureType>& feature_vec) const;
183
195 template<typename FeatureType>
196 FeatureType operator()(const int& elemIdx, const std::vector<FeatureType>& feature_vec) const;
197
205 template<typename EntityType, typename GridType = Grid>
206 typename std::enable_if_t<!std::is_same_v<GridType,Dune::CpGrid>,int> getOriginIndexFromEntity(const EntityType& elem) const;
207
215 template<typename EntityType, typename GridType = Grid>
216 typename std::enable_if_t<std::is_same_v<GridType,Dune::CpGrid>,int> getOriginIndexFromEntity(const EntityType& elem) const;
217
224 template<typename GridType = Grid>
225 typename std::enable_if_t<!std::is_same_v<GridType,Dune::CpGrid>,int> getOriginIndex(const int& elemIdx) const;
226
233 template<typename GridType = Grid>
234 typename std::enable_if_t<std::is_same_v<GridType,Dune::CpGrid>,int> getOriginIndex(const int& elemIdx) const;
235
236
237protected:
238 const GridView& gridView_;
239 Dune::MultipleCodimMultipleGeomTypeMapper<GridView> elemMapper_;
240 const Dune::CartesianIndexMapper<Grid>* cartMapper_;
241}; // end LookUpCartesianData class
242}
243// end namespace Opm
244
245
246
248
249template<typename Grid, typename GridView>
250template<typename EntityType, typename FeatureType>
251FeatureType Opm::LookUpData<Grid,GridView>::operator()(const EntityType& elem, const std::vector<FeatureType>& feature_vec) const
252{
253 assert( (0 <= this->getOriginIndexFromEntity<EntityType,Grid>(elem)) &&
254 (static_cast<int>(feature_vec.size()) > this->getOriginIndexFromEntity<EntityType,Grid>(elem)) );
255 return feature_vec[this->getOriginIndexFromEntity<EntityType,Grid>(elem)];
256}
257
258template<typename Grid, typename GridView>
259template<typename FeatureType>
260FeatureType Opm::LookUpData<Grid,GridView>::operator()(const int& elemIdx, const std::vector<FeatureType>& feature_vec) const
261{
262 assert(0 <= this-> getOriginIndex<Grid>(elemIdx) && static_cast<int>(feature_vec.size()) > this-> getOriginIndex<Grid>(elemIdx));
263 return feature_vec[getOriginIndex<Grid>(elemIdx)];
264}
265
266template<typename Grid, typename GridView>
267template<typename EntityType, typename GridType>
268typename std::enable_if_t<!std::is_same_v<GridType,Dune::CpGrid>,int>
270{
271 static_assert(std::is_same_v<Grid,GridType>);
272 return this-> elemMapper_.index(elem);
273}
274
275template<typename Grid, typename GridView>
276template<typename EntityType, typename GridType>
277typename std::enable_if_t<std::is_same_v<GridType,Dune::CpGrid>,int>
279{
280 static_assert(std::is_same_v<Grid,GridType>);
281 return elem.getOrigin().index();
282}
283
284template<typename Grid, typename GridView>
285template<typename GridType>
286typename std::enable_if_t<!std::is_same_v<GridType,Dune::CpGrid>,int>
288{
289 static_assert(std::is_same_v<Grid,GridType>);
290 return elemIdx;
291}
292
293template<typename Grid, typename GridView>
294template<typename GridType>
295typename std::enable_if_t<std::is_same_v<GridType,Dune::CpGrid>,int>
297{
298 static_assert(std::is_same_v<Grid,GridType>);
299 const auto& elem = Dune::cpgrid::Entity<0>(*(gridView_.grid().current_view_data_), elemIdx, true);
300 return elem.getOrigin().index(); // getOrign() returns parent Entity or the equivalent Entity in level 0.
301}
302
303
304
306
307template<typename Grid, typename GridView>
308template<typename EntityType, typename FeatureType>
310 (const EntityType& elem, const std::vector<FeatureType>& feature_vec) const
311{
312 assert(cartMapper_);
313 assert( (0 <= this->getOriginIndexFromEntity<EntityType,Grid>(elem)) &&
314 (static_cast<int>(feature_vec.size()) > this-> getOriginIndexFromEntity<EntityType,Grid>(elem)) );
315 return feature_vec[cartMapper_-> cartesianIndex(this->elemMapper_.index(elem))];
316}
317
318template<typename Grid, typename GridView>
319template<typename FeatureType>
320FeatureType Opm::LookUpCartesianData<Grid,GridView>::operator()(const int& elemIdx, const std::vector<FeatureType>& feature_vec) const
321{
322 assert(cartMapper_);
323 assert(0 <= this->getOriginIndex<Grid>(elemIdx) &&
324 static_cast<int>(feature_vec.size()) > this-> getOriginIndex<Grid>(elemIdx));
325 return feature_vec[cartMapper_-> cartesianIndex(elemIdx)];
326}
327
328template<typename Grid, typename GridView>
329template<typename EntityType, typename GridType>
330typename std::enable_if_t<!std::is_same_v<GridType,Dune::CpGrid>,int>
332{
333 static_assert(std::is_same_v<Grid,GridType>);
334 return elemMapper_.index(elem);
335}
336
337template<typename Grid, typename GridView>
338template<typename EntityType, typename GridType>
339typename std::enable_if_t<std::is_same_v<GridType,Dune::CpGrid>,int>
341{
342 static_assert(std::is_same_v<Grid,GridType>);
343 return elem.getOrigin().index();
344}
345
346template<typename Grid, typename GridView>
347template<typename GridType>
348typename std::enable_if_t<!std::is_same_v<GridType,Dune::CpGrid>,int>
350{
351 static_assert(std::is_same_v<Grid,GridType>);
352 return elemIdx;
353}
354
355template<typename Grid, typename GridView>
356template<typename GridType>
357typename std::enable_if_t<std::is_same_v<GridType,Dune::CpGrid>,int>
359{
360 static_assert(std::is_same_v<Grid,GridType>);
361 const auto& elem = Dune::cpgrid::Entity<0>(*(gridView_.grid().current_view_data_), elemIdx, true);
362 return elem.getOrigin().index(); // getOrign() returns parent Entity or the equivalent Entity in level 0.
363}
Interface class to access the logical Cartesian grid as used in industry standard simulator decks.
Definition CartesianIndexMapper.hpp:16
Definition Entity.hpp:65
LookUpCartesianData - To search data via CartesianIndex (cartesianMapper)
Definition LookUpData.hh:155
FeatureType operator()(const EntityType &elem, const std::vector< FeatureType > &feature_vec) const
: Call operator taking an EntityObject and a FeatureVector.
Definition LookUpData.hh:310
std::enable_if_t<!std::is_same_v< GridType, Dune::CpGrid >, int > getOriginIndex(const int &elemIdx) const
: For general grids, it retunrs the same element index.
Definition LookUpData.hh:349
LookUpCartesianData(const GridView &gridView, const Dune::CartesianIndexMapper< Grid > &mapper)
: Constructor taking a GridView and a CartesianIndexMapper
Definition LookUpData.hh:161
std::enable_if_t<!std::is_same_v< GridType, Dune::CpGrid >, int > getOriginIndexFromEntity(const EntityType &elem) const
: For general grids, it retunrs the same Entity index.
Definition LookUpData.hh:331
LookUpData class - To search data via element index.
Definition LookUpData.hh:64
FeatureType operator()(const EntityType &elem, const std::vector< FeatureType > &feature_vec) const
: Call operator taking an EntityObject and a FeatureVector.
Definition LookUpData.hh:251
std::enable_if_t<!std::is_same_v< GridType, Dune::CpGrid >, int > getOriginIndexFromEntity(const EntityType &elem) const
: For general grids, it retunrs the same Entity index.
Definition LookUpData.hh:269
LookUpData(const GridView &gridView)
: Constructor taking a GridView
Definition LookUpData.hh:68
std::enable_if_t<!std::is_same_v< GridType, Dune::CpGrid >, int > getOriginIndex(const int &elemIdx) const
: For general grids, it retunrs the same element index.
Definition LookUpData.hh:287
Copyright 2019 Equinor AS.
Definition CartesianIndexMapper.hpp:10
Holds the implementation of the CpGrid as a pimple.
Definition CellQuadrature.cpp:68