Finite Volume Solver  prototype
A framework to build finite volume solvers for the AG Klein at the Freie Universität Berlin.
AllRegularIndexSpace.hpp
Go to the documentation of this file.
1 // Copyright (c) 2019 Maikel Nadolski
2 //
3 // Permission is hereby granted, free of charge, to any person obtaining a copy
4 // of this software and associated documentation files (the "Software"), to deal
5 // in the Software without restriction, including without limitation the rights
6 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7 // copies of the Software, and to permit persons to whom the Software is
8 // furnished to do so, subject to the following conditions:
9 //
10 // The above copyright notice and this permission notice shall be included in
11 // all copies or substantial portions of the Software.
12 //
13 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19 // SOFTWARE.
20 
21 #ifndef FUB_AMREX_CUTCELL_ALL_REGULAR_INDEX_SPACE_HPP
22 #define FUB_AMREX_CUTCELL_ALL_REGULAR_INDEX_SPACE_HPP
23 
24 #include <AMReX_EB2.H>
25 
26 namespace fub::amrex::cutcell {
27 
28 class AllRegularIndexSpace final : public ::amrex::EB2::IndexSpace {
29 public:
30  AllRegularIndexSpace(const ::amrex::Geometry& coarse_geometry,
31  const ::amrex::IntVect& refine_ratio,
32  int n_required_levels, int max_coarsening_level,
33  int n_grow = 4);
34 
35  const ::amrex::EB2::Level&
36  getLevel(const ::amrex::Geometry& geom) const final;
37  const ::amrex::Geometry& getGeometry(const ::amrex::Box& dom) const final;
39 
40 private:
41  using LevelType = ::amrex::EB2::GShopLevel<
42  ::amrex::EB2::GeometryShop<::amrex::EB2::AllRegularIF>>;
43  std::vector<LevelType> levels_;
44  std::vector<::amrex::Geometry> geometries_;
45  std::vector<::amrex::Box> domains_;
46  std::vector<int> n_grows_;
47 };
48 
49 std::vector<const ::amrex::EB2::IndexSpace*>
50 BuildRegularSpace(const ::amrex::Geometry& coarse_geometry,
51  const ::amrex::IntVect& refine_ratio, int n_required_levels);
52 
53 } // namespace fub::amrex::cutcell
54 
55 #endif
Definition: AMReX/Geometry.hpp:30
Definition: AllRegularIndexSpace.hpp:28
std::vector< LevelType > levels_
Definition: AllRegularIndexSpace.hpp:43
AllRegularIndexSpace(const ::amrex::Geometry &coarse_geometry, const ::amrex::IntVect &refine_ratio, int n_required_levels, int max_coarsening_level, int n_grow=4)
const ::amrex::EB2::Level & getLevel(const ::amrex::Geometry &geom) const final
std::vector<::amrex::Box > domains_
Definition: AllRegularIndexSpace.hpp:45
::amrex::EB2::GShopLevel< ::amrex::EB2::GeometryShop<::amrex::EB2::AllRegularIF > > LevelType
Definition: AllRegularIndexSpace.hpp:42
std::vector<::amrex::Geometry > geometries_
Definition: AllRegularIndexSpace.hpp:44
const ::amrex::Geometry & getGeometry(const ::amrex::Box &dom) const final
std::vector< int > n_grows_
Definition: AllRegularIndexSpace.hpp:46
const ::amrex::Box & coarsestDomain() const final
Definition: FillCutCellData.hpp:30
std::vector< const ::amrex::EB2::IndexSpace * > BuildRegularSpace(const ::amrex::Geometry &coarse_geometry, const ::amrex::IntVect &refine_ratio, int n_required_levels)
IndexBox< Rank > Box(const BasicView< State, Layout, Rank > &view)
Definition: State.hpp:486