41
42
43
44 USE elbufdef_mod
45 USE my_alloc_mod
46 use element_mod , only : nixp
47
48
49
50#include "implicit_f.inc"
51
52
53
54#include "com01_c.inc"
55#include "param_c.inc"
56#include "units_c.inc"
57#include "scr14_c.inc"
58#include "scr16_c.inc"
59#include "task_c.inc"
60
61
62
63 INTEGER SIZP0
64 INTEGER IXP(NIXP,*),
65 . IPARG(NPARG,*),IPM(NPROPMI,*),IGEO(NPROPGI,*),
66 . IPARTP(*),IPART_STATE(*),STAT_INDXP(*)
67 TYPE (ELBUF_STRUCT_), DIMENSION(NGROUP), TARGET :: ELBUF_TAB
68 double precision WA(*),WAP0(*)
69
70
71
72 INTEGER I,N,J,K,JJ,LEN,IOFF,NG,NEL,NFT,ITY,LFT,LLT,ID,IPRT0,IPRT,IE,
73 . NPT,IR,IS,IPT,IL,IVAR,MY_NUVAR,IGTYP,IPROP,MLW
74 INTEGER,DIMENSION(:),ALLOCATABLE :: PTWA
75 INTEGER,DIMENSION(:),ALLOCATABLE :: PTWA_P0
76 CHARACTER*100 DELIMIT,LINE
77 TYPE(G_BUFEL_) ,POINTER :: GBUF
79 . DIMENSION(:) ,POINTER :: uvar
80
81 DATA delimit(1:60)
82 ./'#---1----|----2----|----3----|----4----|----5----|----6----|'/
83 DATA delimit(61:100)
84 ./'----7----|----8----|----9----|----10---|'/
85
86
87
88 CALL my_alloc(ptwa,stat_numelp)
89 ALLOCATE(ptwa_p0(0:
max(1,stat_numelp_g)))
90
91 jj = 0
92
93 IF (stat_numelp /= 0) THEN
94
95 ie=0
96 DO ng=1,ngroup
97 ity = iparg(5,ng)
98 IF (ity == 5) THEN
99 gbuf => elbuf_tab(ng)%GBUF
100 mlw = iparg(1,ng)
101 nel = iparg(2,ng)
102 nft = iparg(3,ng)
103 npt = iparg(6,ng)
104 iprop = ixp(5,nft+1)
105 igtyp = igeo(11,iprop)
106 lft=1
107 llt=nel
108
109 DO i=lft,llt
110 n = i + nft
111 iprt=ipartp(n)
112 IF (ipart_state(iprt) /= 0) THEN
113 wa(jj + 1) = gbuf%OFF(i)
114 wa(jj + 2) = iprt
115 wa(jj + 3) = ixp(nixp,n)
116 wa(jj + 4) = igtyp
117 wa(jj + 5) = npt
118 jj = jj + 5
119
120 IF (mlw == 36) THEN
121
122 my_nuvar = ipm(8,ixp(1,n))
123 jj = jj + 1
124 wa(jj) = my_nuvar
125
126 DO ipt=1,npt
127 il = 1
128 ir = 1
129 is = 1
130!
131 uvar => elbuf_tab(ng)%BUFLY(il)%MAT(ir,is,ipt)%VAR
132 DO ivar=1,my_nuvar
133 jj = jj + 1
134 wa(jj) = uvar((ivar-1)*nel + i)
135 ENDDO
136 ENDDO
137
138 ELSE
139
140 my_nuvar = 0
141 jj = jj + 1
142 wa(jj) = my_nuvar
143 ENDIF
144
145 ie=ie+1
146
147 ptwa(ie)=jj
148 ENDIF
149 ENDDO
150 ENDIF
151 ENDDO
152 ENDIF
153
154
155
156 IF (nspmd == 1) THEN
157
158 ptwa_p0(0)=0
159 DO n=1,stat_numelp
160 ptwa_p0(n)=ptwa(n)
161 ENDDO
162 len=jj
163 DO j=1,len
164 wap0(j)=wa(j)
165 ENDDO
166 ELSE
167
169 len = 0
171 END IF
172
173 IF (ispmd == 0 .AND. len > 0) THEN
174 iprt0 = 0
175 DO n=1,stat_numelp_g
176! find
the nieme elt in
the order of an increasing
id
177 k=stat_indxp(n)
178
179 j=ptwa_p0(k-1)
180
181 ioff = nint(wap0(j + 1))
182 my_nuvar = nint(wap0(j + 6))
183 IF (ioff >= 1 .AND. my_nuvar /= 0) THEN
184 iprt = nint(wap0(j + 2))
185 IF (iprt /= iprt0) THEN
186 IF (izipstrs == 0) THEN
187 WRITE(iugeo,'(A)') delimit
188 WRITE(iugeo,'(A)')'/INIBEAM/AUX'
189 WRITE(iugeo,'(A)')
190 .'#------------------------ REPEAT --------------------------'
191 WRITE(iugeo,'(A)')
192 . '# BEAMID NPT PROP_TYPE NVAR'
193 WRITE(iugeo,'(A/A)')
194 .'# THE CONTENT OF THE FOLLOWING CARDS WILL NOT BE DISCLOSED',
195 .'# THEY MUST NOT BE CHANGED.'
196 WRITE(iugeo,'(A)')
197 .'#---------------------- END REPEAT ------------------------'
198 WRITE(iugeo,'(A)') delimit
199 ELSE
200 WRITE(line,'(A)') delimit
202 WRITE(line,'(A)')'/INIBEAM/AUX'
204 WRITE(line,'(A)')
205 .'#------------------------ REPEAT --------------------------'
207 WRITE(line,'(A)')
208 . '# BEAMID NPT PROP_TYPE NVAR'
210 WRITE(line,'(A)')
211 .'# THE CONTENT OF THE FOLLOWING CARDS WILL NOT BE DISCLOSED'
213 WRITE(line,'(A)')
214 .'# THEY MUST NOT BE CHANGED.'
216 WRITE(line,'(A)')
217 .'#---------------------- END REPEAT ------------------------'
219 WRITE(line,'(A)') delimit
221 ENDIF
222 iprt0=iprt
223 ENDIF
224 id = nint(wap0(j + 3))
225 igtyp = nint(wap0(j + 4))
226 npt = nint(wap0(j + 5))
227 my_nuvar = nint(wap0(j + 6))
228 j = j + 6
229 IF (izipstrs == 0) THEN
230 WRITE(iugeo,
'(4I10)')
id,npt,igtyp,my_nuvar
231 ELSE
232 WRITE(line,
'(4I10)')
id,npt,igtyp,my_nuvar
234 ENDIF
235 DO jj=1,npt
236 IF (izipstrs == 0) THEN
237 WRITE(iugeo,'(1P5E20.13)')(wap0(j + k),k=1,my_nuvar)
238 ELSE
240 ENDIF
241 j=j+my_nuvar
242 ENDDO
243 ENDIF
244 ENDDO
245 ENDIF
246
247 DEALLOCATE(ptwa)
248 DEALLOCATE(ptwa_p0)
249
250 RETURN
end diagonal values have been computed in the(sparse) matrix id.SOL
subroutine spmd_rgather9_dp(v, len, vp0, lenp0, iad)
subroutine spmd_stat_pgather(ptv, ptlen, ptv_p0, ptlen_p0)
subroutine strs_txt50(text, length)
subroutine tab_strs_txt50(wap0, cpt, j, sizp0, nbpline)