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...
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