1 subroutine util_mygadgop(msgid,buff,size,op) 2 implicit none 3 integer msgid ! [in] 4 double precision buff(*) ! [in/out] 5 integer size ! [in] 6 character*(*) op 7#include "mafdecls.fh" 8#include "global.fh" 9c#define DEBUG 1 10c 11 integer bigint,nsteps,i,istart,len 12c 13#ifdef EXT_INT 14 bigint = (2**31)-1024 15#else 16 bigint = (2**30)-1024 17#endif 18 bigint=bigint/ma_sizeof(mt_int, 1, mt_byte) 19 20 nsteps = ceiling(dble(size)/dble(bigint)) 21 istart=1 22#ifdef DEBUG 23 if(ga_nodeid().eq.0) 24 w write(6,'(a,i10,a,i10,a,i10)') ' size ',size, 25 w ' nsteps ',nsteps, 26 w ' bigint ',bigint 27#endif 28 do i=1,nsteps 29 len=bigint 30 if (istart+len-1.gt.size) len=size - istart + 1 31#ifdef DEBUG 32 if(ga_nodeid().eq.0) 33 w write(6,'(i10,a,i10,a,i10)') i,' istart ',istart, 34 w ' len ',len 35#endif 36 call ga_dgop(msgid+(i-1)*1000,buff(istart),len,op) 37 istart=istart+len 38 enddo 39 40 return 41 end 42 43 subroutine util_mygaigop(msgid,ibuff,size,op) 44 implicit none 45 integer msgid ! [in] 46 integer ibuff(*) ! [in/out] 47 integer size ! [in] 48 character*(*) op 49#include "mafdecls.fh" 50#include "global.fh" 51c 52 integer bigint,nsteps,i,istart,len 53c 54#ifdef EXT_INT 55 bigint = (2**31)-1024 56#else 57 bigint = (2**30)-1024 58#endif 59 bigint=bigint/ma_sizeof(mt_int, 1, mt_byte) 60 61 nsteps = ceiling(dble(size)/dble(bigint)) 62 istart=1 63 do i=1,nsteps 64 len=bigint 65 if (istart+len-1.gt.size) len=size - istart + 1 66#ifdef DEBUG 67 if(ga_nodeid().eq.0) 68 w write(6,'(i10,a,i10,a,i10)') i,' istart ',istart, 69 w ' len ',len 70#endif 71 call ga_igop(msgid+(i-1)*1000,ibuff(istart),len,op) 72 istart=istart+len 73 enddo 74 75 return 76 end 77 78