Adding some default parameters which can specify that adjacencies should not be modif...
authorIsaac Dooley <idooley2@illinois.edu>
Sat, 17 Feb 2007 18:23:33 +0000 (18:23 +0000)
committerIsaac Dooley <idooley2@illinois.edu>
Sat, 17 Feb 2007 18:23:33 +0000 (18:23 +0000)
src/libs/ck-libs/ParFUM/ParFUM_Mesh_Modify.h
src/libs/ck-libs/ParFUM/mesh_modify.C

index 743ac29c9352ef6915e3945a9aba08852aca5408..f2699394708acfd4790d0f1aa3d4bd50f9d70680 100644 (file)
@@ -40,11 +40,11 @@ int FEM_purge_element(FEM_Mesh *m, int element, int elem_type=0);
 
 // Internal functions used as helper for the above functions
 ///Update adjacencies for this new node, and attach a lock to it
-int FEM_add_node_local(FEM_Mesh *m, int addGhost=0);
+int FEM_add_node_local(FEM_Mesh *m, bool addGhost=false, bool doLocking=true, bool doAdjacencies=true);
 ///Get rid of idxl entries for this node and clear adjacencies, invalidate node
 void FEM_remove_node_local(FEM_Mesh *m, int node);
 ///Update adjacencies for this element and all surrounding nodes/elements
-int FEM_add_element_local(FEM_Mesh *m, int *conn, int connSize, int elemType, int addGhost);
+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);
 
index 3950ac28487fbb440c886257cb9f93f20c550c5f..7b84e82cab7298987dbe99e33741cdc611eb4cb7 100644 (file)
@@ -100,25 +100,31 @@ CDECL int FEM_purge_element(int mesh, int element, int elem_type) {
     then, it creates a lock for this node, if this node is new (i.e. unused)
     otherwise, the existing lock is reset
 */
-int FEM_add_node_local(FEM_Mesh *m, int addGhost){
+int FEM_add_node_local(FEM_Mesh *m, bool addGhost, bool doLocking, bool doAdjacencies){
   int newNode;
   if(addGhost){
     // find a place for new node in tables, reusing old invalid nodes if possible
     newNode = m->node.getGhost()->get_next_invalid(m,true,true); 
-    m->n2e_removeAll(FEM_To_ghost_index(newNode));    // initialize element adjacencies
-    m->n2n_removeAll(FEM_To_ghost_index(newNode));    // initialize node adjacencies
+       if(doAdjacencies){
+         m->n2e_removeAll(FEM_To_ghost_index(newNode));    // initialize element adjacencies
+         m->n2n_removeAll(FEM_To_ghost_index(newNode));    // initialize node adjacencies
+       }
   }
   else{
     newNode = m->node.get_next_invalid(m,true,false);
-    m->n2e_removeAll(newNode);    // initialize element adjacencies
-    m->n2n_removeAll(newNode);    // initialize node adjacencies
+    if(doAdjacencies){
+         m->n2e_removeAll(newNode);    // initialize element adjacencies
+         m->n2n_removeAll(newNode);    // initialize node adjacencies
+       }
     //add a lock
-    if(newNode >= m->getfmMM()->fmLockN.size()) {
-      m->getfmMM()->fmLockN.push_back(FEM_lockN(newNode,m->getfmMM()));
-    }
-    else {
-      m->getfmMM()->fmLockN[newNode].reset(newNode,m->getfmMM());
-    }
+    if(doLocking){
+         if(newNode >= m->getfmMM()->fmLockN.size()) {
+               m->getfmMM()->fmLockN.push_back(FEM_lockN(newNode,m->getfmMM()));
+         }
+         else {
+               m->getfmMM()->fmLockN[newNode].reset(newNode,m->getfmMM());
+         }
+       }
   }
 #ifdef DEBUG_2
   CkPrintf("[%d]Adding Node %d\n",m->getfmMM()->getfmUtil()->getIdx(),(addGhost==0)?newNode:FEM_To_ghost_index(newNode));
@@ -126,6 +132,7 @@ int FEM_add_node_local(FEM_Mesh *m, int addGhost){
   return newNode;  // return a new index
 }
 
+
 /** 'adjacentNodes' specifies the set of nodes between which this new node
     is to be added.
     'forceshared' is used to convey extra information. Sometimes, we know that
@@ -463,7 +470,7 @@ void update_new_element_e2e(FEM_Mesh *m, int newEl, int elemType){
 
 /** A helper function that adds the local element, and updates adjacencies
  */
-int FEM_add_element_local(FEM_Mesh *m, int *conn, int connSize, int elemType, int addGhost){
+int FEM_add_element_local(FEM_Mesh *m, int *conn, int connSize, int elemType, bool addGhost, bool create_adjacencies){
   // lengthen element attributes
   int newEl;
   if(addGhost){
@@ -487,31 +494,35 @@ int FEM_add_element_local(FEM_Mesh *m, int *conn, int connSize, int elemType, in
     // update element's conn, i.e. e2n table
     m->elem[elemType].connIs(newEl,conn); 
   }
-  // add to corresponding inverse, the n2e and n2n table
-  for(int i=0;i<connSize;i++){
-    m->n2e_add(conn[i],newEl);
-    for(int j=i+1;j<connSize;j++){
-      if(! m->n2n_exists(conn[i],conn[j]))
-        m->n2n_add(conn[i],conn[j]);
-      if(! m->n2n_exists(conn[j],conn[i]))
-        m->n2n_add(conn[j],conn[i]);
-    }
-  }
-  // update e2e table -- too complicated, so it gets is own function
-  m->e2e_removeAll(newEl);
-  update_new_element_e2e(m,newEl,elemType);
-  int *adjes = new int[connSize];
-  m->e2e_getAll(newEl, adjes, 0);
-  CkAssert(!((adjes[0]==adjes[1] && adjes[0]!=-1) || (adjes[1]==adjes[2] && adjes[1]!=-1) || (adjes[2]==adjes[0] && adjes[2]!=-1)));
+
+  if(create_adjacencies){
+       // add to n2e and n2n table
+       for(int i=0;i<connSize;i++){
+         m->n2e_add(conn[i],newEl);
+         for(int j=i+1;j<connSize;j++){
+               if(! m->n2n_exists(conn[i],conn[j]))
+                 m->n2n_add(conn[i],conn[j]);
+               if(! m->n2n_exists(conn[j],conn[i]))
+                 m->n2n_add(conn[j],conn[i]);
+         }
+       }
+       // update e2e table -- too complicated, so it gets is own function
+       m->e2e_removeAll(newEl);
+       update_new_element_e2e(m,newEl,elemType);
+       int *adjes = new int[connSize];
+       m->e2e_getAll(newEl, adjes, 0);
+       CkAssert(!((adjes[0]==adjes[1] && adjes[0]!=-1) || (adjes[1]==adjes[2] && adjes[1]!=-1) || (adjes[2]==adjes[0] && adjes[2]!=-1)));
 #ifdef DEBUG_2
-  CkPrintf("[%d]Adding element %d(%d,%d,%d)\n",m->getfmMM()->getfmUtil()->getIdx(),newEl,conn[0],conn[1],conn[2]);
+       CkPrintf("[%d]Adding element %d(%d,%d,%d)\n",m->getfmMM()->getfmUtil()->getIdx(),newEl,conn[0],conn[1],conn[2]);
 #endif
 #ifdef FEM_ELEMSORDERED
-  if(!FEM_Is_ghost_index(newEl)) {
-    m->getfmMM()->fmAdaptAlgs->ensureQuality(conn[0],conn[1],conn[2]);
-  }
+       if(!FEM_Is_ghost_index(newEl)) {
+         m->getfmMM()->fmAdaptAlgs->ensureQuality(conn[0],conn[1],conn[2]);
+       }
 #endif
-  delete[] adjes;
+       delete[] adjes;
+  }
+
   return newEl;
 }