00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef INC_DUDLEY_MESH
00015 #define INC_DUDLEY_MESH
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058 #include "Dudley.h"
00059 #include "NodeFile.h"
00060 #include "ElementFile.h"
00061 #include "TagMap.h"
00062 #include "Util.h"
00063 #include "paso/SystemMatrixPattern.h"
00064 #include "escript/DataC.h"
00065
00066 #ifdef ESYS_MPI
00067 #include "esysUtils/Esys_MPI.h"
00068 #endif
00069
00070
00071
00072
00073
00074 struct Dudley_Mesh {
00075 char *Name;
00076 dim_t reference_counter;
00077 dim_t approximationOrder;
00078 dim_t reducedApproximationOrder;
00079 dim_t integrationOrder;
00080 dim_t reducedIntegrationOrder;
00081 Dudley_NodeFile *Nodes;
00082 Dudley_ElementFile *Elements;
00083 Dudley_ElementFile *FaceElements;
00084 Dudley_ElementFile *Points;
00085 Dudley_TagMap *TagMap;
00086
00087
00088
00089 Paso_SystemMatrixPattern *FullFullPattern;
00090 Paso_SystemMatrixPattern *FullReducedPattern;
00091 Paso_SystemMatrixPattern *ReducedFullPattern;
00092 Paso_SystemMatrixPattern *ReducedReducedPattern;
00093 Esys_MPIInfo *MPIInfo;
00094 };
00095
00096 typedef struct Dudley_Mesh Dudley_Mesh;
00097
00098
00099
00100 struct Dudley_Mesh_findMatchingFaces_center {
00101 index_t refId;
00102 double x[MAX_numDim];
00103 };
00104 typedef struct Dudley_Mesh_findMatchingFaces_center Dudley_Mesh_findMatchingFaces_center;
00105
00106
00107
00108
00109 Dudley_Mesh *Dudley_Mesh_alloc(char *name, dim_t numDim, Esys_MPIInfo * mpi_info);
00110 Dudley_Mesh *Dudley_Mesh_reference(Dudley_Mesh *);
00111 dim_t Dudley_Mesh_getDim(Dudley_Mesh *);
00112 void Dudley_Mesh_free(Dudley_Mesh *);
00113
00114 void Dudley_Mesh_addTagMap(Dudley_Mesh * mesh_p, const char *name, index_t tag_key);
00115 index_t Dudley_Mesh_getTag(Dudley_Mesh * mesh_p, const char *name);
00116 bool_t Dudley_Mesh_isValidTagName(Dudley_Mesh * mesh_p, const char *name);
00117 void Dudley_Mesh_distributeByRankOfDOF(Dudley_Mesh * in, dim_t * distribution);
00118 Paso_SystemMatrixPattern *Dudley_getPattern(Dudley_Mesh * mesh, bool_t reduce_row_order, bool_t reduce_col_order);
00119 Paso_SystemMatrixPattern *Dudley_makePattern(Dudley_Mesh * mesh, bool_t reduce_row_order, bool_t reduce_col_order);
00120 void Dudley_Mesh_write(Dudley_Mesh *, char *);
00121 void Dudley_Mesh_dump(Dudley_Mesh * in, char *fname);
00122 void Dudley_PrintMesh_Info(Dudley_Mesh *, bool_t);
00123 Dudley_Mesh *Dudley_Mesh_load(char *fname);
00124 Dudley_Mesh *Dudley_Mesh_read(char *, index_t, index_t, bool_t);
00125 Dudley_Mesh *Dudley_Mesh_readGmsh(char *, index_t, index_t, index_t, bool_t, bool_t);
00126 void Dudley_Mesh_setOrders(Dudley_Mesh * in);
00127
00128 void Dudley_Mesh_setCoordinates(Dudley_Mesh *, escriptDataC *);
00129 void Dudley_Mesh_setElements(Dudley_Mesh * self, Dudley_ElementFile * elements);
00130 void Dudley_Mesh_setFaceElements(Dudley_Mesh * self, Dudley_ElementFile * elements);
00131 void Dudley_Mesh_setPoints(Dudley_Mesh * self, Dudley_ElementFile * elements);
00132
00133 void Dudley_Mesh_optimizeDOFDistribution(Dudley_Mesh * in, dim_t * distribution);
00134 void Dudley_Mesh_prepare(Dudley_Mesh * in, bool_t optimize);
00135 void Dudley_Mesh_createColoring(Dudley_Mesh * in, index_t * node_localDOF_map);
00136 void Dudley_Mesh_optimizeElementOrdering(Dudley_Mesh * in);
00137 void Dudley_Mesh_resolveNodeIds(Dudley_Mesh *);
00138 void Dudley_Mesh_createMappings(Dudley_Mesh * in, index_t * dof_distribution, index_t * node_distribution);
00139 void Dudley_Mesh_createNodeFileMappings(Dudley_Mesh * in, dim_t numReducedNodes, index_t * indexReducedNodes,
00140 index_t * dof_first_component, index_t * nodes_first_component);
00141 void Dudley_Mesh_markDOFsConnectedToRange(index_t * mask, index_t offset, index_t marker, index_t firstDOF,
00142 index_t lastDOF, Dudley_Mesh * in, bool_t useLinear);
00143
00144 void Dudley_Mesh_optimizeDOFLabeling(Dudley_Mesh *, dim_t *);
00145
00146 Dudley_Mesh *Dudley_Mesh_merge(dim_t, Dudley_Mesh **);
00147
00148 void Dudley_Mesh_relableElementNodes(int *, int, Dudley_Mesh *);
00149 void Dudley_Mesh_markNodes(int *, int, Dudley_Mesh *, int);
00150
00151 void Dudley_Mesh_glueFaces(Dudley_Mesh * self, double safety_factor, double tolerance, bool_t);
00152 void Dudley_Mesh_joinFaces(Dudley_Mesh * self, double safety_factor, double tolerance, bool_t);
00153
00154 int Dudley_Mesh_findMatchingFaces_compar(const void *, const void *);
00155 void Dudley_Mesh_findMatchingFaces(Dudley_NodeFile *, Dudley_ElementFile *, double, double, int *, int *, int *, int *);
00156 void Dudley_Mesh_print(Dudley_Mesh * in);
00157 void Dudley_Mesh_saveDX(const char *filename_p, Dudley_Mesh * mesh_p, const dim_t num_data, char **names_p,
00158 escriptDataC * *data_pp);
00159 void Dudley_Mesh_optimizeNodeLabeling(Dudley_Mesh * mesh_p);
00160 dim_t Dudley_Mesh_FindMinDegreeNode(Paso_SystemMatrixPattern * pattern_p, index_t * available, index_t indicator);
00161 index_t Dudley_Mesh_getDegree(Paso_SystemMatrixPattern * pattern_p, index_t * label);
00162
00163 void Dudley_Mesh_saveVTK(const char *filename_p, Dudley_Mesh * mesh_p, const dim_t num_data, char **names_p,
00164 escriptDataC * *data_pp, const char *metadata, const char *metadata_schema);
00165 void Dudley_Mesh_setTagsInUse(Dudley_Mesh * in);
00166
00167 int Dudley_Mesh_getStatus(Dudley_Mesh * in);
00168
00169 #endif