68
69
70
71 USE timer_mod
73 USE elbufdef_mod
74 USE multi_fvm_mod
77 USE ebcs_mod
80 USE matparam_def_mod, ONLY : matparam_struct_
82 USE output_mod , ONLY : output_
83 use element_mod , only : nixs,nixq,nixtg
84
85
86
87#include "implicit_f.inc"
88#include "comlock.inc"
89
90
91
92#include "com01_c.inc"
93#include "com04_c.inc"
94#include "param_c.inc"
95#include "task_c.inc"
96#include "mvsiz_p.inc"
97#include "tabsiz_c.inc"
98
99
100
101 TYPE(TIMER_), INTENT(INOUT) :: TIMERS
102 TYPE(MATPARAM_STRUCT_),DIMENSION(NUMMAT),INTENT(IN) :: MATPARAM
104 my_real,
INTENT(IN) :: timestep
105 TYPE(ELBUF_STRUCT_), TARGET, DIMENSION(NGROUP) :: ELBUF_TAB
106 INTEGER, INTENT(IN) :: IPARG(NPARG, *), IADS(8, *)
107 INTEGER, INTENT(IN) :: ITASK
108 INTEGER, INTENT(IN), TARGET :: IXS(NIXS, *), IXQ(NIXQ, *), IXTG(NIXTG, *)
109 INTEGER, INTENT(IN) :: IPM(NPROPMI, *)
110 my_real,
INTENT(IN) :: pm(npropm, *)
111 TYPE(MULTI_FVM_STRUCT), INTENT(INOUT) :: MULTI_FVM
112
113 INTEGER, INTENT(IN) :: ID_GLOBAL_VOIS(*),FACE_VOIS(*)
115 my_real,
INTENT(IN) :: wgrid(3, *)
116 my_real,
INTENT(INOUT) :: xgrid(3, *), dnod(3, *)
117 INTEGER, INTENT(IN) :: NALE(*)
118 my_real,
INTENT(INOUT) :: partsav(npsav, *), gresav(*)
119 INTEGER, INTENT(IN) :: IPARTS(*), IGRTH(*), GRTH(*)
120 INTEGER, INTENT(IN) :: NERCVOIS(*), NESDVOIS(*), LERCVOIS(*), LESDVOIS(*)
121 INTEGER, INTENT(IN) :: ITAB(*), ITABM1(*)
122 my_real,
INTENT(IN) :: current_time
123 my_real,
INTENT(INOUT) :: fskym(*), stifn(*), fsky(*),
124 . condn(*), condnsky(*), bufmat(*)
125 LOGICAL, INTENT(IN) :: PRED
126 my_real,
INTENT(IN) :: func_value(*)
127 TYPE(t_ebcs_tab), INTENT(IN) :: EBCS_TAB
128 TYPE(t_ale_connectivity), INTENT(IN) :: ALE_CONNECTIVITY
129 INTEGER, INTENT(IN) :: NPF(SNPC)
131 DOUBLE PRECISION,INTENT(INOUT) :: WFEXT
132 TYPE(OUTPUT_), INTENT(INOUT) :: OUTPUT
133
134
135
136 INTEGER :: NG, NEL, II, I
137 INTEGER :: LOCAL_MATID
138 INTEGER :: NBMAT, IMAT, NIX
139 INTEGER :: LENCOM
140 INTEGER :: NODE_ID
141 INTEGER, DIMENSION(:, :), POINTER :: IX
142 INTEGER :: MATLAW, NFT, ITY, ELEMTYP
145 TYPE(G_BUFEL_), POINTER :: GBUF
146
147
148
149 IF (iale /= 0 .AND. .NOT. pred) THEN
150 DO node_id = 1 + itask, numnod, nthread
151 vdt = half * timestep * wgrid(1, node_id)
152 dnod(1, node_id) = dnod(1, node_id) + vdt
153 xgrid(1, node_id) = xgrid(1, node_id) + vdt
154
155 vdt = half * timestep * wgrid(2,node_id)
156 dnod(2, node_id) = dnod(2, node_id) + vdt
157 xgrid(2, node_id) = xgrid(2, node_id) + vdt
158
159 vdt = half * timestep * wgrid(3,node_id)
160 dnod(3, node_id) = dnod(3, node_id) + vdt
161 xgrid(3, node_id) = xgrid(3, node_id) + vdt
162 ENDDO
163 ENDIF
164
166
167
168
169 IF (iale /= 0) THEN
170
172 ENDIF
174
175
176
177 IF (nspmd > 1) THEN
178
179 lencom = nercvois(nspmd + 1) + nesdvois(nspmd + 1)
180
182 . nercvois, nesdvois, lercvois, lesdvois, lencom)
184 . nercvois, nesdvois, lercvois, lesdvois, lencom)
186 . nercvois, nesdvois, lercvois, lesdvois, lencom)
187
189 . nercvois, nesdvois, lercvois, lesdvois, lencom)
191 . nercvois, nesdvois, lercvois, lesdvois, lencom)
193 . nercvois, nesdvois, lercvois, lesdvois, lencom)
194
196 . nercvois, nesdvois, lercvois, lesdvois, lencom)
197
199 . nercvois, nesdvois, lercvois, lesdvois, lencom)
200
201 IF (multi_fvm%NBMAT > 1) THEN
202 CALL spmd_envois(multi_fvm%NBMAT, multi_fvm%PHASE_ALPHA,
203 . nercvois, nesdvois, lercvois, lesdvois, lencom)
204 CALL spmd_envois(multi_fvm%NBMAT, multi_fvm%PHASE_RHO,
205 . nercvois, nesdvois, lercvois, lesdvois, lencom)
206 CALL spmd_envois(multi_fvm%NBMAT, multi_fvm%PHASE_EINT,
207 . nercvois, nesdvois, lercvois, lesdvois, lencom)
208 CALL spmd_envois(multi_fvm%NBMAT, multi_fvm%PHASE_PRES,
209 . nercvois, nesdvois, lercvois, lesdvois, lencom)
210 ENDIF
211
212 IF (multi_fvm%MUSCL > 0) THEN
213 IF (iale /= 0) THEN
215 . nercvois, nesdvois, lercvois, lesdvois, lencom)
216 ENDIF
217
218
220 . nercvois, nesdvois, lercvois, lesdvois, lencom)
221 ENDIF
222
224 ENDIF
225
226
227
228
229
230
231 IF (multi_fvm%MUSCL > 0) THEN
233 . pm, ipm, multi_fvm, ale_connectivity, wgrid, xgrid, itab, multi_fvm%NBMAT,
234 . current_time, bufmat)
235 ENDIF
237
238
239 IF (nspmd > 1 .AND. multi_fvm%MUSCL > 0) THEN
240
242 lencom = nercvois(nspmd + 1) + nesdvois(nspmd + 1)
243 IF (multi_fvm%MUSCL == 1) THEN
244
246 . nercvois, nesdvois, lercvois, lesdvois, lencom)
248 . nercvois, nesdvois, lercvois, lesdvois, lencom)
250 . nercvois, nesdvois, lercvois, lesdvois, lencom)
251 ENDIF
252
253 IF (multi_fvm%NBMAT == 1) THEN
254 IF (multi_fvm%MUSCL == 1) THEN
256 . nercvois, nesdvois, lercvois, lesdvois, lencom)
258 . nercvois, nesdvois, lercvois, lesdvois, lencom)
259 ENDIF
260 ELSE
261 CALL spmd_envois(3 * multi_fvm%NBMAT, multi_fvm%PHASE_GRAD_ALPHA,
262 . nercvois, nesdvois, lercvois, lesdvois, lencom)
263 IF (multi_fvm%MUSCL == 1) THEN
264 CALL spmd_envois(3 * multi_fvm%NBMAT, multi_fvm%PHASE_GRAD_RHO,
265 . nercvois, nesdvois, lercvois, lesdvois, lencom)
266 CALL spmd_envois(3 * multi_fvm%NBMAT, multi_fvm%PHASE_GRAD_PRES,
267 .
268 ENDIF
269 ENDIF
271
273 ENDIF
274
275 DO ng = itask + 1, ngroup, nthread
276 matlaw = iparg(1, ng)
277 IF (matlaw == 151) THEN
278 nel = iparg(2, ng)
279 nft = iparg(3, ng)
280 ity = iparg(5, ng)
281 gbuf => elbuf_tab(ng)%GBUF
282 IF (multi_fvm%MUSCL > 0) THEN
284 . pm, ipm, multi_fvm, ale_connectivity, wgrid, xgrid, itab,
285 . multi_fvm%NBMAT, current_time, bufmat,
286 . id_global_vois,face_vois,npf,tf,ispmd, matparam)
287 ELSE
289 . pm, ipm, multi_fvm, ale_connectivity, wgrid, xgrid, itab,
290 . multi_fvm%NBMAT, current_time, bufmat,
291 . id_global_vois,npf,tf)
292 ENDIF
293 ENDIF
294 ENDDO
295
296
297
298
299 IF (ebcs_tab%nebcs_fvm > 0) THEN
301 CALL multi_ebcs(itask, multi_fvm, ixs, ixq, ixtg, xgrid, wgrid, ipm, pm, func_value,
302 . ebcs_tab,npf,tf,fsavsurf,nsurf,timestep,
303 . numels, numelq, numeltg, numnod, ncycle, nummat, matparam, output, pred)
305 ENDIF
306
307
308
309 IF (iale /= 0 .AND. .NOT. pred) THEN
310 DO node_id = 1 + itask, numnod, nthread
311 vdt = half * timestep * wgrid(1, node_id)
312 dnod(1, node_id) = dnod(1, node_id) + vdt
313 xgrid(1, node_id) = xgrid(1, node_id) + vdt
314
315 vdt = half * timestep * wgrid(2,node_id)
316 dnod(2, node_id) = dnod(2, node_id) + vdt
317 xgrid(2, node_id) = xgrid(2, node_id) + vdt
318
319 vdt = half * timestep * wgrid(3,node_id)
320 dnod(3, node_id) = dnod(3, node_id) + vdt
321 xgrid(3, node_id) = xgrid(3, node_id) + vdt
322 ENDDO
323 ENDIF
324
326
327
328 nbmat = multi_fvm%NBMAT
329
330 DO ng = itask + 1, ngroup, nthread
331 matlaw = iparg(1, ng)
332 IF (matlaw == 151) THEN
333
334
335
337 . iparg, itask, ixs, ixq, ixtg, multi_fvm,
alefvm_buffer%VERTEX, wfext)
338 IF (nbmat > 1) THEN
339
340
341
343 . iparg, itask, ixs, ixq, ixtg, multi_fvm,
345 ENDIF
346 ENDIF
347 ENDDO
348
349 DO ng = itask + 1, ngroup, nthread
350 matlaw = iparg(1, ng)
351 IF (matlaw == 151) THEN
352 nel = iparg(2, ng)
353 nft = iparg(3, ng)
354 ity = iparg(5, ng)
355 gbuf => elbuf_tab(ng)%GBUF
356
357
358
359 volnew(1:mvsiz) = zero
361 . elbuf_tab, ixs, ixq, ixtg, volnew, xgrid)
362
363
364
366 . partsav, iparts, gresav, igrth, grth, volnew(1:nel), pred, timestep)
367
368 IF (multi_fvm%SYM == 0) THEN
369 ix => ixs(1:nixs, 1 + nft:nel + nft)
370 nix = nixs
371 elemtyp = 0
372 ELSEIF (ity == 2) THEN
373
374 ix => ixq(1:nixq, 1 + nft:nel + nft)
375 nix = nixq
376 elemtyp = 1
377 ELSEIF (ity == 7) THEN
378
379 ix => ixtg(1:nixtg, 1 + nft:nel + nft)
380 nix = nixtg
381 elemtyp = 2
382 ENDIF
383
384 DO ii = 1, nel
385 i = ii + nft
386 IF (multi_fvm%RHO(i) <= zero) THEN
387 IF (elemtyp == 0) THEN
388 CALL ancmsg(msgid = 167, anmode = aninfo, i1 = ix(nix, ii),
389 . r1 = multi_fvm%RHO(i))
390 ELSE
391 CALL ancmsg(msgid = 12, anmode = aninfo, i1 = ix(nix, ii),
392 . r1 = multi_fvm%RHO(i))
393 ENDIF
395 ENDIF
396 ENDDO
397
398 IF (nbmat > 1) THEN
399
400
401
402 DO imat = 1, nbmat
403 local_matid = ipm(20 + imat, ix(1, 1))
405 . elbuf_tab, iparg, itask, multi_fvm, volnew)
406 ENDDO
407 ENDIF
408
409
410
411 IF (.NOT. pred) THEN
412 DO ii = 1, nel
413 gbuf%VOL(ii) = volnew(ii)
414 ENDDO
415 IF (multi_fvm%NS_DIFF) THEN
416 DO ii = 1, nel
417 i = ii + nft
418 multi_fvm%VOL(i) = volnew(ii)
419 ENDDO
420 ENDIF
421 ENDIF
422 ENDIF
423 ENDDO
424
426
subroutine accele(a, ar, v, ms, in, size_nale, nale, ms_2d, size_npby, npby)
subroutine multi_computevolume(nel, ng, iparg, sym, elbuf_tab, ixs, ixq, ixtg, volnew, xgrid)
subroutine multi_ebcs(itask, multi_fvm, ixs, ixq, ixtg, xgrid, wgrid, ipm, pm, func_value, ebcs_tab, npf, tf, fsavsurf, nsurf, timestep, numels, numelq, numeltg, numnod, ncycle, nummat, matparam, output, pred)
subroutine multi_evolve_global(timestep, ng, elbuf_tab, iparg, itask, ixs, ixq, ixtg, multi_fvm, gravity, wfext)
subroutine multi_evolve_partial(timestep, ng, elbuf_tab, iparg, itask, ixs, ixq, ixtg, multi_fvm, pm, ipm, gravity, current_time)
subroutine multi_face_elem_data(itask, iparg, ixs, ixq, ixtg, xgrid, wgrid, multi_fvm)
subroutine multi_fluxes_computation(ng, elbuf_tab, iparg, itask, ixs, ixq, ixtg, pm, ipm, multi_fvm, ale_connectivity, wgrid, xgrid, itab, nbmat, current_time, bufmat, id_global_vois, npf, tf)
subroutine multi_muscl_gradients(timers, elbuf_tab, iparg, itask, ixs, ixq, ixtg, pm, ipm, multi_fvm, ale_connectivity, wgrid, xgrid, itab, nbmat, current_time, bufmat)
subroutine multi_update_global(ng, elbuf_tab, iparg, itask, multi_fvm, partsav, iparts, gresav, igrth, grth, volnew, pred, timestep)
subroutine multi_update_partial(local_matid, pm, imat, ng, elbuf_tab, iparg, itask, multi_fvm, volnew)
type(alefvm_buffer_), target alefvm_buffer
subroutine multi_muscl_fluxes_computation(ng, elbuf_tab, iparg, itask, ixs, ixq, ixtg, pm, ipm, multi_fvm, ale_connectivity, wgrid, xgrid, itab, nbmat, current_time, bufmat, id_global_vois, face_vois, npf, tf, ispmd, matparam)
OPTION /TH/SURF outputs of Pressure and Area needed Tabs.
integer, parameter th_surf_num_channel
number of /TH/SURF channels : AREA, VELOCITY, MASSFLOW, P A, MASS
subroutine spmd_envois(dim, phi, nercvois, nesdvois, lercvois, lesdvois, lencom)
subroutine spmd_e1vois(phi, nercvois, nesdvois, lercvois, lesdvois, lencom)
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)
subroutine startime(event, itask)
subroutine stoptime(event, itask)