Added dereferencing of iterators.
[charm.git] / src / libs / ck-libs / ParFUM-Tops / ParFUM_TOPS.h
1 /**
2 *       A ParFUM TOPS compatibility layer
3 *
4 *      Author: Isaac Dooley
5
6
7
8 LB & PUPing
9
10
11 Sample usage:
12
13     // Reads nodes (id, x, y, z)
14     for (i = 0; i < nn; i++)
15     {
16         double x, y, z;
17         TopNode node;
18         NodeAtt*  node_data;
19         if (fscanf(fp,"%d, %lf, %lf, %lf",&id, &x, &y, &z) != 4) {
20             fprintf(stderr,"Invalid format for nodes.\n");
21             exit(1);
22             }
23         // Adds node to the model
24         node = topModel_InsertNode (model, x, y, z);
25         topNode_SetId (model, node, id);
26         node_data = (NodeAtt*) malloc(sizeof(NodeAtt));
27         assert(node_data);
28         initNodeAtt(node_data);
29         node_data->material.E = material.E;
30         node_data->material.v = material.v;
31         node_data->material.p = material.p;
32         node_data->bc = 0;
33         topNode_SetAttrib (model, node, node_data);
34
35
36 */
37
38
39 #include <ParFUM.h>
40 #include <ParFUM_internals.h>
41
42
43 typedef FEM_Mesh TopModel;
44
45 typedef unsigned TopNode;
46 typedef unsigned TopElement;
47
48 class NodeAtt;
49 class ElemAtt;
50
51 /** Iterators */
52 class TopNodeItr{
53 public:
54     int parfum_index;
55     TopModel *model;
56 };
57
58 class TopElemItr{
59 public:
60     int parfum_index;
61     TopModel *model;
62 };
63
64 /** an opaque id for top entities */
65 typedef int TopID;
66
67 /** an enumeration of supported element types */
68 typedef int TopElemType;
69
70
71 /** 
72 Create and access a Tops model. Only call from Init 
73 Currently only one model can be created. To extend, each model must just reference a different FEM_Mesh object
74 */
75 TopModel* topModel_Create_Init(int elem_attr_sz, int node_attr_sz);
76
77 /** Create and access a Tops model. Only call from Driver */
78 TopModel* topModel_Create_Driver(int elem_attr_sz, int node_attr_sz);
79
80 /** Insert a node */
81 TopNode topModel_InsertNode(TopModel*, double x, double y, double z);
82
83 /** Set id of a node */
84 void topNode_SetId(TopModel*, TopNode, TopID id);
85
86 /** Set attribute of a node */
87 void topNode_SetAttrib(TopModel*, TopNode, NodeAtt*);
88
89 /** Insert an element */
90 TopElement topModel_InsertElem(TopModel*, TopElemType, TopNode*);
91
92 /** Set id of an element */
93 void topElement_SetId(TopModel*, TopElement, TopID id);
94
95 /** Set attribute of an element */
96 void topElement_SetAttrib(TopModel*, TopElement, ElemAtt*);
97
98 /** Get node via id */
99 TopNode topModel_GetNodeAtId(TopModel*,TopID);
100
101 /** Get elem via id */
102 TopElement topModel_GetElemAtId(TopModel*,TopID);
103
104 /** Get nodal attribute */
105 NodeAtt* topNode_GetAttrib(TopModel*, TopNode);
106
107 /** C-like Iterator for nodes */
108 TopNodeItr*  topModel_CreateNodeItr(TopModel*);
109 void topNodeItr_Destroy(TopNodeItr*);
110 void topNodeItr_Begin(TopNodeItr*);
111 bool topNodeItr_IsValid(TopNodeItr*);
112 void topNodeItr_Next(TopNodeItr*);
113 TopNode topNodeItr_GetCurr(TopNodeItr*);
114
115 /** C-like Iterator for elements */
116 TopElemItr*  topModel_CreateElemItr(TopModel*);
117 void topElemItr_Destroy(TopElemItr*);
118 void topElemItr_Begin(TopElemItr*);
119 bool topElemItr_IsValid(TopElemItr*);
120 void topElemItr_Next(TopElemItr*);
121 TopElement topElemItr_GetCurr(TopElemItr*);
122
123
124