Exposed some adaptivity functions for use in cpsd
authorAaron Becker <abecker3@illinois.edu>
Tue, 28 Aug 2007 18:58:35 +0000 (18:58 +0000)
committerAaron Becker <abecker3@illinois.edu>
Tue, 28 Aug 2007 18:58:35 +0000 (18:58 +0000)
src/libs/ck-libs/ParFUM/ParFUM_Adapt.h
src/libs/ck-libs/ParFUM/ParFUM_Mesh_Modify.h
src/libs/ck-libs/ParFUM/adapt.C
src/libs/ck-libs/ParFUM/mesh_modify.C

index 0ee82d24570253e86fa254790f7b77bc83ebb282..57ac23c640cba1a60e3a9da1d3a06535004fc5dd 100644 (file)
@@ -158,6 +158,13 @@ class FEM_AdaptL : public FEM_Adapt {
   int edge_contraction_help(int *e1P, int *e2P, int n1, int n2, int e1_n1, 
                                    int e1_n2, int e1_n3, int e2_n1, int e2_n2,
                                    int e2_n3, int n3, int n4);
   int edge_contraction_help(int *e1P, int *e2P, int n1, int n2, int e1_n1, 
                                    int e1_n2, int e1_n3, int e2_n1, int e2_n2,
                                    int e2_n3, int n3, int n4);
+
+  /// Acquire an element in our ghost layer, turning it into a local element
+  int eatIntoElement(int e);
+  /// Test the adaptivity system to see if any nodes are locked
+  void residualLockTest();
+  /// Test the mesh for corruption in connectivity/adjacency
+  void structureTest();
 };
 
 #endif
 };
 
 #endif
index f2699394708acfd4790d0f1aa3d4bd50f9d70680..8b6a0a8a9ccb42bba69dcd503aadd78e0f7fac35 100644 (file)
@@ -47,6 +47,7 @@ void FEM_remove_node_local(FEM_Mesh *m, int node);
 int FEM_add_element_local(FEM_Mesh *m, int *conn, int connSize, int elemType, bool addGhost, bool create_adjacencies=1);
 ///Clear up the adjacencies
 void FEM_remove_element_local(FEM_Mesh *m, int element, int etype);
 int FEM_add_element_local(FEM_Mesh *m, int *conn, int connSize, int elemType, bool addGhost, bool create_adjacencies=1);
 ///Clear up the adjacencies
 void FEM_remove_element_local(FEM_Mesh *m, int element, int etype);
+void FEM_update_new_element_e2e(FEM_Mesh *m, int newEl, int elemType);
 
 ///Deprecated: locks all chunks for the nodes and elements specified
 int FEM_Modify_Lock(FEM_Mesh *m, int* affectedNodes=0, int numAffectedNodes=0, int* affectedElts=0, int numAffectedElts=0, int elemtype=0);
 
 ///Deprecated: locks all chunks for the nodes and elements specified
 int FEM_Modify_Lock(FEM_Mesh *m, int* affectedNodes=0, int numAffectedNodes=0, int* affectedElts=0, int numAffectedElts=0, int elemtype=0);
index 43557f60bbb829075492cc960fff7044b8a1c308..1f27929a372911d65c119d6bffcb39058c31ee88 100644 (file)
@@ -835,3 +835,21 @@ int FEM_Adapt::vertex_split_help(int n, int n1, int n2, int e1, int e3)
   return np;
 }
 // ======================  END vertex_split ===================
   return np;
 }
 // ======================  END vertex_split ===================
+
+
+int FEM_AdaptL::eatIntoElement(int e)
+{
+    return theMod->fmUtil->eatIntoElement(e);
+}
+
+
+void FEM_AdaptL::residualLockTest()
+{
+    theMod->fmUtil->residualLockTest(theMod->fmMesh);
+}
+
+
+void FEM_AdaptL::structureTest()
+{
+    theMod->fmUtil->StructureTest(theMod->fmMesh);
+}
index 7b84e82cab7298987dbe99e33741cdc611eb4cb7..6552bcf2320d9b27d4eb97a6f9839b9c8ec45197 100644 (file)
@@ -359,6 +359,11 @@ void FEM_remove_node(FEM_Mesh *m, int node){
 /** A helper function for FEM_add_element_local below
     Will only work with the same element type as the one given, may crash otherwise
 */
 /** A helper function for FEM_add_element_local below
     Will only work with the same element type as the one given, may crash otherwise
 */
+void update_new_element_e2e(FEM_Mesh *m, int newEl, int elemType);
+void FEM_update_new_element_e2e(FEM_Mesh *m, int newEl, int elemType){
+    update_new_element_e2e(m, newEl, elemType);
+}
+
 void update_new_element_e2e(FEM_Mesh *m, int newEl, int elemType){
   // this function most definitely will not yet work with mixed element types.
   CkAssert(elemType==0); 
 void update_new_element_e2e(FEM_Mesh *m, int newEl, int elemType){
   // this function most definitely will not yet work with mixed element types.
   CkAssert(elemType==0); 
@@ -438,7 +443,7 @@ void update_new_element_e2e(FEM_Mesh *m, int newEl, int elemType){
         for (const elemList *b=a->next;b!=NULL;b=b->next){
          // if a and b are different elements
           if((a->localNo != b->localNo) || (a->type != b->type)){
         for (const elemList *b=a->next;b!=NULL;b=b->next){
          // if a and b are different elements
           if((a->localNo != b->localNo) || (a->type != b->type)){
-           //  CkPrintf("%d:%d:%d adj to %d:%d:%d\n", a->type, a->localNo, a->tupleNo, b->type, b->localNo, b->tupleNo);
+           //CkPrintf("%d:%d:%d adj to %d:%d:%d\n", a->type, a->localNo, a->tupleNo, b->type, b->localNo, b->tupleNo);
            // Put b in a's adjacency list
            if(FEM_Is_ghost_index(a->localNo)){
              const int j = FEM_To_ghost_index(a->localNo)*tuplesPerElem + a->tupleNo;
            // Put b in a's adjacency list
            if(FEM_Is_ghost_index(a->localNo)){
              const int j = FEM_To_ghost_index(a->localNo)*tuplesPerElem + a->tupleNo;