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(eqn_idx%mom%beg)%sf(k + r, l, &
860 & q)*fd_coeff_x_hypo(r, k)
861 end do
862 end do
863 end do
864 end do
865
866# 118 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
867#if defined(MFC_OpenACC)
868# 118 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
869!$acc end parallel loop
870# 118 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
871#elif defined(MFC_OpenMP)
872# 118 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
873
874# 118 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
875!$omp end target teams loop
876# 118 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
877#endif
878
879 if (ndirs > 1) then
880
881# 121 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
882
883# 121 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
884#if defined(MFC_OpenACC)
885# 121 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
886!$acc parallel loop collapse(3) gang vector default(present)
887# 121 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
888#elif defined(MFC_OpenMP)
889# 121 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
890
891# 121 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
892
893# 121 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
894
895# 121 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
896!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
897# 121 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
898#endif
899 do q = 0, p
900 do l = 0, n
901 do k = 0, m
902 du_dy_hypo(k, l, q) = 0._wp; dv_dx_hypo(k, l, q) = 0._wp; dv_dy_hypo(k, l, q) = 0._wp
903 end do
904 end do
905 end do
906
907# 129 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
908#if defined(MFC_OpenACC)
909# 129 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
910!$acc end parallel loop
911# 129 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
912#elif defined(MFC_OpenMP)
913# 129 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
914
915# 129 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
916!$omp end target teams loop
917# 129 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
918#endif
919
920
921# 131 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
922
923# 131 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
924#if defined(MFC_OpenACC)
925# 131 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
926!$acc parallel loop collapse(3) gang vector default(present)
927# 131 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
928#elif defined(MFC_OpenMP)
929# 131 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
930
931# 131 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
932
933# 131 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
934
935# 131 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
936!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
937# 131 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
938#endif
939 do q = 0, p
940 do l = 0, n
941 do k = 0, m
942
943# 135 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
944#if defined(MFC_OpenACC)
945# 135 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
946!$acc loop seq
947# 135 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
948#elif defined(MFC_OpenMP)
949# 135 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
950
951# 135 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
952#endif
953 do r = -fd_number, fd_number
954 du_dy_hypo(k, l, q) = du_dy_hypo(k, l, q) + q_prim_vf(eqn_idx%mom%beg)%sf(k, l + r, &
955 & q)*fd_coeff_y_hypo(r, l)
956 dv_dx_hypo(k, l, q) = dv_dx_hypo(k, l, q) + q_prim_vf(eqn_idx%mom%beg + 1)%sf(k + r, l, &
957 & q)*fd_coeff_x_hypo(r, k)
958 dv_dy_hypo(k, l, q) = dv_dy_hypo(k, l, q) + q_prim_vf(eqn_idx%mom%beg + 1)%sf(k, l + r, &
959 & q)*fd_coeff_y_hypo(r, l)
960 end do
961 end do
962 end do
963 end do
964
965# 147 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
966#if defined(MFC_OpenACC)
967# 147 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
968!$acc end parallel loop
969# 147 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
970#elif defined(MFC_OpenMP)
971# 147 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
972
973# 147 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
974!$omp end target teams loop
975# 147 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
976#endif
977
978 ! 3D
979 if (ndirs == 3) then
980
981# 151 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
982
983# 151 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
984#if defined(MFC_OpenACC)
985# 151 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
986!$acc parallel loop collapse(3) gang vector default(present)
987# 151 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
988#elif defined(MFC_OpenMP)
989# 151 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
990
991# 151 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
992
993# 151 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
994
995# 151 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
996!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
997# 151 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
998#endif
999 do q = 0, p
1000 do l = 0, n
1001 do k = 0, m
1002 du_dz_hypo(k, l, q) = 0._wp; dv_dz_hypo(k, l, q) = 0._wp; dw_dx_hypo(k, l, q) = 0._wp
1003 dw_dy_hypo(k, l, q) = 0._wp; dw_dz_hypo(k, l, q) = 0._wp
1004 end do
1005 end do
1006 end do
1007
1008# 160 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1009#if defined(MFC_OpenACC)
1010# 160 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1011!$acc end parallel loop
1012# 160 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1013#elif defined(MFC_OpenMP)
1014# 160 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1015
1016# 160 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1017!$omp end target teams loop
1018# 160 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1019#endif
1020
1021
1022# 162 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1023
1024# 162 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1025#if defined(MFC_OpenACC)
1026# 162 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1027!$acc parallel loop collapse(3) gang vector default(present)
1028# 162 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1029#elif defined(MFC_OpenMP)
1030# 162 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1031
1032# 162 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1033
1034# 162 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1035
1036# 162 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1037!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
1038# 162 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1039#endif
1040 do q = 0, p
1041 do l = 0, n
1042 do k = 0, m
1043
1044# 166 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1045#if defined(MFC_OpenACC)
1046# 166 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1047!$acc loop seq
1048# 166 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1049#elif defined(MFC_OpenMP)
1050# 166 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1051
1052# 166 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1053#endif
1054 do r = -fd_number, fd_number
1055 du_dz_hypo(k, l, q) = du_dz_hypo(k, l, q) + q_prim_vf(eqn_idx%mom%beg)%sf(k, l, &
1056 & q + r)*fd_coeff_z_hypo(r, q)
1057 dv_dz_hypo(k, l, q) = dv_dz_hypo(k, l, q) + q_prim_vf(eqn_idx%mom%beg + 1)%sf(k, l, &
1058 & q + r)*fd_coeff_z_hypo(r, q)
1059 dw_dx_hypo(k, l, q) = dw_dx_hypo(k, l, q) + q_prim_vf(eqn_idx%mom%end)%sf(k + r, l, &
1060 & q)*fd_coeff_x_hypo(r, k)
1061 dw_dy_hypo(k, l, q) = dw_dy_hypo(k, l, q) + q_prim_vf(eqn_idx%mom%end)%sf(k, l + r, &
1062 & q)*fd_coeff_y_hypo(r, l)
1063 dw_dz_hypo(k, l, q) = dw_dz_hypo(k, l, q) + q_prim_vf(eqn_idx%mom%end)%sf(k, l, &
1064 & q + r)*fd_coeff_z_hypo(r, q)
1065 end do
1066 end do
1067 end do
1068 end do
1069
1070# 182 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1071#if defined(MFC_OpenACC)
1072# 182 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1073!$acc end parallel loop
1074# 182 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1075#elif defined(MFC_OpenMP)
1076# 182 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1077
1078# 182 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1079!$omp end target teams loop
1080# 182 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1081#endif
1082 end if
1083 end if
1084
1085
1086# 186 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1087
1088# 186 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1089#if defined(MFC_OpenACC)
1090# 186 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1091!$acc parallel loop collapse(3) gang vector default(present) private(rho_K, G_K)
1092# 186 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1093#elif defined(MFC_OpenMP)
1094# 186 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1095
1096# 186 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1097
1098# 186 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1099
1100# 186 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1101!$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)
1102# 186 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1103#endif
1104 do q = 0, p
1105 do l = 0, n
1106 do k = 0, m
1107 rho_k = 0._wp; g_k = 0._wp
1108 do i = 1, num_fluids
1109 rho_k = rho_k + q_prim_vf(i)%sf(k, l, q) ! alpha_rho_K(1)
1110 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)
1111 end do
1112
1113 ! Continuum damage: (1-D) scales effective stiffness, D in [0,1]
1114 if (cont_damage) g_k = g_k*max((1._wp - q_prim_vf(eqn_idx%damage)%sf(k, l, q)), 0._wp)
1115
1116 rho_k_field(k, l, q) = rho_k
1117 g_k_field(k, l, q) = g_k
1118
1119 ! TODO: take this out if not needed
1120 if (g_k < verysmall) then
1121 g_k_field(k, l, q) = 0
1122 end if
1123 end do
1124 end do
1125 end do
1126
1127# 209 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1128#if defined(MFC_OpenACC)
1129# 209 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1130!$acc end parallel loop
1131# 209 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1132#elif defined(MFC_OpenMP)
1133# 209 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1134
1135# 209 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1136!$omp end target teams loop
1137# 209 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1138#endif
1139
1140 ! apply rhs source term to elastic stress equation
1141
1142# 212 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1143
1144# 212 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1145#if defined(MFC_OpenACC)
1146# 212 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1147!$acc parallel loop collapse(3) gang vector default(present)
1148# 212 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1149#elif defined(MFC_OpenMP)
1150# 212 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1151
1152# 212 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1153
1154# 212 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1155
1156# 212 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1157!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
1158# 212 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1159#endif
1160 do q = 0, p
1161 do l = 0, n
1162 do k = 0, m
1163 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, &
1164 & 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, &
1165 & l, q)
1166 end do
1167 end do
1168 end do
1169
1170# 222 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1171#if defined(MFC_OpenACC)
1172# 222 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1173!$acc end parallel loop
1174# 222 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1175#elif defined(MFC_OpenMP)
1176# 222 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1177
1178# 222 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1179!$omp end target teams loop
1180# 222 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1181#endif
1182 else if (idir == 2) then
1183
1184# 224 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1185
1186# 224 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1187#if defined(MFC_OpenACC)
1188# 224 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1189!$acc parallel loop collapse(3) gang vector default(present)
1190# 224 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1191#elif defined(MFC_OpenMP)
1192# 224 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1193
1194# 224 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1195
1196# 224 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1197
1198# 224 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1199!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
1200# 224 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1201#endif
1202 do q = 0, p
1203 do l = 0, n
1204 do k = 0, m
1205 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, &
1206 & q)*(2._wp*q_prim_vf(eqn_idx%stress%beg + 1)%sf(k, l, q)*du_dy_hypo(k, l, &
1207 & 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, &
1208 & l, q)*dv_dy_hypo(k, l, q))
1209
1210 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, &
1211 & l, q)*(q_prim_vf(eqn_idx%stress%beg)%sf(k, l, q)*dv_dx_hypo(k, l, &
1212 & q) + q_prim_vf(eqn_idx%stress%beg + 2)%sf(k, l, q)*du_dy_hypo(k, l, q) + g_k_field(k, l, &
1213 & q)*(du_dy_hypo(k, l, q) + dv_dx_hypo(k, l, q)))
1214
1215 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, &
1216 & l, q)*(2._wp*q_prim_vf(eqn_idx%stress%beg + 1)%sf(k, l, q)*dv_dx_hypo(k, l, &
1217 & q) - q_prim_vf(eqn_idx%stress%beg + 2)%sf(k, l, q)*du_dx_hypo(k, l, &
1218 & 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, &
1219 & q)*(dv_dy_hypo(k, l, q) - (1._wp/3._wp)*(du_dx_hypo(k, l, q) + dv_dy_hypo(k, l, q))))
1220 end do
1221 end do
1222 end do
1223
1224# 246 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1225#if defined(MFC_OpenACC)
1226# 246 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1227!$acc end parallel loop
1228# 246 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1229#elif defined(MFC_OpenMP)
1230# 246 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1231
1232# 246 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1233!$omp end target teams loop
1234# 246 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1235#endif
1236 else if (idir == 3) then
1237
1238# 248 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1239
1240# 248 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1241#if defined(MFC_OpenACC)
1242# 248 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1243!$acc parallel loop collapse(3) gang vector default(present)
1244# 248 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1245#elif defined(MFC_OpenMP)
1246# 248 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1247
1248# 248 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1249
1250# 248 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1251
1252# 248 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1253!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
1254# 248 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1255#endif
1256 do q = 0, p
1257 do l = 0, n
1258 do k = 0, m
1259 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, &
1260 & q)*(2._wp*q_prim_vf(eqn_idx%stress%beg + 3)%sf(k, l, q)*du_dz_hypo(k, l, &
1261 & 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, &
1262 & l, q)*dw_dz_hypo(k, l, q))
1263
1264 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, &
1265 & l, q)*(q_prim_vf(eqn_idx%stress%beg + 4)%sf(k, l, q)*du_dz_hypo(k, l, &
1266 & q) + q_prim_vf(eqn_idx%stress%beg + 3)%sf(k, l, q)*dv_dz_hypo(k, l, &
1267 & q) - q_prim_vf(eqn_idx%stress%beg + 1)%sf(k, l, q)*dw_dz_hypo(k, l, q))
1268
1269 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, &
1270 & l, q)*(2._wp*q_prim_vf(eqn_idx%stress%beg + 4)%sf(k, l, q)*dv_dz_hypo(k, l, &
1271 & q) - q_prim_vf(eqn_idx%stress%beg + 2)%sf(k, l, q)*dw_dz_hypo(k, l, &
1272 & q) - (2._wp/3._wp)*g_k_field(k, l, q)*dw_dz_hypo(k, l, q))
1273
1274 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, &
1275 & l, q)*(q_prim_vf(eqn_idx%stress%beg)%sf(k, l, q)*dw_dx_hypo(k, l, &
1276 & q) + q_prim_vf(eqn_idx%stress%beg + 4)%sf(k, l, q)*du_dy_hypo(k, l, &
1277 & q) + q_prim_vf(eqn_idx%stress%beg + 1)%sf(k, l, q)*dw_dy_hypo(k, l, &
1278 & q) - q_prim_vf(eqn_idx%stress%beg + 3)%sf(k, l, q)*dv_dy_hypo(k, l, &
1279 & q) + q_prim_vf(eqn_idx%stress%beg + 5)%sf(k, l, q)*du_dz_hypo(k, l, q) + g_k_field(k, l, &
1280 & q)*(du_dz_hypo(k, l, q) + dw_dx_hypo(k, l, q)))
1281
1282 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, &
1283 & l, q)*(q_prim_vf(eqn_idx%stress%beg + 3)%sf(k, l, q)*dv_dx_hypo(k, l, &
1284 & q) + q_prim_vf(eqn_idx%stress%beg + 1)%sf(k, l, q)*dw_dx_hypo(k, l, &
1285 & q) - q_prim_vf(eqn_idx%stress%beg + 4)%sf(k, l, q)*du_dx_hypo(k, l, &
1286 & q) + q_prim_vf(eqn_idx%stress%beg + 2)%sf(k, l, q)*dw_dy_hypo(k, l, &
1287 & q) + q_prim_vf(eqn_idx%stress%beg + 5)%sf(k, l, q)*dv_dz_hypo(k, l, q) + g_k_field(k, l, &
1288 & q)*(dv_dz_hypo(k, l, q) + dw_dy_hypo(k, l, q)))
1289
1290 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, &
1291 & q)*(2._wp*q_prim_vf(eqn_idx%stress%end - 2)%sf(k, l, q)*dw_dx_hypo(k, l, &
1292 & q) - q_prim_vf(eqn_idx%stress%end)%sf(k, l, q)*du_dx_hypo(k, l, &
1293 & q) + 2._wp*q_prim_vf(eqn_idx%stress%end - 1)%sf(k, l, q)*dw_dy_hypo(k, l, &
1294 & q) - q_prim_vf(eqn_idx%stress%end)%sf(k, l, q)*dv_dy_hypo(k, l, &
1295 & 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, &
1296 & q)*(dw_dz_hypo(k, l, q) - (1._wp/3._wp)*(du_dx_hypo(k, l, q) + dv_dy_hypo(k, l, &
1297 & q) + dw_dz_hypo(k, l, q))))
1298 end do
1299 end do
1300 end do
1301
1302# 294 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1303#if defined(MFC_OpenACC)
1304# 294 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1305!$acc end parallel loop
1306# 294 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1307#elif defined(MFC_OpenMP)
1308# 294 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1309
1310# 294 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1311!$omp end target teams loop
1312# 294 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1313#endif
1314 end if
1315
1316 if (cyl_coord .and. idir == 2) then
1317
1318# 298 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1319
1320# 298 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1321#if defined(MFC_OpenACC)
1322# 298 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1323!$acc parallel loop collapse(3) gang vector default(present)
1324# 298 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1325#elif defined(MFC_OpenMP)
1326# 298 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1327
1328# 298 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1329
1330# 298 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1331
1332# 298 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1333!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
1334# 298 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1335#endif
1336 do q = 0, p
1337 do l = 0, n
1338 do k = 0, m
1339 ! S_xx -= rho * v/r * (tau_xx + 2/3*G)
1340 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, &
1341 & 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, &
1342 & q) + (2._wp/3._wp)*g_k_field(k, l, q)) ! tau_xx + 2/3*G
1343
1344 ! S_xr -= rho * v/r * tau_xr
1345 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, &
1346 & 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, &
1347 & l, q) ! tau_xx
1348
1349 ! S_rr -= rho * v/r * (tau_rr + 2/3*G)
1350 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, &
1351 & l, q)*q_prim_vf(eqn_idx%mom%beg + 1)%sf(k, l, &
1352 & 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
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(eqn_idx%stress%beg + 3)%sf(k, l, q) = rhs_vf(eqn_idx%stress%beg + 3)%sf(k, l, q) + rho_k_field(k, &
1356 & l, q)*(-(q_prim_vf(eqn_idx%stress%beg + 3)%sf(k, l, q) + (2._wp/3._wp)*g_k_field(k, l, &
1357 & q))*(du_dx_hypo(k, l, q) + dv_dy_hypo(k, l, q) + q_prim_vf(eqn_idx%mom%beg + 1)%sf(k, l, &
1358 & q)/y_cc(l)) + 2._wp*(q_prim_vf(eqn_idx%stress%beg + 3)%sf(k, l, q) + g_k_field(k, l, &
1359 & q))*q_prim_vf(eqn_idx%mom%beg + 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(eqn_idx%damage)%sf(k, l, q) = (alpha_bar*max(abs(real(q_cons_vf(eqn_idx%stress%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(eqn_idx%stress%beg)%sf(k, l, q) + q_cons_vf(eqn_idx%stress%beg + 2)%sf(k, l, &
1711 & q)) + sqrt((q_cons_vf(eqn_idx%stress%beg)%sf(k, l, &
1712 & q) - q_cons_vf(eqn_idx%stress%beg + 2)%sf(k, l, &
1713 & q))**2.0_wp + 4._wp*q_cons_vf(eqn_idx%stress%beg + 1)%sf(k, l, q)**2.0_wp)/2._wp
1714
1715 rhs_vf(eqn_idx%damage)%sf(k, l, q) = (alpha_bar*max(tau_p - tau_star, 0._wp))**cont_damage_s
1716 end do
1717 end do
1718
1719# 381 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1720#if defined(MFC_OpenACC)
1721# 381 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1722!$acc end parallel loop
1723# 381 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1724#elif defined(MFC_OpenMP)
1725# 381 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1726
1727# 381 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1728!$omp end target teams loop
1729# 381 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1730#endif
1731 else
1732
1733# 383 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1734
1735# 383 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1736#if defined(MFC_OpenACC)
1737# 383 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1738!$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)
1739# 383 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1740#elif defined(MFC_OpenMP)
1741# 383 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1742
1743# 383 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1744
1745# 383 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1746
1747# 383 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1748!$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)
1749# 383 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1750#endif
1751# 385 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1752 do q = 0, p
1753 do l = 0, n
1754 do k = 0, m
1755 tau_xx = q_cons_vf(eqn_idx%stress%beg)%sf(k, l, q)
1756 tau_xy = q_cons_vf(eqn_idx%stress%beg + 1)%sf(k, l, q)
1757 tau_yy = q_cons_vf(eqn_idx%stress%beg + 2)%sf(k, l, q)
1758 tau_xz = q_cons_vf(eqn_idx%stress%beg + 3)%sf(k, l, q)
1759 tau_yz = q_cons_vf(eqn_idx%stress%beg + 4)%sf(k, l, q)
1760 tau_zz = q_cons_vf(eqn_idx%stress%beg + 5)%sf(k, l, q)
1761
1762 ! Invariants of the stress tensor
1763 i1 = tau_xx + tau_yy + tau_zz
1764 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)
1765 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 &
1766 & - tau_zz*tau_xy**2.0_wp
1767
1768 ! Maximum principal stress
1769 temp = i1**2.0_wp - 3.0_wp*i2
1770 sqrt_term_1 = sqrt(max(temp, 0.0_wp))
1771 if (sqrt_term_1 > verysmall) then ! Avoid 0/0
1772 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)
1773 if (argument > 1.0_wp) argument = 1.0_wp
1774 if (argument < -1.0_wp) argument = -1.0_wp
1775 phi = acos(argument)
1776 sqrt_term_2 = sqrt(max(i1**2.0_wp - 3.0_wp*i2, 0.0_wp))
1777 tau_p = i1/3.0_wp + 2.0_wp/sqrt(3.0_wp)*sqrt_term_2*cos(phi/3.0_wp)
1778 else
1779 tau_p = i1/3.0_wp
1780 end if
1781
1782 rhs_vf(eqn_idx%damage)%sf(k, l, q) = (alpha_bar*max(tau_p - tau_star, 0._wp))**cont_damage_s
1783 end do
1784 end do
1785 end do
1786
1787# 419 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1788#if defined(MFC_OpenACC)
1789# 419 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1790!$acc end parallel loop
1791# 419 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1792#elif defined(MFC_OpenMP)
1793# 419 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1794
1795# 419 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1796!$omp end target teams loop
1797# 419 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1798#endif
1799 end if
1800
1801 end subroutine s_compute_damage_state
1802
1803end 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