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