MFC
Exascale flow solver
Loading...
Searching...
No Matches
m_hypoelastic.fpp.f90
Go to the documentation of this file.
1# 1 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2!>
3!! @file
4!! @brief Contains module m_hypoelastic
5
6# 1 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 1
7# 1 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 1
8# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
9# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
10# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
11# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
12# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
13# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
14
15# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
16# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
17# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
18
19# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
20
21# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
22
23# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
24
25# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
26
27# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
28
29# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
30
31# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
32
33# 167 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
34! New line at end of file is required for FYPP
35# 2 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
36# 1 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 1
37# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
38# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
39# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
40# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
41# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
42# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
43
44# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
45# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
46# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
47
48# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
49
50# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
51
52# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
53
54# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
55
56# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
57
58# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
59
60# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
61
62# 167 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
63! New line at end of file is required for FYPP
64# 2 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 2
65
66# 4 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
67# 5 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
68# 6 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
69# 7 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
70# 8 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
71
72# 20 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
73
74# 43 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
75
76# 48 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
77
78# 53 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
79
80# 58 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
81
82# 63 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
83
84# 68 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
85
86# 76 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
87
88# 81 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
89
90# 86 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
91
92# 91 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
93
94# 96 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
95
96# 101 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
97
98# 106 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
99
100# 111 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
101
102# 116 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
103
104# 121 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
105
106# 151 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
107
108# 192 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
109
110# 206 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
111
112# 231 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
113
114# 242 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
115
116# 244 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
117# 255 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
118
119# 284 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
120
121# 294 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
122
123# 304 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
124
125# 313 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
126
127# 330 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
128
129# 340 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
130
131# 347 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
132
133# 353 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
134
135# 359 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
136
137# 365 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
138
139# 371 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
140
141# 377 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
142! New line at end of file is required for FYPP
143# 3 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
144# 1 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 1
145# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
146# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
147# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
148# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
149# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
150# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
151
152# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
153# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
154# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
155
156# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
157
158# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
159
160# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
161
162# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
163
164# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
165
166# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
167
168# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
169
170# 167 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
171! New line at end of file is required for FYPP
172# 2 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 2
173
174# 7 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
175
176# 17 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
177
178# 22 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
179
180# 27 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
181
182# 32 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
183
184# 37 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
185
186# 42 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
187
188# 47 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
189
190# 52 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
191
192# 57 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
193
194# 62 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
195
196# 73 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
197
198# 78 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
199
200# 83 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
201
202# 88 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
203
204# 103 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
205
206# 131 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
207
208# 160 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
209
210# 175 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
211
212# 193 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
213
214# 215 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
215
216# 244 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
217
218# 259 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
219
220# 269 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
221
222# 278 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
223
224# 294 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
225
226# 304 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
227
228# 311 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
229! New line at end of file is required for FYPP
230# 4 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
231
232! GPU parallel region (scalar reductions, maxval/minval)
233# 23 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
234
235! GPU parallel loop over threads (most common GPU macro)
236# 43 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
237
238! Required closing for GPU_PARALLEL_LOOP
239# 55 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
240
241! Mark routine for device compilation
242# 112 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
243
244! Declare device-resident data
245# 130 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
246
247! Inner loop within a GPU parallel region
248# 145 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
249
250! Scoped GPU data region
251# 164 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
252
253! Host code with device pointers (for MPI with GPU buffers)
254# 193 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
255
256! Allocate device memory (unscoped)
257# 207 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
258
259! Free device memory
260# 219 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
261
262! Atomic operation on device
263# 231 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
264
265! End atomic capture block
266# 242 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
267
268! Copy data between host and device
269# 254 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
270
271! Synchronization barrier
272# 266 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
273
274! Import GPU library module (openacc or omp_lib)
275# 275 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
276
277! Emit code only for AMD compiler
278# 282 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
279
280! Emit code for non-Cray compilers
281# 289 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
282
283! Emit code only for Cray compiler
284# 296 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
285
286! Emit code for non-NVIDIA compilers
287# 303 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
288
289# 305 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
290# 306 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
291! New line at end of file is required for FYPP
292# 2 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 2
293
294# 14 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
295
296! Caution: This macro requires the use of a binding script to set CUDA_VISIBLE_DEVICES, such that we have one GPU device per MPI
297! rank. That's because for both cudaMemAdvise (preferred location) and cudaMemPrefetchAsync we use location = device_id = 0. For an
298! example see misc/nvidia_uvm/bind.sh.
299# 55 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
300
301! Allocate and create GPU device memory
302# 75 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
303
304! Free GPU device memory and deallocate
305# 83 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
306
307! Cray-specific GPU pointer setup for vector fields
308# 107 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
309
310! Cray-specific GPU pointer setup for scalar fields
311# 123 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
312
313! Cray-specific GPU pointer setup for acoustic source spatials
314# 148 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
315
316# 154 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
317
318# 161 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
319! New line at end of file is required for FYPP
320# 6 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp" 2
321
322!> @brief Computes hypoelastic stress-rate source terms and damage-state evolution
324
328 use m_helper
329
330 implicit none
331
335
336 real(wp), allocatable, dimension(:) :: gs_hypo
337
338# 22 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
339#if defined(MFC_OpenACC)
340# 22 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
341!$acc declare create(Gs_hypo)
342# 22 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
343#elif defined(MFC_OpenMP)
344# 22 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
345!$omp declare target (Gs_hypo)
346# 22 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
347#endif
348
349 real(wp), allocatable, dimension(:,:,:) :: du_dx_hypo, du_dy_hypo, du_dz_hypo
350 real(wp), allocatable, dimension(:,:,:) :: dv_dx_hypo, dv_dy_hypo, dv_dz_hypo
351 real(wp), allocatable, dimension(:,:,:) :: dw_dx_hypo, dw_dy_hypo, dw_dz_hypo
352
353# 27 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
354#if defined(MFC_OpenACC)
355# 27 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
356!$acc declare create(du_dx_hypo, du_dy_hypo, du_dz_hypo, dv_dx_hypo, dv_dy_hypo, dv_dz_hypo, dw_dx_hypo, dw_dy_hypo, dw_dz_hypo)
357# 27 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
358#elif defined(MFC_OpenMP)
359# 27 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
360!$omp declare target (du_dx_hypo, du_dy_hypo, du_dz_hypo, dv_dx_hypo, dv_dy_hypo, dv_dz_hypo, dw_dx_hypo, dw_dy_hypo, dw_dz_hypo)
361# 27 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
362#endif
363
364 real(wp), allocatable, dimension(:,:,:) :: rho_k_field, g_k_field
365
366# 30 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
367#if defined(MFC_OpenACC)
368# 30 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
369!$acc declare create(rho_K_field, G_K_field)
370# 30 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
371#elif defined(MFC_OpenMP)
372# 30 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
373!$omp declare target (rho_K_field, G_K_field)
374# 30 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
375#endif
376
377 real(wp), allocatable, dimension(:,:) :: fd_coeff_x_hypo
378 real(wp), allocatable, dimension(:,:) :: fd_coeff_y_hypo
379 real(wp), allocatable, dimension(:,:) :: fd_coeff_z_hypo
380
381# 35 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
382#if defined(MFC_OpenACC)
383# 35 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
384!$acc declare create(fd_coeff_x_hypo, fd_coeff_y_hypo, fd_coeff_z_hypo)
385# 35 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
386#elif defined(MFC_OpenMP)
387# 35 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
388!$omp declare target (fd_coeff_x_hypo, fd_coeff_y_hypo, fd_coeff_z_hypo)
389# 35 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
390#endif
391
392contains
393
394 !> Initialize the hypoelastic module
396
397 integer :: i
398
399#ifdef MFC_DEBUG
400# 44 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
401 block
402# 44 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
403 use iso_fortran_env, only: output_unit
404# 44 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
405
406# 44 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
407 print *, 'm_hypoelastic.fpp:44: ', '@:ALLOCATE(Gs_hypo(1:num_fluids))'
408# 44 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
409
410# 44 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
411 call flush (output_unit)
412# 44 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
413 end block
414# 44 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
415#endif
416# 44 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
417 allocate (gs_hypo(1:num_fluids))
418# 44 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
419
420# 44 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
421
422# 44 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
423#if defined(MFC_OpenACC)
424# 44 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
425!$acc enter data create(Gs_hypo)
426# 44 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
427#elif defined(MFC_OpenMP)
428# 44 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
429!$omp target enter data map(always,alloc:Gs_hypo)
430# 44 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
431#endif
432#ifdef MFC_DEBUG
433# 45 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
434 block
435# 45 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
436 use iso_fortran_env, only: output_unit
437# 45 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
438
439# 45 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
440 print *, 'm_hypoelastic.fpp:45: ', '@:ALLOCATE(rho_K_field(0:m,0:n,0:p), G_K_field(0:m,0:n,0:p))'
441# 45 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
442
443# 45 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
444 call flush (output_unit)
445# 45 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
446 end block
447# 45 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
448#endif
449# 45 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
450 allocate (rho_k_field(0:m,0:n,0:p), g_k_field(0:m,0:n,0:p))
451# 45 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
452
453# 45 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
454
455# 45 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
456
457# 45 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
458#if defined(MFC_OpenACC)
459# 45 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
460!$acc enter data create(rho_K_field, G_K_field)
461# 45 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
462#elif defined(MFC_OpenMP)
463# 45 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
464!$omp target enter data map(always,alloc:rho_K_field, G_K_field)
465# 45 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
466#endif
467#ifdef MFC_DEBUG
468# 46 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
469 block
470# 46 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
471 use iso_fortran_env, only: output_unit
472# 46 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
473
474# 46 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
475 print *, 'm_hypoelastic.fpp:46: ', '@:ALLOCATE(du_dx_hypo(0:m,0:n,0:p))'
476# 46 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
477
478# 46 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
479 call flush (output_unit)
480# 46 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
481 end block
482# 46 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
483#endif
484# 46 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
485 allocate (du_dx_hypo(0:m,0:n,0:p))
486# 46 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
487
488# 46 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
489
490# 46 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
491#if defined(MFC_OpenACC)
492# 46 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
493!$acc enter data create(du_dx_hypo)
494# 46 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
495#elif defined(MFC_OpenMP)
496# 46 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
497!$omp target enter data map(always,alloc:du_dx_hypo)
498# 46 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
499#endif
500 if (n > 0) then
501#ifdef MFC_DEBUG
502# 48 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
503 block
504# 48 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
505 use iso_fortran_env, only: output_unit
506# 48 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
507
508# 48 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
509 print *, 'm_hypoelastic.fpp:48: ', '@:ALLOCATE(du_dy_hypo(0:m,0:n,0:p), dv_dx_hypo(0:m,0:n,0:p), dv_dy_hypo(0:m,0:n,0:p))'
510# 48 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
511
512# 48 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
513 call flush (output_unit)
514# 48 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
515 end block
516# 48 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
517#endif
518# 48 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
519 allocate (du_dy_hypo(0:m,0:n,0:p), dv_dx_hypo(0:m,0:n,0:p), dv_dy_hypo(0:m,0:n,0:p))
520# 48 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
521
522# 48 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
523
524# 48 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
525
526# 48 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
527
528# 48 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
529#if defined(MFC_OpenACC)
530# 48 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
531!$acc enter data create(du_dy_hypo, dv_dx_hypo, dv_dy_hypo)
532# 48 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
533#elif defined(MFC_OpenMP)
534# 48 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
535!$omp target enter data map(always,alloc:du_dy_hypo, dv_dx_hypo, dv_dy_hypo)
536# 48 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
537#endif
538 if (p > 0) then
539#ifdef MFC_DEBUG
540# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
541 block
542# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
543 use iso_fortran_env, only: output_unit
544# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
545
546# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
547 print *, 'm_hypoelastic.fpp:50: ', '@:ALLOCATE(du_dz_hypo(0:m,0:n,0:p), dv_dz_hypo(0:m,0:n,0:p))'
548# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
549
550# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
551 call flush (output_unit)
552# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
553 end block
554# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
555#endif
556# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
557 allocate (du_dz_hypo(0:m,0:n,0:p), dv_dz_hypo(0:m,0:n,0:p))
558# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
559
560# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
561
562# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
563
564# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
565#if defined(MFC_OpenACC)
566# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
567!$acc enter data create(du_dz_hypo, dv_dz_hypo)
568# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
569#elif defined(MFC_OpenMP)
570# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
571!$omp target enter data map(always,alloc:du_dz_hypo, dv_dz_hypo)
572# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
573#endif
574#ifdef MFC_DEBUG
575# 51 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
576 block
577# 51 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
578 use iso_fortran_env, only: output_unit
579# 51 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
580
581# 51 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
582 print *, 'm_hypoelastic.fpp:51: ', '@:ALLOCATE(dw_dx_hypo(0:m,0:n,0:p), dw_dy_hypo(0:m,0:n,0:p), dw_dz_hypo(0:m,0:n,0:p))'
583# 51 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
584
585# 51 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
586 call flush (output_unit)
587# 51 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
588 end block
589# 51 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
590#endif
591# 51 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
592 allocate (dw_dx_hypo(0:m,0:n,0:p), dw_dy_hypo(0:m,0:n,0:p), dw_dz_hypo(0:m,0:n,0:p))
593# 51 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
594
595# 51 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
596
597# 51 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
598
599# 51 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
600
601# 51 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
602#if defined(MFC_OpenACC)
603# 51 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
604!$acc enter data create(dw_dx_hypo, dw_dy_hypo, dw_dz_hypo)
605# 51 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
606#elif defined(MFC_OpenMP)
607# 51 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
608!$omp target enter data map(always,alloc:dw_dx_hypo, dw_dy_hypo, dw_dz_hypo)
609# 51 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
610#endif
611 end if
612 end if
613
614 do i = 1, num_fluids
615 gs_hypo(i) = fluid_pp(i)%G
616 end do
617
618# 58 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
619#if defined(MFC_OpenACC)
620# 58 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
621!$acc update device(Gs_hypo)
622# 58 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
623#elif defined(MFC_OpenMP)
624# 58 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
625!$omp target update to(Gs_hypo)
626# 58 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
627#endif
628
629#ifdef MFC_DEBUG
630# 60 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
631 block
632# 60 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
633 use iso_fortran_env, only: output_unit
634# 60 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
635
636# 60 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
637 print *, 'm_hypoelastic.fpp:60: ', '@:ALLOCATE(fd_coeff_x_hypo(-fd_number:fd_number, 0:m))'
638# 60 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
639
640# 60 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
641 call flush (output_unit)
642# 60 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
643 end block
644# 60 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
645#endif
646# 60 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
647 allocate (fd_coeff_x_hypo(-fd_number:fd_number, 0:m))
648# 60 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
649
650# 60 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
651
652# 60 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
653#if defined(MFC_OpenACC)
654# 60 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
655!$acc enter data create(fd_coeff_x_hypo)
656# 60 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
657#elif defined(MFC_OpenMP)
658# 60 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
659!$omp target enter data map(always,alloc:fd_coeff_x_hypo)
660# 60 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
661#endif
662 if (n > 0) then
663#ifdef MFC_DEBUG
664# 62 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
665 block
666# 62 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
667 use iso_fortran_env, only: output_unit
668# 62 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
669
670# 62 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
671 print *, 'm_hypoelastic.fpp:62: ', '@:ALLOCATE(fd_coeff_y_hypo(-fd_number:fd_number, 0:n))'
672# 62 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
673
674# 62 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
675 call flush (output_unit)
676# 62 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
677 end block
678# 62 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
679#endif
680# 62 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
681 allocate (fd_coeff_y_hypo(-fd_number:fd_number, 0:n))
682# 62 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
683
684# 62 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
685
686# 62 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
687#if defined(MFC_OpenACC)
688# 62 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
689!$acc enter data create(fd_coeff_y_hypo)
690# 62 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
691#elif defined(MFC_OpenMP)
692# 62 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
693!$omp target enter data map(always,alloc:fd_coeff_y_hypo)
694# 62 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
695#endif
696 end if
697 if (p > 0) then
698#ifdef MFC_DEBUG
699# 65 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
700 block
701# 65 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
702 use iso_fortran_env, only: output_unit
703# 65 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
704
705# 65 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
706 print *, 'm_hypoelastic.fpp:65: ', '@:ALLOCATE(fd_coeff_z_hypo(-fd_number:fd_number, 0:p))'
707# 65 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
708
709# 65 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
710 call flush (output_unit)
711# 65 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
712 end block
713# 65 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
714#endif
715# 65 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
716 allocate (fd_coeff_z_hypo(-fd_number:fd_number, 0:p))
717# 65 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
718
719# 65 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
720
721# 65 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
722#if defined(MFC_OpenACC)
723# 65 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
724!$acc enter data create(fd_coeff_z_hypo)
725# 65 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
726#elif defined(MFC_OpenMP)
727# 65 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
728!$omp target enter data map(always,alloc:fd_coeff_z_hypo)
729# 65 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
730#endif
731 end if
732
733 ! Computing centered finite difference coefficients
734 call s_compute_finite_difference_coefficients(m, x_cc, fd_coeff_x_hypo, buff_size, fd_number, fd_order)
735
736# 70 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
737#if defined(MFC_OpenACC)
738# 70 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
739!$acc update device(fd_coeff_x_hypo)
740# 70 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
741#elif defined(MFC_OpenMP)
742# 70 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
743!$omp target update to(fd_coeff_x_hypo)
744# 70 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
745#endif
746 if (n > 0) then
747 call s_compute_finite_difference_coefficients(n, y_cc, fd_coeff_y_hypo, buff_size, fd_number, fd_order)
748
749# 73 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
750#if defined(MFC_OpenACC)
751# 73 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
752!$acc update device(fd_coeff_y_hypo)
753# 73 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
754#elif defined(MFC_OpenMP)
755# 73 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
756!$omp target update to(fd_coeff_y_hypo)
757# 73 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
758#endif
759 end if
760 if (p > 0) then
761 call s_compute_finite_difference_coefficients(p, z_cc, fd_coeff_z_hypo, buff_size, fd_number, fd_order)
762
763# 77 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
764#if defined(MFC_OpenACC)
765# 77 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
766!$acc update device(fd_coeff_z_hypo)
767# 77 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
768#elif defined(MFC_OpenMP)
769# 77 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
770!$omp target update to(fd_coeff_z_hypo)
771# 77 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
772#endif
773 end if
774
776
777 !> Legacy FD-based hypoelastic RHS (Mode 1: HLL). Uses finite-difference velocity gradients computed from cell-centered
778 !! primitive variables. Called once per direction inside the dim-split loop. Supports 1D/2D/3D Cartesian and cylindrical
779 !! geometry.
780 !! @param idir Dimension splitting index
781 !! @param q_prim_vf Primitive variables
782 !! @param rhs_vf rhs variables
783 subroutine s_compute_hypoelastic_rhs_finite_diff_per_sweep(idir, q_prim_vf, rhs_vf)
784
785 integer, intent(in) :: idir
786 type(scalar_field), dimension(sys_size), intent(in) :: q_prim_vf
787 type(scalar_field), dimension(sys_size), intent(inout) :: rhs_vf
788 real(wp) :: rho_k, g_k
789 integer :: i, k, l, q, r !< Loop variables
790 integer :: ndirs !< Number of coordinate directions
791
792 ndirs = 1; if (n > 0) ndirs = 2; if (p > 0) ndirs = 3
793
794 if (idir == 1) then
795 ! calculate velocity gradients + rho_K and G_K TODO: re-organize these loops one by one for GPU efficiency if possible?
796
797
798# 102 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
799
800# 102 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
801#if defined(MFC_OpenACC)
802# 102 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
803!$acc parallel loop collapse(3) gang vector default(present)
804# 102 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
805#elif defined(MFC_OpenMP)
806# 102 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
807
808# 102 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
809
810# 102 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
811
812# 102 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
813!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
814# 102 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
815#endif
816 do q = 0, p
817 do l = 0, n
818 do k = 0, m
819 du_dx_hypo(k, l, q) = 0._wp
820 end do
821 end do
822 end do
823
824# 110 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
825#if defined(MFC_OpenACC)
826# 110 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
827!$acc end parallel loop
828# 110 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
829#elif defined(MFC_OpenMP)
830# 110 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
831
832# 110 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
833!$omp end target teams loop
834# 110 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
835#endif
836
837
838# 112 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
839
840# 112 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
841#if defined(MFC_OpenACC)
842# 112 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
843!$acc parallel loop collapse(3) gang vector default(present)
844# 112 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
845#elif defined(MFC_OpenMP)
846# 112 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
847
848# 112 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
849
850# 112 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
851
852# 112 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
853!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
854# 112 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
855#endif
856 do q = 0, p
857 do l = 0, n
858 do k = 0, m
859
860# 116 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
861#if defined(MFC_OpenACC)
862# 116 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
863!$acc loop seq
864# 116 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
865#elif defined(MFC_OpenMP)
866# 116 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
867
868# 116 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
869#endif
870 do r = -fd_number, fd_number
871 du_dx_hypo(k, l, q) = du_dx_hypo(k, l, q) + q_prim_vf(eqn_idx%mom%beg)%sf(k + r, l, &
872 & q)*fd_coeff_x_hypo(r, k)
873 end do
874 end do
875 end do
876 end do
877
878# 124 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
879#if defined(MFC_OpenACC)
880# 124 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
881!$acc end parallel loop
882# 124 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
883#elif defined(MFC_OpenMP)
884# 124 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
885
886# 124 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
887!$omp end target teams loop
888# 124 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
889#endif
890
891 if (ndirs > 1) then
892
893# 127 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
894
895# 127 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
896#if defined(MFC_OpenACC)
897# 127 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
898!$acc parallel loop collapse(3) gang vector default(present)
899# 127 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
900#elif defined(MFC_OpenMP)
901# 127 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
902
903# 127 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
904
905# 127 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
906
907# 127 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
908!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
909# 127 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
910#endif
911 do q = 0, p
912 do l = 0, n
913 do k = 0, m
914 du_dy_hypo(k, l, q) = 0._wp; dv_dx_hypo(k, l, q) = 0._wp; dv_dy_hypo(k, l, q) = 0._wp
915 end do
916 end do
917 end do
918
919# 135 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
920#if defined(MFC_OpenACC)
921# 135 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
922!$acc end parallel loop
923# 135 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
924#elif defined(MFC_OpenMP)
925# 135 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
926
927# 135 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
928!$omp end target teams loop
929# 135 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
930#endif
931
932
933# 137 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
934
935# 137 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
936#if defined(MFC_OpenACC)
937# 137 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
938!$acc parallel loop collapse(3) gang vector default(present)
939# 137 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
940#elif defined(MFC_OpenMP)
941# 137 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
942
943# 137 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
944
945# 137 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
946
947# 137 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
948!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
949# 137 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
950#endif
951 do q = 0, p
952 do l = 0, n
953 do k = 0, m
954
955# 141 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
956#if defined(MFC_OpenACC)
957# 141 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
958!$acc loop seq
959# 141 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
960#elif defined(MFC_OpenMP)
961# 141 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
962
963# 141 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
964#endif
965 do r = -fd_number, fd_number
966 du_dy_hypo(k, l, q) = du_dy_hypo(k, l, q) + q_prim_vf(eqn_idx%mom%beg)%sf(k, l + r, &
967 & q)*fd_coeff_y_hypo(r, l)
968 dv_dx_hypo(k, l, q) = dv_dx_hypo(k, l, q) + q_prim_vf(eqn_idx%mom%beg + 1)%sf(k + r, l, &
969 & q)*fd_coeff_x_hypo(r, k)
970 dv_dy_hypo(k, l, q) = dv_dy_hypo(k, l, q) + q_prim_vf(eqn_idx%mom%beg + 1)%sf(k, l + r, &
971 & q)*fd_coeff_y_hypo(r, l)
972 end do
973 end do
974 end do
975 end do
976
977# 153 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
978#if defined(MFC_OpenACC)
979# 153 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
980!$acc end parallel loop
981# 153 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
982#elif defined(MFC_OpenMP)
983# 153 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
984
985# 153 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
986!$omp end target teams loop
987# 153 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
988#endif
989
990 ! 3D
991 if (ndirs == 3) then
992
993# 157 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
994
995# 157 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
996#if defined(MFC_OpenACC)
997# 157 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
998!$acc parallel loop collapse(3) gang vector default(present)
999# 157 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1000#elif defined(MFC_OpenMP)
1001# 157 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1002
1003# 157 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1004
1005# 157 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1006
1007# 157 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1008!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
1009# 157 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1010#endif
1011 do q = 0, p
1012 do l = 0, n
1013 do k = 0, m
1014 du_dz_hypo(k, l, q) = 0._wp; dv_dz_hypo(k, l, q) = 0._wp; dw_dx_hypo(k, l, q) = 0._wp
1015 dw_dy_hypo(k, l, q) = 0._wp; dw_dz_hypo(k, l, q) = 0._wp
1016 end do
1017 end do
1018 end do
1019
1020# 166 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1021#if defined(MFC_OpenACC)
1022# 166 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1023!$acc end parallel loop
1024# 166 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1025#elif defined(MFC_OpenMP)
1026# 166 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1027
1028# 166 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1029!$omp end target teams loop
1030# 166 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1031#endif
1032
1033
1034# 168 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1035
1036# 168 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1037#if defined(MFC_OpenACC)
1038# 168 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1039!$acc parallel loop collapse(3) gang vector default(present)
1040# 168 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1041#elif defined(MFC_OpenMP)
1042# 168 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1043
1044# 168 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1045
1046# 168 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1047
1048# 168 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1049!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
1050# 168 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1051#endif
1052 do q = 0, p
1053 do l = 0, n
1054 do k = 0, m
1055
1056# 172 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1057#if defined(MFC_OpenACC)
1058# 172 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1059!$acc loop seq
1060# 172 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1061#elif defined(MFC_OpenMP)
1062# 172 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1063
1064# 172 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1065#endif
1066 do r = -fd_number, fd_number
1067 du_dz_hypo(k, l, q) = du_dz_hypo(k, l, q) + q_prim_vf(eqn_idx%mom%beg)%sf(k, l, &
1068 & q + r)*fd_coeff_z_hypo(r, q)
1069 dv_dz_hypo(k, l, q) = dv_dz_hypo(k, l, q) + q_prim_vf(eqn_idx%mom%beg + 1)%sf(k, l, &
1070 & q + r)*fd_coeff_z_hypo(r, q)
1071 dw_dx_hypo(k, l, q) = dw_dx_hypo(k, l, q) + q_prim_vf(eqn_idx%mom%end)%sf(k + r, l, &
1072 & q)*fd_coeff_x_hypo(r, k)
1073 dw_dy_hypo(k, l, q) = dw_dy_hypo(k, l, q) + q_prim_vf(eqn_idx%mom%end)%sf(k, l + r, &
1074 & q)*fd_coeff_y_hypo(r, l)
1075 dw_dz_hypo(k, l, q) = dw_dz_hypo(k, l, q) + q_prim_vf(eqn_idx%mom%end)%sf(k, l, &
1076 & q + r)*fd_coeff_z_hypo(r, q)
1077 end do
1078 end do
1079 end do
1080 end do
1081
1082# 188 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1083#if defined(MFC_OpenACC)
1084# 188 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1085!$acc end parallel loop
1086# 188 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1087#elif defined(MFC_OpenMP)
1088# 188 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1089
1090# 188 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1091!$omp end target teams loop
1092# 188 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1093#endif
1094 end if
1095 end if
1096
1097
1098# 192 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1099
1100# 192 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1101#if defined(MFC_OpenACC)
1102# 192 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1103!$acc parallel loop collapse(3) gang vector default(present) private(rho_K, G_K)
1104# 192 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1105#elif defined(MFC_OpenMP)
1106# 192 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1107
1108# 192 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1109
1110# 192 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1111
1112# 192 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1113!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(rho_K, G_K)
1114# 192 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1115#endif
1116 do q = 0, p
1117 do l = 0, n
1118 do k = 0, m
1119 rho_k = 0._wp; g_k = 0._wp
1120 do i = 1, num_fluids
1121 rho_k = rho_k + q_prim_vf(i)%sf(k, l, q) ! alpha_rho_K(1)
1122 g_k = g_k + q_prim_vf(eqn_idx%adv%beg - 1 + i)%sf(k, l, q)*gs_hypo(i) ! alpha_K(1) * Gs_hypo(1)
1123 end do
1124
1125 ! Continuum damage: (1-D) scales effective stiffness, D in [0,1]
1126 if (cont_damage) g_k = g_k*max((1._wp - q_prim_vf(eqn_idx%damage)%sf(k, l, q)), 0._wp)
1127
1128 rho_k_field(k, l, q) = rho_k
1129 g_k_field(k, l, q) = g_k
1130
1131 if (g_k < verysmall) then
1132 g_k_field(k, l, q) = 0._wp
1133 end if
1134 end do
1135 end do
1136 end do
1137
1138# 214 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1139#if defined(MFC_OpenACC)
1140# 214 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1141!$acc end parallel loop
1142# 214 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1143#elif defined(MFC_OpenMP)
1144# 214 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1145
1146# 214 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1147!$omp end target teams loop
1148# 214 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1149#endif
1150
1151 ! apply rhs source term to elastic stress equation
1152
1153# 217 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1154
1155# 217 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1156#if defined(MFC_OpenACC)
1157# 217 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1158!$acc parallel loop collapse(3) gang vector default(present)
1159# 217 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1160#elif defined(MFC_OpenMP)
1161# 217 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1162
1163# 217 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1164
1165# 217 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1166
1167# 217 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1168!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
1169# 217 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1170#endif
1171 do q = 0, p
1172 do l = 0, n
1173 do k = 0, m
1174 rhs_vf(eqn_idx%stress%beg)%sf(k, l, q) = rhs_vf(eqn_idx%stress%beg)%sf(k, l, q) + rho_k_field(k, l, &
1175 & q)*((4._wp*g_k_field(k, l, q)/3._wp) + q_prim_vf(eqn_idx%stress%beg)%sf(k, l, q))*du_dx_hypo(k, &
1176 & l, q)
1177 end do
1178 end do
1179 end do
1180
1181# 227 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1182#if defined(MFC_OpenACC)
1183# 227 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1184!$acc end parallel loop
1185# 227 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1186#elif defined(MFC_OpenMP)
1187# 227 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1188
1189# 227 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1190!$omp end target teams loop
1191# 227 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1192#endif
1193 else if (idir == 2) then
1194
1195# 229 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1196
1197# 229 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1198#if defined(MFC_OpenACC)
1199# 229 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1200!$acc parallel loop collapse(3) gang vector default(present)
1201# 229 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1202#elif defined(MFC_OpenMP)
1203# 229 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1204
1205# 229 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1206
1207# 229 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1208
1209# 229 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1210!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
1211# 229 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1212#endif
1213 do q = 0, p
1214 do l = 0, n
1215 do k = 0, m
1216 rhs_vf(eqn_idx%stress%beg)%sf(k, l, q) = rhs_vf(eqn_idx%stress%beg)%sf(k, l, q) + rho_k_field(k, l, &
1217 & q)*(2._wp*q_prim_vf(eqn_idx%stress%beg + 1)%sf(k, l, q)*du_dy_hypo(k, l, &
1218 & q) - q_prim_vf(eqn_idx%stress%beg)%sf(k, l, q)*dv_dy_hypo(k, l, q) - (2._wp/3._wp)*g_k_field(k, &
1219 & l, q)*dv_dy_hypo(k, l, q))
1220
1221 rhs_vf(eqn_idx%stress%beg + 1)%sf(k, l, q) = rhs_vf(eqn_idx%stress%beg + 1)%sf(k, l, q) + rho_k_field(k, &
1222 & l, q)*(q_prim_vf(eqn_idx%stress%beg)%sf(k, l, q)*dv_dx_hypo(k, l, &
1223 & q) + q_prim_vf(eqn_idx%stress%beg + 2)%sf(k, l, q)*du_dy_hypo(k, l, q) + g_k_field(k, l, &
1224 & q)*(du_dy_hypo(k, l, q) + dv_dx_hypo(k, l, q)))
1225
1226 rhs_vf(eqn_idx%stress%beg + 2)%sf(k, l, q) = rhs_vf(eqn_idx%stress%beg + 2)%sf(k, l, q) + rho_k_field(k, &
1227 & l, q)*(2._wp*q_prim_vf(eqn_idx%stress%beg + 1)%sf(k, l, q)*dv_dx_hypo(k, l, &
1228 & q) - q_prim_vf(eqn_idx%stress%beg + 2)%sf(k, l, q)*du_dx_hypo(k, l, &
1229 & q) + q_prim_vf(eqn_idx%stress%beg + 2)%sf(k, l, q)*dv_dy_hypo(k, l, q) + 2._wp*g_k_field(k, l, &
1230 & q)*(dv_dy_hypo(k, l, q) - (1._wp/3._wp)*(du_dx_hypo(k, l, q) + dv_dy_hypo(k, l, q))))
1231 end do
1232 end do
1233 end do
1234
1235# 251 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1236#if defined(MFC_OpenACC)
1237# 251 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1238!$acc end parallel loop
1239# 251 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1240#elif defined(MFC_OpenMP)
1241# 251 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1242
1243# 251 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1244!$omp end target teams loop
1245# 251 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1246#endif
1247 else if (idir == 3) then
1248
1249# 253 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1250
1251# 253 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1252#if defined(MFC_OpenACC)
1253# 253 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1254!$acc parallel loop collapse(3) gang vector default(present)
1255# 253 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1256#elif defined(MFC_OpenMP)
1257# 253 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1258
1259# 253 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1260
1261# 253 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1262
1263# 253 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1264!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
1265# 253 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1266#endif
1267 do q = 0, p
1268 do l = 0, n
1269 do k = 0, m
1270 rhs_vf(eqn_idx%stress%beg)%sf(k, l, q) = rhs_vf(eqn_idx%stress%beg)%sf(k, l, q) + rho_k_field(k, l, &
1271 & q)*(2._wp*q_prim_vf(eqn_idx%stress%beg + 3)%sf(k, l, q)*du_dz_hypo(k, l, &
1272 & q) - q_prim_vf(eqn_idx%stress%beg)%sf(k, l, q)*dw_dz_hypo(k, l, q) - (2._wp/3._wp)*g_k_field(k, &
1273 & l, q)*dw_dz_hypo(k, l, q))
1274
1275 rhs_vf(eqn_idx%stress%beg + 1)%sf(k, l, q) = rhs_vf(eqn_idx%stress%beg + 1)%sf(k, l, q) + rho_k_field(k, &
1276 & l, q)*(q_prim_vf(eqn_idx%stress%beg + 4)%sf(k, l, q)*du_dz_hypo(k, l, &
1277 & q) + q_prim_vf(eqn_idx%stress%beg + 3)%sf(k, l, q)*dv_dz_hypo(k, l, &
1278 & q) - q_prim_vf(eqn_idx%stress%beg + 1)%sf(k, l, q)*dw_dz_hypo(k, l, q))
1279
1280 rhs_vf(eqn_idx%stress%beg + 2)%sf(k, l, q) = rhs_vf(eqn_idx%stress%beg + 2)%sf(k, l, q) + rho_k_field(k, &
1281 & l, q)*(2._wp*q_prim_vf(eqn_idx%stress%beg + 4)%sf(k, l, q)*dv_dz_hypo(k, l, &
1282 & q) - q_prim_vf(eqn_idx%stress%beg + 2)%sf(k, l, q)*dw_dz_hypo(k, l, &
1283 & q) - (2._wp/3._wp)*g_k_field(k, l, q)*dw_dz_hypo(k, l, q))
1284
1285 rhs_vf(eqn_idx%stress%beg + 3)%sf(k, l, q) = rhs_vf(eqn_idx%stress%beg + 3)%sf(k, l, q) + rho_k_field(k, &
1286 & l, q)*(q_prim_vf(eqn_idx%stress%beg)%sf(k, l, q)*dw_dx_hypo(k, l, &
1287 & q) + q_prim_vf(eqn_idx%stress%beg + 4)%sf(k, l, q)*du_dy_hypo(k, l, &
1288 & q) + q_prim_vf(eqn_idx%stress%beg + 1)%sf(k, l, q)*dw_dy_hypo(k, l, &
1289 & q) - q_prim_vf(eqn_idx%stress%beg + 3)%sf(k, l, q)*dv_dy_hypo(k, l, &
1290 & q) + q_prim_vf(eqn_idx%stress%beg + 5)%sf(k, l, q)*du_dz_hypo(k, l, q) + g_k_field(k, l, &
1291 & q)*(du_dz_hypo(k, l, q) + dw_dx_hypo(k, l, q)))
1292
1293 rhs_vf(eqn_idx%stress%beg + 4)%sf(k, l, q) = rhs_vf(eqn_idx%stress%beg + 4)%sf(k, l, q) + rho_k_field(k, &
1294 & l, q)*(q_prim_vf(eqn_idx%stress%beg + 3)%sf(k, l, q)*dv_dx_hypo(k, l, &
1295 & q) + q_prim_vf(eqn_idx%stress%beg + 1)%sf(k, l, q)*dw_dx_hypo(k, l, &
1296 & q) - q_prim_vf(eqn_idx%stress%beg + 4)%sf(k, l, q)*du_dx_hypo(k, l, &
1297 & q) + q_prim_vf(eqn_idx%stress%beg + 2)%sf(k, l, q)*dw_dy_hypo(k, l, &
1298 & q) + q_prim_vf(eqn_idx%stress%beg + 5)%sf(k, l, q)*dv_dz_hypo(k, l, q) + g_k_field(k, l, &
1299 & q)*(dv_dz_hypo(k, l, q) + dw_dy_hypo(k, l, q)))
1300
1301 rhs_vf(eqn_idx%stress%end)%sf(k, l, q) = rhs_vf(eqn_idx%stress%end)%sf(k, l, q) + rho_k_field(k, l, &
1302 & q)*(2._wp*q_prim_vf(eqn_idx%stress%end - 2)%sf(k, l, q)*dw_dx_hypo(k, l, &
1303 & q) - q_prim_vf(eqn_idx%stress%end)%sf(k, l, q)*du_dx_hypo(k, l, &
1304 & q) + 2._wp*q_prim_vf(eqn_idx%stress%end - 1)%sf(k, l, q)*dw_dy_hypo(k, l, &
1305 & q) - q_prim_vf(eqn_idx%stress%end)%sf(k, l, q)*dv_dy_hypo(k, l, &
1306 & q) + q_prim_vf(eqn_idx%stress%end)%sf(k, l, q)*dw_dz_hypo(k, l, q) + 2._wp*g_k_field(k, l, &
1307 & q)*(dw_dz_hypo(k, l, q) - (1._wp/3._wp)*(du_dx_hypo(k, l, q) + dv_dy_hypo(k, l, &
1308 & q) + dw_dz_hypo(k, l, q))))
1309 end do
1310 end do
1311 end do
1312
1313# 299 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1314#if defined(MFC_OpenACC)
1315# 299 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1316!$acc end parallel loop
1317# 299 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1318#elif defined(MFC_OpenMP)
1319# 299 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1320
1321# 299 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1322!$omp end target teams loop
1323# 299 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1324#endif
1325 end if
1326
1327 if (cyl_coord .and. idir == 2) then
1328
1329# 303 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1330
1331# 303 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1332#if defined(MFC_OpenACC)
1333# 303 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1334!$acc parallel loop collapse(3) gang vector default(present)
1335# 303 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1336#elif defined(MFC_OpenMP)
1337# 303 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1338
1339# 303 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1340
1341# 303 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1342
1343# 303 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1344!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
1345# 303 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1346#endif
1347 do q = 0, p
1348 do l = 0, n
1349 do k = 0, m
1350 ! S_xx -= rho * v/r * (tau_xx + 2/3*G)
1351 rhs_vf(eqn_idx%stress%beg)%sf(k, l, q) = rhs_vf(eqn_idx%stress%beg)%sf(k, l, q) - rho_k_field(k, l, &
1352 & q)*q_prim_vf(eqn_idx%mom%beg + 1)%sf(k, l, q)/y_cc(l)*(q_prim_vf(eqn_idx%stress%beg)%sf(k, l, &
1353 & q) + (2._wp/3._wp)*g_k_field(k, l, q)) ! tau_xx + 2/3*G
1354
1355 ! S_xr -= rho * v/r * tau_xr
1356 rhs_vf(eqn_idx%stress%beg + 1)%sf(k, l, q) = rhs_vf(eqn_idx%stress%beg + 1)%sf(k, l, q) - rho_k_field(k, &
1357 & l, q)*q_prim_vf(eqn_idx%mom%beg + 1)%sf(k, l, q)/y_cc(l)*q_prim_vf(eqn_idx%stress%beg + 1)%sf(k, &
1358 & l, q) ! tau_xx
1359
1360 ! S_rr -= rho * v/r * (tau_rr + 2/3*G)
1361 rhs_vf(eqn_idx%stress%beg + 2)%sf(k, l, q) = rhs_vf(eqn_idx%stress%beg + 2)%sf(k, l, q) - rho_k_field(k, &
1362 & l, q)*q_prim_vf(eqn_idx%mom%beg + 1)%sf(k, l, &
1363 & q)/y_cc(l)*(q_prim_vf(eqn_idx%stress%beg + 2)%sf(k, l, q) + (2._wp/3._wp)*g_k_field(k, l, q)) ! tau_rr + 2/3*G
1364
1365 ! S_thetatheta += rho * ( -(tau_thetatheta + 2/3*G)*(du/dx + dv/dr + v/r) + 2*(tau_thetatheta + G)*v/r )
1366 rhs_vf(eqn_idx%stress%beg + 3)%sf(k, l, q) = rhs_vf(eqn_idx%stress%beg + 3)%sf(k, l, q) + rho_k_field(k, &
1367 & l, q)*(-(q_prim_vf(eqn_idx%stress%beg + 3)%sf(k, l, q) + (2._wp/3._wp)*g_k_field(k, l, &
1368 & q))*(du_dx_hypo(k, l, q) + dv_dy_hypo(k, l, q) + q_prim_vf(eqn_idx%mom%beg + 1)%sf(k, l, &
1369 & q)/y_cc(l)) + 2._wp*(q_prim_vf(eqn_idx%stress%beg + 3)%sf(k, l, q) + g_k_field(k, l, &
1370 & q))*q_prim_vf(eqn_idx%mom%beg + 1)%sf(k, l, q)/y_cc(l))
1371 end do
1372 end do
1373 end do
1374
1375# 331 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1376#if defined(MFC_OpenACC)
1377# 331 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1378!$acc end parallel loop
1379# 331 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1380#elif defined(MFC_OpenMP)
1381# 331 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1382
1383# 331 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1384!$omp end target teams loop
1385# 331 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1386#endif
1387 end if
1388
1390
1391 !> Interface-consistent hypoelastic RHS (Mode 2: HLL/HLLC). Uses interface velocities from the Riemann solver to compute
1392 !! velocity gradients. Called once after all dimensional sweeps. Supports 1D, 2D Cartesian, 2D axisymmetric, and 3D Cartesian.
1393 !! @param q_prim_vf Primitive variables
1394 !! @param rhs_vf rhs variables
1395 !! @param nc_iface_vel_n Interface velocities per direction
1396 subroutine s_compute_hypoelastic_rhs_iface(q_prim_vf, rhs_vf, nc_iface_vel_n)
1397
1398 type(scalar_field), dimension(sys_size), intent(in) :: q_prim_vf
1399 type(scalar_field), dimension(sys_size), intent(inout) :: rhs_vf
1400 type(vector_field), dimension(:), intent(in) :: nc_iface_vel_n
1401 real(wp) :: rho_k, g_k
1402 real(wp) :: trace, shear, shear2, diag, diag_z, offdiag, cross1, cross2
1403 real(wp) :: txx, txy, tyy, txz, tyz, tzz
1404 integer :: i, k, l, q
1405 integer :: ndirs
1406
1407 ndirs = 1; if (n > 0) ndirs = 2; if (p > 0) ndirs = 3
1408
1409
1410# 354 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1411
1412# 354 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1413#if defined(MFC_OpenACC)
1414# 354 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1415!$acc parallel loop collapse(3) gang vector default(present)
1416# 354 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1417#elif defined(MFC_OpenMP)
1418# 354 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1419
1420# 354 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1421
1422# 354 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1423
1424# 354 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1425!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
1426# 354 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1427#endif
1428 do q = 0, p
1429 do l = 0, n
1430 do k = 0, m
1431 du_dx_hypo(k, l, q) = (nc_iface_vel_n(1)%vf(1)%sf(k, l, q) - nc_iface_vel_n(1)%vf(1)%sf(k - 1, l, q))/dx(k)
1432 end do
1433 end do
1434 end do
1435
1436# 362 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1437#if defined(MFC_OpenACC)
1438# 362 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1439!$acc end parallel loop
1440# 362 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1441#elif defined(MFC_OpenMP)
1442# 362 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1443
1444# 362 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1445!$omp end target teams loop
1446# 362 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1447#endif
1448
1449 if (ndirs > 1) then
1450
1451# 365 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1452
1453# 365 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1454#if defined(MFC_OpenACC)
1455# 365 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1456!$acc parallel loop collapse(3) gang vector default(present)
1457# 365 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1458#elif defined(MFC_OpenMP)
1459# 365 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1460
1461# 365 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1462
1463# 365 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1464
1465# 365 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1466!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
1467# 365 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1468#endif
1469 do q = 0, p
1470 do l = 0, n
1471 do k = 0, m
1472 du_dy_hypo(k, l, q) = (nc_iface_vel_n(2)%vf(1)%sf(k, l, q) - nc_iface_vel_n(2)%vf(1)%sf(k, l - 1, q))/dy(l)
1473 dv_dx_hypo(k, l, q) = (nc_iface_vel_n(1)%vf(2)%sf(k, l, q) - nc_iface_vel_n(1)%vf(2)%sf(k - 1, l, q))/dx(k)
1474 dv_dy_hypo(k, l, q) = (nc_iface_vel_n(2)%vf(2)%sf(k, l, q) - nc_iface_vel_n(2)%vf(2)%sf(k, l - 1, q))/dy(l)
1475 end do
1476 end do
1477 end do
1478
1479# 375 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1480#if defined(MFC_OpenACC)
1481# 375 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1482!$acc end parallel loop
1483# 375 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1484#elif defined(MFC_OpenMP)
1485# 375 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1486
1487# 375 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1488!$omp end target teams loop
1489# 375 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1490#endif
1491 end if
1492
1493 if (ndirs == 3) then
1494
1495# 379 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1496
1497# 379 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1498#if defined(MFC_OpenACC)
1499# 379 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1500!$acc parallel loop collapse(3) gang vector default(present)
1501# 379 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1502#elif defined(MFC_OpenMP)
1503# 379 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1504
1505# 379 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1506
1507# 379 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1508
1509# 379 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1510!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
1511# 379 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1512#endif
1513 do q = 0, p
1514 do l = 0, n
1515 do k = 0, m
1516 du_dz_hypo(k, l, q) = (nc_iface_vel_n(3)%vf(1)%sf(k, l, q) - nc_iface_vel_n(3)%vf(1)%sf(k, l, q - 1))/dz(q)
1517 dv_dz_hypo(k, l, q) = (nc_iface_vel_n(3)%vf(2)%sf(k, l, q) - nc_iface_vel_n(3)%vf(2)%sf(k, l, q - 1))/dz(q)
1518 dw_dx_hypo(k, l, q) = (nc_iface_vel_n(1)%vf(3)%sf(k, l, q) - nc_iface_vel_n(1)%vf(3)%sf(k - 1, l, q))/dx(k)
1519 dw_dy_hypo(k, l, q) = (nc_iface_vel_n(2)%vf(3)%sf(k, l, q) - nc_iface_vel_n(2)%vf(3)%sf(k, l - 1, q))/dy(l)
1520 dw_dz_hypo(k, l, q) = (nc_iface_vel_n(3)%vf(3)%sf(k, l, q) - nc_iface_vel_n(3)%vf(3)%sf(k, l, q - 1))/dz(q)
1521 end do
1522 end do
1523 end do
1524
1525# 391 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1526#if defined(MFC_OpenACC)
1527# 391 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1528!$acc end parallel loop
1529# 391 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1530#elif defined(MFC_OpenMP)
1531# 391 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1532
1533# 391 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1534!$omp end target teams loop
1535# 391 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1536#endif
1537 end if
1538
1539
1540# 394 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1541
1542# 394 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1543#if defined(MFC_OpenACC)
1544# 394 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1545!$acc parallel loop collapse(3) gang vector default(present) private(rho_K, G_K)
1546# 394 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1547#elif defined(MFC_OpenMP)
1548# 394 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1549
1550# 394 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1551
1552# 394 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1553
1554# 394 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1555!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(rho_K, G_K)
1556# 394 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1557#endif
1558 do q = 0, p
1559 do l = 0, n
1560 do k = 0, m
1561 rho_k = 0._wp; g_k = 0._wp
1562 do i = 1, num_fluids
1563 rho_k = rho_k + q_prim_vf(i)%sf(k, l, q)
1564 g_k = g_k + q_prim_vf(eqn_idx%adv%beg - 1 + i)%sf(k, l, q)*gs_hypo(i)
1565 end do
1566
1567 if (cont_damage) g_k = g_k*max((1._wp - q_prim_vf(eqn_idx%damage)%sf(k, l, q)), 0._wp)
1568
1569 rho_k_field(k, l, q) = rho_k
1570 g_k_field(k, l, q) = g_k
1571
1572 if (g_k < verysmall) then
1573 g_k_field(k, l, q) = 0._wp
1574 end if
1575 end do
1576 end do
1577 end do
1578
1579# 415 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1580#if defined(MFC_OpenACC)
1581# 415 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1582!$acc end parallel loop
1583# 415 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1584#elif defined(MFC_OpenMP)
1585# 415 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1586
1587# 415 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1588!$omp end target teams loop
1589# 415 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1590#endif
1591
1592
1593# 417 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1594
1595# 417 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1596#if defined(MFC_OpenACC)
1597# 417 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1598!$acc parallel loop collapse(3) gang vector default(present)
1599# 417 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1600#elif defined(MFC_OpenMP)
1601# 417 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1602
1603# 417 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1604
1605# 417 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1606
1607# 417 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1608!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
1609# 417 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1610#endif
1611 do q = 0, p
1612 do l = 0, n
1613 do k = 0, m
1614 rhs_vf(eqn_idx%stress%beg)%sf(k, l, q) = rhs_vf(eqn_idx%stress%beg)%sf(k, l, q) + rho_k_field(k, l, &
1615 & q)*((4._wp*g_k_field(k, l, q)/3._wp) + q_prim_vf(eqn_idx%stress%beg)%sf(k, l, q))*du_dx_hypo(k, l, q)
1616 end do
1617 end do
1618 end do
1619
1620# 426 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1621#if defined(MFC_OpenACC)
1622# 426 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1623!$acc end parallel loop
1624# 426 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1625#elif defined(MFC_OpenMP)
1626# 426 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1627
1628# 426 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1629!$omp end target teams loop
1630# 426 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1631#endif
1632
1633 if (ndirs > 1) then
1634
1635# 429 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1636
1637# 429 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1638#if defined(MFC_OpenACC)
1639# 429 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1640!$acc parallel loop collapse(3) gang vector default(present)
1641# 429 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1642#elif defined(MFC_OpenMP)
1643# 429 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1644
1645# 429 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1646
1647# 429 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1648
1649# 429 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1650!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
1651# 429 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1652#endif
1653 do q = 0, p
1654 do l = 0, n
1655 do k = 0, m
1656 rhs_vf(eqn_idx%stress%beg)%sf(k, l, q) = rhs_vf(eqn_idx%stress%beg)%sf(k, l, q) + rho_k_field(k, l, &
1657 & q)*(2._wp*q_prim_vf(eqn_idx%stress%beg + 1)%sf(k, l, q)*du_dy_hypo(k, l, &
1658 & q) - q_prim_vf(eqn_idx%stress%beg)%sf(k, l, q)*dv_dy_hypo(k, l, q) - (2._wp/3._wp)*g_k_field(k, &
1659 & l, q)*dv_dy_hypo(k, l, q))
1660
1661 rhs_vf(eqn_idx%stress%beg + 1)%sf(k, l, q) = rhs_vf(eqn_idx%stress%beg + 1)%sf(k, l, q) + rho_k_field(k, &
1662 & l, q)*(q_prim_vf(eqn_idx%stress%beg)%sf(k, l, q)*dv_dx_hypo(k, l, &
1663 & q) + q_prim_vf(eqn_idx%stress%beg + 2)%sf(k, l, q)*du_dy_hypo(k, l, q) + g_k_field(k, l, &
1664 & q)*(du_dy_hypo(k, l, q) + dv_dx_hypo(k, l, q)))
1665
1666 rhs_vf(eqn_idx%stress%beg + 2)%sf(k, l, q) = rhs_vf(eqn_idx%stress%beg + 2)%sf(k, l, q) + rho_k_field(k, &
1667 & l, q)*(2._wp*q_prim_vf(eqn_idx%stress%beg + 1)%sf(k, l, q)*dv_dx_hypo(k, l, &
1668 & q) - q_prim_vf(eqn_idx%stress%beg + 2)%sf(k, l, q)*du_dx_hypo(k, l, &
1669 & q) + q_prim_vf(eqn_idx%stress%beg + 2)%sf(k, l, q)*dv_dy_hypo(k, l, q) + 2._wp*g_k_field(k, l, &
1670 & q)*(dv_dy_hypo(k, l, q) - (1._wp/3._wp)*(du_dx_hypo(k, l, q) + dv_dy_hypo(k, l, q))))
1671 end do
1672 end do
1673 end do
1674
1675# 451 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1676#if defined(MFC_OpenACC)
1677# 451 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1678!$acc end parallel loop
1679# 451 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1680#elif defined(MFC_OpenMP)
1681# 451 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1682
1683# 451 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1684!$omp end target teams loop
1685# 451 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1686#endif
1687 end if
1688
1689 if (ndirs == 3 .and. .not. cyl_coord) then
1690
1691# 455 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1692
1693# 455 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1694#if defined(MFC_OpenACC)
1695# 455 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1696!$acc parallel loop collapse(3) gang vector default(present) private(txx, txy, tyy, txz, tyz, tzz, trace, shear, shear2, diag, diag_z, offdiag, cross1, cross2)
1697# 455 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1698#elif defined(MFC_OpenMP)
1699# 455 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1700
1701# 455 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1702
1703# 455 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1704
1705# 455 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1706!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) &
1707# 455 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1708!$omp& private(txx, txy, tyy, txz, tyz, tzz, trace, shear, shear2, diag, diag_z, offdiag, cross1, cross2)
1709# 455 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1710#endif
1711# 457 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1712 do q = 0, p
1713 do l = 0, n
1714 do k = 0, m
1715 txx = q_prim_vf(eqn_idx%stress%beg)%sf(k, l, q)
1716 txy = q_prim_vf(eqn_idx%stress%beg + 1)%sf(k, l, q)
1717 tyy = q_prim_vf(eqn_idx%stress%beg + 2)%sf(k, l, q)
1718 txz = q_prim_vf(eqn_idx%stress%beg + 3)%sf(k, l, q)
1719 tyz = q_prim_vf(eqn_idx%stress%beg + 4)%sf(k, l, q)
1720 tzz = q_prim_vf(eqn_idx%stress%beg + 5)%sf(k, l, q)
1721
1722 ! z-direction contributions to tau_xx
1723 trace = -(2._wp/3._wp*g_k_field(k, l, q) + txx)
1724 shear = 2._wp*txz
1725 rhs_vf(eqn_idx%stress%beg)%sf(k, l, q) = rhs_vf(eqn_idx%stress%beg)%sf(k, l, q) + rho_k_field(k, l, &
1726 & q)*(trace*dw_dz_hypo(k, l, q) + shear*du_dz_hypo(k, l, q))
1727
1728 ! z-direction contributions to tau_xy
1729 offdiag = -txy
1730 cross1 = tyz
1731 cross2 = txz
1732 rhs_vf(eqn_idx%stress%beg + 1)%sf(k, l, q) = rhs_vf(eqn_idx%stress%beg + 1)%sf(k, l, q) + rho_k_field(k, &
1733 & l, q)*(offdiag*dw_dz_hypo(k, l, q) + cross1*du_dz_hypo(k, l, q) + cross2*dv_dz_hypo(k, l, q))
1734
1735 ! z-direction contributions to tau_yy
1736 trace = -(2._wp/3._wp*g_k_field(k, l, q) + tyy)
1737 shear = 2._wp*tyz
1738 rhs_vf(eqn_idx%stress%beg + 2)%sf(k, l, q) = rhs_vf(eqn_idx%stress%beg + 2)%sf(k, l, q) + rho_k_field(k, &
1739 & l, q)*(trace*dw_dz_hypo(k, l, q) + shear*dv_dz_hypo(k, l, q))
1740
1741 ! tau_xz (stress%beg+3)
1742 diag = g_k_field(k, l, q) + txx
1743 offdiag = -txz
1744 cross1 = tyz
1745 cross2 = txy
1746 diag_z = g_k_field(k, l, q) + tzz
1747 rhs_vf(eqn_idx%stress%beg + 3)%sf(k, l, q) = rhs_vf(eqn_idx%stress%beg + 3)%sf(k, l, q) + rho_k_field(k, &
1748 & l, q)*(diag*dw_dx_hypo(k, l, q) + offdiag*dv_dy_hypo(k, l, q) + cross1*du_dy_hypo(k, l, &
1749 & q) + cross2*dw_dy_hypo(k, l, q) + diag_z*du_dz_hypo(k, l, q))
1750
1751 ! tau_yz (stress%beg+4)
1752 offdiag = -tyz
1753 cross1 = txz
1754 cross2 = txy
1755 diag = g_k_field(k, l, q) + tyy
1756 rhs_vf(eqn_idx%stress%beg + 4)%sf(k, l, q) = rhs_vf(eqn_idx%stress%beg + 4)%sf(k, l, q) + rho_k_field(k, &
1757 & l, q)*(offdiag*du_dx_hypo(k, l, q) + cross1*dv_dx_hypo(k, l, q) + cross2*dw_dx_hypo(k, l, &
1758 & q) + diag*dw_dy_hypo(k, l, q) + diag_z*dv_dz_hypo(k, l, q))
1759
1760 ! tau_zz (stress%beg+5)
1761 trace = -(2._wp/3._wp*g_k_field(k, l, q) + tzz)
1762 shear = 2._wp*txz
1763 shear2 = 2._wp*tyz
1764 diag = 4._wp/3._wp*g_k_field(k, l, q) + tzz
1765 rhs_vf(eqn_idx%stress%beg + 5)%sf(k, l, q) = rhs_vf(eqn_idx%stress%beg + 5)%sf(k, l, q) + rho_k_field(k, &
1766 & l, q)*(trace*du_dx_hypo(k, l, q) + shear*dw_dx_hypo(k, l, q) + trace*dv_dy_hypo(k, l, &
1767 & q) + shear2*dw_dy_hypo(k, l, q) + diag*dw_dz_hypo(k, l, q))
1768 end do
1769 end do
1770 end do
1771
1772# 516 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1773#if defined(MFC_OpenACC)
1774# 516 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1775!$acc end parallel loop
1776# 516 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1777#elif defined(MFC_OpenMP)
1778# 516 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1779
1780# 516 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1781!$omp end target teams loop
1782# 516 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1783#endif
1784 end if
1785
1786 if (grid_geometry == 2) then
1787 call s_compute_hypoelastic_rhs_axisym_geom_iface(q_prim_vf, rhs_vf, nc_iface_vel_n(1)%vf, nc_iface_vel_n(2)%vf)
1788 end if
1789
1790 end subroutine s_compute_hypoelastic_rhs_iface
1791
1792 !> Axisymmetric geometric source terms for the hypoelastic stress evolution, using interface velocities. Adds the v/r and div(u)
1793 !! contributions that arise in cylindrical (r-z) coordinates: tau_xx, tau_xr, tau_rr get a -rho*(v/r) source; tau_thetatheta
1794 !! gets a combined divergence and hoop-stress source. Called from s_compute_hypoelastic_rhs_iface when grid_geometry == 2.
1795 !! @param q_prim_vf Primitive variables
1796 !! @param rhs_vf rhs variables
1797 !! @param nc_iface_vel_x_vf Interface velocities in x-direction
1798 !! @param nc_iface_vel_y_vf Interface velocities in y-direction
1799 subroutine s_compute_hypoelastic_rhs_axisym_geom_iface(q_prim_vf, rhs_vf, nc_iface_vel_x_vf, nc_iface_vel_y_vf)
1800
1801 type(scalar_field), dimension(sys_size), intent(in) :: q_prim_vf
1802 type(scalar_field), dimension(sys_size), intent(inout) :: rhs_vf
1803 type(scalar_field), dimension(:), intent(in) :: nc_iface_vel_x_vf
1804 type(scalar_field), dimension(:), intent(in) :: nc_iface_vel_y_vf
1805 integer :: i, k, l, q
1806 real(wp) :: rho_k, g_k, v_over_r, divu_axi
1807
1808
1809# 541 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1810
1811# 541 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1812#if defined(MFC_OpenACC)
1813# 541 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1814!$acc parallel loop collapse(3) gang vector default(present)
1815# 541 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1816#elif defined(MFC_OpenMP)
1817# 541 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1818
1819# 541 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1820
1821# 541 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1822
1823# 541 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1824!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
1825# 541 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1826#endif
1827 do q = 0, p
1828 do l = 0, n
1829 do k = 0, m
1830 du_dx_hypo(k, l, q) = (nc_iface_vel_x_vf(1)%sf(k, l, q) - nc_iface_vel_x_vf(1)%sf(k - 1, l, q))/dx(k)
1831
1832 dv_dy_hypo(k, l, q) = (nc_iface_vel_y_vf(2)%sf(k, l, q) - nc_iface_vel_y_vf(2)%sf(k, l - 1, q))/dy(l)
1833 end do
1834 end do
1835 end do
1836
1837# 551 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1838#if defined(MFC_OpenACC)
1839# 551 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1840!$acc end parallel loop
1841# 551 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1842#elif defined(MFC_OpenMP)
1843# 551 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1844
1845# 551 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1846!$omp end target teams loop
1847# 551 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1848#endif
1849
1850
1851# 553 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1852
1853# 553 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1854#if defined(MFC_OpenACC)
1855# 553 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1856!$acc parallel loop collapse(3) gang vector default(present) private(rho_K, G_K, v_over_r, divU_axi)
1857# 553 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1858#elif defined(MFC_OpenMP)
1859# 553 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1860
1861# 553 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1862
1863# 553 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1864
1865# 553 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1866!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) &
1867# 553 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1868!$omp& private(rho_K, G_K, v_over_r, divU_axi)
1869# 553 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1870#endif
1871 do q = 0, p
1872 do l = 0, n
1873 do k = 0, m
1874 rho_k = 0._wp
1875 g_k = 0._wp
1876 do i = 1, num_fluids
1877 rho_k = rho_k + q_prim_vf(i)%sf(k, l, q)
1878 g_k = g_k + q_prim_vf(eqn_idx%adv%beg - 1 + i)%sf(k, l, q)*gs_hypo(i)
1879 end do
1880
1881 if (cont_damage) g_k = g_k*max(1._wp - q_prim_vf(eqn_idx%damage)%sf(k, l, q), 0._wp)
1882
1883 v_over_r = q_prim_vf(eqn_idx%mom%beg + 1)%sf(k, l, q)/y_cc(l)
1884 divu_axi = du_dx_hypo(k, l, q) + dv_dy_hypo(k, l, q) + v_over_r
1885
1886 rhs_vf(eqn_idx%stress%beg)%sf(k, l, q) = rhs_vf(eqn_idx%stress%beg)%sf(k, l, &
1887 & q) - rho_k*v_over_r*(q_prim_vf(eqn_idx%stress%beg)%sf(k, l, q) + 2._wp*g_k/3._wp)
1888
1889 rhs_vf(eqn_idx%stress%beg + 1)%sf(k, l, q) = rhs_vf(eqn_idx%stress%beg + 1)%sf(k, l, &
1890 & q) - rho_k*v_over_r*q_prim_vf(eqn_idx%stress%beg + 1)%sf(k, l, q)
1891
1892 rhs_vf(eqn_idx%stress%beg + 2)%sf(k, l, q) = rhs_vf(eqn_idx%stress%beg + 2)%sf(k, l, &
1893 & q) - rho_k*v_over_r*(q_prim_vf(eqn_idx%stress%beg + 2)%sf(k, l, q) + 2._wp*g_k/3._wp)
1894
1895 rhs_vf(eqn_idx%stress%beg + 3)%sf(k, l, q) = rhs_vf(eqn_idx%stress%beg + 3)%sf(k, l, &
1896 & q) + rho_k*(-(q_prim_vf(eqn_idx%stress%beg + 3)%sf(k, l, &
1897 & q) + 2._wp*g_k/3._wp)*divu_axi + 2._wp*(q_prim_vf(eqn_idx%stress%beg + 3)%sf(k, l, q) + g_k)*v_over_r)
1898 end do
1899 end do
1900 end do
1901
1902# 584 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1903#if defined(MFC_OpenACC)
1904# 584 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1905!$acc end parallel loop
1906# 584 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1907#elif defined(MFC_OpenMP)
1908# 584 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1909
1910# 584 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1911!$omp end target teams loop
1912# 584 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1913#endif
1914
1916
1917 !> Cylindrical completion for the dual-pass (anchored HLLD) hypoelastic path. The anchored augmented fluxes already carry every
1918 !! axial/radial derivative term of the stress law and the stress rows of flux_gsrc are zero, so the complete remaining
1919 !! cylindrical physics is the cell-local v/r family below: the advective metric -q_s*v/r plus the constitutive v/r terms (and
1920 !! +/-K*C for the volume fractions under alt_soundspeed). The discrete C = v/r averages the cell's own two anchored radial face
1921 !! traces (hat_L outer face, hat_R inner face) over y_cc, so no absolute axial velocity enters and uniform axial translation
1922 !! gives exactly zero. Called once after the two anchored partial RHS's are summed. Continuum damage needs no handling here:
1923 !! HLLD + cont_damage is prohibited (m_checker.fpp).
1924 !! @param q_prim_vf Primitive variables
1925 !! @param rhs_vf rhs variables
1926 !! @param nc_iface_vel_y_vf hat_L-pass radial-direction interface velocities
1927 !! @param nc_iface_vel_y_hatR_vf hat_R-pass radial-direction interface velocities
1928 subroutine s_compute_hypoelastic_rhs_axisym_geom_dual_pass(q_prim_vf, rhs_vf, nc_iface_vel_y_vf, nc_iface_vel_y_hatR_vf)
1929
1930 type(scalar_field), dimension(sys_size), intent(in) :: q_prim_vf
1931 type(scalar_field), dimension(sys_size), intent(inout) :: rhs_vf
1932 type(scalar_field), dimension(:), intent(in) :: nc_iface_vel_y_vf
1933 type(scalar_field), dimension(:), intent(in) :: nc_iface_vel_y_hatr_vf
1934 real(wp) :: rho_k, g_k, k_k, c_num, pres_k, blkmod1_k, blkmod2_k
1935 integer :: i, k, l, q
1936
1937
1938# 608 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1939
1940# 608 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1941#if defined(MFC_OpenACC)
1942# 608 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1943!$acc parallel loop collapse(3) gang vector default(present) private(rho_K, G_K, K_K, C_num, pres_K, blkmod1_K, blkmod2_K)
1944# 608 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1945#elif defined(MFC_OpenMP)
1946# 608 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1947
1948# 608 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1949
1950# 608 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1951
1952# 608 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1953!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) &
1954# 608 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1955!$omp& private(rho_K, G_K, K_K, C_num, pres_K, blkmod1_K, blkmod2_K)
1956# 608 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1957#endif
1958 do q = 0, p
1959 do l = 0, n
1960 do k = 0, m
1961 rho_k = 0._wp
1962 g_k = 0._wp
1963
1964# 614 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1965#if defined(MFC_OpenACC)
1966# 614 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1967!$acc loop seq
1968# 614 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1969#elif defined(MFC_OpenMP)
1970# 614 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1971
1972# 614 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1973#endif
1974 do i = 1, num_fluids
1975 rho_k = rho_k + q_prim_vf(i)%sf(k, l, q)
1976 g_k = g_k + q_prim_vf(eqn_idx%adv%beg - 1 + i)%sf(k, l, q)*gs_hypo(i)
1977 end do
1978
1979 if (g_k < verysmall) g_k = 0._wp
1980
1981 ! Cell-owned anchored radial face traces: hat_L owns the outer face l, hat_R the inner face l - 1
1982 c_num = 5e-1_wp*(nc_iface_vel_y_vf(2)%sf(k, l, q) + nc_iface_vel_y_hatr_vf(2)%sf(k, l - 1, q))/y_cc(l)
1983
1984 if (alt_soundspeed) then
1985 ! Same two-component K as the HLLD anchor state (see m_riemann_solver_hypo_hlld.fpp), including the
1986 ! verysmall denominator regularization
1987 pres_k = q_prim_vf(eqn_idx%E)%sf(k, l, q)
1988 blkmod1_k = ((gammas(1) + 1._wp)*pres_k + pi_infs(1))/gammas(1) + (4._wp/3._wp)*gs_hypo(1)
1989 blkmod2_k = ((gammas(2) + 1._wp)*pres_k + pi_infs(2))/gammas(2) + (4._wp/3._wp)*gs_hypo(2)
1990 k_k = q_prim_vf(eqn_idx%adv%beg)%sf(k, l, q)*q_prim_vf(eqn_idx%adv%end)%sf(k, l, &
1991 & q)*(blkmod2_k - blkmod1_k)/(q_prim_vf(eqn_idx%adv%beg)%sf(k, l, &
1992 & q)*blkmod2_k + q_prim_vf(eqn_idx%adv%end)%sf(k, l, q)*blkmod1_k + verysmall)
1993 rhs_vf(eqn_idx%adv%beg)%sf(k, l, q) = rhs_vf(eqn_idx%adv%beg)%sf(k, l, q) + k_k*c_num
1994 rhs_vf(eqn_idx%adv%end)%sf(k, l, q) = rhs_vf(eqn_idx%adv%end)%sf(k, l, q) - k_k*c_num
1995 end if
1996
1997 rhs_vf(eqn_idx%stress%beg)%sf(k, l, q) = rhs_vf(eqn_idx%stress%beg)%sf(k, l, &
1998 & q) - rho_k*(2._wp*q_prim_vf(eqn_idx%stress%beg)%sf(k, l, q) + 2._wp*g_k/3._wp)*c_num
1999
2000 rhs_vf(eqn_idx%stress%beg + 1)%sf(k, l, q) = rhs_vf(eqn_idx%stress%beg + 1)%sf(k, l, &
2001 & q) - 2._wp*rho_k*q_prim_vf(eqn_idx%stress%beg + 1)%sf(k, l, q)*c_num
2002
2003 rhs_vf(eqn_idx%stress%beg + 2)%sf(k, l, q) = rhs_vf(eqn_idx%stress%beg + 2)%sf(k, l, &
2004 & q) - rho_k*(2._wp*q_prim_vf(eqn_idx%stress%beg + 2)%sf(k, l, q) + 2._wp*g_k/3._wp)*c_num
2005
2006 rhs_vf(eqn_idx%stress%beg + 3)%sf(k, l, q) = rhs_vf(eqn_idx%stress%beg + 3)%sf(k, l, &
2007 & q) + (4._wp/3._wp)*rho_k*g_k*c_num
2008 end do
2009 end do
2010 end do
2011
2012# 652 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2013#if defined(MFC_OpenACC)
2014# 652 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2015!$acc end parallel loop
2016# 652 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2017#elif defined(MFC_OpenMP)
2018# 652 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2019
2020# 652 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2021!$omp end target teams loop
2022# 652 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2023#endif
2024
2026
2027 !> Finalize the hypoelastic module
2029
2030#ifdef MFC_DEBUG
2031# 659 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2032 block
2033# 659 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2034 use iso_fortran_env, only: output_unit
2035# 659 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2036
2037# 659 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2038 print *, 'm_hypoelastic.fpp:659: ', '@:DEALLOCATE(Gs_hypo)'
2039# 659 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2040
2041# 659 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2042 call flush (output_unit)
2043# 659 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2044 end block
2045# 659 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2046#endif
2047# 659 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2048
2049# 659 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2050#if defined(MFC_OpenACC)
2051# 659 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2052!$acc exit data delete(Gs_hypo)
2053# 659 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2054#elif defined(MFC_OpenMP)
2055# 659 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2056!$omp target exit data map(release:Gs_hypo)
2057# 659 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2058#endif
2059# 659 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2060 deallocate (gs_hypo)
2061#ifdef MFC_DEBUG
2062# 660 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2063 block
2064# 660 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2065 use iso_fortran_env, only: output_unit
2066# 660 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2067
2068# 660 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2069 print *, 'm_hypoelastic.fpp:660: ', '@:DEALLOCATE(rho_K_field, G_K_field)'
2070# 660 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2071
2072# 660 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2073 call flush (output_unit)
2074# 660 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2075 end block
2076# 660 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2077#endif
2078# 660 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2079
2080# 660 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2081#if defined(MFC_OpenACC)
2082# 660 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2083!$acc exit data delete(rho_K_field, G_K_field)
2084# 660 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2085#elif defined(MFC_OpenMP)
2086# 660 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2087!$omp target exit data map(release:rho_K_field, G_K_field)
2088# 660 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2089#endif
2090# 660 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2091 deallocate (rho_k_field, g_k_field)
2092#ifdef MFC_DEBUG
2093# 661 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2094 block
2095# 661 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2096 use iso_fortran_env, only: output_unit
2097# 661 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2098
2099# 661 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2100 print *, 'm_hypoelastic.fpp:661: ', '@:DEALLOCATE(du_dx_hypo)'
2101# 661 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2102
2103# 661 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2104 call flush (output_unit)
2105# 661 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2106 end block
2107# 661 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2108#endif
2109# 661 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2110
2111# 661 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2112#if defined(MFC_OpenACC)
2113# 661 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2114!$acc exit data delete(du_dx_hypo)
2115# 661 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2116#elif defined(MFC_OpenMP)
2117# 661 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2118!$omp target exit data map(release:du_dx_hypo)
2119# 661 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2120#endif
2121# 661 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2122 deallocate (du_dx_hypo)
2123#ifdef MFC_DEBUG
2124# 662 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2125 block
2126# 662 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2127 use iso_fortran_env, only: output_unit
2128# 662 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2129
2130# 662 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2131 print *, 'm_hypoelastic.fpp:662: ', '@:DEALLOCATE(fd_coeff_x_hypo)'
2132# 662 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2133
2134# 662 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2135 call flush (output_unit)
2136# 662 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2137 end block
2138# 662 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2139#endif
2140# 662 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2141
2142# 662 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2143#if defined(MFC_OpenACC)
2144# 662 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2145!$acc exit data delete(fd_coeff_x_hypo)
2146# 662 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2147#elif defined(MFC_OpenMP)
2148# 662 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2149!$omp target exit data map(release:fd_coeff_x_hypo)
2150# 662 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2151#endif
2152# 662 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2153 deallocate (fd_coeff_x_hypo)
2154 if (n > 0) then
2155#ifdef MFC_DEBUG
2156# 664 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2157 block
2158# 664 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2159 use iso_fortran_env, only: output_unit
2160# 664 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2161
2162# 664 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2163 print *, 'm_hypoelastic.fpp:664: ', '@:DEALLOCATE(du_dy_hypo, dv_dx_hypo, dv_dy_hypo)'
2164# 664 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2165
2166# 664 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2167 call flush (output_unit)
2168# 664 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2169 end block
2170# 664 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2171#endif
2172# 664 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2173
2174# 664 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2175#if defined(MFC_OpenACC)
2176# 664 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2177!$acc exit data delete(du_dy_hypo, dv_dx_hypo, dv_dy_hypo)
2178# 664 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2179#elif defined(MFC_OpenMP)
2180# 664 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2181!$omp target exit data map(release:du_dy_hypo, dv_dx_hypo, dv_dy_hypo)
2182# 664 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2183#endif
2184# 664 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2185 deallocate (du_dy_hypo, dv_dx_hypo, dv_dy_hypo)
2186#ifdef MFC_DEBUG
2187# 665 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2188 block
2189# 665 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2190 use iso_fortran_env, only: output_unit
2191# 665 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2192
2193# 665 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2194 print *, 'm_hypoelastic.fpp:665: ', '@:DEALLOCATE(fd_coeff_y_hypo)'
2195# 665 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2196
2197# 665 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2198 call flush (output_unit)
2199# 665 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2200 end block
2201# 665 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2202#endif
2203# 665 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2204
2205# 665 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2206#if defined(MFC_OpenACC)
2207# 665 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2208!$acc exit data delete(fd_coeff_y_hypo)
2209# 665 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2210#elif defined(MFC_OpenMP)
2211# 665 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2212!$omp target exit data map(release:fd_coeff_y_hypo)
2213# 665 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2214#endif
2215# 665 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2216 deallocate (fd_coeff_y_hypo)
2217 if (p > 0) then
2218#ifdef MFC_DEBUG
2219# 667 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2220 block
2221# 667 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2222 use iso_fortran_env, only: output_unit
2223# 667 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2224
2225# 667 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2226 print *, 'm_hypoelastic.fpp:667: ', '@:DEALLOCATE(du_dz_hypo, dv_dz_hypo, dw_dx_hypo, dw_dy_hypo, dw_dz_hypo)'
2227# 667 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2228
2229# 667 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2230 call flush (output_unit)
2231# 667 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2232 end block
2233# 667 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2234#endif
2235# 667 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2236
2237# 667 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2238#if defined(MFC_OpenACC)
2239# 667 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2240!$acc exit data delete(du_dz_hypo, dv_dz_hypo, dw_dx_hypo, dw_dy_hypo, dw_dz_hypo)
2241# 667 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2242#elif defined(MFC_OpenMP)
2243# 667 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2244!$omp target exit data map(release:du_dz_hypo, dv_dz_hypo, dw_dx_hypo, dw_dy_hypo, dw_dz_hypo)
2245# 667 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2246#endif
2247# 667 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2249#ifdef MFC_DEBUG
2250# 668 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2251 block
2252# 668 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2253 use iso_fortran_env, only: output_unit
2254# 668 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2255
2256# 668 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2257 print *, 'm_hypoelastic.fpp:668: ', '@:DEALLOCATE(fd_coeff_z_hypo)'
2258# 668 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2259
2260# 668 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2261 call flush (output_unit)
2262# 668 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2263 end block
2264# 668 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2265#endif
2266# 668 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2267
2268# 668 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2269#if defined(MFC_OpenACC)
2270# 668 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2271!$acc exit data delete(fd_coeff_z_hypo)
2272# 668 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2273#elif defined(MFC_OpenMP)
2274# 668 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2275!$omp target exit data map(release:fd_coeff_z_hypo)
2276# 668 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2277#endif
2278# 668 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2279 deallocate (fd_coeff_z_hypo)
2280 end if
2281 end if
2282
2283 end subroutine s_finalize_hypoelastic_module
2284
2285 !> Compute the continuum damage source term from the principal stress state
2286 subroutine s_compute_damage_state(q_cons_vf, rhs_vf)
2287
2288 type(scalar_field), dimension(sys_size), intent(in) :: q_cons_vf
2289 type(scalar_field), dimension(sys_size), intent(inout) :: rhs_vf
2290 real(wp) :: tau_p !< principal stress
2291 real(wp) :: tau_xx, tau_xy, tau_yy, tau_zz, tau_yz, tau_xz
2292 real(wp) :: i1, i2, i3, argument, phi, sqrt_term_1, sqrt_term_2, temp
2293 integer :: q, l, k
2294
2295 if (n == 0) then
2296 l = 0; q = 0
2297
2298# 686 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2299
2300# 686 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2301#if defined(MFC_OpenACC)
2302# 686 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2303!$acc parallel loop gang vector default(present)
2304# 686 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2305#elif defined(MFC_OpenMP)
2306# 686 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2307
2308# 686 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2309
2310# 686 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2311
2312# 686 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2313!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
2314# 686 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2315#endif
2316 do k = 0, m
2317 rhs_vf(eqn_idx%damage)%sf(k, l, q) = (alpha_bar*max(abs(real(q_cons_vf(eqn_idx%stress%beg)%sf(k, l, q), &
2318 & kind=wp)) - tau_star, 0._wp))**cont_damage_s
2319 end do
2320
2321# 691 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2322#if defined(MFC_OpenACC)
2323# 691 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2324!$acc end parallel loop
2325# 691 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2326#elif defined(MFC_OpenMP)
2327# 691 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2328
2329# 691 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2330!$omp end target teams loop
2331# 691 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2332#endif
2333 else if (p == 0) then
2334 q = 0
2335
2336# 694 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2337
2338# 694 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2339#if defined(MFC_OpenACC)
2340# 694 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2341!$acc parallel loop collapse(2) gang vector default(present) private(tau_p)
2342# 694 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2343#elif defined(MFC_OpenMP)
2344# 694 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2345
2346# 694 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2347
2348# 694 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2349
2350# 694 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2351!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(2) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(tau_p)
2352# 694 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2353#endif
2354 do l = 0, n
2355 do k = 0, m
2356 ! Maximum principal stress
2357 tau_p = 0.5_wp*(q_cons_vf(eqn_idx%stress%beg)%sf(k, l, q) + q_cons_vf(eqn_idx%stress%beg + 2)%sf(k, l, &
2358 & q)) + sqrt((q_cons_vf(eqn_idx%stress%beg)%sf(k, l, &
2359 & q) - q_cons_vf(eqn_idx%stress%beg + 2)%sf(k, l, &
2360 & q))**2.0_wp + 4._wp*q_cons_vf(eqn_idx%stress%beg + 1)%sf(k, l, q)**2.0_wp)/2._wp
2361
2362 rhs_vf(eqn_idx%damage)%sf(k, l, q) = (alpha_bar*max(tau_p - tau_star, 0._wp))**cont_damage_s
2363 end do
2364 end do
2365
2366# 706 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2367#if defined(MFC_OpenACC)
2368# 706 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2369!$acc end parallel loop
2370# 706 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2371#elif defined(MFC_OpenMP)
2372# 706 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2373
2374# 706 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2375!$omp end target teams loop
2376# 706 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2377#endif
2378 else
2379
2380# 708 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2381
2382# 708 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2383#if defined(MFC_OpenACC)
2384# 708 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2385!$acc parallel loop collapse(3) gang vector default(present) private(tau_xx, tau_xy, tau_yy, tau_xz, tau_yz, tau_zz, I1, I2, I3, temp, sqrt_term_1, sqrt_term_2, argument, phi, tau_p)
2386# 708 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2387#elif defined(MFC_OpenMP)
2388# 708 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2389
2390# 708 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2391
2392# 708 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2393
2394# 708 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2395!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) &
2396# 708 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2397!$omp& private(tau_xx, tau_xy, tau_yy, tau_xz, tau_yz, tau_zz, I1, I2, I3, temp, sqrt_term_1, sqrt_term_2, argument, phi, tau_p)
2398# 708 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2399#endif
2400# 710 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2401 do q = 0, p
2402 do l = 0, n
2403 do k = 0, m
2404 tau_xx = q_cons_vf(eqn_idx%stress%beg)%sf(k, l, q)
2405 tau_xy = q_cons_vf(eqn_idx%stress%beg + 1)%sf(k, l, q)
2406 tau_yy = q_cons_vf(eqn_idx%stress%beg + 2)%sf(k, l, q)
2407 tau_xz = q_cons_vf(eqn_idx%stress%beg + 3)%sf(k, l, q)
2408 tau_yz = q_cons_vf(eqn_idx%stress%beg + 4)%sf(k, l, q)
2409 tau_zz = q_cons_vf(eqn_idx%stress%beg + 5)%sf(k, l, q)
2410
2411 ! Invariants of the stress tensor
2412 i1 = tau_xx + tau_yy + tau_zz
2413 i2 = tau_xx*tau_yy + tau_xx*tau_zz + tau_yy*tau_zz - (tau_xy**2.0_wp + tau_xz**2.0_wp + tau_yz**2.0_wp)
2414 i3 = tau_xx*tau_yy*tau_zz + 2.0_wp*tau_xy*tau_xz*tau_yz - tau_xx*tau_yz**2.0_wp - tau_yy*tau_xz**2.0_wp &
2415 & - tau_zz*tau_xy**2.0_wp
2416
2417 ! Maximum principal stress
2418 temp = i1**2.0_wp - 3.0_wp*i2
2419 sqrt_term_1 = sqrt(max(temp, 0.0_wp))
2420 if (sqrt_term_1 > verysmall) then ! Avoid 0/0
2421 argument = (2.0_wp*i1*i1*i1 - 9.0_wp*i1*i2 + 27.0_wp*i3)/(2.0_wp*sqrt_term_1*sqrt_term_1*sqrt_term_1)
2422 if (argument > 1.0_wp) argument = 1.0_wp
2423 if (argument < -1.0_wp) argument = -1.0_wp
2424 phi = acos(argument)
2425 sqrt_term_2 = sqrt(max(i1**2.0_wp - 3.0_wp*i2, 0.0_wp))
2426 tau_p = i1/3.0_wp + 2.0_wp/sqrt(3.0_wp)*sqrt_term_2*cos(phi/3.0_wp)
2427 else
2428 tau_p = i1/3.0_wp
2429 end if
2430
2431 rhs_vf(eqn_idx%damage)%sf(k, l, q) = (alpha_bar*max(tau_p - tau_star, 0._wp))**cont_damage_s
2432 end do
2433 end do
2434 end do
2435
2436# 744 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2437#if defined(MFC_OpenACC)
2438# 744 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2439!$acc end parallel loop
2440# 744 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2441#elif defined(MFC_OpenMP)
2442# 744 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2443
2444# 744 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2445!$omp end target teams loop
2446# 744 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2447#endif
2448 end if
2449
2450 end subroutine s_compute_damage_state
2451
2452end module m_hypoelastic
type(scalar_field), dimension(sys_size), intent(inout) q_cons_vf
integer, intent(in) k
integer, intent(in) l
Shared derived types for field data, patch geometry, bubble dynamics, and MPI I/O structures.
Finite difference operators for computing divergence of velocity fields.
Global parameters for the computational domain, fluid properties, and simulation algorithm configurat...
Utility routines for bubble model setup, coordinate transforms, array sampling, and special functions...
Computes hypoelastic stress-rate source terms and damage-state evolution.
real(wp), dimension(:,:), allocatable fd_coeff_x_hypo
real(wp), dimension(:), allocatable gs_hypo
real(wp), dimension(:,:), allocatable fd_coeff_y_hypo
real(wp), dimension(:,:,:), allocatable dv_dz_hypo
real(wp), dimension(:,:,:), allocatable dv_dy_hypo
real(wp), dimension(:,:,:), allocatable dw_dz_hypo
subroutine, public s_compute_hypoelastic_rhs_iface(q_prim_vf, rhs_vf, nc_iface_vel_n)
Interface-consistent hypoelastic RHS (Mode 2: HLL/HLLC). Uses interface velocities from the Riemann s...
real(wp), dimension(:,:,:), allocatable du_dx_hypo
subroutine, public s_compute_hypoelastic_rhs_finite_diff_per_sweep(idir, q_prim_vf, rhs_vf)
Legacy FD-based hypoelastic RHS (Mode 1: HLL). Uses finite-difference velocity gradients computed fro...
real(wp), dimension(:,:,:), allocatable dw_dx_hypo
subroutine, public s_compute_hypoelastic_rhs_axisym_geom_dual_pass(q_prim_vf, rhs_vf, nc_iface_vel_y_vf, nc_iface_vel_y_hatr_vf)
Cylindrical completion for the dual-pass (anchored HLLD) hypoelastic path. The anchored augmented flu...
real(wp), dimension(:,:,:), allocatable du_dz_hypo
real(wp), dimension(:,:,:), allocatable dv_dx_hypo
real(wp), dimension(:,:), allocatable fd_coeff_z_hypo
subroutine, public s_compute_damage_state(q_cons_vf, rhs_vf)
Compute the continuum damage source term from the principal stress state.
real(wp), dimension(:,:,:), allocatable g_k_field
real(wp), dimension(:,:,:), allocatable du_dy_hypo
real(wp), dimension(:,:,:), allocatable dw_dy_hypo
impure subroutine, public s_initialize_hypoelastic_module
Initialize the hypoelastic module.
subroutine, public s_compute_hypoelastic_rhs_axisym_geom_iface(q_prim_vf, rhs_vf, nc_iface_vel_x_vf, nc_iface_vel_y_vf)
Axisymmetric geometric source terms for the hypoelastic stress evolution, using interface velocities....
impure subroutine, public s_finalize_hypoelastic_module()
Finalize the hypoelastic module.
real(wp), dimension(:,:,:), allocatable rho_k_field