MAIA bb96820c
Multiphysics at AIA
Loading...
Searching...
No Matches
cartesiangridgenpar.h
Go to the documentation of this file.
1// Copyright (C) 2024 The m-AIA AUTHORS
2//
3// This file is part of m-AIA (https://git.rwth-aachen.de/aia/m-AIA/m-AIA)
4//
5// SPDX-License-Identifier: LGPL-3.0-only
6
7#ifndef GRIDGENPAR_H
8#define GRIDGENPAR_H
9
10#include <bitset>
11#include <set>
12#include <stack>
13
14#include <tuple>
15#include "GEOM/geometry.h"
16#include "GEOM/geometry2d.h"
17#include "GEOM/geometry3d.h"
21#include "INCLUDE/maiatypes.h"
22#include "IO/context.h"
23#include "MEMORY/collector.h"
25#include "cartesiannetcdf.h"
26#include "globals.h"
27
28class GeometryRoot;
29
31 // members
35 // refinement patch
37 MInt noPatchesPerLevel(MInt addLevel) { return (MInt)localRfnLevelMethods[addLevel].size(); };
38 std::vector<MString> localRfnLevelMethods;
42 // boundary refinement
48 MInt* smoothDistance = nullptr;
52 // cut off
54 std::vector<MString> cutOffMethods;
57};
58
59template <MInt nDim>
61 public:
63 MLong& a_parentId(const MInt cellId) { return *m_pCells[cellId].m_parentId_; }
65 const MLong& a_parentId(const MInt cellId) const { return *m_pCells[cellId].m_parentId_; };
67 MInt& a_level(const MInt cellId) { return *m_pCells [cellId].m_level_; }
69 const MInt& a_level(const MInt cellId) const { return *m_pCells [cellId].m_level_; };
71 MInt& a_noSolidLayer(const MInt cellId, const MInt solver) { return m_pCells [cellId].m_noSolidLayer_[solver]; };
73 const MInt& a_noSolidLayer(const MInt cellId, const MInt solver) const {
74 return m_pCells [cellId].m_noSolidLayer_[solver];
75 };
77 MLong& a_globalId(const MInt cellId) { return *m_pCells[cellId].m_globalId_; }
79 const MLong& a_globalId(const MInt cellId) const { return *m_pCells[cellId].m_globalId_; };
81 MInt& a_noChildren(const MInt cellId) { return *m_pCells[cellId].m_noChildIds_; }
83 const MInt& a_noChildren(const MInt cellId) const { return *m_pCells[cellId].m_noChildIds_; };
85 MFloat& a_coordinate(const MInt cellId, const MInt dim) { return m_pCells [cellId].m_coordinates_[dim]; }
87 const MFloat& a_coordinate(const MInt cellId, const MInt dim) const {
88 return m_pCells [cellId].m_coordinates_[dim];
89 };
91 MLong& a_childId(const MInt cellId, const MInt position) { return m_pCells [cellId].m_childIds_[position]; }
93 const MLong& a_childId(const MInt cellId, const MInt position) const {
94 return m_pCells [cellId].m_childIds_[position];
95 }
97 MChar& a_hasProperty(const MInt cellId, const MInt p) { return m_pCells [cellId].b_properties_[p]; }
99 MChar a_hasProperty(const MInt cellId, const MInt p) const { return m_pCells [cellId].b_properties_[p]; };
101 MInt& a_refinementDistance(const MInt cellId) { return m_pCells [cellId].m_rfnDistance_; }
102
104 const MInt& a_refinementDistance(const MInt cellId) const { return m_pCells [cellId].m_rfnDistance_; }
105
107 MLong& a_neighborId(const MInt cellId, const MInt position) { return m_pCells [cellId].m_nghbrIds_[position]; }
108
110 const MLong& a_neighborId(const MInt cellId, const MInt position) const {
111 return m_pCells [cellId].m_nghbrIds_[position];
112 }
113
115 MChar& a_isInSolver(const MInt cellId, const MInt solver) {
116 return m_pCells [cellId].b_solverAffiliation_[solver];
117 }
119 MChar a_isInSolver(const MInt cellId, const MInt solver) const {
120 return m_pCells [cellId].b_solverAffiliation_[solver];
121 };
122
124 MChar& a_isSolverBoundary(const MInt cellId, const MInt solver) {
125 return m_pCells [cellId].b_solverBoundary_[solver];
126 }
128 MChar a_isSolverBoundary(const MInt cellId, const MInt solver) const {
129 return m_pCells [cellId].b_solverBoundary_[solver];
130 };
131
133 MChar& a_isToRefineForSolver(const MInt cellId, const MInt solver) {
134 return m_pCells [cellId].b_solverToRefine_[solver];
135 }
137 MChar a_isToRefineForSolver(const MInt cellId, const MInt solver) const {
138 return m_pCells [cellId].b_solverToRefine_[solver];
139 };
140
141 GridgenPar(const MPI_Comm comm, const MInt noSolvers);
142 template <class T>
143 static void quickSort(T* globalIdArray, MInt* lookup, MInt startindex, MInt endindex);
144
145
146 MPI_Comm mpiComm() const { return m_mpiComm; }
147 MInt domainId() const { return m_domainId; }
148 MInt noDomains() const { return m_noDomains; }
149
150 protected:
151 void initTimers();
152 void initMembers();
155 void initGeometry();
156 void gridAlignCutOff();
157 void createInitialGrid();
158 void createStartGrid();
159 void finalizeGrid();
162 MInt getAdjacentGridCells(MInt cellId, MInt* adjacentCells);
164 void saveGrid();
165 void saveGridDomain(MInt level_, MInt tag);
166
167 void checkMemoryAvailability(MInt stage, MInt level_);
168 void refineGrid(MInt** offsets, MInt level_, MBool halo);
169 void refineGridPatch(MInt** offsets, MInt level_, MBool halo);
170 void refineCell(MInt id, MInt* currentChildId);
171 void deleteOutsideCellsSerial(MInt level_);
174 void performCutOff(MInt** offsets, MInt level_, MBool deleteMode = false);
175 void keepOutsideBndryCellChildrenSerial(MInt* offsets, MInt level_);
177 void createSolidCellLayer(MInt cellId, MInt solidLayer, MInt finalLayer_);
179 void deleteOutsideCellsParallel(MInt level_);
180 MInt getLastNonWindowCell(MInt no_consider, MInt last);
181 void deleteCellReferences(MInt cell, MInt pos);
182 void markInsideOutside(MInt** offsets, MInt level_);
183 void markInsideOutside(MInt** offsets, MInt level_, MInt solver);
184 void markSolverAffiliation(MInt level_);
185 void excludeInsideOutside(MInt** offsets, MInt level_, MInt solver);
186 void floodCells(std::stack<MInt>* fillStack, MChar marker);
187 void floodCells(std::stack<MInt>* fillStack, MChar marker, MInt solver);
188 void findChildLevelNeighbors(MInt** offsets, MInt level_);
189
190 void reorderCellsHilbert();
191
192 void parallelizeGrid();
193 void updateHaloOffsets(MInt l, MInt noHalos, MInt* rfnCountHalosDom);
194 void updateOffsets(MInt gridLevel);
196 void findHaloAndWindowCells(std::vector<std::vector<MInt>>& winCellIdsPerDomain,
197 std::vector<std::vector<MInt>>& haloCellIdsPerDomain);
198 void findHaloAndWindowCellsKD(std::vector<std::vector<MInt>>& winCellIdsPerDomain,
199 std::vector<std::vector<MInt>>& haloCellIdsPerDomain);
201 void collectHaloChildren(MInt parentId, std::vector<MInt>* cellIdsPerDomain);
202 void collectWindowChildren(MInt parentId, std::vector<MInt>* cellIdsPerDomain);
203 void reorderGlobalIdsDF();
204 void traverseDFGlobalId(MInt parentId,
205 MLong* globalId_,
206 MLongScratchSpace& partitionCellList,
207 MFloatScratchSpace& workloadPerCell,
208 MFloat* currentWorkload,
209 MFloatScratchSpace& weight,
210 MFloatScratchSpace& workload,
211 MInt* j);
214
215 void markSolverForRefinement(MInt level_, MInt solver);
216 void concludeSolverRefinement(MInt level_);
217 void markLocalSolverRefinement(MInt level_, MInt solver);
218 void markPatchForSolverRefinement(MInt level_, MInt solver);
219 void markBndForSolverRefinement(MInt level_, MInt solver);
220 void markLocalBox(MInt level_, MInt patch, MInt solver);
221 void markLocalRadius(MInt level_, MInt patch, MInt solver);
222 void markLocalCylinder(MInt level_, MInt patch, MInt solver, MString patchStr);
223 void markLocalCone(MInt level_, MInt patch, MInt solver);
224 void markLocalRectangleAngled(MInt level_, MInt patch, MInt solver);
225 void markLocalCartesianWedge(MInt level_, MInt patch, MInt solver);
226 void markLocalFlatCone(MInt level_, MInt patch, MInt solver);
227 void markLocalSlicedCone(MInt level_, MInt patch, MInt solver, MString patchStr);
228 void markLocalHat(MInt level_, MInt patch, MInt solver);
229 void markBndDistance(MInt level_, MInt solver);
230 void propagateDistance(MInt level_, MInt distance, std::vector<MInt>& rfnBoundaryGroup, MInt solver);
231 void propagationStep(MInt cellId, MInt rfnDistance, MInt finalDistance, MInt solver);
232 MBool isInsideSlicedCone(const MFloat* const pointCoord,
233 const MFloat* const leftCoord,
234 const MFloat* const rightCoord,
235 const MFloat* const leftNormal,
236 const MFloat* const rightNormal,
237 const MFloat* const normalDifforigAB,
238 const MFloat leftR,
239 const MFloat rightR);
240 MBool isInsideCylinder(const MFloat* const pointCoord,
241 const MFloat* const leftCoord,
242 const MFloat* const rightCoord,
243 const MFloat* const normalDiffAB,
244 const MFloat* const normalDiffBA,
245 const MFloat radius,
246 const MFloat innerRadius);
247 MBool pointIsInside(MFloat* coordinates);
248 MBool pointIsInsideSolver(MFloat* coordinates, MInt solver);
250
251 void copyCell(MInt from, MInt to);
252 void swapCells(MInt cellId1, MInt cellId2);
253
254 void checkNeighborhood(MInt level_);
255 void checkNeighborhoodDistance(MInt level_);
256 void checkNeighborhoodIntegrity(MInt level_);
258 void writeGridInformation(MInt level_, MInt tag);
259
260 // functions for parallel geometry
262
263 // functions used in the dynamic load balancing.
264 void checkLoadBalance(MInt in_level);
266 void communicateInt(MIntScratchSpace& recvBuffer,
267 MIntScratchSpace& noCellsToReceive,
268 MIntScratchSpace& sendBuffer,
269 MIntScratchSpace& noCellsToSend);
270 void communicateLong(MLongScratchSpace& recvBuffer,
271 MIntScratchSpace& noCellsToReceive,
272 MLongScratchSpace& sendBuffer,
273 MIntScratchSpace& noCellsToSend);
274 void communicateDouble(MFloatScratchSpace& recvBuffer,
275 MIntScratchSpace& noCellsToReceive,
276 MFloatScratchSpace& sendBuffer,
277 MIntScratchSpace& noCellsToSend);
279 MIntScratchSpace& noCellsToReceive,
280 MIntScratchSpace& sendMem,
281 MIntScratchSpace& noCellsToSend,
282 MInt noVar);
283 void communicateHaloGlobalIds(MInt level);
284
285 private:
286 const MPI_Comm m_mpiComm;
289
290 std::ostream outStream;
291
297
309
316
317 // Global bounding box and information for multisolver grid
319 std::vector<MFloat> m_multiSolverBoundingBox{};
322 std::vector<MFloat> m_multiSolverCenterOfGravity{};
323
330
333 MBool** m_bndCutInfo = nullptr;
334
336
338
346
347 MInt** m_levelOffsets = nullptr;
350
355 std::vector<std::tuple<MInt, MLong, MFloat>> m_partitionCellList;
363
365 std::map<MInt, MInt> m_cellIdLUT;
366
367
368 // timers
380
381 // variables used by the dynamic load balancing.
384};
385#endif
void communicateDouble(MFloatScratchSpace &recvBuffer, MIntScratchSpace &noCellsToReceive, MFloatScratchSpace &sendBuffer, MIntScratchSpace &noCellsToSend)
Communicates an array of double values.
void findChildLevelNeighbors(MInt **offsets, MInt level_)
updates the children of a given level
MBool isInsideSlicedCone(const MFloat *const pointCoord, const MFloat *const leftCoord, const MFloat *const rightCoord, const MFloat *const leftNormal, const MFloat *const rightNormal, const MFloat *const normalDifforigAB, const MFloat leftR, const MFloat rightR)
checks if point (cell) is inside a sliced cone
void updateOffsets(MInt gridLevel)
updates the offsets
MFloat m_partitionCellWorkloadThreshold
GridgenCell< nDim > * m_pCells
MInt nghborStencil(MInt, MInt)
SolverRefinement * m_solverRefinement
void communicateInt(MIntScratchSpace &recvBuffer, MIntScratchSpace &noCellsToReceive, MIntScratchSpace &sendBuffer, MIntScratchSpace &noCellsToSend)
Communicates an array of int values.
void traverseDFGlobalId(MInt parentId, MLong *globalId_, MLongScratchSpace &partitionCellList, MFloatScratchSpace &workloadPerCell, MFloat *currentWorkload, MFloatScratchSpace &weight, MFloatScratchSpace &workload, MInt *j)
recursively traverses the octree
MInt m_t_createComputationalGrid
void checkMemoryAvailability(MInt stage, MInt level_)
void markInsideOutside(MInt **offsets, MInt level_)
marks inside and outside cells
MInt * m_noPartitionCellsPerDomain
MBool isInsideCylinder(const MFloat *const pointCoord, const MFloat *const leftCoord, const MFloat *const rightCoord, const MFloat *const normalDiffAB, const MFloat *const normalDiffBA, const MFloat radius, const MFloat innerRadius)
checks if point (cell) is inside a cylinder
void copyCell(MInt from, MInt to)
moves a cell from one location in the collector to another
void communicateLong(MLongScratchSpace &recvBuffer, MIntScratchSpace &noCellsToReceive, MLongScratchSpace &sendBuffer, MIntScratchSpace &noCellsToSend)
Communicates an array of int values.
void saveGridDomain(MInt level_, MInt tag)
degugging function writing the grid in serial
MFloat & a_coordinate(const MInt cellId, const MInt dim)
Returns the coordinate of the cell cellId for dimension dim.
Collector< GridgenCell< nDim > > * m_cells
static void quickSort(T *globalIdArray, MInt *lookup, MInt startindex, MInt endindex)
sorts a list of integers and updates a second one
MInt ** m_haloCellOffsets
MLong m_partitionCellOffspringThreshold
MInt m_initialRefinementLevelSerial
void deleteCoarseSolidCellsSerial()
performs deleting solid cells lower than maxRefinementLevel
void markSolverAffiliation(MInt level_)
marks cells without solver affiliation as outside cells
MInt getLastNonWindowCell(MInt no_consider, MInt last)
MBool m_weightSolverUniformLevel
const MFloat & a_coordinate(const MInt cellId, const MInt dim) const
Returns the coordinate of the cell cellId for dimension dim.
void markLocalCylinder(MInt level_, MInt patch, MInt solver, MString patchStr)
marks cells that lie in a cylinder-type patch
MBool m_writeCoordinatesToGridFile
std::vector< MFloat > m_multiSolverBoundingBox
const MInt & a_noSolidLayer(const MInt cellId, const MInt solver) const
Returns the solid layer of the cell cellId.
void markLocalFlatCone(MInt level_, MInt patch, MInt solver)
void refineComputationalGrid(MInt lvl)
refines cells of the computational grid that are marked for refinement
void markLocalBox(MInt level_, MInt patch, MInt solver)
marks cells that lie in a box-type patch
MInt m_maxUniformRefinementLevel
void initMembers()
initializes the member variables
MString m_targetGridFileName
MChar a_isSolverBoundary(const MInt cellId, const MInt solver) const
Multisolver grid: does a cell belong to a certain solver.
MInt getAdjacentGridCells(MInt cellId, MInt *adjacentCells)
Retrieves all direct and diagonal neighboring cells of the given cell.
MLong & a_globalId(const MInt cellId)
Returns the globalId of the cell cellId.
void propagationStep(MInt cellId, MInt rfnDistance, MInt finalDistance, MInt solver)
recursivley marks the cells with a distance
void updateHaloOffsets(MInt l, MInt noHalos, MInt *rfnCountHalosDom)
updates the offsets of the halos
void markLocalRectangleAngled(MInt level_, MInt patch, MInt solver)
marks cells that lie in a rectangular-angled-type patch
MInt * m_neighborDomains
MChar a_isInSolver(const MInt cellId, const MInt solver) const
Multisolver grid: does a cell belong to a certain solver.
void checkNeighborhood(MInt level_)
checks if the neighborhood is correct
MInt * m_noBndIdsPerSolver
MFloat * m_boundingBox
MLong & a_parentId(const MInt cellId)
Returns the parent of the cell cellId.
MInt noDomains() const
void communicateIntToNeighbors(MIntScratchSpace &recvMem, MIntScratchSpace &noCellsToReceive, MIntScratchSpace &sendMem, MIntScratchSpace &noCellsToSend, MInt noVar)
Communicates Int values, with a variable nmbr of variables to the Neighbors.
void createComputationalMultisolverGrid()
refinement > minLevel is processed in createComputationalMultisolverGrid
const MLong & a_neighborId(const MInt cellId, const MInt position) const
Returns the neighbor id of the cell cellId position.
MFloat * m_centerOfGravity
void performCutOff(MInt **offsets, MInt level_, MBool deleteMode=false)
performs a cut-off defined by the properties
MLong & a_childId(const MInt cellId, const MInt position)
Returns the child id of the cell cellId position.
MBool m_writeGridInformation
MPI_Comm mpiComm() const
void deleteCellReferences(MInt cell, MInt pos)
deletes the references of a given cell
void initGeometry()
initializes the geometry
MChar a_isToRefineForSolver(const MInt cellId, const MInt solver) const
Multisolver grid: does a cell belong to a certain solver.
MChar & a_isToRefineForSolver(const MInt cellId, const MInt solver)
Multisolver grid: does a cell belong to a certain solver.
MInt & a_noChildren(const MInt cellId)
Returns the no. of children of the cell cellId.
MInt & a_noSolidLayer(const MInt cellId, const MInt solver)
Returns the solid layer of the cell cellId.
MFloat * m_geometryExtents
MString m_parallelGeomFileName
std::ostream outStream
MBool m_hasMultiSolverBoundingBox
GeometryRoot * m_geometry
MBool m_checkGridLbValidity
std::vector< std::tuple< MInt, MLong, MFloat > > m_partitionCellList
MInt & a_refinementDistance(const MInt cellId)
Returns rfnDistance of the cell cellId position.
void deleteOutsideCellsSerial(MInt level_)
deletes the cells outside of the geometry
void markLocalRadius(MInt level_, MInt patch, MInt solver)
marks cells that lie in a sphere-type patch
void markBndForSolverRefinement(MInt level_, MInt solver)
MInt m_keepOutsideBndryCellChildren
void checkNeighborhoodDistance(MInt level_)
checks if the distance between neighboring cells is alright
void checkNeighborhoodIntegrity(MInt level_)
checks if the neighborhood relation of the cells is alright
void excludeInsideOutside(MInt **offsets, MInt level_, MInt solver)
excludes obvious non solver affiliated cells from the inside outside flooding
void reorderCellsHilbert()
reorders the cells after Hilbert id
void swapCells(MInt cellId1, MInt cellId2)
swaps two cells in memory
void updateGlobalIdsReferences()
updates the references of all cells to use the global-ids
MString m_gridOutputFileName
void dynamicLoadBalancing()
Rebalances the grid dynamicaly while grid building.
void determineRankOffsets(MIntScratchSpace &offsets)
void readSolverProperties(MInt solver)
void findHaloAndWindowCells(std::vector< std::vector< MInt > > &winCellIdsPerDomain, std::vector< std::vector< MInt > > &haloCellIdsPerDomain)
find window cells using the known halo cells
void saveGrid()
writes the grid to file in parallel
void createSolidCellLayer(MInt cellId, MInt solidLayer, MInt finalLayer_)
const MInt & a_level(const MInt cellId) const
Returns the level of the cell cellId.
void deleteOutsideCellsParallel(MInt level_)
deletes outside cells in parallel mode
MInt ** m_levelOffsets
MInt * m_rfnCountHalosDom
MInt * m_noHaloCellsOnLevel
void checkLBRefinementValidity()
checks if this is a valid mesh also for LB computations
void keepOutsideBndryCellChildrenSerial(MInt *offsets, MInt level_)
const MInt & a_noChildren(const MInt cellId) const
Returns the no. of children of the cell cellId.
MBool pointIsInsideSolver(MFloat *coordinates, MInt solver)
void markLocalCartesianWedge(MInt level_, MInt patch, MInt solver)
void writeGridInformationPar()
writes a pseudo solution file with some grid information
const MLong & a_parentId(const MInt cellId) const
Returns the parent of the cell cellId.
void markLocalCone(MInt level_, MInt patch, MInt solver)
marks cells that lie in a cone-type patch with a smooth hat
const MLong & a_childId(const MInt cellId, const MInt position) const
Returns the child id of the cell cellId position.
MChar & a_hasProperty(const MInt cellId, const MInt p)
Returns property p of the cell cellId.
void markPatchForSolverRefinement(MInt level_, MInt solver)
void markLocalHat(MInt level_, MInt patch, MInt solver)
marks cells that lie in a cone-type patch with a smooth hat
void communicateHaloGlobalIds(MInt level)
communicate the global ids of the halo cells.
MFloat m_reductionFactor
MInt * m_noCellsPerDomain
void createStartGrid()
creates the start grid
MBool m_hasBeenLoadBalanced
MBool pointIsInside(MFloat *coordinates)
checks if a given point is inside the geometry
const MLong & a_globalId(const MInt cellId) const
Returns the globalId of the cell cellId.
void collectHaloChildren(MInt parentId, std::vector< MInt > *cellIdsPerDomain)
recursively traverse the tree depth-first and collect halo cells
void refineGridPatch(MInt **offsets, MInt level_, MBool halo)
refines the grid on a given level for a provided patch
void markLocalSolverRefinement(MInt level_, MInt solver)
void gridAlignCutOff()
aligns the cutOffCoordinates with the grid
MInt & a_level(const MInt cellId)
Returns the level of the cell cellId.
void collectWindowChildren(MInt parentId, std::vector< MInt > *cellIdsPerDomain)
recursively traverse the tree depth-first and collect window cells
void floodCells(std::stack< MInt > *fillStack, MChar marker)
floods cells
void readProperties()
reads necessary properties from the property file
void findHaloAndWindowCellsKD(std::vector< std::vector< MInt > > &winCellIdsPerDomain, std::vector< std::vector< MInt > > &haloCellIdsPerDomain)
finds halo and window cells using a kd tree
std::vector< MFloat > m_multiSolverCenterOfGravity
MChar & a_isInSolver(const MInt cellId, const MInt solver)
Multisolver grid: does a cell belong to a certain solver.
MChar a_hasProperty(const MInt cellId, const MInt p) const
Returns property p of the cell cellId.
void refineCell(MInt id, MInt *currentChildId)
refines a single cell
void markSolverForRefinement(MInt level_, MInt solver)
MInt m_t_updateInterRankNeighbors
void reorderGlobalIdsDF()
reorders the globalIds depth-first
void propagateDistance(MInt level_, MInt distance, std::vector< MInt > &rfnBoundaryGroup, MInt solver)
propagates the distance away from the boundary
Geometry< nDim > * m_STLgeometry
void concludeSolverRefinement(MInt level_)
void parallelizeGrid()
parallize the present grid
std::map< MInt, MInt > m_cellIdLUT
void checkLoadBalance(MInt in_level)
checks if a dynamic load balancing is needed.
MInt domainId() const
MLong m_noTotalPartitionCells
MFloat m_multiSolverLengthLevel0
MFloat * m_lengthOnLevel
MLong & a_neighborId(const MInt cellId, const MInt position)
Returns the neighbor id of the cell cellId position.
void markBndDistance(MInt level_, MInt solver)
marks cells that lie in a certain distance to the boundary
void updateInterRankNeighbors()
updates the neighbors on the neighboring ranks
const MPI_Comm m_mpiComm
MBool checkCellForCut(MInt id)
checks if a cell has a cut with the geometry
void deleteCoarseSolidCellsParallel()
performs deleting solid cells lower than maxRefinementLevel
MInt ** m_haloCellOffsetsLevel
void keepOutsideBndryCellChildrenParallel(MInt level_)
void refineGrid(MInt **offsets, MInt level_, MBool halo)
refines the grid on a given level
MBool ** m_bndCutInfo
MChar & a_isSolverBoundary(const MInt cellId, const MInt solver)
Multisolver grid: does a cell belong to a certain solver.
void setCellWeights(MFloatScratchSpace &weight)
sets the cell weights according to the box system
void writeGridInformation(MInt level_, MInt tag)
debugging function writing debug info to a file
void createInitialGrid()
creates the initial grid
const MInt & a_refinementDistance(const MInt cellId) const
Returns rfnDistance of the cell cellId position.
void markLocalSlicedCone(MInt level_, MInt patch, MInt solver, MString patchStr)
marks cells that lie in a sliced cone-type patch
This class is a ScratchSpace.
Definition: scratch.h:758
int32_t MInt
Definition: maiatypes.h:62
std::basic_string< char > MString
Definition: maiatypes.h:55
MInt noSolvers
Definition: maiatypes.h:73
double MFloat
Definition: maiatypes.h:52
int64_t MLong
Definition: maiatypes.h:64
bool MBool
Definition: maiatypes.h:58
char MChar
Definition: maiatypes.h:56
MFloat ** localRfnPatchProperties
MInt * localRfnLevelPropertiesOffset
std::vector< MString > cutOffMethods
MInt noPatchesPerLevel(MInt addLevel)
std::vector< MString > localRfnLevelMethods