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