Ice Sheet System Model  4.18
Code documentation
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
AdaptiveMeshRefinement.h
Go to the documentation of this file.
1 #ifndef ADAPTIVEMESHREFINEMENT
2 #define ADAPTIVEMESHREFINEMENT
3 
4 /*Includes*/
5 /*{{{*/
6 /*NeoPZ includes*/
7 #include <pzgmesh.h>
8 /*ISSM includes*/
9 #include "../shared/shared.h"
10 /*}}}*/
11 
13 
14 public:
15  /*Public attributes{{{*/
16  /*
17  * to refine:
18  * distance_h = initial_distance * gradation ^ (level_max-h)
19  * to unrefine:
20  * distance_h = lag * initial_distance * gradation ^ (level_max-h)
21  */
22  int refinement_type; //0 uniform (faster); 1 refpattern
23  int level_max; //max level of refinement
24  double gradation; //geometric progression ratio to calculate radius of level h
25  double lag; //lag used in the unrefine process
26  /*Target and estimators*/
27  double groundingline_distance; //all elements with distance from grounding line <= groundingline_distance will be refined
28  double icefront_distance; //all elements with distance from ice front <= icefront_distance will be refined
29  double thicknesserror_threshold; //if ==0, it will not be used
30  double thicknesserror_groupthreshold;//group threshold
31  double thicknesserror_maximum; //max value of the error estimator; in general, it is defined in the first time step. Attention with restart
32  double deviatoricerror_threshold; //if ==0, it will not be used
33  double deviatoricerror_groupthreshold;//group threshold
34  double deviatoricerror_maximum; //max value of the error estimator; in general, it is defined in the first time step. Attention with restart
35  /*}}}*/
36  /*Public methods{{{*/
37  /* Constructor, destructor etc*/
41  virtual ~AdaptiveMeshRefinement();
42  /*General methods*/
43  void CleanUp();
44  void Initialize();
45  void ExecuteRefinement(double* gl_distance,double* if_distance,double* deviatoricerror,double* thicknesserror,int** pdatalist,double** pxy,int** pelementslist);
46  void SetMesh(int** elementslist_in,IssmDouble** x_in,IssmDouble** y_in,int* numberofvertices,int* numberofelements);
47  void GetMesh(int** elementslist_out,IssmDouble** x_out,IssmDouble** y_out,int* numberofvertices,int* numberofelements);
48  void CheckMesh(int** pdata,double** pxy,int** pelements);
49  void ReadMesh();
50  void WriteMesh();
51  /*}}}*/
52 private:
53  /*Private attributes{{{*/
54  std::vector<int> sid2index; // Vector that keeps index of PZGeoMesh elements used in the ISSM mesh (sid)
55  std::vector<int> index2sid; // Vector that keeps sid of issm mesh elements used in the neopz mesh (index)
56  std::vector<int> specialelementsindex; // Vector that keeps index of the special elements (created to avoid haning nodes)
57  TPZGeoMesh *fathermesh; // Entire mesh without refinement if refinement_type==1; refined with hanging nodes if efinement_type==0
58  TPZGeoMesh *previousmesh; // Refined mesh without hanging nodes (it is always refpattern type), used to generate ISSM mesh
59  IssmDouble* x; // Entire mesh
64  /*}}}*/
65  /*Private methods{{{*/
66  void RefineMeshOneLevel(bool &verbose,double* gl_distance,double* if_distance,double* deviatoricerror,double* thicknesserror);
67  void RefineMeshWithSmoothing(bool &verbose,TPZGeoMesh* gmesh);
68  void RefineMeshToAvoidHangingNodes(bool &verbose,TPZGeoMesh* gmesh);
69  void DeleteSpecialElements(bool &verbose,TPZGeoMesh* gmesh);
70  void GetMesh(TPZGeoMesh* gmesh,int** pdata,double** pxy,int** pelements);
71  TPZGeoMesh* CreateRefPatternMesh(TPZGeoMesh* gmesh);
72  inline int GetElemMaterialID(){return 1;}
73  inline int GetNumberOfNodes(){return 3;}
74  void PrintGMeshVTK(TPZGeoMesh *gmesh,std::ofstream &file,bool matColor=true);
75  int GetVTK_ElType(TPZGeoEl* gel);
76  int VerifyRefinementType(TPZGeoEl* geoel,TPZGeoMesh* gmesh);
77  /*}}}*/
78 };
79 
80 #endif
AdaptiveMeshRefinement::deviatoricerror_threshold
double deviatoricerror_threshold
Definition: AdaptiveMeshRefinement.h:32
AdaptiveMeshRefinement::gradation
double gradation
Definition: AdaptiveMeshRefinement.h:24
IssmDouble
double IssmDouble
Definition: types.h:37
AdaptiveMeshRefinement
Definition: AdaptiveMeshRefinement.h:12
AdaptiveMeshRefinement::thicknesserror_threshold
double thicknesserror_threshold
Definition: AdaptiveMeshRefinement.h:29
AdaptiveMeshRefinement::numberofelements
int numberofelements
Definition: AdaptiveMeshRefinement.h:63
AdaptiveMeshRefinement::WriteMesh
void WriteMesh()
Definition: AdaptiveMeshRefinement.cpp:959
AdaptiveMeshRefinement::deviatoricerror_maximum
double deviatoricerror_maximum
Definition: AdaptiveMeshRefinement.h:34
AdaptiveMeshRefinement::icefront_distance
double icefront_distance
Definition: AdaptiveMeshRefinement.h:28
AdaptiveMeshRefinement::CheckMesh
void CheckMesh(int **pdata, double **pxy, int **pelements)
Definition: AdaptiveMeshRefinement.cpp:758
AdaptiveMeshRefinement::index2sid
std::vector< int > index2sid
Definition: AdaptiveMeshRefinement.h:55
AdaptiveMeshRefinement::SetMesh
void SetMesh(int **elementslist_in, IssmDouble **x_in, IssmDouble **y_in, int *numberofvertices, int *numberofelements)
Definition: AdaptiveMeshRefinement.cpp:138
AdaptiveMeshRefinement::groundingline_distance
double groundingline_distance
Definition: AdaptiveMeshRefinement.h:27
AdaptiveMeshRefinement::numberofvertices
int numberofvertices
Definition: AdaptiveMeshRefinement.h:62
AdaptiveMeshRefinement::x
IssmDouble * x
Definition: AdaptiveMeshRefinement.h:59
AdaptiveMeshRefinement::GetElemMaterialID
int GetElemMaterialID()
Definition: AdaptiveMeshRefinement.h:72
AdaptiveMeshRefinement::DeleteSpecialElements
void DeleteSpecialElements(bool &verbose, TPZGeoMesh *gmesh)
Definition: AdaptiveMeshRefinement.cpp:491
AdaptiveMeshRefinement::thicknesserror_groupthreshold
double thicknesserror_groupthreshold
Definition: AdaptiveMeshRefinement.h:30
AdaptiveMeshRefinement::Initialize
void Initialize()
Definition: AdaptiveMeshRefinement.cpp:613
AdaptiveMeshRefinement::sid2index
std::vector< int > sid2index
Definition: AdaptiveMeshRefinement.h:54
AdaptiveMeshRefinement::specialelementsindex
std::vector< int > specialelementsindex
Definition: AdaptiveMeshRefinement.h:56
AdaptiveMeshRefinement::level_max
int level_max
Definition: AdaptiveMeshRefinement.h:23
AdaptiveMeshRefinement::RefineMeshWithSmoothing
void RefineMeshWithSmoothing(bool &verbose, TPZGeoMesh *gmesh)
Definition: AdaptiveMeshRefinement.cpp:403
AdaptiveMeshRefinement::ExecuteRefinement
void ExecuteRefinement(double *gl_distance, double *if_distance, double *deviatoricerror, double *thicknesserror, int **pdatalist, double **pxy, int **pelementslist)
Definition: AdaptiveMeshRefinement.cpp:160
AdaptiveMeshRefinement::RefineMeshToAvoidHangingNodes
void RefineMeshToAvoidHangingNodes(bool &verbose, TPZGeoMesh *gmesh)
Definition: AdaptiveMeshRefinement.cpp:453
AdaptiveMeshRefinement::CreateRefPatternMesh
TPZGeoMesh * CreateRefPatternMesh(TPZGeoMesh *gmesh)
Definition: AdaptiveMeshRefinement.cpp:667
AdaptiveMeshRefinement::previousmesh
TPZGeoMesh * previousmesh
Definition: AdaptiveMeshRefinement.h:58
AdaptiveMeshRefinement::RefineMeshOneLevel
void RefineMeshOneLevel(bool &verbose, double *gl_distance, double *if_distance, double *deviatoricerror, double *thicknesserror)
Definition: AdaptiveMeshRefinement.cpp:189
AdaptiveMeshRefinement::VerifyRefinementType
int VerifyRefinementType(TPZGeoEl *geoel, TPZGeoMesh *gmesh)
Definition: AdaptiveMeshRefinement.cpp:372
AdaptiveMeshRefinement::refinement_type
int refinement_type
Definition: AdaptiveMeshRefinement.h:22
AdaptiveMeshRefinement::ReadMesh
void ReadMesh()
Definition: AdaptiveMeshRefinement.cpp:917
AdaptiveMeshRefinement::y
IssmDouble * y
Definition: AdaptiveMeshRefinement.h:60
AdaptiveMeshRefinement::CleanUp
void CleanUp()
Definition: AdaptiveMeshRefinement.cpp:111
AdaptiveMeshRefinement::GetMesh
void GetMesh(int **elementslist_out, IssmDouble **x_out, IssmDouble **y_out, int *numberofvertices, int *numberofelements)
Definition: AdaptiveMeshRefinement.cpp:151
AdaptiveMeshRefinement::GetNumberOfNodes
int GetNumberOfNodes()
Definition: AdaptiveMeshRefinement.h:73
AdaptiveMeshRefinement::deviatoricerror_groupthreshold
double deviatoricerror_groupthreshold
Definition: AdaptiveMeshRefinement.h:33
AdaptiveMeshRefinement::GetVTK_ElType
int GetVTK_ElType(TPZGeoEl *gel)
Definition: AdaptiveMeshRefinement.cpp:853
AdaptiveMeshRefinement::lag
double lag
Definition: AdaptiveMeshRefinement.h:25
AdaptiveMeshRefinement::operator=
AdaptiveMeshRefinement & operator=(const AdaptiveMeshRefinement &cp)
Definition: AdaptiveMeshRefinement.cpp:74
AdaptiveMeshRefinement::~AdaptiveMeshRefinement
virtual ~AdaptiveMeshRefinement()
Definition: AdaptiveMeshRefinement.cpp:104
AdaptiveMeshRefinement::PrintGMeshVTK
void PrintGMeshVTK(TPZGeoMesh *gmesh, std::ofstream &file, bool matColor=true)
Definition: AdaptiveMeshRefinement.cpp:768
AdaptiveMeshRefinement::fathermesh
TPZGeoMesh * fathermesh
Definition: AdaptiveMeshRefinement.h:57
AdaptiveMeshRefinement::AdaptiveMeshRefinement
AdaptiveMeshRefinement()
Definition: AdaptiveMeshRefinement.cpp:44
AdaptiveMeshRefinement::elementslist
int * elementslist
Definition: AdaptiveMeshRefinement.h:61
AdaptiveMeshRefinement::thicknesserror_maximum
double thicknesserror_maximum
Definition: AdaptiveMeshRefinement.h:31