18
static Integer _da_lo[MAXDIM], _da_hi[MAXDIM];
19
static Integer _da_dims[MAXDIM];
20
static Integer _da_reqdims[MAXDIM];
22
static Integer _ga_lo[MAXDIM], _ga_hi[MAXDIM];
25
# define COPYC2F(carr, farr, n){\
26
int i; for(i=0; i< (n); i++)(farr)[i]=(Integer)(carr)[i];}
27
# define COPYF2C(farr, carr, n){\
28
int i; for(i=0; i< (n); i++)(carr)[i]=(int)(farr)[i];}
29
# define COPYF2C_DRA(farr, carr, n){\
30
int i; for(i=0; i< (n); i++)(carr)[i]=(dra_size_t)(farr)[i];}
32
# define COPYC2F(carr, farr, n){\
33
int i; for(i=0; i< (n); i++)(farr)[n-i-1]=(Integer)(carr)[i];}
34
# define COPYF2C(farr, carr, n){\
35
int i; for(i=0; i< (n); i++)(carr)[n-i-1]=(int)(farr)[i];}
36
# define COPYF2C_DRA(farr, carr, n){\
37
int i; for(i=0; i< (n); i++)(carr)[n-i-1]=(dra_size_t)(farr)[i];}
41
#define COPY(CAST,src,dst,n) {\
42
int i; for(i=0; i< (n); i++)(dst)[i]=(CAST)(src)[i];}
45
# define COPYINDEX_C2F(carr, farr, n){\
46
int i; for(i=0; i< (n); i++)(farr)[n-i-1]=(Integer)(carr)[i]+1;}
47
# define COPYINDEX_F2C(farr, carr, n){\
48
int i; for(i=0; i< (n); i++)(carr)[n-i-1]=(int)(farr)[i] -1;}
49
# define COPYINDEX_F2C_DRA(farr, carr, n){\
50
int i; for(i=0; i< (n); i++)(carr)[n-i-1]=(dra_size_t)(farr)[i] -1;}
52
# define COPYINDEX_F2C COPYF2C
53
# define COPYINDEX_F2C_DRA COPYF2C_DRA
54
# define COPYINDEX_C2F COPYC2F
57
int DRA_uses_fapi(void)
67
int NDRA_Create(int type, int ndim, dra_size_t dims[], char *name,
68
char* filename, int mode, dra_size_t reqdims[], int *d_a)
70
Integer ttype, nndim, dd_a, mmode;
72
if (ndim>MAXDIM) return 0;
74
COPYC2F(dims, _da_dims, ndim);
75
COPYC2F(reqdims, _da_reqdims, ndim);
76
ttype = (Integer)type;
77
nndim = (Integer)ndim;
78
mmode = (Integer)mode;
80
st = ndrai_create(&ttype, &nndim, _da_dims, name,
81
filename, &mmode, _da_reqdims, &dd_a);
83
if(st==TRUE) return 1;
87
int NDRA_Create_config(int type, int ndim, dra_size_t dims[], char *name,
88
char* filename, int mode, dra_size_t reqdims[], int numfiles,
89
int ioprocs, int *d_a)
91
Integer ttype, nndim, dd_a, mmode;
92
Integer nnumfiles, iioprocs;
94
if (ndim>MAXDIM) return 0;
96
COPYC2F(dims, _da_dims, ndim);
97
COPYC2F(reqdims, _da_reqdims, ndim);
98
ttype = (Integer)type;
99
nndim = (Integer)ndim;
100
mmode = (Integer)mode;
101
nnumfiles = (Integer)numfiles;
102
iioprocs = (Integer)ioprocs;
104
st = ndrai_create_config(&ttype, &nndim, _da_dims, name,
105
filename, &mmode, _da_reqdims, &nnumfiles, &iioprocs, &dd_a);
107
if(st==TRUE) return 1;
111
int NDRA_Inquire(int d_a, int *type, int *ndim, dra_size_t dims[], char *name,
114
Integer dd_a, ttype, nndim, status;
116
status = ndrai_inquire(&dd_a, &ttype, &nndim, _da_dims, name, filename);
117
COPYF2C_DRA(_da_dims, dims, nndim);
123
int NDRA_Write(int g_a, int d_a, int *request)
125
Integer status, gg_a, dd_a, rrequest;
128
rrequest = (Integer)*request;
129
status = ndra_write_(&gg_a, &dd_a, &rrequest);
130
*request = (int)rrequest;
134
int NDRA_Read(int g_a, int d_a, int *request)
136
Integer status, gg_a, dd_a, rrequest;
139
rrequest = (Integer)*request;
140
status = ndra_read_(&gg_a, &dd_a, &rrequest);
141
*request = (int)rrequest;
145
int NDRA_Write_section(logical transp, int g_a, int glo[], int ghi[],
146
int d_a, dra_size_t dlo[], dra_size_t dhi[],
150
Integer ttransp, gg_a, dd_a, rrequest;
152
ttransp = (Integer)transp;
154
ndim = pnga_ndim(gg_a);
156
rrequest = (Integer)*request;
158
COPYINDEX_C2F(glo, _ga_lo, ndim);
159
COPYINDEX_C2F(ghi, _ga_hi, ndim);
160
COPYINDEX_C2F(dlo, _da_lo, ndim);
161
COPYINDEX_C2F(dhi, _da_hi, ndim);
162
status = ndra_write_section_(&ttransp, &gg_a, _ga_lo, _ga_hi, &dd_a, _da_lo,
164
*request = (int)rrequest;
168
int NDRA_Read_section(logical transp, int g_a, int glo[], int ghi[],
169
int d_a, dra_size_t dlo[], dra_size_t dhi[], int *request)
172
Integer ttransp, gg_a, dd_a, rrequest;
174
ttransp = (Integer)transp;
176
ndim = pnga_ndim(gg_a);
178
rrequest = (Integer)*request;
180
COPYINDEX_C2F(glo, _ga_lo, ndim);
181
COPYINDEX_C2F(ghi, _ga_hi, ndim);
182
COPYINDEX_C2F(dlo, _da_lo, ndim);
183
COPYINDEX_C2F(dhi, _da_hi, ndim);
184
status = ndra_read_section_(&ttransp, &gg_a, _ga_lo, _ga_hi, &dd_a, _da_lo,
186
*request = (int)rrequest;
190
int DRA_Init(int max_arrays, double max_array_size,
191
double total_disk_space, double max_memory)
193
Integer mmax_arrays, status;
194
DoublePrecision mmax_array_size, ttotal_disk_space, mmax_memory;
195
mmax_arrays = (Integer)max_arrays;
196
mmax_array_size = (DoublePrecision)max_array_size;
197
ttotal_disk_space = (DoublePrecision)total_disk_space;
198
mmax_memory = (DoublePrecision)max_memory;
199
status = dra_init_(&mmax_arrays, &mmax_array_size,
200
&ttotal_disk_space, &mmax_memory);
207
status = dra_terminate_();
211
int DRA_Open(char* filename, int mode, int *d_a)
213
Integer mmode, dd_a, status;
214
mmode = (Integer)mode;
215
status = drai_open(filename, &mmode, &dd_a);
220
int DRA_Probe(int request, int *compl_status)
222
Integer rrequest, ccompl_status, status;
223
rrequest = (Integer)request;
224
status = dra_probe_(&rrequest, &ccompl_status);
225
*compl_status = (int)ccompl_status;
229
void DRA_Set_debug(logical flag)
231
dra_set_debug_(&flag);
235
void DRA_Print_internals(int d_a)
239
dra_print_internals_(&dd_a);
243
void DRA_Set_default_config(int numfiles, int numioprocs)
245
Integer nfiles, nprocs;
246
nfiles = (Integer)numfiles;
247
nprocs = (Integer)numioprocs;
248
dra_set_default_config_(&nfiles, &nprocs);
252
int DRA_Wait(int request)
254
Integer rrequest, status;
255
rrequest = (Integer)request;
256
status = dra_wait_(&rrequest);
260
int DRA_Delete(int d_a)
262
Integer dd_a, status;
264
status = dra_delete_(&dd_a);
268
int DRA_Close(int d_a)
270
Integer dd_a, status;
272
status = dra_close_(&dd_a);