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