Fixed some iterators and adding of nodes
authorIsaac Dooley <idooley2@illinois.edu>
Fri, 16 Feb 2007 19:55:08 +0000 (19:55 +0000)
committerIsaac Dooley <idooley2@illinois.edu>
Fri, 16 Feb 2007 19:55:08 +0000 (19:55 +0000)
src/libs/ck-libs/ParFUM-Tops/Makefile
src/libs/ck-libs/ParFUM-Tops/ParFUM_TOPS.C
src/libs/ck-libs/ParFUM-Tops/ParFUM_TOPS.h

index 715e128d228ae67700fd059c88dea898e7c01596..1f55edcb5a82c3233f75917f69fe461df2b9ab5e 100644 (file)
@@ -1,5 +1,5 @@
 CDIR=../../../..
-CHARMC=$(CDIR)/bin/charmc $(OPTS)
+CHARMC=$(CDIR)/bin/charmc $(OPTS) -g
 
 #Headers to be copied to include directory so application users can see them
 HEADERS= ParFUM_TOPS.h  $(INTERNALHEADERS)
@@ -9,7 +9,7 @@ GENHEADERS= ParFUM_TOPS.def.h ParFUM_TOPS.decl.h
 
 HEADDEP= $(GENHEADERS) $(HEADERS) $(INTERNALHEADERS)
 
-OBJS=ParFUM_TOPS.o
+OBJS=ParFUM_TOPS.o ParFUM_TOPS_Iterators.o
 
 LIB=libmoduleParFUM_TOPS
 
@@ -39,6 +39,9 @@ headers: $(HEADDEP)
 ParFUM_TOPS.o: ParFUM_TOPS.C $(HEADDEP) ParFUM_TOPS.h
        $(CHARMC) -c ParFUM_TOPS.C $(INCS)
 
+ParFUM_TOPS_Iterators.o: ParFUM_TOPS_Iterators.C $(HEADDEP) ParFUM_TOPS.h
+       $(CHARMC) -c ParFUM_TOPS_Iterators.C $(INCS)
+
 
 # clean up
 clean:
index 4b9479f8efcb0bdc82a207e77a163adbf0cb735c..8a554e37dd0c6315babf4ff43a24a9a842d8505b 100644 (file)
@@ -17,14 +17,25 @@ mesh_modify.C:  return FEM_purge_element(FEM_Mesh_lookup(mesh,"FEM_remove_elemen
 #include "ParFUM.decl.h"
 
 TopModel* topModel_Create(){
-       int which_mesh=FEM_Mesh_default_read();  // fix this to create a new mesh
-       return FEM_Mesh_lookup(which_mesh,"TopModel::TopModel()");
+  // This only uses a single mesh, so better not create multiple ones of these
+  int which_mesh=FEM_Mesh_default_read();
+  FEM_Mesh_allocate_valid_attr(which_mesh, FEM_NODE);
+  FEM_Mesh_allocate_valid_attr(which_mesh, FEM_ELEM+0);
+  
+  // Allocate an ID attribute for the elements and nodes
+  
+  //   FEM_GLOBALNO
+  
+  return FEM_Mesh_lookup(which_mesh,"TopModel::TopModel()");
 }
 
-TopNode topModel_InsertNode(TopModel*, double x, double y, double z){
-       // TODO : insert a node here
-       TopNode a;
-       return a;
+TopNode topModel_InsertNode(TopModel* m, double x, double y, double z){
+  // TODO : insert a node here
+  int which = FEM_add_node_local_nolock(m);
+  m->node.set_coord(which,x,y,z);
+
+  TopNode a;
+  return a;
 }
 
 
@@ -60,82 +71,7 @@ TopNode topModel_GetNodeAtId(TopModel*,TopID);
 /** Get elem via id */
 TopElement topModel_GetElemAtId(TopModel*,TopID);
 
-/** Get nodal attribute */
-NodeAtt* topNode_GetAttrib(TopModel*, TopNode);
-
-
-/** C-like Iterator for nodes */
-TopNodeItr*  topModel_CreateNodeItr(TopModel* model){
-    TopNodeItr *itr = new TopNodeItr;
-    itr->model = model;
-    return itr;
-}
-
-void topNodeItr_Destroy(TopNodeItr* itr){
-    delete itr;
-}
-
-void topNodeItr_Begin(TopNodeItr* itr){
-    itr->parfum_nodal_index = 0;
-}
-
-bool topNodeItr_IsValid(TopNodeItr*itr){
-     return itr->model->node.is_valid(itr->parfum_nodal_index);
-}
-
-void topNodeItr_next(TopNodeItr* itr){
-
-    if(!topNodeItr_IsValid(itr))
-        return;
-
-    // advance index until we hit a valid index
-    itr->parfum_nodal_index++;
-
-    if(itr->parfum_nodal_index > 0) {// local nodes
-
-        while ((! itr->model->node.is_valid(itr->parfum_nodal_index)) &&
-                  (itr->parfum_nodal_index<itr->model->node.size()))
-        {
-            itr->parfum_nodal_index++;
-        }
-
-        if(itr->model->node.is_valid(itr->parfum_nodal_index)) {
-            return;
-        } else {
-            // cycle to most negative index possible for ghosts
-            itr->parfum_nodal_index = FEM_To_ghost_index(itr->model->node.ghost->size());
-        }
-    }
-
-    // just go through ghost nodes
-    
-    while ( (! itr->model->node.ghost->
-                is_valid(FEM_To_ghost_index(itr->parfum_nodal_index)))
-                &&
-                itr->parfum_nodal_index<0)
-    {
-        itr->parfum_nodal_index++;
-    }
-
-    if(itr->parfum_nodal_index==0){
-        itr->parfum_nodal_index = itr->model->node.size()+1000; // way past the end
-    }
-
-}
-
-TopNode topNodeItr_GetCurr(TopNodeItr*itr){
-    // TODO lookup data associated with this node
-    TopNode a;
-return a;
-}
 
-/** C-like Iterator for elements */
-TopElemItr*  topModel_CreateElemItr(TopModel*);
-void topElemItr_Destroy(TopElemItr*);
-void topElemItr_Begin(TopElemItr*);
-bool topElemItr_IsValid(TopElemItr*);
-void topElemItr_next(TopElemItr*);
-TopElement topElemItr_GetCurr(TopElemItr*);
 
 
-#include "ParFUM_TOPS.def.h"
\ No newline at end of file
+#include "ParFUM_TOPS.def.h"
index 0f7e72c9c0f281ca7bca94bf64488648eb8b4b13..e7b7c086debe9f4319774f8440b835ce7897b1c0 100644 (file)
@@ -50,11 +50,15 @@ class ElemAtt{};
 /** Iterators */
 class TopNodeItr{
 public:
-    int parfum_nodal_index;
+    int parfum_index;
     TopModel *model;
 };
 
-class TopElemItr{};
+class TopElemItr{
+public:
+    int parfum_index;
+    TopModel *model;
+};
 
 /** an opaque id for top entities */
 typedef int TopID;
@@ -100,7 +104,7 @@ TopNodeItr*  topModel_CreateNodeItr(TopModel*);
 void topNodeItr_Destroy(TopNodeItr*);
 void topNodeItr_Begin(TopNodeItr*);
 bool topNodeItr_IsValid(TopNodeItr*);
-void topNodeItr_next(TopNodeItr*);
+void topNodeItr_Next(TopNodeItr*);
 TopNode topNodeItr_GetCurr(TopNodeItr*);
 
 /** C-like Iterator for elements */
@@ -108,7 +112,7 @@ TopElemItr*  topModel_CreateElemItr(TopModel*);
 void topElemItr_Destroy(TopElemItr*);
 void topElemItr_Begin(TopElemItr*);
 bool topElemItr_IsValid(TopElemItr*);
-void topElemItr_next(TopElemItr*);
+void topElemItr_Next(TopElemItr*);
 TopElement topElemItr_GetCurr(TopElemItr*);