e7b7c086debe9f4319774f8440b835ce7897b1c0
[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 class NodeAtt{};
48 class ElemAtt{};
49
50 /** Iterators */
51 class TopNodeItr{
52 public:
53     int parfum_index;
54     TopModel *model;
55 };
56
57 class TopElemItr{
58 public:
59     int parfum_index;
60     TopModel *model;
61 };
62
63 /** an opaque id for top entities */
64 typedef int TopID;
65
66 /** an enumeration of supported element types */
67 typedef int TopElemType;
68
69
70 /** TOPS functions we need to support */
71
72 /** Create a new model(essentially a mesh) */
73 TopModel* topModel_Create();
74
75 /** Insert a node */
76 TopNode topModel_InsertNode(TopModel*, double x, double y, double z);
77
78 /** Set id of a node */
79 void topNode_SetId(TopModel*, TopNode, TopID id);
80
81 /** Set attribute of a node */
82 void topNode_SetAttrib(TopModel*, TopNode, NodeAtt*);
83
84 /** Insert an element */
85 TopElement topModel_InsertElem(TopModel*, TopElemType, TopNode*);
86
87 /** Set id of an element */
88 void topElement_SetId(TopModel*, TopElement, TopID id);
89
90 /** Set attribute of an element */
91 void topElement_SetAttrib(TopModel*, TopElement, ElemAtt*);
92
93 /** Get node via id */
94 TopNode topModel_GetNodeAtId(TopModel*,TopID);
95
96 /** Get elem via id */
97 TopElement topModel_GetElemAtId(TopModel*,TopID);
98
99 /** Get nodal attribute */
100 NodeAtt* topNode_GetAttrib(TopModel*, TopNode);
101
102 /** C-like Iterator for nodes */
103 TopNodeItr*  topModel_CreateNodeItr(TopModel*);
104 void topNodeItr_Destroy(TopNodeItr*);
105 void topNodeItr_Begin(TopNodeItr*);
106 bool topNodeItr_IsValid(TopNodeItr*);
107 void topNodeItr_Next(TopNodeItr*);
108 TopNode topNodeItr_GetCurr(TopNodeItr*);
109
110 /** C-like Iterator for elements */
111 TopElemItr*  topModel_CreateElemItr(TopModel*);
112 void topElemItr_Destroy(TopElemItr*);
113 void topElemItr_Begin(TopElemItr*);
114 bool topElemItr_IsValid(TopElemItr*);
115 void topElemItr_Next(TopElemItr*);
116 TopElement topElemItr_GetCurr(TopElemItr*);
117
118
119