158a3dcef6a48517d736819496e6263f75e2dbdd
[charm.git] / src / libs / ck-libs / ParFUM-Tops / ParFUM_TOPS.C
1 /**
2 *       A ParFUM TOPS compatibility layer
3 *
4 *      Author: Isaac Dooley
5
6
7
8 Assumptions: 
9
10 TopNode is just the index into the nodes
11 TopElem is just the signed index into the elements negatives are ghosts
12
13
14
15
16
17 Notes:
18
19
20 mesh_modify.C:  FEM_Mesh *m=FEM_Mesh_lookup(mesh,"FEM_Print_Mesh_Summary");
21 mesh_modify.C:  return FEM_add_node(FEM_Mesh_lookup(mesh,"FEM_add_node"), adjacent_nodes, num_adjacent_nodes, chunks, numChunks, forceShared);
22 mesh_modify.C:  return FEM_remove_node(FEM_Mesh_lookup(mesh,"FEM_remove_node"), node);
23 mesh_modify.C:  return FEM_add_element(FEM_Mesh_lookup(mesh,"FEM_add_element"), conn, conn_size, elem_type, chunkNo);
24 mesh_modify.C:  return FEM_remove_element(FEM_Mesh_lookup(mesh,"FEM_remove_element"), element, elem_type, permanent);
25 mesh_modify.C:  return FEM_purge_element(FEM_Mesh_lookup(mesh,"FEM_remove_element"), element, elem_type);
26
27 */
28
29
30 #include "ParFUM_TOPS.h"
31 #include "ParFUM.decl.h"
32
33 TopModel* topModel_Create(){
34   // This only uses a single mesh, so better not create multiple ones of these
35   int which_mesh=FEM_Mesh_default_read();
36   FEM_Mesh_allocate_valid_attr(which_mesh, FEM_NODE);
37   FEM_Mesh_allocate_valid_attr(which_mesh, FEM_ELEM+0);
38   FEM_Mesh_allocate_valid_attr(which_mesh, FEM_ELEM+1);
39   FEM_Mesh *mesh = FEM_Mesh_lookup(which_mesh,"TopModel::TopModel()");
40
41   // Don't Allocate the Global Number attribute for the elements and nodes  
42   // It will be automatically created upon calls to void FEM_Entity::setGlobalno(int r,int g) {
43
44   return mesh;
45 }
46
47 TopNode topModel_InsertNode(TopModel* m, double x, double y, double z){
48   int newNode = FEM_add_node_local(m,false,false,false);
49   m->node.set_coord(newNode,x,y,z);
50   return newNode;
51 }
52
53
54 /** Set id of a node */
55 void topNode_SetId(TopModel* m, TopNode n, TopID id){
56         // just set the nodal id attribute to id
57   m->node.setGlobalno(n,id);
58 }
59
60 /** Set attribute of a node */
61 void topNode_SetAttrib(TopModel*, TopNode, NodeAtt*){
62
63 }
64
65 /** Insert an element */
66 TopElement topModel_InsertElem(TopModel*m, TopElemType type, TopNode* nodes){
67   assert(type == FEM_TRIANGULAR);
68   int conn[3];
69   conn[0] = nodes[0];
70   conn[1] = nodes[1];
71   conn[2] = nodes[2];
72   int newEl = FEM_add_element_local(m, conn, 3, 0, 0, 0);
73   return newEl;
74 }
75
76 /** Set id of an element */
77 void topElement_SetId(TopModel* m, TopElement e, TopID id){
78   m->elem[0].setGlobalno(e,id);
79 }
80
81 /** Set attribute of an element */
82 void topElement_SetAttrib(TopModel*, TopElement, ElemAtt*){
83
84 }
85
86 /** Get node via id */
87 TopNode topModel_GetNodeAtId(TopModel*,TopID);
88
89 /** Get elem via id */
90 TopElement topModel_GetElemAtId(TopModel*,TopID);
91
92
93
94
95 #include "ParFUM_TOPS.def.h"