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(xibeg)%sf(j + r, k, l)*fd_coeff_x_hyper(r, j)
825 tensora(2) = tensora(2) + q_prim_vf(xibeg + 1)%sf(j + r, k, l)*fd_coeff_x_hyper(r, j)
826 tensora(3) = tensora(3) + q_prim_vf(xiend)%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(xibeg)%sf(j, k + r, l)*fd_coeff_y_hyper(r, k)
829 tensora(5) = tensora(5) + q_prim_vf(xibeg + 1)%sf(j, k + r, l)*fd_coeff_y_hyper(r, k)
830 tensora(6) = tensora(6) + q_prim_vf(xiend)%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(xibeg)%sf(j, k, l + r)*fd_coeff_z_hyper(r, l)
833 tensora(8) = tensora(8) + q_prim_vf(xibeg + 1)%sf(j, k, l + r)*fd_coeff_z_hyper(r, l)
834 tensora(9) = tensora(9) + q_prim_vf(xiend)%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(e_idx)%sf(j, k, l) = q_prim_vf(e_idx)%sf(j, k, l) - g_local*q_prim_vf(xiend + 1)%sf(j, k, &
902 & 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(strxb + i - 1)%sf(j, k, l) = rho*q_prim_vf(strxb + i - 1)%sf(j, k, l)
917 end do
918 end if
919 end if
920 end do
921 end do
922 end do
923
924# 188 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
925#if defined(MFC_OpenACC)
926# 188 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
927!$acc end parallel loop
928# 188 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
929#elif defined(MFC_OpenMP)
930# 188 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
931
932# 188 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
933!$omp end target teams loop
934# 188 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
935#endif
936
938
939 !> Compute the neo-Hookean Cauchy stress from the left Cauchy-Green tensor
940 subroutine s_neohookean_cauchy_solver(btensor_in, q_prim_vf, G_param, j, k, l)
941
942
943# 195 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
944#if MFC_OpenACC
945# 195 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
946!$acc routine seq
947# 195 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
948#elif MFC_OpenMP
949# 195 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
950
951# 195 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
952
953# 195 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
954!$omp declare target device_type(any)
955# 195 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
956#endif
957 type(scalar_field), dimension(sys_size), intent(inout) :: q_prim_vf
958 type(scalar_field), dimension(b_size), intent(inout) :: btensor_in
959 real(wp), intent(in) :: G_param
960 integer, intent(in) :: j, k, l
961 real(wp) :: trace
962 real(wp), parameter :: f13 = 1._wp/3._wp
963 integer :: i !< Generic loop iterators
964 ! tensor is the symmetric tensor & calculate the trace of the tensor
965 trace = btensor_in(1)%sf(j, k, l) + btensor_in(3)%sf(j, k, l) + btensor_in(6)%sf(j, k, l)
966
967 ! Deviatoric left Cauchy-Green tensor: dev(b) = b - (tr(b)/3)*I
968# 208 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
969 btensor_in(1)%sf(j, k, l) = btensor_in(1)%sf(j, k, l) - f13*trace
970# 208 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
971 btensor_in(3)%sf(j, k, l) = btensor_in(3)%sf(j, k, l) - f13*trace
972# 208 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
973 btensor_in(6)%sf(j, k, l) = btensor_in(6)%sf(j, k, l) - f13*trace
974# 210 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
975 ! dividing by the jacobian for neo-Hookean model setting the tensor to the stresses for riemann solver
976
977# 211 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
978#if defined(MFC_OpenACC)
979# 211 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
980!$acc loop seq
981# 211 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
982#elif defined(MFC_OpenMP)
983# 211 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
984
985# 211 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
986#endif
987 do i = 1, b_size - 1
988 q_prim_vf(strxb + i - 1)%sf(j, k, l) = g_param*btensor_in(i)%sf(j, k, l)/btensor_in(b_size)%sf(j, k, l)
989 end do
990 ! First invariant strain energy: W = G/2 * (I1 - 3), neo-Hookean model
991 q_prim_vf(xiend + 1)%sf(j, k, l) = 0.5_wp*(trace - 3.0_wp)/btensor_in(b_size)%sf(j, k, l)
992
993 end subroutine s_neohookean_cauchy_solver
994
995 !> Compute the Mooney-Rivlin Cauchy stress from the left Cauchy-Green tensor
996 subroutine s_mooney_rivlin_cauchy_solver(btensor_in, q_prim_vf, G_param, j, k, l)
997
998
999# 223 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1000#if MFC_OpenACC
1001# 223 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1002!$acc routine seq
1003# 223 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1004#elif MFC_OpenMP
1005# 223 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1006
1007# 223 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1008
1009# 223 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1010!$omp declare target device_type(any)
1011# 223 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1012#endif
1013 type(scalar_field), dimension(sys_size), intent(inout) :: q_prim_vf
1014 type(scalar_field), dimension(b_size), intent(inout) :: btensor_in
1015 real(wp), intent(in) :: G_param
1016 integer, intent(in) :: j, k, l
1017 real(wp) :: trace
1018 real(wp), parameter :: f13 = 1._wp/3._wp
1019 integer :: i !< Generic loop iterators
1020 ! TODO: Make 1D and 2D capable
1021 trace = btensor_in(1)%sf(j, k, l) + btensor_in(3)%sf(j, k, l) + btensor_in(6)%sf(j, k, l)
1022
1023 ! Deviatoric left Cauchy-Green tensor: dev(b) = b - (tr(b)/3)*I
1024 btensor_in(1)%sf(j, k, l) = btensor_in(1)%sf(j, k, l) - f13*trace
1025 btensor_in(3)%sf(j, k, l) = btensor_in(3)%sf(j, k, l) - f13*trace
1026 btensor_in(6)%sf(j, k, l) = btensor_in(6)%sf(j, k, l) - f13*trace
1027
1028 ! dividing by the jacobian for neo-Hookean model setting the tensor to the stresses for riemann solver
1029
1030# 240 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1031#if defined(MFC_OpenACC)
1032# 240 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1033!$acc loop seq
1034# 240 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1035#elif defined(MFC_OpenMP)
1036# 240 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1037
1038# 240 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1039#endif
1040 do i = 1, b_size - 1
1041 q_prim_vf(strxb + i - 1)%sf(j, k, l) = g_param*btensor_in(i)%sf(j, k, l)/btensor_in(b_size)%sf(j, k, l)
1042 end do
1043 ! First invariant strain energy: W = G/2 * (I1 - 3), neo-Hookean model
1044 q_prim_vf(xiend + 1)%sf(j, k, l) = 0.5_wp*(trace - 3.0_wp)/btensor_in(b_size)%sf(j, k, l)
1045
1046 end subroutine s_mooney_rivlin_cauchy_solver
1047
1048 !> Finalize the hyperelastic module
1050
1051 integer :: i !< iterator
1052 ! Deallocating memory
1053
1054 do i = 1, b_size
1055#ifdef MFC_DEBUG
1056# 256 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1057 block
1058# 256 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1059 use iso_fortran_env, only: output_unit
1060# 256 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1061
1062# 256 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1063 print *, 'm_hyperelastic.fpp:256: ', '@:DEALLOCATE(btensor%vf(i)%sf)'
1064# 256 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1065
1066# 256 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1067 call flush (output_unit)
1068# 256 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1069 end block
1070# 256 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1071#endif
1072# 256 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1073
1074# 256 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1075#if defined(MFC_OpenACC)
1076# 256 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1077!$acc exit data delete(btensor%vf(i)%sf)
1078# 256 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1079#elif defined(MFC_OpenMP)
1080# 256 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1081!$omp target exit data map(release:btensor%vf(i)%sf)
1082# 256 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1083#endif
1084# 256 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1085 deallocate (btensor%vf(i)%sf)
1086 end do
1087#ifdef MFC_DEBUG
1088# 258 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1089 block
1090# 258 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1091 use iso_fortran_env, only: output_unit
1092# 258 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1093
1094# 258 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1095 print *, 'm_hyperelastic.fpp:258: ', '@:DEALLOCATE(fd_coeff_x_hyper)'
1096# 258 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1097
1098# 258 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1099 call flush (output_unit)
1100# 258 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1101 end block
1102# 258 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1103#endif
1104# 258 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1105
1106# 258 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1107#if defined(MFC_OpenACC)
1108# 258 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1109!$acc exit data delete(fd_coeff_x_hyper)
1110# 258 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1111#elif defined(MFC_OpenMP)
1112# 258 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1113!$omp target exit data map(release:fd_coeff_x_hyper)
1114# 258 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1115#endif
1116# 258 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1117 deallocate (fd_coeff_x_hyper)
1118 if (n > 0) then
1119#ifdef MFC_DEBUG
1120# 260 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1121 block
1122# 260 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1123 use iso_fortran_env, only: output_unit
1124# 260 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1125
1126# 260 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1127 print *, 'm_hyperelastic.fpp:260: ', '@:DEALLOCATE(fd_coeff_y_hyper)'
1128# 260 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1129
1130# 260 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1131 call flush (output_unit)
1132# 260 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1133 end block
1134# 260 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1135#endif
1136# 260 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1137
1138# 260 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1139#if defined(MFC_OpenACC)
1140# 260 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1141!$acc exit data delete(fd_coeff_y_hyper)
1142# 260 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1143#elif defined(MFC_OpenMP)
1144# 260 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1145!$omp target exit data map(release:fd_coeff_y_hyper)
1146# 260 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1147#endif
1148# 260 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1149 deallocate (fd_coeff_y_hyper)
1150 if (p > 0) then
1151#ifdef MFC_DEBUG
1152# 262 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1153 block
1154# 262 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1155 use iso_fortran_env, only: output_unit
1156# 262 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1157
1158# 262 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1159 print *, 'm_hyperelastic.fpp:262: ', '@:DEALLOCATE(fd_coeff_z_hyper)'
1160# 262 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1161
1162# 262 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1163 call flush (output_unit)
1164# 262 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1165 end block
1166# 262 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1167#endif
1168# 262 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1169
1170# 262 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1171#if defined(MFC_OpenACC)
1172# 262 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1173!$acc exit data delete(fd_coeff_z_hyper)
1174# 262 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1175#elif defined(MFC_OpenMP)
1176# 262 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1177!$omp target exit data map(release:fd_coeff_z_hyper)
1178# 262 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1179#endif
1180# 262 "/home/runner/work/MFC/MFC/src/simulation/m_hyperelastic.fpp"
1181 deallocate (fd_coeff_z_hyper)
1182 end if
1183 end if
1184
1185 end subroutine s_finalize_hyperelastic_module
1186
1187end 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).