00001 00008 #ifndef _UIUC_CHARM_FEMREFINE_IMPL_H 00009 #define _UIUC_CHARM_FEMREFINE_IMPL_H 00010 00011 typedef void (*repeat_split_fn)(void *data); 00012 00013 #ifdef __cplusplus 00014 extern "C" { 00015 #endif 00016 00017 /*** 00018 * Create a new refinement object for this virtual processor. 00019 * Must be called exactly once at startup. 00020 */ 00021 00022 void FEM_REFINE2D_Init(); 00023 00024 00025 /* 00026 * Use this call to set up the refinement framework for 00027 * a new mesh. This must be called before the split call. 00028 meshID - mesh to refine 00029 nodeID - FEM_NODE +t .. which type of nodes to refine 00030 elemID - FEM_ELEM +t .. which type of element to refine 00031 */ 00032 00033 void FEM_REFINE2D_Newmesh(int meshID,int nodeID,int elemID); 00034 00035 /* This function refines a mesh, to the desired degree and updates the FEM mesh. 00036 Arguments 00037 meshID - which mesh 00038 nodeID - FEM_NODE+t .. which type of nodes 00039 coord - the cordinate of each node in an array of doubles 00040 node i has its x,y cordinates in coord[2*i] and coord[2*i+1] 00041 elemID - FEM_ELEM+t .. type of element 00042 desiredAreas - desiredArea[i] gives the desired area of element i. 00043 */ 00044 00045 void FEM_REFINE2D_Split(int meshID,int nodeID,double *coord,int elemID,double *desiredAreas,int sparseID=-1); 00046 00047 00048 #ifdef __cplusplus 00049 }; 00050 #endif 00051 00052 00053 #endif