54
55
56
58 USE elbufdef_mod
60 USE multimat_param_mod , ONLY : m51_n0phas, m51_nvphas
63
64
65
66#include "implicit_f.inc"
67
68
69
70#include "com01_c.inc"
71#include "com04_c.inc"
72#include "vect01_c.inc"
73#include "param_c.inc"
74#include "task_c.inc"
75
76
77
79 INTEGER NVAR, ITASK, LENCOM,ITRIMAT,NV,
80 . IPARG(NPARG,NGROUP),
81 . NERCVOIS(*),NESDVOIS(*),LERCVOIS(*),LESDVOIS(*),
82 . BHOLE(*)
83 TYPE (ELBUF_STRUCT_), DIMENSION(NGROUP), TARGET :: ELBUF_STR
84 TYPE(t_ale_connectivity), INTENT(IN) :: ALE_CONNECT
85 INTEGER,INTENT(IN),OPTIONAL :: OPT_FLAG_MAT_EOS
86
87
88
89 INTEGER :: NG, IRS, IRE, I, J, K, NM, NMN, NFX, ADD, ADD0,IDX,INDX,NEL
90 INTEGER :: NUVAR_MAT
91 INTEGER :: NUVAR_EOS
92 my_real,
DIMENSION(:),
POINTER :: var,sig,vol, tag22,temp
93 INTEGER :: FLAG_MAT_EOS
94
95
96
97 flag_mat_eos = 0
98 IF(PRESENT(opt_flag_mat_eos))flag_mat_eos = opt_flag_mat_eos
99 idx=nv
101 DO nm=1,nmn
102
104
105 DO ng=itask+1,ngroup,nthread
106
107 IF (iparg(76, ng) == 1) cycle
109 2 mtn ,llt ,nft ,iad ,ity ,
110 3 npt ,jale ,ismstr ,jeul ,jtur ,
111 4 jthe ,jlag ,jmult ,jhbe ,jivf ,
112 5 nvaux ,jpor ,jcvt ,jclose ,jplasol ,
113 6 irep ,iint ,igtyp ,israt ,isrot ,
114 7 icsen ,isorth ,isorthg ,ifailure,jsms )
115
116
117
118 nuvar_mat = iparg(81,ng)
119 nuvar_eos = iparg(82,ng)
121 IF (flag_mat_eos == 0 .OR. idx == 0) cycle
122 IF(flag_mat_eos == 1)THEN
123 IF(idx > nuvar_mat) cycle
124 ELSEIF (flag_mat_eos == 2)THEN
125 IF(idx > nuvar_eos) cycle
126 ENDIF
127 ENDIF
128 IF (itrimat > 0 .AND. mtn /= 51) cycle
129 IF (jale+jeul == 0) cycle
130 IF (iparg(8,ng) == 1) cycle
131 IF (
max(1,jmult) < nm) cycle
132
133 IF( jmult /= 0) mtn =iparg(24+nm,ng)
134 IF (
nvar == 10 .AND.(mtn == 37)) cycle
135 IF (
nvar == 12 .AND. elbuf_str(ng)%GBUF%G_TEMP == 0) cycle
136
137 irs=iparg(15,ng)
138 ire=iparg(16,ng)
139 lft=1
140 nel=llt
141
142
143
144
145
146 IF (
nvar == 2 .AND. irs == 1)
THEN
147 IF (itrimat > 0 .AND. mtn == 51) THEN
148 add = m51_n0phas + (itrimat-1)*m51_nvphas + idx
149 add = add *llt
150 DO i=lft,llt
151 j = i+nft
152 phi(j) = elbuf_str(ng)%BUFLY(1)%MAT(1,1,1)%VAR(add+i)
153 END DO
154 ELSE
155 DO i=lft,llt
156 j = i+nft
157 k = (idx-1)*nel + i
158 phi(j) = elbuf_str(ng)%BUFLY(nm)%LBUF(1,1,1)%SIG(k)
159 ENDDO
160 ENDIF
161
162
163
164
165
166
167 ELSEIF (
nvar == 10 .AND. ire == 1)
THEN
168 IF (mtn == 41) cycle
169 IF (mtn==51) THEN
170 IF(itrimat==0)THEN
171 cycle
172 ELSEIF(itrimat <= 3)THEN
173 add0= m51_n0phas + (itrimat-1)*m51_nvphas
174 add = add0 + 15
175 k = llt*(add-1)
176 var => elbuf_str(ng)%BUFLY(1)%MAT(1,1,1)%VAR(k+1:k+llt)
177 ELSEIF(itrimat == 4)THEN
178 var => elbuf_str(ng)%BUFLY(nm)%LBUF(1,1,1)%TB(1:llt)
179 ENDIF
180 ELSEIF (mtn == 5 .OR. mtn ==97 .OR. mtn==105) THEN
181 var => elbuf_str(ng)%BUFLY(nm)%LBUF(1,1,1)%TB(1:llt)
182 ELSEIF (mtn == 6) THEN
183 var => elbuf_str(ng)%BUFLY(nm)%LBUF(1,1,1)%RK(1:llt)
184 ELSEIF (mtn >= 28 .AND. mtn /= 67 .AND. mtn /= 49) THEN
185 var => elbuf_str(ng)%BUFLY(nm)%LBUF(1,1,1)%PLA(1:llt)
186 ELSE
187 var => elbuf_str(ng)%BUFLY(nm)%LBUF(1,1,1)%PLA(1:llt)
188 ENDIF
189 DO i=lft,llt
190 j = i+nft
191 phi(j) = var(i)
192 ENDDO
193
194
195
196
197 ELSEIF (
nvar == 11)
THEN
198 IF( flag_mat_eos == 1 ) THEN
199
200 var => elbuf_str(ng)%BUFLY(nm)%MAT(1,1,1)%VAR(llt*(idx-1)+1:llt*(idx))
201 DO i=lft,llt
202 j = i+nft
203 phi(j) = var(i)
204 ENDDO
205 ELSEIF( flag_mat_eos == 2 )THEN
206
207 var => elbuf_str(ng)%BUFLY(nm)%EOS(1,1,1)%VAR(llt*(idx-1)+1:llt*(idx))
208 DO i=lft,llt
209 j = i+nft
210 phi(j) = var(i)
211 ENDDO
212 ENDIF
213
214
215
216
217 ELSEIF (
nvar == 12)
THEN
218 var => elbuf_str(ng)%BUFLY(nm)%LBUF(1,1,1)%TEMP(1:llt)
219 DO i=lft,llt
220 j = i+nft
221 phi(j) = var(i)
222 ENDDO
223
224
225
226 ELSE
227 DO i=lft,llt
228 j=i+nft
229 phi(j)=zero
230 ENDDO
231 ENDIF
232 ENDDO
233
235
236
237
238
239 IF (nspmd > 1)THEN
240
241 CALL spmd_e1vois(phi,nercvois,nesdvois,lercvois,lesdvois,lencom )
242
243 END IF
244
245
246
247
248
249
250 DO ng=itask+1,ngroup,nthread
251
252 IF (iparg(76, ng) == 1) cycle
254 2 mtn ,llt ,nft ,iad ,ity ,
255 3 npt ,jale ,ismstr ,jeul ,jtur ,
256 4 jthe ,jlag ,jmult ,jhbe ,jivf ,
257 5 nvaux ,jpor ,jcvt ,jclose ,jplasol ,
258 6 irep ,iint ,igtyp ,israt ,isrot ,
259 7 icsen ,isorth ,isorthg ,ifailure,jsms )
260
261
262
263 nuvar_mat = iparg(81,ng)
264 nuvar_eos = iparg(82,ng)
266 IF (flag_mat_eos == 0 .OR. idx == 0) cycle
267 IF(flag_mat_eos == 1)THEN
268 IF(idx > nuvar_mat) cycle
269 ELSEIF (flag_mat_eos == 2)THEN
270 IF(idx > nuvar_eos) cycle
271 ENDIF
272 ENDIF
273 IF (
max(1,jmult) < nm) cycle
274 IF (jale+jeul == 0) cycle
275 IF (iparg(8,ng) == 1) cycle
276 IF (itrimat /= 0.AND.mtn /= 51) cycle
277 IF (jmult /= 0) mtn = iparg(24+nm,ng)
278 IF (
nvar == 10 .AND. (mtn == 37)) cycle
279 IF (
nvar == 10 .AND. mtn==51 .AND. itrimat == 0) cycle
280 IF (
nvar == 12 .AND. elbuf_str(ng)%GBUF%G_TEMP == 0) cycle
281
282 irs=iparg(15,ng)
283 ire=iparg(16,ng)
284 nel=llt
285
286
287
288
289 IF (
nvar == 2 .AND. irs == 1)
THEN
290 indx = idx
291 IF (itrimat > 0) THEN
292 add = m51_n0phas + (itrimat-1)*m51_nvphas + idx
293 add = add *llt
294 sig => elbuf_str(ng)%BUFLY(1)%MAT(1,1,1)%VAR(add+1:add+llt)
295 add = m51_n0phas + (itrimat-1)*m51_nvphas + 10
296 add = add *llt
297 vol => elbuf_str(ng)%BUFLY(1)%MAT(1,1,1)%VAR(add+1:add+llt)
298 indx = 1
299 ELSE
300 sig => elbuf_str(ng)%BUFLY(nm)%LBUF(1,1,1)%SIG(llt*(indx-1)+1:llt*idx)
301 vol => elbuf_str(ng)%BUFLY(nm)%LBUF(1,1,1)%VOL(1:llt)
302 ENDIF
303 IF (n2d == 0) THEN
304 tag22 => elbuf_str(ng)%GBUF%TAG22(1:llt)
305 CALL arezo3(ale_connect,sig,phi,flux(6*nft+1),vol,tag22)
306 ELSE
307 nfx = nft+(nm-1)*numelq
308 IF (nmult == 0) THEN
309 CALL arezo2(ale_connect,sig,phi,flux(4*nfx+1),vol)
310 ELSE
311 CALL brezo2(ale_connect,sig ,phi,flux(4*nfx+1),vol,bhole,nm)
312 ENDIF
313 ENDIF
314
315
316
317
318
319
320 ELSEIF (
nvar == 10 .AND. ire == 1)
THEN
321 IF (mtn == 41) cycle
322 indx = idx
323 vol => elbuf_str(ng)%BUFLY(nm)%LBUF(1,1,1)%VOL(1:llt)
324 IF (itrimat /= 0 .AND. itrimat /= 4)THEN
325 add0= m51_n0phas + (itrimat-1)*m51_nvphas
326 add = add0 + 15
327 k = llt*(add-1)
328 var =>elbuf_str(ng)%BUFLY(1)%MAT(1,1,1)%VAR(k+1:k+llt)
329 indx=1
330 ELSEIF (mtn == 5 .OR. mtn == 97 .OR. mtn==105 .OR. itrimat == 4) THEN
331 var => elbuf_str(ng)%BUFLY(nm)%LBUF(1,1,1)%TB(1:llt)
332 ELSEIF (mtn == 6) THEN
333 var => elbuf_str(ng)%BUFLY(nm)%LBUF(1,1,1)%RK(1:llt)
334 ELSEIF (mtn >= 28 .AND. mtn /= 67 .AND. mtn /= 49) THEN
335 var => elbuf_str(ng)%BUFLY(nm)%LBUF(1,1,1)%PLA(1:llt)
336 ELSE
337 var => elbuf_str(ng)%BUFLY(nm)%LBUF(1,1,1)%PLA(1:llt)
338 ENDIF
339 IF (n2d == 0) THEN
340 tag22 => elbuf_str(ng)%GBUF%TAG22(1:llt)
341 CALL arezo3(ale_connect,var,phi,flux(6*nft+1),vol,tag22)
342 ELSE
343 nfx=nft+(nm-1)*numelq
344 IF(nmult == 0)THEN
345 CALL arezo2(ale_connect,var,phi,flux(4*nfx+1),vol)
346 ELSE
347 CALL brezo2(ale_connect,var,phi,flux(4*nfx+1),vol,bhole,nm)
348 ENDIF
349 ENDIF
350
351
352
353
354 ELSEIF (
nvar == 11)
THEN
355 vol => elbuf_str(ng)%BUFLY(nm)%LBUF(1,1,1)%VOL(1:llt)
356 IF(flag_mat_eos == 1)THEN
357 var => elbuf_str(ng)%BUFLY(nm)%MAT(1,1,1)%VAR(llt*(idx-1)+1:llt*(idx))
358 ELSEIF (flag_mat_eos == 2)THEN
359 var => elbuf_str(ng)%BUFLY(nm)%EOS(1,1,1)%VAR(llt*(idx-1)+1:llt*(idx))
360 ENDIF
361 DO i=lft,llt
362 j = i+nft
363 phi(j) = var(i)
364 ENDDO
365 IF (n2d == 0) THEN
366 tag22 => elbuf_str(ng)%GBUF%TAG22(1:llt)
367 CALL arezo3(ale_connect,var,phi,flux(6*nft+1),vol,tag22)
368 ELSE
369 nfx=nft+(nm-1)*numelq
370 IF(nmult == 0)THEN
371 CALL arezo2(ale_connect,var,phi,flux(4*nfx+1),vol)
372 ELSE
373 CALL brezo2(ale_connect,var,phi,flux(4*nfx+1),vol,bhole,nm)
374 ENDIF
375 ENDIF
376
377
378
379
380
381 ELSEIF (
nvar == 12)
THEN
382 indx = idx
383 temp => elbuf_str(ng)%BUFLY(nm)%LBUF(1,1,1)%TEMP(1:llt)
384 vol => elbuf_str(ng)%BUFLY(nm)%LBUF(1,1,1)%VOL(1:llt)
385 IF (itrimat /= 0) THEN
386 add0= m51_n0phas + (itrimat-1)*m51_nvphas
387 add = add0 + 16
388 k = llt*(add-1)
389 temp =>elbuf_str(ng)%BUFLY(1)%MAT(1,1,1)%VAR(k+1:k+llt)
390 indx=1
391 ELSE
392 temp => elbuf_str(ng)%BUFLY(nm)%LBUF(1,1,1)%TEMP(1:llt)
393 vol => elbuf_str(ng)%BUFLY(nm)%LBUF(1,1,1)%VOL(1:llt)
394 ENDIF
395 IF (n2d == 0) THEN
396 tag22 => elbuf_str(ng)%GBUF%TAG22(1:llt)
397 CALL arezo3(ale_connect,temp,phi,flux(6*nft+1),vol,tag22)
398 ELSE
399 nfx=nft+(nm-1)*numelq
400 IF(nmult == 0)THEN
401 CALL arezo2(ale_connect,temp,phi,flux(4*nfx+1),vol)
402 ELSE
403 CALL brezo2(ale_connect,temp,phi,flux(4*nfx+1),vol,bhole,nm)
404 ENDIF
405 ENDIF
406
407 ENDIF
408 ENDDO
409 END DO
410
411 RETURN
subroutine brezo2(ale_connect, var, phi, flux, vol, bhole, nm)
subroutine arezo2(ale_connect, var, phi, flux, vol)
subroutine arezo3(ale_connect, var, phi, flux, vol, iad22)
subroutine initbuf(iparg, ng, mtn, llt, nft, iad, ity, npt, jale, ismstr, jeul, jtur, jthe, jlag, jmult, jhbe, jivf, mid, jpor, jcvt, jclose, jpla, irep, iint, igtyp, israt, isrot, icsen, isorth, isorthg, ifailure, jsms)
integer function nvar(text)
subroutine spmd_e1vois(phi, nercvois, nesdvois, lercvois, lesdvois, lencom)