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