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