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