29
30
31
32#include "implicit_f.inc"
33
34
35
36#include "com01_c.inc"
37#include "com04_c.inc"
38#include "flowcom.inc"
39#include "units_c.inc"
40
41
42
43 INTEGER IFLOW(*), IFLOW_L(*), (*), P
44 INTEGER (KIND=8) :: MEMFLOW(*)
45
46
47
48 INTEGER I, IADI, IADJ, NINOUT, NNO, NEL, NNN, IADL, NNO_L, J,
49 . JJ, J1, J2, J3, PJ1, PJ2, PJ3, IADMATI, IADMATR, ITYP,
50 . NR, NC, NPROW, , NNR_P, NNC_P, NNE_P, NBLOC,
51 . NNN_L
52 INTEGER JFORM
53
54 DO i=1,liflow
55 iflow_l(i)=iflow(i)
56 ENDDO
57
58 iadi=0
59 iadmati=1
60 iadmatr=1
61 iadl = 0
62 DO i=1,nflow
63 ityp =iflow(iadi+2)
64 nno =iflow(iadi+5)
65 nel =iflow(iadi+6)
66 nbloc=iflow(iadi+12)
67 nprow=iflow(iadi+18)
68 npcol=iflow(iadi+19)
69
70 IF (ityp==1) THEN
71 ninout=iflow(iadi+4)
72 nnn=iflow(iadi+7)
73
74 iadj=iadi+niflow+nno+3*nel+ninout*niioflow
75 iadl=iadj+nnn+nel
76 nno_l=0
77 DO j=1,nno
78 jj=iflow(iadi+niflow+j)
79 iflow_l(iadi+niflow+j)=nodlocal(jj)
80 IF (nodlocal(jj)/=0) THEN
81 nno_l=nno_l+1
82 IF(nspmd == 1) THEN
83 iflow_l(iadl+nno_l)=j
84 ELSE
85 iflow_l(iadl+2*nno+nno_l)=j
86 ENDIF
87 ENDIF
88 ENDDO
89 iflow_l(iadi+16)=nno_l
90 nnn_l=0
91 DO j=1,nnn
92 jj=iflow(iadj+j)
93 iflow_l(iadj+j)=nodlocal(jj) ! ibufi
94 IF (nodlocal(jj)>0) THEN
95 nnn_l=nnn_l+1
96 IF(nspmd == 1) THEN
97 iflow_l(iadl+nno+nnn_l)=j
98 ELSE
99 iflow_l(iadl+4*nno+nnn_l)=j
100 ENDIF
101 ENDIF
102 ENDDO
103 iflow_l(iadi+22)=nnn_l
104
105 IF(nspmd > 1) THEN
106 nr=(p-1)/npcol+1
107 nc=p-(nr-1)*npcol
108 nnr_p=0
109 DO j=1,nno
110 IF (iflow(iadl+j)==nr) THEN
111 nnr_p=nnr_p+1
112 iflow_l(iadl+j)=1
113 ELSE
114 iflow_l(iadl+j)=0
115 ENDIF
116 ENDDO
117 nnc_p=0
118 DO j=1,nno
119 IF (iflow(iadl+nno+j)==nc) THEN
120 nnc_p=nnc_p+1
121 iflow_l(iadl+nno+j)=1
122 ELSE
123 iflow_l(iadl+nno+j)=0
124 ENDIF
125 ENDDO
126 iadl=iadl+4*nno+2*nnn
127 DO j=1,nel
128 IF (iflow(iadl+j)==nr) THEN
129 iflow_l(iadl+j)=1
130 ELSE
131 iflow_l(iadl+j)=0
132 ENDIF
133 ENDDO
134 nne_p=0
135 DO j=1,nel
136 IF (iflow(iadl+nel+j)==nc) THEN
137 nne_p=nne_p+1
138 iflow_l(iadl+nel+j)=1
139 ELSE
140 iflow_l(iadl+nel+j)=0
141 ENDIF
142 ENDDO
143
144 iflow_l(iadi+8)=nnr_p+nbloc
145 iflow_l(iadi+9)=nnr_p*nnc_p+nnr_p*nne_p
146 iflow_l(iadi+10)=iadmati
147 iflow_l(iadi+11)=iadmatr
148 iflow_l(iadi+20)=iadmatr+nnr_p*nnc_p
149
150 memflow(1)=memflow(1)+iflow_l(iadi+8)
151 memflow(2)=memflow(2)+iflow_l(iadi+9)
152
153 iadmati=iadmati+nnr_p+nbloc
154 iadmatr=iadmatr+nnr_p*nnc_p+nnr_p*nne_p
155 ENDIF
156
157 ELSEIF(ityp == 3) THEN
158 jform =iflow(iadi+4)
159 IF(jform == 1) iadl=iadi+niflow+nno+3*nel
160 IF(jform == 2) iadl=iadi+niflow+nno+5*nel
161 nno_l=0
162 DO j=1,nno
163 iflow_l(iadl+j)=0
164 ENDDO
165 DO j=1,nno
166 jj=iflow(iadi+niflow+j)
167 iflow_l(iadi+niflow+j)=nodlocal(jj)
168 IF (nodlocal(jj)/=0) THEN
169 nno_l=nno_l+1
170 iflow_l(iadl+nno_l)=j
171 ENDIF
172 ENDDO
173 iflow_l(iadi+16)=nno_l
174
175 IF(nspmd > 1) THEN
176 nr=(p-1)/npcol+1
177 nc=p-(nr-1)*npcol
178 IF(jform == 1) iadl=iadl+nno+nno+nel
179 IF(jform == 2) iadl=iadl+nno+nbgauge+nno+nel
180 nnr_p=0
181 DO j=1,nel
182 IF (iflow(iadl+j)==nr) THEN
183 nnr_p=nnr_p+1
184 iflow_l(iadl+j)=1
185 ELSE
186 iflow_l(iadl+j)=0
187 ENDIF
188 ENDDO
189 iadl=iadl+nel
190 nnc_p=0
191 DO j=1,nel
192 IF (iflow(iadl+j)==nc) THEN
193 nnc_p=nnc_p+1
194 iflow_l(iadl+j)=1
195 ELSE
196 iflow_l(iadl+j)=0
197 ENDIF
198 ENDDO
199
200 IF(p == 1) THEN
201 WRITE(iout,1000) nprow, npcol, nbloc
202 WRITE(iout,'(4X,A)') 'PROC NB OF ROWS NB OF COLUMNS'
203 ENDIF
204 WRITE(iout,'(3I10)') p,nnr_p,nnc_p
205
206 iflow_l(iadi+8) = nnr_p+nbloc
207 iflow_l(iadi+9) = nnr_p*nnc_p
208 iflow_l(iadi+10)= iadmati
209 iflow_l(iadi+11)= iadmatr
210 iflow_l(iadi+20)= nnr_p
211
212 memflow(1)=memflow(1)+iflow_l(iadi+8)
213 memflow(2)=memflow(2)+iflow_l(iadi+9)
214
215 iadmati=iadmati+iflow_l(iadi+8)
216 iadmatr=iadmatr+iflow_l(iadi+9)
217 ENDIF
218 ENDIF
219 iadi=iadi+iflow(iadi+14)
220 ENDDO
221
222 1000 FORMAT(/4x,'PARALLEL SOLVER PARAMETERS (SCALAPACK)'
223 . /4x,'--------------------------------------'
224 . /4x,'NUMBER OF ROW OF PROCESS GRID ',i10
225 . /4x,'NUMBER OF COLUMNS OF PROCESS GRID ',i10
226 . /4x,'2D-CYCLIC DECOMPOSITION BLOCK-SIZE ',i10)
227 RETURN