1 /*********************** "private" include file for DRA *****************/ 2 #if HAVE_STRING_H 3 # include <string.h> 4 #endif 5 6 #include "gacommon.h" 7 #include "draf2c.h" 8 #include "elio.h" 9 #include "macdecls.h" 10 11 #define MAXDIM GA_MAX_DIM 12 13 #ifdef FALSE 14 #undef FALSE 15 #endif 16 #ifdef TRUE 17 #undef TRUE 18 #endif 19 #define FALSE (logical) 0 20 #define TRUE (logical) 1 21 22 /************************* common constants **********************************/ 23 #define DRA_OFFSET 5000 /**< DRA handle offset */ 24 #define DRA_BRD_TYPE 30000 /**< msg type for DRA broadcast */ 25 #define DRA_GOP_TYPE 30001 /**< msg type for DRA sum */ 26 #define DRA_MAX_NAME 72 /**< max length of array name */ 27 #define DRA_MAX_FNAME 248 /**< max length of metafile name */ 28 29 /************************* common data structures **************************/ 30 typedef struct { /**< stores basic DRA info */ 31 Integer ndim; /**< dimension of array */ 32 Integer dims[MAXDIM]; /**< array dimensions */ 33 Integer chunk[MAXDIM]; /**< data layout chunking */ 34 Integer layout; /**< date layout type */ 35 int type; /**< data type */ 36 int mode; /**< file/array access permissions */ 37 char name[DRA_MAX_NAME+8]; /**< array name */ 38 char fname[DRA_MAX_FNAME+8]; /**< metafile name */ 39 Integer actv; /**< is array active ? */ 40 Integer indep; /**< shared/independent files ? */ 41 Fd_t fd; /**< ELIO meta-file descriptor */ 42 Integer numfiles; /**< # files on open file system */ 43 Integer ioprocs; /**< number of IO procs per node */ 44 } disk_array_t; 45 46 #define MAX_ALGN 1 /**< max # aligned subsections */ 47 #define MAX_UNLG (2*(MAXDIM-1)) /**< max # unaligned subsections */ 48 49 typedef struct { /**< object describing DRA/GA section */ 50 Integer handle; 51 Integer ndim; 52 Integer lo[MAXDIM]; 53 Integer hi[MAXDIM]; 54 } section_t; 55 56 57 typedef struct { /**< structure stores arguments for callback f */ 58 int op; 59 int transp; 60 Integer ld[MAXDIM]; 61 section_t gs_a; 62 section_t ds_a; 63 section_t ds_chunk; 64 } args_t; 65 66 67 typedef struct { /**< stores info associated with DRA request */ 68 Integer d_a; /**< disk array handle */ 69 int num_pending; /**< number of pending asynch. I/O ops */ 70 Integer list_algn[MAX_ALGN][2*MAXDIM]; /**< coordinates of aligned subsection */ 71 Integer list_unlgn[MAX_UNLG][2*MAXDIM]; /**< coordinates of unaligned subsections*/ 72 Integer list_cover[MAX_UNLG][2*MAXDIM]; /**< coordinates of "cover" subsections */ 73 int nu; 74 int na; 75 int call_id; /**< id of this request */ 76 } request_t; 77 78 typedef struct { 79 char *buf; 80 int op; 81 io_request_t io_req; 82 Integer ga_movhdl; 83 args_t args; 84 int align; 85 int callback; 86 } buf_info; 87 88 extern disk_array_t *DRA; 89 extern logical dra_debug_flag; 90 91 /**************************** common macros ********************************/ 92 #define PARIO_MAX(a,b) (((a) >= (b)) ? (a) : (b)) 93 #define PARIO_MIN(a,b) (((a) <= (b)) ? (a) : (b)) 94 95 #define dai_error pnga_error 96 97 extern int dai_read_param(char* filename, Integer d_a); 98 extern void dai_write_param(char* filename, Integer d_a); 99 extern void dai_delete_param(char* filename, Integer d_a); 100 extern int dai_file_config(char* filename); 101 extern logical dai_section_intersect(section_t sref, section_t* sadj); 102 extern int drai_get_num_serv(void); 103 104 /* internal fortran calls */ 105 extern Integer drai_create(Integer *type, Integer *dim1, Integer *dim2, 106 char *name, char *filename, Integer *mode, 107 Integer *reqdim1, Integer *reqdim2, Integer *d_a); 108 109 extern Integer ndrai_create(Integer *type, Integer *ndim, Integer dims[], 110 char *name, char *filename, Integer *mode, 111 Integer reqdims[], Integer *d_a); 112 113 extern Integer drai_open(char *filename, Integer *mode, Integer *d_a); 114 115 extern Integer drai_inquire(Integer *d_a, Integer *type, Integer *dim1, 116 Integer *dim2, char *name, char *filename); 117 118 extern Integer ndrai_inquire(Integer *d_a, Integer *type, Integer *ndim, 119 Integer dims[],char *name,char *filename); 120 121 extern Integer ndrai_create_config(Integer *type, Integer *ndim, Integer dims[], 122 char *name, char *filename, Integer *mode, 123 Integer reqdims[], Integer *numfiles, 124 Integer *numioprocs, Integer *d_a); 125 126 /* external fortran calls */ 127 #ifdef F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS 128 extern Integer FATR dra_create_(Integer *type, Integer *dim1, Integer *dim2, 129 char *name, char *filename, Integer *mode, Integer *reqdim1, 130 Integer *reqdim2, Integer *d_a, int nlen, int flen); 131 extern Integer FATR ndra_create_(Integer *type, Integer *ndim, Integer dims[], 132 char *name, char *filename, Integer *mode, Integer reqdims[], 133 Integer *d_a, int nlen, int flen); 134 extern Integer FATR dra_open_(char *filename, Integer *mode, Integer *d_a, 135 int flen); 136 extern Integer FATR dra_inquire_(Integer *d_a, Integer *type, Integer *dim1, 137 Integer *dim2, char *name, char *filename, int nlen, int flen); 138 extern Integer FATR ndra_inquire_(Integer *d_a, Integer *type, Integer *ndim, 139 Integer dims[], char *name, char *filename, int nlen, int flen); 140 extern Integer ndra_create_config_(Integer *type, Integer *ndim, 141 Integer dims[], char *name, char *filename, Integer *mode, 142 Integer reqdims[], Integer *numfiles, Integer *numioprocs, 143 Integer *d_a, int nlen, int flen); 144 #else /* F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS */ 145 extern Integer FATR dra_create_(Integer *type, Integer *dim1, Integer *dim2, 146 char *name, int nlen, char *filename, int flen, Integer *mode, 147 Integer *reqdim1, Integer *reqdim2, Integer *d_a); 148 extern Integer FATR ndra_create_(Integer *type, Integer *ndim, Integer dims[], 149 char *name, int nlen, char *filename, int flen, Integer *mode, 150 Integer reqdims[], Integer *d_a); 151 extern Integer FATR dra_open_(char *filename, int flen, Integer *mode, 152 Integer *d_a); 153 extern Integer FATR dra_inquire_(Integer *d_a, Integer *type, Integer *dim1, 154 Integer *dim2, char *name, int nlen, char *filename, int flen); 155 extern Integer FATR ndra_inquire_(Integer *d_a, Integer *type, Integer *ndim, 156 Integer dims[], char *name, int nlen, char *filename, int flen); 157 extern Integer ndra_create_config_(Integer *type, Integer *ndim, 158 Integer dims[], char *name, int nlen, char *filename, int flen, 159 Integer *mode, Integer reqdims[], Integer *numfiles, 160 Integer *numioprocs, Integer *d_a); 161 #endif /* F2C_HIDDEN_STRING_LENGTH_AFTER_ARGS */ 162 163 extern Integer FATR dra_terminate_(); 164 165 extern Integer FATR dra_init_( 166 Integer *max_arrays, /* input */ 167 DoublePrecision *max_array_size, /* input */ 168 DoublePrecision *tot_disk_space, /* input */ 169 DoublePrecision *max_memory); /* input */ 170 171 extern Integer FATR dra_probe_( 172 Integer *request, /*input*/ 173 Integer *status); /*output*/ 174 175 extern Integer FATR ndra_write_( 176 Integer *g_a, /*input:GA handle*/ 177 Integer *d_a, /*input:DRA handle*/ 178 Integer *request); /*output: handle to async oper.*/ 179 180 extern Integer FATR ndra_write_section_( 181 logical *transp, /*input:transpose operator*/ 182 Integer *g_a, /*input:GA handle*/ 183 Integer glo[], /*input*/ 184 Integer ghi[], /*input*/ 185 Integer *d_a, /*input:DRA handle*/ 186 Integer dlo[], /*input*/ 187 Integer dhi[], /*input*/ 188 Integer *request); /*output: async. request id*/ 189 190 extern Integer FATR ndra_read_(Integer* g_a, Integer* d_a, Integer* request); 191 192 extern Integer FATR ndra_read_section_( 193 logical *transp, /*input:transpose operator*/ 194 Integer *g_a, /*input:GA handle*/ 195 Integer glo[], /*input*/ 196 Integer ghi[], /*input*/ 197 Integer *d_a, /*input:DRA handle*/ 198 Integer dlo[], /*input*/ 199 Integer dhi[], /*input*/ 200 Integer *request); /*output: request id*/ 201 202 extern void FATR dra_print_internals_(Integer *d_a); 203 204 extern void FATR dra_set_debug_(logical *flag); 205 206 extern void FATR dra_set_default_config_(Integer *numfiles, 207 Integer *numioprocs); 208 209 extern Integer FATR dra_delete_(Integer* d_a); 210 211 extern Integer FATR dra_close_(Integer* d_a); 212 213 extern void dra_flick_(); 214 215 extern Integer FATR dra_wait_(Integer* request); 216