5
c FNAME - filename for test program
7
#define BASE_NAME 'dra.file'
9
# define FNAME HPIODIR//BASE_NAME
11
# define FNAME BASE_NAME
15
#include "mafdecls.fh"
21
double precision max_sz, max_disk, max_mem
22
data max_arrays, max_sz, max_disk, max_mem /10,1d8,1d10, 1d6/
23
data stack, heap /80000, 80000/
26
if(ma_init(MT_F_DBL, stack, heap) ) then
29
if(dra_init(max_arrays, max_sz, max_disk, max_mem).ne.0)then
30
call ga_error('dra_init failed: ',0)
32
if (me.eq.0) print*,' '
33
if(me.eq.0)print *, 'TESTING INTEGERS'
34
if (me.eq.0) print*,' '
36
if (me.eq.0) print*,' '
37
if(me.eq.0)print *, 'TESTING DOUBLES'
38
if (me.eq.0) print*,' '
40
status = dra_terminate()
43
print *,'ma_init failed'
45
c if(me.eq.0)print *, 'all done ...'
51
subroutine test_io_int
53
#include "mafdecls.fh"
61
integer i,j,k, err, type
62
integer me, nproc, dims(3), req(3), ndim
63
integer chunk(3), lo(3), hi(3), ld(3)
65
character*1 filename(200)
70
call init_char(name,100, ' ')
71
call init_char(filename,200, ' ')
73
c a() is a local copy of what the l array should start as
78
a(i,j,k) = i-1 + (j-1)*n + (k-1)*n*n
83
if (me.eq.0) print *, 'Creating global arrays'
90
if(.not. nga_create(MT_INT, 3, dims, 'a', chunk, g_a))
91
& call ga_error('nga_create failed: a', 0)
92
if(.not. nga_create(MT_INT, 3, dims, 'b', chunk, g_b))
93
& call ga_error('nga_create failed: b', 0)
98
write(6,*) 'Imediately before nga_put'
106
call nga_put(g_a, lo, hi, a(1,1,j), ld)
109
if(me.eq.0) print *, 'Creating Disk Array ',n,' x',n,' x',n
117
if(ndra_create(MT_INT, ndim, dims, 'array A',
119
& DRA_RW, req, d_a).ne.0)
120
$ CALL ga_error('ndra_create failed: ',0)
121
if (me.eq.0) print *,'OK'
122
if (me.eq.0) print*,' '
124
if(me.eq.0) print *, 'Writing Global Array to Disk Array'
125
if(ndra_write(g_a, d_a,req).ne.0)
126
$ CALL ga_error('ndra_write failed:',0)
127
if(dra_wait(req).ne.0)call ga_error('dra_wait failed: ' ,req)
128
if (me.eq.0) print *,'OK'
129
if (me.eq.0) print*,' '
130
if(me.eq.0) print *, 'Closing Disk Array'
131
if(dra_close(d_a).ne.0)call ga_error('dra_close failed: ',d_a)
132
if (me.eq.0) print *,'OK'
133
if (me.eq.0) print*,' '
135
if(me.eq.0) print *, 'Opening Existing Disk Array'
136
if(dra_open(FNAME ,DRA_R, d_a).ne.0)
137
& call ga_error('dra_open failed',0)
139
if(ndra_inquire(d_a, type, ndim, dims, name, filename).ne.0)
140
& call ga_error('ndra_inquire failed',0)
141
if(dims(1).ne.n) call ga_error('dim1 error',dims(1))
142
if(dims(2).ne.n) call ga_error('dim2 error',dims(2))
143
if(dims(3).ne.n) call ga_error('dim3 error',dims(3))
144
if(type.ne.MT_INT) call ga_error('type error',type)
145
if(me.eq.0) print *, 'array name read from disk is:',name
147
if (me.eq.0) print *,'OK'
148
if (me.eq.0) print*,' '
150
if(me.eq.0) print *, 'Checking ndra_read'
151
c call dra_set_mode(1)
152
write(6,*) 'About to perform ndra_read'
153
if(ndra_read(g_b, d_a, req).ne.0)
154
$ CALL ga_error('ndra_read failed:',0)
155
write(6,*) 'Finished performing ndra_read'
157
if(dra_wait(req).ne.0) call ga_error('dra_wait failed: ' ,req)
159
c error checking: (g_a - g_b)^2
163
call ga_add(1, g_a, -1, g_b, g_b)
164
err = ga_idot(g_b, g_b)
167
if( me.eq.0) call ga_error('failed', err)
169
if (me.eq.0) print *,'OK'
171
if (me.eq.0) print*,' '
173
if(me.eq.0) print *, 'Checking dra_delete'
174
if(dra_delete(d_a).ne.0)
175
& call ga_error('dra_delete failed',0)
176
if (me.eq.0) print *,'OK'
177
if (me.eq.0) print*,' '
178
status = ga_destroy(g_a)
179
status = ga_destroy(g_b)
185
subroutine test_io_dbl
187
#include "mafdecls.fh"
193
double precision a(n,n,n), err
194
integer g_a, g_b, d_a
195
double precision drand
197
integer dlo(3),dhi(3)
198
integer glo(3),ghi(3)
201
integer iran, ndim, dims(3), req(3), chunk(3), ld(3)
205
iran(i) = int(drand(0)*dble(i-1)) + 1
211
c a() is a local copy of what the l array should start as
216
a(i,j,k) = dble(i-1 + (j-1)*n + (k-1)*n*n)
228
write(6,*) 'Creating global arrays'
230
if(.not. nga_create(MT_DBL, ndim, dims, 'a', chunk, g_a))
231
& call ga_error('ga_create failed: a', 0)
232
if(.not. nga_create(MT_DBL, ndim, dims, 'b', chunk, g_b))
233
& call ga_error('ga_create failed: b', 0)
235
write(6,*) 'Zeroing global arrays'
240
do j = 1+me, n, nproc
247
call nga_put(g_a, dlo, dhi, a(1, 1, j), ld)
250
if (me.eq.0) print*, 'Creating Disk Array ',n,' x',n,' x',n
254
if(ndra_create(MT_DBL, ndim, dims, 'A',
256
& DRA_RW, req, d_a).ne.0)
257
$ CALL ga_error('ndra_create failed: ',0)
259
if(me.eq.0) print *, 'Writing Global Array to Disk Array'
260
if(ndra_write(g_a, d_a,req).ne.0)
261
$ CALL ga_error('ndra_write failed:',0)
262
if (me.eq.0) print*,' '
263
if(dra_wait(req).ne.0) call ga_error('dra_wait failed: ' ,req)
265
if(dra_close(d_a).ne.0)call ga_error('dra_close failed: ',d_a)
267
if(me.eq.0) print *, 'Checking ndra_read'
268
if(dra_open(FNAME,DRA_R, d_a).ne.0)
269
& call ga_error('dra_open failed',0)
270
if(ndra_read(g_b, d_a, req).ne.0)
271
$ CALL ga_error('ndra_read failed:',0)
272
if(dra_wait(req).ne.0) call ga_error('dra_wait failed: ' ,req)
274
c error checking: (g_a - g_b)^2
278
call ga_add(1d0, g_a, -1d0, g_b, g_b)
279
err = ga_ddot(g_b, g_b)
281
if (me.eq.0) print *,'error =', err
283
if (me.eq.0) print *,'OK'
285
if (me.eq.0) print*,' '
287
if(me.eq.0) print *, 'Checking ndra_read_section'
294
if (dlo(i).gt.dhi(i)) call swap(dlo(i),dhi(i))
295
elem = dhi(i) - dlo(i) + 1
296
glo(i) = iran(n-elem) + 1
297
ghi(i) = glo(i) + elem - 1
301
write(6,100) (glo(i),ghi(i),i=1,3),(dlo(i),dhi(i),i=1,3)
302
100 format(1x,'reading global[',3(i4,':',i4),
303
& '] from disk[',3(i4,':',i4),']')
307
* call ga_print(g_b,1)
309
if(ndra_read_section(.false., g_b, glo, ghi,
310
& d_a, dlo, dhi, req).ne.0)
311
& call ga_error('ndra_read failed:',0)
312
if(dra_wait(req).ne.0) call ga_error('dra_wait failed:',req)
313
* call ga_print(g_b,1)
314
* call ga_print_patch(g_a, dilo, dihi, djlo, djhi,1)
315
* call ga_print_patch(g_b, gilo, gihi, gjlo, gjhi,1)
317
call nga_add_patch(1d0, g_a, dlo, dhi, -1d0, g_b, glo, ghi,
319
err = nga_ddot_patch(g_b,'n', glo, ghi, g_b,'n', glo, ghi)
320
if(err.ne.0 .and. me.eq.0)then
321
print *,'error =', err
322
call ga_error('failed',0)
325
if (me.eq.0) print*,' OK'
326
if (me.eq.0) print*,' '
327
if(dra_delete(d_a).ne.0)
328
& call ga_error('dra_delete failed',0)
330
c*** now d_a is 4 times larger than g_a
332
if (me.eq.0) print*, 'Creating New Disk Array ',m,' x',m,' x',m
339
if(ndra_create(MT_DBL, ndim, dims, 'A',
341
& DRA_RW, req, d_a).ne.0)
342
$ CALL ga_error('dra_create failed: ',0)
343
if (me.eq.0) print*,' OK'
344
if (me.eq.0) print*,' '
349
if (me.eq.0) print*,'Testing ndra_write_section'
353
if(glo(i).gt.ghi(i)) call swap(glo(i),ghi(i))
354
elem = ghi(i) - glo(i) +1
355
dlo(i) = iran(m-elem)+1
356
dhi(i) = dlo(i)+elem-1
360
write(6,200) (glo(i),ghi(i),i=1,3),(dlo(i),dhi(i),i=1,3)
361
200 format(1x,'writing global[',3(i4,':',i4),
362
& '] to disk[',3(i4,':',i4),']')
366
c call dra_set_mode(0)
367
c if(dra_write_section(.false., g_a, gilo, gihi, gjlo, gjhi,
368
c & d_a, dilo, dihi, djlo, djhi, req).ne.0)
369
if(ndra_write_section(.false., g_a, glo, ghi,
370
& d_a, dlo, dhi, req).ne.0)
371
& call ga_error('dra_write failed:',0)
372
if(dra_wait(req).ne.0) call ga_error('dra_wait failed:',req)
374
c*** dra_read was tested already and we use it for testing ndra_write_section
376
c call dra_set_mode(1)
377
if(ndra_read_section(.false., g_b, glo, ghi,
378
& d_a, dlo, dhi, req).ne.0)
379
& call ga_error('ndra_read failed:',0)
380
if(dra_wait(req).ne.0) call ga_error('dra_wait failed:',req)
382
call nga_add_patch(1d0, g_a, glo, ghi, -1d0, g_b, glo, ghi,
384
err = nga_ddot_patch(g_b,'n', glo, ghi, g_b,'n', glo, ghi)
385
cbjp if(err.ne.0d0 )then
386
cbjp call ga_print_patch(g_a, gilo, gihi,gjlo,gjhi,1)
387
cbjp call ga_print_patch(g_b, gilo, gihi,gjlo,gjhi,1)
389
if(err.ne.0d0 .and. me.eq.0)then
390
print *,'error =', err
391
call ga_error('error in ndra_write_section',0)
394
if (me.eq.0) print*,' OK'
396
if(dra_delete(d_a).ne.0)
397
& call ga_error('dra_delete failed',0)
398
status = ga_destroy(g_a)
399
status = ga_destroy(g_b)
412
subroutine init_char(str, len, char)
414
#if defined(CRAY_T3D) || defined(CRAY_T3E)