00001
00014 #ifndef __PARFUM_TOPS___H
00015 #define __PARFUM_TOPS___H
00016
00017 #include <ParFUM.h>
00018 #include <ParFUM_internals.h>
00019
00020
00021 #include "ParFUM_TOPS_Types.h"
00022 #include "ParFUM_TOPS_CUDA.h"
00023
00024
00026 typedef struct{
00027 FEM_Mesh *mesh;
00028 void *mAtt;
00029 AllocTable2d<unsigned char> *ElemData_T;
00030 AllocTable2d<unsigned char> *GhostElemData_T;
00031 AllocTable2d<unsigned char> *NodeData_T;
00032 AllocTable2d<unsigned char> *GhostNodeData_T;
00033 AllocTable2d<int> *ElemConn_T;
00034 AllocTable2d<FP_TYPE_LOW> *coord_T;
00035 AllocTable2d<int> *node_id_T;
00036 AllocTable2d<int> *elem_id_T;
00037 AllocTable2d<int> *n2eConn_T;
00038
00039
00040 CkHashtableT<CkHashtableAdaptorT<int>, int>* nodeIDHash;
00041 CkHashtableT<CkHashtableAdaptorT<int>, int>* elemIDHash;
00042
00043 unsigned node_attr_size;
00044 unsigned elem_attr_size;
00045 unsigned model_attr_size;
00046
00048 unsigned num_local_elem;
00050 unsigned num_local_node;
00051
00052 #ifdef CUDA
00053 TopModelDevice device_model;
00054 #endif
00055
00056 } TopModel;
00057
00058
00059
00060
00062 class TopNodeItr{
00063 public:
00065 int parfum_index;
00067 TopModel *model;
00068 };
00069
00071 class TopElemItr{
00072 public:
00073 int parfum_index;
00074 TopModel *model;
00075 };
00076
00078 class TopNodeElemItr{
00079 public:
00081 int current_index;
00083 int numAdjElem;
00084
00085 TopModel *model;
00086
00088 long node;
00089 };
00090
00091
00101 class TopFacetItr{
00102 public:
00103 TopModel *model;
00104 TopElemItr *elemItr;
00105 int whichFacet;
00106 };
00107
00108
00113 int tops_lib_FP_Type_Size();
00114
00115
00120 TopModel* topModel_Create_Init(int _nelnode);
00121
00123 TopModel* topModel_Create_Driver(int elem_attr_sz, int node_attr_sz, int model_attr_sz, void* mAtt);
00124
00126 void topModel_Destroy(TopModel* m);
00127
00129 TopNode topModel_InsertNode(TopModel*, float x, float y, float z);
00130 TopNode topModel_InsertNode(TopModel*, double x, double y, double z);
00131
00132 void topModel_SuggestInitialSize(TopModel* m, unsigned numNodes, unsigned numElements);
00133
00134
00136 void topNode_SetId(TopModel*, TopNode, TopID id);
00137
00139 void topNode_SetAttrib(TopModel*, TopNode, void*);
00140
00142 TopElement topModel_InsertElem(TopModel*, TopElemType, TopNode*);
00143
00145 void topElement_SetId(TopModel*, TopElement, TopID id);
00146
00148 int topElement_GetId (TopModel* m, TopElement e);
00149
00151 void topElement_SetAttrib(TopModel*, TopElement, void*);
00152
00154 TopNode topModel_GetNodeAtId(TopModel*,TopID);
00155
00157 void* topNode_GetAttrib(TopModel*, TopNode);
00158
00160 void* topElement_GetAttrib(TopModel*, TopElement);
00161
00163 TopNode topElement_GetNode(TopModel*,TopElement,int idx);
00164
00166 TopElement topModel_GetElemAtId(TopModel*,TopID);
00167
00168 int topNode_GetId(TopModel* m, TopNode n);
00169
00170 int topModel_GetNNodes(TopModel *model);
00171
00172 int topElement_GetNNodes(TopModel* model, TopElement elem);
00173 bool topElement_IsCohesive(TopModel* m, TopElement e);
00174
00175 void topNode_GetPosition(TopModel*model, TopNode node,float*x,float*y,float*z);
00176 void topNode_GetPosition(TopModel*model, TopNode node,double*x,double*y,double*z);
00177
00179 TopNodeItr* topModel_CreateNodeItr(TopModel*);
00180
00182 void topNodeItr_Destroy(TopNodeItr*);
00183
00185 void topNodeItr_Begin(TopNodeItr*);
00186
00188 bool topNodeItr_IsValid(TopNodeItr*);
00189
00191 void topNodeItr_Next(TopNodeItr*);
00192
00194 TopNode topNodeItr_GetCurr(TopNodeItr*);
00195
00196
00198 TopElemItr* topModel_CreateElemItr(TopModel*);
00199
00201 void topElemItr_Destroy(TopElemItr*);
00202
00204 void topElemItr_Begin(TopElemItr*);
00205
00207 bool topElemItr_IsValid(TopElemItr*);
00208
00210 void topElemItr_Next(TopElemItr*);
00211
00213 TopElement topElemItr_GetCurr(TopElemItr*);
00214
00216 void topModel_TestIterators(TopModel*m);
00217
00218
00219 void top_retrieve_elem_data(TopModel* m);
00220 void top_retrieve_node_data(TopModel* m);
00221 void top_put_node_data(TopModel* m);
00222
00223
00224
00225
00226
00227 TopNodeElemItr* topModel_CreateNodeElemItr (TopModel* m, TopNode n);
00228 bool topNodeElemItr_IsValid (TopNodeElemItr* neitr);
00229 void topNodeElemItr_Next (TopNodeElemItr* neitr);
00230 TopElement topNodeElemItr_GetCurr (TopNodeElemItr* neitr);
00231 void topNodeElemItr_Destroy (TopNodeElemItr* neitr);
00232
00233
00234 int topFacet_GetNNodes (TopModel* m, TopFacet f);
00235 TopNode topFacet_GetNode (TopModel* m, TopFacet f, int i);
00236 TopElement topFacet_GetElem (TopModel* m, TopFacet f, int i);
00237
00238 bool topElement_IsValid(TopModel* m, TopElement e);
00239
00240 bool topVertex_IsBoundary (TopModel* m, TopVertex v);
00241
00242 TopVertex topNode_GetVertex (TopModel* m, TopNode n);
00243
00244
00245
00246 TopFacetItr* topModel_CreateFacetItr (TopModel* m);
00247 void topFacetItr_Begin(TopFacetItr* itr);
00248 bool topFacetItr_IsValid(TopFacetItr* itr);
00249 void topFacetItr_Next(TopFacetItr* itr);
00250 TopFacet topFacetItr_GetCurr (TopFacetItr* itr);
00251 void topFacetItr_Destroy (TopFacetItr* itr);
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262 void topModel_InsertCohesiveAtFacet (TopModel* m, int ElemType, TopFacet f);
00263
00264
00265 #endif