62
63
64
67 USE elbufdef_mod
73 USE multimat_param_mod , ONLY : m51_n0phas, m51_nvphas
74
75
76
77#include "implicit_f.inc"
78
79
80
81#include "spmd_c.inc"
82#include "com01_c.inc"
83#include "com04_c.inc"
84#include "vect01_c.inc"
85#include "param_c.inc"
86#include "task_c.inc"
87#include "inter22.inc"
88
89
90
91 my_real pm(npropm,nummat), x(3,numnod),
92 . flux(nv46,*), flu2(*),
93 .
alpha(*), flux_sav(nv46,*), qmv(2*nv46,*)
94
95 INTEGER IPARG(NPARG,NGROUP), IXS(NIXS,NUMELS), IXQ(7,NUMELQ)
96 INTEGER ITASK,ITRIMAT,LENCOM,ADD,NERCVOIS(*),NESDVOIS(*),LERCVOIS(*),LESDVOIS(*), ITAB(NUMNOD),ITABM1(*)
97
98 TYPE(ELBUF_STRUCT_), TARGET, DIMENSION(NGROUP) :: ELBUF_TAB
99 TYPE(t_segvar), INTENT(IN) :: SEGVAR
100 TYPE(t_ale_connectivity), INTENT(IN) :: ALE_CONNECT
101
102
103
104 my_real,
DIMENSION(:)POINTER :: uvar,volg,volp,pddvol
105 INTEGER NG, I, K, II, NF1, NFIRST, NLAST, NV46, LLT_
106 INTEGER :: IB, IE, NIN, NBF, NBL, K0, , IBM, J, IE_M, IDLOC, IPOS, ICELL, NCELL, MCELL, , J1, J2, IBV
108 TYPE(BUF_MAT_) ,POINTER :: MBUF
109
110
111
112 IF(itask == 0)THEN
113 IF (n2d == 0) THEN
115 ALLOCATE(flux_vois(numels+nsvois,nv46))
116 ELSE
117 ALLOCATE(
n4_vois(numelq+nqvois,4))
118 ALLOCATE(flux_vois(numelq+nqvois,nv46))
119 ENDIF
120 END IF
121
122
124
125
126
127
128
129 DO ng=itask+1,ngroup,nthread
130
131 IF (iparg(76, ng) == 1) cycle
133 2 mtn ,llt ,nft ,iad ,ity ,
134 3 npt ,jale
135 4 jthe ,jlag ,jmult ,jhbe ,jivf ,
136 5 nvaux ,jpor ,jcvt ,jclose ,jplasol ,
137 6 irep ,iint ,igtyp ,israt ,isrot ,
138 7 icsen ,isorth ,isorthg ,ifailure,jsms )
139 IF(jale+jeul == 0) cycle
140 IF(iparg(8,ng) == 1) cycle
141 IF(iparg(1,ng) /= 51) cycle
142 volg => elbuf_tab(ng)%GBUF%VOL
143 uvar => elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR
144 lft=1
145 add = m51_n0phas + (itrimat-1)*m51_nvphas
146 add = add + 11
147 k = llt*(add-1)
148 volp => uvar(k+1:k+llt)
149 DO i=lft,llt
150 ii = i+nft
151 alpha(ii) = volp(i)/volg(i)
153 ENDDO
154 DO k=1,nv46
155 DO ii=nft+lft,nft+llt
156 flux(k,ii)=flux_sav(k,ii)
157 ENDDO
158 ENDDO
159 IF(itrimat == 1)THEN
160 DO k=1,nv46
161 DO ii=nft+lft,nft+llt
162 qmv(k,ii) = zero
163 ENDDO
164 ENDDO
165 ENDIF
166 ENDDO
167
168
169 IF(int22 /= 0)THEN
170 nin = 1
171 nbf = 1+itask*
nb/nthread
172 nbl = (itask+1)*
nb/nthread
174 tnb = nbl-nbf+1
175 DO ib=nbf,nbl
178 icell = 0
180 DO WHILE (icell <= ncell)
181 icell = icell +1
182 IF (icell>ncell .AND. ncell /= 0)icell=9
183
184 j =
brick_list(nin,ib)%POLY(icell)%WhereIsMain(1)
185 IF(j==0)THEN
186 ie_m = ie
187 ibm = ib
188 ELSEIF(j <= nv46)THEN
191 ELSE
192 j1 = j/10
193 j2 = mod(j,10)
194 ibv =
brick_list(nin,ib )%Adjacent_Brick(j1,4)
195 ibm =
brick_list(nin,ibv)%Adjacent_Brick(j2,4)
196 ie_m =
brick_list(nin,ibv)%Adjacent_Brick(j2,1)
197 ENDIF
200 mtn = iparg(1,ng)
201 IF(mtn == 51)THEN
202 mbuf => elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)
203 llt_ = iparg(2,ng)
204
205 brick_list(nin,ib)%POLY(icell)%FACE(1:6)%Adjacent_UpwFLUX(1)=
brick_list(nin,ib)%POLY(icell)%FACE(1:6)%Adjacent_FLUX(1)
206 brick_list(nin,ib)%POLY(icell)%FACE(1:6)%Adjacent_UpwFLUX(2)=
brick_list(nin,ib)%POLY(icell)%FACE(1:6)%Adjacent_FLUX(2)
207 brick_list(nin,ib)%POLY(icell)%FACE(1:6)%Adjacent_UpwFLUX(3)=
brick_list(nin,ib)%POLY(icell)%FACE(1:6)%Adjacent_FLUX(3)
208 brick_list(nin,ib)%POLY(icell)%FACE(1:6)%Adjacent_UpwFLUX(4)=
brick_list(nin,ib)%POLY(icell)%FACE(1:6)%Adjacent_FLUX(4)
209 brick_list(nin,ib)%POLY(icell)%FACE(1:6)%Adjacent_UpwFLUX(5)=
brick_list(nin,ib)%POLY(icell)%FACE(1:6)%Adjacent_FLUX(5)
210
211 ipos = 1
212 k0 = ((m51_n0phas + (itrimat-1)*m51_nvphas )+ipos-1)
213 k1 = k0 * llt_
214 vfrac = mbuf%VAR(k1+idloc)
215 vfrac =
max(zero,
min(one,vfrac))
216 brick_list(nin,ib)%POLY(icell)%VFRACm(itrimat)= vfrac
217 ENDIF
218 enddo
219 enddo
220 endif
221
223
224
225 IF(nspmd > 1)THEN
226
228
229 ENDIF
230
231
232
233
234 IF(nspmd > 1)THEN
235 IF (n2d == 0) THEN
236 nfirst = 1+itask*(numels+numelq)/nthread
237 nlast = (itask+1)*(numels+numelq)/nthread
238 ELSE
239 nfirst = 1+itask*(numelq)/nthread
240 nlast = (itask+1)*(numelq)/nthread
241 ENDIF
243 DO i=1,nv46
244 flux_vois(nfirst:nlast,i) = -ep20
245 ENDDO
246
248
249 ENDIF
250
251
252
253
254 DO ng=itask+1,ngroup,nthread
255
256 IF (iparg(76, ng) == 1) cycle
258 2 mtn ,llt ,nft ,iad ,ity ,
259 3 npt ,jale ,ismstr ,jeul ,jtur ,
260 4 jthe ,jlag ,jmult ,jhbe ,jivf ,
261 5 nvaux ,jpor ,jcvt ,jclose ,jplasol ,
262 6 irep ,iint ,igtyp ,israt ,isrot ,
263 7 icsen ,isorth ,isorthg ,ifailure,jsms )
264
265
266
267 IF(jale+jeul == 0) cycle
268 IF(iparg(8,ng) == 1) cycle
269 IF(iparg(1,ng) /= 51) cycle
270
271
272
273
274 lft=1
275 volg => elbuf_tab(ng)%GBUF%VOL
276 IF(n2d == 0)THEN
279 . itab, nv46 , itrimat,segvar)
280 ELSE
282 . itab, nv46 , itrimat, segvar)
283 ENDIF
284 ELSE
287 . itab, nv46 , itrimat,segvar)
288 ELSE
290 .
n4_vois,itab ,itrimat,segvar)
291 ENDIF
292 ENDIF
293 ENDDO
294
295 IF(int22 /= 0)THEN
297 . nv46, elbuf_tab,itask,
alpha)
298 ENDIF
299
300
302
303
304 IF(nspmd > 1)THEN
305
306 IF (n2d == 0) THEN
307 CALL spmd_e6vois(flux_vois,nercvois,nesdvois,lercvois,lesdvois,lencom)
309 ELSE
310 CALL spmd_e4vois(flux_vois,nercvois,nesdvois,lercvois,lesdvois,lencom)
312 ENDIF
313
314 ENDIF
315
316
317
318
319 DO ng=itask+1,ngroup,nthread
320
321 IF (iparg(76, ng) == 1) cycle
323 2 mtn ,llt ,nft ,iad ,ity ,
324 3 npt ,jale ,ismstr ,jeul ,jtur ,
325 4 jthe ,jlag ,jmult ,jhbe ,jivf ,
326 5 nvaux ,jpor ,jcvt ,jclose ,jplasol ,
327 6 irep ,iint ,igtyp ,israt ,isrot ,
328 7 icsen ,isorth ,isorthg ,ifailure,jsms )
329
330
331
332 IF(jale+jeul == 0) cycle
333 IF(iparg(8,ng) == 1) cycle
334 IF(iparg(1,ng) /= 51) cycle
335
336 lft = 1
337 nf1 = nft+1
338 uvar => elbuf_tab(ng)%BUFLY(1)%MAT(1,1,1)%VAR
339 add = (m51_n0phas + (itrimat-1)*m51_nvphas+12)*llt
340 pddvol => uvar(add+1:add+llt)
341
342
343
344
345 IF(n2d == 0)THEN
346 IF(nspmd > 1)THEN
348 . flux_vois,
n4_vois,itabm1 ,nv46)
349 ENDIF
351 . itrimat,pddvol,qmv(1,nf1),1,
352 . nv46)
353 ELSE
354 IF(nspmd > 1)THEN
356 . flux_vois,
n4_vois, itabm1,nv46)
357 ENDIF
359 . itrimat,pddvol,qmv(1,nf1),1)
360 ENDIF
361 ENDDO
362
363 IF(int22 /= 0)THEN
365 . iparg, elbuf_tab, itask )
366 ENDIF
367
368
370
371
372 IF(itask == 0)THEN
374 DEALLOCATE(flux_vois)
375 END IF
376
377 RETURN
subroutine ale51_antidiff2(flux, ale_connect, alph, vol, ixq, flux_vois, n4_vois, itab, itrimat, segvar)
subroutine ale51_antidiff3(flux, ale_connect, alph, vol, ixs, flux_vois, n4_vois, itab, nv46, itrimat, segvar)
subroutine ale51_antidiff3_int22(flux, itrimat, ixs, nv46, elbuf_tab, itask, vfrac)
subroutine ale51_spmd2(ixq, flux, ale_connect, flux_vois, n4_vois, itabm1, nv46)
subroutine ale51_spmd3(ixs, flux, ale_connect, flux_vois, n4_vois, itabm1, nv46)
subroutine ale51_upwind2(pm, x, ixq, flux, flu1, ale_connect, itrimat, ddvol, qmv, iflg)
subroutine ale51_upwind3(pm, ixs, flux, flu1, ale_connect, itrimat, ddvol, qmv, iflg, nv46)
subroutine ale51_upwind3_int22(pm, ixs, itrimat, iflg, iparg, elbuf_tab, itask)
subroutine alemuscl_upwind2(flux, ale_connect, x, ixq, flux_vois, n4_vois, itab, nv46, itrimat, segvar)
subroutine alemuscl_upwind(flux, ale_connect, x, ixs, flux_vois, n4_vois, itab, nv46, itrimat, segvar)
type(alemuscl_param_) alemuscl_param
type(brick_entity), dimension(:,:), allocatable, target brick_list
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, dimension(:,:), allocatable n4_vois
subroutine spmd_e4vois(phi, nercvois, nesdvois, lercvois, lesdvois, lencom)
subroutine spmd_i8vois(phi, nercvois, nesdvois, lercvois, lesdvois, lencom)
subroutine spmd_i4vois(phi, nercvois, nesdvois, lercvois, lesdvois, lencom)
subroutine spmd_e6vois(phi, nercvois, nesdvois, lercvois, lesdvois, lencom)
subroutine spmd_e1vois(phi, nercvois, nesdvois, lercvois, lesdvois, lencom)