Added dereferencing of iterators.
authorIsaac Dooley <idooley2@illinois.edu>
Mon, 19 Feb 2007 18:02:24 +0000 (18:02 +0000)
committerIsaac Dooley <idooley2@illinois.edu>
Mon, 19 Feb 2007 18:02:24 +0000 (18:02 +0000)
src/libs/ck-libs/ParFUM-Tops/ParFUM_TOPS.C
src/libs/ck-libs/ParFUM-Tops/ParFUM_TOPS.h

index 158a3dcef6a48517d736819496e6263f75e2dbdd..968579f06d6576da0275400d4d950c27616eb97d 100644 (file)
@@ -11,36 +11,51 @@ TopNode is just the index into the nodes
 TopElem is just the signed index into the elements negatives are ghosts
 
 
 TopElem is just the signed index into the elements negatives are ghosts
 
 
-
-
-
-Notes:
-
-
-mesh_modify.C:  FEM_Mesh *m=FEM_Mesh_lookup(mesh,"FEM_Print_Mesh_Summary");
-mesh_modify.C:  return FEM_add_node(FEM_Mesh_lookup(mesh,"FEM_add_node"), adjacent_nodes, num_adjacent_nodes, chunks, numChunks, forceShared);
-mesh_modify.C:  return FEM_remove_node(FEM_Mesh_lookup(mesh,"FEM_remove_node"), node);
-mesh_modify.C:  return FEM_add_element(FEM_Mesh_lookup(mesh,"FEM_add_element"), conn, conn_size, elem_type, chunkNo);
-mesh_modify.C:  return FEM_remove_element(FEM_Mesh_lookup(mesh,"FEM_remove_element"), element, elem_type, permanent);
-mesh_modify.C:  return FEM_purge_element(FEM_Mesh_lookup(mesh,"FEM_remove_element"), element, elem_type);
-
 */
 
 
 #include "ParFUM_TOPS.h"
 #include "ParFUM.decl.h"
 
 */
 
 
 #include "ParFUM_TOPS.h"
 #include "ParFUM.decl.h"
 
-TopModel* topModel_Create(){
+int elem_attr_size, node_attr_size;
+
+TopModel* topModel_Create_Init(int elem_attr_sz, int node_attr_sz){
+
+  elem_attr_size = elem_attr_sz;
+  node_attr_size = node_attr_sz;
+
   // This only uses a single mesh, so better not create multiple ones of these
   // 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);
-  FEM_Mesh_allocate_valid_attr(which_mesh, FEM_ELEM+1);
+  int which_mesh=FEM_Mesh_default_write();
   FEM_Mesh *mesh = FEM_Mesh_lookup(which_mesh,"TopModel::TopModel()");
 
   FEM_Mesh *mesh = FEM_Mesh_lookup(which_mesh,"TopModel::TopModel()");
 
+  char* temp_array = new char[16]; // just some junk array to use below
+  
+  // Allocate element connectivity
+  FEM_Mesh_data(which_mesh,FEM_ELEM+0,FEM_CONN,temp_array, 0, 0, FEM_INDEX_0, 3);
+  // Allocate node coords
+  FEM_Mesh_data(which_mesh,FEM_NODE,FEM_COORD,temp_array, 0, 0, FEM_DOUBLE, 3);
+  // Allocate element attributes
+  FEM_Mesh_data(which_mesh,FEM_ELEM+0,FEM_DATA+0,temp_array, 0, 0, FEM_BYTE, elem_attr_size);
+  // Allocate node attributes
+  FEM_Mesh_data(which_mesh,FEM_NODE+0,FEM_DATA+0,temp_array, 0, 0, FEM_BYTE, node_attr_size);
+
+  delete[] temp_array;
+
   // Don't Allocate the Global Number attribute for the elements and nodes  
   // It will be automatically created upon calls to void FEM_Entity::setGlobalno(int r,int g) {
   // Don't Allocate the Global Number attribute for the elements and nodes  
   // It will be automatically created upon calls to void FEM_Entity::setGlobalno(int r,int g) {
+  
+  FEM_Mesh_allocate_valid_attr(which_mesh, FEM_NODE);
+  FEM_Mesh_allocate_valid_attr(which_mesh, FEM_ELEM+0);
+  
+  return mesh;
+}
 
 
+TopModel* topModel_Create_Driver(int elem_attr_sz, int node_attr_sz){
+  // This only uses a single mesh, so better not create multiple ones of these
+  elem_attr_size = elem_attr_sz;
+  node_attr_size = node_attr_sz;
+  int which_mesh=FEM_Mesh_default_read();
+  FEM_Mesh *mesh = FEM_Mesh_lookup(which_mesh,"TopModel::TopModel()");
   return mesh;
 }
 
   return mesh;
 }
 
@@ -58,11 +73,15 @@ void topNode_SetId(TopModel* m, TopNode n, TopID id){
 }
 
 /** Set attribute of a node */
 }
 
 /** Set attribute of a node */
-void topNode_SetAttrib(TopModel*, TopNode, NodeAtt*){
-
+void topNode_SetAttrib(TopModel* m, TopNode n, NodeAtt* d){
+  FEM_DataAttribute * at = (FEM_DataAttribute*) m->node.lookup(FEM_DATA+0,"topNode_SetAttrib");
+  AllocTable2d<unsigned char> &dataTable  = at->getChar();
+  unsigned char *data = dataTable.getData();
+  memcpy(data + n*node_attr_size, d, node_attr_size);
 }
 
 }
 
-/** Insert an element */
+
+ /** Insert an element */
 TopElement topModel_InsertElem(TopModel*m, TopElemType type, TopNode* nodes){
   assert(type == FEM_TRIANGULAR);
   int conn[3];
 TopElement topModel_InsertElem(TopModel*m, TopElemType type, TopNode* nodes){
   assert(type == FEM_TRIANGULAR);
   int conn[3];
@@ -79,15 +98,43 @@ void topElement_SetId(TopModel* m, TopElement e, TopID id){
 }
 
 /** Set attribute of an element */
 }
 
 /** Set attribute of an element */
-void topElement_SetAttrib(TopModel*, TopElement, ElemAtt*){
+void topElement_SetAttrib(TopModel* m, TopElement e, ElemAtt* d){
+  FEM_DataAttribute * at = (FEM_DataAttribute*) m->elem[0].lookup(FEM_DATA+0,"topElem_SetAttrib");
+  AllocTable2d<unsigned char> &dataTable  = at->getChar();
+  unsigned char *data = dataTable.getData();
+  memcpy(data + e*elem_attr_size, d, elem_attr_size);
+}
 
 
+
+/** Get elem attribute */
+ElemAtt* topElem_GetAttrib(TopModel* m, TopElement e){
+  FEM_DataAttribute * at = (FEM_DataAttribute*) m->elem[0].lookup(FEM_DATA+0,"topElem_GetAttrib");
+  AllocTable2d<unsigned char> &dataTable  = at->getChar();
+  unsigned char *data = dataTable.getData();
+  return (ElemAtt*)(data + e*elem_attr_size);
+}
+
+// /** Get nodal attribute */
+NodeAtt* topNode_GetAttrib(TopModel* m, TopNode n){
+  FEM_DataAttribute * at = (FEM_DataAttribute*) m->node.lookup(FEM_DATA+0,"topNode_GetAttrib");
+  AllocTable2d<unsigned char> &dataTable  = at->getChar();
+  unsigned char *data = dataTable.getData();
+  return (NodeAtt*)(data + n*node_attr_size);
 }
 
 }
 
+
+
 /** Get node via id */
 /** Get node via id */
-TopNode topModel_GetNodeAtId(TopModel*,TopID);
+TopNode topModel_GetNodeAtId(TopModel*,TopID){
+  // lookup node via global ID
+  assert(0);
+}
 
 /** Get elem via id */
 
 /** Get elem via id */
-TopElement topModel_GetElemAtId(TopModel*,TopID);
+TopElement topModel_GetElemAtId(TopModel*,TopID){
+  assert(0);
+}
+
 
 
 
 
 
 
index e7b7c086debe9f4319774f8440b835ce7897b1c0..fa704ee6706f3836f9f01eccc06b16577218e320 100644 (file)
@@ -44,8 +44,9 @@ typedef FEM_Mesh TopModel;
 
 typedef unsigned TopNode;
 typedef unsigned TopElement;
 
 typedef unsigned TopNode;
 typedef unsigned TopElement;
-class NodeAtt{};
-class ElemAtt{};
+
+class NodeAtt;
+class ElemAtt;
 
 /** Iterators */
 class TopNodeItr{
 
 /** Iterators */
 class TopNodeItr{
@@ -67,10 +68,14 @@ typedef int TopID;
 typedef int TopElemType;
 
 
 typedef int TopElemType;
 
 
-/** TOPS functions we need to support */
+/** 
+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);
 
 
-/** Create a new model(essentially a mesh) */
-TopModel* topModel_Create();
+/** Create and access a Tops model. Only call from Driver */
+TopModel* topModel_Create_Driver(int elem_attr_sz, int node_attr_sz);
 
 /** Insert a node */
 TopNode topModel_InsertNode(TopModel*, double x, double y, double z);
 
 /** Insert a node */
 TopNode topModel_InsertNode(TopModel*, double x, double y, double z);