00001
00005 #ifndef _CHARM_IDXL_C_H
00006 #define _CHARM_IDXL_C_H
00007
00008 #ifdef __cplusplus
00009 extern "C" {
00010 #endif
00011
00013 void IDXL_Init(int comm);
00014
00016 typedef int IDXL_t;
00017 #define IDXL_DYNAMIC_IDXL_T 1540000000
00018 #define IDXL_STATIC_IDXL_T 1550000000
00019 #define IDXL_LAST_IDXL_T 1560000000
00020
00022 IDXL_t IDXL_Create(void);
00023
00025 void IDXL_Print(IDXL_t l);
00026
00028 void IDXL_Copy(IDXL_t l,IDXL_t src);
00029
00031 void IDXL_Shift(IDXL_t l,int startSend,int startRecv);
00032
00039 void IDXL_Combine(IDXL_t l,IDXL_t src,int startSend,int startRecv);
00040
00043 void IDXL_Add_entity(IDXL_t l, int newIdx, int nBetween,int *between);
00044
00046 void IDXL_Sort_2d(IDXL_t l,double *coord2d);
00048 void IDXL_Sort_3d(IDXL_t l,double *coord3d);
00049
00051 void IDXL_Destroy(IDXL_t l);
00052
00053
00056 typedef int IDXL_Side_t;
00057 #define IDXL_SHIFT_SIDE_T_SEND 100000000
00058 #define IDXL_SHIFT_SIDE_T_RECV 200000000
00059 IDXL_Side_t IDXL_Get_send(IDXL_t l);
00060 IDXL_Side_t IDXL_Get_recv(IDXL_t l);
00061 int IDXL_Get_partners(IDXL_Side_t s);
00062 int IDXL_Get_partner(IDXL_Side_t s,int partnerNo);
00063 int IDXL_Get_count(IDXL_Side_t s,int partnerNo);
00064 void IDXL_Get_list(IDXL_Side_t s,int partnerNo,int *list);
00065 int IDXL_Get_index(IDXL_Side_t s,int partnerNo,int listIndex);
00066 void IDXL_Get_end(IDXL_Side_t l);
00067
00069 int IDXL_Get_source(IDXL_t l,int localNo);
00070
00071
00072
00073
00074
00075 #define IDXL_FIRST_DATATYPE 1510000000
00076 #define IDXL_BYTE (IDXL_FIRST_DATATYPE+0)
00077 #define IDXL_INT (IDXL_FIRST_DATATYPE+1)
00078 #define IDXL_REAL (IDXL_FIRST_DATATYPE+2)
00079 #define IDXL_FLOAT IDXL_REAL
00080 #define IDXL_DOUBLE (IDXL_FIRST_DATATYPE+3)
00081 #define IDXL_INDEX_0 (IDXL_FIRST_DATATYPE+4)
00082 #define IDXL_INDEX_1 (IDXL_FIRST_DATATYPE+5)
00083 #define IDXL_LONG_DOUBLE (IDXL_FIRST_DATATYPE+6)
00084
00086 typedef int IDXL_Layout_t;
00087 #define IDXL_FIRST_IDXL_LAYOUT_T 1560000000
00088
00089 IDXL_Layout_t IDXL_Layout_create(int type,int width);
00090 IDXL_Layout_t IDXL_Layout_offset(
00091 int type, int width, int offsetBytes, int distanceBytes,int skewBytes);
00092
00093 int IDXL_Get_layout_type(IDXL_Layout_t l);
00094 int IDXL_Get_layout_width(IDXL_Layout_t l);
00095 int IDXL_Get_layout_distance(IDXL_Layout_t l);
00096
00097 void IDXL_Layout_destroy(IDXL_Layout_t l);
00098
00100 typedef int IDXL_Comm_t;
00101
00108 IDXL_Comm_t IDXL_Comm_begin(int tag, int context);
00109
00111 void IDXL_Comm_sendrecv(IDXL_Comm_t m,IDXL_t dest, IDXL_Layout_t l, void *data);
00113 void IDXL_Comm_sendsum(IDXL_Comm_t m,IDXL_t dest, IDXL_Layout_t l, void *data);
00114
00116 void IDXL_Comm_send(IDXL_Comm_t m,IDXL_t dest, IDXL_Layout_t l, const void *srcData);
00118 void IDXL_Comm_recv(IDXL_Comm_t m,IDXL_t dest, IDXL_Layout_t l, void *destData);
00120 void IDXL_Comm_sum(IDXL_Comm_t m,IDXL_t dest, IDXL_Layout_t l, void *sumData);
00121
00123 void IDXL_Comm_flush(IDXL_Comm_t m);
00124
00126 void IDXL_Comm_wait(IDXL_Comm_t m);
00127
00128
00129
00130 #define IDXL_FIRST_REDTYPE 1520000000
00131 #define IDXL_SUM (IDXL_FIRST_REDTYPE+0)
00132 #define IDXL_PROD (IDXL_FIRST_REDTYPE+1)
00133 #define IDXL_MAX (IDXL_FIRST_REDTYPE+2)
00134 #define IDXL_MIN (IDXL_FIRST_REDTYPE+3)
00135
00136
00137 #ifdef __cplusplus
00138 }
00139 #endif
00140
00141 #endif