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