Minor changes to eliminate pesky application usage bugs that could occur.
authorIsaac Dooley <idooley2@illinois.edu>
Fri, 30 Mar 2007 21:29:15 +0000 (21:29 +0000)
committerIsaac Dooley <idooley2@illinois.edu>
Fri, 30 Mar 2007 21:29:15 +0000 (21:29 +0000)
src/libs/ck-libs/ParFUM-Tops/ParFUM_TOPS.C
src/libs/ck-libs/ParFUM-Tops/ParFUM_TOPS.h

index d542ab7242176b433facccb065606371efbb1df9..77e1019eff8788e29264e6f3bbe34bb5ddbf8359 100644 (file)
@@ -33,12 +33,15 @@ void setTableReferences(TopModel* model){
 }
 
 
 }
 
 
-TopModel* topModel_Create_Init(int elem_attr_sz, int node_attr_sz){
+TopModel* topModel_Create_Init(int elem_attr_sz, int node_attr_sz, int model_attr_sz){
   CkAssert(elem_attr_sz > 0);
   CkAssert(node_attr_sz > 0);
   TopModel *model = new TopModel;
   CkAssert(elem_attr_sz > 0);
   CkAssert(node_attr_sz > 0);
   TopModel *model = new TopModel;
+  memset(model, 0, sizeof(TopModel));
+
   model->elem_attr_size = elem_attr_sz;
   model->node_attr_size = node_attr_sz;
   model->elem_attr_size = elem_attr_sz;
   model->node_attr_size = node_attr_sz;
+  model->model_attr_size = model_attr_sz;
 
   // This only uses a single mesh, so better not create multiple ones of these
   int which_mesh=FEM_Mesh_default_write();
 
   // This only uses a single mesh, so better not create multiple ones of these
   int which_mesh=FEM_Mesh_default_write();
@@ -148,7 +151,7 @@ TopModel* topModel_Create_Driver(int elem_attr_sz, int node_attr_sz, int model_a
 
     /** Copy model Attribute to device global memory */
     {
 
     /** Copy model Attribute to device global memory */
     {
-        cudaMalloc(model->model_attr_size, 
+        cudaMalloc(model->model_attr_size,
                 (void**)&(model->device_model.mAttDevice));
         cudaMemcpy(model->device_model.mAttDevice,mAtt,model->model_attr_size,
                 cudaMemcpyHostToDevice);
                 (void**)&(model->device_model.mAttDevice));
         cudaMemcpy(model->device_model.mAttDevice,mAtt,model->model_attr_size,
                 cudaMemcpyHostToDevice);
@@ -188,11 +191,13 @@ void topModel_Destroy(TopModel* m){
 
 
 void topModel_SuggestInitialSize(TopModel* m, unsigned numNodes, unsigned numElements){
 
 
 void topModel_SuggestInitialSize(TopModel* m, unsigned numNodes, unsigned numElements){
+#if 0
   m->mesh->node.setLength(numNodes);
   m->mesh->node.set_all_invalid();
 
   m->mesh->elem[0].setLength(numElements);
   m->mesh->elem[0].set_all_invalid();
   m->mesh->node.setLength(numNodes);
   m->mesh->node.set_all_invalid();
 
   m->mesh->elem[0].setLength(numElements);
   m->mesh->elem[0].set_all_invalid();
+#endif
 }
 
 
 }
 
 
@@ -298,20 +303,18 @@ void* topNode_GetAttrib(TopModel* m, TopNode n){
        @todo Does not work with ghosts yet.
 */
 TopNode topModel_GetNodeAtId(TopModel* m, TopID id){
        @todo Does not work with ghosts yet.
 */
 TopNode topModel_GetNodeAtId(TopModel* m, TopID id){
-  // If the nodes are inserted with ids 1..n then we can just return node id-1
-  if( m->mesh->node.is_valid(id-1) && (*m->node_id_T)(id-1,0)==id){ 
-    return id-1; 
-  } 
-
-  // lookup node via global ID
-  for(int i=0;i<m->node_id_T->size();++i){
-       if( m->mesh->node.is_valid(i) && (*m->node_id_T)(i,0)==id){
-         return i;
-       }
-  }
-  CkPrintf("ERROR: could not find node with id %d\n", id);
-  CkExit();
-  return -1;
+    // If the nodes are inserted with ids 1..n then we can just return node id-1
+    if( m->mesh->node.is_valid_nonghost_idx(id-1) && (*m->node_id_T)(id-1,0)==id){
+        return id-1;
+    }
+
+    // lookup node via global ID
+    for(int i=0;i<m->node_id_T->size();++i){
+        if( m->mesh->node.is_valid(i) && (*m->node_id_T)(i,0)==id){
+        return i;
+        }
+    }
+    return -1;
 }
 
 /**
 }
 
 /**
index 93d37d36f80cc9bb0e53ab38adb92678a7602d87..b85b62809d4835548039913df4801d8117b2e531 100644 (file)
@@ -75,7 +75,7 @@ public:
 Create and access a Tops model. Only call from Init
 Currently only one model can be created. To extend, each model must just reference a different FEM_Mesh object
 */
 Create and access a Tops model. Only call from Init
 Currently only one model can be created. To extend, each model must just reference a different FEM_Mesh object
 */
-TopModel* topModel_Create_Init(int elem_attr_sz, int node_attr_sz);
+TopModel* topModel_Create_Init(int elem_attr_sz, int node_attr_sz, int model_attr_sz);
 
 /** Create and access a Tops model. Only call from Driver */
 TopModel* topModel_Create_Driver(int elem_attr_sz, int node_attr_sz, int model_attr_sz, void* mAtt);
 
 /** Create and access a Tops model. Only call from Driver */
 TopModel* topModel_Create_Driver(int elem_attr_sz, int node_attr_sz, int model_attr_sz, void* mAtt);