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 IF(mtn == 51 .AND. (itrimat==0.OR.itrimat==4))cycle
128 ENDIF
129 IF (itrimat > 0 .AND. mtn /= 51) cycle
130 IF (jale+jeul == 0) cycle
131 IF (iparg(8,ng) == 1) cycle
132 IF (
max(1,jmult) < nm) cycle
133
134 IF (jmult /= 0) mtn=iparg(24+nm,ng)
135 IF (
nvar == 10 .AND. (mtn == 37)) cycle
136 IF (
nvar == 12 .AND. elbuf_str(ng)%GBUF%G_TEMP == 0) cycle
137
138 irs=iparg(15,ng)
139 ire=iparg(16,ng)
140 lft=1
141 nel=llt
142
143
144
145
146
147 IF (
nvar == 2 .AND. irs == 1)
THEN
148 IF (itrimat > 0 .AND. mtn == 51) THEN
149 add = m51_n0phas + (itrimat-1)*m51_nvphas + idx
150 add = add *llt
151 DO i=lft,llt
152 j = i+nft
153 phi(j) = elbuf_str(ng)%BUFLY(1)%MAT(1,1,1)%VAR(add+i)
154 END DO
155 ELSE
156 DO i=lft,llt
157 j = i+nft
158 k = (idx-1)*nel + i
159 phi(j) = elbuf_str(ng)%BUFLY(nm)%LBUF(1,1,1)%SIG(k)
160 ENDDO
161 ENDIF
162
163
164
165
166
167
168 ELSEIF (
nvar == 10 .AND. ire == 1)
THEN
169 IF (mtn == 41) cycle
170 IF (mtn==51) THEN
171 IF(itrimat==0)THEN
172 cycle
173 ELSEIF(itrimat <= 3)THEN
174 add0= m51_n0phas + (itrimat-1)*m51_nvphas
175 add = add0 + 15
176 k = llt*(add-1)
177 var => elbuf_str(ng)%BUFLY(1)%MAT(1,1,1)%VAR(k+1:k+llt)
178 ELSEIF(itrimat == 4)THEN
179 var => elbuf_str(ng)%BUFLY(nm)%LBUF(1,1,1)%TB(1:llt)
180 ENDIF
181 ELSEIF (mtn == 5 .OR. mtn ==97 .OR. mtn==105) THEN
182 var => elbuf_str(ng)%BUFLY(nm)%LBUF(1,1,1)%TB(1:llt)
183 ELSEIF (mtn == 6) THEN
184 var => elbuf_str(ng)%BUFLY(nm)%LBUF(1,1,1)%RK(1:llt)
185 ELSEIF (mtn >= 28 .AND. mtn /= 67 .AND. mtn /= 49) THEN
186 var => elbuf_str(ng)%BUFLY(nm)%LBUF(1,1,1)%PLA(1:llt)
187 ELSE
188 var => elbuf_str(ng)%BUFLY(nm)%LBUF(1,1,1)%PLA(1:llt)
189 ENDIF
190 DO i=lft,llt
191 j = i+nft
192 phi(j) = var(i)
193 ENDDO
194
195
196
197
198 ELSEIF (
nvar == 11)
THEN
199 IF( flag_mat_eos == 1 ) THEN
200
201 var => elbuf_str(ng)%BUFLY(nm)%MAT(1,1,1)%VAR(llt*(idx-1)+1:llt*(idx))
202 DO i=lft,llt
203 j = i+nft
204 phi(j) = var(i)
205 ENDDO
206 ELSEIF( flag_mat_eos == 2 )THEN
207
208 IF(itrimat == 0) THEN
209 var => elbuf_str(ng)%BUFLY(nm)%EOS(1,1,1)%VAR(llt*(idx-1)+1:llt*(idx))
210 ELSEIF(itrimat /= 4)THEN
211 add0= m51_n0phas + (itrimat-1)*m51_nvphas
212 add = add0 + 23 + idx
213 k = llt*(add-1)
214 var => elbuf_str(ng)%BUFLY(1)%MAT(1,1,1)%VAR(k+1:k+llt)
215 ENDIF
216 DO i=lft,llt
217 j = i+nft
218 phi(j) = var(i)
219 ENDDO
220 ENDIF
221
222
223
224
225 ELSEIF (
nvar == 12)
THEN
226
227 IF (mtn == 51) THEN
228 IF(itrimat == 0)THEN
229 cycle
230 ELSE
231 add0= m51_n0phas + (itrimat-1)*m51_nvphas
232 add = add0 + 16
233 k = llt*(add-1)
234 var => elbuf_str(ng)%BUFLY(1)%MAT(1,1,1)%VAR(k+1:k+llt)
235 ENDIF
236 ELSE
237 var => elbuf_str(ng)%BUFLY(nm)%LBUF(1,1,1)%TEMP(1:llt)
238 ENDIF
239 DO i=lft,llt
240 j = i+nft
241 phi(j) = var(i)
242 ENDDO
243
244
245
246 ELSE
247 DO i=lft,llt
248 j=i+nft
249 phi(j)=zero
250 ENDDO
251 ENDIF
252 ENDDO
253
255
256
257
258
259 IF (nspmd > 1)THEN
260
261 CALL spmd_e1vois(phi,nercvois,nesdvois,lercvois,lesdvois,lencom )
262
263 END IF
264
265
266
267
268
269
270 DO ng=itask+1,ngroup,nthread
271
272 IF (iparg(76, ng) == 1) cycle
274 2 mtn ,llt ,nft ,iad ,ity ,
275 3 npt ,jale ,ismstr ,jeul ,jtur ,
276 4 jthe ,jlag ,jmult ,jhbe ,jivf ,
277 5 nvaux ,jpor ,jcvt ,jclose ,jplasol ,
278 6 irep ,iint ,igtyp ,israt ,isrot ,
279 7 icsen ,isorth ,isorthg ,ifailure,jsms )
280
281
282
283 nuvar_mat = iparg(81,ng)
284 nuvar_eos = iparg(82,ng)
286 IF (flag_mat_eos == 0 .OR. idx == 0) cycle
287 IF(flag_mat_eos == 1)THEN
288 IF(idx > nuvar_mat) cycle
289 ELSEIF (flag_mat_eos == 2)THEN
290 IF(idx > nuvar_eos) cycle
291 ENDIF
292 IF(mtn == 51 .AND. (itrimat==0.OR.itrimat==4))cycle
293 ENDIF
294 IF (
max(1,jmult) < nm) cycle
295 IF (jale+jeul == 0) cycle
296 IF (iparg(8,ng) == 1) cycle
297 IF (itrimat /= 0.AND.mtn /= 51) cycle
298 IF (jmult /= 0) mtn = iparg(24+nm,ng)
299 IF (
nvar == 10 .AND. (mtn == 37)) cycle
300 IF (
nvar == 10 .AND. mtn==51 .AND. itrimat == 0) cycle
301 IF (
nvar == 12 .AND. elbuf_str(ng)%GBUF%G_TEMP == 0) cycle
302
303
304 irs=iparg(15,ng)
305 ire=iparg(16,ng)
306 nel=llt
307
308
309
310
311 IF (
nvar == 2 .AND. irs == 1)
THEN
312 indx = idx
313 IF (itrimat > 0) THEN
314 add = m51_n0phas + (itrimat-1)*m51_nvphas + idx
315 add = add *llt
316 sig => elbuf_str(ng)%BUFLY(1)%MAT(1,1,1)%VAR(add+1:add+llt)
317 add = m51_n0phas + (itrimat-1)*m51_nvphas + 10
318 add = add *llt
319 vol => elbuf_str(ng)%BUFLY(1)%MAT(1,1,1)%VAR(add+1:add+llt)
320 indx = 1
321 ELSE
322 sig => elbuf_str(ng)%BUFLY(nm)%LBUF(1,1,1)%SIG(llt*(indx-1)+1:llt*idx)
323 vol => elbuf_str(ng)%BUFLY(nm)%LBUF(1,1,1)%VOL(1:llt)
324 ENDIF
325 IF (n2d == 0) THEN
326 tag22 => elbuf_str(ng)%GBUF%TAG22(1:)
327 CALL arezo3(ale_connect,sig,phi,flux(6*nft+1),vol,tag22)
328 ELSE
329 nfx = nft+(nm-1)*numelq
330 IF (nmult == 0) THEN
331 CALL arezo2(ale_connect,sig,phi,flux(4*nfx+1),vol)
332 ELSE
333 CALL brezo2(ale_connect,sig ,phi,flux(4*nfx+1),vol,bhole,nm)
334 ENDIF
335 ENDIF
336
337
338
339
340
341
342 ELSEIF (
nvar == 10 .AND. ire == 1)
THEN
343 IF (mtn == 41) cycle
344 indx = idx
345 vol => elbuf_str(ng)%BUFLY(nm)%LBUF(1,1,1)%VOL(1:llt)
346 IF (itrimat /= 0 .AND. itrimat /= 4)THEN
347 add0= m51_n0phas + (itrimat-1)*m51_nvphas
348 add = add0 + 15
349 k = llt*(add-1)
350 var =>elbuf_str(ng)%BUFLY(1)%MAT(1,1,1)%VAR(k+1:k+llt)
351 add0= m51_n0phas + (itrimat-1)*m51_nvphas
352 add = add0 + 11
353 k = llt*(add-1)
354 vol =>elbuf_str(ng)%BUFLY(1)%MAT(1,1,1)%VAR(k+1:k+llt)
355 indx=1
356 ELSEIF (mtn == 5 .OR. mtn == 97 .OR. mtn==105 .OR. itrimat == 4) THEN
357 var => elbuf_str(ng)%BUFLY(nm)%LBUF(1,1,1)%TB(1:llt)
358 ELSEIF (mtn == 6) THEN
359 var => elbuf_str(ng)%BUFLY(nm)%LBUF(1,1,1)%RK(1:llt)
360 ELSEIF (mtn >= 28 .AND. mtn /= 67 .AND. mtn /= 49) THEN
361 var => elbuf_str(ng)%BUFLY(nm)%LBUF(1,1,1)%PLA(1:llt)
362 ELSE
363 IF(mtn==51 .AND. itrimat == 0)cycle
364 var => elbuf_str(ng)%BUFLY(nm)%LBUF(1,1,1)%PLA(1:llt)
365 ENDIF
366 IF (n2d == 0) THEN
367 tag22 => elbuf_str(ng)%GBUF%TAG22(1:)
368 CALL arezo3(ale_connect,var,phi,flux(6*nft+1),vol,tag22)
369 ELSE
370 nfx=nft+(nm-1)*numelq
371 IF(nmult == 0)THEN
372 CALL arezo2(ale_connect,var,phi,flux(4*nfx+1),vol)
373 ELSE
374 CALL brezo2(ale_connect,var,phi,flux(4*nfx+1),vol,bhole,nm)
375 ENDIF
376 ENDIF
377
378
379
380
381 ELSEIF (
nvar == 11)
THEN
382
383 IF (itrimat /= 0) THEN
384 IF(itrimat /=4)THEN
385
386 add0= m51_n0phas + (itrimat-1)*m51_nvphas
387 add = add0 + 11
388 k = llt*(add-1)
389 vol =>elbuf_str(ng)%BUFLY(1)%MAT(1,1,1)%VAR(k+1:k+llt)
390
391 add0= m51_n0phas + (itrimat-1)*m51_nvphas
392 add = add0 + 24 + idx
393 k = llt*(add-1)
394 var =>elbuf_str(ng)%BUFLY(1)%MAT(1,1,1)%VAR(k+1:k+llt)
395 indx=1
396 ENDIF
397 ELSE
398 vol => elbuf_str(ng)%BUFLY(nm)%LBUF(1,1,1)%VOL(1:llt)
399 IF(flag_mat_eos == 1)THEN
400 var => elbuf_str(ng)%BUFLY(nm)%MAT(1,1,1)%VAR(llt*(idx-1)+1:llt*(idx))
401 ELSEIF (flag_mat_eos == 2)THEN
402 var => elbuf_str(ng)%BUFLY(nm)%EOS(1,1,1)%VAR(llt*(idx-1)+1:llt*(idx))
403 ENDIF
404 ENDIF
405
406 DO i=lft,llt
407 j = i+nft
408 phi(j) = var(i)
409 ENDDO
410 IF (n2d == 0) THEN
411 tag22 => elbuf_str(ng)%GBUF%TAG22(1:llt)
412 CALL arezo3(ale_connect,var,phi,flux(6*nft+1),vol,tag22)
413 ELSE
414 nfx=nft+(nm-1)*numelq
415 IF(nmult == 0)THEN
416 CALL arezo2(ale_connect,var,phi,flux(4*nfx+1),vol)
417 ELSE
418 CALL brezo2(ale_connect,var,phi,flux(4*nfx+1),vol,bhole,nm)
419 ENDIF
420 ENDIF
421
422
423
424
425
426 ELSEIF (
nvar == 12)
THEN
427 indx = idx
428 temp => elbuf_str(ng)%BUFLY(nm)%LBUF(1,1,1)%TEMP(1:llt)
429 IF (itrimat /= 0) THEN
430 add0= m51_n0phas + (itrimat-1)*m51_nvphas
431 add = add0 + 11
432 k = llt*(add-1)
433 vol =>elbuf_str(ng)%BUFLY(1)%MAT(1,1,1)%VAR(k+1:k+llt)
434 add = add0 + 16
435 k = llt*(add-1)
436 temp =>elbuf_str(ng)%BUFLY(1)%MAT(1,1,1)%VAR(k+1:k+llt)
437 indx=1
438 ELSE
439 IF(mtn == 51 .AND. itrimat == 0)cycle
440 temp => elbuf_str(ng)%BUFLY(nm)%LBUF(1,1,1)%TEMP(1:llt)
441 vol => elbuf_str(ng)%BUFLY(nm)%LBUF(1,1,1)%VOL(1:llt)
442 ENDIF
443 IF (n2d == 0) THEN
444 tag22 => elbuf_str(ng)%GBUF%TAG22(1:)
445 CALL arezo3(ale_connect,temp,phi,flux(6*nft+1),vol,tag22)
446 ELSE
447 nfx=nft+(nm-1)*numelq
448 IF(nmult == 0)THEN
449 CALL arezo2(ale_connect,temp,phi,flux(4*nfx+1),vol)
450 ELSE
451 CALL brezo2(ale_connect,temp,phi,flux(4*nfx+1),vol,bhole,nm)
452 ENDIF
453 ENDIF
454
455 ENDIF
456 ENDDO
457 END DO
458
459 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)