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)*(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 + 1)%sf(k, l, q)*du_dy_hypo(k, l, &
1208 & q) - q_prim_vf(eqn_idx%stress%beg)%sf(k, l, q)*dv_dy_hypo(k, l, q) - 2._wp*g_k_field(k, l, &
1209 & q)*(1._wp/3._wp)*dv_dy_hypo(k, l, q))
1210
1211 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, &
1212 & l, q)*(q_prim_vf(eqn_idx%stress%beg + 1)%sf(k, l, q)*du_dx_hypo(k, l, &
1213 & q) + q_prim_vf(eqn_idx%stress%beg)%sf(k, l, q)*dv_dx_hypo(k, l, &
1214 & q) - q_prim_vf(eqn_idx%stress%beg + 1)%sf(k, l, q)*du_dx_hypo(k, l, &
1215 & q) + q_prim_vf(eqn_idx%stress%beg + 2)%sf(k, l, q)*du_dy_hypo(k, l, &
1216 & q) + q_prim_vf(eqn_idx%stress%beg + 1)%sf(k, l, q)*dv_dy_hypo(k, l, &
1217 & q) - q_prim_vf(eqn_idx%stress%beg + 1)%sf(k, l, q)*dv_dy_hypo(k, l, q) + 2._wp*g_k_field(k, l, &
1218 & q)*(1._wp/2._wp)*(du_dy_hypo(k, l, q) + dv_dx_hypo(k, l, q)))
1219
1220 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, &
1221 & l, q)*(q_prim_vf(eqn_idx%stress%beg + 1)%sf(k, l, q)*dv_dx_hypo(k, l, &
1222 & q) + q_prim_vf(eqn_idx%stress%beg + 1)%sf(k, l, q)*dv_dx_hypo(k, l, &
1223 & q) - q_prim_vf(eqn_idx%stress%beg + 2)%sf(k, l, q)*du_dx_hypo(k, l, &
1224 & 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, &
1225 & q)*(dv_dy_hypo(k, l, q) - (1._wp/3._wp)*(du_dx_hypo(k, l, q) + dv_dy_hypo(k, l, q))))
1226 end do
1227 end do
1228 end do
1229
1230# 252 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1231#if defined(MFC_OpenACC)
1232# 252 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1233!$acc end parallel loop
1234# 252 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1235#elif defined(MFC_OpenMP)
1236# 252 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1237
1238# 252 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1239!$omp end target teams loop
1240# 252 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1241#endif
1242 else if (idir == 3) then
1243
1244# 254 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1245
1246# 254 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1247#if defined(MFC_OpenACC)
1248# 254 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1249!$acc parallel loop collapse(3) gang vector default(present)
1250# 254 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1251#elif defined(MFC_OpenMP)
1252# 254 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1253
1254# 254 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1255
1256# 254 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1257
1258# 254 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1259!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
1260# 254 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1261#endif
1262 do q = 0, p
1263 do l = 0, n
1264 do k = 0, m
1265 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, &
1266 & q)*(q_prim_vf(eqn_idx%stress%beg + 3)%sf(k, l, q)*du_dz_hypo(k, l, &
1267 & q) + q_prim_vf(eqn_idx%stress%beg + 3)%sf(k, l, q)*du_dz_hypo(k, l, &
1268 & q) - q_prim_vf(eqn_idx%stress%beg)%sf(k, l, q)*dw_dz_hypo(k, l, q) - 2._wp*g_k_field(k, l, &
1269 & q)*(1._wp/3._wp)*dw_dz_hypo(k, l, q))
1270
1271 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, &
1272 & l, q)*(q_prim_vf(eqn_idx%stress%beg + 4)%sf(k, l, q)*du_dz_hypo(k, l, &
1273 & q) + q_prim_vf(eqn_idx%stress%beg + 3)%sf(k, l, q)*dv_dz_hypo(k, l, &
1274 & q) - q_prim_vf(eqn_idx%stress%beg + 1)%sf(k, l, q)*dw_dz_hypo(k, l, q))
1275
1276 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, &
1277 & l, q)*(q_prim_vf(eqn_idx%stress%beg + 4)%sf(k, l, q)*dv_dz_hypo(k, l, &
1278 & q) + q_prim_vf(eqn_idx%stress%beg + 4)%sf(k, l, q)*dv_dz_hypo(k, l, &
1279 & q) - q_prim_vf(eqn_idx%stress%beg + 2)%sf(k, l, q)*dw_dz_hypo(k, l, q) - 2._wp*g_k_field(k, l, &
1280 & q)*(1._wp/3._wp)*dw_dz_hypo(k, l, q))
1281
1282 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, &
1283 & l, q)*(q_prim_vf(eqn_idx%stress%beg + 3)%sf(k, l, q)*du_dx_hypo(k, l, &
1284 & q) + q_prim_vf(eqn_idx%stress%beg)%sf(k, l, q)*dw_dx_hypo(k, l, &
1285 & q) - q_prim_vf(eqn_idx%stress%beg + 3)%sf(k, l, q)*du_dx_hypo(k, l, &
1286 & q) + q_prim_vf(eqn_idx%stress%beg + 4)%sf(k, l, q)*du_dy_hypo(k, l, &
1287 & q) + q_prim_vf(eqn_idx%stress%beg + 1)%sf(k, l, q)*dw_dy_hypo(k, l, &
1288 & q) - q_prim_vf(eqn_idx%stress%beg + 3)%sf(k, l, q)*dv_dy_hypo(k, l, &
1289 & q) + q_prim_vf(eqn_idx%stress%beg + 5)%sf(k, l, q)*du_dz_hypo(k, l, &
1290 & q) + q_prim_vf(eqn_idx%stress%beg + 3)%sf(k, l, q)*dw_dz_hypo(k, l, &
1291 & q) - q_prim_vf(eqn_idx%stress%beg + 3)%sf(k, l, q)*dw_dz_hypo(k, l, q) + 2._wp*g_k_field(k, l, &
1292 & q)*(1._wp/2._wp)*(du_dz_hypo(k, l, q) + dw_dx_hypo(k, l, q)))
1293
1294 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, &
1295 & l, q)*(q_prim_vf(eqn_idx%stress%beg + 3)%sf(k, l, q)*dv_dx_hypo(k, l, &
1296 & q) + q_prim_vf(eqn_idx%stress%beg + 1)%sf(k, l, q)*dw_dx_hypo(k, l, &
1297 & q) - q_prim_vf(eqn_idx%stress%beg + 4)%sf(k, l, q)*du_dx_hypo(k, l, &
1298 & q) + q_prim_vf(eqn_idx%stress%beg + 4)%sf(k, l, q)*dv_dy_hypo(k, l, &
1299 & q) + q_prim_vf(eqn_idx%stress%beg + 2)%sf(k, l, q)*dw_dy_hypo(k, l, &
1300 & q) - q_prim_vf(eqn_idx%stress%beg + 4)%sf(k, l, q)*dv_dy_hypo(k, l, &
1301 & q) + q_prim_vf(eqn_idx%stress%beg + 5)%sf(k, l, q)*dv_dz_hypo(k, l, &
1302 & q) + q_prim_vf(eqn_idx%stress%beg + 4)%sf(k, l, q)*dw_dz_hypo(k, l, &
1303 & q) - q_prim_vf(eqn_idx%stress%beg + 4)%sf(k, l, q)*dw_dz_hypo(k, l, q) + 2._wp*g_k_field(k, l, &
1304 & q)*(1._wp/2._wp)*(dv_dz_hypo(k, l, q) + dw_dy_hypo(k, l, q)))
1305
1306 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, &
1307 & q)*(q_prim_vf(eqn_idx%stress%end - 2)%sf(k, l, q)*dw_dx_hypo(k, l, &
1308 & q) + q_prim_vf(eqn_idx%stress%end - 2)%sf(k, l, q)*dw_dx_hypo(k, l, &
1309 & q) - q_prim_vf(eqn_idx%stress%end)%sf(k, l, q)*du_dx_hypo(k, l, &
1310 & q) + 2._wp*q_prim_vf(eqn_idx%stress%end - 1)%sf(k, l, q)*dw_dy_hypo(k, l, &
1311 & q) - q_prim_vf(eqn_idx%stress%end)%sf(k, l, q)*dv_dy_hypo(k, l, &
1312 & 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, &
1313 & q)*(dw_dz_hypo(k, l, q) - (1._wp/3._wp)*(du_dx_hypo(k, l, q) + dv_dy_hypo(k, l, &
1314 & q) + dw_dz_hypo(k, l, q))))
1315 end do
1316 end do
1317 end do
1318
1319# 311 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1320#if defined(MFC_OpenACC)
1321# 311 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1322!$acc end parallel loop
1323# 311 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1324#elif defined(MFC_OpenMP)
1325# 311 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1326
1327# 311 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1328!$omp end target teams loop
1329# 311 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1330#endif
1331 end if
1332
1333 if (cyl_coord .and. idir == 2) then
1334
1335# 315 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1336
1337# 315 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1338#if defined(MFC_OpenACC)
1339# 315 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1340!$acc parallel loop collapse(3) gang vector default(present)
1341# 315 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1342#elif defined(MFC_OpenMP)
1343# 315 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1344
1345# 315 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1346
1347# 315 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1348
1349# 315 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1350!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
1351# 315 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1352#endif
1353 do q = 0, p
1354 do l = 0, n
1355 do k = 0, m
1356 ! S_xx -= rho * v/r * (tau_xx + 2/3*G)
1357 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, &
1358 & 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, &
1359 & q) + (2._wp/3._wp)*g_k_field(k, l, q)) ! tau_xx + 2/3*G
1360
1361 ! S_xr -= rho * v/r * tau_xr
1362 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, &
1363 & 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, &
1364 & l, q) ! tau_xx
1365
1366 ! S_rr -= rho * v/r * (tau_rr + 2/3*G)
1367 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, &
1368 & l, q)*q_prim_vf(eqn_idx%mom%beg + 1)%sf(k, l, &
1369 & 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, &
1370 & q)) ! tau_rr + 2/3*G
1371
1372 ! S_thetatheta += rho * ( -(tau_thetatheta + 2/3*G)*(du/dx + dv/dr + v/r) + 2*(tau_thetatheta + G)*v/r )
1373 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, &
1374 & l, q)*(-(q_prim_vf(eqn_idx%stress%beg + 3)%sf(k, l, q) + (2._wp/3._wp)*g_k_field(k, l, &
1375 & q))*(du_dx_hypo(k, l, q) + dv_dy_hypo(k, l, q) + q_prim_vf(eqn_idx%mom%beg + 1)%sf(k, l, &
1376 & q)/y_cc(l)) + 2._wp*(q_prim_vf(eqn_idx%stress%beg + 3)%sf(k, l, q) + g_k_field(k, l, &
1377 & q))*q_prim_vf(eqn_idx%mom%beg + 1)%sf(k, l, q)/y_cc(l))
1378 end do
1379 end do
1380 end do
1381
1382# 344 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1383#if defined(MFC_OpenACC)
1384# 344 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1385!$acc end parallel loop
1386# 344 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1387#elif defined(MFC_OpenMP)
1388# 344 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1389
1390# 344 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1391!$omp end target teams loop
1392# 344 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1393#endif
1394 end if
1395
1396 end subroutine s_compute_hypoelastic_rhs
1397
1398 !> Finalize the hypoelastic module
1400
1401#ifdef MFC_DEBUG
1402# 352 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1403 block
1404# 352 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1405 use iso_fortran_env, only: output_unit
1406# 352 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1407
1408# 352 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1409 print *, 'm_hypoelastic.fpp:352: ', '@:DEALLOCATE(Gs_hypo)'
1410# 352 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1411
1412# 352 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1413 call flush (output_unit)
1414# 352 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1415 end block
1416# 352 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1417#endif
1418# 352 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1419
1420# 352 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1421#if defined(MFC_OpenACC)
1422# 352 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1423!$acc exit data delete(Gs_hypo)
1424# 352 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1425#elif defined(MFC_OpenMP)
1426# 352 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1427!$omp target exit data map(release:Gs_hypo)
1428# 352 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1429#endif
1430# 352 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1431 deallocate (gs_hypo)
1432#ifdef MFC_DEBUG
1433# 353 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1434 block
1435# 353 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1436 use iso_fortran_env, only: output_unit
1437# 353 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1438
1439# 353 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1440 print *, 'm_hypoelastic.fpp:353: ', '@:DEALLOCATE(rho_K_field, G_K_field)'
1441# 353 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1442
1443# 353 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1444 call flush (output_unit)
1445# 353 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1446 end block
1447# 353 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1448#endif
1449# 353 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1450
1451# 353 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1452#if defined(MFC_OpenACC)
1453# 353 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1454!$acc exit data delete(rho_K_field, G_K_field)
1455# 353 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1456#elif defined(MFC_OpenMP)
1457# 353 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1458!$omp target exit data map(release:rho_K_field, G_K_field)
1459# 353 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1460#endif
1461# 353 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1462 deallocate (rho_k_field, g_k_field)
1463#ifdef MFC_DEBUG
1464# 354 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1465 block
1466# 354 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1467 use iso_fortran_env, only: output_unit
1468# 354 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1469
1470# 354 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1471 print *, 'm_hypoelastic.fpp:354: ', '@:DEALLOCATE(du_dx_hypo)'
1472# 354 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1473
1474# 354 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1475 call flush (output_unit)
1476# 354 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1477 end block
1478# 354 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1479#endif
1480# 354 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1481
1482# 354 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1483#if defined(MFC_OpenACC)
1484# 354 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1485!$acc exit data delete(du_dx_hypo)
1486# 354 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1487#elif defined(MFC_OpenMP)
1488# 354 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1489!$omp target exit data map(release:du_dx_hypo)
1490# 354 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1491#endif
1492# 354 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1493 deallocate (du_dx_hypo)
1494#ifdef MFC_DEBUG
1495# 355 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1496 block
1497# 355 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1498 use iso_fortran_env, only: output_unit
1499# 355 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1500
1501# 355 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1502 print *, 'm_hypoelastic.fpp:355: ', '@:DEALLOCATE(fd_coeff_x_hypo)'
1503# 355 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1504
1505# 355 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1506 call flush (output_unit)
1507# 355 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1508 end block
1509# 355 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1510#endif
1511# 355 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1512
1513# 355 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1514#if defined(MFC_OpenACC)
1515# 355 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1516!$acc exit data delete(fd_coeff_x_hypo)
1517# 355 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1518#elif defined(MFC_OpenMP)
1519# 355 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1520!$omp target exit data map(release:fd_coeff_x_hypo)
1521# 355 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1522#endif
1523# 355 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1524 deallocate (fd_coeff_x_hypo)
1525 if (n > 0) then
1526#ifdef MFC_DEBUG
1527# 357 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1528 block
1529# 357 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1530 use iso_fortran_env, only: output_unit
1531# 357 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1532
1533# 357 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1534 print *, 'm_hypoelastic.fpp:357: ', '@:DEALLOCATE(du_dy_hypo, dv_dx_hypo, dv_dy_hypo)'
1535# 357 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1536
1537# 357 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1538 call flush (output_unit)
1539# 357 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1540 end block
1541# 357 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1542#endif
1543# 357 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1544
1545# 357 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1546#if defined(MFC_OpenACC)
1547# 357 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1548!$acc exit data delete(du_dy_hypo, dv_dx_hypo, dv_dy_hypo)
1549# 357 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1550#elif defined(MFC_OpenMP)
1551# 357 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1552!$omp target exit data map(release:du_dy_hypo, dv_dx_hypo, dv_dy_hypo)
1553# 357 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1554#endif
1555# 357 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1556 deallocate (du_dy_hypo, dv_dx_hypo, dv_dy_hypo)
1557#ifdef MFC_DEBUG
1558# 358 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1559 block
1560# 358 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1561 use iso_fortran_env, only: output_unit
1562# 358 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1563
1564# 358 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1565 print *, 'm_hypoelastic.fpp:358: ', '@:DEALLOCATE(fd_coeff_y_hypo)'
1566# 358 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1567
1568# 358 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1569 call flush (output_unit)
1570# 358 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1571 end block
1572# 358 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1573#endif
1574# 358 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1575
1576# 358 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1577#if defined(MFC_OpenACC)
1578# 358 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1579!$acc exit data delete(fd_coeff_y_hypo)
1580# 358 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1581#elif defined(MFC_OpenMP)
1582# 358 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1583!$omp target exit data map(release:fd_coeff_y_hypo)
1584# 358 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1585#endif
1586# 358 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1587 deallocate (fd_coeff_y_hypo)
1588 if (p > 0) then
1589#ifdef MFC_DEBUG
1590# 360 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1591 block
1592# 360 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1593 use iso_fortran_env, only: output_unit
1594# 360 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1595
1596# 360 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1597 print *, 'm_hypoelastic.fpp:360: ', '@:DEALLOCATE(du_dz_hypo, dv_dz_hypo, dw_dx_hypo, dw_dy_hypo, dw_dz_hypo)'
1598# 360 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1599
1600# 360 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1601 call flush (output_unit)
1602# 360 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1603 end block
1604# 360 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1605#endif
1606# 360 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1607
1608# 360 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1609#if defined(MFC_OpenACC)
1610# 360 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1611!$acc exit data delete(du_dz_hypo, dv_dz_hypo, dw_dx_hypo, dw_dy_hypo, dw_dz_hypo)
1612# 360 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1613#elif defined(MFC_OpenMP)
1614# 360 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1615!$omp target exit data map(release:du_dz_hypo, dv_dz_hypo, dw_dx_hypo, dw_dy_hypo, dw_dz_hypo)
1616# 360 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1617#endif
1618# 360 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1620#ifdef MFC_DEBUG
1621# 361 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1622 block
1623# 361 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1624 use iso_fortran_env, only: output_unit
1625# 361 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1626
1627# 361 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1628 print *, 'm_hypoelastic.fpp:361: ', '@:DEALLOCATE(fd_coeff_z_hypo)'
1629# 361 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1630
1631# 361 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1632 call flush (output_unit)
1633# 361 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1634 end block
1635# 361 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1636#endif
1637# 361 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1638
1639# 361 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1640#if defined(MFC_OpenACC)
1641# 361 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1642!$acc exit data delete(fd_coeff_z_hypo)
1643# 361 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1644#elif defined(MFC_OpenMP)
1645# 361 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1646!$omp target exit data map(release:fd_coeff_z_hypo)
1647# 361 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1648#endif
1649# 361 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1650 deallocate (fd_coeff_z_hypo)
1651 end if
1652 end if
1653
1654 end subroutine s_finalize_hypoelastic_module
1655
1656 !> Compute the continuum damage source term from the principal stress state
1657 subroutine s_compute_damage_state(q_cons_vf, rhs_vf)
1658
1659 type(scalar_field), dimension(sys_size), intent(in) :: q_cons_vf
1660 type(scalar_field), dimension(sys_size), intent(inout) :: rhs_vf
1661 real(wp) :: tau_p !< principal stress
1662 real(wp) :: tau_xx, tau_xy, tau_yy, tau_zz, tau_yz, tau_xz
1663 real(wp) :: i1, i2, i3, argument, phi, sqrt_term_1, sqrt_term_2, temp
1664 integer :: q, l, k
1665
1666 if (n == 0) then
1667 l = 0; q = 0
1668
1669# 379 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1670
1671# 379 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1672#if defined(MFC_OpenACC)
1673# 379 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1674!$acc parallel loop gang vector default(present)
1675# 379 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1676#elif defined(MFC_OpenMP)
1677# 379 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1678
1679# 379 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1680
1681# 379 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1682
1683# 379 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1684!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer)
1685# 379 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1686#endif
1687 do k = 0, m
1688 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), &
1689 & kind=wp)) - tau_star, 0._wp))**cont_damage_s
1690 end do
1691
1692# 384 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1693#if defined(MFC_OpenACC)
1694# 384 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1695!$acc end parallel loop
1696# 384 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1697#elif defined(MFC_OpenMP)
1698# 384 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1699
1700# 384 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1701!$omp end target teams loop
1702# 384 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1703#endif
1704 else if (p == 0) then
1705 q = 0
1706
1707# 387 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1708
1709# 387 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1710#if defined(MFC_OpenACC)
1711# 387 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1712!$acc parallel loop collapse(2) gang vector default(present) private(tau_p)
1713# 387 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1714#elif defined(MFC_OpenMP)
1715# 387 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1716
1717# 387 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1718
1719# 387 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1720
1721# 387 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1722!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(2) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(tau_p)
1723# 387 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1724#endif
1725 do l = 0, n
1726 do k = 0, m
1727 ! Maximum principal stress
1728 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, &
1729 & q)) + sqrt((q_cons_vf(eqn_idx%stress%beg)%sf(k, l, &
1730 & q) - q_cons_vf(eqn_idx%stress%beg + 2)%sf(k, l, &
1731 & q))**2.0_wp + 4._wp*q_cons_vf(eqn_idx%stress%beg + 1)%sf(k, l, q)**2.0_wp)/2._wp
1732
1733 rhs_vf(eqn_idx%damage)%sf(k, l, q) = (alpha_bar*max(tau_p - tau_star, 0._wp))**cont_damage_s
1734 end do
1735 end do
1736
1737# 399 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1738#if defined(MFC_OpenACC)
1739# 399 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1740!$acc end parallel loop
1741# 399 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1742#elif defined(MFC_OpenMP)
1743# 399 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1744
1745# 399 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1746!$omp end target teams loop
1747# 399 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1748#endif
1749 else
1750
1751# 401 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1752
1753# 401 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1754#if defined(MFC_OpenACC)
1755# 401 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1756!$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)
1757# 401 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1758#elif defined(MFC_OpenMP)
1759# 401 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1760
1761# 401 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1762
1763# 401 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1764
1765# 401 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1766!$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)
1767# 401 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1768#endif
1769# 403 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1770 do q = 0, p
1771 do l = 0, n
1772 do k = 0, m
1773 tau_xx = q_cons_vf(eqn_idx%stress%beg)%sf(k, l, q)
1774 tau_xy = q_cons_vf(eqn_idx%stress%beg + 1)%sf(k, l, q)
1775 tau_yy = q_cons_vf(eqn_idx%stress%beg + 2)%sf(k, l, q)
1776 tau_xz = q_cons_vf(eqn_idx%stress%beg + 3)%sf(k, l, q)
1777 tau_yz = q_cons_vf(eqn_idx%stress%beg + 4)%sf(k, l, q)
1778 tau_zz = q_cons_vf(eqn_idx%stress%beg + 5)%sf(k, l, q)
1779
1780 ! Invariants of the stress tensor
1781 i1 = tau_xx + tau_yy + tau_zz
1782 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)
1783 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 &
1784 & - tau_zz*tau_xy**2.0_wp
1785
1786 ! Maximum principal stress
1787 temp = i1**2.0_wp - 3.0_wp*i2
1788 sqrt_term_1 = sqrt(max(temp, 0.0_wp))
1789 if (sqrt_term_1 > verysmall) then ! Avoid 0/0
1790 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)
1791 if (argument > 1.0_wp) argument = 1.0_wp
1792 if (argument < -1.0_wp) argument = -1.0_wp
1793 phi = acos(argument)
1794 sqrt_term_2 = sqrt(max(i1**2.0_wp - 3.0_wp*i2, 0.0_wp))
1795 tau_p = i1/3.0_wp + 2.0_wp/sqrt(3.0_wp)*sqrt_term_2*cos(phi/3.0_wp)
1796 else
1797 tau_p = i1/3.0_wp
1798 end if
1799
1800 rhs_vf(eqn_idx%damage)%sf(k, l, q) = (alpha_bar*max(tau_p - tau_star, 0._wp))**cont_damage_s
1801 end do
1802 end do
1803 end do
1804
1805# 437 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1806#if defined(MFC_OpenACC)
1807# 437 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1808!$acc end parallel loop
1809# 437 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1810#elif defined(MFC_OpenMP)
1811# 437 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1812
1813# 437 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1814!$omp end target teams loop
1815# 437 "/home/runner/work/MFC/MFC/src/simulation/m_hypoelastic.fpp"
1816#endif
1817 end if
1818
1819 end subroutine s_compute_damage_state
1820
1821end 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