66
67
68
69 USE timer_mod
71 USE elbufdef_mod
72 USE multi_fvm_mod
75 USE ebcs_mod
78 USE matparam_def_mod, ONLY : matparam_struct_
80
81
82
83#include "implicit_f.inc"
84#include "comlock.inc"
85
86
87
88#include "com01_c.inc"
89#include "com04_c.inc"
90#include "param_c.inc"
91#include "task_c.inc"
92#include "mvsiz_p.inc"
93#include "tabsiz_c.inc"
94
95
96
97 TYPE(TIMER_), INTENT(INOUT) ::
98 TYPE(MATPARAM_STRUCT_),DIMENSION(NUMMAT),INTENT(IN) :: MATPARAM
100 my_real,
INTENT(IN) :: timestep
101 TYPE(ELBUF_STRUCT_), TARGET, DIMENSION(NGROUP) :: ELBUF_TAB
102 INTEGER, INTENT(IN) :: IPARG(NPARG, *), IADS(8, *)
103 INTEGER, INTENT(IN) :: ITASK
104 INTEGER, INTENT(IN), TARGET :: IXS(NIXS, *), IXQ(, *), IXTG(NIXTG, *)
105 INTEGER, INTENT(IN) :: IPM(NPROPMI, *)
106 my_real,
INTENT(IN) :: pm(npropm, *)
107 TYPE(MULTI_FVM_STRUCT), INTENT(INOUT) :: MULTI_FVM
108
109 INTEGER, INTENT(IN) :: ID_GLOBAL_VOIS(*),FACE_VOIS(*)
111 my_real,
INTENT(IN) :: wgrid(3, *)
112 my_real,
INTENT(INOUT) :: xgrid(3, *), dnod(3, *)
113 INTEGER, INTENT(IN) :: NALE(*)
114 my_real,
INTENT(INOUT) :: partsav(npsav, *), gresav(*)
115 INTEGER, INTENT(IN) :: (*), IGRTH(*), GRTH(*)
116 INTEGER, INTENT(IN) :: NERCVOIS(*), NESDVOIS(*), LERCVOIS(*), LESDVOIS(*)
117 INTEGER, INTENT(IN) :: ITAB(*), ITABM1(*)
118 my_real,
INTENT(IN) :: current_time
119 my_real,
INTENT(INOUT) :: fskym(*), stifn(*), fsky(*),
120 . condn(*), condnsky(*), bufmat(*)
121 LOGICAL, INTENT(IN) :: PRED
122 my_real,
INTENT(IN) :: func_value(*)
123 TYPE(t_ebcs_tab), INTENT(IN) :: EBCS_TAB
124 TYPE(t_ale_connectivity), INTENT(IN) :: ALE_CONNECTIVITY
125 INTEGER, INTENT(IN) :: NPF(SNPC)
127 DOUBLE PRECISION,INTENT(INOUT) ::
128
129
130
131 INTEGER :: NG, NEL, II, I
132 INTEGER :: LOCAL_MATID
133 INTEGER :: NBMAT, IMAT, NIX
134 INTEGER :: LENCOM
135 INTEGER :: NODE_ID
136 INTEGER, DIMENSION(:, :), POINTER :: IX
137 INTEGER :: MATLAW, NFT, , ELEMTYP
140 TYPE(G_BUFEL_), POINTER :: GBUF
141
142
143
144 IF (iale /= 0 .AND. .NOT. pred) THEN
145 DO node_id = 1 + itask, numnod, nthread
146 vdt = half * timestep * wgrid(1, node_id)
147 dnod(1, node_id) = dnod(1, node_id) + vdt
148 xgrid(1, node_id) = xgrid(1, node_id) + vdt
149
150 vdt = half * timestep * wgrid(2,node_id)
151 dnod(2, node_id) = dnod(2, node_id) + vdt
152 xgrid(2, node_id) = xgrid(2, node_id) + vdt
153
154 vdt = half * timestep * wgrid(3,node_id)
155 dnod(3, node_id) = dnod(3, node_id) + vdt
156 xgrid(3, node_id) = xgrid(3, node_id) + vdt
157 ENDDO
158 ENDIF
159
161
162
163
164 IF (iale /= 0) THEN
165
167 ENDIF
169
170
171
172 IF (nspmd > 1) THEN
173
174 lencom = nercvois(nspmd + 1) + nesdvois(nspmd + 1)
175
177 . nercvois, nesdvois, lercvois, lesdvois, lencom)
179 . nercvois, nesdvois, lercvois, lesdvois, lencom)
181 . nercvois, nesdvois, lercvois, lesdvois, lencom)
182
184 . nercvois, nesdvois, lercvois, lesdvois, lencom)
186 . nercvois, nesdvois, lercvois, lesdvois, lencom)
188 . nercvois, nesdvois, lercvois, lesdvois, lencom)
189
191 . nercvois, nesdvois, lercvois, lesdvois, lencom)
192
194 . nercvois, nesdvois, lercvois, lesdvois, lencom)
195
196 IF (multi_fvm%NBMAT > 1) THEN
197 CALL spmd_envois(multi_fvm%NBMAT, multi_fvm%PHASE_ALPHA,
198 . nercvois, nesdvois, lercvois, lesdvois, lencom)
199 CALL spmd_envois(multi_fvm%NBMAT, multi_fvm%PHASE_RHO,
200 . nercvois, nesdvois, lercvois, lesdvois, lencom)
201 CALL spmd_envois(multi_fvm%NBMAT, multi_fvm%PHASE_EINT,
202 . nercvois, nesdvois, lercvois, lesdvois, lencom)
203 CALL spmd_envois(multi_fvm%NBMAT, multi_fvm%PHASE_PRES,
204 . nercvois, nesdvois, lercvois, lesdvois, lencom)
205 ENDIF
206
207 IF (multi_fvm%MUSCL > 0) THEN
208 IF (iale /= 0) THEN
210 . nercvois, nesdvois, lercvois, lesdvois, lencom)
211 ENDIF
212
213
215 . nercvois, nesdvois, lercvois, lesdvois
216 ENDIF
217
219 ENDIF
220
221
222
223
224
225
226 IF (multi_fvm%MUSCL > 0) THEN
228 . pm, ipm, multi_fvm, ale_connectivity, wgrid, xgrid, itab, multi_fvm%NBMAT,
229 . current_time, bufmat)
230 ENDIF
232
233
234 IF (nspmd > 1 .AND. multi_fvm%MUSCL > 0) THEN
235
237 lencom = nercvois(nspmd + 1) + nesdvois(nspmd + 1)
238 IF (multi_fvm%MUSCL == 1) THEN
239
241 . nercvois, nesdvois, lercvois, lesdvois, lencom)
243 . nercvois, nesdvois, lercvois, lesdvois, lencom)
245 . nercvois, nesdvois, lercvois, lesdvois, lencom)
246 ENDIF
247
248 IF (multi_fvm%NBMAT == 1) THEN
249 IF (multi_fvm%MUSCL == 1) THEN
251 . nercvois, nesdvois, lercvois, lesdvois, lencom)
253 . nercvois, nesdvois, lercvois, lesdvois, lencom)
254 ENDIF
255 ELSE
256 CALL spmd_envois(3 * multi_fvm%NBMAT, multi_fvm%PHASE_GRAD_ALPHA,
257 . nercvois, nesdvois, lercvois, lesdvois, lencom)
258 IF (multi_fvm%MUSCL == 1) THEN
259 CALL spmd_envois(3 * multi_fvm%NBMAT, multi_fvm%PHASE_GRAD_RHO,
260 . nercvois, nesdvois, lercvois, lesdvois, lencom)
261 CALL spmd_envois(3 * multi_fvm%NBMAT, multi_fvm%PHASE_GRAD_PRES,
262 . nercvois, nesdvois, lercvois, lesdvois, lencom)
263 ENDIF
264 ENDIF
266
268 ENDIF
269
270 DO ng = itask + 1, ngroup, nthread
271 matlaw = iparg(1, ng)
272 IF (matlaw == 151) THEN
273 nel = iparg(2, ng)
274 nft = iparg(3, ng)
275 ity = iparg(5, ng)
276 gbuf => elbuf_tab(ng)%GBUF
277 IF (multi_fvm%MUSCL > 0) THEN
279 . pm, ipm, multi_fvm, ale_connectivity, wgrid, xgrid, itab,
280 . multi_fvm%NBMAT, current_time, bufmat,
281 . id_global_vois,face_vois,npf,tf,ispmd, matparam)
282 ELSE
284 . pm, ipm, multi_fvm, ale_connectivity, wgrid, xgrid, itab,
285 . multi_fvm%NBMAT, current_time, bufmat,
286 . id_global_vois,npf,tf)
287 ENDIF
288 ENDIF
289 ENDDO
290
291
292
293
294 IF (ebcs_tab%nebcs_fvm > 0) THEN
296 CALL multi_ebcs(itask, multi_fvm, ixs, ixq, ixtg, xgrid, wgrid, ipm, pm, func_value,
297 . ebcs_tab,npf,tf,fsavsurf,nsurf,timestep,
298 . numels, numelq, numeltg, numnod, ncycle, nummat, matparam)
300 ENDIF
301
302
303
304 IF (iale /= 0 .AND. .NOT. pred) THEN
305 DO node_id = 1 + itask, numnod, nthread
306 vdt = half * timestep * wgrid(1, node_id)
307 dnod(1, node_id) = dnod(1, node_id) + vdt
308 xgrid(1, node_id) = xgrid(1, node_id) + vdt
309
310 vdt = half * timestep * wgrid(2,node_id)
311 dnod(2, node_id) = dnod(2, node_id) + vdt
312 xgrid(2, node_id) = xgrid(2, node_id) + vdt
313
314 vdt = half * timestep * wgrid(3,node_id)
315 dnod(3, node_id) = dnod(3, node_id) + vdt
316 xgrid(3, node_id) = xgrid(3, node_id) + vdt
317 ENDDO
318 ENDIF
319
321
322
323 nbmat = multi_fvm%NBMAT
324
325 DO ng = itask + 1, ngroup, nthread
326 matlaw = iparg(1, ng)
327 IF (matlaw == 151) THEN
328
329
330
332 . iparg, itask, ixs, ixq, ixtg, multi_fvm,
alefvm_buffer%VERTEX, wfext)
333 IF (nbmat > 1) THEN
334
335
336
338 . iparg, itask, ixs, ixq, ixtg, multi_fvm,
340 ENDIF
341 ENDIF
342 ENDDO
343
344 DO ng = itask + 1, ngroup, nthread
345 matlaw = iparg(1, ng)
346 IF (matlaw == 151) THEN
347 nel = iparg(2, ng)
348 nft = iparg(3, ng)
349 ity = iparg(5, ng)
350 gbuf => elbuf_tab(ng)%GBUF
351
352
353
354 volnew(1:mvsiz) = zero
356 . elbuf_tab, ixs, ixq, ixtg, volnew, xgrid)
357
358
359
361 . partsav, iparts, gresav, igrth, grth, volnew(1:nel), pred, timestep)
362
363 IF (multi_fvm%SYM == 0) THEN
364 ix => ixs(1:nixs, 1 + nft:nel + nft)
365 nix = nixs
366 elemtyp = 0
367 ELSEIF (ity == 2) THEN
368
369 ix => ixq(1:nixq, 1 + nft:nel + nft)
370 nix = nixq
371 elemtyp = 1
372 ELSEIF (ity == 7) THEN
373
374 ix => ixtg(1:nixtg, 1 + nft:nel + nft)
375 nix = nixtg
376 elemtyp = 2
377 ENDIF
378
379 DO ii = 1, nel
380 i = ii + nft
381 IF (multi_fvm%RHO(i) <= zero) THEN
382 IF (elemtyp == 0) THEN
383 CALL ancmsg(msgid = 167, anmode = aninfo, i1 = ix(nix, ii),
384 . r1 = multi_fvm%RHO(i))
385 ELSE
386 CALL ancmsg(msgid = 12, anmode = aninfo, i1 = ix(nix, ii),
387 . r1 = multi_fvm%RHO(i))
388 ENDIF
390 ENDIF
391 ENDDO
392
393 IF (nbmat > 1) THEN
394
395
396
397 DO imat = 1, nbmat
398 local_matid = ipm(20 + imat, ix(1, 1))
400 . elbuf_tab, iparg, itask, multi_fvm, volnew)
401 ENDDO
402 ENDIF
403
404
405
406 IF (.NOT. pred) THEN
407 DO ii = 1, nel
408 gbuf%VOL(ii) = volnew(ii)
409 ENDDO
410 IF (multi_fvm%NS_DIFF) THEN
411 DO ii = 1, nel
412 i = ii + nft
413 multi_fvm%VOL(i) = volnew(ii)
414 ENDDO
415 ENDIF
416 ENDIF
417 ENDIF
418 ENDDO
419
421
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)
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)