MFC
Exascale flow solver
Loading...
Searching...
No Matches
m_icpp_patches.fpp.f90
Go to the documentation of this file.
1# 1 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2!>
3!! @file
4!! @brief Contains module m_icpp_patches
5
6# 1 "/home/runner/work/MFC/MFC/src/common/include/case.fpp" 1
7! This file exists so that Fypp can be run without generating case.fpp files for
8! each target. This is useful when generating documentation, for example. This
9! should also let MFC be built with CMake directly, without invoking mfc.sh.
10
11! For pre-process.
12# 9 "/home/runner/work/MFC/MFC/src/common/include/case.fpp"
13
14! For moving immersed boundaries in simulation
15# 14 "/home/runner/work/MFC/MFC/src/common/include/case.fpp"
16# 6 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp" 2
17# 1 "/home/runner/work/MFC/MFC/src/common/include/ExtrusionHardcodedIC.fpp" 1
18!> Allocate memory and read initial condition data for IC extrusion.
19!>
20!> @details
21!> This macro handles the complete initialization process for IC extrusion by:
22!>
23!> **Memory Allocation:**
24!> - stored_values(xRows, yRows, sys_size) - stores primitive variable data from files
25!> - x_coords(nrows) - stores x-coordinates from input files
26!> - y_coords(nrows) - stores y-coordinates from input files (3D case only)
27!>
28!> **File Reading Operations:**
29!> - Reads primitive variable data from multiple files with pattern:
30!> `prim.<file_number>.00.<timestep>.dat` where timestep uses `zeros_default` padding
31!> - Files are read from directory specified by `init_dir` parameter
32!> - Supports 1D, 2D, and 3D computational domains
33!>
34!> **Grid Structure Detection:**
35!> - 1D/2D: Counts lines in first file to determine xRows
36!> - 3D: Analyzes coordinate patterns to determine xRows and yRows structure
37!>
38!> **MPI Domain Mapping:**
39!> - Calculates global_offset_x and global_offset_y for MPI subdomain positioning
40!> - Maps file coordinates to local computational grid coordinates
41!>
42!> **Data Assignment:**
43!> - Populates q_prim_vf primitive variable arrays with file data
44!> - Handles momentum component indexing with special treatment for eqn_idx%mom%end
45!> - Sets eqn_idx%mom%end component to zero for 2D/3D cases
46!>
47!> **State Management:**
48!> - Uses files_loaded flag to prevent redundant file operations
49!> - Preserves data across multiple macro calls within same simulation
50!>
51!> @note File pattern uses `zeros_default` parameter (default: "000000") for timestep padding
52!> @note Directory path is hardcoded in `init_dir` parameter - modify as needed
53!> @warning Aborts execution if file reading errors occur.
54
55# 56 "/home/runner/work/MFC/MFC/src/common/include/ExtrusionHardcodedIC.fpp"
56
57# 194 "/home/runner/work/MFC/MFC/src/common/include/ExtrusionHardcodedIC.fpp"
58
59# 205 "/home/runner/work/MFC/MFC/src/common/include/ExtrusionHardcodedIC.fpp"
60# 7 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp" 2
61# 1 "/home/runner/work/MFC/MFC/src/common/include/1dHardcodedIC.fpp" 1
62# 5 "/home/runner/work/MFC/MFC/src/common/include/1dHardcodedIC.fpp"
63
64# 74 "/home/runner/work/MFC/MFC/src/common/include/1dHardcodedIC.fpp"
65# 8 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp" 2
66# 1 "/home/runner/work/MFC/MFC/src/common/include/2dHardcodedIC.fpp" 1
67# 26 "/home/runner/work/MFC/MFC/src/common/include/2dHardcodedIC.fpp"
68
69# 349 "/home/runner/work/MFC/MFC/src/common/include/2dHardcodedIC.fpp"
70# 9 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp" 2
71# 1 "/home/runner/work/MFC/MFC/src/common/include/3dHardcodedIC.fpp" 1
72# 66 "/home/runner/work/MFC/MFC/src/common/include/3dHardcodedIC.fpp"
73
74# 186 "/home/runner/work/MFC/MFC/src/common/include/3dHardcodedIC.fpp"
75# 10 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp" 2
76# 1 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 1
77# 1 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 1
78# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
79# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
80# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
81# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
82# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
83# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
84
85# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
86# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
87# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
88
89# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
90
91# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
92
93# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
94
95# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
96
97# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
98
99# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
100
101# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
102! New line at end of file is required for FYPP
103# 2 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
104# 1 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 1
105# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
106# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
107# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
108# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
109# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
110# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
111
112# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
113# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
114# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
115
116# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
117
118# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
119
120# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
121
122# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
123
124# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
125
126# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
127
128# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
129! New line at end of file is required for FYPP
130# 2 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 2
131
132# 4 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
133# 5 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
134# 6 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
135# 7 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
136# 8 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
137
138# 20 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
139
140# 43 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
141
142# 48 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
143
144# 53 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
145
146# 58 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
147
148# 63 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
149
150# 68 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
151
152# 76 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
153
154# 81 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
155
156# 86 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
157
158# 91 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
159
160# 96 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
161
162# 101 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
163
164# 106 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
165
166# 111 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
167
168# 116 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
169
170# 121 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
171
172# 151 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
173
174# 192 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
175
176# 206 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
177
178# 231 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
179
180# 242 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
181
182# 244 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
183# 255 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
184
185# 284 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
186
187# 294 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
188
189# 304 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
190
191# 313 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
192
193# 330 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
194
195# 340 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
196
197# 347 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
198
199# 353 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
200
201# 359 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
202
203# 365 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
204
205# 371 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
206
207# 377 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
208! New line at end of file is required for FYPP
209# 3 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
210# 1 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 1
211# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
212# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
213# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
214# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
215# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
216# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
217
218# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
219# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
220# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
221
222# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
223
224# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
225
226# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
227
228# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
229
230# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
231
232# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
233
234# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
235! New line at end of file is required for FYPP
236# 2 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 2
237
238# 7 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
239
240# 17 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
241
242# 22 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
243
244# 27 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
245
246# 32 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
247
248# 37 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
249
250# 42 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
251
252# 47 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
253
254# 52 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
255
256# 57 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
257
258# 62 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
259
260# 73 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
261
262# 78 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
263
264# 83 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
265
266# 88 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
267
268# 103 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
269
270# 131 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
271
272# 160 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
273
274# 175 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
275
276# 193 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
277
278# 215 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
279
280# 244 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
281
282# 259 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
283
284# 269 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
285
286# 278 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
287
288# 294 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
289
290# 304 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
291
292# 311 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
293! New line at end of file is required for FYPP
294# 4 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
295
296! GPU parallel region (scalar reductions, maxval/minval)
297# 23 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
298
299! GPU parallel loop over threads (most common GPU macro)
300# 43 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
301
302! Required closing for GPU_PARALLEL_LOOP
303# 55 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
304
305! Mark routine for device compilation
306# 112 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
307
308! Declare device-resident data
309# 130 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
310
311! Inner loop within a GPU parallel region
312# 145 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
313
314! Scoped GPU data region
315# 164 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
316
317! Host code with device pointers (for MPI with GPU buffers)
318# 193 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
319
320! Allocate device memory (unscoped)
321# 207 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
322
323! Free device memory
324# 219 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
325
326! Atomic operation on device
327# 231 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
328
329! End atomic capture block
330# 242 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
331
332! Copy data between host and device
333# 254 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
334
335! Synchronization barrier
336# 266 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
337
338! Import GPU library module (openacc or omp_lib)
339# 275 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
340
341! Emit code only for AMD compiler
342# 282 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
343
344! Emit code for non-Cray compilers
345# 289 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
346
347! Emit code only for Cray compiler
348# 296 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
349
350! Emit code for non-NVIDIA compilers
351# 303 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
352
353# 305 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
354# 306 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
355! New line at end of file is required for FYPP
356# 2 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 2
357
358# 14 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
359
360! Caution: This macro requires the use of a binding script to set CUDA_VISIBLE_DEVICES, such that we have one GPU device per MPI
361! rank. That's because for both cudaMemAdvise (preferred location) and cudaMemPrefetchAsync we use location = device_id = 0. For an
362! example see misc/nvidia_uvm/bind.sh. NVIDIA unified memory page placement hint
363# 57 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
364
365! Allocate and create GPU device memory
366# 77 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
367
368! Free GPU device memory and deallocate
369# 85 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
370
371! Cray-specific GPU pointer setup for vector fields
372# 109 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
373
374! Cray-specific GPU pointer setup for scalar fields
375# 125 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
376
377! Cray-specific GPU pointer setup for acoustic source spatials
378# 150 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
379
380# 156 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
381
382# 163 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
383! New line at end of file is required for FYPP
384# 11 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp" 2
385
386!> @brief Constructs initial condition patch geometries (lines, circles, rectangles, spheres, etc.) on the grid
388
389 use m_model ! Subroutine(s) related to STL files
390 use m_derived_types ! Definitions of the derived types
394 use m_helper
395 use m_mpi_common
397 use m_mpi_common
399
400 implicit none
401
402 private; public :: s_apply_icpp_patches
403
407 real(wp) :: smooth_coeff !< Smoothing coefficient (mirrors ic_patch_parameters%smooth_coeff)
408 real(wp) :: eta !< Pseudo volume fraction for patch boundary smoothing
409 real(wp) :: cart_y, cart_z
410 type(bounds_info) :: x_boundary, y_boundary, z_boundary !< Patch boundary locations in x, y, z
411 character(len=5) :: istr !< string to store int to string result for error checking
412
413contains
414
415 !> Dispatch each initial condition patch to its geometry-specific initialization routine.
416 impure subroutine s_apply_icpp_patches(patch_id_fp, q_prim_vf)
417
418 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
419
420#ifdef MFC_MIXED_PRECISION
421 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
422#else
423 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
424#endif
425 integer :: i
426
427 ! 3D Patch Geometries
428
429 if (p > 0) then
430 do i = 1, num_patches
431 if (proc_rank == 0) then
432 print *, 'Processing patch', i
433 end if
434
435 !> ICPP Patches
436 !> @{
437 ! Spherical patch
438 if (patch_icpp(i)%geometry == 8) then
439 call s_icpp_sphere(i, patch_id_fp, q_prim_vf)
440 ! Cuboidal patch
441 else if (patch_icpp(i)%geometry == 9) then
442 call s_icpp_cuboid(i, patch_id_fp, q_prim_vf)
443 ! Cylindrical patch
444 else if (patch_icpp(i)%geometry == 10) then
445 call s_icpp_cylinder(i, patch_id_fp, q_prim_vf)
446 ! Swept plane patch
447 else if (patch_icpp(i)%geometry == 11) then
448 call s_icpp_sweep_plane(i, patch_id_fp, q_prim_vf)
449 ! Ellipsoidal patch
450 else if (patch_icpp(i)%geometry == 12) then
451 call s_icpp_ellipsoid(i, patch_id_fp, q_prim_vf)
452 ! 3D spherical harmonic patch
453 else if (patch_icpp(i)%geometry == 14) then
454 call s_icpp_3d_spherical_harmonic(i, patch_id_fp, q_prim_vf)
455 ! 3D Modified circular patch
456 else if (patch_icpp(i)%geometry == 19) then
457 call s_icpp_3dvarcircle(i, patch_id_fp, q_prim_vf)
458 ! 3D STL patch
459 else if (patch_icpp(i)%geometry == 21) then
460 call s_icpp_model(i, patch_id_fp, q_prim_vf)
461 end if
462 end do
463 !> @}
464
465 ! 2D Patch Geometries
466 else if (n > 0) then
467 do i = 1, num_patches
468 if (proc_rank == 0) then
469 print *, 'Processing patch', i
470 end if
471
472 !> ICPP Patches
473 !> @{
474 ! Circular patch
475 if (patch_icpp(i)%geometry == 2) then
476 call s_icpp_circle(i, patch_id_fp, q_prim_vf)
477 ! Rectangular patch
478 else if (patch_icpp(i)%geometry == 3) then
479 call s_icpp_rectangle(i, patch_id_fp, q_prim_vf)
480 ! Swept line patch
481 else if (patch_icpp(i)%geometry == 4) then
482 call s_icpp_sweep_line(i, patch_id_fp, q_prim_vf)
483 ! Elliptical patch
484 else if (patch_icpp(i)%geometry == 5) then
485 call s_icpp_ellipse(i, patch_id_fp, q_prim_vf)
486 ! Unimplemented patch (formerly isentropic vortex)
487 else if (patch_icpp(i)%geometry == 6) then
488 call s_mpi_abort('This used to be the isentropic vortex patch, ' &
489 & // 'which no longer exists. See Examples. Exiting.')
490 ! 2D modal (Fourier) patch
491 else if (patch_icpp(i)%geometry == 13) then
492 call s_icpp_2d_modal(i, patch_id_fp, q_prim_vf)
493 ! Spiral patch
494 else if (patch_icpp(i)%geometry == 17) then
495 call s_icpp_spiral(i, patch_id_fp, q_prim_vf)
496 ! Modified circular patch
497 else if (patch_icpp(i)%geometry == 18) then
498 call s_icpp_varcircle(i, patch_id_fp, q_prim_vf)
499 ! TaylorGreen vortex patch
500 else if (patch_icpp(i)%geometry == 20) then
501 call s_icpp_2d_taylorgreen_vortex(i, patch_id_fp, q_prim_vf)
502 ! STL patch
503 else if (patch_icpp(i)%geometry == 21) then
504 call s_icpp_model(i, patch_id_fp, q_prim_vf)
505 end if
506 !> @}
507 end do
508
509 ! 1D Patch Geometries
510 else
511 do i = 1, num_patches
512 if (proc_rank == 0) then
513 print *, 'Processing patch', i
514 end if
515
516 ! Line segment patch
517 if (patch_icpp(i)%geometry == 1) then
518 call s_icpp_line_segment(i, patch_id_fp, q_prim_vf)
519 ! 1d analytical
520 else if (patch_icpp(i)%geometry == 16) then
521 call s_icpp_1d_bubble_pulse(i, patch_id_fp, q_prim_vf)
522 end if
523 end do
524 end if
525
526 end subroutine s_apply_icpp_patches
527
528 !> The line segment patch is a 1D geometry that may be used, for example, in creating a Riemann problem. The geometry of the
529 !! patch is well-defined when its centroid and length in the x-coordinate direction are provided. Note that the line segment
530 !! patch DOES NOT allow for the smearing of its boundaries.
531 subroutine s_icpp_line_segment(patch_id, patch_id_fp, q_prim_vf)
532
533 integer, intent(in) :: patch_id
534
535#ifdef MFC_MIXED_PRECISION
536 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
537#else
538 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
539#endif
540 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
541
542 ! Generic loop iterators
543 integer :: i, j, k
544
545 ! Placeholders for the cell boundary values
546 real(wp) :: pi_inf, gamma, lit_gamma
547
548 integer :: xRows, yRows, nRows, iix, iiy, max_files
549# 174 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
550 integer :: f, iter, ios, ios2, unit, unit2, idx, idy, index_x, index_y, jump, line_count, ycount
551# 174 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
552 real(wp) :: x_len, x_step, y_len, y_step
553# 174 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
554 real(wp) :: dummy_x, dummy_y, dummy_z, x0, y0
555# 174 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
556 integer :: global_offset_x, global_offset_y !< MPI subdomain offset
557# 174 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
558 real(wp) :: delta_x, delta_y
559# 174 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
560 character(len=100), dimension(sys_size) :: fileNames !< Arrays to store all data from files
561# 174 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
562 character(len=200) :: errmsg
563# 174 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
564 real(wp), allocatable :: stored_values(:,:,:)
565# 174 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
566 real(wp), allocatable :: x_coords(:), y_coords(:)
567# 174 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
568 logical :: files_loaded = .false.
569# 174 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
570 real(wp) :: domain_xstart, domain_xend, domain_ystart, domain_yend
571# 174 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
572 character(len=*), parameter :: init_dir = "/home/MFC/FilesDirectory" !< For example /home/MFC/examples/1D_Shock/D/
573# 174 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
574 character(len=20) :: file_num_str !< For storing the file number as a string
575# 174 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
576 character(len=20) :: zeros_part !< For the trailing zeros part
577# 174 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
578 character(len=6), parameter :: zeros_default = "000000" !< Default zeros (can be changed)
579 ! Place any declaration of intermediate variables here
580# 175 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
581 real(wp) :: x_mid_diffu, width_sq, profile_shape, temp, molar_mass_inv, y1, y2, y3, y4
582
583 pi_inf = pi_infs(1)
584 gamma = gammas(1)
585 lit_gamma = gs_min(1)
586 j = 0
587 k = 0
588
589 ! Transferring the line segment's centroid and length information
590 x_centroid = patch_icpp(patch_id)%x_centroid
591 length_x = patch_icpp(patch_id)%length_x
592
593 ! Computing the beginning and end x-coordinates of the line segment based on its centroid and length
594 x_boundary%beg = x_centroid - 0.5_wp*length_x
595 x_boundary%end = x_centroid + 0.5_wp*length_x
596
597 ! Set eta=1 (no smoothing for this patch type)
598 eta = 1._wp
599
600 ! Assign patch vars if cell is covered and patch has write permission
601 do i = 0, m
602 if (x_boundary%beg <= x_cc(i) .and. x_boundary%end >= x_cc(i) .and. patch_icpp(patch_id)%alter_patch(patch_id_fp(i, &
603 & 0, 0))) then
604 call s_assign_patch_primitive_variables(patch_id, i, 0, 0, eta, q_prim_vf, patch_id_fp)
605
606
607
608 ! check if this should load a hardcoded patch
609 if (patch_icpp(patch_id)%hcid /= dflt_int) then
610 select case (patch_icpp(patch_id)%hcid)
611# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
612 case (150) ! 1D Smooth Alfven Case for MHD
613# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
614 ! velocity
615# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
616 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, 0, 0) = 0.1_wp*sin(2._wp*pi*x_cc(i))
617# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
618 q_prim_vf(eqn_idx%mom%beg + 2)%sf(i, 0, 0) = 0.1_wp*cos(2._wp*pi*x_cc(i))
619# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
620
621# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
622 ! magnetic field
623# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
624 q_prim_vf(eqn_idx%B%end - 1)%sf(i, 0, 0) = 0.1_wp*sin(2._wp*pi*x_cc(i))
625# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
626 q_prim_vf(eqn_idx%B%end)%sf(i, 0, 0) = 0.1_wp*cos(2._wp*pi*x_cc(i))
627# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
628 case (170) ! 1D profile from external data (e.g. Cantera, SDtoolbox)
629# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
630 ! This hardcoded case can be used to start a simulation with initial conditions given from a known 1D profile (e.g. Cantera,
631# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
632 ! SDtoolbox)
633# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
634 if (.not. files_loaded) then
635# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
636 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
637# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
638 do f = 1, max_files
639# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
640 write (file_num_str, '(I0)') f
641# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
642 filenames(f) = trim(init_dir) // "prim." // trim(file_num_str) // ".00." // zeros_default // ".dat"
643# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
644 end do
645# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
646
647# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
648 ! Common file reading setup
649# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
650 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
651# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
652 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
653# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
654
655# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
656 select case (num_dims)
657# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
658 case (1, 2) ! 1D and 2D cases are similar
659# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
660 ! Count lines
661# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
662 line_count = 0
663# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
664 do
665# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
666 read (unit2, *, iostat=ios2) dummy_x, dummy_y
667# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
668 if (ios2 /= 0) exit
669# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
670 line_count = line_count + 1
671# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
672 end do
673# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
674 close (unit2)
675# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
676
677# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
678 xrows = line_count
679# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
680 yrows = 1
681# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
682 index_x = 0
683# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
684 if (num_dims == 2) index_x = i
685# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
686#ifdef MFC_DEBUG
687# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
688 block
689# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
690 use iso_fortran_env, only: output_unit
691# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
692
693# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
694 print *, 'm_icpp_patches.fpp:204: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
695# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
696
697# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
698 call flush (output_unit)
699# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
700 end block
701# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
702#endif
703# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
704 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
705# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
706
707# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
708
709# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
710
711# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
712#if defined(MFC_OpenACC)
713# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
714!$acc enter data create(x_coords, stored_values)
715# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
716#elif defined(MFC_OpenMP)
717# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
718!$omp target enter data map(always,alloc:x_coords, stored_values)
719# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
720#endif
721# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
722
723# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
724 ! Read data from all files
725# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
726 do f = 1, max_files
727# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
728 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
729# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
730 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
731# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
732
733# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
734 do iter = 1, xrows
735# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
736 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
737# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
738 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
739# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
740 end do
741# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
742 close (unit)
743# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
744 end do
745# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
746
747# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
748 ! Calculate offsets
749# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
750 domain_xstart = x_coords(1)
751# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
752 x_step = x_cc(1) - x_cc(0)
753# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
754 delta_x = merge(x_cc(0) - domain_xstart + x_step/2.0, x_cc(index_x) - domain_xstart + x_step/2.0, num_dims == 1)
755# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
756 global_offset_x = nint(abs(delta_x)/x_step)
757# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
758 case (3) ! 3D case - determine grid structure
759# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
760 ! Find yRows by counting rows with same x
761# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
762 read (unit2, *, iostat=ios2) x0, y0, dummy_z
763# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
764 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
765# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
766
767# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
768 yrows = 1
769# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
770 do
771# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
772 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
773# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
774 if (ios2 /= 0) exit
775# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
776 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
777# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
778 yrows = yrows + 1
779# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
780 else
781# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
782 exit
783# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
784 end if
785# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
786 end do
787# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
788 close (unit2)
789# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
790
791# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
792 ! Count total rows
793# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
794 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
795# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
796 nrows = 0
797# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
798 do
799# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
800 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
801# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
802 if (ios2 /= 0) exit
803# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
804 nrows = nrows + 1
805# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
806 end do
807# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
808 close (unit2)
809# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
810
811# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
812 xrows = nrows/yrows
813# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
814#ifdef MFC_DEBUG
815# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
816 block
817# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
818 use iso_fortran_env, only: output_unit
819# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
820
821# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
822 print *, 'm_icpp_patches.fpp:204: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
823# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
824
825# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
826 call flush (output_unit)
827# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
828 end block
829# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
830#endif
831# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
832 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
833# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
834
835# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
836
837# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
838
839# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
840
841# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
842#if defined(MFC_OpenACC)
843# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
844!$acc enter data create(x_coords, y_coords, stored_values)
845# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
846#elif defined(MFC_OpenMP)
847# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
848!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
849# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
850#endif
851# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
852 index_x = i
853# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
854 index_y = j
855# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
856
857# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
858 ! Read all files
859# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
860 do f = 1, max_files
861# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
862 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
863# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
864 if (ios /= 0) then
865# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
866 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
867# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
868 cycle
869# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
870 end if
871# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
872
873# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
874 iter = 0
875# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
876 do iix = 1, xrows
877# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
878 do iiy = 1, yrows
879# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
880 iter = iter + 1
881# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
882 if (f == 1) then
883# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
884 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
885# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
886 else
887# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
888 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
889# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
890 end if
891# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
892 if (ios /= 0) call s_mpi_abort("Error reading data")
893# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
894 end do
895# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
896 end do
897# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
898 close (unit)
899# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
900 end do
901# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
902
903# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
904 ! Calculate offsets
905# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
906 x_step = x_cc(1) - x_cc(0)
907# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
908 y_step = y_cc(1) - y_cc(0)
909# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
910 delta_x = x_cc(index_x) - x_coords(1) + x_step/2.0_wp
911# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
912 delta_y = y_cc(index_y) - y_coords(1) + y_step/2.0_wp
913# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
914 global_offset_x = nint(abs(delta_x)/x_step)
915# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
916 global_offset_y = nint(abs(delta_y)/y_step)
917# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
918 end select
919# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
920
921# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
922 files_loaded = .true.
923# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
924 end if
925# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
926
927# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
928 ! Data assignment
929# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
930 select case (num_dims)
931# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
932 case (1)
933# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
934 idx = i + 1 + global_offset_x
935# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
936 do f = 1, sys_size
937# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
938 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
939# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
940 end do
941# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
942 case (2)
943# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
944 idx = i + 1 + global_offset_x - index_x
945# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
946 do f = 1, sys_size - 1
947# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
948 jump = merge(1, 0, f >= eqn_idx%mom%end)
949# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
950 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
951# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
952 end do
953# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
954 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
955# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
956 case (3)
957# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
958 idx = i + 1 + global_offset_x - index_x
959# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
960 idy = j + 1 + global_offset_y - index_y
961# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
962 do f = 1, sys_size - 1
963# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
964 jump = merge(1, 0, f >= eqn_idx%mom%end)
965# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
966 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
967# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
968 end do
969# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
970 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
971# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
972 end select
973# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
974 case (180) ! Shu-Osher problem
975# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
976 ! This is patch is hard-coded for test suite optimization used in the 1D_shuoser cases: "patch_icpp(2)%alpha_rho(1)": "1 +
977# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
978 ! 0.2*sin(5*x)"
979# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
980 if (patch_id == 2) then
981# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
982 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, 0, 0) = 1 + 0.2*sin(5*x_cc(i))
983# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
984 end if
985# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
986 case (181) ! Titarev-Torro problem
987# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
988 ! This is patch is hard-coded for test suite optimization used in the 1D_titarevtorro cases: "patch_icpp(2)%alpha_rho(1)":
989# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
990 ! "1 + 0.1*sin(20*x*pi)"
991# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
992 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, 0, 0) = 1 + 0.1*sin(20*x_cc(i)*pi)
993# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
994 case (182) ! Multi-component diffusion
995# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
996 ! This patch is a hard-coded for test suite optimization (multiple component diffusion)
997# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
998 x_mid_diffu = 0.05_wp/2.0_wp
999# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1000 width_sq = (2.5_wp*10.0_wp**(-3.0_wp))**2
1001# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1002 profile_shape = 1.0_wp - 0.5_wp*exp(-(x_cc(i) - x_mid_diffu)**2/width_sq)
1003# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1004 q_prim_vf(eqn_idx%mom%beg)%sf(i, 0, 0) = 0.0_wp
1005# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1006 q_prim_vf(eqn_idx%E)%sf(i, 0, 0) = 1.01325_wp*(10.0_wp)**5
1007# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1008 q_prim_vf(eqn_idx%adv%beg)%sf(i, 0, 0) = 1.0_wp
1009# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1010
1011# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1012 y1 = (0.195_wp - 0.142_wp)*profile_shape + 0.142_wp
1013# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1014 y2 = (0.0_wp - 0.1_wp)*profile_shape + 0.1_wp
1015# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1016 y3 = (0.214_wp - 0.0_wp)*profile_shape + 0.0_wp
1017# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1018 y4 = (0.591_wp - 0.758_wp)*profile_shape + 0.758_wp
1019# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1020
1021# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1022 q_prim_vf(eqn_idx%species%beg)%sf(i, 0, 0) = y1
1023# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1024 q_prim_vf(eqn_idx%species%beg + 1)%sf(i, 0, 0) = y2
1025# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1026 q_prim_vf(eqn_idx%species%beg + 2)%sf(i, 0, 0) = y3
1027# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1028 q_prim_vf(eqn_idx%species%beg + 3)%sf(i, 0, 0) = y4
1029# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1030
1031# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1032 temp = (320.0_wp - 1350.0_wp)*profile_shape + 1350.0_wp
1033# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1034
1035# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1036 molar_mass_inv = y1/31.998_wp + y2/18.01508_wp + y3/16.04256_wp + y4/28.0134_wp
1037# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1038
1039# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1040 q_prim_vf(eqn_idx%cont%beg)%sf(i, 0, 0) = 1.01325_wp*(10.0_wp)**5/(temp*8.3144626_wp*1000.0_wp*molar_mass_inv)
1041# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1042
1043# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1044 case(191) ! 1D Dual Isothermal case
1045# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1046
1047# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1048 q_prim_vf(eqn_idx%E)%sf(i, 0, 0) = 101325.0_wp
1049# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1050 q_prim_vf(eqn_idx%mom%beg)%sf(i, 0, 0) = 0.0_wp
1051# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1052 q_prim_vf(eqn_idx%species%beg)%sf(i, 0, 0) = 1.0_wp
1053# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1054
1055# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1056 if (x_cc(i) <= 0.025_wp) then
1057# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1058 temp = 700.0_wp + ((1000.0_wp - 700.0_wp)/0.025_wp)*x_cc(i)
1059# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1060 else
1061# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1062 temp = 1200.0_wp + ((900.0_wp - 1000.0_wp)/0.025_wp)*(x_cc(i) - 0.025_wp)
1063# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1064 end if
1065# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1066
1067# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1068 molar_mass_inv = 1.0_wp/2.01588_wp
1069# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1070 q_prim_vf(eqn_idx%cont%beg)%sf(i, 0, 0) = 101325.0_wp/(temp*8.3144626_wp*1000.0_wp*molar_mass_inv)
1071# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1072 case default
1073# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1074 call s_int_to_str(patch_id, istr)
1075# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1076 call s_mpi_abort("Invalid hcid specified for patch " // trim(istr))
1077# 204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1078 end select
1079 end if
1080
1081 ! Updating the patch identities bookkeeping variable
1082 if (1._wp - eta < sgm_eps) patch_id_fp(i, 0, 0) = patch_id
1083 end if
1084 end do
1085 if (allocated(stored_values)) then
1086# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1087#ifdef MFC_DEBUG
1088# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1089 block
1090# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1091 use iso_fortran_env, only: output_unit
1092# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1093
1094# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1095 print *, 'm_icpp_patches.fpp:211: ', '@:DEALLOCATE(stored_values)'
1096# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1097
1098# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1099 call flush (output_unit)
1100# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1101 end block
1102# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1103#endif
1104# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1105
1106# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1107#if defined(MFC_OpenACC)
1108# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1109!$acc exit data delete(stored_values)
1110# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1111#elif defined(MFC_OpenMP)
1112# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1113!$omp target exit data map(release:stored_values)
1114# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1115#endif
1116# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1117 deallocate (stored_values)
1118# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1119#ifdef MFC_DEBUG
1120# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1121 block
1122# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1123 use iso_fortran_env, only: output_unit
1124# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1125
1126# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1127 print *, 'm_icpp_patches.fpp:211: ', '@:DEALLOCATE(x_coords)'
1128# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1129
1130# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1131 call flush (output_unit)
1132# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1133 end block
1134# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1135#endif
1136# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1137
1138# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1139#if defined(MFC_OpenACC)
1140# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1141!$acc exit data delete(x_coords)
1142# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1143#elif defined(MFC_OpenMP)
1144# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1145!$omp target exit data map(release:x_coords)
1146# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1147#endif
1148# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1149 deallocate (x_coords)
1150# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1151 end if
1152# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1153
1154# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1155 if (allocated(y_coords)) then
1156# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1157#ifdef MFC_DEBUG
1158# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1159 block
1160# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1161 use iso_fortran_env, only: output_unit
1162# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1163
1164# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1165 print *, 'm_icpp_patches.fpp:211: ', '@:DEALLOCATE(y_coords)'
1166# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1167
1168# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1169 call flush (output_unit)
1170# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1171 end block
1172# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1173#endif
1174# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1175
1176# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1177#if defined(MFC_OpenACC)
1178# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1179!$acc exit data delete(y_coords)
1180# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1181#elif defined(MFC_OpenMP)
1182# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1183!$omp target exit data map(release:y_coords)
1184# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1185#endif
1186# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1187 deallocate (y_coords)
1188# 211 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1189 end if
1190
1191 end subroutine s_icpp_line_segment
1192
1193 !> The spiral patch is a 2D geometry that may be used, The geometry of the patch is well-defined when its centroid and radius
1194 !! are provided. Note that the circular patch DOES allow for the smoothing of its boundary.
1195 impure subroutine s_icpp_spiral(patch_id, patch_id_fp, q_prim_vf)
1196
1197 integer, intent(in) :: patch_id
1198
1199#ifdef MFC_MIXED_PRECISION
1200 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
1201#else
1202 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
1203#endif
1204 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
1205 integer :: i, j, k !< Generic loop iterators
1206 real(wp) :: th, thickness, nturns, mya
1207 real(wp) :: spiral_x_min, spiral_x_max, spiral_y_min, spiral_y_max
1208
1209 integer :: xrows, yrows, nrows, iix, iiy, max_files
1210# 231 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1211 integer :: f, iter, ios, ios2, unit, unit2, idx, idy, index_x, index_y, jump, line_count, ycount
1212# 231 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1213 real(wp) :: x_len, x_step, y_len, y_step
1214# 231 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1215 real(wp) :: dummy_x, dummy_y, dummy_z, x0, y0
1216# 231 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1217 integer :: global_offset_x, global_offset_y !< MPI subdomain offset
1218# 231 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1219 real(wp) :: delta_x, delta_y
1220# 231 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1221 character(len=100), dimension(sys_size) :: filenames !< Arrays to store all data from files
1222# 231 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1223 character(len=200) :: errmsg
1224# 231 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1225 real(wp), allocatable :: stored_values(:,:,:)
1226# 231 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1227 real(wp), allocatable :: x_coords(:), y_coords(:)
1228# 231 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1229 logical :: files_loaded = .false.
1230# 231 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1231 real(wp) :: domain_xstart, domain_xend, domain_ystart, domain_yend
1232# 231 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1233 character(len=*), parameter :: init_dir = "/home/MFC/FilesDirectory" !< For example /home/MFC/examples/1D_Shock/D/
1234# 231 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1235 character(len=20) :: file_num_str !< For storing the file number as a string
1236# 231 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1237 character(len=20) :: zeros_part !< For the trailing zeros part
1238# 231 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1239 character(len=6), parameter :: zeros_default = "000000" !< Default zeros (can be changed)
1240 ! Place any declaration of intermediate variables here
1241# 232 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1242 real(wp) :: eps, eps_mhd, c_mhd
1243# 232 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1244 real(wp) :: r, rmax, gam, umax, p0
1245# 232 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1246 real(wp) :: rhoh, rhol, pref, pint, h, lam, wl, amp, inth, intl, alph
1247# 232 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1248 real(wp) :: factor
1249# 232 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1250 real(wp) :: r0, alpha, r2
1251# 232 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1252 real(wp) :: sina, cosa
1253# 232 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1254 real(wp) :: r_sq
1255# 232 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1256
1257# 232 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1258 ! # 291 - Shear/Thermal Layer Case
1259# 232 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1260 real(wp) :: delta_shear, u_max, u_mean
1261# 232 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1262 real(wp) :: t_wall, t_inf, p_atm, t_loc
1263# 232 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1264 real(wp) :: delta_th, r_mix
1265# 232 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1266 real(wp) :: y_n2, y_o2, mw_n2, mw_o2
1267# 232 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1268 real(wp) :: bottom_blend_u, bottom_blend_t
1269# 232 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1270
1271# 232 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1272 ! # 207
1273# 232 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1274 real(wp) :: sigma, gauss1, gauss2
1275# 232 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1276
1277# 232 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1278 ! # 208
1279# 232 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1280 real(wp) :: ei, d, fsm, alpha_air, alpha_sf6
1281# 232 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1282
1283# 232 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1284 eps = 1.e-9_wp
1285
1286 ! Transferring the circular patch's radius, centroid, smearing patch identity and smearing coefficient information
1287 x_centroid = patch_icpp(patch_id)%x_centroid
1288 y_centroid = patch_icpp(patch_id)%y_centroid
1289 mya = patch_icpp(patch_id)%radius
1290 thickness = patch_icpp(patch_id)%length_x
1291 nturns = patch_icpp(patch_id)%length_y
1292
1293 !
1294 logic_grid = 0
1295 do k = 0, int(m*91*nturns)
1296 th = k/real(int(m*91._wp*nturns))*nturns*2._wp*pi
1297
1298 spiral_x_min = minval((/f_r(th, 0.0_wp, mya)*cos(th), f_r(th, thickness, mya)*cos(th)/))
1299 spiral_y_min = minval((/f_r(th, 0.0_wp, mya)*sin(th), f_r(th, thickness, mya)*sin(th)/))
1300
1301 spiral_x_max = maxval((/f_r(th, 0.0_wp, mya)*cos(th), f_r(th, thickness, mya)*cos(th)/))
1302 spiral_y_max = maxval((/f_r(th, 0.0_wp, mya)*sin(th), f_r(th, thickness, mya)*sin(th)/))
1303
1304 do j = 0, n; do i = 0, m
1305 if ((x_cc(i) > spiral_x_min) .and. (x_cc(i) < spiral_x_max) .and. (y_cc(j) > spiral_y_min) .and. (y_cc(j) &
1306 & < spiral_y_max)) then
1307 logic_grid(i, j, 0) = 1
1308 end if
1309 end do; end do
1310 end do
1311
1312 do j = 0, n
1313 do i = 0, m
1314 if ((logic_grid(i, j, 0) == 1)) then
1315 call s_assign_patch_primitive_variables(patch_id, i, j, 0, eta, q_prim_vf, patch_id_fp)
1316
1317
1318 if (patch_icpp(patch_id)%hcid /= dflt_int) then
1319 select case (patch_icpp(patch_id)%hcid) ! 2D_hardcoded_ic example case
1320# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1321 case (200) ! Two-fluid cubic interface
1322# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1323 if (y_cc(j) <= (-x_cc(i)**3 + 1)**(1._wp/3._wp)) then
1324# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1325 ! Volume Fractions
1326# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1327 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = eps
1328# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1329 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = 1._wp - eps
1330# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1331 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = eps*1000._wp
1332# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1333 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = (1._wp - eps)*1._wp
1334# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1335 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1000._wp
1336# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1337 end if
1338# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1339 case (202) ! Gresho vortex (Gouasmi et al 2022 JCP)
1340# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1341 r = ((x_cc(i) - 0.5_wp)**2 + (y_cc(j) - 0.5_wp)**2)**0.5_wp
1342# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1343 rmax = 0.2_wp
1344# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1345
1346# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1347 gam = 1._wp + 1._wp/fluid_pp(1)%gamma
1348# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1349 umax = 2*pi*rmax*patch_icpp(patch_id)%vel(2)
1350# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1351 p0 = umax**2*(1._wp/(gam*patch_icpp(patch_id)%vel(2)**2) - 0.5_wp)
1352# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1353
1354# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1355 if (r < rmax) then
1356# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1357 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -(y_cc(j) - 0.5_wp)*umax/rmax
1358# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1359 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = (x_cc(i) - 0.5_wp)*umax/rmax
1360# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1361 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*((r/rmax)**2._wp/2._wp)
1362# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1363 else if (r < 2*rmax) then
1364# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1365 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -((y_cc(j) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
1366# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1367 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = ((x_cc(i) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
1368# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1369 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*((r/rmax)**2/2._wp + 4*(1 - (r/rmax) + log(r/rmax)))
1370# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1371 else
1372# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1373 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 0._wp
1374# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1375 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0._wp
1376# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1377 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*(-2 + 4*log(2._wp))
1378# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1379 end if
1380# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1381 case (203) ! Gresho vortex (Gouasmi et al 2022 JCP) with density correction
1382# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1383 r = ((x_cc(i) - 0.5_wp)**2._wp + (y_cc(j) - 0.5_wp)**2)**0.5_wp
1384# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1385 rmax = 0.2_wp
1386# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1387
1388# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1389 gam = 1._wp + 1._wp/fluid_pp(1)%gamma
1390# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1391 umax = 2*pi*rmax*patch_icpp(patch_id)%vel(2)
1392# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1393 p0 = umax**2*(1._wp/(gam*patch_icpp(patch_id)%vel(2)**2) - 0.5_wp)
1394# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1395
1396# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1397 if (r < rmax) then
1398# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1399 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -(y_cc(j) - 0.5_wp)*umax/rmax
1400# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1401 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = (x_cc(i) - 0.5_wp)*umax/rmax
1402# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1403 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*((r/rmax)**2._wp/2._wp)
1404# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1405 else if (r < 2*rmax) then
1406# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1407 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -((y_cc(j) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
1408# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1409 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = ((x_cc(i) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
1410# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1411 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*((r/rmax)**2/2._wp + 4._wp*(1._wp - (r/rmax) + log(r/rmax)))
1412# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1413 else
1414# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1415 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 0._wp
1416# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1417 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0._wp
1418# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1419 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2._wp*(-2._wp + 4*log(2._wp))
1420# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1421 end if
1422# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1423
1424# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1425 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = q_prim_vf(eqn_idx%E)%sf(i, j, 0)**(1._wp/gam)
1426# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1427 case (204) ! Rayleigh-Taylor instability
1428# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1429 rhoh = 3._wp
1430# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1431 rhol = 1._wp
1432# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1433 pref = 1.e5_wp
1434# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1435 pint = pref
1436# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1437 h = 0.7_wp
1438# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1439 lam = 0.2_wp
1440# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1441 wl = 2._wp*pi/lam
1442# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1443 amp = 0.05_wp/wl
1444# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1445
1446# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1447 inth = amp*sin(2._wp*pi*x_cc(i)/lam - pi/2._wp) + h
1448# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1449
1450# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1451 alph = 0.5_wp*(1._wp + tanh((y_cc(j) - inth)/2.5e-3_wp))
1452# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1453
1454# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1455 if (alph < eps) alph = eps
1456# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1457 if (alph > 1._wp - eps) alph = 1._wp - eps
1458# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1459
1460# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1461 if (y_cc(j) > inth) then
1462# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1463 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = alph
1464# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1465 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = 1._wp - alph
1466# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1467 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = alph*rhoh
1468# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1469 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = (1._wp - alph)*rhol
1470# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1471 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = pref + rhoh*9.81_wp*(1.2_wp - y_cc(j))
1472# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1473 else
1474# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1475 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = alph
1476# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1477 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = 1._wp - alph
1478# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1479 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = alph*rhoh
1480# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1481 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = (1._wp - alph)*rhol
1482# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1483 pint = pref + rhoh*9.81_wp*(1.2_wp - inth)
1484# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1485 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = pint + rhol*9.81_wp*(inth - y_cc(j))
1486# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1487 end if
1488# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1489 case (205) ! 2D lung wave interaction problem
1490# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1491 h = 0.0_wp ! non dim origin y
1492# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1493 lam = 1.0_wp ! non dim lambda
1494# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1495 amp = patch_icpp(patch_id)%a(2) ! to be changed later! !non dim amplitude
1496# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1497
1498# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1499 inth = amp*sin(2*pi*x_cc(i)/lam - pi/2) + h
1500# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1501
1502# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1503 if (y_cc(j) > inth) then
1504# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1505 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(1)
1506# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1507 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(2)
1508# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1509 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = patch_icpp(1)%pres
1510# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1511 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = patch_icpp(1)%alpha(1)
1512# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1513 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = patch_icpp(1)%alpha(2)
1514# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1515 end if
1516# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1517 case (206) ! 2D lung wave interaction problem - horizontal domain
1518# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1519 h = 0.0_wp ! non dim origin y
1520# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1521 lam = 1.0_wp ! non dim lambda
1522# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1523 amp = patch_icpp(patch_id)%a(2)
1524# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1525
1526# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1527 intl = amp*sin(2*pi*y_cc(j)/lam - pi/2) + h
1528# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1529
1530# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1531 if (x_cc(i) > intl) then ! this is the liquid
1532# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1533 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(1)
1534# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1535 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(2)
1536# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1537 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = patch_icpp(1)%pres
1538# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1539 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = patch_icpp(1)%alpha(1)
1540# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1541 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = patch_icpp(1)%alpha(2)
1542# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1543 end if
1544# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1545 case (207) ! Kelvin Helmholtz Instability
1546# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1547 sigma = 0.05_wp/sqrt(2.0_wp)
1548# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1549 gauss1 = exp(-(y_cc(j) - 0.75_wp)**2/(2.0_wp*sigma**2))
1550# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1551 gauss2 = exp(-(y_cc(j) - 0.25_wp)**2/(2.0_wp*sigma**2))
1552# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1553 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = 0.1_wp*sin(4.0_wp*pi*x_cc(i))*(gauss1 + gauss2)
1554# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1555 case (208) ! Richtmeyer Meshkov Instability
1556# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1557 lam = 1.0_wp
1558# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1559 eps = 1.0e-6_wp
1560# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1561 ei = 5.0_wp
1562# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1563 ! Smoothening function to smooth out sharp discontinuity in the interface
1564# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1565 if (x_cc(i) <= 0.7_wp*lam) then
1566# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1567 d = x_cc(i) - lam*(0.4_wp - 0.1_wp*sin(2.0_wp*pi*(y_cc(j)/lam + 0.25_wp)))
1568# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1569 fsm = 0.5_wp*(1.0_wp + erf(d/(ei*sqrt(dx*dy))))
1570# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1571 alpha_air = eps + (1.0_wp - 2.0_wp*eps)*fsm
1572# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1573 alpha_sf6 = 1.0_wp - alpha_air
1574# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1575 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = alpha_sf6*5.04_wp
1576# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1577 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = alpha_air*1.0_wp
1578# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1579 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = alpha_sf6
1580# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1581 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = alpha_air
1582# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1583 end if
1584# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1585 case (250) ! MHD Orszag-Tang vortex
1586# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1587 ! gamma = 5/3 rho = 25/(36*pi) p = 5/(12*pi) v = (-sin(2*pi*y), sin(2*pi*x), 0) B = (-sin(2*pi*y)/sqrt(4*pi),
1588# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1589 ! sin(4*pi*x)/sqrt(4*pi), 0)
1590# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1591
1592# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1593 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -sin(2._wp*pi*y_cc(j))
1594# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1595 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = sin(2._wp*pi*x_cc(i))
1596# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1597
1598# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1599 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = -sin(2._wp*pi*y_cc(j))/sqrt(4._wp*pi)
1600# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1601 q_prim_vf(eqn_idx%B%beg + 1)%sf(i, j, 0) = sin(4._wp*pi*x_cc(i))/sqrt(4._wp*pi)
1602# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1603 case (251) ! RMHD Cylindrical Blast Wave [Mignone, 2006: Section 4.3.1]
1604# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1605 if (x_cc(i)**2 + y_cc(j)**2 < 0.08_wp**2) then
1606# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1607 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 0.01
1608# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1609 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1.0
1610# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1611 else if (x_cc(i)**2 + y_cc(j)**2 <= 1._wp**2) then
1612# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1613 ! Linear interpolation between r=0.08 and r=1.0
1614# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1615 factor = (1.0_wp - sqrt(x_cc(i)**2 + y_cc(j)**2))/(1.0_wp - 0.08_wp)
1616# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1617 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 0.01_wp*factor + 1.e-4_wp*(1.0_wp - factor)
1618# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1619 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1.0_wp*factor + 3.e-5_wp*(1.0_wp - factor)
1620# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1621 else
1622# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1623 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1.e-4_wp
1624# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1625 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 3.e-5_wp
1626# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1627 end if
1628# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1629
1630# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1631 ! case 252 is for the 2D MHD Rotor problem
1632# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1633 case (252) ! 2D MHD Rotor Problem
1634# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1635 ! Ambient conditions are set in the JSON file. This case imposes the dense, rotating cylinder.
1636# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1637 !
1638# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1639 ! gamma = 1.4 Ambient medium (r > 0.1): rho = 1, p = 1, v = 0, B = (1,0,0) Rotor (r <= 0.1): rho = 10, p = 1 v has angular
1640# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1641 ! velocity w=20, giving v_tan=2 at r=0.1
1642# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1643
1644# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1645 ! Calculate distance squared from the center
1646# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1647 r_sq = (x_cc(i) - 0.5_wp)**2 + (y_cc(j) - 0.5_wp)**2
1648# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1649
1650# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1651 ! inner radius of 0.1
1652# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1653 if (r_sq <= 0.1**2) then
1654# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1655 ! -- Inside the rotor -- Set density uniformly to 10
1656# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1657 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 10._wp
1658# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1659
1660# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1661 ! Set vup constant rotation of rate v=2 v_x = -omega * (y - y_c) v_y = omega * (x - x_c)
1662# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1663 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -20._wp*(y_cc(j) - 0.5_wp)
1664# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1665 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = 20._wp*(x_cc(i) - 0.5_wp)
1666# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1667
1668# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1669 ! taper width of 0.015
1670# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1671 else if (r_sq <= 0.115**2) then
1672# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1673 ! linearly smooth the function between r = 0.1 and 0.115
1674# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1675 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1._wp + 9._wp*(0.115_wp - sqrt(r_sq))/(0.015_wp)
1676# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1677
1678# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1679 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -(2._wp/sqrt(r_sq))*(y_cc(j) - 0.5_wp)*(0.115_wp - sqrt(r_sq))/(0.015_wp)
1680# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1681 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = (2._wp/sqrt(r_sq))*(x_cc(i) - 0.5_wp)*(0.115_wp - sqrt(r_sq))/(0.015_wp)
1682# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1683 end if
1684# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1685 case (253) ! MHD Smooth Magnetic Vortex
1686# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1687 ! Section 5.2 of Implicit hybridized discontinuous Galerkin methods for compressible magnetohydrodynamics C. Ciuca, P.
1688# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1689 ! Fernandez, A. Christophe, N.C. Nguyen, J. Peraire
1690# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1691
1692# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1693 ! velocity
1694# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1695 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 1._wp - (y_cc(j)*exp(1 - (x_cc(i)**2 + y_cc(j)**2))/(2.*pi))
1696# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1697 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = 1._wp + (x_cc(i)*exp(1 - (x_cc(i)**2 + y_cc(j)**2))/(2.*pi))
1698# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1699
1700# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1701 ! magnetic field
1702# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1703 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = -y_cc(j)*exp(1 - (x_cc(i)**2 + y_cc(j)**2))/(2.*pi)
1704# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1705 q_prim_vf(eqn_idx%B%beg + 1)%sf(i, j, 0) = x_cc(i)*exp(1 - (x_cc(i)**2 + y_cc(j)**2))/(2.*pi)
1706# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1707
1708# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1709 ! pressure
1710# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1711 q_prim_vf(eqn_idx%E)%sf(i, j, &
1712# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1713 & 0) = 1._wp + (1 - 2._wp*(x_cc(i)**2 + y_cc(j)**2))*exp(1 - (x_cc(i)**2 + y_cc(j)**2))/((2._wp*pi)**3)
1714# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1715 case (260) ! Gaussian Divergence Pulse
1716# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1717 ! Bx(x) = 1 + C * erf((x-0.5)/\sigma) => \partialBx/\partialx = C * (2/\sqrt\pi) * exp[-((x-0.5)/\sigma)**2] * (1/\sigma)
1718# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1719 ! Choose C = \epsilon * \sigma * \sqrt\pi / 2 => \partialBx/\partialx = \epsilon * exp[-((x-0.5)/\sigma)**2] \psi is
1720# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1721 ! initialized to zero everywhere.
1722# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1723
1724# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1725 eps_mhd = patch_icpp(patch_id)%a(2)
1726# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1727 sigma = patch_icpp(patch_id)%a(3)
1728# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1729 c_mhd = eps_mhd*sigma*sqrt(pi)*0.5_wp
1730# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1731
1732# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1733 ! B-field
1734# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1735 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = 1._wp + c_mhd*erf((x_cc(i) - 0.5_wp)/sigma)
1736# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1737 case (261) ! Blob
1738# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1739 r0 = 1._wp/sqrt(8._wp)
1740# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1741 r2 = x_cc(i)**2 + y_cc(j)**2
1742# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1743 r = sqrt(r2)
1744# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1745 alpha = r/r0
1746# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1747 if (alpha < 1) then
1748# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1749 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = 1._wp/sqrt(4._wp*pi)*(alpha**8 - 2._wp*alpha**4 + 1._wp)
1750# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1751 ! q_prim_vf(eqn_idx%B%beg)%sf(i,j,0) = 1._wp/sqrt(4000._wp*pi) * (4096._wp*r2**4 - 128._wp*r2**2 + 1._wp)
1752# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1753 ! q_prim_vf(eqn_idx%B%beg)%sf(i,j,0) = 1._wp/(4._wp*pi) * (alpha**8 - 2._wp*alpha**4 + 1._wp)
1754# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1755 ! q_prim_vf(eqn_idx%E)%sf(i,j,0) = 6._wp - q_prim_vf(eqn_idx%B%beg)%sf(i,j,0)**2/2._wp
1756# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1757 end if
1758# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1759 case (262) ! Tilted 2D MHD shock‐tube at α = arctan2 (≈63.4°)
1760# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1761 ! rotate by \alpha = atan(2)
1762# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1763 alpha = atan(2._wp)
1764# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1765 cosa = cos(alpha)
1766# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1767 sina = sin(alpha)
1768# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1769 ! projection along shock normal
1770# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1771 r = x_cc(i)*cosa + y_cc(j)*sina
1772# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1773
1774# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1775 if (r <= 0.5_wp) then
1776# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1777 ! LEFT state: \rho=1, v\parallel=+10, v\perp=0, p=20, B\parallel=B\perp=5/\sqrt(4\pi)
1778# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1779 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1._wp
1780# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1781 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 10._wp*cosa
1782# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1783 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = 10._wp*sina
1784# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1785 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 20._wp
1786# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1787 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = (5._wp/sqrt(4._wp*pi))*cosa - (5._wp/sqrt(4._wp*pi))*sina
1788# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1789 q_prim_vf(eqn_idx%B%beg + 1)%sf(i, j, 0) = (5._wp/sqrt(4._wp*pi))*sina + (5._wp/sqrt(4._wp*pi))*cosa
1790# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1791 else
1792# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1793 ! RIGHT state: \rho=1, v\parallel=-10, v\perp=0, p=1, B\parallel=B\perp=5/\sqrt(4\pi)
1794# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1795 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1._wp
1796# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1797 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -10._wp*cosa
1798# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1799 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = -10._wp*sina
1800# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1801 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1._wp
1802# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1803 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = (5._wp/sqrt(4._wp*pi))*cosa - (5._wp/sqrt(4._wp*pi))*sina
1804# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1805 q_prim_vf(eqn_idx%B%beg + 1)%sf(i, j, 0) = (5._wp/sqrt(4._wp*pi))*sina + (5._wp/sqrt(4._wp*pi))*cosa
1806# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1807 end if
1808# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1809 ! v^z and B^z remain zero by default
1810# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1811 case (270) ! 2D extrusion of 1D profile from external data
1812# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1813 ! This hardcoded case extrudes a 1D profile to initialize a 2D simulation domain
1814# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1815 if (.not. files_loaded) then
1816# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1817 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
1818# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1819 do f = 1, max_files
1820# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1821 write (file_num_str, '(I0)') f
1822# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1823 filenames(f) = trim(init_dir) // "prim." // trim(file_num_str) // ".00." // zeros_default // ".dat"
1824# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1825 end do
1826# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1827
1828# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1829 ! Common file reading setup
1830# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1831 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
1832# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1833 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
1834# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1835
1836# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1837 select case (num_dims)
1838# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1839 case (1, 2) ! 1D and 2D cases are similar
1840# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1841 ! Count lines
1842# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1843 line_count = 0
1844# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1845 do
1846# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1847 read (unit2, *, iostat=ios2) dummy_x, dummy_y
1848# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1849 if (ios2 /= 0) exit
1850# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1851 line_count = line_count + 1
1852# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1853 end do
1854# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1855 close (unit2)
1856# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1857
1858# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1859 xrows = line_count
1860# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1861 yrows = 1
1862# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1863 index_x = 0
1864# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1865 if (num_dims == 2) index_x = i
1866# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1867#ifdef MFC_DEBUG
1868# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1869 block
1870# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1871 use iso_fortran_env, only: output_unit
1872# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1873
1874# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1875 print *, 'm_icpp_patches.fpp:267: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
1876# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1877
1878# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1879 call flush (output_unit)
1880# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1881 end block
1882# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1883#endif
1884# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1885 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
1886# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1887
1888# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1889
1890# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1891
1892# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1893#if defined(MFC_OpenACC)
1894# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1895!$acc enter data create(x_coords, stored_values)
1896# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1897#elif defined(MFC_OpenMP)
1898# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1899!$omp target enter data map(always,alloc:x_coords, stored_values)
1900# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1901#endif
1902# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1903
1904# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1905 ! Read data from all files
1906# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1907 do f = 1, max_files
1908# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1909 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
1910# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1911 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
1912# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1913
1914# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1915 do iter = 1, xrows
1916# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1917 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
1918# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1919 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
1920# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1921 end do
1922# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1923 close (unit)
1924# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1925 end do
1926# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1927
1928# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1929 ! Calculate offsets
1930# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1931 domain_xstart = x_coords(1)
1932# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1933 x_step = x_cc(1) - x_cc(0)
1934# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1935 delta_x = merge(x_cc(0) - domain_xstart + x_step/2.0, x_cc(index_x) - domain_xstart + x_step/2.0, num_dims == 1)
1936# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1937 global_offset_x = nint(abs(delta_x)/x_step)
1938# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1939 case (3) ! 3D case - determine grid structure
1940# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1941 ! Find yRows by counting rows with same x
1942# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1943 read (unit2, *, iostat=ios2) x0, y0, dummy_z
1944# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1945 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
1946# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1947
1948# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1949 yrows = 1
1950# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1951 do
1952# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1953 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
1954# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1955 if (ios2 /= 0) exit
1956# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1957 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
1958# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1959 yrows = yrows + 1
1960# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1961 else
1962# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1963 exit
1964# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1965 end if
1966# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1967 end do
1968# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1969 close (unit2)
1970# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1971
1972# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1973 ! Count total rows
1974# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1975 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
1976# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1977 nrows = 0
1978# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1979 do
1980# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1981 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
1982# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1983 if (ios2 /= 0) exit
1984# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1985 nrows = nrows + 1
1986# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1987 end do
1988# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1989 close (unit2)
1990# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1991
1992# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1993 xrows = nrows/yrows
1994# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1995#ifdef MFC_DEBUG
1996# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1997 block
1998# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1999 use iso_fortran_env, only: output_unit
2000# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2001
2002# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2003 print *, 'm_icpp_patches.fpp:267: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
2004# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2005
2006# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2007 call flush (output_unit)
2008# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2009 end block
2010# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2011#endif
2012# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2013 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
2014# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2015
2016# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2017
2018# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2019
2020# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2021
2022# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2023#if defined(MFC_OpenACC)
2024# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2025!$acc enter data create(x_coords, y_coords, stored_values)
2026# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2027#elif defined(MFC_OpenMP)
2028# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2029!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
2030# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2031#endif
2032# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2033 index_x = i
2034# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2035 index_y = j
2036# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2037
2038# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2039 ! Read all files
2040# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2041 do f = 1, max_files
2042# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2043 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
2044# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2045 if (ios /= 0) then
2046# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2047 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
2048# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2049 cycle
2050# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2051 end if
2052# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2053
2054# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2055 iter = 0
2056# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2057 do iix = 1, xrows
2058# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2059 do iiy = 1, yrows
2060# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2061 iter = iter + 1
2062# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2063 if (f == 1) then
2064# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2065 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
2066# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2067 else
2068# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2069 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
2070# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2071 end if
2072# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2073 if (ios /= 0) call s_mpi_abort("Error reading data")
2074# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2075 end do
2076# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2077 end do
2078# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2079 close (unit)
2080# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2081 end do
2082# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2083
2084# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2085 ! Calculate offsets
2086# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2087 x_step = x_cc(1) - x_cc(0)
2088# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2089 y_step = y_cc(1) - y_cc(0)
2090# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2091 delta_x = x_cc(index_x) - x_coords(1) + x_step/2.0_wp
2092# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2093 delta_y = y_cc(index_y) - y_coords(1) + y_step/2.0_wp
2094# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2095 global_offset_x = nint(abs(delta_x)/x_step)
2096# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2097 global_offset_y = nint(abs(delta_y)/y_step)
2098# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2099 end select
2100# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2101
2102# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2103 files_loaded = .true.
2104# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2105 end if
2106# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2107
2108# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2109 ! Data assignment
2110# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2111 select case (num_dims)
2112# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2113 case (1)
2114# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2115 idx = i + 1 + global_offset_x
2116# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2117 do f = 1, sys_size
2118# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2119 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
2120# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2121 end do
2122# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2123 case (2)
2124# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2125 idx = i + 1 + global_offset_x - index_x
2126# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2127 do f = 1, sys_size - 1
2128# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2129 jump = merge(1, 0, f >= eqn_idx%mom%end)
2130# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2131 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
2132# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2133 end do
2134# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2135 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
2136# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2137 case (3)
2138# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2139 idx = i + 1 + global_offset_x - index_x
2140# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2141 idy = j + 1 + global_offset_y - index_y
2142# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2143 do f = 1, sys_size - 1
2144# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2145 jump = merge(1, 0, f >= eqn_idx%mom%end)
2146# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2147 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
2148# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2149 end do
2150# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2151 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
2152# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2153 end select
2154# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2155 case (280) ! Isentropic vortex
2156# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2157 ! This is patch is hard-coded for test suite optimization used in the 2D_isentropicvortex case: This analytic patch uses
2158# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2159 ! geometry 2
2160# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2161 if (patch_id == 1) then
2162# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2163 q_prim_vf(eqn_idx%E)%sf(i, j, &
2164# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2165 & 0) = 1.0*(1.0 - (1.0/1.0)*(5.0/(2.0*pi))*(5.0/(8.0*1.0*(1.4 + 1.0)*pi))*exp(2.0*1.0*(1.0 - (x_cc(i) &
2166# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2167 & - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0)))**(1.4 + 1.0)
2168# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2169 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, j, &
2170# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2171 & 0) = 1.0*(1.0 - (1.0/1.0)*(5.0/(2.0*pi))*(5.0/(8.0*1.0*(1.4 + 1.0)*pi))*exp(2.0*1.0*(1.0 - (x_cc(i) &
2172# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2173 & - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0)))**1.4
2174# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2175 q_prim_vf(eqn_idx%mom%beg + 0)%sf(i, j, &
2176# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2177 & 0) = 0.0 + (y_cc(j) - patch_icpp(1)%y_centroid)*(5.0/(2.0*pi))*exp(1.0*(1.0 - (x_cc(i) - patch_icpp(1) &
2178# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2179 & %x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0))
2180# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2181 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, &
2182# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2183 & 0) = 0.0 - (x_cc(i) - patch_icpp(1)%x_centroid)*(5.0/(2.0*pi))*exp(1.0*(1.0 - (x_cc(i) - patch_icpp(1) &
2184# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2185 & %x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0))
2186# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2187 end if
2188# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2189 case (281) ! Acoustic pulse
2190# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2191 ! This is patch is hard-coded for test suite optimization used in the 2D_acoustic_pulse case: This analytic patch uses
2192# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2193 ! geometry 2
2194# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2195 if (patch_id == 2) then
2196# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2197 q_prim_vf(eqn_idx%E)%sf(i, j, &
2198# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2199 & 0) = 101325*(1 - 0.5*(1.4 - 1)*(0.4)**2*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2))))**(1.4/(1.4 - 1))
2200# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2201 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, j, &
2202# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2203 & 0) = 1*(1 - 0.5*(1.4 - 1)*(0.4)**2*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2))))**(1/(1.4 - 1))
2204# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2205 end if
2206# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2207 case (282) ! Zero-circulation vortex
2208# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2209 ! This is patch is hard-coded for test suite optimization used in the 2D_zero_circ_vortex case: This analytic patch uses
2210# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2211 ! geometry 2
2212# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2213 if (patch_id == 2) then
2214# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2215 q_prim_vf(eqn_idx%E)%sf(i, j, &
2216# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2217 & 0) = 101325*(1 - 0.5*(1.4 - 1)*(0.1/0.3)**2*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2))))**(1.4/(1.4 - 1))
2218# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2219 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, j, &
2220# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2221 & 0) = 1*(1 - 0.5*(1.4 - 1)*(0.1/0.3)**2*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2))))**(1/(1.4 - 1))
2222# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2223 q_prim_vf(eqn_idx%mom%beg + 0)%sf(i, j, &
2224# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2225 & 0) = 112.99092883944267*(1 - (0.1/0.3))*y_cc(j)*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2)))
2226# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2227 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, &
2228# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2229 & 0) = 112.99092883944267*((0.1/0.3))*x_cc(i)*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2)))
2230# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2231 end if
2232# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2233 case (291) ! Isothermal Flat Plate
2234# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2235 t_inf = 1125.0_wp
2236# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2237 t_wall = 600.0_wp
2238# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2239 p_atm = 101325.0_wp
2240# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2241
2242# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2243 ! Boundary/Shear Layer thicknesses
2244# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2245 delta_th = 0.0003_wp ! Thermal BL thickness
2246# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2247 delta_shear = 8e-3_wp ! Velocity BL thickness
2248# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2249
2250# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2251 u_max = 50.0_wp ! Freestream Velocity (m/s)
2252# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2253
2254# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2255 mw_n2 = 28.0134e-3_wp
2256# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2257 mw_o2 = 31.999e-3_wp
2258# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2259 y_n2 = 0.767_wp
2260# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2261 y_o2 = 0.233_wp
2262# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2263 r_mix = 8.314462618_wp*((y_n2/mw_n2) + (y_o2/mw_o2))
2264# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2265 bottom_blend_u = tanh(y_cc(j)/delta_shear)
2266# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2267 bottom_blend_t = tanh(y_cc(j)/delta_th)
2268# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2269 u_mean = u_max*bottom_blend_u
2270# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2271 t_loc = t_wall + (t_inf - t_wall)*bottom_blend_t
2272# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2273 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = p_atm/(r_mix*t_loc)
2274# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2275 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = u_mean
2276# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2277 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
2278# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2279 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p_atm
2280# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2281 q_prim_vf(eqn_idx%species%beg)%sf(i, j, 0) = y_o2
2282# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2283 q_prim_vf(eqn_idx%species%end)%sf(i, j, 0) = y_n2
2284# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2285 case default
2286# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2287 if (proc_rank == 0) then
2288# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2289 call s_int_to_str(patch_id, istr)
2290# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2291 call s_mpi_abort("Invalid hcid specified for patch " // trim(istr))
2292# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2293 end if
2294# 267 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2295 end select
2296 end if
2297
2298 ! Updating the patch identities bookkeeping variable
2299 if (1._wp - eta < sgm_eps) patch_id_fp(i, j, 0) = patch_id
2300 end if
2301 end do
2302 end do
2303 if (allocated(stored_values)) then
2304# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2305#ifdef MFC_DEBUG
2306# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2307 block
2308# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2309 use iso_fortran_env, only: output_unit
2310# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2311
2312# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2313 print *, 'm_icpp_patches.fpp:275: ', '@:DEALLOCATE(stored_values)'
2314# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2315
2316# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2317 call flush (output_unit)
2318# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2319 end block
2320# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2321#endif
2322# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2323
2324# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2325#if defined(MFC_OpenACC)
2326# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2327!$acc exit data delete(stored_values)
2328# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2329#elif defined(MFC_OpenMP)
2330# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2331!$omp target exit data map(release:stored_values)
2332# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2333#endif
2334# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2335 deallocate (stored_values)
2336# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2337#ifdef MFC_DEBUG
2338# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2339 block
2340# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2341 use iso_fortran_env, only: output_unit
2342# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2343
2344# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2345 print *, 'm_icpp_patches.fpp:275: ', '@:DEALLOCATE(x_coords)'
2346# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2347
2348# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2349 call flush (output_unit)
2350# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2351 end block
2352# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2353#endif
2354# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2355
2356# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2357#if defined(MFC_OpenACC)
2358# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2359!$acc exit data delete(x_coords)
2360# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2361#elif defined(MFC_OpenMP)
2362# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2363!$omp target exit data map(release:x_coords)
2364# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2365#endif
2366# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2367 deallocate (x_coords)
2368# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2369 end if
2370# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2371
2372# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2373 if (allocated(y_coords)) then
2374# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2375#ifdef MFC_DEBUG
2376# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2377 block
2378# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2379 use iso_fortran_env, only: output_unit
2380# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2381
2382# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2383 print *, 'm_icpp_patches.fpp:275: ', '@:DEALLOCATE(y_coords)'
2384# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2385
2386# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2387 call flush (output_unit)
2388# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2389 end block
2390# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2391#endif
2392# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2393
2394# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2395#if defined(MFC_OpenACC)
2396# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2397!$acc exit data delete(y_coords)
2398# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2399#elif defined(MFC_OpenMP)
2400# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2401!$omp target exit data map(release:y_coords)
2402# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2403#endif
2404# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2405 deallocate (y_coords)
2406# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2407 end if
2408
2409 end subroutine s_icpp_spiral
2410
2411 !> The circular patch is a 2D geometry that may be used, for example, in creating a bubble or a droplet. The geometry of the
2412 !! patch is well-defined when its centroid and radius are provided. Note that the circular patch DOES allow for the smoothing of
2413 !! its boundary.
2414 subroutine s_icpp_circle(patch_id, patch_id_fp, q_prim_vf)
2415
2416 integer, intent(in) :: patch_id
2417
2418#ifdef MFC_MIXED_PRECISION
2419 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
2420#else
2421 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
2422#endif
2423 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
2424 real(wp) :: radius
2425 integer :: i, j, k !< Generic loop iterators
2426
2427 integer :: xRows, yRows, nRows, iix, iiy, max_files
2428# 295 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2429 integer :: f, iter, ios, ios2, unit, unit2, idx, idy, index_x, index_y, jump, line_count, ycount
2430# 295 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2431 real(wp) :: x_len, x_step, y_len, y_step
2432# 295 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2433 real(wp) :: dummy_x, dummy_y, dummy_z, x0, y0
2434# 295 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2435 integer :: global_offset_x, global_offset_y !< MPI subdomain offset
2436# 295 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2437 real(wp) :: delta_x, delta_y
2438# 295 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2439 character(len=100), dimension(sys_size) :: fileNames !< Arrays to store all data from files
2440# 295 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2441 character(len=200) :: errmsg
2442# 295 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2443 real(wp), allocatable :: stored_values(:,:,:)
2444# 295 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2445 real(wp), allocatable :: x_coords(:), y_coords(:)
2446# 295 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2447 logical :: files_loaded = .false.
2448# 295 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2449 real(wp) :: domain_xstart, domain_xend, domain_ystart, domain_yend
2450# 295 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2451 character(len=*), parameter :: init_dir = "/home/MFC/FilesDirectory" !< For example /home/MFC/examples/1D_Shock/D/
2452# 295 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2453 character(len=20) :: file_num_str !< For storing the file number as a string
2454# 295 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2455 character(len=20) :: zeros_part !< For the trailing zeros part
2456# 295 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2457 character(len=6), parameter :: zeros_default = "000000" !< Default zeros (can be changed)
2458 ! Place any declaration of intermediate variables here
2459# 296 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2460 real(wp) :: eps, eps_mhd, C_mhd
2461# 296 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2462 real(wp) :: r, rmax, gam, umax, p0
2463# 296 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2464 real(wp) :: rhoH, rhoL, pRef, pInt, h, lam, wl, amp, intH, intL, alph
2465# 296 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2466 real(wp) :: factor
2467# 296 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2468 real(wp) :: r0, alpha, r2
2469# 296 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2470 real(wp) :: sinA, cosA
2471# 296 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2472 real(wp) :: r_sq
2473# 296 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2474
2475# 296 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2476 ! # 291 - Shear/Thermal Layer Case
2477# 296 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2478 real(wp) :: delta_shear, u_max, u_mean
2479# 296 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2480 real(wp) :: T_wall, T_inf, P_atm, T_loc
2481# 296 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2482 real(wp) :: delta_th, R_mix
2483# 296 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2484 real(wp) :: Y_N2, Y_O2, MW_N2, MW_O2
2485# 296 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2486 real(wp) :: bottom_blend_u, bottom_blend_T
2487# 296 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2488
2489# 296 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2490 ! # 207
2491# 296 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2492 real(wp) :: sigma, gauss1, gauss2
2493# 296 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2494
2495# 296 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2496 ! # 208
2497# 296 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2498 real(wp) :: ei, d, fsm, alpha_air, alpha_sf6
2499# 296 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2500
2501# 296 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2502 eps = 1.e-9_wp
2503
2504 ! Transferring the circular patch's radius, centroid, smearing patch identity and smearing coefficient information
2505
2506 x_centroid = patch_icpp(patch_id)%x_centroid
2507 y_centroid = patch_icpp(patch_id)%y_centroid
2508 radius = patch_icpp(patch_id)%radius
2509 smooth_patch_id = patch_icpp(patch_id)%smooth_patch_id
2510 smooth_coeff = patch_icpp(patch_id)%smooth_coeff
2511
2512 ! Initialize eta=1; modified if smoothing is enabled
2513 eta = 1._wp
2514
2515 ! Assign patch vars if cell is covered and patch has write permission
2516
2517 do j = 0, n
2518 do i = 0, m
2519 if (patch_icpp(patch_id)%smoothen) then
2520 ! Smooth Heaviside via hyperbolic tangent; smooth_coeff controls interface sharpness
2521 eta = tanh(smooth_coeff/min(dx, &
2522 & dy)*(sqrt((x_cc(i) - x_centroid)**2 + (y_cc(j) - y_centroid)**2) - radius))*(-0.5_wp) + 0.5_wp
2523 end if
2524
2525 if (((x_cc(i) - x_centroid)**2 + (y_cc(j) - y_centroid)**2 <= radius**2 .and. patch_icpp(patch_id) &
2526 & %alter_patch(patch_id_fp(i, j, 0))) .or. patch_id_fp(i, j, 0) == smooth_patch_id) then
2527 call s_assign_patch_primitive_variables(patch_id, i, j, 0, eta, q_prim_vf, patch_id_fp)
2528
2529
2530 if (patch_icpp(patch_id)%hcid /= dflt_int) then
2531 select case (patch_icpp(patch_id)%hcid) ! 2D_hardcoded_ic example case
2532# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2533 case (200) ! Two-fluid cubic interface
2534# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2535 if (y_cc(j) <= (-x_cc(i)**3 + 1)**(1._wp/3._wp)) then
2536# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2537 ! Volume Fractions
2538# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2539 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = eps
2540# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2541 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = 1._wp - eps
2542# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2543 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = eps*1000._wp
2544# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2545 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = (1._wp - eps)*1._wp
2546# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2547 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1000._wp
2548# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2549 end if
2550# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2551 case (202) ! Gresho vortex (Gouasmi et al 2022 JCP)
2552# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2553 r = ((x_cc(i) - 0.5_wp)**2 + (y_cc(j) - 0.5_wp)**2)**0.5_wp
2554# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2555 rmax = 0.2_wp
2556# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2557
2558# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2559 gam = 1._wp + 1._wp/fluid_pp(1)%gamma
2560# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2561 umax = 2*pi*rmax*patch_icpp(patch_id)%vel(2)
2562# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2563 p0 = umax**2*(1._wp/(gam*patch_icpp(patch_id)%vel(2)**2) - 0.5_wp)
2564# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2565
2566# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2567 if (r < rmax) then
2568# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2569 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -(y_cc(j) - 0.5_wp)*umax/rmax
2570# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2571 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = (x_cc(i) - 0.5_wp)*umax/rmax
2572# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2573 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*((r/rmax)**2._wp/2._wp)
2574# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2575 else if (r < 2*rmax) then
2576# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2577 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -((y_cc(j) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
2578# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2579 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = ((x_cc(i) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
2580# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2581 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*((r/rmax)**2/2._wp + 4*(1 - (r/rmax) + log(r/rmax)))
2582# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2583 else
2584# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2585 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 0._wp
2586# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2587 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0._wp
2588# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2589 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*(-2 + 4*log(2._wp))
2590# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2591 end if
2592# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2593 case (203) ! Gresho vortex (Gouasmi et al 2022 JCP) with density correction
2594# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2595 r = ((x_cc(i) - 0.5_wp)**2._wp + (y_cc(j) - 0.5_wp)**2)**0.5_wp
2596# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2597 rmax = 0.2_wp
2598# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2599
2600# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2601 gam = 1._wp + 1._wp/fluid_pp(1)%gamma
2602# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2603 umax = 2*pi*rmax*patch_icpp(patch_id)%vel(2)
2604# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2605 p0 = umax**2*(1._wp/(gam*patch_icpp(patch_id)%vel(2)**2) - 0.5_wp)
2606# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2607
2608# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2609 if (r < rmax) then
2610# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2611 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -(y_cc(j) - 0.5_wp)*umax/rmax
2612# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2613 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = (x_cc(i) - 0.5_wp)*umax/rmax
2614# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2615 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*((r/rmax)**2._wp/2._wp)
2616# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2617 else if (r < 2*rmax) then
2618# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2619 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -((y_cc(j) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
2620# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2621 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = ((x_cc(i) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
2622# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2623 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*((r/rmax)**2/2._wp + 4._wp*(1._wp - (r/rmax) + log(r/rmax)))
2624# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2625 else
2626# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2627 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 0._wp
2628# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2629 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0._wp
2630# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2631 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2._wp*(-2._wp + 4*log(2._wp))
2632# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2633 end if
2634# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2635
2636# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2637 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = q_prim_vf(eqn_idx%E)%sf(i, j, 0)**(1._wp/gam)
2638# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2639 case (204) ! Rayleigh-Taylor instability
2640# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2641 rhoh = 3._wp
2642# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2643 rhol = 1._wp
2644# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2645 pref = 1.e5_wp
2646# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2647 pint = pref
2648# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2649 h = 0.7_wp
2650# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2651 lam = 0.2_wp
2652# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2653 wl = 2._wp*pi/lam
2654# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2655 amp = 0.05_wp/wl
2656# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2657
2658# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2659 inth = amp*sin(2._wp*pi*x_cc(i)/lam - pi/2._wp) + h
2660# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2661
2662# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2663 alph = 0.5_wp*(1._wp + tanh((y_cc(j) - inth)/2.5e-3_wp))
2664# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2665
2666# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2667 if (alph < eps) alph = eps
2668# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2669 if (alph > 1._wp - eps) alph = 1._wp - eps
2670# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2671
2672# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2673 if (y_cc(j) > inth) then
2674# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2675 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = alph
2676# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2677 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = 1._wp - alph
2678# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2679 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = alph*rhoh
2680# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2681 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = (1._wp - alph)*rhol
2682# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2683 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = pref + rhoh*9.81_wp*(1.2_wp - y_cc(j))
2684# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2685 else
2686# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2687 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = alph
2688# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2689 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = 1._wp - alph
2690# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2691 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = alph*rhoh
2692# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2693 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = (1._wp - alph)*rhol
2694# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2695 pint = pref + rhoh*9.81_wp*(1.2_wp - inth)
2696# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2697 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = pint + rhol*9.81_wp*(inth - y_cc(j))
2698# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2699 end if
2700# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2701 case (205) ! 2D lung wave interaction problem
2702# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2703 h = 0.0_wp ! non dim origin y
2704# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2705 lam = 1.0_wp ! non dim lambda
2706# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2707 amp = patch_icpp(patch_id)%a(2) ! to be changed later! !non dim amplitude
2708# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2709
2710# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2711 inth = amp*sin(2*pi*x_cc(i)/lam - pi/2) + h
2712# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2713
2714# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2715 if (y_cc(j) > inth) then
2716# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2717 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(1)
2718# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2719 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(2)
2720# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2721 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = patch_icpp(1)%pres
2722# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2723 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = patch_icpp(1)%alpha(1)
2724# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2725 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = patch_icpp(1)%alpha(2)
2726# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2727 end if
2728# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2729 case (206) ! 2D lung wave interaction problem - horizontal domain
2730# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2731 h = 0.0_wp ! non dim origin y
2732# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2733 lam = 1.0_wp ! non dim lambda
2734# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2735 amp = patch_icpp(patch_id)%a(2)
2736# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2737
2738# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2739 intl = amp*sin(2*pi*y_cc(j)/lam - pi/2) + h
2740# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2741
2742# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2743 if (x_cc(i) > intl) then ! this is the liquid
2744# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2745 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(1)
2746# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2747 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(2)
2748# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2749 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = patch_icpp(1)%pres
2750# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2751 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = patch_icpp(1)%alpha(1)
2752# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2753 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = patch_icpp(1)%alpha(2)
2754# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2755 end if
2756# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2757 case (207) ! Kelvin Helmholtz Instability
2758# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2759 sigma = 0.05_wp/sqrt(2.0_wp)
2760# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2761 gauss1 = exp(-(y_cc(j) - 0.75_wp)**2/(2.0_wp*sigma**2))
2762# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2763 gauss2 = exp(-(y_cc(j) - 0.25_wp)**2/(2.0_wp*sigma**2))
2764# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2765 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = 0.1_wp*sin(4.0_wp*pi*x_cc(i))*(gauss1 + gauss2)
2766# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2767 case (208) ! Richtmeyer Meshkov Instability
2768# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2769 lam = 1.0_wp
2770# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2771 eps = 1.0e-6_wp
2772# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2773 ei = 5.0_wp
2774# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2775 ! Smoothening function to smooth out sharp discontinuity in the interface
2776# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2777 if (x_cc(i) <= 0.7_wp*lam) then
2778# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2779 d = x_cc(i) - lam*(0.4_wp - 0.1_wp*sin(2.0_wp*pi*(y_cc(j)/lam + 0.25_wp)))
2780# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2781 fsm = 0.5_wp*(1.0_wp + erf(d/(ei*sqrt(dx*dy))))
2782# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2783 alpha_air = eps + (1.0_wp - 2.0_wp*eps)*fsm
2784# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2785 alpha_sf6 = 1.0_wp - alpha_air
2786# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2787 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = alpha_sf6*5.04_wp
2788# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2789 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = alpha_air*1.0_wp
2790# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2791 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = alpha_sf6
2792# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2793 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = alpha_air
2794# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2795 end if
2796# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2797 case (250) ! MHD Orszag-Tang vortex
2798# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2799 ! gamma = 5/3 rho = 25/(36*pi) p = 5/(12*pi) v = (-sin(2*pi*y), sin(2*pi*x), 0) B = (-sin(2*pi*y)/sqrt(4*pi),
2800# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2801 ! sin(4*pi*x)/sqrt(4*pi), 0)
2802# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2803
2804# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2805 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -sin(2._wp*pi*y_cc(j))
2806# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2807 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = sin(2._wp*pi*x_cc(i))
2808# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2809
2810# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2811 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = -sin(2._wp*pi*y_cc(j))/sqrt(4._wp*pi)
2812# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2813 q_prim_vf(eqn_idx%B%beg + 1)%sf(i, j, 0) = sin(4._wp*pi*x_cc(i))/sqrt(4._wp*pi)
2814# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2815 case (251) ! RMHD Cylindrical Blast Wave [Mignone, 2006: Section 4.3.1]
2816# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2817 if (x_cc(i)**2 + y_cc(j)**2 < 0.08_wp**2) then
2818# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2819 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 0.01
2820# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2821 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1.0
2822# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2823 else if (x_cc(i)**2 + y_cc(j)**2 <= 1._wp**2) then
2824# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2825 ! Linear interpolation between r=0.08 and r=1.0
2826# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2827 factor = (1.0_wp - sqrt(x_cc(i)**2 + y_cc(j)**2))/(1.0_wp - 0.08_wp)
2828# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2829 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 0.01_wp*factor + 1.e-4_wp*(1.0_wp - factor)
2830# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2831 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1.0_wp*factor + 3.e-5_wp*(1.0_wp - factor)
2832# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2833 else
2834# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2835 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1.e-4_wp
2836# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2837 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 3.e-5_wp
2838# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2839 end if
2840# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2841
2842# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2843 ! case 252 is for the 2D MHD Rotor problem
2844# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2845 case (252) ! 2D MHD Rotor Problem
2846# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2847 ! Ambient conditions are set in the JSON file. This case imposes the dense, rotating cylinder.
2848# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2849 !
2850# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2851 ! gamma = 1.4 Ambient medium (r > 0.1): rho = 1, p = 1, v = 0, B = (1,0,0) Rotor (r <= 0.1): rho = 10, p = 1 v has angular
2852# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2853 ! velocity w=20, giving v_tan=2 at r=0.1
2854# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2855
2856# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2857 ! Calculate distance squared from the center
2858# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2859 r_sq = (x_cc(i) - 0.5_wp)**2 + (y_cc(j) - 0.5_wp)**2
2860# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2861
2862# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2863 ! inner radius of 0.1
2864# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2865 if (r_sq <= 0.1**2) then
2866# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2867 ! -- Inside the rotor -- Set density uniformly to 10
2868# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2869 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 10._wp
2870# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2871
2872# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2873 ! Set vup constant rotation of rate v=2 v_x = -omega * (y - y_c) v_y = omega * (x - x_c)
2874# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2875 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -20._wp*(y_cc(j) - 0.5_wp)
2876# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2877 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = 20._wp*(x_cc(i) - 0.5_wp)
2878# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2879
2880# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2881 ! taper width of 0.015
2882# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2883 else if (r_sq <= 0.115**2) then
2884# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2885 ! linearly smooth the function between r = 0.1 and 0.115
2886# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2887 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1._wp + 9._wp*(0.115_wp - sqrt(r_sq))/(0.015_wp)
2888# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2889
2890# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2891 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -(2._wp/sqrt(r_sq))*(y_cc(j) - 0.5_wp)*(0.115_wp - sqrt(r_sq))/(0.015_wp)
2892# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2893 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = (2._wp/sqrt(r_sq))*(x_cc(i) - 0.5_wp)*(0.115_wp - sqrt(r_sq))/(0.015_wp)
2894# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2895 end if
2896# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2897 case (253) ! MHD Smooth Magnetic Vortex
2898# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2899 ! Section 5.2 of Implicit hybridized discontinuous Galerkin methods for compressible magnetohydrodynamics C. Ciuca, P.
2900# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2901 ! Fernandez, A. Christophe, N.C. Nguyen, J. Peraire
2902# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2903
2904# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2905 ! velocity
2906# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2907 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 1._wp - (y_cc(j)*exp(1 - (x_cc(i)**2 + y_cc(j)**2))/(2.*pi))
2908# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2909 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = 1._wp + (x_cc(i)*exp(1 - (x_cc(i)**2 + y_cc(j)**2))/(2.*pi))
2910# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2911
2912# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2913 ! magnetic field
2914# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2915 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = -y_cc(j)*exp(1 - (x_cc(i)**2 + y_cc(j)**2))/(2.*pi)
2916# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2917 q_prim_vf(eqn_idx%B%beg + 1)%sf(i, j, 0) = x_cc(i)*exp(1 - (x_cc(i)**2 + y_cc(j)**2))/(2.*pi)
2918# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2919
2920# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2921 ! pressure
2922# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2923 q_prim_vf(eqn_idx%E)%sf(i, j, &
2924# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2925 & 0) = 1._wp + (1 - 2._wp*(x_cc(i)**2 + y_cc(j)**2))*exp(1 - (x_cc(i)**2 + y_cc(j)**2))/((2._wp*pi)**3)
2926# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2927 case (260) ! Gaussian Divergence Pulse
2928# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2929 ! Bx(x) = 1 + C * erf((x-0.5)/\sigma) => \partialBx/\partialx = C * (2/\sqrt\pi) * exp[-((x-0.5)/\sigma)**2] * (1/\sigma)
2930# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2931 ! Choose C = \epsilon * \sigma * \sqrt\pi / 2 => \partialBx/\partialx = \epsilon * exp[-((x-0.5)/\sigma)**2] \psi is
2932# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2933 ! initialized to zero everywhere.
2934# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2935
2936# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2937 eps_mhd = patch_icpp(patch_id)%a(2)
2938# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2939 sigma = patch_icpp(patch_id)%a(3)
2940# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2941 c_mhd = eps_mhd*sigma*sqrt(pi)*0.5_wp
2942# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2943
2944# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2945 ! B-field
2946# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2947 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = 1._wp + c_mhd*erf((x_cc(i) - 0.5_wp)/sigma)
2948# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2949 case (261) ! Blob
2950# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2951 r0 = 1._wp/sqrt(8._wp)
2952# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2953 r2 = x_cc(i)**2 + y_cc(j)**2
2954# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2955 r = sqrt(r2)
2956# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2957 alpha = r/r0
2958# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2959 if (alpha < 1) then
2960# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2961 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = 1._wp/sqrt(4._wp*pi)*(alpha**8 - 2._wp*alpha**4 + 1._wp)
2962# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2963 ! q_prim_vf(eqn_idx%B%beg)%sf(i,j,0) = 1._wp/sqrt(4000._wp*pi) * (4096._wp*r2**4 - 128._wp*r2**2 + 1._wp)
2964# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2965 ! q_prim_vf(eqn_idx%B%beg)%sf(i,j,0) = 1._wp/(4._wp*pi) * (alpha**8 - 2._wp*alpha**4 + 1._wp)
2966# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2967 ! q_prim_vf(eqn_idx%E)%sf(i,j,0) = 6._wp - q_prim_vf(eqn_idx%B%beg)%sf(i,j,0)**2/2._wp
2968# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2969 end if
2970# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2971 case (262) ! Tilted 2D MHD shock‐tube at α = arctan2 (≈63.4°)
2972# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2973 ! rotate by \alpha = atan(2)
2974# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2975 alpha = atan(2._wp)
2976# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2977 cosa = cos(alpha)
2978# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2979 sina = sin(alpha)
2980# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2981 ! projection along shock normal
2982# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2983 r = x_cc(i)*cosa + y_cc(j)*sina
2984# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2985
2986# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2987 if (r <= 0.5_wp) then
2988# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2989 ! LEFT state: \rho=1, v\parallel=+10, v\perp=0, p=20, B\parallel=B\perp=5/\sqrt(4\pi)
2990# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2991 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1._wp
2992# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2993 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 10._wp*cosa
2994# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2995 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = 10._wp*sina
2996# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2997 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 20._wp
2998# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2999 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = (5._wp/sqrt(4._wp*pi))*cosa - (5._wp/sqrt(4._wp*pi))*sina
3000# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3001 q_prim_vf(eqn_idx%B%beg + 1)%sf(i, j, 0) = (5._wp/sqrt(4._wp*pi))*sina + (5._wp/sqrt(4._wp*pi))*cosa
3002# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3003 else
3004# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3005 ! RIGHT state: \rho=1, v\parallel=-10, v\perp=0, p=1, B\parallel=B\perp=5/\sqrt(4\pi)
3006# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3007 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1._wp
3008# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3009 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -10._wp*cosa
3010# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3011 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = -10._wp*sina
3012# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3013 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1._wp
3014# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3015 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = (5._wp/sqrt(4._wp*pi))*cosa - (5._wp/sqrt(4._wp*pi))*sina
3016# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3017 q_prim_vf(eqn_idx%B%beg + 1)%sf(i, j, 0) = (5._wp/sqrt(4._wp*pi))*sina + (5._wp/sqrt(4._wp*pi))*cosa
3018# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3019 end if
3020# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3021 ! v^z and B^z remain zero by default
3022# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3023 case (270) ! 2D extrusion of 1D profile from external data
3024# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3025 ! This hardcoded case extrudes a 1D profile to initialize a 2D simulation domain
3026# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3027 if (.not. files_loaded) then
3028# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3029 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
3030# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3031 do f = 1, max_files
3032# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3033 write (file_num_str, '(I0)') f
3034# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3035 filenames(f) = trim(init_dir) // "prim." // trim(file_num_str) // ".00." // zeros_default // ".dat"
3036# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3037 end do
3038# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3039
3040# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3041 ! Common file reading setup
3042# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3043 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
3044# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3045 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
3046# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3047
3048# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3049 select case (num_dims)
3050# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3051 case (1, 2) ! 1D and 2D cases are similar
3052# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3053 ! Count lines
3054# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3055 line_count = 0
3056# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3057 do
3058# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3059 read (unit2, *, iostat=ios2) dummy_x, dummy_y
3060# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3061 if (ios2 /= 0) exit
3062# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3063 line_count = line_count + 1
3064# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3065 end do
3066# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3067 close (unit2)
3068# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3069
3070# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3071 xrows = line_count
3072# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3073 yrows = 1
3074# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3075 index_x = 0
3076# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3077 if (num_dims == 2) index_x = i
3078# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3079#ifdef MFC_DEBUG
3080# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3081 block
3082# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3083 use iso_fortran_env, only: output_unit
3084# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3085
3086# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3087 print *, 'm_icpp_patches.fpp:325: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
3088# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3089
3090# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3091 call flush (output_unit)
3092# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3093 end block
3094# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3095#endif
3096# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3097 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
3098# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3099
3100# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3101
3102# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3103
3104# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3105#if defined(MFC_OpenACC)
3106# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3107!$acc enter data create(x_coords, stored_values)
3108# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3109#elif defined(MFC_OpenMP)
3110# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3111!$omp target enter data map(always,alloc:x_coords, stored_values)
3112# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3113#endif
3114# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3115
3116# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3117 ! Read data from all files
3118# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3119 do f = 1, max_files
3120# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3121 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
3122# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3123 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
3124# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3125
3126# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3127 do iter = 1, xrows
3128# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3129 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
3130# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3131 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
3132# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3133 end do
3134# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3135 close (unit)
3136# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3137 end do
3138# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3139
3140# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3141 ! Calculate offsets
3142# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3143 domain_xstart = x_coords(1)
3144# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3145 x_step = x_cc(1) - x_cc(0)
3146# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3147 delta_x = merge(x_cc(0) - domain_xstart + x_step/2.0, x_cc(index_x) - domain_xstart + x_step/2.0, num_dims == 1)
3148# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3149 global_offset_x = nint(abs(delta_x)/x_step)
3150# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3151 case (3) ! 3D case - determine grid structure
3152# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3153 ! Find yRows by counting rows with same x
3154# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3155 read (unit2, *, iostat=ios2) x0, y0, dummy_z
3156# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3157 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
3158# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3159
3160# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3161 yrows = 1
3162# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3163 do
3164# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3165 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
3166# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3167 if (ios2 /= 0) exit
3168# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3169 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
3170# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3171 yrows = yrows + 1
3172# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3173 else
3174# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3175 exit
3176# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3177 end if
3178# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3179 end do
3180# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3181 close (unit2)
3182# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3183
3184# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3185 ! Count total rows
3186# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3187 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
3188# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3189 nrows = 0
3190# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3191 do
3192# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3193 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
3194# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3195 if (ios2 /= 0) exit
3196# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3197 nrows = nrows + 1
3198# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3199 end do
3200# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3201 close (unit2)
3202# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3203
3204# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3205 xrows = nrows/yrows
3206# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3207#ifdef MFC_DEBUG
3208# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3209 block
3210# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3211 use iso_fortran_env, only: output_unit
3212# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3213
3214# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3215 print *, 'm_icpp_patches.fpp:325: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
3216# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3217
3218# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3219 call flush (output_unit)
3220# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3221 end block
3222# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3223#endif
3224# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3225 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
3226# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3227
3228# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3229
3230# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3231
3232# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3233
3234# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3235#if defined(MFC_OpenACC)
3236# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3237!$acc enter data create(x_coords, y_coords, stored_values)
3238# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3239#elif defined(MFC_OpenMP)
3240# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3241!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
3242# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3243#endif
3244# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3245 index_x = i
3246# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3247 index_y = j
3248# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3249
3250# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3251 ! Read all files
3252# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3253 do f = 1, max_files
3254# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3255 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
3256# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3257 if (ios /= 0) then
3258# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3259 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
3260# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3261 cycle
3262# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3263 end if
3264# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3265
3266# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3267 iter = 0
3268# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3269 do iix = 1, xrows
3270# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3271 do iiy = 1, yrows
3272# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3273 iter = iter + 1
3274# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3275 if (f == 1) then
3276# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3277 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
3278# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3279 else
3280# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3281 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
3282# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3283 end if
3284# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3285 if (ios /= 0) call s_mpi_abort("Error reading data")
3286# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3287 end do
3288# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3289 end do
3290# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3291 close (unit)
3292# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3293 end do
3294# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3295
3296# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3297 ! Calculate offsets
3298# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3299 x_step = x_cc(1) - x_cc(0)
3300# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3301 y_step = y_cc(1) - y_cc(0)
3302# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3303 delta_x = x_cc(index_x) - x_coords(1) + x_step/2.0_wp
3304# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3305 delta_y = y_cc(index_y) - y_coords(1) + y_step/2.0_wp
3306# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3307 global_offset_x = nint(abs(delta_x)/x_step)
3308# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3309 global_offset_y = nint(abs(delta_y)/y_step)
3310# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3311 end select
3312# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3313
3314# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3315 files_loaded = .true.
3316# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3317 end if
3318# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3319
3320# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3321 ! Data assignment
3322# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3323 select case (num_dims)
3324# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3325 case (1)
3326# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3327 idx = i + 1 + global_offset_x
3328# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3329 do f = 1, sys_size
3330# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3331 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
3332# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3333 end do
3334# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3335 case (2)
3336# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3337 idx = i + 1 + global_offset_x - index_x
3338# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3339 do f = 1, sys_size - 1
3340# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3341 jump = merge(1, 0, f >= eqn_idx%mom%end)
3342# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3343 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
3344# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3345 end do
3346# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3347 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
3348# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3349 case (3)
3350# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3351 idx = i + 1 + global_offset_x - index_x
3352# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3353 idy = j + 1 + global_offset_y - index_y
3354# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3355 do f = 1, sys_size - 1
3356# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3357 jump = merge(1, 0, f >= eqn_idx%mom%end)
3358# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3359 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
3360# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3361 end do
3362# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3363 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
3364# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3365 end select
3366# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3367 case (280) ! Isentropic vortex
3368# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3369 ! This is patch is hard-coded for test suite optimization used in the 2D_isentropicvortex case: This analytic patch uses
3370# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3371 ! geometry 2
3372# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3373 if (patch_id == 1) then
3374# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3375 q_prim_vf(eqn_idx%E)%sf(i, j, &
3376# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3377 & 0) = 1.0*(1.0 - (1.0/1.0)*(5.0/(2.0*pi))*(5.0/(8.0*1.0*(1.4 + 1.0)*pi))*exp(2.0*1.0*(1.0 - (x_cc(i) &
3378# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3379 & - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0)))**(1.4 + 1.0)
3380# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3381 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, j, &
3382# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3383 & 0) = 1.0*(1.0 - (1.0/1.0)*(5.0/(2.0*pi))*(5.0/(8.0*1.0*(1.4 + 1.0)*pi))*exp(2.0*1.0*(1.0 - (x_cc(i) &
3384# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3385 & - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0)))**1.4
3386# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3387 q_prim_vf(eqn_idx%mom%beg + 0)%sf(i, j, &
3388# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3389 & 0) = 0.0 + (y_cc(j) - patch_icpp(1)%y_centroid)*(5.0/(2.0*pi))*exp(1.0*(1.0 - (x_cc(i) - patch_icpp(1) &
3390# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3391 & %x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0))
3392# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3393 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, &
3394# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3395 & 0) = 0.0 - (x_cc(i) - patch_icpp(1)%x_centroid)*(5.0/(2.0*pi))*exp(1.0*(1.0 - (x_cc(i) - patch_icpp(1) &
3396# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3397 & %x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0))
3398# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3399 end if
3400# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3401 case (281) ! Acoustic pulse
3402# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3403 ! This is patch is hard-coded for test suite optimization used in the 2D_acoustic_pulse case: This analytic patch uses
3404# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3405 ! geometry 2
3406# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3407 if (patch_id == 2) then
3408# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3409 q_prim_vf(eqn_idx%E)%sf(i, j, &
3410# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3411 & 0) = 101325*(1 - 0.5*(1.4 - 1)*(0.4)**2*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2))))**(1.4/(1.4 - 1))
3412# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3413 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, j, &
3414# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3415 & 0) = 1*(1 - 0.5*(1.4 - 1)*(0.4)**2*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2))))**(1/(1.4 - 1))
3416# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3417 end if
3418# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3419 case (282) ! Zero-circulation vortex
3420# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3421 ! This is patch is hard-coded for test suite optimization used in the 2D_zero_circ_vortex case: This analytic patch uses
3422# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3423 ! geometry 2
3424# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3425 if (patch_id == 2) then
3426# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3427 q_prim_vf(eqn_idx%E)%sf(i, j, &
3428# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3429 & 0) = 101325*(1 - 0.5*(1.4 - 1)*(0.1/0.3)**2*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2))))**(1.4/(1.4 - 1))
3430# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3431 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, j, &
3432# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3433 & 0) = 1*(1 - 0.5*(1.4 - 1)*(0.1/0.3)**2*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2))))**(1/(1.4 - 1))
3434# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3435 q_prim_vf(eqn_idx%mom%beg + 0)%sf(i, j, &
3436# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3437 & 0) = 112.99092883944267*(1 - (0.1/0.3))*y_cc(j)*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2)))
3438# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3439 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, &
3440# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3441 & 0) = 112.99092883944267*((0.1/0.3))*x_cc(i)*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2)))
3442# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3443 end if
3444# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3445 case (291) ! Isothermal Flat Plate
3446# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3447 t_inf = 1125.0_wp
3448# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3449 t_wall = 600.0_wp
3450# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3451 p_atm = 101325.0_wp
3452# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3453
3454# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3455 ! Boundary/Shear Layer thicknesses
3456# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3457 delta_th = 0.0003_wp ! Thermal BL thickness
3458# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3459 delta_shear = 8e-3_wp ! Velocity BL thickness
3460# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3461
3462# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3463 u_max = 50.0_wp ! Freestream Velocity (m/s)
3464# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3465
3466# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3467 mw_n2 = 28.0134e-3_wp
3468# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3469 mw_o2 = 31.999e-3_wp
3470# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3471 y_n2 = 0.767_wp
3472# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3473 y_o2 = 0.233_wp
3474# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3475 r_mix = 8.314462618_wp*((y_n2/mw_n2) + (y_o2/mw_o2))
3476# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3477 bottom_blend_u = tanh(y_cc(j)/delta_shear)
3478# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3479 bottom_blend_t = tanh(y_cc(j)/delta_th)
3480# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3481 u_mean = u_max*bottom_blend_u
3482# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3483 t_loc = t_wall + (t_inf - t_wall)*bottom_blend_t
3484# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3485 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = p_atm/(r_mix*t_loc)
3486# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3487 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = u_mean
3488# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3489 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
3490# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3491 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p_atm
3492# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3493 q_prim_vf(eqn_idx%species%beg)%sf(i, j, 0) = y_o2
3494# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3495 q_prim_vf(eqn_idx%species%end)%sf(i, j, 0) = y_n2
3496# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3497 case default
3498# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3499 if (proc_rank == 0) then
3500# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3501 call s_int_to_str(patch_id, istr)
3502# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3503 call s_mpi_abort("Invalid hcid specified for patch " // trim(istr))
3504# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3505 end if
3506# 325 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3507 end select
3508 end if
3509 end if
3510 end do
3511 end do
3512 if (allocated(stored_values)) then
3513# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3514#ifdef MFC_DEBUG
3515# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3516 block
3517# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3518 use iso_fortran_env, only: output_unit
3519# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3520
3521# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3522 print *, 'm_icpp_patches.fpp:330: ', '@:DEALLOCATE(stored_values)'
3523# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3524
3525# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3526 call flush (output_unit)
3527# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3528 end block
3529# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3530#endif
3531# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3532
3533# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3534#if defined(MFC_OpenACC)
3535# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3536!$acc exit data delete(stored_values)
3537# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3538#elif defined(MFC_OpenMP)
3539# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3540!$omp target exit data map(release:stored_values)
3541# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3542#endif
3543# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3544 deallocate (stored_values)
3545# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3546#ifdef MFC_DEBUG
3547# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3548 block
3549# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3550 use iso_fortran_env, only: output_unit
3551# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3552
3553# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3554 print *, 'm_icpp_patches.fpp:330: ', '@:DEALLOCATE(x_coords)'
3555# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3556
3557# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3558 call flush (output_unit)
3559# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3560 end block
3561# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3562#endif
3563# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3564
3565# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3566#if defined(MFC_OpenACC)
3567# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3568!$acc exit data delete(x_coords)
3569# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3570#elif defined(MFC_OpenMP)
3571# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3572!$omp target exit data map(release:x_coords)
3573# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3574#endif
3575# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3576 deallocate (x_coords)
3577# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3578 end if
3579# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3580
3581# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3582 if (allocated(y_coords)) then
3583# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3584#ifdef MFC_DEBUG
3585# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3586 block
3587# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3588 use iso_fortran_env, only: output_unit
3589# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3590
3591# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3592 print *, 'm_icpp_patches.fpp:330: ', '@:DEALLOCATE(y_coords)'
3593# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3594
3595# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3596 call flush (output_unit)
3597# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3598 end block
3599# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3600#endif
3601# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3602
3603# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3604#if defined(MFC_OpenACC)
3605# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3606!$acc exit data delete(y_coords)
3607# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3608#elif defined(MFC_OpenMP)
3609# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3610!$omp target exit data map(release:y_coords)
3611# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3612#endif
3613# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3614 deallocate (y_coords)
3615# 330 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3616 end if
3617
3618 end subroutine s_icpp_circle
3619
3620 !> The varcircle patch is a 2D geometry that may be used . It generatres an annulus
3621 subroutine s_icpp_varcircle(patch_id, patch_id_fp, q_prim_vf)
3622
3623 ! Patch identifier
3624 integer, intent(in) :: patch_id
3625
3626#ifdef MFC_MIXED_PRECISION
3627 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
3628#else
3629 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
3630#endif
3631 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
3632
3633 ! Generic loop iterators
3634 integer :: i, j, k
3635 real(wp) :: radius, myr, thickness
3636
3637 integer :: xRows, yRows, nRows, iix, iiy, max_files
3638# 351 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3639 integer :: f, iter, ios, ios2, unit, unit2, idx, idy, index_x, index_y, jump, line_count, ycount
3640# 351 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3641 real(wp) :: x_len, x_step, y_len, y_step
3642# 351 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3643 real(wp) :: dummy_x, dummy_y, dummy_z, x0, y0
3644# 351 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3645 integer :: global_offset_x, global_offset_y !< MPI subdomain offset
3646# 351 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3647 real(wp) :: delta_x, delta_y
3648# 351 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3649 character(len=100), dimension(sys_size) :: fileNames !< Arrays to store all data from files
3650# 351 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3651 character(len=200) :: errmsg
3652# 351 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3653 real(wp), allocatable :: stored_values(:,:,:)
3654# 351 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3655 real(wp), allocatable :: x_coords(:), y_coords(:)
3656# 351 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3657 logical :: files_loaded = .false.
3658# 351 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3659 real(wp) :: domain_xstart, domain_xend, domain_ystart, domain_yend
3660# 351 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3661 character(len=*), parameter :: init_dir = "/home/MFC/FilesDirectory" !< For example /home/MFC/examples/1D_Shock/D/
3662# 351 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3663 character(len=20) :: file_num_str !< For storing the file number as a string
3664# 351 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3665 character(len=20) :: zeros_part !< For the trailing zeros part
3666# 351 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3667 character(len=6), parameter :: zeros_default = "000000" !< Default zeros (can be changed)
3668 ! Place any declaration of intermediate variables here
3669# 352 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3670 real(wp) :: eps, eps_mhd, C_mhd
3671# 352 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3672 real(wp) :: r, rmax, gam, umax, p0
3673# 352 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3674 real(wp) :: rhoH, rhoL, pRef, pInt, h, lam, wl, amp, intH, intL, alph
3675# 352 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3676 real(wp) :: factor
3677# 352 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3678 real(wp) :: r0, alpha, r2
3679# 352 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3680 real(wp) :: sinA, cosA
3681# 352 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3682 real(wp) :: r_sq
3683# 352 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3684
3685# 352 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3686 ! # 291 - Shear/Thermal Layer Case
3687# 352 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3688 real(wp) :: delta_shear, u_max, u_mean
3689# 352 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3690 real(wp) :: T_wall, T_inf, P_atm, T_loc
3691# 352 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3692 real(wp) :: delta_th, R_mix
3693# 352 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3694 real(wp) :: Y_N2, Y_O2, MW_N2, MW_O2
3695# 352 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3696 real(wp) :: bottom_blend_u, bottom_blend_T
3697# 352 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3698
3699# 352 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3700 ! # 207
3701# 352 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3702 real(wp) :: sigma, gauss1, gauss2
3703# 352 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3704
3705# 352 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3706 ! # 208
3707# 352 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3708 real(wp) :: ei, d, fsm, alpha_air, alpha_sf6
3709# 352 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3710
3711# 352 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3712 eps = 1.e-9_wp
3713
3714 ! Transferring the circular patch's radius, centroid, smearing patch identity and smearing coefficient information
3715 x_centroid = patch_icpp(patch_id)%x_centroid
3716 y_centroid = patch_icpp(patch_id)%y_centroid
3717 radius = patch_icpp(patch_id)%radius
3718 smooth_patch_id = patch_icpp(patch_id)%smooth_patch_id
3719 smooth_coeff = patch_icpp(patch_id)%smooth_coeff
3720 thickness = patch_icpp(patch_id)%epsilon
3721
3722 ! Initialize eta=1; modified if smoothing is enabled
3723 eta = 1._wp
3724
3725 ! Assign patch vars if cell is covered and patch has write permission
3726 do j = 0, n
3727 do i = 0, m
3728 myr = sqrt((x_cc(i) - x_centroid)**2 + (y_cc(j) - y_centroid)**2)
3729
3730 if (myr <= radius + thickness/2._wp .and. myr >= radius - thickness/2._wp .and. patch_icpp(patch_id) &
3731 & %alter_patch(patch_id_fp(i, j, 0))) then
3732 call s_assign_patch_primitive_variables(patch_id, i, j, 0, eta, q_prim_vf, patch_id_fp)
3733
3734
3735 if (patch_icpp(patch_id)%hcid /= dflt_int) then
3736 select case (patch_icpp(patch_id)%hcid) ! 2D_hardcoded_ic example case
3737# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3738 case (200) ! Two-fluid cubic interface
3739# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3740 if (y_cc(j) <= (-x_cc(i)**3 + 1)**(1._wp/3._wp)) then
3741# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3742 ! Volume Fractions
3743# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3744 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = eps
3745# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3746 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = 1._wp - eps
3747# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3748 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = eps*1000._wp
3749# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3750 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = (1._wp - eps)*1._wp
3751# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3752 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1000._wp
3753# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3754 end if
3755# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3756 case (202) ! Gresho vortex (Gouasmi et al 2022 JCP)
3757# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3758 r = ((x_cc(i) - 0.5_wp)**2 + (y_cc(j) - 0.5_wp)**2)**0.5_wp
3759# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3760 rmax = 0.2_wp
3761# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3762
3763# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3764 gam = 1._wp + 1._wp/fluid_pp(1)%gamma
3765# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3766 umax = 2*pi*rmax*patch_icpp(patch_id)%vel(2)
3767# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3768 p0 = umax**2*(1._wp/(gam*patch_icpp(patch_id)%vel(2)**2) - 0.5_wp)
3769# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3770
3771# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3772 if (r < rmax) then
3773# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3774 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -(y_cc(j) - 0.5_wp)*umax/rmax
3775# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3776 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = (x_cc(i) - 0.5_wp)*umax/rmax
3777# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3778 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*((r/rmax)**2._wp/2._wp)
3779# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3780 else if (r < 2*rmax) then
3781# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3782 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -((y_cc(j) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
3783# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3784 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = ((x_cc(i) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
3785# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3786 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*((r/rmax)**2/2._wp + 4*(1 - (r/rmax) + log(r/rmax)))
3787# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3788 else
3789# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3790 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 0._wp
3791# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3792 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0._wp
3793# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3794 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*(-2 + 4*log(2._wp))
3795# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3796 end if
3797# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3798 case (203) ! Gresho vortex (Gouasmi et al 2022 JCP) with density correction
3799# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3800 r = ((x_cc(i) - 0.5_wp)**2._wp + (y_cc(j) - 0.5_wp)**2)**0.5_wp
3801# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3802 rmax = 0.2_wp
3803# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3804
3805# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3806 gam = 1._wp + 1._wp/fluid_pp(1)%gamma
3807# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3808 umax = 2*pi*rmax*patch_icpp(patch_id)%vel(2)
3809# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3810 p0 = umax**2*(1._wp/(gam*patch_icpp(patch_id)%vel(2)**2) - 0.5_wp)
3811# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3812
3813# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3814 if (r < rmax) then
3815# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3816 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -(y_cc(j) - 0.5_wp)*umax/rmax
3817# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3818 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = (x_cc(i) - 0.5_wp)*umax/rmax
3819# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3820 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*((r/rmax)**2._wp/2._wp)
3821# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3822 else if (r < 2*rmax) then
3823# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3824 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -((y_cc(j) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
3825# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3826 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = ((x_cc(i) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
3827# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3828 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*((r/rmax)**2/2._wp + 4._wp*(1._wp - (r/rmax) + log(r/rmax)))
3829# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3830 else
3831# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3832 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 0._wp
3833# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3834 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0._wp
3835# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3836 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2._wp*(-2._wp + 4*log(2._wp))
3837# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3838 end if
3839# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3840
3841# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3842 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = q_prim_vf(eqn_idx%E)%sf(i, j, 0)**(1._wp/gam)
3843# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3844 case (204) ! Rayleigh-Taylor instability
3845# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3846 rhoh = 3._wp
3847# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3848 rhol = 1._wp
3849# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3850 pref = 1.e5_wp
3851# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3852 pint = pref
3853# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3854 h = 0.7_wp
3855# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3856 lam = 0.2_wp
3857# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3858 wl = 2._wp*pi/lam
3859# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3860 amp = 0.05_wp/wl
3861# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3862
3863# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3864 inth = amp*sin(2._wp*pi*x_cc(i)/lam - pi/2._wp) + h
3865# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3866
3867# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3868 alph = 0.5_wp*(1._wp + tanh((y_cc(j) - inth)/2.5e-3_wp))
3869# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3870
3871# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3872 if (alph < eps) alph = eps
3873# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3874 if (alph > 1._wp - eps) alph = 1._wp - eps
3875# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3876
3877# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3878 if (y_cc(j) > inth) then
3879# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3880 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = alph
3881# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3882 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = 1._wp - alph
3883# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3884 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = alph*rhoh
3885# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3886 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = (1._wp - alph)*rhol
3887# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3888 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = pref + rhoh*9.81_wp*(1.2_wp - y_cc(j))
3889# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3890 else
3891# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3892 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = alph
3893# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3894 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = 1._wp - alph
3895# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3896 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = alph*rhoh
3897# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3898 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = (1._wp - alph)*rhol
3899# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3900 pint = pref + rhoh*9.81_wp*(1.2_wp - inth)
3901# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3902 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = pint + rhol*9.81_wp*(inth - y_cc(j))
3903# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3904 end if
3905# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3906 case (205) ! 2D lung wave interaction problem
3907# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3908 h = 0.0_wp ! non dim origin y
3909# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3910 lam = 1.0_wp ! non dim lambda
3911# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3912 amp = patch_icpp(patch_id)%a(2) ! to be changed later! !non dim amplitude
3913# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3914
3915# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3916 inth = amp*sin(2*pi*x_cc(i)/lam - pi/2) + h
3917# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3918
3919# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3920 if (y_cc(j) > inth) then
3921# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3922 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(1)
3923# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3924 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(2)
3925# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3926 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = patch_icpp(1)%pres
3927# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3928 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = patch_icpp(1)%alpha(1)
3929# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3930 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = patch_icpp(1)%alpha(2)
3931# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3932 end if
3933# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3934 case (206) ! 2D lung wave interaction problem - horizontal domain
3935# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3936 h = 0.0_wp ! non dim origin y
3937# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3938 lam = 1.0_wp ! non dim lambda
3939# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3940 amp = patch_icpp(patch_id)%a(2)
3941# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3942
3943# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3944 intl = amp*sin(2*pi*y_cc(j)/lam - pi/2) + h
3945# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3946
3947# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3948 if (x_cc(i) > intl) then ! this is the liquid
3949# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3950 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(1)
3951# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3952 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(2)
3953# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3954 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = patch_icpp(1)%pres
3955# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3956 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = patch_icpp(1)%alpha(1)
3957# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3958 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = patch_icpp(1)%alpha(2)
3959# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3960 end if
3961# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3962 case (207) ! Kelvin Helmholtz Instability
3963# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3964 sigma = 0.05_wp/sqrt(2.0_wp)
3965# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3966 gauss1 = exp(-(y_cc(j) - 0.75_wp)**2/(2.0_wp*sigma**2))
3967# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3968 gauss2 = exp(-(y_cc(j) - 0.25_wp)**2/(2.0_wp*sigma**2))
3969# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3970 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = 0.1_wp*sin(4.0_wp*pi*x_cc(i))*(gauss1 + gauss2)
3971# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3972 case (208) ! Richtmeyer Meshkov Instability
3973# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3974 lam = 1.0_wp
3975# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3976 eps = 1.0e-6_wp
3977# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3978 ei = 5.0_wp
3979# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3980 ! Smoothening function to smooth out sharp discontinuity in the interface
3981# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3982 if (x_cc(i) <= 0.7_wp*lam) then
3983# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3984 d = x_cc(i) - lam*(0.4_wp - 0.1_wp*sin(2.0_wp*pi*(y_cc(j)/lam + 0.25_wp)))
3985# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3986 fsm = 0.5_wp*(1.0_wp + erf(d/(ei*sqrt(dx*dy))))
3987# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3988 alpha_air = eps + (1.0_wp - 2.0_wp*eps)*fsm
3989# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3990 alpha_sf6 = 1.0_wp - alpha_air
3991# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3992 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = alpha_sf6*5.04_wp
3993# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3994 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = alpha_air*1.0_wp
3995# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3996 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = alpha_sf6
3997# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3998 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = alpha_air
3999# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4000 end if
4001# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4002 case (250) ! MHD Orszag-Tang vortex
4003# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4004 ! gamma = 5/3 rho = 25/(36*pi) p = 5/(12*pi) v = (-sin(2*pi*y), sin(2*pi*x), 0) B = (-sin(2*pi*y)/sqrt(4*pi),
4005# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4006 ! sin(4*pi*x)/sqrt(4*pi), 0)
4007# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4008
4009# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4010 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -sin(2._wp*pi*y_cc(j))
4011# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4012 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = sin(2._wp*pi*x_cc(i))
4013# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4014
4015# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4016 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = -sin(2._wp*pi*y_cc(j))/sqrt(4._wp*pi)
4017# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4018 q_prim_vf(eqn_idx%B%beg + 1)%sf(i, j, 0) = sin(4._wp*pi*x_cc(i))/sqrt(4._wp*pi)
4019# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4020 case (251) ! RMHD Cylindrical Blast Wave [Mignone, 2006: Section 4.3.1]
4021# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4022 if (x_cc(i)**2 + y_cc(j)**2 < 0.08_wp**2) then
4023# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4024 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 0.01
4025# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4026 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1.0
4027# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4028 else if (x_cc(i)**2 + y_cc(j)**2 <= 1._wp**2) then
4029# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4030 ! Linear interpolation between r=0.08 and r=1.0
4031# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4032 factor = (1.0_wp - sqrt(x_cc(i)**2 + y_cc(j)**2))/(1.0_wp - 0.08_wp)
4033# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4034 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 0.01_wp*factor + 1.e-4_wp*(1.0_wp - factor)
4035# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4036 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1.0_wp*factor + 3.e-5_wp*(1.0_wp - factor)
4037# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4038 else
4039# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4040 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1.e-4_wp
4041# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4042 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 3.e-5_wp
4043# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4044 end if
4045# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4046
4047# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4048 ! case 252 is for the 2D MHD Rotor problem
4049# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4050 case (252) ! 2D MHD Rotor Problem
4051# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4052 ! Ambient conditions are set in the JSON file. This case imposes the dense, rotating cylinder.
4053# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4054 !
4055# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4056 ! gamma = 1.4 Ambient medium (r > 0.1): rho = 1, p = 1, v = 0, B = (1,0,0) Rotor (r <= 0.1): rho = 10, p = 1 v has angular
4057# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4058 ! velocity w=20, giving v_tan=2 at r=0.1
4059# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4060
4061# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4062 ! Calculate distance squared from the center
4063# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4064 r_sq = (x_cc(i) - 0.5_wp)**2 + (y_cc(j) - 0.5_wp)**2
4065# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4066
4067# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4068 ! inner radius of 0.1
4069# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4070 if (r_sq <= 0.1**2) then
4071# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4072 ! -- Inside the rotor -- Set density uniformly to 10
4073# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4074 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 10._wp
4075# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4076
4077# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4078 ! Set vup constant rotation of rate v=2 v_x = -omega * (y - y_c) v_y = omega * (x - x_c)
4079# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4080 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -20._wp*(y_cc(j) - 0.5_wp)
4081# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4082 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = 20._wp*(x_cc(i) - 0.5_wp)
4083# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4084
4085# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4086 ! taper width of 0.015
4087# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4088 else if (r_sq <= 0.115**2) then
4089# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4090 ! linearly smooth the function between r = 0.1 and 0.115
4091# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4092 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1._wp + 9._wp*(0.115_wp - sqrt(r_sq))/(0.015_wp)
4093# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4094
4095# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4096 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -(2._wp/sqrt(r_sq))*(y_cc(j) - 0.5_wp)*(0.115_wp - sqrt(r_sq))/(0.015_wp)
4097# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4098 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = (2._wp/sqrt(r_sq))*(x_cc(i) - 0.5_wp)*(0.115_wp - sqrt(r_sq))/(0.015_wp)
4099# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4100 end if
4101# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4102 case (253) ! MHD Smooth Magnetic Vortex
4103# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4104 ! Section 5.2 of Implicit hybridized discontinuous Galerkin methods for compressible magnetohydrodynamics C. Ciuca, P.
4105# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4106 ! Fernandez, A. Christophe, N.C. Nguyen, J. Peraire
4107# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4108
4109# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4110 ! velocity
4111# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4112 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 1._wp - (y_cc(j)*exp(1 - (x_cc(i)**2 + y_cc(j)**2))/(2.*pi))
4113# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4114 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = 1._wp + (x_cc(i)*exp(1 - (x_cc(i)**2 + y_cc(j)**2))/(2.*pi))
4115# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4116
4117# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4118 ! magnetic field
4119# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4120 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = -y_cc(j)*exp(1 - (x_cc(i)**2 + y_cc(j)**2))/(2.*pi)
4121# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4122 q_prim_vf(eqn_idx%B%beg + 1)%sf(i, j, 0) = x_cc(i)*exp(1 - (x_cc(i)**2 + y_cc(j)**2))/(2.*pi)
4123# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4124
4125# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4126 ! pressure
4127# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4128 q_prim_vf(eqn_idx%E)%sf(i, j, &
4129# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4130 & 0) = 1._wp + (1 - 2._wp*(x_cc(i)**2 + y_cc(j)**2))*exp(1 - (x_cc(i)**2 + y_cc(j)**2))/((2._wp*pi)**3)
4131# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4132 case (260) ! Gaussian Divergence Pulse
4133# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4134 ! Bx(x) = 1 + C * erf((x-0.5)/\sigma) => \partialBx/\partialx = C * (2/\sqrt\pi) * exp[-((x-0.5)/\sigma)**2] * (1/\sigma)
4135# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4136 ! Choose C = \epsilon * \sigma * \sqrt\pi / 2 => \partialBx/\partialx = \epsilon * exp[-((x-0.5)/\sigma)**2] \psi is
4137# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4138 ! initialized to zero everywhere.
4139# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4140
4141# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4142 eps_mhd = patch_icpp(patch_id)%a(2)
4143# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4144 sigma = patch_icpp(patch_id)%a(3)
4145# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4146 c_mhd = eps_mhd*sigma*sqrt(pi)*0.5_wp
4147# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4148
4149# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4150 ! B-field
4151# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4152 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = 1._wp + c_mhd*erf((x_cc(i) - 0.5_wp)/sigma)
4153# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4154 case (261) ! Blob
4155# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4156 r0 = 1._wp/sqrt(8._wp)
4157# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4158 r2 = x_cc(i)**2 + y_cc(j)**2
4159# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4160 r = sqrt(r2)
4161# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4162 alpha = r/r0
4163# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4164 if (alpha < 1) then
4165# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4166 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = 1._wp/sqrt(4._wp*pi)*(alpha**8 - 2._wp*alpha**4 + 1._wp)
4167# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4168 ! q_prim_vf(eqn_idx%B%beg)%sf(i,j,0) = 1._wp/sqrt(4000._wp*pi) * (4096._wp*r2**4 - 128._wp*r2**2 + 1._wp)
4169# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4170 ! q_prim_vf(eqn_idx%B%beg)%sf(i,j,0) = 1._wp/(4._wp*pi) * (alpha**8 - 2._wp*alpha**4 + 1._wp)
4171# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4172 ! q_prim_vf(eqn_idx%E)%sf(i,j,0) = 6._wp - q_prim_vf(eqn_idx%B%beg)%sf(i,j,0)**2/2._wp
4173# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4174 end if
4175# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4176 case (262) ! Tilted 2D MHD shock‐tube at α = arctan2 (≈63.4°)
4177# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4178 ! rotate by \alpha = atan(2)
4179# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4180 alpha = atan(2._wp)
4181# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4182 cosa = cos(alpha)
4183# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4184 sina = sin(alpha)
4185# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4186 ! projection along shock normal
4187# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4188 r = x_cc(i)*cosa + y_cc(j)*sina
4189# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4190
4191# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4192 if (r <= 0.5_wp) then
4193# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4194 ! LEFT state: \rho=1, v\parallel=+10, v\perp=0, p=20, B\parallel=B\perp=5/\sqrt(4\pi)
4195# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4196 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1._wp
4197# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4198 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 10._wp*cosa
4199# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4200 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = 10._wp*sina
4201# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4202 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 20._wp
4203# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4204 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = (5._wp/sqrt(4._wp*pi))*cosa - (5._wp/sqrt(4._wp*pi))*sina
4205# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4206 q_prim_vf(eqn_idx%B%beg + 1)%sf(i, j, 0) = (5._wp/sqrt(4._wp*pi))*sina + (5._wp/sqrt(4._wp*pi))*cosa
4207# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4208 else
4209# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4210 ! RIGHT state: \rho=1, v\parallel=-10, v\perp=0, p=1, B\parallel=B\perp=5/\sqrt(4\pi)
4211# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4212 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1._wp
4213# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4214 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -10._wp*cosa
4215# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4216 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = -10._wp*sina
4217# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4218 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1._wp
4219# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4220 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = (5._wp/sqrt(4._wp*pi))*cosa - (5._wp/sqrt(4._wp*pi))*sina
4221# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4222 q_prim_vf(eqn_idx%B%beg + 1)%sf(i, j, 0) = (5._wp/sqrt(4._wp*pi))*sina + (5._wp/sqrt(4._wp*pi))*cosa
4223# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4224 end if
4225# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4226 ! v^z and B^z remain zero by default
4227# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4228 case (270) ! 2D extrusion of 1D profile from external data
4229# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4230 ! This hardcoded case extrudes a 1D profile to initialize a 2D simulation domain
4231# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4232 if (.not. files_loaded) then
4233# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4234 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
4235# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4236 do f = 1, max_files
4237# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4238 write (file_num_str, '(I0)') f
4239# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4240 filenames(f) = trim(init_dir) // "prim." // trim(file_num_str) // ".00." // zeros_default // ".dat"
4241# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4242 end do
4243# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4244
4245# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4246 ! Common file reading setup
4247# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4248 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
4249# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4250 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
4251# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4252
4253# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4254 select case (num_dims)
4255# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4256 case (1, 2) ! 1D and 2D cases are similar
4257# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4258 ! Count lines
4259# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4260 line_count = 0
4261# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4262 do
4263# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4264 read (unit2, *, iostat=ios2) dummy_x, dummy_y
4265# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4266 if (ios2 /= 0) exit
4267# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4268 line_count = line_count + 1
4269# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4270 end do
4271# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4272 close (unit2)
4273# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4274
4275# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4276 xrows = line_count
4277# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4278 yrows = 1
4279# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4280 index_x = 0
4281# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4282 if (num_dims == 2) index_x = i
4283# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4284#ifdef MFC_DEBUG
4285# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4286 block
4287# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4288 use iso_fortran_env, only: output_unit
4289# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4290
4291# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4292 print *, 'm_icpp_patches.fpp:376: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
4293# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4294
4295# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4296 call flush (output_unit)
4297# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4298 end block
4299# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4300#endif
4301# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4302 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
4303# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4304
4305# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4306
4307# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4308
4309# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4310#if defined(MFC_OpenACC)
4311# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4312!$acc enter data create(x_coords, stored_values)
4313# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4314#elif defined(MFC_OpenMP)
4315# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4316!$omp target enter data map(always,alloc:x_coords, stored_values)
4317# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4318#endif
4319# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4320
4321# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4322 ! Read data from all files
4323# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4324 do f = 1, max_files
4325# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4326 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
4327# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4328 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
4329# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4330
4331# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4332 do iter = 1, xrows
4333# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4334 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
4335# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4336 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
4337# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4338 end do
4339# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4340 close (unit)
4341# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4342 end do
4343# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4344
4345# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4346 ! Calculate offsets
4347# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4348 domain_xstart = x_coords(1)
4349# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4350 x_step = x_cc(1) - x_cc(0)
4351# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4352 delta_x = merge(x_cc(0) - domain_xstart + x_step/2.0, x_cc(index_x) - domain_xstart + x_step/2.0, num_dims == 1)
4353# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4354 global_offset_x = nint(abs(delta_x)/x_step)
4355# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4356 case (3) ! 3D case - determine grid structure
4357# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4358 ! Find yRows by counting rows with same x
4359# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4360 read (unit2, *, iostat=ios2) x0, y0, dummy_z
4361# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4362 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
4363# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4364
4365# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4366 yrows = 1
4367# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4368 do
4369# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4370 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
4371# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4372 if (ios2 /= 0) exit
4373# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4374 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
4375# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4376 yrows = yrows + 1
4377# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4378 else
4379# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4380 exit
4381# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4382 end if
4383# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4384 end do
4385# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4386 close (unit2)
4387# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4388
4389# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4390 ! Count total rows
4391# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4392 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
4393# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4394 nrows = 0
4395# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4396 do
4397# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4398 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
4399# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4400 if (ios2 /= 0) exit
4401# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4402 nrows = nrows + 1
4403# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4404 end do
4405# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4406 close (unit2)
4407# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4408
4409# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4410 xrows = nrows/yrows
4411# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4412#ifdef MFC_DEBUG
4413# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4414 block
4415# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4416 use iso_fortran_env, only: output_unit
4417# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4418
4419# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4420 print *, 'm_icpp_patches.fpp:376: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
4421# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4422
4423# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4424 call flush (output_unit)
4425# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4426 end block
4427# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4428#endif
4429# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4430 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
4431# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4432
4433# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4434
4435# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4436
4437# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4438
4439# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4440#if defined(MFC_OpenACC)
4441# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4442!$acc enter data create(x_coords, y_coords, stored_values)
4443# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4444#elif defined(MFC_OpenMP)
4445# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4446!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
4447# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4448#endif
4449# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4450 index_x = i
4451# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4452 index_y = j
4453# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4454
4455# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4456 ! Read all files
4457# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4458 do f = 1, max_files
4459# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4460 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
4461# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4462 if (ios /= 0) then
4463# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4464 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
4465# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4466 cycle
4467# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4468 end if
4469# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4470
4471# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4472 iter = 0
4473# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4474 do iix = 1, xrows
4475# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4476 do iiy = 1, yrows
4477# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4478 iter = iter + 1
4479# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4480 if (f == 1) then
4481# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4482 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
4483# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4484 else
4485# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4486 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
4487# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4488 end if
4489# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4490 if (ios /= 0) call s_mpi_abort("Error reading data")
4491# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4492 end do
4493# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4494 end do
4495# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4496 close (unit)
4497# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4498 end do
4499# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4500
4501# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4502 ! Calculate offsets
4503# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4504 x_step = x_cc(1) - x_cc(0)
4505# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4506 y_step = y_cc(1) - y_cc(0)
4507# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4508 delta_x = x_cc(index_x) - x_coords(1) + x_step/2.0_wp
4509# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4510 delta_y = y_cc(index_y) - y_coords(1) + y_step/2.0_wp
4511# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4512 global_offset_x = nint(abs(delta_x)/x_step)
4513# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4514 global_offset_y = nint(abs(delta_y)/y_step)
4515# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4516 end select
4517# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4518
4519# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4520 files_loaded = .true.
4521# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4522 end if
4523# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4524
4525# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4526 ! Data assignment
4527# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4528 select case (num_dims)
4529# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4530 case (1)
4531# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4532 idx = i + 1 + global_offset_x
4533# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4534 do f = 1, sys_size
4535# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4536 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
4537# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4538 end do
4539# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4540 case (2)
4541# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4542 idx = i + 1 + global_offset_x - index_x
4543# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4544 do f = 1, sys_size - 1
4545# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4546 jump = merge(1, 0, f >= eqn_idx%mom%end)
4547# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4548 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
4549# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4550 end do
4551# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4552 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
4553# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4554 case (3)
4555# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4556 idx = i + 1 + global_offset_x - index_x
4557# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4558 idy = j + 1 + global_offset_y - index_y
4559# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4560 do f = 1, sys_size - 1
4561# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4562 jump = merge(1, 0, f >= eqn_idx%mom%end)
4563# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4564 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
4565# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4566 end do
4567# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4568 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
4569# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4570 end select
4571# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4572 case (280) ! Isentropic vortex
4573# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4574 ! This is patch is hard-coded for test suite optimization used in the 2D_isentropicvortex case: This analytic patch uses
4575# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4576 ! geometry 2
4577# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4578 if (patch_id == 1) then
4579# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4580 q_prim_vf(eqn_idx%E)%sf(i, j, &
4581# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4582 & 0) = 1.0*(1.0 - (1.0/1.0)*(5.0/(2.0*pi))*(5.0/(8.0*1.0*(1.4 + 1.0)*pi))*exp(2.0*1.0*(1.0 - (x_cc(i) &
4583# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4584 & - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0)))**(1.4 + 1.0)
4585# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4586 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, j, &
4587# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4588 & 0) = 1.0*(1.0 - (1.0/1.0)*(5.0/(2.0*pi))*(5.0/(8.0*1.0*(1.4 + 1.0)*pi))*exp(2.0*1.0*(1.0 - (x_cc(i) &
4589# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4590 & - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0)))**1.4
4591# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4592 q_prim_vf(eqn_idx%mom%beg + 0)%sf(i, j, &
4593# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4594 & 0) = 0.0 + (y_cc(j) - patch_icpp(1)%y_centroid)*(5.0/(2.0*pi))*exp(1.0*(1.0 - (x_cc(i) - patch_icpp(1) &
4595# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4596 & %x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0))
4597# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4598 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, &
4599# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4600 & 0) = 0.0 - (x_cc(i) - patch_icpp(1)%x_centroid)*(5.0/(2.0*pi))*exp(1.0*(1.0 - (x_cc(i) - patch_icpp(1) &
4601# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4602 & %x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0))
4603# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4604 end if
4605# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4606 case (281) ! Acoustic pulse
4607# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4608 ! This is patch is hard-coded for test suite optimization used in the 2D_acoustic_pulse case: This analytic patch uses
4609# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4610 ! geometry 2
4611# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4612 if (patch_id == 2) then
4613# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4614 q_prim_vf(eqn_idx%E)%sf(i, j, &
4615# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4616 & 0) = 101325*(1 - 0.5*(1.4 - 1)*(0.4)**2*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2))))**(1.4/(1.4 - 1))
4617# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4618 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, j, &
4619# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4620 & 0) = 1*(1 - 0.5*(1.4 - 1)*(0.4)**2*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2))))**(1/(1.4 - 1))
4621# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4622 end if
4623# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4624 case (282) ! Zero-circulation vortex
4625# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4626 ! This is patch is hard-coded for test suite optimization used in the 2D_zero_circ_vortex case: This analytic patch uses
4627# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4628 ! geometry 2
4629# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4630 if (patch_id == 2) then
4631# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4632 q_prim_vf(eqn_idx%E)%sf(i, j, &
4633# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4634 & 0) = 101325*(1 - 0.5*(1.4 - 1)*(0.1/0.3)**2*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2))))**(1.4/(1.4 - 1))
4635# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4636 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, j, &
4637# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4638 & 0) = 1*(1 - 0.5*(1.4 - 1)*(0.1/0.3)**2*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2))))**(1/(1.4 - 1))
4639# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4640 q_prim_vf(eqn_idx%mom%beg + 0)%sf(i, j, &
4641# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4642 & 0) = 112.99092883944267*(1 - (0.1/0.3))*y_cc(j)*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2)))
4643# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4644 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, &
4645# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4646 & 0) = 112.99092883944267*((0.1/0.3))*x_cc(i)*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2)))
4647# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4648 end if
4649# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4650 case (291) ! Isothermal Flat Plate
4651# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4652 t_inf = 1125.0_wp
4653# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4654 t_wall = 600.0_wp
4655# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4656 p_atm = 101325.0_wp
4657# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4658
4659# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4660 ! Boundary/Shear Layer thicknesses
4661# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4662 delta_th = 0.0003_wp ! Thermal BL thickness
4663# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4664 delta_shear = 8e-3_wp ! Velocity BL thickness
4665# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4666
4667# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4668 u_max = 50.0_wp ! Freestream Velocity (m/s)
4669# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4670
4671# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4672 mw_n2 = 28.0134e-3_wp
4673# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4674 mw_o2 = 31.999e-3_wp
4675# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4676 y_n2 = 0.767_wp
4677# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4678 y_o2 = 0.233_wp
4679# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4680 r_mix = 8.314462618_wp*((y_n2/mw_n2) + (y_o2/mw_o2))
4681# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4682 bottom_blend_u = tanh(y_cc(j)/delta_shear)
4683# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4684 bottom_blend_t = tanh(y_cc(j)/delta_th)
4685# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4686 u_mean = u_max*bottom_blend_u
4687# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4688 t_loc = t_wall + (t_inf - t_wall)*bottom_blend_t
4689# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4690 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = p_atm/(r_mix*t_loc)
4691# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4692 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = u_mean
4693# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4694 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
4695# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4696 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p_atm
4697# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4698 q_prim_vf(eqn_idx%species%beg)%sf(i, j, 0) = y_o2
4699# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4700 q_prim_vf(eqn_idx%species%end)%sf(i, j, 0) = y_n2
4701# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4702 case default
4703# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4704 if (proc_rank == 0) then
4705# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4706 call s_int_to_str(patch_id, istr)
4707# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4708 call s_mpi_abort("Invalid hcid specified for patch " // trim(istr))
4709# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4710 end if
4711# 376 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4712 end select
4713 end if
4714
4715 ! Updating the patch identities bookkeeping variable
4716 if (1._wp - eta < sgm_eps) patch_id_fp(i, j, 0) = patch_id
4717
4718 q_prim_vf(eqn_idx%alf)%sf(i, j, &
4719 & 0) = patch_icpp(patch_id)%alpha(1)*exp(-0.5_wp*((myr - radius)**2._wp)/(thickness/3._wp)**2._wp)
4720 end if
4721 end do
4722 end do
4723 if (allocated(stored_values)) then
4724# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4725#ifdef MFC_DEBUG
4726# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4727 block
4728# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4729 use iso_fortran_env, only: output_unit
4730# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4731
4732# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4733 print *, 'm_icpp_patches.fpp:387: ', '@:DEALLOCATE(stored_values)'
4734# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4735
4736# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4737 call flush (output_unit)
4738# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4739 end block
4740# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4741#endif
4742# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4743
4744# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4745#if defined(MFC_OpenACC)
4746# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4747!$acc exit data delete(stored_values)
4748# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4749#elif defined(MFC_OpenMP)
4750# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4751!$omp target exit data map(release:stored_values)
4752# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4753#endif
4754# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4755 deallocate (stored_values)
4756# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4757#ifdef MFC_DEBUG
4758# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4759 block
4760# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4761 use iso_fortran_env, only: output_unit
4762# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4763
4764# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4765 print *, 'm_icpp_patches.fpp:387: ', '@:DEALLOCATE(x_coords)'
4766# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4767
4768# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4769 call flush (output_unit)
4770# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4771 end block
4772# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4773#endif
4774# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4775
4776# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4777#if defined(MFC_OpenACC)
4778# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4779!$acc exit data delete(x_coords)
4780# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4781#elif defined(MFC_OpenMP)
4782# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4783!$omp target exit data map(release:x_coords)
4784# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4785#endif
4786# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4787 deallocate (x_coords)
4788# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4789 end if
4790# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4791
4792# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4793 if (allocated(y_coords)) then
4794# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4795#ifdef MFC_DEBUG
4796# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4797 block
4798# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4799 use iso_fortran_env, only: output_unit
4800# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4801
4802# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4803 print *, 'm_icpp_patches.fpp:387: ', '@:DEALLOCATE(y_coords)'
4804# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4805
4806# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4807 call flush (output_unit)
4808# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4809 end block
4810# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4811#endif
4812# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4813
4814# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4815#if defined(MFC_OpenACC)
4816# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4817!$acc exit data delete(y_coords)
4818# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4819#elif defined(MFC_OpenMP)
4820# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4821!$omp target exit data map(release:y_coords)
4822# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4823#endif
4824# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4825 deallocate (y_coords)
4826# 387 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4827 end if
4828
4829 end subroutine s_icpp_varcircle
4830
4831 !> Initialize a 3D variable-thickness circular annulus patch extruded along the z-axis.
4832 subroutine s_icpp_3dvarcircle(patch_id, patch_id_fp, q_prim_vf)
4833
4834 ! Patch identifier
4835 integer, intent(in) :: patch_id
4836
4837#ifdef MFC_MIXED_PRECISION
4838 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
4839#else
4840 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
4841#endif
4842 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
4843
4844 ! Generic loop iterators
4845 integer :: i, j, k
4846 real(wp) :: radius, myr, thickness
4847
4848 integer :: xRows, yRows, nRows, iix, iiy, max_files
4849# 408 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4850 integer :: f, iter, ios, ios2, unit, unit2, idx, idy, index_x, index_y, jump, line_count, ycount
4851# 408 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4852 real(wp) :: x_len, x_step, y_len, y_step
4853# 408 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4854 real(wp) :: dummy_x, dummy_y, dummy_z, x0, y0
4855# 408 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4856 integer :: global_offset_x, global_offset_y !< MPI subdomain offset
4857# 408 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4858 real(wp) :: delta_x, delta_y
4859# 408 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4860 character(len=100), dimension(sys_size) :: fileNames !< Arrays to store all data from files
4861# 408 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4862 character(len=200) :: errmsg
4863# 408 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4864 real(wp), allocatable :: stored_values(:,:,:)
4865# 408 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4866 real(wp), allocatable :: x_coords(:), y_coords(:)
4867# 408 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4868 logical :: files_loaded = .false.
4869# 408 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4870 real(wp) :: domain_xstart, domain_xend, domain_ystart, domain_yend
4871# 408 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4872 character(len=*), parameter :: init_dir = "/home/MFC/FilesDirectory" !< For example /home/MFC/examples/1D_Shock/D/
4873# 408 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4874 character(len=20) :: file_num_str !< For storing the file number as a string
4875# 408 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4876 character(len=20) :: zeros_part !< For the trailing zeros part
4877# 408 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4878 character(len=6), parameter :: zeros_default = "000000" !< Default zeros (can be changed)
4879 ! Place any declaration of intermediate variables here
4880# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4881 real(wp) :: rhoH, rhoL, pRef, pInt, h, lam, wl, amp, intH, alph, Mach
4882# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4883 real(wp) :: eps
4884# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4885
4886# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4887 ! IGR Jets Arrays to stor position and radii of jets from input file
4888# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4889 real(wp), dimension(:), allocatable :: y_th_arr, z_th_arr, r_th_arr
4890# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4891 ! Variables to describe initial condition of jet
4892# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4893 real(wp) :: r, ux_th, ux_am, p_th, p_am, rho_th, rho_am, y_th, z_th, r_th, eps_smooth
4894# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4895 real(wp) :: rcut, xcut !< Intermediate variables for creating smooth initial condition
4896# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4897 real(wp), dimension(0:n,0:p) :: rcut_arr
4898# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4899 integer :: l, q, s !< Iterators for reading input files
4900# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4901 integer :: start, end !< Ints to keep track of position in file
4902# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4903 character(len=1000) :: line !< String to store line in file
4904# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4905 character(len=25) :: value !< String to store value in line
4906# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4907 integer :: NJet !< Number of jets
4908# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4909
4910# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4911 eps = 1e-9_wp
4912# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4913
4914# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4915 if (patch_icpp(patch_id)%hcid == 303) then
4916# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4917 eps_smooth = 3._wp
4918# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4919 open (unit=10, file="njet.txt", status="old", action="read")
4920# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4921 read (10, *) njet
4922# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4923 close (10)
4924# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4925
4926# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4927 allocate (y_th_arr(0:njet - 1))
4928# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4929 allocate (z_th_arr(0:njet - 1))
4930# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4931 allocate (r_th_arr(0:njet - 1))
4932# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4933
4934# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4935 open (unit=10, file="jets.csv", status="old", action="read")
4936# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4937 do q = 0, njet - 1
4938# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4939 read (10, '(A)') line ! Read a full line as a string
4940# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4941 start = 1
4942# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4943
4944# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4945 do l = 0, 2
4946# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4947 end = index(line(start:), ',') ! Find the next comma
4948# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4949 if (end == 0) then
4950# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4951 value = trim(adjustl(line(start:))) ! Last value in the line
4952# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4953 else
4954# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4955 value = trim(adjustl(line(start:start + end - 2))) ! Extract substring
4956# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4957 start = start + end ! Move to next value
4958# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4959 end if
4960# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4961 if (l == 0) then
4962# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4963 read (value, *) y_th_arr(q) ! Convert string to numeric value
4964# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4965 else if (l == 1) then
4966# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4967 read (value, *) z_th_arr(q)
4968# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4969 else
4970# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4971 read (value, *) r_th_arr(q)
4972# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4973 end if
4974# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4975 end do
4976# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4977 end do
4978# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4979 close (10)
4980# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4981
4982# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4983 do q = 0, p
4984# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4985 do l = 0, n
4986# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4987 rcut = 0._wp
4988# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4989 do s = 0, njet - 1
4990# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4991 r = sqrt((y_cc(l) - y_th_arr(s))**2._wp + (z_cc(q) - z_th_arr(s))**2._wp)
4992# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4993 rcut = rcut + f_cut_on(r - r_th_arr(s), eps_smooth)
4994# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4995 end do
4996# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4997 rcut_arr(l, q) = rcut
4998# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4999 end do
5000# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5001 end do
5002# 409 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5003 end if
5004
5005 ! Transferring the circular patch's radius, centroid, smearing patch identity and smearing coefficient information
5006 x_centroid = patch_icpp(patch_id)%x_centroid
5007 y_centroid = patch_icpp(patch_id)%y_centroid
5008 z_centroid = patch_icpp(patch_id)%z_centroid
5009 length_z = patch_icpp(patch_id)%length_z
5010 radius = patch_icpp(patch_id)%radius
5011 smooth_patch_id = patch_icpp(patch_id)%smooth_patch_id
5012 smooth_coeff = patch_icpp(patch_id)%smooth_coeff
5013 thickness = patch_icpp(patch_id)%epsilon
5014
5015 ! Initialize eta=1; modified if smoothing is enabled
5016 eta = 1._wp
5017
5018 ! write for all z
5019
5020 ! Assign patch vars if cell is covered and patch has write permission
5021 do k = 0, p
5022 do j = 0, n
5023 do i = 0, m
5024 myr = sqrt((x_cc(i) - x_centroid)**2 + (y_cc(j) - y_centroid)**2)
5025
5026 if (myr <= radius + thickness/2._wp .and. myr >= radius - thickness/2._wp .and. patch_icpp(patch_id) &
5027 & %alter_patch(patch_id_fp(i, j, k))) then
5028 call s_assign_patch_primitive_variables(patch_id, i, j, k, eta, q_prim_vf, patch_id_fp)
5029
5030
5031 if (patch_icpp(patch_id)%hcid /= dflt_int) then
5032 select case (patch_icpp(patch_id)%hcid)
5033# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5034 case (300) ! Rayleigh-Taylor instability
5035# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5036 rhoh = 3._wp
5037# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5038 rhol = 1._wp
5039# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5040 pref = 1.e5_wp
5041# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5042 pint = pref
5043# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5044 h = 0.7_wp
5045# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5046 lam = 0.2_wp
5047# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5048 wl = 2._wp*pi/lam
5049# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5050 amp = 0.025_wp/wl
5051# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5052
5053# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5054 inth = amp*(sin(2._wp*pi*x_cc(i)/lam - pi/2._wp) + sin(2._wp*pi*z_cc(k)/lam - pi/2._wp)) + h
5055# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5056
5057# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5058 alph = 5.e-1_wp*(1._wp + tanh((y_cc(j) - inth)/2.5e-3_wp))
5059# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5060
5061# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5062 if (alph < eps) alph = eps
5063# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5064 if (alph > 1._wp - eps) alph = 1._wp - eps
5065# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5066
5067# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5068 if (y_cc(j) > inth) then
5069# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5070 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
5071# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5072 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
5073# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5074 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = alph*rhoh
5075# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5076 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = (1._wp - alph)*rhol
5077# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5078 q_prim_vf(eqn_idx%E)%sf(i, j, k) = pref + rhoh*9.81_wp*(1.2_wp - y_cc(j))
5079# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5080 else
5081# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5082 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
5083# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5084 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
5085# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5086 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = alph*rhoh
5087# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5088 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = (1._wp - alph)*rhol
5089# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5090 pint = pref + rhoh*9.81_wp*(1.2_wp - inth)
5091# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5092 q_prim_vf(eqn_idx%E)%sf(i, j, k) = pint + rhol*9.81_wp*(inth - y_cc(j))
5093# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5094 end if
5095# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5096 case (301) ! (3D lung geometry in X direction, |sin(*)+sin(*)|)
5097# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5098 h = 0.0_wp
5099# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5100 lam = 1.0_wp
5101# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5102 amp = patch_icpp(patch_id)%a(2)
5103# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5104 inth = amp*abs((sin(2*pi*y_cc(j)/lam - pi/2) + sin(2*pi*z_cc(k)/lam - pi/2)) + h)
5105# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5106 if (x_cc(i) > inth) then
5107# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5108 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = patch_icpp(1)%alpha_rho(1)
5109# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5110 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = patch_icpp(1)%alpha_rho(2)
5111# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5112 q_prim_vf(eqn_idx%E)%sf(i, j, k) = patch_icpp(1)%pres
5113# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5114 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = patch_icpp(1)%alpha(1)
5115# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5116 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = patch_icpp(1)%alpha(2)
5117# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5118 end if
5119# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5120 case (302) ! 3D Jet with IGR
5121# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5122 ux_th = 10*sqrt(1.4*0.4)
5123# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5124 ux_am = 0.0*sqrt(1.4)
5125# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5126 p_th = 2.0_wp
5127# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5128 p_am = 1.0_wp
5129# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5130 rho_th = 1._wp
5131# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5132 rho_am = 1._wp
5133# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5134 y_th = 0.0_wp
5135# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5136 z_th = 0.0_wp
5137# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5138 r_th = 1._wp
5139# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5140 eps_smooth = 1._wp
5141# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5142 eps = 1e-6
5143# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5144
5145# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5146 r = sqrt((y_cc(j) - y_th)**2._wp + (z_cc(k) - z_th)**2._wp)
5147# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5148 rcut = f_cut_on(r - r_th, eps_smooth)
5149# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5150 xcut = f_cut_on(x_cc(i), eps_smooth)
5151# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5152
5153# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5154 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, k) = ux_th*rcut*xcut + ux_am
5155# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5156 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, k) = 0._wp
5157# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5158 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0._wp
5159# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5160
5161# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5162 if (num_fluids == 1) then
5163# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5164 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = (rho_th - rho_am)*rcut*xcut + rho_am
5165# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5166 else
5167# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5168 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = (1._wp - 2._wp*eps)*rcut*xcut + eps
5169# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5170 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = rho_th*q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)
5171# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5172 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = rho_am*(1._wp - q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k))
5173# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5174 end if
5175# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5176
5177# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5178 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p_th*rcut*xcut + p_am
5179# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5180 case (303) ! 3D Multijet
5181# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5182 eps_smooth = 3.0_wp
5183# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5184 ux_th = 10*sqrt(1.4*0.4)
5185# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5186 ux_am = 2.5*sqrt(1.4*0.4)
5187# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5188 p_th = 0.8_wp
5189# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5190 p_am = 0.4_wp
5191# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5192 rho_th = 1._wp
5193# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5194 rho_am = 1._wp
5195# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5196 eps = 1e-6
5197# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5198
5199# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5200 rcut = rcut_arr(j, k)
5201# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5202 xcut = f_cut_on(x_cc(i), eps_smooth)
5203# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5204
5205# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5206 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, k) = ux_th*rcut*xcut + ux_am
5207# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5208 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, k) = 0._wp
5209# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5210 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0._wp
5211# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5212
5213# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5214 if (num_fluids == 1) then
5215# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5216 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = (rho_th - rho_am)*rcut*xcut + rho_am
5217# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5218 else
5219# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5220 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = (1._wp - 2._wp*eps)*rcut*xcut + eps
5221# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5222 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = rho_th*q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)
5223# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5224 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = rho_am*(1._wp - q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k))
5225# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5226 end if
5227# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5228
5229# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5230 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p_th*rcut*xcut + p_am
5231# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5232 case (370) ! 3D extrusion of 2D profile from external data
5233# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5234 ! This hardcoded case extrudes a 2D profile to initialize a 3D simulation domain
5235# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5236 if (.not. files_loaded) then
5237# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5238 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
5239# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5240 do f = 1, max_files
5241# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5242 write (file_num_str, '(I0)') f
5243# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5244 filenames(f) = trim(init_dir) // "prim." // trim(file_num_str) // ".00." // zeros_default // ".dat"
5245# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5246 end do
5247# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5248
5249# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5250 ! Common file reading setup
5251# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5252 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
5253# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5254 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
5255# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5256
5257# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5258 select case (num_dims)
5259# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5260 case (1, 2) ! 1D and 2D cases are similar
5261# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5262 ! Count lines
5263# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5264 line_count = 0
5265# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5266 do
5267# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5268 read (unit2, *, iostat=ios2) dummy_x, dummy_y
5269# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5270 if (ios2 /= 0) exit
5271# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5272 line_count = line_count + 1
5273# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5274 end do
5275# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5276 close (unit2)
5277# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5278
5279# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5280 xrows = line_count
5281# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5282 yrows = 1
5283# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5284 index_x = 0
5285# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5286 if (num_dims == 2) index_x = i
5287# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5288#ifdef MFC_DEBUG
5289# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5290 block
5291# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5292 use iso_fortran_env, only: output_unit
5293# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5294
5295# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5296 print *, 'm_icpp_patches.fpp:438: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
5297# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5298
5299# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5300 call flush (output_unit)
5301# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5302 end block
5303# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5304#endif
5305# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5306 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
5307# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5308
5309# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5310
5311# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5312
5313# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5314#if defined(MFC_OpenACC)
5315# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5316!$acc enter data create(x_coords, stored_values)
5317# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5318#elif defined(MFC_OpenMP)
5319# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5320!$omp target enter data map(always,alloc:x_coords, stored_values)
5321# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5322#endif
5323# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5324
5325# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5326 ! Read data from all files
5327# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5328 do f = 1, max_files
5329# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5330 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
5331# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5332 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
5333# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5334
5335# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5336 do iter = 1, xrows
5337# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5338 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
5339# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5340 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
5341# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5342 end do
5343# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5344 close (unit)
5345# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5346 end do
5347# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5348
5349# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5350 ! Calculate offsets
5351# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5352 domain_xstart = x_coords(1)
5353# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5354 x_step = x_cc(1) - x_cc(0)
5355# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5356 delta_x = merge(x_cc(0) - domain_xstart + x_step/2.0, x_cc(index_x) - domain_xstart + x_step/2.0, num_dims == 1)
5357# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5358 global_offset_x = nint(abs(delta_x)/x_step)
5359# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5360 case (3) ! 3D case - determine grid structure
5361# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5362 ! Find yRows by counting rows with same x
5363# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5364 read (unit2, *, iostat=ios2) x0, y0, dummy_z
5365# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5366 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
5367# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5368
5369# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5370 yrows = 1
5371# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5372 do
5373# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5374 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
5375# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5376 if (ios2 /= 0) exit
5377# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5378 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
5379# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5380 yrows = yrows + 1
5381# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5382 else
5383# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5384 exit
5385# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5386 end if
5387# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5388 end do
5389# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5390 close (unit2)
5391# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5392
5393# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5394 ! Count total rows
5395# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5396 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
5397# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5398 nrows = 0
5399# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5400 do
5401# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5402 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
5403# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5404 if (ios2 /= 0) exit
5405# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5406 nrows = nrows + 1
5407# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5408 end do
5409# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5410 close (unit2)
5411# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5412
5413# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5414 xrows = nrows/yrows
5415# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5416#ifdef MFC_DEBUG
5417# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5418 block
5419# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5420 use iso_fortran_env, only: output_unit
5421# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5422
5423# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5424 print *, 'm_icpp_patches.fpp:438: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
5425# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5426
5427# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5428 call flush (output_unit)
5429# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5430 end block
5431# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5432#endif
5433# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5434 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
5435# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5436
5437# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5438
5439# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5440
5441# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5442
5443# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5444#if defined(MFC_OpenACC)
5445# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5446!$acc enter data create(x_coords, y_coords, stored_values)
5447# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5448#elif defined(MFC_OpenMP)
5449# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5450!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
5451# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5452#endif
5453# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5454 index_x = i
5455# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5456 index_y = j
5457# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5458
5459# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5460 ! Read all files
5461# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5462 do f = 1, max_files
5463# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5464 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
5465# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5466 if (ios /= 0) then
5467# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5468 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
5469# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5470 cycle
5471# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5472 end if
5473# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5474
5475# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5476 iter = 0
5477# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5478 do iix = 1, xrows
5479# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5480 do iiy = 1, yrows
5481# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5482 iter = iter + 1
5483# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5484 if (f == 1) then
5485# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5486 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
5487# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5488 else
5489# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5490 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
5491# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5492 end if
5493# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5494 if (ios /= 0) call s_mpi_abort("Error reading data")
5495# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5496 end do
5497# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5498 end do
5499# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5500 close (unit)
5501# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5502 end do
5503# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5504
5505# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5506 ! Calculate offsets
5507# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5508 x_step = x_cc(1) - x_cc(0)
5509# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5510 y_step = y_cc(1) - y_cc(0)
5511# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5512 delta_x = x_cc(index_x) - x_coords(1) + x_step/2.0_wp
5513# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5514 delta_y = y_cc(index_y) - y_coords(1) + y_step/2.0_wp
5515# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5516 global_offset_x = nint(abs(delta_x)/x_step)
5517# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5518 global_offset_y = nint(abs(delta_y)/y_step)
5519# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5520 end select
5521# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5522
5523# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5524 files_loaded = .true.
5525# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5526 end if
5527# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5528
5529# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5530 ! Data assignment
5531# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5532 select case (num_dims)
5533# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5534 case (1)
5535# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5536 idx = i + 1 + global_offset_x
5537# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5538 do f = 1, sys_size
5539# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5540 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
5541# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5542 end do
5543# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5544 case (2)
5545# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5546 idx = i + 1 + global_offset_x - index_x
5547# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5548 do f = 1, sys_size - 1
5549# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5550 jump = merge(1, 0, f >= eqn_idx%mom%end)
5551# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5552 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
5553# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5554 end do
5555# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5556 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
5557# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5558 case (3)
5559# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5560 idx = i + 1 + global_offset_x - index_x
5561# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5562 idy = j + 1 + global_offset_y - index_y
5563# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5564 do f = 1, sys_size - 1
5565# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5566 jump = merge(1, 0, f >= eqn_idx%mom%end)
5567# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5568 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
5569# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5570 end do
5571# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5572 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
5573# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5574 end select
5575# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5576 case (380) ! Taylor-Green vortex
5577# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5578 ! This is patch is hard-coded for test suite optimization used in the 3D_TaylorGreenVortex case: This analytic patch used
5579# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5580 ! geometry 9
5581# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5582 mach = 0.1
5583# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5584 if (patch_id == 1) then
5585# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5586 q_prim_vf(eqn_idx%E)%sf(i, j, &
5587# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5588 & k) = 101325 + (mach**2*376.636429464809**2/16)*(cos(2*x_cc(i)/1) + cos(2*y_cc(j)/1))*(cos(2*z_cc(k)/1) + 2)
5589# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5590 q_prim_vf(eqn_idx%mom%beg + 0)%sf(i, j, k) = mach*376.636429464809*sin(x_cc(i)/1)*cos(y_cc(j)/1)*sin(z_cc(k)/1)
5591# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5592 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, k) = -mach*376.636429464809*cos(x_cc(i)/1)*sin(y_cc(j)/1)*sin(z_cc(k)/1)
5593# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5594 end if
5595# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5596 case default
5597# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5598 call s_int_to_str(patch_id, istr)
5599# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5600 call s_mpi_abort("Invalid hcid specified for patch " // trim(istr))
5601# 438 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5602 end select
5603 end if
5604
5605 ! Updating the patch identities bookkeeping variable
5606 if (1._wp - eta < sgm_eps) patch_id_fp(i, j, k) = patch_id
5607
5608 q_prim_vf(eqn_idx%alf)%sf(i, j, &
5609 & k) = patch_icpp(patch_id)%alpha(1)*exp(-0.5_wp*((myr - radius)**2._wp)/(thickness/3._wp)**2._wp)
5610 end if
5611 end do
5612 end do
5613 end do
5614 if (allocated(stored_values)) then
5615# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5616#ifdef MFC_DEBUG
5617# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5618 block
5619# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5620 use iso_fortran_env, only: output_unit
5621# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5622
5623# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5624 print *, 'm_icpp_patches.fpp:450: ', '@:DEALLOCATE(stored_values)'
5625# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5626
5627# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5628 call flush (output_unit)
5629# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5630 end block
5631# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5632#endif
5633# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5634
5635# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5636#if defined(MFC_OpenACC)
5637# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5638!$acc exit data delete(stored_values)
5639# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5640#elif defined(MFC_OpenMP)
5641# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5642!$omp target exit data map(release:stored_values)
5643# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5644#endif
5645# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5646 deallocate (stored_values)
5647# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5648#ifdef MFC_DEBUG
5649# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5650 block
5651# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5652 use iso_fortran_env, only: output_unit
5653# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5654
5655# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5656 print *, 'm_icpp_patches.fpp:450: ', '@:DEALLOCATE(x_coords)'
5657# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5658
5659# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5660 call flush (output_unit)
5661# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5662 end block
5663# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5664#endif
5665# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5666
5667# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5668#if defined(MFC_OpenACC)
5669# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5670!$acc exit data delete(x_coords)
5671# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5672#elif defined(MFC_OpenMP)
5673# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5674!$omp target exit data map(release:x_coords)
5675# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5676#endif
5677# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5678 deallocate (x_coords)
5679# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5680 end if
5681# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5682
5683# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5684 if (allocated(y_coords)) then
5685# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5686#ifdef MFC_DEBUG
5687# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5688 block
5689# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5690 use iso_fortran_env, only: output_unit
5691# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5692
5693# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5694 print *, 'm_icpp_patches.fpp:450: ', '@:DEALLOCATE(y_coords)'
5695# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5696
5697# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5698 call flush (output_unit)
5699# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5700 end block
5701# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5702#endif
5703# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5704
5705# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5706#if defined(MFC_OpenACC)
5707# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5708!$acc exit data delete(y_coords)
5709# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5710#elif defined(MFC_OpenMP)
5711# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5712!$omp target exit data map(release:y_coords)
5713# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5714#endif
5715# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5716 deallocate (y_coords)
5717# 450 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5718 end if
5719
5720 end subroutine s_icpp_3dvarcircle
5721
5722 !> The elliptical patch is a 2D geometry. The geometry of the patch is well-defined when its centroid and radii are provided.
5723 !! Note that the elliptical patch DOES allow for the smoothing of its boundary
5724 subroutine s_icpp_ellipse(patch_id, patch_id_fp, q_prim_vf)
5725
5726 integer, intent(in) :: patch_id
5727
5728#ifdef MFC_MIXED_PRECISION
5729 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
5730#else
5731 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
5732#endif
5733 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
5734 integer :: i, j, k !< Generic loop operators
5735 real(wp) :: a, b
5736
5737 integer :: xRows, yRows, nRows, iix, iiy, max_files
5738# 469 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5739 integer :: f, iter, ios, ios2, unit, unit2, idx, idy, index_x, index_y, jump, line_count, ycount
5740# 469 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5741 real(wp) :: x_len, x_step, y_len, y_step
5742# 469 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5743 real(wp) :: dummy_x, dummy_y, dummy_z, x0, y0
5744# 469 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5745 integer :: global_offset_x, global_offset_y !< MPI subdomain offset
5746# 469 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5747 real(wp) :: delta_x, delta_y
5748# 469 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5749 character(len=100), dimension(sys_size) :: fileNames !< Arrays to store all data from files
5750# 469 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5751 character(len=200) :: errmsg
5752# 469 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5753 real(wp), allocatable :: stored_values(:,:,:)
5754# 469 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5755 real(wp), allocatable :: x_coords(:), y_coords(:)
5756# 469 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5757 logical :: files_loaded = .false.
5758# 469 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5759 real(wp) :: domain_xstart, domain_xend, domain_ystart, domain_yend
5760# 469 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5761 character(len=*), parameter :: init_dir = "/home/MFC/FilesDirectory" !< For example /home/MFC/examples/1D_Shock/D/
5762# 469 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5763 character(len=20) :: file_num_str !< For storing the file number as a string
5764# 469 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5765 character(len=20) :: zeros_part !< For the trailing zeros part
5766# 469 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5767 character(len=6), parameter :: zeros_default = "000000" !< Default zeros (can be changed)
5768 ! Place any declaration of intermediate variables here
5769# 470 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5770 real(wp) :: eps, eps_mhd, C_mhd
5771# 470 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5772 real(wp) :: r, rmax, gam, umax, p0
5773# 470 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5774 real(wp) :: rhoH, rhoL, pRef, pInt, h, lam, wl, amp, intH, intL, alph
5775# 470 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5776 real(wp) :: factor
5777# 470 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5778 real(wp) :: r0, alpha, r2
5779# 470 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5780 real(wp) :: sinA, cosA
5781# 470 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5782 real(wp) :: r_sq
5783# 470 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5784
5785# 470 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5786 ! # 291 - Shear/Thermal Layer Case
5787# 470 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5788 real(wp) :: delta_shear, u_max, u_mean
5789# 470 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5790 real(wp) :: T_wall, T_inf, P_atm, T_loc
5791# 470 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5792 real(wp) :: delta_th, R_mix
5793# 470 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5794 real(wp) :: Y_N2, Y_O2, MW_N2, MW_O2
5795# 470 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5796 real(wp) :: bottom_blend_u, bottom_blend_T
5797# 470 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5798
5799# 470 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5800 ! # 207
5801# 470 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5802 real(wp) :: sigma, gauss1, gauss2
5803# 470 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5804
5805# 470 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5806 ! # 208
5807# 470 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5808 real(wp) :: ei, d, fsm, alpha_air, alpha_sf6
5809# 470 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5810
5811# 470 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5812 eps = 1.e-9_wp
5813
5814 ! Transferring the elliptical patch's radii, centroid, smearing patch identity, and smearing coefficient information
5815 x_centroid = patch_icpp(patch_id)%x_centroid
5816 y_centroid = patch_icpp(patch_id)%y_centroid
5817 a = patch_icpp(patch_id)%radii(1)
5818 b = patch_icpp(patch_id)%radii(2)
5819 smooth_patch_id = patch_icpp(patch_id)%smooth_patch_id
5820 smooth_coeff = patch_icpp(patch_id)%smooth_coeff
5821
5822 ! Initialize eta=1; modified if smoothing is enabled
5823 eta = 1._wp
5824
5825 ! Assign patch vars if cell is covered and patch has write permission
5826 do j = 0, n
5827 do i = 0, m
5828 if (patch_icpp(patch_id)%smoothen) then
5829 eta = tanh(smooth_coeff/min(dx, &
5830 & dy)*(sqrt(((x_cc(i) - x_centroid)/a)**2 + ((y_cc(j) - y_centroid)/b)**2) - 1._wp))*(-0.5_wp) &
5831 & + 0.5_wp
5832 end if
5833
5834 if ((((x_cc(i) - x_centroid)/a)**2 + ((y_cc(j) - y_centroid)/b)**2 <= 1._wp .and. patch_icpp(patch_id) &
5835 & %alter_patch(patch_id_fp(i, j, 0))) .or. patch_id_fp(i, j, 0) == smooth_patch_id) then
5836 call s_assign_patch_primitive_variables(patch_id, i, j, 0, eta, q_prim_vf, patch_id_fp)
5837
5838
5839 if (patch_icpp(patch_id)%hcid /= dflt_int) then
5840 select case (patch_icpp(patch_id)%hcid) ! 2D_hardcoded_ic example case
5841# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5842 case (200) ! Two-fluid cubic interface
5843# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5844 if (y_cc(j) <= (-x_cc(i)**3 + 1)**(1._wp/3._wp)) then
5845# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5846 ! Volume Fractions
5847# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5848 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = eps
5849# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5850 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = 1._wp - eps
5851# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5852 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = eps*1000._wp
5853# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5854 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = (1._wp - eps)*1._wp
5855# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5856 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1000._wp
5857# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5858 end if
5859# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5860 case (202) ! Gresho vortex (Gouasmi et al 2022 JCP)
5861# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5862 r = ((x_cc(i) - 0.5_wp)**2 + (y_cc(j) - 0.5_wp)**2)**0.5_wp
5863# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5864 rmax = 0.2_wp
5865# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5866
5867# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5868 gam = 1._wp + 1._wp/fluid_pp(1)%gamma
5869# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5870 umax = 2*pi*rmax*patch_icpp(patch_id)%vel(2)
5871# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5872 p0 = umax**2*(1._wp/(gam*patch_icpp(patch_id)%vel(2)**2) - 0.5_wp)
5873# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5874
5875# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5876 if (r < rmax) then
5877# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5878 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -(y_cc(j) - 0.5_wp)*umax/rmax
5879# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5880 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = (x_cc(i) - 0.5_wp)*umax/rmax
5881# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5882 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*((r/rmax)**2._wp/2._wp)
5883# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5884 else if (r < 2*rmax) then
5885# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5886 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -((y_cc(j) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
5887# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5888 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = ((x_cc(i) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
5889# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5890 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*((r/rmax)**2/2._wp + 4*(1 - (r/rmax) + log(r/rmax)))
5891# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5892 else
5893# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5894 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 0._wp
5895# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5896 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0._wp
5897# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5898 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*(-2 + 4*log(2._wp))
5899# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5900 end if
5901# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5902 case (203) ! Gresho vortex (Gouasmi et al 2022 JCP) with density correction
5903# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5904 r = ((x_cc(i) - 0.5_wp)**2._wp + (y_cc(j) - 0.5_wp)**2)**0.5_wp
5905# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5906 rmax = 0.2_wp
5907# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5908
5909# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5910 gam = 1._wp + 1._wp/fluid_pp(1)%gamma
5911# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5912 umax = 2*pi*rmax*patch_icpp(patch_id)%vel(2)
5913# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5914 p0 = umax**2*(1._wp/(gam*patch_icpp(patch_id)%vel(2)**2) - 0.5_wp)
5915# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5916
5917# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5918 if (r < rmax) then
5919# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5920 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -(y_cc(j) - 0.5_wp)*umax/rmax
5921# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5922 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = (x_cc(i) - 0.5_wp)*umax/rmax
5923# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5924 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*((r/rmax)**2._wp/2._wp)
5925# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5926 else if (r < 2*rmax) then
5927# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5928 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -((y_cc(j) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
5929# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5930 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = ((x_cc(i) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
5931# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5932 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*((r/rmax)**2/2._wp + 4._wp*(1._wp - (r/rmax) + log(r/rmax)))
5933# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5934 else
5935# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5936 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 0._wp
5937# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5938 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0._wp
5939# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5940 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2._wp*(-2._wp + 4*log(2._wp))
5941# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5942 end if
5943# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5944
5945# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5946 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = q_prim_vf(eqn_idx%E)%sf(i, j, 0)**(1._wp/gam)
5947# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5948 case (204) ! Rayleigh-Taylor instability
5949# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5950 rhoh = 3._wp
5951# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5952 rhol = 1._wp
5953# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5954 pref = 1.e5_wp
5955# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5956 pint = pref
5957# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5958 h = 0.7_wp
5959# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5960 lam = 0.2_wp
5961# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5962 wl = 2._wp*pi/lam
5963# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5964 amp = 0.05_wp/wl
5965# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5966
5967# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5968 inth = amp*sin(2._wp*pi*x_cc(i)/lam - pi/2._wp) + h
5969# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5970
5971# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5972 alph = 0.5_wp*(1._wp + tanh((y_cc(j) - inth)/2.5e-3_wp))
5973# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5974
5975# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5976 if (alph < eps) alph = eps
5977# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5978 if (alph > 1._wp - eps) alph = 1._wp - eps
5979# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5980
5981# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5982 if (y_cc(j) > inth) then
5983# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5984 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = alph
5985# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5986 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = 1._wp - alph
5987# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5988 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = alph*rhoh
5989# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5990 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = (1._wp - alph)*rhol
5991# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5992 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = pref + rhoh*9.81_wp*(1.2_wp - y_cc(j))
5993# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5994 else
5995# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5996 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = alph
5997# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5998 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = 1._wp - alph
5999# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6000 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = alph*rhoh
6001# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6002 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = (1._wp - alph)*rhol
6003# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6004 pint = pref + rhoh*9.81_wp*(1.2_wp - inth)
6005# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6006 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = pint + rhol*9.81_wp*(inth - y_cc(j))
6007# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6008 end if
6009# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6010 case (205) ! 2D lung wave interaction problem
6011# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6012 h = 0.0_wp ! non dim origin y
6013# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6014 lam = 1.0_wp ! non dim lambda
6015# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6016 amp = patch_icpp(patch_id)%a(2) ! to be changed later! !non dim amplitude
6017# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6018
6019# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6020 inth = amp*sin(2*pi*x_cc(i)/lam - pi/2) + h
6021# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6022
6023# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6024 if (y_cc(j) > inth) then
6025# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6026 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(1)
6027# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6028 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(2)
6029# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6030 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = patch_icpp(1)%pres
6031# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6032 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = patch_icpp(1)%alpha(1)
6033# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6034 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = patch_icpp(1)%alpha(2)
6035# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6036 end if
6037# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6038 case (206) ! 2D lung wave interaction problem - horizontal domain
6039# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6040 h = 0.0_wp ! non dim origin y
6041# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6042 lam = 1.0_wp ! non dim lambda
6043# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6044 amp = patch_icpp(patch_id)%a(2)
6045# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6046
6047# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6048 intl = amp*sin(2*pi*y_cc(j)/lam - pi/2) + h
6049# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6050
6051# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6052 if (x_cc(i) > intl) then ! this is the liquid
6053# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6054 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(1)
6055# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6056 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(2)
6057# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6058 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = patch_icpp(1)%pres
6059# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6060 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = patch_icpp(1)%alpha(1)
6061# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6062 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = patch_icpp(1)%alpha(2)
6063# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6064 end if
6065# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6066 case (207) ! Kelvin Helmholtz Instability
6067# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6068 sigma = 0.05_wp/sqrt(2.0_wp)
6069# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6070 gauss1 = exp(-(y_cc(j) - 0.75_wp)**2/(2.0_wp*sigma**2))
6071# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6072 gauss2 = exp(-(y_cc(j) - 0.25_wp)**2/(2.0_wp*sigma**2))
6073# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6074 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = 0.1_wp*sin(4.0_wp*pi*x_cc(i))*(gauss1 + gauss2)
6075# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6076 case (208) ! Richtmeyer Meshkov Instability
6077# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6078 lam = 1.0_wp
6079# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6080 eps = 1.0e-6_wp
6081# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6082 ei = 5.0_wp
6083# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6084 ! Smoothening function to smooth out sharp discontinuity in the interface
6085# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6086 if (x_cc(i) <= 0.7_wp*lam) then
6087# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6088 d = x_cc(i) - lam*(0.4_wp - 0.1_wp*sin(2.0_wp*pi*(y_cc(j)/lam + 0.25_wp)))
6089# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6090 fsm = 0.5_wp*(1.0_wp + erf(d/(ei*sqrt(dx*dy))))
6091# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6092 alpha_air = eps + (1.0_wp - 2.0_wp*eps)*fsm
6093# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6094 alpha_sf6 = 1.0_wp - alpha_air
6095# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6096 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = alpha_sf6*5.04_wp
6097# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6098 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = alpha_air*1.0_wp
6099# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6100 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = alpha_sf6
6101# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6102 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = alpha_air
6103# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6104 end if
6105# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6106 case (250) ! MHD Orszag-Tang vortex
6107# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6108 ! gamma = 5/3 rho = 25/(36*pi) p = 5/(12*pi) v = (-sin(2*pi*y), sin(2*pi*x), 0) B = (-sin(2*pi*y)/sqrt(4*pi),
6109# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6110 ! sin(4*pi*x)/sqrt(4*pi), 0)
6111# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6112
6113# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6114 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -sin(2._wp*pi*y_cc(j))
6115# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6116 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = sin(2._wp*pi*x_cc(i))
6117# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6118
6119# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6120 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = -sin(2._wp*pi*y_cc(j))/sqrt(4._wp*pi)
6121# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6122 q_prim_vf(eqn_idx%B%beg + 1)%sf(i, j, 0) = sin(4._wp*pi*x_cc(i))/sqrt(4._wp*pi)
6123# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6124 case (251) ! RMHD Cylindrical Blast Wave [Mignone, 2006: Section 4.3.1]
6125# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6126 if (x_cc(i)**2 + y_cc(j)**2 < 0.08_wp**2) then
6127# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6128 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 0.01
6129# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6130 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1.0
6131# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6132 else if (x_cc(i)**2 + y_cc(j)**2 <= 1._wp**2) then
6133# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6134 ! Linear interpolation between r=0.08 and r=1.0
6135# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6136 factor = (1.0_wp - sqrt(x_cc(i)**2 + y_cc(j)**2))/(1.0_wp - 0.08_wp)
6137# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6138 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 0.01_wp*factor + 1.e-4_wp*(1.0_wp - factor)
6139# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6140 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1.0_wp*factor + 3.e-5_wp*(1.0_wp - factor)
6141# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6142 else
6143# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6144 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1.e-4_wp
6145# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6146 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 3.e-5_wp
6147# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6148 end if
6149# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6150
6151# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6152 ! case 252 is for the 2D MHD Rotor problem
6153# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6154 case (252) ! 2D MHD Rotor Problem
6155# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6156 ! Ambient conditions are set in the JSON file. This case imposes the dense, rotating cylinder.
6157# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6158 !
6159# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6160 ! gamma = 1.4 Ambient medium (r > 0.1): rho = 1, p = 1, v = 0, B = (1,0,0) Rotor (r <= 0.1): rho = 10, p = 1 v has angular
6161# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6162 ! velocity w=20, giving v_tan=2 at r=0.1
6163# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6164
6165# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6166 ! Calculate distance squared from the center
6167# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6168 r_sq = (x_cc(i) - 0.5_wp)**2 + (y_cc(j) - 0.5_wp)**2
6169# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6170
6171# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6172 ! inner radius of 0.1
6173# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6174 if (r_sq <= 0.1**2) then
6175# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6176 ! -- Inside the rotor -- Set density uniformly to 10
6177# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6178 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 10._wp
6179# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6180
6181# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6182 ! Set vup constant rotation of rate v=2 v_x = -omega * (y - y_c) v_y = omega * (x - x_c)
6183# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6184 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -20._wp*(y_cc(j) - 0.5_wp)
6185# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6186 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = 20._wp*(x_cc(i) - 0.5_wp)
6187# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6188
6189# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6190 ! taper width of 0.015
6191# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6192 else if (r_sq <= 0.115**2) then
6193# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6194 ! linearly smooth the function between r = 0.1 and 0.115
6195# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6196 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1._wp + 9._wp*(0.115_wp - sqrt(r_sq))/(0.015_wp)
6197# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6198
6199# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6200 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -(2._wp/sqrt(r_sq))*(y_cc(j) - 0.5_wp)*(0.115_wp - sqrt(r_sq))/(0.015_wp)
6201# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6202 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = (2._wp/sqrt(r_sq))*(x_cc(i) - 0.5_wp)*(0.115_wp - sqrt(r_sq))/(0.015_wp)
6203# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6204 end if
6205# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6206 case (253) ! MHD Smooth Magnetic Vortex
6207# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6208 ! Section 5.2 of Implicit hybridized discontinuous Galerkin methods for compressible magnetohydrodynamics C. Ciuca, P.
6209# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6210 ! Fernandez, A. Christophe, N.C. Nguyen, J. Peraire
6211# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6212
6213# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6214 ! velocity
6215# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6216 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 1._wp - (y_cc(j)*exp(1 - (x_cc(i)**2 + y_cc(j)**2))/(2.*pi))
6217# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6218 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = 1._wp + (x_cc(i)*exp(1 - (x_cc(i)**2 + y_cc(j)**2))/(2.*pi))
6219# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6220
6221# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6222 ! magnetic field
6223# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6224 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = -y_cc(j)*exp(1 - (x_cc(i)**2 + y_cc(j)**2))/(2.*pi)
6225# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6226 q_prim_vf(eqn_idx%B%beg + 1)%sf(i, j, 0) = x_cc(i)*exp(1 - (x_cc(i)**2 + y_cc(j)**2))/(2.*pi)
6227# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6228
6229# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6230 ! pressure
6231# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6232 q_prim_vf(eqn_idx%E)%sf(i, j, &
6233# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6234 & 0) = 1._wp + (1 - 2._wp*(x_cc(i)**2 + y_cc(j)**2))*exp(1 - (x_cc(i)**2 + y_cc(j)**2))/((2._wp*pi)**3)
6235# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6236 case (260) ! Gaussian Divergence Pulse
6237# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6238 ! Bx(x) = 1 + C * erf((x-0.5)/\sigma) => \partialBx/\partialx = C * (2/\sqrt\pi) * exp[-((x-0.5)/\sigma)**2] * (1/\sigma)
6239# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6240 ! Choose C = \epsilon * \sigma * \sqrt\pi / 2 => \partialBx/\partialx = \epsilon * exp[-((x-0.5)/\sigma)**2] \psi is
6241# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6242 ! initialized to zero everywhere.
6243# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6244
6245# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6246 eps_mhd = patch_icpp(patch_id)%a(2)
6247# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6248 sigma = patch_icpp(patch_id)%a(3)
6249# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6250 c_mhd = eps_mhd*sigma*sqrt(pi)*0.5_wp
6251# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6252
6253# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6254 ! B-field
6255# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6256 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = 1._wp + c_mhd*erf((x_cc(i) - 0.5_wp)/sigma)
6257# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6258 case (261) ! Blob
6259# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6260 r0 = 1._wp/sqrt(8._wp)
6261# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6262 r2 = x_cc(i)**2 + y_cc(j)**2
6263# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6264 r = sqrt(r2)
6265# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6266 alpha = r/r0
6267# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6268 if (alpha < 1) then
6269# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6270 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = 1._wp/sqrt(4._wp*pi)*(alpha**8 - 2._wp*alpha**4 + 1._wp)
6271# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6272 ! q_prim_vf(eqn_idx%B%beg)%sf(i,j,0) = 1._wp/sqrt(4000._wp*pi) * (4096._wp*r2**4 - 128._wp*r2**2 + 1._wp)
6273# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6274 ! q_prim_vf(eqn_idx%B%beg)%sf(i,j,0) = 1._wp/(4._wp*pi) * (alpha**8 - 2._wp*alpha**4 + 1._wp)
6275# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6276 ! q_prim_vf(eqn_idx%E)%sf(i,j,0) = 6._wp - q_prim_vf(eqn_idx%B%beg)%sf(i,j,0)**2/2._wp
6277# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6278 end if
6279# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6280 case (262) ! Tilted 2D MHD shock‐tube at α = arctan2 (≈63.4°)
6281# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6282 ! rotate by \alpha = atan(2)
6283# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6284 alpha = atan(2._wp)
6285# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6286 cosa = cos(alpha)
6287# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6288 sina = sin(alpha)
6289# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6290 ! projection along shock normal
6291# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6292 r = x_cc(i)*cosa + y_cc(j)*sina
6293# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6294
6295# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6296 if (r <= 0.5_wp) then
6297# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6298 ! LEFT state: \rho=1, v\parallel=+10, v\perp=0, p=20, B\parallel=B\perp=5/\sqrt(4\pi)
6299# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6300 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1._wp
6301# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6302 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 10._wp*cosa
6303# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6304 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = 10._wp*sina
6305# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6306 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 20._wp
6307# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6308 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = (5._wp/sqrt(4._wp*pi))*cosa - (5._wp/sqrt(4._wp*pi))*sina
6309# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6310 q_prim_vf(eqn_idx%B%beg + 1)%sf(i, j, 0) = (5._wp/sqrt(4._wp*pi))*sina + (5._wp/sqrt(4._wp*pi))*cosa
6311# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6312 else
6313# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6314 ! RIGHT state: \rho=1, v\parallel=-10, v\perp=0, p=1, B\parallel=B\perp=5/\sqrt(4\pi)
6315# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6316 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1._wp
6317# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6318 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -10._wp*cosa
6319# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6320 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = -10._wp*sina
6321# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6322 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1._wp
6323# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6324 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = (5._wp/sqrt(4._wp*pi))*cosa - (5._wp/sqrt(4._wp*pi))*sina
6325# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6326 q_prim_vf(eqn_idx%B%beg + 1)%sf(i, j, 0) = (5._wp/sqrt(4._wp*pi))*sina + (5._wp/sqrt(4._wp*pi))*cosa
6327# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6328 end if
6329# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6330 ! v^z and B^z remain zero by default
6331# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6332 case (270) ! 2D extrusion of 1D profile from external data
6333# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6334 ! This hardcoded case extrudes a 1D profile to initialize a 2D simulation domain
6335# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6336 if (.not. files_loaded) then
6337# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6338 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
6339# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6340 do f = 1, max_files
6341# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6342 write (file_num_str, '(I0)') f
6343# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6344 filenames(f) = trim(init_dir) // "prim." // trim(file_num_str) // ".00." // zeros_default // ".dat"
6345# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6346 end do
6347# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6348
6349# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6350 ! Common file reading setup
6351# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6352 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
6353# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6354 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
6355# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6356
6357# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6358 select case (num_dims)
6359# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6360 case (1, 2) ! 1D and 2D cases are similar
6361# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6362 ! Count lines
6363# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6364 line_count = 0
6365# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6366 do
6367# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6368 read (unit2, *, iostat=ios2) dummy_x, dummy_y
6369# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6370 if (ios2 /= 0) exit
6371# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6372 line_count = line_count + 1
6373# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6374 end do
6375# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6376 close (unit2)
6377# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6378
6379# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6380 xrows = line_count
6381# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6382 yrows = 1
6383# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6384 index_x = 0
6385# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6386 if (num_dims == 2) index_x = i
6387# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6388#ifdef MFC_DEBUG
6389# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6390 block
6391# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6392 use iso_fortran_env, only: output_unit
6393# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6394
6395# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6396 print *, 'm_icpp_patches.fpp:498: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
6397# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6398
6399# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6400 call flush (output_unit)
6401# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6402 end block
6403# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6404#endif
6405# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6406 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
6407# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6408
6409# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6410
6411# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6412
6413# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6414#if defined(MFC_OpenACC)
6415# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6416!$acc enter data create(x_coords, stored_values)
6417# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6418#elif defined(MFC_OpenMP)
6419# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6420!$omp target enter data map(always,alloc:x_coords, stored_values)
6421# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6422#endif
6423# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6424
6425# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6426 ! Read data from all files
6427# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6428 do f = 1, max_files
6429# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6430 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
6431# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6432 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
6433# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6434
6435# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6436 do iter = 1, xrows
6437# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6438 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
6439# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6440 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
6441# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6442 end do
6443# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6444 close (unit)
6445# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6446 end do
6447# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6448
6449# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6450 ! Calculate offsets
6451# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6452 domain_xstart = x_coords(1)
6453# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6454 x_step = x_cc(1) - x_cc(0)
6455# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6456 delta_x = merge(x_cc(0) - domain_xstart + x_step/2.0, x_cc(index_x) - domain_xstart + x_step/2.0, num_dims == 1)
6457# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6458 global_offset_x = nint(abs(delta_x)/x_step)
6459# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6460 case (3) ! 3D case - determine grid structure
6461# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6462 ! Find yRows by counting rows with same x
6463# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6464 read (unit2, *, iostat=ios2) x0, y0, dummy_z
6465# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6466 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
6467# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6468
6469# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6470 yrows = 1
6471# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6472 do
6473# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6474 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
6475# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6476 if (ios2 /= 0) exit
6477# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6478 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
6479# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6480 yrows = yrows + 1
6481# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6482 else
6483# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6484 exit
6485# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6486 end if
6487# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6488 end do
6489# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6490 close (unit2)
6491# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6492
6493# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6494 ! Count total rows
6495# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6496 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
6497# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6498 nrows = 0
6499# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6500 do
6501# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6502 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
6503# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6504 if (ios2 /= 0) exit
6505# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6506 nrows = nrows + 1
6507# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6508 end do
6509# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6510 close (unit2)
6511# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6512
6513# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6514 xrows = nrows/yrows
6515# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6516#ifdef MFC_DEBUG
6517# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6518 block
6519# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6520 use iso_fortran_env, only: output_unit
6521# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6522
6523# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6524 print *, 'm_icpp_patches.fpp:498: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
6525# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6526
6527# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6528 call flush (output_unit)
6529# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6530 end block
6531# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6532#endif
6533# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6534 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
6535# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6536
6537# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6538
6539# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6540
6541# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6542
6543# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6544#if defined(MFC_OpenACC)
6545# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6546!$acc enter data create(x_coords, y_coords, stored_values)
6547# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6548#elif defined(MFC_OpenMP)
6549# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6550!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
6551# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6552#endif
6553# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6554 index_x = i
6555# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6556 index_y = j
6557# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6558
6559# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6560 ! Read all files
6561# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6562 do f = 1, max_files
6563# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6564 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
6565# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6566 if (ios /= 0) then
6567# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6568 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
6569# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6570 cycle
6571# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6572 end if
6573# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6574
6575# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6576 iter = 0
6577# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6578 do iix = 1, xrows
6579# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6580 do iiy = 1, yrows
6581# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6582 iter = iter + 1
6583# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6584 if (f == 1) then
6585# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6586 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
6587# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6588 else
6589# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6590 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
6591# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6592 end if
6593# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6594 if (ios /= 0) call s_mpi_abort("Error reading data")
6595# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6596 end do
6597# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6598 end do
6599# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6600 close (unit)
6601# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6602 end do
6603# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6604
6605# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6606 ! Calculate offsets
6607# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6608 x_step = x_cc(1) - x_cc(0)
6609# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6610 y_step = y_cc(1) - y_cc(0)
6611# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6612 delta_x = x_cc(index_x) - x_coords(1) + x_step/2.0_wp
6613# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6614 delta_y = y_cc(index_y) - y_coords(1) + y_step/2.0_wp
6615# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6616 global_offset_x = nint(abs(delta_x)/x_step)
6617# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6618 global_offset_y = nint(abs(delta_y)/y_step)
6619# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6620 end select
6621# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6622
6623# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6624 files_loaded = .true.
6625# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6626 end if
6627# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6628
6629# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6630 ! Data assignment
6631# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6632 select case (num_dims)
6633# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6634 case (1)
6635# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6636 idx = i + 1 + global_offset_x
6637# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6638 do f = 1, sys_size
6639# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6640 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
6641# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6642 end do
6643# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6644 case (2)
6645# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6646 idx = i + 1 + global_offset_x - index_x
6647# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6648 do f = 1, sys_size - 1
6649# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6650 jump = merge(1, 0, f >= eqn_idx%mom%end)
6651# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6652 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
6653# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6654 end do
6655# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6656 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
6657# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6658 case (3)
6659# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6660 idx = i + 1 + global_offset_x - index_x
6661# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6662 idy = j + 1 + global_offset_y - index_y
6663# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6664 do f = 1, sys_size - 1
6665# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6666 jump = merge(1, 0, f >= eqn_idx%mom%end)
6667# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6668 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
6669# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6670 end do
6671# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6672 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
6673# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6674 end select
6675# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6676 case (280) ! Isentropic vortex
6677# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6678 ! This is patch is hard-coded for test suite optimization used in the 2D_isentropicvortex case: This analytic patch uses
6679# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6680 ! geometry 2
6681# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6682 if (patch_id == 1) then
6683# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6684 q_prim_vf(eqn_idx%E)%sf(i, j, &
6685# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6686 & 0) = 1.0*(1.0 - (1.0/1.0)*(5.0/(2.0*pi))*(5.0/(8.0*1.0*(1.4 + 1.0)*pi))*exp(2.0*1.0*(1.0 - (x_cc(i) &
6687# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6688 & - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0)))**(1.4 + 1.0)
6689# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6690 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, j, &
6691# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6692 & 0) = 1.0*(1.0 - (1.0/1.0)*(5.0/(2.0*pi))*(5.0/(8.0*1.0*(1.4 + 1.0)*pi))*exp(2.0*1.0*(1.0 - (x_cc(i) &
6693# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6694 & - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0)))**1.4
6695# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6696 q_prim_vf(eqn_idx%mom%beg + 0)%sf(i, j, &
6697# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6698 & 0) = 0.0 + (y_cc(j) - patch_icpp(1)%y_centroid)*(5.0/(2.0*pi))*exp(1.0*(1.0 - (x_cc(i) - patch_icpp(1) &
6699# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6700 & %x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0))
6701# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6702 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, &
6703# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6704 & 0) = 0.0 - (x_cc(i) - patch_icpp(1)%x_centroid)*(5.0/(2.0*pi))*exp(1.0*(1.0 - (x_cc(i) - patch_icpp(1) &
6705# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6706 & %x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0))
6707# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6708 end if
6709# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6710 case (281) ! Acoustic pulse
6711# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6712 ! This is patch is hard-coded for test suite optimization used in the 2D_acoustic_pulse case: This analytic patch uses
6713# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6714 ! geometry 2
6715# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6716 if (patch_id == 2) then
6717# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6718 q_prim_vf(eqn_idx%E)%sf(i, j, &
6719# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6720 & 0) = 101325*(1 - 0.5*(1.4 - 1)*(0.4)**2*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2))))**(1.4/(1.4 - 1))
6721# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6722 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, j, &
6723# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6724 & 0) = 1*(1 - 0.5*(1.4 - 1)*(0.4)**2*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2))))**(1/(1.4 - 1))
6725# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6726 end if
6727# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6728 case (282) ! Zero-circulation vortex
6729# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6730 ! This is patch is hard-coded for test suite optimization used in the 2D_zero_circ_vortex case: This analytic patch uses
6731# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6732 ! geometry 2
6733# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6734 if (patch_id == 2) then
6735# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6736 q_prim_vf(eqn_idx%E)%sf(i, j, &
6737# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6738 & 0) = 101325*(1 - 0.5*(1.4 - 1)*(0.1/0.3)**2*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2))))**(1.4/(1.4 - 1))
6739# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6740 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, j, &
6741# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6742 & 0) = 1*(1 - 0.5*(1.4 - 1)*(0.1/0.3)**2*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2))))**(1/(1.4 - 1))
6743# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6744 q_prim_vf(eqn_idx%mom%beg + 0)%sf(i, j, &
6745# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6746 & 0) = 112.99092883944267*(1 - (0.1/0.3))*y_cc(j)*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2)))
6747# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6748 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, &
6749# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6750 & 0) = 112.99092883944267*((0.1/0.3))*x_cc(i)*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2)))
6751# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6752 end if
6753# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6754 case (291) ! Isothermal Flat Plate
6755# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6756 t_inf = 1125.0_wp
6757# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6758 t_wall = 600.0_wp
6759# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6760 p_atm = 101325.0_wp
6761# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6762
6763# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6764 ! Boundary/Shear Layer thicknesses
6765# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6766 delta_th = 0.0003_wp ! Thermal BL thickness
6767# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6768 delta_shear = 8e-3_wp ! Velocity BL thickness
6769# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6770
6771# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6772 u_max = 50.0_wp ! Freestream Velocity (m/s)
6773# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6774
6775# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6776 mw_n2 = 28.0134e-3_wp
6777# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6778 mw_o2 = 31.999e-3_wp
6779# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6780 y_n2 = 0.767_wp
6781# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6782 y_o2 = 0.233_wp
6783# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6784 r_mix = 8.314462618_wp*((y_n2/mw_n2) + (y_o2/mw_o2))
6785# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6786 bottom_blend_u = tanh(y_cc(j)/delta_shear)
6787# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6788 bottom_blend_t = tanh(y_cc(j)/delta_th)
6789# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6790 u_mean = u_max*bottom_blend_u
6791# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6792 t_loc = t_wall + (t_inf - t_wall)*bottom_blend_t
6793# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6794 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = p_atm/(r_mix*t_loc)
6795# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6796 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = u_mean
6797# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6798 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
6799# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6800 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p_atm
6801# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6802 q_prim_vf(eqn_idx%species%beg)%sf(i, j, 0) = y_o2
6803# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6804 q_prim_vf(eqn_idx%species%end)%sf(i, j, 0) = y_n2
6805# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6806 case default
6807# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6808 if (proc_rank == 0) then
6809# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6810 call s_int_to_str(patch_id, istr)
6811# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6812 call s_mpi_abort("Invalid hcid specified for patch " // trim(istr))
6813# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6814 end if
6815# 498 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6816 end select
6817 end if
6818
6819 ! Updating the patch identities bookkeeping variable
6820 if (1._wp - eta < sgm_eps) patch_id_fp(i, j, 0) = patch_id
6821 end if
6822 end do
6823 end do
6824 if (allocated(stored_values)) then
6825# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6826#ifdef MFC_DEBUG
6827# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6828 block
6829# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6830 use iso_fortran_env, only: output_unit
6831# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6832
6833# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6834 print *, 'm_icpp_patches.fpp:506: ', '@:DEALLOCATE(stored_values)'
6835# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6836
6837# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6838 call flush (output_unit)
6839# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6840 end block
6841# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6842#endif
6843# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6844
6845# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6846#if defined(MFC_OpenACC)
6847# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6848!$acc exit data delete(stored_values)
6849# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6850#elif defined(MFC_OpenMP)
6851# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6852!$omp target exit data map(release:stored_values)
6853# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6854#endif
6855# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6856 deallocate (stored_values)
6857# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6858#ifdef MFC_DEBUG
6859# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6860 block
6861# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6862 use iso_fortran_env, only: output_unit
6863# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6864
6865# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6866 print *, 'm_icpp_patches.fpp:506: ', '@:DEALLOCATE(x_coords)'
6867# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6868
6869# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6870 call flush (output_unit)
6871# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6872 end block
6873# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6874#endif
6875# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6876
6877# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6878#if defined(MFC_OpenACC)
6879# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6880!$acc exit data delete(x_coords)
6881# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6882#elif defined(MFC_OpenMP)
6883# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6884!$omp target exit data map(release:x_coords)
6885# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6886#endif
6887# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6888 deallocate (x_coords)
6889# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6890 end if
6891# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6892
6893# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6894 if (allocated(y_coords)) then
6895# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6896#ifdef MFC_DEBUG
6897# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6898 block
6899# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6900 use iso_fortran_env, only: output_unit
6901# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6902
6903# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6904 print *, 'm_icpp_patches.fpp:506: ', '@:DEALLOCATE(y_coords)'
6905# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6906
6907# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6908 call flush (output_unit)
6909# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6910 end block
6911# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6912#endif
6913# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6914
6915# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6916#if defined(MFC_OpenACC)
6917# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6918!$acc exit data delete(y_coords)
6919# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6920#elif defined(MFC_OpenMP)
6921# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6922!$omp target exit data map(release:y_coords)
6923# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6924#endif
6925# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6926 deallocate (y_coords)
6927# 506 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6928 end if
6929
6930 end subroutine s_icpp_ellipse
6931
6932 !> The ellipsoidal patch is a 3D geometry. The geometry of the patch is well-defined when its centroid and radii are provided.
6933 !! Note that the ellipsoidal patch DOES allow for the smoothing of its boundary
6934 subroutine s_icpp_ellipsoid(patch_id, patch_id_fp, q_prim_vf)
6935
6936 ! Patch identifier
6937 integer, intent(in) :: patch_id
6938
6939#ifdef MFC_MIXED_PRECISION
6940 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
6941#else
6942 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
6943#endif
6944 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
6945
6946 ! Generic loop iterators
6947 integer :: i, j, k
6948 real(wp) :: a, b, c
6949
6950 integer :: xRows, yRows, nRows, iix, iiy, max_files
6951# 528 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6952 integer :: f, iter, ios, ios2, unit, unit2, idx, idy, index_x, index_y, jump, line_count, ycount
6953# 528 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6954 real(wp) :: x_len, x_step, y_len, y_step
6955# 528 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6956 real(wp) :: dummy_x, dummy_y, dummy_z, x0, y0
6957# 528 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6958 integer :: global_offset_x, global_offset_y !< MPI subdomain offset
6959# 528 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6960 real(wp) :: delta_x, delta_y
6961# 528 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6962 character(len=100), dimension(sys_size) :: fileNames !< Arrays to store all data from files
6963# 528 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6964 character(len=200) :: errmsg
6965# 528 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6966 real(wp), allocatable :: stored_values(:,:,:)
6967# 528 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6968 real(wp), allocatable :: x_coords(:), y_coords(:)
6969# 528 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6970 logical :: files_loaded = .false.
6971# 528 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6972 real(wp) :: domain_xstart, domain_xend, domain_ystart, domain_yend
6973# 528 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6974 character(len=*), parameter :: init_dir = "/home/MFC/FilesDirectory" !< For example /home/MFC/examples/1D_Shock/D/
6975# 528 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6976 character(len=20) :: file_num_str !< For storing the file number as a string
6977# 528 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6978 character(len=20) :: zeros_part !< For the trailing zeros part
6979# 528 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6980 character(len=6), parameter :: zeros_default = "000000" !< Default zeros (can be changed)
6981 ! Place any declaration of intermediate variables here
6982# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6983 real(wp) :: rhoH, rhoL, pRef, pInt, h, lam, wl, amp, intH, alph, Mach
6984# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6985 real(wp) :: eps
6986# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6987
6988# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6989 ! IGR Jets Arrays to stor position and radii of jets from input file
6990# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6991 real(wp), dimension(:), allocatable :: y_th_arr, z_th_arr, r_th_arr
6992# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6993 ! Variables to describe initial condition of jet
6994# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6995 real(wp) :: r, ux_th, ux_am, p_th, p_am, rho_th, rho_am, y_th, z_th, r_th, eps_smooth
6996# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6997 real(wp) :: rcut, xcut !< Intermediate variables for creating smooth initial condition
6998# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6999 real(wp), dimension(0:n,0:p) :: rcut_arr
7000# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7001 integer :: l, q, s !< Iterators for reading input files
7002# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7003 integer :: start, end !< Ints to keep track of position in file
7004# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7005 character(len=1000) :: line !< String to store line in file
7006# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7007 character(len=25) :: value !< String to store value in line
7008# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7009 integer :: NJet !< Number of jets
7010# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7011
7012# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7013 eps = 1e-9_wp
7014# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7015
7016# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7017 if (patch_icpp(patch_id)%hcid == 303) then
7018# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7019 eps_smooth = 3._wp
7020# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7021 open (unit=10, file="njet.txt", status="old", action="read")
7022# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7023 read (10, *) njet
7024# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7025 close (10)
7026# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7027
7028# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7029 allocate (y_th_arr(0:njet - 1))
7030# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7031 allocate (z_th_arr(0:njet - 1))
7032# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7033 allocate (r_th_arr(0:njet - 1))
7034# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7035
7036# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7037 open (unit=10, file="jets.csv", status="old", action="read")
7038# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7039 do q = 0, njet - 1
7040# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7041 read (10, '(A)') line ! Read a full line as a string
7042# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7043 start = 1
7044# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7045
7046# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7047 do l = 0, 2
7048# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7049 end = index(line(start:), ',') ! Find the next comma
7050# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7051 if (end == 0) then
7052# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7053 value = trim(adjustl(line(start:))) ! Last value in the line
7054# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7055 else
7056# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7057 value = trim(adjustl(line(start:start + end - 2))) ! Extract substring
7058# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7059 start = start + end ! Move to next value
7060# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7061 end if
7062# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7063 if (l == 0) then
7064# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7065 read (value, *) y_th_arr(q) ! Convert string to numeric value
7066# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7067 else if (l == 1) then
7068# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7069 read (value, *) z_th_arr(q)
7070# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7071 else
7072# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7073 read (value, *) r_th_arr(q)
7074# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7075 end if
7076# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7077 end do
7078# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7079 end do
7080# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7081 close (10)
7082# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7083
7084# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7085 do q = 0, p
7086# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7087 do l = 0, n
7088# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7089 rcut = 0._wp
7090# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7091 do s = 0, njet - 1
7092# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7093 r = sqrt((y_cc(l) - y_th_arr(s))**2._wp + (z_cc(q) - z_th_arr(s))**2._wp)
7094# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7095 rcut = rcut + f_cut_on(r - r_th_arr(s), eps_smooth)
7096# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7097 end do
7098# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7099 rcut_arr(l, q) = rcut
7100# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7101 end do
7102# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7103 end do
7104# 529 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7105 end if
7106
7107 ! Transferring the ellipsoidal patch's radii, centroid, smearing patch identity, and smearing coefficient information
7108 x_centroid = patch_icpp(patch_id)%x_centroid
7109 y_centroid = patch_icpp(patch_id)%y_centroid
7110 z_centroid = patch_icpp(patch_id)%z_centroid
7111 a = patch_icpp(patch_id)%radii(1)
7112 b = patch_icpp(patch_id)%radii(2)
7113 c = patch_icpp(patch_id)%radii(3)
7114 smooth_patch_id = patch_icpp(patch_id)%smooth_patch_id
7115 smooth_coeff = patch_icpp(patch_id)%smooth_coeff
7116
7117 ! Initialize eta=1; modified if smoothing is enabled
7118 eta = 1._wp
7119
7120 ! Assign patch vars if cell is covered and patch has write permission
7121 do k = 0, p
7122 do j = 0, n
7123 do i = 0, m
7124 if (grid_geometry == 3) then
7126 else
7127 cart_y = y_cc(j)
7128 cart_z = z_cc(k)
7129 end if
7130
7131 if (patch_icpp(patch_id)%smoothen) then
7132 eta = tanh(smooth_coeff/min(dx, dy, &
7133 & dz)*(sqrt(((x_cc(i) - x_centroid)/a)**2 + ((cart_y - y_centroid)/b)**2 + ((cart_z &
7134 & - z_centroid)/c)**2) - 1._wp))*(-0.5_wp) + 0.5_wp
7135 end if
7136
7137 if ((((x_cc(i) - x_centroid)/a)**2 + ((cart_y - y_centroid)/b)**2 + ((cart_z - z_centroid)/c) &
7138 & **2 <= 1._wp .and. patch_icpp(patch_id)%alter_patch(patch_id_fp(i, j, k))) .or. patch_id_fp(i, j, &
7139 & k) == smooth_patch_id) then
7140 call s_assign_patch_primitive_variables(patch_id, i, j, k, eta, q_prim_vf, patch_id_fp)
7141
7142
7143 if (patch_icpp(patch_id)%hcid /= dflt_int) then
7144 select case (patch_icpp(patch_id)%hcid)
7145# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7146 case (300) ! Rayleigh-Taylor instability
7147# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7148 rhoh = 3._wp
7149# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7150 rhol = 1._wp
7151# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7152 pref = 1.e5_wp
7153# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7154 pint = pref
7155# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7156 h = 0.7_wp
7157# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7158 lam = 0.2_wp
7159# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7160 wl = 2._wp*pi/lam
7161# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7162 amp = 0.025_wp/wl
7163# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7164
7165# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7166 inth = amp*(sin(2._wp*pi*x_cc(i)/lam - pi/2._wp) + sin(2._wp*pi*z_cc(k)/lam - pi/2._wp)) + h
7167# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7168
7169# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7170 alph = 5.e-1_wp*(1._wp + tanh((y_cc(j) - inth)/2.5e-3_wp))
7171# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7172
7173# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7174 if (alph < eps) alph = eps
7175# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7176 if (alph > 1._wp - eps) alph = 1._wp - eps
7177# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7178
7179# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7180 if (y_cc(j) > inth) then
7181# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7182 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
7183# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7184 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
7185# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7186 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = alph*rhoh
7187# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7188 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = (1._wp - alph)*rhol
7189# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7190 q_prim_vf(eqn_idx%E)%sf(i, j, k) = pref + rhoh*9.81_wp*(1.2_wp - y_cc(j))
7191# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7192 else
7193# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7194 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
7195# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7196 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
7197# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7198 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = alph*rhoh
7199# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7200 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = (1._wp - alph)*rhol
7201# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7202 pint = pref + rhoh*9.81_wp*(1.2_wp - inth)
7203# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7204 q_prim_vf(eqn_idx%E)%sf(i, j, k) = pint + rhol*9.81_wp*(inth - y_cc(j))
7205# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7206 end if
7207# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7208 case (301) ! (3D lung geometry in X direction, |sin(*)+sin(*)|)
7209# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7210 h = 0.0_wp
7211# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7212 lam = 1.0_wp
7213# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7214 amp = patch_icpp(patch_id)%a(2)
7215# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7216 inth = amp*abs((sin(2*pi*y_cc(j)/lam - pi/2) + sin(2*pi*z_cc(k)/lam - pi/2)) + h)
7217# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7218 if (x_cc(i) > inth) then
7219# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7220 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = patch_icpp(1)%alpha_rho(1)
7221# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7222 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = patch_icpp(1)%alpha_rho(2)
7223# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7224 q_prim_vf(eqn_idx%E)%sf(i, j, k) = patch_icpp(1)%pres
7225# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7226 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = patch_icpp(1)%alpha(1)
7227# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7228 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = patch_icpp(1)%alpha(2)
7229# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7230 end if
7231# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7232 case (302) ! 3D Jet with IGR
7233# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7234 ux_th = 10*sqrt(1.4*0.4)
7235# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7236 ux_am = 0.0*sqrt(1.4)
7237# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7238 p_th = 2.0_wp
7239# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7240 p_am = 1.0_wp
7241# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7242 rho_th = 1._wp
7243# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7244 rho_am = 1._wp
7245# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7246 y_th = 0.0_wp
7247# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7248 z_th = 0.0_wp
7249# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7250 r_th = 1._wp
7251# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7252 eps_smooth = 1._wp
7253# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7254 eps = 1e-6
7255# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7256
7257# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7258 r = sqrt((y_cc(j) - y_th)**2._wp + (z_cc(k) - z_th)**2._wp)
7259# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7260 rcut = f_cut_on(r - r_th, eps_smooth)
7261# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7262 xcut = f_cut_on(x_cc(i), eps_smooth)
7263# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7264
7265# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7266 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, k) = ux_th*rcut*xcut + ux_am
7267# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7268 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, k) = 0._wp
7269# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7270 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0._wp
7271# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7272
7273# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7274 if (num_fluids == 1) then
7275# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7276 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = (rho_th - rho_am)*rcut*xcut + rho_am
7277# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7278 else
7279# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7280 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = (1._wp - 2._wp*eps)*rcut*xcut + eps
7281# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7282 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = rho_th*q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)
7283# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7284 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = rho_am*(1._wp - q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k))
7285# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7286 end if
7287# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7288
7289# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7290 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p_th*rcut*xcut + p_am
7291# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7292 case (303) ! 3D Multijet
7293# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7294 eps_smooth = 3.0_wp
7295# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7296 ux_th = 10*sqrt(1.4*0.4)
7297# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7298 ux_am = 2.5*sqrt(1.4*0.4)
7299# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7300 p_th = 0.8_wp
7301# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7302 p_am = 0.4_wp
7303# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7304 rho_th = 1._wp
7305# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7306 rho_am = 1._wp
7307# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7308 eps = 1e-6
7309# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7310
7311# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7312 rcut = rcut_arr(j, k)
7313# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7314 xcut = f_cut_on(x_cc(i), eps_smooth)
7315# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7316
7317# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7318 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, k) = ux_th*rcut*xcut + ux_am
7319# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7320 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, k) = 0._wp
7321# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7322 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0._wp
7323# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7324
7325# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7326 if (num_fluids == 1) then
7327# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7328 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = (rho_th - rho_am)*rcut*xcut + rho_am
7329# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7330 else
7331# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7332 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = (1._wp - 2._wp*eps)*rcut*xcut + eps
7333# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7334 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = rho_th*q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)
7335# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7336 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = rho_am*(1._wp - q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k))
7337# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7338 end if
7339# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7340
7341# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7342 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p_th*rcut*xcut + p_am
7343# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7344 case (370) ! 3D extrusion of 2D profile from external data
7345# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7346 ! This hardcoded case extrudes a 2D profile to initialize a 3D simulation domain
7347# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7348 if (.not. files_loaded) then
7349# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7350 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
7351# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7352 do f = 1, max_files
7353# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7354 write (file_num_str, '(I0)') f
7355# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7356 filenames(f) = trim(init_dir) // "prim." // trim(file_num_str) // ".00." // zeros_default // ".dat"
7357# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7358 end do
7359# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7360
7361# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7362 ! Common file reading setup
7363# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7364 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
7365# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7366 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
7367# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7368
7369# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7370 select case (num_dims)
7371# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7372 case (1, 2) ! 1D and 2D cases are similar
7373# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7374 ! Count lines
7375# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7376 line_count = 0
7377# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7378 do
7379# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7380 read (unit2, *, iostat=ios2) dummy_x, dummy_y
7381# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7382 if (ios2 /= 0) exit
7383# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7384 line_count = line_count + 1
7385# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7386 end do
7387# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7388 close (unit2)
7389# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7390
7391# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7392 xrows = line_count
7393# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7394 yrows = 1
7395# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7396 index_x = 0
7397# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7398 if (num_dims == 2) index_x = i
7399# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7400#ifdef MFC_DEBUG
7401# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7402 block
7403# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7404 use iso_fortran_env, only: output_unit
7405# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7406
7407# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7408 print *, 'm_icpp_patches.fpp:568: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
7409# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7410
7411# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7412 call flush (output_unit)
7413# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7414 end block
7415# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7416#endif
7417# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7418 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
7419# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7420
7421# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7422
7423# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7424
7425# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7426#if defined(MFC_OpenACC)
7427# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7428!$acc enter data create(x_coords, stored_values)
7429# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7430#elif defined(MFC_OpenMP)
7431# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7432!$omp target enter data map(always,alloc:x_coords, stored_values)
7433# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7434#endif
7435# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7436
7437# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7438 ! Read data from all files
7439# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7440 do f = 1, max_files
7441# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7442 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
7443# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7444 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
7445# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7446
7447# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7448 do iter = 1, xrows
7449# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7450 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
7451# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7452 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
7453# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7454 end do
7455# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7456 close (unit)
7457# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7458 end do
7459# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7460
7461# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7462 ! Calculate offsets
7463# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7464 domain_xstart = x_coords(1)
7465# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7466 x_step = x_cc(1) - x_cc(0)
7467# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7468 delta_x = merge(x_cc(0) - domain_xstart + x_step/2.0, x_cc(index_x) - domain_xstart + x_step/2.0, num_dims == 1)
7469# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7470 global_offset_x = nint(abs(delta_x)/x_step)
7471# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7472 case (3) ! 3D case - determine grid structure
7473# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7474 ! Find yRows by counting rows with same x
7475# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7476 read (unit2, *, iostat=ios2) x0, y0, dummy_z
7477# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7478 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
7479# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7480
7481# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7482 yrows = 1
7483# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7484 do
7485# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7486 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
7487# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7488 if (ios2 /= 0) exit
7489# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7490 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
7491# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7492 yrows = yrows + 1
7493# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7494 else
7495# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7496 exit
7497# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7498 end if
7499# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7500 end do
7501# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7502 close (unit2)
7503# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7504
7505# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7506 ! Count total rows
7507# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7508 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
7509# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7510 nrows = 0
7511# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7512 do
7513# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7514 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
7515# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7516 if (ios2 /= 0) exit
7517# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7518 nrows = nrows + 1
7519# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7520 end do
7521# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7522 close (unit2)
7523# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7524
7525# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7526 xrows = nrows/yrows
7527# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7528#ifdef MFC_DEBUG
7529# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7530 block
7531# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7532 use iso_fortran_env, only: output_unit
7533# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7534
7535# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7536 print *, 'm_icpp_patches.fpp:568: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
7537# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7538
7539# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7540 call flush (output_unit)
7541# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7542 end block
7543# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7544#endif
7545# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7546 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
7547# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7548
7549# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7550
7551# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7552
7553# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7554
7555# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7556#if defined(MFC_OpenACC)
7557# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7558!$acc enter data create(x_coords, y_coords, stored_values)
7559# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7560#elif defined(MFC_OpenMP)
7561# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7562!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
7563# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7564#endif
7565# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7566 index_x = i
7567# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7568 index_y = j
7569# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7570
7571# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7572 ! Read all files
7573# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7574 do f = 1, max_files
7575# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7576 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
7577# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7578 if (ios /= 0) then
7579# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7580 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
7581# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7582 cycle
7583# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7584 end if
7585# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7586
7587# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7588 iter = 0
7589# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7590 do iix = 1, xrows
7591# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7592 do iiy = 1, yrows
7593# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7594 iter = iter + 1
7595# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7596 if (f == 1) then
7597# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7598 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
7599# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7600 else
7601# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7602 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
7603# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7604 end if
7605# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7606 if (ios /= 0) call s_mpi_abort("Error reading data")
7607# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7608 end do
7609# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7610 end do
7611# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7612 close (unit)
7613# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7614 end do
7615# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7616
7617# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7618 ! Calculate offsets
7619# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7620 x_step = x_cc(1) - x_cc(0)
7621# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7622 y_step = y_cc(1) - y_cc(0)
7623# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7624 delta_x = x_cc(index_x) - x_coords(1) + x_step/2.0_wp
7625# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7626 delta_y = y_cc(index_y) - y_coords(1) + y_step/2.0_wp
7627# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7628 global_offset_x = nint(abs(delta_x)/x_step)
7629# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7630 global_offset_y = nint(abs(delta_y)/y_step)
7631# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7632 end select
7633# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7634
7635# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7636 files_loaded = .true.
7637# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7638 end if
7639# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7640
7641# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7642 ! Data assignment
7643# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7644 select case (num_dims)
7645# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7646 case (1)
7647# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7648 idx = i + 1 + global_offset_x
7649# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7650 do f = 1, sys_size
7651# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7652 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
7653# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7654 end do
7655# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7656 case (2)
7657# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7658 idx = i + 1 + global_offset_x - index_x
7659# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7660 do f = 1, sys_size - 1
7661# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7662 jump = merge(1, 0, f >= eqn_idx%mom%end)
7663# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7664 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
7665# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7666 end do
7667# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7668 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
7669# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7670 case (3)
7671# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7672 idx = i + 1 + global_offset_x - index_x
7673# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7674 idy = j + 1 + global_offset_y - index_y
7675# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7676 do f = 1, sys_size - 1
7677# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7678 jump = merge(1, 0, f >= eqn_idx%mom%end)
7679# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7680 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
7681# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7682 end do
7683# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7684 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
7685# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7686 end select
7687# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7688 case (380) ! Taylor-Green vortex
7689# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7690 ! This is patch is hard-coded for test suite optimization used in the 3D_TaylorGreenVortex case: This analytic patch used
7691# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7692 ! geometry 9
7693# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7694 mach = 0.1
7695# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7696 if (patch_id == 1) then
7697# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7698 q_prim_vf(eqn_idx%E)%sf(i, j, &
7699# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7700 & k) = 101325 + (mach**2*376.636429464809**2/16)*(cos(2*x_cc(i)/1) + cos(2*y_cc(j)/1))*(cos(2*z_cc(k)/1) + 2)
7701# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7702 q_prim_vf(eqn_idx%mom%beg + 0)%sf(i, j, k) = mach*376.636429464809*sin(x_cc(i)/1)*cos(y_cc(j)/1)*sin(z_cc(k)/1)
7703# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7704 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, k) = -mach*376.636429464809*cos(x_cc(i)/1)*sin(y_cc(j)/1)*sin(z_cc(k)/1)
7705# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7706 end if
7707# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7708 case default
7709# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7710 call s_int_to_str(patch_id, istr)
7711# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7712 call s_mpi_abort("Invalid hcid specified for patch " // trim(istr))
7713# 568 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7714 end select
7715 end if
7716
7717 ! Updating the patch identities bookkeeping variable
7718 if (1._wp - eta < sgm_eps) patch_id_fp(i, j, k) = patch_id
7719 end if
7720 end do
7721 end do
7722 end do
7723 if (allocated(stored_values)) then
7724# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7725#ifdef MFC_DEBUG
7726# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7727 block
7728# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7729 use iso_fortran_env, only: output_unit
7730# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7731
7732# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7733 print *, 'm_icpp_patches.fpp:577: ', '@:DEALLOCATE(stored_values)'
7734# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7735
7736# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7737 call flush (output_unit)
7738# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7739 end block
7740# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7741#endif
7742# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7743
7744# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7745#if defined(MFC_OpenACC)
7746# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7747!$acc exit data delete(stored_values)
7748# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7749#elif defined(MFC_OpenMP)
7750# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7751!$omp target exit data map(release:stored_values)
7752# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7753#endif
7754# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7755 deallocate (stored_values)
7756# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7757#ifdef MFC_DEBUG
7758# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7759 block
7760# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7761 use iso_fortran_env, only: output_unit
7762# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7763
7764# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7765 print *, 'm_icpp_patches.fpp:577: ', '@:DEALLOCATE(x_coords)'
7766# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7767
7768# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7769 call flush (output_unit)
7770# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7771 end block
7772# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7773#endif
7774# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7775
7776# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7777#if defined(MFC_OpenACC)
7778# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7779!$acc exit data delete(x_coords)
7780# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7781#elif defined(MFC_OpenMP)
7782# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7783!$omp target exit data map(release:x_coords)
7784# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7785#endif
7786# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7787 deallocate (x_coords)
7788# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7789 end if
7790# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7791
7792# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7793 if (allocated(y_coords)) then
7794# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7795#ifdef MFC_DEBUG
7796# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7797 block
7798# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7799 use iso_fortran_env, only: output_unit
7800# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7801
7802# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7803 print *, 'm_icpp_patches.fpp:577: ', '@:DEALLOCATE(y_coords)'
7804# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7805
7806# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7807 call flush (output_unit)
7808# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7809 end block
7810# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7811#endif
7812# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7813
7814# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7815#if defined(MFC_OpenACC)
7816# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7817!$acc exit data delete(y_coords)
7818# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7819#elif defined(MFC_OpenMP)
7820# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7821!$omp target exit data map(release:y_coords)
7822# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7823#endif
7824# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7825 deallocate (y_coords)
7826# 577 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7827 end if
7828
7829 end subroutine s_icpp_ellipsoid
7830
7831 !> The rectangular patch is a 2D geometry that may be used, for example, in creating a solid boundary, or pre-/post- shock
7832 !! region, in alignment with the axes of the Cartesian coordinate system. The geometry of such a patch is well- defined when its
7833 !! centroid and lengths in the x- and y- coordinate directions are provided. Please note that the rectangular patch DOES NOT
7834 !! allow for the smoothing of its boundaries.
7835 subroutine s_icpp_rectangle(patch_id, patch_id_fp, q_prim_vf)
7836
7837 integer, intent(in) :: patch_id
7838
7839#ifdef MFC_MIXED_PRECISION
7840 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
7841#else
7842 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
7843#endif
7844 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
7845 integer :: i, j, k !< generic loop iterators
7846 real(wp) :: pi_inf, gamma, lit_gamma !< Equation of state parameters
7847
7848 integer :: xRows, yRows, nRows, iix, iiy, max_files
7849# 598 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7850 integer :: f, iter, ios, ios2, unit, unit2, idx, idy, index_x, index_y, jump, line_count, ycount
7851# 598 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7852 real(wp) :: x_len, x_step, y_len, y_step
7853# 598 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7854 real(wp) :: dummy_x, dummy_y, dummy_z, x0, y0
7855# 598 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7856 integer :: global_offset_x, global_offset_y !< MPI subdomain offset
7857# 598 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7858 real(wp) :: delta_x, delta_y
7859# 598 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7860 character(len=100), dimension(sys_size) :: fileNames !< Arrays to store all data from files
7861# 598 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7862 character(len=200) :: errmsg
7863# 598 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7864 real(wp), allocatable :: stored_values(:,:,:)
7865# 598 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7866 real(wp), allocatable :: x_coords(:), y_coords(:)
7867# 598 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7868 logical :: files_loaded = .false.
7869# 598 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7870 real(wp) :: domain_xstart, domain_xend, domain_ystart, domain_yend
7871# 598 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7872 character(len=*), parameter :: init_dir = "/home/MFC/FilesDirectory" !< For example /home/MFC/examples/1D_Shock/D/
7873# 598 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7874 character(len=20) :: file_num_str !< For storing the file number as a string
7875# 598 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7876 character(len=20) :: zeros_part !< For the trailing zeros part
7877# 598 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7878 character(len=6), parameter :: zeros_default = "000000" !< Default zeros (can be changed)
7879 ! Place any declaration of intermediate variables here
7880# 599 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7881 real(wp) :: eps, eps_mhd, C_mhd
7882# 599 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7883 real(wp) :: r, rmax, gam, umax, p0
7884# 599 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7885 real(wp) :: rhoH, rhoL, pRef, pInt, h, lam, wl, amp, intH, intL, alph
7886# 599 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7887 real(wp) :: factor
7888# 599 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7889 real(wp) :: r0, alpha, r2
7890# 599 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7891 real(wp) :: sinA, cosA
7892# 599 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7893 real(wp) :: r_sq
7894# 599 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7895
7896# 599 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7897 ! # 291 - Shear/Thermal Layer Case
7898# 599 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7899 real(wp) :: delta_shear, u_max, u_mean
7900# 599 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7901 real(wp) :: T_wall, T_inf, P_atm, T_loc
7902# 599 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7903 real(wp) :: delta_th, R_mix
7904# 599 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7905 real(wp) :: Y_N2, Y_O2, MW_N2, MW_O2
7906# 599 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7907 real(wp) :: bottom_blend_u, bottom_blend_T
7908# 599 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7909
7910# 599 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7911 ! # 207
7912# 599 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7913 real(wp) :: sigma, gauss1, gauss2
7914# 599 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7915
7916# 599 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7917 ! # 208
7918# 599 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7919 real(wp) :: ei, d, fsm, alpha_air, alpha_sf6
7920# 599 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7921
7922# 599 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7923 eps = 1.e-9_wp
7924
7925 pi_inf = pi_infs(1)
7926 gamma = gammas(1)
7927 lit_gamma = gs_min(1)
7928
7929 ! Transferring the rectangle's centroid and length information
7930 x_centroid = patch_icpp(patch_id)%x_centroid
7931 y_centroid = patch_icpp(patch_id)%y_centroid
7932 length_x = patch_icpp(patch_id)%length_x
7933 length_y = patch_icpp(patch_id)%length_y
7934
7935 ! Computing the beginning and the end x- and y-coordinates of the rectangle based on its centroid and lengths
7936 x_boundary%beg = x_centroid - 0.5_wp*length_x
7937 x_boundary%end = x_centroid + 0.5_wp*length_x
7938 y_boundary%beg = y_centroid - 0.5_wp*length_y
7939 y_boundary%end = y_centroid + 0.5_wp*length_y
7940
7941 ! Set eta=1 (no smoothing for this patch type)
7942 eta = 1._wp
7943
7944 ! Assign patch vars if cell is covered and patch has write permission
7945 do j = 0, n
7946 do i = 0, m
7947 if (x_boundary%beg <= x_cc(i) .and. x_boundary%end >= x_cc(i) .and. y_boundary%beg <= y_cc(j) &
7948 & .and. y_boundary%end >= y_cc(j)) then
7949 if (patch_icpp(patch_id)%alter_patch(patch_id_fp(i, j, 0))) then
7950 call s_assign_patch_primitive_variables(patch_id, i, j, 0, eta, q_prim_vf, patch_id_fp)
7951
7952
7953
7954 if (patch_icpp(patch_id)%hcid /= dflt_int) then
7955 select case (patch_icpp(patch_id)%hcid) ! 2D_hardcoded_ic example case
7956# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7957 case (200) ! Two-fluid cubic interface
7958# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7959 if (y_cc(j) <= (-x_cc(i)**3 + 1)**(1._wp/3._wp)) then
7960# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7961 ! Volume Fractions
7962# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7963 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = eps
7964# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7965 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = 1._wp - eps
7966# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7967 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = eps*1000._wp
7968# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7969 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = (1._wp - eps)*1._wp
7970# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7971 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1000._wp
7972# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7973 end if
7974# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7975 case (202) ! Gresho vortex (Gouasmi et al 2022 JCP)
7976# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7977 r = ((x_cc(i) - 0.5_wp)**2 + (y_cc(j) - 0.5_wp)**2)**0.5_wp
7978# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7979 rmax = 0.2_wp
7980# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7981
7982# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7983 gam = 1._wp + 1._wp/fluid_pp(1)%gamma
7984# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7985 umax = 2*pi*rmax*patch_icpp(patch_id)%vel(2)
7986# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7987 p0 = umax**2*(1._wp/(gam*patch_icpp(patch_id)%vel(2)**2) - 0.5_wp)
7988# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7989
7990# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7991 if (r < rmax) then
7992# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7993 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -(y_cc(j) - 0.5_wp)*umax/rmax
7994# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7995 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = (x_cc(i) - 0.5_wp)*umax/rmax
7996# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7997 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*((r/rmax)**2._wp/2._wp)
7998# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7999 else if (r < 2*rmax) then
8000# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8001 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -((y_cc(j) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
8002# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8003 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = ((x_cc(i) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
8004# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8005 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*((r/rmax)**2/2._wp + 4*(1 - (r/rmax) + log(r/rmax)))
8006# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8007 else
8008# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8009 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 0._wp
8010# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8011 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0._wp
8012# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8013 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*(-2 + 4*log(2._wp))
8014# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8015 end if
8016# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8017 case (203) ! Gresho vortex (Gouasmi et al 2022 JCP) with density correction
8018# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8019 r = ((x_cc(i) - 0.5_wp)**2._wp + (y_cc(j) - 0.5_wp)**2)**0.5_wp
8020# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8021 rmax = 0.2_wp
8022# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8023
8024# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8025 gam = 1._wp + 1._wp/fluid_pp(1)%gamma
8026# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8027 umax = 2*pi*rmax*patch_icpp(patch_id)%vel(2)
8028# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8029 p0 = umax**2*(1._wp/(gam*patch_icpp(patch_id)%vel(2)**2) - 0.5_wp)
8030# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8031
8032# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8033 if (r < rmax) then
8034# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8035 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -(y_cc(j) - 0.5_wp)*umax/rmax
8036# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8037 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = (x_cc(i) - 0.5_wp)*umax/rmax
8038# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8039 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*((r/rmax)**2._wp/2._wp)
8040# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8041 else if (r < 2*rmax) then
8042# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8043 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -((y_cc(j) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
8044# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8045 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = ((x_cc(i) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
8046# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8047 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*((r/rmax)**2/2._wp + 4._wp*(1._wp - (r/rmax) + log(r/rmax)))
8048# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8049 else
8050# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8051 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 0._wp
8052# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8053 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0._wp
8054# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8055 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2._wp*(-2._wp + 4*log(2._wp))
8056# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8057 end if
8058# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8059
8060# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8061 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = q_prim_vf(eqn_idx%E)%sf(i, j, 0)**(1._wp/gam)
8062# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8063 case (204) ! Rayleigh-Taylor instability
8064# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8065 rhoh = 3._wp
8066# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8067 rhol = 1._wp
8068# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8069 pref = 1.e5_wp
8070# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8071 pint = pref
8072# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8073 h = 0.7_wp
8074# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8075 lam = 0.2_wp
8076# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8077 wl = 2._wp*pi/lam
8078# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8079 amp = 0.05_wp/wl
8080# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8081
8082# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8083 inth = amp*sin(2._wp*pi*x_cc(i)/lam - pi/2._wp) + h
8084# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8085
8086# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8087 alph = 0.5_wp*(1._wp + tanh((y_cc(j) - inth)/2.5e-3_wp))
8088# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8089
8090# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8091 if (alph < eps) alph = eps
8092# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8093 if (alph > 1._wp - eps) alph = 1._wp - eps
8094# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8095
8096# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8097 if (y_cc(j) > inth) then
8098# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8099 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = alph
8100# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8101 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = 1._wp - alph
8102# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8103 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = alph*rhoh
8104# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8105 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = (1._wp - alph)*rhol
8106# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8107 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = pref + rhoh*9.81_wp*(1.2_wp - y_cc(j))
8108# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8109 else
8110# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8111 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = alph
8112# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8113 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = 1._wp - alph
8114# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8115 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = alph*rhoh
8116# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8117 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = (1._wp - alph)*rhol
8118# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8119 pint = pref + rhoh*9.81_wp*(1.2_wp - inth)
8120# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8121 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = pint + rhol*9.81_wp*(inth - y_cc(j))
8122# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8123 end if
8124# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8125 case (205) ! 2D lung wave interaction problem
8126# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8127 h = 0.0_wp ! non dim origin y
8128# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8129 lam = 1.0_wp ! non dim lambda
8130# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8131 amp = patch_icpp(patch_id)%a(2) ! to be changed later! !non dim amplitude
8132# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8133
8134# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8135 inth = amp*sin(2*pi*x_cc(i)/lam - pi/2) + h
8136# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8137
8138# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8139 if (y_cc(j) > inth) then
8140# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8141 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(1)
8142# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8143 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(2)
8144# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8145 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = patch_icpp(1)%pres
8146# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8147 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = patch_icpp(1)%alpha(1)
8148# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8149 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = patch_icpp(1)%alpha(2)
8150# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8151 end if
8152# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8153 case (206) ! 2D lung wave interaction problem - horizontal domain
8154# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8155 h = 0.0_wp ! non dim origin y
8156# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8157 lam = 1.0_wp ! non dim lambda
8158# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8159 amp = patch_icpp(patch_id)%a(2)
8160# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8161
8162# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8163 intl = amp*sin(2*pi*y_cc(j)/lam - pi/2) + h
8164# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8165
8166# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8167 if (x_cc(i) > intl) then ! this is the liquid
8168# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8169 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(1)
8170# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8171 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(2)
8172# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8173 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = patch_icpp(1)%pres
8174# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8175 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = patch_icpp(1)%alpha(1)
8176# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8177 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = patch_icpp(1)%alpha(2)
8178# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8179 end if
8180# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8181 case (207) ! Kelvin Helmholtz Instability
8182# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8183 sigma = 0.05_wp/sqrt(2.0_wp)
8184# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8185 gauss1 = exp(-(y_cc(j) - 0.75_wp)**2/(2.0_wp*sigma**2))
8186# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8187 gauss2 = exp(-(y_cc(j) - 0.25_wp)**2/(2.0_wp*sigma**2))
8188# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8189 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = 0.1_wp*sin(4.0_wp*pi*x_cc(i))*(gauss1 + gauss2)
8190# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8191 case (208) ! Richtmeyer Meshkov Instability
8192# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8193 lam = 1.0_wp
8194# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8195 eps = 1.0e-6_wp
8196# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8197 ei = 5.0_wp
8198# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8199 ! Smoothening function to smooth out sharp discontinuity in the interface
8200# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8201 if (x_cc(i) <= 0.7_wp*lam) then
8202# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8203 d = x_cc(i) - lam*(0.4_wp - 0.1_wp*sin(2.0_wp*pi*(y_cc(j)/lam + 0.25_wp)))
8204# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8205 fsm = 0.5_wp*(1.0_wp + erf(d/(ei*sqrt(dx*dy))))
8206# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8207 alpha_air = eps + (1.0_wp - 2.0_wp*eps)*fsm
8208# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8209 alpha_sf6 = 1.0_wp - alpha_air
8210# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8211 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = alpha_sf6*5.04_wp
8212# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8213 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = alpha_air*1.0_wp
8214# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8215 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = alpha_sf6
8216# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8217 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = alpha_air
8218# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8219 end if
8220# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8221 case (250) ! MHD Orszag-Tang vortex
8222# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8223 ! gamma = 5/3 rho = 25/(36*pi) p = 5/(12*pi) v = (-sin(2*pi*y), sin(2*pi*x), 0) B = (-sin(2*pi*y)/sqrt(4*pi),
8224# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8225 ! sin(4*pi*x)/sqrt(4*pi), 0)
8226# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8227
8228# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8229 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -sin(2._wp*pi*y_cc(j))
8230# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8231 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = sin(2._wp*pi*x_cc(i))
8232# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8233
8234# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8235 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = -sin(2._wp*pi*y_cc(j))/sqrt(4._wp*pi)
8236# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8237 q_prim_vf(eqn_idx%B%beg + 1)%sf(i, j, 0) = sin(4._wp*pi*x_cc(i))/sqrt(4._wp*pi)
8238# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8239 case (251) ! RMHD Cylindrical Blast Wave [Mignone, 2006: Section 4.3.1]
8240# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8241 if (x_cc(i)**2 + y_cc(j)**2 < 0.08_wp**2) then
8242# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8243 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 0.01
8244# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8245 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1.0
8246# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8247 else if (x_cc(i)**2 + y_cc(j)**2 <= 1._wp**2) then
8248# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8249 ! Linear interpolation between r=0.08 and r=1.0
8250# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8251 factor = (1.0_wp - sqrt(x_cc(i)**2 + y_cc(j)**2))/(1.0_wp - 0.08_wp)
8252# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8253 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 0.01_wp*factor + 1.e-4_wp*(1.0_wp - factor)
8254# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8255 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1.0_wp*factor + 3.e-5_wp*(1.0_wp - factor)
8256# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8257 else
8258# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8259 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1.e-4_wp
8260# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8261 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 3.e-5_wp
8262# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8263 end if
8264# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8265
8266# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8267 ! case 252 is for the 2D MHD Rotor problem
8268# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8269 case (252) ! 2D MHD Rotor Problem
8270# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8271 ! Ambient conditions are set in the JSON file. This case imposes the dense, rotating cylinder.
8272# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8273 !
8274# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8275 ! gamma = 1.4 Ambient medium (r > 0.1): rho = 1, p = 1, v = 0, B = (1,0,0) Rotor (r <= 0.1): rho = 10, p = 1 v has angular
8276# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8277 ! velocity w=20, giving v_tan=2 at r=0.1
8278# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8279
8280# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8281 ! Calculate distance squared from the center
8282# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8283 r_sq = (x_cc(i) - 0.5_wp)**2 + (y_cc(j) - 0.5_wp)**2
8284# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8285
8286# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8287 ! inner radius of 0.1
8288# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8289 if (r_sq <= 0.1**2) then
8290# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8291 ! -- Inside the rotor -- Set density uniformly to 10
8292# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8293 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 10._wp
8294# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8295
8296# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8297 ! Set vup constant rotation of rate v=2 v_x = -omega * (y - y_c) v_y = omega * (x - x_c)
8298# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8299 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -20._wp*(y_cc(j) - 0.5_wp)
8300# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8301 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = 20._wp*(x_cc(i) - 0.5_wp)
8302# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8303
8304# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8305 ! taper width of 0.015
8306# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8307 else if (r_sq <= 0.115**2) then
8308# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8309 ! linearly smooth the function between r = 0.1 and 0.115
8310# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8311 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1._wp + 9._wp*(0.115_wp - sqrt(r_sq))/(0.015_wp)
8312# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8313
8314# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8315 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -(2._wp/sqrt(r_sq))*(y_cc(j) - 0.5_wp)*(0.115_wp - sqrt(r_sq))/(0.015_wp)
8316# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8317 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = (2._wp/sqrt(r_sq))*(x_cc(i) - 0.5_wp)*(0.115_wp - sqrt(r_sq))/(0.015_wp)
8318# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8319 end if
8320# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8321 case (253) ! MHD Smooth Magnetic Vortex
8322# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8323 ! Section 5.2 of Implicit hybridized discontinuous Galerkin methods for compressible magnetohydrodynamics C. Ciuca, P.
8324# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8325 ! Fernandez, A. Christophe, N.C. Nguyen, J. Peraire
8326# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8327
8328# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8329 ! velocity
8330# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8331 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 1._wp - (y_cc(j)*exp(1 - (x_cc(i)**2 + y_cc(j)**2))/(2.*pi))
8332# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8333 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = 1._wp + (x_cc(i)*exp(1 - (x_cc(i)**2 + y_cc(j)**2))/(2.*pi))
8334# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8335
8336# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8337 ! magnetic field
8338# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8339 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = -y_cc(j)*exp(1 - (x_cc(i)**2 + y_cc(j)**2))/(2.*pi)
8340# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8341 q_prim_vf(eqn_idx%B%beg + 1)%sf(i, j, 0) = x_cc(i)*exp(1 - (x_cc(i)**2 + y_cc(j)**2))/(2.*pi)
8342# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8343
8344# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8345 ! pressure
8346# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8347 q_prim_vf(eqn_idx%E)%sf(i, j, &
8348# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8349 & 0) = 1._wp + (1 - 2._wp*(x_cc(i)**2 + y_cc(j)**2))*exp(1 - (x_cc(i)**2 + y_cc(j)**2))/((2._wp*pi)**3)
8350# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8351 case (260) ! Gaussian Divergence Pulse
8352# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8353 ! Bx(x) = 1 + C * erf((x-0.5)/\sigma) => \partialBx/\partialx = C * (2/\sqrt\pi) * exp[-((x-0.5)/\sigma)**2] * (1/\sigma)
8354# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8355 ! Choose C = \epsilon * \sigma * \sqrt\pi / 2 => \partialBx/\partialx = \epsilon * exp[-((x-0.5)/\sigma)**2] \psi is
8356# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8357 ! initialized to zero everywhere.
8358# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8359
8360# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8361 eps_mhd = patch_icpp(patch_id)%a(2)
8362# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8363 sigma = patch_icpp(patch_id)%a(3)
8364# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8365 c_mhd = eps_mhd*sigma*sqrt(pi)*0.5_wp
8366# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8367
8368# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8369 ! B-field
8370# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8371 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = 1._wp + c_mhd*erf((x_cc(i) - 0.5_wp)/sigma)
8372# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8373 case (261) ! Blob
8374# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8375 r0 = 1._wp/sqrt(8._wp)
8376# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8377 r2 = x_cc(i)**2 + y_cc(j)**2
8378# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8379 r = sqrt(r2)
8380# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8381 alpha = r/r0
8382# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8383 if (alpha < 1) then
8384# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8385 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = 1._wp/sqrt(4._wp*pi)*(alpha**8 - 2._wp*alpha**4 + 1._wp)
8386# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8387 ! q_prim_vf(eqn_idx%B%beg)%sf(i,j,0) = 1._wp/sqrt(4000._wp*pi) * (4096._wp*r2**4 - 128._wp*r2**2 + 1._wp)
8388# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8389 ! q_prim_vf(eqn_idx%B%beg)%sf(i,j,0) = 1._wp/(4._wp*pi) * (alpha**8 - 2._wp*alpha**4 + 1._wp)
8390# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8391 ! q_prim_vf(eqn_idx%E)%sf(i,j,0) = 6._wp - q_prim_vf(eqn_idx%B%beg)%sf(i,j,0)**2/2._wp
8392# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8393 end if
8394# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8395 case (262) ! Tilted 2D MHD shock‐tube at α = arctan2 (≈63.4°)
8396# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8397 ! rotate by \alpha = atan(2)
8398# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8399 alpha = atan(2._wp)
8400# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8401 cosa = cos(alpha)
8402# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8403 sina = sin(alpha)
8404# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8405 ! projection along shock normal
8406# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8407 r = x_cc(i)*cosa + y_cc(j)*sina
8408# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8409
8410# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8411 if (r <= 0.5_wp) then
8412# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8413 ! LEFT state: \rho=1, v\parallel=+10, v\perp=0, p=20, B\parallel=B\perp=5/\sqrt(4\pi)
8414# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8415 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1._wp
8416# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8417 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 10._wp*cosa
8418# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8419 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = 10._wp*sina
8420# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8421 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 20._wp
8422# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8423 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = (5._wp/sqrt(4._wp*pi))*cosa - (5._wp/sqrt(4._wp*pi))*sina
8424# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8425 q_prim_vf(eqn_idx%B%beg + 1)%sf(i, j, 0) = (5._wp/sqrt(4._wp*pi))*sina + (5._wp/sqrt(4._wp*pi))*cosa
8426# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8427 else
8428# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8429 ! RIGHT state: \rho=1, v\parallel=-10, v\perp=0, p=1, B\parallel=B\perp=5/\sqrt(4\pi)
8430# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8431 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1._wp
8432# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8433 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -10._wp*cosa
8434# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8435 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = -10._wp*sina
8436# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8437 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1._wp
8438# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8439 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = (5._wp/sqrt(4._wp*pi))*cosa - (5._wp/sqrt(4._wp*pi))*sina
8440# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8441 q_prim_vf(eqn_idx%B%beg + 1)%sf(i, j, 0) = (5._wp/sqrt(4._wp*pi))*sina + (5._wp/sqrt(4._wp*pi))*cosa
8442# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8443 end if
8444# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8445 ! v^z and B^z remain zero by default
8446# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8447 case (270) ! 2D extrusion of 1D profile from external data
8448# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8449 ! This hardcoded case extrudes a 1D profile to initialize a 2D simulation domain
8450# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8451 if (.not. files_loaded) then
8452# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8453 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
8454# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8455 do f = 1, max_files
8456# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8457 write (file_num_str, '(I0)') f
8458# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8459 filenames(f) = trim(init_dir) // "prim." // trim(file_num_str) // ".00." // zeros_default // ".dat"
8460# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8461 end do
8462# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8463
8464# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8465 ! Common file reading setup
8466# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8467 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
8468# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8469 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
8470# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8471
8472# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8473 select case (num_dims)
8474# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8475 case (1, 2) ! 1D and 2D cases are similar
8476# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8477 ! Count lines
8478# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8479 line_count = 0
8480# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8481 do
8482# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8483 read (unit2, *, iostat=ios2) dummy_x, dummy_y
8484# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8485 if (ios2 /= 0) exit
8486# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8487 line_count = line_count + 1
8488# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8489 end do
8490# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8491 close (unit2)
8492# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8493
8494# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8495 xrows = line_count
8496# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8497 yrows = 1
8498# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8499 index_x = 0
8500# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8501 if (num_dims == 2) index_x = i
8502# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8503#ifdef MFC_DEBUG
8504# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8505 block
8506# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8507 use iso_fortran_env, only: output_unit
8508# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8509
8510# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8511 print *, 'm_icpp_patches.fpp:631: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
8512# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8513
8514# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8515 call flush (output_unit)
8516# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8517 end block
8518# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8519#endif
8520# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8521 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
8522# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8523
8524# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8525
8526# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8527
8528# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8529#if defined(MFC_OpenACC)
8530# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8531!$acc enter data create(x_coords, stored_values)
8532# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8533#elif defined(MFC_OpenMP)
8534# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8535!$omp target enter data map(always,alloc:x_coords, stored_values)
8536# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8537#endif
8538# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8539
8540# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8541 ! Read data from all files
8542# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8543 do f = 1, max_files
8544# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8545 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
8546# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8547 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
8548# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8549
8550# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8551 do iter = 1, xrows
8552# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8553 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
8554# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8555 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
8556# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8557 end do
8558# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8559 close (unit)
8560# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8561 end do
8562# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8563
8564# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8565 ! Calculate offsets
8566# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8567 domain_xstart = x_coords(1)
8568# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8569 x_step = x_cc(1) - x_cc(0)
8570# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8571 delta_x = merge(x_cc(0) - domain_xstart + x_step/2.0, x_cc(index_x) - domain_xstart + x_step/2.0, num_dims == 1)
8572# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8573 global_offset_x = nint(abs(delta_x)/x_step)
8574# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8575 case (3) ! 3D case - determine grid structure
8576# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8577 ! Find yRows by counting rows with same x
8578# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8579 read (unit2, *, iostat=ios2) x0, y0, dummy_z
8580# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8581 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
8582# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8583
8584# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8585 yrows = 1
8586# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8587 do
8588# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8589 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
8590# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8591 if (ios2 /= 0) exit
8592# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8593 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
8594# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8595 yrows = yrows + 1
8596# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8597 else
8598# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8599 exit
8600# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8601 end if
8602# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8603 end do
8604# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8605 close (unit2)
8606# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8607
8608# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8609 ! Count total rows
8610# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8611 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
8612# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8613 nrows = 0
8614# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8615 do
8616# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8617 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
8618# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8619 if (ios2 /= 0) exit
8620# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8621 nrows = nrows + 1
8622# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8623 end do
8624# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8625 close (unit2)
8626# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8627
8628# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8629 xrows = nrows/yrows
8630# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8631#ifdef MFC_DEBUG
8632# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8633 block
8634# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8635 use iso_fortran_env, only: output_unit
8636# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8637
8638# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8639 print *, 'm_icpp_patches.fpp:631: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
8640# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8641
8642# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8643 call flush (output_unit)
8644# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8645 end block
8646# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8647#endif
8648# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8649 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
8650# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8651
8652# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8653
8654# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8655
8656# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8657
8658# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8659#if defined(MFC_OpenACC)
8660# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8661!$acc enter data create(x_coords, y_coords, stored_values)
8662# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8663#elif defined(MFC_OpenMP)
8664# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8665!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
8666# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8667#endif
8668# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8669 index_x = i
8670# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8671 index_y = j
8672# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8673
8674# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8675 ! Read all files
8676# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8677 do f = 1, max_files
8678# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8679 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
8680# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8681 if (ios /= 0) then
8682# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8683 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
8684# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8685 cycle
8686# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8687 end if
8688# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8689
8690# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8691 iter = 0
8692# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8693 do iix = 1, xrows
8694# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8695 do iiy = 1, yrows
8696# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8697 iter = iter + 1
8698# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8699 if (f == 1) then
8700# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8701 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
8702# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8703 else
8704# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8705 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
8706# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8707 end if
8708# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8709 if (ios /= 0) call s_mpi_abort("Error reading data")
8710# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8711 end do
8712# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8713 end do
8714# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8715 close (unit)
8716# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8717 end do
8718# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8719
8720# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8721 ! Calculate offsets
8722# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8723 x_step = x_cc(1) - x_cc(0)
8724# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8725 y_step = y_cc(1) - y_cc(0)
8726# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8727 delta_x = x_cc(index_x) - x_coords(1) + x_step/2.0_wp
8728# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8729 delta_y = y_cc(index_y) - y_coords(1) + y_step/2.0_wp
8730# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8731 global_offset_x = nint(abs(delta_x)/x_step)
8732# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8733 global_offset_y = nint(abs(delta_y)/y_step)
8734# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8735 end select
8736# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8737
8738# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8739 files_loaded = .true.
8740# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8741 end if
8742# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8743
8744# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8745 ! Data assignment
8746# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8747 select case (num_dims)
8748# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8749 case (1)
8750# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8751 idx = i + 1 + global_offset_x
8752# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8753 do f = 1, sys_size
8754# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8755 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
8756# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8757 end do
8758# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8759 case (2)
8760# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8761 idx = i + 1 + global_offset_x - index_x
8762# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8763 do f = 1, sys_size - 1
8764# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8765 jump = merge(1, 0, f >= eqn_idx%mom%end)
8766# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8767 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
8768# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8769 end do
8770# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8771 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
8772# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8773 case (3)
8774# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8775 idx = i + 1 + global_offset_x - index_x
8776# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8777 idy = j + 1 + global_offset_y - index_y
8778# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8779 do f = 1, sys_size - 1
8780# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8781 jump = merge(1, 0, f >= eqn_idx%mom%end)
8782# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8783 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
8784# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8785 end do
8786# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8787 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
8788# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8789 end select
8790# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8791 case (280) ! Isentropic vortex
8792# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8793 ! This is patch is hard-coded for test suite optimization used in the 2D_isentropicvortex case: This analytic patch uses
8794# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8795 ! geometry 2
8796# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8797 if (patch_id == 1) then
8798# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8799 q_prim_vf(eqn_idx%E)%sf(i, j, &
8800# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8801 & 0) = 1.0*(1.0 - (1.0/1.0)*(5.0/(2.0*pi))*(5.0/(8.0*1.0*(1.4 + 1.0)*pi))*exp(2.0*1.0*(1.0 - (x_cc(i) &
8802# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8803 & - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0)))**(1.4 + 1.0)
8804# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8805 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, j, &
8806# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8807 & 0) = 1.0*(1.0 - (1.0/1.0)*(5.0/(2.0*pi))*(5.0/(8.0*1.0*(1.4 + 1.0)*pi))*exp(2.0*1.0*(1.0 - (x_cc(i) &
8808# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8809 & - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0)))**1.4
8810# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8811 q_prim_vf(eqn_idx%mom%beg + 0)%sf(i, j, &
8812# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8813 & 0) = 0.0 + (y_cc(j) - patch_icpp(1)%y_centroid)*(5.0/(2.0*pi))*exp(1.0*(1.0 - (x_cc(i) - patch_icpp(1) &
8814# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8815 & %x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0))
8816# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8817 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, &
8818# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8819 & 0) = 0.0 - (x_cc(i) - patch_icpp(1)%x_centroid)*(5.0/(2.0*pi))*exp(1.0*(1.0 - (x_cc(i) - patch_icpp(1) &
8820# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8821 & %x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0))
8822# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8823 end if
8824# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8825 case (281) ! Acoustic pulse
8826# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8827 ! This is patch is hard-coded for test suite optimization used in the 2D_acoustic_pulse case: This analytic patch uses
8828# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8829 ! geometry 2
8830# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8831 if (patch_id == 2) then
8832# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8833 q_prim_vf(eqn_idx%E)%sf(i, j, &
8834# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8835 & 0) = 101325*(1 - 0.5*(1.4 - 1)*(0.4)**2*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2))))**(1.4/(1.4 - 1))
8836# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8837 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, j, &
8838# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8839 & 0) = 1*(1 - 0.5*(1.4 - 1)*(0.4)**2*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2))))**(1/(1.4 - 1))
8840# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8841 end if
8842# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8843 case (282) ! Zero-circulation vortex
8844# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8845 ! This is patch is hard-coded for test suite optimization used in the 2D_zero_circ_vortex case: This analytic patch uses
8846# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8847 ! geometry 2
8848# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8849 if (patch_id == 2) then
8850# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8851 q_prim_vf(eqn_idx%E)%sf(i, j, &
8852# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8853 & 0) = 101325*(1 - 0.5*(1.4 - 1)*(0.1/0.3)**2*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2))))**(1.4/(1.4 - 1))
8854# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8855 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, j, &
8856# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8857 & 0) = 1*(1 - 0.5*(1.4 - 1)*(0.1/0.3)**2*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2))))**(1/(1.4 - 1))
8858# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8859 q_prim_vf(eqn_idx%mom%beg + 0)%sf(i, j, &
8860# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8861 & 0) = 112.99092883944267*(1 - (0.1/0.3))*y_cc(j)*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2)))
8862# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8863 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, &
8864# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8865 & 0) = 112.99092883944267*((0.1/0.3))*x_cc(i)*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2)))
8866# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8867 end if
8868# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8869 case (291) ! Isothermal Flat Plate
8870# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8871 t_inf = 1125.0_wp
8872# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8873 t_wall = 600.0_wp
8874# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8875 p_atm = 101325.0_wp
8876# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8877
8878# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8879 ! Boundary/Shear Layer thicknesses
8880# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8881 delta_th = 0.0003_wp ! Thermal BL thickness
8882# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8883 delta_shear = 8e-3_wp ! Velocity BL thickness
8884# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8885
8886# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8887 u_max = 50.0_wp ! Freestream Velocity (m/s)
8888# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8889
8890# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8891 mw_n2 = 28.0134e-3_wp
8892# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8893 mw_o2 = 31.999e-3_wp
8894# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8895 y_n2 = 0.767_wp
8896# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8897 y_o2 = 0.233_wp
8898# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8899 r_mix = 8.314462618_wp*((y_n2/mw_n2) + (y_o2/mw_o2))
8900# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8901 bottom_blend_u = tanh(y_cc(j)/delta_shear)
8902# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8903 bottom_blend_t = tanh(y_cc(j)/delta_th)
8904# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8905 u_mean = u_max*bottom_blend_u
8906# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8907 t_loc = t_wall + (t_inf - t_wall)*bottom_blend_t
8908# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8909 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = p_atm/(r_mix*t_loc)
8910# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8911 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = u_mean
8912# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8913 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
8914# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8915 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p_atm
8916# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8917 q_prim_vf(eqn_idx%species%beg)%sf(i, j, 0) = y_o2
8918# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8919 q_prim_vf(eqn_idx%species%end)%sf(i, j, 0) = y_n2
8920# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8921 case default
8922# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8923 if (proc_rank == 0) then
8924# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8925 call s_int_to_str(patch_id, istr)
8926# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8927 call s_mpi_abort("Invalid hcid specified for patch " // trim(istr))
8928# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8929 end if
8930# 631 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8931 end select
8932 end if
8933
8934 if ((q_prim_vf(1)%sf(i, j, 0) < 1.e-10) .and. (model_eqns == 4)) then
8935 ! zero density, reassign according to Tait EOS
8936 q_prim_vf(1)%sf(i, j, 0) = (((q_prim_vf(eqn_idx%E)%sf(i, j, &
8937 & 0) + pi_inf)/(pref + pi_inf))**(1._wp/lit_gamma))*rhoref*(1._wp - q_prim_vf(eqn_idx%alf) &
8938 & %sf(i, j, 0))
8939 end if
8940
8941 ! Updating the patch identities bookkeeping variable
8942 if (1._wp - eta < sgm_eps) patch_id_fp(i, j, 0) = patch_id
8943 end if
8944 end if
8945 end do
8946 end do
8947 if (allocated(stored_values)) then
8948# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8949#ifdef MFC_DEBUG
8950# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8951 block
8952# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8953 use iso_fortran_env, only: output_unit
8954# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8955
8956# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8957 print *, 'm_icpp_patches.fpp:647: ', '@:DEALLOCATE(stored_values)'
8958# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8959
8960# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8961 call flush (output_unit)
8962# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8963 end block
8964# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8965#endif
8966# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8967
8968# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8969#if defined(MFC_OpenACC)
8970# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8971!$acc exit data delete(stored_values)
8972# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8973#elif defined(MFC_OpenMP)
8974# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8975!$omp target exit data map(release:stored_values)
8976# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8977#endif
8978# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8979 deallocate (stored_values)
8980# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8981#ifdef MFC_DEBUG
8982# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8983 block
8984# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8985 use iso_fortran_env, only: output_unit
8986# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8987
8988# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8989 print *, 'm_icpp_patches.fpp:647: ', '@:DEALLOCATE(x_coords)'
8990# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8991
8992# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8993 call flush (output_unit)
8994# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8995 end block
8996# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8997#endif
8998# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8999
9000# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9001#if defined(MFC_OpenACC)
9002# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9003!$acc exit data delete(x_coords)
9004# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9005#elif defined(MFC_OpenMP)
9006# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9007!$omp target exit data map(release:x_coords)
9008# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9009#endif
9010# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9011 deallocate (x_coords)
9012# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9013 end if
9014# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9015
9016# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9017 if (allocated(y_coords)) then
9018# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9019#ifdef MFC_DEBUG
9020# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9021 block
9022# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9023 use iso_fortran_env, only: output_unit
9024# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9025
9026# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9027 print *, 'm_icpp_patches.fpp:647: ', '@:DEALLOCATE(y_coords)'
9028# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9029
9030# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9031 call flush (output_unit)
9032# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9033 end block
9034# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9035#endif
9036# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9037
9038# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9039#if defined(MFC_OpenACC)
9040# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9041!$acc exit data delete(y_coords)
9042# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9043#elif defined(MFC_OpenMP)
9044# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9045!$omp target exit data map(release:y_coords)
9046# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9047#endif
9048# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9049 deallocate (y_coords)
9050# 647 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9051 end if
9052
9053 end subroutine s_icpp_rectangle
9054
9055 !> The swept line patch is a 2D geometry that may be used, for example, in creating a solid boundary, or pre-/post- shock
9056 !! region, at an angle with respect to the axes of the Cartesian coordinate system. The geometry of the patch is well-defined
9057 !! when its centroid and normal vector, aimed in the sweep direction, are provided. Note that the sweep line patch DOES allow
9058 !! the smoothing of its boundary.
9059 subroutine s_icpp_sweep_line(patch_id, patch_id_fp, q_prim_vf)
9060
9061 integer, intent(in) :: patch_id
9062
9063#ifdef MFC_MIXED_PRECISION
9064 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
9065#else
9066 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
9067#endif
9068 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
9069 integer :: i, j, k !< Generic loop operators
9070 real(wp) :: a, b, c
9071
9072 integer :: xRows, yRows, nRows, iix, iiy, max_files
9073# 668 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9074 integer :: f, iter, ios, ios2, unit, unit2, idx, idy, index_x, index_y, jump, line_count, ycount
9075# 668 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9076 real(wp) :: x_len, x_step, y_len, y_step
9077# 668 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9078 real(wp) :: dummy_x, dummy_y, dummy_z, x0, y0
9079# 668 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9080 integer :: global_offset_x, global_offset_y !< MPI subdomain offset
9081# 668 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9082 real(wp) :: delta_x, delta_y
9083# 668 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9084 character(len=100), dimension(sys_size) :: fileNames !< Arrays to store all data from files
9085# 668 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9086 character(len=200) :: errmsg
9087# 668 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9088 real(wp), allocatable :: stored_values(:,:,:)
9089# 668 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9090 real(wp), allocatable :: x_coords(:), y_coords(:)
9091# 668 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9092 logical :: files_loaded = .false.
9093# 668 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9094 real(wp) :: domain_xstart, domain_xend, domain_ystart, domain_yend
9095# 668 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9096 character(len=*), parameter :: init_dir = "/home/MFC/FilesDirectory" !< For example /home/MFC/examples/1D_Shock/D/
9097# 668 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9098 character(len=20) :: file_num_str !< For storing the file number as a string
9099# 668 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9100 character(len=20) :: zeros_part !< For the trailing zeros part
9101# 668 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9102 character(len=6), parameter :: zeros_default = "000000" !< Default zeros (can be changed)
9103 ! Place any declaration of intermediate variables here
9104# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9105 real(wp) :: rhoH, rhoL, pRef, pInt, h, lam, wl, amp, intH, alph, Mach
9106# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9107 real(wp) :: eps
9108# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9109
9110# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9111 ! IGR Jets Arrays to stor position and radii of jets from input file
9112# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9113 real(wp), dimension(:), allocatable :: y_th_arr, z_th_arr, r_th_arr
9114# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9115 ! Variables to describe initial condition of jet
9116# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9117 real(wp) :: r, ux_th, ux_am, p_th, p_am, rho_th, rho_am, y_th, z_th, r_th, eps_smooth
9118# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9119 real(wp) :: rcut, xcut !< Intermediate variables for creating smooth initial condition
9120# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9121 real(wp), dimension(0:n,0:p) :: rcut_arr
9122# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9123 integer :: l, q, s !< Iterators for reading input files
9124# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9125 integer :: start, end !< Ints to keep track of position in file
9126# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9127 character(len=1000) :: line !< String to store line in file
9128# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9129 character(len=25) :: value !< String to store value in line
9130# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9131 integer :: NJet !< Number of jets
9132# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9133
9134# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9135 eps = 1e-9_wp
9136# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9137
9138# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9139 if (patch_icpp(patch_id)%hcid == 303) then
9140# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9141 eps_smooth = 3._wp
9142# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9143 open (unit=10, file="njet.txt", status="old", action="read")
9144# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9145 read (10, *) njet
9146# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9147 close (10)
9148# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9149
9150# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9151 allocate (y_th_arr(0:njet - 1))
9152# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9153 allocate (z_th_arr(0:njet - 1))
9154# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9155 allocate (r_th_arr(0:njet - 1))
9156# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9157
9158# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9159 open (unit=10, file="jets.csv", status="old", action="read")
9160# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9161 do q = 0, njet - 1
9162# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9163 read (10, '(A)') line ! Read a full line as a string
9164# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9165 start = 1
9166# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9167
9168# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9169 do l = 0, 2
9170# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9171 end = index(line(start:), ',') ! Find the next comma
9172# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9173 if (end == 0) then
9174# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9175 value = trim(adjustl(line(start:))) ! Last value in the line
9176# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9177 else
9178# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9179 value = trim(adjustl(line(start:start + end - 2))) ! Extract substring
9180# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9181 start = start + end ! Move to next value
9182# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9183 end if
9184# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9185 if (l == 0) then
9186# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9187 read (value, *) y_th_arr(q) ! Convert string to numeric value
9188# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9189 else if (l == 1) then
9190# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9191 read (value, *) z_th_arr(q)
9192# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9193 else
9194# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9195 read (value, *) r_th_arr(q)
9196# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9197 end if
9198# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9199 end do
9200# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9201 end do
9202# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9203 close (10)
9204# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9205
9206# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9207 do q = 0, p
9208# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9209 do l = 0, n
9210# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9211 rcut = 0._wp
9212# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9213 do s = 0, njet - 1
9214# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9215 r = sqrt((y_cc(l) - y_th_arr(s))**2._wp + (z_cc(q) - z_th_arr(s))**2._wp)
9216# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9217 rcut = rcut + f_cut_on(r - r_th_arr(s), eps_smooth)
9218# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9219 end do
9220# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9221 rcut_arr(l, q) = rcut
9222# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9223 end do
9224# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9225 end do
9226# 669 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9227 end if
9228
9229 ! Transferring the centroid information of the line to be swept
9230 x_centroid = patch_icpp(patch_id)%x_centroid
9231 y_centroid = patch_icpp(patch_id)%y_centroid
9232 smooth_patch_id = patch_icpp(patch_id)%smooth_patch_id
9233 smooth_coeff = patch_icpp(patch_id)%smooth_coeff
9234
9235 ! Obtaining coefficients of the equation describing the sweep line
9236 a = patch_icpp(patch_id)%normal(1)
9237 b = patch_icpp(patch_id)%normal(2)
9238 c = -a*x_centroid - b*y_centroid
9239
9240 ! Initialize eta=1; modified if smoothing is enabled
9241 eta = 1._wp
9242
9243 ! Assign patch vars if cell is covered and patch has write permission
9244 do j = 0, n
9245 do i = 0, m
9246 if (patch_icpp(patch_id)%smoothen) then
9247 eta = 5.e-1_wp + 5.e-1_wp*tanh(smooth_coeff/min(dx, dy)*(a*x_cc(i) + b*y_cc(j) + c)/sqrt(a**2 + b**2))
9248 end if
9249
9250 if ((a*x_cc(i) + b*y_cc(j) + c >= 0._wp .and. patch_icpp(patch_id)%alter_patch(patch_id_fp(i, j, &
9251 & 0))) .or. patch_id_fp(i, j, 0) == smooth_patch_id) then
9252 call s_assign_patch_primitive_variables(patch_id, i, j, 0, eta, q_prim_vf, patch_id_fp)
9253
9254
9255 if (patch_icpp(patch_id)%hcid /= dflt_int) then
9256 select case (patch_icpp(patch_id)%hcid)
9257# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9258 case (300) ! Rayleigh-Taylor instability
9259# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9260 rhoh = 3._wp
9261# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9262 rhol = 1._wp
9263# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9264 pref = 1.e5_wp
9265# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9266 pint = pref
9267# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9268 h = 0.7_wp
9269# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9270 lam = 0.2_wp
9271# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9272 wl = 2._wp*pi/lam
9273# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9274 amp = 0.025_wp/wl
9275# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9276
9277# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9278 inth = amp*(sin(2._wp*pi*x_cc(i)/lam - pi/2._wp) + sin(2._wp*pi*z_cc(k)/lam - pi/2._wp)) + h
9279# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9280
9281# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9282 alph = 5.e-1_wp*(1._wp + tanh((y_cc(j) - inth)/2.5e-3_wp))
9283# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9284
9285# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9286 if (alph < eps) alph = eps
9287# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9288 if (alph > 1._wp - eps) alph = 1._wp - eps
9289# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9290
9291# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9292 if (y_cc(j) > inth) then
9293# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9294 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
9295# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9296 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
9297# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9298 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = alph*rhoh
9299# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9300 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = (1._wp - alph)*rhol
9301# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9302 q_prim_vf(eqn_idx%E)%sf(i, j, k) = pref + rhoh*9.81_wp*(1.2_wp - y_cc(j))
9303# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9304 else
9305# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9306 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
9307# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9308 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
9309# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9310 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = alph*rhoh
9311# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9312 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = (1._wp - alph)*rhol
9313# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9314 pint = pref + rhoh*9.81_wp*(1.2_wp - inth)
9315# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9316 q_prim_vf(eqn_idx%E)%sf(i, j, k) = pint + rhol*9.81_wp*(inth - y_cc(j))
9317# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9318 end if
9319# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9320 case (301) ! (3D lung geometry in X direction, |sin(*)+sin(*)|)
9321# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9322 h = 0.0_wp
9323# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9324 lam = 1.0_wp
9325# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9326 amp = patch_icpp(patch_id)%a(2)
9327# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9328 inth = amp*abs((sin(2*pi*y_cc(j)/lam - pi/2) + sin(2*pi*z_cc(k)/lam - pi/2)) + h)
9329# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9330 if (x_cc(i) > inth) then
9331# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9332 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = patch_icpp(1)%alpha_rho(1)
9333# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9334 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = patch_icpp(1)%alpha_rho(2)
9335# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9336 q_prim_vf(eqn_idx%E)%sf(i, j, k) = patch_icpp(1)%pres
9337# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9338 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = patch_icpp(1)%alpha(1)
9339# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9340 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = patch_icpp(1)%alpha(2)
9341# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9342 end if
9343# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9344 case (302) ! 3D Jet with IGR
9345# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9346 ux_th = 10*sqrt(1.4*0.4)
9347# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9348 ux_am = 0.0*sqrt(1.4)
9349# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9350 p_th = 2.0_wp
9351# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9352 p_am = 1.0_wp
9353# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9354 rho_th = 1._wp
9355# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9356 rho_am = 1._wp
9357# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9358 y_th = 0.0_wp
9359# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9360 z_th = 0.0_wp
9361# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9362 r_th = 1._wp
9363# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9364 eps_smooth = 1._wp
9365# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9366 eps = 1e-6
9367# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9368
9369# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9370 r = sqrt((y_cc(j) - y_th)**2._wp + (z_cc(k) - z_th)**2._wp)
9371# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9372 rcut = f_cut_on(r - r_th, eps_smooth)
9373# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9374 xcut = f_cut_on(x_cc(i), eps_smooth)
9375# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9376
9377# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9378 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, k) = ux_th*rcut*xcut + ux_am
9379# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9380 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, k) = 0._wp
9381# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9382 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0._wp
9383# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9384
9385# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9386 if (num_fluids == 1) then
9387# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9388 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = (rho_th - rho_am)*rcut*xcut + rho_am
9389# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9390 else
9391# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9392 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = (1._wp - 2._wp*eps)*rcut*xcut + eps
9393# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9394 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = rho_th*q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)
9395# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9396 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = rho_am*(1._wp - q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k))
9397# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9398 end if
9399# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9400
9401# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9402 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p_th*rcut*xcut + p_am
9403# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9404 case (303) ! 3D Multijet
9405# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9406 eps_smooth = 3.0_wp
9407# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9408 ux_th = 10*sqrt(1.4*0.4)
9409# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9410 ux_am = 2.5*sqrt(1.4*0.4)
9411# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9412 p_th = 0.8_wp
9413# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9414 p_am = 0.4_wp
9415# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9416 rho_th = 1._wp
9417# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9418 rho_am = 1._wp
9419# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9420 eps = 1e-6
9421# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9422
9423# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9424 rcut = rcut_arr(j, k)
9425# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9426 xcut = f_cut_on(x_cc(i), eps_smooth)
9427# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9428
9429# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9430 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, k) = ux_th*rcut*xcut + ux_am
9431# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9432 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, k) = 0._wp
9433# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9434 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0._wp
9435# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9436
9437# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9438 if (num_fluids == 1) then
9439# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9440 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = (rho_th - rho_am)*rcut*xcut + rho_am
9441# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9442 else
9443# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9444 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = (1._wp - 2._wp*eps)*rcut*xcut + eps
9445# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9446 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = rho_th*q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)
9447# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9448 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = rho_am*(1._wp - q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k))
9449# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9450 end if
9451# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9452
9453# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9454 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p_th*rcut*xcut + p_am
9455# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9456 case (370) ! 3D extrusion of 2D profile from external data
9457# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9458 ! This hardcoded case extrudes a 2D profile to initialize a 3D simulation domain
9459# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9460 if (.not. files_loaded) then
9461# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9462 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
9463# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9464 do f = 1, max_files
9465# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9466 write (file_num_str, '(I0)') f
9467# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9468 filenames(f) = trim(init_dir) // "prim." // trim(file_num_str) // ".00." // zeros_default // ".dat"
9469# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9470 end do
9471# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9472
9473# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9474 ! Common file reading setup
9475# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9476 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
9477# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9478 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
9479# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9480
9481# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9482 select case (num_dims)
9483# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9484 case (1, 2) ! 1D and 2D cases are similar
9485# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9486 ! Count lines
9487# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9488 line_count = 0
9489# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9490 do
9491# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9492 read (unit2, *, iostat=ios2) dummy_x, dummy_y
9493# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9494 if (ios2 /= 0) exit
9495# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9496 line_count = line_count + 1
9497# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9498 end do
9499# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9500 close (unit2)
9501# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9502
9503# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9504 xrows = line_count
9505# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9506 yrows = 1
9507# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9508 index_x = 0
9509# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9510 if (num_dims == 2) index_x = i
9511# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9512#ifdef MFC_DEBUG
9513# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9514 block
9515# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9516 use iso_fortran_env, only: output_unit
9517# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9518
9519# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9520 print *, 'm_icpp_patches.fpp:698: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
9521# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9522
9523# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9524 call flush (output_unit)
9525# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9526 end block
9527# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9528#endif
9529# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9530 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
9531# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9532
9533# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9534
9535# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9536
9537# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9538#if defined(MFC_OpenACC)
9539# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9540!$acc enter data create(x_coords, stored_values)
9541# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9542#elif defined(MFC_OpenMP)
9543# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9544!$omp target enter data map(always,alloc:x_coords, stored_values)
9545# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9546#endif
9547# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9548
9549# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9550 ! Read data from all files
9551# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9552 do f = 1, max_files
9553# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9554 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
9555# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9556 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
9557# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9558
9559# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9560 do iter = 1, xrows
9561# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9562 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
9563# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9564 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
9565# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9566 end do
9567# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9568 close (unit)
9569# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9570 end do
9571# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9572
9573# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9574 ! Calculate offsets
9575# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9576 domain_xstart = x_coords(1)
9577# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9578 x_step = x_cc(1) - x_cc(0)
9579# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9580 delta_x = merge(x_cc(0) - domain_xstart + x_step/2.0, x_cc(index_x) - domain_xstart + x_step/2.0, num_dims == 1)
9581# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9582 global_offset_x = nint(abs(delta_x)/x_step)
9583# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9584 case (3) ! 3D case - determine grid structure
9585# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9586 ! Find yRows by counting rows with same x
9587# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9588 read (unit2, *, iostat=ios2) x0, y0, dummy_z
9589# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9590 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
9591# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9592
9593# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9594 yrows = 1
9595# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9596 do
9597# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9598 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
9599# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9600 if (ios2 /= 0) exit
9601# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9602 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
9603# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9604 yrows = yrows + 1
9605# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9606 else
9607# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9608 exit
9609# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9610 end if
9611# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9612 end do
9613# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9614 close (unit2)
9615# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9616
9617# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9618 ! Count total rows
9619# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9620 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
9621# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9622 nrows = 0
9623# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9624 do
9625# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9626 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
9627# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9628 if (ios2 /= 0) exit
9629# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9630 nrows = nrows + 1
9631# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9632 end do
9633# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9634 close (unit2)
9635# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9636
9637# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9638 xrows = nrows/yrows
9639# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9640#ifdef MFC_DEBUG
9641# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9642 block
9643# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9644 use iso_fortran_env, only: output_unit
9645# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9646
9647# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9648 print *, 'm_icpp_patches.fpp:698: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
9649# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9650
9651# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9652 call flush (output_unit)
9653# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9654 end block
9655# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9656#endif
9657# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9658 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
9659# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9660
9661# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9662
9663# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9664
9665# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9666
9667# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9668#if defined(MFC_OpenACC)
9669# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9670!$acc enter data create(x_coords, y_coords, stored_values)
9671# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9672#elif defined(MFC_OpenMP)
9673# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9674!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
9675# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9676#endif
9677# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9678 index_x = i
9679# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9680 index_y = j
9681# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9682
9683# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9684 ! Read all files
9685# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9686 do f = 1, max_files
9687# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9688 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
9689# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9690 if (ios /= 0) then
9691# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9692 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
9693# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9694 cycle
9695# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9696 end if
9697# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9698
9699# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9700 iter = 0
9701# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9702 do iix = 1, xrows
9703# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9704 do iiy = 1, yrows
9705# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9706 iter = iter + 1
9707# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9708 if (f == 1) then
9709# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9710 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
9711# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9712 else
9713# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9714 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
9715# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9716 end if
9717# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9718 if (ios /= 0) call s_mpi_abort("Error reading data")
9719# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9720 end do
9721# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9722 end do
9723# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9724 close (unit)
9725# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9726 end do
9727# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9728
9729# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9730 ! Calculate offsets
9731# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9732 x_step = x_cc(1) - x_cc(0)
9733# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9734 y_step = y_cc(1) - y_cc(0)
9735# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9736 delta_x = x_cc(index_x) - x_coords(1) + x_step/2.0_wp
9737# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9738 delta_y = y_cc(index_y) - y_coords(1) + y_step/2.0_wp
9739# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9740 global_offset_x = nint(abs(delta_x)/x_step)
9741# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9742 global_offset_y = nint(abs(delta_y)/y_step)
9743# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9744 end select
9745# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9746
9747# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9748 files_loaded = .true.
9749# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9750 end if
9751# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9752
9753# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9754 ! Data assignment
9755# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9756 select case (num_dims)
9757# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9758 case (1)
9759# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9760 idx = i + 1 + global_offset_x
9761# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9762 do f = 1, sys_size
9763# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9764 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
9765# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9766 end do
9767# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9768 case (2)
9769# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9770 idx = i + 1 + global_offset_x - index_x
9771# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9772 do f = 1, sys_size - 1
9773# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9774 jump = merge(1, 0, f >= eqn_idx%mom%end)
9775# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9776 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
9777# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9778 end do
9779# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9780 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
9781# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9782 case (3)
9783# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9784 idx = i + 1 + global_offset_x - index_x
9785# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9786 idy = j + 1 + global_offset_y - index_y
9787# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9788 do f = 1, sys_size - 1
9789# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9790 jump = merge(1, 0, f >= eqn_idx%mom%end)
9791# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9792 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
9793# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9794 end do
9795# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9796 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
9797# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9798 end select
9799# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9800 case (380) ! Taylor-Green vortex
9801# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9802 ! This is patch is hard-coded for test suite optimization used in the 3D_TaylorGreenVortex case: This analytic patch used
9803# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9804 ! geometry 9
9805# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9806 mach = 0.1
9807# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9808 if (patch_id == 1) then
9809# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9810 q_prim_vf(eqn_idx%E)%sf(i, j, &
9811# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9812 & k) = 101325 + (mach**2*376.636429464809**2/16)*(cos(2*x_cc(i)/1) + cos(2*y_cc(j)/1))*(cos(2*z_cc(k)/1) + 2)
9813# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9814 q_prim_vf(eqn_idx%mom%beg + 0)%sf(i, j, k) = mach*376.636429464809*sin(x_cc(i)/1)*cos(y_cc(j)/1)*sin(z_cc(k)/1)
9815# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9816 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, k) = -mach*376.636429464809*cos(x_cc(i)/1)*sin(y_cc(j)/1)*sin(z_cc(k)/1)
9817# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9818 end if
9819# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9820 case default
9821# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9822 call s_int_to_str(patch_id, istr)
9823# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9824 call s_mpi_abort("Invalid hcid specified for patch " // trim(istr))
9825# 698 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9826 end select
9827 end if
9828
9829 ! Updating the patch identities bookkeeping variable
9830 if (1._wp - eta < sgm_eps) patch_id_fp(i, j, 0) = patch_id
9831 end if
9832 end do
9833 end do
9834 if (allocated(stored_values)) then
9835# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9836#ifdef MFC_DEBUG
9837# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9838 block
9839# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9840 use iso_fortran_env, only: output_unit
9841# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9842
9843# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9844 print *, 'm_icpp_patches.fpp:706: ', '@:DEALLOCATE(stored_values)'
9845# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9846
9847# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9848 call flush (output_unit)
9849# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9850 end block
9851# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9852#endif
9853# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9854
9855# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9856#if defined(MFC_OpenACC)
9857# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9858!$acc exit data delete(stored_values)
9859# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9860#elif defined(MFC_OpenMP)
9861# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9862!$omp target exit data map(release:stored_values)
9863# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9864#endif
9865# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9866 deallocate (stored_values)
9867# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9868#ifdef MFC_DEBUG
9869# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9870 block
9871# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9872 use iso_fortran_env, only: output_unit
9873# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9874
9875# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9876 print *, 'm_icpp_patches.fpp:706: ', '@:DEALLOCATE(x_coords)'
9877# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9878
9879# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9880 call flush (output_unit)
9881# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9882 end block
9883# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9884#endif
9885# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9886
9887# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9888#if defined(MFC_OpenACC)
9889# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9890!$acc exit data delete(x_coords)
9891# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9892#elif defined(MFC_OpenMP)
9893# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9894!$omp target exit data map(release:x_coords)
9895# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9896#endif
9897# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9898 deallocate (x_coords)
9899# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9900 end if
9901# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9902
9903# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9904 if (allocated(y_coords)) then
9905# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9906#ifdef MFC_DEBUG
9907# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9908 block
9909# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9910 use iso_fortran_env, only: output_unit
9911# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9912
9913# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9914 print *, 'm_icpp_patches.fpp:706: ', '@:DEALLOCATE(y_coords)'
9915# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9916
9917# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9918 call flush (output_unit)
9919# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9920 end block
9921# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9922#endif
9923# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9924
9925# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9926#if defined(MFC_OpenACC)
9927# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9928!$acc exit data delete(y_coords)
9929# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9930#elif defined(MFC_OpenMP)
9931# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9932!$omp target exit data map(release:y_coords)
9933# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9934#endif
9935# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9936 deallocate (y_coords)
9937# 706 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9938 end if
9939
9940 end subroutine s_icpp_sweep_line
9941
9942 !> The Taylor Green vortex is 2D decaying vortex that may be used, for example, to verify the effects of viscous attenuation.
9943 !! Geometry of the patch is well-defined when its centroid are provided.
9944 subroutine s_icpp_2d_taylorgreen_vortex(patch_id, patch_id_fp, q_prim_vf)
9945
9946 integer, intent(in) :: patch_id
9947
9948#ifdef MFC_MIXED_PRECISION
9949 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
9950#else
9951 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
9952#endif
9953 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
9954 integer :: i, j, k !< generic loop iterators
9955 real(wp) :: pi_inf, gamma, lit_gamma !< equation of state parameters
9956 real(wp) :: L0, U0 !< Taylor Green Vortex parameters
9957
9958 integer :: xRows, yRows, nRows, iix, iiy, max_files
9959# 726 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9960 integer :: f, iter, ios, ios2, unit, unit2, idx, idy, index_x, index_y, jump, line_count, ycount
9961# 726 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9962 real(wp) :: x_len, x_step, y_len, y_step
9963# 726 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9964 real(wp) :: dummy_x, dummy_y, dummy_z, x0, y0
9965# 726 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9966 integer :: global_offset_x, global_offset_y !< MPI subdomain offset
9967# 726 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9968 real(wp) :: delta_x, delta_y
9969# 726 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9970 character(len=100), dimension(sys_size) :: fileNames !< Arrays to store all data from files
9971# 726 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9972 character(len=200) :: errmsg
9973# 726 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9974 real(wp), allocatable :: stored_values(:,:,:)
9975# 726 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9976 real(wp), allocatable :: x_coords(:), y_coords(:)
9977# 726 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9978 logical :: files_loaded = .false.
9979# 726 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9980 real(wp) :: domain_xstart, domain_xend, domain_ystart, domain_yend
9981# 726 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9982 character(len=*), parameter :: init_dir = "/home/MFC/FilesDirectory" !< For example /home/MFC/examples/1D_Shock/D/
9983# 726 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9984 character(len=20) :: file_num_str !< For storing the file number as a string
9985# 726 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9986 character(len=20) :: zeros_part !< For the trailing zeros part
9987# 726 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9988 character(len=6), parameter :: zeros_default = "000000" !< Default zeros (can be changed)
9989 ! Place any declaration of intermediate variables here
9990# 727 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9991 real(wp) :: eps, eps_mhd, C_mhd
9992# 727 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9993 real(wp) :: r, rmax, gam, umax, p0
9994# 727 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9995 real(wp) :: rhoH, rhoL, pRef, pInt, h, lam, wl, amp, intH, intL, alph
9996# 727 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9997 real(wp) :: factor
9998# 727 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9999 real(wp) :: r0, alpha, r2
10000# 727 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10001 real(wp) :: sinA, cosA
10002# 727 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10003 real(wp) :: r_sq
10004# 727 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10005
10006# 727 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10007 ! # 291 - Shear/Thermal Layer Case
10008# 727 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10009 real(wp) :: delta_shear, u_max, u_mean
10010# 727 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10011 real(wp) :: T_wall, T_inf, P_atm, T_loc
10012# 727 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10013 real(wp) :: delta_th, R_mix
10014# 727 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10015 real(wp) :: Y_N2, Y_O2, MW_N2, MW_O2
10016# 727 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10017 real(wp) :: bottom_blend_u, bottom_blend_T
10018# 727 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10019
10020# 727 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10021 ! # 207
10022# 727 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10023 real(wp) :: sigma, gauss1, gauss2
10024# 727 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10025
10026# 727 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10027 ! # 208
10028# 727 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10029 real(wp) :: ei, d, fsm, alpha_air, alpha_sf6
10030# 727 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10031
10032# 727 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10033 eps = 1.e-9_wp
10034
10035 pi_inf = pi_infs(1)
10036 gamma = gammas(1)
10037 lit_gamma = gs_min(1)
10038
10039 ! Transferring the patch's centroid and length information
10040 x_centroid = patch_icpp(patch_id)%x_centroid
10041 y_centroid = patch_icpp(patch_id)%y_centroid
10042 length_x = patch_icpp(patch_id)%length_x
10043 length_y = patch_icpp(patch_id)%length_y
10044
10045 ! Computing the beginning and the end x- and y-coordinates of the patch based on its centroid and lengths
10046 x_boundary%beg = x_centroid - 0.5_wp*length_x
10047 x_boundary%end = x_centroid + 0.5_wp*length_x
10048 y_boundary%beg = y_centroid - 0.5_wp*length_y
10049 y_boundary%end = y_centroid + 0.5_wp*length_y
10050
10051 ! Set eta=1 (no smoothing for this patch type)
10052 eta = 1._wp
10053 ! U0 is the characteristic velocity of the vortex
10054 u0 = patch_icpp(patch_id)%vel(1)
10055 ! L0 is the characteristic length of the vortex
10056 l0 = patch_icpp(patch_id)%vel(2)
10057 ! Assign patch vars if cell is covered and patch has write permission
10058 do j = 0, n
10059 do i = 0, m
10060 if (x_boundary%beg <= x_cc(i) .and. x_boundary%end >= x_cc(i) .and. y_boundary%beg <= y_cc(j) &
10061 & .and. y_boundary%end >= y_cc(j) .and. patch_icpp(patch_id)%alter_patch(patch_id_fp(i, j, 0))) then
10062 call s_assign_patch_primitive_variables(patch_id, i, j, 0, eta, q_prim_vf, patch_id_fp)
10063
10064
10065 if (patch_icpp(patch_id)%hcid /= dflt_int) then
10066 select case (patch_icpp(patch_id)%hcid) ! 2D_hardcoded_ic example case
10067# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10068 case (200) ! Two-fluid cubic interface
10069# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10070 if (y_cc(j) <= (-x_cc(i)**3 + 1)**(1._wp/3._wp)) then
10071# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10072 ! Volume Fractions
10073# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10074 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = eps
10075# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10076 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = 1._wp - eps
10077# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10078 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = eps*1000._wp
10079# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10080 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = (1._wp - eps)*1._wp
10081# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10082 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1000._wp
10083# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10084 end if
10085# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10086 case (202) ! Gresho vortex (Gouasmi et al 2022 JCP)
10087# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10088 r = ((x_cc(i) - 0.5_wp)**2 + (y_cc(j) - 0.5_wp)**2)**0.5_wp
10089# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10090 rmax = 0.2_wp
10091# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10092
10093# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10094 gam = 1._wp + 1._wp/fluid_pp(1)%gamma
10095# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10096 umax = 2*pi*rmax*patch_icpp(patch_id)%vel(2)
10097# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10098 p0 = umax**2*(1._wp/(gam*patch_icpp(patch_id)%vel(2)**2) - 0.5_wp)
10099# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10100
10101# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10102 if (r < rmax) then
10103# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10104 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -(y_cc(j) - 0.5_wp)*umax/rmax
10105# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10106 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = (x_cc(i) - 0.5_wp)*umax/rmax
10107# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10108 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*((r/rmax)**2._wp/2._wp)
10109# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10110 else if (r < 2*rmax) then
10111# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10112 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -((y_cc(j) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
10113# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10114 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = ((x_cc(i) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
10115# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10116 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*((r/rmax)**2/2._wp + 4*(1 - (r/rmax) + log(r/rmax)))
10117# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10118 else
10119# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10120 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 0._wp
10121# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10122 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0._wp
10123# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10124 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*(-2 + 4*log(2._wp))
10125# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10126 end if
10127# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10128 case (203) ! Gresho vortex (Gouasmi et al 2022 JCP) with density correction
10129# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10130 r = ((x_cc(i) - 0.5_wp)**2._wp + (y_cc(j) - 0.5_wp)**2)**0.5_wp
10131# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10132 rmax = 0.2_wp
10133# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10134
10135# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10136 gam = 1._wp + 1._wp/fluid_pp(1)%gamma
10137# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10138 umax = 2*pi*rmax*patch_icpp(patch_id)%vel(2)
10139# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10140 p0 = umax**2*(1._wp/(gam*patch_icpp(patch_id)%vel(2)**2) - 0.5_wp)
10141# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10142
10143# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10144 if (r < rmax) then
10145# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10146 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -(y_cc(j) - 0.5_wp)*umax/rmax
10147# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10148 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = (x_cc(i) - 0.5_wp)*umax/rmax
10149# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10150 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*((r/rmax)**2._wp/2._wp)
10151# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10152 else if (r < 2*rmax) then
10153# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10154 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -((y_cc(j) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
10155# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10156 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = ((x_cc(i) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
10157# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10158 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*((r/rmax)**2/2._wp + 4._wp*(1._wp - (r/rmax) + log(r/rmax)))
10159# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10160 else
10161# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10162 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 0._wp
10163# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10164 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0._wp
10165# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10166 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2._wp*(-2._wp + 4*log(2._wp))
10167# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10168 end if
10169# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10170
10171# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10172 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = q_prim_vf(eqn_idx%E)%sf(i, j, 0)**(1._wp/gam)
10173# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10174 case (204) ! Rayleigh-Taylor instability
10175# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10176 rhoh = 3._wp
10177# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10178 rhol = 1._wp
10179# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10180 pref = 1.e5_wp
10181# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10182 pint = pref
10183# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10184 h = 0.7_wp
10185# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10186 lam = 0.2_wp
10187# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10188 wl = 2._wp*pi/lam
10189# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10190 amp = 0.05_wp/wl
10191# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10192
10193# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10194 inth = amp*sin(2._wp*pi*x_cc(i)/lam - pi/2._wp) + h
10195# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10196
10197# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10198 alph = 0.5_wp*(1._wp + tanh((y_cc(j) - inth)/2.5e-3_wp))
10199# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10200
10201# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10202 if (alph < eps) alph = eps
10203# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10204 if (alph > 1._wp - eps) alph = 1._wp - eps
10205# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10206
10207# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10208 if (y_cc(j) > inth) then
10209# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10210 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = alph
10211# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10212 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = 1._wp - alph
10213# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10214 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = alph*rhoh
10215# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10216 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = (1._wp - alph)*rhol
10217# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10218 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = pref + rhoh*9.81_wp*(1.2_wp - y_cc(j))
10219# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10220 else
10221# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10222 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = alph
10223# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10224 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = 1._wp - alph
10225# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10226 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = alph*rhoh
10227# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10228 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = (1._wp - alph)*rhol
10229# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10230 pint = pref + rhoh*9.81_wp*(1.2_wp - inth)
10231# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10232 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = pint + rhol*9.81_wp*(inth - y_cc(j))
10233# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10234 end if
10235# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10236 case (205) ! 2D lung wave interaction problem
10237# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10238 h = 0.0_wp ! non dim origin y
10239# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10240 lam = 1.0_wp ! non dim lambda
10241# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10242 amp = patch_icpp(patch_id)%a(2) ! to be changed later! !non dim amplitude
10243# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10244
10245# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10246 inth = amp*sin(2*pi*x_cc(i)/lam - pi/2) + h
10247# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10248
10249# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10250 if (y_cc(j) > inth) then
10251# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10252 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(1)
10253# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10254 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(2)
10255# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10256 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = patch_icpp(1)%pres
10257# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10258 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = patch_icpp(1)%alpha(1)
10259# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10260 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = patch_icpp(1)%alpha(2)
10261# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10262 end if
10263# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10264 case (206) ! 2D lung wave interaction problem - horizontal domain
10265# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10266 h = 0.0_wp ! non dim origin y
10267# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10268 lam = 1.0_wp ! non dim lambda
10269# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10270 amp = patch_icpp(patch_id)%a(2)
10271# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10272
10273# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10274 intl = amp*sin(2*pi*y_cc(j)/lam - pi/2) + h
10275# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10276
10277# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10278 if (x_cc(i) > intl) then ! this is the liquid
10279# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10280 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(1)
10281# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10282 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(2)
10283# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10284 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = patch_icpp(1)%pres
10285# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10286 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = patch_icpp(1)%alpha(1)
10287# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10288 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = patch_icpp(1)%alpha(2)
10289# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10290 end if
10291# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10292 case (207) ! Kelvin Helmholtz Instability
10293# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10294 sigma = 0.05_wp/sqrt(2.0_wp)
10295# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10296 gauss1 = exp(-(y_cc(j) - 0.75_wp)**2/(2.0_wp*sigma**2))
10297# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10298 gauss2 = exp(-(y_cc(j) - 0.25_wp)**2/(2.0_wp*sigma**2))
10299# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10300 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = 0.1_wp*sin(4.0_wp*pi*x_cc(i))*(gauss1 + gauss2)
10301# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10302 case (208) ! Richtmeyer Meshkov Instability
10303# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10304 lam = 1.0_wp
10305# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10306 eps = 1.0e-6_wp
10307# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10308 ei = 5.0_wp
10309# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10310 ! Smoothening function to smooth out sharp discontinuity in the interface
10311# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10312 if (x_cc(i) <= 0.7_wp*lam) then
10313# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10314 d = x_cc(i) - lam*(0.4_wp - 0.1_wp*sin(2.0_wp*pi*(y_cc(j)/lam + 0.25_wp)))
10315# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10316 fsm = 0.5_wp*(1.0_wp + erf(d/(ei*sqrt(dx*dy))))
10317# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10318 alpha_air = eps + (1.0_wp - 2.0_wp*eps)*fsm
10319# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10320 alpha_sf6 = 1.0_wp - alpha_air
10321# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10322 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = alpha_sf6*5.04_wp
10323# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10324 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = alpha_air*1.0_wp
10325# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10326 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = alpha_sf6
10327# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10328 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = alpha_air
10329# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10330 end if
10331# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10332 case (250) ! MHD Orszag-Tang vortex
10333# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10334 ! gamma = 5/3 rho = 25/(36*pi) p = 5/(12*pi) v = (-sin(2*pi*y), sin(2*pi*x), 0) B = (-sin(2*pi*y)/sqrt(4*pi),
10335# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10336 ! sin(4*pi*x)/sqrt(4*pi), 0)
10337# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10338
10339# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10340 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -sin(2._wp*pi*y_cc(j))
10341# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10342 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = sin(2._wp*pi*x_cc(i))
10343# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10344
10345# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10346 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = -sin(2._wp*pi*y_cc(j))/sqrt(4._wp*pi)
10347# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10348 q_prim_vf(eqn_idx%B%beg + 1)%sf(i, j, 0) = sin(4._wp*pi*x_cc(i))/sqrt(4._wp*pi)
10349# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10350 case (251) ! RMHD Cylindrical Blast Wave [Mignone, 2006: Section 4.3.1]
10351# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10352 if (x_cc(i)**2 + y_cc(j)**2 < 0.08_wp**2) then
10353# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10354 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 0.01
10355# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10356 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1.0
10357# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10358 else if (x_cc(i)**2 + y_cc(j)**2 <= 1._wp**2) then
10359# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10360 ! Linear interpolation between r=0.08 and r=1.0
10361# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10362 factor = (1.0_wp - sqrt(x_cc(i)**2 + y_cc(j)**2))/(1.0_wp - 0.08_wp)
10363# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10364 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 0.01_wp*factor + 1.e-4_wp*(1.0_wp - factor)
10365# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10366 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1.0_wp*factor + 3.e-5_wp*(1.0_wp - factor)
10367# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10368 else
10369# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10370 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1.e-4_wp
10371# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10372 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 3.e-5_wp
10373# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10374 end if
10375# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10376
10377# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10378 ! case 252 is for the 2D MHD Rotor problem
10379# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10380 case (252) ! 2D MHD Rotor Problem
10381# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10382 ! Ambient conditions are set in the JSON file. This case imposes the dense, rotating cylinder.
10383# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10384 !
10385# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10386 ! gamma = 1.4 Ambient medium (r > 0.1): rho = 1, p = 1, v = 0, B = (1,0,0) Rotor (r <= 0.1): rho = 10, p = 1 v has angular
10387# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10388 ! velocity w=20, giving v_tan=2 at r=0.1
10389# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10390
10391# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10392 ! Calculate distance squared from the center
10393# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10394 r_sq = (x_cc(i) - 0.5_wp)**2 + (y_cc(j) - 0.5_wp)**2
10395# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10396
10397# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10398 ! inner radius of 0.1
10399# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10400 if (r_sq <= 0.1**2) then
10401# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10402 ! -- Inside the rotor -- Set density uniformly to 10
10403# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10404 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 10._wp
10405# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10406
10407# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10408 ! Set vup constant rotation of rate v=2 v_x = -omega * (y - y_c) v_y = omega * (x - x_c)
10409# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10410 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -20._wp*(y_cc(j) - 0.5_wp)
10411# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10412 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = 20._wp*(x_cc(i) - 0.5_wp)
10413# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10414
10415# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10416 ! taper width of 0.015
10417# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10418 else if (r_sq <= 0.115**2) then
10419# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10420 ! linearly smooth the function between r = 0.1 and 0.115
10421# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10422 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1._wp + 9._wp*(0.115_wp - sqrt(r_sq))/(0.015_wp)
10423# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10424
10425# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10426 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -(2._wp/sqrt(r_sq))*(y_cc(j) - 0.5_wp)*(0.115_wp - sqrt(r_sq))/(0.015_wp)
10427# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10428 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = (2._wp/sqrt(r_sq))*(x_cc(i) - 0.5_wp)*(0.115_wp - sqrt(r_sq))/(0.015_wp)
10429# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10430 end if
10431# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10432 case (253) ! MHD Smooth Magnetic Vortex
10433# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10434 ! Section 5.2 of Implicit hybridized discontinuous Galerkin methods for compressible magnetohydrodynamics C. Ciuca, P.
10435# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10436 ! Fernandez, A. Christophe, N.C. Nguyen, J. Peraire
10437# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10438
10439# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10440 ! velocity
10441# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10442 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 1._wp - (y_cc(j)*exp(1 - (x_cc(i)**2 + y_cc(j)**2))/(2.*pi))
10443# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10444 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = 1._wp + (x_cc(i)*exp(1 - (x_cc(i)**2 + y_cc(j)**2))/(2.*pi))
10445# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10446
10447# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10448 ! magnetic field
10449# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10450 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = -y_cc(j)*exp(1 - (x_cc(i)**2 + y_cc(j)**2))/(2.*pi)
10451# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10452 q_prim_vf(eqn_idx%B%beg + 1)%sf(i, j, 0) = x_cc(i)*exp(1 - (x_cc(i)**2 + y_cc(j)**2))/(2.*pi)
10453# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10454
10455# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10456 ! pressure
10457# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10458 q_prim_vf(eqn_idx%E)%sf(i, j, &
10459# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10460 & 0) = 1._wp + (1 - 2._wp*(x_cc(i)**2 + y_cc(j)**2))*exp(1 - (x_cc(i)**2 + y_cc(j)**2))/((2._wp*pi)**3)
10461# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10462 case (260) ! Gaussian Divergence Pulse
10463# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10464 ! Bx(x) = 1 + C * erf((x-0.5)/\sigma) => \partialBx/\partialx = C * (2/\sqrt\pi) * exp[-((x-0.5)/\sigma)**2] * (1/\sigma)
10465# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10466 ! Choose C = \epsilon * \sigma * \sqrt\pi / 2 => \partialBx/\partialx = \epsilon * exp[-((x-0.5)/\sigma)**2] \psi is
10467# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10468 ! initialized to zero everywhere.
10469# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10470
10471# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10472 eps_mhd = patch_icpp(patch_id)%a(2)
10473# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10474 sigma = patch_icpp(patch_id)%a(3)
10475# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10476 c_mhd = eps_mhd*sigma*sqrt(pi)*0.5_wp
10477# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10478
10479# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10480 ! B-field
10481# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10482 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = 1._wp + c_mhd*erf((x_cc(i) - 0.5_wp)/sigma)
10483# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10484 case (261) ! Blob
10485# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10486 r0 = 1._wp/sqrt(8._wp)
10487# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10488 r2 = x_cc(i)**2 + y_cc(j)**2
10489# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10490 r = sqrt(r2)
10491# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10492 alpha = r/r0
10493# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10494 if (alpha < 1) then
10495# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10496 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = 1._wp/sqrt(4._wp*pi)*(alpha**8 - 2._wp*alpha**4 + 1._wp)
10497# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10498 ! q_prim_vf(eqn_idx%B%beg)%sf(i,j,0) = 1._wp/sqrt(4000._wp*pi) * (4096._wp*r2**4 - 128._wp*r2**2 + 1._wp)
10499# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10500 ! q_prim_vf(eqn_idx%B%beg)%sf(i,j,0) = 1._wp/(4._wp*pi) * (alpha**8 - 2._wp*alpha**4 + 1._wp)
10501# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10502 ! q_prim_vf(eqn_idx%E)%sf(i,j,0) = 6._wp - q_prim_vf(eqn_idx%B%beg)%sf(i,j,0)**2/2._wp
10503# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10504 end if
10505# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10506 case (262) ! Tilted 2D MHD shock‐tube at α = arctan2 (≈63.4°)
10507# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10508 ! rotate by \alpha = atan(2)
10509# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10510 alpha = atan(2._wp)
10511# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10512 cosa = cos(alpha)
10513# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10514 sina = sin(alpha)
10515# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10516 ! projection along shock normal
10517# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10518 r = x_cc(i)*cosa + y_cc(j)*sina
10519# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10520
10521# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10522 if (r <= 0.5_wp) then
10523# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10524 ! LEFT state: \rho=1, v\parallel=+10, v\perp=0, p=20, B\parallel=B\perp=5/\sqrt(4\pi)
10525# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10526 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1._wp
10527# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10528 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 10._wp*cosa
10529# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10530 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = 10._wp*sina
10531# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10532 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 20._wp
10533# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10534 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = (5._wp/sqrt(4._wp*pi))*cosa - (5._wp/sqrt(4._wp*pi))*sina
10535# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10536 q_prim_vf(eqn_idx%B%beg + 1)%sf(i, j, 0) = (5._wp/sqrt(4._wp*pi))*sina + (5._wp/sqrt(4._wp*pi))*cosa
10537# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10538 else
10539# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10540 ! RIGHT state: \rho=1, v\parallel=-10, v\perp=0, p=1, B\parallel=B\perp=5/\sqrt(4\pi)
10541# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10542 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1._wp
10543# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10544 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -10._wp*cosa
10545# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10546 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = -10._wp*sina
10547# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10548 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1._wp
10549# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10550 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = (5._wp/sqrt(4._wp*pi))*cosa - (5._wp/sqrt(4._wp*pi))*sina
10551# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10552 q_prim_vf(eqn_idx%B%beg + 1)%sf(i, j, 0) = (5._wp/sqrt(4._wp*pi))*sina + (5._wp/sqrt(4._wp*pi))*cosa
10553# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10554 end if
10555# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10556 ! v^z and B^z remain zero by default
10557# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10558 case (270) ! 2D extrusion of 1D profile from external data
10559# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10560 ! This hardcoded case extrudes a 1D profile to initialize a 2D simulation domain
10561# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10562 if (.not. files_loaded) then
10563# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10564 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
10565# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10566 do f = 1, max_files
10567# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10568 write (file_num_str, '(I0)') f
10569# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10570 filenames(f) = trim(init_dir) // "prim." // trim(file_num_str) // ".00." // zeros_default // ".dat"
10571# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10572 end do
10573# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10574
10575# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10576 ! Common file reading setup
10577# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10578 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
10579# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10580 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
10581# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10582
10583# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10584 select case (num_dims)
10585# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10586 case (1, 2) ! 1D and 2D cases are similar
10587# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10588 ! Count lines
10589# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10590 line_count = 0
10591# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10592 do
10593# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10594 read (unit2, *, iostat=ios2) dummy_x, dummy_y
10595# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10596 if (ios2 /= 0) exit
10597# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10598 line_count = line_count + 1
10599# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10600 end do
10601# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10602 close (unit2)
10603# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10604
10605# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10606 xrows = line_count
10607# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10608 yrows = 1
10609# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10610 index_x = 0
10611# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10612 if (num_dims == 2) index_x = i
10613# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10614#ifdef MFC_DEBUG
10615# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10616 block
10617# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10618 use iso_fortran_env, only: output_unit
10619# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10620
10621# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10622 print *, 'm_icpp_patches.fpp:760: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
10623# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10624
10625# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10626 call flush (output_unit)
10627# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10628 end block
10629# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10630#endif
10631# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10632 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
10633# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10634
10635# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10636
10637# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10638
10639# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10640#if defined(MFC_OpenACC)
10641# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10642!$acc enter data create(x_coords, stored_values)
10643# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10644#elif defined(MFC_OpenMP)
10645# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10646!$omp target enter data map(always,alloc:x_coords, stored_values)
10647# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10648#endif
10649# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10650
10651# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10652 ! Read data from all files
10653# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10654 do f = 1, max_files
10655# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10656 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
10657# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10658 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
10659# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10660
10661# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10662 do iter = 1, xrows
10663# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10664 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
10665# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10666 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
10667# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10668 end do
10669# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10670 close (unit)
10671# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10672 end do
10673# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10674
10675# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10676 ! Calculate offsets
10677# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10678 domain_xstart = x_coords(1)
10679# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10680 x_step = x_cc(1) - x_cc(0)
10681# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10682 delta_x = merge(x_cc(0) - domain_xstart + x_step/2.0, x_cc(index_x) - domain_xstart + x_step/2.0, num_dims == 1)
10683# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10684 global_offset_x = nint(abs(delta_x)/x_step)
10685# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10686 case (3) ! 3D case - determine grid structure
10687# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10688 ! Find yRows by counting rows with same x
10689# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10690 read (unit2, *, iostat=ios2) x0, y0, dummy_z
10691# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10692 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
10693# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10694
10695# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10696 yrows = 1
10697# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10698 do
10699# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10700 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
10701# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10702 if (ios2 /= 0) exit
10703# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10704 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
10705# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10706 yrows = yrows + 1
10707# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10708 else
10709# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10710 exit
10711# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10712 end if
10713# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10714 end do
10715# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10716 close (unit2)
10717# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10718
10719# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10720 ! Count total rows
10721# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10722 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
10723# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10724 nrows = 0
10725# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10726 do
10727# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10728 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
10729# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10730 if (ios2 /= 0) exit
10731# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10732 nrows = nrows + 1
10733# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10734 end do
10735# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10736 close (unit2)
10737# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10738
10739# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10740 xrows = nrows/yrows
10741# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10742#ifdef MFC_DEBUG
10743# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10744 block
10745# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10746 use iso_fortran_env, only: output_unit
10747# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10748
10749# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10750 print *, 'm_icpp_patches.fpp:760: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
10751# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10752
10753# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10754 call flush (output_unit)
10755# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10756 end block
10757# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10758#endif
10759# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10760 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
10761# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10762
10763# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10764
10765# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10766
10767# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10768
10769# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10770#if defined(MFC_OpenACC)
10771# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10772!$acc enter data create(x_coords, y_coords, stored_values)
10773# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10774#elif defined(MFC_OpenMP)
10775# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10776!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
10777# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10778#endif
10779# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10780 index_x = i
10781# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10782 index_y = j
10783# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10784
10785# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10786 ! Read all files
10787# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10788 do f = 1, max_files
10789# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10790 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
10791# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10792 if (ios /= 0) then
10793# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10794 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
10795# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10796 cycle
10797# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10798 end if
10799# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10800
10801# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10802 iter = 0
10803# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10804 do iix = 1, xrows
10805# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10806 do iiy = 1, yrows
10807# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10808 iter = iter + 1
10809# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10810 if (f == 1) then
10811# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10812 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
10813# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10814 else
10815# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10816 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
10817# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10818 end if
10819# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10820 if (ios /= 0) call s_mpi_abort("Error reading data")
10821# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10822 end do
10823# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10824 end do
10825# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10826 close (unit)
10827# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10828 end do
10829# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10830
10831# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10832 ! Calculate offsets
10833# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10834 x_step = x_cc(1) - x_cc(0)
10835# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10836 y_step = y_cc(1) - y_cc(0)
10837# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10838 delta_x = x_cc(index_x) - x_coords(1) + x_step/2.0_wp
10839# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10840 delta_y = y_cc(index_y) - y_coords(1) + y_step/2.0_wp
10841# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10842 global_offset_x = nint(abs(delta_x)/x_step)
10843# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10844 global_offset_y = nint(abs(delta_y)/y_step)
10845# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10846 end select
10847# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10848
10849# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10850 files_loaded = .true.
10851# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10852 end if
10853# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10854
10855# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10856 ! Data assignment
10857# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10858 select case (num_dims)
10859# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10860 case (1)
10861# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10862 idx = i + 1 + global_offset_x
10863# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10864 do f = 1, sys_size
10865# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10866 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
10867# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10868 end do
10869# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10870 case (2)
10871# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10872 idx = i + 1 + global_offset_x - index_x
10873# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10874 do f = 1, sys_size - 1
10875# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10876 jump = merge(1, 0, f >= eqn_idx%mom%end)
10877# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10878 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
10879# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10880 end do
10881# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10882 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
10883# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10884 case (3)
10885# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10886 idx = i + 1 + global_offset_x - index_x
10887# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10888 idy = j + 1 + global_offset_y - index_y
10889# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10890 do f = 1, sys_size - 1
10891# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10892 jump = merge(1, 0, f >= eqn_idx%mom%end)
10893# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10894 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
10895# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10896 end do
10897# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10898 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
10899# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10900 end select
10901# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10902 case (280) ! Isentropic vortex
10903# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10904 ! This is patch is hard-coded for test suite optimization used in the 2D_isentropicvortex case: This analytic patch uses
10905# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10906 ! geometry 2
10907# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10908 if (patch_id == 1) then
10909# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10910 q_prim_vf(eqn_idx%E)%sf(i, j, &
10911# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10912 & 0) = 1.0*(1.0 - (1.0/1.0)*(5.0/(2.0*pi))*(5.0/(8.0*1.0*(1.4 + 1.0)*pi))*exp(2.0*1.0*(1.0 - (x_cc(i) &
10913# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10914 & - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0)))**(1.4 + 1.0)
10915# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10916 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, j, &
10917# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10918 & 0) = 1.0*(1.0 - (1.0/1.0)*(5.0/(2.0*pi))*(5.0/(8.0*1.0*(1.4 + 1.0)*pi))*exp(2.0*1.0*(1.0 - (x_cc(i) &
10919# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10920 & - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0)))**1.4
10921# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10922 q_prim_vf(eqn_idx%mom%beg + 0)%sf(i, j, &
10923# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10924 & 0) = 0.0 + (y_cc(j) - patch_icpp(1)%y_centroid)*(5.0/(2.0*pi))*exp(1.0*(1.0 - (x_cc(i) - patch_icpp(1) &
10925# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10926 & %x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0))
10927# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10928 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, &
10929# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10930 & 0) = 0.0 - (x_cc(i) - patch_icpp(1)%x_centroid)*(5.0/(2.0*pi))*exp(1.0*(1.0 - (x_cc(i) - patch_icpp(1) &
10931# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10932 & %x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0))
10933# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10934 end if
10935# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10936 case (281) ! Acoustic pulse
10937# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10938 ! This is patch is hard-coded for test suite optimization used in the 2D_acoustic_pulse case: This analytic patch uses
10939# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10940 ! geometry 2
10941# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10942 if (patch_id == 2) then
10943# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10944 q_prim_vf(eqn_idx%E)%sf(i, j, &
10945# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10946 & 0) = 101325*(1 - 0.5*(1.4 - 1)*(0.4)**2*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2))))**(1.4/(1.4 - 1))
10947# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10948 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, j, &
10949# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10950 & 0) = 1*(1 - 0.5*(1.4 - 1)*(0.4)**2*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2))))**(1/(1.4 - 1))
10951# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10952 end if
10953# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10954 case (282) ! Zero-circulation vortex
10955# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10956 ! This is patch is hard-coded for test suite optimization used in the 2D_zero_circ_vortex case: This analytic patch uses
10957# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10958 ! geometry 2
10959# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10960 if (patch_id == 2) then
10961# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10962 q_prim_vf(eqn_idx%E)%sf(i, j, &
10963# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10964 & 0) = 101325*(1 - 0.5*(1.4 - 1)*(0.1/0.3)**2*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2))))**(1.4/(1.4 - 1))
10965# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10966 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, j, &
10967# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10968 & 0) = 1*(1 - 0.5*(1.4 - 1)*(0.1/0.3)**2*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2))))**(1/(1.4 - 1))
10969# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10970 q_prim_vf(eqn_idx%mom%beg + 0)%sf(i, j, &
10971# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10972 & 0) = 112.99092883944267*(1 - (0.1/0.3))*y_cc(j)*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2)))
10973# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10974 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, &
10975# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10976 & 0) = 112.99092883944267*((0.1/0.3))*x_cc(i)*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2)))
10977# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10978 end if
10979# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10980 case (291) ! Isothermal Flat Plate
10981# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10982 t_inf = 1125.0_wp
10983# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10984 t_wall = 600.0_wp
10985# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10986 p_atm = 101325.0_wp
10987# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10988
10989# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10990 ! Boundary/Shear Layer thicknesses
10991# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10992 delta_th = 0.0003_wp ! Thermal BL thickness
10993# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10994 delta_shear = 8e-3_wp ! Velocity BL thickness
10995# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10996
10997# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10998 u_max = 50.0_wp ! Freestream Velocity (m/s)
10999# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11000
11001# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11002 mw_n2 = 28.0134e-3_wp
11003# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11004 mw_o2 = 31.999e-3_wp
11005# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11006 y_n2 = 0.767_wp
11007# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11008 y_o2 = 0.233_wp
11009# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11010 r_mix = 8.314462618_wp*((y_n2/mw_n2) + (y_o2/mw_o2))
11011# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11012 bottom_blend_u = tanh(y_cc(j)/delta_shear)
11013# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11014 bottom_blend_t = tanh(y_cc(j)/delta_th)
11015# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11016 u_mean = u_max*bottom_blend_u
11017# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11018 t_loc = t_wall + (t_inf - t_wall)*bottom_blend_t
11019# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11020 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = p_atm/(r_mix*t_loc)
11021# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11022 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = u_mean
11023# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11024 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
11025# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11026 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p_atm
11027# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11028 q_prim_vf(eqn_idx%species%beg)%sf(i, j, 0) = y_o2
11029# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11030 q_prim_vf(eqn_idx%species%end)%sf(i, j, 0) = y_n2
11031# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11032 case default
11033# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11034 if (proc_rank == 0) then
11035# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11036 call s_int_to_str(patch_id, istr)
11037# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11038 call s_mpi_abort("Invalid hcid specified for patch " // trim(istr))
11039# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11040 end if
11041# 760 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11042 end select
11043 end if
11044
11045 ! Updating the patch identities bookkeeping variable
11046 if (1._wp - eta < sgm_eps) patch_id_fp(i, j, 0) = patch_id
11047
11048 ! Assign Parameters
11049 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = u0*sin(x_cc(i)/l0)*cos(y_cc(j)/l0)
11050 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = -u0*cos(x_cc(i)/l0)*sin(y_cc(j)/l0)
11051 q_prim_vf(eqn_idx%E)%sf(i, j, &
11052 & 0) = patch_icpp(patch_id)%pres + (cos(2*x_cc(i))/l0 + cos(2*y_cc(j))/l0)*(q_prim_vf(1)%sf(i, j, &
11053 & 0)*u0*u0)/16
11054 end if
11055 end do
11056 end do
11057 if (allocated(stored_values)) then
11058# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11059#ifdef MFC_DEBUG
11060# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11061 block
11062# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11063 use iso_fortran_env, only: output_unit
11064# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11065
11066# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11067 print *, 'm_icpp_patches.fpp:775: ', '@:DEALLOCATE(stored_values)'
11068# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11069
11070# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11071 call flush (output_unit)
11072# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11073 end block
11074# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11075#endif
11076# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11077
11078# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11079#if defined(MFC_OpenACC)
11080# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11081!$acc exit data delete(stored_values)
11082# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11083#elif defined(MFC_OpenMP)
11084# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11085!$omp target exit data map(release:stored_values)
11086# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11087#endif
11088# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11089 deallocate (stored_values)
11090# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11091#ifdef MFC_DEBUG
11092# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11093 block
11094# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11095 use iso_fortran_env, only: output_unit
11096# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11097
11098# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11099 print *, 'm_icpp_patches.fpp:775: ', '@:DEALLOCATE(x_coords)'
11100# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11101
11102# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11103 call flush (output_unit)
11104# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11105 end block
11106# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11107#endif
11108# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11109
11110# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11111#if defined(MFC_OpenACC)
11112# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11113!$acc exit data delete(x_coords)
11114# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11115#elif defined(MFC_OpenMP)
11116# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11117!$omp target exit data map(release:x_coords)
11118# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11119#endif
11120# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11121 deallocate (x_coords)
11122# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11123 end if
11124# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11125
11126# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11127 if (allocated(y_coords)) then
11128# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11129#ifdef MFC_DEBUG
11130# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11131 block
11132# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11133 use iso_fortran_env, only: output_unit
11134# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11135
11136# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11137 print *, 'm_icpp_patches.fpp:775: ', '@:DEALLOCATE(y_coords)'
11138# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11139
11140# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11141 call flush (output_unit)
11142# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11143 end block
11144# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11145#endif
11146# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11147
11148# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11149#if defined(MFC_OpenACC)
11150# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11151!$acc exit data delete(y_coords)
11152# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11153#elif defined(MFC_OpenMP)
11154# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11155!$omp target exit data map(release:y_coords)
11156# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11157#endif
11158# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11159 deallocate (y_coords)
11160# 775 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11161 end if
11162
11163 end subroutine s_icpp_2d_taylorgreen_vortex
11164
11165 !> Initialize a 1D bubble-pulse patch with analytical primitive variable profiles.
11166 subroutine s_icpp_1d_bubble_pulse(patch_id, patch_id_fp, q_prim_vf)
11167
11168 ! Description: This patch assigns the primitive variables as analytical functions such that the code can be verified.
11169
11170 ! Patch identifier
11171 integer, intent(in) :: patch_id
11172
11173#ifdef MFC_MIXED_PRECISION
11174 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
11175#else
11176 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
11177#endif
11178 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
11179
11180 ! Generic loop iterators
11181 integer :: i, j, k
11182 ! Placeholders for the cell boundary values
11183 real(wp) :: pi_inf, gamma, lit_gamma
11184
11185 integer :: xRows, yRows, nRows, iix, iiy, max_files
11186# 799 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11187 integer :: f, iter, ios, ios2, unit, unit2, idx, idy, index_x, index_y, jump, line_count, ycount
11188# 799 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11189 real(wp) :: x_len, x_step, y_len, y_step
11190# 799 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11191 real(wp) :: dummy_x, dummy_y, dummy_z, x0, y0
11192# 799 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11193 integer :: global_offset_x, global_offset_y !< MPI subdomain offset
11194# 799 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11195 real(wp) :: delta_x, delta_y
11196# 799 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11197 character(len=100), dimension(sys_size) :: fileNames !< Arrays to store all data from files
11198# 799 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11199 character(len=200) :: errmsg
11200# 799 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11201 real(wp), allocatable :: stored_values(:,:,:)
11202# 799 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11203 real(wp), allocatable :: x_coords(:), y_coords(:)
11204# 799 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11205 logical :: files_loaded = .false.
11206# 799 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11207 real(wp) :: domain_xstart, domain_xend, domain_ystart, domain_yend
11208# 799 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11209 character(len=*), parameter :: init_dir = "/home/MFC/FilesDirectory" !< For example /home/MFC/examples/1D_Shock/D/
11210# 799 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11211 character(len=20) :: file_num_str !< For storing the file number as a string
11212# 799 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11213 character(len=20) :: zeros_part !< For the trailing zeros part
11214# 799 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11215 character(len=6), parameter :: zeros_default = "000000" !< Default zeros (can be changed)
11216 ! Place any declaration of intermediate variables here
11217# 800 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11218 real(wp) :: x_mid_diffu, width_sq, profile_shape, temp, molar_mass_inv, y1, y2, y3, y4
11219
11220 pi_inf = pi_infs(1)
11221 gamma = gammas(1)
11222 lit_gamma = gs_min(1)
11223
11224 ! Transferring the patch's centroid and length information
11225 x_centroid = patch_icpp(patch_id)%x_centroid
11226 length_x = patch_icpp(patch_id)%length_x
11227
11228 ! Computing the beginning and the end x- and y-coordinates of the patch based on its centroid and lengths
11229 x_boundary%beg = x_centroid - 0.5_wp*length_x
11230 x_boundary%end = x_centroid + 0.5_wp*length_x
11231
11232 ! Set eta=1 (no smoothing for this patch type)
11233 eta = 1._wp
11234
11235 ! Assign patch vars if cell is covered and patch has write permission
11236 do i = 0, m
11237 if (x_boundary%beg <= x_cc(i) .and. x_boundary%end >= x_cc(i) .and. patch_icpp(patch_id)%alter_patch(patch_id_fp(i, &
11238 & 0, 0))) then
11239 call s_assign_patch_primitive_variables(patch_id, i, 0, 0, eta, q_prim_vf, patch_id_fp)
11240
11241
11242 if (patch_icpp(patch_id)%hcid /= dflt_int) then
11243 select case (patch_icpp(patch_id)%hcid)
11244# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11245 case (150) ! 1D Smooth Alfven Case for MHD
11246# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11247 ! velocity
11248# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11249 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, 0, 0) = 0.1_wp*sin(2._wp*pi*x_cc(i))
11250# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11251 q_prim_vf(eqn_idx%mom%beg + 2)%sf(i, 0, 0) = 0.1_wp*cos(2._wp*pi*x_cc(i))
11252# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11253
11254# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11255 ! magnetic field
11256# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11257 q_prim_vf(eqn_idx%B%end - 1)%sf(i, 0, 0) = 0.1_wp*sin(2._wp*pi*x_cc(i))
11258# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11259 q_prim_vf(eqn_idx%B%end)%sf(i, 0, 0) = 0.1_wp*cos(2._wp*pi*x_cc(i))
11260# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11261 case (170) ! 1D profile from external data (e.g. Cantera, SDtoolbox)
11262# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11263 ! This hardcoded case can be used to start a simulation with initial conditions given from a known 1D profile (e.g. Cantera,
11264# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11265 ! SDtoolbox)
11266# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11267 if (.not. files_loaded) then
11268# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11269 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
11270# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11271 do f = 1, max_files
11272# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11273 write (file_num_str, '(I0)') f
11274# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11275 filenames(f) = trim(init_dir) // "prim." // trim(file_num_str) // ".00." // zeros_default // ".dat"
11276# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11277 end do
11278# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11279
11280# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11281 ! Common file reading setup
11282# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11283 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
11284# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11285 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
11286# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11287
11288# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11289 select case (num_dims)
11290# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11291 case (1, 2) ! 1D and 2D cases are similar
11292# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11293 ! Count lines
11294# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11295 line_count = 0
11296# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11297 do
11298# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11299 read (unit2, *, iostat=ios2) dummy_x, dummy_y
11300# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11301 if (ios2 /= 0) exit
11302# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11303 line_count = line_count + 1
11304# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11305 end do
11306# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11307 close (unit2)
11308# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11309
11310# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11311 xrows = line_count
11312# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11313 yrows = 1
11314# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11315 index_x = 0
11316# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11317 if (num_dims == 2) index_x = i
11318# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11319#ifdef MFC_DEBUG
11320# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11321 block
11322# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11323 use iso_fortran_env, only: output_unit
11324# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11325
11326# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11327 print *, 'm_icpp_patches.fpp:825: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
11328# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11329
11330# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11331 call flush (output_unit)
11332# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11333 end block
11334# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11335#endif
11336# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11337 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
11338# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11339
11340# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11341
11342# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11343
11344# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11345#if defined(MFC_OpenACC)
11346# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11347!$acc enter data create(x_coords, stored_values)
11348# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11349#elif defined(MFC_OpenMP)
11350# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11351!$omp target enter data map(always,alloc:x_coords, stored_values)
11352# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11353#endif
11354# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11355
11356# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11357 ! Read data from all files
11358# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11359 do f = 1, max_files
11360# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11361 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
11362# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11363 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
11364# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11365
11366# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11367 do iter = 1, xrows
11368# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11369 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
11370# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11371 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
11372# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11373 end do
11374# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11375 close (unit)
11376# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11377 end do
11378# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11379
11380# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11381 ! Calculate offsets
11382# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11383 domain_xstart = x_coords(1)
11384# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11385 x_step = x_cc(1) - x_cc(0)
11386# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11387 delta_x = merge(x_cc(0) - domain_xstart + x_step/2.0, x_cc(index_x) - domain_xstart + x_step/2.0, num_dims == 1)
11388# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11389 global_offset_x = nint(abs(delta_x)/x_step)
11390# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11391 case (3) ! 3D case - determine grid structure
11392# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11393 ! Find yRows by counting rows with same x
11394# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11395 read (unit2, *, iostat=ios2) x0, y0, dummy_z
11396# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11397 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
11398# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11399
11400# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11401 yrows = 1
11402# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11403 do
11404# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11405 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
11406# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11407 if (ios2 /= 0) exit
11408# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11409 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
11410# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11411 yrows = yrows + 1
11412# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11413 else
11414# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11415 exit
11416# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11417 end if
11418# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11419 end do
11420# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11421 close (unit2)
11422# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11423
11424# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11425 ! Count total rows
11426# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11427 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
11428# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11429 nrows = 0
11430# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11431 do
11432# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11433 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
11434# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11435 if (ios2 /= 0) exit
11436# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11437 nrows = nrows + 1
11438# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11439 end do
11440# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11441 close (unit2)
11442# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11443
11444# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11445 xrows = nrows/yrows
11446# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11447#ifdef MFC_DEBUG
11448# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11449 block
11450# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11451 use iso_fortran_env, only: output_unit
11452# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11453
11454# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11455 print *, 'm_icpp_patches.fpp:825: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
11456# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11457
11458# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11459 call flush (output_unit)
11460# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11461 end block
11462# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11463#endif
11464# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11465 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
11466# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11467
11468# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11469
11470# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11471
11472# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11473
11474# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11475#if defined(MFC_OpenACC)
11476# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11477!$acc enter data create(x_coords, y_coords, stored_values)
11478# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11479#elif defined(MFC_OpenMP)
11480# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11481!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
11482# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11483#endif
11484# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11485 index_x = i
11486# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11487 index_y = j
11488# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11489
11490# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11491 ! Read all files
11492# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11493 do f = 1, max_files
11494# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11495 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
11496# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11497 if (ios /= 0) then
11498# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11499 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
11500# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11501 cycle
11502# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11503 end if
11504# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11505
11506# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11507 iter = 0
11508# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11509 do iix = 1, xrows
11510# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11511 do iiy = 1, yrows
11512# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11513 iter = iter + 1
11514# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11515 if (f == 1) then
11516# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11517 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
11518# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11519 else
11520# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11521 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
11522# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11523 end if
11524# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11525 if (ios /= 0) call s_mpi_abort("Error reading data")
11526# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11527 end do
11528# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11529 end do
11530# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11531 close (unit)
11532# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11533 end do
11534# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11535
11536# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11537 ! Calculate offsets
11538# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11539 x_step = x_cc(1) - x_cc(0)
11540# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11541 y_step = y_cc(1) - y_cc(0)
11542# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11543 delta_x = x_cc(index_x) - x_coords(1) + x_step/2.0_wp
11544# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11545 delta_y = y_cc(index_y) - y_coords(1) + y_step/2.0_wp
11546# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11547 global_offset_x = nint(abs(delta_x)/x_step)
11548# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11549 global_offset_y = nint(abs(delta_y)/y_step)
11550# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11551 end select
11552# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11553
11554# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11555 files_loaded = .true.
11556# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11557 end if
11558# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11559
11560# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11561 ! Data assignment
11562# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11563 select case (num_dims)
11564# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11565 case (1)
11566# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11567 idx = i + 1 + global_offset_x
11568# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11569 do f = 1, sys_size
11570# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11571 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
11572# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11573 end do
11574# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11575 case (2)
11576# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11577 idx = i + 1 + global_offset_x - index_x
11578# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11579 do f = 1, sys_size - 1
11580# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11581 jump = merge(1, 0, f >= eqn_idx%mom%end)
11582# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11583 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
11584# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11585 end do
11586# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11587 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
11588# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11589 case (3)
11590# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11591 idx = i + 1 + global_offset_x - index_x
11592# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11593 idy = j + 1 + global_offset_y - index_y
11594# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11595 do f = 1, sys_size - 1
11596# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11597 jump = merge(1, 0, f >= eqn_idx%mom%end)
11598# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11599 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
11600# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11601 end do
11602# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11603 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
11604# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11605 end select
11606# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11607 case (180) ! Shu-Osher problem
11608# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11609 ! This is patch is hard-coded for test suite optimization used in the 1D_shuoser cases: "patch_icpp(2)%alpha_rho(1)": "1 +
11610# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11611 ! 0.2*sin(5*x)"
11612# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11613 if (patch_id == 2) then
11614# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11615 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, 0, 0) = 1 + 0.2*sin(5*x_cc(i))
11616# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11617 end if
11618# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11619 case (181) ! Titarev-Torro problem
11620# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11621 ! This is patch is hard-coded for test suite optimization used in the 1D_titarevtorro cases: "patch_icpp(2)%alpha_rho(1)":
11622# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11623 ! "1 + 0.1*sin(20*x*pi)"
11624# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11625 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, 0, 0) = 1 + 0.1*sin(20*x_cc(i)*pi)
11626# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11627 case (182) ! Multi-component diffusion
11628# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11629 ! This patch is a hard-coded for test suite optimization (multiple component diffusion)
11630# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11631 x_mid_diffu = 0.05_wp/2.0_wp
11632# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11633 width_sq = (2.5_wp*10.0_wp**(-3.0_wp))**2
11634# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11635 profile_shape = 1.0_wp - 0.5_wp*exp(-(x_cc(i) - x_mid_diffu)**2/width_sq)
11636# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11637 q_prim_vf(eqn_idx%mom%beg)%sf(i, 0, 0) = 0.0_wp
11638# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11639 q_prim_vf(eqn_idx%E)%sf(i, 0, 0) = 1.01325_wp*(10.0_wp)**5
11640# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11641 q_prim_vf(eqn_idx%adv%beg)%sf(i, 0, 0) = 1.0_wp
11642# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11643
11644# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11645 y1 = (0.195_wp - 0.142_wp)*profile_shape + 0.142_wp
11646# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11647 y2 = (0.0_wp - 0.1_wp)*profile_shape + 0.1_wp
11648# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11649 y3 = (0.214_wp - 0.0_wp)*profile_shape + 0.0_wp
11650# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11651 y4 = (0.591_wp - 0.758_wp)*profile_shape + 0.758_wp
11652# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11653
11654# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11655 q_prim_vf(eqn_idx%species%beg)%sf(i, 0, 0) = y1
11656# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11657 q_prim_vf(eqn_idx%species%beg + 1)%sf(i, 0, 0) = y2
11658# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11659 q_prim_vf(eqn_idx%species%beg + 2)%sf(i, 0, 0) = y3
11660# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11661 q_prim_vf(eqn_idx%species%beg + 3)%sf(i, 0, 0) = y4
11662# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11663
11664# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11665 temp = (320.0_wp - 1350.0_wp)*profile_shape + 1350.0_wp
11666# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11667
11668# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11669 molar_mass_inv = y1/31.998_wp + y2/18.01508_wp + y3/16.04256_wp + y4/28.0134_wp
11670# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11671
11672# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11673 q_prim_vf(eqn_idx%cont%beg)%sf(i, 0, 0) = 1.01325_wp*(10.0_wp)**5/(temp*8.3144626_wp*1000.0_wp*molar_mass_inv)
11674# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11675
11676# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11677 case(191) ! 1D Dual Isothermal case
11678# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11679
11680# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11681 q_prim_vf(eqn_idx%E)%sf(i, 0, 0) = 101325.0_wp
11682# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11683 q_prim_vf(eqn_idx%mom%beg)%sf(i, 0, 0) = 0.0_wp
11684# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11685 q_prim_vf(eqn_idx%species%beg)%sf(i, 0, 0) = 1.0_wp
11686# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11687
11688# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11689 if (x_cc(i) <= 0.025_wp) then
11690# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11691 temp = 700.0_wp + ((1000.0_wp - 700.0_wp)/0.025_wp)*x_cc(i)
11692# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11693 else
11694# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11695 temp = 1200.0_wp + ((900.0_wp - 1000.0_wp)/0.025_wp)*(x_cc(i) - 0.025_wp)
11696# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11697 end if
11698# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11699
11700# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11701 molar_mass_inv = 1.0_wp/2.01588_wp
11702# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11703 q_prim_vf(eqn_idx%cont%beg)%sf(i, 0, 0) = 101325.0_wp/(temp*8.3144626_wp*1000.0_wp*molar_mass_inv)
11704# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11705 case default
11706# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11707 call s_int_to_str(patch_id, istr)
11708# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11709 call s_mpi_abort("Invalid hcid specified for patch " // trim(istr))
11710# 825 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11711 end select
11712 end if
11713 end if
11714 end do
11715 if (allocated(stored_values)) then
11716# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11717#ifdef MFC_DEBUG
11718# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11719 block
11720# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11721 use iso_fortran_env, only: output_unit
11722# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11723
11724# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11725 print *, 'm_icpp_patches.fpp:829: ', '@:DEALLOCATE(stored_values)'
11726# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11727
11728# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11729 call flush (output_unit)
11730# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11731 end block
11732# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11733#endif
11734# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11735
11736# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11737#if defined(MFC_OpenACC)
11738# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11739!$acc exit data delete(stored_values)
11740# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11741#elif defined(MFC_OpenMP)
11742# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11743!$omp target exit data map(release:stored_values)
11744# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11745#endif
11746# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11747 deallocate (stored_values)
11748# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11749#ifdef MFC_DEBUG
11750# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11751 block
11752# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11753 use iso_fortran_env, only: output_unit
11754# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11755
11756# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11757 print *, 'm_icpp_patches.fpp:829: ', '@:DEALLOCATE(x_coords)'
11758# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11759
11760# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11761 call flush (output_unit)
11762# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11763 end block
11764# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11765#endif
11766# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11767
11768# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11769#if defined(MFC_OpenACC)
11770# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11771!$acc exit data delete(x_coords)
11772# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11773#elif defined(MFC_OpenMP)
11774# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11775!$omp target exit data map(release:x_coords)
11776# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11777#endif
11778# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11779 deallocate (x_coords)
11780# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11781 end if
11782# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11783
11784# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11785 if (allocated(y_coords)) then
11786# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11787#ifdef MFC_DEBUG
11788# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11789 block
11790# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11791 use iso_fortran_env, only: output_unit
11792# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11793
11794# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11795 print *, 'm_icpp_patches.fpp:829: ', '@:DEALLOCATE(y_coords)'
11796# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11797
11798# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11799 call flush (output_unit)
11800# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11801 end block
11802# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11803#endif
11804# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11805
11806# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11807#if defined(MFC_OpenACC)
11808# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11809!$acc exit data delete(y_coords)
11810# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11811#elif defined(MFC_OpenMP)
11812# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11813!$omp target exit data map(release:y_coords)
11814# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11815#endif
11816# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11817 deallocate (y_coords)
11818# 829 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11819 end if
11820
11821 end subroutine s_icpp_1d_bubble_pulse
11822
11823 !> 2D modal (Fourier) patch. theta = atan2(y - y_centroid, x - x_centroid). Additive (modal_use_exp_form false): R = radius +
11824 !! sum_n [fourier_cos*cos(n*theta)+fourier_sin*sin(n*theta)]; coefficients are absolute (same units as radius). R is clipped to
11825 !! max(R,0). If modal_clip_r_to_min, R = max(R, modal_r_min). Exponential (modal_use_exp_form true): R = radius*exp(sum);
11826 !! coefficients are relative (dimensionless).
11827 subroutine s_icpp_2d_modal(patch_id, patch_id_fp, q_prim_vf)
11828
11829 integer, intent(in) :: patch_id
11830
11831#ifdef MFC_MIXED_PRECISION
11832 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
11833#else
11834 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
11835#endif
11836 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
11837 real(wp) :: r, theta, R_boundary, sum_series
11838 integer :: i, j, nn
11839
11840 x_centroid = patch_icpp(patch_id)%x_centroid
11841 y_centroid = patch_icpp(patch_id)%y_centroid
11842 smooth_patch_id = patch_icpp(patch_id)%smooth_patch_id
11843 smooth_coeff = patch_icpp(patch_id)%smooth_coeff
11844 eta = 1._wp
11845
11846 do j = 0, n
11847 do i = 0, m
11848 r = sqrt((x_cc(i) - x_centroid)**2 + (y_cc(j) - y_centroid)**2)
11849 if (r < small_radius) then
11850 theta = 0._wp
11851 else
11852 theta = atan2(y_cc(j) - y_centroid, x_cc(i) - x_centroid)
11853 end if
11854 sum_series = 0._wp
11855 do nn = 1, max_2d_fourier_modes
11856 sum_series = sum_series + patch_icpp(patch_id)%fourier_cos(nn)*cos(real(nn, &
11857 & wp)*theta) + patch_icpp(patch_id)%fourier_sin(nn)*sin(real(nn, wp)*theta)
11858 end do
11859 if (patch_icpp(patch_id)%modal_use_exp_form) then
11860 r_boundary = patch_icpp(patch_id)%radius*exp(sum_series)
11861 else
11862 r_boundary = patch_icpp(patch_id)%radius + sum_series
11863 r_boundary = max(r_boundary, 0._wp)
11864 if (patch_icpp(patch_id)%modal_clip_r_to_min) then
11865 r_boundary = max(r_boundary, patch_icpp(patch_id)%modal_r_min)
11866 end if
11867 end if
11868 if (patch_icpp(patch_id)%smoothen) then
11869 eta = 0.5_wp + 0.5_wp*tanh(smooth_coeff/min(dx, dy)*(r_boundary - r))
11870 end if
11871 if ((r <= r_boundary .and. patch_icpp(patch_id)%alter_patch(patch_id_fp(i, j, 0))) .or. patch_id_fp(i, j, &
11872 & 0) == smooth_patch_id) then
11873 call s_assign_patch_primitive_variables(patch_id, i, j, 0, eta, q_prim_vf, patch_id_fp)
11874 end if
11875 end do
11876 end do
11877
11878 end subroutine s_icpp_2d_modal
11879
11880 !> 3D spherical harmonic patch. Surface r = radius + sum_lm sph_har_coeff(l,m)*Y_lm(theta,phi). theta = acos(z/r), phi =
11881 !! atan2(y,x) relative to centroid.
11882 subroutine s_icpp_3d_spherical_harmonic(patch_id, patch_id_fp, q_prim_vf)
11883
11884 integer, intent(in) :: patch_id
11885
11886#ifdef MFC_MIXED_PRECISION
11887 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
11888#else
11889 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
11890#endif
11891 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
11892 real(wp) :: dx_loc, dy_loc, dz_loc, r, theta, phi, R_surface, eta_local
11893 integer :: i, j, k, ll, mm
11894
11895 x_centroid = patch_icpp(patch_id)%x_centroid
11896 y_centroid = patch_icpp(patch_id)%y_centroid
11897 z_centroid = patch_icpp(patch_id)%z_centroid
11898 smooth_patch_id = patch_icpp(patch_id)%smooth_patch_id
11899 smooth_coeff = patch_icpp(patch_id)%smooth_coeff
11900 eta_local = 1._wp
11901
11902 do k = 0, p
11903 do j = 0, n
11904 do i = 0, m
11905 if (grid_geometry == 3) then
11906 call s_convert_cylindrical_to_cartesian_coord(y_cc(j), z_cc(k))
11907 dx_loc = x_cc(i) - x_centroid
11908 dy_loc = cart_y - y_centroid
11909 dz_loc = cart_z - z_centroid
11910 else
11911 dx_loc = x_cc(i) - x_centroid
11912 dy_loc = y_cc(j) - y_centroid
11913 dz_loc = z_cc(k) - z_centroid
11914 end if
11915 r = sqrt(dx_loc**2 + dy_loc**2 + dz_loc**2)
11916 if (r < small_radius) then
11917 theta = 0._wp
11918 phi = 0._wp
11919 else
11920 theta = acos(min(1._wp, max(-1._wp, dz_loc/r)))
11921 phi = atan2(dy_loc, dx_loc)
11922 end if
11923 r_surface = patch_icpp(patch_id)%radius
11924 do ll = 0, max_sph_harm_degree
11925 do mm = -ll, ll
11926 if (patch_icpp(patch_id)%sph_har_coeff(ll, mm) == 0._wp) cycle
11927 r_surface = r_surface + patch_icpp(patch_id)%sph_har_coeff(ll, mm)*real_ylm(theta, phi, ll, mm)
11928 end do
11929 end do
11930 if (patch_icpp(patch_id)%smoothen) then
11931 eta_local = 0.5_wp + 0.5_wp*tanh(smooth_coeff/min(dx, dy, dz)*(r_surface - r))
11932 end if
11933 if ((r <= r_surface .and. patch_icpp(patch_id)%alter_patch(patch_id_fp(i, j, k))) .or. patch_id_fp(i, j, &
11934 & k) == smooth_patch_id) then
11935 call s_assign_patch_primitive_variables(patch_id, i, j, k, eta_local, q_prim_vf, patch_id_fp)
11936 end if
11937 end do
11938 end do
11939 end do
11940
11941 end subroutine s_icpp_3d_spherical_harmonic
11942
11943 !> The spherical patch is a 3D geometry that may be used, for example, in creating a bubble or a droplet. The patch geometry is
11944 !! well-defined when its centroid and radius are provided. Please note that the spherical patch DOES allow for the smoothing of
11945 !! its boundary.
11946 subroutine s_icpp_sphere(patch_id, patch_id_fp, q_prim_vf)
11947
11948 integer, intent(in) :: patch_id
11949
11950#ifdef MFC_MIXED_PRECISION
11951 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
11952#else
11953 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
11954#endif
11955 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
11956
11957 ! Generic loop iterators
11958 integer :: i, j, k
11959 real(wp) :: radius
11960
11961 integer :: xRows, yRows, nRows, iix, iiy, max_files
11962# 971 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11963 integer :: f, iter, ios, ios2, unit, unit2, idx, idy, index_x, index_y, jump, line_count, ycount
11964# 971 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11965 real(wp) :: x_len, x_step, y_len, y_step
11966# 971 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11967 real(wp) :: dummy_x, dummy_y, dummy_z, x0, y0
11968# 971 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11969 integer :: global_offset_x, global_offset_y !< MPI subdomain offset
11970# 971 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11971 real(wp) :: delta_x, delta_y
11972# 971 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11973 character(len=100), dimension(sys_size) :: fileNames !< Arrays to store all data from files
11974# 971 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11975 character(len=200) :: errmsg
11976# 971 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11977 real(wp), allocatable :: stored_values(:,:,:)
11978# 971 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11979 real(wp), allocatable :: x_coords(:), y_coords(:)
11980# 971 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11981 logical :: files_loaded = .false.
11982# 971 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11983 real(wp) :: domain_xstart, domain_xend, domain_ystart, domain_yend
11984# 971 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11985 character(len=*), parameter :: init_dir = "/home/MFC/FilesDirectory" !< For example /home/MFC/examples/1D_Shock/D/
11986# 971 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11987 character(len=20) :: file_num_str !< For storing the file number as a string
11988# 971 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11989 character(len=20) :: zeros_part !< For the trailing zeros part
11990# 971 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11991 character(len=6), parameter :: zeros_default = "000000" !< Default zeros (can be changed)
11992 ! Place any declaration of intermediate variables here
11993# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11994 real(wp) :: rhoH, rhoL, pRef, pInt, h, lam, wl, amp, intH, alph, Mach
11995# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11996 real(wp) :: eps
11997# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11998
11999# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12000 ! IGR Jets Arrays to stor position and radii of jets from input file
12001# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12002 real(wp), dimension(:), allocatable :: y_th_arr, z_th_arr, r_th_arr
12003# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12004 ! Variables to describe initial condition of jet
12005# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12006 real(wp) :: r, ux_th, ux_am, p_th, p_am, rho_th, rho_am, y_th, z_th, r_th, eps_smooth
12007# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12008 real(wp) :: rcut, xcut !< Intermediate variables for creating smooth initial condition
12009# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12010 real(wp), dimension(0:n,0:p) :: rcut_arr
12011# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12012 integer :: l, q, s !< Iterators for reading input files
12013# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12014 integer :: start, end !< Ints to keep track of position in file
12015# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12016 character(len=1000) :: line !< String to store line in file
12017# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12018 character(len=25) :: value !< String to store value in line
12019# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12020 integer :: NJet !< Number of jets
12021# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12022
12023# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12024 eps = 1e-9_wp
12025# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12026
12027# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12028 if (patch_icpp(patch_id)%hcid == 303) then
12029# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12030 eps_smooth = 3._wp
12031# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12032 open (unit=10, file="njet.txt", status="old", action="read")
12033# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12034 read (10, *) njet
12035# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12036 close (10)
12037# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12038
12039# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12040 allocate (y_th_arr(0:njet - 1))
12041# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12042 allocate (z_th_arr(0:njet - 1))
12043# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12044 allocate (r_th_arr(0:njet - 1))
12045# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12046
12047# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12048 open (unit=10, file="jets.csv", status="old", action="read")
12049# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12050 do q = 0, njet - 1
12051# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12052 read (10, '(A)') line ! Read a full line as a string
12053# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12054 start = 1
12055# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12056
12057# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12058 do l = 0, 2
12059# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12060 end = index(line(start:), ',') ! Find the next comma
12061# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12062 if (end == 0) then
12063# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12064 value = trim(adjustl(line(start:))) ! Last value in the line
12065# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12066 else
12067# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12068 value = trim(adjustl(line(start:start + end - 2))) ! Extract substring
12069# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12070 start = start + end ! Move to next value
12071# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12072 end if
12073# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12074 if (l == 0) then
12075# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12076 read (value, *) y_th_arr(q) ! Convert string to numeric value
12077# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12078 else if (l == 1) then
12079# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12080 read (value, *) z_th_arr(q)
12081# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12082 else
12083# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12084 read (value, *) r_th_arr(q)
12085# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12086 end if
12087# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12088 end do
12089# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12090 end do
12091# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12092 close (10)
12093# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12094
12095# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12096 do q = 0, p
12097# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12098 do l = 0, n
12099# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12100 rcut = 0._wp
12101# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12102 do s = 0, njet - 1
12103# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12104 r = sqrt((y_cc(l) - y_th_arr(s))**2._wp + (z_cc(q) - z_th_arr(s))**2._wp)
12105# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12106 rcut = rcut + f_cut_on(r - r_th_arr(s), eps_smooth)
12107# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12108 end do
12109# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12110 rcut_arr(l, q) = rcut
12111# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12112 end do
12113# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12114 end do
12115# 972 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12116 end if
12117
12118 ! Variables to initialize the pressure field that corresponds to the bubble-collapse test case found in Tiwari et al. (2013)
12119
12120 ! Transferring spherical patch's radius, centroid, smoothing patch identity and smoothing coefficient information
12121 x_centroid = patch_icpp(patch_id)%x_centroid
12122 y_centroid = patch_icpp(patch_id)%y_centroid
12123 z_centroid = patch_icpp(patch_id)%z_centroid
12124 radius = patch_icpp(patch_id)%radius
12125 smooth_patch_id = patch_icpp(patch_id)%smooth_patch_id
12126 smooth_coeff = patch_icpp(patch_id)%smooth_coeff
12127
12128 ! Initialize eta=1; modified if smoothing is enabled
12129 eta = 1._wp
12130
12131 ! Assign patch vars if cell is covered and patch has write permission
12132 do k = 0, p
12133 do j = 0, n
12134 do i = 0, m
12135 if (grid_geometry == 3) then
12137 else
12138 cart_y = y_cc(j)
12139 cart_z = z_cc(k)
12140 end if
12141
12142 if (patch_icpp(patch_id)%smoothen) then
12143 eta = tanh(smooth_coeff/min(dx, dy, &
12144 & dz)*(sqrt((x_cc(i) - x_centroid)**2 + (cart_y - y_centroid)**2 + (cart_z - z_centroid)**2) &
12145 & - radius))*(-0.5_wp) + 0.5_wp
12146 end if
12147
12148 if ((((x_cc(i) - x_centroid)**2 + (cart_y - y_centroid)**2 + (cart_z - z_centroid)**2 <= radius**2) &
12149 & .and. patch_icpp(patch_id)%alter_patch(patch_id_fp(i, j, k))) .or. patch_id_fp(i, j, &
12150 & k) == smooth_patch_id) then
12151 call s_assign_patch_primitive_variables(patch_id, i, j, k, eta, q_prim_vf, patch_id_fp)
12152
12153
12154 if (patch_icpp(patch_id)%hcid /= dflt_int) then
12155 select case (patch_icpp(patch_id)%hcid)
12156# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12157 case (300) ! Rayleigh-Taylor instability
12158# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12159 rhoh = 3._wp
12160# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12161 rhol = 1._wp
12162# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12163 pref = 1.e5_wp
12164# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12165 pint = pref
12166# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12167 h = 0.7_wp
12168# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12169 lam = 0.2_wp
12170# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12171 wl = 2._wp*pi/lam
12172# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12173 amp = 0.025_wp/wl
12174# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12175
12176# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12177 inth = amp*(sin(2._wp*pi*x_cc(i)/lam - pi/2._wp) + sin(2._wp*pi*z_cc(k)/lam - pi/2._wp)) + h
12178# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12179
12180# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12181 alph = 5.e-1_wp*(1._wp + tanh((y_cc(j) - inth)/2.5e-3_wp))
12182# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12183
12184# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12185 if (alph < eps) alph = eps
12186# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12187 if (alph > 1._wp - eps) alph = 1._wp - eps
12188# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12189
12190# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12191 if (y_cc(j) > inth) then
12192# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12193 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
12194# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12195 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
12196# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12197 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = alph*rhoh
12198# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12199 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = (1._wp - alph)*rhol
12200# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12201 q_prim_vf(eqn_idx%E)%sf(i, j, k) = pref + rhoh*9.81_wp*(1.2_wp - y_cc(j))
12202# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12203 else
12204# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12205 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
12206# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12207 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
12208# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12209 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = alph*rhoh
12210# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12211 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = (1._wp - alph)*rhol
12212# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12213 pint = pref + rhoh*9.81_wp*(1.2_wp - inth)
12214# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12215 q_prim_vf(eqn_idx%E)%sf(i, j, k) = pint + rhol*9.81_wp*(inth - y_cc(j))
12216# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12217 end if
12218# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12219 case (301) ! (3D lung geometry in X direction, |sin(*)+sin(*)|)
12220# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12221 h = 0.0_wp
12222# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12223 lam = 1.0_wp
12224# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12225 amp = patch_icpp(patch_id)%a(2)
12226# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12227 inth = amp*abs((sin(2*pi*y_cc(j)/lam - pi/2) + sin(2*pi*z_cc(k)/lam - pi/2)) + h)
12228# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12229 if (x_cc(i) > inth) then
12230# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12231 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = patch_icpp(1)%alpha_rho(1)
12232# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12233 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = patch_icpp(1)%alpha_rho(2)
12234# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12235 q_prim_vf(eqn_idx%E)%sf(i, j, k) = patch_icpp(1)%pres
12236# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12237 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = patch_icpp(1)%alpha(1)
12238# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12239 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = patch_icpp(1)%alpha(2)
12240# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12241 end if
12242# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12243 case (302) ! 3D Jet with IGR
12244# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12245 ux_th = 10*sqrt(1.4*0.4)
12246# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12247 ux_am = 0.0*sqrt(1.4)
12248# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12249 p_th = 2.0_wp
12250# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12251 p_am = 1.0_wp
12252# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12253 rho_th = 1._wp
12254# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12255 rho_am = 1._wp
12256# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12257 y_th = 0.0_wp
12258# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12259 z_th = 0.0_wp
12260# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12261 r_th = 1._wp
12262# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12263 eps_smooth = 1._wp
12264# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12265 eps = 1e-6
12266# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12267
12268# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12269 r = sqrt((y_cc(j) - y_th)**2._wp + (z_cc(k) - z_th)**2._wp)
12270# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12271 rcut = f_cut_on(r - r_th, eps_smooth)
12272# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12273 xcut = f_cut_on(x_cc(i), eps_smooth)
12274# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12275
12276# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12277 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, k) = ux_th*rcut*xcut + ux_am
12278# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12279 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, k) = 0._wp
12280# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12281 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0._wp
12282# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12283
12284# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12285 if (num_fluids == 1) then
12286# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12287 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = (rho_th - rho_am)*rcut*xcut + rho_am
12288# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12289 else
12290# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12291 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = (1._wp - 2._wp*eps)*rcut*xcut + eps
12292# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12293 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = rho_th*q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)
12294# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12295 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = rho_am*(1._wp - q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k))
12296# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12297 end if
12298# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12299
12300# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12301 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p_th*rcut*xcut + p_am
12302# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12303 case (303) ! 3D Multijet
12304# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12305 eps_smooth = 3.0_wp
12306# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12307 ux_th = 10*sqrt(1.4*0.4)
12308# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12309 ux_am = 2.5*sqrt(1.4*0.4)
12310# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12311 p_th = 0.8_wp
12312# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12313 p_am = 0.4_wp
12314# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12315 rho_th = 1._wp
12316# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12317 rho_am = 1._wp
12318# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12319 eps = 1e-6
12320# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12321
12322# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12323 rcut = rcut_arr(j, k)
12324# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12325 xcut = f_cut_on(x_cc(i), eps_smooth)
12326# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12327
12328# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12329 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, k) = ux_th*rcut*xcut + ux_am
12330# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12331 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, k) = 0._wp
12332# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12333 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0._wp
12334# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12335
12336# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12337 if (num_fluids == 1) then
12338# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12339 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = (rho_th - rho_am)*rcut*xcut + rho_am
12340# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12341 else
12342# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12343 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = (1._wp - 2._wp*eps)*rcut*xcut + eps
12344# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12345 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = rho_th*q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)
12346# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12347 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = rho_am*(1._wp - q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k))
12348# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12349 end if
12350# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12351
12352# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12353 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p_th*rcut*xcut + p_am
12354# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12355 case (370) ! 3D extrusion of 2D profile from external data
12356# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12357 ! This hardcoded case extrudes a 2D profile to initialize a 3D simulation domain
12358# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12359 if (.not. files_loaded) then
12360# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12361 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
12362# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12363 do f = 1, max_files
12364# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12365 write (file_num_str, '(I0)') f
12366# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12367 filenames(f) = trim(init_dir) // "prim." // trim(file_num_str) // ".00." // zeros_default // ".dat"
12368# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12369 end do
12370# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12371
12372# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12373 ! Common file reading setup
12374# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12375 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
12376# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12377 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
12378# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12379
12380# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12381 select case (num_dims)
12382# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12383 case (1, 2) ! 1D and 2D cases are similar
12384# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12385 ! Count lines
12386# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12387 line_count = 0
12388# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12389 do
12390# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12391 read (unit2, *, iostat=ios2) dummy_x, dummy_y
12392# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12393 if (ios2 /= 0) exit
12394# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12395 line_count = line_count + 1
12396# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12397 end do
12398# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12399 close (unit2)
12400# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12401
12402# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12403 xrows = line_count
12404# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12405 yrows = 1
12406# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12407 index_x = 0
12408# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12409 if (num_dims == 2) index_x = i
12410# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12411#ifdef MFC_DEBUG
12412# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12413 block
12414# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12415 use iso_fortran_env, only: output_unit
12416# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12417
12418# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12419 print *, 'm_icpp_patches.fpp:1011: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
12420# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12421
12422# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12423 call flush (output_unit)
12424# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12425 end block
12426# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12427#endif
12428# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12429 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
12430# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12431
12432# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12433
12434# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12435
12436# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12437#if defined(MFC_OpenACC)
12438# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12439!$acc enter data create(x_coords, stored_values)
12440# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12441#elif defined(MFC_OpenMP)
12442# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12443!$omp target enter data map(always,alloc:x_coords, stored_values)
12444# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12445#endif
12446# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12447
12448# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12449 ! Read data from all files
12450# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12451 do f = 1, max_files
12452# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12453 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
12454# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12455 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
12456# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12457
12458# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12459 do iter = 1, xrows
12460# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12461 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
12462# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12463 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
12464# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12465 end do
12466# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12467 close (unit)
12468# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12469 end do
12470# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12471
12472# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12473 ! Calculate offsets
12474# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12475 domain_xstart = x_coords(1)
12476# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12477 x_step = x_cc(1) - x_cc(0)
12478# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12479 delta_x = merge(x_cc(0) - domain_xstart + x_step/2.0, x_cc(index_x) - domain_xstart + x_step/2.0, num_dims == 1)
12480# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12481 global_offset_x = nint(abs(delta_x)/x_step)
12482# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12483 case (3) ! 3D case - determine grid structure
12484# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12485 ! Find yRows by counting rows with same x
12486# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12487 read (unit2, *, iostat=ios2) x0, y0, dummy_z
12488# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12489 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
12490# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12491
12492# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12493 yrows = 1
12494# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12495 do
12496# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12497 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
12498# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12499 if (ios2 /= 0) exit
12500# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12501 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
12502# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12503 yrows = yrows + 1
12504# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12505 else
12506# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12507 exit
12508# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12509 end if
12510# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12511 end do
12512# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12513 close (unit2)
12514# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12515
12516# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12517 ! Count total rows
12518# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12519 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
12520# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12521 nrows = 0
12522# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12523 do
12524# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12525 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
12526# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12527 if (ios2 /= 0) exit
12528# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12529 nrows = nrows + 1
12530# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12531 end do
12532# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12533 close (unit2)
12534# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12535
12536# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12537 xrows = nrows/yrows
12538# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12539#ifdef MFC_DEBUG
12540# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12541 block
12542# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12543 use iso_fortran_env, only: output_unit
12544# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12545
12546# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12547 print *, 'm_icpp_patches.fpp:1011: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
12548# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12549
12550# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12551 call flush (output_unit)
12552# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12553 end block
12554# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12555#endif
12556# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12557 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
12558# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12559
12560# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12561
12562# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12563
12564# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12565
12566# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12567#if defined(MFC_OpenACC)
12568# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12569!$acc enter data create(x_coords, y_coords, stored_values)
12570# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12571#elif defined(MFC_OpenMP)
12572# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12573!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
12574# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12575#endif
12576# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12577 index_x = i
12578# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12579 index_y = j
12580# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12581
12582# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12583 ! Read all files
12584# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12585 do f = 1, max_files
12586# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12587 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
12588# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12589 if (ios /= 0) then
12590# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12591 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
12592# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12593 cycle
12594# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12595 end if
12596# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12597
12598# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12599 iter = 0
12600# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12601 do iix = 1, xrows
12602# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12603 do iiy = 1, yrows
12604# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12605 iter = iter + 1
12606# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12607 if (f == 1) then
12608# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12609 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
12610# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12611 else
12612# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12613 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
12614# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12615 end if
12616# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12617 if (ios /= 0) call s_mpi_abort("Error reading data")
12618# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12619 end do
12620# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12621 end do
12622# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12623 close (unit)
12624# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12625 end do
12626# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12627
12628# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12629 ! Calculate offsets
12630# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12631 x_step = x_cc(1) - x_cc(0)
12632# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12633 y_step = y_cc(1) - y_cc(0)
12634# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12635 delta_x = x_cc(index_x) - x_coords(1) + x_step/2.0_wp
12636# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12637 delta_y = y_cc(index_y) - y_coords(1) + y_step/2.0_wp
12638# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12639 global_offset_x = nint(abs(delta_x)/x_step)
12640# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12641 global_offset_y = nint(abs(delta_y)/y_step)
12642# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12643 end select
12644# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12645
12646# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12647 files_loaded = .true.
12648# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12649 end if
12650# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12651
12652# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12653 ! Data assignment
12654# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12655 select case (num_dims)
12656# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12657 case (1)
12658# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12659 idx = i + 1 + global_offset_x
12660# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12661 do f = 1, sys_size
12662# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12663 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
12664# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12665 end do
12666# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12667 case (2)
12668# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12669 idx = i + 1 + global_offset_x - index_x
12670# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12671 do f = 1, sys_size - 1
12672# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12673 jump = merge(1, 0, f >= eqn_idx%mom%end)
12674# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12675 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
12676# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12677 end do
12678# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12679 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
12680# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12681 case (3)
12682# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12683 idx = i + 1 + global_offset_x - index_x
12684# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12685 idy = j + 1 + global_offset_y - index_y
12686# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12687 do f = 1, sys_size - 1
12688# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12689 jump = merge(1, 0, f >= eqn_idx%mom%end)
12690# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12691 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
12692# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12693 end do
12694# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12695 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
12696# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12697 end select
12698# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12699 case (380) ! Taylor-Green vortex
12700# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12701 ! This is patch is hard-coded for test suite optimization used in the 3D_TaylorGreenVortex case: This analytic patch used
12702# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12703 ! geometry 9
12704# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12705 mach = 0.1
12706# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12707 if (patch_id == 1) then
12708# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12709 q_prim_vf(eqn_idx%E)%sf(i, j, &
12710# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12711 & k) = 101325 + (mach**2*376.636429464809**2/16)*(cos(2*x_cc(i)/1) + cos(2*y_cc(j)/1))*(cos(2*z_cc(k)/1) + 2)
12712# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12713 q_prim_vf(eqn_idx%mom%beg + 0)%sf(i, j, k) = mach*376.636429464809*sin(x_cc(i)/1)*cos(y_cc(j)/1)*sin(z_cc(k)/1)
12714# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12715 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, k) = -mach*376.636429464809*cos(x_cc(i)/1)*sin(y_cc(j)/1)*sin(z_cc(k)/1)
12716# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12717 end if
12718# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12719 case default
12720# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12721 call s_int_to_str(patch_id, istr)
12722# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12723 call s_mpi_abort("Invalid hcid specified for patch " // trim(istr))
12724# 1011 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12725 end select
12726 end if
12727 end if
12728 end do
12729 end do
12730 end do
12731 if (allocated(stored_values)) then
12732# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12733#ifdef MFC_DEBUG
12734# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12735 block
12736# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12737 use iso_fortran_env, only: output_unit
12738# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12739
12740# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12741 print *, 'm_icpp_patches.fpp:1017: ', '@:DEALLOCATE(stored_values)'
12742# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12743
12744# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12745 call flush (output_unit)
12746# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12747 end block
12748# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12749#endif
12750# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12751
12752# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12753#if defined(MFC_OpenACC)
12754# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12755!$acc exit data delete(stored_values)
12756# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12757#elif defined(MFC_OpenMP)
12758# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12759!$omp target exit data map(release:stored_values)
12760# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12761#endif
12762# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12763 deallocate (stored_values)
12764# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12765#ifdef MFC_DEBUG
12766# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12767 block
12768# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12769 use iso_fortran_env, only: output_unit
12770# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12771
12772# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12773 print *, 'm_icpp_patches.fpp:1017: ', '@:DEALLOCATE(x_coords)'
12774# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12775
12776# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12777 call flush (output_unit)
12778# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12779 end block
12780# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12781#endif
12782# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12783
12784# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12785#if defined(MFC_OpenACC)
12786# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12787!$acc exit data delete(x_coords)
12788# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12789#elif defined(MFC_OpenMP)
12790# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12791!$omp target exit data map(release:x_coords)
12792# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12793#endif
12794# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12795 deallocate (x_coords)
12796# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12797 end if
12798# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12799
12800# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12801 if (allocated(y_coords)) then
12802# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12803#ifdef MFC_DEBUG
12804# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12805 block
12806# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12807 use iso_fortran_env, only: output_unit
12808# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12809
12810# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12811 print *, 'm_icpp_patches.fpp:1017: ', '@:DEALLOCATE(y_coords)'
12812# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12813
12814# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12815 call flush (output_unit)
12816# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12817 end block
12818# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12819#endif
12820# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12821
12822# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12823#if defined(MFC_OpenACC)
12824# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12825!$acc exit data delete(y_coords)
12826# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12827#elif defined(MFC_OpenMP)
12828# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12829!$omp target exit data map(release:y_coords)
12830# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12831#endif
12832# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12833 deallocate (y_coords)
12834# 1017 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12835 end if
12836
12837 end subroutine s_icpp_sphere
12838
12839 !> The cuboidal patch is a 3D geometry that may be used, for example, in creating a solid boundary, or pre-/post-shock region,
12840 !! which is aligned with the axes of the Cartesian coordinate system. The geometry of such a patch is well- defined when its
12841 !! centroid and lengths in the x-, y- and z-coordinate directions are provided. Please notice that the cuboidal patch DOES NOT
12842 !! allow for the smearing of its boundaries.
12843 subroutine s_icpp_cuboid(patch_id, patch_id_fp, q_prim_vf)
12844
12845 integer, intent(in) :: patch_id
12846
12847#ifdef MFC_MIXED_PRECISION
12848 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
12849#else
12850 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
12851#endif
12852 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
12853 integer :: i, j, k !< Generic loop iterators
12854
12855 integer :: xRows, yRows, nRows, iix, iiy, max_files
12856# 1037 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12857 integer :: f, iter, ios, ios2, unit, unit2, idx, idy, index_x, index_y, jump, line_count, ycount
12858# 1037 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12859 real(wp) :: x_len, x_step, y_len, y_step
12860# 1037 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12861 real(wp) :: dummy_x, dummy_y, dummy_z, x0, y0
12862# 1037 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12863 integer :: global_offset_x, global_offset_y !< MPI subdomain offset
12864# 1037 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12865 real(wp) :: delta_x, delta_y
12866# 1037 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12867 character(len=100), dimension(sys_size) :: fileNames !< Arrays to store all data from files
12868# 1037 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12869 character(len=200) :: errmsg
12870# 1037 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12871 real(wp), allocatable :: stored_values(:,:,:)
12872# 1037 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12873 real(wp), allocatable :: x_coords(:), y_coords(:)
12874# 1037 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12875 logical :: files_loaded = .false.
12876# 1037 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12877 real(wp) :: domain_xstart, domain_xend, domain_ystart, domain_yend
12878# 1037 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12879 character(len=*), parameter :: init_dir = "/home/MFC/FilesDirectory" !< For example /home/MFC/examples/1D_Shock/D/
12880# 1037 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12881 character(len=20) :: file_num_str !< For storing the file number as a string
12882# 1037 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12883 character(len=20) :: zeros_part !< For the trailing zeros part
12884# 1037 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12885 character(len=6), parameter :: zeros_default = "000000" !< Default zeros (can be changed)
12886 ! Place any declaration of intermediate variables here
12887# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12888 real(wp) :: rhoH, rhoL, pRef, pInt, h, lam, wl, amp, intH, alph, Mach
12889# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12890 real(wp) :: eps
12891# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12892
12893# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12894 ! IGR Jets Arrays to stor position and radii of jets from input file
12895# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12896 real(wp), dimension(:), allocatable :: y_th_arr, z_th_arr, r_th_arr
12897# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12898 ! Variables to describe initial condition of jet
12899# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12900 real(wp) :: r, ux_th, ux_am, p_th, p_am, rho_th, rho_am, y_th, z_th, r_th, eps_smooth
12901# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12902 real(wp) :: rcut, xcut !< Intermediate variables for creating smooth initial condition
12903# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12904 real(wp), dimension(0:n,0:p) :: rcut_arr
12905# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12906 integer :: l, q, s !< Iterators for reading input files
12907# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12908 integer :: start, end !< Ints to keep track of position in file
12909# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12910 character(len=1000) :: line !< String to store line in file
12911# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12912 character(len=25) :: value !< String to store value in line
12913# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12914 integer :: NJet !< Number of jets
12915# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12916
12917# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12918 eps = 1e-9_wp
12919# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12920
12921# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12922 if (patch_icpp(patch_id)%hcid == 303) then
12923# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12924 eps_smooth = 3._wp
12925# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12926 open (unit=10, file="njet.txt", status="old", action="read")
12927# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12928 read (10, *) njet
12929# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12930 close (10)
12931# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12932
12933# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12934 allocate (y_th_arr(0:njet - 1))
12935# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12936 allocate (z_th_arr(0:njet - 1))
12937# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12938 allocate (r_th_arr(0:njet - 1))
12939# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12940
12941# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12942 open (unit=10, file="jets.csv", status="old", action="read")
12943# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12944 do q = 0, njet - 1
12945# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12946 read (10, '(A)') line ! Read a full line as a string
12947# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12948 start = 1
12949# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12950
12951# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12952 do l = 0, 2
12953# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12954 end = index(line(start:), ',') ! Find the next comma
12955# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12956 if (end == 0) then
12957# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12958 value = trim(adjustl(line(start:))) ! Last value in the line
12959# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12960 else
12961# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12962 value = trim(adjustl(line(start:start + end - 2))) ! Extract substring
12963# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12964 start = start + end ! Move to next value
12965# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12966 end if
12967# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12968 if (l == 0) then
12969# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12970 read (value, *) y_th_arr(q) ! Convert string to numeric value
12971# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12972 else if (l == 1) then
12973# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12974 read (value, *) z_th_arr(q)
12975# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12976 else
12977# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12978 read (value, *) r_th_arr(q)
12979# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12980 end if
12981# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12982 end do
12983# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12984 end do
12985# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12986 close (10)
12987# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12988
12989# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12990 do q = 0, p
12991# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12992 do l = 0, n
12993# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12994 rcut = 0._wp
12995# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12996 do s = 0, njet - 1
12997# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12998 r = sqrt((y_cc(l) - y_th_arr(s))**2._wp + (z_cc(q) - z_th_arr(s))**2._wp)
12999# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13000 rcut = rcut + f_cut_on(r - r_th_arr(s), eps_smooth)
13001# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13002 end do
13003# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13004 rcut_arr(l, q) = rcut
13005# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13006 end do
13007# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13008 end do
13009# 1038 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13010 end if
13011
13012 ! Transferring the cuboid's centroid and length information
13013 x_centroid = patch_icpp(patch_id)%x_centroid
13014 y_centroid = patch_icpp(patch_id)%y_centroid
13015 z_centroid = patch_icpp(patch_id)%z_centroid
13016 length_x = patch_icpp(patch_id)%length_x
13017 length_y = patch_icpp(patch_id)%length_y
13018 length_z = patch_icpp(patch_id)%length_z
13019
13020 ! Computing the beginning and the end x-, y- and z-coordinates of the cuboid based on its centroid and lengths
13021 x_boundary%beg = x_centroid - 0.5_wp*length_x
13022 x_boundary%end = x_centroid + 0.5_wp*length_x
13023 y_boundary%beg = y_centroid - 0.5_wp*length_y
13024 y_boundary%end = y_centroid + 0.5_wp*length_y
13025 z_boundary%beg = z_centroid - 0.5_wp*length_z
13026 z_boundary%end = z_centroid + 0.5_wp*length_z
13027
13028 ! Set eta=1 (no smoothing for this patch type)
13029 eta = 1._wp
13030
13031 ! Assign patch vars if cell is covered and patch has write permission
13032 do k = 0, p
13033 do j = 0, n
13034 do i = 0, m
13035 if (grid_geometry == 3) then
13037 else
13038 cart_y = y_cc(j)
13039 cart_z = z_cc(k)
13040 end if
13041
13042 if (x_boundary%beg <= x_cc(i) .and. x_boundary%end >= x_cc(i) &
13043 & .and. y_boundary%beg <= cart_y .and. y_boundary%end >= cart_y .and. z_boundary%beg <= cart_z .and. z_boundary%end >= cart_z) then
13044 if (patch_icpp(patch_id)%alter_patch(patch_id_fp(i, j, k))) then
13045 call s_assign_patch_primitive_variables(patch_id, i, j, k, eta, q_prim_vf, patch_id_fp)
13046
13047
13048 if (patch_icpp(patch_id)%hcid /= dflt_int) then
13049 select case (patch_icpp(patch_id)%hcid)
13050# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13051 case (300) ! Rayleigh-Taylor instability
13052# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13053 rhoh = 3._wp
13054# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13055 rhol = 1._wp
13056# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13057 pref = 1.e5_wp
13058# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13059 pint = pref
13060# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13061 h = 0.7_wp
13062# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13063 lam = 0.2_wp
13064# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13065 wl = 2._wp*pi/lam
13066# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13067 amp = 0.025_wp/wl
13068# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13069
13070# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13071 inth = amp*(sin(2._wp*pi*x_cc(i)/lam - pi/2._wp) + sin(2._wp*pi*z_cc(k)/lam - pi/2._wp)) + h
13072# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13073
13074# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13075 alph = 5.e-1_wp*(1._wp + tanh((y_cc(j) - inth)/2.5e-3_wp))
13076# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13077
13078# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13079 if (alph < eps) alph = eps
13080# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13081 if (alph > 1._wp - eps) alph = 1._wp - eps
13082# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13083
13084# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13085 if (y_cc(j) > inth) then
13086# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13087 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
13088# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13089 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
13090# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13091 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = alph*rhoh
13092# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13093 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = (1._wp - alph)*rhol
13094# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13095 q_prim_vf(eqn_idx%E)%sf(i, j, k) = pref + rhoh*9.81_wp*(1.2_wp - y_cc(j))
13096# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13097 else
13098# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13099 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
13100# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13101 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
13102# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13103 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = alph*rhoh
13104# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13105 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = (1._wp - alph)*rhol
13106# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13107 pint = pref + rhoh*9.81_wp*(1.2_wp - inth)
13108# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13109 q_prim_vf(eqn_idx%E)%sf(i, j, k) = pint + rhol*9.81_wp*(inth - y_cc(j))
13110# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13111 end if
13112# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13113 case (301) ! (3D lung geometry in X direction, |sin(*)+sin(*)|)
13114# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13115 h = 0.0_wp
13116# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13117 lam = 1.0_wp
13118# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13119 amp = patch_icpp(patch_id)%a(2)
13120# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13121 inth = amp*abs((sin(2*pi*y_cc(j)/lam - pi/2) + sin(2*pi*z_cc(k)/lam - pi/2)) + h)
13122# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13123 if (x_cc(i) > inth) then
13124# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13125 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = patch_icpp(1)%alpha_rho(1)
13126# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13127 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = patch_icpp(1)%alpha_rho(2)
13128# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13129 q_prim_vf(eqn_idx%E)%sf(i, j, k) = patch_icpp(1)%pres
13130# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13131 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = patch_icpp(1)%alpha(1)
13132# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13133 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = patch_icpp(1)%alpha(2)
13134# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13135 end if
13136# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13137 case (302) ! 3D Jet with IGR
13138# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13139 ux_th = 10*sqrt(1.4*0.4)
13140# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13141 ux_am = 0.0*sqrt(1.4)
13142# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13143 p_th = 2.0_wp
13144# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13145 p_am = 1.0_wp
13146# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13147 rho_th = 1._wp
13148# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13149 rho_am = 1._wp
13150# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13151 y_th = 0.0_wp
13152# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13153 z_th = 0.0_wp
13154# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13155 r_th = 1._wp
13156# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13157 eps_smooth = 1._wp
13158# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13159 eps = 1e-6
13160# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13161
13162# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13163 r = sqrt((y_cc(j) - y_th)**2._wp + (z_cc(k) - z_th)**2._wp)
13164# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13165 rcut = f_cut_on(r - r_th, eps_smooth)
13166# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13167 xcut = f_cut_on(x_cc(i), eps_smooth)
13168# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13169
13170# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13171 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, k) = ux_th*rcut*xcut + ux_am
13172# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13173 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, k) = 0._wp
13174# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13175 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0._wp
13176# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13177
13178# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13179 if (num_fluids == 1) then
13180# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13181 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = (rho_th - rho_am)*rcut*xcut + rho_am
13182# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13183 else
13184# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13185 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = (1._wp - 2._wp*eps)*rcut*xcut + eps
13186# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13187 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = rho_th*q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)
13188# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13189 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = rho_am*(1._wp - q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k))
13190# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13191 end if
13192# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13193
13194# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13195 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p_th*rcut*xcut + p_am
13196# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13197 case (303) ! 3D Multijet
13198# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13199 eps_smooth = 3.0_wp
13200# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13201 ux_th = 10*sqrt(1.4*0.4)
13202# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13203 ux_am = 2.5*sqrt(1.4*0.4)
13204# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13205 p_th = 0.8_wp
13206# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13207 p_am = 0.4_wp
13208# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13209 rho_th = 1._wp
13210# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13211 rho_am = 1._wp
13212# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13213 eps = 1e-6
13214# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13215
13216# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13217 rcut = rcut_arr(j, k)
13218# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13219 xcut = f_cut_on(x_cc(i), eps_smooth)
13220# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13221
13222# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13223 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, k) = ux_th*rcut*xcut + ux_am
13224# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13225 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, k) = 0._wp
13226# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13227 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0._wp
13228# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13229
13230# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13231 if (num_fluids == 1) then
13232# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13233 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = (rho_th - rho_am)*rcut*xcut + rho_am
13234# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13235 else
13236# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13237 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = (1._wp - 2._wp*eps)*rcut*xcut + eps
13238# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13239 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = rho_th*q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)
13240# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13241 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = rho_am*(1._wp - q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k))
13242# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13243 end if
13244# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13245
13246# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13247 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p_th*rcut*xcut + p_am
13248# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13249 case (370) ! 3D extrusion of 2D profile from external data
13250# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13251 ! This hardcoded case extrudes a 2D profile to initialize a 3D simulation domain
13252# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13253 if (.not. files_loaded) then
13254# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13255 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
13256# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13257 do f = 1, max_files
13258# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13259 write (file_num_str, '(I0)') f
13260# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13261 filenames(f) = trim(init_dir) // "prim." // trim(file_num_str) // ".00." // zeros_default // ".dat"
13262# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13263 end do
13264# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13265
13266# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13267 ! Common file reading setup
13268# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13269 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
13270# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13271 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
13272# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13273
13274# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13275 select case (num_dims)
13276# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13277 case (1, 2) ! 1D and 2D cases are similar
13278# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13279 ! Count lines
13280# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13281 line_count = 0
13282# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13283 do
13284# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13285 read (unit2, *, iostat=ios2) dummy_x, dummy_y
13286# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13287 if (ios2 /= 0) exit
13288# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13289 line_count = line_count + 1
13290# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13291 end do
13292# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13293 close (unit2)
13294# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13295
13296# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13297 xrows = line_count
13298# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13299 yrows = 1
13300# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13301 index_x = 0
13302# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13303 if (num_dims == 2) index_x = i
13304# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13305#ifdef MFC_DEBUG
13306# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13307 block
13308# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13309 use iso_fortran_env, only: output_unit
13310# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13311
13312# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13313 print *, 'm_icpp_patches.fpp:1077: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
13314# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13315
13316# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13317 call flush (output_unit)
13318# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13319 end block
13320# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13321#endif
13322# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13323 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
13324# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13325
13326# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13327
13328# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13329
13330# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13331#if defined(MFC_OpenACC)
13332# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13333!$acc enter data create(x_coords, stored_values)
13334# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13335#elif defined(MFC_OpenMP)
13336# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13337!$omp target enter data map(always,alloc:x_coords, stored_values)
13338# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13339#endif
13340# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13341
13342# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13343 ! Read data from all files
13344# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13345 do f = 1, max_files
13346# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13347 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
13348# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13349 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
13350# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13351
13352# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13353 do iter = 1, xrows
13354# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13355 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
13356# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13357 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
13358# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13359 end do
13360# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13361 close (unit)
13362# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13363 end do
13364# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13365
13366# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13367 ! Calculate offsets
13368# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13369 domain_xstart = x_coords(1)
13370# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13371 x_step = x_cc(1) - x_cc(0)
13372# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13373 delta_x = merge(x_cc(0) - domain_xstart + x_step/2.0, x_cc(index_x) - domain_xstart + x_step/2.0, num_dims == 1)
13374# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13375 global_offset_x = nint(abs(delta_x)/x_step)
13376# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13377 case (3) ! 3D case - determine grid structure
13378# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13379 ! Find yRows by counting rows with same x
13380# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13381 read (unit2, *, iostat=ios2) x0, y0, dummy_z
13382# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13383 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
13384# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13385
13386# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13387 yrows = 1
13388# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13389 do
13390# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13391 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
13392# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13393 if (ios2 /= 0) exit
13394# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13395 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
13396# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13397 yrows = yrows + 1
13398# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13399 else
13400# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13401 exit
13402# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13403 end if
13404# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13405 end do
13406# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13407 close (unit2)
13408# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13409
13410# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13411 ! Count total rows
13412# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13413 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
13414# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13415 nrows = 0
13416# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13417 do
13418# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13419 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
13420# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13421 if (ios2 /= 0) exit
13422# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13423 nrows = nrows + 1
13424# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13425 end do
13426# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13427 close (unit2)
13428# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13429
13430# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13431 xrows = nrows/yrows
13432# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13433#ifdef MFC_DEBUG
13434# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13435 block
13436# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13437 use iso_fortran_env, only: output_unit
13438# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13439
13440# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13441 print *, 'm_icpp_patches.fpp:1077: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
13442# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13443
13444# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13445 call flush (output_unit)
13446# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13447 end block
13448# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13449#endif
13450# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13451 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
13452# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13453
13454# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13455
13456# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13457
13458# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13459
13460# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13461#if defined(MFC_OpenACC)
13462# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13463!$acc enter data create(x_coords, y_coords, stored_values)
13464# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13465#elif defined(MFC_OpenMP)
13466# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13467!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
13468# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13469#endif
13470# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13471 index_x = i
13472# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13473 index_y = j
13474# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13475
13476# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13477 ! Read all files
13478# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13479 do f = 1, max_files
13480# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13481 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
13482# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13483 if (ios /= 0) then
13484# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13485 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
13486# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13487 cycle
13488# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13489 end if
13490# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13491
13492# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13493 iter = 0
13494# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13495 do iix = 1, xrows
13496# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13497 do iiy = 1, yrows
13498# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13499 iter = iter + 1
13500# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13501 if (f == 1) then
13502# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13503 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
13504# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13505 else
13506# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13507 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
13508# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13509 end if
13510# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13511 if (ios /= 0) call s_mpi_abort("Error reading data")
13512# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13513 end do
13514# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13515 end do
13516# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13517 close (unit)
13518# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13519 end do
13520# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13521
13522# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13523 ! Calculate offsets
13524# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13525 x_step = x_cc(1) - x_cc(0)
13526# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13527 y_step = y_cc(1) - y_cc(0)
13528# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13529 delta_x = x_cc(index_x) - x_coords(1) + x_step/2.0_wp
13530# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13531 delta_y = y_cc(index_y) - y_coords(1) + y_step/2.0_wp
13532# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13533 global_offset_x = nint(abs(delta_x)/x_step)
13534# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13535 global_offset_y = nint(abs(delta_y)/y_step)
13536# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13537 end select
13538# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13539
13540# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13541 files_loaded = .true.
13542# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13543 end if
13544# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13545
13546# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13547 ! Data assignment
13548# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13549 select case (num_dims)
13550# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13551 case (1)
13552# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13553 idx = i + 1 + global_offset_x
13554# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13555 do f = 1, sys_size
13556# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13557 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
13558# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13559 end do
13560# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13561 case (2)
13562# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13563 idx = i + 1 + global_offset_x - index_x
13564# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13565 do f = 1, sys_size - 1
13566# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13567 jump = merge(1, 0, f >= eqn_idx%mom%end)
13568# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13569 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
13570# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13571 end do
13572# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13573 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
13574# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13575 case (3)
13576# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13577 idx = i + 1 + global_offset_x - index_x
13578# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13579 idy = j + 1 + global_offset_y - index_y
13580# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13581 do f = 1, sys_size - 1
13582# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13583 jump = merge(1, 0, f >= eqn_idx%mom%end)
13584# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13585 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
13586# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13587 end do
13588# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13589 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
13590# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13591 end select
13592# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13593 case (380) ! Taylor-Green vortex
13594# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13595 ! This is patch is hard-coded for test suite optimization used in the 3D_TaylorGreenVortex case: This analytic patch used
13596# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13597 ! geometry 9
13598# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13599 mach = 0.1
13600# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13601 if (patch_id == 1) then
13602# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13603 q_prim_vf(eqn_idx%E)%sf(i, j, &
13604# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13605 & k) = 101325 + (mach**2*376.636429464809**2/16)*(cos(2*x_cc(i)/1) + cos(2*y_cc(j)/1))*(cos(2*z_cc(k)/1) + 2)
13606# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13607 q_prim_vf(eqn_idx%mom%beg + 0)%sf(i, j, k) = mach*376.636429464809*sin(x_cc(i)/1)*cos(y_cc(j)/1)*sin(z_cc(k)/1)
13608# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13609 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, k) = -mach*376.636429464809*cos(x_cc(i)/1)*sin(y_cc(j)/1)*sin(z_cc(k)/1)
13610# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13611 end if
13612# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13613 case default
13614# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13615 call s_int_to_str(patch_id, istr)
13616# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13617 call s_mpi_abort("Invalid hcid specified for patch " // trim(istr))
13618# 1077 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13619 end select
13620 end if
13621
13622 ! Updating the patch identities bookkeeping variable
13623 if (1._wp - eta < sgm_eps) patch_id_fp(i, j, k) = patch_id
13624 end if
13625 end if
13626 end do
13627 end do
13628 end do
13629 if (allocated(stored_values)) then
13630# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13631#ifdef MFC_DEBUG
13632# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13633 block
13634# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13635 use iso_fortran_env, only: output_unit
13636# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13637
13638# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13639 print *, 'm_icpp_patches.fpp:1087: ', '@:DEALLOCATE(stored_values)'
13640# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13641
13642# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13643 call flush (output_unit)
13644# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13645 end block
13646# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13647#endif
13648# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13649
13650# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13651#if defined(MFC_OpenACC)
13652# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13653!$acc exit data delete(stored_values)
13654# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13655#elif defined(MFC_OpenMP)
13656# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13657!$omp target exit data map(release:stored_values)
13658# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13659#endif
13660# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13661 deallocate (stored_values)
13662# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13663#ifdef MFC_DEBUG
13664# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13665 block
13666# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13667 use iso_fortran_env, only: output_unit
13668# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13669
13670# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13671 print *, 'm_icpp_patches.fpp:1087: ', '@:DEALLOCATE(x_coords)'
13672# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13673
13674# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13675 call flush (output_unit)
13676# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13677 end block
13678# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13679#endif
13680# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13681
13682# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13683#if defined(MFC_OpenACC)
13684# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13685!$acc exit data delete(x_coords)
13686# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13687#elif defined(MFC_OpenMP)
13688# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13689!$omp target exit data map(release:x_coords)
13690# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13691#endif
13692# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13693 deallocate (x_coords)
13694# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13695 end if
13696# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13697
13698# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13699 if (allocated(y_coords)) then
13700# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13701#ifdef MFC_DEBUG
13702# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13703 block
13704# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13705 use iso_fortran_env, only: output_unit
13706# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13707
13708# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13709 print *, 'm_icpp_patches.fpp:1087: ', '@:DEALLOCATE(y_coords)'
13710# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13711
13712# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13713 call flush (output_unit)
13714# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13715 end block
13716# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13717#endif
13718# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13719
13720# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13721#if defined(MFC_OpenACC)
13722# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13723!$acc exit data delete(y_coords)
13724# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13725#elif defined(MFC_OpenMP)
13726# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13727!$omp target exit data map(release:y_coords)
13728# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13729#endif
13730# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13731 deallocate (y_coords)
13732# 1087 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13733 end if
13734
13735 end subroutine s_icpp_cuboid
13736
13737 !> The cylindrical patch is a 3D geometry that may be used, for example, in setting up a cylindrical solid boundary confinement,
13738 !! like a blood vessel. The geometry of this patch is well-defined when the centroid, the radius and the length along the
13739 !! cylinder's axis, parallel to the x-, y- or z-coordinate direction, are provided. Please note that the cylindrical patch DOES
13740 !! allow for the smoothing of its lateral boundary.
13741 subroutine s_icpp_cylinder(patch_id, patch_id_fp, q_prim_vf)
13742
13743 integer, intent(in) :: patch_id
13744
13745#ifdef MFC_MIXED_PRECISION
13746 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
13747#else
13748 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
13749#endif
13750 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
13751 integer :: i, j, k !< Generic loop iterators
13752 real(wp) :: radius
13753
13754 integer :: xRows, yRows, nRows, iix, iiy, max_files
13755# 1108 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13756 integer :: f, iter, ios, ios2, unit, unit2, idx, idy, index_x, index_y, jump, line_count, ycount
13757# 1108 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13758 real(wp) :: x_len, x_step, y_len, y_step
13759# 1108 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13760 real(wp) :: dummy_x, dummy_y, dummy_z, x0, y0
13761# 1108 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13762 integer :: global_offset_x, global_offset_y !< MPI subdomain offset
13763# 1108 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13764 real(wp) :: delta_x, delta_y
13765# 1108 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13766 character(len=100), dimension(sys_size) :: fileNames !< Arrays to store all data from files
13767# 1108 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13768 character(len=200) :: errmsg
13769# 1108 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13770 real(wp), allocatable :: stored_values(:,:,:)
13771# 1108 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13772 real(wp), allocatable :: x_coords(:), y_coords(:)
13773# 1108 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13774 logical :: files_loaded = .false.
13775# 1108 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13776 real(wp) :: domain_xstart, domain_xend, domain_ystart, domain_yend
13777# 1108 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13778 character(len=*), parameter :: init_dir = "/home/MFC/FilesDirectory" !< For example /home/MFC/examples/1D_Shock/D/
13779# 1108 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13780 character(len=20) :: file_num_str !< For storing the file number as a string
13781# 1108 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13782 character(len=20) :: zeros_part !< For the trailing zeros part
13783# 1108 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13784 character(len=6), parameter :: zeros_default = "000000" !< Default zeros (can be changed)
13785 ! Place any declaration of intermediate variables here
13786# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13787 real(wp) :: rhoH, rhoL, pRef, pInt, h, lam, wl, amp, intH, alph, Mach
13788# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13789 real(wp) :: eps
13790# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13791
13792# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13793 ! IGR Jets Arrays to stor position and radii of jets from input file
13794# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13795 real(wp), dimension(:), allocatable :: y_th_arr, z_th_arr, r_th_arr
13796# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13797 ! Variables to describe initial condition of jet
13798# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13799 real(wp) :: r, ux_th, ux_am, p_th, p_am, rho_th, rho_am, y_th, z_th, r_th, eps_smooth
13800# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13801 real(wp) :: rcut, xcut !< Intermediate variables for creating smooth initial condition
13802# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13803 real(wp), dimension(0:n,0:p) :: rcut_arr
13804# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13805 integer :: l, q, s !< Iterators for reading input files
13806# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13807 integer :: start, end !< Ints to keep track of position in file
13808# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13809 character(len=1000) :: line !< String to store line in file
13810# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13811 character(len=25) :: value !< String to store value in line
13812# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13813 integer :: NJet !< Number of jets
13814# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13815
13816# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13817 eps = 1e-9_wp
13818# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13819
13820# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13821 if (patch_icpp(patch_id)%hcid == 303) then
13822# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13823 eps_smooth = 3._wp
13824# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13825 open (unit=10, file="njet.txt", status="old", action="read")
13826# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13827 read (10, *) njet
13828# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13829 close (10)
13830# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13831
13832# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13833 allocate (y_th_arr(0:njet - 1))
13834# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13835 allocate (z_th_arr(0:njet - 1))
13836# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13837 allocate (r_th_arr(0:njet - 1))
13838# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13839
13840# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13841 open (unit=10, file="jets.csv", status="old", action="read")
13842# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13843 do q = 0, njet - 1
13844# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13845 read (10, '(A)') line ! Read a full line as a string
13846# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13847 start = 1
13848# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13849
13850# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13851 do l = 0, 2
13852# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13853 end = index(line(start:), ',') ! Find the next comma
13854# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13855 if (end == 0) then
13856# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13857 value = trim(adjustl(line(start:))) ! Last value in the line
13858# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13859 else
13860# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13861 value = trim(adjustl(line(start:start + end - 2))) ! Extract substring
13862# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13863 start = start + end ! Move to next value
13864# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13865 end if
13866# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13867 if (l == 0) then
13868# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13869 read (value, *) y_th_arr(q) ! Convert string to numeric value
13870# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13871 else if (l == 1) then
13872# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13873 read (value, *) z_th_arr(q)
13874# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13875 else
13876# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13877 read (value, *) r_th_arr(q)
13878# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13879 end if
13880# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13881 end do
13882# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13883 end do
13884# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13885 close (10)
13886# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13887
13888# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13889 do q = 0, p
13890# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13891 do l = 0, n
13892# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13893 rcut = 0._wp
13894# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13895 do s = 0, njet - 1
13896# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13897 r = sqrt((y_cc(l) - y_th_arr(s))**2._wp + (z_cc(q) - z_th_arr(s))**2._wp)
13898# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13899 rcut = rcut + f_cut_on(r - r_th_arr(s), eps_smooth)
13900# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13901 end do
13902# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13903 rcut_arr(l, q) = rcut
13904# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13905 end do
13906# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13907 end do
13908# 1109 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13909 end if
13910
13911 ! Transferring the cylindrical patch's centroid, length, radius, smoothing patch identity and smoothing coefficient
13912 ! information
13913 x_centroid = patch_icpp(patch_id)%x_centroid
13914 y_centroid = patch_icpp(patch_id)%y_centroid
13915 z_centroid = patch_icpp(patch_id)%z_centroid
13916 length_x = patch_icpp(patch_id)%length_x
13917 length_y = patch_icpp(patch_id)%length_y
13918 length_z = patch_icpp(patch_id)%length_z
13919 radius = patch_icpp(patch_id)%radius
13920 smooth_patch_id = patch_icpp(patch_id)%smooth_patch_id
13921 smooth_coeff = patch_icpp(patch_id)%smooth_coeff
13922
13923 ! Computing the beginning and the end x-, y- and z-coordinates of the cylinder based on its centroid and lengths
13924 x_boundary%beg = x_centroid - 0.5_wp*length_x
13925 x_boundary%end = x_centroid + 0.5_wp*length_x
13926 y_boundary%beg = y_centroid - 0.5_wp*length_y
13927 y_boundary%end = y_centroid + 0.5_wp*length_y
13928 z_boundary%beg = z_centroid - 0.5_wp*length_z
13929 z_boundary%end = z_centroid + 0.5_wp*length_z
13930
13931 ! Initialize eta=1; modified if smoothing is enabled
13932 eta = 1._wp
13933
13934 ! Assign patch vars if cell is covered and patch has write permission
13935 do k = 0, p
13936 do j = 0, n
13937 do i = 0, m
13938 if (grid_geometry == 3) then
13940 else
13941 cart_y = y_cc(j)
13942 cart_z = z_cc(k)
13943 end if
13944
13945 if (patch_icpp(patch_id)%smoothen) then
13946 if (.not. f_is_default(length_x)) then
13947 eta = tanh(smooth_coeff/min(dy, &
13948 & dz)*(sqrt((cart_y - y_centroid)**2 + (cart_z - z_centroid)**2) - radius))*(-0.5_wp) &
13949 & + 0.5_wp
13950 else if (.not. f_is_default(length_y)) then
13951 eta = tanh(smooth_coeff/min(dx, &
13952 & dz)*(sqrt((x_cc(i) - x_centroid)**2 + (cart_z - z_centroid)**2) - radius))*(-0.5_wp) &
13953 & + 0.5_wp
13954 else
13955 eta = tanh(smooth_coeff/min(dx, &
13956 & dy)*(sqrt((x_cc(i) - x_centroid)**2 + (cart_y - y_centroid)**2) - radius))*(-0.5_wp) &
13957 & + 0.5_wp
13958 end if
13959 end if
13960
13961 if (((.not. f_is_default(length_x) .and. (cart_y - y_centroid)**2 + (cart_z - z_centroid) &
13962 & **2 <= radius**2 .and. x_boundary%beg <= x_cc(i) .and. x_boundary%end >= x_cc(i)) &
13963 & .or. (.not. f_is_default(length_y) .and. (x_cc(i) - x_centroid)**2 + (cart_z - z_centroid) &
13964 & **2 <= radius**2 .and. y_boundary%beg <= cart_y .and. y_boundary%end >= cart_y) &
13965 & .or. (.not. f_is_default(length_z) .and. (x_cc(i) - x_centroid)**2 + (cart_y - y_centroid) &
13966 & **2 <= radius**2 .and. z_boundary%beg <= cart_z .and. z_boundary%end >= cart_z) &
13967 & .and. patch_icpp(patch_id)%alter_patch(patch_id_fp(i, j, k))) .or. patch_id_fp(i, j, &
13968 & k) == smooth_patch_id) then
13969 call s_assign_patch_primitive_variables(patch_id, i, j, k, eta, q_prim_vf, patch_id_fp)
13970
13971
13972 if (patch_icpp(patch_id)%hcid /= dflt_int) then
13973 select case (patch_icpp(patch_id)%hcid)
13974# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13975 case (300) ! Rayleigh-Taylor instability
13976# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13977 rhoh = 3._wp
13978# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13979 rhol = 1._wp
13980# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13981 pref = 1.e5_wp
13982# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13983 pint = pref
13984# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13985 h = 0.7_wp
13986# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13987 lam = 0.2_wp
13988# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13989 wl = 2._wp*pi/lam
13990# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13991 amp = 0.025_wp/wl
13992# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13993
13994# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13995 inth = amp*(sin(2._wp*pi*x_cc(i)/lam - pi/2._wp) + sin(2._wp*pi*z_cc(k)/lam - pi/2._wp)) + h
13996# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13997
13998# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13999 alph = 5.e-1_wp*(1._wp + tanh((y_cc(j) - inth)/2.5e-3_wp))
14000# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14001
14002# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14003 if (alph < eps) alph = eps
14004# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14005 if (alph > 1._wp - eps) alph = 1._wp - eps
14006# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14007
14008# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14009 if (y_cc(j) > inth) then
14010# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14011 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
14012# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14013 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
14014# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14015 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = alph*rhoh
14016# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14017 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = (1._wp - alph)*rhol
14018# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14019 q_prim_vf(eqn_idx%E)%sf(i, j, k) = pref + rhoh*9.81_wp*(1.2_wp - y_cc(j))
14020# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14021 else
14022# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14023 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
14024# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14025 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
14026# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14027 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = alph*rhoh
14028# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14029 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = (1._wp - alph)*rhol
14030# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14031 pint = pref + rhoh*9.81_wp*(1.2_wp - inth)
14032# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14033 q_prim_vf(eqn_idx%E)%sf(i, j, k) = pint + rhol*9.81_wp*(inth - y_cc(j))
14034# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14035 end if
14036# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14037 case (301) ! (3D lung geometry in X direction, |sin(*)+sin(*)|)
14038# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14039 h = 0.0_wp
14040# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14041 lam = 1.0_wp
14042# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14043 amp = patch_icpp(patch_id)%a(2)
14044# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14045 inth = amp*abs((sin(2*pi*y_cc(j)/lam - pi/2) + sin(2*pi*z_cc(k)/lam - pi/2)) + h)
14046# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14047 if (x_cc(i) > inth) then
14048# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14049 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = patch_icpp(1)%alpha_rho(1)
14050# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14051 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = patch_icpp(1)%alpha_rho(2)
14052# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14053 q_prim_vf(eqn_idx%E)%sf(i, j, k) = patch_icpp(1)%pres
14054# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14055 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = patch_icpp(1)%alpha(1)
14056# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14057 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = patch_icpp(1)%alpha(2)
14058# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14059 end if
14060# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14061 case (302) ! 3D Jet with IGR
14062# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14063 ux_th = 10*sqrt(1.4*0.4)
14064# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14065 ux_am = 0.0*sqrt(1.4)
14066# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14067 p_th = 2.0_wp
14068# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14069 p_am = 1.0_wp
14070# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14071 rho_th = 1._wp
14072# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14073 rho_am = 1._wp
14074# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14075 y_th = 0.0_wp
14076# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14077 z_th = 0.0_wp
14078# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14079 r_th = 1._wp
14080# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14081 eps_smooth = 1._wp
14082# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14083 eps = 1e-6
14084# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14085
14086# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14087 r = sqrt((y_cc(j) - y_th)**2._wp + (z_cc(k) - z_th)**2._wp)
14088# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14089 rcut = f_cut_on(r - r_th, eps_smooth)
14090# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14091 xcut = f_cut_on(x_cc(i), eps_smooth)
14092# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14093
14094# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14095 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, k) = ux_th*rcut*xcut + ux_am
14096# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14097 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, k) = 0._wp
14098# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14099 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0._wp
14100# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14101
14102# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14103 if (num_fluids == 1) then
14104# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14105 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = (rho_th - rho_am)*rcut*xcut + rho_am
14106# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14107 else
14108# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14109 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = (1._wp - 2._wp*eps)*rcut*xcut + eps
14110# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14111 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = rho_th*q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)
14112# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14113 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = rho_am*(1._wp - q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k))
14114# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14115 end if
14116# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14117
14118# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14119 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p_th*rcut*xcut + p_am
14120# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14121 case (303) ! 3D Multijet
14122# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14123 eps_smooth = 3.0_wp
14124# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14125 ux_th = 10*sqrt(1.4*0.4)
14126# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14127 ux_am = 2.5*sqrt(1.4*0.4)
14128# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14129 p_th = 0.8_wp
14130# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14131 p_am = 0.4_wp
14132# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14133 rho_th = 1._wp
14134# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14135 rho_am = 1._wp
14136# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14137 eps = 1e-6
14138# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14139
14140# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14141 rcut = rcut_arr(j, k)
14142# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14143 xcut = f_cut_on(x_cc(i), eps_smooth)
14144# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14145
14146# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14147 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, k) = ux_th*rcut*xcut + ux_am
14148# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14149 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, k) = 0._wp
14150# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14151 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0._wp
14152# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14153
14154# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14155 if (num_fluids == 1) then
14156# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14157 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = (rho_th - rho_am)*rcut*xcut + rho_am
14158# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14159 else
14160# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14161 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = (1._wp - 2._wp*eps)*rcut*xcut + eps
14162# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14163 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = rho_th*q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)
14164# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14165 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = rho_am*(1._wp - q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k))
14166# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14167 end if
14168# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14169
14170# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14171 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p_th*rcut*xcut + p_am
14172# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14173 case (370) ! 3D extrusion of 2D profile from external data
14174# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14175 ! This hardcoded case extrudes a 2D profile to initialize a 3D simulation domain
14176# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14177 if (.not. files_loaded) then
14178# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14179 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
14180# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14181 do f = 1, max_files
14182# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14183 write (file_num_str, '(I0)') f
14184# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14185 filenames(f) = trim(init_dir) // "prim." // trim(file_num_str) // ".00." // zeros_default // ".dat"
14186# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14187 end do
14188# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14189
14190# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14191 ! Common file reading setup
14192# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14193 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
14194# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14195 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
14196# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14197
14198# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14199 select case (num_dims)
14200# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14201 case (1, 2) ! 1D and 2D cases are similar
14202# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14203 ! Count lines
14204# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14205 line_count = 0
14206# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14207 do
14208# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14209 read (unit2, *, iostat=ios2) dummy_x, dummy_y
14210# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14211 if (ios2 /= 0) exit
14212# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14213 line_count = line_count + 1
14214# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14215 end do
14216# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14217 close (unit2)
14218# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14219
14220# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14221 xrows = line_count
14222# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14223 yrows = 1
14224# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14225 index_x = 0
14226# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14227 if (num_dims == 2) index_x = i
14228# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14229#ifdef MFC_DEBUG
14230# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14231 block
14232# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14233 use iso_fortran_env, only: output_unit
14234# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14235
14236# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14237 print *, 'm_icpp_patches.fpp:1173: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
14238# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14239
14240# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14241 call flush (output_unit)
14242# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14243 end block
14244# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14245#endif
14246# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14247 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
14248# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14249
14250# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14251
14252# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14253
14254# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14255#if defined(MFC_OpenACC)
14256# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14257!$acc enter data create(x_coords, stored_values)
14258# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14259#elif defined(MFC_OpenMP)
14260# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14261!$omp target enter data map(always,alloc:x_coords, stored_values)
14262# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14263#endif
14264# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14265
14266# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14267 ! Read data from all files
14268# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14269 do f = 1, max_files
14270# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14271 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
14272# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14273 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
14274# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14275
14276# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14277 do iter = 1, xrows
14278# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14279 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
14280# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14281 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
14282# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14283 end do
14284# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14285 close (unit)
14286# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14287 end do
14288# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14289
14290# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14291 ! Calculate offsets
14292# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14293 domain_xstart = x_coords(1)
14294# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14295 x_step = x_cc(1) - x_cc(0)
14296# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14297 delta_x = merge(x_cc(0) - domain_xstart + x_step/2.0, x_cc(index_x) - domain_xstart + x_step/2.0, num_dims == 1)
14298# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14299 global_offset_x = nint(abs(delta_x)/x_step)
14300# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14301 case (3) ! 3D case - determine grid structure
14302# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14303 ! Find yRows by counting rows with same x
14304# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14305 read (unit2, *, iostat=ios2) x0, y0, dummy_z
14306# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14307 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
14308# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14309
14310# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14311 yrows = 1
14312# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14313 do
14314# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14315 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
14316# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14317 if (ios2 /= 0) exit
14318# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14319 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
14320# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14321 yrows = yrows + 1
14322# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14323 else
14324# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14325 exit
14326# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14327 end if
14328# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14329 end do
14330# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14331 close (unit2)
14332# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14333
14334# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14335 ! Count total rows
14336# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14337 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
14338# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14339 nrows = 0
14340# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14341 do
14342# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14343 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
14344# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14345 if (ios2 /= 0) exit
14346# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14347 nrows = nrows + 1
14348# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14349 end do
14350# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14351 close (unit2)
14352# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14353
14354# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14355 xrows = nrows/yrows
14356# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14357#ifdef MFC_DEBUG
14358# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14359 block
14360# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14361 use iso_fortran_env, only: output_unit
14362# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14363
14364# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14365 print *, 'm_icpp_patches.fpp:1173: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
14366# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14367
14368# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14369 call flush (output_unit)
14370# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14371 end block
14372# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14373#endif
14374# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14375 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
14376# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14377
14378# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14379
14380# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14381
14382# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14383
14384# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14385#if defined(MFC_OpenACC)
14386# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14387!$acc enter data create(x_coords, y_coords, stored_values)
14388# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14389#elif defined(MFC_OpenMP)
14390# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14391!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
14392# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14393#endif
14394# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14395 index_x = i
14396# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14397 index_y = j
14398# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14399
14400# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14401 ! Read all files
14402# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14403 do f = 1, max_files
14404# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14405 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
14406# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14407 if (ios /= 0) then
14408# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14409 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
14410# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14411 cycle
14412# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14413 end if
14414# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14415
14416# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14417 iter = 0
14418# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14419 do iix = 1, xrows
14420# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14421 do iiy = 1, yrows
14422# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14423 iter = iter + 1
14424# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14425 if (f == 1) then
14426# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14427 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
14428# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14429 else
14430# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14431 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
14432# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14433 end if
14434# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14435 if (ios /= 0) call s_mpi_abort("Error reading data")
14436# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14437 end do
14438# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14439 end do
14440# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14441 close (unit)
14442# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14443 end do
14444# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14445
14446# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14447 ! Calculate offsets
14448# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14449 x_step = x_cc(1) - x_cc(0)
14450# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14451 y_step = y_cc(1) - y_cc(0)
14452# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14453 delta_x = x_cc(index_x) - x_coords(1) + x_step/2.0_wp
14454# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14455 delta_y = y_cc(index_y) - y_coords(1) + y_step/2.0_wp
14456# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14457 global_offset_x = nint(abs(delta_x)/x_step)
14458# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14459 global_offset_y = nint(abs(delta_y)/y_step)
14460# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14461 end select
14462# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14463
14464# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14465 files_loaded = .true.
14466# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14467 end if
14468# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14469
14470# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14471 ! Data assignment
14472# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14473 select case (num_dims)
14474# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14475 case (1)
14476# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14477 idx = i + 1 + global_offset_x
14478# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14479 do f = 1, sys_size
14480# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14481 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
14482# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14483 end do
14484# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14485 case (2)
14486# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14487 idx = i + 1 + global_offset_x - index_x
14488# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14489 do f = 1, sys_size - 1
14490# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14491 jump = merge(1, 0, f >= eqn_idx%mom%end)
14492# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14493 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
14494# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14495 end do
14496# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14497 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
14498# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14499 case (3)
14500# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14501 idx = i + 1 + global_offset_x - index_x
14502# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14503 idy = j + 1 + global_offset_y - index_y
14504# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14505 do f = 1, sys_size - 1
14506# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14507 jump = merge(1, 0, f >= eqn_idx%mom%end)
14508# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14509 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
14510# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14511 end do
14512# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14513 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
14514# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14515 end select
14516# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14517 case (380) ! Taylor-Green vortex
14518# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14519 ! This is patch is hard-coded for test suite optimization used in the 3D_TaylorGreenVortex case: This analytic patch used
14520# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14521 ! geometry 9
14522# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14523 mach = 0.1
14524# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14525 if (patch_id == 1) then
14526# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14527 q_prim_vf(eqn_idx%E)%sf(i, j, &
14528# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14529 & k) = 101325 + (mach**2*376.636429464809**2/16)*(cos(2*x_cc(i)/1) + cos(2*y_cc(j)/1))*(cos(2*z_cc(k)/1) + 2)
14530# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14531 q_prim_vf(eqn_idx%mom%beg + 0)%sf(i, j, k) = mach*376.636429464809*sin(x_cc(i)/1)*cos(y_cc(j)/1)*sin(z_cc(k)/1)
14532# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14533 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, k) = -mach*376.636429464809*cos(x_cc(i)/1)*sin(y_cc(j)/1)*sin(z_cc(k)/1)
14534# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14535 end if
14536# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14537 case default
14538# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14539 call s_int_to_str(patch_id, istr)
14540# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14541 call s_mpi_abort("Invalid hcid specified for patch " // trim(istr))
14542# 1173 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14543 end select
14544 end if
14545
14546 ! Updating the patch identities bookkeeping variable
14547 if (1._wp - eta < sgm_eps) patch_id_fp(i, j, k) = patch_id
14548 end if
14549 end do
14550 end do
14551 end do
14552 if (allocated(stored_values)) then
14553# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14554#ifdef MFC_DEBUG
14555# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14556 block
14557# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14558 use iso_fortran_env, only: output_unit
14559# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14560
14561# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14562 print *, 'm_icpp_patches.fpp:1182: ', '@:DEALLOCATE(stored_values)'
14563# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14564
14565# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14566 call flush (output_unit)
14567# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14568 end block
14569# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14570#endif
14571# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14572
14573# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14574#if defined(MFC_OpenACC)
14575# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14576!$acc exit data delete(stored_values)
14577# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14578#elif defined(MFC_OpenMP)
14579# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14580!$omp target exit data map(release:stored_values)
14581# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14582#endif
14583# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14584 deallocate (stored_values)
14585# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14586#ifdef MFC_DEBUG
14587# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14588 block
14589# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14590 use iso_fortran_env, only: output_unit
14591# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14592
14593# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14594 print *, 'm_icpp_patches.fpp:1182: ', '@:DEALLOCATE(x_coords)'
14595# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14596
14597# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14598 call flush (output_unit)
14599# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14600 end block
14601# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14602#endif
14603# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14604
14605# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14606#if defined(MFC_OpenACC)
14607# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14608!$acc exit data delete(x_coords)
14609# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14610#elif defined(MFC_OpenMP)
14611# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14612!$omp target exit data map(release:x_coords)
14613# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14614#endif
14615# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14616 deallocate (x_coords)
14617# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14618 end if
14619# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14620
14621# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14622 if (allocated(y_coords)) then
14623# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14624#ifdef MFC_DEBUG
14625# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14626 block
14627# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14628 use iso_fortran_env, only: output_unit
14629# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14630
14631# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14632 print *, 'm_icpp_patches.fpp:1182: ', '@:DEALLOCATE(y_coords)'
14633# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14634
14635# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14636 call flush (output_unit)
14637# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14638 end block
14639# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14640#endif
14641# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14642
14643# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14644#if defined(MFC_OpenACC)
14645# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14646!$acc exit data delete(y_coords)
14647# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14648#elif defined(MFC_OpenMP)
14649# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14650!$omp target exit data map(release:y_coords)
14651# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14652#endif
14653# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14654 deallocate (y_coords)
14655# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14656 end if
14657
14658 end subroutine s_icpp_cylinder
14659
14660 !> The swept plane patch is a 3D geometry that may be used, for example, in creating a solid boundary, or pre-/post- shock
14661 !! region, at an angle with respect to the axes of the Cartesian coordinate system. The geometry of the patch is well-defined
14662 !! when its centroid and normal vector, aimed in the sweep direction, are provided. Note that the sweep plane patch DOES allow
14663 !! the smoothing of its boundary.
14664 subroutine s_icpp_sweep_plane(patch_id, patch_id_fp, q_prim_vf)
14665
14666 integer, intent(in) :: patch_id
14667
14668#ifdef MFC_MIXED_PRECISION
14669 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
14670#else
14671 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
14672#endif
14673 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
14674 integer :: i, j, k !< Generic loop iterators
14675 real(wp) :: a, b, c, d
14676
14677 integer :: xRows, yRows, nRows, iix, iiy, max_files
14678# 1203 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14679 integer :: f, iter, ios, ios2, unit, unit2, idx, idy, index_x, index_y, jump, line_count, ycount
14680# 1203 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14681 real(wp) :: x_len, x_step, y_len, y_step
14682# 1203 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14683 real(wp) :: dummy_x, dummy_y, dummy_z, x0, y0
14684# 1203 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14685 integer :: global_offset_x, global_offset_y !< MPI subdomain offset
14686# 1203 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14687 real(wp) :: delta_x, delta_y
14688# 1203 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14689 character(len=100), dimension(sys_size) :: fileNames !< Arrays to store all data from files
14690# 1203 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14691 character(len=200) :: errmsg
14692# 1203 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14693 real(wp), allocatable :: stored_values(:,:,:)
14694# 1203 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14695 real(wp), allocatable :: x_coords(:), y_coords(:)
14696# 1203 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14697 logical :: files_loaded = .false.
14698# 1203 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14699 real(wp) :: domain_xstart, domain_xend, domain_ystart, domain_yend
14700# 1203 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14701 character(len=*), parameter :: init_dir = "/home/MFC/FilesDirectory" !< For example /home/MFC/examples/1D_Shock/D/
14702# 1203 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14703 character(len=20) :: file_num_str !< For storing the file number as a string
14704# 1203 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14705 character(len=20) :: zeros_part !< For the trailing zeros part
14706# 1203 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14707 character(len=6), parameter :: zeros_default = "000000" !< Default zeros (can be changed)
14708 ! Place any declaration of intermediate variables here
14709# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14710 real(wp) :: rhoH, rhoL, pRef, pInt, h, lam, wl, amp, intH, alph, Mach
14711# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14712 real(wp) :: eps
14713# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14714
14715# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14716 ! IGR Jets Arrays to stor position and radii of jets from input file
14717# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14718 real(wp), dimension(:), allocatable :: y_th_arr, z_th_arr, r_th_arr
14719# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14720 ! Variables to describe initial condition of jet
14721# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14722 real(wp) :: r, ux_th, ux_am, p_th, p_am, rho_th, rho_am, y_th, z_th, r_th, eps_smooth
14723# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14724 real(wp) :: rcut, xcut !< Intermediate variables for creating smooth initial condition
14725# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14726 real(wp), dimension(0:n,0:p) :: rcut_arr
14727# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14728 integer :: l, q, s !< Iterators for reading input files
14729# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14730 integer :: start, end !< Ints to keep track of position in file
14731# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14732 character(len=1000) :: line !< String to store line in file
14733# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14734 character(len=25) :: value !< String to store value in line
14735# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14736 integer :: NJet !< Number of jets
14737# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14738
14739# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14740 eps = 1e-9_wp
14741# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14742
14743# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14744 if (patch_icpp(patch_id)%hcid == 303) then
14745# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14746 eps_smooth = 3._wp
14747# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14748 open (unit=10, file="njet.txt", status="old", action="read")
14749# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14750 read (10, *) njet
14751# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14752 close (10)
14753# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14754
14755# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14756 allocate (y_th_arr(0:njet - 1))
14757# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14758 allocate (z_th_arr(0:njet - 1))
14759# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14760 allocate (r_th_arr(0:njet - 1))
14761# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14762
14763# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14764 open (unit=10, file="jets.csv", status="old", action="read")
14765# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14766 do q = 0, njet - 1
14767# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14768 read (10, '(A)') line ! Read a full line as a string
14769# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14770 start = 1
14771# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14772
14773# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14774 do l = 0, 2
14775# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14776 end = index(line(start:), ',') ! Find the next comma
14777# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14778 if (end == 0) then
14779# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14780 value = trim(adjustl(line(start:))) ! Last value in the line
14781# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14782 else
14783# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14784 value = trim(adjustl(line(start:start + end - 2))) ! Extract substring
14785# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14786 start = start + end ! Move to next value
14787# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14788 end if
14789# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14790 if (l == 0) then
14791# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14792 read (value, *) y_th_arr(q) ! Convert string to numeric value
14793# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14794 else if (l == 1) then
14795# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14796 read (value, *) z_th_arr(q)
14797# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14798 else
14799# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14800 read (value, *) r_th_arr(q)
14801# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14802 end if
14803# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14804 end do
14805# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14806 end do
14807# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14808 close (10)
14809# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14810
14811# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14812 do q = 0, p
14813# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14814 do l = 0, n
14815# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14816 rcut = 0._wp
14817# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14818 do s = 0, njet - 1
14819# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14820 r = sqrt((y_cc(l) - y_th_arr(s))**2._wp + (z_cc(q) - z_th_arr(s))**2._wp)
14821# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14822 rcut = rcut + f_cut_on(r - r_th_arr(s), eps_smooth)
14823# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14824 end do
14825# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14826 rcut_arr(l, q) = rcut
14827# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14828 end do
14829# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14830 end do
14831# 1204 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14832 end if
14833
14834 ! Transferring the centroid information of the plane to be swept
14835 x_centroid = patch_icpp(patch_id)%x_centroid
14836 y_centroid = patch_icpp(patch_id)%y_centroid
14837 z_centroid = patch_icpp(patch_id)%z_centroid
14838 smooth_patch_id = patch_icpp(patch_id)%smooth_patch_id
14839 smooth_coeff = patch_icpp(patch_id)%smooth_coeff
14840
14841 ! Obtaining coefficients of the equation describing the sweep plane
14842 a = patch_icpp(patch_id)%normal(1)
14843 b = patch_icpp(patch_id)%normal(2)
14844 c = patch_icpp(patch_id)%normal(3)
14845 d = -a*x_centroid - b*y_centroid - c*z_centroid
14846
14847 ! Initialize eta=1; modified if smoothing is enabled
14848 eta = 1._wp
14849
14850 ! Assign patch vars if cell is covered and patch has write permission
14851 do k = 0, p
14852 do j = 0, n
14853 do i = 0, m
14854 if (grid_geometry == 3) then
14856 else
14857 cart_y = y_cc(j)
14858 cart_z = z_cc(k)
14859 end if
14860
14861 if (patch_icpp(patch_id)%smoothen) then
14862 eta = 5.e-1_wp + 5.e-1_wp*tanh(smooth_coeff/min(dx, dy, &
14863 & dz)*(a*x_cc(i) + b*cart_y + c*cart_z + d)/sqrt(a**2 + b**2 + c**2))
14864 end if
14865
14866 if ((a*x_cc(i) + b*cart_y + c*cart_z + d >= 0._wp .and. patch_icpp(patch_id)%alter_patch(patch_id_fp(i, j, &
14867 & k))) .or. patch_id_fp(i, j, k) == smooth_patch_id) then
14868 call s_assign_patch_primitive_variables(patch_id, i, j, k, eta, q_prim_vf, patch_id_fp)
14869
14870
14871 if (patch_icpp(patch_id)%hcid /= dflt_int) then
14872 select case (patch_icpp(patch_id)%hcid)
14873# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14874 case (300) ! Rayleigh-Taylor instability
14875# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14876 rhoh = 3._wp
14877# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14878 rhol = 1._wp
14879# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14880 pref = 1.e5_wp
14881# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14882 pint = pref
14883# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14884 h = 0.7_wp
14885# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14886 lam = 0.2_wp
14887# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14888 wl = 2._wp*pi/lam
14889# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14890 amp = 0.025_wp/wl
14891# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14892
14893# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14894 inth = amp*(sin(2._wp*pi*x_cc(i)/lam - pi/2._wp) + sin(2._wp*pi*z_cc(k)/lam - pi/2._wp)) + h
14895# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14896
14897# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14898 alph = 5.e-1_wp*(1._wp + tanh((y_cc(j) - inth)/2.5e-3_wp))
14899# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14900
14901# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14902 if (alph < eps) alph = eps
14903# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14904 if (alph > 1._wp - eps) alph = 1._wp - eps
14905# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14906
14907# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14908 if (y_cc(j) > inth) then
14909# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14910 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
14911# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14912 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
14913# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14914 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = alph*rhoh
14915# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14916 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = (1._wp - alph)*rhol
14917# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14918 q_prim_vf(eqn_idx%E)%sf(i, j, k) = pref + rhoh*9.81_wp*(1.2_wp - y_cc(j))
14919# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14920 else
14921# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14922 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
14923# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14924 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
14925# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14926 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = alph*rhoh
14927# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14928 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = (1._wp - alph)*rhol
14929# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14930 pint = pref + rhoh*9.81_wp*(1.2_wp - inth)
14931# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14932 q_prim_vf(eqn_idx%E)%sf(i, j, k) = pint + rhol*9.81_wp*(inth - y_cc(j))
14933# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14934 end if
14935# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14936 case (301) ! (3D lung geometry in X direction, |sin(*)+sin(*)|)
14937# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14938 h = 0.0_wp
14939# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14940 lam = 1.0_wp
14941# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14942 amp = patch_icpp(patch_id)%a(2)
14943# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14944 inth = amp*abs((sin(2*pi*y_cc(j)/lam - pi/2) + sin(2*pi*z_cc(k)/lam - pi/2)) + h)
14945# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14946 if (x_cc(i) > inth) then
14947# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14948 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = patch_icpp(1)%alpha_rho(1)
14949# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14950 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = patch_icpp(1)%alpha_rho(2)
14951# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14952 q_prim_vf(eqn_idx%E)%sf(i, j, k) = patch_icpp(1)%pres
14953# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14954 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = patch_icpp(1)%alpha(1)
14955# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14956 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = patch_icpp(1)%alpha(2)
14957# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14958 end if
14959# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14960 case (302) ! 3D Jet with IGR
14961# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14962 ux_th = 10*sqrt(1.4*0.4)
14963# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14964 ux_am = 0.0*sqrt(1.4)
14965# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14966 p_th = 2.0_wp
14967# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14968 p_am = 1.0_wp
14969# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14970 rho_th = 1._wp
14971# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14972 rho_am = 1._wp
14973# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14974 y_th = 0.0_wp
14975# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14976 z_th = 0.0_wp
14977# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14978 r_th = 1._wp
14979# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14980 eps_smooth = 1._wp
14981# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14982 eps = 1e-6
14983# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14984
14985# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14986 r = sqrt((y_cc(j) - y_th)**2._wp + (z_cc(k) - z_th)**2._wp)
14987# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14988 rcut = f_cut_on(r - r_th, eps_smooth)
14989# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14990 xcut = f_cut_on(x_cc(i), eps_smooth)
14991# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14992
14993# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14994 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, k) = ux_th*rcut*xcut + ux_am
14995# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14996 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, k) = 0._wp
14997# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14998 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0._wp
14999# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15000
15001# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15002 if (num_fluids == 1) then
15003# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15004 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = (rho_th - rho_am)*rcut*xcut + rho_am
15005# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15006 else
15007# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15008 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = (1._wp - 2._wp*eps)*rcut*xcut + eps
15009# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15010 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = rho_th*q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)
15011# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15012 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = rho_am*(1._wp - q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k))
15013# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15014 end if
15015# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15016
15017# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15018 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p_th*rcut*xcut + p_am
15019# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15020 case (303) ! 3D Multijet
15021# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15022 eps_smooth = 3.0_wp
15023# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15024 ux_th = 10*sqrt(1.4*0.4)
15025# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15026 ux_am = 2.5*sqrt(1.4*0.4)
15027# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15028 p_th = 0.8_wp
15029# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15030 p_am = 0.4_wp
15031# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15032 rho_th = 1._wp
15033# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15034 rho_am = 1._wp
15035# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15036 eps = 1e-6
15037# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15038
15039# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15040 rcut = rcut_arr(j, k)
15041# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15042 xcut = f_cut_on(x_cc(i), eps_smooth)
15043# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15044
15045# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15046 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, k) = ux_th*rcut*xcut + ux_am
15047# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15048 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, k) = 0._wp
15049# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15050 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0._wp
15051# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15052
15053# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15054 if (num_fluids == 1) then
15055# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15056 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = (rho_th - rho_am)*rcut*xcut + rho_am
15057# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15058 else
15059# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15060 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = (1._wp - 2._wp*eps)*rcut*xcut + eps
15061# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15062 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = rho_th*q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)
15063# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15064 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = rho_am*(1._wp - q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k))
15065# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15066 end if
15067# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15068
15069# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15070 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p_th*rcut*xcut + p_am
15071# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15072 case (370) ! 3D extrusion of 2D profile from external data
15073# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15074 ! This hardcoded case extrudes a 2D profile to initialize a 3D simulation domain
15075# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15076 if (.not. files_loaded) then
15077# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15078 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
15079# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15080 do f = 1, max_files
15081# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15082 write (file_num_str, '(I0)') f
15083# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15084 filenames(f) = trim(init_dir) // "prim." // trim(file_num_str) // ".00." // zeros_default // ".dat"
15085# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15086 end do
15087# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15088
15089# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15090 ! Common file reading setup
15091# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15092 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
15093# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15094 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
15095# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15096
15097# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15098 select case (num_dims)
15099# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15100 case (1, 2) ! 1D and 2D cases are similar
15101# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15102 ! Count lines
15103# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15104 line_count = 0
15105# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15106 do
15107# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15108 read (unit2, *, iostat=ios2) dummy_x, dummy_y
15109# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15110 if (ios2 /= 0) exit
15111# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15112 line_count = line_count + 1
15113# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15114 end do
15115# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15116 close (unit2)
15117# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15118
15119# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15120 xrows = line_count
15121# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15122 yrows = 1
15123# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15124 index_x = 0
15125# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15126 if (num_dims == 2) index_x = i
15127# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15128#ifdef MFC_DEBUG
15129# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15130 block
15131# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15132 use iso_fortran_env, only: output_unit
15133# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15134
15135# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15136 print *, 'm_icpp_patches.fpp:1244: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
15137# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15138
15139# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15140 call flush (output_unit)
15141# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15142 end block
15143# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15144#endif
15145# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15146 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
15147# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15148
15149# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15150
15151# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15152
15153# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15154#if defined(MFC_OpenACC)
15155# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15156!$acc enter data create(x_coords, stored_values)
15157# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15158#elif defined(MFC_OpenMP)
15159# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15160!$omp target enter data map(always,alloc:x_coords, stored_values)
15161# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15162#endif
15163# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15164
15165# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15166 ! Read data from all files
15167# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15168 do f = 1, max_files
15169# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15170 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
15171# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15172 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
15173# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15174
15175# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15176 do iter = 1, xrows
15177# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15178 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
15179# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15180 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
15181# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15182 end do
15183# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15184 close (unit)
15185# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15186 end do
15187# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15188
15189# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15190 ! Calculate offsets
15191# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15192 domain_xstart = x_coords(1)
15193# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15194 x_step = x_cc(1) - x_cc(0)
15195# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15196 delta_x = merge(x_cc(0) - domain_xstart + x_step/2.0, x_cc(index_x) - domain_xstart + x_step/2.0, num_dims == 1)
15197# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15198 global_offset_x = nint(abs(delta_x)/x_step)
15199# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15200 case (3) ! 3D case - determine grid structure
15201# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15202 ! Find yRows by counting rows with same x
15203# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15204 read (unit2, *, iostat=ios2) x0, y0, dummy_z
15205# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15206 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
15207# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15208
15209# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15210 yrows = 1
15211# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15212 do
15213# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15214 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
15215# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15216 if (ios2 /= 0) exit
15217# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15218 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
15219# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15220 yrows = yrows + 1
15221# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15222 else
15223# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15224 exit
15225# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15226 end if
15227# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15228 end do
15229# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15230 close (unit2)
15231# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15232
15233# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15234 ! Count total rows
15235# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15236 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
15237# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15238 nrows = 0
15239# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15240 do
15241# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15242 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
15243# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15244 if (ios2 /= 0) exit
15245# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15246 nrows = nrows + 1
15247# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15248 end do
15249# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15250 close (unit2)
15251# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15252
15253# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15254 xrows = nrows/yrows
15255# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15256#ifdef MFC_DEBUG
15257# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15258 block
15259# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15260 use iso_fortran_env, only: output_unit
15261# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15262
15263# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15264 print *, 'm_icpp_patches.fpp:1244: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
15265# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15266
15267# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15268 call flush (output_unit)
15269# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15270 end block
15271# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15272#endif
15273# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15274 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
15275# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15276
15277# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15278
15279# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15280
15281# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15282
15283# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15284#if defined(MFC_OpenACC)
15285# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15286!$acc enter data create(x_coords, y_coords, stored_values)
15287# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15288#elif defined(MFC_OpenMP)
15289# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15290!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
15291# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15292#endif
15293# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15294 index_x = i
15295# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15296 index_y = j
15297# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15298
15299# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15300 ! Read all files
15301# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15302 do f = 1, max_files
15303# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15304 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
15305# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15306 if (ios /= 0) then
15307# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15308 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
15309# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15310 cycle
15311# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15312 end if
15313# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15314
15315# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15316 iter = 0
15317# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15318 do iix = 1, xrows
15319# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15320 do iiy = 1, yrows
15321# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15322 iter = iter + 1
15323# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15324 if (f == 1) then
15325# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15326 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
15327# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15328 else
15329# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15330 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
15331# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15332 end if
15333# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15334 if (ios /= 0) call s_mpi_abort("Error reading data")
15335# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15336 end do
15337# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15338 end do
15339# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15340 close (unit)
15341# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15342 end do
15343# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15344
15345# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15346 ! Calculate offsets
15347# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15348 x_step = x_cc(1) - x_cc(0)
15349# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15350 y_step = y_cc(1) - y_cc(0)
15351# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15352 delta_x = x_cc(index_x) - x_coords(1) + x_step/2.0_wp
15353# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15354 delta_y = y_cc(index_y) - y_coords(1) + y_step/2.0_wp
15355# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15356 global_offset_x = nint(abs(delta_x)/x_step)
15357# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15358 global_offset_y = nint(abs(delta_y)/y_step)
15359# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15360 end select
15361# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15362
15363# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15364 files_loaded = .true.
15365# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15366 end if
15367# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15368
15369# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15370 ! Data assignment
15371# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15372 select case (num_dims)
15373# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15374 case (1)
15375# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15376 idx = i + 1 + global_offset_x
15377# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15378 do f = 1, sys_size
15379# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15380 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
15381# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15382 end do
15383# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15384 case (2)
15385# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15386 idx = i + 1 + global_offset_x - index_x
15387# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15388 do f = 1, sys_size - 1
15389# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15390 jump = merge(1, 0, f >= eqn_idx%mom%end)
15391# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15392 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
15393# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15394 end do
15395# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15396 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
15397# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15398 case (3)
15399# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15400 idx = i + 1 + global_offset_x - index_x
15401# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15402 idy = j + 1 + global_offset_y - index_y
15403# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15404 do f = 1, sys_size - 1
15405# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15406 jump = merge(1, 0, f >= eqn_idx%mom%end)
15407# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15408 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
15409# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15410 end do
15411# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15412 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
15413# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15414 end select
15415# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15416 case (380) ! Taylor-Green vortex
15417# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15418 ! This is patch is hard-coded for test suite optimization used in the 3D_TaylorGreenVortex case: This analytic patch used
15419# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15420 ! geometry 9
15421# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15422 mach = 0.1
15423# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15424 if (patch_id == 1) then
15425# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15426 q_prim_vf(eqn_idx%E)%sf(i, j, &
15427# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15428 & k) = 101325 + (mach**2*376.636429464809**2/16)*(cos(2*x_cc(i)/1) + cos(2*y_cc(j)/1))*(cos(2*z_cc(k)/1) + 2)
15429# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15430 q_prim_vf(eqn_idx%mom%beg + 0)%sf(i, j, k) = mach*376.636429464809*sin(x_cc(i)/1)*cos(y_cc(j)/1)*sin(z_cc(k)/1)
15431# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15432 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, k) = -mach*376.636429464809*cos(x_cc(i)/1)*sin(y_cc(j)/1)*sin(z_cc(k)/1)
15433# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15434 end if
15435# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15436 case default
15437# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15438 call s_int_to_str(patch_id, istr)
15439# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15440 call s_mpi_abort("Invalid hcid specified for patch " // trim(istr))
15441# 1244 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15442 end select
15443 end if
15444
15445 ! Updating the patch identities bookkeeping variable
15446 if (1._wp - eta < sgm_eps) patch_id_fp(i, j, k) = patch_id
15447 end if
15448 end do
15449 end do
15450 end do
15451 if (allocated(stored_values)) then
15452# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15453#ifdef MFC_DEBUG
15454# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15455 block
15456# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15457 use iso_fortran_env, only: output_unit
15458# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15459
15460# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15461 print *, 'm_icpp_patches.fpp:1253: ', '@:DEALLOCATE(stored_values)'
15462# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15463
15464# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15465 call flush (output_unit)
15466# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15467 end block
15468# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15469#endif
15470# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15471
15472# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15473#if defined(MFC_OpenACC)
15474# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15475!$acc exit data delete(stored_values)
15476# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15477#elif defined(MFC_OpenMP)
15478# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15479!$omp target exit data map(release:stored_values)
15480# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15481#endif
15482# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15483 deallocate (stored_values)
15484# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15485#ifdef MFC_DEBUG
15486# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15487 block
15488# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15489 use iso_fortran_env, only: output_unit
15490# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15491
15492# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15493 print *, 'm_icpp_patches.fpp:1253: ', '@:DEALLOCATE(x_coords)'
15494# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15495
15496# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15497 call flush (output_unit)
15498# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15499 end block
15500# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15501#endif
15502# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15503
15504# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15505#if defined(MFC_OpenACC)
15506# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15507!$acc exit data delete(x_coords)
15508# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15509#elif defined(MFC_OpenMP)
15510# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15511!$omp target exit data map(release:x_coords)
15512# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15513#endif
15514# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15515 deallocate (x_coords)
15516# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15517 end if
15518# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15519
15520# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15521 if (allocated(y_coords)) then
15522# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15523#ifdef MFC_DEBUG
15524# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15525 block
15526# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15527 use iso_fortran_env, only: output_unit
15528# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15529
15530# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15531 print *, 'm_icpp_patches.fpp:1253: ', '@:DEALLOCATE(y_coords)'
15532# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15533
15534# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15535 call flush (output_unit)
15536# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15537 end block
15538# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15539#endif
15540# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15541
15542# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15543#if defined(MFC_OpenACC)
15544# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15545!$acc exit data delete(y_coords)
15546# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15547#elif defined(MFC_OpenMP)
15548# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15549!$omp target exit data map(release:y_coords)
15550# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15551#endif
15552# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15553 deallocate (y_coords)
15554# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15555 end if
15556
15557 end subroutine s_icpp_sweep_plane
15558
15559 !> The STL patch is a 2/3D geometry that is imported from an STL file.
15560 subroutine s_icpp_model(patch_id, patch_id_fp, q_prim_vf)
15561
15562 integer, intent(in) :: patch_id
15563
15564#ifdef MFC_MIXED_PRECISION
15565 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
15566#else
15567 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
15568#endif
15569 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
15570
15571 ! Variables for IBM+STL
15572 real(wp) :: normals(1:3) !< Boundary normal buffer
15573 integer :: boundary_vertex_count, boundary_edge_count, total_vertices !< Boundary vertex
15574 real(wp), allocatable, dimension(:,:,:) :: boundary_v !< Boundary vertex buffer
15575 integer :: i, j, k !< Generic loop iterators
15576 type(t_bbox) :: bbox, bbox_old
15577 type(t_model) :: model
15578 type(ic_model_parameters) :: params
15579 real(wp), dimension(1:3) :: point, model_center
15580 real(wp) :: grid_mm(1:3,1:2)
15581 integer :: cell_num
15582 integer :: ncells
15583 real(wp), dimension(1:4,1:4) :: transform, transform_n
15584
15585 if (proc_rank == 0) then
15586 print *, " * Reading model: " // trim(patch_icpp(patch_id)%model_filepath)
15587 end if
15588
15589 model = f_model_read(patch_icpp(patch_id)%model_filepath)
15590 params%scale(:) = patch_icpp(patch_id)%model_scale(:)
15591 params%translate(:) = patch_icpp(patch_id)%model_translate(:)
15592 params%rotate(:) = patch_icpp(patch_id)%model_rotate(:)
15593 params%spc = patch_icpp(patch_id)%model_spc
15594 params%threshold = patch_icpp(patch_id)%model_threshold
15595
15596 if (proc_rank == 0) then
15597 print *, " * Transforming model."
15598 end if
15599
15600 ! Get the model center before transforming the model
15601 bbox_old = f_create_bbox(model)
15602 model_center(1:3) = (bbox_old%min(1:3) + bbox_old%max(1:3))/2._wp
15603
15604 ! Compute the transform matrices for vertices and normals
15605 transform = f_create_transform_matrix(params, model_center)
15606 transform_n = f_create_transform_matrix(params)
15607
15608 call s_transform_model(model, transform, transform_n)
15609
15610 ! Recreate the bounding box after transformation
15611 bbox = f_create_bbox(model)
15612
15613 ! Show the number of vertices in the original STL model
15614 if (proc_rank == 0) then
15615 print *, ' * Number of input model vertices:', 3*model%ntrs
15616 end if
15617
15618 call s_check_boundary(model, boundary_v, boundary_vertex_count, boundary_edge_count)
15619
15620 ! Show the number of edges and boundary edges in 2D STL models
15621 if (proc_rank == 0 .and. p == 0) then
15622 print *, ' * Number of 2D model boundary edges:', boundary_edge_count
15623 end if
15624
15625 if (proc_rank == 0) then
15626 write (*, "(A, 3(2X, F20.10))") " > Model: Min:", bbox%min(1:3)
15627 write (*, "(A, 3(2X, F20.10))") " > Cen:", (bbox%min(1:3) + bbox%max(1:3))/2._wp
15628 write (*, "(A, 3(2X, F20.10))") " > Max:", bbox%max(1:3)
15629
15630 grid_mm(1,:) = (/minval(x_cc) - 0.e5_wp*dx, maxval(x_cc) + 0.e5_wp*dx/)
15631 grid_mm(2,:) = (/minval(y_cc) - 0.e5_wp*dy, maxval(y_cc) + 0.e5_wp*dy/)
15632
15633 if (p > 0) then
15634 grid_mm(3,:) = (/minval(z_cc) - 0.e5_wp*dz, maxval(z_cc) + 0.e5_wp*dz/)
15635 else
15636 grid_mm(3,:) = (/0._wp, 0._wp/)
15637 end if
15638
15639 write (*, "(A, 3(2X, F20.10))") " > Domain: Min:", grid_mm(:,1)
15640 write (*, "(A, 3(2X, F20.10))") " > Cen:", (grid_mm(:,1) + grid_mm(:,2))/2._wp
15641 write (*, "(A, 3(2X, F20.10))") " > Max:", grid_mm(:,2)
15642 end if
15643
15644 ncells = (m + 1)*(n + 1)*(p + 1)
15645 do i = 0, m; do j = 0, n; do k = 0, p
15646 cell_num = i*(n + 1)*(p + 1) + j*(p + 1) + (k + 1)
15647 if (proc_rank == 0 .and. mod(cell_num, ncells/100) == 0) then
15648 write (*, "(A, I3, A)", advance="no") char(13) // " * Generating grid: ", nint(100*real(cell_num)/ncells), "%"
15649 end if
15650
15651 point = (/x_cc(i), y_cc(j), 0._wp/)
15652 if (p > 0) then
15653 point(3) = z_cc(k)
15654 end if
15655
15656 if (grid_geometry == 3) then
15657 point = f_convert_cyl_to_cart(point)
15658 end if
15659
15660 eta = f_model_is_inside(model, point, (/dx, dy, dz/), patch_icpp(patch_id)%model_spc)
15661
15662 if (eta > patch_icpp(patch_id)%model_threshold) then
15663 eta = 1._wp
15664 else if (.not. patch_icpp(patch_id)%smoothen) then
15665 eta = 0._wp
15666 end if
15667
15668 call s_assign_patch_primitive_variables(patch_id, i, j, k, eta, q_prim_vf, patch_id_fp)
15669
15670 ! Note: Should probably use *eta* to compute primitive variables if defining them analytically.
15671
15672 end do; end do; end do
15673
15674 if (proc_rank == 0) then
15675 print *, ""
15676 print *, " * Cleaning up."
15677 end if
15678
15679 call s_model_free(model)
15680
15681 end subroutine s_icpp_model
15682
15683 !> Convert cylindrical (r, theta) coordinates to Cartesian (y, z) module variables.
15685
15686
15687# 1384 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15688#if MFC_OpenACC
15689# 1384 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15690!$acc routine seq
15691# 1384 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15692#elif MFC_OpenMP
15693# 1384 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15694
15695# 1384 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15696
15697# 1384 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15698!$omp declare target device_type(any)
15699# 1384 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15700#endif
15701
15702 real(wp), intent(in) :: cyl_y, cyl_z
15703
15704 cart_y = cyl_y*sin(cyl_z)
15705 cart_z = cyl_y*cos(cyl_z)
15706
15708
15709 !> Return a 3D Cartesian coordinate vector from a cylindrical (x, r, theta) input vector.
15710 function f_convert_cyl_to_cart(cyl) result(cart)
15711
15712
15713# 1396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15714#if MFC_OpenACC
15715# 1396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15716!$acc routine seq
15717# 1396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15718#elif MFC_OpenMP
15719# 1396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15720
15721# 1396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15722
15723# 1396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15724!$omp declare target device_type(any)
15725# 1396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15726#endif
15727
15728 real(wp), dimension(1:3), intent(in) :: cyl
15729 real(wp), dimension(1:3) :: cart
15730
15731 cart = (/cyl(1), cyl(2)*sin(cyl(3)), cyl(2)*cos(cyl(3))/)
15732
15733 end function f_convert_cyl_to_cart
15734
15735 !> Archimedes spiral function
15736 elemental function f_r(myth, offset, a)
15737
15738
15739# 1408 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15740#if MFC_OpenACC
15741# 1408 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15742!$acc routine seq
15743# 1408 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15744#elif MFC_OpenMP
15745# 1408 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15746
15747# 1408 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15748
15749# 1408 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15750!$omp declare target device_type(any)
15751# 1408 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15752#endif
15753 real(wp), intent(in) :: myth, offset, a
15754 real(wp) :: b
15755 real(wp) :: f_r
15756
15757 ! r(th) = a + b*th
15758
15759 b = 2._wp*a/(2._wp*pi)
15760 f_r = a + b*myth + offset
15761
15762 end function f_r
15763
15764end module m_icpp_patches
integer, intent(in) k
integer, intent(in) j
integer, intent(in) l
Assigns initial primitive variables to computational cells based on patch geometry.
procedure(s_assign_patch_xxxxx_primitive_variables), pointer, public s_assign_patch_primitive_variables
Pointer to mixture or species patch assignment routine.
Compile-time constant parameters: default values, tolerances, and physical constants.
real(wp), parameter small_radius
Radius cutoff to avoid division by zero for 3D spherical harmonic patch (geometry 14).
integer, parameter dflt_int
Default integer value.
integer, parameter max_2d_fourier_modes
Max Fourier mode index for 2D modal patch (geometry 13).
integer, parameter max_sph_harm_degree
Max degree L for 3D spherical harmonic patch (geometry 14).
real(wp), parameter pi
Pi.
Shared derived types for field data, patch geometry, bubble dynamics, and MPI I/O structures.
Defines global parameters for the computational domain, simulation algorithm, and initial conditions.
integer proc_rank
Rank of the local processor Number of cells in the x-, y- and z-coordinate directions.
integer sys_size
Number of unknowns in the system of equations.
integer num_patches
Number of patches composing initial condition.
integer num_dims
Number of spatial dimensions.
real(wp), dimension(:), allocatable x_cc
Locations of cell-centers (cc) in x-, y- and z-directions, respectively.
type(ic_patch_parameters), dimension(num_patches_max) patch_icpp
IC patch parameters (max: num_patches_max).
type(eqn_idx_info) eqn_idx
All conserved-variable equation index ranges and scalars.
Basic floating-point utilities: approximate equality, default detection, and coordinate bounds.
logical elemental function, public f_approx_equal(a, b, tol_input)
Check if two floating point numbers of wp are within tolerance.
Utility routines for bubble model setup, coordinate transforms, array sampling, and special functions...
Allocate memory and read initial condition data for IC extrusion.
subroutine s_icpp_ellipse(patch_id, patch_id_fp, q_prim_vf)
The elliptical patch is a 2D geometry. The geometry of the patch is well-defined when its centroid an...
real(wp) function, dimension(1:3) f_convert_cyl_to_cart(cyl)
Return a 3D Cartesian coordinate vector from a cylindrical (x, r, theta) input vector.
subroutine s_icpp_circle(patch_id, patch_id_fp, q_prim_vf)
The circular patch is a 2D geometry that may be used, for example, in creating a bubble or a droplet....
subroutine s_icpp_2d_taylorgreen_vortex(patch_id, patch_id_fp, q_prim_vf)
The Taylor Green vortex is 2D decaying vortex that may be used, for example, to verify the effects of...
subroutine s_icpp_cuboid(patch_id, patch_id_fp, q_prim_vf)
The cuboidal patch is a 3D geometry that may be used, for example, in creating a solid boundary,...
subroutine s_icpp_varcircle(patch_id, patch_id_fp, q_prim_vf)
The varcircle patch is a 2D geometry that may be used . It generatres an annulus.
subroutine s_icpp_2d_modal(patch_id, patch_id_fp, q_prim_vf)
2D modal (Fourier) patch. theta = atan2(y - y_centroid, x - x_centroid). Additive (modal_use_exp_form...
character(len=5) istr
string to store int to string result for error checking
subroutine s_icpp_sweep_plane(patch_id, patch_id_fp, q_prim_vf)
The swept plane patch is a 3D geometry that may be used, for example, in creating a solid boundary,...
subroutine s_icpp_rectangle(patch_id, patch_id_fp, q_prim_vf)
The rectangular patch is a 2D geometry that may be used, for example, in creating a solid boundary,...
impure subroutine, public s_apply_icpp_patches(patch_id_fp, q_prim_vf)
Dispatch each initial condition patch to its geometry-specific initialization routine.
real(wp) smooth_coeff
Smoothing coefficient (mirrors ic_patch_parameterssmooth_coeff).
subroutine s_icpp_line_segment(patch_id, patch_id_fp, q_prim_vf)
The line segment patch is a 1D geometry that may be used, for example, in creating a Riemann problem....
type(bounds_info) y_boundary
subroutine s_icpp_sphere(patch_id, patch_id_fp, q_prim_vf)
The spherical patch is a 3D geometry that may be used, for example, in creating a bubble or a droplet...
real(wp) eta
Pseudo volume fraction for patch boundary smoothing.
subroutine s_icpp_1d_bubble_pulse(patch_id, patch_id_fp, q_prim_vf)
Initialize a 1D bubble-pulse patch with analytical primitive variable profiles.
subroutine s_icpp_3d_spherical_harmonic(patch_id, patch_id_fp, q_prim_vf)
3D spherical harmonic patch. Surface r = radius + sum_lm sph_har_coeff(l,m)*Y_lm(theta,...
subroutine s_icpp_model(patch_id, patch_id_fp, q_prim_vf)
The STL patch is a 2/3D geometry that is imported from an STL file.
subroutine s_convert_cylindrical_to_cartesian_coord(cyl_y, cyl_z)
Convert cylindrical (r, theta) coordinates to Cartesian (y, z) module variables.
elemental real(wp) function f_r(myth, offset, a)
Archimedes spiral function.
type(bounds_info) x_boundary
type(bounds_info) z_boundary
Patch boundary locations in x, y, z.
subroutine s_icpp_sweep_line(patch_id, patch_id_fp, q_prim_vf)
The swept line patch is a 2D geometry that may be used, for example, in creating a solid boundary,...
subroutine s_icpp_ellipsoid(patch_id, patch_id_fp, q_prim_vf)
The ellipsoidal patch is a 3D geometry. The geometry of the patch is well-defined when its centroid a...
subroutine s_icpp_cylinder(patch_id, patch_id_fp, q_prim_vf)
The cylindrical patch is a 3D geometry that may be used, for example, in setting up a cylindrical sol...
impure subroutine s_icpp_spiral(patch_id, patch_id_fp, q_prim_vf)
The spiral patch is a 2D geometry that may be used, The geometry of the patch is well-defined when it...
subroutine s_icpp_3dvarcircle(patch_id, patch_id_fp, q_prim_vf)
Initialize a 3D variable-thickness circular annulus patch extruded along the z-axis.
Binary STL file reader and processor for immersed boundary geometry.
MPI communication layer: domain decomposition, halo exchange, reductions, and parallel I/O setup.
impure subroutine s_mpi_abort(prnt, code)
The subroutine terminates the MPI execution environment.
Conservative-to-primitive variable conversion, mixture property evaluation, and pressure computation.
real(wp), dimension(:), allocatable, public gammas
real(wp), dimension(:), allocatable, public gs_min
real(wp), dimension(:), allocatable, public pi_infs
Derived type adding beginning (beg) and end bounds info as attributes.
Derived type annexing a scalar field (SF).