MFC
Exascale flow solver
Loading...
Searching...
No Matches
m_hyperelastic.fpp.f90
Go to the documentation of this file.
1# 1 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
2!>
3!! @file
4!! @brief Contains module m_hyperelastic
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# 207 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
107
108# 232 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
109
110# 243 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
111
112# 245 "/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# 283 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
116
117# 293 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
118
119# 303 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
120
121# 312 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
122
123# 329 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
124
125# 339 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
126
127# 346 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
128
129# 352 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
130
131# 358 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
132
133# 364 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
134
135# 370 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
136
137# 376 "/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# 192 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
207
208# 213 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
209
210# 241 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
211
212# 256 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
213
214# 266 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
215
216# 275 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
217
218# 291 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
219
220# 301 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
221
222# 308 "/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# 21 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
227
228# 37 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
229
230# 50 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
231
232# 76 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
233
234# 91 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
235
236# 102 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
237
238# 115 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
239
240# 143 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
241
242# 154 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
243
244# 165 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
245
246# 176 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
247
248# 187 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
249
250# 198 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
251
252# 208 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
253
254# 214 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
255
256# 220 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
257
258# 226 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
259
260# 232 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
261
262# 234 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
263# 235 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
264! New line at end of file is required for FYPP
265# 2 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 2
266
267# 14 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
268
269! Caution:
270! This macro requires the use of a binding script to set CUDA_VISIBLE_DEVICES, such that we have one GPU device per MPI rank.
271! That's because for both cudaMemAdvise (preferred location) and cudaMemPrefetchAsync we use location = device_id = 0.
272! For an example see misc/nvidia_uvm/bind.sh.
273# 63 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
274
275# 81 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
276
277# 88 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
278
279# 111 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
280
281# 127 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
282
283# 153 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
284
285# 159 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
286
287# 167 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
288! New line at end of file is required for FYPP
289# 6 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp" 2
290
291!> @brief Computes the left Cauchy--Green deformation tensor and hyperelastic stress source terms
292
294
295 use m_derived_types !< definitions of the derived types
296
297 use m_global_parameters !< definitions of the global parameters
298
299 use m_variables_conversion !< state variables type conversion procedures
300
302
303 implicit none
304
305 private; public :: s_hyperelastic_rmt_stress_update, &
308
309 !! The btensor at the cell-interior Gaussian quadrature points.
310 !! These tensor is needed to be calculated once and make the code DRY.
312
313# 28 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
314#if defined(MFC_OpenACC)
315# 28 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
316!$acc declare create(btensor)
317# 28 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
318#elif defined(MFC_OpenMP)
319# 28 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
320!$omp declare target (btensor)
321# 28 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
322#endif
323
324 real(wp), allocatable, dimension(:, :) :: fd_coeff_x_hyper
325 real(wp), allocatable, dimension(:, :) :: fd_coeff_y_hyper
326 real(wp), allocatable, dimension(:, :) :: fd_coeff_z_hyper
327
328# 33 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
329#if defined(MFC_OpenACC)
330# 33 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
331!$acc declare create(fd_coeff_x_hyper, fd_coeff_y_hyper, fd_coeff_z_hyper)
332# 33 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
333#elif defined(MFC_OpenMP)
334# 33 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
335!$omp declare target (fd_coeff_x_hyper, fd_coeff_y_hyper, fd_coeff_z_hyper)
336# 33 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
337#endif
338 real(wp), allocatable, dimension(:) :: gs_hyper
339
340# 35 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
341#if defined(MFC_OpenACC)
342# 35 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
343!$acc declare create(Gs_hyper)
344# 35 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
345#elif defined(MFC_OpenMP)
346# 35 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
347!$omp declare target (Gs_hyper)
348# 35 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
349#endif
350
351contains
352
353 !> The following subroutine handles the calculation of the btensor.
354 !! The calculation of the btensor takes qprimvf.
355 !! calculate the grad_xi, grad_xi is a nxn tensor
356 !! calculate the inverse of grad_xi to obtain F, F is a nxn tensor
357 !! calculate the FFtranspose to obtain the btensor, btensor is nxn tensor
358 !! btensor is symmetric, save the data space
360 integer :: i !< generic iterator
361
362#ifdef MFC_DEBUG
363# 48 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
364 block
365# 48 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
366 use iso_fortran_env, only: output_unit
367# 48 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
368
369# 48 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
370 print *, 'm_hyperelastic.fpp:48: ', '@:ALLOCATE(btensor%vf(1:b_size))'
371# 48 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
372
373# 48 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
374 call flush (output_unit)
375# 48 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
376 end block
377# 48 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
378#endif
379# 48 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
380 allocate (btensor%vf(1:b_size))
381# 48 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
382
383# 48 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
384
385# 48 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
386#if defined(MFC_OpenACC)
387# 48 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
388!$acc enter data create(btensor%vf)
389# 48 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
390#elif defined(MFC_OpenMP)
391# 48 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
392!$omp target enter data map(always,alloc:btensor%vf)
393# 48 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
394#endif
395 do i = 1, b_size
396#ifdef MFC_DEBUG
397# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
398 block
399# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
400 use iso_fortran_env, only: output_unit
401# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
402
403# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
404 print *, 'm_hyperelastic.fpp:50: ', '@:ALLOCATE(btensor%vf(i)%sf(0:m, 0:n, 0:p))'
405# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
406
407# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
408 call flush (output_unit)
409# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
410 end block
411# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
412#endif
413# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
414 allocate (btensor%vf(i)%sf(0:m, 0:n, 0:p))
415# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
416
417# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
418
419# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
420#if defined(MFC_OpenACC)
421# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
422!$acc enter data create(btensor%vf(i)%sf)
423# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
424#elif defined(MFC_OpenMP)
425# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
426!$omp target enter data map(always,alloc:btensor%vf(i)%sf)
427# 50 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
428#endif
429 end do
430#ifdef _CRAYFTN
431# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
432 block
433# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
434 integer :: macros_setup_vfs_i
435# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
436
437# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
438#ifdef MFC_DEBUG
439# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
440 block
441# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
442 use iso_fortran_env, only: output_unit
443# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
444
445# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
446 print *, 'm_hyperelastic.fpp:52: ', '@:ACC_SETUP_VFs(btensor)'
447# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
448
449# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
450 call flush (output_unit)
451# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
452 end block
453# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
454#endif
455# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
456
457# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
458
459# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
460#if defined(MFC_OpenACC)
461# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
462!$acc enter data copyin(btensor)
463# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
464#elif defined(MFC_OpenMP)
465# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
466!$omp target enter data map(to:btensor)
467# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
468#endif
469# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
470
471# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
472#if defined(MFC_OpenACC)
473# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
474!$acc enter data copyin(btensor%vf)
475# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
476#elif defined(MFC_OpenMP)
477# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
478!$omp target enter data map(to:btensor%vf)
479# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
480#endif
481# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
482 if (allocated(btensor%vf)) then
483# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
484 do macros_setup_vfs_i = lbound(btensor%vf, 1), ubound(btensor%vf, 1)
485# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
486 if (associated(btensor%vf(macros_setup_vfs_i)%sf)) then
487# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
488
489# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
490#if defined(MFC_OpenACC)
491# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
492!$acc enter data copyin(btensor%vf(macros_setup_vfs_i))
493# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
494#elif defined(MFC_OpenMP)
495# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
496!$omp target enter data map(to:btensor%vf(macros_setup_vfs_i))
497# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
498#endif
499# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
500
501# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
502#if defined(MFC_OpenACC)
503# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
504!$acc enter data copyin(btensor%vf(macros_setup_vfs_i)%sf)
505# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
506#elif defined(MFC_OpenMP)
507# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
508!$omp target enter data map(to:btensor%vf(macros_setup_vfs_i)%sf)
509# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
510#endif
511# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
512 end if
513# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
514 end do
515# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
516 end if
517# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
518 end block
519# 52 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
520#endif
521
522#ifdef MFC_DEBUG
523# 54 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
524 block
525# 54 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
526 use iso_fortran_env, only: output_unit
527# 54 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
528
529# 54 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
530 print *, 'm_hyperelastic.fpp:54: ', '@:ALLOCATE(Gs_hyper(1:num_fluids))'
531# 54 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
532
533# 54 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
534 call flush (output_unit)
535# 54 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
536 end block
537# 54 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
538#endif
539# 54 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
540 allocate (gs_hyper(1:num_fluids))
541# 54 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
542
543# 54 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
544
545# 54 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
546#if defined(MFC_OpenACC)
547# 54 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
548!$acc enter data create(Gs_hyper)
549# 54 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
550#elif defined(MFC_OpenMP)
551# 54 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
552!$omp target enter data map(always,alloc:Gs_hyper)
553# 54 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
554#endif
555
556# 55 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
557#if defined(MFC_OpenACC)
558# 55 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
559!$acc loop seq
560# 55 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
561#elif defined(MFC_OpenMP)
562# 55 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
563
564# 55 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
565#endif
566 do i = 1, num_fluids
567 gs_hyper(i) = fluid_pp(i)%G
568 end do
569
570# 59 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
571#if defined(MFC_OpenACC)
572# 59 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
573!$acc update device(Gs_hyper)
574# 59 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
575#elif defined(MFC_OpenMP)
576# 59 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
577!$omp target update to(Gs_hyper)
578# 59 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
579#endif
580
581#ifdef MFC_DEBUG
582# 61 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
583 block
584# 61 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
585 use iso_fortran_env, only: output_unit
586# 61 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
587
588# 61 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
589 print *, 'm_hyperelastic.fpp:61: ', '@:ALLOCATE(fd_coeff_x_hyper(-fd_number:fd_number, 0:m))'
590# 61 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
591
592# 61 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
593 call flush (output_unit)
594# 61 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
595 end block
596# 61 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
597#endif
598# 61 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
599 allocate (fd_coeff_x_hyper(-fd_number:fd_number, 0:m))
600# 61 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
601
602# 61 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
603
604# 61 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
605#if defined(MFC_OpenACC)
606# 61 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
607!$acc enter data create(fd_coeff_x_hyper)
608# 61 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
609#elif defined(MFC_OpenMP)
610# 61 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
611!$omp target enter data map(always,alloc:fd_coeff_x_hyper)
612# 61 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
613#endif
614 if (n > 0) then
615#ifdef MFC_DEBUG
616# 63 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
617 block
618# 63 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
619 use iso_fortran_env, only: output_unit
620# 63 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
621
622# 63 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
623 print *, 'm_hyperelastic.fpp:63: ', '@:ALLOCATE(fd_coeff_y_hyper(-fd_number:fd_number, 0:n))'
624# 63 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
625
626# 63 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
627 call flush (output_unit)
628# 63 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
629 end block
630# 63 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
631#endif
632# 63 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
633 allocate (fd_coeff_y_hyper(-fd_number:fd_number, 0:n))
634# 63 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
635
636# 63 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
637
638# 63 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
639#if defined(MFC_OpenACC)
640# 63 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
641!$acc enter data create(fd_coeff_y_hyper)
642# 63 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
643#elif defined(MFC_OpenMP)
644# 63 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
645!$omp target enter data map(always,alloc:fd_coeff_y_hyper)
646# 63 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
647#endif
648 end if
649 if (p > 0) then
650#ifdef MFC_DEBUG
651# 66 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
652 block
653# 66 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
654 use iso_fortran_env, only: output_unit
655# 66 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
656
657# 66 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
658 print *, 'm_hyperelastic.fpp:66: ', '@:ALLOCATE(fd_coeff_z_hyper(-fd_number:fd_number, 0:p))'
659# 66 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
660
661# 66 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
662 call flush (output_unit)
663# 66 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
664 end block
665# 66 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
666#endif
667# 66 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
668 allocate (fd_coeff_z_hyper(-fd_number:fd_number, 0:p))
669# 66 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
670
671# 66 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
672
673# 66 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
674#if defined(MFC_OpenACC)
675# 66 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
676!$acc enter data create(fd_coeff_z_hyper)
677# 66 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
678#elif defined(MFC_OpenMP)
679# 66 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
680!$omp target enter data map(always,alloc:fd_coeff_z_hyper)
681# 66 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
682#endif
683 end if
684
685 ! Computing centered finite difference coefficients
686 call s_compute_finite_difference_coefficients(m, x_cc, fd_coeff_x_hyper, buff_size, &
687 fd_number, fd_order)
688
689# 72 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
690#if defined(MFC_OpenACC)
691# 72 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
692!$acc update device(fd_coeff_x_hyper)
693# 72 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
694#elif defined(MFC_OpenMP)
695# 72 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
696!$omp target update to(fd_coeff_x_hyper)
697# 72 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
698#endif
699 if (n > 0) then
700 call s_compute_finite_difference_coefficients(n, y_cc, fd_coeff_y_hyper, buff_size, &
701 fd_number, fd_order)
702
703# 76 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
704#if defined(MFC_OpenACC)
705# 76 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
706!$acc update device(fd_coeff_y_hyper)
707# 76 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
708#elif defined(MFC_OpenMP)
709# 76 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
710!$omp target update to(fd_coeff_y_hyper)
711# 76 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
712#endif
713 end if
714 if (p > 0) then
715 call s_compute_finite_difference_coefficients(p, z_cc, fd_coeff_z_hyper, buff_size, &
716 fd_number, fd_order)
717
718# 81 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
719#if defined(MFC_OpenACC)
720# 81 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
721!$acc update device(fd_coeff_z_hyper)
722# 81 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
723#elif defined(MFC_OpenMP)
724# 81 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
725!$omp target update to(fd_coeff_z_hyper)
726# 81 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
727#endif
728 end if
729
731
732 !> The following subroutine handles the calculation of the btensor.
733 !! The calculation of the btensor takes qprimvf.
734 !! @param q_cons_vf Conservative variables
735 !! @param q_prim_vf Primitive variables
736 !! calculate the grad_xi, grad_xi is a nxn tensor
737 !! calculate the inverse of grad_xi to obtain F, F is a nxn tensor
738 !! calculate the FFtranspose to obtain the btensor, btensor is nxn tensor
739 !! btensor is symmetric, save the data space
740 subroutine s_hyperelastic_rmt_stress_update(q_cons_vf, q_prim_vf)
741
742 type(scalar_field), dimension(sys_size), intent(inout) :: q_cons_vf
743 type(scalar_field), dimension(sys_size), intent(inout) :: q_prim_vf
744# 101 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
745 real(wp), dimension(tensor_size) :: tensora, tensorb
746# 103 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
747
748# 107 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
749 real(wp), dimension(num_fluids) :: alpha_k, alpha_rho_k
750# 109 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
751 real(wp), dimension(2) :: re
752 real(wp) :: rho, gamma, pi_inf, qv
753 real(wp) :: g_local
754 integer :: j, k, l, i, r
755
756
757# 114 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
758
759# 114 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
760#if defined(MFC_OpenACC)
761# 114 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
762!$acc parallel loop collapse(3) gang vector default(present) private(i, j, k, l, alpha_K, alpha_rho_K, rho, gamma, pi_inf, qv, G_local, Re, tensora, tensorb)
763# 114 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
764#elif defined(MFC_OpenMP)
765# 114 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
766
767# 114 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
768
769# 114 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
770
771# 114 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
772!$omp target teams loop defaultmap(firstprivate:scalar) bind(teams,parallel) collapse(3) defaultmap(tofrom:aggregate) defaultmap(tofrom:allocatable) defaultmap(tofrom:pointer) private(i, j, k, l, alpha_K, alpha_rho_K, rho, gamma, pi_inf, qv, G_local, Re, tensora, tensorb)
773# 114 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
774#endif
775# 114 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
776
777 do l = 0, p
778 do k = 0, n
779 do j = 0, m
780
781 call s_compute_species_fraction(q_cons_vf, j, k, l, alpha_rho_k, alpha_k)
782
783 ! If in simulation, use acc mixture subroutines
784 call s_convert_species_to_mixture_variables_acc(rho, gamma, pi_inf, qv, alpha_k, &
785 alpha_rho_k, re, g_local, gs_hyper)
786 rho = max(rho, sgm_eps)
787 g_local = max(g_local, sgm_eps)
788 !if ( G_local <= verysmall ) G_K = 0._wp
789
790 if (g_local > verysmall) then
791
792# 129 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
793#if defined(MFC_OpenACC)
794# 129 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
795!$acc loop seq
796# 129 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
797#elif defined(MFC_OpenMP)
798# 129 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
799
800# 129 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
801#endif
802 do i = 1, tensor_size
803 tensora(i) = 0._wp
804 end do
805 ! STEP 1: computing the grad_xi tensor using finite differences
806 ! grad_xi definition / organization
807 ! number for the tensor 1-3: dxix_dx, dxiy_dx, dxiz_dx
808 ! 4-6 : dxix_dy, dxiy_dy, dxiz_dy
809 ! 7-9 : dxix_dz, dxiy_dz, dxiz_dz
810
811# 138 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
812#if defined(MFC_OpenACC)
813# 138 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
814!$acc loop seq
815# 138 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
816#elif defined(MFC_OpenMP)
817# 138 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
818
819# 138 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
820#endif
821 do r = -fd_number, fd_number
822 ! derivatives in the x-direction
823 tensora(1) = tensora(1) + q_prim_vf(xibeg)%sf(j + r, k, l)*fd_coeff_x_hyper(r, j)
824 tensora(2) = tensora(2) + q_prim_vf(xibeg + 1)%sf(j + r, k, l)*fd_coeff_x_hyper(r, j)
825 tensora(3) = tensora(3) + q_prim_vf(xiend)%sf(j + r, k, l)*fd_coeff_x_hyper(r, j)
826 ! derivatives in the y-direction
827 tensora(4) = tensora(4) + q_prim_vf(xibeg)%sf(j, k + r, l)*fd_coeff_y_hyper(r, k)
828 tensora(5) = tensora(5) + q_prim_vf(xibeg + 1)%sf(j, k + r, l)*fd_coeff_y_hyper(r, k)
829 tensora(6) = tensora(6) + q_prim_vf(xiend)%sf(j, k + r, l)*fd_coeff_y_hyper(r, k)
830 ! derivatives in the z-direction
831 tensora(7) = tensora(7) + q_prim_vf(xibeg)%sf(j, k, l + r)*fd_coeff_z_hyper(r, l)
832 tensora(8) = tensora(8) + q_prim_vf(xibeg + 1)%sf(j, k, l + r)*fd_coeff_z_hyper(r, l)
833 tensora(9) = tensora(9) + q_prim_vf(xiend)%sf(j, k, l + r)*fd_coeff_z_hyper(r, l)
834 end do
835 ! STEP 2a: computing the adjoint of the grad_xi tensor for the inverse
836 tensorb(1) = tensora(5)*tensora(9) - tensora(6)*tensora(8)
837 tensorb(2) = -(tensora(2)*tensora(9) - tensora(3)*tensora(8))
838 tensorb(3) = tensora(2)*tensora(6) - tensora(3)*tensora(5)
839 tensorb(4) = -(tensora(4)*tensora(9) - tensora(6)*tensora(7))
840 tensorb(5) = tensora(1)*tensora(9) - tensora(3)*tensora(7)
841 tensorb(6) = -(tensora(1)*tensora(6) - tensora(4)*tensora(3))
842 tensorb(7) = tensora(4)*tensora(8) - tensora(5)*tensora(7)
843 tensorb(8) = -(tensora(1)*tensora(8) - tensora(2)*tensora(7))
844 tensorb(9) = tensora(1)*tensora(5) - tensora(2)*tensora(4)
845
846 ! STEP 2b: computing the determinant of the grad_xi tensor
847 tensorb(tensor_size) = tensora(1)*(tensora(5)*tensora(9) - tensora(6)*tensora(8)) &
848 - tensora(2)*(tensora(4)*tensora(9) - tensora(6)*tensora(7)) &
849 + tensora(3)*(tensora(4)*tensora(8) - tensora(5)*tensora(7))
850
851 if (tensorb(tensor_size) > verysmall) then
852 ! STEP 2c: computing the inverse of grad_xi tensor = F
853 ! tensorb is the adjoint, tensora becomes F
854
855# 172 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
856#if defined(MFC_OpenACC)
857# 172 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
858!$acc loop seq
859# 172 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
860#elif defined(MFC_OpenMP)
861# 172 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
862
863# 172 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
864#endif
865 do i = 1, tensor_size - 1
866 tensora(i) = tensorb(i)/tensorb(tensor_size)
867 end do
868
869 ! STEP 2d: computing the J = det(F) = 1/det(\grad{\xi})
870 tensorb(tensor_size) = 1._wp/tensorb(tensor_size)
871
872 ! STEP 3: computing F transpose F
873 tensorb(1) = tensora(1)**2 + tensora(2)**2 + tensora(3)**2
874 tensorb(5) = tensora(4)**2 + tensora(5)**2 + tensora(6)**2
875 tensorb(9) = tensora(7)**2 + tensora(8)**2 + tensora(9)**2
876 tensorb(2) = tensora(1)*tensora(4) + tensora(2)*tensora(5) + tensora(3)*tensora(6)
877 tensorb(3) = tensora(1)*tensora(7) + tensora(2)*tensora(8) + tensora(3)*tensora(9)
878 tensorb(6) = tensora(4)*tensora(7) + tensora(5)*tensora(8) + tensora(6)*tensora(9)
879 ! STEP 4: update the btensor, this is consistent with Riemann solvers
880# 189 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
881 btensor%vf(1)%sf(j, k, l) = tensorb(1)
882# 189 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
883 btensor%vf(2)%sf(j, k, l) = tensorb(2)
884# 189 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
885 btensor%vf(3)%sf(j, k, l) = tensorb(5)
886# 189 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
887 btensor%vf(4)%sf(j, k, l) = tensorb(3)
888# 189 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
889 btensor%vf(5)%sf(j, k, l) = tensorb(6)
890# 189 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
891 btensor%vf(6)%sf(j, k, l) = tensorb(9)
892# 191 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
893 ! store the determinant at the last entry of the btensor
894 btensor%vf(b_size)%sf(j, k, l) = tensorb(tensor_size)
895 ! STEP 5a: updating the Cauchy stress primitive scalar field
896 if (hyper_model == 1) then
897 call s_neohookean_cauchy_solver(btensor%vf, q_prim_vf, g_local, j, k, l)
898 elseif (hyper_model == 2) then
899 call s_mooney_rivlin_cauchy_solver(btensor%vf, q_prim_vf, g_local, j, k, l)
900 end if
901 ! STEP 5b: updating the pressure field
902 q_prim_vf(e_idx)%sf(j, k, l) = q_prim_vf(e_idx)%sf(j, k, l) - &
903 g_local*q_prim_vf(xiend + 1)%sf(j, k, l)/gamma
904 ! STEP 5c: updating the Cauchy stress conservative scalar field
905
906# 203 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
907#if defined(MFC_OpenACC)
908# 203 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
909!$acc loop seq
910# 203 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
911#elif defined(MFC_OpenMP)
912# 203 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
913
914# 203 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
915#endif
916 do i = 1, b_size - 1
917 q_cons_vf(strxb + i - 1)%sf(j, k, l) = &
918 rho*q_prim_vf(strxb + i - 1)%sf(j, k, l)
919 end do
920 end if
921 end if
922 end do
923 end do
924 end do
925
926# 213 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
927
928# 213 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
929#if defined(MFC_OpenACC)
930# 213 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
931!$acc end parallel loop
932# 213 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
933#elif defined(MFC_OpenMP)
934# 213 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
935
936# 213 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
937
938# 213 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
939!$omp end target teams loop
940# 213 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
941#endif
942# 213 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
943
945
946 !> The following subroutine handles the calculation of the btensor.
947 !! The calculation of the btensor takes qprimvf.
948 !! @param btensor_in Left Cauchy-Green deformation tensor
949 !! @param q_prim_vf Primitive variables
950 !! @param G_param Elastic shear modulus
951 !! @param j x-direction cell index
952 !! @param k y-direction cell index
953 !! @param l z-direction cell index
954 !! calculate the grad_xi, grad_xi is a nxn tensor
955 !! calculate the inverse of grad_xi to obtain F, F is a nxn tensor
956 !! calculate the FFtranspose to obtain the btensor, btensor is nxn tensor
957 !! btensor is symmetric, save the data space
958 subroutine s_neohookean_cauchy_solver(btensor_in, q_prim_vf, G_param, j, k, l)
959
960# 229 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
961#if MFC_OpenACC
962# 229 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
963!$acc routine seq
964# 229 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
965#elif MFC_OpenMP
966# 229 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
967
968# 229 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
969
970# 229 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
971!$omp declare target device_type(any)
972# 229 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
973#endif
974 type(scalar_field), dimension(sys_size), intent(inout) :: q_prim_vf
975 type(scalar_field), dimension(b_size), intent(inout) :: btensor_in
976 real(wp), intent(in) :: G_param
977 integer, intent(in) :: j, k, l
978
979 real(wp) :: trace
980 real(wp), parameter :: f13 = 1._wp/3._wp
981 integer :: i !< Generic loop iterators
982
983 ! tensor is the symmetric tensor & calculate the trace of the tensor
984 trace = btensor_in(1)%sf(j, k, l) + btensor_in(3)%sf(j, k, l) + btensor_in(6)%sf(j, k, l)
985
986 ! calculate the deviatoric of the tensor
987# 244 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
988 btensor_in(1)%sf(j, k, l) = btensor_in(1)%sf(j, k, l) - f13*trace
989# 244 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
990 btensor_in(3)%sf(j, k, l) = btensor_in(3)%sf(j, k, l) - f13*trace
991# 244 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
992 btensor_in(6)%sf(j, k, l) = btensor_in(6)%sf(j, k, l) - f13*trace
993# 246 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
994 ! dividing by the jacobian for neo-Hookean model
995 ! setting the tensor to the stresses for riemann solver
996
997# 248 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
998#if defined(MFC_OpenACC)
999# 248 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1000!$acc loop seq
1001# 248 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1002#elif defined(MFC_OpenMP)
1003# 248 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1004
1005# 248 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1006#endif
1007 do i = 1, b_size - 1
1008 q_prim_vf(strxb + i - 1)%sf(j, k, l) = &
1009 g_param*btensor_in(i)%sf(j, k, l)/btensor_in(b_size)%sf(j, k, l)
1010 end do
1011 ! compute the invariant without the elastic modulus
1012 q_prim_vf(xiend + 1)%sf(j, k, l) = &
1013 0.5_wp*(trace - 3.0_wp)/btensor_in(b_size)%sf(j, k, l)
1014
1015 end subroutine s_neohookean_cauchy_solver
1016
1017 !> The following subroutine handles the calculation of the btensor.
1018 !! The calculation of the btensor takes qprimvf.
1019 !! @param btensor_in Left Cauchy-Green deformation tensor
1020 !! @param q_prim_vf Primitive variables
1021 !! @param G_param Elastic shear modulus
1022 !! @param j x-direction cell index
1023 !! @param k y-direction cell index
1024 !! @param l z-direction cell index
1025 !! calculate the grad_xi, grad_xi is a nxn tensor
1026 !! calculate the inverse of grad_xi to obtain F, F is a nxn tensor
1027 !! calculate the FFtranspose to obtain the btensor, btensor is nxn tensor
1028 !! btensor is symmetric, save the data space
1029 subroutine s_mooney_rivlin_cauchy_solver(btensor_in, q_prim_vf, G_param, j, k, l)
1030
1031# 272 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1032#if MFC_OpenACC
1033# 272 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1034!$acc routine seq
1035# 272 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1036#elif MFC_OpenMP
1037# 272 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1038
1039# 272 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1040
1041# 272 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1042!$omp declare target device_type(any)
1043# 272 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1044#endif
1045 type(scalar_field), dimension(sys_size), intent(inout) :: q_prim_vf
1046 type(scalar_field), dimension(b_size), intent(inout) :: btensor_in
1047 real(wp), intent(in) :: G_param
1048 integer, intent(in) :: j, k, l
1049
1050 real(wp) :: trace
1051 real(wp), parameter :: f13 = 1._wp/3._wp
1052 integer :: i !< Generic loop iterators
1053
1054 !TODO Make this 1D and 2D capable
1055 ! tensor is the symmetric tensor & calculate the trace of the tensor
1056 trace = btensor_in(1)%sf(j, k, l) + btensor_in(3)%sf(j, k, l) + btensor_in(6)%sf(j, k, l)
1057
1058 ! calculate the deviatoric of the tensor
1059 btensor_in(1)%sf(j, k, l) = btensor_in(1)%sf(j, k, l) - f13*trace
1060 btensor_in(3)%sf(j, k, l) = btensor_in(3)%sf(j, k, l) - f13*trace
1061 btensor_in(6)%sf(j, k, l) = btensor_in(6)%sf(j, k, l) - f13*trace
1062
1063 ! dividing by the jacobian for neo-Hookean model
1064 ! setting the tensor to the stresses for riemann solver
1065
1066# 293 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1067#if defined(MFC_OpenACC)
1068# 293 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1069!$acc loop seq
1070# 293 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1071#elif defined(MFC_OpenMP)
1072# 293 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1073
1074# 293 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1075#endif
1076 do i = 1, b_size - 1
1077 q_prim_vf(strxb + i - 1)%sf(j, k, l) = &
1078 g_param*btensor_in(i)%sf(j, k, l)/btensor_in(b_size)%sf(j, k, l)
1079 end do
1080 ! compute the invariant without the elastic modulus
1081 q_prim_vf(xiend + 1)%sf(j, k, l) = &
1082 0.5_wp*(trace - 3.0_wp)/btensor_in(b_size)%sf(j, k, l)
1083
1084 end subroutine s_mooney_rivlin_cauchy_solver
1085
1086 !> @brief Deallocates memory for hyperelastic deformation tensor and finite-difference coefficients.
1088
1089 integer :: i !< iterator
1090
1091 ! Deallocating memory
1092 do i = 1, b_size
1093#ifdef MFC_DEBUG
1094# 311 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1095 block
1096# 311 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1097 use iso_fortran_env, only: output_unit
1098# 311 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1099
1100# 311 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1101 print *, 'm_hyperelastic.fpp:311: ', '@:DEALLOCATE(btensor%vf(i)%sf)'
1102# 311 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1103
1104# 311 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1105 call flush (output_unit)
1106# 311 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1107 end block
1108# 311 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1109#endif
1110# 311 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1111
1112# 311 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1113#if defined(MFC_OpenACC)
1114# 311 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1115!$acc exit data delete(btensor%vf(i)%sf)
1116# 311 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1117#elif defined(MFC_OpenMP)
1118# 311 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1119!$omp target exit data map(release:btensor%vf(i)%sf)
1120# 311 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1121#endif
1122# 311 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1123 deallocate (btensor%vf(i)%sf)
1124 end do
1125#ifdef MFC_DEBUG
1126# 313 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1127 block
1128# 313 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1129 use iso_fortran_env, only: output_unit
1130# 313 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1131
1132# 313 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1133 print *, 'm_hyperelastic.fpp:313: ', '@:DEALLOCATE(fd_coeff_x_hyper)'
1134# 313 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1135
1136# 313 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1137 call flush (output_unit)
1138# 313 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1139 end block
1140# 313 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1141#endif
1142# 313 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1143
1144# 313 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1145#if defined(MFC_OpenACC)
1146# 313 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1147!$acc exit data delete(fd_coeff_x_hyper)
1148# 313 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1149#elif defined(MFC_OpenMP)
1150# 313 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1151!$omp target exit data map(release:fd_coeff_x_hyper)
1152# 313 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1153#endif
1154# 313 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1155 deallocate (fd_coeff_x_hyper)
1156 if (n > 0) then
1157#ifdef MFC_DEBUG
1158# 315 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1159 block
1160# 315 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1161 use iso_fortran_env, only: output_unit
1162# 315 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1163
1164# 315 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1165 print *, 'm_hyperelastic.fpp:315: ', '@:DEALLOCATE(fd_coeff_y_hyper)'
1166# 315 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1167
1168# 315 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1169 call flush (output_unit)
1170# 315 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1171 end block
1172# 315 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1173#endif
1174# 315 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1175
1176# 315 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1177#if defined(MFC_OpenACC)
1178# 315 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1179!$acc exit data delete(fd_coeff_y_hyper)
1180# 315 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1181#elif defined(MFC_OpenMP)
1182# 315 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1183!$omp target exit data map(release:fd_coeff_y_hyper)
1184# 315 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1185#endif
1186# 315 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1187 deallocate (fd_coeff_y_hyper)
1188 if (p > 0) then
1189#ifdef MFC_DEBUG
1190# 317 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1191 block
1192# 317 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1193 use iso_fortran_env, only: output_unit
1194# 317 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1195
1196# 317 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1197 print *, 'm_hyperelastic.fpp:317: ', '@:DEALLOCATE(fd_coeff_z_hyper)'
1198# 317 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1199
1200# 317 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1201 call flush (output_unit)
1202# 317 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1203 end block
1204# 317 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1205#endif
1206# 317 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1207
1208# 317 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1209#if defined(MFC_OpenACC)
1210# 317 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1211!$acc exit data delete(fd_coeff_z_hyper)
1212# 317 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1213#elif defined(MFC_OpenMP)
1214# 317 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1215!$omp target exit data map(release:fd_coeff_z_hyper)
1216# 317 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1217#endif
1218# 317 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1219 deallocate (fd_coeff_z_hyper)
1220 end if
1221 end if
1222
1223 end subroutine s_finalize_hyperelastic_module
1224
1225end module m_hyperelastic
type(scalar_field), dimension(sys_size), intent(inout) q_cons_vf
integer, intent(in) k
integer, intent(in) j
integer, intent(in) l
Shared derived types for field data, patch geometry, bubble dynamics, and MPI I/O structures.
Finite difference operators for computing divergence of velocity fields.
Global parameters for the computational domain, fluid properties, and simulation algorithm configurat...
integer b_size
Number of elements in the symmetric b tensor, plus one.
Computes the left Cauchy–Green deformation tensor and hyperelastic stress source terms.
type(vector_field) btensor
subroutine s_neohookean_cauchy_solver(btensor_in, q_prim_vf, g_param, j, k, l)
The following subroutine handles the calculation of the btensor. The calculation of the btensor takes...
real(wp), dimension(:, :), allocatable fd_coeff_z_hyper
impure subroutine, public s_finalize_hyperelastic_module()
Deallocates memory for hyperelastic deformation tensor and finite-difference coefficients.
subroutine, public s_hyperelastic_rmt_stress_update(q_cons_vf, q_prim_vf)
The following subroutine handles the calculation of the btensor. The calculation of the btensor takes...
real(wp), dimension(:, :), allocatable fd_coeff_x_hyper
real(wp), dimension(:), allocatable gs_hyper
subroutine s_mooney_rivlin_cauchy_solver(btensor_in, q_prim_vf, g_param, j, k, l)
The following subroutine handles the calculation of the btensor. The calculation of the btensor takes...
real(wp), dimension(:, :), allocatable fd_coeff_y_hyper
impure subroutine, public s_initialize_hyperelastic_module
The following subroutine handles the calculation of the btensor. The calculation of the btensor takes...
Conservative-to-primitive variable conversion, mixture property evaluation, and pressure computation.
Derived type annexing a vector field (VF).