MFC
Exascale flow solver
Loading...
Searching...
No Matches
m_hypoelastic.fpp.f90
Go to the documentation of this file.
1# 1 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
2!>
3!! @file
4!! @brief Contains module m_hypoelastic
5
6# 1 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 1
7# 1 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 1
8# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
9# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
10# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
11# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
12# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
13# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
14
15# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
16# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
17# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
18
19# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
20
21# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
22
23# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
24
25# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
26
27# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
28
29# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
30
31# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
32! New line at end of file is required for FYPP
33# 2 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
34# 1 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 1
35# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
36# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
37# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
38# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
39# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
40# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
41
42# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
43# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
44# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
45
46# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
47
48# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
49
50# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
51
52# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
53
54# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
55
56# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
57
58# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
59! New line at end of file is required for FYPP
60# 2 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 2
61
62# 4 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
63# 5 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
64# 6 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
65# 7 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
66# 8 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
67
68# 20 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
69
70# 43 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
71
72# 48 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
73
74# 53 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
75
76# 58 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
77
78# 63 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
79
80# 68 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
81
82# 76 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
83
84# 81 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
85
86# 86 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
87
88# 91 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
89
90# 96 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
91
92# 101 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
93
94# 106 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
95
96# 111 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
97
98# 116 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
99
100# 121 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
101
102# 151 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
103
104# 192 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
105
106# 206 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
107
108# 231 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
109
110# 242 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
111
112# 244 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
113# 255 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
114
115# 284 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
116
117# 294 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
118
119# 304 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
120
121# 313 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
122
123# 330 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
124
125# 340 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
126
127# 347 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
128
129# 353 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
130
131# 359 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
132
133# 365 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
134
135# 371 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
136
137# 377 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
138! New line at end of file is required for FYPP
139# 3 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
140# 1 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 1
141# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
142# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
143# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
144# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
145# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
146# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
147
148# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
149# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
150# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
151
152# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
153
154# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
155
156# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
157
158# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
159
160# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
161
162# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
163
164# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
165! New line at end of file is required for FYPP
166# 2 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 2
167
168# 7 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
169
170# 17 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
171
172# 22 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
173
174# 27 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
175
176# 32 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
177
178# 37 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
179
180# 42 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
181
182# 47 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
183
184# 52 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
185
186# 57 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
187
188# 62 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
189
190# 73 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
191
192# 78 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
193
194# 83 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
195
196# 88 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
197
198# 103 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
199
200# 131 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
201
202# 160 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
203
204# 175 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
205
206# 193 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
207
208# 215 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
209
210# 244 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
211
212# 259 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
213
214# 269 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
215
216# 278 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
217
218# 294 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
219
220# 304 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
221
222# 311 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
223! New line at end of file is required for FYPP
224# 4 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
225
226! GPU parallel region (scalar reductions, maxval/minval)
227# 23 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
228
229! GPU parallel loop over threads (most common GPU macro)
230# 43 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
231
232! Required closing for GPU_PARALLEL_LOOP
233# 55 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
234
235! Mark routine for device compilation
236# 112 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
237
238! Declare device-resident data
239# 130 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
240
241! Inner loop within a GPU parallel region
242# 145 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
243
244! Scoped GPU data region
245# 164 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
246
247! Host code with device pointers (for MPI with GPU buffers)
248# 193 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
249
250! Allocate device memory (unscoped)
251# 207 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
252
253! Free device memory
254# 219 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
255
256! Atomic operation on device
257# 231 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
258
259! End atomic capture block
260# 242 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
261
262! Copy data between host and device
263# 254 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
264
265! Synchronization barrier
266# 266 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
267
268! Import GPU library module (openacc or omp_lib)
269# 275 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
270
271! Emit code only for AMD compiler
272# 282 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
273
274! Emit code for non-Cray compilers
275# 289 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
276
277! Emit code only for Cray compiler
278# 296 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
279
280! Emit code for non-NVIDIA compilers
281# 303 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
282
283# 305 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
284# 306 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
285! New line at end of file is required for FYPP
286# 2 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 2
287
288# 14 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
289
290! Caution: This macro requires the use of a binding script to set CUDA_VISIBLE_DEVICES, such that we have one GPU device per MPI
291! rank. That's because for both cudaMemAdvise (preferred location) and cudaMemPrefetchAsync we use location = device_id = 0. For an
292! example see misc/nvidia_uvm/bind.sh. NVIDIA unified memory page placement hint
293# 57 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
294
295! Allocate and create GPU device memory
296# 77 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
297
298! Free GPU device memory and deallocate
299# 85 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
300
301! Cray-specific GPU pointer setup for vector fields
302# 109 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
303
304! Cray-specific GPU pointer setup for scalar fields
305# 125 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
306
307! Cray-specific GPU pointer setup for acoustic source spatials
308# 150 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
309
310# 156 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
311
312# 163 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
313! New line at end of file is required for FYPP
314# 6 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp" 2
315
316!> @brief Computes hypoelastic stress-rate source terms and damage-state evolution
318
322 use m_helper
323
324 implicit none
325
328
329 real(wp), allocatable, dimension(:) :: gs_hypo
330
331# 21 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
332#if defined(MFC_OpenACC)
333# 21 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
334!$acc declare create(Gs_hypo)
335# 21 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
336#elif defined(MFC_OpenMP)
337# 21 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
338!$omp declare target (Gs_hypo)
339# 21 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
340#endif
341
342 real(wp), allocatable, dimension(:,:,:) :: du_dx_hypo, du_dy_hypo, du_dz_hypo
343 real(wp), allocatable, dimension(:,:,:) :: dv_dx_hypo, dv_dy_hypo, dv_dz_hypo
344 real(wp), allocatable, dimension(:,:,:) :: dw_dx_hypo, dw_dy_hypo, dw_dz_hypo
345
346# 26 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
347#if defined(MFC_OpenACC)
348# 26 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
349!$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)
350# 26 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
351#elif defined(MFC_OpenMP)
352# 26 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
353!$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)
354# 26 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
355#endif
356
357 real(wp), allocatable, dimension(:,:,:) :: rho_k_field, g_k_field
358
359# 29 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
360#if defined(MFC_OpenACC)
361# 29 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
362!$acc declare create(rho_K_field, G_K_field)
363# 29 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
364#elif defined(MFC_OpenMP)
365# 29 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
366!$omp declare target (rho_K_field, G_K_field)
367# 29 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
368#endif
369
370 real(wp), allocatable, dimension(:,:) :: fd_coeff_x_hypo
371 real(wp), allocatable, dimension(:,:) :: fd_coeff_y_hypo
372 real(wp), allocatable, dimension(:,:) :: fd_coeff_z_hypo
373
374# 34 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
375#if defined(MFC_OpenACC)
376# 34 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
377!$acc declare create(fd_coeff_x_hypo, fd_coeff_y_hypo, fd_coeff_z_hypo)
378# 34 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
379#elif defined(MFC_OpenMP)
380# 34 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
381!$omp declare target (fd_coeff_x_hypo, fd_coeff_y_hypo, fd_coeff_z_hypo)
382# 34 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
383#endif
384
385contains
386
387 !> Initialize the hypoelastic module
389
390 integer :: i
391
392#ifdef MFC_DEBUG
393# 43 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
394 block
395# 43 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
396 use iso_fortran_env, only: output_unit
397# 43 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
398
399# 43 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
400 print *, 'm_hypoelastic.fpp:43: ', '@:ALLOCATE(Gs_hypo(1:num_fluids))'
401# 43 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
402
403# 43 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
404 call flush (output_unit)
405# 43 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
406 end block
407# 43 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
408#endif
409# 43 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
410 allocate (gs_hypo(1:num_fluids))
411# 43 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
412
413# 43 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
414
415# 43 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
416#if defined(MFC_OpenACC)
417# 43 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
418!$acc enter data create(Gs_hypo)
419# 43 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
420#elif defined(MFC_OpenMP)
421# 43 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
422!$omp target enter data map(always,alloc:Gs_hypo)
423# 43 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
424#endif
425#ifdef MFC_DEBUG
426# 44 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
427 block
428# 44 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
429 use iso_fortran_env, only: output_unit
430# 44 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
431
432# 44 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
433 print *, 'm_hypoelastic.fpp:44: ', '@:ALLOCATE(rho_K_field(0:m,0:n,0:p), G_K_field(0:m,0:n,0:p))'
434# 44 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
435
436# 44 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
437 call flush (output_unit)
438# 44 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
439 end block
440# 44 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
441#endif
442# 44 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
443 allocate (rho_k_field(0:m,0:n,0:p), g_k_field(0:m,0:n,0:p))
444# 44 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
445
446# 44 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
447
448# 44 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
449
450# 44 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
451#if defined(MFC_OpenACC)
452# 44 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
453!$acc enter data create(rho_K_field, G_K_field)
454# 44 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
455#elif defined(MFC_OpenMP)
456# 44 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
457!$omp target enter data map(always,alloc:rho_K_field, G_K_field)
458# 44 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
459#endif
460#ifdef MFC_DEBUG
461# 45 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
462 block
463# 45 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
464 use iso_fortran_env, only: output_unit
465# 45 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
466
467# 45 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
468 print *, 'm_hypoelastic.fpp:45: ', '@:ALLOCATE(du_dx_hypo(0:m,0:n,0:p))'
469# 45 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
470
471# 45 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
472 call flush (output_unit)
473# 45 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
474 end block
475# 45 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
476#endif
477# 45 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
478 allocate (du_dx_hypo(0:m,0:n,0:p))
479# 45 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
480
481# 45 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
482
483# 45 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
484#if defined(MFC_OpenACC)
485# 45 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
486!$acc enter data create(du_dx_hypo)
487# 45 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
488#elif defined(MFC_OpenMP)
489# 45 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
490!$omp target enter data map(always,alloc:du_dx_hypo)
491# 45 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
492#endif
493 if (n > 0) then
494#ifdef MFC_DEBUG
495# 47 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
496 block
497# 47 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
498 use iso_fortran_env, only: output_unit
499# 47 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
500
501# 47 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
502 print *, 'm_hypoelastic.fpp:47: ', '@: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))'
503# 47 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
504
505# 47 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
506 call flush (output_unit)
507# 47 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
508 end block
509# 47 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
510#endif
511# 47 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
512 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))
513# 47 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
514
515# 47 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
516
517# 47 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
518
519# 47 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
520
521# 47 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
522#if defined(MFC_OpenACC)
523# 47 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
524!$acc enter data create(du_dy_hypo, dv_dx_hypo, dv_dy_hypo)
525# 47 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
526#elif defined(MFC_OpenMP)
527# 47 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
528!$omp target enter data map(always,alloc:du_dy_hypo, dv_dx_hypo, dv_dy_hypo)
529# 47 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
530#endif
531 if (p > 0) then
532#ifdef MFC_DEBUG
533# 49 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
534 block
535# 49 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
536 use iso_fortran_env, only: output_unit
537# 49 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
538
539# 49 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
540 print *, 'm_hypoelastic.fpp:49: ', '@:ALLOCATE(du_dz_hypo(0:m,0:n,0:p), dv_dz_hypo(0:m,0:n,0:p))'
541# 49 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
542
543# 49 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
544 call flush (output_unit)
545# 49 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
546 end block
547# 49 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
548#endif
549# 49 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
550 allocate (du_dz_hypo(0:m,0:n,0:p), dv_dz_hypo(0:m,0:n,0:p))
551# 49 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
552
553# 49 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
554
555# 49 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
556
557# 49 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
558#if defined(MFC_OpenACC)
559# 49 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
560!$acc enter data create(du_dz_hypo, dv_dz_hypo)
561# 49 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
562#elif defined(MFC_OpenMP)
563# 49 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
564!$omp target enter data map(always,alloc:du_dz_hypo, dv_dz_hypo)
565# 49 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
566#endif
567#ifdef MFC_DEBUG
568# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
569 block
570# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
571 use iso_fortran_env, only: output_unit
572# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
573
574# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
575 print *, 'm_hypoelastic.fpp:50: ', '@: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))'
576# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
577
578# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
579 call flush (output_unit)
580# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
581 end block
582# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
583#endif
584# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
585 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))
586# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
587
588# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
589
590# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
591
592# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
593
594# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
595#if defined(MFC_OpenACC)
596# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
597!$acc enter data create(dw_dx_hypo, dw_dy_hypo, dw_dz_hypo)
598# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
599#elif defined(MFC_OpenMP)
600# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
601!$omp target enter data map(always,alloc:dw_dx_hypo, dw_dy_hypo, dw_dz_hypo)
602# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
603#endif
604 end if
605 end if
606
607 do i = 1, num_fluids
608 gs_hypo(i) = fluid_pp(i)%G
609 end do
610
611# 57 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
612#if defined(MFC_OpenACC)
613# 57 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
614!$acc update device(Gs_hypo)
615# 57 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
616#elif defined(MFC_OpenMP)
617# 57 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
618!$omp target update to(Gs_hypo)
619# 57 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
620#endif
621
622#ifdef MFC_DEBUG
623# 59 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
624 block
625# 59 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
626 use iso_fortran_env, only: output_unit
627# 59 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
628
629# 59 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
630 print *, 'm_hypoelastic.fpp:59: ', '@:ALLOCATE(fd_coeff_x_hypo(-fd_number:fd_number, 0:m))'
631# 59 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
632
633# 59 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
634 call flush (output_unit)
635# 59 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
636 end block
637# 59 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
638#endif
639# 59 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
640 allocate (fd_coeff_x_hypo(-fd_number:fd_number, 0:m))
641# 59 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
642
643# 59 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
644
645# 59 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
646#if defined(MFC_OpenACC)
647# 59 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
648!$acc enter data create(fd_coeff_x_hypo)
649# 59 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
650#elif defined(MFC_OpenMP)
651# 59 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
652!$omp target enter data map(always,alloc:fd_coeff_x_hypo)
653# 59 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
654#endif
655 if (n > 0) then
656#ifdef MFC_DEBUG
657# 61 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
658 block
659# 61 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
660 use iso_fortran_env, only: output_unit
661# 61 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
662
663# 61 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
664 print *, 'm_hypoelastic.fpp:61: ', '@:ALLOCATE(fd_coeff_y_hypo(-fd_number:fd_number, 0:n))'
665# 61 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
666
667# 61 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
668 call flush (output_unit)
669# 61 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
670 end block
671# 61 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
672#endif
673# 61 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
674 allocate (fd_coeff_y_hypo(-fd_number:fd_number, 0:n))
675# 61 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
676
677# 61 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
678
679# 61 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
680#if defined(MFC_OpenACC)
681# 61 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
682!$acc enter data create(fd_coeff_y_hypo)
683# 61 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
684#elif defined(MFC_OpenMP)
685# 61 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
686!$omp target enter data map(always,alloc:fd_coeff_y_hypo)
687# 61 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
688#endif
689 end if
690 if (p > 0) then
691#ifdef MFC_DEBUG
692# 64 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
693 block
694# 64 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
695 use iso_fortran_env, only: output_unit
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 print *, 'm_hypoelastic.fpp:64: ', '@:ALLOCATE(fd_coeff_z_hypo(-fd_number:fd_number, 0:p))'
700# 64 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
701
702# 64 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
703 call flush (output_unit)
704# 64 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
705 end block
706# 64 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
707#endif
708# 64 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
709 allocate (fd_coeff_z_hypo(-fd_number:fd_number, 0:p))
710# 64 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
711
712# 64 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
713
714# 64 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
715#if defined(MFC_OpenACC)
716# 64 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
717!$acc enter data create(fd_coeff_z_hypo)
718# 64 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
719#elif defined(MFC_OpenMP)
720# 64 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
721!$omp target enter data map(always,alloc:fd_coeff_z_hypo)
722# 64 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
723#endif
724 end if
725
726 ! Computing centered finite difference coefficients
727 call s_compute_finite_difference_coefficients(m, x_cc, fd_coeff_x_hypo, buff_size, fd_number, fd_order)
728
729# 69 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
730#if defined(MFC_OpenACC)
731# 69 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
732!$acc update device(fd_coeff_x_hypo)
733# 69 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
734#elif defined(MFC_OpenMP)
735# 69 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
736!$omp target update to(fd_coeff_x_hypo)
737# 69 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
738#endif
739 if (n > 0) then
740 call s_compute_finite_difference_coefficients(n, y_cc, fd_coeff_y_hypo, buff_size, fd_number, fd_order)
741
742# 72 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
743#if defined(MFC_OpenACC)
744# 72 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
745!$acc update device(fd_coeff_y_hypo)
746# 72 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
747#elif defined(MFC_OpenMP)
748# 72 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
749!$omp target update to(fd_coeff_y_hypo)
750# 72 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
751#endif
752 end if
753 if (p > 0) then
754 call s_compute_finite_difference_coefficients(p, z_cc, fd_coeff_z_hypo, buff_size, fd_number, fd_order)
755
756# 76 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
757#if defined(MFC_OpenACC)
758# 76 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
759!$acc update device(fd_coeff_z_hypo)
760# 76 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
761#elif defined(MFC_OpenMP)
762# 76 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
763!$omp target update to(fd_coeff_z_hypo)
764# 76 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
765#endif
766 end if
767
769
770 !> Compute the hypoelastic stress source terms
771 subroutine s_compute_hypoelastic_rhs(idir, q_prim_vf, rhs_vf)
772
773 integer, intent(in) :: idir
774 type(scalar_field), dimension(sys_size), intent(in) :: q_prim_vf
775 type(scalar_field), dimension(sys_size), intent(inout) :: rhs_vf
776 real(wp) :: rho_k, g_k
777 integer :: i, k, l, q, r !< Loop variables
778 integer :: ndirs !< Number of coordinate directions
779
780 ndirs = 1; if (n > 0) ndirs = 2; if (p > 0) ndirs = 3
781
782 if (idir == 1) then
783 ! calculate velocity gradients + rho_K and G_K TODO: re-organize these loops one by one for GPU efficiency if possible?
784
785
786# 96 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
787
788# 96 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
789#if defined(MFC_OpenACC)
790# 96 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
791!$acc parallel loop collapse(3) gang vector default(present)
792# 96 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
793#elif defined(MFC_OpenMP)
794# 96 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
795
796# 96 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
797
798# 96 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
799
800# 96 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
801!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
802# 96 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
803#endif
804 do q = 0, p
805 do l = 0, n
806 do k = 0, m
807 du_dx_hypo(k, l, q) = 0._wp
808 end do
809 end do
810 end do
811
812# 104 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
813#if defined(MFC_OpenACC)
814# 104 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
815!$acc end parallel loop
816# 104 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
817#elif defined(MFC_OpenMP)
818# 104 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
819
820# 104 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
821!$omp end target teams loop
822# 104 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
823#endif
824
825
826# 106 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
827
828# 106 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
829#if defined(MFC_OpenACC)
830# 106 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
831!$acc parallel loop collapse(3) gang vector default(present)
832# 106 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
833#elif defined(MFC_OpenMP)
834# 106 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
835
836# 106 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
837
838# 106 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
839
840# 106 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
841!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
842# 106 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
843#endif
844 do q = 0, p
845 do l = 0, n
846 do k = 0, m
847
848# 110 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
849#if defined(MFC_OpenACC)
850# 110 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
851!$acc loop seq
852# 110 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
853#elif defined(MFC_OpenMP)
854# 110 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
855
856# 110 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
857#endif
858 do r = -fd_number, fd_number
859 du_dx_hypo(k, l, q) = du_dx_hypo(k, l, q) + q_prim_vf(momxb)%sf(k + r, l, q)*fd_coeff_x_hypo(r, k)
860 end do
861 end do
862 end do
863 end do
864
865# 117 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
866#if defined(MFC_OpenACC)
867# 117 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
868!$acc end parallel loop
869# 117 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
870#elif defined(MFC_OpenMP)
871# 117 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
872
873# 117 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
874!$omp end target teams loop
875# 117 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
876#endif
877
878 if (ndirs > 1) then
879
880# 120 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
881
882# 120 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
883#if defined(MFC_OpenACC)
884# 120 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
885!$acc parallel loop collapse(3) gang vector default(present)
886# 120 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
887#elif defined(MFC_OpenMP)
888# 120 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
889
890# 120 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
891
892# 120 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
893
894# 120 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
895!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
896# 120 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
897#endif
898 do q = 0, p
899 do l = 0, n
900 do k = 0, m
901 du_dy_hypo(k, l, q) = 0._wp; dv_dx_hypo(k, l, q) = 0._wp; dv_dy_hypo(k, l, q) = 0._wp
902 end do
903 end do
904 end do
905
906# 128 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
907#if defined(MFC_OpenACC)
908# 128 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
909!$acc end parallel loop
910# 128 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
911#elif defined(MFC_OpenMP)
912# 128 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
913
914# 128 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
915!$omp end target teams loop
916# 128 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
917#endif
918
919
920# 130 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
921
922# 130 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
923#if defined(MFC_OpenACC)
924# 130 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
925!$acc parallel loop collapse(3) gang vector default(present)
926# 130 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
927#elif defined(MFC_OpenMP)
928# 130 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
929
930# 130 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
931
932# 130 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
933
934# 130 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
935!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
936# 130 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
937#endif
938 do q = 0, p
939 do l = 0, n
940 do k = 0, m
941
942# 134 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
943#if defined(MFC_OpenACC)
944# 134 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
945!$acc loop seq
946# 134 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
947#elif defined(MFC_OpenMP)
948# 134 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
949
950# 134 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
951#endif
952 do r = -fd_number, fd_number
953 du_dy_hypo(k, l, q) = du_dy_hypo(k, l, q) + q_prim_vf(momxb)%sf(k, l + r, q)*fd_coeff_y_hypo(r, l)
954 dv_dx_hypo(k, l, q) = dv_dx_hypo(k, l, q) + q_prim_vf(momxb + 1)%sf(k + r, l, &
955 & q)*fd_coeff_x_hypo(r, k)
956 dv_dy_hypo(k, l, q) = dv_dy_hypo(k, l, q) + q_prim_vf(momxb + 1)%sf(k, l + r, &
957 & q)*fd_coeff_y_hypo(r, l)
958 end do
959 end do
960 end do
961 end do
962
963# 145 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
964#if defined(MFC_OpenACC)
965# 145 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
966!$acc end parallel loop
967# 145 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
968#elif defined(MFC_OpenMP)
969# 145 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
970
971# 145 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
972!$omp end target teams loop
973# 145 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
974#endif
975
976 ! 3D
977 if (ndirs == 3) then
978
979# 149 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
980
981# 149 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
982#if defined(MFC_OpenACC)
983# 149 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
984!$acc parallel loop collapse(3) gang vector default(present)
985# 149 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
986#elif defined(MFC_OpenMP)
987# 149 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
988
989# 149 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
990
991# 149 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
992
993# 149 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
994!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
995# 149 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
996#endif
997 do q = 0, p
998 do l = 0, n
999 do k = 0, m
1000 du_dz_hypo(k, l, q) = 0._wp; dv_dz_hypo(k, l, q) = 0._wp; dw_dx_hypo(k, l, q) = 0._wp
1001 dw_dy_hypo(k, l, q) = 0._wp; dw_dz_hypo(k, l, q) = 0._wp
1002 end do
1003 end do
1004 end do
1005
1006# 158 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1007#if defined(MFC_OpenACC)
1008# 158 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1009!$acc end parallel loop
1010# 158 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1011#elif defined(MFC_OpenMP)
1012# 158 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1013
1014# 158 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1015!$omp end target teams loop
1016# 158 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1017#endif
1018
1019
1020# 160 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1021
1022# 160 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1023#if defined(MFC_OpenACC)
1024# 160 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1025!$acc parallel loop collapse(3) gang vector default(present)
1026# 160 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1027#elif defined(MFC_OpenMP)
1028# 160 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1029
1030# 160 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1031
1032# 160 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1033
1034# 160 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1035!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
1036# 160 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1037#endif
1038 do q = 0, p
1039 do l = 0, n
1040 do k = 0, m
1041
1042# 164 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1043#if defined(MFC_OpenACC)
1044# 164 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1045!$acc loop seq
1046# 164 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1047#elif defined(MFC_OpenMP)
1048# 164 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1049
1050# 164 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1051#endif
1052 do r = -fd_number, fd_number
1053 du_dz_hypo(k, l, q) = du_dz_hypo(k, l, q) + q_prim_vf(momxb)%sf(k, l, &
1054 & q + r)*fd_coeff_z_hypo(r, q)
1055 dv_dz_hypo(k, l, q) = dv_dz_hypo(k, l, q) + q_prim_vf(momxb + 1)%sf(k, l, &
1056 & q + r)*fd_coeff_z_hypo(r, q)
1057 dw_dx_hypo(k, l, q) = dw_dx_hypo(k, l, q) + q_prim_vf(momxe)%sf(k + r, l, &
1058 & q)*fd_coeff_x_hypo(r, k)
1059 dw_dy_hypo(k, l, q) = dw_dy_hypo(k, l, q) + q_prim_vf(momxe)%sf(k, l + r, &
1060 & q)*fd_coeff_y_hypo(r, l)
1061 dw_dz_hypo(k, l, q) = dw_dz_hypo(k, l, q) + q_prim_vf(momxe)%sf(k, l, &
1062 & q + r)*fd_coeff_z_hypo(r, q)
1063 end do
1064 end do
1065 end do
1066 end do
1067
1068# 180 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1069#if defined(MFC_OpenACC)
1070# 180 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1071!$acc end parallel loop
1072# 180 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1073#elif defined(MFC_OpenMP)
1074# 180 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1075
1076# 180 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1077!$omp end target teams loop
1078# 180 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1079#endif
1080 end if
1081 end if
1082
1083
1084# 184 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1085
1086# 184 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1087#if defined(MFC_OpenACC)
1088# 184 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1089!$acc parallel loop collapse(3) gang vector default(present) private(rho_K, G_K)
1090# 184 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1091#elif defined(MFC_OpenMP)
1092# 184 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1093
1094# 184 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1095
1096# 184 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1097
1098# 184 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1099!$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)
1100# 184 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1101#endif
1102 do q = 0, p
1103 do l = 0, n
1104 do k = 0, m
1105 rho_k = 0._wp; g_k = 0._wp
1106 do i = 1, num_fluids
1107 rho_k = rho_k + q_prim_vf(i)%sf(k, l, q) ! alpha_rho_K(1)
1108 g_k = g_k + q_prim_vf(advxb - 1 + i)%sf(k, l, q)*gs_hypo(i) ! alpha_K(1) * Gs_hypo(1)
1109 end do
1110
1111 ! Continuum damage: (1-D) scales effective stiffness, D in [0,1]
1112 if (cont_damage) g_k = g_k*max((1._wp - q_prim_vf(damage_idx)%sf(k, l, q)), 0._wp)
1113
1114 rho_k_field(k, l, q) = rho_k
1115 g_k_field(k, l, q) = g_k
1116
1117 ! TODO: take this out if not needed
1118 if (g_k < verysmall) then
1119 g_k_field(k, l, q) = 0
1120 end if
1121 end do
1122 end do
1123 end do
1124
1125# 207 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1126#if defined(MFC_OpenACC)
1127# 207 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1128!$acc end parallel loop
1129# 207 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1130#elif defined(MFC_OpenMP)
1131# 207 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1132
1133# 207 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1134!$omp end target teams loop
1135# 207 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1136#endif
1137
1138 ! apply rhs source term to elastic stress equation
1139
1140# 210 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1141
1142# 210 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1143#if defined(MFC_OpenACC)
1144# 210 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1145!$acc parallel loop collapse(3) gang vector default(present)
1146# 210 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1147#elif defined(MFC_OpenMP)
1148# 210 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1149
1150# 210 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1151
1152# 210 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1153
1154# 210 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1155!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
1156# 210 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1157#endif
1158 do q = 0, p
1159 do l = 0, n
1160 do k = 0, m
1161 rhs_vf(strxb)%sf(k, l, q) = rhs_vf(strxb)%sf(k, l, q) + rho_k_field(k, l, q)*((4._wp*g_k_field(k, l, &
1162 & q)/3._wp) + q_prim_vf(strxb)%sf(k, l, q))*du_dx_hypo(k, l, q)
1163 end do
1164 end do
1165 end do
1166
1167# 219 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1168#if defined(MFC_OpenACC)
1169# 219 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1170!$acc end parallel loop
1171# 219 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1172#elif defined(MFC_OpenMP)
1173# 219 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1174
1175# 219 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1176!$omp end target teams loop
1177# 219 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1178#endif
1179 else if (idir == 2) then
1180
1181# 221 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1182
1183# 221 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1184#if defined(MFC_OpenACC)
1185# 221 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1186!$acc parallel loop collapse(3) gang vector default(present)
1187# 221 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1188#elif defined(MFC_OpenMP)
1189# 221 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1190
1191# 221 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1192
1193# 221 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1194
1195# 221 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1196!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
1197# 221 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1198#endif
1199 do q = 0, p
1200 do l = 0, n
1201 do k = 0, m
1202 rhs_vf(strxb)%sf(k, l, q) = rhs_vf(strxb)%sf(k, l, q) + rho_k_field(k, l, q)*(q_prim_vf(strxb + 1)%sf(k, &
1203 & l, q)*du_dy_hypo(k, l, q) + q_prim_vf(strxb + 1)%sf(k, l, q)*du_dy_hypo(k, l, &
1204 & q) - q_prim_vf(strxb)%sf(k, l, q)*dv_dy_hypo(k, l, q) - 2._wp*g_k_field(k, l, &
1205 & q)*(1._wp/3._wp)*dv_dy_hypo(k, l, q))
1206
1207 rhs_vf(strxb + 1)%sf(k, l, q) = rhs_vf(strxb + 1)%sf(k, l, q) + rho_k_field(k, l, &
1208 & q)*(q_prim_vf(strxb + 1)%sf(k, l, q)*du_dx_hypo(k, l, q) + q_prim_vf(strxb)%sf(k, l, &
1209 & q)*dv_dx_hypo(k, l, q) - q_prim_vf(strxb + 1)%sf(k, l, q)*du_dx_hypo(k, l, &
1210 & q) + q_prim_vf(strxb + 2)%sf(k, l, q)*du_dy_hypo(k, l, q) + q_prim_vf(strxb + 1)%sf(k, l, &
1211 & q)*dv_dy_hypo(k, l, q) - q_prim_vf(strxb + 1)%sf(k, l, q)*dv_dy_hypo(k, l, &
1212 & q) + 2._wp*g_k_field(k, l, q)*(1._wp/2._wp)*(du_dy_hypo(k, l, q) + dv_dx_hypo(k, l, q)))
1213
1214 rhs_vf(strxb + 2)%sf(k, l, q) = rhs_vf(strxb + 2)%sf(k, l, q) + rho_k_field(k, l, &
1215 & q)*(q_prim_vf(strxb + 1)%sf(k, l, q)*dv_dx_hypo(k, l, q) + q_prim_vf(strxb + 1)%sf(k, l, &
1216 & q)*dv_dx_hypo(k, l, q) - q_prim_vf(strxb + 2)%sf(k, l, q)*du_dx_hypo(k, l, &
1217 & q) + q_prim_vf(strxb + 2)%sf(k, l, q)*dv_dy_hypo(k, l, q) + q_prim_vf(strxb + 2)%sf(k, l, &
1218 & q)*dv_dy_hypo(k, l, q) - q_prim_vf(strxb + 2)%sf(k, l, q)*dv_dy_hypo(k, l, &
1219 & q) + 2._wp*g_k_field(k, l, q)*(dv_dy_hypo(k, l, q) - (1._wp/3._wp)*(du_dx_hypo(k, l, &
1220 & q) + dv_dy_hypo(k, l, q))))
1221 end do
1222 end do
1223 end do
1224
1225# 247 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1226#if defined(MFC_OpenACC)
1227# 247 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1228!$acc end parallel loop
1229# 247 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1230#elif defined(MFC_OpenMP)
1231# 247 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1232
1233# 247 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1234!$omp end target teams loop
1235# 247 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1236#endif
1237 else if (idir == 3) then
1238
1239# 249 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1240
1241# 249 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1242#if defined(MFC_OpenACC)
1243# 249 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1244!$acc parallel loop collapse(3) gang vector default(present)
1245# 249 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1246#elif defined(MFC_OpenMP)
1247# 249 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1248
1249# 249 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1250
1251# 249 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1252
1253# 249 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1254!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
1255# 249 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1256#endif
1257 do q = 0, p
1258 do l = 0, n
1259 do k = 0, m
1260 rhs_vf(strxb)%sf(k, l, q) = rhs_vf(strxb)%sf(k, l, q) + rho_k_field(k, l, q)*(q_prim_vf(strxb + 3)%sf(k, &
1261 & l, q)*du_dz_hypo(k, l, q) + q_prim_vf(strxb + 3)%sf(k, l, q)*du_dz_hypo(k, l, &
1262 & q) - q_prim_vf(strxb)%sf(k, l, q)*dw_dz_hypo(k, l, q) - 2._wp*g_k_field(k, l, &
1263 & q)*(1._wp/3._wp)*dw_dz_hypo(k, l, q))
1264
1265 rhs_vf(strxb + 1)%sf(k, l, q) = rhs_vf(strxb + 1)%sf(k, l, q) + rho_k_field(k, l, &
1266 & q)*(q_prim_vf(strxb + 4)%sf(k, l, q)*du_dz_hypo(k, l, q) + q_prim_vf(strxb + 3)%sf(k, l, &
1267 & q)*dv_dz_hypo(k, l, q) - q_prim_vf(strxb + 1)%sf(k, l, q)*dw_dz_hypo(k, l, q))
1268
1269 rhs_vf(strxb + 2)%sf(k, l, q) = rhs_vf(strxb + 2)%sf(k, l, q) + rho_k_field(k, l, &
1270 & q)*(q_prim_vf(strxb + 4)%sf(k, l, q)*dv_dz_hypo(k, l, q) + q_prim_vf(strxb + 4)%sf(k, l, &
1271 & q)*dv_dz_hypo(k, l, q) - q_prim_vf(strxb + 2)%sf(k, l, q)*dw_dz_hypo(k, l, &
1272 & q) - 2._wp*g_k_field(k, l, q)*(1._wp/3._wp)*dw_dz_hypo(k, l, q))
1273
1274 rhs_vf(strxb + 3)%sf(k, l, q) = rhs_vf(strxb + 3)%sf(k, l, q) + rho_k_field(k, l, &
1275 & q)*(q_prim_vf(strxb + 3)%sf(k, l, q)*du_dx_hypo(k, l, q) + q_prim_vf(strxb)%sf(k, l, &
1276 & q)*dw_dx_hypo(k, l, q) - q_prim_vf(strxb + 3)%sf(k, l, q)*du_dx_hypo(k, l, &
1277 & q) + q_prim_vf(strxb + 4)%sf(k, l, q)*du_dy_hypo(k, l, q) + q_prim_vf(strxb + 1)%sf(k, l, &
1278 & q)*dw_dy_hypo(k, l, q) - q_prim_vf(strxb + 3)%sf(k, l, q)*dv_dy_hypo(k, l, &
1279 & q) + q_prim_vf(strxb + 5)%sf(k, l, q)*du_dz_hypo(k, l, q) + q_prim_vf(strxb + 3)%sf(k, l, &
1280 & q)*dw_dz_hypo(k, l, q) - q_prim_vf(strxb + 3)%sf(k, l, q)*dw_dz_hypo(k, l, &
1281 & q) + 2._wp*g_k_field(k, l, q)*(1._wp/2._wp)*(du_dz_hypo(k, l, q) + dw_dx_hypo(k, l, q)))
1282
1283 rhs_vf(strxb + 4)%sf(k, l, q) = rhs_vf(strxb + 4)%sf(k, l, q) + rho_k_field(k, l, &
1284 & q)*(q_prim_vf(strxb + 3)%sf(k, l, q)*dv_dx_hypo(k, l, q) + q_prim_vf(strxb + 1)%sf(k, l, &
1285 & q)*dw_dx_hypo(k, l, q) - q_prim_vf(strxb + 4)%sf(k, l, q)*du_dx_hypo(k, l, &
1286 & q) + q_prim_vf(strxb + 4)%sf(k, l, q)*dv_dy_hypo(k, l, q) + q_prim_vf(strxb + 2)%sf(k, l, &
1287 & q)*dw_dy_hypo(k, l, q) - q_prim_vf(strxb + 4)%sf(k, l, q)*dv_dy_hypo(k, l, &
1288 & q) + q_prim_vf(strxb + 5)%sf(k, l, q)*dv_dz_hypo(k, l, q) + q_prim_vf(strxb + 4)%sf(k, l, &
1289 & q)*dw_dz_hypo(k, l, q) - q_prim_vf(strxb + 4)%sf(k, l, q)*dw_dz_hypo(k, l, &
1290 & q) + 2._wp*g_k_field(k, l, q)*(1._wp/2._wp)*(dv_dz_hypo(k, l, q) + dw_dy_hypo(k, l, q)))
1291
1292 rhs_vf(strxe)%sf(k, l, q) = rhs_vf(strxe)%sf(k, l, q) + rho_k_field(k, l, q)*(q_prim_vf(strxe - 2)%sf(k, &
1293 & l, q)*dw_dx_hypo(k, l, q) + q_prim_vf(strxe - 2)%sf(k, l, q)*dw_dx_hypo(k, l, &
1294 & q) - q_prim_vf(strxe)%sf(k, l, q)*du_dx_hypo(k, l, q) + q_prim_vf(strxe - 1)%sf(k, l, &
1295 & q)*dw_dy_hypo(k, l, q) + q_prim_vf(strxe - 1)%sf(k, l, q)*dw_dy_hypo(k, l, &
1296 & q) - q_prim_vf(strxe)%sf(k, l, q)*dv_dy_hypo(k, l, q) + q_prim_vf(strxe)%sf(k, l, &
1297 & q)*dw_dz_hypo(k, l, q) + q_prim_vf(strxe)%sf(k, l, q)*dw_dz_hypo(k, l, &
1298 & q) - q_prim_vf(strxe)%sf(k, l, q)*dw_dz_hypo(k, l, q) + 2._wp*g_k_field(k, l, q)*(dw_dz_hypo(k, &
1299 & l, q) - (1._wp/3._wp)*(du_dx_hypo(k, l, q) + dv_dy_hypo(k, l, q) + dw_dz_hypo(k, l, q))))
1300 end do
1301 end do
1302 end do
1303
1304# 296 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1305#if defined(MFC_OpenACC)
1306# 296 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1307!$acc end parallel loop
1308# 296 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1309#elif defined(MFC_OpenMP)
1310# 296 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1311
1312# 296 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1313!$omp end target teams loop
1314# 296 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1315#endif
1316 end if
1317
1318 if (cyl_coord .and. idir == 2) then
1319
1320# 300 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1321
1322# 300 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1323#if defined(MFC_OpenACC)
1324# 300 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1325!$acc parallel loop collapse(3) gang vector default(present)
1326# 300 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1327#elif defined(MFC_OpenMP)
1328# 300 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1329
1330# 300 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1331
1332# 300 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1333
1334# 300 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1335!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
1336# 300 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1337#endif
1338 do q = 0, p
1339 do l = 0, n
1340 do k = 0, m
1341 ! S_xx -= rho * v/r * (tau_xx + 2/3*G)
1342 rhs_vf(strxb)%sf(k, l, q) = rhs_vf(strxb)%sf(k, l, q) - rho_k_field(k, l, q)*q_prim_vf(momxb + 1)%sf(k, &
1343 & l, q)/y_cc(l)*(q_prim_vf(strxb)%sf(k, l, q) + (2._wp/3._wp)*g_k_field(k, l, q)) ! tau_xx + 2/3*G
1344
1345 ! S_xr -= rho * v/r * tau_xr
1346 rhs_vf(strxb + 1)%sf(k, l, q) = rhs_vf(strxb + 1)%sf(k, l, q) - rho_k_field(k, l, &
1347 & q)*q_prim_vf(momxb + 1)%sf(k, l, q)/y_cc(l)*q_prim_vf(strxb + 1)%sf(k, l, q) ! tau_xx
1348
1349 ! S_rr -= rho * v/r * (tau_rr + 2/3*G)
1350 rhs_vf(strxb + 2)%sf(k, l, q) = rhs_vf(strxb + 2)%sf(k, l, q) - rho_k_field(k, l, &
1351 & q)*q_prim_vf(momxb + 1)%sf(k, l, q)/y_cc(l)*(q_prim_vf(strxb + 2)%sf(k, l, &
1352 & q) + (2._wp/3._wp)*g_k_field(k, l, q)) ! tau_rr + 2/3*G
1353
1354 ! S_thetatheta += rho * ( -(tau_thetatheta + 2/3*G)*(du/dx + dv/dr + v/r) + 2*(tau_thetatheta + G)*v/r )
1355 rhs_vf(strxb + 3)%sf(k, l, q) = rhs_vf(strxb + 3)%sf(k, l, q) + rho_k_field(k, l, &
1356 & q)*(-(q_prim_vf(strxb + 3)%sf(k, l, q) + (2._wp/3._wp)*g_k_field(k, l, q))*(du_dx_hypo(k, l, &
1357 & q) + dv_dy_hypo(k, l, q) + q_prim_vf(momxb + 1)%sf(k, l, &
1358 & q)/y_cc(l)) + 2._wp*(q_prim_vf(strxb + 3)%sf(k, l, q) + g_k_field(k, l, &
1359 & q))*q_prim_vf(momxb + 1)%sf(k, l, q)/y_cc(l))
1360 end do
1361 end do
1362 end do
1363
1364# 326 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1365#if defined(MFC_OpenACC)
1366# 326 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1367!$acc end parallel loop
1368# 326 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1369#elif defined(MFC_OpenMP)
1370# 326 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1371
1372# 326 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1373!$omp end target teams loop
1374# 326 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1375#endif
1376 end if
1377
1378 end subroutine s_compute_hypoelastic_rhs
1379
1380 !> Finalize the hypoelastic module
1382
1383#ifdef MFC_DEBUG
1384# 334 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1385 block
1386# 334 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1387 use iso_fortran_env, only: output_unit
1388# 334 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1389
1390# 334 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1391 print *, 'm_hypoelastic.fpp:334: ', '@:DEALLOCATE(Gs_hypo)'
1392# 334 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1393
1394# 334 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1395 call flush (output_unit)
1396# 334 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1397 end block
1398# 334 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1399#endif
1400# 334 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1401
1402# 334 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1403#if defined(MFC_OpenACC)
1404# 334 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1405!$acc exit data delete(Gs_hypo)
1406# 334 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1407#elif defined(MFC_OpenMP)
1408# 334 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1409!$omp target exit data map(release:Gs_hypo)
1410# 334 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1411#endif
1412# 334 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1413 deallocate (gs_hypo)
1414#ifdef MFC_DEBUG
1415# 335 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1416 block
1417# 335 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1418 use iso_fortran_env, only: output_unit
1419# 335 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1420
1421# 335 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1422 print *, 'm_hypoelastic.fpp:335: ', '@:DEALLOCATE(rho_K_field, G_K_field)'
1423# 335 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1424
1425# 335 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1426 call flush (output_unit)
1427# 335 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1428 end block
1429# 335 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1430#endif
1431# 335 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1432
1433# 335 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1434#if defined(MFC_OpenACC)
1435# 335 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1436!$acc exit data delete(rho_K_field, G_K_field)
1437# 335 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1438#elif defined(MFC_OpenMP)
1439# 335 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1440!$omp target exit data map(release:rho_K_field, G_K_field)
1441# 335 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1442#endif
1443# 335 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1444 deallocate (rho_k_field, g_k_field)
1445#ifdef MFC_DEBUG
1446# 336 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1447 block
1448# 336 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1449 use iso_fortran_env, only: output_unit
1450# 336 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1451
1452# 336 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1453 print *, 'm_hypoelastic.fpp:336: ', '@:DEALLOCATE(du_dx_hypo)'
1454# 336 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1455
1456# 336 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1457 call flush (output_unit)
1458# 336 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1459 end block
1460# 336 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1461#endif
1462# 336 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1463
1464# 336 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1465#if defined(MFC_OpenACC)
1466# 336 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1467!$acc exit data delete(du_dx_hypo)
1468# 336 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1469#elif defined(MFC_OpenMP)
1470# 336 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1471!$omp target exit data map(release:du_dx_hypo)
1472# 336 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1473#endif
1474# 336 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1475 deallocate (du_dx_hypo)
1476#ifdef MFC_DEBUG
1477# 337 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1478 block
1479# 337 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1480 use iso_fortran_env, only: output_unit
1481# 337 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1482
1483# 337 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1484 print *, 'm_hypoelastic.fpp:337: ', '@:DEALLOCATE(fd_coeff_x_hypo)'
1485# 337 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1486
1487# 337 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1488 call flush (output_unit)
1489# 337 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1490 end block
1491# 337 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1492#endif
1493# 337 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1494
1495# 337 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1496#if defined(MFC_OpenACC)
1497# 337 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1498!$acc exit data delete(fd_coeff_x_hypo)
1499# 337 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1500#elif defined(MFC_OpenMP)
1501# 337 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1502!$omp target exit data map(release:fd_coeff_x_hypo)
1503# 337 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1504#endif
1505# 337 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1506 deallocate (fd_coeff_x_hypo)
1507 if (n > 0) then
1508#ifdef MFC_DEBUG
1509# 339 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1510 block
1511# 339 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1512 use iso_fortran_env, only: output_unit
1513# 339 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1514
1515# 339 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1516 print *, 'm_hypoelastic.fpp:339: ', '@:DEALLOCATE(du_dy_hypo, dv_dx_hypo, dv_dy_hypo)'
1517# 339 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1518
1519# 339 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1520 call flush (output_unit)
1521# 339 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1522 end block
1523# 339 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1524#endif
1525# 339 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1526
1527# 339 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1528#if defined(MFC_OpenACC)
1529# 339 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1530!$acc exit data delete(du_dy_hypo, dv_dx_hypo, dv_dy_hypo)
1531# 339 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1532#elif defined(MFC_OpenMP)
1533# 339 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1534!$omp target exit data map(release:du_dy_hypo, dv_dx_hypo, dv_dy_hypo)
1535# 339 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1536#endif
1537# 339 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1538 deallocate (du_dy_hypo, dv_dx_hypo, dv_dy_hypo)
1539#ifdef MFC_DEBUG
1540# 340 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1541 block
1542# 340 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1543 use iso_fortran_env, only: output_unit
1544# 340 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1545
1546# 340 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1547 print *, 'm_hypoelastic.fpp:340: ', '@:DEALLOCATE(fd_coeff_y_hypo)'
1548# 340 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1549
1550# 340 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1551 call flush (output_unit)
1552# 340 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1553 end block
1554# 340 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1555#endif
1556# 340 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1557
1558# 340 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1559#if defined(MFC_OpenACC)
1560# 340 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1561!$acc exit data delete(fd_coeff_y_hypo)
1562# 340 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1563#elif defined(MFC_OpenMP)
1564# 340 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1565!$omp target exit data map(release:fd_coeff_y_hypo)
1566# 340 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1567#endif
1568# 340 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1569 deallocate (fd_coeff_y_hypo)
1570 if (p > 0) then
1571#ifdef MFC_DEBUG
1572# 342 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1573 block
1574# 342 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1575 use iso_fortran_env, only: output_unit
1576# 342 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1577
1578# 342 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1579 print *, 'm_hypoelastic.fpp:342: ', '@:DEALLOCATE(du_dz_hypo, dv_dz_hypo, dw_dx_hypo, dw_dy_hypo, dw_dz_hypo)'
1580# 342 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1581
1582# 342 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1583 call flush (output_unit)
1584# 342 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1585 end block
1586# 342 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1587#endif
1588# 342 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1589
1590# 342 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1591#if defined(MFC_OpenACC)
1592# 342 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1593!$acc exit data delete(du_dz_hypo, dv_dz_hypo, dw_dx_hypo, dw_dy_hypo, dw_dz_hypo)
1594# 342 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1595#elif defined(MFC_OpenMP)
1596# 342 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1597!$omp target exit data map(release:du_dz_hypo, dv_dz_hypo, dw_dx_hypo, dw_dy_hypo, dw_dz_hypo)
1598# 342 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1599#endif
1600# 342 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1602#ifdef MFC_DEBUG
1603# 343 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1604 block
1605# 343 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1606 use iso_fortran_env, only: output_unit
1607# 343 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1608
1609# 343 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1610 print *, 'm_hypoelastic.fpp:343: ', '@:DEALLOCATE(fd_coeff_z_hypo)'
1611# 343 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1612
1613# 343 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1614 call flush (output_unit)
1615# 343 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1616 end block
1617# 343 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1618#endif
1619# 343 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1620
1621# 343 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1622#if defined(MFC_OpenACC)
1623# 343 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1624!$acc exit data delete(fd_coeff_z_hypo)
1625# 343 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1626#elif defined(MFC_OpenMP)
1627# 343 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1628!$omp target exit data map(release:fd_coeff_z_hypo)
1629# 343 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1630#endif
1631# 343 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1632 deallocate (fd_coeff_z_hypo)
1633 end if
1634 end if
1635
1636 end subroutine s_finalize_hypoelastic_module
1637
1638 !> Compute the continuum damage source term from the principal stress state
1639 subroutine s_compute_damage_state(q_cons_vf, rhs_vf)
1640
1641 type(scalar_field), dimension(sys_size), intent(in) :: q_cons_vf
1642 type(scalar_field), dimension(sys_size), intent(inout) :: rhs_vf
1643 real(wp) :: tau_p !< principal stress
1644 real(wp) :: tau_xx, tau_xy, tau_yy, tau_zz, tau_yz, tau_xz
1645 real(wp) :: i1, i2, i3, argument, phi, sqrt_term_1, sqrt_term_2, temp
1646 integer :: q, l, k
1647
1648 if (n == 0) then
1649 l = 0; q = 0
1650
1651# 361 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1652
1653# 361 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1654#if defined(MFC_OpenACC)
1655# 361 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1656!$acc parallel loop gang vector default(present)
1657# 361 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1658#elif defined(MFC_OpenMP)
1659# 361 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1660
1661# 361 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1662
1663# 361 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1664
1665# 361 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1666!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
1667# 361 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1668#endif
1669 do k = 0, m
1670 rhs_vf(damage_idx)%sf(k, l, q) = (alpha_bar*max(abs(real(q_cons_vf(stress_idx%beg)%sf(k, l, q), &
1671 & kind=wp)) - tau_star, 0._wp))**cont_damage_s
1672 end do
1673
1674# 366 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1675#if defined(MFC_OpenACC)
1676# 366 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1677!$acc end parallel loop
1678# 366 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1679#elif defined(MFC_OpenMP)
1680# 366 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1681
1682# 366 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1683!$omp end target teams loop
1684# 366 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1685#endif
1686 else if (p == 0) then
1687 q = 0
1688
1689# 369 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1690
1691# 369 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1692#if defined(MFC_OpenACC)
1693# 369 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1694!$acc parallel loop collapse(2) gang vector default(present) private(tau_p)
1695# 369 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1696#elif defined(MFC_OpenMP)
1697# 369 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1698
1699# 369 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1700
1701# 369 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1702
1703# 369 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1704!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(2) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(tau_p)
1705# 369 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1706#endif
1707 do l = 0, n
1708 do k = 0, m
1709 ! Maximum principal stress
1710 tau_p = 0.5_wp*(q_cons_vf(stress_idx%beg)%sf(k, l, q) + q_cons_vf(stress_idx%beg + 2)%sf(k, l, &
1711 & q)) + sqrt((q_cons_vf(stress_idx%beg)%sf(k, l, q) - q_cons_vf(stress_idx%beg + 2)%sf(k, l, &
1712 & q))**2.0_wp + 4._wp*q_cons_vf(stress_idx%beg + 1)%sf(k, l, q)**2.0_wp)/2._wp
1713
1714 rhs_vf(damage_idx)%sf(k, l, q) = (alpha_bar*max(tau_p - tau_star, 0._wp))**cont_damage_s
1715 end do
1716 end do
1717
1718# 380 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1719#if defined(MFC_OpenACC)
1720# 380 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1721!$acc end parallel loop
1722# 380 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1723#elif defined(MFC_OpenMP)
1724# 380 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1725
1726# 380 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1727!$omp end target teams loop
1728# 380 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1729#endif
1730 else
1731
1732# 382 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1733
1734# 382 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1735#if defined(MFC_OpenACC)
1736# 382 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1737!$acc parallel loop collapse(3) gang vector default(present) private(tau_xx, tau_xy, tau_yy, tau_xz, tau_yz, tau_zz, I1, I2, I3, temp, sqrt_term_1, sqrt_term_2, argument, phi, tau_p)
1738# 382 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1739#elif defined(MFC_OpenMP)
1740# 382 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1741
1742# 382 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1743
1744# 382 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1745
1746# 382 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1747!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(tau_xx, tau_xy, tau_yy, tau_xz, tau_yz, tau_zz, I1, I2, I3, temp, sqrt_term_1, sqrt_term_2, argument, phi, tau_p)
1748# 382 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1749#endif
1750# 384 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1751 do q = 0, p
1752 do l = 0, n
1753 do k = 0, m
1754 tau_xx = q_cons_vf(stress_idx%beg)%sf(k, l, q)
1755 tau_xy = q_cons_vf(stress_idx%beg + 1)%sf(k, l, q)
1756 tau_yy = q_cons_vf(stress_idx%beg + 2)%sf(k, l, q)
1757 tau_xz = q_cons_vf(stress_idx%beg + 3)%sf(k, l, q)
1758 tau_yz = q_cons_vf(stress_idx%beg + 4)%sf(k, l, q)
1759 tau_zz = q_cons_vf(stress_idx%beg + 5)%sf(k, l, q)
1760
1761 ! Invariants of the stress tensor
1762 i1 = tau_xx + tau_yy + tau_zz
1763 i2 = tau_xx*tau_yy + tau_xx*tau_zz + tau_yy*tau_zz - (tau_xy**2.0_wp + tau_xz**2.0_wp + tau_yz**2.0_wp)
1764 i3 = tau_xx*tau_yy*tau_zz + 2.0_wp*tau_xy*tau_xz*tau_yz - tau_xx*tau_yz**2.0_wp - tau_yy*tau_xz**2.0_wp &
1765 & - tau_zz*tau_xy**2.0_wp
1766
1767 ! Maximum principal stress
1768 temp = i1**2.0_wp - 3.0_wp*i2
1769 sqrt_term_1 = sqrt(max(temp, 0.0_wp))
1770 if (sqrt_term_1 > verysmall) then ! Avoid 0/0
1771 argument = (2.0_wp*i1*i1*i1 - 9.0_wp*i1*i2 + 27.0_wp*i3)/(2.0_wp*sqrt_term_1*sqrt_term_1*sqrt_term_1)
1772 if (argument > 1.0_wp) argument = 1.0_wp
1773 if (argument < -1.0_wp) argument = -1.0_wp
1774 phi = acos(argument)
1775 sqrt_term_2 = sqrt(max(i1**2.0_wp - 3.0_wp*i2, 0.0_wp))
1776 tau_p = i1/3.0_wp + 2.0_wp/sqrt(3.0_wp)*sqrt_term_2*cos(phi/3.0_wp)
1777 else
1778 tau_p = i1/3.0_wp
1779 end if
1780
1781 rhs_vf(damage_idx)%sf(k, l, q) = (alpha_bar*max(tau_p - tau_star, 0._wp))**cont_damage_s
1782 end do
1783 end do
1784 end do
1785
1786# 418 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1787#if defined(MFC_OpenACC)
1788# 418 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1789!$acc end parallel loop
1790# 418 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1791#elif defined(MFC_OpenMP)
1792# 418 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1793
1794# 418 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1795!$omp end target teams loop
1796# 418 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1797#endif
1798 end if
1799
1800 end subroutine s_compute_damage_state
1801
1802end 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...
integer num_fluids
number of fluids in the simulation
Utility routines for bubble model setup, coordinate transforms, array sampling, and special functions...
Computes hypoelastic stress-rate source terms and damage-state evolution.
real(wp), dimension(:,:), allocatable fd_coeff_x_hypo
real(wp), dimension(:), allocatable gs_hypo
real(wp), dimension(:,:), allocatable fd_coeff_y_hypo
subroutine, public s_compute_hypoelastic_rhs(idir, q_prim_vf, rhs_vf)
Compute the hypoelastic stress source terms.
real(wp), dimension(:,:,:), allocatable dv_dz_hypo
real(wp), dimension(:,:,:), allocatable dv_dy_hypo
real(wp), dimension(:,:,:), allocatable dw_dz_hypo
real(wp), dimension(:,:,:), allocatable du_dx_hypo
real(wp), dimension(:,:,:), allocatable dw_dx_hypo
real(wp), dimension(:,:,:), allocatable du_dz_hypo
real(wp), dimension(:,:,:), allocatable dv_dx_hypo
real(wp), dimension(:,:), allocatable fd_coeff_z_hypo
subroutine, public s_compute_damage_state(q_cons_vf, rhs_vf)
Compute the continuum damage source term from the principal stress state.
real(wp), dimension(:,:,:), allocatable g_k_field
real(wp), dimension(:,:,:), allocatable du_dy_hypo
real(wp), dimension(:,:,:), allocatable dw_dy_hypo
impure subroutine, public s_initialize_hypoelastic_module
Initialize the hypoelastic module.
impure subroutine, public s_finalize_hypoelastic_module()
Finalize the hypoelastic module.
real(wp), dimension(:,:,:), allocatable rho_k_field