36 use element_mod , only : nixr
37
38
39
40#include "implicit_f.inc"
41
42
43
44#include "com01_c.inc"
45#include "com04_c.inc"
46#include "param_c.inc"
47#include "task_c.inc"
48
49
50
51
53 . geo(npropg,*), skew(lskew,*)
54 INTEGER IXR(NIXR,*),IPARG(NPARG,*),LRBUF,
55 . DD_IAD(NSPMD+1,*)
56
57
58
59 INTEGER I,ISK,
60 . NEL,LFT,LLT,NG,
61 . ITY,IAD,MLW,NFT,N,II,ISKK,MSGTAG,LEN,IGTYP
62 INTEGER SRBUF(LRBUF)
63 INTEGER, PARAMETER :: INTSIZE = 4
64c
65
66
67
68 isk=numskw-1
69
70 ii = 0
71
72 msgtag = 1000
73 IF (nspmd > 1 .AND. ispmd/=0) THEN
74
76 . it_spmd,msgtag+ispmd,intsize)
77
78 ENDIF
79
80
81
82
83 DO ng=1,ngroup
84 mlw =iparg(1,ng)
85 nel =iparg(2,ng)
86 ity =iparg(5,ng)
87 nft =iparg(3,ng)
88 iad =iparg(4,ng)
89 igtyp =iparg(38,ng)
90 lft = 1
91 llt = nel
92
93
94
95 IF(ity==4)THEN
96 DO i=lft,llt
97 isk=isk+1
98 ii = ii + 1
99 srbuf(ii) = isk
100 ENDDO
101
102
103
104 ELSEIF(ity==5)THEN
105 DO i=lft,llt
106 isk=isk+1
107 ii = ii + 1
108 srbuf(ii) = isk
109 ENDDO
110
111
112
113 ELSEIF(ity==6)THEN
114 IF(mlw==1.OR.mlw==7)THEN
115 DO i=lft,llt
116 isk=isk+1
117 ii = ii + 1
118 srbuf(ii) = isk
119 ENDDO
120 ELSEIF(mlw==2)THEN
121 DO i=lft,llt
122 n=i+nft
123 iskk=nint(geo(2,ixr(1,n)))-1
124 ii = ii + 1
125 srbuf(ii) = iskk
126 ENDDO
127 ELSEIF(mlw==3)THEN
128 DO i=lft,llt
129 isk=isk+1
130 ii = ii + 1
131 srbuf(ii) = isk
132 isk=isk+1
133 ii = ii + 1
134 srbuf(ii) = isk
135 ENDDO
136 ELSEIF((mlw >= 4 .AND. mlw <= 6 ) .OR. igtyp == 23)THEN
137 DO i=lft,llt
138 isk=isk+1
139 ii = ii + 1
140 srbuf(ii) = isk
141 ENDDO
142 ENDIF
143 ELSE
144 ENDIF
145 ENDDO
146
147 IF (nspmd > 1) THEN
148 IF (ispmd/=nspmd-1) THEN
150 . it_spmd,msgtag+ispmd+1,intsize)
151 ENDIF
152
154 ELSE
155 len = ii
156 END IF
157 IF (ispmd==0) THEN
159 ENDIF
160
161
162
163 RETURN
subroutine rad_spmd_recv(a, siz, ispmd, it_spmd, msgtag, intsize)
subroutine rad_spmd_send(a, siz, ispmd, it_spmd, msgtag, intsize)
subroutine spmd_igath(srbuf, len, lrecv)
void write_i_c(int *w, int *len)