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# 8 "/home/runner/work/MFC/MFC/src/common/include/case.fpp"
13
14! For moving immersed boundaries in simulation
15# 12 "/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.<file_extension>.dat`
31!> - Files are read from directory specified by `files_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 timestep field is controlled by the `file_extension` parameter
52!> @note Directory path is set via the `files_dir` parameter
53!> @warning Aborts execution if file reading errors occur.
54
55# 67 "/home/runner/work/MFC/MFC/src/common/include/ExtrusionHardcodedIC.fpp"
56
57# 214 "/home/runner/work/MFC/MFC/src/common/include/ExtrusionHardcodedIC.fpp"
58
59# 233 "/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# 72 "/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# 38 "/home/runner/work/MFC/MFC/src/common/include/2dHardcodedIC.fpp"
68
69# 557 "/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# 133 "/home/runner/work/MFC/MFC/src/common/include/3dHardcodedIC.fpp"
73
74# 279 "/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
103# 145 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
104! New line at end of file is required for FYPP
105# 2 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
106# 1 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 1
107# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
108# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
109# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
110# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
111# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
112# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
113
114# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
115# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
116# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
117
118# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
119
120# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
121
122# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
123
124# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
125
126# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
127
128# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
129
130# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
131
132# 145 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
133! New line at end of file is required for FYPP
134# 2 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp" 2
135
136# 4 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
137# 5 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
138# 6 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
139# 7 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
140# 8 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
141
142# 20 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
143
144# 43 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
145
146# 48 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
147
148# 53 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
149
150# 58 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
151
152# 63 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
153
154# 68 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
155
156# 76 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
157
158# 81 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
159
160# 86 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
161
162# 91 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
163
164# 96 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
165
166# 101 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
167
168# 106 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
169
170# 111 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
171
172# 116 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
173
174# 121 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
175
176# 151 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
177
178# 192 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
179
180# 206 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
181
182# 231 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
183
184# 242 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
185
186# 244 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
187# 255 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
188
189# 284 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
190
191# 294 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
192
193# 304 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
194
195# 313 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
196
197# 330 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
198
199# 340 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
200
201# 347 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
202
203# 353 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
204
205# 359 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
206
207# 365 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
208
209# 371 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
210
211# 377 "/home/runner/work/MFC/MFC/src/common/include/omp_macros.fpp"
212! New line at end of file is required for FYPP
213# 3 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
214# 1 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 1
215# 1 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp" 1
216# 2 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
217# 3 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
218# 4 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
219# 5 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
220# 6 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
221
222# 8 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
223# 9 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
224# 10 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
225
226# 17 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
227
228# 46 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
229
230# 58 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
231
232# 68 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
233
234# 98 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
235
236# 110 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
237
238# 120 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
239
240# 145 "/home/runner/work/MFC/MFC/src/common/include/shared_parallel_macros.fpp"
241! New line at end of file is required for FYPP
242# 2 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp" 2
243
244# 7 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
245
246# 17 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
247
248# 22 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
249
250# 27 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
251
252# 32 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
253
254# 37 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
255
256# 42 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
257
258# 47 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
259
260# 52 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
261
262# 57 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
263
264# 62 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
265
266# 73 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
267
268# 78 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
269
270# 83 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
271
272# 88 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
273
274# 103 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
275
276# 131 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
277
278# 160 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
279
280# 175 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
281
282# 193 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
283
284# 215 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
285
286# 244 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
287
288# 259 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
289
290# 269 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
291
292# 278 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
293
294# 294 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
295
296# 304 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
297
298# 311 "/home/runner/work/MFC/MFC/src/common/include/acc_macros.fpp"
299! New line at end of file is required for FYPP
300# 4 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp" 2
301
302! GPU parallel region (scalar reductions, maxval/minval)
303# 23 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
304
305! GPU parallel loop over threads (most common GPU macro)
306# 43 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
307
308! Required closing for GPU_PARALLEL_LOOP
309# 55 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
310
311! Mark routine for device compilation
312# 112 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
313
314! Declare device-resident data
315# 130 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
316
317! Inner loop within a GPU parallel region
318# 145 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
319
320! Scoped GPU data region
321# 164 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
322
323! Host code with device pointers (for MPI with GPU buffers)
324# 193 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
325
326! Allocate device memory (unscoped)
327# 207 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
328
329! Free device memory
330# 219 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
331
332! Atomic operation on device
333# 231 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
334
335! End atomic capture block
336# 242 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
337
338! Copy data between host and device
339# 254 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
340
341! Synchronization barrier
342# 266 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
343
344! Import GPU library module (openacc or omp_lib)
345# 275 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
346
347! Emit code only for AMD compiler
348# 282 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
349
350! Emit code for non-Cray compilers
351# 289 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
352
353! Emit code only for Cray compiler
354# 296 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
355
356! Emit code for non-NVIDIA compilers
357# 303 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
358
359# 305 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
360# 306 "/home/runner/work/MFC/MFC/src/common/include/parallel_macros.fpp"
361! New line at end of file is required for FYPP
362# 2 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp" 2
363
364# 14 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
365
366! Caution: This macro requires the use of a binding script to set CUDA_VISIBLE_DEVICES, such that we have one GPU device per MPI
367! rank. That's because for both cudaMemAdvise (preferred location) and cudaMemPrefetchAsync we use location = device_id = 0. For an
368! example see misc/nvidia_uvm/bind.sh.
369# 57 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
370
371! Allocate and create GPU device memory
372# 77 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
373
374! Free GPU device memory and deallocate
375# 85 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
376
377! Cray-specific GPU pointer setup for vector fields
378# 109 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
379
380! Cray-specific GPU pointer setup for scalar fields
381# 125 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
382
383! Cray-specific GPU pointer setup for acoustic source spatials
384# 150 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
385
386# 156 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
387
388# 163 "/home/runner/work/MFC/MFC/src/common/include/macros.fpp"
389! New line at end of file is required for FYPP
390# 11 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp" 2
391
392!> @brief Constructs initial condition patch geometries (lines, circles, rectangles, spheres, etc.) on the grid
394
396 use m_model ! Subroutine(s) related to STL files
397 use m_derived_types ! Definitions of the derived types
401 use m_helper
402 use m_mpi_common
404 use m_mpi_common
406
407 implicit none
408
409 private; public :: s_apply_icpp_patches
410
414 real(wp) :: smooth_coeff !< Smoothing coefficient (mirrors ic_patch_parameters%smooth_coeff)
415 real(wp) :: eta !< Pseudo volume fraction for patch boundary smoothing
416 real(wp) :: cart_y, cart_z
417 type(bounds_info) :: x_boundary, y_boundary, z_boundary !< Patch boundary locations in x, y, z
418 character(len=5) :: istr !< string to store int to string result for error checking
419
420contains
421
422 !> Dispatch each initial condition patch to its geometry-specific initialization routine.
423 impure subroutine s_apply_icpp_patches(patch_id_fp, q_prim_vf)
424
425 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
426
427#ifdef MFC_MIXED_PRECISION
428 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
429#else
430 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
431#endif
432 integer :: i
433 ! Load STL/OBJ models once into the shared flat arrays if any patch is an STL/OBJ model (geometry 21)
434
435 do i = 1, num_patches
436 if (patch_icpp(i)%geometry == 21) then
438 exit
439 end if
440 end do
441 ! 3D Patch Geometries
442
443 if (p > 0) then
444 do i = 1, num_patches
445 if (proc_rank == 0) then
446 print *, 'Processing patch', i
447 end if
448
449 !> ICPP Patches
450 !> @{
451 ! Spherical patch
452 if (patch_icpp(i)%geometry == 8) then
453 call s_icpp_sphere(i, patch_id_fp, q_prim_vf)
454 ! Cuboidal patch
455 else if (patch_icpp(i)%geometry == 9) then
456 call s_icpp_cuboid(i, patch_id_fp, q_prim_vf)
457 ! Cylindrical patch
458 else if (patch_icpp(i)%geometry == 10) then
459 call s_icpp_cylinder(i, patch_id_fp, q_prim_vf)
460 ! Swept plane patch
461 else if (patch_icpp(i)%geometry == 11) then
462 call s_icpp_sweep_plane(i, patch_id_fp, q_prim_vf)
463 ! Ellipsoidal patch
464 else if (patch_icpp(i)%geometry == 12) then
465 call s_icpp_ellipsoid(i, patch_id_fp, q_prim_vf)
466 ! 3D spherical harmonic patch
467 else if (patch_icpp(i)%geometry == 14) then
468 call s_icpp_3d_spherical_harmonic(i, patch_id_fp, q_prim_vf)
469 ! 3D Modified circular patch
470 else if (patch_icpp(i)%geometry == 19) then
471 call s_icpp_3dvarcircle(i, patch_id_fp, q_prim_vf)
472 ! 3D STL patch
473 else if (patch_icpp(i)%geometry == 21) then
474 call s_icpp_model(i, patch_id_fp, q_prim_vf)
475 end if
476 end do
477 !> @}
478
479 ! 2D Patch Geometries
480 else if (n > 0) then
481 do i = 1, num_patches
482 if (proc_rank == 0) then
483 print *, 'Processing patch', i
484 end if
485
486 !> ICPP Patches
487 !> @{
488 ! Circular patch
489 if (patch_icpp(i)%geometry == 2) then
490 call s_icpp_circle(i, patch_id_fp, q_prim_vf)
491 ! Rectangular patch
492 else if (patch_icpp(i)%geometry == 3) then
493 call s_icpp_rectangle(i, patch_id_fp, q_prim_vf)
494 ! Swept line patch
495 else if (patch_icpp(i)%geometry == 4) then
496 call s_icpp_sweep_line(i, patch_id_fp, q_prim_vf)
497 ! Elliptical patch
498 else if (patch_icpp(i)%geometry == 5) then
499 call s_icpp_ellipse(i, patch_id_fp, q_prim_vf)
500 ! Unimplemented patch (formerly isentropic vortex)
501 else if (patch_icpp(i)%geometry == 6) then
502 call s_mpi_abort('This used to be the isentropic vortex patch, ' &
503 & // 'which no longer exists. See Examples. Exiting.')
504 ! 2D modal (Fourier) patch
505 else if (patch_icpp(i)%geometry == 13) then
506 call s_icpp_2d_modal(i, patch_id_fp, q_prim_vf)
507 ! Spiral patch
508 else if (patch_icpp(i)%geometry == 17) then
509 call s_icpp_spiral(i, patch_id_fp, q_prim_vf)
510 ! Modified circular patch
511 else if (patch_icpp(i)%geometry == 18) then
512 call s_icpp_varcircle(i, patch_id_fp, q_prim_vf)
513 ! TaylorGreen vortex patch
514 else if (patch_icpp(i)%geometry == 20) then
515 call s_icpp_2d_taylorgreen_vortex(i, patch_id_fp, q_prim_vf)
516 ! STL patch
517 else if (patch_icpp(i)%geometry == 21) then
518 call s_icpp_model(i, patch_id_fp, q_prim_vf)
519 end if
520 !> @}
521 end do
522
523 ! 1D Patch Geometries
524 else
525 do i = 1, num_patches
526 if (proc_rank == 0) then
527 print *, 'Processing patch', i
528 end if
529
530 ! Line segment patch
531 if (patch_icpp(i)%geometry == 1) then
532 call s_icpp_line_segment(i, patch_id_fp, q_prim_vf)
533 ! 1d analytical
534 else if (patch_icpp(i)%geometry == 16) then
535 call s_icpp_1d_bubble_pulse(i, patch_id_fp, q_prim_vf)
536 end if
537 end do
538 end if
539
540 end subroutine s_apply_icpp_patches
541
542 !> The line segment patch is a 1D geometry that may be used, for example, in creating a Riemann problem. The geometry of the
543 !! patch is well-defined when its centroid and length in the x-coordinate direction are provided. Note that the line segment
544 !! patch DOES NOT allow for the smearing of its boundaries.
545 subroutine s_icpp_line_segment(patch_id, patch_id_fp, q_prim_vf)
546
547 integer, intent(in) :: patch_id
548
549#ifdef MFC_MIXED_PRECISION
550 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
551#else
552 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
553#endif
554 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
555
556 ! Generic loop iterators
557 integer :: i, j, k
558
559 ! Placeholders for the cell boundary values
560 real(wp) :: pi_inf, gamma, lit_gamma
561
562 integer :: xRows, yRows, nRows, iix, iiy, max_files
563# 182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
564 integer :: f, iter, unit, unit2, idx, idy, index_x, index_y, jump, line_count
565# 182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
566 real(wp) :: x_step, y_step
567# 182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
568 real(wp) :: dummy_x, dummy_y, dummy_z, x0, y0
569# 182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
570 integer :: global_offset_x, global_offset_y !< MPI subdomain offset
571# 182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
572 real(wp) :: delta_x, delta_y
573# 182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
574 character(len=300), dimension(sys_size) :: fileNames !< Arrays to store all data from files
575# 182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
576 real(wp), allocatable :: stored_values(:,:,:)
577# 182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
578 real(wp), allocatable :: x_coords(:), y_coords(:)
579# 182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
580 logical :: files_loaded = .false.
581# 182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
582 real(wp) :: domain_xstart
583# 182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
584 character(len=20) :: file_num_str !< For storing the file number as a string
585# 182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
586 integer :: ios
587# 182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
588 integer :: ios2
589# 182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
590
591# 182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
592 ! hcid=274 (2dHardcodedIC.fpp): full 2D field from external data, no extrusion.
593# 182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
594 ! Declared here (not in Hardcoded2DVariables()) so it's visible wherever
595# 182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
596 ! HardcodedDeallocation() is called, matching the pattern of stored_values/x_coords/
597# 182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
598 ! y_coords/files_loaded above.
599# 182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
600 real(wp), allocatable, dimension(:,:,:) :: stored_values274
601# 182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
602 logical :: files_loaded274 = .false.
603# 182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
604 integer :: f274, ix274, iy274, unit274, ios274
605# 182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
606 integer :: local_ix_beg274, local_iy_beg274
607# 182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
608 character(len=300) :: fname274
609# 182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
610 character(len=20) :: file_num_str274
611# 182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
612 real(wp) :: dummy_x274, dummy_y274, dummy_val274, x0_274, y0_274, x_step274, y_step274
613# 182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
614 real(wp) :: file_dx274, file_dy274, r_align274
615 ! Place any declaration of intermediate variables here
616# 183 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
617 real(wp) :: x_mid_diffu, width_sq, profile_shape, temp, molar_mass_inv, y1, y2, y3, y4
618
619 pi_inf = pi_infs(1)
620 gamma = gammas(1)
621 lit_gamma = gs_min(1)
622 j = 0
623 k = 0
624
625 ! Transferring the line segment's centroid and length information
626 x_centroid = patch_icpp(patch_id)%x_centroid
627 length_x = patch_icpp(patch_id)%length_x
628
629 ! Computing the beginning and end x-coordinates of the line segment based on its centroid and length
630 x_boundary%beg = x_centroid - 0.5_wp*length_x
631 x_boundary%end = x_centroid + 0.5_wp*length_x
632
633 ! Set eta=1 (no smoothing for this patch type)
634 eta = 1._wp
635
636 ! Assign patch vars if cell is covered and patch has write permission
637 do i = 0, m
638 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, &
639 & 0, 0))) then
640 call s_assign_patch_primitive_variables(patch_id, i, 0, 0, eta, q_prim_vf, patch_id_fp)
641
642
643
644 ! check if this should load a hardcoded patch
645 if (patch_icpp(patch_id)%hcid /= dflt_int) then
646 select case (patch_icpp(patch_id)%hcid)
647# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
648 case (150) ! 1D Smooth Alfven Case for MHD
649# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
650 ! velocity
651# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
652 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, 0, 0) = 0.1_wp*sin(2._wp*pi*x_cc(i))
653# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
654 q_prim_vf(eqn_idx%mom%beg + 2)%sf(i, 0, 0) = 0.1_wp*cos(2._wp*pi*x_cc(i))
655# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
656
657# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
658 ! magnetic field
659# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
660 q_prim_vf(eqn_idx%B%end - 1)%sf(i, 0, 0) = 0.1_wp*sin(2._wp*pi*x_cc(i))
661# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
662 q_prim_vf(eqn_idx%B%end)%sf(i, 0, 0) = 0.1_wp*cos(2._wp*pi*x_cc(i))
663# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
664 case (170) ! 1D profile from external data (e.g. Cantera, SDtoolbox)
665# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
666 ! This hardcoded case can be used to start a simulation with initial conditions given from a known 1D profile (e.g. Cantera,
667# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
668 ! SDtoolbox)
669# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
670 if (.not. files_loaded) then
671# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
672 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
673# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
674 do f = 1, max_files
675# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
676 write (file_num_str, '(I0)') f
677# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
678 filenames(f) = trim(files_dir) // "/" // "prim." // trim(file_num_str) // ".00." // trim(file_extension) // ".dat"
679# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
680 end do
681# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
682
683# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
684 ! Common file reading setup
685# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
686 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
687# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
688 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
689# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
690
691# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
692 select case (num_dims)
693# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
694 case (1, 2) ! 1D and 2D cases are similar
695# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
696 ! Count lines
697# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
698 line_count = 0
699# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
700 do
701# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
702 read (unit2, *, iostat=ios2) dummy_x, dummy_y
703# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
704 if (ios2 /= 0) exit
705# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
706 line_count = line_count + 1
707# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
708 end do
709# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
710 close (unit2)
711# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
712
713# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
714 xrows = line_count
715# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
716 yrows = 1
717# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
718 index_x = 0
719# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
720 if (num_dims == 2) index_x = i
721# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
722#ifdef MFC_DEBUG
723# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
724 block
725# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
726 use iso_fortran_env, only: output_unit
727# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
728
729# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
730 print *, 'm_icpp_patches.fpp:212: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
731# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
732
733# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
734 call flush (output_unit)
735# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
736 end block
737# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
738#endif
739# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
740 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
741# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
742
743# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
744
745# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
746
747# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
748#if defined(MFC_OpenACC)
749# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
750!$acc enter data create(x_coords, stored_values)
751# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
752#elif defined(MFC_OpenMP)
753# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
754!$omp target enter data map(always,alloc:x_coords, stored_values)
755# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
756#endif
757# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
758
759# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
760 ! Read data from all files
761# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
762 do f = 1, max_files
763# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
764 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
765# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
766 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
767# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
768
769# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
770 do iter = 1, xrows
771# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
772 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
773# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
774 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
775# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
776 end do
777# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
778 close (unit)
779# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
780 end do
781# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
782
783# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
784 ! Calculate offsets
785# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
786 domain_xstart = x_coords(1)
787# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
788 x_step = x_cc(1) - x_cc(0)
789# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
790 delta_x = merge(x_cc(0) - domain_xstart, x_cc(index_x) - domain_xstart, num_dims == 1)
791# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
792 global_offset_x = nint(abs(delta_x)/x_step)
793# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
794 case (3) ! 3D case - determine grid structure
795# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
796 ! Find yRows by counting rows with same x
797# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
798 read (unit2, *, iostat=ios2) x0, y0, dummy_z
799# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
800 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
801# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
802
803# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
804 yrows = 1
805# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
806 do
807# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
808 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
809# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
810 if (ios2 /= 0) exit
811# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
812 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
813# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
814 yrows = yrows + 1
815# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
816 else
817# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
818 exit
819# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
820 end if
821# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
822 end do
823# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
824 close (unit2)
825# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
826
827# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
828 ! Count total rows
829# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
830 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
831# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
832 nrows = 0
833# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
834 do
835# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
836 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
837# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
838 if (ios2 /= 0) exit
839# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
840 nrows = nrows + 1
841# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
842 end do
843# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
844 close (unit2)
845# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
846
847# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
848 xrows = nrows/yrows
849# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
850#ifdef MFC_DEBUG
851# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
852 block
853# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
854 use iso_fortran_env, only: output_unit
855# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
856
857# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
858 print *, 'm_icpp_patches.fpp:212: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
859# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
860
861# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
862 call flush (output_unit)
863# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
864 end block
865# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
866#endif
867# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
868 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
869# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
870
871# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
872
873# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
874
875# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
876
877# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
878#if defined(MFC_OpenACC)
879# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
880!$acc enter data create(x_coords, y_coords, stored_values)
881# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
882#elif defined(MFC_OpenMP)
883# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
884!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
885# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
886#endif
887# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
888 index_x = i
889# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
890 index_y = j
891# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
892
893# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
894 ! Read all files
895# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
896 do f = 1, max_files
897# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
898 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
899# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
900 if (ios /= 0) then
901# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
902 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
903# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
904 cycle
905# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
906 end if
907# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
908
909# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
910 iter = 0
911# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
912 do iix = 1, xrows
913# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
914 do iiy = 1, yrows
915# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
916 iter = iter + 1
917# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
918 if (f == 1) then
919# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
920 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
921# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
922 else
923# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
924 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
925# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
926 end if
927# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
928 if (ios /= 0) call s_mpi_abort("Error reading data")
929# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
930 end do
931# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
932 end do
933# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
934 close (unit)
935# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
936 end do
937# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
938
939# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
940 ! Calculate offsets
941# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
942 x_step = x_cc(1) - x_cc(0)
943# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
944 y_step = y_cc(1) - y_cc(0)
945# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
946 delta_x = x_cc(index_x) - x_coords(1)
947# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
948 delta_y = y_cc(index_y) - y_coords(1)
949# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
950 global_offset_x = nint(abs(delta_x)/x_step)
951# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
952 global_offset_y = nint(abs(delta_y)/y_step)
953# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
954 end select
955# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
956
957# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
958 files_loaded = .true.
959# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
960 end if
961# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
962
963# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
964 ! Data assignment
965# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
966 select case (num_dims)
967# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
968 case (1)
969# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
970 idx = i + 1 + global_offset_x
971# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
972 ! idx must land inside the file's row range: this rank's subdomain offset
973# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
974 ! (global_offset_x) was derived from this rank's own grid, so a miss means the
975# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
976 ! IC file is misaligned/mis-sized for the run grid, not a normal boundary case.
977# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
978 if (idx < 1 .or. idx > xrows) &
979# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
980 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
981# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
982 do f = 1, sys_size
983# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
984 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
985# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
986 end do
987# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
988 case (2)
989# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
990 idx = i + 1 + global_offset_x - index_x
991# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
992 if (idx < 1 .or. idx > xrows) &
993# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
994 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
995# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
996 do f = 1, sys_size - 1
997# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
998 jump = merge(1, 0, f >= eqn_idx%mom%end)
999# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1000 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
1001# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1002 end do
1003# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1004 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
1005# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1006 case (3)
1007# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1008 idx = i + 1 + global_offset_x - index_x
1009# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1010 idy = j + 1 + global_offset_y - index_y
1011# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1012 if (idx < 1 .or. idx > xrows .or. idy < 1 .or. idy > yrows) &
1013# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1014 & call s_mpi_abort("Hardcoded IC extrusion: row/column index out of range (IC file misaligned with the run grid)")
1015# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1016 do f = 1, sys_size - 1
1017# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1018 jump = merge(1, 0, f >= eqn_idx%mom%end)
1019# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1020 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
1021# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1022 end do
1023# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1024 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
1025# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1026 end select
1027# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1028 case (180) ! Shu-Osher problem
1029# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1030 ! This is patch is hard-coded for test suite optimization used in the 1D_shuoser cases: "patch_icpp(2)%alpha_rho(1)": "1 +
1031# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1032 ! 0.2*sin(5*x)"
1033# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1034 if (patch_id == 2) then
1035# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1036 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, 0, 0) = 1 + 0.2*sin(5*x_cc(i))
1037# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1038 end if
1039# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1040 case (181) ! Titarev-Torro problem
1041# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1042 ! This is patch is hard-coded for test suite optimization used in the 1D_titarevtorro cases: "patch_icpp(2)%alpha_rho(1)":
1043# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1044 ! "1 + 0.1*sin(20*x*pi)"
1045# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1046 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, 0, 0) = 1 + 0.1*sin(20*x_cc(i)*pi)
1047# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1048 case (182) ! Multi-component diffusion
1049# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1050 ! This patch is a hard-coded for test suite optimization (multiple component diffusion)
1051# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1052 x_mid_diffu = 0.05_wp/2.0_wp
1053# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1054 width_sq = (2.5_wp*10.0_wp**(-3.0_wp))**2
1055# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1056 profile_shape = 1.0_wp - 0.5_wp*exp(-(x_cc(i) - x_mid_diffu)**2/width_sq)
1057# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1058 q_prim_vf(eqn_idx%mom%beg)%sf(i, 0, 0) = 0.0_wp
1059# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1060 q_prim_vf(eqn_idx%E)%sf(i, 0, 0) = 1.01325_wp*(10.0_wp)**5
1061# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1062 q_prim_vf(eqn_idx%adv%beg)%sf(i, 0, 0) = 1.0_wp
1063# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1064
1065# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1066 y1 = (0.195_wp - 0.142_wp)*profile_shape + 0.142_wp
1067# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1068 y2 = (0.0_wp - 0.1_wp)*profile_shape + 0.1_wp
1069# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1070 y3 = (0.214_wp - 0.0_wp)*profile_shape + 0.0_wp
1071# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1072 y4 = (0.591_wp - 0.758_wp)*profile_shape + 0.758_wp
1073# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1074
1075# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1076 q_prim_vf(eqn_idx%species%beg)%sf(i, 0, 0) = y1
1077# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1078 q_prim_vf(eqn_idx%species%beg + 1)%sf(i, 0, 0) = y2
1079# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1080 q_prim_vf(eqn_idx%species%beg + 2)%sf(i, 0, 0) = y3
1081# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1082 q_prim_vf(eqn_idx%species%beg + 3)%sf(i, 0, 0) = y4
1083# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1084
1085# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1086 temp = (320.0_wp - 1350.0_wp)*profile_shape + 1350.0_wp
1087# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1088
1089# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1090 molar_mass_inv = y1/31.998_wp + y2/18.01508_wp + y3/16.04256_wp + y4/28.0134_wp
1091# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1092
1093# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1094 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)
1095# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1096 case(191) ! 1D Dual Isothermal case
1097# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1098 q_prim_vf(eqn_idx%E)%sf(i, 0, 0) = 101325.0_wp
1099# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1100 q_prim_vf(eqn_idx%mom%beg)%sf(i, 0, 0) = 0.0_wp
1101# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1102 q_prim_vf(eqn_idx%species%beg)%sf(i, 0, 0) = 1.0_wp
1103# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1104
1105# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1106 if (x_cc(i) <= 0.025_wp) then
1107# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1108 temp = 700.0_wp + ((1000.0_wp - 700.0_wp)/0.025_wp)*x_cc(i)
1109# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1110 else
1111# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1112 temp = 1200.0_wp + ((900.0_wp - 1000.0_wp)/0.025_wp)*(x_cc(i) - 0.025_wp)
1113# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1114 end if
1115# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1116
1117# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1118 molar_mass_inv = 1.0_wp/2.01588_wp
1119# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1120 q_prim_vf(eqn_idx%cont%beg)%sf(i, 0, 0) = 101325.0_wp/(temp*8.3144626_wp*1000.0_wp*molar_mass_inv)
1121# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1122 case default
1123# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1124 call s_int_to_str(patch_id, istr)
1125# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1126 call s_mpi_abort("Invalid hcid specified for patch " // trim(istr))
1127# 212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1128 end select
1129 end if
1130
1131 ! Updating the patch identities bookkeeping variable
1132 if (1._wp - eta < sgm_eps) patch_id_fp(i, 0, 0) = patch_id
1133 end if
1134 end do
1135 if (allocated(stored_values)) then
1136# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1137#ifdef MFC_DEBUG
1138# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1139 block
1140# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1141 use iso_fortran_env, only: output_unit
1142# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1143
1144# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1145 print *, 'm_icpp_patches.fpp:219: ', '@:DEALLOCATE(stored_values)'
1146# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1147
1148# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1149 call flush (output_unit)
1150# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1151 end block
1152# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1153#endif
1154# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1155
1156# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1157#if defined(MFC_OpenACC)
1158# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1159!$acc exit data delete(stored_values)
1160# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1161#elif defined(MFC_OpenMP)
1162# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1163!$omp target exit data map(release:stored_values)
1164# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1165#endif
1166# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1167 deallocate (stored_values)
1168# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1169#ifdef MFC_DEBUG
1170# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1171 block
1172# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1173 use iso_fortran_env, only: output_unit
1174# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1175
1176# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1177 print *, 'm_icpp_patches.fpp:219: ', '@:DEALLOCATE(x_coords)'
1178# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1179
1180# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1181 call flush (output_unit)
1182# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1183 end block
1184# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1185#endif
1186# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1187
1188# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1189#if defined(MFC_OpenACC)
1190# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1191!$acc exit data delete(x_coords)
1192# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1193#elif defined(MFC_OpenMP)
1194# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1195!$omp target exit data map(release:x_coords)
1196# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1197#endif
1198# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1199 deallocate (x_coords)
1200# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1201 end if
1202# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1203
1204# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1205 if (allocated(y_coords)) then
1206# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1207#ifdef MFC_DEBUG
1208# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1209 block
1210# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1211 use iso_fortran_env, only: output_unit
1212# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1213
1214# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1215 print *, 'm_icpp_patches.fpp:219: ', '@:DEALLOCATE(y_coords)'
1216# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1217
1218# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1219 call flush (output_unit)
1220# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1221 end block
1222# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1223#endif
1224# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1225
1226# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1227#if defined(MFC_OpenACC)
1228# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1229!$acc exit data delete(y_coords)
1230# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1231#elif defined(MFC_OpenMP)
1232# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1233!$omp target exit data map(release:y_coords)
1234# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1235#endif
1236# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1237 deallocate (y_coords)
1238# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1239 end if
1240# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1241
1242# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1243 files_loaded = .false.
1244# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1245
1246# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1247 if (allocated(stored_values274)) then
1248# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1249#ifdef MFC_DEBUG
1250# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1251 block
1252# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1253 use iso_fortran_env, only: output_unit
1254# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1255
1256# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1257 print *, 'm_icpp_patches.fpp:219: ', '@:DEALLOCATE(stored_values274)'
1258# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1259
1260# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1261 call flush (output_unit)
1262# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1263 end block
1264# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1265#endif
1266# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1267
1268# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1269#if defined(MFC_OpenACC)
1270# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1271!$acc exit data delete(stored_values274)
1272# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1273#elif defined(MFC_OpenMP)
1274# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1275!$omp target exit data map(release:stored_values274)
1276# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1277#endif
1278# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1279 deallocate (stored_values274)
1280# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1281 end if
1282# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1283
1284# 219 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1285 files_loaded274 = .false.
1286
1287 end subroutine s_icpp_line_segment
1288
1289 !> The spiral patch is a 2D geometry that may be used, The geometry of the patch is well-defined when its centroid and radius
1290 !! are provided. Note that the circular patch DOES allow for the smoothing of its boundary.
1291 impure subroutine s_icpp_spiral(patch_id, patch_id_fp, q_prim_vf)
1292
1293 integer, intent(in) :: patch_id
1294
1295#ifdef MFC_MIXED_PRECISION
1296 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
1297#else
1298 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
1299#endif
1300 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
1301 integer :: i, j, k !< Generic loop iterators
1302 real(wp) :: th, thickness, nturns, mya
1303 real(wp) :: spiral_x_min, spiral_x_max, spiral_y_min, spiral_y_max
1304
1305 integer :: xrows, yrows, nrows, iix, iiy, max_files
1306# 239 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1307 integer :: f, iter, unit, unit2, idx, idy, index_x, index_y, jump, line_count
1308# 239 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1309 real(wp) :: x_step, y_step
1310# 239 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1311 real(wp) :: dummy_x, dummy_y, dummy_z, x0, y0
1312# 239 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1313 integer :: global_offset_x, global_offset_y !< MPI subdomain offset
1314# 239 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1315 real(wp) :: delta_x, delta_y
1316# 239 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1317 character(len=300), dimension(sys_size) :: filenames !< Arrays to store all data from files
1318# 239 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1319 real(wp), allocatable :: stored_values(:,:,:)
1320# 239 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1321 real(wp), allocatable :: x_coords(:), y_coords(:)
1322# 239 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1323 logical :: files_loaded = .false.
1324# 239 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1325 real(wp) :: domain_xstart
1326# 239 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1327 character(len=20) :: file_num_str !< For storing the file number as a string
1328# 239 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1329 integer :: ios
1330# 239 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1331 integer :: ios2
1332# 239 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1333
1334# 239 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1335 ! hcid=274 (2dHardcodedIC.fpp): full 2D field from external data, no extrusion.
1336# 239 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1337 ! Declared here (not in Hardcoded2DVariables()) so it's visible wherever
1338# 239 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1339 ! HardcodedDeallocation() is called, matching the pattern of stored_values/x_coords/
1340# 239 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1341 ! y_coords/files_loaded above.
1342# 239 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1343 real(wp), allocatable, dimension(:,:,:) :: stored_values274
1344# 239 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1345 logical :: files_loaded274 = .false.
1346# 239 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1347 integer :: f274, ix274, iy274, unit274, ios274
1348# 239 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1349 integer :: local_ix_beg274, local_iy_beg274
1350# 239 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1351 character(len=300) :: fname274
1352# 239 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1353 character(len=20) :: file_num_str274
1354# 239 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1355 real(wp) :: dummy_x274, dummy_y274, dummy_val274, x0_274, y0_274, x_step274, y_step274
1356# 239 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1357 real(wp) :: file_dx274, file_dy274, r_align274
1358 ! Place any declaration of intermediate variables here
1359# 240 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1360 real(wp) :: eps, eps_mhd, c_mhd
1361# 240 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1362 real(wp) :: r, rmax, gam, umax, p0
1363# 240 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1364 real(wp) :: rhoh, rhol, pref, pint, h, lam, wl, amp, inth, intl, alph
1365# 240 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1366 real(wp) :: factor, x1c, y1c, x2c, y2c, r1c, r2c, cvortex, u1c, u2c, v1c, v2c, rvortex
1367# 240 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1368 real(wp) :: r0, alpha, r2
1369# 240 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1370 real(wp) :: sina, cosa
1371# 240 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1372 real(wp) :: r_sq
1373# 240 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1374
1375# 240 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1376 ! # 283 - Gauss-averaged isentropic vortex (conserved-variable cell averages)
1377# 240 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1378 real(wp) :: gauss_xi(3), gauss_w(3), xq, yq, r2q, t_facq, wq
1379# 240 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1380 real(wp) :: rho_avg, rhou_avg, rhov_avg, e_avg
1381# 240 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1382 real(wp) :: rhoq, pq, uq, vq, eq, vortex_eps
1383# 240 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1384 integer :: igq, jgq
1385# 240 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1386
1387# 240 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1388 ! # 291 - Shear/Thermal Layer Case
1389# 240 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1390 real(wp) :: delta_shear, u_max, u_mean
1391# 240 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1392 real(wp) :: t_wall, t_inf, p_atm, t_loc
1393# 240 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1394 real(wp) :: delta_th, r_mix
1395# 240 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1396 real(wp) :: y_n2, y_o2, mw_n2, mw_o2
1397# 240 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1398 real(wp) :: bottom_blend_u, bottom_blend_t
1399# 240 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1400
1401# 240 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1402 ! # 207
1403# 240 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1404 real(wp) :: sigma, gauss1, gauss2
1405# 240 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1406
1407# 240 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1408 ! # 208
1409# 240 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1410 real(wp) :: ei, d, fsm, alpha_air, alpha_sf6
1411# 240 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1412 real(wp) :: y_center, y_dist, wave_phase, front_shift, x_mapped, interp_wt
1413# 240 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1414 integer :: v, idx_lo, idx_hi, idx_mid
1415# 240 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1416 real(wp), parameter :: ly_param = 0.00775735_wp
1417# 240 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1418 real(wp), parameter :: a_param = 0.1_wp*96.9880867_wp*10.0_wp**(-6.0_wp)
1419# 240 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1420 integer, parameter :: nwaves = 6
1421# 240 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1422 real(wp), parameter :: y0_ref = 0.0_wp
1423# 240 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1424
1425# 240 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1426 eps = 1.e-9_wp
1427
1428 ! Transferring the circular patch's radius, centroid, smearing patch identity and smearing coefficient information
1429 x_centroid = patch_icpp(patch_id)%x_centroid
1430 y_centroid = patch_icpp(patch_id)%y_centroid
1431 mya = patch_icpp(patch_id)%radius
1432 thickness = patch_icpp(patch_id)%length_x
1433 nturns = patch_icpp(patch_id)%length_y
1434
1435 !
1436 logic_grid = 0
1437 do k = 0, int(m*91*nturns)
1438 th = k/real(int(m*91._wp*nturns))*nturns*2._wp*pi
1439
1440 spiral_x_min = minval((/f_r(th, 0.0_wp, mya)*cos(th), f_r(th, thickness, mya)*cos(th)/))
1441 spiral_y_min = minval((/f_r(th, 0.0_wp, mya)*sin(th), f_r(th, thickness, mya)*sin(th)/))
1442
1443 spiral_x_max = maxval((/f_r(th, 0.0_wp, mya)*cos(th), f_r(th, thickness, mya)*cos(th)/))
1444 spiral_y_max = maxval((/f_r(th, 0.0_wp, mya)*sin(th), f_r(th, thickness, mya)*sin(th)/))
1445
1446 do j = 0, n; do i = 0, m
1447 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) &
1448 & < spiral_y_max)) then
1449 logic_grid(i, j, 0) = 1
1450 end if
1451 end do; end do
1452 end do
1453
1454 do j = 0, n
1455 do i = 0, m
1456 if ((logic_grid(i, j, 0) == 1)) then
1457 call s_assign_patch_primitive_variables(patch_id, i, j, 0, eta, q_prim_vf, patch_id_fp)
1458
1459
1460 if (patch_icpp(patch_id)%hcid /= dflt_int) then
1461 select case (patch_icpp(patch_id)%hcid) ! 2D_hardcoded_ic example case
1462# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1463 case (200) ! Two-fluid cubic interface
1464# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1465 if (y_cc(j) <= (-x_cc(i)**3 + 1)**(1._wp/3._wp)) then
1466# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1467 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = eps
1468# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1469 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = 1._wp - eps
1470# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1471 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = eps*1000._wp
1472# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1473 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = (1._wp - eps)*1._wp
1474# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1475 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1000._wp
1476# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1477 end if
1478# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1479 case (202) ! Gresho vortex (Gouasmi et al 2022 JCP)
1480# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1481 r = ((x_cc(i) - 0.5_wp)**2 + (y_cc(j) - 0.5_wp)**2)**0.5_wp
1482# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1483 rmax = 0.2_wp
1484# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1485
1486# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1487 gam = 1._wp + 1._wp/fluid_pp(1)%gamma
1488# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1489 umax = 2*pi*rmax*patch_icpp(patch_id)%vel(2)
1490# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1491 p0 = umax**2*(1._wp/(gam*patch_icpp(patch_id)%vel(2)**2) - 0.5_wp)
1492# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1493
1494# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1495 if (r < rmax) then
1496# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1497 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -(y_cc(j) - 0.5_wp)*umax/rmax
1498# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1499 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = (x_cc(i) - 0.5_wp)*umax/rmax
1500# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1501 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*((r/rmax)**2._wp/2._wp)
1502# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1503 else if (r < 2*rmax) then
1504# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1505 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -((y_cc(j) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
1506# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1507 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = ((x_cc(i) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
1508# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1509 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)))
1510# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1511 else
1512# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1513 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 0._wp
1514# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1515 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0._wp
1516# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1517 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*(-2 + 4*log(2._wp))
1518# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1519 end if
1520# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1521 case (203) ! Gresho vortex (Gouasmi et al 2022 JCP) with density correction
1522# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1523 r = ((x_cc(i) - 0.5_wp)**2._wp + (y_cc(j) - 0.5_wp)**2)**0.5_wp
1524# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1525 rmax = 0.2_wp
1526# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1527
1528# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1529 gam = 1._wp + 1._wp/fluid_pp(1)%gamma
1530# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1531 umax = 2*pi*rmax*patch_icpp(patch_id)%vel(2)
1532# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1533 p0 = umax**2*(1._wp/(gam*patch_icpp(patch_id)%vel(2)**2) - 0.5_wp)
1534# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1535
1536# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1537 if (r < rmax) then
1538# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1539 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -(y_cc(j) - 0.5_wp)*umax/rmax
1540# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1541 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = (x_cc(i) - 0.5_wp)*umax/rmax
1542# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1543 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*((r/rmax)**2._wp/2._wp)
1544# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1545 else if (r < 2*rmax) then
1546# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1547 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -((y_cc(j) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
1548# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1549 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = ((x_cc(i) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
1550# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1551 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)))
1552# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1553 else
1554# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1555 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 0._wp
1556# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1557 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0._wp
1558# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1559 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2._wp*(-2._wp + 4*log(2._wp))
1560# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1561 end if
1562# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1563
1564# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1565 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = q_prim_vf(eqn_idx%E)%sf(i, j, 0)**(1._wp/gam)
1566# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1567 case (204) ! Rayleigh-Taylor instability
1568# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1569 rhoh = 3._wp
1570# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1571 rhol = 1._wp
1572# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1573 pref = 1.e5_wp
1574# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1575 pint = pref
1576# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1577 h = 0.7_wp
1578# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1579 lam = 0.2_wp
1580# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1581 wl = 2._wp*pi/lam
1582# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1583 amp = 0.05_wp/wl
1584# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1585
1586# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1587 inth = amp*sin(2._wp*pi*x_cc(i)/lam - pi/2._wp) + h
1588# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1589
1590# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1591 alph = 0.5_wp*(1._wp + tanh((y_cc(j) - inth)/2.5e-3_wp))
1592# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1593
1594# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1595 if (alph < eps) alph = eps
1596# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1597 if (alph > 1._wp - eps) alph = 1._wp - eps
1598# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1599
1600# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1601 if (y_cc(j) > inth) then
1602# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1603 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = alph
1604# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1605 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = 1._wp - alph
1606# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1607 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = alph*rhoh
1608# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1609 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = (1._wp - alph)*rhol
1610# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1611 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = pref + rhoh*9.81_wp*(1.2_wp - y_cc(j))
1612# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1613 else
1614# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1615 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = alph
1616# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1617 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = 1._wp - alph
1618# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1619 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = alph*rhoh
1620# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1621 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = (1._wp - alph)*rhol
1622# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1623 pint = pref + rhoh*9.81_wp*(1.2_wp - inth)
1624# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1625 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = pint + rhol*9.81_wp*(inth - y_cc(j))
1626# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1627 end if
1628# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1629 case (205) ! 2D lung wave interaction problem
1630# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1631 h = 0.0_wp ! non dim origin y
1632# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1633 lam = 1.0_wp ! non dim lambda
1634# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1635 amp = patch_icpp(patch_id)%a(2) ! to be changed later! !non dim amplitude
1636# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1637
1638# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1639 inth = amp*sin(2*pi*x_cc(i)/lam - pi/2) + h
1640# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1641
1642# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1643 if (y_cc(j) > inth) then
1644# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1645 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(1)
1646# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1647 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(2)
1648# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1649 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = patch_icpp(1)%pres
1650# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1651 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = patch_icpp(1)%alpha(1)
1652# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1653 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = patch_icpp(1)%alpha(2)
1654# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1655 end if
1656# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1657 case (206) ! 2D lung wave interaction problem - horizontal domain
1658# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1659 h = 0.0_wp ! non dim origin y
1660# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1661 lam = 1.0_wp ! non dim lambda
1662# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1663 amp = patch_icpp(patch_id)%a(2)
1664# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1665
1666# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1667 intl = amp*sin(2*pi*y_cc(j)/lam - pi/2) + h
1668# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1669
1670# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1671 if (x_cc(i) > intl) then ! this is the liquid
1672# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1673 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(1)
1674# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1675 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(2)
1676# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1677 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = patch_icpp(1)%pres
1678# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1679 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = patch_icpp(1)%alpha(1)
1680# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1681 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = patch_icpp(1)%alpha(2)
1682# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1683 end if
1684# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1685 case (207) ! Kelvin Helmholtz Instability
1686# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1687 sigma = 0.05_wp/sqrt(2.0_wp)
1688# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1689 gauss1 = exp(-(y_cc(j) - 0.75_wp)**2/(2.0_wp*sigma**2))
1690# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1691 gauss2 = exp(-(y_cc(j) - 0.25_wp)**2/(2.0_wp*sigma**2))
1692# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1693 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)
1694# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1695 case (208) ! Richtmeyer Meshkov Instability
1696# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1697 lam = 1.0_wp
1698# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1699 eps = 1.0e-6_wp
1700# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1701 ei = 5.0_wp
1702# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1703 ! Smoothening function to smooth out sharp discontinuity in the interface
1704# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1705 if (x_cc(i) <= 0.7_wp*lam) then
1706# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1707 d = x_cc(i) - lam*(0.4_wp - 0.1_wp*sin(2.0_wp*pi*(y_cc(j)/lam + 0.25_wp)))
1708# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1709 fsm = 0.5_wp*(1.0_wp + erf(d/(ei*sqrt(dx*dy))))
1710# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1711 alpha_air = eps + (1.0_wp - 2.0_wp*eps)*fsm
1712# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1713 alpha_sf6 = 1.0_wp - alpha_air
1714# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1715 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = alpha_sf6*5.04_wp
1716# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1717 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = alpha_air*1.0_wp
1718# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1719 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = alpha_sf6
1720# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1721 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = alpha_air
1722# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1723 end if
1724# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1725 case (250) ! MHD Orszag-Tang vortex
1726# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1727 ! 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),
1728# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1729 ! sin(4*pi*x)/sqrt(4*pi), 0)
1730# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1731
1732# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1733 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -sin(2._wp*pi*y_cc(j))
1734# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1735 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = sin(2._wp*pi*x_cc(i))
1736# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1737
1738# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1739 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = -sin(2._wp*pi*y_cc(j))/sqrt(4._wp*pi)
1740# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1741 q_prim_vf(eqn_idx%B%beg + 1)%sf(i, j, 0) = sin(4._wp*pi*x_cc(i))/sqrt(4._wp*pi)
1742# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1743 case (251) ! RMHD Cylindrical Blast Wave [Mignone, 2006: Section 4.3.1]
1744# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1745 if (x_cc(i)**2 + y_cc(j)**2 < 0.08_wp**2) then
1746# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1747 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 0.01
1748# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1749 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1.0
1750# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1751 else if (x_cc(i)**2 + y_cc(j)**2 <= 1._wp**2) then
1752# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1753 ! Linear interpolation between r=0.08 and r=1.0
1754# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1755 factor = (1.0_wp - sqrt(x_cc(i)**2 + y_cc(j)**2))/(1.0_wp - 0.08_wp)
1756# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1757 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 0.01_wp*factor + 1.e-4_wp*(1.0_wp - factor)
1758# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1759 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1.0_wp*factor + 3.e-5_wp*(1.0_wp - factor)
1760# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1761 else
1762# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1763 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1.e-4_wp
1764# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1765 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 3.e-5_wp
1766# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1767 end if
1768# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1769
1770# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1771 ! case 252 is for the 2D MHD Rotor problem
1772# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1773 case (252) ! 2D MHD Rotor Problem
1774# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1775 ! Ambient conditions are set in the JSON file. This case imposes the dense, rotating cylinder.
1776# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1777 !
1778# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1779 ! 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
1780# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1781 ! velocity w=20, giving v_tan=2 at r=0.1
1782# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1783
1784# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1785 ! Calculate distance squared from the center
1786# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1787 r_sq = (x_cc(i) - 0.5_wp)**2 + (y_cc(j) - 0.5_wp)**2
1788# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1789
1790# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1791 ! inner radius of 0.1
1792# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1793 if (r_sq <= 0.1**2) then
1794# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1795 ! -- Inside the rotor -- Set density uniformly to 10
1796# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1797 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 10._wp
1798# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1799
1800# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1801 ! Set vup constant rotation of rate v=2 v_x = -omega * (y - y_c) v_y = omega * (x - x_c)
1802# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1803 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -20._wp*(y_cc(j) - 0.5_wp)
1804# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1805 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = 20._wp*(x_cc(i) - 0.5_wp)
1806# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1807
1808# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1809 ! taper width of 0.015
1810# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1811 else if (r_sq <= 0.115**2) then
1812# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1813 ! linearly smooth the function between r = 0.1 and 0.115
1814# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1815 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1._wp + 9._wp*(0.115_wp - sqrt(r_sq))/(0.015_wp)
1816# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1817
1818# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1819 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)
1820# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1821 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)
1822# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1823 end if
1824# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1825 case (253) ! MHD Smooth Magnetic Vortex
1826# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1827 ! Section 5.2 of Implicit hybridized discontinuous Galerkin methods for compressible magnetohydrodynamics C. Ciuca, P.
1828# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1829 ! Fernandez, A. Christophe, N.C. Nguyen, J. Peraire
1830# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1831
1832# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1833 ! velocity
1834# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1835 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))
1836# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1837 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))
1838# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1839
1840# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1841 ! magnetic field
1842# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1843 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)
1844# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1845 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)
1846# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1847
1848# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1849 ! pressure
1850# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1851 q_prim_vf(eqn_idx%E)%sf(i, j, &
1852# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1853 & 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)
1854# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1855 case (260) ! Gaussian Divergence Pulse
1856# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1857 ! Bx(x) = 1 + C * erf((x-0.5)/\sigma) => \partialBx/\partialx = C * (2/\sqrt\pi) * exp[-((x-0.5)/\sigma)**2] * (1/\sigma)
1858# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1859 ! Choose C = \epsilon * \sigma * \sqrt\pi / 2 => \partialBx/\partialx = \epsilon * exp[-((x-0.5)/\sigma)**2] \psi is
1860# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1861 ! initialized to zero everywhere.
1862# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1863
1864# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1865 eps_mhd = patch_icpp(patch_id)%a(2)
1866# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1867 sigma = patch_icpp(patch_id)%a(3)
1868# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1869 c_mhd = eps_mhd*sigma*sqrt(pi)*0.5_wp
1870# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1871
1872# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1873 ! B-field
1874# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1875 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = 1._wp + c_mhd*erf((x_cc(i) - 0.5_wp)/sigma)
1876# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1877 case (261) ! Blob
1878# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1879 r0 = 1._wp/sqrt(8._wp)
1880# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1881 r2 = x_cc(i)**2 + y_cc(j)**2
1882# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1883 r = sqrt(r2)
1884# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1885 alpha = r/r0
1886# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1887 if (alpha < 1) then
1888# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1889 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)
1890# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1891 ! 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)
1892# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1893 ! q_prim_vf(eqn_idx%B%beg)%sf(i,j,0) = 1._wp/(4._wp*pi) * (alpha**8 - 2._wp*alpha**4 + 1._wp)
1894# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1895 ! 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
1896# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1897 end if
1898# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1899 case (262) ! Tilted 2D MHD shock-tube at \alpha = arctan2 (\approx63.4 deg)
1900# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1901 ! rotate by \alpha = atan(2)
1902# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1903 alpha = atan(2._wp)
1904# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1905 cosa = cos(alpha)
1906# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1907 sina = sin(alpha)
1908# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1909 ! projection along shock normal
1910# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1911 r = x_cc(i)*cosa + y_cc(j)*sina
1912# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1913
1914# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1915 if (r <= 0.5_wp) then
1916# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1917 ! LEFT state: \rho=1, v\parallel=+10, v\perp=0, p=20, B\parallel=B\perp=5/\sqrt(4\pi)
1918# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1919 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1._wp
1920# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1921 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 10._wp*cosa
1922# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1923 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = 10._wp*sina
1924# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1925 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 20._wp
1926# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1927 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
1928# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1929 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
1930# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1931 else
1932# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1933 ! RIGHT state: \rho=1, v\parallel=-10, v\perp=0, p=1, B\parallel=B\perp=5/\sqrt(4\pi)
1934# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1935 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1._wp
1936# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1937 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -10._wp*cosa
1938# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1939 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = -10._wp*sina
1940# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1941 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1._wp
1942# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1943 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
1944# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1945 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
1946# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1947 end if
1948# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1949 ! v^z and B^z remain zero by default
1950# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1951 case (270) ! 2D extrusion of 1D profile from external data
1952# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1953 ! This hardcoded case extrudes a 1D profile to initialize a 2D simulation domain
1954# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1955 if (.not. files_loaded) then
1956# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1957 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
1958# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1959 do f = 1, max_files
1960# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1961 write (file_num_str, '(I0)') f
1962# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1963 filenames(f) = trim(files_dir) // "/" // "prim." // trim(file_num_str) // ".00." // trim(file_extension) // ".dat"
1964# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1965 end do
1966# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1967
1968# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1969 ! Common file reading setup
1970# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1971 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
1972# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1973 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
1974# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1975
1976# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1977 select case (num_dims)
1978# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1979 case (1, 2) ! 1D and 2D cases are similar
1980# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1981 ! Count lines
1982# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1983 line_count = 0
1984# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1985 do
1986# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1987 read (unit2, *, iostat=ios2) dummy_x, dummy_y
1988# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1989 if (ios2 /= 0) exit
1990# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1991 line_count = line_count + 1
1992# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1993 end do
1994# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1995 close (unit2)
1996# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1997
1998# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
1999 xrows = line_count
2000# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2001 yrows = 1
2002# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2003 index_x = 0
2004# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2005 if (num_dims == 2) index_x = i
2006# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2007#ifdef MFC_DEBUG
2008# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2009 block
2010# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2011 use iso_fortran_env, only: output_unit
2012# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2013
2014# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2015 print *, 'm_icpp_patches.fpp:275: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
2016# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2017
2018# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2019 call flush (output_unit)
2020# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2021 end block
2022# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2023#endif
2024# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2025 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
2026# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2027
2028# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2029
2030# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2031
2032# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2033#if defined(MFC_OpenACC)
2034# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2035!$acc enter data create(x_coords, stored_values)
2036# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2037#elif defined(MFC_OpenMP)
2038# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2039!$omp target enter data map(always,alloc:x_coords, stored_values)
2040# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2041#endif
2042# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2043
2044# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2045 ! Read data from all files
2046# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2047 do f = 1, max_files
2048# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2049 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
2050# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2051 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
2052# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2053
2054# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2055 do iter = 1, xrows
2056# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2057 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
2058# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2059 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
2060# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2061 end do
2062# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2063 close (unit)
2064# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2065 end do
2066# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2067
2068# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2069 ! Calculate offsets
2070# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2071 domain_xstart = x_coords(1)
2072# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2073 x_step = x_cc(1) - x_cc(0)
2074# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2075 delta_x = merge(x_cc(0) - domain_xstart, x_cc(index_x) - domain_xstart, num_dims == 1)
2076# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2077 global_offset_x = nint(abs(delta_x)/x_step)
2078# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2079 case (3) ! 3D case - determine grid structure
2080# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2081 ! Find yRows by counting rows with same x
2082# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2083 read (unit2, *, iostat=ios2) x0, y0, dummy_z
2084# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2085 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
2086# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2087
2088# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2089 yrows = 1
2090# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2091 do
2092# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2093 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
2094# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2095 if (ios2 /= 0) exit
2096# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2097 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
2098# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2099 yrows = yrows + 1
2100# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2101 else
2102# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2103 exit
2104# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2105 end if
2106# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2107 end do
2108# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2109 close (unit2)
2110# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2111
2112# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2113 ! Count total rows
2114# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2115 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
2116# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2117 nrows = 0
2118# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2119 do
2120# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2121 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
2122# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2123 if (ios2 /= 0) exit
2124# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2125 nrows = nrows + 1
2126# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2127 end do
2128# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2129 close (unit2)
2130# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2131
2132# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2133 xrows = nrows/yrows
2134# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2135#ifdef MFC_DEBUG
2136# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2137 block
2138# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2139 use iso_fortran_env, only: output_unit
2140# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2141
2142# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2143 print *, 'm_icpp_patches.fpp:275: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
2144# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2145
2146# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2147 call flush (output_unit)
2148# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2149 end block
2150# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2151#endif
2152# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2153 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
2154# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2155
2156# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2157
2158# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2159
2160# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2161
2162# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2163#if defined(MFC_OpenACC)
2164# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2165!$acc enter data create(x_coords, y_coords, stored_values)
2166# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2167#elif defined(MFC_OpenMP)
2168# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2169!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
2170# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2171#endif
2172# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2173 index_x = i
2174# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2175 index_y = j
2176# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2177
2178# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2179 ! Read all files
2180# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2181 do f = 1, max_files
2182# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2183 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
2184# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2185 if (ios /= 0) then
2186# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2187 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
2188# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2189 cycle
2190# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2191 end if
2192# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2193
2194# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2195 iter = 0
2196# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2197 do iix = 1, xrows
2198# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2199 do iiy = 1, yrows
2200# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2201 iter = iter + 1
2202# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2203 if (f == 1) then
2204# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2205 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
2206# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2207 else
2208# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2209 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
2210# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2211 end if
2212# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2213 if (ios /= 0) call s_mpi_abort("Error reading data")
2214# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2215 end do
2216# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2217 end do
2218# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2219 close (unit)
2220# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2221 end do
2222# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2223
2224# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2225 ! Calculate offsets
2226# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2227 x_step = x_cc(1) - x_cc(0)
2228# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2229 y_step = y_cc(1) - y_cc(0)
2230# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2231 delta_x = x_cc(index_x) - x_coords(1)
2232# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2233 delta_y = y_cc(index_y) - y_coords(1)
2234# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2235 global_offset_x = nint(abs(delta_x)/x_step)
2236# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2237 global_offset_y = nint(abs(delta_y)/y_step)
2238# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2239 end select
2240# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2241
2242# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2243 files_loaded = .true.
2244# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2245 end if
2246# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2247
2248# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2249 ! Data assignment
2250# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2251 select case (num_dims)
2252# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2253 case (1)
2254# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2255 idx = i + 1 + global_offset_x
2256# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2257 ! idx must land inside the file's row range: this rank's subdomain offset
2258# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2259 ! (global_offset_x) was derived from this rank's own grid, so a miss means the
2260# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2261 ! IC file is misaligned/mis-sized for the run grid, not a normal boundary case.
2262# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2263 if (idx < 1 .or. idx > xrows) &
2264# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2265 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
2266# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2267 do f = 1, sys_size
2268# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2269 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
2270# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2271 end do
2272# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2273 case (2)
2274# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2275 idx = i + 1 + global_offset_x - index_x
2276# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2277 if (idx < 1 .or. idx > xrows) &
2278# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2279 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
2280# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2281 do f = 1, sys_size - 1
2282# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2283 jump = merge(1, 0, f >= eqn_idx%mom%end)
2284# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2285 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
2286# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2287 end do
2288# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2289 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
2290# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2291 case (3)
2292# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2293 idx = i + 1 + global_offset_x - index_x
2294# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2295 idy = j + 1 + global_offset_y - index_y
2296# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2297 if (idx < 1 .or. idx > xrows .or. idy < 1 .or. idy > yrows) &
2298# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2299 & call s_mpi_abort("Hardcoded IC extrusion: row/column index out of range (IC file misaligned with the run grid)")
2300# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2301 do f = 1, sys_size - 1
2302# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2303 jump = merge(1, 0, f >= eqn_idx%mom%end)
2304# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2305 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
2306# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2307 end do
2308# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2309 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
2310# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2311 end select
2312# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2313 case (273) ! Temporal reacting mixing layer: 2D extrusion + streamwise velocity
2314# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2315 ! @:HardcodedReadValues() always zeros mom%end (the extruded-axis velocity).
2316# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2317 ! The mom%beg file slot is repurposed to carry the streamwise-velocity-vs-
2318# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2319 ! cross-stream-position profile (real cross-stream velocity is legitimately
2320# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2321 ! zero everywhere in the unperturbed base state), so swap it into mom%end and
2322# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2323 ! zero out mom%beg's true physical value.
2324# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2325 if (.not. files_loaded) then
2326# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2327 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
2328# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2329 do f = 1, max_files
2330# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2331 write (file_num_str, '(I0)') f
2332# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2333 filenames(f) = trim(files_dir) // "/" // "prim." // trim(file_num_str) // ".00." // trim(file_extension) // ".dat"
2334# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2335 end do
2336# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2337
2338# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2339 ! Common file reading setup
2340# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2341 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
2342# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2343 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
2344# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2345
2346# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2347 select case (num_dims)
2348# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2349 case (1, 2) ! 1D and 2D cases are similar
2350# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2351 ! Count lines
2352# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2353 line_count = 0
2354# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2355 do
2356# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2357 read (unit2, *, iostat=ios2) dummy_x, dummy_y
2358# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2359 if (ios2 /= 0) exit
2360# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2361 line_count = line_count + 1
2362# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2363 end do
2364# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2365 close (unit2)
2366# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2367
2368# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2369 xrows = line_count
2370# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2371 yrows = 1
2372# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2373 index_x = 0
2374# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2375 if (num_dims == 2) index_x = i
2376# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2377#ifdef MFC_DEBUG
2378# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2379 block
2380# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2381 use iso_fortran_env, only: output_unit
2382# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2383
2384# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2385 print *, 'm_icpp_patches.fpp:275: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
2386# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2387
2388# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2389 call flush (output_unit)
2390# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2391 end block
2392# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2393#endif
2394# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2395 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
2396# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2397
2398# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2399
2400# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2401
2402# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2403#if defined(MFC_OpenACC)
2404# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2405!$acc enter data create(x_coords, stored_values)
2406# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2407#elif defined(MFC_OpenMP)
2408# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2409!$omp target enter data map(always,alloc:x_coords, stored_values)
2410# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2411#endif
2412# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2413
2414# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2415 ! Read data from all files
2416# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2417 do f = 1, max_files
2418# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2419 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
2420# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2421 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
2422# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2423
2424# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2425 do iter = 1, xrows
2426# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2427 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
2428# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2429 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
2430# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2431 end do
2432# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2433 close (unit)
2434# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2435 end do
2436# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2437
2438# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2439 ! Calculate offsets
2440# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2441 domain_xstart = x_coords(1)
2442# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2443 x_step = x_cc(1) - x_cc(0)
2444# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2445 delta_x = merge(x_cc(0) - domain_xstart, x_cc(index_x) - domain_xstart, num_dims == 1)
2446# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2447 global_offset_x = nint(abs(delta_x)/x_step)
2448# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2449 case (3) ! 3D case - determine grid structure
2450# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2451 ! Find yRows by counting rows with same x
2452# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2453 read (unit2, *, iostat=ios2) x0, y0, dummy_z
2454# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2455 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
2456# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2457
2458# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2459 yrows = 1
2460# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2461 do
2462# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2463 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
2464# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2465 if (ios2 /= 0) exit
2466# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2467 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
2468# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2469 yrows = yrows + 1
2470# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2471 else
2472# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2473 exit
2474# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2475 end if
2476# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2477 end do
2478# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2479 close (unit2)
2480# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2481
2482# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2483 ! Count total rows
2484# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2485 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
2486# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2487 nrows = 0
2488# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2489 do
2490# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2491 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
2492# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2493 if (ios2 /= 0) exit
2494# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2495 nrows = nrows + 1
2496# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2497 end do
2498# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2499 close (unit2)
2500# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2501
2502# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2503 xrows = nrows/yrows
2504# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2505#ifdef MFC_DEBUG
2506# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2507 block
2508# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2509 use iso_fortran_env, only: output_unit
2510# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2511
2512# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2513 print *, 'm_icpp_patches.fpp:275: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
2514# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2515
2516# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2517 call flush (output_unit)
2518# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2519 end block
2520# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2521#endif
2522# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2523 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
2524# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2525
2526# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2527
2528# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2529
2530# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2531
2532# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2533#if defined(MFC_OpenACC)
2534# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2535!$acc enter data create(x_coords, y_coords, stored_values)
2536# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2537#elif defined(MFC_OpenMP)
2538# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2539!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
2540# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2541#endif
2542# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2543 index_x = i
2544# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2545 index_y = j
2546# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2547
2548# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2549 ! Read all files
2550# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2551 do f = 1, max_files
2552# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2553 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
2554# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2555 if (ios /= 0) then
2556# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2557 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
2558# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2559 cycle
2560# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2561 end if
2562# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2563
2564# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2565 iter = 0
2566# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2567 do iix = 1, xrows
2568# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2569 do iiy = 1, yrows
2570# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2571 iter = iter + 1
2572# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2573 if (f == 1) then
2574# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2575 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
2576# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2577 else
2578# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2579 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
2580# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2581 end if
2582# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2583 if (ios /= 0) call s_mpi_abort("Error reading data")
2584# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2585 end do
2586# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2587 end do
2588# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2589 close (unit)
2590# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2591 end do
2592# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2593
2594# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2595 ! Calculate offsets
2596# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2597 x_step = x_cc(1) - x_cc(0)
2598# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2599 y_step = y_cc(1) - y_cc(0)
2600# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2601 delta_x = x_cc(index_x) - x_coords(1)
2602# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2603 delta_y = y_cc(index_y) - y_coords(1)
2604# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2605 global_offset_x = nint(abs(delta_x)/x_step)
2606# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2607 global_offset_y = nint(abs(delta_y)/y_step)
2608# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2609 end select
2610# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2611
2612# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2613 files_loaded = .true.
2614# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2615 end if
2616# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2617
2618# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2619 ! Data assignment
2620# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2621 select case (num_dims)
2622# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2623 case (1)
2624# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2625 idx = i + 1 + global_offset_x
2626# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2627 ! idx must land inside the file's row range: this rank's subdomain offset
2628# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2629 ! (global_offset_x) was derived from this rank's own grid, so a miss means the
2630# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2631 ! IC file is misaligned/mis-sized for the run grid, not a normal boundary case.
2632# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2633 if (idx < 1 .or. idx > xrows) &
2634# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2635 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
2636# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2637 do f = 1, sys_size
2638# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2639 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
2640# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2641 end do
2642# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2643 case (2)
2644# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2645 idx = i + 1 + global_offset_x - index_x
2646# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2647 if (idx < 1 .or. idx > xrows) &
2648# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2649 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
2650# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2651 do f = 1, sys_size - 1
2652# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2653 jump = merge(1, 0, f >= eqn_idx%mom%end)
2654# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2655 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
2656# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2657 end do
2658# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2659 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
2660# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2661 case (3)
2662# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2663 idx = i + 1 + global_offset_x - index_x
2664# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2665 idy = j + 1 + global_offset_y - index_y
2666# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2667 if (idx < 1 .or. idx > xrows .or. idy < 1 .or. idy > yrows) &
2668# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2669 & call s_mpi_abort("Hardcoded IC extrusion: row/column index out of range (IC file misaligned with the run grid)")
2670# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2671 do f = 1, sys_size - 1
2672# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2673 jump = merge(1, 0, f >= eqn_idx%mom%end)
2674# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2675 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
2676# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2677 end do
2678# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2679 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
2680# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2681 end select
2682# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2683 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0)
2684# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2685 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 0.0_wp
2686# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2687 case (274) ! Full 2D field from external data (no extrusion)
2688# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2689 ! Unlike case(270-273), this reads a genuinely 2D (x,y) field per variable, with no
2690# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2691 ! extrusion direction and no zeroed component -- all sys_size variables are read and
2692# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2693 ! assigned directly. Data files must have exactly (m_glb+1)*(n_glb+1) lines per
2694# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2695 ! variable, in x-major order (outer loop x, inner loop y), matching this rank's
2696# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2697 ! global grid exactly -- by construction, since the IC generator derives both the
2698# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2699 ! grid and the file contents from the same computation.
2700# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2701 !
2702# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2703 ! A local cell's global (x, y) index is derived from x_cc(i)/y_cc(j) against the
2704# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2705 ! file's own first coordinate and this rank's uniform grid spacing -- following the
2706# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2707 ! same pattern as case(270)'s global_offset_x/y above -- rather than from start_idx:
2708# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2709 ! start_idx is only allocated when parallel_io=T (s_initialize_parallel_io_common
2710# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2711 ! returns before allocating it otherwise), so a serial-IO run (the default for
2712# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2713 ! golden-file tests) would index into an unallocated array.
2714# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2715 !
2716# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2717 ! Every rank still scans the whole file (matching case(270)'s existing per-rank-reads-
2718# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2719 ! everything pattern), but stored_values274 only holds this rank's LOCAL (0:m, 0:n)
2720# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2721 ! slice rather than the full global grid -- a full-grid copy on every rank would scale
2722# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2723 ! as O(m_glb*n_glb*sys_size) per rank, which is the wrong axis to duplicate work on for
2724# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2725 ! a genuinely 2D (not 1D-profile) field. local_ix_beg274/local_iy_beg274 (this rank's
2726# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2727 ! global cell offset) are pinned from f274==1's very first record, before any other
2728# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2729 ! record is read, so every subsequent record -- across all variables -- can be tested
2730# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2731 ! against this rank's range and dropped if it falls outside it.
2732# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2733 x_step274 = x_cc(1) - x_cc(0)
2734# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2735 y_step274 = y_cc(1) - y_cc(0)
2736# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2737
2738# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2739 if (.not. files_loaded274) then
2740# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2741#ifdef MFC_DEBUG
2742# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2743 block
2744# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2745 use iso_fortran_env, only: output_unit
2746# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2747
2748# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2749 print *, 'm_icpp_patches.fpp:275: ', '@:ALLOCATE(stored_values274(0:m, 0:n, sys_size))'
2750# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2751
2752# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2753 call flush (output_unit)
2754# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2755 end block
2756# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2757#endif
2758# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2759 allocate (stored_values274(0:m, 0:n, sys_size))
2760# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2761
2762# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2763
2764# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2765#if defined(MFC_OpenACC)
2766# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2767!$acc enter data create(stored_values274)
2768# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2769#elif defined(MFC_OpenMP)
2770# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2771!$omp target enter data map(always,alloc:stored_values274)
2772# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2773#endif
2774# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2775 do f274 = 1, sys_size
2776# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2777 write (file_num_str274, '(I0)') f274
2778# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2779 fname274 = trim(files_dir) // "/prim." // trim(file_num_str274) // ".00." // trim(file_extension) // ".dat"
2780# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2781 open (newunit=unit274, file=trim(fname274), status='old', action='read', iostat=ios274)
2782# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2783 if (ios274 /= 0) call s_mpi_abort("Error opening file: " // trim(fname274))
2784# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2785 do ix274 = 0, m_glb
2786# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2787 do iy274 = 0, n_glb
2788# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2789 read (unit274, *, iostat=ios274) dummy_x274, dummy_y274, dummy_val274
2790# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2791 if (ios274 /= 0) call s_mpi_abort("Error reading file (fewer lines than grid?): " // trim(fname274))
2792# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2793 ! Capture the file's own origin and spacing from its first records so we can
2794# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2795 ! confirm it was sampled on this run's grid (a silent mismatch would otherwise
2796# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2797 ! read a wrong partial slice -> nonphysical field -> VCFL=Inf downstream).
2798# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2799 if (f274 == 1) then
2800# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2801 if (ix274 == 0 .and. iy274 == 0) then
2802# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2803 x0_274 = dummy_x274
2804# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2805 y0_274 = dummy_y274
2806# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2807 local_ix_beg274 = nint((x_cc(0) - x0_274)/x_step274)
2808# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2809 local_iy_beg274 = nint((y_cc(0) - y0_274)/y_step274)
2810# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2811 end if
2812# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2813 if (ix274 == 1 .and. iy274 == 0) file_dx274 = dummy_x274 - x0_274
2814# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2815 if (ix274 == 0 .and. iy274 == 1) file_dy274 = dummy_y274 - y0_274
2816# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2817 end if
2818# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2819 if (ix274 - local_ix_beg274 >= 0 .and. ix274 - local_ix_beg274 <= m .and. iy274 - local_iy_beg274 >= 0 &
2820# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2821 & .and. iy274 - local_iy_beg274 <= n) then
2822# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2823 stored_values274(ix274 - local_ix_beg274, iy274 - local_iy_beg274, f274) = dummy_val274
2824# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2825 end if
2826# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2827 end do
2828# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2829 end do
2830# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2831 ! The file must contain exactly (m_glb+1)*(n_glb+1) records: a successful extra
2832# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2833 ! read means it was generated for a larger grid and would be silently misread.
2834# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2835 read (unit274, *, iostat=ios274) dummy_x274, dummy_y274
2836# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2837 if (ios274 == 0) call s_mpi_abort("hcid=274 file has more lines than the grid: " // trim(fname274))
2838# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2839 close (unit274)
2840# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2841 end do
2842# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2843
2844# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2845 ! The run grid must be aligned with the file grid (uniform grid assumed, as in case 270).
2846# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2847 ! Check alignment via the integer cell offset of this rank's first cell from the file
2848# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2849 ! origin -- decomposition-safe: on every MPI rank x_cc(0) sits an integer number of cells
2850# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2851 ! into the global file, so a non-integer offset means a shifted/mismatched IC. (Comparing
2852# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2853 ! x0_274 to x_cc(0) directly would false-abort every rank whose subdomain doesn't start at
2854# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2855 ! the global origin.) The spacing checks below must also hold.
2856# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2857 r_align274 = (x_cc(0) - x0_274)/x_step274
2858# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2859 if (abs(r_align274 - nint(r_align274)) > 1.e-6_wp) &
2860# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2861 & call s_mpi_abort("hcid=274 file x-grid is misaligned with the run grid; regenerate the IC for this grid.")
2862# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2863 if (m_glb >= 1) then
2864# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2865 if (abs(file_dx274 - x_step274) > 1.e-6_wp*abs(x_step274)) &
2866# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2867 & call s_mpi_abort("hcid=274 file x-spacing does not match the grid; regenerate the IC for this grid.")
2868# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2869 end if
2870# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2871 if (n_glb >= 1) then
2872# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2873 r_align274 = (y_cc(0) - y0_274)/y_step274
2874# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2875 if (abs(r_align274 - nint(r_align274)) > 1.e-6_wp) &
2876# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2877 & call s_mpi_abort("hcid=274 file y-grid is misaligned with the run grid; regenerate the IC for this grid.")
2878# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2879 if (abs(file_dy274 - y_step274) > 1.e-6_wp*abs(y_step274)) &
2880# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2881 & call s_mpi_abort("hcid=274 file y-spacing does not match the grid; regenerate the IC for this grid.")
2882# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2883 end if
2884# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2885
2886# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2887 files_loaded274 = .true.
2888# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2889 end if
2890# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2891 ! Alignment is verified above (or this rank would already have aborted), so the local
2892# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2893 ! cell (i, j) maps to stored_values274(i, j, :) directly -- no re-derivation needed.
2894# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2895 do f274 = 1, sys_size
2896# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2897 q_prim_vf(f274)%sf(i, j, 0) = stored_values274(i, j, f274)
2898# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2899 end do
2900# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2901 case (271) ! Premixed Flame Vortices Interaction
2902# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2903 if (.not. files_loaded) then
2904# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2905 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
2906# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2907 do f = 1, max_files
2908# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2909 write (file_num_str, '(I0)') f
2910# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2911 filenames(f) = trim(files_dir) // "/" // "prim." // trim(file_num_str) // ".00." // trim(file_extension) // ".dat"
2912# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2913 end do
2914# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2915
2916# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2917 ! Common file reading setup
2918# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2919 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
2920# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2921 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
2922# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2923
2924# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2925 select case (num_dims)
2926# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2927 case (1, 2) ! 1D and 2D cases are similar
2928# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2929 ! Count lines
2930# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2931 line_count = 0
2932# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2933 do
2934# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2935 read (unit2, *, iostat=ios2) dummy_x, dummy_y
2936# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2937 if (ios2 /= 0) exit
2938# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2939 line_count = line_count + 1
2940# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2941 end do
2942# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2943 close (unit2)
2944# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2945
2946# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2947 xrows = line_count
2948# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2949 yrows = 1
2950# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2951 index_x = 0
2952# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2953 if (num_dims == 2) index_x = i
2954# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2955#ifdef MFC_DEBUG
2956# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2957 block
2958# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2959 use iso_fortran_env, only: output_unit
2960# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2961
2962# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2963 print *, 'm_icpp_patches.fpp:275: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
2964# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2965
2966# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2967 call flush (output_unit)
2968# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2969 end block
2970# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2971#endif
2972# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2973 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
2974# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2975
2976# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2977
2978# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2979
2980# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2981#if defined(MFC_OpenACC)
2982# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2983!$acc enter data create(x_coords, stored_values)
2984# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2985#elif defined(MFC_OpenMP)
2986# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2987!$omp target enter data map(always,alloc:x_coords, stored_values)
2988# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2989#endif
2990# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2991
2992# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2993 ! Read data from all files
2994# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2995 do f = 1, max_files
2996# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2997 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
2998# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
2999 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
3000# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3001
3002# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3003 do iter = 1, xrows
3004# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3005 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
3006# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3007 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
3008# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3009 end do
3010# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3011 close (unit)
3012# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3013 end do
3014# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3015
3016# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3017 ! Calculate offsets
3018# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3019 domain_xstart = x_coords(1)
3020# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3021 x_step = x_cc(1) - x_cc(0)
3022# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3023 delta_x = merge(x_cc(0) - domain_xstart, x_cc(index_x) - domain_xstart, num_dims == 1)
3024# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3025 global_offset_x = nint(abs(delta_x)/x_step)
3026# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3027 case (3) ! 3D case - determine grid structure
3028# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3029 ! Find yRows by counting rows with same x
3030# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3031 read (unit2, *, iostat=ios2) x0, y0, dummy_z
3032# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3033 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
3034# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3035
3036# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3037 yrows = 1
3038# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3039 do
3040# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3041 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
3042# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3043 if (ios2 /= 0) exit
3044# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3045 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
3046# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3047 yrows = yrows + 1
3048# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3049 else
3050# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3051 exit
3052# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3053 end if
3054# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3055 end do
3056# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3057 close (unit2)
3058# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3059
3060# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3061 ! Count total rows
3062# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3063 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
3064# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3065 nrows = 0
3066# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3067 do
3068# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3069 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
3070# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3071 if (ios2 /= 0) exit
3072# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3073 nrows = nrows + 1
3074# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3075 end do
3076# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3077 close (unit2)
3078# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3079
3080# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3081 xrows = nrows/yrows
3082# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3083#ifdef MFC_DEBUG
3084# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3085 block
3086# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3087 use iso_fortran_env, only: output_unit
3088# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3089
3090# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3091 print *, 'm_icpp_patches.fpp:275: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
3092# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3093
3094# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3095 call flush (output_unit)
3096# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3097 end block
3098# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3099#endif
3100# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3101 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
3102# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3103
3104# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3105
3106# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3107
3108# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3109
3110# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3111#if defined(MFC_OpenACC)
3112# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3113!$acc enter data create(x_coords, y_coords, stored_values)
3114# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3115#elif defined(MFC_OpenMP)
3116# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3117!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
3118# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3119#endif
3120# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3121 index_x = i
3122# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3123 index_y = j
3124# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3125
3126# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3127 ! Read all files
3128# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3129 do f = 1, max_files
3130# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3131 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
3132# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3133 if (ios /= 0) then
3134# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3135 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
3136# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3137 cycle
3138# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3139 end if
3140# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3141
3142# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3143 iter = 0
3144# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3145 do iix = 1, xrows
3146# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3147 do iiy = 1, yrows
3148# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3149 iter = iter + 1
3150# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3151 if (f == 1) then
3152# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3153 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
3154# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3155 else
3156# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3157 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
3158# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3159 end if
3160# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3161 if (ios /= 0) call s_mpi_abort("Error reading data")
3162# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3163 end do
3164# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3165 end do
3166# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3167 close (unit)
3168# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3169 end do
3170# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3171
3172# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3173 ! Calculate offsets
3174# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3175 x_step = x_cc(1) - x_cc(0)
3176# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3177 y_step = y_cc(1) - y_cc(0)
3178# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3179 delta_x = x_cc(index_x) - x_coords(1)
3180# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3181 delta_y = y_cc(index_y) - y_coords(1)
3182# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3183 global_offset_x = nint(abs(delta_x)/x_step)
3184# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3185 global_offset_y = nint(abs(delta_y)/y_step)
3186# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3187 end select
3188# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3189
3190# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3191 files_loaded = .true.
3192# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3193 end if
3194# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3195
3196# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3197 ! Data assignment
3198# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3199 select case (num_dims)
3200# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3201 case (1)
3202# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3203 idx = i + 1 + global_offset_x
3204# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3205 ! idx must land inside the file's row range: this rank's subdomain offset
3206# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3207 ! (global_offset_x) was derived from this rank's own grid, so a miss means the
3208# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3209 ! IC file is misaligned/mis-sized for the run grid, not a normal boundary case.
3210# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3211 if (idx < 1 .or. idx > xrows) &
3212# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3213 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
3214# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3215 do f = 1, sys_size
3216# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3217 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
3218# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3219 end do
3220# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3221 case (2)
3222# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3223 idx = i + 1 + global_offset_x - index_x
3224# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3225 if (idx < 1 .or. idx > xrows) &
3226# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3227 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
3228# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3229 do f = 1, sys_size - 1
3230# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3231 jump = merge(1, 0, f >= eqn_idx%mom%end)
3232# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3233 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
3234# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3235 end do
3236# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3237 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
3238# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3239 case (3)
3240# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3241 idx = i + 1 + global_offset_x - index_x
3242# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3243 idy = j + 1 + global_offset_y - index_y
3244# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3245 if (idx < 1 .or. idx > xrows .or. idy < 1 .or. idy > yrows) &
3246# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3247 & call s_mpi_abort("Hardcoded IC extrusion: row/column index out of range (IC file misaligned with the run grid)")
3248# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3249 do f = 1, sys_size - 1
3250# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3251 jump = merge(1, 0, f >= eqn_idx%mom%end)
3252# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3253 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
3254# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3255 end do
3256# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3257 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
3258# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3259 end select
3260# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3261 x1c = 0.0027_wp
3262# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3263 y1c = 0.005_wp
3264# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3265 x2c = 0.0027_wp
3266# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3267 y2c = 0.003_wp
3268# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3269 r1c = (x_cc(i) - x1c)**(2.0_wp) + (y_cc(j) - y1c)**(2.0_wp)
3270# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3271 r2c = (x_cc(i) - x2c)**(2.0_wp) + (y_cc(j) - y2c)**(2.0_wp)
3272# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3273 rvortex = 0.0005_wp
3274# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3275 cvortex = 6000.0_wp
3276# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3277
3278# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3279 u1c = -cvortex*((y_cc(j) - y1c))*exp(-r1c/(2.0_wp*rvortex**2.0_wp))
3280# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3281 v1c = cvortex*((x_cc(i) - x1c))*exp(-r1c/(2.0_wp*rvortex**2.0_wp))
3282# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3283
3284# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3285 u2c = cvortex*((y_cc(j) - y2c))*exp(-r2c/(2.0_wp*rvortex**2.0_wp))
3286# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3287 v2c = -cvortex*((x_cc(i) - x2c))*exp(-r2c/(2.0_wp*rvortex**2.0_wp))
3288# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3289 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) + u1c + u2c
3290# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3291 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = v1c + v2c
3292# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3293 case (272) ! Premixed Flame Instability
3294# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3295 if (.not. files_loaded) then
3296# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3297 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
3298# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3299 do f = 1, max_files
3300# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3301 write (file_num_str, '(I0)') f
3302# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3303 filenames(f) = trim(files_dir) // "/" // "prim." // trim(file_num_str) // ".00." // trim(file_extension) // ".dat"
3304# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3305 end do
3306# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3307
3308# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3309 ! Common file reading setup
3310# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3311 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
3312# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3313 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
3314# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3315
3316# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3317 select case (num_dims)
3318# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3319 case (1, 2) ! 1D and 2D cases are similar
3320# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3321 ! Count lines
3322# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3323 line_count = 0
3324# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3325 do
3326# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3327 read (unit2, *, iostat=ios2) dummy_x, dummy_y
3328# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3329 if (ios2 /= 0) exit
3330# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3331 line_count = line_count + 1
3332# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3333 end do
3334# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3335 close (unit2)
3336# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3337
3338# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3339 xrows = line_count
3340# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3341 yrows = 1
3342# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3343 index_x = 0
3344# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3345 if (num_dims == 2) index_x = i
3346# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3347#ifdef MFC_DEBUG
3348# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3349 block
3350# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3351 use iso_fortran_env, only: output_unit
3352# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3353
3354# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3355 print *, 'm_icpp_patches.fpp:275: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
3356# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3357
3358# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3359 call flush (output_unit)
3360# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3361 end block
3362# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3363#endif
3364# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3365 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
3366# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3367
3368# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3369
3370# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3371
3372# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3373#if defined(MFC_OpenACC)
3374# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3375!$acc enter data create(x_coords, stored_values)
3376# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3377#elif defined(MFC_OpenMP)
3378# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3379!$omp target enter data map(always,alloc:x_coords, stored_values)
3380# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3381#endif
3382# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3383
3384# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3385 ! Read data from all files
3386# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3387 do f = 1, max_files
3388# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3389 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
3390# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3391 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
3392# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3393
3394# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3395 do iter = 1, xrows
3396# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3397 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
3398# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3399 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
3400# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3401 end do
3402# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3403 close (unit)
3404# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3405 end do
3406# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3407
3408# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3409 ! Calculate offsets
3410# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3411 domain_xstart = x_coords(1)
3412# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3413 x_step = x_cc(1) - x_cc(0)
3414# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3415 delta_x = merge(x_cc(0) - domain_xstart, x_cc(index_x) - domain_xstart, num_dims == 1)
3416# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3417 global_offset_x = nint(abs(delta_x)/x_step)
3418# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3419 case (3) ! 3D case - determine grid structure
3420# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3421 ! Find yRows by counting rows with same x
3422# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3423 read (unit2, *, iostat=ios2) x0, y0, dummy_z
3424# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3425 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
3426# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3427
3428# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3429 yrows = 1
3430# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3431 do
3432# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3433 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
3434# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3435 if (ios2 /= 0) exit
3436# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3437 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
3438# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3439 yrows = yrows + 1
3440# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3441 else
3442# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3443 exit
3444# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3445 end if
3446# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3447 end do
3448# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3449 close (unit2)
3450# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3451
3452# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3453 ! Count total rows
3454# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3455 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
3456# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3457 nrows = 0
3458# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3459 do
3460# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3461 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
3462# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3463 if (ios2 /= 0) exit
3464# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3465 nrows = nrows + 1
3466# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3467 end do
3468# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3469 close (unit2)
3470# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3471
3472# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3473 xrows = nrows/yrows
3474# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3475#ifdef MFC_DEBUG
3476# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3477 block
3478# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3479 use iso_fortran_env, only: output_unit
3480# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3481
3482# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3483 print *, 'm_icpp_patches.fpp:275: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
3484# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3485
3486# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3487 call flush (output_unit)
3488# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3489 end block
3490# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3491#endif
3492# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3493 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
3494# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3495
3496# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3497
3498# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3499
3500# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3501
3502# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3503#if defined(MFC_OpenACC)
3504# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3505!$acc enter data create(x_coords, y_coords, stored_values)
3506# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3507#elif defined(MFC_OpenMP)
3508# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3509!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
3510# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3511#endif
3512# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3513 index_x = i
3514# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3515 index_y = j
3516# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3517
3518# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3519 ! Read all files
3520# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3521 do f = 1, max_files
3522# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3523 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
3524# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3525 if (ios /= 0) then
3526# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3527 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
3528# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3529 cycle
3530# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3531 end if
3532# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3533
3534# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3535 iter = 0
3536# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3537 do iix = 1, xrows
3538# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3539 do iiy = 1, yrows
3540# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3541 iter = iter + 1
3542# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3543 if (f == 1) then
3544# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3545 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
3546# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3547 else
3548# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3549 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
3550# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3551 end if
3552# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3553 if (ios /= 0) call s_mpi_abort("Error reading data")
3554# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3555 end do
3556# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3557 end do
3558# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3559 close (unit)
3560# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3561 end do
3562# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3563
3564# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3565 ! Calculate offsets
3566# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3567 x_step = x_cc(1) - x_cc(0)
3568# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3569 y_step = y_cc(1) - y_cc(0)
3570# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3571 delta_x = x_cc(index_x) - x_coords(1)
3572# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3573 delta_y = y_cc(index_y) - y_coords(1)
3574# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3575 global_offset_x = nint(abs(delta_x)/x_step)
3576# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3577 global_offset_y = nint(abs(delta_y)/y_step)
3578# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3579 end select
3580# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3581
3582# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3583 files_loaded = .true.
3584# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3585 end if
3586# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3587
3588# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3589 ! Data assignment
3590# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3591 select case (num_dims)
3592# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3593 case (1)
3594# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3595 idx = i + 1 + global_offset_x
3596# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3597 ! idx must land inside the file's row range: this rank's subdomain offset
3598# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3599 ! (global_offset_x) was derived from this rank's own grid, so a miss means the
3600# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3601 ! IC file is misaligned/mis-sized for the run grid, not a normal boundary case.
3602# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3603 if (idx < 1 .or. idx > xrows) &
3604# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3605 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
3606# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3607 do f = 1, sys_size
3608# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3609 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
3610# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3611 end do
3612# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3613 case (2)
3614# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3615 idx = i + 1 + global_offset_x - index_x
3616# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3617 if (idx < 1 .or. idx > xrows) &
3618# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3619 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
3620# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3621 do f = 1, sys_size - 1
3622# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3623 jump = merge(1, 0, f >= eqn_idx%mom%end)
3624# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3625 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
3626# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3627 end do
3628# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3629 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
3630# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3631 case (3)
3632# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3633 idx = i + 1 + global_offset_x - index_x
3634# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3635 idy = j + 1 + global_offset_y - index_y
3636# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3637 if (idx < 1 .or. idx > xrows .or. idy < 1 .or. idy > yrows) &
3638# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3639 & call s_mpi_abort("Hardcoded IC extrusion: row/column index out of range (IC file misaligned with the run grid)")
3640# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3641 do f = 1, sys_size - 1
3642# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3643 jump = merge(1, 0, f >= eqn_idx%mom%end)
3644# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3645 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
3646# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3647 end do
3648# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3649 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
3650# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3651 end select
3652# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3653
3654# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3655 y_center = y0_ref
3656# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3657 y_dist = y_cc(j) - y_center
3658# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3659 wave_phase = 2.0_wp*pi*nwaves*(y_dist/ly_param)
3660# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3661 front_shift = a_param*sin(wave_phase)
3662# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3663
3664# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3665 x_mapped = x_cc(i) - front_shift
3666# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3667
3668# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3669 if (x_mapped <= x_coords(1)) then
3670# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3671 do v = 1, sys_size - 1
3672# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3673 q_prim_vf(v + merge(1, 0, v >= eqn_idx%mom%end))%sf(i, j, 0) = stored_values(1, 1, v)
3674# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3675 end do
3676# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3677 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
3678# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3679 else if (x_mapped >= x_coords(xrows)) then
3680# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3681 do v = 1, sys_size - 1
3682# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3683 q_prim_vf(v + merge(1, 0, v >= eqn_idx%mom%end))%sf(i, j, 0) = stored_values(xrows, 1, v)
3684# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3685 end do
3686# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3687 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
3688# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3689 else
3690# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3691 idx_lo = 1; idx_hi = xrows
3692# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3693 do while (idx_hi - idx_lo > 1)
3694# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3695 idx_mid = (idx_lo + idx_hi)/2
3696# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3697 if (x_coords(idx_mid) <= x_mapped) then
3698# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3699 idx_lo = idx_mid
3700# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3701 else
3702# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3703 idx_hi = idx_mid
3704# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3705 end if
3706# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3707 end do
3708# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3709
3710# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3711 interp_wt = (x_mapped - x_coords(idx_lo))/(x_coords(idx_hi) - x_coords(idx_lo)) ! weight in [0,1)
3712# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3713
3714# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3715 do v = 1, sys_size - 1
3716# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3717 q_prim_vf(v + merge(1, 0, v >= eqn_idx%mom%end))%sf(i, j, 0) = (1.0_wp - interp_wt)*stored_values(idx_lo, 1, &
3718# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3719 & v) + interp_wt*stored_values(idx_hi, 1, v)
3720# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3721 end do
3722# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3723 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
3724# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3725 end if
3726# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3727 case (280) ! Isentropic vortex
3728# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3729 ! This is patch is hard-coded for test suite optimization used in the 2D_isentropicvortex case: This analytic patch uses
3730# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3731 ! geometry 2
3732# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3733 if (patch_id == 1) then
3734# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3735 q_prim_vf(eqn_idx%E)%sf(i, j, &
3736# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3737 & 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) &
3738# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3739 & - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0)))**(1.4 + 1.0)
3740# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3741 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, j, &
3742# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3743 & 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) &
3744# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3745 & - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0)))**1.4
3746# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3747 q_prim_vf(eqn_idx%mom%beg + 0)%sf(i, j, &
3748# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3749 & 0) = patch_icpp(1)%vel(1) + (y_cc(j) - patch_icpp(1)%y_centroid)*(5.0/(2.0*pi))*exp(1.0*(1.0 - (x_cc(i) &
3750# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3751 & - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0))
3752# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3753 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, &
3754# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3755 & 0) = patch_icpp(1)%vel(2) - (x_cc(i) - patch_icpp(1)%x_centroid)*(5.0/(2.0*pi))*exp(1.0*(1.0 - (x_cc(i) &
3756# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3757 & - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0))
3758# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3759 end if
3760# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3761 case (281) ! Acoustic pulse
3762# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3763 ! This is patch is hard-coded for test suite optimization used in the 2D_acoustic_pulse case: This analytic patch uses
3764# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3765 ! geometry 2
3766# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3767 if (patch_id == 2) then
3768# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3769 q_prim_vf(eqn_idx%E)%sf(i, j, &
3770# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3771 & 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))
3772# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3773 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, j, &
3774# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3775 & 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))
3776# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3777 end if
3778# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3779 case (282) ! Zero-circulation vortex
3780# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3781 ! This is patch is hard-coded for test suite optimization used in the 2D_zero_circ_vortex case: This analytic patch uses
3782# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3783 ! geometry 2
3784# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3785 if (patch_id == 2) then
3786# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3787 q_prim_vf(eqn_idx%E)%sf(i, j, &
3788# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3789 & 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))
3790# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3791 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, j, &
3792# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3793 & 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))
3794# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3795 q_prim_vf(eqn_idx%mom%beg + 0)%sf(i, j, &
3796# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3797 & 0) = 112.99092883944267*(1 - (0.1/0.3))*y_cc(j)*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2)))
3798# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3799 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, &
3800# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3801 & 0) = 112.99092883944267*((0.1/0.3))*x_cc(i)*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2)))
3802# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3803 end if
3804# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3805 case (283) ! Isentropic vortex: conserved-variable GL cell averages (3-pt tensor product)
3806# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3807 ! GL averages of conserved variables (rho, rho*u, rho*v, E) eliminate the O(h^2) error that primitive-variable averaging
3808# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3809 ! introduces through the nonlinear prim->cons conversion: cell_avg(rho*u) != cell_avg(rho)*cell_avg(u) by O(h^2). We back
3810# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3811 ! out primitive values that reproduce the conserved averages exactly. Vortex strength eps is read from
3812# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3813 ! patch_icpp(patch_id)%epsilon; defaults to 5.
3814# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3815 if (patch_id == 1) then
3816# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3817 vortex_eps = merge(patch_icpp(patch_id)%epsilon, 5._wp, patch_icpp(patch_id)%epsilon > 0._wp)
3818# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3819 gauss_xi = [-sqrt(3._wp/5._wp), 0._wp, sqrt(3._wp/5._wp)]
3820# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3821 gauss_w = [5._wp/9._wp, 8._wp/9._wp, 5._wp/9._wp]
3822# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3823 rho_avg = 0._wp; rhou_avg = 0._wp; rhov_avg = 0._wp; e_avg = 0._wp
3824# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3825 do igq = 1, 3
3826# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3827 do jgq = 1, 3
3828# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3829 xq = x_cc(i) + gauss_xi(igq)*(x_cb(i) - x_cb(i - 1))*0.5_wp
3830# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3831 yq = y_cc(j) + gauss_xi(jgq)*(y_cb(j) - y_cb(j - 1))*0.5_wp
3832# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3833 r2q = (xq - patch_icpp(patch_id)%x_centroid)**2._wp + (yq - patch_icpp(patch_id)%y_centroid)**2._wp
3834# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3835 t_facq = 1._wp - (vortex_eps/(2._wp*pi))*(vortex_eps/(8._wp*(1.4_wp + 1._wp)*pi))*exp(2._wp*(1._wp - r2q))
3836# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3837 wq = gauss_w(igq)*gauss_w(jgq)
3838# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3839 rhoq = t_facq**1.4_wp
3840# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3841 pq = t_facq**2.4_wp
3842# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3843 uq = patch_icpp(patch_id)%vel(1) + (yq - patch_icpp(patch_id)%y_centroid)*(vortex_eps/(2._wp*pi))*exp(1._wp &
3844# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3845 & - r2q)
3846# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3847 vq = patch_icpp(patch_id)%vel(2) - (xq - patch_icpp(patch_id)%x_centroid)*(vortex_eps/(2._wp*pi))*exp(1._wp &
3848# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3849 & - r2q)
3850# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3851 eq = pq/0.4_wp + 0.5_wp*rhoq*(uq**2 + vq**2)
3852# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3853 rho_avg = rho_avg + wq*rhoq
3854# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3855 rhou_avg = rhou_avg + wq*(rhoq*uq)
3856# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3857 rhov_avg = rhov_avg + wq*(rhoq*vq)
3858# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3859 e_avg = e_avg + wq*eq
3860# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3861 end do
3862# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3863 end do
3864# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3865 rho_avg = rho_avg*0.25_wp
3866# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3867 rhou_avg = rhou_avg*0.25_wp
3868# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3869 rhov_avg = rhov_avg*0.25_wp
3870# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3871 e_avg = e_avg*0.25_wp
3872# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3873 ! Back out primitive vars so prim->cons conversion recovers the conserved averages
3874# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3875 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = rho_avg
3876# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3877 q_prim_vf(eqn_idx%mom%beg + 0)%sf(i, j, 0) = rhou_avg/rho_avg
3878# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3879 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = rhov_avg/rho_avg
3880# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3881 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = (e_avg - 0.5_wp*(rhou_avg**2 + rhov_avg**2)/rho_avg)*0.4_wp
3882# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3883 end if
3884# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3885 case (291) ! Isothermal Flat Plate
3886# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3887 t_inf = 1125.0_wp
3888# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3889 t_wall = 600.0_wp
3890# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3891 p_atm = 101325.0_wp
3892# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3893
3894# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3895 ! Boundary/Shear Layer thicknesses
3896# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3897 delta_th = 0.0003_wp ! Thermal BL thickness
3898# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3899 delta_shear = 8e-3_wp ! Velocity BL thickness
3900# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3901
3902# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3903 u_max = 50.0_wp ! Freestream Velocity (m/s)
3904# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3905
3906# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3907 mw_n2 = 28.0134e-3_wp
3908# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3909 mw_o2 = 31.999e-3_wp
3910# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3911 y_n2 = 0.767_wp
3912# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3913 y_o2 = 0.233_wp
3914# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3915 r_mix = 8.314462618_wp*((y_n2/mw_n2) + (y_o2/mw_o2))
3916# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3917 bottom_blend_u = tanh(y_cc(j)/delta_shear)
3918# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3919 bottom_blend_t = tanh(y_cc(j)/delta_th)
3920# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3921 u_mean = u_max*bottom_blend_u
3922# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3923 t_loc = t_wall + (t_inf - t_wall)*bottom_blend_t
3924# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3925 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = p_atm/(r_mix*t_loc)
3926# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3927 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = u_mean
3928# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3929 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
3930# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3931 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p_atm
3932# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3933 q_prim_vf(eqn_idx%species%beg)%sf(i, j, 0) = y_o2
3934# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3935 q_prim_vf(eqn_idx%species%end)%sf(i, j, 0) = y_n2
3936# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3937 case default
3938# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3939 if (proc_rank == 0) then
3940# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3941 call s_int_to_str(patch_id, istr)
3942# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3943 call s_mpi_abort("Invalid hcid specified for patch " // trim(istr))
3944# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3945 end if
3946# 275 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3947 end select
3948 end if
3949
3950 ! Updating the patch identities bookkeeping variable
3951 if (1._wp - eta < sgm_eps) patch_id_fp(i, j, 0) = patch_id
3952 end if
3953 end do
3954 end do
3955 if (allocated(stored_values)) then
3956# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3957#ifdef MFC_DEBUG
3958# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3959 block
3960# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3961 use iso_fortran_env, only: output_unit
3962# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3963
3964# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3965 print *, 'm_icpp_patches.fpp:283: ', '@:DEALLOCATE(stored_values)'
3966# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3967
3968# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3969 call flush (output_unit)
3970# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3971 end block
3972# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3973#endif
3974# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3975
3976# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3977#if defined(MFC_OpenACC)
3978# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3979!$acc exit data delete(stored_values)
3980# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3981#elif defined(MFC_OpenMP)
3982# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3983!$omp target exit data map(release:stored_values)
3984# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3985#endif
3986# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3987 deallocate (stored_values)
3988# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3989#ifdef MFC_DEBUG
3990# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3991 block
3992# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3993 use iso_fortran_env, only: output_unit
3994# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3995
3996# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3997 print *, 'm_icpp_patches.fpp:283: ', '@:DEALLOCATE(x_coords)'
3998# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
3999
4000# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4001 call flush (output_unit)
4002# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4003 end block
4004# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4005#endif
4006# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4007
4008# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4009#if defined(MFC_OpenACC)
4010# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4011!$acc exit data delete(x_coords)
4012# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4013#elif defined(MFC_OpenMP)
4014# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4015!$omp target exit data map(release:x_coords)
4016# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4017#endif
4018# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4019 deallocate (x_coords)
4020# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4021 end if
4022# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4023
4024# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4025 if (allocated(y_coords)) then
4026# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4027#ifdef MFC_DEBUG
4028# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4029 block
4030# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4031 use iso_fortran_env, only: output_unit
4032# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4033
4034# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4035 print *, 'm_icpp_patches.fpp:283: ', '@:DEALLOCATE(y_coords)'
4036# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4037
4038# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4039 call flush (output_unit)
4040# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4041 end block
4042# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4043#endif
4044# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4045
4046# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4047#if defined(MFC_OpenACC)
4048# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4049!$acc exit data delete(y_coords)
4050# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4051#elif defined(MFC_OpenMP)
4052# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4053!$omp target exit data map(release:y_coords)
4054# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4055#endif
4056# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4057 deallocate (y_coords)
4058# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4059 end if
4060# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4061
4062# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4063 files_loaded = .false.
4064# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4065
4066# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4067 if (allocated(stored_values274)) then
4068# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4069#ifdef MFC_DEBUG
4070# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4071 block
4072# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4073 use iso_fortran_env, only: output_unit
4074# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4075
4076# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4077 print *, 'm_icpp_patches.fpp:283: ', '@:DEALLOCATE(stored_values274)'
4078# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4079
4080# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4081 call flush (output_unit)
4082# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4083 end block
4084# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4085#endif
4086# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4087
4088# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4089#if defined(MFC_OpenACC)
4090# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4091!$acc exit data delete(stored_values274)
4092# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4093#elif defined(MFC_OpenMP)
4094# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4095!$omp target exit data map(release:stored_values274)
4096# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4097#endif
4098# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4099 deallocate (stored_values274)
4100# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4101 end if
4102# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4103
4104# 283 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4105 files_loaded274 = .false.
4106
4107 end subroutine s_icpp_spiral
4108
4109 !> The circular patch is a 2D geometry that may be used, for example, in creating a bubble or a droplet. The geometry of the
4110 !! patch is well-defined when its centroid and radius are provided. Note that the circular patch DOES allow for the smoothing of
4111 !! its boundary.
4112 subroutine s_icpp_circle(patch_id, patch_id_fp, q_prim_vf)
4113
4114 integer, intent(in) :: patch_id
4115
4116#ifdef MFC_MIXED_PRECISION
4117 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
4118#else
4119 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
4120#endif
4121 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
4122 real(wp) :: radius
4123 integer :: i, j, k !< Generic loop iterators
4124
4125 integer :: xRows, yRows, nRows, iix, iiy, max_files
4126# 303 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4127 integer :: f, iter, unit, unit2, idx, idy, index_x, index_y, jump, line_count
4128# 303 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4129 real(wp) :: x_step, y_step
4130# 303 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4131 real(wp) :: dummy_x, dummy_y, dummy_z, x0, y0
4132# 303 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4133 integer :: global_offset_x, global_offset_y !< MPI subdomain offset
4134# 303 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4135 real(wp) :: delta_x, delta_y
4136# 303 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4137 character(len=300), dimension(sys_size) :: fileNames !< Arrays to store all data from files
4138# 303 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4139 real(wp), allocatable :: stored_values(:,:,:)
4140# 303 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4141 real(wp), allocatable :: x_coords(:), y_coords(:)
4142# 303 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4143 logical :: files_loaded = .false.
4144# 303 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4145 real(wp) :: domain_xstart
4146# 303 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4147 character(len=20) :: file_num_str !< For storing the file number as a string
4148# 303 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4149 integer :: ios
4150# 303 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4151 integer :: ios2
4152# 303 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4153
4154# 303 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4155 ! hcid=274 (2dHardcodedIC.fpp): full 2D field from external data, no extrusion.
4156# 303 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4157 ! Declared here (not in Hardcoded2DVariables()) so it's visible wherever
4158# 303 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4159 ! HardcodedDeallocation() is called, matching the pattern of stored_values/x_coords/
4160# 303 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4161 ! y_coords/files_loaded above.
4162# 303 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4163 real(wp), allocatable, dimension(:,:,:) :: stored_values274
4164# 303 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4165 logical :: files_loaded274 = .false.
4166# 303 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4167 integer :: f274, ix274, iy274, unit274, ios274
4168# 303 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4169 integer :: local_ix_beg274, local_iy_beg274
4170# 303 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4171 character(len=300) :: fname274
4172# 303 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4173 character(len=20) :: file_num_str274
4174# 303 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4175 real(wp) :: dummy_x274, dummy_y274, dummy_val274, x0_274, y0_274, x_step274, y_step274
4176# 303 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4177 real(wp) :: file_dx274, file_dy274, r_align274
4178 ! Place any declaration of intermediate variables here
4179# 304 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4180 real(wp) :: eps, eps_mhd, C_mhd
4181# 304 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4182 real(wp) :: r, rmax, gam, umax, p0
4183# 304 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4184 real(wp) :: rhoH, rhoL, pRef, pInt, h, lam, wl, amp, intH, intL, alph
4185# 304 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4186 real(wp) :: factor, x1c, y1c, x2c, y2c, r1c, r2c, cvortex, u1c, u2c, v1c, v2c, rvortex
4187# 304 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4188 real(wp) :: r0, alpha, r2
4189# 304 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4190 real(wp) :: sinA, cosA
4191# 304 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4192 real(wp) :: r_sq
4193# 304 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4194
4195# 304 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4196 ! # 283 - Gauss-averaged isentropic vortex (conserved-variable cell averages)
4197# 304 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4198 real(wp) :: gauss_xi(3), gauss_w(3), xq, yq, r2q, T_facq, wq
4199# 304 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4200 real(wp) :: rho_avg, rhou_avg, rhov_avg, E_avg
4201# 304 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4202 real(wp) :: rhoq, pq, uq, vq, Eq, vortex_eps
4203# 304 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4204 integer :: igq, jgq
4205# 304 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4206
4207# 304 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4208 ! # 291 - Shear/Thermal Layer Case
4209# 304 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4210 real(wp) :: delta_shear, u_max, u_mean
4211# 304 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4212 real(wp) :: T_wall, T_inf, P_atm, T_loc
4213# 304 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4214 real(wp) :: delta_th, R_mix
4215# 304 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4216 real(wp) :: Y_N2, Y_O2, MW_N2, MW_O2
4217# 304 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4218 real(wp) :: bottom_blend_u, bottom_blend_T
4219# 304 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4220
4221# 304 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4222 ! # 207
4223# 304 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4224 real(wp) :: sigma, gauss1, gauss2
4225# 304 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4226
4227# 304 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4228 ! # 208
4229# 304 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4230 real(wp) :: ei, d, fsm, alpha_air, alpha_sf6
4231# 304 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4232 real(wp) :: y_center, y_dist, wave_phase, front_shift, x_mapped, interp_wt
4233# 304 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4234 integer :: v, idx_lo, idx_hi, idx_mid
4235# 304 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4236 real(wp), parameter :: Ly_param = 0.00775735_wp
4237# 304 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4238 real(wp), parameter :: A_param = 0.1_wp*96.9880867_wp*10.0_wp**(-6.0_wp)
4239# 304 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4240 integer, parameter :: Nwaves = 6
4241# 304 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4242 real(wp), parameter :: y0_ref = 0.0_wp
4243# 304 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4244
4245# 304 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4246 eps = 1.e-9_wp
4247
4248 ! Transferring the circular patch's radius, centroid, smearing patch identity and smearing coefficient information
4249
4250 x_centroid = patch_icpp(patch_id)%x_centroid
4251 y_centroid = patch_icpp(patch_id)%y_centroid
4252 radius = patch_icpp(patch_id)%radius
4253 smooth_patch_id = patch_icpp(patch_id)%smooth_patch_id
4254 smooth_coeff = patch_icpp(patch_id)%smooth_coeff
4255
4256 ! Initialize eta=1; modified if smoothing is enabled
4257 eta = 1._wp
4258
4259 ! Assign patch vars if cell is covered and patch has write permission
4260
4261 do j = 0, n
4262 do i = 0, m
4263 if (patch_icpp(patch_id)%smoothen) then
4264 ! Smooth Heaviside via hyperbolic tangent; smooth_coeff controls interface sharpness
4265 eta = tanh(smooth_coeff/min(dx, &
4266 & dy)*(sqrt((x_cc(i) - x_centroid)**2 + (y_cc(j) - y_centroid)**2) - radius))*(-0.5_wp) + 0.5_wp
4267 end if
4268
4269 if ((f_is_inside_cylinder(x_cc(i) - x_centroid, y_cc(j) - y_centroid, 0._wp, radius, &
4270 & 0._wp) .and. patch_icpp(patch_id)%alter_patch(patch_id_fp(i, j, 0))) .or. patch_id_fp(i, j, &
4271 & 0) == smooth_patch_id) then
4272 call s_assign_patch_primitive_variables(patch_id, i, j, 0, eta, q_prim_vf, patch_id_fp)
4273
4274
4275 if (patch_icpp(patch_id)%hcid /= dflt_int) then
4276 select case (patch_icpp(patch_id)%hcid) ! 2D_hardcoded_ic example case
4277# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4278 case (200) ! Two-fluid cubic interface
4279# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4280 if (y_cc(j) <= (-x_cc(i)**3 + 1)**(1._wp/3._wp)) then
4281# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4282 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = eps
4283# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4284 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = 1._wp - eps
4285# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4286 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = eps*1000._wp
4287# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4288 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = (1._wp - eps)*1._wp
4289# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4290 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1000._wp
4291# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4292 end if
4293# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4294 case (202) ! Gresho vortex (Gouasmi et al 2022 JCP)
4295# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4296 r = ((x_cc(i) - 0.5_wp)**2 + (y_cc(j) - 0.5_wp)**2)**0.5_wp
4297# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4298 rmax = 0.2_wp
4299# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4300
4301# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4302 gam = 1._wp + 1._wp/fluid_pp(1)%gamma
4303# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4304 umax = 2*pi*rmax*patch_icpp(patch_id)%vel(2)
4305# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4306 p0 = umax**2*(1._wp/(gam*patch_icpp(patch_id)%vel(2)**2) - 0.5_wp)
4307# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4308
4309# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4310 if (r < rmax) then
4311# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4312 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -(y_cc(j) - 0.5_wp)*umax/rmax
4313# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4314 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = (x_cc(i) - 0.5_wp)*umax/rmax
4315# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4316 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*((r/rmax)**2._wp/2._wp)
4317# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4318 else if (r < 2*rmax) then
4319# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4320 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -((y_cc(j) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
4321# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4322 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = ((x_cc(i) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
4323# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4324 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)))
4325# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4326 else
4327# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4328 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 0._wp
4329# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4330 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0._wp
4331# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4332 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*(-2 + 4*log(2._wp))
4333# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4334 end if
4335# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4336 case (203) ! Gresho vortex (Gouasmi et al 2022 JCP) with density correction
4337# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4338 r = ((x_cc(i) - 0.5_wp)**2._wp + (y_cc(j) - 0.5_wp)**2)**0.5_wp
4339# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4340 rmax = 0.2_wp
4341# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4342
4343# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4344 gam = 1._wp + 1._wp/fluid_pp(1)%gamma
4345# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4346 umax = 2*pi*rmax*patch_icpp(patch_id)%vel(2)
4347# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4348 p0 = umax**2*(1._wp/(gam*patch_icpp(patch_id)%vel(2)**2) - 0.5_wp)
4349# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4350
4351# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4352 if (r < rmax) then
4353# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4354 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -(y_cc(j) - 0.5_wp)*umax/rmax
4355# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4356 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = (x_cc(i) - 0.5_wp)*umax/rmax
4357# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4358 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*((r/rmax)**2._wp/2._wp)
4359# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4360 else if (r < 2*rmax) then
4361# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4362 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -((y_cc(j) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
4363# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4364 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = ((x_cc(i) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
4365# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4366 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)))
4367# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4368 else
4369# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4370 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 0._wp
4371# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4372 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0._wp
4373# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4374 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2._wp*(-2._wp + 4*log(2._wp))
4375# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4376 end if
4377# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4378
4379# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4380 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = q_prim_vf(eqn_idx%E)%sf(i, j, 0)**(1._wp/gam)
4381# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4382 case (204) ! Rayleigh-Taylor instability
4383# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4384 rhoh = 3._wp
4385# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4386 rhol = 1._wp
4387# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4388 pref = 1.e5_wp
4389# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4390 pint = pref
4391# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4392 h = 0.7_wp
4393# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4394 lam = 0.2_wp
4395# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4396 wl = 2._wp*pi/lam
4397# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4398 amp = 0.05_wp/wl
4399# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4400
4401# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4402 inth = amp*sin(2._wp*pi*x_cc(i)/lam - pi/2._wp) + h
4403# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4404
4405# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4406 alph = 0.5_wp*(1._wp + tanh((y_cc(j) - inth)/2.5e-3_wp))
4407# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4408
4409# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4410 if (alph < eps) alph = eps
4411# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4412 if (alph > 1._wp - eps) alph = 1._wp - eps
4413# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4414
4415# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4416 if (y_cc(j) > inth) then
4417# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4418 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = alph
4419# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4420 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = 1._wp - alph
4421# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4422 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = alph*rhoh
4423# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4424 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = (1._wp - alph)*rhol
4425# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4426 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = pref + rhoh*9.81_wp*(1.2_wp - y_cc(j))
4427# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4428 else
4429# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4430 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = alph
4431# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4432 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = 1._wp - alph
4433# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4434 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = alph*rhoh
4435# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4436 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = (1._wp - alph)*rhol
4437# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4438 pint = pref + rhoh*9.81_wp*(1.2_wp - inth)
4439# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4440 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = pint + rhol*9.81_wp*(inth - y_cc(j))
4441# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4442 end if
4443# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4444 case (205) ! 2D lung wave interaction problem
4445# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4446 h = 0.0_wp ! non dim origin y
4447# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4448 lam = 1.0_wp ! non dim lambda
4449# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4450 amp = patch_icpp(patch_id)%a(2) ! to be changed later! !non dim amplitude
4451# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4452
4453# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4454 inth = amp*sin(2*pi*x_cc(i)/lam - pi/2) + h
4455# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4456
4457# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4458 if (y_cc(j) > inth) then
4459# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4460 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(1)
4461# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4462 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(2)
4463# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4464 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = patch_icpp(1)%pres
4465# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4466 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = patch_icpp(1)%alpha(1)
4467# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4468 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = patch_icpp(1)%alpha(2)
4469# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4470 end if
4471# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4472 case (206) ! 2D lung wave interaction problem - horizontal domain
4473# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4474 h = 0.0_wp ! non dim origin y
4475# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4476 lam = 1.0_wp ! non dim lambda
4477# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4478 amp = patch_icpp(patch_id)%a(2)
4479# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4480
4481# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4482 intl = amp*sin(2*pi*y_cc(j)/lam - pi/2) + h
4483# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4484
4485# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4486 if (x_cc(i) > intl) then ! this is the liquid
4487# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4488 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(1)
4489# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4490 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(2)
4491# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4492 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = patch_icpp(1)%pres
4493# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4494 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = patch_icpp(1)%alpha(1)
4495# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4496 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = patch_icpp(1)%alpha(2)
4497# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4498 end if
4499# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4500 case (207) ! Kelvin Helmholtz Instability
4501# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4502 sigma = 0.05_wp/sqrt(2.0_wp)
4503# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4504 gauss1 = exp(-(y_cc(j) - 0.75_wp)**2/(2.0_wp*sigma**2))
4505# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4506 gauss2 = exp(-(y_cc(j) - 0.25_wp)**2/(2.0_wp*sigma**2))
4507# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4508 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)
4509# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4510 case (208) ! Richtmeyer Meshkov Instability
4511# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4512 lam = 1.0_wp
4513# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4514 eps = 1.0e-6_wp
4515# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4516 ei = 5.0_wp
4517# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4518 ! Smoothening function to smooth out sharp discontinuity in the interface
4519# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4520 if (x_cc(i) <= 0.7_wp*lam) then
4521# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4522 d = x_cc(i) - lam*(0.4_wp - 0.1_wp*sin(2.0_wp*pi*(y_cc(j)/lam + 0.25_wp)))
4523# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4524 fsm = 0.5_wp*(1.0_wp + erf(d/(ei*sqrt(dx*dy))))
4525# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4526 alpha_air = eps + (1.0_wp - 2.0_wp*eps)*fsm
4527# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4528 alpha_sf6 = 1.0_wp - alpha_air
4529# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4530 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = alpha_sf6*5.04_wp
4531# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4532 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = alpha_air*1.0_wp
4533# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4534 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = alpha_sf6
4535# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4536 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = alpha_air
4537# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4538 end if
4539# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4540 case (250) ! MHD Orszag-Tang vortex
4541# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4542 ! 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),
4543# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4544 ! sin(4*pi*x)/sqrt(4*pi), 0)
4545# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4546
4547# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4548 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -sin(2._wp*pi*y_cc(j))
4549# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4550 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = sin(2._wp*pi*x_cc(i))
4551# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4552
4553# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4554 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = -sin(2._wp*pi*y_cc(j))/sqrt(4._wp*pi)
4555# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4556 q_prim_vf(eqn_idx%B%beg + 1)%sf(i, j, 0) = sin(4._wp*pi*x_cc(i))/sqrt(4._wp*pi)
4557# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4558 case (251) ! RMHD Cylindrical Blast Wave [Mignone, 2006: Section 4.3.1]
4559# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4560 if (x_cc(i)**2 + y_cc(j)**2 < 0.08_wp**2) then
4561# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4562 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 0.01
4563# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4564 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1.0
4565# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4566 else if (x_cc(i)**2 + y_cc(j)**2 <= 1._wp**2) then
4567# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4568 ! Linear interpolation between r=0.08 and r=1.0
4569# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4570 factor = (1.0_wp - sqrt(x_cc(i)**2 + y_cc(j)**2))/(1.0_wp - 0.08_wp)
4571# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4572 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 0.01_wp*factor + 1.e-4_wp*(1.0_wp - factor)
4573# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4574 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1.0_wp*factor + 3.e-5_wp*(1.0_wp - factor)
4575# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4576 else
4577# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4578 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1.e-4_wp
4579# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4580 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 3.e-5_wp
4581# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4582 end if
4583# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4584
4585# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4586 ! case 252 is for the 2D MHD Rotor problem
4587# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4588 case (252) ! 2D MHD Rotor Problem
4589# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4590 ! Ambient conditions are set in the JSON file. This case imposes the dense, rotating cylinder.
4591# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4592 !
4593# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4594 ! 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
4595# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4596 ! velocity w=20, giving v_tan=2 at r=0.1
4597# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4598
4599# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4600 ! Calculate distance squared from the center
4601# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4602 r_sq = (x_cc(i) - 0.5_wp)**2 + (y_cc(j) - 0.5_wp)**2
4603# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4604
4605# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4606 ! inner radius of 0.1
4607# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4608 if (r_sq <= 0.1**2) then
4609# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4610 ! -- Inside the rotor -- Set density uniformly to 10
4611# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4612 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 10._wp
4613# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4614
4615# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4616 ! Set vup constant rotation of rate v=2 v_x = -omega * (y - y_c) v_y = omega * (x - x_c)
4617# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4618 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -20._wp*(y_cc(j) - 0.5_wp)
4619# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4620 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = 20._wp*(x_cc(i) - 0.5_wp)
4621# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4622
4623# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4624 ! taper width of 0.015
4625# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4626 else if (r_sq <= 0.115**2) then
4627# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4628 ! linearly smooth the function between r = 0.1 and 0.115
4629# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4630 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1._wp + 9._wp*(0.115_wp - sqrt(r_sq))/(0.015_wp)
4631# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4632
4633# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4634 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)
4635# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4636 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)
4637# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4638 end if
4639# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4640 case (253) ! MHD Smooth Magnetic Vortex
4641# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4642 ! Section 5.2 of Implicit hybridized discontinuous Galerkin methods for compressible magnetohydrodynamics C. Ciuca, P.
4643# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4644 ! Fernandez, A. Christophe, N.C. Nguyen, J. Peraire
4645# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4646
4647# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4648 ! velocity
4649# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4650 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))
4651# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4652 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))
4653# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4654
4655# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4656 ! magnetic field
4657# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4658 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)
4659# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4660 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)
4661# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4662
4663# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4664 ! pressure
4665# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4666 q_prim_vf(eqn_idx%E)%sf(i, j, &
4667# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4668 & 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)
4669# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4670 case (260) ! Gaussian Divergence Pulse
4671# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4672 ! Bx(x) = 1 + C * erf((x-0.5)/\sigma) => \partialBx/\partialx = C * (2/\sqrt\pi) * exp[-((x-0.5)/\sigma)**2] * (1/\sigma)
4673# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4674 ! Choose C = \epsilon * \sigma * \sqrt\pi / 2 => \partialBx/\partialx = \epsilon * exp[-((x-0.5)/\sigma)**2] \psi is
4675# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4676 ! initialized to zero everywhere.
4677# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4678
4679# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4680 eps_mhd = patch_icpp(patch_id)%a(2)
4681# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4682 sigma = patch_icpp(patch_id)%a(3)
4683# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4684 c_mhd = eps_mhd*sigma*sqrt(pi)*0.5_wp
4685# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4686
4687# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4688 ! B-field
4689# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4690 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = 1._wp + c_mhd*erf((x_cc(i) - 0.5_wp)/sigma)
4691# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4692 case (261) ! Blob
4693# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4694 r0 = 1._wp/sqrt(8._wp)
4695# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4696 r2 = x_cc(i)**2 + y_cc(j)**2
4697# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4698 r = sqrt(r2)
4699# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4700 alpha = r/r0
4701# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4702 if (alpha < 1) then
4703# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4704 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)
4705# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4706 ! 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)
4707# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4708 ! q_prim_vf(eqn_idx%B%beg)%sf(i,j,0) = 1._wp/(4._wp*pi) * (alpha**8 - 2._wp*alpha**4 + 1._wp)
4709# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4710 ! 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
4711# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4712 end if
4713# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4714 case (262) ! Tilted 2D MHD shock-tube at \alpha = arctan2 (\approx63.4 deg)
4715# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4716 ! rotate by \alpha = atan(2)
4717# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4718 alpha = atan(2._wp)
4719# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4720 cosa = cos(alpha)
4721# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4722 sina = sin(alpha)
4723# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4724 ! projection along shock normal
4725# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4726 r = x_cc(i)*cosa + y_cc(j)*sina
4727# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4728
4729# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4730 if (r <= 0.5_wp) then
4731# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4732 ! LEFT state: \rho=1, v\parallel=+10, v\perp=0, p=20, B\parallel=B\perp=5/\sqrt(4\pi)
4733# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4734 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1._wp
4735# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4736 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 10._wp*cosa
4737# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4738 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = 10._wp*sina
4739# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4740 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 20._wp
4741# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4742 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
4743# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4744 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
4745# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4746 else
4747# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4748 ! RIGHT state: \rho=1, v\parallel=-10, v\perp=0, p=1, B\parallel=B\perp=5/\sqrt(4\pi)
4749# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4750 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1._wp
4751# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4752 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -10._wp*cosa
4753# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4754 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = -10._wp*sina
4755# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4756 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1._wp
4757# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4758 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
4759# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4760 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
4761# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4762 end if
4763# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4764 ! v^z and B^z remain zero by default
4765# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4766 case (270) ! 2D extrusion of 1D profile from external data
4767# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4768 ! This hardcoded case extrudes a 1D profile to initialize a 2D simulation domain
4769# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4770 if (.not. files_loaded) then
4771# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4772 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
4773# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4774 do f = 1, max_files
4775# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4776 write (file_num_str, '(I0)') f
4777# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4778 filenames(f) = trim(files_dir) // "/" // "prim." // trim(file_num_str) // ".00." // trim(file_extension) // ".dat"
4779# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4780 end do
4781# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4782
4783# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4784 ! Common file reading setup
4785# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4786 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
4787# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4788 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
4789# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4790
4791# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4792 select case (num_dims)
4793# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4794 case (1, 2) ! 1D and 2D cases are similar
4795# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4796 ! Count lines
4797# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4798 line_count = 0
4799# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4800 do
4801# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4802 read (unit2, *, iostat=ios2) dummy_x, dummy_y
4803# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4804 if (ios2 /= 0) exit
4805# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4806 line_count = line_count + 1
4807# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4808 end do
4809# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4810 close (unit2)
4811# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4812
4813# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4814 xrows = line_count
4815# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4816 yrows = 1
4817# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4818 index_x = 0
4819# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4820 if (num_dims == 2) index_x = i
4821# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4822#ifdef MFC_DEBUG
4823# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4824 block
4825# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4826 use iso_fortran_env, only: output_unit
4827# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4828
4829# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4830 print *, 'm_icpp_patches.fpp:334: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
4831# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4832
4833# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4834 call flush (output_unit)
4835# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4836 end block
4837# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4838#endif
4839# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4840 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
4841# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4842
4843# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4844
4845# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4846
4847# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4848#if defined(MFC_OpenACC)
4849# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4850!$acc enter data create(x_coords, stored_values)
4851# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4852#elif defined(MFC_OpenMP)
4853# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4854!$omp target enter data map(always,alloc:x_coords, stored_values)
4855# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4856#endif
4857# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4858
4859# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4860 ! Read data from all files
4861# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4862 do f = 1, max_files
4863# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4864 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
4865# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4866 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
4867# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4868
4869# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4870 do iter = 1, xrows
4871# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4872 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
4873# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4874 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
4875# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4876 end do
4877# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4878 close (unit)
4879# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4880 end do
4881# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4882
4883# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4884 ! Calculate offsets
4885# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4886 domain_xstart = x_coords(1)
4887# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4888 x_step = x_cc(1) - x_cc(0)
4889# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4890 delta_x = merge(x_cc(0) - domain_xstart, x_cc(index_x) - domain_xstart, num_dims == 1)
4891# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4892 global_offset_x = nint(abs(delta_x)/x_step)
4893# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4894 case (3) ! 3D case - determine grid structure
4895# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4896 ! Find yRows by counting rows with same x
4897# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4898 read (unit2, *, iostat=ios2) x0, y0, dummy_z
4899# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4900 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
4901# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4902
4903# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4904 yrows = 1
4905# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4906 do
4907# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4908 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
4909# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4910 if (ios2 /= 0) exit
4911# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4912 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
4913# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4914 yrows = yrows + 1
4915# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4916 else
4917# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4918 exit
4919# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4920 end if
4921# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4922 end do
4923# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4924 close (unit2)
4925# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4926
4927# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4928 ! Count total rows
4929# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4930 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
4931# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4932 nrows = 0
4933# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4934 do
4935# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4936 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
4937# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4938 if (ios2 /= 0) exit
4939# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4940 nrows = nrows + 1
4941# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4942 end do
4943# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4944 close (unit2)
4945# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4946
4947# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4948 xrows = nrows/yrows
4949# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4950#ifdef MFC_DEBUG
4951# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4952 block
4953# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4954 use iso_fortran_env, only: output_unit
4955# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4956
4957# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4958 print *, 'm_icpp_patches.fpp:334: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
4959# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4960
4961# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4962 call flush (output_unit)
4963# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4964 end block
4965# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4966#endif
4967# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4968 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
4969# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4970
4971# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4972
4973# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4974
4975# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4976
4977# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4978#if defined(MFC_OpenACC)
4979# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4980!$acc enter data create(x_coords, y_coords, stored_values)
4981# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4982#elif defined(MFC_OpenMP)
4983# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4984!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
4985# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4986#endif
4987# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4988 index_x = i
4989# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4990 index_y = j
4991# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4992
4993# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4994 ! Read all files
4995# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4996 do f = 1, max_files
4997# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
4998 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
4999# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5000 if (ios /= 0) then
5001# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5002 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
5003# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5004 cycle
5005# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5006 end if
5007# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5008
5009# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5010 iter = 0
5011# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5012 do iix = 1, xrows
5013# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5014 do iiy = 1, yrows
5015# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5016 iter = iter + 1
5017# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5018 if (f == 1) then
5019# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5020 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
5021# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5022 else
5023# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5024 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
5025# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5026 end if
5027# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5028 if (ios /= 0) call s_mpi_abort("Error reading data")
5029# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5030 end do
5031# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5032 end do
5033# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5034 close (unit)
5035# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5036 end do
5037# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5038
5039# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5040 ! Calculate offsets
5041# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5042 x_step = x_cc(1) - x_cc(0)
5043# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5044 y_step = y_cc(1) - y_cc(0)
5045# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5046 delta_x = x_cc(index_x) - x_coords(1)
5047# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5048 delta_y = y_cc(index_y) - y_coords(1)
5049# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5050 global_offset_x = nint(abs(delta_x)/x_step)
5051# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5052 global_offset_y = nint(abs(delta_y)/y_step)
5053# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5054 end select
5055# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5056
5057# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5058 files_loaded = .true.
5059# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5060 end if
5061# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5062
5063# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5064 ! Data assignment
5065# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5066 select case (num_dims)
5067# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5068 case (1)
5069# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5070 idx = i + 1 + global_offset_x
5071# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5072 ! idx must land inside the file's row range: this rank's subdomain offset
5073# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5074 ! (global_offset_x) was derived from this rank's own grid, so a miss means the
5075# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5076 ! IC file is misaligned/mis-sized for the run grid, not a normal boundary case.
5077# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5078 if (idx < 1 .or. idx > xrows) &
5079# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5080 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
5081# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5082 do f = 1, sys_size
5083# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5084 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
5085# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5086 end do
5087# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5088 case (2)
5089# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5090 idx = i + 1 + global_offset_x - index_x
5091# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5092 if (idx < 1 .or. idx > xrows) &
5093# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5094 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
5095# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5096 do f = 1, sys_size - 1
5097# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5098 jump = merge(1, 0, f >= eqn_idx%mom%end)
5099# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5100 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
5101# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5102 end do
5103# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5104 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
5105# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5106 case (3)
5107# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5108 idx = i + 1 + global_offset_x - index_x
5109# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5110 idy = j + 1 + global_offset_y - index_y
5111# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5112 if (idx < 1 .or. idx > xrows .or. idy < 1 .or. idy > yrows) &
5113# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5114 & call s_mpi_abort("Hardcoded IC extrusion: row/column index out of range (IC file misaligned with the run grid)")
5115# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5116 do f = 1, sys_size - 1
5117# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5118 jump = merge(1, 0, f >= eqn_idx%mom%end)
5119# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5120 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
5121# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5122 end do
5123# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5124 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
5125# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5126 end select
5127# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5128 case (273) ! Temporal reacting mixing layer: 2D extrusion + streamwise velocity
5129# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5130 ! @:HardcodedReadValues() always zeros mom%end (the extruded-axis velocity).
5131# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5132 ! The mom%beg file slot is repurposed to carry the streamwise-velocity-vs-
5133# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5134 ! cross-stream-position profile (real cross-stream velocity is legitimately
5135# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5136 ! zero everywhere in the unperturbed base state), so swap it into mom%end and
5137# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5138 ! zero out mom%beg's true physical value.
5139# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5140 if (.not. files_loaded) then
5141# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5142 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
5143# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5144 do f = 1, max_files
5145# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5146 write (file_num_str, '(I0)') f
5147# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5148 filenames(f) = trim(files_dir) // "/" // "prim." // trim(file_num_str) // ".00." // trim(file_extension) // ".dat"
5149# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5150 end do
5151# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5152
5153# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5154 ! Common file reading setup
5155# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5156 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
5157# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5158 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
5159# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5160
5161# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5162 select case (num_dims)
5163# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5164 case (1, 2) ! 1D and 2D cases are similar
5165# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5166 ! Count lines
5167# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5168 line_count = 0
5169# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5170 do
5171# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5172 read (unit2, *, iostat=ios2) dummy_x, dummy_y
5173# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5174 if (ios2 /= 0) exit
5175# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5176 line_count = line_count + 1
5177# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5178 end do
5179# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5180 close (unit2)
5181# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5182
5183# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5184 xrows = line_count
5185# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5186 yrows = 1
5187# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5188 index_x = 0
5189# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5190 if (num_dims == 2) index_x = i
5191# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5192#ifdef MFC_DEBUG
5193# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5194 block
5195# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5196 use iso_fortran_env, only: output_unit
5197# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5198
5199# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5200 print *, 'm_icpp_patches.fpp:334: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
5201# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5202
5203# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5204 call flush (output_unit)
5205# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5206 end block
5207# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5208#endif
5209# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5210 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
5211# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5212
5213# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5214
5215# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5216
5217# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5218#if defined(MFC_OpenACC)
5219# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5220!$acc enter data create(x_coords, stored_values)
5221# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5222#elif defined(MFC_OpenMP)
5223# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5224!$omp target enter data map(always,alloc:x_coords, stored_values)
5225# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5226#endif
5227# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5228
5229# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5230 ! Read data from all files
5231# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5232 do f = 1, max_files
5233# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5234 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
5235# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5236 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
5237# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5238
5239# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5240 do iter = 1, xrows
5241# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5242 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
5243# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5244 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
5245# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5246 end do
5247# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5248 close (unit)
5249# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5250 end do
5251# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5252
5253# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5254 ! Calculate offsets
5255# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5256 domain_xstart = x_coords(1)
5257# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5258 x_step = x_cc(1) - x_cc(0)
5259# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5260 delta_x = merge(x_cc(0) - domain_xstart, x_cc(index_x) - domain_xstart, num_dims == 1)
5261# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5262 global_offset_x = nint(abs(delta_x)/x_step)
5263# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5264 case (3) ! 3D case - determine grid structure
5265# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5266 ! Find yRows by counting rows with same x
5267# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5268 read (unit2, *, iostat=ios2) x0, y0, dummy_z
5269# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5270 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
5271# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5272
5273# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5274 yrows = 1
5275# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5276 do
5277# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5278 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
5279# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5280 if (ios2 /= 0) exit
5281# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5282 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
5283# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5284 yrows = yrows + 1
5285# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5286 else
5287# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5288 exit
5289# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5290 end if
5291# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5292 end do
5293# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5294 close (unit2)
5295# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5296
5297# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5298 ! Count total rows
5299# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5300 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
5301# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5302 nrows = 0
5303# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5304 do
5305# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5306 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
5307# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5308 if (ios2 /= 0) exit
5309# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5310 nrows = nrows + 1
5311# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5312 end do
5313# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5314 close (unit2)
5315# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5316
5317# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5318 xrows = nrows/yrows
5319# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5320#ifdef MFC_DEBUG
5321# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5322 block
5323# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5324 use iso_fortran_env, only: output_unit
5325# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5326
5327# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5328 print *, 'm_icpp_patches.fpp:334: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
5329# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5330
5331# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5332 call flush (output_unit)
5333# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5334 end block
5335# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5336#endif
5337# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5338 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
5339# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5340
5341# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5342
5343# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5344
5345# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5346
5347# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5348#if defined(MFC_OpenACC)
5349# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5350!$acc enter data create(x_coords, y_coords, stored_values)
5351# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5352#elif defined(MFC_OpenMP)
5353# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5354!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
5355# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5356#endif
5357# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5358 index_x = i
5359# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5360 index_y = j
5361# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5362
5363# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5364 ! Read all files
5365# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5366 do f = 1, max_files
5367# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5368 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
5369# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5370 if (ios /= 0) then
5371# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5372 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
5373# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5374 cycle
5375# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5376 end if
5377# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5378
5379# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5380 iter = 0
5381# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5382 do iix = 1, xrows
5383# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5384 do iiy = 1, yrows
5385# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5386 iter = iter + 1
5387# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5388 if (f == 1) then
5389# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5390 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
5391# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5392 else
5393# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5394 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
5395# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5396 end if
5397# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5398 if (ios /= 0) call s_mpi_abort("Error reading data")
5399# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5400 end do
5401# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5402 end do
5403# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5404 close (unit)
5405# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5406 end do
5407# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5408
5409# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5410 ! Calculate offsets
5411# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5412 x_step = x_cc(1) - x_cc(0)
5413# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5414 y_step = y_cc(1) - y_cc(0)
5415# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5416 delta_x = x_cc(index_x) - x_coords(1)
5417# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5418 delta_y = y_cc(index_y) - y_coords(1)
5419# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5420 global_offset_x = nint(abs(delta_x)/x_step)
5421# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5422 global_offset_y = nint(abs(delta_y)/y_step)
5423# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5424 end select
5425# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5426
5427# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5428 files_loaded = .true.
5429# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5430 end if
5431# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5432
5433# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5434 ! Data assignment
5435# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5436 select case (num_dims)
5437# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5438 case (1)
5439# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5440 idx = i + 1 + global_offset_x
5441# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5442 ! idx must land inside the file's row range: this rank's subdomain offset
5443# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5444 ! (global_offset_x) was derived from this rank's own grid, so a miss means the
5445# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5446 ! IC file is misaligned/mis-sized for the run grid, not a normal boundary case.
5447# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5448 if (idx < 1 .or. idx > xrows) &
5449# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5450 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
5451# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5452 do f = 1, sys_size
5453# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5454 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
5455# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5456 end do
5457# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5458 case (2)
5459# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5460 idx = i + 1 + global_offset_x - index_x
5461# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5462 if (idx < 1 .or. idx > xrows) &
5463# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5464 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
5465# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5466 do f = 1, sys_size - 1
5467# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5468 jump = merge(1, 0, f >= eqn_idx%mom%end)
5469# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5470 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
5471# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5472 end do
5473# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5474 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
5475# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5476 case (3)
5477# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5478 idx = i + 1 + global_offset_x - index_x
5479# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5480 idy = j + 1 + global_offset_y - index_y
5481# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5482 if (idx < 1 .or. idx > xrows .or. idy < 1 .or. idy > yrows) &
5483# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5484 & call s_mpi_abort("Hardcoded IC extrusion: row/column index out of range (IC file misaligned with the run grid)")
5485# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5486 do f = 1, sys_size - 1
5487# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5488 jump = merge(1, 0, f >= eqn_idx%mom%end)
5489# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5490 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
5491# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5492 end do
5493# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5494 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
5495# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5496 end select
5497# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5498 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0)
5499# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5500 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 0.0_wp
5501# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5502 case (274) ! Full 2D field from external data (no extrusion)
5503# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5504 ! Unlike case(270-273), this reads a genuinely 2D (x,y) field per variable, with no
5505# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5506 ! extrusion direction and no zeroed component -- all sys_size variables are read and
5507# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5508 ! assigned directly. Data files must have exactly (m_glb+1)*(n_glb+1) lines per
5509# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5510 ! variable, in x-major order (outer loop x, inner loop y), matching this rank's
5511# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5512 ! global grid exactly -- by construction, since the IC generator derives both the
5513# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5514 ! grid and the file contents from the same computation.
5515# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5516 !
5517# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5518 ! A local cell's global (x, y) index is derived from x_cc(i)/y_cc(j) against the
5519# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5520 ! file's own first coordinate and this rank's uniform grid spacing -- following the
5521# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5522 ! same pattern as case(270)'s global_offset_x/y above -- rather than from start_idx:
5523# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5524 ! start_idx is only allocated when parallel_io=T (s_initialize_parallel_io_common
5525# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5526 ! returns before allocating it otherwise), so a serial-IO run (the default for
5527# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5528 ! golden-file tests) would index into an unallocated array.
5529# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5530 !
5531# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5532 ! Every rank still scans the whole file (matching case(270)'s existing per-rank-reads-
5533# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5534 ! everything pattern), but stored_values274 only holds this rank's LOCAL (0:m, 0:n)
5535# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5536 ! slice rather than the full global grid -- a full-grid copy on every rank would scale
5537# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5538 ! as O(m_glb*n_glb*sys_size) per rank, which is the wrong axis to duplicate work on for
5539# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5540 ! a genuinely 2D (not 1D-profile) field. local_ix_beg274/local_iy_beg274 (this rank's
5541# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5542 ! global cell offset) are pinned from f274==1's very first record, before any other
5543# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5544 ! record is read, so every subsequent record -- across all variables -- can be tested
5545# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5546 ! against this rank's range and dropped if it falls outside it.
5547# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5548 x_step274 = x_cc(1) - x_cc(0)
5549# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5550 y_step274 = y_cc(1) - y_cc(0)
5551# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5552
5553# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5554 if (.not. files_loaded274) then
5555# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5556#ifdef MFC_DEBUG
5557# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5558 block
5559# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5560 use iso_fortran_env, only: output_unit
5561# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5562
5563# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5564 print *, 'm_icpp_patches.fpp:334: ', '@:ALLOCATE(stored_values274(0:m, 0:n, sys_size))'
5565# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5566
5567# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5568 call flush (output_unit)
5569# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5570 end block
5571# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5572#endif
5573# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5574 allocate (stored_values274(0:m, 0:n, sys_size))
5575# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5576
5577# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5578
5579# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5580#if defined(MFC_OpenACC)
5581# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5582!$acc enter data create(stored_values274)
5583# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5584#elif defined(MFC_OpenMP)
5585# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5586!$omp target enter data map(always,alloc:stored_values274)
5587# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5588#endif
5589# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5590 do f274 = 1, sys_size
5591# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5592 write (file_num_str274, '(I0)') f274
5593# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5594 fname274 = trim(files_dir) // "/prim." // trim(file_num_str274) // ".00." // trim(file_extension) // ".dat"
5595# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5596 open (newunit=unit274, file=trim(fname274), status='old', action='read', iostat=ios274)
5597# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5598 if (ios274 /= 0) call s_mpi_abort("Error opening file: " // trim(fname274))
5599# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5600 do ix274 = 0, m_glb
5601# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5602 do iy274 = 0, n_glb
5603# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5604 read (unit274, *, iostat=ios274) dummy_x274, dummy_y274, dummy_val274
5605# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5606 if (ios274 /= 0) call s_mpi_abort("Error reading file (fewer lines than grid?): " // trim(fname274))
5607# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5608 ! Capture the file's own origin and spacing from its first records so we can
5609# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5610 ! confirm it was sampled on this run's grid (a silent mismatch would otherwise
5611# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5612 ! read a wrong partial slice -> nonphysical field -> VCFL=Inf downstream).
5613# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5614 if (f274 == 1) then
5615# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5616 if (ix274 == 0 .and. iy274 == 0) then
5617# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5618 x0_274 = dummy_x274
5619# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5620 y0_274 = dummy_y274
5621# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5622 local_ix_beg274 = nint((x_cc(0) - x0_274)/x_step274)
5623# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5624 local_iy_beg274 = nint((y_cc(0) - y0_274)/y_step274)
5625# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5626 end if
5627# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5628 if (ix274 == 1 .and. iy274 == 0) file_dx274 = dummy_x274 - x0_274
5629# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5630 if (ix274 == 0 .and. iy274 == 1) file_dy274 = dummy_y274 - y0_274
5631# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5632 end if
5633# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5634 if (ix274 - local_ix_beg274 >= 0 .and. ix274 - local_ix_beg274 <= m .and. iy274 - local_iy_beg274 >= 0 &
5635# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5636 & .and. iy274 - local_iy_beg274 <= n) then
5637# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5638 stored_values274(ix274 - local_ix_beg274, iy274 - local_iy_beg274, f274) = dummy_val274
5639# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5640 end if
5641# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5642 end do
5643# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5644 end do
5645# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5646 ! The file must contain exactly (m_glb+1)*(n_glb+1) records: a successful extra
5647# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5648 ! read means it was generated for a larger grid and would be silently misread.
5649# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5650 read (unit274, *, iostat=ios274) dummy_x274, dummy_y274
5651# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5652 if (ios274 == 0) call s_mpi_abort("hcid=274 file has more lines than the grid: " // trim(fname274))
5653# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5654 close (unit274)
5655# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5656 end do
5657# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5658
5659# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5660 ! The run grid must be aligned with the file grid (uniform grid assumed, as in case 270).
5661# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5662 ! Check alignment via the integer cell offset of this rank's first cell from the file
5663# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5664 ! origin -- decomposition-safe: on every MPI rank x_cc(0) sits an integer number of cells
5665# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5666 ! into the global file, so a non-integer offset means a shifted/mismatched IC. (Comparing
5667# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5668 ! x0_274 to x_cc(0) directly would false-abort every rank whose subdomain doesn't start at
5669# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5670 ! the global origin.) The spacing checks below must also hold.
5671# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5672 r_align274 = (x_cc(0) - x0_274)/x_step274
5673# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5674 if (abs(r_align274 - nint(r_align274)) > 1.e-6_wp) &
5675# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5676 & call s_mpi_abort("hcid=274 file x-grid is misaligned with the run grid; regenerate the IC for this grid.")
5677# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5678 if (m_glb >= 1) then
5679# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5680 if (abs(file_dx274 - x_step274) > 1.e-6_wp*abs(x_step274)) &
5681# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5682 & call s_mpi_abort("hcid=274 file x-spacing does not match the grid; regenerate the IC for this grid.")
5683# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5684 end if
5685# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5686 if (n_glb >= 1) then
5687# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5688 r_align274 = (y_cc(0) - y0_274)/y_step274
5689# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5690 if (abs(r_align274 - nint(r_align274)) > 1.e-6_wp) &
5691# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5692 & call s_mpi_abort("hcid=274 file y-grid is misaligned with the run grid; regenerate the IC for this grid.")
5693# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5694 if (abs(file_dy274 - y_step274) > 1.e-6_wp*abs(y_step274)) &
5695# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5696 & call s_mpi_abort("hcid=274 file y-spacing does not match the grid; regenerate the IC for this grid.")
5697# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5698 end if
5699# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5700
5701# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5702 files_loaded274 = .true.
5703# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5704 end if
5705# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5706 ! Alignment is verified above (or this rank would already have aborted), so the local
5707# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5708 ! cell (i, j) maps to stored_values274(i, j, :) directly -- no re-derivation needed.
5709# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5710 do f274 = 1, sys_size
5711# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5712 q_prim_vf(f274)%sf(i, j, 0) = stored_values274(i, j, f274)
5713# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5714 end do
5715# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5716 case (271) ! Premixed Flame Vortices Interaction
5717# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5718 if (.not. files_loaded) then
5719# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5720 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
5721# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5722 do f = 1, max_files
5723# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5724 write (file_num_str, '(I0)') f
5725# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5726 filenames(f) = trim(files_dir) // "/" // "prim." // trim(file_num_str) // ".00." // trim(file_extension) // ".dat"
5727# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5728 end do
5729# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5730
5731# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5732 ! Common file reading setup
5733# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5734 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
5735# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5736 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
5737# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5738
5739# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5740 select case (num_dims)
5741# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5742 case (1, 2) ! 1D and 2D cases are similar
5743# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5744 ! Count lines
5745# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5746 line_count = 0
5747# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5748 do
5749# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5750 read (unit2, *, iostat=ios2) dummy_x, dummy_y
5751# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5752 if (ios2 /= 0) exit
5753# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5754 line_count = line_count + 1
5755# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5756 end do
5757# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5758 close (unit2)
5759# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5760
5761# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5762 xrows = line_count
5763# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5764 yrows = 1
5765# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5766 index_x = 0
5767# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5768 if (num_dims == 2) index_x = i
5769# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5770#ifdef MFC_DEBUG
5771# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5772 block
5773# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5774 use iso_fortran_env, only: output_unit
5775# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5776
5777# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5778 print *, 'm_icpp_patches.fpp:334: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
5779# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5780
5781# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5782 call flush (output_unit)
5783# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5784 end block
5785# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5786#endif
5787# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5788 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
5789# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5790
5791# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5792
5793# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5794
5795# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5796#if defined(MFC_OpenACC)
5797# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5798!$acc enter data create(x_coords, stored_values)
5799# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5800#elif defined(MFC_OpenMP)
5801# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5802!$omp target enter data map(always,alloc:x_coords, stored_values)
5803# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5804#endif
5805# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5806
5807# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5808 ! Read data from all files
5809# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5810 do f = 1, max_files
5811# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5812 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
5813# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5814 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
5815# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5816
5817# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5818 do iter = 1, xrows
5819# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5820 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
5821# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5822 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
5823# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5824 end do
5825# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5826 close (unit)
5827# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5828 end do
5829# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5830
5831# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5832 ! Calculate offsets
5833# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5834 domain_xstart = x_coords(1)
5835# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5836 x_step = x_cc(1) - x_cc(0)
5837# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5838 delta_x = merge(x_cc(0) - domain_xstart, x_cc(index_x) - domain_xstart, num_dims == 1)
5839# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5840 global_offset_x = nint(abs(delta_x)/x_step)
5841# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5842 case (3) ! 3D case - determine grid structure
5843# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5844 ! Find yRows by counting rows with same x
5845# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5846 read (unit2, *, iostat=ios2) x0, y0, dummy_z
5847# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5848 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
5849# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5850
5851# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5852 yrows = 1
5853# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5854 do
5855# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5856 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
5857# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5858 if (ios2 /= 0) exit
5859# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5860 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
5861# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5862 yrows = yrows + 1
5863# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5864 else
5865# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5866 exit
5867# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5868 end if
5869# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5870 end do
5871# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5872 close (unit2)
5873# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5874
5875# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5876 ! Count total rows
5877# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5878 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
5879# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5880 nrows = 0
5881# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5882 do
5883# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5884 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
5885# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5886 if (ios2 /= 0) exit
5887# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5888 nrows = nrows + 1
5889# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5890 end do
5891# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5892 close (unit2)
5893# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5894
5895# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5896 xrows = nrows/yrows
5897# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5898#ifdef MFC_DEBUG
5899# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5900 block
5901# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5902 use iso_fortran_env, only: output_unit
5903# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5904
5905# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5906 print *, 'm_icpp_patches.fpp:334: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
5907# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5908
5909# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5910 call flush (output_unit)
5911# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5912 end block
5913# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5914#endif
5915# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5916 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
5917# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5918
5919# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5920
5921# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5922
5923# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5924
5925# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5926#if defined(MFC_OpenACC)
5927# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5928!$acc enter data create(x_coords, y_coords, stored_values)
5929# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5930#elif defined(MFC_OpenMP)
5931# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5932!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
5933# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5934#endif
5935# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5936 index_x = i
5937# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5938 index_y = j
5939# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5940
5941# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5942 ! Read all files
5943# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5944 do f = 1, max_files
5945# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5946 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
5947# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5948 if (ios /= 0) then
5949# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5950 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
5951# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5952 cycle
5953# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5954 end if
5955# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5956
5957# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5958 iter = 0
5959# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5960 do iix = 1, xrows
5961# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5962 do iiy = 1, yrows
5963# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5964 iter = iter + 1
5965# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5966 if (f == 1) then
5967# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5968 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
5969# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5970 else
5971# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5972 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
5973# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5974 end if
5975# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5976 if (ios /= 0) call s_mpi_abort("Error reading data")
5977# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5978 end do
5979# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5980 end do
5981# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5982 close (unit)
5983# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5984 end do
5985# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5986
5987# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5988 ! Calculate offsets
5989# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5990 x_step = x_cc(1) - x_cc(0)
5991# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5992 y_step = y_cc(1) - y_cc(0)
5993# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5994 delta_x = x_cc(index_x) - x_coords(1)
5995# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5996 delta_y = y_cc(index_y) - y_coords(1)
5997# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
5998 global_offset_x = nint(abs(delta_x)/x_step)
5999# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6000 global_offset_y = nint(abs(delta_y)/y_step)
6001# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6002 end select
6003# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6004
6005# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6006 files_loaded = .true.
6007# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6008 end if
6009# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6010
6011# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6012 ! Data assignment
6013# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6014 select case (num_dims)
6015# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6016 case (1)
6017# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6018 idx = i + 1 + global_offset_x
6019# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6020 ! idx must land inside the file's row range: this rank's subdomain offset
6021# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6022 ! (global_offset_x) was derived from this rank's own grid, so a miss means the
6023# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6024 ! IC file is misaligned/mis-sized for the run grid, not a normal boundary case.
6025# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6026 if (idx < 1 .or. idx > xrows) &
6027# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6028 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
6029# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6030 do f = 1, sys_size
6031# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6032 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
6033# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6034 end do
6035# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6036 case (2)
6037# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6038 idx = i + 1 + global_offset_x - index_x
6039# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6040 if (idx < 1 .or. idx > xrows) &
6041# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6042 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
6043# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6044 do f = 1, sys_size - 1
6045# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6046 jump = merge(1, 0, f >= eqn_idx%mom%end)
6047# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6048 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
6049# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6050 end do
6051# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6052 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
6053# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6054 case (3)
6055# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6056 idx = i + 1 + global_offset_x - index_x
6057# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6058 idy = j + 1 + global_offset_y - index_y
6059# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6060 if (idx < 1 .or. idx > xrows .or. idy < 1 .or. idy > yrows) &
6061# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6062 & call s_mpi_abort("Hardcoded IC extrusion: row/column index out of range (IC file misaligned with the run grid)")
6063# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6064 do f = 1, sys_size - 1
6065# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6066 jump = merge(1, 0, f >= eqn_idx%mom%end)
6067# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6068 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
6069# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6070 end do
6071# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6072 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
6073# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6074 end select
6075# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6076 x1c = 0.0027_wp
6077# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6078 y1c = 0.005_wp
6079# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6080 x2c = 0.0027_wp
6081# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6082 y2c = 0.003_wp
6083# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6084 r1c = (x_cc(i) - x1c)**(2.0_wp) + (y_cc(j) - y1c)**(2.0_wp)
6085# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6086 r2c = (x_cc(i) - x2c)**(2.0_wp) + (y_cc(j) - y2c)**(2.0_wp)
6087# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6088 rvortex = 0.0005_wp
6089# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6090 cvortex = 6000.0_wp
6091# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6092
6093# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6094 u1c = -cvortex*((y_cc(j) - y1c))*exp(-r1c/(2.0_wp*rvortex**2.0_wp))
6095# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6096 v1c = cvortex*((x_cc(i) - x1c))*exp(-r1c/(2.0_wp*rvortex**2.0_wp))
6097# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6098
6099# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6100 u2c = cvortex*((y_cc(j) - y2c))*exp(-r2c/(2.0_wp*rvortex**2.0_wp))
6101# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6102 v2c = -cvortex*((x_cc(i) - x2c))*exp(-r2c/(2.0_wp*rvortex**2.0_wp))
6103# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6104 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) + u1c + u2c
6105# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6106 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = v1c + v2c
6107# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6108 case (272) ! Premixed Flame Instability
6109# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6110 if (.not. files_loaded) then
6111# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6112 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
6113# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6114 do f = 1, max_files
6115# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6116 write (file_num_str, '(I0)') f
6117# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6118 filenames(f) = trim(files_dir) // "/" // "prim." // trim(file_num_str) // ".00." // trim(file_extension) // ".dat"
6119# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6120 end do
6121# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6122
6123# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6124 ! Common file reading setup
6125# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6126 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
6127# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6128 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
6129# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6130
6131# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6132 select case (num_dims)
6133# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6134 case (1, 2) ! 1D and 2D cases are similar
6135# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6136 ! Count lines
6137# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6138 line_count = 0
6139# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6140 do
6141# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6142 read (unit2, *, iostat=ios2) dummy_x, dummy_y
6143# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6144 if (ios2 /= 0) exit
6145# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6146 line_count = line_count + 1
6147# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6148 end do
6149# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6150 close (unit2)
6151# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6152
6153# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6154 xrows = line_count
6155# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6156 yrows = 1
6157# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6158 index_x = 0
6159# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6160 if (num_dims == 2) index_x = i
6161# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6162#ifdef MFC_DEBUG
6163# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6164 block
6165# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6166 use iso_fortran_env, only: output_unit
6167# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6168
6169# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6170 print *, 'm_icpp_patches.fpp:334: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
6171# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6172
6173# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6174 call flush (output_unit)
6175# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6176 end block
6177# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6178#endif
6179# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6180 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
6181# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6182
6183# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6184
6185# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6186
6187# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6188#if defined(MFC_OpenACC)
6189# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6190!$acc enter data create(x_coords, stored_values)
6191# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6192#elif defined(MFC_OpenMP)
6193# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6194!$omp target enter data map(always,alloc:x_coords, stored_values)
6195# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6196#endif
6197# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6198
6199# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6200 ! Read data from all files
6201# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6202 do f = 1, max_files
6203# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6204 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
6205# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6206 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
6207# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6208
6209# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6210 do iter = 1, xrows
6211# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6212 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
6213# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6214 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
6215# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6216 end do
6217# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6218 close (unit)
6219# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6220 end do
6221# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6222
6223# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6224 ! Calculate offsets
6225# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6226 domain_xstart = x_coords(1)
6227# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6228 x_step = x_cc(1) - x_cc(0)
6229# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6230 delta_x = merge(x_cc(0) - domain_xstart, x_cc(index_x) - domain_xstart, num_dims == 1)
6231# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6232 global_offset_x = nint(abs(delta_x)/x_step)
6233# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6234 case (3) ! 3D case - determine grid structure
6235# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6236 ! Find yRows by counting rows with same x
6237# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6238 read (unit2, *, iostat=ios2) x0, y0, dummy_z
6239# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6240 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
6241# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6242
6243# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6244 yrows = 1
6245# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6246 do
6247# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6248 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
6249# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6250 if (ios2 /= 0) exit
6251# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6252 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
6253# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6254 yrows = yrows + 1
6255# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6256 else
6257# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6258 exit
6259# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6260 end if
6261# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6262 end do
6263# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6264 close (unit2)
6265# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6266
6267# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6268 ! Count total rows
6269# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6270 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
6271# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6272 nrows = 0
6273# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6274 do
6275# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6276 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
6277# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6278 if (ios2 /= 0) exit
6279# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6280 nrows = nrows + 1
6281# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6282 end do
6283# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6284 close (unit2)
6285# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6286
6287# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6288 xrows = nrows/yrows
6289# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6290#ifdef MFC_DEBUG
6291# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6292 block
6293# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6294 use iso_fortran_env, only: output_unit
6295# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6296
6297# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6298 print *, 'm_icpp_patches.fpp:334: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
6299# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6300
6301# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6302 call flush (output_unit)
6303# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6304 end block
6305# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6306#endif
6307# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6308 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
6309# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6310
6311# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6312
6313# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6314
6315# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6316
6317# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6318#if defined(MFC_OpenACC)
6319# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6320!$acc enter data create(x_coords, y_coords, stored_values)
6321# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6322#elif defined(MFC_OpenMP)
6323# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6324!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
6325# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6326#endif
6327# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6328 index_x = i
6329# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6330 index_y = j
6331# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6332
6333# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6334 ! Read all files
6335# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6336 do f = 1, max_files
6337# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6338 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
6339# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6340 if (ios /= 0) then
6341# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6342 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
6343# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6344 cycle
6345# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6346 end if
6347# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6348
6349# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6350 iter = 0
6351# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6352 do iix = 1, xrows
6353# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6354 do iiy = 1, yrows
6355# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6356 iter = iter + 1
6357# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6358 if (f == 1) then
6359# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6360 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
6361# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6362 else
6363# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6364 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
6365# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6366 end if
6367# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6368 if (ios /= 0) call s_mpi_abort("Error reading data")
6369# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6370 end do
6371# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6372 end do
6373# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6374 close (unit)
6375# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6376 end do
6377# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6378
6379# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6380 ! Calculate offsets
6381# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6382 x_step = x_cc(1) - x_cc(0)
6383# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6384 y_step = y_cc(1) - y_cc(0)
6385# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6386 delta_x = x_cc(index_x) - x_coords(1)
6387# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6388 delta_y = y_cc(index_y) - y_coords(1)
6389# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6390 global_offset_x = nint(abs(delta_x)/x_step)
6391# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6392 global_offset_y = nint(abs(delta_y)/y_step)
6393# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6394 end select
6395# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6396
6397# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6398 files_loaded = .true.
6399# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6400 end if
6401# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6402
6403# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6404 ! Data assignment
6405# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6406 select case (num_dims)
6407# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6408 case (1)
6409# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6410 idx = i + 1 + global_offset_x
6411# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6412 ! idx must land inside the file's row range: this rank's subdomain offset
6413# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6414 ! (global_offset_x) was derived from this rank's own grid, so a miss means the
6415# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6416 ! IC file is misaligned/mis-sized for the run grid, not a normal boundary case.
6417# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6418 if (idx < 1 .or. idx > xrows) &
6419# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6420 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
6421# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6422 do f = 1, sys_size
6423# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6424 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
6425# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6426 end do
6427# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6428 case (2)
6429# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6430 idx = i + 1 + global_offset_x - index_x
6431# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6432 if (idx < 1 .or. idx > xrows) &
6433# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6434 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
6435# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6436 do f = 1, sys_size - 1
6437# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6438 jump = merge(1, 0, f >= eqn_idx%mom%end)
6439# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6440 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
6441# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6442 end do
6443# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6444 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
6445# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6446 case (3)
6447# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6448 idx = i + 1 + global_offset_x - index_x
6449# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6450 idy = j + 1 + global_offset_y - index_y
6451# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6452 if (idx < 1 .or. idx > xrows .or. idy < 1 .or. idy > yrows) &
6453# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6454 & call s_mpi_abort("Hardcoded IC extrusion: row/column index out of range (IC file misaligned with the run grid)")
6455# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6456 do f = 1, sys_size - 1
6457# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6458 jump = merge(1, 0, f >= eqn_idx%mom%end)
6459# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6460 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
6461# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6462 end do
6463# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6464 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
6465# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6466 end select
6467# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6468
6469# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6470 y_center = y0_ref
6471# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6472 y_dist = y_cc(j) - y_center
6473# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6474 wave_phase = 2.0_wp*pi*nwaves*(y_dist/ly_param)
6475# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6476 front_shift = a_param*sin(wave_phase)
6477# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6478
6479# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6480 x_mapped = x_cc(i) - front_shift
6481# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6482
6483# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6484 if (x_mapped <= x_coords(1)) then
6485# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6486 do v = 1, sys_size - 1
6487# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6488 q_prim_vf(v + merge(1, 0, v >= eqn_idx%mom%end))%sf(i, j, 0) = stored_values(1, 1, v)
6489# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6490 end do
6491# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6492 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
6493# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6494 else if (x_mapped >= x_coords(xrows)) then
6495# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6496 do v = 1, sys_size - 1
6497# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6498 q_prim_vf(v + merge(1, 0, v >= eqn_idx%mom%end))%sf(i, j, 0) = stored_values(xrows, 1, v)
6499# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6500 end do
6501# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6502 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
6503# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6504 else
6505# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6506 idx_lo = 1; idx_hi = xrows
6507# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6508 do while (idx_hi - idx_lo > 1)
6509# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6510 idx_mid = (idx_lo + idx_hi)/2
6511# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6512 if (x_coords(idx_mid) <= x_mapped) then
6513# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6514 idx_lo = idx_mid
6515# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6516 else
6517# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6518 idx_hi = idx_mid
6519# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6520 end if
6521# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6522 end do
6523# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6524
6525# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6526 interp_wt = (x_mapped - x_coords(idx_lo))/(x_coords(idx_hi) - x_coords(idx_lo)) ! weight in [0,1)
6527# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6528
6529# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6530 do v = 1, sys_size - 1
6531# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6532 q_prim_vf(v + merge(1, 0, v >= eqn_idx%mom%end))%sf(i, j, 0) = (1.0_wp - interp_wt)*stored_values(idx_lo, 1, &
6533# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6534 & v) + interp_wt*stored_values(idx_hi, 1, v)
6535# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6536 end do
6537# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6538 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
6539# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6540 end if
6541# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6542 case (280) ! Isentropic vortex
6543# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6544 ! This is patch is hard-coded for test suite optimization used in the 2D_isentropicvortex case: This analytic patch uses
6545# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6546 ! geometry 2
6547# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6548 if (patch_id == 1) then
6549# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6550 q_prim_vf(eqn_idx%E)%sf(i, j, &
6551# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6552 & 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) &
6553# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6554 & - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0)))**(1.4 + 1.0)
6555# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6556 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, j, &
6557# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6558 & 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) &
6559# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6560 & - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0)))**1.4
6561# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6562 q_prim_vf(eqn_idx%mom%beg + 0)%sf(i, j, &
6563# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6564 & 0) = patch_icpp(1)%vel(1) + (y_cc(j) - patch_icpp(1)%y_centroid)*(5.0/(2.0*pi))*exp(1.0*(1.0 - (x_cc(i) &
6565# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6566 & - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0))
6567# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6568 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, &
6569# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6570 & 0) = patch_icpp(1)%vel(2) - (x_cc(i) - patch_icpp(1)%x_centroid)*(5.0/(2.0*pi))*exp(1.0*(1.0 - (x_cc(i) &
6571# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6572 & - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0))
6573# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6574 end if
6575# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6576 case (281) ! Acoustic pulse
6577# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6578 ! This is patch is hard-coded for test suite optimization used in the 2D_acoustic_pulse case: This analytic patch uses
6579# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6580 ! geometry 2
6581# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6582 if (patch_id == 2) then
6583# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6584 q_prim_vf(eqn_idx%E)%sf(i, j, &
6585# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6586 & 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))
6587# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6588 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, j, &
6589# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6590 & 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))
6591# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6592 end if
6593# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6594 case (282) ! Zero-circulation vortex
6595# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6596 ! This is patch is hard-coded for test suite optimization used in the 2D_zero_circ_vortex case: This analytic patch uses
6597# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6598 ! geometry 2
6599# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6600 if (patch_id == 2) then
6601# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6602 q_prim_vf(eqn_idx%E)%sf(i, j, &
6603# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6604 & 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))
6605# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6606 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, j, &
6607# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6608 & 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))
6609# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6610 q_prim_vf(eqn_idx%mom%beg + 0)%sf(i, j, &
6611# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6612 & 0) = 112.99092883944267*(1 - (0.1/0.3))*y_cc(j)*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2)))
6613# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6614 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, &
6615# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6616 & 0) = 112.99092883944267*((0.1/0.3))*x_cc(i)*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2)))
6617# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6618 end if
6619# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6620 case (283) ! Isentropic vortex: conserved-variable GL cell averages (3-pt tensor product)
6621# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6622 ! GL averages of conserved variables (rho, rho*u, rho*v, E) eliminate the O(h^2) error that primitive-variable averaging
6623# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6624 ! introduces through the nonlinear prim->cons conversion: cell_avg(rho*u) != cell_avg(rho)*cell_avg(u) by O(h^2). We back
6625# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6626 ! out primitive values that reproduce the conserved averages exactly. Vortex strength eps is read from
6627# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6628 ! patch_icpp(patch_id)%epsilon; defaults to 5.
6629# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6630 if (patch_id == 1) then
6631# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6632 vortex_eps = merge(patch_icpp(patch_id)%epsilon, 5._wp, patch_icpp(patch_id)%epsilon > 0._wp)
6633# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6634 gauss_xi = [-sqrt(3._wp/5._wp), 0._wp, sqrt(3._wp/5._wp)]
6635# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6636 gauss_w = [5._wp/9._wp, 8._wp/9._wp, 5._wp/9._wp]
6637# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6638 rho_avg = 0._wp; rhou_avg = 0._wp; rhov_avg = 0._wp; e_avg = 0._wp
6639# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6640 do igq = 1, 3
6641# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6642 do jgq = 1, 3
6643# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6644 xq = x_cc(i) + gauss_xi(igq)*(x_cb(i) - x_cb(i - 1))*0.5_wp
6645# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6646 yq = y_cc(j) + gauss_xi(jgq)*(y_cb(j) - y_cb(j - 1))*0.5_wp
6647# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6648 r2q = (xq - patch_icpp(patch_id)%x_centroid)**2._wp + (yq - patch_icpp(patch_id)%y_centroid)**2._wp
6649# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6650 t_facq = 1._wp - (vortex_eps/(2._wp*pi))*(vortex_eps/(8._wp*(1.4_wp + 1._wp)*pi))*exp(2._wp*(1._wp - r2q))
6651# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6652 wq = gauss_w(igq)*gauss_w(jgq)
6653# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6654 rhoq = t_facq**1.4_wp
6655# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6656 pq = t_facq**2.4_wp
6657# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6658 uq = patch_icpp(patch_id)%vel(1) + (yq - patch_icpp(patch_id)%y_centroid)*(vortex_eps/(2._wp*pi))*exp(1._wp &
6659# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6660 & - r2q)
6661# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6662 vq = patch_icpp(patch_id)%vel(2) - (xq - patch_icpp(patch_id)%x_centroid)*(vortex_eps/(2._wp*pi))*exp(1._wp &
6663# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6664 & - r2q)
6665# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6666 eq = pq/0.4_wp + 0.5_wp*rhoq*(uq**2 + vq**2)
6667# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6668 rho_avg = rho_avg + wq*rhoq
6669# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6670 rhou_avg = rhou_avg + wq*(rhoq*uq)
6671# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6672 rhov_avg = rhov_avg + wq*(rhoq*vq)
6673# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6674 e_avg = e_avg + wq*eq
6675# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6676 end do
6677# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6678 end do
6679# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6680 rho_avg = rho_avg*0.25_wp
6681# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6682 rhou_avg = rhou_avg*0.25_wp
6683# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6684 rhov_avg = rhov_avg*0.25_wp
6685# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6686 e_avg = e_avg*0.25_wp
6687# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6688 ! Back out primitive vars so prim->cons conversion recovers the conserved averages
6689# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6690 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = rho_avg
6691# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6692 q_prim_vf(eqn_idx%mom%beg + 0)%sf(i, j, 0) = rhou_avg/rho_avg
6693# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6694 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = rhov_avg/rho_avg
6695# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6696 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = (e_avg - 0.5_wp*(rhou_avg**2 + rhov_avg**2)/rho_avg)*0.4_wp
6697# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6698 end if
6699# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6700 case (291) ! Isothermal Flat Plate
6701# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6702 t_inf = 1125.0_wp
6703# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6704 t_wall = 600.0_wp
6705# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6706 p_atm = 101325.0_wp
6707# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6708
6709# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6710 ! Boundary/Shear Layer thicknesses
6711# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6712 delta_th = 0.0003_wp ! Thermal BL thickness
6713# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6714 delta_shear = 8e-3_wp ! Velocity BL thickness
6715# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6716
6717# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6718 u_max = 50.0_wp ! Freestream Velocity (m/s)
6719# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6720
6721# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6722 mw_n2 = 28.0134e-3_wp
6723# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6724 mw_o2 = 31.999e-3_wp
6725# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6726 y_n2 = 0.767_wp
6727# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6728 y_o2 = 0.233_wp
6729# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6730 r_mix = 8.314462618_wp*((y_n2/mw_n2) + (y_o2/mw_o2))
6731# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6732 bottom_blend_u = tanh(y_cc(j)/delta_shear)
6733# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6734 bottom_blend_t = tanh(y_cc(j)/delta_th)
6735# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6736 u_mean = u_max*bottom_blend_u
6737# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6738 t_loc = t_wall + (t_inf - t_wall)*bottom_blend_t
6739# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6740 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = p_atm/(r_mix*t_loc)
6741# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6742 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = u_mean
6743# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6744 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
6745# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6746 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p_atm
6747# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6748 q_prim_vf(eqn_idx%species%beg)%sf(i, j, 0) = y_o2
6749# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6750 q_prim_vf(eqn_idx%species%end)%sf(i, j, 0) = y_n2
6751# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6752 case default
6753# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6754 if (proc_rank == 0) then
6755# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6756 call s_int_to_str(patch_id, istr)
6757# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6758 call s_mpi_abort("Invalid hcid specified for patch " // trim(istr))
6759# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6760 end if
6761# 334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6762 end select
6763 end if
6764 end if
6765 end do
6766 end do
6767 if (allocated(stored_values)) then
6768# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6769#ifdef MFC_DEBUG
6770# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6771 block
6772# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6773 use iso_fortran_env, only: output_unit
6774# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6775
6776# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6777 print *, 'm_icpp_patches.fpp:339: ', '@:DEALLOCATE(stored_values)'
6778# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6779
6780# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6781 call flush (output_unit)
6782# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6783 end block
6784# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6785#endif
6786# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6787
6788# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6789#if defined(MFC_OpenACC)
6790# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6791!$acc exit data delete(stored_values)
6792# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6793#elif defined(MFC_OpenMP)
6794# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6795!$omp target exit data map(release:stored_values)
6796# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6797#endif
6798# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6799 deallocate (stored_values)
6800# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6801#ifdef MFC_DEBUG
6802# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6803 block
6804# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6805 use iso_fortran_env, only: output_unit
6806# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6807
6808# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6809 print *, 'm_icpp_patches.fpp:339: ', '@:DEALLOCATE(x_coords)'
6810# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6811
6812# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6813 call flush (output_unit)
6814# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6815 end block
6816# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6817#endif
6818# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6819
6820# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6821#if defined(MFC_OpenACC)
6822# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6823!$acc exit data delete(x_coords)
6824# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6825#elif defined(MFC_OpenMP)
6826# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6827!$omp target exit data map(release:x_coords)
6828# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6829#endif
6830# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6831 deallocate (x_coords)
6832# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6833 end if
6834# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6835
6836# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6837 if (allocated(y_coords)) then
6838# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6839#ifdef MFC_DEBUG
6840# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6841 block
6842# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6843 use iso_fortran_env, only: output_unit
6844# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6845
6846# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6847 print *, 'm_icpp_patches.fpp:339: ', '@:DEALLOCATE(y_coords)'
6848# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6849
6850# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6851 call flush (output_unit)
6852# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6853 end block
6854# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6855#endif
6856# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6857
6858# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6859#if defined(MFC_OpenACC)
6860# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6861!$acc exit data delete(y_coords)
6862# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6863#elif defined(MFC_OpenMP)
6864# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6865!$omp target exit data map(release:y_coords)
6866# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6867#endif
6868# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6869 deallocate (y_coords)
6870# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6871 end if
6872# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6873
6874# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6875 files_loaded = .false.
6876# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6877
6878# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6879 if (allocated(stored_values274)) then
6880# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6881#ifdef MFC_DEBUG
6882# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6883 block
6884# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6885 use iso_fortran_env, only: output_unit
6886# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6887
6888# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6889 print *, 'm_icpp_patches.fpp:339: ', '@:DEALLOCATE(stored_values274)'
6890# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6891
6892# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6893 call flush (output_unit)
6894# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6895 end block
6896# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6897#endif
6898# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6899
6900# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6901#if defined(MFC_OpenACC)
6902# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6903!$acc exit data delete(stored_values274)
6904# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6905#elif defined(MFC_OpenMP)
6906# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6907!$omp target exit data map(release:stored_values274)
6908# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6909#endif
6910# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6911 deallocate (stored_values274)
6912# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6913 end if
6914# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6915
6916# 339 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6917 files_loaded274 = .false.
6918
6919 end subroutine s_icpp_circle
6920
6921 !> The varcircle patch is a 2D geometry that may be used . It generatres an annulus
6922 subroutine s_icpp_varcircle(patch_id, patch_id_fp, q_prim_vf)
6923
6924 ! Patch identifier
6925 integer, intent(in) :: patch_id
6926
6927#ifdef MFC_MIXED_PRECISION
6928 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
6929#else
6930 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
6931#endif
6932 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
6933
6934 ! Generic loop iterators
6935 integer :: i, j, k
6936 real(wp) :: radius, myr, thickness
6937
6938 integer :: xRows, yRows, nRows, iix, iiy, max_files
6939# 360 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6940 integer :: f, iter, unit, unit2, idx, idy, index_x, index_y, jump, line_count
6941# 360 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6942 real(wp) :: x_step, y_step
6943# 360 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6944 real(wp) :: dummy_x, dummy_y, dummy_z, x0, y0
6945# 360 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6946 integer :: global_offset_x, global_offset_y !< MPI subdomain offset
6947# 360 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6948 real(wp) :: delta_x, delta_y
6949# 360 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6950 character(len=300), dimension(sys_size) :: fileNames !< Arrays to store all data from files
6951# 360 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6952 real(wp), allocatable :: stored_values(:,:,:)
6953# 360 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6954 real(wp), allocatable :: x_coords(:), y_coords(:)
6955# 360 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6956 logical :: files_loaded = .false.
6957# 360 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6958 real(wp) :: domain_xstart
6959# 360 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6960 character(len=20) :: file_num_str !< For storing the file number as a string
6961# 360 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6962 integer :: ios
6963# 360 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6964 integer :: ios2
6965# 360 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6966
6967# 360 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6968 ! hcid=274 (2dHardcodedIC.fpp): full 2D field from external data, no extrusion.
6969# 360 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6970 ! Declared here (not in Hardcoded2DVariables()) so it's visible wherever
6971# 360 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6972 ! HardcodedDeallocation() is called, matching the pattern of stored_values/x_coords/
6973# 360 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6974 ! y_coords/files_loaded above.
6975# 360 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6976 real(wp), allocatable, dimension(:,:,:) :: stored_values274
6977# 360 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6978 logical :: files_loaded274 = .false.
6979# 360 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6980 integer :: f274, ix274, iy274, unit274, ios274
6981# 360 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6982 integer :: local_ix_beg274, local_iy_beg274
6983# 360 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6984 character(len=300) :: fname274
6985# 360 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6986 character(len=20) :: file_num_str274
6987# 360 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6988 real(wp) :: dummy_x274, dummy_y274, dummy_val274, x0_274, y0_274, x_step274, y_step274
6989# 360 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6990 real(wp) :: file_dx274, file_dy274, r_align274
6991 ! Place any declaration of intermediate variables here
6992# 361 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6993 real(wp) :: eps, eps_mhd, C_mhd
6994# 361 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6995 real(wp) :: r, rmax, gam, umax, p0
6996# 361 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6997 real(wp) :: rhoH, rhoL, pRef, pInt, h, lam, wl, amp, intH, intL, alph
6998# 361 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
6999 real(wp) :: factor, x1c, y1c, x2c, y2c, r1c, r2c, cvortex, u1c, u2c, v1c, v2c, rvortex
7000# 361 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7001 real(wp) :: r0, alpha, r2
7002# 361 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7003 real(wp) :: sinA, cosA
7004# 361 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7005 real(wp) :: r_sq
7006# 361 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7007
7008# 361 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7009 ! # 283 - Gauss-averaged isentropic vortex (conserved-variable cell averages)
7010# 361 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7011 real(wp) :: gauss_xi(3), gauss_w(3), xq, yq, r2q, T_facq, wq
7012# 361 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7013 real(wp) :: rho_avg, rhou_avg, rhov_avg, E_avg
7014# 361 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7015 real(wp) :: rhoq, pq, uq, vq, Eq, vortex_eps
7016# 361 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7017 integer :: igq, jgq
7018# 361 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7019
7020# 361 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7021 ! # 291 - Shear/Thermal Layer Case
7022# 361 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7023 real(wp) :: delta_shear, u_max, u_mean
7024# 361 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7025 real(wp) :: T_wall, T_inf, P_atm, T_loc
7026# 361 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7027 real(wp) :: delta_th, R_mix
7028# 361 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7029 real(wp) :: Y_N2, Y_O2, MW_N2, MW_O2
7030# 361 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7031 real(wp) :: bottom_blend_u, bottom_blend_T
7032# 361 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7033
7034# 361 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7035 ! # 207
7036# 361 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7037 real(wp) :: sigma, gauss1, gauss2
7038# 361 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7039
7040# 361 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7041 ! # 208
7042# 361 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7043 real(wp) :: ei, d, fsm, alpha_air, alpha_sf6
7044# 361 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7045 real(wp) :: y_center, y_dist, wave_phase, front_shift, x_mapped, interp_wt
7046# 361 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7047 integer :: v, idx_lo, idx_hi, idx_mid
7048# 361 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7049 real(wp), parameter :: Ly_param = 0.00775735_wp
7050# 361 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7051 real(wp), parameter :: A_param = 0.1_wp*96.9880867_wp*10.0_wp**(-6.0_wp)
7052# 361 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7053 integer, parameter :: Nwaves = 6
7054# 361 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7055 real(wp), parameter :: y0_ref = 0.0_wp
7056# 361 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7057
7058# 361 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7059 eps = 1.e-9_wp
7060
7061 ! Transferring the circular patch's radius, centroid, smearing patch identity and smearing coefficient information
7062 x_centroid = patch_icpp(patch_id)%x_centroid
7063 y_centroid = patch_icpp(patch_id)%y_centroid
7064 radius = patch_icpp(patch_id)%radius
7065 smooth_patch_id = patch_icpp(patch_id)%smooth_patch_id
7066 smooth_coeff = patch_icpp(patch_id)%smooth_coeff
7067 thickness = patch_icpp(patch_id)%epsilon
7068
7069 ! Initialize eta=1; modified if smoothing is enabled
7070 eta = 1._wp
7071
7072 ! Assign patch vars if cell is covered and patch has write permission
7073 do j = 0, n
7074 do i = 0, m
7075 myr = sqrt((x_cc(i) - x_centroid)**2 + (y_cc(j) - y_centroid)**2)
7076
7077 if (myr <= radius + thickness/2._wp .and. myr >= radius - thickness/2._wp &
7078 & .and. patch_icpp(patch_id)%alter_patch(patch_id_fp(i, j, 0))) then
7079 call s_assign_patch_primitive_variables(patch_id, i, j, 0, eta, q_prim_vf, patch_id_fp)
7080
7081
7082 if (patch_icpp(patch_id)%hcid /= dflt_int) then
7083 select case (patch_icpp(patch_id)%hcid) ! 2D_hardcoded_ic example case
7084# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7085 case (200) ! Two-fluid cubic interface
7086# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7087 if (y_cc(j) <= (-x_cc(i)**3 + 1)**(1._wp/3._wp)) then
7088# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7089 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = eps
7090# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7091 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = 1._wp - eps
7092# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7093 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = eps*1000._wp
7094# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7095 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = (1._wp - eps)*1._wp
7096# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7097 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1000._wp
7098# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7099 end if
7100# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7101 case (202) ! Gresho vortex (Gouasmi et al 2022 JCP)
7102# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7103 r = ((x_cc(i) - 0.5_wp)**2 + (y_cc(j) - 0.5_wp)**2)**0.5_wp
7104# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7105 rmax = 0.2_wp
7106# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7107
7108# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7109 gam = 1._wp + 1._wp/fluid_pp(1)%gamma
7110# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7111 umax = 2*pi*rmax*patch_icpp(patch_id)%vel(2)
7112# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7113 p0 = umax**2*(1._wp/(gam*patch_icpp(patch_id)%vel(2)**2) - 0.5_wp)
7114# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7115
7116# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7117 if (r < rmax) then
7118# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7119 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -(y_cc(j) - 0.5_wp)*umax/rmax
7120# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7121 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = (x_cc(i) - 0.5_wp)*umax/rmax
7122# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7123 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*((r/rmax)**2._wp/2._wp)
7124# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7125 else if (r < 2*rmax) then
7126# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7127 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -((y_cc(j) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
7128# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7129 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = ((x_cc(i) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
7130# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7131 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)))
7132# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7133 else
7134# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7135 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 0._wp
7136# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7137 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0._wp
7138# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7139 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*(-2 + 4*log(2._wp))
7140# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7141 end if
7142# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7143 case (203) ! Gresho vortex (Gouasmi et al 2022 JCP) with density correction
7144# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7145 r = ((x_cc(i) - 0.5_wp)**2._wp + (y_cc(j) - 0.5_wp)**2)**0.5_wp
7146# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7147 rmax = 0.2_wp
7148# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7149
7150# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7151 gam = 1._wp + 1._wp/fluid_pp(1)%gamma
7152# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7153 umax = 2*pi*rmax*patch_icpp(patch_id)%vel(2)
7154# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7155 p0 = umax**2*(1._wp/(gam*patch_icpp(patch_id)%vel(2)**2) - 0.5_wp)
7156# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7157
7158# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7159 if (r < rmax) then
7160# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7161 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -(y_cc(j) - 0.5_wp)*umax/rmax
7162# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7163 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = (x_cc(i) - 0.5_wp)*umax/rmax
7164# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7165 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*((r/rmax)**2._wp/2._wp)
7166# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7167 else if (r < 2*rmax) then
7168# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7169 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -((y_cc(j) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
7170# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7171 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = ((x_cc(i) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
7172# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7173 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)))
7174# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7175 else
7176# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7177 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 0._wp
7178# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7179 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0._wp
7180# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7181 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2._wp*(-2._wp + 4*log(2._wp))
7182# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7183 end if
7184# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7185
7186# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7187 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = q_prim_vf(eqn_idx%E)%sf(i, j, 0)**(1._wp/gam)
7188# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7189 case (204) ! Rayleigh-Taylor instability
7190# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7191 rhoh = 3._wp
7192# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7193 rhol = 1._wp
7194# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7195 pref = 1.e5_wp
7196# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7197 pint = pref
7198# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7199 h = 0.7_wp
7200# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7201 lam = 0.2_wp
7202# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7203 wl = 2._wp*pi/lam
7204# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7205 amp = 0.05_wp/wl
7206# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7207
7208# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7209 inth = amp*sin(2._wp*pi*x_cc(i)/lam - pi/2._wp) + h
7210# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7211
7212# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7213 alph = 0.5_wp*(1._wp + tanh((y_cc(j) - inth)/2.5e-3_wp))
7214# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7215
7216# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7217 if (alph < eps) alph = eps
7218# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7219 if (alph > 1._wp - eps) alph = 1._wp - eps
7220# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7221
7222# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7223 if (y_cc(j) > inth) then
7224# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7225 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = alph
7226# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7227 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = 1._wp - alph
7228# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7229 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = alph*rhoh
7230# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7231 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = (1._wp - alph)*rhol
7232# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7233 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = pref + rhoh*9.81_wp*(1.2_wp - y_cc(j))
7234# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7235 else
7236# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7237 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = alph
7238# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7239 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = 1._wp - alph
7240# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7241 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = alph*rhoh
7242# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7243 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = (1._wp - alph)*rhol
7244# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7245 pint = pref + rhoh*9.81_wp*(1.2_wp - inth)
7246# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7247 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = pint + rhol*9.81_wp*(inth - y_cc(j))
7248# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7249 end if
7250# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7251 case (205) ! 2D lung wave interaction problem
7252# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7253 h = 0.0_wp ! non dim origin y
7254# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7255 lam = 1.0_wp ! non dim lambda
7256# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7257 amp = patch_icpp(patch_id)%a(2) ! to be changed later! !non dim amplitude
7258# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7259
7260# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7261 inth = amp*sin(2*pi*x_cc(i)/lam - pi/2) + h
7262# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7263
7264# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7265 if (y_cc(j) > inth) then
7266# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7267 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(1)
7268# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7269 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(2)
7270# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7271 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = patch_icpp(1)%pres
7272# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7273 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = patch_icpp(1)%alpha(1)
7274# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7275 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = patch_icpp(1)%alpha(2)
7276# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7277 end if
7278# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7279 case (206) ! 2D lung wave interaction problem - horizontal domain
7280# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7281 h = 0.0_wp ! non dim origin y
7282# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7283 lam = 1.0_wp ! non dim lambda
7284# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7285 amp = patch_icpp(patch_id)%a(2)
7286# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7287
7288# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7289 intl = amp*sin(2*pi*y_cc(j)/lam - pi/2) + h
7290# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7291
7292# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7293 if (x_cc(i) > intl) then ! this is the liquid
7294# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7295 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(1)
7296# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7297 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(2)
7298# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7299 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = patch_icpp(1)%pres
7300# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7301 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = patch_icpp(1)%alpha(1)
7302# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7303 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = patch_icpp(1)%alpha(2)
7304# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7305 end if
7306# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7307 case (207) ! Kelvin Helmholtz Instability
7308# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7309 sigma = 0.05_wp/sqrt(2.0_wp)
7310# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7311 gauss1 = exp(-(y_cc(j) - 0.75_wp)**2/(2.0_wp*sigma**2))
7312# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7313 gauss2 = exp(-(y_cc(j) - 0.25_wp)**2/(2.0_wp*sigma**2))
7314# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7315 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)
7316# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7317 case (208) ! Richtmeyer Meshkov Instability
7318# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7319 lam = 1.0_wp
7320# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7321 eps = 1.0e-6_wp
7322# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7323 ei = 5.0_wp
7324# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7325 ! Smoothening function to smooth out sharp discontinuity in the interface
7326# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7327 if (x_cc(i) <= 0.7_wp*lam) then
7328# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7329 d = x_cc(i) - lam*(0.4_wp - 0.1_wp*sin(2.0_wp*pi*(y_cc(j)/lam + 0.25_wp)))
7330# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7331 fsm = 0.5_wp*(1.0_wp + erf(d/(ei*sqrt(dx*dy))))
7332# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7333 alpha_air = eps + (1.0_wp - 2.0_wp*eps)*fsm
7334# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7335 alpha_sf6 = 1.0_wp - alpha_air
7336# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7337 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = alpha_sf6*5.04_wp
7338# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7339 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = alpha_air*1.0_wp
7340# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7341 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = alpha_sf6
7342# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7343 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = alpha_air
7344# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7345 end if
7346# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7347 case (250) ! MHD Orszag-Tang vortex
7348# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7349 ! 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),
7350# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7351 ! sin(4*pi*x)/sqrt(4*pi), 0)
7352# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7353
7354# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7355 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -sin(2._wp*pi*y_cc(j))
7356# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7357 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = sin(2._wp*pi*x_cc(i))
7358# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7359
7360# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7361 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = -sin(2._wp*pi*y_cc(j))/sqrt(4._wp*pi)
7362# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7363 q_prim_vf(eqn_idx%B%beg + 1)%sf(i, j, 0) = sin(4._wp*pi*x_cc(i))/sqrt(4._wp*pi)
7364# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7365 case (251) ! RMHD Cylindrical Blast Wave [Mignone, 2006: Section 4.3.1]
7366# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7367 if (x_cc(i)**2 + y_cc(j)**2 < 0.08_wp**2) then
7368# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7369 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 0.01
7370# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7371 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1.0
7372# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7373 else if (x_cc(i)**2 + y_cc(j)**2 <= 1._wp**2) then
7374# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7375 ! Linear interpolation between r=0.08 and r=1.0
7376# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7377 factor = (1.0_wp - sqrt(x_cc(i)**2 + y_cc(j)**2))/(1.0_wp - 0.08_wp)
7378# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7379 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 0.01_wp*factor + 1.e-4_wp*(1.0_wp - factor)
7380# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7381 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1.0_wp*factor + 3.e-5_wp*(1.0_wp - factor)
7382# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7383 else
7384# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7385 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1.e-4_wp
7386# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7387 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 3.e-5_wp
7388# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7389 end if
7390# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7391
7392# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7393 ! case 252 is for the 2D MHD Rotor problem
7394# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7395 case (252) ! 2D MHD Rotor Problem
7396# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7397 ! Ambient conditions are set in the JSON file. This case imposes the dense, rotating cylinder.
7398# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7399 !
7400# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7401 ! 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
7402# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7403 ! velocity w=20, giving v_tan=2 at r=0.1
7404# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7405
7406# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7407 ! Calculate distance squared from the center
7408# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7409 r_sq = (x_cc(i) - 0.5_wp)**2 + (y_cc(j) - 0.5_wp)**2
7410# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7411
7412# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7413 ! inner radius of 0.1
7414# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7415 if (r_sq <= 0.1**2) then
7416# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7417 ! -- Inside the rotor -- Set density uniformly to 10
7418# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7419 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 10._wp
7420# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7421
7422# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7423 ! Set vup constant rotation of rate v=2 v_x = -omega * (y - y_c) v_y = omega * (x - x_c)
7424# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7425 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -20._wp*(y_cc(j) - 0.5_wp)
7426# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7427 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = 20._wp*(x_cc(i) - 0.5_wp)
7428# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7429
7430# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7431 ! taper width of 0.015
7432# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7433 else if (r_sq <= 0.115**2) then
7434# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7435 ! linearly smooth the function between r = 0.1 and 0.115
7436# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7437 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1._wp + 9._wp*(0.115_wp - sqrt(r_sq))/(0.015_wp)
7438# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7439
7440# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7441 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)
7442# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7443 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)
7444# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7445 end if
7446# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7447 case (253) ! MHD Smooth Magnetic Vortex
7448# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7449 ! Section 5.2 of Implicit hybridized discontinuous Galerkin methods for compressible magnetohydrodynamics C. Ciuca, P.
7450# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7451 ! Fernandez, A. Christophe, N.C. Nguyen, J. Peraire
7452# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7453
7454# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7455 ! velocity
7456# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7457 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))
7458# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7459 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))
7460# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7461
7462# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7463 ! magnetic field
7464# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7465 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)
7466# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7467 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)
7468# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7469
7470# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7471 ! pressure
7472# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7473 q_prim_vf(eqn_idx%E)%sf(i, j, &
7474# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7475 & 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)
7476# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7477 case (260) ! Gaussian Divergence Pulse
7478# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7479 ! Bx(x) = 1 + C * erf((x-0.5)/\sigma) => \partialBx/\partialx = C * (2/\sqrt\pi) * exp[-((x-0.5)/\sigma)**2] * (1/\sigma)
7480# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7481 ! Choose C = \epsilon * \sigma * \sqrt\pi / 2 => \partialBx/\partialx = \epsilon * exp[-((x-0.5)/\sigma)**2] \psi is
7482# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7483 ! initialized to zero everywhere.
7484# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7485
7486# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7487 eps_mhd = patch_icpp(patch_id)%a(2)
7488# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7489 sigma = patch_icpp(patch_id)%a(3)
7490# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7491 c_mhd = eps_mhd*sigma*sqrt(pi)*0.5_wp
7492# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7493
7494# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7495 ! B-field
7496# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7497 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = 1._wp + c_mhd*erf((x_cc(i) - 0.5_wp)/sigma)
7498# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7499 case (261) ! Blob
7500# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7501 r0 = 1._wp/sqrt(8._wp)
7502# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7503 r2 = x_cc(i)**2 + y_cc(j)**2
7504# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7505 r = sqrt(r2)
7506# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7507 alpha = r/r0
7508# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7509 if (alpha < 1) then
7510# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7511 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)
7512# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7513 ! 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)
7514# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7515 ! q_prim_vf(eqn_idx%B%beg)%sf(i,j,0) = 1._wp/(4._wp*pi) * (alpha**8 - 2._wp*alpha**4 + 1._wp)
7516# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7517 ! 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
7518# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7519 end if
7520# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7521 case (262) ! Tilted 2D MHD shock-tube at \alpha = arctan2 (\approx63.4 deg)
7522# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7523 ! rotate by \alpha = atan(2)
7524# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7525 alpha = atan(2._wp)
7526# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7527 cosa = cos(alpha)
7528# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7529 sina = sin(alpha)
7530# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7531 ! projection along shock normal
7532# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7533 r = x_cc(i)*cosa + y_cc(j)*sina
7534# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7535
7536# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7537 if (r <= 0.5_wp) then
7538# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7539 ! LEFT state: \rho=1, v\parallel=+10, v\perp=0, p=20, B\parallel=B\perp=5/\sqrt(4\pi)
7540# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7541 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1._wp
7542# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7543 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 10._wp*cosa
7544# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7545 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = 10._wp*sina
7546# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7547 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 20._wp
7548# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7549 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
7550# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7551 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
7552# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7553 else
7554# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7555 ! RIGHT state: \rho=1, v\parallel=-10, v\perp=0, p=1, B\parallel=B\perp=5/\sqrt(4\pi)
7556# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7557 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1._wp
7558# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7559 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -10._wp*cosa
7560# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7561 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = -10._wp*sina
7562# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7563 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1._wp
7564# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7565 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
7566# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7567 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
7568# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7569 end if
7570# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7571 ! v^z and B^z remain zero by default
7572# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7573 case (270) ! 2D extrusion of 1D profile from external data
7574# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7575 ! This hardcoded case extrudes a 1D profile to initialize a 2D simulation domain
7576# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7577 if (.not. files_loaded) then
7578# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7579 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
7580# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7581 do f = 1, max_files
7582# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7583 write (file_num_str, '(I0)') f
7584# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7585 filenames(f) = trim(files_dir) // "/" // "prim." // trim(file_num_str) // ".00." // trim(file_extension) // ".dat"
7586# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7587 end do
7588# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7589
7590# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7591 ! Common file reading setup
7592# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7593 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
7594# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7595 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
7596# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7597
7598# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7599 select case (num_dims)
7600# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7601 case (1, 2) ! 1D and 2D cases are similar
7602# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7603 ! Count lines
7604# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7605 line_count = 0
7606# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7607 do
7608# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7609 read (unit2, *, iostat=ios2) dummy_x, dummy_y
7610# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7611 if (ios2 /= 0) exit
7612# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7613 line_count = line_count + 1
7614# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7615 end do
7616# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7617 close (unit2)
7618# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7619
7620# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7621 xrows = line_count
7622# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7623 yrows = 1
7624# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7625 index_x = 0
7626# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7627 if (num_dims == 2) index_x = i
7628# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7629#ifdef MFC_DEBUG
7630# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7631 block
7632# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7633 use iso_fortran_env, only: output_unit
7634# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7635
7636# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7637 print *, 'm_icpp_patches.fpp:385: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
7638# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7639
7640# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7641 call flush (output_unit)
7642# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7643 end block
7644# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7645#endif
7646# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7647 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
7648# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7649
7650# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7651
7652# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7653
7654# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7655#if defined(MFC_OpenACC)
7656# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7657!$acc enter data create(x_coords, stored_values)
7658# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7659#elif defined(MFC_OpenMP)
7660# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7661!$omp target enter data map(always,alloc:x_coords, stored_values)
7662# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7663#endif
7664# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7665
7666# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7667 ! Read data from all files
7668# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7669 do f = 1, max_files
7670# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7671 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
7672# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7673 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
7674# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7675
7676# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7677 do iter = 1, xrows
7678# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7679 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
7680# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7681 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
7682# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7683 end do
7684# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7685 close (unit)
7686# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7687 end do
7688# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7689
7690# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7691 ! Calculate offsets
7692# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7693 domain_xstart = x_coords(1)
7694# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7695 x_step = x_cc(1) - x_cc(0)
7696# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7697 delta_x = merge(x_cc(0) - domain_xstart, x_cc(index_x) - domain_xstart, num_dims == 1)
7698# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7699 global_offset_x = nint(abs(delta_x)/x_step)
7700# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7701 case (3) ! 3D case - determine grid structure
7702# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7703 ! Find yRows by counting rows with same x
7704# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7705 read (unit2, *, iostat=ios2) x0, y0, dummy_z
7706# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7707 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
7708# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7709
7710# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7711 yrows = 1
7712# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7713 do
7714# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7715 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
7716# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7717 if (ios2 /= 0) exit
7718# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7719 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
7720# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7721 yrows = yrows + 1
7722# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7723 else
7724# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7725 exit
7726# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7727 end if
7728# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7729 end do
7730# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7731 close (unit2)
7732# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7733
7734# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7735 ! Count total rows
7736# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7737 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
7738# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7739 nrows = 0
7740# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7741 do
7742# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7743 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
7744# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7745 if (ios2 /= 0) exit
7746# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7747 nrows = nrows + 1
7748# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7749 end do
7750# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7751 close (unit2)
7752# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7753
7754# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7755 xrows = nrows/yrows
7756# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7757#ifdef MFC_DEBUG
7758# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7759 block
7760# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7761 use iso_fortran_env, only: output_unit
7762# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7763
7764# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7765 print *, 'm_icpp_patches.fpp:385: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
7766# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7767
7768# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7769 call flush (output_unit)
7770# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7771 end block
7772# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7773#endif
7774# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7775 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
7776# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7777
7778# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7779
7780# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7781
7782# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7783
7784# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7785#if defined(MFC_OpenACC)
7786# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7787!$acc enter data create(x_coords, y_coords, stored_values)
7788# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7789#elif defined(MFC_OpenMP)
7790# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7791!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
7792# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7793#endif
7794# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7795 index_x = i
7796# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7797 index_y = j
7798# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7799
7800# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7801 ! Read all files
7802# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7803 do f = 1, max_files
7804# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7805 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
7806# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7807 if (ios /= 0) then
7808# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7809 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
7810# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7811 cycle
7812# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7813 end if
7814# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7815
7816# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7817 iter = 0
7818# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7819 do iix = 1, xrows
7820# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7821 do iiy = 1, yrows
7822# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7823 iter = iter + 1
7824# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7825 if (f == 1) then
7826# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7827 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
7828# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7829 else
7830# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7831 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
7832# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7833 end if
7834# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7835 if (ios /= 0) call s_mpi_abort("Error reading data")
7836# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7837 end do
7838# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7839 end do
7840# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7841 close (unit)
7842# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7843 end do
7844# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7845
7846# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7847 ! Calculate offsets
7848# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7849 x_step = x_cc(1) - x_cc(0)
7850# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7851 y_step = y_cc(1) - y_cc(0)
7852# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7853 delta_x = x_cc(index_x) - x_coords(1)
7854# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7855 delta_y = y_cc(index_y) - y_coords(1)
7856# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7857 global_offset_x = nint(abs(delta_x)/x_step)
7858# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7859 global_offset_y = nint(abs(delta_y)/y_step)
7860# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7861 end select
7862# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7863
7864# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7865 files_loaded = .true.
7866# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7867 end if
7868# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7869
7870# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7871 ! Data assignment
7872# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7873 select case (num_dims)
7874# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7875 case (1)
7876# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7877 idx = i + 1 + global_offset_x
7878# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7879 ! idx must land inside the file's row range: this rank's subdomain offset
7880# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7881 ! (global_offset_x) was derived from this rank's own grid, so a miss means the
7882# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7883 ! IC file is misaligned/mis-sized for the run grid, not a normal boundary case.
7884# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7885 if (idx < 1 .or. idx > xrows) &
7886# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7887 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
7888# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7889 do f = 1, sys_size
7890# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7891 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
7892# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7893 end do
7894# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7895 case (2)
7896# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7897 idx = i + 1 + global_offset_x - index_x
7898# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7899 if (idx < 1 .or. idx > xrows) &
7900# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7901 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
7902# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7903 do f = 1, sys_size - 1
7904# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7905 jump = merge(1, 0, f >= eqn_idx%mom%end)
7906# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7907 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
7908# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7909 end do
7910# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7911 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
7912# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7913 case (3)
7914# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7915 idx = i + 1 + global_offset_x - index_x
7916# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7917 idy = j + 1 + global_offset_y - index_y
7918# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7919 if (idx < 1 .or. idx > xrows .or. idy < 1 .or. idy > yrows) &
7920# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7921 & call s_mpi_abort("Hardcoded IC extrusion: row/column index out of range (IC file misaligned with the run grid)")
7922# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7923 do f = 1, sys_size - 1
7924# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7925 jump = merge(1, 0, f >= eqn_idx%mom%end)
7926# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7927 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
7928# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7929 end do
7930# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7931 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
7932# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7933 end select
7934# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7935 case (273) ! Temporal reacting mixing layer: 2D extrusion + streamwise velocity
7936# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7937 ! @:HardcodedReadValues() always zeros mom%end (the extruded-axis velocity).
7938# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7939 ! The mom%beg file slot is repurposed to carry the streamwise-velocity-vs-
7940# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7941 ! cross-stream-position profile (real cross-stream velocity is legitimately
7942# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7943 ! zero everywhere in the unperturbed base state), so swap it into mom%end and
7944# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7945 ! zero out mom%beg's true physical value.
7946# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7947 if (.not. files_loaded) then
7948# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7949 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
7950# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7951 do f = 1, max_files
7952# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7953 write (file_num_str, '(I0)') f
7954# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7955 filenames(f) = trim(files_dir) // "/" // "prim." // trim(file_num_str) // ".00." // trim(file_extension) // ".dat"
7956# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7957 end do
7958# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7959
7960# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7961 ! Common file reading setup
7962# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7963 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
7964# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7965 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
7966# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7967
7968# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7969 select case (num_dims)
7970# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7971 case (1, 2) ! 1D and 2D cases are similar
7972# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7973 ! Count lines
7974# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7975 line_count = 0
7976# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7977 do
7978# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7979 read (unit2, *, iostat=ios2) dummy_x, dummy_y
7980# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7981 if (ios2 /= 0) exit
7982# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7983 line_count = line_count + 1
7984# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7985 end do
7986# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7987 close (unit2)
7988# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7989
7990# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7991 xrows = line_count
7992# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7993 yrows = 1
7994# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7995 index_x = 0
7996# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7997 if (num_dims == 2) index_x = i
7998# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
7999#ifdef MFC_DEBUG
8000# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8001 block
8002# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8003 use iso_fortran_env, only: output_unit
8004# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8005
8006# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8007 print *, 'm_icpp_patches.fpp:385: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
8008# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8009
8010# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8011 call flush (output_unit)
8012# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8013 end block
8014# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8015#endif
8016# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8017 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
8018# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8019
8020# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8021
8022# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8023
8024# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8025#if defined(MFC_OpenACC)
8026# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8027!$acc enter data create(x_coords, stored_values)
8028# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8029#elif defined(MFC_OpenMP)
8030# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8031!$omp target enter data map(always,alloc:x_coords, stored_values)
8032# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8033#endif
8034# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8035
8036# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8037 ! Read data from all files
8038# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8039 do f = 1, max_files
8040# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8041 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
8042# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8043 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
8044# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8045
8046# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8047 do iter = 1, xrows
8048# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8049 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
8050# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8051 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
8052# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8053 end do
8054# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8055 close (unit)
8056# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8057 end do
8058# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8059
8060# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8061 ! Calculate offsets
8062# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8063 domain_xstart = x_coords(1)
8064# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8065 x_step = x_cc(1) - x_cc(0)
8066# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8067 delta_x = merge(x_cc(0) - domain_xstart, x_cc(index_x) - domain_xstart, num_dims == 1)
8068# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8069 global_offset_x = nint(abs(delta_x)/x_step)
8070# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8071 case (3) ! 3D case - determine grid structure
8072# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8073 ! Find yRows by counting rows with same x
8074# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8075 read (unit2, *, iostat=ios2) x0, y0, dummy_z
8076# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8077 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
8078# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8079
8080# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8081 yrows = 1
8082# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8083 do
8084# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8085 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
8086# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8087 if (ios2 /= 0) exit
8088# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8089 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
8090# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8091 yrows = yrows + 1
8092# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8093 else
8094# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8095 exit
8096# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8097 end if
8098# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8099 end do
8100# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8101 close (unit2)
8102# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8103
8104# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8105 ! Count total rows
8106# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8107 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
8108# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8109 nrows = 0
8110# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8111 do
8112# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8113 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
8114# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8115 if (ios2 /= 0) exit
8116# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8117 nrows = nrows + 1
8118# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8119 end do
8120# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8121 close (unit2)
8122# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8123
8124# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8125 xrows = nrows/yrows
8126# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8127#ifdef MFC_DEBUG
8128# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8129 block
8130# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8131 use iso_fortran_env, only: output_unit
8132# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8133
8134# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8135 print *, 'm_icpp_patches.fpp:385: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
8136# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8137
8138# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8139 call flush (output_unit)
8140# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8141 end block
8142# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8143#endif
8144# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8145 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
8146# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8147
8148# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8149
8150# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8151
8152# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8153
8154# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8155#if defined(MFC_OpenACC)
8156# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8157!$acc enter data create(x_coords, y_coords, stored_values)
8158# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8159#elif defined(MFC_OpenMP)
8160# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8161!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
8162# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8163#endif
8164# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8165 index_x = i
8166# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8167 index_y = j
8168# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8169
8170# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8171 ! Read all files
8172# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8173 do f = 1, max_files
8174# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8175 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
8176# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8177 if (ios /= 0) then
8178# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8179 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
8180# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8181 cycle
8182# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8183 end if
8184# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8185
8186# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8187 iter = 0
8188# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8189 do iix = 1, xrows
8190# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8191 do iiy = 1, yrows
8192# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8193 iter = iter + 1
8194# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8195 if (f == 1) then
8196# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8197 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
8198# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8199 else
8200# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8201 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
8202# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8203 end if
8204# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8205 if (ios /= 0) call s_mpi_abort("Error reading data")
8206# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8207 end do
8208# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8209 end do
8210# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8211 close (unit)
8212# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8213 end do
8214# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8215
8216# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8217 ! Calculate offsets
8218# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8219 x_step = x_cc(1) - x_cc(0)
8220# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8221 y_step = y_cc(1) - y_cc(0)
8222# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8223 delta_x = x_cc(index_x) - x_coords(1)
8224# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8225 delta_y = y_cc(index_y) - y_coords(1)
8226# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8227 global_offset_x = nint(abs(delta_x)/x_step)
8228# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8229 global_offset_y = nint(abs(delta_y)/y_step)
8230# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8231 end select
8232# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8233
8234# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8235 files_loaded = .true.
8236# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8237 end if
8238# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8239
8240# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8241 ! Data assignment
8242# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8243 select case (num_dims)
8244# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8245 case (1)
8246# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8247 idx = i + 1 + global_offset_x
8248# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8249 ! idx must land inside the file's row range: this rank's subdomain offset
8250# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8251 ! (global_offset_x) was derived from this rank's own grid, so a miss means the
8252# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8253 ! IC file is misaligned/mis-sized for the run grid, not a normal boundary case.
8254# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8255 if (idx < 1 .or. idx > xrows) &
8256# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8257 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
8258# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8259 do f = 1, sys_size
8260# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8261 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
8262# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8263 end do
8264# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8265 case (2)
8266# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8267 idx = i + 1 + global_offset_x - index_x
8268# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8269 if (idx < 1 .or. idx > xrows) &
8270# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8271 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
8272# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8273 do f = 1, sys_size - 1
8274# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8275 jump = merge(1, 0, f >= eqn_idx%mom%end)
8276# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8277 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
8278# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8279 end do
8280# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8281 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
8282# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8283 case (3)
8284# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8285 idx = i + 1 + global_offset_x - index_x
8286# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8287 idy = j + 1 + global_offset_y - index_y
8288# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8289 if (idx < 1 .or. idx > xrows .or. idy < 1 .or. idy > yrows) &
8290# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8291 & call s_mpi_abort("Hardcoded IC extrusion: row/column index out of range (IC file misaligned with the run grid)")
8292# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8293 do f = 1, sys_size - 1
8294# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8295 jump = merge(1, 0, f >= eqn_idx%mom%end)
8296# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8297 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
8298# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8299 end do
8300# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8301 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
8302# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8303 end select
8304# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8305 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0)
8306# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8307 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 0.0_wp
8308# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8309 case (274) ! Full 2D field from external data (no extrusion)
8310# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8311 ! Unlike case(270-273), this reads a genuinely 2D (x,y) field per variable, with no
8312# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8313 ! extrusion direction and no zeroed component -- all sys_size variables are read and
8314# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8315 ! assigned directly. Data files must have exactly (m_glb+1)*(n_glb+1) lines per
8316# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8317 ! variable, in x-major order (outer loop x, inner loop y), matching this rank's
8318# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8319 ! global grid exactly -- by construction, since the IC generator derives both the
8320# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8321 ! grid and the file contents from the same computation.
8322# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8323 !
8324# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8325 ! A local cell's global (x, y) index is derived from x_cc(i)/y_cc(j) against the
8326# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8327 ! file's own first coordinate and this rank's uniform grid spacing -- following the
8328# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8329 ! same pattern as case(270)'s global_offset_x/y above -- rather than from start_idx:
8330# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8331 ! start_idx is only allocated when parallel_io=T (s_initialize_parallel_io_common
8332# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8333 ! returns before allocating it otherwise), so a serial-IO run (the default for
8334# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8335 ! golden-file tests) would index into an unallocated array.
8336# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8337 !
8338# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8339 ! Every rank still scans the whole file (matching case(270)'s existing per-rank-reads-
8340# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8341 ! everything pattern), but stored_values274 only holds this rank's LOCAL (0:m, 0:n)
8342# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8343 ! slice rather than the full global grid -- a full-grid copy on every rank would scale
8344# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8345 ! as O(m_glb*n_glb*sys_size) per rank, which is the wrong axis to duplicate work on for
8346# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8347 ! a genuinely 2D (not 1D-profile) field. local_ix_beg274/local_iy_beg274 (this rank's
8348# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8349 ! global cell offset) are pinned from f274==1's very first record, before any other
8350# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8351 ! record is read, so every subsequent record -- across all variables -- can be tested
8352# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8353 ! against this rank's range and dropped if it falls outside it.
8354# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8355 x_step274 = x_cc(1) - x_cc(0)
8356# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8357 y_step274 = y_cc(1) - y_cc(0)
8358# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8359
8360# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8361 if (.not. files_loaded274) then
8362# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8363#ifdef MFC_DEBUG
8364# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8365 block
8366# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8367 use iso_fortran_env, only: output_unit
8368# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8369
8370# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8371 print *, 'm_icpp_patches.fpp:385: ', '@:ALLOCATE(stored_values274(0:m, 0:n, sys_size))'
8372# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8373
8374# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8375 call flush (output_unit)
8376# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8377 end block
8378# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8379#endif
8380# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8381 allocate (stored_values274(0:m, 0:n, sys_size))
8382# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8383
8384# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8385
8386# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8387#if defined(MFC_OpenACC)
8388# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8389!$acc enter data create(stored_values274)
8390# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8391#elif defined(MFC_OpenMP)
8392# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8393!$omp target enter data map(always,alloc:stored_values274)
8394# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8395#endif
8396# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8397 do f274 = 1, sys_size
8398# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8399 write (file_num_str274, '(I0)') f274
8400# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8401 fname274 = trim(files_dir) // "/prim." // trim(file_num_str274) // ".00." // trim(file_extension) // ".dat"
8402# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8403 open (newunit=unit274, file=trim(fname274), status='old', action='read', iostat=ios274)
8404# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8405 if (ios274 /= 0) call s_mpi_abort("Error opening file: " // trim(fname274))
8406# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8407 do ix274 = 0, m_glb
8408# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8409 do iy274 = 0, n_glb
8410# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8411 read (unit274, *, iostat=ios274) dummy_x274, dummy_y274, dummy_val274
8412# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8413 if (ios274 /= 0) call s_mpi_abort("Error reading file (fewer lines than grid?): " // trim(fname274))
8414# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8415 ! Capture the file's own origin and spacing from its first records so we can
8416# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8417 ! confirm it was sampled on this run's grid (a silent mismatch would otherwise
8418# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8419 ! read a wrong partial slice -> nonphysical field -> VCFL=Inf downstream).
8420# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8421 if (f274 == 1) then
8422# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8423 if (ix274 == 0 .and. iy274 == 0) then
8424# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8425 x0_274 = dummy_x274
8426# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8427 y0_274 = dummy_y274
8428# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8429 local_ix_beg274 = nint((x_cc(0) - x0_274)/x_step274)
8430# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8431 local_iy_beg274 = nint((y_cc(0) - y0_274)/y_step274)
8432# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8433 end if
8434# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8435 if (ix274 == 1 .and. iy274 == 0) file_dx274 = dummy_x274 - x0_274
8436# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8437 if (ix274 == 0 .and. iy274 == 1) file_dy274 = dummy_y274 - y0_274
8438# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8439 end if
8440# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8441 if (ix274 - local_ix_beg274 >= 0 .and. ix274 - local_ix_beg274 <= m .and. iy274 - local_iy_beg274 >= 0 &
8442# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8443 & .and. iy274 - local_iy_beg274 <= n) then
8444# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8445 stored_values274(ix274 - local_ix_beg274, iy274 - local_iy_beg274, f274) = dummy_val274
8446# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8447 end if
8448# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8449 end do
8450# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8451 end do
8452# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8453 ! The file must contain exactly (m_glb+1)*(n_glb+1) records: a successful extra
8454# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8455 ! read means it was generated for a larger grid and would be silently misread.
8456# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8457 read (unit274, *, iostat=ios274) dummy_x274, dummy_y274
8458# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8459 if (ios274 == 0) call s_mpi_abort("hcid=274 file has more lines than the grid: " // trim(fname274))
8460# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8461 close (unit274)
8462# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8463 end do
8464# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8465
8466# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8467 ! The run grid must be aligned with the file grid (uniform grid assumed, as in case 270).
8468# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8469 ! Check alignment via the integer cell offset of this rank's first cell from the file
8470# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8471 ! origin -- decomposition-safe: on every MPI rank x_cc(0) sits an integer number of cells
8472# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8473 ! into the global file, so a non-integer offset means a shifted/mismatched IC. (Comparing
8474# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8475 ! x0_274 to x_cc(0) directly would false-abort every rank whose subdomain doesn't start at
8476# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8477 ! the global origin.) The spacing checks below must also hold.
8478# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8479 r_align274 = (x_cc(0) - x0_274)/x_step274
8480# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8481 if (abs(r_align274 - nint(r_align274)) > 1.e-6_wp) &
8482# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8483 & call s_mpi_abort("hcid=274 file x-grid is misaligned with the run grid; regenerate the IC for this grid.")
8484# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8485 if (m_glb >= 1) then
8486# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8487 if (abs(file_dx274 - x_step274) > 1.e-6_wp*abs(x_step274)) &
8488# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8489 & call s_mpi_abort("hcid=274 file x-spacing does not match the grid; regenerate the IC for this grid.")
8490# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8491 end if
8492# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8493 if (n_glb >= 1) then
8494# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8495 r_align274 = (y_cc(0) - y0_274)/y_step274
8496# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8497 if (abs(r_align274 - nint(r_align274)) > 1.e-6_wp) &
8498# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8499 & call s_mpi_abort("hcid=274 file y-grid is misaligned with the run grid; regenerate the IC for this grid.")
8500# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8501 if (abs(file_dy274 - y_step274) > 1.e-6_wp*abs(y_step274)) &
8502# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8503 & call s_mpi_abort("hcid=274 file y-spacing does not match the grid; regenerate the IC for this grid.")
8504# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8505 end if
8506# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8507
8508# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8509 files_loaded274 = .true.
8510# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8511 end if
8512# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8513 ! Alignment is verified above (or this rank would already have aborted), so the local
8514# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8515 ! cell (i, j) maps to stored_values274(i, j, :) directly -- no re-derivation needed.
8516# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8517 do f274 = 1, sys_size
8518# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8519 q_prim_vf(f274)%sf(i, j, 0) = stored_values274(i, j, f274)
8520# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8521 end do
8522# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8523 case (271) ! Premixed Flame Vortices Interaction
8524# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8525 if (.not. files_loaded) then
8526# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8527 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
8528# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8529 do f = 1, max_files
8530# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8531 write (file_num_str, '(I0)') f
8532# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8533 filenames(f) = trim(files_dir) // "/" // "prim." // trim(file_num_str) // ".00." // trim(file_extension) // ".dat"
8534# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8535 end do
8536# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8537
8538# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8539 ! Common file reading setup
8540# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8541 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
8542# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8543 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
8544# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8545
8546# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8547 select case (num_dims)
8548# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8549 case (1, 2) ! 1D and 2D cases are similar
8550# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8551 ! Count lines
8552# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8553 line_count = 0
8554# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8555 do
8556# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8557 read (unit2, *, iostat=ios2) dummy_x, dummy_y
8558# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8559 if (ios2 /= 0) exit
8560# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8561 line_count = line_count + 1
8562# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8563 end do
8564# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8565 close (unit2)
8566# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8567
8568# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8569 xrows = line_count
8570# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8571 yrows = 1
8572# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8573 index_x = 0
8574# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8575 if (num_dims == 2) index_x = i
8576# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8577#ifdef MFC_DEBUG
8578# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8579 block
8580# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8581 use iso_fortran_env, only: output_unit
8582# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8583
8584# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8585 print *, 'm_icpp_patches.fpp:385: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
8586# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8587
8588# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8589 call flush (output_unit)
8590# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8591 end block
8592# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8593#endif
8594# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8595 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
8596# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8597
8598# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8599
8600# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8601
8602# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8603#if defined(MFC_OpenACC)
8604# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8605!$acc enter data create(x_coords, stored_values)
8606# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8607#elif defined(MFC_OpenMP)
8608# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8609!$omp target enter data map(always,alloc:x_coords, stored_values)
8610# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8611#endif
8612# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8613
8614# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8615 ! Read data from all files
8616# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8617 do f = 1, max_files
8618# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8619 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
8620# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8621 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
8622# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8623
8624# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8625 do iter = 1, xrows
8626# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8627 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
8628# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8629 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
8630# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8631 end do
8632# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8633 close (unit)
8634# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8635 end do
8636# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8637
8638# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8639 ! Calculate offsets
8640# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8641 domain_xstart = x_coords(1)
8642# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8643 x_step = x_cc(1) - x_cc(0)
8644# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8645 delta_x = merge(x_cc(0) - domain_xstart, x_cc(index_x) - domain_xstart, num_dims == 1)
8646# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8647 global_offset_x = nint(abs(delta_x)/x_step)
8648# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8649 case (3) ! 3D case - determine grid structure
8650# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8651 ! Find yRows by counting rows with same x
8652# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8653 read (unit2, *, iostat=ios2) x0, y0, dummy_z
8654# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8655 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
8656# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8657
8658# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8659 yrows = 1
8660# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8661 do
8662# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8663 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
8664# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8665 if (ios2 /= 0) exit
8666# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8667 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
8668# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8669 yrows = yrows + 1
8670# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8671 else
8672# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8673 exit
8674# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8675 end if
8676# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8677 end do
8678# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8679 close (unit2)
8680# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8681
8682# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8683 ! Count total rows
8684# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8685 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
8686# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8687 nrows = 0
8688# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8689 do
8690# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8691 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
8692# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8693 if (ios2 /= 0) exit
8694# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8695 nrows = nrows + 1
8696# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8697 end do
8698# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8699 close (unit2)
8700# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8701
8702# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8703 xrows = nrows/yrows
8704# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8705#ifdef MFC_DEBUG
8706# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8707 block
8708# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8709 use iso_fortran_env, only: output_unit
8710# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8711
8712# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8713 print *, 'm_icpp_patches.fpp:385: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
8714# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8715
8716# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8717 call flush (output_unit)
8718# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8719 end block
8720# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8721#endif
8722# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8723 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
8724# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8725
8726# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8727
8728# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8729
8730# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8731
8732# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8733#if defined(MFC_OpenACC)
8734# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8735!$acc enter data create(x_coords, y_coords, stored_values)
8736# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8737#elif defined(MFC_OpenMP)
8738# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8739!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
8740# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8741#endif
8742# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8743 index_x = i
8744# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8745 index_y = j
8746# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8747
8748# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8749 ! Read all files
8750# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8751 do f = 1, max_files
8752# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8753 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
8754# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8755 if (ios /= 0) then
8756# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8757 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
8758# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8759 cycle
8760# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8761 end if
8762# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8763
8764# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8765 iter = 0
8766# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8767 do iix = 1, xrows
8768# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8769 do iiy = 1, yrows
8770# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8771 iter = iter + 1
8772# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8773 if (f == 1) then
8774# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8775 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
8776# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8777 else
8778# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8779 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
8780# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8781 end if
8782# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8783 if (ios /= 0) call s_mpi_abort("Error reading data")
8784# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8785 end do
8786# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8787 end do
8788# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8789 close (unit)
8790# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8791 end do
8792# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8793
8794# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8795 ! Calculate offsets
8796# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8797 x_step = x_cc(1) - x_cc(0)
8798# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8799 y_step = y_cc(1) - y_cc(0)
8800# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8801 delta_x = x_cc(index_x) - x_coords(1)
8802# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8803 delta_y = y_cc(index_y) - y_coords(1)
8804# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8805 global_offset_x = nint(abs(delta_x)/x_step)
8806# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8807 global_offset_y = nint(abs(delta_y)/y_step)
8808# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8809 end select
8810# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8811
8812# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8813 files_loaded = .true.
8814# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8815 end if
8816# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8817
8818# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8819 ! Data assignment
8820# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8821 select case (num_dims)
8822# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8823 case (1)
8824# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8825 idx = i + 1 + global_offset_x
8826# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8827 ! idx must land inside the file's row range: this rank's subdomain offset
8828# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8829 ! (global_offset_x) was derived from this rank's own grid, so a miss means the
8830# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8831 ! IC file is misaligned/mis-sized for the run grid, not a normal boundary case.
8832# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8833 if (idx < 1 .or. idx > xrows) &
8834# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8835 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
8836# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8837 do f = 1, sys_size
8838# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8839 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
8840# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8841 end do
8842# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8843 case (2)
8844# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8845 idx = i + 1 + global_offset_x - index_x
8846# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8847 if (idx < 1 .or. idx > xrows) &
8848# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8849 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
8850# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8851 do f = 1, sys_size - 1
8852# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8853 jump = merge(1, 0, f >= eqn_idx%mom%end)
8854# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8855 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
8856# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8857 end do
8858# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8859 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
8860# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8861 case (3)
8862# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8863 idx = i + 1 + global_offset_x - index_x
8864# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8865 idy = j + 1 + global_offset_y - index_y
8866# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8867 if (idx < 1 .or. idx > xrows .or. idy < 1 .or. idy > yrows) &
8868# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8869 & call s_mpi_abort("Hardcoded IC extrusion: row/column index out of range (IC file misaligned with the run grid)")
8870# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8871 do f = 1, sys_size - 1
8872# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8873 jump = merge(1, 0, f >= eqn_idx%mom%end)
8874# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8875 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
8876# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8877 end do
8878# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8879 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
8880# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8881 end select
8882# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8883 x1c = 0.0027_wp
8884# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8885 y1c = 0.005_wp
8886# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8887 x2c = 0.0027_wp
8888# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8889 y2c = 0.003_wp
8890# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8891 r1c = (x_cc(i) - x1c)**(2.0_wp) + (y_cc(j) - y1c)**(2.0_wp)
8892# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8893 r2c = (x_cc(i) - x2c)**(2.0_wp) + (y_cc(j) - y2c)**(2.0_wp)
8894# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8895 rvortex = 0.0005_wp
8896# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8897 cvortex = 6000.0_wp
8898# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8899
8900# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8901 u1c = -cvortex*((y_cc(j) - y1c))*exp(-r1c/(2.0_wp*rvortex**2.0_wp))
8902# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8903 v1c = cvortex*((x_cc(i) - x1c))*exp(-r1c/(2.0_wp*rvortex**2.0_wp))
8904# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8905
8906# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8907 u2c = cvortex*((y_cc(j) - y2c))*exp(-r2c/(2.0_wp*rvortex**2.0_wp))
8908# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8909 v2c = -cvortex*((x_cc(i) - x2c))*exp(-r2c/(2.0_wp*rvortex**2.0_wp))
8910# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8911 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) + u1c + u2c
8912# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8913 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = v1c + v2c
8914# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8915 case (272) ! Premixed Flame Instability
8916# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8917 if (.not. files_loaded) then
8918# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8919 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
8920# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8921 do f = 1, max_files
8922# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8923 write (file_num_str, '(I0)') f
8924# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8925 filenames(f) = trim(files_dir) // "/" // "prim." // trim(file_num_str) // ".00." // trim(file_extension) // ".dat"
8926# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8927 end do
8928# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8929
8930# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8931 ! Common file reading setup
8932# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8933 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
8934# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8935 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
8936# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8937
8938# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8939 select case (num_dims)
8940# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8941 case (1, 2) ! 1D and 2D cases are similar
8942# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8943 ! Count lines
8944# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8945 line_count = 0
8946# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8947 do
8948# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8949 read (unit2, *, iostat=ios2) dummy_x, dummy_y
8950# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8951 if (ios2 /= 0) exit
8952# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8953 line_count = line_count + 1
8954# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8955 end do
8956# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8957 close (unit2)
8958# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8959
8960# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8961 xrows = line_count
8962# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8963 yrows = 1
8964# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8965 index_x = 0
8966# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8967 if (num_dims == 2) index_x = i
8968# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8969#ifdef MFC_DEBUG
8970# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8971 block
8972# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8973 use iso_fortran_env, only: output_unit
8974# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8975
8976# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8977 print *, 'm_icpp_patches.fpp:385: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
8978# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8979
8980# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8981 call flush (output_unit)
8982# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8983 end block
8984# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8985#endif
8986# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8987 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
8988# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8989
8990# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8991
8992# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8993
8994# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8995#if defined(MFC_OpenACC)
8996# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8997!$acc enter data create(x_coords, stored_values)
8998# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
8999#elif defined(MFC_OpenMP)
9000# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9001!$omp target enter data map(always,alloc:x_coords, stored_values)
9002# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9003#endif
9004# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9005
9006# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9007 ! Read data from all files
9008# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9009 do f = 1, max_files
9010# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9011 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
9012# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9013 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
9014# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9015
9016# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9017 do iter = 1, xrows
9018# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9019 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
9020# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9021 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
9022# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9023 end do
9024# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9025 close (unit)
9026# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9027 end do
9028# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9029
9030# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9031 ! Calculate offsets
9032# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9033 domain_xstart = x_coords(1)
9034# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9035 x_step = x_cc(1) - x_cc(0)
9036# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9037 delta_x = merge(x_cc(0) - domain_xstart, x_cc(index_x) - domain_xstart, num_dims == 1)
9038# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9039 global_offset_x = nint(abs(delta_x)/x_step)
9040# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9041 case (3) ! 3D case - determine grid structure
9042# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9043 ! Find yRows by counting rows with same x
9044# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9045 read (unit2, *, iostat=ios2) x0, y0, dummy_z
9046# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9047 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
9048# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9049
9050# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9051 yrows = 1
9052# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9053 do
9054# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9055 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
9056# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9057 if (ios2 /= 0) exit
9058# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9059 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
9060# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9061 yrows = yrows + 1
9062# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9063 else
9064# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9065 exit
9066# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9067 end if
9068# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9069 end do
9070# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9071 close (unit2)
9072# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9073
9074# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9075 ! Count total rows
9076# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9077 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
9078# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9079 nrows = 0
9080# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9081 do
9082# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9083 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
9084# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9085 if (ios2 /= 0) exit
9086# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9087 nrows = nrows + 1
9088# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9089 end do
9090# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9091 close (unit2)
9092# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9093
9094# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9095 xrows = nrows/yrows
9096# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9097#ifdef MFC_DEBUG
9098# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9099 block
9100# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9101 use iso_fortran_env, only: output_unit
9102# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9103
9104# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9105 print *, 'm_icpp_patches.fpp:385: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
9106# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9107
9108# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9109 call flush (output_unit)
9110# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9111 end block
9112# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9113#endif
9114# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9115 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
9116# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9117
9118# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9119
9120# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9121
9122# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9123
9124# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9125#if defined(MFC_OpenACC)
9126# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9127!$acc enter data create(x_coords, y_coords, stored_values)
9128# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9129#elif defined(MFC_OpenMP)
9130# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9131!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
9132# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9133#endif
9134# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9135 index_x = i
9136# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9137 index_y = j
9138# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9139
9140# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9141 ! Read all files
9142# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9143 do f = 1, max_files
9144# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9145 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
9146# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9147 if (ios /= 0) then
9148# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9149 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
9150# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9151 cycle
9152# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9153 end if
9154# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9155
9156# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9157 iter = 0
9158# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9159 do iix = 1, xrows
9160# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9161 do iiy = 1, yrows
9162# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9163 iter = iter + 1
9164# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9165 if (f == 1) then
9166# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9167 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
9168# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9169 else
9170# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9171 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
9172# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9173 end if
9174# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9175 if (ios /= 0) call s_mpi_abort("Error reading data")
9176# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9177 end do
9178# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9179 end do
9180# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9181 close (unit)
9182# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9183 end do
9184# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9185
9186# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9187 ! Calculate offsets
9188# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9189 x_step = x_cc(1) - x_cc(0)
9190# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9191 y_step = y_cc(1) - y_cc(0)
9192# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9193 delta_x = x_cc(index_x) - x_coords(1)
9194# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9195 delta_y = y_cc(index_y) - y_coords(1)
9196# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9197 global_offset_x = nint(abs(delta_x)/x_step)
9198# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9199 global_offset_y = nint(abs(delta_y)/y_step)
9200# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9201 end select
9202# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9203
9204# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9205 files_loaded = .true.
9206# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9207 end if
9208# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9209
9210# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9211 ! Data assignment
9212# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9213 select case (num_dims)
9214# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9215 case (1)
9216# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9217 idx = i + 1 + global_offset_x
9218# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9219 ! idx must land inside the file's row range: this rank's subdomain offset
9220# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9221 ! (global_offset_x) was derived from this rank's own grid, so a miss means the
9222# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9223 ! IC file is misaligned/mis-sized for the run grid, not a normal boundary case.
9224# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9225 if (idx < 1 .or. idx > xrows) &
9226# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9227 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
9228# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9229 do f = 1, sys_size
9230# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9231 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
9232# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9233 end do
9234# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9235 case (2)
9236# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9237 idx = i + 1 + global_offset_x - index_x
9238# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9239 if (idx < 1 .or. idx > xrows) &
9240# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9241 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
9242# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9243 do f = 1, sys_size - 1
9244# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9245 jump = merge(1, 0, f >= eqn_idx%mom%end)
9246# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9247 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
9248# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9249 end do
9250# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9251 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
9252# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9253 case (3)
9254# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9255 idx = i + 1 + global_offset_x - index_x
9256# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9257 idy = j + 1 + global_offset_y - index_y
9258# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9259 if (idx < 1 .or. idx > xrows .or. idy < 1 .or. idy > yrows) &
9260# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9261 & call s_mpi_abort("Hardcoded IC extrusion: row/column index out of range (IC file misaligned with the run grid)")
9262# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9263 do f = 1, sys_size - 1
9264# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9265 jump = merge(1, 0, f >= eqn_idx%mom%end)
9266# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9267 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
9268# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9269 end do
9270# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9271 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
9272# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9273 end select
9274# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9275
9276# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9277 y_center = y0_ref
9278# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9279 y_dist = y_cc(j) - y_center
9280# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9281 wave_phase = 2.0_wp*pi*nwaves*(y_dist/ly_param)
9282# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9283 front_shift = a_param*sin(wave_phase)
9284# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9285
9286# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9287 x_mapped = x_cc(i) - front_shift
9288# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9289
9290# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9291 if (x_mapped <= x_coords(1)) then
9292# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9293 do v = 1, sys_size - 1
9294# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9295 q_prim_vf(v + merge(1, 0, v >= eqn_idx%mom%end))%sf(i, j, 0) = stored_values(1, 1, v)
9296# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9297 end do
9298# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9299 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
9300# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9301 else if (x_mapped >= x_coords(xrows)) then
9302# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9303 do v = 1, sys_size - 1
9304# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9305 q_prim_vf(v + merge(1, 0, v >= eqn_idx%mom%end))%sf(i, j, 0) = stored_values(xrows, 1, v)
9306# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9307 end do
9308# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9309 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
9310# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9311 else
9312# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9313 idx_lo = 1; idx_hi = xrows
9314# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9315 do while (idx_hi - idx_lo > 1)
9316# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9317 idx_mid = (idx_lo + idx_hi)/2
9318# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9319 if (x_coords(idx_mid) <= x_mapped) then
9320# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9321 idx_lo = idx_mid
9322# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9323 else
9324# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9325 idx_hi = idx_mid
9326# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9327 end if
9328# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9329 end do
9330# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9331
9332# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9333 interp_wt = (x_mapped - x_coords(idx_lo))/(x_coords(idx_hi) - x_coords(idx_lo)) ! weight in [0,1)
9334# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9335
9336# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9337 do v = 1, sys_size - 1
9338# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9339 q_prim_vf(v + merge(1, 0, v >= eqn_idx%mom%end))%sf(i, j, 0) = (1.0_wp - interp_wt)*stored_values(idx_lo, 1, &
9340# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9341 & v) + interp_wt*stored_values(idx_hi, 1, v)
9342# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9343 end do
9344# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9345 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
9346# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9347 end if
9348# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9349 case (280) ! Isentropic vortex
9350# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9351 ! This is patch is hard-coded for test suite optimization used in the 2D_isentropicvortex case: This analytic patch uses
9352# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9353 ! geometry 2
9354# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9355 if (patch_id == 1) then
9356# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9357 q_prim_vf(eqn_idx%E)%sf(i, j, &
9358# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9359 & 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) &
9360# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9361 & - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0)))**(1.4 + 1.0)
9362# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9363 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, j, &
9364# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9365 & 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) &
9366# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9367 & - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0)))**1.4
9368# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9369 q_prim_vf(eqn_idx%mom%beg + 0)%sf(i, j, &
9370# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9371 & 0) = patch_icpp(1)%vel(1) + (y_cc(j) - patch_icpp(1)%y_centroid)*(5.0/(2.0*pi))*exp(1.0*(1.0 - (x_cc(i) &
9372# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9373 & - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0))
9374# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9375 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, &
9376# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9377 & 0) = patch_icpp(1)%vel(2) - (x_cc(i) - patch_icpp(1)%x_centroid)*(5.0/(2.0*pi))*exp(1.0*(1.0 - (x_cc(i) &
9378# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9379 & - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0))
9380# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9381 end if
9382# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9383 case (281) ! Acoustic pulse
9384# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9385 ! This is patch is hard-coded for test suite optimization used in the 2D_acoustic_pulse case: This analytic patch uses
9386# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9387 ! geometry 2
9388# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9389 if (patch_id == 2) then
9390# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9391 q_prim_vf(eqn_idx%E)%sf(i, j, &
9392# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9393 & 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))
9394# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9395 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, j, &
9396# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9397 & 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))
9398# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9399 end if
9400# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9401 case (282) ! Zero-circulation vortex
9402# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9403 ! This is patch is hard-coded for test suite optimization used in the 2D_zero_circ_vortex case: This analytic patch uses
9404# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9405 ! geometry 2
9406# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9407 if (patch_id == 2) then
9408# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9409 q_prim_vf(eqn_idx%E)%sf(i, j, &
9410# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9411 & 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))
9412# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9413 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, j, &
9414# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9415 & 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))
9416# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9417 q_prim_vf(eqn_idx%mom%beg + 0)%sf(i, j, &
9418# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9419 & 0) = 112.99092883944267*(1 - (0.1/0.3))*y_cc(j)*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2)))
9420# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9421 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, &
9422# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9423 & 0) = 112.99092883944267*((0.1/0.3))*x_cc(i)*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2)))
9424# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9425 end if
9426# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9427 case (283) ! Isentropic vortex: conserved-variable GL cell averages (3-pt tensor product)
9428# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9429 ! GL averages of conserved variables (rho, rho*u, rho*v, E) eliminate the O(h^2) error that primitive-variable averaging
9430# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9431 ! introduces through the nonlinear prim->cons conversion: cell_avg(rho*u) != cell_avg(rho)*cell_avg(u) by O(h^2). We back
9432# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9433 ! out primitive values that reproduce the conserved averages exactly. Vortex strength eps is read from
9434# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9435 ! patch_icpp(patch_id)%epsilon; defaults to 5.
9436# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9437 if (patch_id == 1) then
9438# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9439 vortex_eps = merge(patch_icpp(patch_id)%epsilon, 5._wp, patch_icpp(patch_id)%epsilon > 0._wp)
9440# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9441 gauss_xi = [-sqrt(3._wp/5._wp), 0._wp, sqrt(3._wp/5._wp)]
9442# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9443 gauss_w = [5._wp/9._wp, 8._wp/9._wp, 5._wp/9._wp]
9444# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9445 rho_avg = 0._wp; rhou_avg = 0._wp; rhov_avg = 0._wp; e_avg = 0._wp
9446# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9447 do igq = 1, 3
9448# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9449 do jgq = 1, 3
9450# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9451 xq = x_cc(i) + gauss_xi(igq)*(x_cb(i) - x_cb(i - 1))*0.5_wp
9452# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9453 yq = y_cc(j) + gauss_xi(jgq)*(y_cb(j) - y_cb(j - 1))*0.5_wp
9454# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9455 r2q = (xq - patch_icpp(patch_id)%x_centroid)**2._wp + (yq - patch_icpp(patch_id)%y_centroid)**2._wp
9456# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9457 t_facq = 1._wp - (vortex_eps/(2._wp*pi))*(vortex_eps/(8._wp*(1.4_wp + 1._wp)*pi))*exp(2._wp*(1._wp - r2q))
9458# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9459 wq = gauss_w(igq)*gauss_w(jgq)
9460# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9461 rhoq = t_facq**1.4_wp
9462# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9463 pq = t_facq**2.4_wp
9464# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9465 uq = patch_icpp(patch_id)%vel(1) + (yq - patch_icpp(patch_id)%y_centroid)*(vortex_eps/(2._wp*pi))*exp(1._wp &
9466# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9467 & - r2q)
9468# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9469 vq = patch_icpp(patch_id)%vel(2) - (xq - patch_icpp(patch_id)%x_centroid)*(vortex_eps/(2._wp*pi))*exp(1._wp &
9470# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9471 & - r2q)
9472# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9473 eq = pq/0.4_wp + 0.5_wp*rhoq*(uq**2 + vq**2)
9474# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9475 rho_avg = rho_avg + wq*rhoq
9476# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9477 rhou_avg = rhou_avg + wq*(rhoq*uq)
9478# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9479 rhov_avg = rhov_avg + wq*(rhoq*vq)
9480# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9481 e_avg = e_avg + wq*eq
9482# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9483 end do
9484# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9485 end do
9486# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9487 rho_avg = rho_avg*0.25_wp
9488# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9489 rhou_avg = rhou_avg*0.25_wp
9490# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9491 rhov_avg = rhov_avg*0.25_wp
9492# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9493 e_avg = e_avg*0.25_wp
9494# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9495 ! Back out primitive vars so prim->cons conversion recovers the conserved averages
9496# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9497 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = rho_avg
9498# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9499 q_prim_vf(eqn_idx%mom%beg + 0)%sf(i, j, 0) = rhou_avg/rho_avg
9500# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9501 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = rhov_avg/rho_avg
9502# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9503 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = (e_avg - 0.5_wp*(rhou_avg**2 + rhov_avg**2)/rho_avg)*0.4_wp
9504# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9505 end if
9506# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9507 case (291) ! Isothermal Flat Plate
9508# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9509 t_inf = 1125.0_wp
9510# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9511 t_wall = 600.0_wp
9512# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9513 p_atm = 101325.0_wp
9514# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9515
9516# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9517 ! Boundary/Shear Layer thicknesses
9518# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9519 delta_th = 0.0003_wp ! Thermal BL thickness
9520# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9521 delta_shear = 8e-3_wp ! Velocity BL thickness
9522# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9523
9524# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9525 u_max = 50.0_wp ! Freestream Velocity (m/s)
9526# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9527
9528# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9529 mw_n2 = 28.0134e-3_wp
9530# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9531 mw_o2 = 31.999e-3_wp
9532# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9533 y_n2 = 0.767_wp
9534# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9535 y_o2 = 0.233_wp
9536# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9537 r_mix = 8.314462618_wp*((y_n2/mw_n2) + (y_o2/mw_o2))
9538# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9539 bottom_blend_u = tanh(y_cc(j)/delta_shear)
9540# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9541 bottom_blend_t = tanh(y_cc(j)/delta_th)
9542# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9543 u_mean = u_max*bottom_blend_u
9544# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9545 t_loc = t_wall + (t_inf - t_wall)*bottom_blend_t
9546# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9547 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = p_atm/(r_mix*t_loc)
9548# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9549 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = u_mean
9550# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9551 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
9552# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9553 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p_atm
9554# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9555 q_prim_vf(eqn_idx%species%beg)%sf(i, j, 0) = y_o2
9556# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9557 q_prim_vf(eqn_idx%species%end)%sf(i, j, 0) = y_n2
9558# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9559 case default
9560# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9561 if (proc_rank == 0) then
9562# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9563 call s_int_to_str(patch_id, istr)
9564# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9565 call s_mpi_abort("Invalid hcid specified for patch " // trim(istr))
9566# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9567 end if
9568# 385 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9569 end select
9570 end if
9571
9572 ! Updating the patch identities bookkeeping variable
9573 if (1._wp - eta < sgm_eps) patch_id_fp(i, j, 0) = patch_id
9574
9575 q_prim_vf(eqn_idx%alf)%sf(i, j, &
9576 & 0) = patch_icpp(patch_id)%alpha(1)*exp(-0.5_wp*((myr - radius)**2._wp)/(thickness/3._wp)**2._wp)
9577 end if
9578 end do
9579 end do
9580 if (allocated(stored_values)) then
9581# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9582#ifdef MFC_DEBUG
9583# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9584 block
9585# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9586 use iso_fortran_env, only: output_unit
9587# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9588
9589# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9590 print *, 'm_icpp_patches.fpp:396: ', '@:DEALLOCATE(stored_values)'
9591# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9592
9593# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9594 call flush (output_unit)
9595# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9596 end block
9597# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9598#endif
9599# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9600
9601# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9602#if defined(MFC_OpenACC)
9603# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9604!$acc exit data delete(stored_values)
9605# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9606#elif defined(MFC_OpenMP)
9607# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9608!$omp target exit data map(release:stored_values)
9609# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9610#endif
9611# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9612 deallocate (stored_values)
9613# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9614#ifdef MFC_DEBUG
9615# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9616 block
9617# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9618 use iso_fortran_env, only: output_unit
9619# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9620
9621# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9622 print *, 'm_icpp_patches.fpp:396: ', '@:DEALLOCATE(x_coords)'
9623# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9624
9625# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9626 call flush (output_unit)
9627# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9628 end block
9629# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9630#endif
9631# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9632
9633# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9634#if defined(MFC_OpenACC)
9635# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9636!$acc exit data delete(x_coords)
9637# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9638#elif defined(MFC_OpenMP)
9639# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9640!$omp target exit data map(release:x_coords)
9641# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9642#endif
9643# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9644 deallocate (x_coords)
9645# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9646 end if
9647# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9648
9649# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9650 if (allocated(y_coords)) then
9651# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9652#ifdef MFC_DEBUG
9653# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9654 block
9655# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9656 use iso_fortran_env, only: output_unit
9657# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9658
9659# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9660 print *, 'm_icpp_patches.fpp:396: ', '@:DEALLOCATE(y_coords)'
9661# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9662
9663# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9664 call flush (output_unit)
9665# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9666 end block
9667# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9668#endif
9669# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9670
9671# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9672#if defined(MFC_OpenACC)
9673# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9674!$acc exit data delete(y_coords)
9675# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9676#elif defined(MFC_OpenMP)
9677# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9678!$omp target exit data map(release:y_coords)
9679# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9680#endif
9681# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9682 deallocate (y_coords)
9683# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9684 end if
9685# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9686
9687# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9688 files_loaded = .false.
9689# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9690
9691# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9692 if (allocated(stored_values274)) then
9693# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9694#ifdef MFC_DEBUG
9695# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9696 block
9697# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9698 use iso_fortran_env, only: output_unit
9699# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9700
9701# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9702 print *, 'm_icpp_patches.fpp:396: ', '@:DEALLOCATE(stored_values274)'
9703# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9704
9705# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9706 call flush (output_unit)
9707# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9708 end block
9709# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9710#endif
9711# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9712
9713# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9714#if defined(MFC_OpenACC)
9715# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9716!$acc exit data delete(stored_values274)
9717# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9718#elif defined(MFC_OpenMP)
9719# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9720!$omp target exit data map(release:stored_values274)
9721# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9722#endif
9723# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9724 deallocate (stored_values274)
9725# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9726 end if
9727# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9728
9729# 396 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9730 files_loaded274 = .false.
9731
9732 end subroutine s_icpp_varcircle
9733
9734 !> Initialize a 3D variable-thickness circular annulus patch extruded along the z-axis.
9735 subroutine s_icpp_3dvarcircle(patch_id, patch_id_fp, q_prim_vf)
9736
9737 ! Patch identifier
9738 integer, intent(in) :: patch_id
9739
9740#ifdef MFC_MIXED_PRECISION
9741 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
9742#else
9743 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
9744#endif
9745 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
9746
9747 ! Generic loop iterators
9748 integer :: i, j, k
9749 real(wp) :: radius, myr, thickness
9750
9751 integer :: xRows, yRows, nRows, iix, iiy, max_files
9752# 417 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9753 integer :: f, iter, unit, unit2, idx, idy, index_x, index_y, jump, line_count
9754# 417 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9755 real(wp) :: x_step, y_step
9756# 417 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9757 real(wp) :: dummy_x, dummy_y, dummy_z, x0, y0
9758# 417 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9759 integer :: global_offset_x, global_offset_y !< MPI subdomain offset
9760# 417 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9761 real(wp) :: delta_x, delta_y
9762# 417 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9763 character(len=300), dimension(sys_size) :: fileNames !< Arrays to store all data from files
9764# 417 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9765 real(wp), allocatable :: stored_values(:,:,:)
9766# 417 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9767 real(wp), allocatable :: x_coords(:), y_coords(:)
9768# 417 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9769 logical :: files_loaded = .false.
9770# 417 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9771 real(wp) :: domain_xstart
9772# 417 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9773 character(len=20) :: file_num_str !< For storing the file number as a string
9774# 417 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9775 integer :: ios
9776# 417 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9777 integer :: ios2
9778# 417 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9779
9780# 417 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9781 ! hcid=274 (2dHardcodedIC.fpp): full 2D field from external data, no extrusion.
9782# 417 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9783 ! Declared here (not in Hardcoded2DVariables()) so it's visible wherever
9784# 417 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9785 ! HardcodedDeallocation() is called, matching the pattern of stored_values/x_coords/
9786# 417 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9787 ! y_coords/files_loaded above.
9788# 417 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9789 real(wp), allocatable, dimension(:,:,:) :: stored_values274
9790# 417 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9791 logical :: files_loaded274 = .false.
9792# 417 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9793 integer :: f274, ix274, iy274, unit274, ios274
9794# 417 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9795 integer :: local_ix_beg274, local_iy_beg274
9796# 417 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9797 character(len=300) :: fname274
9798# 417 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9799 character(len=20) :: file_num_str274
9800# 417 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9801 real(wp) :: dummy_x274, dummy_y274, dummy_val274, x0_274, y0_274, x_step274, y_step274
9802# 417 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9803 real(wp) :: file_dx274, file_dy274, r_align274
9804 ! Place any declaration of intermediate variables here
9805# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9806 real(wp) :: rhoH, rhoL, pRef, pInt, h, lam, wl, amp, intH, alph, Mach
9807# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9808 real(wp) :: eps
9809# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9810
9811# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9812 ! IGR Jets Arrays to stor position and radii of jets from input file
9813# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9814 real(wp), dimension(:), allocatable :: y_th_arr, z_th_arr, r_th_arr
9815# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9816 ! Variables to describe initial condition of jet
9817# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9818 real(wp) :: r, ux_th, ux_am, p_th, p_am, rho_th, rho_am, y_th, z_th, r_th, eps_smooth
9819# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9820 real(wp) :: rcut, xcut !< Intermediate variables for creating smooth initial condition
9821# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9822 real(wp), dimension(0:n,0:p) :: rcut_arr
9823# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9824 integer :: l, q, s !< Iterators for reading input files
9825# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9826 integer :: start, end !< Ints to keep track of position in file
9827# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9828 character(len=100000) :: line ! String to store line in file
9829# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9830 character(len=25) :: value !< String to store value in line
9831# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9832 integer :: NJet !< Number of jets
9833# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9834 real(wp), allocatable, dimension(:,:) :: ih ! Array to store interface height in
9835# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9836 logical :: file_exist ! Flag to check if file exists
9837# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9838
9839# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9840 eps = 1e-9_wp
9841# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9842
9843# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9844 if (patch_icpp(patch_id)%hcid == 303) then ! IGR Multijet
9845# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9846 eps_smooth = 3._wp
9847# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9848 inquire (file="njet.txt", exist=file_exist)
9849# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9850 if (file_exist) then
9851# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9852 open (unit=10, file="njet.txt", status="old", action="read")
9853# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9854 read (10, *) njet
9855# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9856 close (10)
9857# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9858 else
9859# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9860 call s_mpi_abort("Error: njet.txt file specified for hcid=303 does not exist")
9861# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9862 end if
9863# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9864
9865# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9866#ifdef MFC_DEBUG
9867# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9868 block
9869# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9870 use iso_fortran_env, only: output_unit
9871# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9872
9873# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9874 print *, 'm_icpp_patches.fpp:418: ', '@:ALLOCATE(y_th_arr(0:NJet - 1))'
9875# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9876
9877# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9878 call flush (output_unit)
9879# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9880 end block
9881# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9882#endif
9883# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9884 allocate (y_th_arr(0:njet - 1))
9885# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9886
9887# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9888
9889# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9890#if defined(MFC_OpenACC)
9891# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9892!$acc enter data create(y_th_arr)
9893# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9894#elif defined(MFC_OpenMP)
9895# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9896!$omp target enter data map(always,alloc:y_th_arr)
9897# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9898#endif
9899# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9900#ifdef MFC_DEBUG
9901# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9902 block
9903# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9904 use iso_fortran_env, only: output_unit
9905# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9906
9907# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9908 print *, 'm_icpp_patches.fpp:418: ', '@:ALLOCATE(z_th_arr(0:NJet - 1))'
9909# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9910
9911# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9912 call flush (output_unit)
9913# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9914 end block
9915# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9916#endif
9917# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9918 allocate (z_th_arr(0:njet - 1))
9919# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9920
9921# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9922
9923# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9924#if defined(MFC_OpenACC)
9925# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9926!$acc enter data create(z_th_arr)
9927# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9928#elif defined(MFC_OpenMP)
9929# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9930!$omp target enter data map(always,alloc:z_th_arr)
9931# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9932#endif
9933# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9934#ifdef MFC_DEBUG
9935# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9936 block
9937# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9938 use iso_fortran_env, only: output_unit
9939# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9940
9941# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9942 print *, 'm_icpp_patches.fpp:418: ', '@:ALLOCATE(r_th_arr(0:NJet - 1))'
9943# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9944
9945# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9946 call flush (output_unit)
9947# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9948 end block
9949# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9950#endif
9951# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9952 allocate (r_th_arr(0:njet - 1))
9953# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9954
9955# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9956
9957# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9958#if defined(MFC_OpenACC)
9959# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9960!$acc enter data create(r_th_arr)
9961# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9962#elif defined(MFC_OpenMP)
9963# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9964!$omp target enter data map(always,alloc:r_th_arr)
9965# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9966#endif
9967# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9968
9969# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9970 inquire (file="jets.csv", exist=file_exist)
9971# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9972 if (file_exist) then
9973# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9974 open (unit=10, file="jets.csv", status="old", action="read")
9975# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9976 do q = 0, njet - 1
9977# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9978 read (10, '(A)') line ! Read a full line as a string
9979# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9980 start = 1
9981# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9982
9983# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9984 do l = 0, 2
9985# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9986 end = index(line(start:), ',') ! Find the next comma
9987# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9988 if (end == 0) then
9989# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9990 value = trim(adjustl(line(start:))) ! Last value in the line
9991# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9992 else
9993# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9994 value = trim(adjustl(line(start:start + end - 2))) ! Extract substring
9995# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9996 start = start + end ! Move to next value
9997# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
9998 end if
9999# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10000 if (l == 0) then
10001# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10002 read (value, *) y_th_arr(q) ! Convert string to numeric value
10003# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10004 else if (l == 1) then
10005# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10006 read (value, *) z_th_arr(q)
10007# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10008 else
10009# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10010 read (value, *) r_th_arr(q)
10011# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10012 end if
10013# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10014 end do
10015# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10016 end do
10017# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10018 close (10)
10019# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10020
10021# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10022 do q = 0, p
10023# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10024 do l = 0, n
10025# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10026 rcut = 0._wp
10027# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10028 do s = 0, njet - 1
10029# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10030 r = sqrt((y_cc(l) - y_th_arr(s))**2._wp + (z_cc(q) - z_th_arr(s))**2._wp)
10031# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10032 rcut = rcut + f_cut_on(r - r_th_arr(s), eps_smooth)
10033# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10034 end do
10035# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10036 rcut_arr(l, q) = rcut
10037# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10038 end do
10039# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10040 end do
10041# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10042 else
10043# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10044 call s_mpi_abort("Error: jets.csv file specified for hcid=303 does not exist")
10045# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10046 end if
10047# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10048 end if
10049# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10050
10051# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10052 if (patch_icpp(patch_id)%hcid == 304) then ! 3D Cartesian interface from file
10053# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10054#ifdef MFC_DEBUG
10055# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10056 block
10057# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10058 use iso_fortran_env, only: output_unit
10059# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10060
10061# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10062 print *, 'm_icpp_patches.fpp:418: ', '@:ALLOCATE(ih(0:n_glb, 0:p_glb))'
10063# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10064
10065# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10066 call flush (output_unit)
10067# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10068 end block
10069# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10070#endif
10071# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10072 allocate (ih(0:n_glb, 0:p_glb))
10073# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10074
10075# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10076
10077# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10078#if defined(MFC_OpenACC)
10079# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10080!$acc enter data create(ih)
10081# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10082#elif defined(MFC_OpenMP)
10083# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10084!$omp target enter data map(always,alloc:ih)
10085# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10086#endif
10087# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10088
10089# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10090 if (interface_file == '.') then
10091# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10092 call s_mpi_abort("Error: interface_file must be specified for hcid=304")
10093# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10094 else
10095# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10096 inquire (file=trim(interface_file), exist=file_exist)
10097# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10098 if (file_exist) then
10099# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10100 open (unit=10, file=trim(interface_file), status="old", action="read")
10101# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10102 do i = 0, n_glb
10103# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10104 read (10, '(A)') line ! Read a full line as a string
10105# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10106 start = 1
10107# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10108
10109# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10110 do j = 0, p_glb
10111# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10112 end = index(line(start:), ',') ! Find the next comma
10113# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10114 if (end == 0) then
10115# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10116 value = trim(adjustl(line(start:))) ! Last value in the line
10117# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10118 else
10119# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10120 value = trim(adjustl(line(start:start + end - 2))) ! Extract substring
10121# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10122 start = start + end ! Move to next value
10123# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10124 end if
10125# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10126 read (value, *) ih(i, j) ! Convert string to numeric value
10127# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10128 if (.not. f_is_default(normmag)) ih(i, j) = ih(i, j)*normmag
10129# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10130 if (.not. f_is_default(normfac)) ih(i, j) = ih(i, j) + normfac
10131# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10132 end do
10133# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10134 end do
10135# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10136 close (10)
10137# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10138 else
10139# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10140 call s_mpi_abort("Error: interface_file specified for hcid=304 does not exist")
10141# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10142 end if
10143# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10144 end if
10145# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10146 end if
10147# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10148
10149# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10150 if (patch_icpp(patch_id)%hcid == 305) then ! 3D Axisymmetric interface from file
10151# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10152#ifdef MFC_DEBUG
10153# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10154 block
10155# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10156 use iso_fortran_env, only: output_unit
10157# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10158
10159# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10160 print *, 'm_icpp_patches.fpp:418: ', '@:ALLOCATE(ih(0:n_glb, 0:0))'
10161# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10162
10163# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10164 call flush (output_unit)
10165# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10166 end block
10167# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10168#endif
10169# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10170 allocate (ih(0:n_glb, 0:0))
10171# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10172
10173# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10174
10175# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10176#if defined(MFC_OpenACC)
10177# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10178!$acc enter data create(ih)
10179# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10180#elif defined(MFC_OpenMP)
10181# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10182!$omp target enter data map(always,alloc:ih)
10183# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10184#endif
10185# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10186 if (interface_file == '.') then
10187# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10188 call s_mpi_abort("Error: interface_file must be specified for hcid=305")
10189# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10190 else
10191# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10192 inquire (file=trim(interface_file), exist=file_exist)
10193# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10194 if (file_exist) then
10195# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10196 open (unit=10, file=trim(interface_file), status="old", action="read")
10197# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10198 do i = 0, n_glb
10199# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10200 read (10, '(A)') line ! Read a full line as a string
10201# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10202 value = trim(line)
10203# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10204 read (value, *) ih(i, 0) ! Convert string to numeric value
10205# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10206 if (.not. f_is_default(normmag)) ih(i, 0) = ih(i, 0)*normmag
10207# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10208 if (.not. f_is_default(normfac)) ih(i, 0) = ih(i, 0) + normfac
10209# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10210 end do
10211# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10212 close (10)
10213# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10214 else
10215# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10216 call s_mpi_abort("Error: interface_file specified for hcid=305 does not exist")
10217# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10218 end if
10219# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10220 end if
10221# 418 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10222 end if
10223
10224 ! Transferring the circular patch's radius, centroid, smearing patch identity and smearing coefficient information
10225 x_centroid = patch_icpp(patch_id)%x_centroid
10226 y_centroid = patch_icpp(patch_id)%y_centroid
10227 z_centroid = patch_icpp(patch_id)%z_centroid
10228 length_z = patch_icpp(patch_id)%length_z
10229 radius = patch_icpp(patch_id)%radius
10230 smooth_patch_id = patch_icpp(patch_id)%smooth_patch_id
10231 smooth_coeff = patch_icpp(patch_id)%smooth_coeff
10232 thickness = patch_icpp(patch_id)%epsilon
10233
10234 ! Initialize eta=1; modified if smoothing is enabled
10235 eta = 1._wp
10236
10237 ! write for all z
10238
10239 ! Assign patch vars if cell is covered and patch has write permission
10240 do k = 0, p
10241 do j = 0, n
10242 do i = 0, m
10243 myr = sqrt((x_cc(i) - x_centroid)**2 + (y_cc(j) - y_centroid)**2)
10244
10245 if (myr <= radius + thickness/2._wp .and. myr >= radius - thickness/2._wp &
10246 & .and. patch_icpp(patch_id)%alter_patch(patch_id_fp(i, j, k))) then
10247 call s_assign_patch_primitive_variables(patch_id, i, j, k, eta, q_prim_vf, patch_id_fp)
10248
10249
10250 if (patch_icpp(patch_id)%hcid /= dflt_int) then
10251 select case (patch_icpp(patch_id)%hcid)
10252# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10253 case (300) ! Rayleigh-Taylor instability
10254# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10255 rhoh = 3._wp
10256# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10257 rhol = 1._wp
10258# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10259 pref = 1.e5_wp
10260# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10261 pint = pref
10262# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10263 h = 0.7_wp
10264# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10265 lam = 0.2_wp
10266# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10267 wl = 2._wp*pi/lam
10268# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10269 amp = 0.025_wp/wl
10270# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10271
10272# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10273 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
10274# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10275
10276# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10277 alph = 5.e-1_wp*(1._wp + tanh((y_cc(j) - inth)/2.5e-3_wp))
10278# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10279
10280# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10281 if (alph < eps) alph = eps
10282# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10283 if (alph > 1._wp - eps) alph = 1._wp - eps
10284# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10285
10286# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10287 if (y_cc(j) > inth) then
10288# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10289 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
10290# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10291 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
10292# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10293 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = alph*rhoh
10294# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10295 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = (1._wp - alph)*rhol
10296# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10297 q_prim_vf(eqn_idx%E)%sf(i, j, k) = pref + rhoh*9.81_wp*(1.2_wp - y_cc(j))
10298# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10299 else
10300# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10301 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
10302# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10303 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
10304# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10305 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = alph*rhoh
10306# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10307 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = (1._wp - alph)*rhol
10308# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10309 pint = pref + rhoh*9.81_wp*(1.2_wp - inth)
10310# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10311 q_prim_vf(eqn_idx%E)%sf(i, j, k) = pint + rhol*9.81_wp*(inth - y_cc(j))
10312# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10313 end if
10314# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10315 case (301) ! (3D lung geometry in X direction, |sin(*)+sin(*)|)
10316# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10317 h = 0.0_wp
10318# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10319 lam = 1.0_wp
10320# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10321 amp = patch_icpp(patch_id)%a(2)
10322# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10323 inth = amp*abs((sin(2*pi*y_cc(j)/lam - pi/2) + sin(2*pi*z_cc(k)/lam - pi/2)) + h)
10324# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10325 if (x_cc(i) > inth) then
10326# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10327 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = patch_icpp(1)%alpha_rho(1)
10328# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10329 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = patch_icpp(1)%alpha_rho(2)
10330# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10331 q_prim_vf(eqn_idx%E)%sf(i, j, k) = patch_icpp(1)%pres
10332# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10333 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = patch_icpp(1)%alpha(1)
10334# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10335 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = patch_icpp(1)%alpha(2)
10336# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10337 end if
10338# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10339 case (302) ! 3D Jet with IGR
10340# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10341 ux_th = 10*sqrt(1.4*0.4)
10342# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10343 ux_am = 0.0*sqrt(1.4)
10344# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10345 p_th = 2.0_wp
10346# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10347 p_am = 1.0_wp
10348# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10349 rho_th = 1._wp
10350# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10351 rho_am = 1._wp
10352# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10353 y_th = 0.0_wp
10354# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10355 z_th = 0.0_wp
10356# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10357 r_th = 1._wp
10358# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10359 eps_smooth = 1._wp
10360# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10361 eps = 1e-6
10362# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10363
10364# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10365 r = sqrt((y_cc(j) - y_th)**2._wp + (z_cc(k) - z_th)**2._wp)
10366# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10367 rcut = f_cut_on(r - r_th, eps_smooth)
10368# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10369 xcut = f_cut_on(x_cc(i), eps_smooth)
10370# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10371
10372# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10373 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, k) = ux_th*rcut*xcut + ux_am
10374# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10375 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, k) = 0._wp
10376# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10377 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0._wp
10378# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10379
10380# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10381 if (num_fluids == 1) then
10382# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10383 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = (rho_th - rho_am)*rcut*xcut + rho_am
10384# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10385 else
10386# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10387 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = (1._wp - 2._wp*eps)*rcut*xcut + eps
10388# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10389 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = rho_th*q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)
10390# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10391 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))
10392# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10393 end if
10394# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10395
10396# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10397 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p_th*rcut*xcut + p_am
10398# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10399 case (303) ! 3D Multijet
10400# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10401 eps_smooth = 3.0_wp
10402# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10403 ux_th = 10*sqrt(1.4*0.4)
10404# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10405 ux_am = 2.5*sqrt(1.4*0.4)
10406# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10407 p_th = 0.8_wp
10408# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10409 p_am = 0.4_wp
10410# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10411 rho_th = 1._wp
10412# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10413 rho_am = 1._wp
10414# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10415 eps = 1e-6
10416# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10417
10418# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10419 rcut = rcut_arr(j, k)
10420# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10421 xcut = f_cut_on(x_cc(i), eps_smooth)
10422# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10423
10424# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10425 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, k) = ux_th*rcut*xcut + ux_am
10426# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10427 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, k) = 0._wp
10428# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10429 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0._wp
10430# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10431
10432# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10433 if (num_fluids == 1) then
10434# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10435 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = (rho_th - rho_am)*rcut*xcut + rho_am
10436# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10437 else
10438# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10439 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = (1._wp - 2._wp*eps)*rcut*xcut + eps
10440# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10441 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = rho_th*q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)
10442# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10443 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))
10444# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10445 end if
10446# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10447
10448# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10449 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p_th*rcut*xcut + p_am
10450# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10451 case (304) ! 3D Interface from file cartesian
10452# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10453 alph = 0.5_wp*(1 + (1._wp - 2._wp*eps)*tanh((ih(start_idx(2) + j, start_idx(3) + k) - x_cc(i))*(0.5_wp/dx)))
10454# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10455
10456# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10457 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
10458# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10459 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
10460# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10461
10462# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10463 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)*(950._wp/1000._wp)
10464# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10465 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = q_prim_vf(eqn_idx%adv%end)%sf(i, j, k)*(1._wp/1000._wp)
10466# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10467
10468# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10469 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p0_ic + (q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) + q_prim_vf(eqn_idx%cont%end)%sf(i, &
10470# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10471 & j, k))*g0_ic*(ih(start_idx(2) + j, start_idx(3) + k) - x_cc(i))
10472# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10473
10474# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10475 if (surface_tension) q_prim_vf(eqn_idx%c)%sf(i, j, k) = alph
10476# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10477 case (305) ! 3D Interface from file axisymmetric
10478# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10479 alph = 0.5_wp*(1 + (1._wp - 2._wp*eps)*tanh((ih(start_idx(2) + j, 0) - x_cc(i))*(0.01_wp/dx)))
10480# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10481
10482# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10483 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
10484# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10485 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
10486# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10487
10488# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10489 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)*1._wp
10490# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10491 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = q_prim_vf(eqn_idx%adv%end)%sf(i, j, k)*(1._wp/950._wp)
10492# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10493
10494# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10495 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p0_ic + (q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) + q_prim_vf(eqn_idx%cont%end)%sf(i, &
10496# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10497 & j, k))*g0_ic*(ih(start_idx(1) + i, start_idx(3) + k) - y_cc(j))
10498# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10499
10500# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10501 if (surface_tension) q_prim_vf(eqn_idx%c)%sf(i, j, k) = alph
10502# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10503 case (370) ! 3D extrusion of 2D profile from external data
10504# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10505 ! This hardcoded case extrudes a 2D profile to initialize a 3D simulation domain
10506# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10507 if (.not. files_loaded) then
10508# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10509 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
10510# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10511 do f = 1, max_files
10512# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10513 write (file_num_str, '(I0)') f
10514# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10515 filenames(f) = trim(files_dir) // "/" // "prim." // trim(file_num_str) // ".00." // trim(file_extension) // ".dat"
10516# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10517 end do
10518# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10519
10520# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10521 ! Common file reading setup
10522# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10523 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
10524# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10525 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
10526# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10527
10528# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10529 select case (num_dims)
10530# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10531 case (1, 2) ! 1D and 2D cases are similar
10532# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10533 ! Count lines
10534# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10535 line_count = 0
10536# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10537 do
10538# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10539 read (unit2, *, iostat=ios2) dummy_x, dummy_y
10540# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10541 if (ios2 /= 0) exit
10542# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10543 line_count = line_count + 1
10544# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10545 end do
10546# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10547 close (unit2)
10548# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10549
10550# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10551 xrows = line_count
10552# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10553 yrows = 1
10554# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10555 index_x = 0
10556# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10557 if (num_dims == 2) index_x = i
10558# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10559#ifdef MFC_DEBUG
10560# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10561 block
10562# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10563 use iso_fortran_env, only: output_unit
10564# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10565
10566# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10567 print *, 'm_icpp_patches.fpp:447: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
10568# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10569
10570# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10571 call flush (output_unit)
10572# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10573 end block
10574# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10575#endif
10576# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10577 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
10578# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10579
10580# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10581
10582# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10583
10584# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10585#if defined(MFC_OpenACC)
10586# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10587!$acc enter data create(x_coords, stored_values)
10588# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10589#elif defined(MFC_OpenMP)
10590# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10591!$omp target enter data map(always,alloc:x_coords, stored_values)
10592# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10593#endif
10594# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10595
10596# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10597 ! Read data from all files
10598# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10599 do f = 1, max_files
10600# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10601 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
10602# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10603 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
10604# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10605
10606# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10607 do iter = 1, xrows
10608# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10609 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
10610# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10611 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
10612# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10613 end do
10614# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10615 close (unit)
10616# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10617 end do
10618# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10619
10620# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10621 ! Calculate offsets
10622# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10623 domain_xstart = x_coords(1)
10624# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10625 x_step = x_cc(1) - x_cc(0)
10626# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10627 delta_x = merge(x_cc(0) - domain_xstart, x_cc(index_x) - domain_xstart, num_dims == 1)
10628# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10629 global_offset_x = nint(abs(delta_x)/x_step)
10630# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10631 case (3) ! 3D case - determine grid structure
10632# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10633 ! Find yRows by counting rows with same x
10634# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10635 read (unit2, *, iostat=ios2) x0, y0, dummy_z
10636# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10637 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
10638# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10639
10640# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10641 yrows = 1
10642# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10643 do
10644# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10645 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
10646# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10647 if (ios2 /= 0) exit
10648# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10649 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
10650# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10651 yrows = yrows + 1
10652# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10653 else
10654# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10655 exit
10656# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10657 end if
10658# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10659 end do
10660# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10661 close (unit2)
10662# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10663
10664# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10665 ! Count total rows
10666# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10667 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
10668# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10669 nrows = 0
10670# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10671 do
10672# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10673 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
10674# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10675 if (ios2 /= 0) exit
10676# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10677 nrows = nrows + 1
10678# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10679 end do
10680# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10681 close (unit2)
10682# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10683
10684# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10685 xrows = nrows/yrows
10686# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10687#ifdef MFC_DEBUG
10688# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10689 block
10690# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10691 use iso_fortran_env, only: output_unit
10692# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10693
10694# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10695 print *, 'm_icpp_patches.fpp:447: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
10696# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10697
10698# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10699 call flush (output_unit)
10700# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10701 end block
10702# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10703#endif
10704# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10705 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
10706# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10707
10708# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10709
10710# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10711
10712# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10713
10714# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10715#if defined(MFC_OpenACC)
10716# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10717!$acc enter data create(x_coords, y_coords, stored_values)
10718# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10719#elif defined(MFC_OpenMP)
10720# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10721!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
10722# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10723#endif
10724# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10725 index_x = i
10726# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10727 index_y = j
10728# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10729
10730# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10731 ! Read all files
10732# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10733 do f = 1, max_files
10734# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10735 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
10736# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10737 if (ios /= 0) then
10738# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10739 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
10740# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10741 cycle
10742# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10743 end if
10744# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10745
10746# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10747 iter = 0
10748# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10749 do iix = 1, xrows
10750# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10751 do iiy = 1, yrows
10752# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10753 iter = iter + 1
10754# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10755 if (f == 1) then
10756# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10757 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
10758# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10759 else
10760# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10761 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
10762# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10763 end if
10764# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10765 if (ios /= 0) call s_mpi_abort("Error reading data")
10766# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10767 end do
10768# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10769 end do
10770# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10771 close (unit)
10772# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10773 end do
10774# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10775
10776# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10777 ! Calculate offsets
10778# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10779 x_step = x_cc(1) - x_cc(0)
10780# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10781 y_step = y_cc(1) - y_cc(0)
10782# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10783 delta_x = x_cc(index_x) - x_coords(1)
10784# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10785 delta_y = y_cc(index_y) - y_coords(1)
10786# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10787 global_offset_x = nint(abs(delta_x)/x_step)
10788# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10789 global_offset_y = nint(abs(delta_y)/y_step)
10790# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10791 end select
10792# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10793
10794# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10795 files_loaded = .true.
10796# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10797 end if
10798# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10799
10800# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10801 ! Data assignment
10802# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10803 select case (num_dims)
10804# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10805 case (1)
10806# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10807 idx = i + 1 + global_offset_x
10808# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10809 ! idx must land inside the file's row range: this rank's subdomain offset
10810# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10811 ! (global_offset_x) was derived from this rank's own grid, so a miss means the
10812# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10813 ! IC file is misaligned/mis-sized for the run grid, not a normal boundary case.
10814# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10815 if (idx < 1 .or. idx > xrows) &
10816# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10817 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
10818# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10819 do f = 1, sys_size
10820# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10821 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
10822# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10823 end do
10824# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10825 case (2)
10826# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10827 idx = i + 1 + global_offset_x - index_x
10828# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10829 if (idx < 1 .or. idx > xrows) &
10830# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10831 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
10832# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10833 do f = 1, sys_size - 1
10834# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10835 jump = merge(1, 0, f >= eqn_idx%mom%end)
10836# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10837 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
10838# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10839 end do
10840# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10841 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
10842# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10843 case (3)
10844# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10845 idx = i + 1 + global_offset_x - index_x
10846# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10847 idy = j + 1 + global_offset_y - index_y
10848# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10849 if (idx < 1 .or. idx > xrows .or. idy < 1 .or. idy > yrows) &
10850# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10851 & call s_mpi_abort("Hardcoded IC extrusion: row/column index out of range (IC file misaligned with the run grid)")
10852# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10853 do f = 1, sys_size - 1
10854# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10855 jump = merge(1, 0, f >= eqn_idx%mom%end)
10856# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10857 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
10858# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10859 end do
10860# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10861 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
10862# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10863 end select
10864# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10865 case (380) ! Taylor-Green vortex
10866# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10867 ! This is patch is hard-coded for test suite optimization used in the 3D_TaylorGreenVortex case: This analytic patch used
10868# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10869 ! geometry 9
10870# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10871 mach = 0.1
10872# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10873 if (patch_id == 1) then
10874# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10875 q_prim_vf(eqn_idx%E)%sf(i, j, &
10876# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10877 & 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)
10878# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10879 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)
10880# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10881 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)
10882# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10883 end if
10884# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10885 case default
10886# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10887 call s_int_to_str(patch_id, istr)
10888# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10889 call s_mpi_abort("Invalid hcid specified for patch " // trim(istr))
10890# 447 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10891 end select
10892 end if
10893
10894 ! Updating the patch identities bookkeeping variable
10895 if (1._wp - eta < sgm_eps) patch_id_fp(i, j, k) = patch_id
10896
10897 q_prim_vf(eqn_idx%alf)%sf(i, j, &
10898 & k) = patch_icpp(patch_id)%alpha(1)*exp(-0.5_wp*((myr - radius)**2._wp)/(thickness/3._wp)**2._wp)
10899 end if
10900 end do
10901 end do
10902 end do
10903 if (allocated(stored_values)) then
10904# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10905#ifdef MFC_DEBUG
10906# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10907 block
10908# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10909 use iso_fortran_env, only: output_unit
10910# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10911
10912# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10913 print *, 'm_icpp_patches.fpp:459: ', '@:DEALLOCATE(stored_values)'
10914# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10915
10916# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10917 call flush (output_unit)
10918# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10919 end block
10920# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10921#endif
10922# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10923
10924# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10925#if defined(MFC_OpenACC)
10926# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10927!$acc exit data delete(stored_values)
10928# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10929#elif defined(MFC_OpenMP)
10930# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10931!$omp target exit data map(release:stored_values)
10932# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10933#endif
10934# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10935 deallocate (stored_values)
10936# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10937#ifdef MFC_DEBUG
10938# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10939 block
10940# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10941 use iso_fortran_env, only: output_unit
10942# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10943
10944# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10945 print *, 'm_icpp_patches.fpp:459: ', '@:DEALLOCATE(x_coords)'
10946# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10947
10948# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10949 call flush (output_unit)
10950# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10951 end block
10952# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10953#endif
10954# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10955
10956# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10957#if defined(MFC_OpenACC)
10958# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10959!$acc exit data delete(x_coords)
10960# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10961#elif defined(MFC_OpenMP)
10962# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10963!$omp target exit data map(release:x_coords)
10964# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10965#endif
10966# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10967 deallocate (x_coords)
10968# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10969 end if
10970# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10971
10972# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10973 if (allocated(y_coords)) then
10974# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10975#ifdef MFC_DEBUG
10976# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10977 block
10978# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10979 use iso_fortran_env, only: output_unit
10980# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10981
10982# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10983 print *, 'm_icpp_patches.fpp:459: ', '@:DEALLOCATE(y_coords)'
10984# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10985
10986# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10987 call flush (output_unit)
10988# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10989 end block
10990# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10991#endif
10992# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10993
10994# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10995#if defined(MFC_OpenACC)
10996# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10997!$acc exit data delete(y_coords)
10998# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
10999#elif defined(MFC_OpenMP)
11000# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11001!$omp target exit data map(release:y_coords)
11002# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11003#endif
11004# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11005 deallocate (y_coords)
11006# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11007 end if
11008# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11009
11010# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11011 files_loaded = .false.
11012# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11013
11014# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11015 if (allocated(stored_values274)) then
11016# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11017#ifdef MFC_DEBUG
11018# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11019 block
11020# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11021 use iso_fortran_env, only: output_unit
11022# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11023
11024# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11025 print *, 'm_icpp_patches.fpp:459: ', '@:DEALLOCATE(stored_values274)'
11026# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11027
11028# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11029 call flush (output_unit)
11030# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11031 end block
11032# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11033#endif
11034# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11035
11036# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11037#if defined(MFC_OpenACC)
11038# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11039!$acc exit data delete(stored_values274)
11040# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11041#elif defined(MFC_OpenMP)
11042# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11043!$omp target exit data map(release:stored_values274)
11044# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11045#endif
11046# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11047 deallocate (stored_values274)
11048# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11049 end if
11050# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11051
11052# 459 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11053 files_loaded274 = .false.
11054
11055 end subroutine s_icpp_3dvarcircle
11056
11057 !> The elliptical patch is a 2D geometry. The geometry of the patch is well-defined when its centroid and radii are provided.
11058 !! Note that the elliptical patch DOES allow for the smoothing of its boundary
11059 subroutine s_icpp_ellipse(patch_id, patch_id_fp, q_prim_vf)
11060
11061 integer, intent(in) :: patch_id
11062
11063#ifdef MFC_MIXED_PRECISION
11064 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
11065#else
11066 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
11067#endif
11068 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
11069 integer :: i, j, k !< Generic loop operators
11070 real(wp) :: a, b
11071
11072 integer :: xRows, yRows, nRows, iix, iiy, max_files
11073# 478 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11074 integer :: f, iter, unit, unit2, idx, idy, index_x, index_y, jump, line_count
11075# 478 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11076 real(wp) :: x_step, y_step
11077# 478 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11078 real(wp) :: dummy_x, dummy_y, dummy_z, x0, y0
11079# 478 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11080 integer :: global_offset_x, global_offset_y !< MPI subdomain offset
11081# 478 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11082 real(wp) :: delta_x, delta_y
11083# 478 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11084 character(len=300), dimension(sys_size) :: fileNames !< Arrays to store all data from files
11085# 478 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11086 real(wp), allocatable :: stored_values(:,:,:)
11087# 478 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11088 real(wp), allocatable :: x_coords(:), y_coords(:)
11089# 478 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11090 logical :: files_loaded = .false.
11091# 478 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11092 real(wp) :: domain_xstart
11093# 478 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11094 character(len=20) :: file_num_str !< For storing the file number as a string
11095# 478 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11096 integer :: ios
11097# 478 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11098 integer :: ios2
11099# 478 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11100
11101# 478 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11102 ! hcid=274 (2dHardcodedIC.fpp): full 2D field from external data, no extrusion.
11103# 478 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11104 ! Declared here (not in Hardcoded2DVariables()) so it's visible wherever
11105# 478 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11106 ! HardcodedDeallocation() is called, matching the pattern of stored_values/x_coords/
11107# 478 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11108 ! y_coords/files_loaded above.
11109# 478 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11110 real(wp), allocatable, dimension(:,:,:) :: stored_values274
11111# 478 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11112 logical :: files_loaded274 = .false.
11113# 478 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11114 integer :: f274, ix274, iy274, unit274, ios274
11115# 478 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11116 integer :: local_ix_beg274, local_iy_beg274
11117# 478 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11118 character(len=300) :: fname274
11119# 478 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11120 character(len=20) :: file_num_str274
11121# 478 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11122 real(wp) :: dummy_x274, dummy_y274, dummy_val274, x0_274, y0_274, x_step274, y_step274
11123# 478 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11124 real(wp) :: file_dx274, file_dy274, r_align274
11125 ! Place any declaration of intermediate variables here
11126# 479 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11127 real(wp) :: eps, eps_mhd, C_mhd
11128# 479 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11129 real(wp) :: r, rmax, gam, umax, p0
11130# 479 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11131 real(wp) :: rhoH, rhoL, pRef, pInt, h, lam, wl, amp, intH, intL, alph
11132# 479 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11133 real(wp) :: factor, x1c, y1c, x2c, y2c, r1c, r2c, cvortex, u1c, u2c, v1c, v2c, rvortex
11134# 479 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11135 real(wp) :: r0, alpha, r2
11136# 479 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11137 real(wp) :: sinA, cosA
11138# 479 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11139 real(wp) :: r_sq
11140# 479 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11141
11142# 479 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11143 ! # 283 - Gauss-averaged isentropic vortex (conserved-variable cell averages)
11144# 479 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11145 real(wp) :: gauss_xi(3), gauss_w(3), xq, yq, r2q, T_facq, wq
11146# 479 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11147 real(wp) :: rho_avg, rhou_avg, rhov_avg, E_avg
11148# 479 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11149 real(wp) :: rhoq, pq, uq, vq, Eq, vortex_eps
11150# 479 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11151 integer :: igq, jgq
11152# 479 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11153
11154# 479 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11155 ! # 291 - Shear/Thermal Layer Case
11156# 479 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11157 real(wp) :: delta_shear, u_max, u_mean
11158# 479 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11159 real(wp) :: T_wall, T_inf, P_atm, T_loc
11160# 479 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11161 real(wp) :: delta_th, R_mix
11162# 479 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11163 real(wp) :: Y_N2, Y_O2, MW_N2, MW_O2
11164# 479 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11165 real(wp) :: bottom_blend_u, bottom_blend_T
11166# 479 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11167
11168# 479 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11169 ! # 207
11170# 479 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11171 real(wp) :: sigma, gauss1, gauss2
11172# 479 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11173
11174# 479 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11175 ! # 208
11176# 479 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11177 real(wp) :: ei, d, fsm, alpha_air, alpha_sf6
11178# 479 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11179 real(wp) :: y_center, y_dist, wave_phase, front_shift, x_mapped, interp_wt
11180# 479 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11181 integer :: v, idx_lo, idx_hi, idx_mid
11182# 479 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11183 real(wp), parameter :: Ly_param = 0.00775735_wp
11184# 479 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11185 real(wp), parameter :: A_param = 0.1_wp*96.9880867_wp*10.0_wp**(-6.0_wp)
11186# 479 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11187 integer, parameter :: Nwaves = 6
11188# 479 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11189 real(wp), parameter :: y0_ref = 0.0_wp
11190# 479 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11191
11192# 479 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11193 eps = 1.e-9_wp
11194
11195 ! Transferring the elliptical patch's radii, centroid, smearing patch identity, and smearing coefficient information
11196 x_centroid = patch_icpp(patch_id)%x_centroid
11197 y_centroid = patch_icpp(patch_id)%y_centroid
11198 a = patch_icpp(patch_id)%radii(1)
11199 b = patch_icpp(patch_id)%radii(2)
11200 smooth_patch_id = patch_icpp(patch_id)%smooth_patch_id
11201 smooth_coeff = patch_icpp(patch_id)%smooth_coeff
11202
11203 ! Initialize eta=1; modified if smoothing is enabled
11204 eta = 1._wp
11205
11206 ! Assign patch vars if cell is covered and patch has write permission
11207 do j = 0, n
11208 do i = 0, m
11209 if (patch_icpp(patch_id)%smoothen) then
11210 eta = tanh(smooth_coeff/min(dx, &
11211 & dy)*(sqrt(((x_cc(i) - x_centroid)/a)**2 + ((y_cc(j) - y_centroid)/b)**2) - 1._wp))*(-0.5_wp) &
11212 & + 0.5_wp
11213 end if
11214
11215 if ((f_is_inside_ellipse(x_cc(i) - x_centroid, y_cc(j) - y_centroid, [2._wp*a, 2._wp*b, &
11216 & 0._wp]) .and. patch_icpp(patch_id)%alter_patch(patch_id_fp(i, j, 0))) .or. patch_id_fp(i, j, &
11217 & 0) == smooth_patch_id) then
11218 call s_assign_patch_primitive_variables(patch_id, i, j, 0, eta, q_prim_vf, patch_id_fp)
11219
11220
11221 if (patch_icpp(patch_id)%hcid /= dflt_int) then
11222 select case (patch_icpp(patch_id)%hcid) ! 2D_hardcoded_ic example case
11223# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11224 case (200) ! Two-fluid cubic interface
11225# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11226 if (y_cc(j) <= (-x_cc(i)**3 + 1)**(1._wp/3._wp)) then
11227# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11228 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = eps
11229# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11230 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = 1._wp - eps
11231# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11232 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = eps*1000._wp
11233# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11234 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = (1._wp - eps)*1._wp
11235# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11236 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1000._wp
11237# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11238 end if
11239# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11240 case (202) ! Gresho vortex (Gouasmi et al 2022 JCP)
11241# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11242 r = ((x_cc(i) - 0.5_wp)**2 + (y_cc(j) - 0.5_wp)**2)**0.5_wp
11243# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11244 rmax = 0.2_wp
11245# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11246
11247# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11248 gam = 1._wp + 1._wp/fluid_pp(1)%gamma
11249# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11250 umax = 2*pi*rmax*patch_icpp(patch_id)%vel(2)
11251# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11252 p0 = umax**2*(1._wp/(gam*patch_icpp(patch_id)%vel(2)**2) - 0.5_wp)
11253# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11254
11255# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11256 if (r < rmax) then
11257# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11258 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -(y_cc(j) - 0.5_wp)*umax/rmax
11259# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11260 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = (x_cc(i) - 0.5_wp)*umax/rmax
11261# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11262 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*((r/rmax)**2._wp/2._wp)
11263# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11264 else if (r < 2*rmax) then
11265# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11266 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -((y_cc(j) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
11267# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11268 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = ((x_cc(i) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
11269# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11270 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)))
11271# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11272 else
11273# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11274 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 0._wp
11275# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11276 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0._wp
11277# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11278 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*(-2 + 4*log(2._wp))
11279# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11280 end if
11281# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11282 case (203) ! Gresho vortex (Gouasmi et al 2022 JCP) with density correction
11283# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11284 r = ((x_cc(i) - 0.5_wp)**2._wp + (y_cc(j) - 0.5_wp)**2)**0.5_wp
11285# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11286 rmax = 0.2_wp
11287# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11288
11289# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11290 gam = 1._wp + 1._wp/fluid_pp(1)%gamma
11291# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11292 umax = 2*pi*rmax*patch_icpp(patch_id)%vel(2)
11293# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11294 p0 = umax**2*(1._wp/(gam*patch_icpp(patch_id)%vel(2)**2) - 0.5_wp)
11295# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11296
11297# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11298 if (r < rmax) then
11299# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11300 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -(y_cc(j) - 0.5_wp)*umax/rmax
11301# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11302 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = (x_cc(i) - 0.5_wp)*umax/rmax
11303# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11304 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*((r/rmax)**2._wp/2._wp)
11305# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11306 else if (r < 2*rmax) then
11307# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11308 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -((y_cc(j) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
11309# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11310 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = ((x_cc(i) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
11311# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11312 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)))
11313# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11314 else
11315# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11316 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 0._wp
11317# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11318 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0._wp
11319# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11320 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2._wp*(-2._wp + 4*log(2._wp))
11321# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11322 end if
11323# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11324
11325# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11326 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = q_prim_vf(eqn_idx%E)%sf(i, j, 0)**(1._wp/gam)
11327# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11328 case (204) ! Rayleigh-Taylor instability
11329# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11330 rhoh = 3._wp
11331# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11332 rhol = 1._wp
11333# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11334 pref = 1.e5_wp
11335# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11336 pint = pref
11337# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11338 h = 0.7_wp
11339# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11340 lam = 0.2_wp
11341# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11342 wl = 2._wp*pi/lam
11343# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11344 amp = 0.05_wp/wl
11345# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11346
11347# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11348 inth = amp*sin(2._wp*pi*x_cc(i)/lam - pi/2._wp) + h
11349# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11350
11351# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11352 alph = 0.5_wp*(1._wp + tanh((y_cc(j) - inth)/2.5e-3_wp))
11353# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11354
11355# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11356 if (alph < eps) alph = eps
11357# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11358 if (alph > 1._wp - eps) alph = 1._wp - eps
11359# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11360
11361# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11362 if (y_cc(j) > inth) then
11363# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11364 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = alph
11365# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11366 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = 1._wp - alph
11367# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11368 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = alph*rhoh
11369# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11370 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = (1._wp - alph)*rhol
11371# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11372 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = pref + rhoh*9.81_wp*(1.2_wp - y_cc(j))
11373# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11374 else
11375# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11376 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = alph
11377# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11378 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = 1._wp - alph
11379# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11380 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = alph*rhoh
11381# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11382 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = (1._wp - alph)*rhol
11383# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11384 pint = pref + rhoh*9.81_wp*(1.2_wp - inth)
11385# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11386 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = pint + rhol*9.81_wp*(inth - y_cc(j))
11387# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11388 end if
11389# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11390 case (205) ! 2D lung wave interaction problem
11391# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11392 h = 0.0_wp ! non dim origin y
11393# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11394 lam = 1.0_wp ! non dim lambda
11395# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11396 amp = patch_icpp(patch_id)%a(2) ! to be changed later! !non dim amplitude
11397# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11398
11399# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11400 inth = amp*sin(2*pi*x_cc(i)/lam - pi/2) + h
11401# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11402
11403# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11404 if (y_cc(j) > inth) then
11405# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11406 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(1)
11407# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11408 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(2)
11409# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11410 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = patch_icpp(1)%pres
11411# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11412 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = patch_icpp(1)%alpha(1)
11413# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11414 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = patch_icpp(1)%alpha(2)
11415# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11416 end if
11417# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11418 case (206) ! 2D lung wave interaction problem - horizontal domain
11419# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11420 h = 0.0_wp ! non dim origin y
11421# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11422 lam = 1.0_wp ! non dim lambda
11423# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11424 amp = patch_icpp(patch_id)%a(2)
11425# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11426
11427# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11428 intl = amp*sin(2*pi*y_cc(j)/lam - pi/2) + h
11429# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11430
11431# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11432 if (x_cc(i) > intl) then ! this is the liquid
11433# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11434 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(1)
11435# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11436 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(2)
11437# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11438 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = patch_icpp(1)%pres
11439# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11440 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = patch_icpp(1)%alpha(1)
11441# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11442 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = patch_icpp(1)%alpha(2)
11443# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11444 end if
11445# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11446 case (207) ! Kelvin Helmholtz Instability
11447# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11448 sigma = 0.05_wp/sqrt(2.0_wp)
11449# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11450 gauss1 = exp(-(y_cc(j) - 0.75_wp)**2/(2.0_wp*sigma**2))
11451# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11452 gauss2 = exp(-(y_cc(j) - 0.25_wp)**2/(2.0_wp*sigma**2))
11453# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11454 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)
11455# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11456 case (208) ! Richtmeyer Meshkov Instability
11457# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11458 lam = 1.0_wp
11459# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11460 eps = 1.0e-6_wp
11461# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11462 ei = 5.0_wp
11463# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11464 ! Smoothening function to smooth out sharp discontinuity in the interface
11465# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11466 if (x_cc(i) <= 0.7_wp*lam) then
11467# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11468 d = x_cc(i) - lam*(0.4_wp - 0.1_wp*sin(2.0_wp*pi*(y_cc(j)/lam + 0.25_wp)))
11469# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11470 fsm = 0.5_wp*(1.0_wp + erf(d/(ei*sqrt(dx*dy))))
11471# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11472 alpha_air = eps + (1.0_wp - 2.0_wp*eps)*fsm
11473# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11474 alpha_sf6 = 1.0_wp - alpha_air
11475# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11476 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = alpha_sf6*5.04_wp
11477# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11478 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = alpha_air*1.0_wp
11479# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11480 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = alpha_sf6
11481# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11482 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = alpha_air
11483# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11484 end if
11485# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11486 case (250) ! MHD Orszag-Tang vortex
11487# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11488 ! 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),
11489# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11490 ! sin(4*pi*x)/sqrt(4*pi), 0)
11491# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11492
11493# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11494 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -sin(2._wp*pi*y_cc(j))
11495# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11496 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = sin(2._wp*pi*x_cc(i))
11497# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11498
11499# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11500 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = -sin(2._wp*pi*y_cc(j))/sqrt(4._wp*pi)
11501# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11502 q_prim_vf(eqn_idx%B%beg + 1)%sf(i, j, 0) = sin(4._wp*pi*x_cc(i))/sqrt(4._wp*pi)
11503# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11504 case (251) ! RMHD Cylindrical Blast Wave [Mignone, 2006: Section 4.3.1]
11505# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11506 if (x_cc(i)**2 + y_cc(j)**2 < 0.08_wp**2) then
11507# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11508 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 0.01
11509# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11510 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1.0
11511# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11512 else if (x_cc(i)**2 + y_cc(j)**2 <= 1._wp**2) then
11513# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11514 ! Linear interpolation between r=0.08 and r=1.0
11515# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11516 factor = (1.0_wp - sqrt(x_cc(i)**2 + y_cc(j)**2))/(1.0_wp - 0.08_wp)
11517# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11518 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 0.01_wp*factor + 1.e-4_wp*(1.0_wp - factor)
11519# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11520 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1.0_wp*factor + 3.e-5_wp*(1.0_wp - factor)
11521# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11522 else
11523# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11524 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1.e-4_wp
11525# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11526 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 3.e-5_wp
11527# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11528 end if
11529# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11530
11531# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11532 ! case 252 is for the 2D MHD Rotor problem
11533# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11534 case (252) ! 2D MHD Rotor Problem
11535# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11536 ! Ambient conditions are set in the JSON file. This case imposes the dense, rotating cylinder.
11537# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11538 !
11539# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11540 ! 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
11541# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11542 ! velocity w=20, giving v_tan=2 at r=0.1
11543# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11544
11545# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11546 ! Calculate distance squared from the center
11547# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11548 r_sq = (x_cc(i) - 0.5_wp)**2 + (y_cc(j) - 0.5_wp)**2
11549# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11550
11551# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11552 ! inner radius of 0.1
11553# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11554 if (r_sq <= 0.1**2) then
11555# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11556 ! -- Inside the rotor -- Set density uniformly to 10
11557# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11558 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 10._wp
11559# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11560
11561# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11562 ! Set vup constant rotation of rate v=2 v_x = -omega * (y - y_c) v_y = omega * (x - x_c)
11563# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11564 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -20._wp*(y_cc(j) - 0.5_wp)
11565# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11566 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = 20._wp*(x_cc(i) - 0.5_wp)
11567# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11568
11569# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11570 ! taper width of 0.015
11571# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11572 else if (r_sq <= 0.115**2) then
11573# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11574 ! linearly smooth the function between r = 0.1 and 0.115
11575# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11576 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1._wp + 9._wp*(0.115_wp - sqrt(r_sq))/(0.015_wp)
11577# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11578
11579# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11580 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)
11581# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11582 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)
11583# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11584 end if
11585# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11586 case (253) ! MHD Smooth Magnetic Vortex
11587# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11588 ! Section 5.2 of Implicit hybridized discontinuous Galerkin methods for compressible magnetohydrodynamics C. Ciuca, P.
11589# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11590 ! Fernandez, A. Christophe, N.C. Nguyen, J. Peraire
11591# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11592
11593# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11594 ! velocity
11595# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11596 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))
11597# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11598 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))
11599# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11600
11601# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11602 ! magnetic field
11603# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11604 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)
11605# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11606 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)
11607# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11608
11609# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11610 ! pressure
11611# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11612 q_prim_vf(eqn_idx%E)%sf(i, j, &
11613# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11614 & 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)
11615# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11616 case (260) ! Gaussian Divergence Pulse
11617# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11618 ! Bx(x) = 1 + C * erf((x-0.5)/\sigma) => \partialBx/\partialx = C * (2/\sqrt\pi) * exp[-((x-0.5)/\sigma)**2] * (1/\sigma)
11619# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11620 ! Choose C = \epsilon * \sigma * \sqrt\pi / 2 => \partialBx/\partialx = \epsilon * exp[-((x-0.5)/\sigma)**2] \psi is
11621# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11622 ! initialized to zero everywhere.
11623# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11624
11625# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11626 eps_mhd = patch_icpp(patch_id)%a(2)
11627# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11628 sigma = patch_icpp(patch_id)%a(3)
11629# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11630 c_mhd = eps_mhd*sigma*sqrt(pi)*0.5_wp
11631# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11632
11633# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11634 ! B-field
11635# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11636 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = 1._wp + c_mhd*erf((x_cc(i) - 0.5_wp)/sigma)
11637# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11638 case (261) ! Blob
11639# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11640 r0 = 1._wp/sqrt(8._wp)
11641# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11642 r2 = x_cc(i)**2 + y_cc(j)**2
11643# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11644 r = sqrt(r2)
11645# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11646 alpha = r/r0
11647# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11648 if (alpha < 1) then
11649# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11650 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)
11651# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11652 ! 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)
11653# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11654 ! q_prim_vf(eqn_idx%B%beg)%sf(i,j,0) = 1._wp/(4._wp*pi) * (alpha**8 - 2._wp*alpha**4 + 1._wp)
11655# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11656 ! 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
11657# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11658 end if
11659# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11660 case (262) ! Tilted 2D MHD shock-tube at \alpha = arctan2 (\approx63.4 deg)
11661# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11662 ! rotate by \alpha = atan(2)
11663# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11664 alpha = atan(2._wp)
11665# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11666 cosa = cos(alpha)
11667# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11668 sina = sin(alpha)
11669# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11670 ! projection along shock normal
11671# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11672 r = x_cc(i)*cosa + y_cc(j)*sina
11673# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11674
11675# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11676 if (r <= 0.5_wp) then
11677# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11678 ! LEFT state: \rho=1, v\parallel=+10, v\perp=0, p=20, B\parallel=B\perp=5/\sqrt(4\pi)
11679# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11680 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1._wp
11681# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11682 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 10._wp*cosa
11683# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11684 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = 10._wp*sina
11685# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11686 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 20._wp
11687# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11688 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
11689# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11690 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
11691# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11692 else
11693# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11694 ! RIGHT state: \rho=1, v\parallel=-10, v\perp=0, p=1, B\parallel=B\perp=5/\sqrt(4\pi)
11695# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11696 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1._wp
11697# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11698 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -10._wp*cosa
11699# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11700 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = -10._wp*sina
11701# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11702 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1._wp
11703# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11704 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
11705# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11706 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
11707# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11708 end if
11709# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11710 ! v^z and B^z remain zero by default
11711# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11712 case (270) ! 2D extrusion of 1D profile from external data
11713# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11714 ! This hardcoded case extrudes a 1D profile to initialize a 2D simulation domain
11715# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11716 if (.not. files_loaded) then
11717# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11718 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
11719# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11720 do f = 1, max_files
11721# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11722 write (file_num_str, '(I0)') f
11723# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11724 filenames(f) = trim(files_dir) // "/" // "prim." // trim(file_num_str) // ".00." // trim(file_extension) // ".dat"
11725# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11726 end do
11727# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11728
11729# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11730 ! Common file reading setup
11731# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11732 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
11733# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11734 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
11735# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11736
11737# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11738 select case (num_dims)
11739# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11740 case (1, 2) ! 1D and 2D cases are similar
11741# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11742 ! Count lines
11743# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11744 line_count = 0
11745# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11746 do
11747# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11748 read (unit2, *, iostat=ios2) dummy_x, dummy_y
11749# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11750 if (ios2 /= 0) exit
11751# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11752 line_count = line_count + 1
11753# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11754 end do
11755# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11756 close (unit2)
11757# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11758
11759# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11760 xrows = line_count
11761# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11762 yrows = 1
11763# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11764 index_x = 0
11765# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11766 if (num_dims == 2) index_x = i
11767# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11768#ifdef MFC_DEBUG
11769# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11770 block
11771# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11772 use iso_fortran_env, only: output_unit
11773# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11774
11775# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11776 print *, 'm_icpp_patches.fpp:508: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
11777# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11778
11779# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11780 call flush (output_unit)
11781# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11782 end block
11783# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11784#endif
11785# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11786 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
11787# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11788
11789# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11790
11791# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11792
11793# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11794#if defined(MFC_OpenACC)
11795# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11796!$acc enter data create(x_coords, stored_values)
11797# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11798#elif defined(MFC_OpenMP)
11799# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11800!$omp target enter data map(always,alloc:x_coords, stored_values)
11801# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11802#endif
11803# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11804
11805# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11806 ! Read data from all files
11807# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11808 do f = 1, max_files
11809# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11810 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
11811# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11812 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
11813# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11814
11815# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11816 do iter = 1, xrows
11817# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11818 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
11819# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11820 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
11821# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11822 end do
11823# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11824 close (unit)
11825# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11826 end do
11827# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11828
11829# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11830 ! Calculate offsets
11831# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11832 domain_xstart = x_coords(1)
11833# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11834 x_step = x_cc(1) - x_cc(0)
11835# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11836 delta_x = merge(x_cc(0) - domain_xstart, x_cc(index_x) - domain_xstart, num_dims == 1)
11837# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11838 global_offset_x = nint(abs(delta_x)/x_step)
11839# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11840 case (3) ! 3D case - determine grid structure
11841# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11842 ! Find yRows by counting rows with same x
11843# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11844 read (unit2, *, iostat=ios2) x0, y0, dummy_z
11845# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11846 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
11847# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11848
11849# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11850 yrows = 1
11851# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11852 do
11853# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11854 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
11855# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11856 if (ios2 /= 0) exit
11857# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11858 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
11859# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11860 yrows = yrows + 1
11861# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11862 else
11863# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11864 exit
11865# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11866 end if
11867# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11868 end do
11869# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11870 close (unit2)
11871# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11872
11873# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11874 ! Count total rows
11875# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11876 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
11877# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11878 nrows = 0
11879# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11880 do
11881# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11882 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
11883# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11884 if (ios2 /= 0) exit
11885# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11886 nrows = nrows + 1
11887# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11888 end do
11889# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11890 close (unit2)
11891# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11892
11893# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11894 xrows = nrows/yrows
11895# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11896#ifdef MFC_DEBUG
11897# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11898 block
11899# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11900 use iso_fortran_env, only: output_unit
11901# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11902
11903# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11904 print *, 'm_icpp_patches.fpp:508: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
11905# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11906
11907# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11908 call flush (output_unit)
11909# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11910 end block
11911# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11912#endif
11913# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11914 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
11915# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11916
11917# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11918
11919# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11920
11921# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11922
11923# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11924#if defined(MFC_OpenACC)
11925# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11926!$acc enter data create(x_coords, y_coords, stored_values)
11927# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11928#elif defined(MFC_OpenMP)
11929# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11930!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
11931# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11932#endif
11933# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11934 index_x = i
11935# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11936 index_y = j
11937# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11938
11939# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11940 ! Read all files
11941# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11942 do f = 1, max_files
11943# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11944 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
11945# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11946 if (ios /= 0) then
11947# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11948 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
11949# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11950 cycle
11951# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11952 end if
11953# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11954
11955# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11956 iter = 0
11957# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11958 do iix = 1, xrows
11959# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11960 do iiy = 1, yrows
11961# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11962 iter = iter + 1
11963# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11964 if (f == 1) then
11965# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11966 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
11967# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11968 else
11969# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11970 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
11971# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11972 end if
11973# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11974 if (ios /= 0) call s_mpi_abort("Error reading data")
11975# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11976 end do
11977# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11978 end do
11979# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11980 close (unit)
11981# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11982 end do
11983# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11984
11985# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11986 ! Calculate offsets
11987# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11988 x_step = x_cc(1) - x_cc(0)
11989# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11990 y_step = y_cc(1) - y_cc(0)
11991# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11992 delta_x = x_cc(index_x) - x_coords(1)
11993# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11994 delta_y = y_cc(index_y) - y_coords(1)
11995# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11996 global_offset_x = nint(abs(delta_x)/x_step)
11997# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
11998 global_offset_y = nint(abs(delta_y)/y_step)
11999# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12000 end select
12001# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12002
12003# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12004 files_loaded = .true.
12005# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12006 end if
12007# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12008
12009# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12010 ! Data assignment
12011# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12012 select case (num_dims)
12013# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12014 case (1)
12015# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12016 idx = i + 1 + global_offset_x
12017# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12018 ! idx must land inside the file's row range: this rank's subdomain offset
12019# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12020 ! (global_offset_x) was derived from this rank's own grid, so a miss means the
12021# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12022 ! IC file is misaligned/mis-sized for the run grid, not a normal boundary case.
12023# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12024 if (idx < 1 .or. idx > xrows) &
12025# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12026 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
12027# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12028 do f = 1, sys_size
12029# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12030 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
12031# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12032 end do
12033# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12034 case (2)
12035# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12036 idx = i + 1 + global_offset_x - index_x
12037# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12038 if (idx < 1 .or. idx > xrows) &
12039# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12040 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
12041# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12042 do f = 1, sys_size - 1
12043# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12044 jump = merge(1, 0, f >= eqn_idx%mom%end)
12045# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12046 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
12047# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12048 end do
12049# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12050 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
12051# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12052 case (3)
12053# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12054 idx = i + 1 + global_offset_x - index_x
12055# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12056 idy = j + 1 + global_offset_y - index_y
12057# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12058 if (idx < 1 .or. idx > xrows .or. idy < 1 .or. idy > yrows) &
12059# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12060 & call s_mpi_abort("Hardcoded IC extrusion: row/column index out of range (IC file misaligned with the run grid)")
12061# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12062 do f = 1, sys_size - 1
12063# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12064 jump = merge(1, 0, f >= eqn_idx%mom%end)
12065# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12066 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
12067# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12068 end do
12069# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12070 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
12071# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12072 end select
12073# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12074 case (273) ! Temporal reacting mixing layer: 2D extrusion + streamwise velocity
12075# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12076 ! @:HardcodedReadValues() always zeros mom%end (the extruded-axis velocity).
12077# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12078 ! The mom%beg file slot is repurposed to carry the streamwise-velocity-vs-
12079# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12080 ! cross-stream-position profile (real cross-stream velocity is legitimately
12081# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12082 ! zero everywhere in the unperturbed base state), so swap it into mom%end and
12083# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12084 ! zero out mom%beg's true physical value.
12085# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12086 if (.not. files_loaded) then
12087# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12088 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
12089# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12090 do f = 1, max_files
12091# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12092 write (file_num_str, '(I0)') f
12093# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12094 filenames(f) = trim(files_dir) // "/" // "prim." // trim(file_num_str) // ".00." // trim(file_extension) // ".dat"
12095# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12096 end do
12097# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12098
12099# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12100 ! Common file reading setup
12101# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12102 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
12103# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12104 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
12105# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12106
12107# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12108 select case (num_dims)
12109# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12110 case (1, 2) ! 1D and 2D cases are similar
12111# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12112 ! Count lines
12113# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12114 line_count = 0
12115# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12116 do
12117# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12118 read (unit2, *, iostat=ios2) dummy_x, dummy_y
12119# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12120 if (ios2 /= 0) exit
12121# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12122 line_count = line_count + 1
12123# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12124 end do
12125# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12126 close (unit2)
12127# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12128
12129# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12130 xrows = line_count
12131# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12132 yrows = 1
12133# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12134 index_x = 0
12135# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12136 if (num_dims == 2) index_x = i
12137# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12138#ifdef MFC_DEBUG
12139# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12140 block
12141# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12142 use iso_fortran_env, only: output_unit
12143# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12144
12145# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12146 print *, 'm_icpp_patches.fpp:508: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
12147# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12148
12149# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12150 call flush (output_unit)
12151# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12152 end block
12153# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12154#endif
12155# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12156 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
12157# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12158
12159# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12160
12161# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12162
12163# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12164#if defined(MFC_OpenACC)
12165# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12166!$acc enter data create(x_coords, stored_values)
12167# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12168#elif defined(MFC_OpenMP)
12169# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12170!$omp target enter data map(always,alloc:x_coords, stored_values)
12171# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12172#endif
12173# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12174
12175# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12176 ! Read data from all files
12177# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12178 do f = 1, max_files
12179# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12180 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
12181# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12182 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
12183# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12184
12185# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12186 do iter = 1, xrows
12187# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12188 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
12189# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12190 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
12191# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12192 end do
12193# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12194 close (unit)
12195# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12196 end do
12197# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12198
12199# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12200 ! Calculate offsets
12201# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12202 domain_xstart = x_coords(1)
12203# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12204 x_step = x_cc(1) - x_cc(0)
12205# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12206 delta_x = merge(x_cc(0) - domain_xstart, x_cc(index_x) - domain_xstart, num_dims == 1)
12207# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12208 global_offset_x = nint(abs(delta_x)/x_step)
12209# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12210 case (3) ! 3D case - determine grid structure
12211# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12212 ! Find yRows by counting rows with same x
12213# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12214 read (unit2, *, iostat=ios2) x0, y0, dummy_z
12215# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12216 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
12217# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12218
12219# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12220 yrows = 1
12221# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12222 do
12223# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12224 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
12225# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12226 if (ios2 /= 0) exit
12227# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12228 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
12229# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12230 yrows = yrows + 1
12231# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12232 else
12233# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12234 exit
12235# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12236 end if
12237# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12238 end do
12239# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12240 close (unit2)
12241# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12242
12243# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12244 ! Count total rows
12245# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12246 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
12247# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12248 nrows = 0
12249# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12250 do
12251# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12252 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
12253# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12254 if (ios2 /= 0) exit
12255# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12256 nrows = nrows + 1
12257# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12258 end do
12259# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12260 close (unit2)
12261# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12262
12263# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12264 xrows = nrows/yrows
12265# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12266#ifdef MFC_DEBUG
12267# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12268 block
12269# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12270 use iso_fortran_env, only: output_unit
12271# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12272
12273# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12274 print *, 'm_icpp_patches.fpp:508: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
12275# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12276
12277# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12278 call flush (output_unit)
12279# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12280 end block
12281# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12282#endif
12283# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12284 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
12285# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12286
12287# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12288
12289# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12290
12291# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12292
12293# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12294#if defined(MFC_OpenACC)
12295# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12296!$acc enter data create(x_coords, y_coords, stored_values)
12297# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12298#elif defined(MFC_OpenMP)
12299# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12300!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
12301# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12302#endif
12303# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12304 index_x = i
12305# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12306 index_y = j
12307# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12308
12309# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12310 ! Read all files
12311# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12312 do f = 1, max_files
12313# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12314 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
12315# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12316 if (ios /= 0) then
12317# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12318 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
12319# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12320 cycle
12321# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12322 end if
12323# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12324
12325# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12326 iter = 0
12327# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12328 do iix = 1, xrows
12329# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12330 do iiy = 1, yrows
12331# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12332 iter = iter + 1
12333# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12334 if (f == 1) then
12335# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12336 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
12337# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12338 else
12339# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12340 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
12341# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12342 end if
12343# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12344 if (ios /= 0) call s_mpi_abort("Error reading data")
12345# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12346 end do
12347# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12348 end do
12349# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12350 close (unit)
12351# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12352 end do
12353# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12354
12355# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12356 ! Calculate offsets
12357# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12358 x_step = x_cc(1) - x_cc(0)
12359# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12360 y_step = y_cc(1) - y_cc(0)
12361# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12362 delta_x = x_cc(index_x) - x_coords(1)
12363# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12364 delta_y = y_cc(index_y) - y_coords(1)
12365# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12366 global_offset_x = nint(abs(delta_x)/x_step)
12367# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12368 global_offset_y = nint(abs(delta_y)/y_step)
12369# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12370 end select
12371# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12372
12373# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12374 files_loaded = .true.
12375# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12376 end if
12377# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12378
12379# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12380 ! Data assignment
12381# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12382 select case (num_dims)
12383# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12384 case (1)
12385# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12386 idx = i + 1 + global_offset_x
12387# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12388 ! idx must land inside the file's row range: this rank's subdomain offset
12389# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12390 ! (global_offset_x) was derived from this rank's own grid, so a miss means the
12391# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12392 ! IC file is misaligned/mis-sized for the run grid, not a normal boundary case.
12393# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12394 if (idx < 1 .or. idx > xrows) &
12395# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12396 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
12397# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12398 do f = 1, sys_size
12399# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12400 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
12401# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12402 end do
12403# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12404 case (2)
12405# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12406 idx = i + 1 + global_offset_x - index_x
12407# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12408 if (idx < 1 .or. idx > xrows) &
12409# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12410 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
12411# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12412 do f = 1, sys_size - 1
12413# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12414 jump = merge(1, 0, f >= eqn_idx%mom%end)
12415# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12416 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
12417# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12418 end do
12419# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12420 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
12421# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12422 case (3)
12423# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12424 idx = i + 1 + global_offset_x - index_x
12425# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12426 idy = j + 1 + global_offset_y - index_y
12427# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12428 if (idx < 1 .or. idx > xrows .or. idy < 1 .or. idy > yrows) &
12429# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12430 & call s_mpi_abort("Hardcoded IC extrusion: row/column index out of range (IC file misaligned with the run grid)")
12431# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12432 do f = 1, sys_size - 1
12433# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12434 jump = merge(1, 0, f >= eqn_idx%mom%end)
12435# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12436 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
12437# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12438 end do
12439# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12440 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
12441# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12442 end select
12443# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12444 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0)
12445# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12446 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 0.0_wp
12447# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12448 case (274) ! Full 2D field from external data (no extrusion)
12449# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12450 ! Unlike case(270-273), this reads a genuinely 2D (x,y) field per variable, with no
12451# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12452 ! extrusion direction and no zeroed component -- all sys_size variables are read and
12453# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12454 ! assigned directly. Data files must have exactly (m_glb+1)*(n_glb+1) lines per
12455# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12456 ! variable, in x-major order (outer loop x, inner loop y), matching this rank's
12457# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12458 ! global grid exactly -- by construction, since the IC generator derives both the
12459# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12460 ! grid and the file contents from the same computation.
12461# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12462 !
12463# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12464 ! A local cell's global (x, y) index is derived from x_cc(i)/y_cc(j) against the
12465# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12466 ! file's own first coordinate and this rank's uniform grid spacing -- following the
12467# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12468 ! same pattern as case(270)'s global_offset_x/y above -- rather than from start_idx:
12469# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12470 ! start_idx is only allocated when parallel_io=T (s_initialize_parallel_io_common
12471# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12472 ! returns before allocating it otherwise), so a serial-IO run (the default for
12473# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12474 ! golden-file tests) would index into an unallocated array.
12475# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12476 !
12477# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12478 ! Every rank still scans the whole file (matching case(270)'s existing per-rank-reads-
12479# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12480 ! everything pattern), but stored_values274 only holds this rank's LOCAL (0:m, 0:n)
12481# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12482 ! slice rather than the full global grid -- a full-grid copy on every rank would scale
12483# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12484 ! as O(m_glb*n_glb*sys_size) per rank, which is the wrong axis to duplicate work on for
12485# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12486 ! a genuinely 2D (not 1D-profile) field. local_ix_beg274/local_iy_beg274 (this rank's
12487# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12488 ! global cell offset) are pinned from f274==1's very first record, before any other
12489# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12490 ! record is read, so every subsequent record -- across all variables -- can be tested
12491# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12492 ! against this rank's range and dropped if it falls outside it.
12493# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12494 x_step274 = x_cc(1) - x_cc(0)
12495# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12496 y_step274 = y_cc(1) - y_cc(0)
12497# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12498
12499# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12500 if (.not. files_loaded274) then
12501# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12502#ifdef MFC_DEBUG
12503# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12504 block
12505# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12506 use iso_fortran_env, only: output_unit
12507# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12508
12509# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12510 print *, 'm_icpp_patches.fpp:508: ', '@:ALLOCATE(stored_values274(0:m, 0:n, sys_size))'
12511# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12512
12513# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12514 call flush (output_unit)
12515# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12516 end block
12517# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12518#endif
12519# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12520 allocate (stored_values274(0:m, 0:n, sys_size))
12521# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12522
12523# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12524
12525# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12526#if defined(MFC_OpenACC)
12527# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12528!$acc enter data create(stored_values274)
12529# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12530#elif defined(MFC_OpenMP)
12531# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12532!$omp target enter data map(always,alloc:stored_values274)
12533# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12534#endif
12535# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12536 do f274 = 1, sys_size
12537# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12538 write (file_num_str274, '(I0)') f274
12539# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12540 fname274 = trim(files_dir) // "/prim." // trim(file_num_str274) // ".00." // trim(file_extension) // ".dat"
12541# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12542 open (newunit=unit274, file=trim(fname274), status='old', action='read', iostat=ios274)
12543# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12544 if (ios274 /= 0) call s_mpi_abort("Error opening file: " // trim(fname274))
12545# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12546 do ix274 = 0, m_glb
12547# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12548 do iy274 = 0, n_glb
12549# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12550 read (unit274, *, iostat=ios274) dummy_x274, dummy_y274, dummy_val274
12551# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12552 if (ios274 /= 0) call s_mpi_abort("Error reading file (fewer lines than grid?): " // trim(fname274))
12553# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12554 ! Capture the file's own origin and spacing from its first records so we can
12555# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12556 ! confirm it was sampled on this run's grid (a silent mismatch would otherwise
12557# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12558 ! read a wrong partial slice -> nonphysical field -> VCFL=Inf downstream).
12559# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12560 if (f274 == 1) then
12561# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12562 if (ix274 == 0 .and. iy274 == 0) then
12563# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12564 x0_274 = dummy_x274
12565# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12566 y0_274 = dummy_y274
12567# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12568 local_ix_beg274 = nint((x_cc(0) - x0_274)/x_step274)
12569# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12570 local_iy_beg274 = nint((y_cc(0) - y0_274)/y_step274)
12571# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12572 end if
12573# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12574 if (ix274 == 1 .and. iy274 == 0) file_dx274 = dummy_x274 - x0_274
12575# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12576 if (ix274 == 0 .and. iy274 == 1) file_dy274 = dummy_y274 - y0_274
12577# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12578 end if
12579# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12580 if (ix274 - local_ix_beg274 >= 0 .and. ix274 - local_ix_beg274 <= m .and. iy274 - local_iy_beg274 >= 0 &
12581# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12582 & .and. iy274 - local_iy_beg274 <= n) then
12583# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12584 stored_values274(ix274 - local_ix_beg274, iy274 - local_iy_beg274, f274) = dummy_val274
12585# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12586 end if
12587# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12588 end do
12589# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12590 end do
12591# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12592 ! The file must contain exactly (m_glb+1)*(n_glb+1) records: a successful extra
12593# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12594 ! read means it was generated for a larger grid and would be silently misread.
12595# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12596 read (unit274, *, iostat=ios274) dummy_x274, dummy_y274
12597# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12598 if (ios274 == 0) call s_mpi_abort("hcid=274 file has more lines than the grid: " // trim(fname274))
12599# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12600 close (unit274)
12601# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12602 end do
12603# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12604
12605# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12606 ! The run grid must be aligned with the file grid (uniform grid assumed, as in case 270).
12607# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12608 ! Check alignment via the integer cell offset of this rank's first cell from the file
12609# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12610 ! origin -- decomposition-safe: on every MPI rank x_cc(0) sits an integer number of cells
12611# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12612 ! into the global file, so a non-integer offset means a shifted/mismatched IC. (Comparing
12613# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12614 ! x0_274 to x_cc(0) directly would false-abort every rank whose subdomain doesn't start at
12615# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12616 ! the global origin.) The spacing checks below must also hold.
12617# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12618 r_align274 = (x_cc(0) - x0_274)/x_step274
12619# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12620 if (abs(r_align274 - nint(r_align274)) > 1.e-6_wp) &
12621# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12622 & call s_mpi_abort("hcid=274 file x-grid is misaligned with the run grid; regenerate the IC for this grid.")
12623# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12624 if (m_glb >= 1) then
12625# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12626 if (abs(file_dx274 - x_step274) > 1.e-6_wp*abs(x_step274)) &
12627# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12628 & call s_mpi_abort("hcid=274 file x-spacing does not match the grid; regenerate the IC for this grid.")
12629# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12630 end if
12631# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12632 if (n_glb >= 1) then
12633# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12634 r_align274 = (y_cc(0) - y0_274)/y_step274
12635# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12636 if (abs(r_align274 - nint(r_align274)) > 1.e-6_wp) &
12637# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12638 & call s_mpi_abort("hcid=274 file y-grid is misaligned with the run grid; regenerate the IC for this grid.")
12639# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12640 if (abs(file_dy274 - y_step274) > 1.e-6_wp*abs(y_step274)) &
12641# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12642 & call s_mpi_abort("hcid=274 file y-spacing does not match the grid; regenerate the IC for this grid.")
12643# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12644 end if
12645# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12646
12647# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12648 files_loaded274 = .true.
12649# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12650 end if
12651# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12652 ! Alignment is verified above (or this rank would already have aborted), so the local
12653# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12654 ! cell (i, j) maps to stored_values274(i, j, :) directly -- no re-derivation needed.
12655# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12656 do f274 = 1, sys_size
12657# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12658 q_prim_vf(f274)%sf(i, j, 0) = stored_values274(i, j, f274)
12659# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12660 end do
12661# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12662 case (271) ! Premixed Flame Vortices Interaction
12663# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12664 if (.not. files_loaded) then
12665# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12666 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
12667# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12668 do f = 1, max_files
12669# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12670 write (file_num_str, '(I0)') f
12671# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12672 filenames(f) = trim(files_dir) // "/" // "prim." // trim(file_num_str) // ".00." // trim(file_extension) // ".dat"
12673# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12674 end do
12675# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12676
12677# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12678 ! Common file reading setup
12679# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12680 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
12681# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12682 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
12683# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12684
12685# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12686 select case (num_dims)
12687# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12688 case (1, 2) ! 1D and 2D cases are similar
12689# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12690 ! Count lines
12691# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12692 line_count = 0
12693# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12694 do
12695# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12696 read (unit2, *, iostat=ios2) dummy_x, dummy_y
12697# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12698 if (ios2 /= 0) exit
12699# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12700 line_count = line_count + 1
12701# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12702 end do
12703# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12704 close (unit2)
12705# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12706
12707# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12708 xrows = line_count
12709# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12710 yrows = 1
12711# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12712 index_x = 0
12713# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12714 if (num_dims == 2) index_x = i
12715# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12716#ifdef MFC_DEBUG
12717# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12718 block
12719# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12720 use iso_fortran_env, only: output_unit
12721# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12722
12723# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12724 print *, 'm_icpp_patches.fpp:508: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
12725# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12726
12727# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12728 call flush (output_unit)
12729# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12730 end block
12731# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12732#endif
12733# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12734 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
12735# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12736
12737# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12738
12739# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12740
12741# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12742#if defined(MFC_OpenACC)
12743# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12744!$acc enter data create(x_coords, stored_values)
12745# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12746#elif defined(MFC_OpenMP)
12747# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12748!$omp target enter data map(always,alloc:x_coords, stored_values)
12749# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12750#endif
12751# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12752
12753# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12754 ! Read data from all files
12755# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12756 do f = 1, max_files
12757# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12758 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
12759# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12760 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
12761# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12762
12763# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12764 do iter = 1, xrows
12765# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12766 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
12767# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12768 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
12769# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12770 end do
12771# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12772 close (unit)
12773# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12774 end do
12775# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12776
12777# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12778 ! Calculate offsets
12779# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12780 domain_xstart = x_coords(1)
12781# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12782 x_step = x_cc(1) - x_cc(0)
12783# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12784 delta_x = merge(x_cc(0) - domain_xstart, x_cc(index_x) - domain_xstart, num_dims == 1)
12785# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12786 global_offset_x = nint(abs(delta_x)/x_step)
12787# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12788 case (3) ! 3D case - determine grid structure
12789# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12790 ! Find yRows by counting rows with same x
12791# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12792 read (unit2, *, iostat=ios2) x0, y0, dummy_z
12793# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12794 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
12795# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12796
12797# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12798 yrows = 1
12799# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12800 do
12801# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12802 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
12803# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12804 if (ios2 /= 0) exit
12805# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12806 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
12807# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12808 yrows = yrows + 1
12809# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12810 else
12811# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12812 exit
12813# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12814 end if
12815# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12816 end do
12817# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12818 close (unit2)
12819# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12820
12821# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12822 ! Count total rows
12823# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12824 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
12825# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12826 nrows = 0
12827# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12828 do
12829# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12830 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
12831# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12832 if (ios2 /= 0) exit
12833# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12834 nrows = nrows + 1
12835# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12836 end do
12837# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12838 close (unit2)
12839# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12840
12841# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12842 xrows = nrows/yrows
12843# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12844#ifdef MFC_DEBUG
12845# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12846 block
12847# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12848 use iso_fortran_env, only: output_unit
12849# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12850
12851# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12852 print *, 'm_icpp_patches.fpp:508: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
12853# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12854
12855# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12856 call flush (output_unit)
12857# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12858 end block
12859# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12860#endif
12861# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12862 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
12863# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12864
12865# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12866
12867# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12868
12869# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12870
12871# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12872#if defined(MFC_OpenACC)
12873# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12874!$acc enter data create(x_coords, y_coords, stored_values)
12875# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12876#elif defined(MFC_OpenMP)
12877# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12878!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
12879# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12880#endif
12881# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12882 index_x = i
12883# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12884 index_y = j
12885# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12886
12887# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12888 ! Read all files
12889# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12890 do f = 1, max_files
12891# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12892 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
12893# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12894 if (ios /= 0) then
12895# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12896 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
12897# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12898 cycle
12899# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12900 end if
12901# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12902
12903# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12904 iter = 0
12905# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12906 do iix = 1, xrows
12907# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12908 do iiy = 1, yrows
12909# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12910 iter = iter + 1
12911# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12912 if (f == 1) then
12913# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12914 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
12915# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12916 else
12917# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12918 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
12919# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12920 end if
12921# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12922 if (ios /= 0) call s_mpi_abort("Error reading data")
12923# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12924 end do
12925# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12926 end do
12927# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12928 close (unit)
12929# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12930 end do
12931# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12932
12933# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12934 ! Calculate offsets
12935# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12936 x_step = x_cc(1) - x_cc(0)
12937# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12938 y_step = y_cc(1) - y_cc(0)
12939# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12940 delta_x = x_cc(index_x) - x_coords(1)
12941# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12942 delta_y = y_cc(index_y) - y_coords(1)
12943# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12944 global_offset_x = nint(abs(delta_x)/x_step)
12945# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12946 global_offset_y = nint(abs(delta_y)/y_step)
12947# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12948 end select
12949# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12950
12951# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12952 files_loaded = .true.
12953# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12954 end if
12955# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12956
12957# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12958 ! Data assignment
12959# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12960 select case (num_dims)
12961# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12962 case (1)
12963# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12964 idx = i + 1 + global_offset_x
12965# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12966 ! idx must land inside the file's row range: this rank's subdomain offset
12967# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12968 ! (global_offset_x) was derived from this rank's own grid, so a miss means the
12969# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12970 ! IC file is misaligned/mis-sized for the run grid, not a normal boundary case.
12971# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12972 if (idx < 1 .or. idx > xrows) &
12973# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12974 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
12975# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12976 do f = 1, sys_size
12977# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12978 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
12979# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12980 end do
12981# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12982 case (2)
12983# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12984 idx = i + 1 + global_offset_x - index_x
12985# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12986 if (idx < 1 .or. idx > xrows) &
12987# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12988 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
12989# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12990 do f = 1, sys_size - 1
12991# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12992 jump = merge(1, 0, f >= eqn_idx%mom%end)
12993# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12994 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
12995# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12996 end do
12997# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
12998 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
12999# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13000 case (3)
13001# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13002 idx = i + 1 + global_offset_x - index_x
13003# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13004 idy = j + 1 + global_offset_y - index_y
13005# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13006 if (idx < 1 .or. idx > xrows .or. idy < 1 .or. idy > yrows) &
13007# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13008 & call s_mpi_abort("Hardcoded IC extrusion: row/column index out of range (IC file misaligned with the run grid)")
13009# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13010 do f = 1, sys_size - 1
13011# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13012 jump = merge(1, 0, f >= eqn_idx%mom%end)
13013# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13014 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
13015# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13016 end do
13017# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13018 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
13019# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13020 end select
13021# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13022 x1c = 0.0027_wp
13023# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13024 y1c = 0.005_wp
13025# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13026 x2c = 0.0027_wp
13027# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13028 y2c = 0.003_wp
13029# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13030 r1c = (x_cc(i) - x1c)**(2.0_wp) + (y_cc(j) - y1c)**(2.0_wp)
13031# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13032 r2c = (x_cc(i) - x2c)**(2.0_wp) + (y_cc(j) - y2c)**(2.0_wp)
13033# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13034 rvortex = 0.0005_wp
13035# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13036 cvortex = 6000.0_wp
13037# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13038
13039# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13040 u1c = -cvortex*((y_cc(j) - y1c))*exp(-r1c/(2.0_wp*rvortex**2.0_wp))
13041# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13042 v1c = cvortex*((x_cc(i) - x1c))*exp(-r1c/(2.0_wp*rvortex**2.0_wp))
13043# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13044
13045# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13046 u2c = cvortex*((y_cc(j) - y2c))*exp(-r2c/(2.0_wp*rvortex**2.0_wp))
13047# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13048 v2c = -cvortex*((x_cc(i) - x2c))*exp(-r2c/(2.0_wp*rvortex**2.0_wp))
13049# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13050 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) + u1c + u2c
13051# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13052 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = v1c + v2c
13053# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13054 case (272) ! Premixed Flame Instability
13055# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13056 if (.not. files_loaded) then
13057# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13058 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
13059# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13060 do f = 1, max_files
13061# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13062 write (file_num_str, '(I0)') f
13063# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13064 filenames(f) = trim(files_dir) // "/" // "prim." // trim(file_num_str) // ".00." // trim(file_extension) // ".dat"
13065# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13066 end do
13067# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13068
13069# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13070 ! Common file reading setup
13071# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13072 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
13073# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13074 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
13075# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13076
13077# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13078 select case (num_dims)
13079# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13080 case (1, 2) ! 1D and 2D cases are similar
13081# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13082 ! Count lines
13083# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13084 line_count = 0
13085# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13086 do
13087# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13088 read (unit2, *, iostat=ios2) dummy_x, dummy_y
13089# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13090 if (ios2 /= 0) exit
13091# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13092 line_count = line_count + 1
13093# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13094 end do
13095# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13096 close (unit2)
13097# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13098
13099# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13100 xrows = line_count
13101# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13102 yrows = 1
13103# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13104 index_x = 0
13105# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13106 if (num_dims == 2) index_x = i
13107# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13108#ifdef MFC_DEBUG
13109# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13110 block
13111# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13112 use iso_fortran_env, only: output_unit
13113# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13114
13115# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13116 print *, 'm_icpp_patches.fpp:508: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
13117# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13118
13119# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13120 call flush (output_unit)
13121# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13122 end block
13123# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13124#endif
13125# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13126 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
13127# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13128
13129# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13130
13131# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13132
13133# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13134#if defined(MFC_OpenACC)
13135# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13136!$acc enter data create(x_coords, stored_values)
13137# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13138#elif defined(MFC_OpenMP)
13139# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13140!$omp target enter data map(always,alloc:x_coords, stored_values)
13141# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13142#endif
13143# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13144
13145# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13146 ! Read data from all files
13147# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13148 do f = 1, max_files
13149# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13150 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
13151# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13152 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
13153# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13154
13155# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13156 do iter = 1, xrows
13157# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13158 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
13159# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13160 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
13161# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13162 end do
13163# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13164 close (unit)
13165# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13166 end do
13167# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13168
13169# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13170 ! Calculate offsets
13171# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13172 domain_xstart = x_coords(1)
13173# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13174 x_step = x_cc(1) - x_cc(0)
13175# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13176 delta_x = merge(x_cc(0) - domain_xstart, x_cc(index_x) - domain_xstart, num_dims == 1)
13177# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13178 global_offset_x = nint(abs(delta_x)/x_step)
13179# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13180 case (3) ! 3D case - determine grid structure
13181# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13182 ! Find yRows by counting rows with same x
13183# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13184 read (unit2, *, iostat=ios2) x0, y0, dummy_z
13185# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13186 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
13187# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13188
13189# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13190 yrows = 1
13191# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13192 do
13193# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13194 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
13195# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13196 if (ios2 /= 0) exit
13197# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13198 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
13199# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13200 yrows = yrows + 1
13201# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13202 else
13203# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13204 exit
13205# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13206 end if
13207# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13208 end do
13209# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13210 close (unit2)
13211# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13212
13213# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13214 ! Count total rows
13215# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13216 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
13217# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13218 nrows = 0
13219# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13220 do
13221# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13222 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
13223# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13224 if (ios2 /= 0) exit
13225# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13226 nrows = nrows + 1
13227# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13228 end do
13229# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13230 close (unit2)
13231# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13232
13233# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13234 xrows = nrows/yrows
13235# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13236#ifdef MFC_DEBUG
13237# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13238 block
13239# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13240 use iso_fortran_env, only: output_unit
13241# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13242
13243# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13244 print *, 'm_icpp_patches.fpp:508: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
13245# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13246
13247# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13248 call flush (output_unit)
13249# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13250 end block
13251# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13252#endif
13253# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13254 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
13255# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13256
13257# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13258
13259# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13260
13261# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13262
13263# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13264#if defined(MFC_OpenACC)
13265# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13266!$acc enter data create(x_coords, y_coords, stored_values)
13267# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13268#elif defined(MFC_OpenMP)
13269# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13270!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
13271# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13272#endif
13273# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13274 index_x = i
13275# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13276 index_y = j
13277# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13278
13279# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13280 ! Read all files
13281# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13282 do f = 1, max_files
13283# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13284 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
13285# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13286 if (ios /= 0) then
13287# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13288 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
13289# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13290 cycle
13291# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13292 end if
13293# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13294
13295# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13296 iter = 0
13297# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13298 do iix = 1, xrows
13299# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13300 do iiy = 1, yrows
13301# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13302 iter = iter + 1
13303# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13304 if (f == 1) then
13305# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13306 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
13307# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13308 else
13309# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13310 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
13311# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13312 end if
13313# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13314 if (ios /= 0) call s_mpi_abort("Error reading data")
13315# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13316 end do
13317# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13318 end do
13319# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13320 close (unit)
13321# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13322 end do
13323# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13324
13325# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13326 ! Calculate offsets
13327# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13328 x_step = x_cc(1) - x_cc(0)
13329# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13330 y_step = y_cc(1) - y_cc(0)
13331# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13332 delta_x = x_cc(index_x) - x_coords(1)
13333# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13334 delta_y = y_cc(index_y) - y_coords(1)
13335# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13336 global_offset_x = nint(abs(delta_x)/x_step)
13337# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13338 global_offset_y = nint(abs(delta_y)/y_step)
13339# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13340 end select
13341# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13342
13343# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13344 files_loaded = .true.
13345# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13346 end if
13347# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13348
13349# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13350 ! Data assignment
13351# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13352 select case (num_dims)
13353# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13354 case (1)
13355# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13356 idx = i + 1 + global_offset_x
13357# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13358 ! idx must land inside the file's row range: this rank's subdomain offset
13359# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13360 ! (global_offset_x) was derived from this rank's own grid, so a miss means the
13361# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13362 ! IC file is misaligned/mis-sized for the run grid, not a normal boundary case.
13363# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13364 if (idx < 1 .or. idx > xrows) &
13365# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13366 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
13367# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13368 do f = 1, sys_size
13369# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13370 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
13371# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13372 end do
13373# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13374 case (2)
13375# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13376 idx = i + 1 + global_offset_x - index_x
13377# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13378 if (idx < 1 .or. idx > xrows) &
13379# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13380 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
13381# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13382 do f = 1, sys_size - 1
13383# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13384 jump = merge(1, 0, f >= eqn_idx%mom%end)
13385# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13386 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
13387# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13388 end do
13389# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13390 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
13391# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13392 case (3)
13393# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13394 idx = i + 1 + global_offset_x - index_x
13395# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13396 idy = j + 1 + global_offset_y - index_y
13397# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13398 if (idx < 1 .or. idx > xrows .or. idy < 1 .or. idy > yrows) &
13399# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13400 & call s_mpi_abort("Hardcoded IC extrusion: row/column index out of range (IC file misaligned with the run grid)")
13401# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13402 do f = 1, sys_size - 1
13403# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13404 jump = merge(1, 0, f >= eqn_idx%mom%end)
13405# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13406 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
13407# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13408 end do
13409# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13410 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
13411# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13412 end select
13413# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13414
13415# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13416 y_center = y0_ref
13417# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13418 y_dist = y_cc(j) - y_center
13419# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13420 wave_phase = 2.0_wp*pi*nwaves*(y_dist/ly_param)
13421# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13422 front_shift = a_param*sin(wave_phase)
13423# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13424
13425# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13426 x_mapped = x_cc(i) - front_shift
13427# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13428
13429# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13430 if (x_mapped <= x_coords(1)) then
13431# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13432 do v = 1, sys_size - 1
13433# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13434 q_prim_vf(v + merge(1, 0, v >= eqn_idx%mom%end))%sf(i, j, 0) = stored_values(1, 1, v)
13435# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13436 end do
13437# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13438 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
13439# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13440 else if (x_mapped >= x_coords(xrows)) then
13441# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13442 do v = 1, sys_size - 1
13443# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13444 q_prim_vf(v + merge(1, 0, v >= eqn_idx%mom%end))%sf(i, j, 0) = stored_values(xrows, 1, v)
13445# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13446 end do
13447# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13448 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
13449# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13450 else
13451# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13452 idx_lo = 1; idx_hi = xrows
13453# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13454 do while (idx_hi - idx_lo > 1)
13455# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13456 idx_mid = (idx_lo + idx_hi)/2
13457# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13458 if (x_coords(idx_mid) <= x_mapped) then
13459# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13460 idx_lo = idx_mid
13461# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13462 else
13463# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13464 idx_hi = idx_mid
13465# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13466 end if
13467# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13468 end do
13469# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13470
13471# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13472 interp_wt = (x_mapped - x_coords(idx_lo))/(x_coords(idx_hi) - x_coords(idx_lo)) ! weight in [0,1)
13473# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13474
13475# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13476 do v = 1, sys_size - 1
13477# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13478 q_prim_vf(v + merge(1, 0, v >= eqn_idx%mom%end))%sf(i, j, 0) = (1.0_wp - interp_wt)*stored_values(idx_lo, 1, &
13479# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13480 & v) + interp_wt*stored_values(idx_hi, 1, v)
13481# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13482 end do
13483# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13484 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
13485# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13486 end if
13487# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13488 case (280) ! Isentropic vortex
13489# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13490 ! This is patch is hard-coded for test suite optimization used in the 2D_isentropicvortex case: This analytic patch uses
13491# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13492 ! geometry 2
13493# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13494 if (patch_id == 1) then
13495# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13496 q_prim_vf(eqn_idx%E)%sf(i, j, &
13497# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13498 & 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) &
13499# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13500 & - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0)))**(1.4 + 1.0)
13501# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13502 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, j, &
13503# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13504 & 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) &
13505# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13506 & - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0)))**1.4
13507# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13508 q_prim_vf(eqn_idx%mom%beg + 0)%sf(i, j, &
13509# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13510 & 0) = patch_icpp(1)%vel(1) + (y_cc(j) - patch_icpp(1)%y_centroid)*(5.0/(2.0*pi))*exp(1.0*(1.0 - (x_cc(i) &
13511# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13512 & - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0))
13513# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13514 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, &
13515# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13516 & 0) = patch_icpp(1)%vel(2) - (x_cc(i) - patch_icpp(1)%x_centroid)*(5.0/(2.0*pi))*exp(1.0*(1.0 - (x_cc(i) &
13517# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13518 & - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0))
13519# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13520 end if
13521# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13522 case (281) ! Acoustic pulse
13523# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13524 ! This is patch is hard-coded for test suite optimization used in the 2D_acoustic_pulse case: This analytic patch uses
13525# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13526 ! geometry 2
13527# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13528 if (patch_id == 2) then
13529# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13530 q_prim_vf(eqn_idx%E)%sf(i, j, &
13531# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13532 & 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))
13533# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13534 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, j, &
13535# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13536 & 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))
13537# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13538 end if
13539# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13540 case (282) ! Zero-circulation vortex
13541# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13542 ! This is patch is hard-coded for test suite optimization used in the 2D_zero_circ_vortex case: This analytic patch uses
13543# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13544 ! geometry 2
13545# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13546 if (patch_id == 2) then
13547# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13548 q_prim_vf(eqn_idx%E)%sf(i, j, &
13549# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13550 & 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))
13551# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13552 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, j, &
13553# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13554 & 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))
13555# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13556 q_prim_vf(eqn_idx%mom%beg + 0)%sf(i, j, &
13557# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13558 & 0) = 112.99092883944267*(1 - (0.1/0.3))*y_cc(j)*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2)))
13559# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13560 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, &
13561# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13562 & 0) = 112.99092883944267*((0.1/0.3))*x_cc(i)*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2)))
13563# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13564 end if
13565# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13566 case (283) ! Isentropic vortex: conserved-variable GL cell averages (3-pt tensor product)
13567# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13568 ! GL averages of conserved variables (rho, rho*u, rho*v, E) eliminate the O(h^2) error that primitive-variable averaging
13569# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13570 ! introduces through the nonlinear prim->cons conversion: cell_avg(rho*u) != cell_avg(rho)*cell_avg(u) by O(h^2). We back
13571# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13572 ! out primitive values that reproduce the conserved averages exactly. Vortex strength eps is read from
13573# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13574 ! patch_icpp(patch_id)%epsilon; defaults to 5.
13575# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13576 if (patch_id == 1) then
13577# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13578 vortex_eps = merge(patch_icpp(patch_id)%epsilon, 5._wp, patch_icpp(patch_id)%epsilon > 0._wp)
13579# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13580 gauss_xi = [-sqrt(3._wp/5._wp), 0._wp, sqrt(3._wp/5._wp)]
13581# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13582 gauss_w = [5._wp/9._wp, 8._wp/9._wp, 5._wp/9._wp]
13583# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13584 rho_avg = 0._wp; rhou_avg = 0._wp; rhov_avg = 0._wp; e_avg = 0._wp
13585# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13586 do igq = 1, 3
13587# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13588 do jgq = 1, 3
13589# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13590 xq = x_cc(i) + gauss_xi(igq)*(x_cb(i) - x_cb(i - 1))*0.5_wp
13591# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13592 yq = y_cc(j) + gauss_xi(jgq)*(y_cb(j) - y_cb(j - 1))*0.5_wp
13593# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13594 r2q = (xq - patch_icpp(patch_id)%x_centroid)**2._wp + (yq - patch_icpp(patch_id)%y_centroid)**2._wp
13595# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13596 t_facq = 1._wp - (vortex_eps/(2._wp*pi))*(vortex_eps/(8._wp*(1.4_wp + 1._wp)*pi))*exp(2._wp*(1._wp - r2q))
13597# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13598 wq = gauss_w(igq)*gauss_w(jgq)
13599# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13600 rhoq = t_facq**1.4_wp
13601# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13602 pq = t_facq**2.4_wp
13603# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13604 uq = patch_icpp(patch_id)%vel(1) + (yq - patch_icpp(patch_id)%y_centroid)*(vortex_eps/(2._wp*pi))*exp(1._wp &
13605# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13606 & - r2q)
13607# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13608 vq = patch_icpp(patch_id)%vel(2) - (xq - patch_icpp(patch_id)%x_centroid)*(vortex_eps/(2._wp*pi))*exp(1._wp &
13609# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13610 & - r2q)
13611# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13612 eq = pq/0.4_wp + 0.5_wp*rhoq*(uq**2 + vq**2)
13613# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13614 rho_avg = rho_avg + wq*rhoq
13615# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13616 rhou_avg = rhou_avg + wq*(rhoq*uq)
13617# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13618 rhov_avg = rhov_avg + wq*(rhoq*vq)
13619# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13620 e_avg = e_avg + wq*eq
13621# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13622 end do
13623# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13624 end do
13625# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13626 rho_avg = rho_avg*0.25_wp
13627# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13628 rhou_avg = rhou_avg*0.25_wp
13629# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13630 rhov_avg = rhov_avg*0.25_wp
13631# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13632 e_avg = e_avg*0.25_wp
13633# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13634 ! Back out primitive vars so prim->cons conversion recovers the conserved averages
13635# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13636 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = rho_avg
13637# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13638 q_prim_vf(eqn_idx%mom%beg + 0)%sf(i, j, 0) = rhou_avg/rho_avg
13639# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13640 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = rhov_avg/rho_avg
13641# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13642 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = (e_avg - 0.5_wp*(rhou_avg**2 + rhov_avg**2)/rho_avg)*0.4_wp
13643# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13644 end if
13645# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13646 case (291) ! Isothermal Flat Plate
13647# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13648 t_inf = 1125.0_wp
13649# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13650 t_wall = 600.0_wp
13651# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13652 p_atm = 101325.0_wp
13653# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13654
13655# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13656 ! Boundary/Shear Layer thicknesses
13657# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13658 delta_th = 0.0003_wp ! Thermal BL thickness
13659# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13660 delta_shear = 8e-3_wp ! Velocity BL thickness
13661# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13662
13663# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13664 u_max = 50.0_wp ! Freestream Velocity (m/s)
13665# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13666
13667# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13668 mw_n2 = 28.0134e-3_wp
13669# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13670 mw_o2 = 31.999e-3_wp
13671# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13672 y_n2 = 0.767_wp
13673# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13674 y_o2 = 0.233_wp
13675# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13676 r_mix = 8.314462618_wp*((y_n2/mw_n2) + (y_o2/mw_o2))
13677# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13678 bottom_blend_u = tanh(y_cc(j)/delta_shear)
13679# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13680 bottom_blend_t = tanh(y_cc(j)/delta_th)
13681# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13682 u_mean = u_max*bottom_blend_u
13683# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13684 t_loc = t_wall + (t_inf - t_wall)*bottom_blend_t
13685# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13686 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = p_atm/(r_mix*t_loc)
13687# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13688 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = u_mean
13689# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13690 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
13691# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13692 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p_atm
13693# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13694 q_prim_vf(eqn_idx%species%beg)%sf(i, j, 0) = y_o2
13695# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13696 q_prim_vf(eqn_idx%species%end)%sf(i, j, 0) = y_n2
13697# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13698 case default
13699# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13700 if (proc_rank == 0) then
13701# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13702 call s_int_to_str(patch_id, istr)
13703# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13704 call s_mpi_abort("Invalid hcid specified for patch " // trim(istr))
13705# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13706 end if
13707# 508 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13708 end select
13709 end if
13710
13711 ! Updating the patch identities bookkeeping variable
13712 if (1._wp - eta < sgm_eps) patch_id_fp(i, j, 0) = patch_id
13713 end if
13714 end do
13715 end do
13716 if (allocated(stored_values)) then
13717# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13718#ifdef MFC_DEBUG
13719# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13720 block
13721# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13722 use iso_fortran_env, only: output_unit
13723# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13724
13725# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13726 print *, 'm_icpp_patches.fpp:516: ', '@:DEALLOCATE(stored_values)'
13727# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13728
13729# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13730 call flush (output_unit)
13731# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13732 end block
13733# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13734#endif
13735# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13736
13737# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13738#if defined(MFC_OpenACC)
13739# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13740!$acc exit data delete(stored_values)
13741# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13742#elif defined(MFC_OpenMP)
13743# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13744!$omp target exit data map(release:stored_values)
13745# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13746#endif
13747# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13748 deallocate (stored_values)
13749# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13750#ifdef MFC_DEBUG
13751# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13752 block
13753# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13754 use iso_fortran_env, only: output_unit
13755# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13756
13757# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13758 print *, 'm_icpp_patches.fpp:516: ', '@:DEALLOCATE(x_coords)'
13759# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13760
13761# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13762 call flush (output_unit)
13763# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13764 end block
13765# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13766#endif
13767# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13768
13769# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13770#if defined(MFC_OpenACC)
13771# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13772!$acc exit data delete(x_coords)
13773# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13774#elif defined(MFC_OpenMP)
13775# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13776!$omp target exit data map(release:x_coords)
13777# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13778#endif
13779# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13780 deallocate (x_coords)
13781# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13782 end if
13783# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13784
13785# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13786 if (allocated(y_coords)) then
13787# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13788#ifdef MFC_DEBUG
13789# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13790 block
13791# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13792 use iso_fortran_env, only: output_unit
13793# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13794
13795# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13796 print *, 'm_icpp_patches.fpp:516: ', '@:DEALLOCATE(y_coords)'
13797# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13798
13799# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13800 call flush (output_unit)
13801# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13802 end block
13803# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13804#endif
13805# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13806
13807# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13808#if defined(MFC_OpenACC)
13809# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13810!$acc exit data delete(y_coords)
13811# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13812#elif defined(MFC_OpenMP)
13813# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13814!$omp target exit data map(release:y_coords)
13815# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13816#endif
13817# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13818 deallocate (y_coords)
13819# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13820 end if
13821# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13822
13823# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13824 files_loaded = .false.
13825# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13826
13827# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13828 if (allocated(stored_values274)) then
13829# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13830#ifdef MFC_DEBUG
13831# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13832 block
13833# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13834 use iso_fortran_env, only: output_unit
13835# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13836
13837# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13838 print *, 'm_icpp_patches.fpp:516: ', '@:DEALLOCATE(stored_values274)'
13839# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13840
13841# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13842 call flush (output_unit)
13843# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13844 end block
13845# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13846#endif
13847# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13848
13849# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13850#if defined(MFC_OpenACC)
13851# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13852!$acc exit data delete(stored_values274)
13853# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13854#elif defined(MFC_OpenMP)
13855# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13856!$omp target exit data map(release:stored_values274)
13857# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13858#endif
13859# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13860 deallocate (stored_values274)
13861# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13862 end if
13863# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13864
13865# 516 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13866 files_loaded274 = .false.
13867
13868 end subroutine s_icpp_ellipse
13869
13870 !> The ellipsoidal patch is a 3D geometry. The geometry of the patch is well-defined when its centroid and radii are provided.
13871 !! Note that the ellipsoidal patch DOES allow for the smoothing of its boundary
13872 subroutine s_icpp_ellipsoid(patch_id, patch_id_fp, q_prim_vf)
13873
13874 ! Patch identifier
13875 integer, intent(in) :: patch_id
13876
13877#ifdef MFC_MIXED_PRECISION
13878 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
13879#else
13880 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
13881#endif
13882 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
13883
13884 ! Generic loop iterators
13885 integer :: i, j, k
13886 real(wp) :: a, b, c
13887
13888 integer :: xRows, yRows, nRows, iix, iiy, max_files
13889# 538 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13890 integer :: f, iter, unit, unit2, idx, idy, index_x, index_y, jump, line_count
13891# 538 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13892 real(wp) :: x_step, y_step
13893# 538 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13894 real(wp) :: dummy_x, dummy_y, dummy_z, x0, y0
13895# 538 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13896 integer :: global_offset_x, global_offset_y !< MPI subdomain offset
13897# 538 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13898 real(wp) :: delta_x, delta_y
13899# 538 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13900 character(len=300), dimension(sys_size) :: fileNames !< Arrays to store all data from files
13901# 538 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13902 real(wp), allocatable :: stored_values(:,:,:)
13903# 538 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13904 real(wp), allocatable :: x_coords(:), y_coords(:)
13905# 538 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13906 logical :: files_loaded = .false.
13907# 538 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13908 real(wp) :: domain_xstart
13909# 538 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13910 character(len=20) :: file_num_str !< For storing the file number as a string
13911# 538 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13912 integer :: ios
13913# 538 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13914 integer :: ios2
13915# 538 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13916
13917# 538 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13918 ! hcid=274 (2dHardcodedIC.fpp): full 2D field from external data, no extrusion.
13919# 538 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13920 ! Declared here (not in Hardcoded2DVariables()) so it's visible wherever
13921# 538 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13922 ! HardcodedDeallocation() is called, matching the pattern of stored_values/x_coords/
13923# 538 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13924 ! y_coords/files_loaded above.
13925# 538 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13926 real(wp), allocatable, dimension(:,:,:) :: stored_values274
13927# 538 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13928 logical :: files_loaded274 = .false.
13929# 538 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13930 integer :: f274, ix274, iy274, unit274, ios274
13931# 538 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13932 integer :: local_ix_beg274, local_iy_beg274
13933# 538 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13934 character(len=300) :: fname274
13935# 538 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13936 character(len=20) :: file_num_str274
13937# 538 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13938 real(wp) :: dummy_x274, dummy_y274, dummy_val274, x0_274, y0_274, x_step274, y_step274
13939# 538 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13940 real(wp) :: file_dx274, file_dy274, r_align274
13941 ! Place any declaration of intermediate variables here
13942# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13943 real(wp) :: rhoH, rhoL, pRef, pInt, h, lam, wl, amp, intH, alph, Mach
13944# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13945 real(wp) :: eps
13946# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13947
13948# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13949 ! IGR Jets Arrays to stor position and radii of jets from input file
13950# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13951 real(wp), dimension(:), allocatable :: y_th_arr, z_th_arr, r_th_arr
13952# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13953 ! Variables to describe initial condition of jet
13954# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13955 real(wp) :: r, ux_th, ux_am, p_th, p_am, rho_th, rho_am, y_th, z_th, r_th, eps_smooth
13956# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13957 real(wp) :: rcut, xcut !< Intermediate variables for creating smooth initial condition
13958# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13959 real(wp), dimension(0:n,0:p) :: rcut_arr
13960# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13961 integer :: l, q, s !< Iterators for reading input files
13962# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13963 integer :: start, end !< Ints to keep track of position in file
13964# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13965 character(len=100000) :: line ! String to store line in file
13966# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13967 character(len=25) :: value !< String to store value in line
13968# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13969 integer :: NJet !< Number of jets
13970# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13971 real(wp), allocatable, dimension(:,:) :: ih ! Array to store interface height in
13972# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13973 logical :: file_exist ! Flag to check if file exists
13974# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13975
13976# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13977 eps = 1e-9_wp
13978# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13979
13980# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13981 if (patch_icpp(patch_id)%hcid == 303) then ! IGR Multijet
13982# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13983 eps_smooth = 3._wp
13984# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13985 inquire (file="njet.txt", exist=file_exist)
13986# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13987 if (file_exist) then
13988# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13989 open (unit=10, file="njet.txt", status="old", action="read")
13990# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13991 read (10, *) njet
13992# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13993 close (10)
13994# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13995 else
13996# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13997 call s_mpi_abort("Error: njet.txt file specified for hcid=303 does not exist")
13998# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
13999 end if
14000# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14001
14002# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14003#ifdef MFC_DEBUG
14004# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14005 block
14006# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14007 use iso_fortran_env, only: output_unit
14008# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14009
14010# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14011 print *, 'm_icpp_patches.fpp:539: ', '@:ALLOCATE(y_th_arr(0:NJet - 1))'
14012# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14013
14014# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14015 call flush (output_unit)
14016# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14017 end block
14018# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14019#endif
14020# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14021 allocate (y_th_arr(0:njet - 1))
14022# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14023
14024# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14025
14026# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14027#if defined(MFC_OpenACC)
14028# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14029!$acc enter data create(y_th_arr)
14030# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14031#elif defined(MFC_OpenMP)
14032# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14033!$omp target enter data map(always,alloc:y_th_arr)
14034# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14035#endif
14036# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14037#ifdef MFC_DEBUG
14038# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14039 block
14040# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14041 use iso_fortran_env, only: output_unit
14042# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14043
14044# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14045 print *, 'm_icpp_patches.fpp:539: ', '@:ALLOCATE(z_th_arr(0:NJet - 1))'
14046# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14047
14048# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14049 call flush (output_unit)
14050# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14051 end block
14052# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14053#endif
14054# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14055 allocate (z_th_arr(0:njet - 1))
14056# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14057
14058# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14059
14060# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14061#if defined(MFC_OpenACC)
14062# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14063!$acc enter data create(z_th_arr)
14064# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14065#elif defined(MFC_OpenMP)
14066# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14067!$omp target enter data map(always,alloc:z_th_arr)
14068# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14069#endif
14070# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14071#ifdef MFC_DEBUG
14072# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14073 block
14074# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14075 use iso_fortran_env, only: output_unit
14076# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14077
14078# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14079 print *, 'm_icpp_patches.fpp:539: ', '@:ALLOCATE(r_th_arr(0:NJet - 1))'
14080# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14081
14082# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14083 call flush (output_unit)
14084# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14085 end block
14086# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14087#endif
14088# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14089 allocate (r_th_arr(0:njet - 1))
14090# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14091
14092# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14093
14094# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14095#if defined(MFC_OpenACC)
14096# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14097!$acc enter data create(r_th_arr)
14098# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14099#elif defined(MFC_OpenMP)
14100# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14101!$omp target enter data map(always,alloc:r_th_arr)
14102# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14103#endif
14104# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14105
14106# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14107 inquire (file="jets.csv", exist=file_exist)
14108# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14109 if (file_exist) then
14110# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14111 open (unit=10, file="jets.csv", status="old", action="read")
14112# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14113 do q = 0, njet - 1
14114# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14115 read (10, '(A)') line ! Read a full line as a string
14116# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14117 start = 1
14118# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14119
14120# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14121 do l = 0, 2
14122# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14123 end = index(line(start:), ',') ! Find the next comma
14124# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14125 if (end == 0) then
14126# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14127 value = trim(adjustl(line(start:))) ! Last value in the line
14128# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14129 else
14130# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14131 value = trim(adjustl(line(start:start + end - 2))) ! Extract substring
14132# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14133 start = start + end ! Move to next value
14134# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14135 end if
14136# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14137 if (l == 0) then
14138# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14139 read (value, *) y_th_arr(q) ! Convert string to numeric value
14140# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14141 else if (l == 1) then
14142# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14143 read (value, *) z_th_arr(q)
14144# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14145 else
14146# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14147 read (value, *) r_th_arr(q)
14148# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14149 end if
14150# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14151 end do
14152# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14153 end do
14154# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14155 close (10)
14156# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14157
14158# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14159 do q = 0, p
14160# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14161 do l = 0, n
14162# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14163 rcut = 0._wp
14164# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14165 do s = 0, njet - 1
14166# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14167 r = sqrt((y_cc(l) - y_th_arr(s))**2._wp + (z_cc(q) - z_th_arr(s))**2._wp)
14168# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14169 rcut = rcut + f_cut_on(r - r_th_arr(s), eps_smooth)
14170# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14171 end do
14172# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14173 rcut_arr(l, q) = rcut
14174# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14175 end do
14176# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14177 end do
14178# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14179 else
14180# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14181 call s_mpi_abort("Error: jets.csv file specified for hcid=303 does not exist")
14182# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14183 end if
14184# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14185 end if
14186# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14187
14188# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14189 if (patch_icpp(patch_id)%hcid == 304) then ! 3D Cartesian interface from file
14190# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14191#ifdef MFC_DEBUG
14192# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14193 block
14194# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14195 use iso_fortran_env, only: output_unit
14196# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14197
14198# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14199 print *, 'm_icpp_patches.fpp:539: ', '@:ALLOCATE(ih(0:n_glb, 0:p_glb))'
14200# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14201
14202# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14203 call flush (output_unit)
14204# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14205 end block
14206# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14207#endif
14208# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14209 allocate (ih(0:n_glb, 0:p_glb))
14210# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14211
14212# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14213
14214# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14215#if defined(MFC_OpenACC)
14216# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14217!$acc enter data create(ih)
14218# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14219#elif defined(MFC_OpenMP)
14220# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14221!$omp target enter data map(always,alloc:ih)
14222# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14223#endif
14224# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14225
14226# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14227 if (interface_file == '.') then
14228# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14229 call s_mpi_abort("Error: interface_file must be specified for hcid=304")
14230# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14231 else
14232# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14233 inquire (file=trim(interface_file), exist=file_exist)
14234# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14235 if (file_exist) then
14236# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14237 open (unit=10, file=trim(interface_file), status="old", action="read")
14238# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14239 do i = 0, n_glb
14240# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14241 read (10, '(A)') line ! Read a full line as a string
14242# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14243 start = 1
14244# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14245
14246# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14247 do j = 0, p_glb
14248# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14249 end = index(line(start:), ',') ! Find the next comma
14250# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14251 if (end == 0) then
14252# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14253 value = trim(adjustl(line(start:))) ! Last value in the line
14254# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14255 else
14256# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14257 value = trim(adjustl(line(start:start + end - 2))) ! Extract substring
14258# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14259 start = start + end ! Move to next value
14260# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14261 end if
14262# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14263 read (value, *) ih(i, j) ! Convert string to numeric value
14264# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14265 if (.not. f_is_default(normmag)) ih(i, j) = ih(i, j)*normmag
14266# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14267 if (.not. f_is_default(normfac)) ih(i, j) = ih(i, j) + normfac
14268# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14269 end do
14270# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14271 end do
14272# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14273 close (10)
14274# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14275 else
14276# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14277 call s_mpi_abort("Error: interface_file specified for hcid=304 does not exist")
14278# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14279 end if
14280# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14281 end if
14282# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14283 end if
14284# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14285
14286# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14287 if (patch_icpp(patch_id)%hcid == 305) then ! 3D Axisymmetric interface from file
14288# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14289#ifdef MFC_DEBUG
14290# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14291 block
14292# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14293 use iso_fortran_env, only: output_unit
14294# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14295
14296# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14297 print *, 'm_icpp_patches.fpp:539: ', '@:ALLOCATE(ih(0:n_glb, 0:0))'
14298# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14299
14300# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14301 call flush (output_unit)
14302# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14303 end block
14304# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14305#endif
14306# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14307 allocate (ih(0:n_glb, 0:0))
14308# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14309
14310# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14311
14312# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14313#if defined(MFC_OpenACC)
14314# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14315!$acc enter data create(ih)
14316# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14317#elif defined(MFC_OpenMP)
14318# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14319!$omp target enter data map(always,alloc:ih)
14320# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14321#endif
14322# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14323 if (interface_file == '.') then
14324# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14325 call s_mpi_abort("Error: interface_file must be specified for hcid=305")
14326# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14327 else
14328# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14329 inquire (file=trim(interface_file), exist=file_exist)
14330# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14331 if (file_exist) then
14332# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14333 open (unit=10, file=trim(interface_file), status="old", action="read")
14334# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14335 do i = 0, n_glb
14336# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14337 read (10, '(A)') line ! Read a full line as a string
14338# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14339 value = trim(line)
14340# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14341 read (value, *) ih(i, 0) ! Convert string to numeric value
14342# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14343 if (.not. f_is_default(normmag)) ih(i, 0) = ih(i, 0)*normmag
14344# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14345 if (.not. f_is_default(normfac)) ih(i, 0) = ih(i, 0) + normfac
14346# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14347 end do
14348# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14349 close (10)
14350# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14351 else
14352# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14353 call s_mpi_abort("Error: interface_file specified for hcid=305 does not exist")
14354# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14355 end if
14356# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14357 end if
14358# 539 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14359 end if
14360
14361 ! Transferring the ellipsoidal patch's radii, centroid, smearing patch identity, and smearing coefficient information
14362 x_centroid = patch_icpp(patch_id)%x_centroid
14363 y_centroid = patch_icpp(patch_id)%y_centroid
14364 z_centroid = patch_icpp(patch_id)%z_centroid
14365 a = patch_icpp(patch_id)%radii(1)
14366 b = patch_icpp(patch_id)%radii(2)
14367 c = patch_icpp(patch_id)%radii(3)
14368 smooth_patch_id = patch_icpp(patch_id)%smooth_patch_id
14369 smooth_coeff = patch_icpp(patch_id)%smooth_coeff
14370
14371 ! Initialize eta=1; modified if smoothing is enabled
14372 eta = 1._wp
14373
14374 ! Assign patch vars if cell is covered and patch has write permission
14375 do k = 0, p
14376 do j = 0, n
14377 do i = 0, m
14378 if (grid_geometry == 3) then
14380 else
14381 cart_y = y_cc(j)
14382 cart_z = z_cc(k)
14383 end if
14384
14385 if (patch_icpp(patch_id)%smoothen) then
14386 eta = tanh(smooth_coeff/min(dx, dy, &
14387 & dz)*(sqrt(((x_cc(i) - x_centroid)/a)**2 + ((cart_y - y_centroid)/b)**2 + ((cart_z &
14388 & - z_centroid)/c)**2) - 1._wp))*(-0.5_wp) + 0.5_wp
14389 end if
14390
14391 if ((((x_cc(i) - x_centroid)/a)**2 + ((cart_y - y_centroid)/b)**2 + ((cart_z - z_centroid)/c)**2 <= 1._wp &
14392 & .and. patch_icpp(patch_id)%alter_patch(patch_id_fp(i, j, k))) .or. patch_id_fp(i, j, &
14393 & k) == smooth_patch_id) then
14394 call s_assign_patch_primitive_variables(patch_id, i, j, k, eta, q_prim_vf, patch_id_fp)
14395
14396
14397 if (patch_icpp(patch_id)%hcid /= dflt_int) then
14398 select case (patch_icpp(patch_id)%hcid)
14399# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14400 case (300) ! Rayleigh-Taylor instability
14401# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14402 rhoh = 3._wp
14403# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14404 rhol = 1._wp
14405# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14406 pref = 1.e5_wp
14407# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14408 pint = pref
14409# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14410 h = 0.7_wp
14411# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14412 lam = 0.2_wp
14413# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14414 wl = 2._wp*pi/lam
14415# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14416 amp = 0.025_wp/wl
14417# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14418
14419# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14420 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
14421# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14422
14423# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14424 alph = 5.e-1_wp*(1._wp + tanh((y_cc(j) - inth)/2.5e-3_wp))
14425# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14426
14427# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14428 if (alph < eps) alph = eps
14429# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14430 if (alph > 1._wp - eps) alph = 1._wp - eps
14431# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14432
14433# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14434 if (y_cc(j) > inth) then
14435# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14436 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
14437# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14438 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
14439# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14440 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = alph*rhoh
14441# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14442 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = (1._wp - alph)*rhol
14443# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14444 q_prim_vf(eqn_idx%E)%sf(i, j, k) = pref + rhoh*9.81_wp*(1.2_wp - y_cc(j))
14445# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14446 else
14447# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14448 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
14449# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14450 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
14451# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14452 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = alph*rhoh
14453# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14454 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = (1._wp - alph)*rhol
14455# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14456 pint = pref + rhoh*9.81_wp*(1.2_wp - inth)
14457# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14458 q_prim_vf(eqn_idx%E)%sf(i, j, k) = pint + rhol*9.81_wp*(inth - y_cc(j))
14459# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14460 end if
14461# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14462 case (301) ! (3D lung geometry in X direction, |sin(*)+sin(*)|)
14463# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14464 h = 0.0_wp
14465# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14466 lam = 1.0_wp
14467# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14468 amp = patch_icpp(patch_id)%a(2)
14469# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14470 inth = amp*abs((sin(2*pi*y_cc(j)/lam - pi/2) + sin(2*pi*z_cc(k)/lam - pi/2)) + h)
14471# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14472 if (x_cc(i) > inth) then
14473# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14474 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = patch_icpp(1)%alpha_rho(1)
14475# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14476 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = patch_icpp(1)%alpha_rho(2)
14477# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14478 q_prim_vf(eqn_idx%E)%sf(i, j, k) = patch_icpp(1)%pres
14479# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14480 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = patch_icpp(1)%alpha(1)
14481# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14482 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = patch_icpp(1)%alpha(2)
14483# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14484 end if
14485# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14486 case (302) ! 3D Jet with IGR
14487# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14488 ux_th = 10*sqrt(1.4*0.4)
14489# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14490 ux_am = 0.0*sqrt(1.4)
14491# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14492 p_th = 2.0_wp
14493# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14494 p_am = 1.0_wp
14495# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14496 rho_th = 1._wp
14497# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14498 rho_am = 1._wp
14499# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14500 y_th = 0.0_wp
14501# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14502 z_th = 0.0_wp
14503# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14504 r_th = 1._wp
14505# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14506 eps_smooth = 1._wp
14507# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14508 eps = 1e-6
14509# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14510
14511# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14512 r = sqrt((y_cc(j) - y_th)**2._wp + (z_cc(k) - z_th)**2._wp)
14513# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14514 rcut = f_cut_on(r - r_th, eps_smooth)
14515# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14516 xcut = f_cut_on(x_cc(i), eps_smooth)
14517# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14518
14519# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14520 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, k) = ux_th*rcut*xcut + ux_am
14521# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14522 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, k) = 0._wp
14523# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14524 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0._wp
14525# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14526
14527# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14528 if (num_fluids == 1) then
14529# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14530 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = (rho_th - rho_am)*rcut*xcut + rho_am
14531# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14532 else
14533# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14534 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = (1._wp - 2._wp*eps)*rcut*xcut + eps
14535# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14536 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = rho_th*q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)
14537# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14538 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))
14539# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14540 end if
14541# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14542
14543# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14544 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p_th*rcut*xcut + p_am
14545# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14546 case (303) ! 3D Multijet
14547# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14548 eps_smooth = 3.0_wp
14549# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14550 ux_th = 10*sqrt(1.4*0.4)
14551# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14552 ux_am = 2.5*sqrt(1.4*0.4)
14553# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14554 p_th = 0.8_wp
14555# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14556 p_am = 0.4_wp
14557# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14558 rho_th = 1._wp
14559# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14560 rho_am = 1._wp
14561# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14562 eps = 1e-6
14563# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14564
14565# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14566 rcut = rcut_arr(j, k)
14567# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14568 xcut = f_cut_on(x_cc(i), eps_smooth)
14569# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14570
14571# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14572 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, k) = ux_th*rcut*xcut + ux_am
14573# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14574 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, k) = 0._wp
14575# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14576 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0._wp
14577# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14578
14579# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14580 if (num_fluids == 1) then
14581# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14582 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = (rho_th - rho_am)*rcut*xcut + rho_am
14583# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14584 else
14585# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14586 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = (1._wp - 2._wp*eps)*rcut*xcut + eps
14587# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14588 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = rho_th*q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)
14589# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14590 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))
14591# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14592 end if
14593# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14594
14595# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14596 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p_th*rcut*xcut + p_am
14597# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14598 case (304) ! 3D Interface from file cartesian
14599# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14600 alph = 0.5_wp*(1 + (1._wp - 2._wp*eps)*tanh((ih(start_idx(2) + j, start_idx(3) + k) - x_cc(i))*(0.5_wp/dx)))
14601# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14602
14603# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14604 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
14605# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14606 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
14607# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14608
14609# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14610 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)*(950._wp/1000._wp)
14611# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14612 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = q_prim_vf(eqn_idx%adv%end)%sf(i, j, k)*(1._wp/1000._wp)
14613# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14614
14615# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14616 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p0_ic + (q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) + q_prim_vf(eqn_idx%cont%end)%sf(i, &
14617# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14618 & j, k))*g0_ic*(ih(start_idx(2) + j, start_idx(3) + k) - x_cc(i))
14619# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14620
14621# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14622 if (surface_tension) q_prim_vf(eqn_idx%c)%sf(i, j, k) = alph
14623# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14624 case (305) ! 3D Interface from file axisymmetric
14625# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14626 alph = 0.5_wp*(1 + (1._wp - 2._wp*eps)*tanh((ih(start_idx(2) + j, 0) - x_cc(i))*(0.01_wp/dx)))
14627# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14628
14629# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14630 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
14631# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14632 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
14633# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14634
14635# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14636 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)*1._wp
14637# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14638 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = q_prim_vf(eqn_idx%adv%end)%sf(i, j, k)*(1._wp/950._wp)
14639# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14640
14641# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14642 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p0_ic + (q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) + q_prim_vf(eqn_idx%cont%end)%sf(i, &
14643# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14644 & j, k))*g0_ic*(ih(start_idx(1) + i, start_idx(3) + k) - y_cc(j))
14645# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14646
14647# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14648 if (surface_tension) q_prim_vf(eqn_idx%c)%sf(i, j, k) = alph
14649# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14650 case (370) ! 3D extrusion of 2D profile from external data
14651# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14652 ! This hardcoded case extrudes a 2D profile to initialize a 3D simulation domain
14653# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14654 if (.not. files_loaded) then
14655# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14656 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
14657# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14658 do f = 1, max_files
14659# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14660 write (file_num_str, '(I0)') f
14661# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14662 filenames(f) = trim(files_dir) // "/" // "prim." // trim(file_num_str) // ".00." // trim(file_extension) // ".dat"
14663# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14664 end do
14665# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14666
14667# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14668 ! Common file reading setup
14669# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14670 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
14671# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14672 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
14673# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14674
14675# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14676 select case (num_dims)
14677# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14678 case (1, 2) ! 1D and 2D cases are similar
14679# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14680 ! Count lines
14681# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14682 line_count = 0
14683# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14684 do
14685# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14686 read (unit2, *, iostat=ios2) dummy_x, dummy_y
14687# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14688 if (ios2 /= 0) exit
14689# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14690 line_count = line_count + 1
14691# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14692 end do
14693# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14694 close (unit2)
14695# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14696
14697# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14698 xrows = line_count
14699# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14700 yrows = 1
14701# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14702 index_x = 0
14703# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14704 if (num_dims == 2) index_x = i
14705# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14706#ifdef MFC_DEBUG
14707# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14708 block
14709# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14710 use iso_fortran_env, only: output_unit
14711# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14712
14713# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14714 print *, 'm_icpp_patches.fpp:578: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
14715# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14716
14717# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14718 call flush (output_unit)
14719# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14720 end block
14721# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14722#endif
14723# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14724 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
14725# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14726
14727# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14728
14729# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14730
14731# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14732#if defined(MFC_OpenACC)
14733# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14734!$acc enter data create(x_coords, stored_values)
14735# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14736#elif defined(MFC_OpenMP)
14737# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14738!$omp target enter data map(always,alloc:x_coords, stored_values)
14739# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14740#endif
14741# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14742
14743# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14744 ! Read data from all files
14745# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14746 do f = 1, max_files
14747# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14748 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
14749# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14750 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
14751# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14752
14753# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14754 do iter = 1, xrows
14755# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14756 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
14757# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14758 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
14759# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14760 end do
14761# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14762 close (unit)
14763# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14764 end do
14765# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14766
14767# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14768 ! Calculate offsets
14769# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14770 domain_xstart = x_coords(1)
14771# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14772 x_step = x_cc(1) - x_cc(0)
14773# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14774 delta_x = merge(x_cc(0) - domain_xstart, x_cc(index_x) - domain_xstart, num_dims == 1)
14775# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14776 global_offset_x = nint(abs(delta_x)/x_step)
14777# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14778 case (3) ! 3D case - determine grid structure
14779# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14780 ! Find yRows by counting rows with same x
14781# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14782 read (unit2, *, iostat=ios2) x0, y0, dummy_z
14783# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14784 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
14785# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14786
14787# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14788 yrows = 1
14789# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14790 do
14791# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14792 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
14793# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14794 if (ios2 /= 0) exit
14795# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14796 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
14797# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14798 yrows = yrows + 1
14799# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14800 else
14801# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14802 exit
14803# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14804 end if
14805# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14806 end do
14807# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14808 close (unit2)
14809# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14810
14811# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14812 ! Count total rows
14813# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14814 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
14815# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14816 nrows = 0
14817# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14818 do
14819# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14820 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
14821# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14822 if (ios2 /= 0) exit
14823# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14824 nrows = nrows + 1
14825# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14826 end do
14827# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14828 close (unit2)
14829# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14830
14831# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14832 xrows = nrows/yrows
14833# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14834#ifdef MFC_DEBUG
14835# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14836 block
14837# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14838 use iso_fortran_env, only: output_unit
14839# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14840
14841# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14842 print *, 'm_icpp_patches.fpp:578: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
14843# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14844
14845# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14846 call flush (output_unit)
14847# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14848 end block
14849# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14850#endif
14851# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14852 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
14853# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14854
14855# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14856
14857# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14858
14859# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14860
14861# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14862#if defined(MFC_OpenACC)
14863# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14864!$acc enter data create(x_coords, y_coords, stored_values)
14865# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14866#elif defined(MFC_OpenMP)
14867# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14868!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
14869# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14870#endif
14871# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14872 index_x = i
14873# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14874 index_y = j
14875# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14876
14877# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14878 ! Read all files
14879# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14880 do f = 1, max_files
14881# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14882 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
14883# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14884 if (ios /= 0) then
14885# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14886 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
14887# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14888 cycle
14889# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14890 end if
14891# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14892
14893# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14894 iter = 0
14895# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14896 do iix = 1, xrows
14897# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14898 do iiy = 1, yrows
14899# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14900 iter = iter + 1
14901# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14902 if (f == 1) then
14903# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14904 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
14905# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14906 else
14907# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14908 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
14909# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14910 end if
14911# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14912 if (ios /= 0) call s_mpi_abort("Error reading data")
14913# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14914 end do
14915# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14916 end do
14917# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14918 close (unit)
14919# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14920 end do
14921# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14922
14923# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14924 ! Calculate offsets
14925# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14926 x_step = x_cc(1) - x_cc(0)
14927# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14928 y_step = y_cc(1) - y_cc(0)
14929# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14930 delta_x = x_cc(index_x) - x_coords(1)
14931# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14932 delta_y = y_cc(index_y) - y_coords(1)
14933# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14934 global_offset_x = nint(abs(delta_x)/x_step)
14935# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14936 global_offset_y = nint(abs(delta_y)/y_step)
14937# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14938 end select
14939# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14940
14941# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14942 files_loaded = .true.
14943# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14944 end if
14945# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14946
14947# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14948 ! Data assignment
14949# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14950 select case (num_dims)
14951# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14952 case (1)
14953# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14954 idx = i + 1 + global_offset_x
14955# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14956 ! idx must land inside the file's row range: this rank's subdomain offset
14957# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14958 ! (global_offset_x) was derived from this rank's own grid, so a miss means the
14959# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14960 ! IC file is misaligned/mis-sized for the run grid, not a normal boundary case.
14961# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14962 if (idx < 1 .or. idx > xrows) &
14963# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14964 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
14965# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14966 do f = 1, sys_size
14967# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14968 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
14969# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14970 end do
14971# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14972 case (2)
14973# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14974 idx = i + 1 + global_offset_x - index_x
14975# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14976 if (idx < 1 .or. idx > xrows) &
14977# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14978 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
14979# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14980 do f = 1, sys_size - 1
14981# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14982 jump = merge(1, 0, f >= eqn_idx%mom%end)
14983# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14984 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
14985# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14986 end do
14987# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14988 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
14989# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14990 case (3)
14991# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14992 idx = i + 1 + global_offset_x - index_x
14993# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14994 idy = j + 1 + global_offset_y - index_y
14995# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14996 if (idx < 1 .or. idx > xrows .or. idy < 1 .or. idy > yrows) &
14997# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
14998 & call s_mpi_abort("Hardcoded IC extrusion: row/column index out of range (IC file misaligned with the run grid)")
14999# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15000 do f = 1, sys_size - 1
15001# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15002 jump = merge(1, 0, f >= eqn_idx%mom%end)
15003# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15004 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
15005# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15006 end do
15007# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15008 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
15009# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15010 end select
15011# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15012 case (380) ! Taylor-Green vortex
15013# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15014 ! This is patch is hard-coded for test suite optimization used in the 3D_TaylorGreenVortex case: This analytic patch used
15015# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15016 ! geometry 9
15017# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15018 mach = 0.1
15019# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15020 if (patch_id == 1) then
15021# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15022 q_prim_vf(eqn_idx%E)%sf(i, j, &
15023# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15024 & 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)
15025# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15026 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)
15027# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15028 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)
15029# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15030 end if
15031# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15032 case default
15033# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15034 call s_int_to_str(patch_id, istr)
15035# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15036 call s_mpi_abort("Invalid hcid specified for patch " // trim(istr))
15037# 578 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15038 end select
15039 end if
15040
15041 ! Updating the patch identities bookkeeping variable
15042 if (1._wp - eta < sgm_eps) patch_id_fp(i, j, k) = patch_id
15043 end if
15044 end do
15045 end do
15046 end do
15047 if (allocated(stored_values)) then
15048# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15049#ifdef MFC_DEBUG
15050# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15051 block
15052# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15053 use iso_fortran_env, only: output_unit
15054# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15055
15056# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15057 print *, 'm_icpp_patches.fpp:587: ', '@:DEALLOCATE(stored_values)'
15058# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15059
15060# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15061 call flush (output_unit)
15062# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15063 end block
15064# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15065#endif
15066# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15067
15068# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15069#if defined(MFC_OpenACC)
15070# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15071!$acc exit data delete(stored_values)
15072# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15073#elif defined(MFC_OpenMP)
15074# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15075!$omp target exit data map(release:stored_values)
15076# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15077#endif
15078# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15079 deallocate (stored_values)
15080# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15081#ifdef MFC_DEBUG
15082# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15083 block
15084# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15085 use iso_fortran_env, only: output_unit
15086# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15087
15088# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15089 print *, 'm_icpp_patches.fpp:587: ', '@:DEALLOCATE(x_coords)'
15090# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15091
15092# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15093 call flush (output_unit)
15094# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15095 end block
15096# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15097#endif
15098# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15099
15100# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15101#if defined(MFC_OpenACC)
15102# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15103!$acc exit data delete(x_coords)
15104# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15105#elif defined(MFC_OpenMP)
15106# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15107!$omp target exit data map(release:x_coords)
15108# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15109#endif
15110# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15111 deallocate (x_coords)
15112# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15113 end if
15114# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15115
15116# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15117 if (allocated(y_coords)) then
15118# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15119#ifdef MFC_DEBUG
15120# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15121 block
15122# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15123 use iso_fortran_env, only: output_unit
15124# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15125
15126# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15127 print *, 'm_icpp_patches.fpp:587: ', '@:DEALLOCATE(y_coords)'
15128# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15129
15130# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15131 call flush (output_unit)
15132# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15133 end block
15134# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15135#endif
15136# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15137
15138# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15139#if defined(MFC_OpenACC)
15140# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15141!$acc exit data delete(y_coords)
15142# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15143#elif defined(MFC_OpenMP)
15144# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15145!$omp target exit data map(release:y_coords)
15146# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15147#endif
15148# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15149 deallocate (y_coords)
15150# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15151 end if
15152# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15153
15154# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15155 files_loaded = .false.
15156# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15157
15158# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15159 if (allocated(stored_values274)) then
15160# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15161#ifdef MFC_DEBUG
15162# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15163 block
15164# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15165 use iso_fortran_env, only: output_unit
15166# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15167
15168# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15169 print *, 'm_icpp_patches.fpp:587: ', '@:DEALLOCATE(stored_values274)'
15170# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15171
15172# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15173 call flush (output_unit)
15174# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15175 end block
15176# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15177#endif
15178# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15179
15180# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15181#if defined(MFC_OpenACC)
15182# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15183!$acc exit data delete(stored_values274)
15184# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15185#elif defined(MFC_OpenMP)
15186# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15187!$omp target exit data map(release:stored_values274)
15188# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15189#endif
15190# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15191 deallocate (stored_values274)
15192# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15193 end if
15194# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15195
15196# 587 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15197 files_loaded274 = .false.
15198
15199 end subroutine s_icpp_ellipsoid
15200
15201 !> The rectangular patch is a 2D geometry that may be used, for example, in creating a solid boundary, or pre-/post- shock
15202 !! region, in alignment with the axes of the Cartesian coordinate system. The geometry of such a patch is well- defined when its
15203 !! centroid and lengths in the x- and y- coordinate directions are provided. Please note that the rectangular patch DOES NOT
15204 !! allow for the smoothing of its boundaries.
15205 subroutine s_icpp_rectangle(patch_id, patch_id_fp, q_prim_vf)
15206
15207 integer, intent(in) :: patch_id
15208
15209#ifdef MFC_MIXED_PRECISION
15210 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
15211#else
15212 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
15213#endif
15214 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
15215 integer :: i, j, k !< generic loop iterators
15216 real(wp) :: pi_inf, gamma, lit_gamma !< Equation of state parameters
15217
15218 integer :: xRows, yRows, nRows, iix, iiy, max_files
15219# 608 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15220 integer :: f, iter, unit, unit2, idx, idy, index_x, index_y, jump, line_count
15221# 608 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15222 real(wp) :: x_step, y_step
15223# 608 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15224 real(wp) :: dummy_x, dummy_y, dummy_z, x0, y0
15225# 608 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15226 integer :: global_offset_x, global_offset_y !< MPI subdomain offset
15227# 608 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15228 real(wp) :: delta_x, delta_y
15229# 608 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15230 character(len=300), dimension(sys_size) :: fileNames !< Arrays to store all data from files
15231# 608 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15232 real(wp), allocatable :: stored_values(:,:,:)
15233# 608 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15234 real(wp), allocatable :: x_coords(:), y_coords(:)
15235# 608 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15236 logical :: files_loaded = .false.
15237# 608 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15238 real(wp) :: domain_xstart
15239# 608 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15240 character(len=20) :: file_num_str !< For storing the file number as a string
15241# 608 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15242 integer :: ios
15243# 608 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15244 integer :: ios2
15245# 608 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15246
15247# 608 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15248 ! hcid=274 (2dHardcodedIC.fpp): full 2D field from external data, no extrusion.
15249# 608 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15250 ! Declared here (not in Hardcoded2DVariables()) so it's visible wherever
15251# 608 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15252 ! HardcodedDeallocation() is called, matching the pattern of stored_values/x_coords/
15253# 608 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15254 ! y_coords/files_loaded above.
15255# 608 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15256 real(wp), allocatable, dimension(:,:,:) :: stored_values274
15257# 608 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15258 logical :: files_loaded274 = .false.
15259# 608 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15260 integer :: f274, ix274, iy274, unit274, ios274
15261# 608 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15262 integer :: local_ix_beg274, local_iy_beg274
15263# 608 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15264 character(len=300) :: fname274
15265# 608 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15266 character(len=20) :: file_num_str274
15267# 608 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15268 real(wp) :: dummy_x274, dummy_y274, dummy_val274, x0_274, y0_274, x_step274, y_step274
15269# 608 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15270 real(wp) :: file_dx274, file_dy274, r_align274
15271 ! Place any declaration of intermediate variables here
15272# 609 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15273 real(wp) :: eps, eps_mhd, C_mhd
15274# 609 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15275 real(wp) :: r, rmax, gam, umax, p0
15276# 609 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15277 real(wp) :: rhoH, rhoL, pRef, pInt, h, lam, wl, amp, intH, intL, alph
15278# 609 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15279 real(wp) :: factor, x1c, y1c, x2c, y2c, r1c, r2c, cvortex, u1c, u2c, v1c, v2c, rvortex
15280# 609 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15281 real(wp) :: r0, alpha, r2
15282# 609 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15283 real(wp) :: sinA, cosA
15284# 609 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15285 real(wp) :: r_sq
15286# 609 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15287
15288# 609 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15289 ! # 283 - Gauss-averaged isentropic vortex (conserved-variable cell averages)
15290# 609 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15291 real(wp) :: gauss_xi(3), gauss_w(3), xq, yq, r2q, T_facq, wq
15292# 609 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15293 real(wp) :: rho_avg, rhou_avg, rhov_avg, E_avg
15294# 609 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15295 real(wp) :: rhoq, pq, uq, vq, Eq, vortex_eps
15296# 609 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15297 integer :: igq, jgq
15298# 609 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15299
15300# 609 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15301 ! # 291 - Shear/Thermal Layer Case
15302# 609 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15303 real(wp) :: delta_shear, u_max, u_mean
15304# 609 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15305 real(wp) :: T_wall, T_inf, P_atm, T_loc
15306# 609 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15307 real(wp) :: delta_th, R_mix
15308# 609 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15309 real(wp) :: Y_N2, Y_O2, MW_N2, MW_O2
15310# 609 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15311 real(wp) :: bottom_blend_u, bottom_blend_T
15312# 609 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15313
15314# 609 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15315 ! # 207
15316# 609 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15317 real(wp) :: sigma, gauss1, gauss2
15318# 609 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15319
15320# 609 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15321 ! # 208
15322# 609 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15323 real(wp) :: ei, d, fsm, alpha_air, alpha_sf6
15324# 609 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15325 real(wp) :: y_center, y_dist, wave_phase, front_shift, x_mapped, interp_wt
15326# 609 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15327 integer :: v, idx_lo, idx_hi, idx_mid
15328# 609 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15329 real(wp), parameter :: Ly_param = 0.00775735_wp
15330# 609 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15331 real(wp), parameter :: A_param = 0.1_wp*96.9880867_wp*10.0_wp**(-6.0_wp)
15332# 609 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15333 integer, parameter :: Nwaves = 6
15334# 609 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15335 real(wp), parameter :: y0_ref = 0.0_wp
15336# 609 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15337
15338# 609 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15339 eps = 1.e-9_wp
15340
15341 pi_inf = pi_infs(1)
15342 gamma = gammas(1)
15343 lit_gamma = gs_min(1)
15344
15345 ! Transferring the rectangle's centroid and length information
15346 x_centroid = patch_icpp(patch_id)%x_centroid
15347 y_centroid = patch_icpp(patch_id)%y_centroid
15348 length_x = patch_icpp(patch_id)%length_x
15349 length_y = patch_icpp(patch_id)%length_y
15350
15351 ! Computing the beginning and the end x- and y-coordinates of the rectangle based on its centroid and lengths
15352 x_boundary%beg = x_centroid - 0.5_wp*length_x
15353 x_boundary%end = x_centroid + 0.5_wp*length_x
15354 y_boundary%beg = y_centroid - 0.5_wp*length_y
15355 y_boundary%end = y_centroid + 0.5_wp*length_y
15356
15357 ! Set eta=1 (no smoothing for this patch type)
15358 eta = 1._wp
15359
15360 ! Assign patch vars if cell is covered and patch has write permission
15361 do j = 0, n
15362 do i = 0, m
15363 if (f_is_inside_cuboid(x_cc(i) - x_centroid, y_cc(j) - y_centroid, 0._wp, [length_x, length_y, 0._wp])) then
15364 if (patch_icpp(patch_id)%alter_patch(patch_id_fp(i, j, 0))) then
15365 call s_assign_patch_primitive_variables(patch_id, i, j, 0, eta, q_prim_vf, patch_id_fp)
15366
15367
15368
15369 if (patch_icpp(patch_id)%hcid /= dflt_int) then
15370 select case (patch_icpp(patch_id)%hcid) ! 2D_hardcoded_ic example case
15371# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15372 case (200) ! Two-fluid cubic interface
15373# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15374 if (y_cc(j) <= (-x_cc(i)**3 + 1)**(1._wp/3._wp)) then
15375# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15376 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = eps
15377# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15378 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = 1._wp - eps
15379# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15380 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = eps*1000._wp
15381# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15382 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = (1._wp - eps)*1._wp
15383# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15384 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1000._wp
15385# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15386 end if
15387# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15388 case (202) ! Gresho vortex (Gouasmi et al 2022 JCP)
15389# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15390 r = ((x_cc(i) - 0.5_wp)**2 + (y_cc(j) - 0.5_wp)**2)**0.5_wp
15391# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15392 rmax = 0.2_wp
15393# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15394
15395# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15396 gam = 1._wp + 1._wp/fluid_pp(1)%gamma
15397# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15398 umax = 2*pi*rmax*patch_icpp(patch_id)%vel(2)
15399# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15400 p0 = umax**2*(1._wp/(gam*patch_icpp(patch_id)%vel(2)**2) - 0.5_wp)
15401# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15402
15403# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15404 if (r < rmax) then
15405# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15406 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -(y_cc(j) - 0.5_wp)*umax/rmax
15407# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15408 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = (x_cc(i) - 0.5_wp)*umax/rmax
15409# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15410 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*((r/rmax)**2._wp/2._wp)
15411# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15412 else if (r < 2*rmax) then
15413# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15414 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -((y_cc(j) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
15415# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15416 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = ((x_cc(i) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
15417# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15418 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)))
15419# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15420 else
15421# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15422 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 0._wp
15423# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15424 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0._wp
15425# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15426 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*(-2 + 4*log(2._wp))
15427# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15428 end if
15429# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15430 case (203) ! Gresho vortex (Gouasmi et al 2022 JCP) with density correction
15431# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15432 r = ((x_cc(i) - 0.5_wp)**2._wp + (y_cc(j) - 0.5_wp)**2)**0.5_wp
15433# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15434 rmax = 0.2_wp
15435# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15436
15437# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15438 gam = 1._wp + 1._wp/fluid_pp(1)%gamma
15439# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15440 umax = 2*pi*rmax*patch_icpp(patch_id)%vel(2)
15441# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15442 p0 = umax**2*(1._wp/(gam*patch_icpp(patch_id)%vel(2)**2) - 0.5_wp)
15443# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15444
15445# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15446 if (r < rmax) then
15447# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15448 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -(y_cc(j) - 0.5_wp)*umax/rmax
15449# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15450 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = (x_cc(i) - 0.5_wp)*umax/rmax
15451# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15452 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*((r/rmax)**2._wp/2._wp)
15453# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15454 else if (r < 2*rmax) then
15455# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15456 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -((y_cc(j) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
15457# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15458 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = ((x_cc(i) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
15459# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15460 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)))
15461# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15462 else
15463# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15464 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 0._wp
15465# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15466 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0._wp
15467# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15468 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2._wp*(-2._wp + 4*log(2._wp))
15469# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15470 end if
15471# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15472
15473# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15474 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = q_prim_vf(eqn_idx%E)%sf(i, j, 0)**(1._wp/gam)
15475# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15476 case (204) ! Rayleigh-Taylor instability
15477# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15478 rhoh = 3._wp
15479# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15480 rhol = 1._wp
15481# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15482 pref = 1.e5_wp
15483# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15484 pint = pref
15485# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15486 h = 0.7_wp
15487# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15488 lam = 0.2_wp
15489# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15490 wl = 2._wp*pi/lam
15491# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15492 amp = 0.05_wp/wl
15493# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15494
15495# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15496 inth = amp*sin(2._wp*pi*x_cc(i)/lam - pi/2._wp) + h
15497# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15498
15499# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15500 alph = 0.5_wp*(1._wp + tanh((y_cc(j) - inth)/2.5e-3_wp))
15501# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15502
15503# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15504 if (alph < eps) alph = eps
15505# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15506 if (alph > 1._wp - eps) alph = 1._wp - eps
15507# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15508
15509# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15510 if (y_cc(j) > inth) then
15511# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15512 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = alph
15513# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15514 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = 1._wp - alph
15515# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15516 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = alph*rhoh
15517# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15518 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = (1._wp - alph)*rhol
15519# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15520 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = pref + rhoh*9.81_wp*(1.2_wp - y_cc(j))
15521# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15522 else
15523# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15524 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = alph
15525# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15526 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = 1._wp - alph
15527# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15528 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = alph*rhoh
15529# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15530 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = (1._wp - alph)*rhol
15531# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15532 pint = pref + rhoh*9.81_wp*(1.2_wp - inth)
15533# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15534 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = pint + rhol*9.81_wp*(inth - y_cc(j))
15535# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15536 end if
15537# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15538 case (205) ! 2D lung wave interaction problem
15539# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15540 h = 0.0_wp ! non dim origin y
15541# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15542 lam = 1.0_wp ! non dim lambda
15543# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15544 amp = patch_icpp(patch_id)%a(2) ! to be changed later! !non dim amplitude
15545# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15546
15547# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15548 inth = amp*sin(2*pi*x_cc(i)/lam - pi/2) + h
15549# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15550
15551# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15552 if (y_cc(j) > inth) then
15553# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15554 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(1)
15555# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15556 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(2)
15557# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15558 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = patch_icpp(1)%pres
15559# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15560 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = patch_icpp(1)%alpha(1)
15561# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15562 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = patch_icpp(1)%alpha(2)
15563# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15564 end if
15565# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15566 case (206) ! 2D lung wave interaction problem - horizontal domain
15567# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15568 h = 0.0_wp ! non dim origin y
15569# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15570 lam = 1.0_wp ! non dim lambda
15571# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15572 amp = patch_icpp(patch_id)%a(2)
15573# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15574
15575# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15576 intl = amp*sin(2*pi*y_cc(j)/lam - pi/2) + h
15577# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15578
15579# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15580 if (x_cc(i) > intl) then ! this is the liquid
15581# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15582 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(1)
15583# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15584 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(2)
15585# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15586 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = patch_icpp(1)%pres
15587# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15588 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = patch_icpp(1)%alpha(1)
15589# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15590 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = patch_icpp(1)%alpha(2)
15591# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15592 end if
15593# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15594 case (207) ! Kelvin Helmholtz Instability
15595# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15596 sigma = 0.05_wp/sqrt(2.0_wp)
15597# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15598 gauss1 = exp(-(y_cc(j) - 0.75_wp)**2/(2.0_wp*sigma**2))
15599# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15600 gauss2 = exp(-(y_cc(j) - 0.25_wp)**2/(2.0_wp*sigma**2))
15601# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15602 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)
15603# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15604 case (208) ! Richtmeyer Meshkov Instability
15605# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15606 lam = 1.0_wp
15607# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15608 eps = 1.0e-6_wp
15609# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15610 ei = 5.0_wp
15611# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15612 ! Smoothening function to smooth out sharp discontinuity in the interface
15613# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15614 if (x_cc(i) <= 0.7_wp*lam) then
15615# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15616 d = x_cc(i) - lam*(0.4_wp - 0.1_wp*sin(2.0_wp*pi*(y_cc(j)/lam + 0.25_wp)))
15617# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15618 fsm = 0.5_wp*(1.0_wp + erf(d/(ei*sqrt(dx*dy))))
15619# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15620 alpha_air = eps + (1.0_wp - 2.0_wp*eps)*fsm
15621# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15622 alpha_sf6 = 1.0_wp - alpha_air
15623# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15624 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = alpha_sf6*5.04_wp
15625# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15626 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = alpha_air*1.0_wp
15627# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15628 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = alpha_sf6
15629# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15630 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = alpha_air
15631# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15632 end if
15633# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15634 case (250) ! MHD Orszag-Tang vortex
15635# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15636 ! 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),
15637# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15638 ! sin(4*pi*x)/sqrt(4*pi), 0)
15639# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15640
15641# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15642 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -sin(2._wp*pi*y_cc(j))
15643# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15644 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = sin(2._wp*pi*x_cc(i))
15645# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15646
15647# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15648 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = -sin(2._wp*pi*y_cc(j))/sqrt(4._wp*pi)
15649# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15650 q_prim_vf(eqn_idx%B%beg + 1)%sf(i, j, 0) = sin(4._wp*pi*x_cc(i))/sqrt(4._wp*pi)
15651# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15652 case (251) ! RMHD Cylindrical Blast Wave [Mignone, 2006: Section 4.3.1]
15653# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15654 if (x_cc(i)**2 + y_cc(j)**2 < 0.08_wp**2) then
15655# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15656 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 0.01
15657# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15658 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1.0
15659# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15660 else if (x_cc(i)**2 + y_cc(j)**2 <= 1._wp**2) then
15661# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15662 ! Linear interpolation between r=0.08 and r=1.0
15663# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15664 factor = (1.0_wp - sqrt(x_cc(i)**2 + y_cc(j)**2))/(1.0_wp - 0.08_wp)
15665# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15666 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 0.01_wp*factor + 1.e-4_wp*(1.0_wp - factor)
15667# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15668 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1.0_wp*factor + 3.e-5_wp*(1.0_wp - factor)
15669# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15670 else
15671# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15672 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1.e-4_wp
15673# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15674 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 3.e-5_wp
15675# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15676 end if
15677# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15678
15679# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15680 ! case 252 is for the 2D MHD Rotor problem
15681# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15682 case (252) ! 2D MHD Rotor Problem
15683# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15684 ! Ambient conditions are set in the JSON file. This case imposes the dense, rotating cylinder.
15685# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15686 !
15687# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15688 ! 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
15689# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15690 ! velocity w=20, giving v_tan=2 at r=0.1
15691# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15692
15693# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15694 ! Calculate distance squared from the center
15695# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15696 r_sq = (x_cc(i) - 0.5_wp)**2 + (y_cc(j) - 0.5_wp)**2
15697# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15698
15699# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15700 ! inner radius of 0.1
15701# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15702 if (r_sq <= 0.1**2) then
15703# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15704 ! -- Inside the rotor -- Set density uniformly to 10
15705# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15706 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 10._wp
15707# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15708
15709# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15710 ! Set vup constant rotation of rate v=2 v_x = -omega * (y - y_c) v_y = omega * (x - x_c)
15711# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15712 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -20._wp*(y_cc(j) - 0.5_wp)
15713# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15714 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = 20._wp*(x_cc(i) - 0.5_wp)
15715# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15716
15717# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15718 ! taper width of 0.015
15719# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15720 else if (r_sq <= 0.115**2) then
15721# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15722 ! linearly smooth the function between r = 0.1 and 0.115
15723# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15724 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1._wp + 9._wp*(0.115_wp - sqrt(r_sq))/(0.015_wp)
15725# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15726
15727# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15728 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)
15729# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15730 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)
15731# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15732 end if
15733# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15734 case (253) ! MHD Smooth Magnetic Vortex
15735# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15736 ! Section 5.2 of Implicit hybridized discontinuous Galerkin methods for compressible magnetohydrodynamics C. Ciuca, P.
15737# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15738 ! Fernandez, A. Christophe, N.C. Nguyen, J. Peraire
15739# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15740
15741# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15742 ! velocity
15743# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15744 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))
15745# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15746 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))
15747# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15748
15749# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15750 ! magnetic field
15751# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15752 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)
15753# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15754 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)
15755# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15756
15757# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15758 ! pressure
15759# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15760 q_prim_vf(eqn_idx%E)%sf(i, j, &
15761# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15762 & 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)
15763# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15764 case (260) ! Gaussian Divergence Pulse
15765# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15766 ! Bx(x) = 1 + C * erf((x-0.5)/\sigma) => \partialBx/\partialx = C * (2/\sqrt\pi) * exp[-((x-0.5)/\sigma)**2] * (1/\sigma)
15767# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15768 ! Choose C = \epsilon * \sigma * \sqrt\pi / 2 => \partialBx/\partialx = \epsilon * exp[-((x-0.5)/\sigma)**2] \psi is
15769# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15770 ! initialized to zero everywhere.
15771# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15772
15773# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15774 eps_mhd = patch_icpp(patch_id)%a(2)
15775# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15776 sigma = patch_icpp(patch_id)%a(3)
15777# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15778 c_mhd = eps_mhd*sigma*sqrt(pi)*0.5_wp
15779# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15780
15781# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15782 ! B-field
15783# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15784 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = 1._wp + c_mhd*erf((x_cc(i) - 0.5_wp)/sigma)
15785# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15786 case (261) ! Blob
15787# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15788 r0 = 1._wp/sqrt(8._wp)
15789# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15790 r2 = x_cc(i)**2 + y_cc(j)**2
15791# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15792 r = sqrt(r2)
15793# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15794 alpha = r/r0
15795# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15796 if (alpha < 1) then
15797# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15798 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)
15799# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15800 ! 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)
15801# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15802 ! q_prim_vf(eqn_idx%B%beg)%sf(i,j,0) = 1._wp/(4._wp*pi) * (alpha**8 - 2._wp*alpha**4 + 1._wp)
15803# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15804 ! 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
15805# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15806 end if
15807# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15808 case (262) ! Tilted 2D MHD shock-tube at \alpha = arctan2 (\approx63.4 deg)
15809# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15810 ! rotate by \alpha = atan(2)
15811# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15812 alpha = atan(2._wp)
15813# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15814 cosa = cos(alpha)
15815# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15816 sina = sin(alpha)
15817# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15818 ! projection along shock normal
15819# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15820 r = x_cc(i)*cosa + y_cc(j)*sina
15821# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15822
15823# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15824 if (r <= 0.5_wp) then
15825# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15826 ! LEFT state: \rho=1, v\parallel=+10, v\perp=0, p=20, B\parallel=B\perp=5/\sqrt(4\pi)
15827# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15828 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1._wp
15829# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15830 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 10._wp*cosa
15831# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15832 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = 10._wp*sina
15833# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15834 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 20._wp
15835# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15836 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
15837# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15838 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
15839# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15840 else
15841# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15842 ! RIGHT state: \rho=1, v\parallel=-10, v\perp=0, p=1, B\parallel=B\perp=5/\sqrt(4\pi)
15843# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15844 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1._wp
15845# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15846 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -10._wp*cosa
15847# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15848 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = -10._wp*sina
15849# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15850 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1._wp
15851# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15852 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
15853# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15854 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
15855# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15856 end if
15857# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15858 ! v^z and B^z remain zero by default
15859# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15860 case (270) ! 2D extrusion of 1D profile from external data
15861# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15862 ! This hardcoded case extrudes a 1D profile to initialize a 2D simulation domain
15863# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15864 if (.not. files_loaded) then
15865# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15866 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
15867# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15868 do f = 1, max_files
15869# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15870 write (file_num_str, '(I0)') f
15871# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15872 filenames(f) = trim(files_dir) // "/" // "prim." // trim(file_num_str) // ".00." // trim(file_extension) // ".dat"
15873# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15874 end do
15875# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15876
15877# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15878 ! Common file reading setup
15879# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15880 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
15881# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15882 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
15883# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15884
15885# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15886 select case (num_dims)
15887# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15888 case (1, 2) ! 1D and 2D cases are similar
15889# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15890 ! Count lines
15891# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15892 line_count = 0
15893# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15894 do
15895# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15896 read (unit2, *, iostat=ios2) dummy_x, dummy_y
15897# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15898 if (ios2 /= 0) exit
15899# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15900 line_count = line_count + 1
15901# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15902 end do
15903# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15904 close (unit2)
15905# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15906
15907# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15908 xrows = line_count
15909# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15910 yrows = 1
15911# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15912 index_x = 0
15913# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15914 if (num_dims == 2) index_x = i
15915# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15916#ifdef MFC_DEBUG
15917# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15918 block
15919# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15920 use iso_fortran_env, only: output_unit
15921# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15922
15923# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15924 print *, 'm_icpp_patches.fpp:640: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
15925# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15926
15927# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15928 call flush (output_unit)
15929# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15930 end block
15931# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15932#endif
15933# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15934 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
15935# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15936
15937# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15938
15939# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15940
15941# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15942#if defined(MFC_OpenACC)
15943# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15944!$acc enter data create(x_coords, stored_values)
15945# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15946#elif defined(MFC_OpenMP)
15947# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15948!$omp target enter data map(always,alloc:x_coords, stored_values)
15949# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15950#endif
15951# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15952
15953# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15954 ! Read data from all files
15955# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15956 do f = 1, max_files
15957# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15958 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
15959# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15960 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
15961# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15962
15963# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15964 do iter = 1, xrows
15965# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15966 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
15967# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15968 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
15969# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15970 end do
15971# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15972 close (unit)
15973# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15974 end do
15975# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15976
15977# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15978 ! Calculate offsets
15979# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15980 domain_xstart = x_coords(1)
15981# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15982 x_step = x_cc(1) - x_cc(0)
15983# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15984 delta_x = merge(x_cc(0) - domain_xstart, x_cc(index_x) - domain_xstart, num_dims == 1)
15985# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15986 global_offset_x = nint(abs(delta_x)/x_step)
15987# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15988 case (3) ! 3D case - determine grid structure
15989# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15990 ! Find yRows by counting rows with same x
15991# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15992 read (unit2, *, iostat=ios2) x0, y0, dummy_z
15993# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15994 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
15995# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15996
15997# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
15998 yrows = 1
15999# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16000 do
16001# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16002 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
16003# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16004 if (ios2 /= 0) exit
16005# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16006 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
16007# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16008 yrows = yrows + 1
16009# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16010 else
16011# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16012 exit
16013# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16014 end if
16015# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16016 end do
16017# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16018 close (unit2)
16019# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16020
16021# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16022 ! Count total rows
16023# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16024 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
16025# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16026 nrows = 0
16027# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16028 do
16029# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16030 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
16031# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16032 if (ios2 /= 0) exit
16033# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16034 nrows = nrows + 1
16035# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16036 end do
16037# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16038 close (unit2)
16039# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16040
16041# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16042 xrows = nrows/yrows
16043# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16044#ifdef MFC_DEBUG
16045# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16046 block
16047# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16048 use iso_fortran_env, only: output_unit
16049# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16050
16051# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16052 print *, 'm_icpp_patches.fpp:640: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
16053# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16054
16055# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16056 call flush (output_unit)
16057# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16058 end block
16059# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16060#endif
16061# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16062 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
16063# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16064
16065# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16066
16067# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16068
16069# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16070
16071# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16072#if defined(MFC_OpenACC)
16073# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16074!$acc enter data create(x_coords, y_coords, stored_values)
16075# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16076#elif defined(MFC_OpenMP)
16077# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16078!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
16079# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16080#endif
16081# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16082 index_x = i
16083# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16084 index_y = j
16085# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16086
16087# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16088 ! Read all files
16089# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16090 do f = 1, max_files
16091# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16092 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
16093# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16094 if (ios /= 0) then
16095# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16096 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
16097# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16098 cycle
16099# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16100 end if
16101# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16102
16103# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16104 iter = 0
16105# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16106 do iix = 1, xrows
16107# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16108 do iiy = 1, yrows
16109# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16110 iter = iter + 1
16111# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16112 if (f == 1) then
16113# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16114 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
16115# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16116 else
16117# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16118 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
16119# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16120 end if
16121# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16122 if (ios /= 0) call s_mpi_abort("Error reading data")
16123# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16124 end do
16125# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16126 end do
16127# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16128 close (unit)
16129# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16130 end do
16131# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16132
16133# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16134 ! Calculate offsets
16135# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16136 x_step = x_cc(1) - x_cc(0)
16137# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16138 y_step = y_cc(1) - y_cc(0)
16139# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16140 delta_x = x_cc(index_x) - x_coords(1)
16141# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16142 delta_y = y_cc(index_y) - y_coords(1)
16143# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16144 global_offset_x = nint(abs(delta_x)/x_step)
16145# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16146 global_offset_y = nint(abs(delta_y)/y_step)
16147# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16148 end select
16149# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16150
16151# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16152 files_loaded = .true.
16153# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16154 end if
16155# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16156
16157# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16158 ! Data assignment
16159# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16160 select case (num_dims)
16161# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16162 case (1)
16163# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16164 idx = i + 1 + global_offset_x
16165# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16166 ! idx must land inside the file's row range: this rank's subdomain offset
16167# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16168 ! (global_offset_x) was derived from this rank's own grid, so a miss means the
16169# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16170 ! IC file is misaligned/mis-sized for the run grid, not a normal boundary case.
16171# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16172 if (idx < 1 .or. idx > xrows) &
16173# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16174 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
16175# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16176 do f = 1, sys_size
16177# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16178 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
16179# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16180 end do
16181# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16182 case (2)
16183# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16184 idx = i + 1 + global_offset_x - index_x
16185# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16186 if (idx < 1 .or. idx > xrows) &
16187# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16188 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
16189# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16190 do f = 1, sys_size - 1
16191# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16192 jump = merge(1, 0, f >= eqn_idx%mom%end)
16193# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16194 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
16195# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16196 end do
16197# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16198 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
16199# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16200 case (3)
16201# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16202 idx = i + 1 + global_offset_x - index_x
16203# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16204 idy = j + 1 + global_offset_y - index_y
16205# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16206 if (idx < 1 .or. idx > xrows .or. idy < 1 .or. idy > yrows) &
16207# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16208 & call s_mpi_abort("Hardcoded IC extrusion: row/column index out of range (IC file misaligned with the run grid)")
16209# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16210 do f = 1, sys_size - 1
16211# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16212 jump = merge(1, 0, f >= eqn_idx%mom%end)
16213# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16214 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
16215# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16216 end do
16217# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16218 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
16219# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16220 end select
16221# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16222 case (273) ! Temporal reacting mixing layer: 2D extrusion + streamwise velocity
16223# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16224 ! @:HardcodedReadValues() always zeros mom%end (the extruded-axis velocity).
16225# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16226 ! The mom%beg file slot is repurposed to carry the streamwise-velocity-vs-
16227# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16228 ! cross-stream-position profile (real cross-stream velocity is legitimately
16229# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16230 ! zero everywhere in the unperturbed base state), so swap it into mom%end and
16231# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16232 ! zero out mom%beg's true physical value.
16233# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16234 if (.not. files_loaded) then
16235# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16236 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
16237# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16238 do f = 1, max_files
16239# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16240 write (file_num_str, '(I0)') f
16241# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16242 filenames(f) = trim(files_dir) // "/" // "prim." // trim(file_num_str) // ".00." // trim(file_extension) // ".dat"
16243# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16244 end do
16245# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16246
16247# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16248 ! Common file reading setup
16249# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16250 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
16251# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16252 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
16253# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16254
16255# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16256 select case (num_dims)
16257# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16258 case (1, 2) ! 1D and 2D cases are similar
16259# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16260 ! Count lines
16261# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16262 line_count = 0
16263# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16264 do
16265# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16266 read (unit2, *, iostat=ios2) dummy_x, dummy_y
16267# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16268 if (ios2 /= 0) exit
16269# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16270 line_count = line_count + 1
16271# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16272 end do
16273# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16274 close (unit2)
16275# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16276
16277# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16278 xrows = line_count
16279# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16280 yrows = 1
16281# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16282 index_x = 0
16283# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16284 if (num_dims == 2) index_x = i
16285# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16286#ifdef MFC_DEBUG
16287# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16288 block
16289# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16290 use iso_fortran_env, only: output_unit
16291# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16292
16293# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16294 print *, 'm_icpp_patches.fpp:640: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
16295# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16296
16297# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16298 call flush (output_unit)
16299# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16300 end block
16301# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16302#endif
16303# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16304 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
16305# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16306
16307# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16308
16309# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16310
16311# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16312#if defined(MFC_OpenACC)
16313# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16314!$acc enter data create(x_coords, stored_values)
16315# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16316#elif defined(MFC_OpenMP)
16317# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16318!$omp target enter data map(always,alloc:x_coords, stored_values)
16319# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16320#endif
16321# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16322
16323# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16324 ! Read data from all files
16325# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16326 do f = 1, max_files
16327# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16328 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
16329# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16330 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
16331# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16332
16333# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16334 do iter = 1, xrows
16335# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16336 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
16337# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16338 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
16339# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16340 end do
16341# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16342 close (unit)
16343# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16344 end do
16345# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16346
16347# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16348 ! Calculate offsets
16349# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16350 domain_xstart = x_coords(1)
16351# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16352 x_step = x_cc(1) - x_cc(0)
16353# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16354 delta_x = merge(x_cc(0) - domain_xstart, x_cc(index_x) - domain_xstart, num_dims == 1)
16355# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16356 global_offset_x = nint(abs(delta_x)/x_step)
16357# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16358 case (3) ! 3D case - determine grid structure
16359# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16360 ! Find yRows by counting rows with same x
16361# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16362 read (unit2, *, iostat=ios2) x0, y0, dummy_z
16363# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16364 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
16365# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16366
16367# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16368 yrows = 1
16369# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16370 do
16371# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16372 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
16373# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16374 if (ios2 /= 0) exit
16375# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16376 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
16377# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16378 yrows = yrows + 1
16379# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16380 else
16381# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16382 exit
16383# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16384 end if
16385# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16386 end do
16387# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16388 close (unit2)
16389# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16390
16391# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16392 ! Count total rows
16393# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16394 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
16395# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16396 nrows = 0
16397# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16398 do
16399# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16400 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
16401# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16402 if (ios2 /= 0) exit
16403# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16404 nrows = nrows + 1
16405# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16406 end do
16407# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16408 close (unit2)
16409# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16410
16411# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16412 xrows = nrows/yrows
16413# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16414#ifdef MFC_DEBUG
16415# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16416 block
16417# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16418 use iso_fortran_env, only: output_unit
16419# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16420
16421# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16422 print *, 'm_icpp_patches.fpp:640: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
16423# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16424
16425# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16426 call flush (output_unit)
16427# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16428 end block
16429# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16430#endif
16431# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16432 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
16433# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16434
16435# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16436
16437# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16438
16439# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16440
16441# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16442#if defined(MFC_OpenACC)
16443# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16444!$acc enter data create(x_coords, y_coords, stored_values)
16445# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16446#elif defined(MFC_OpenMP)
16447# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16448!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
16449# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16450#endif
16451# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16452 index_x = i
16453# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16454 index_y = j
16455# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16456
16457# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16458 ! Read all files
16459# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16460 do f = 1, max_files
16461# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16462 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
16463# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16464 if (ios /= 0) then
16465# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16466 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
16467# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16468 cycle
16469# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16470 end if
16471# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16472
16473# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16474 iter = 0
16475# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16476 do iix = 1, xrows
16477# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16478 do iiy = 1, yrows
16479# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16480 iter = iter + 1
16481# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16482 if (f == 1) then
16483# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16484 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
16485# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16486 else
16487# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16488 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
16489# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16490 end if
16491# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16492 if (ios /= 0) call s_mpi_abort("Error reading data")
16493# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16494 end do
16495# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16496 end do
16497# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16498 close (unit)
16499# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16500 end do
16501# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16502
16503# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16504 ! Calculate offsets
16505# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16506 x_step = x_cc(1) - x_cc(0)
16507# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16508 y_step = y_cc(1) - y_cc(0)
16509# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16510 delta_x = x_cc(index_x) - x_coords(1)
16511# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16512 delta_y = y_cc(index_y) - y_coords(1)
16513# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16514 global_offset_x = nint(abs(delta_x)/x_step)
16515# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16516 global_offset_y = nint(abs(delta_y)/y_step)
16517# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16518 end select
16519# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16520
16521# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16522 files_loaded = .true.
16523# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16524 end if
16525# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16526
16527# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16528 ! Data assignment
16529# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16530 select case (num_dims)
16531# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16532 case (1)
16533# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16534 idx = i + 1 + global_offset_x
16535# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16536 ! idx must land inside the file's row range: this rank's subdomain offset
16537# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16538 ! (global_offset_x) was derived from this rank's own grid, so a miss means the
16539# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16540 ! IC file is misaligned/mis-sized for the run grid, not a normal boundary case.
16541# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16542 if (idx < 1 .or. idx > xrows) &
16543# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16544 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
16545# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16546 do f = 1, sys_size
16547# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16548 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
16549# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16550 end do
16551# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16552 case (2)
16553# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16554 idx = i + 1 + global_offset_x - index_x
16555# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16556 if (idx < 1 .or. idx > xrows) &
16557# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16558 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
16559# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16560 do f = 1, sys_size - 1
16561# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16562 jump = merge(1, 0, f >= eqn_idx%mom%end)
16563# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16564 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
16565# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16566 end do
16567# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16568 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
16569# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16570 case (3)
16571# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16572 idx = i + 1 + global_offset_x - index_x
16573# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16574 idy = j + 1 + global_offset_y - index_y
16575# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16576 if (idx < 1 .or. idx > xrows .or. idy < 1 .or. idy > yrows) &
16577# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16578 & call s_mpi_abort("Hardcoded IC extrusion: row/column index out of range (IC file misaligned with the run grid)")
16579# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16580 do f = 1, sys_size - 1
16581# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16582 jump = merge(1, 0, f >= eqn_idx%mom%end)
16583# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16584 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
16585# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16586 end do
16587# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16588 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
16589# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16590 end select
16591# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16592 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0)
16593# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16594 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 0.0_wp
16595# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16596 case (274) ! Full 2D field from external data (no extrusion)
16597# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16598 ! Unlike case(270-273), this reads a genuinely 2D (x,y) field per variable, with no
16599# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16600 ! extrusion direction and no zeroed component -- all sys_size variables are read and
16601# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16602 ! assigned directly. Data files must have exactly (m_glb+1)*(n_glb+1) lines per
16603# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16604 ! variable, in x-major order (outer loop x, inner loop y), matching this rank's
16605# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16606 ! global grid exactly -- by construction, since the IC generator derives both the
16607# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16608 ! grid and the file contents from the same computation.
16609# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16610 !
16611# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16612 ! A local cell's global (x, y) index is derived from x_cc(i)/y_cc(j) against the
16613# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16614 ! file's own first coordinate and this rank's uniform grid spacing -- following the
16615# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16616 ! same pattern as case(270)'s global_offset_x/y above -- rather than from start_idx:
16617# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16618 ! start_idx is only allocated when parallel_io=T (s_initialize_parallel_io_common
16619# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16620 ! returns before allocating it otherwise), so a serial-IO run (the default for
16621# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16622 ! golden-file tests) would index into an unallocated array.
16623# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16624 !
16625# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16626 ! Every rank still scans the whole file (matching case(270)'s existing per-rank-reads-
16627# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16628 ! everything pattern), but stored_values274 only holds this rank's LOCAL (0:m, 0:n)
16629# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16630 ! slice rather than the full global grid -- a full-grid copy on every rank would scale
16631# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16632 ! as O(m_glb*n_glb*sys_size) per rank, which is the wrong axis to duplicate work on for
16633# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16634 ! a genuinely 2D (not 1D-profile) field. local_ix_beg274/local_iy_beg274 (this rank's
16635# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16636 ! global cell offset) are pinned from f274==1's very first record, before any other
16637# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16638 ! record is read, so every subsequent record -- across all variables -- can be tested
16639# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16640 ! against this rank's range and dropped if it falls outside it.
16641# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16642 x_step274 = x_cc(1) - x_cc(0)
16643# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16644 y_step274 = y_cc(1) - y_cc(0)
16645# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16646
16647# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16648 if (.not. files_loaded274) then
16649# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16650#ifdef MFC_DEBUG
16651# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16652 block
16653# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16654 use iso_fortran_env, only: output_unit
16655# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16656
16657# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16658 print *, 'm_icpp_patches.fpp:640: ', '@:ALLOCATE(stored_values274(0:m, 0:n, sys_size))'
16659# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16660
16661# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16662 call flush (output_unit)
16663# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16664 end block
16665# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16666#endif
16667# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16668 allocate (stored_values274(0:m, 0:n, sys_size))
16669# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16670
16671# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16672
16673# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16674#if defined(MFC_OpenACC)
16675# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16676!$acc enter data create(stored_values274)
16677# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16678#elif defined(MFC_OpenMP)
16679# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16680!$omp target enter data map(always,alloc:stored_values274)
16681# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16682#endif
16683# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16684 do f274 = 1, sys_size
16685# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16686 write (file_num_str274, '(I0)') f274
16687# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16688 fname274 = trim(files_dir) // "/prim." // trim(file_num_str274) // ".00." // trim(file_extension) // ".dat"
16689# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16690 open (newunit=unit274, file=trim(fname274), status='old', action='read', iostat=ios274)
16691# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16692 if (ios274 /= 0) call s_mpi_abort("Error opening file: " // trim(fname274))
16693# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16694 do ix274 = 0, m_glb
16695# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16696 do iy274 = 0, n_glb
16697# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16698 read (unit274, *, iostat=ios274) dummy_x274, dummy_y274, dummy_val274
16699# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16700 if (ios274 /= 0) call s_mpi_abort("Error reading file (fewer lines than grid?): " // trim(fname274))
16701# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16702 ! Capture the file's own origin and spacing from its first records so we can
16703# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16704 ! confirm it was sampled on this run's grid (a silent mismatch would otherwise
16705# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16706 ! read a wrong partial slice -> nonphysical field -> VCFL=Inf downstream).
16707# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16708 if (f274 == 1) then
16709# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16710 if (ix274 == 0 .and. iy274 == 0) then
16711# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16712 x0_274 = dummy_x274
16713# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16714 y0_274 = dummy_y274
16715# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16716 local_ix_beg274 = nint((x_cc(0) - x0_274)/x_step274)
16717# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16718 local_iy_beg274 = nint((y_cc(0) - y0_274)/y_step274)
16719# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16720 end if
16721# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16722 if (ix274 == 1 .and. iy274 == 0) file_dx274 = dummy_x274 - x0_274
16723# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16724 if (ix274 == 0 .and. iy274 == 1) file_dy274 = dummy_y274 - y0_274
16725# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16726 end if
16727# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16728 if (ix274 - local_ix_beg274 >= 0 .and. ix274 - local_ix_beg274 <= m .and. iy274 - local_iy_beg274 >= 0 &
16729# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16730 & .and. iy274 - local_iy_beg274 <= n) then
16731# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16732 stored_values274(ix274 - local_ix_beg274, iy274 - local_iy_beg274, f274) = dummy_val274
16733# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16734 end if
16735# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16736 end do
16737# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16738 end do
16739# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16740 ! The file must contain exactly (m_glb+1)*(n_glb+1) records: a successful extra
16741# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16742 ! read means it was generated for a larger grid and would be silently misread.
16743# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16744 read (unit274, *, iostat=ios274) dummy_x274, dummy_y274
16745# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16746 if (ios274 == 0) call s_mpi_abort("hcid=274 file has more lines than the grid: " // trim(fname274))
16747# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16748 close (unit274)
16749# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16750 end do
16751# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16752
16753# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16754 ! The run grid must be aligned with the file grid (uniform grid assumed, as in case 270).
16755# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16756 ! Check alignment via the integer cell offset of this rank's first cell from the file
16757# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16758 ! origin -- decomposition-safe: on every MPI rank x_cc(0) sits an integer number of cells
16759# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16760 ! into the global file, so a non-integer offset means a shifted/mismatched IC. (Comparing
16761# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16762 ! x0_274 to x_cc(0) directly would false-abort every rank whose subdomain doesn't start at
16763# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16764 ! the global origin.) The spacing checks below must also hold.
16765# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16766 r_align274 = (x_cc(0) - x0_274)/x_step274
16767# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16768 if (abs(r_align274 - nint(r_align274)) > 1.e-6_wp) &
16769# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16770 & call s_mpi_abort("hcid=274 file x-grid is misaligned with the run grid; regenerate the IC for this grid.")
16771# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16772 if (m_glb >= 1) then
16773# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16774 if (abs(file_dx274 - x_step274) > 1.e-6_wp*abs(x_step274)) &
16775# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16776 & call s_mpi_abort("hcid=274 file x-spacing does not match the grid; regenerate the IC for this grid.")
16777# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16778 end if
16779# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16780 if (n_glb >= 1) then
16781# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16782 r_align274 = (y_cc(0) - y0_274)/y_step274
16783# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16784 if (abs(r_align274 - nint(r_align274)) > 1.e-6_wp) &
16785# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16786 & call s_mpi_abort("hcid=274 file y-grid is misaligned with the run grid; regenerate the IC for this grid.")
16787# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16788 if (abs(file_dy274 - y_step274) > 1.e-6_wp*abs(y_step274)) &
16789# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16790 & call s_mpi_abort("hcid=274 file y-spacing does not match the grid; regenerate the IC for this grid.")
16791# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16792 end if
16793# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16794
16795# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16796 files_loaded274 = .true.
16797# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16798 end if
16799# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16800 ! Alignment is verified above (or this rank would already have aborted), so the local
16801# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16802 ! cell (i, j) maps to stored_values274(i, j, :) directly -- no re-derivation needed.
16803# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16804 do f274 = 1, sys_size
16805# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16806 q_prim_vf(f274)%sf(i, j, 0) = stored_values274(i, j, f274)
16807# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16808 end do
16809# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16810 case (271) ! Premixed Flame Vortices Interaction
16811# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16812 if (.not. files_loaded) then
16813# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16814 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
16815# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16816 do f = 1, max_files
16817# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16818 write (file_num_str, '(I0)') f
16819# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16820 filenames(f) = trim(files_dir) // "/" // "prim." // trim(file_num_str) // ".00." // trim(file_extension) // ".dat"
16821# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16822 end do
16823# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16824
16825# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16826 ! Common file reading setup
16827# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16828 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
16829# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16830 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
16831# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16832
16833# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16834 select case (num_dims)
16835# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16836 case (1, 2) ! 1D and 2D cases are similar
16837# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16838 ! Count lines
16839# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16840 line_count = 0
16841# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16842 do
16843# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16844 read (unit2, *, iostat=ios2) dummy_x, dummy_y
16845# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16846 if (ios2 /= 0) exit
16847# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16848 line_count = line_count + 1
16849# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16850 end do
16851# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16852 close (unit2)
16853# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16854
16855# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16856 xrows = line_count
16857# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16858 yrows = 1
16859# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16860 index_x = 0
16861# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16862 if (num_dims == 2) index_x = i
16863# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16864#ifdef MFC_DEBUG
16865# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16866 block
16867# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16868 use iso_fortran_env, only: output_unit
16869# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16870
16871# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16872 print *, 'm_icpp_patches.fpp:640: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
16873# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16874
16875# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16876 call flush (output_unit)
16877# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16878 end block
16879# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16880#endif
16881# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16882 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
16883# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16884
16885# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16886
16887# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16888
16889# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16890#if defined(MFC_OpenACC)
16891# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16892!$acc enter data create(x_coords, stored_values)
16893# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16894#elif defined(MFC_OpenMP)
16895# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16896!$omp target enter data map(always,alloc:x_coords, stored_values)
16897# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16898#endif
16899# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16900
16901# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16902 ! Read data from all files
16903# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16904 do f = 1, max_files
16905# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16906 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
16907# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16908 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
16909# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16910
16911# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16912 do iter = 1, xrows
16913# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16914 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
16915# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16916 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
16917# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16918 end do
16919# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16920 close (unit)
16921# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16922 end do
16923# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16924
16925# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16926 ! Calculate offsets
16927# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16928 domain_xstart = x_coords(1)
16929# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16930 x_step = x_cc(1) - x_cc(0)
16931# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16932 delta_x = merge(x_cc(0) - domain_xstart, x_cc(index_x) - domain_xstart, num_dims == 1)
16933# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16934 global_offset_x = nint(abs(delta_x)/x_step)
16935# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16936 case (3) ! 3D case - determine grid structure
16937# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16938 ! Find yRows by counting rows with same x
16939# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16940 read (unit2, *, iostat=ios2) x0, y0, dummy_z
16941# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16942 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
16943# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16944
16945# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16946 yrows = 1
16947# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16948 do
16949# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16950 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
16951# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16952 if (ios2 /= 0) exit
16953# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16954 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
16955# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16956 yrows = yrows + 1
16957# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16958 else
16959# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16960 exit
16961# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16962 end if
16963# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16964 end do
16965# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16966 close (unit2)
16967# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16968
16969# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16970 ! Count total rows
16971# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16972 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
16973# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16974 nrows = 0
16975# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16976 do
16977# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16978 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
16979# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16980 if (ios2 /= 0) exit
16981# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16982 nrows = nrows + 1
16983# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16984 end do
16985# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16986 close (unit2)
16987# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16988
16989# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16990 xrows = nrows/yrows
16991# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16992#ifdef MFC_DEBUG
16993# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16994 block
16995# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16996 use iso_fortran_env, only: output_unit
16997# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
16998
16999# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17000 print *, 'm_icpp_patches.fpp:640: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
17001# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17002
17003# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17004 call flush (output_unit)
17005# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17006 end block
17007# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17008#endif
17009# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17010 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
17011# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17012
17013# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17014
17015# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17016
17017# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17018
17019# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17020#if defined(MFC_OpenACC)
17021# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17022!$acc enter data create(x_coords, y_coords, stored_values)
17023# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17024#elif defined(MFC_OpenMP)
17025# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17026!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
17027# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17028#endif
17029# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17030 index_x = i
17031# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17032 index_y = j
17033# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17034
17035# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17036 ! Read all files
17037# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17038 do f = 1, max_files
17039# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17040 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
17041# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17042 if (ios /= 0) then
17043# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17044 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
17045# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17046 cycle
17047# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17048 end if
17049# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17050
17051# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17052 iter = 0
17053# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17054 do iix = 1, xrows
17055# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17056 do iiy = 1, yrows
17057# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17058 iter = iter + 1
17059# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17060 if (f == 1) then
17061# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17062 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
17063# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17064 else
17065# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17066 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
17067# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17068 end if
17069# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17070 if (ios /= 0) call s_mpi_abort("Error reading data")
17071# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17072 end do
17073# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17074 end do
17075# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17076 close (unit)
17077# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17078 end do
17079# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17080
17081# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17082 ! Calculate offsets
17083# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17084 x_step = x_cc(1) - x_cc(0)
17085# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17086 y_step = y_cc(1) - y_cc(0)
17087# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17088 delta_x = x_cc(index_x) - x_coords(1)
17089# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17090 delta_y = y_cc(index_y) - y_coords(1)
17091# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17092 global_offset_x = nint(abs(delta_x)/x_step)
17093# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17094 global_offset_y = nint(abs(delta_y)/y_step)
17095# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17096 end select
17097# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17098
17099# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17100 files_loaded = .true.
17101# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17102 end if
17103# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17104
17105# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17106 ! Data assignment
17107# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17108 select case (num_dims)
17109# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17110 case (1)
17111# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17112 idx = i + 1 + global_offset_x
17113# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17114 ! idx must land inside the file's row range: this rank's subdomain offset
17115# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17116 ! (global_offset_x) was derived from this rank's own grid, so a miss means the
17117# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17118 ! IC file is misaligned/mis-sized for the run grid, not a normal boundary case.
17119# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17120 if (idx < 1 .or. idx > xrows) &
17121# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17122 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
17123# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17124 do f = 1, sys_size
17125# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17126 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
17127# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17128 end do
17129# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17130 case (2)
17131# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17132 idx = i + 1 + global_offset_x - index_x
17133# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17134 if (idx < 1 .or. idx > xrows) &
17135# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17136 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
17137# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17138 do f = 1, sys_size - 1
17139# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17140 jump = merge(1, 0, f >= eqn_idx%mom%end)
17141# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17142 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
17143# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17144 end do
17145# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17146 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
17147# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17148 case (3)
17149# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17150 idx = i + 1 + global_offset_x - index_x
17151# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17152 idy = j + 1 + global_offset_y - index_y
17153# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17154 if (idx < 1 .or. idx > xrows .or. idy < 1 .or. idy > yrows) &
17155# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17156 & call s_mpi_abort("Hardcoded IC extrusion: row/column index out of range (IC file misaligned with the run grid)")
17157# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17158 do f = 1, sys_size - 1
17159# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17160 jump = merge(1, 0, f >= eqn_idx%mom%end)
17161# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17162 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
17163# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17164 end do
17165# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17166 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
17167# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17168 end select
17169# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17170 x1c = 0.0027_wp
17171# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17172 y1c = 0.005_wp
17173# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17174 x2c = 0.0027_wp
17175# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17176 y2c = 0.003_wp
17177# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17178 r1c = (x_cc(i) - x1c)**(2.0_wp) + (y_cc(j) - y1c)**(2.0_wp)
17179# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17180 r2c = (x_cc(i) - x2c)**(2.0_wp) + (y_cc(j) - y2c)**(2.0_wp)
17181# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17182 rvortex = 0.0005_wp
17183# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17184 cvortex = 6000.0_wp
17185# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17186
17187# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17188 u1c = -cvortex*((y_cc(j) - y1c))*exp(-r1c/(2.0_wp*rvortex**2.0_wp))
17189# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17190 v1c = cvortex*((x_cc(i) - x1c))*exp(-r1c/(2.0_wp*rvortex**2.0_wp))
17191# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17192
17193# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17194 u2c = cvortex*((y_cc(j) - y2c))*exp(-r2c/(2.0_wp*rvortex**2.0_wp))
17195# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17196 v2c = -cvortex*((x_cc(i) - x2c))*exp(-r2c/(2.0_wp*rvortex**2.0_wp))
17197# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17198 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) + u1c + u2c
17199# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17200 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = v1c + v2c
17201# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17202 case (272) ! Premixed Flame Instability
17203# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17204 if (.not. files_loaded) then
17205# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17206 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
17207# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17208 do f = 1, max_files
17209# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17210 write (file_num_str, '(I0)') f
17211# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17212 filenames(f) = trim(files_dir) // "/" // "prim." // trim(file_num_str) // ".00." // trim(file_extension) // ".dat"
17213# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17214 end do
17215# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17216
17217# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17218 ! Common file reading setup
17219# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17220 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
17221# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17222 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
17223# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17224
17225# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17226 select case (num_dims)
17227# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17228 case (1, 2) ! 1D and 2D cases are similar
17229# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17230 ! Count lines
17231# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17232 line_count = 0
17233# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17234 do
17235# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17236 read (unit2, *, iostat=ios2) dummy_x, dummy_y
17237# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17238 if (ios2 /= 0) exit
17239# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17240 line_count = line_count + 1
17241# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17242 end do
17243# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17244 close (unit2)
17245# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17246
17247# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17248 xrows = line_count
17249# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17250 yrows = 1
17251# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17252 index_x = 0
17253# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17254 if (num_dims == 2) index_x = i
17255# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17256#ifdef MFC_DEBUG
17257# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17258 block
17259# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17260 use iso_fortran_env, only: output_unit
17261# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17262
17263# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17264 print *, 'm_icpp_patches.fpp:640: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
17265# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17266
17267# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17268 call flush (output_unit)
17269# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17270 end block
17271# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17272#endif
17273# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17274 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
17275# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17276
17277# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17278
17279# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17280
17281# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17282#if defined(MFC_OpenACC)
17283# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17284!$acc enter data create(x_coords, stored_values)
17285# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17286#elif defined(MFC_OpenMP)
17287# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17288!$omp target enter data map(always,alloc:x_coords, stored_values)
17289# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17290#endif
17291# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17292
17293# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17294 ! Read data from all files
17295# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17296 do f = 1, max_files
17297# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17298 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
17299# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17300 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
17301# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17302
17303# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17304 do iter = 1, xrows
17305# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17306 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
17307# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17308 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
17309# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17310 end do
17311# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17312 close (unit)
17313# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17314 end do
17315# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17316
17317# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17318 ! Calculate offsets
17319# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17320 domain_xstart = x_coords(1)
17321# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17322 x_step = x_cc(1) - x_cc(0)
17323# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17324 delta_x = merge(x_cc(0) - domain_xstart, x_cc(index_x) - domain_xstart, num_dims == 1)
17325# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17326 global_offset_x = nint(abs(delta_x)/x_step)
17327# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17328 case (3) ! 3D case - determine grid structure
17329# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17330 ! Find yRows by counting rows with same x
17331# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17332 read (unit2, *, iostat=ios2) x0, y0, dummy_z
17333# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17334 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
17335# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17336
17337# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17338 yrows = 1
17339# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17340 do
17341# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17342 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
17343# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17344 if (ios2 /= 0) exit
17345# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17346 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
17347# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17348 yrows = yrows + 1
17349# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17350 else
17351# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17352 exit
17353# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17354 end if
17355# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17356 end do
17357# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17358 close (unit2)
17359# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17360
17361# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17362 ! Count total rows
17363# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17364 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
17365# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17366 nrows = 0
17367# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17368 do
17369# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17370 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
17371# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17372 if (ios2 /= 0) exit
17373# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17374 nrows = nrows + 1
17375# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17376 end do
17377# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17378 close (unit2)
17379# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17380
17381# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17382 xrows = nrows/yrows
17383# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17384#ifdef MFC_DEBUG
17385# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17386 block
17387# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17388 use iso_fortran_env, only: output_unit
17389# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17390
17391# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17392 print *, 'm_icpp_patches.fpp:640: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
17393# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17394
17395# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17396 call flush (output_unit)
17397# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17398 end block
17399# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17400#endif
17401# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17402 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
17403# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17404
17405# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17406
17407# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17408
17409# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17410
17411# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17412#if defined(MFC_OpenACC)
17413# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17414!$acc enter data create(x_coords, y_coords, stored_values)
17415# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17416#elif defined(MFC_OpenMP)
17417# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17418!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
17419# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17420#endif
17421# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17422 index_x = i
17423# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17424 index_y = j
17425# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17426
17427# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17428 ! Read all files
17429# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17430 do f = 1, max_files
17431# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17432 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
17433# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17434 if (ios /= 0) then
17435# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17436 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
17437# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17438 cycle
17439# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17440 end if
17441# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17442
17443# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17444 iter = 0
17445# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17446 do iix = 1, xrows
17447# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17448 do iiy = 1, yrows
17449# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17450 iter = iter + 1
17451# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17452 if (f == 1) then
17453# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17454 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
17455# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17456 else
17457# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17458 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
17459# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17460 end if
17461# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17462 if (ios /= 0) call s_mpi_abort("Error reading data")
17463# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17464 end do
17465# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17466 end do
17467# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17468 close (unit)
17469# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17470 end do
17471# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17472
17473# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17474 ! Calculate offsets
17475# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17476 x_step = x_cc(1) - x_cc(0)
17477# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17478 y_step = y_cc(1) - y_cc(0)
17479# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17480 delta_x = x_cc(index_x) - x_coords(1)
17481# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17482 delta_y = y_cc(index_y) - y_coords(1)
17483# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17484 global_offset_x = nint(abs(delta_x)/x_step)
17485# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17486 global_offset_y = nint(abs(delta_y)/y_step)
17487# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17488 end select
17489# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17490
17491# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17492 files_loaded = .true.
17493# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17494 end if
17495# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17496
17497# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17498 ! Data assignment
17499# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17500 select case (num_dims)
17501# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17502 case (1)
17503# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17504 idx = i + 1 + global_offset_x
17505# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17506 ! idx must land inside the file's row range: this rank's subdomain offset
17507# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17508 ! (global_offset_x) was derived from this rank's own grid, so a miss means the
17509# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17510 ! IC file is misaligned/mis-sized for the run grid, not a normal boundary case.
17511# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17512 if (idx < 1 .or. idx > xrows) &
17513# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17514 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
17515# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17516 do f = 1, sys_size
17517# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17518 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
17519# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17520 end do
17521# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17522 case (2)
17523# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17524 idx = i + 1 + global_offset_x - index_x
17525# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17526 if (idx < 1 .or. idx > xrows) &
17527# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17528 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
17529# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17530 do f = 1, sys_size - 1
17531# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17532 jump = merge(1, 0, f >= eqn_idx%mom%end)
17533# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17534 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
17535# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17536 end do
17537# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17538 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
17539# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17540 case (3)
17541# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17542 idx = i + 1 + global_offset_x - index_x
17543# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17544 idy = j + 1 + global_offset_y - index_y
17545# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17546 if (idx < 1 .or. idx > xrows .or. idy < 1 .or. idy > yrows) &
17547# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17548 & call s_mpi_abort("Hardcoded IC extrusion: row/column index out of range (IC file misaligned with the run grid)")
17549# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17550 do f = 1, sys_size - 1
17551# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17552 jump = merge(1, 0, f >= eqn_idx%mom%end)
17553# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17554 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
17555# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17556 end do
17557# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17558 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
17559# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17560 end select
17561# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17562
17563# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17564 y_center = y0_ref
17565# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17566 y_dist = y_cc(j) - y_center
17567# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17568 wave_phase = 2.0_wp*pi*nwaves*(y_dist/ly_param)
17569# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17570 front_shift = a_param*sin(wave_phase)
17571# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17572
17573# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17574 x_mapped = x_cc(i) - front_shift
17575# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17576
17577# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17578 if (x_mapped <= x_coords(1)) then
17579# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17580 do v = 1, sys_size - 1
17581# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17582 q_prim_vf(v + merge(1, 0, v >= eqn_idx%mom%end))%sf(i, j, 0) = stored_values(1, 1, v)
17583# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17584 end do
17585# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17586 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
17587# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17588 else if (x_mapped >= x_coords(xrows)) then
17589# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17590 do v = 1, sys_size - 1
17591# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17592 q_prim_vf(v + merge(1, 0, v >= eqn_idx%mom%end))%sf(i, j, 0) = stored_values(xrows, 1, v)
17593# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17594 end do
17595# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17596 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
17597# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17598 else
17599# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17600 idx_lo = 1; idx_hi = xrows
17601# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17602 do while (idx_hi - idx_lo > 1)
17603# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17604 idx_mid = (idx_lo + idx_hi)/2
17605# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17606 if (x_coords(idx_mid) <= x_mapped) then
17607# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17608 idx_lo = idx_mid
17609# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17610 else
17611# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17612 idx_hi = idx_mid
17613# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17614 end if
17615# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17616 end do
17617# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17618
17619# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17620 interp_wt = (x_mapped - x_coords(idx_lo))/(x_coords(idx_hi) - x_coords(idx_lo)) ! weight in [0,1)
17621# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17622
17623# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17624 do v = 1, sys_size - 1
17625# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17626 q_prim_vf(v + merge(1, 0, v >= eqn_idx%mom%end))%sf(i, j, 0) = (1.0_wp - interp_wt)*stored_values(idx_lo, 1, &
17627# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17628 & v) + interp_wt*stored_values(idx_hi, 1, v)
17629# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17630 end do
17631# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17632 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
17633# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17634 end if
17635# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17636 case (280) ! Isentropic vortex
17637# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17638 ! This is patch is hard-coded for test suite optimization used in the 2D_isentropicvortex case: This analytic patch uses
17639# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17640 ! geometry 2
17641# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17642 if (patch_id == 1) then
17643# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17644 q_prim_vf(eqn_idx%E)%sf(i, j, &
17645# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17646 & 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) &
17647# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17648 & - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0)))**(1.4 + 1.0)
17649# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17650 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, j, &
17651# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17652 & 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) &
17653# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17654 & - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0)))**1.4
17655# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17656 q_prim_vf(eqn_idx%mom%beg + 0)%sf(i, j, &
17657# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17658 & 0) = patch_icpp(1)%vel(1) + (y_cc(j) - patch_icpp(1)%y_centroid)*(5.0/(2.0*pi))*exp(1.0*(1.0 - (x_cc(i) &
17659# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17660 & - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0))
17661# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17662 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, &
17663# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17664 & 0) = patch_icpp(1)%vel(2) - (x_cc(i) - patch_icpp(1)%x_centroid)*(5.0/(2.0*pi))*exp(1.0*(1.0 - (x_cc(i) &
17665# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17666 & - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0))
17667# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17668 end if
17669# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17670 case (281) ! Acoustic pulse
17671# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17672 ! This is patch is hard-coded for test suite optimization used in the 2D_acoustic_pulse case: This analytic patch uses
17673# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17674 ! geometry 2
17675# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17676 if (patch_id == 2) then
17677# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17678 q_prim_vf(eqn_idx%E)%sf(i, j, &
17679# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17680 & 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))
17681# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17682 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, j, &
17683# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17684 & 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))
17685# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17686 end if
17687# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17688 case (282) ! Zero-circulation vortex
17689# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17690 ! This is patch is hard-coded for test suite optimization used in the 2D_zero_circ_vortex case: This analytic patch uses
17691# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17692 ! geometry 2
17693# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17694 if (patch_id == 2) then
17695# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17696 q_prim_vf(eqn_idx%E)%sf(i, j, &
17697# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17698 & 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))
17699# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17700 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, j, &
17701# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17702 & 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))
17703# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17704 q_prim_vf(eqn_idx%mom%beg + 0)%sf(i, j, &
17705# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17706 & 0) = 112.99092883944267*(1 - (0.1/0.3))*y_cc(j)*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2)))
17707# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17708 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, &
17709# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17710 & 0) = 112.99092883944267*((0.1/0.3))*x_cc(i)*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2)))
17711# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17712 end if
17713# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17714 case (283) ! Isentropic vortex: conserved-variable GL cell averages (3-pt tensor product)
17715# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17716 ! GL averages of conserved variables (rho, rho*u, rho*v, E) eliminate the O(h^2) error that primitive-variable averaging
17717# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17718 ! introduces through the nonlinear prim->cons conversion: cell_avg(rho*u) != cell_avg(rho)*cell_avg(u) by O(h^2). We back
17719# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17720 ! out primitive values that reproduce the conserved averages exactly. Vortex strength eps is read from
17721# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17722 ! patch_icpp(patch_id)%epsilon; defaults to 5.
17723# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17724 if (patch_id == 1) then
17725# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17726 vortex_eps = merge(patch_icpp(patch_id)%epsilon, 5._wp, patch_icpp(patch_id)%epsilon > 0._wp)
17727# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17728 gauss_xi = [-sqrt(3._wp/5._wp), 0._wp, sqrt(3._wp/5._wp)]
17729# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17730 gauss_w = [5._wp/9._wp, 8._wp/9._wp, 5._wp/9._wp]
17731# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17732 rho_avg = 0._wp; rhou_avg = 0._wp; rhov_avg = 0._wp; e_avg = 0._wp
17733# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17734 do igq = 1, 3
17735# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17736 do jgq = 1, 3
17737# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17738 xq = x_cc(i) + gauss_xi(igq)*(x_cb(i) - x_cb(i - 1))*0.5_wp
17739# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17740 yq = y_cc(j) + gauss_xi(jgq)*(y_cb(j) - y_cb(j - 1))*0.5_wp
17741# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17742 r2q = (xq - patch_icpp(patch_id)%x_centroid)**2._wp + (yq - patch_icpp(patch_id)%y_centroid)**2._wp
17743# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17744 t_facq = 1._wp - (vortex_eps/(2._wp*pi))*(vortex_eps/(8._wp*(1.4_wp + 1._wp)*pi))*exp(2._wp*(1._wp - r2q))
17745# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17746 wq = gauss_w(igq)*gauss_w(jgq)
17747# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17748 rhoq = t_facq**1.4_wp
17749# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17750 pq = t_facq**2.4_wp
17751# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17752 uq = patch_icpp(patch_id)%vel(1) + (yq - patch_icpp(patch_id)%y_centroid)*(vortex_eps/(2._wp*pi))*exp(1._wp &
17753# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17754 & - r2q)
17755# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17756 vq = patch_icpp(patch_id)%vel(2) - (xq - patch_icpp(patch_id)%x_centroid)*(vortex_eps/(2._wp*pi))*exp(1._wp &
17757# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17758 & - r2q)
17759# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17760 eq = pq/0.4_wp + 0.5_wp*rhoq*(uq**2 + vq**2)
17761# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17762 rho_avg = rho_avg + wq*rhoq
17763# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17764 rhou_avg = rhou_avg + wq*(rhoq*uq)
17765# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17766 rhov_avg = rhov_avg + wq*(rhoq*vq)
17767# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17768 e_avg = e_avg + wq*eq
17769# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17770 end do
17771# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17772 end do
17773# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17774 rho_avg = rho_avg*0.25_wp
17775# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17776 rhou_avg = rhou_avg*0.25_wp
17777# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17778 rhov_avg = rhov_avg*0.25_wp
17779# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17780 e_avg = e_avg*0.25_wp
17781# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17782 ! Back out primitive vars so prim->cons conversion recovers the conserved averages
17783# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17784 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = rho_avg
17785# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17786 q_prim_vf(eqn_idx%mom%beg + 0)%sf(i, j, 0) = rhou_avg/rho_avg
17787# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17788 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = rhov_avg/rho_avg
17789# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17790 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = (e_avg - 0.5_wp*(rhou_avg**2 + rhov_avg**2)/rho_avg)*0.4_wp
17791# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17792 end if
17793# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17794 case (291) ! Isothermal Flat Plate
17795# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17796 t_inf = 1125.0_wp
17797# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17798 t_wall = 600.0_wp
17799# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17800 p_atm = 101325.0_wp
17801# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17802
17803# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17804 ! Boundary/Shear Layer thicknesses
17805# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17806 delta_th = 0.0003_wp ! Thermal BL thickness
17807# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17808 delta_shear = 8e-3_wp ! Velocity BL thickness
17809# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17810
17811# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17812 u_max = 50.0_wp ! Freestream Velocity (m/s)
17813# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17814
17815# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17816 mw_n2 = 28.0134e-3_wp
17817# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17818 mw_o2 = 31.999e-3_wp
17819# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17820 y_n2 = 0.767_wp
17821# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17822 y_o2 = 0.233_wp
17823# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17824 r_mix = 8.314462618_wp*((y_n2/mw_n2) + (y_o2/mw_o2))
17825# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17826 bottom_blend_u = tanh(y_cc(j)/delta_shear)
17827# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17828 bottom_blend_t = tanh(y_cc(j)/delta_th)
17829# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17830 u_mean = u_max*bottom_blend_u
17831# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17832 t_loc = t_wall + (t_inf - t_wall)*bottom_blend_t
17833# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17834 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = p_atm/(r_mix*t_loc)
17835# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17836 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = u_mean
17837# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17838 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
17839# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17840 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p_atm
17841# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17842 q_prim_vf(eqn_idx%species%beg)%sf(i, j, 0) = y_o2
17843# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17844 q_prim_vf(eqn_idx%species%end)%sf(i, j, 0) = y_n2
17845# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17846 case default
17847# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17848 if (proc_rank == 0) then
17849# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17850 call s_int_to_str(patch_id, istr)
17851# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17852 call s_mpi_abort("Invalid hcid specified for patch " // trim(istr))
17853# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17854 end if
17855# 640 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17856 end select
17857 end if
17858
17859 if ((q_prim_vf(1)%sf(i, j, 0) < 1.e-10) .and. (model_eqns == model_eqns_4eq)) then
17860 ! zero density, reassign according to Tait EOS
17861 q_prim_vf(1)%sf(i, j, 0) = (((q_prim_vf(eqn_idx%E)%sf(i, j, &
17862 & 0) + pi_inf)/(pref + pi_inf))**(1._wp/lit_gamma))*rhoref*(1._wp &
17863 & - q_prim_vf(eqn_idx%alf)%sf(i, j, 0))
17864 end if
17865
17866 ! Updating the patch identities bookkeeping variable
17867 if (1._wp - eta < sgm_eps) patch_id_fp(i, j, 0) = patch_id
17868 end if
17869 end if
17870 end do
17871 end do
17872 if (allocated(stored_values)) then
17873# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17874#ifdef MFC_DEBUG
17875# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17876 block
17877# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17878 use iso_fortran_env, only: output_unit
17879# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17880
17881# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17882 print *, 'm_icpp_patches.fpp:656: ', '@:DEALLOCATE(stored_values)'
17883# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17884
17885# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17886 call flush (output_unit)
17887# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17888 end block
17889# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17890#endif
17891# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17892
17893# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17894#if defined(MFC_OpenACC)
17895# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17896!$acc exit data delete(stored_values)
17897# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17898#elif defined(MFC_OpenMP)
17899# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17900!$omp target exit data map(release:stored_values)
17901# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17902#endif
17903# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17904 deallocate (stored_values)
17905# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17906#ifdef MFC_DEBUG
17907# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17908 block
17909# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17910 use iso_fortran_env, only: output_unit
17911# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17912
17913# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17914 print *, 'm_icpp_patches.fpp:656: ', '@:DEALLOCATE(x_coords)'
17915# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17916
17917# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17918 call flush (output_unit)
17919# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17920 end block
17921# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17922#endif
17923# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17924
17925# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17926#if defined(MFC_OpenACC)
17927# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17928!$acc exit data delete(x_coords)
17929# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17930#elif defined(MFC_OpenMP)
17931# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17932!$omp target exit data map(release:x_coords)
17933# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17934#endif
17935# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17936 deallocate (x_coords)
17937# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17938 end if
17939# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17940
17941# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17942 if (allocated(y_coords)) then
17943# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17944#ifdef MFC_DEBUG
17945# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17946 block
17947# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17948 use iso_fortran_env, only: output_unit
17949# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17950
17951# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17952 print *, 'm_icpp_patches.fpp:656: ', '@:DEALLOCATE(y_coords)'
17953# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17954
17955# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17956 call flush (output_unit)
17957# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17958 end block
17959# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17960#endif
17961# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17962
17963# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17964#if defined(MFC_OpenACC)
17965# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17966!$acc exit data delete(y_coords)
17967# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17968#elif defined(MFC_OpenMP)
17969# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17970!$omp target exit data map(release:y_coords)
17971# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17972#endif
17973# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17974 deallocate (y_coords)
17975# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17976 end if
17977# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17978
17979# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17980 files_loaded = .false.
17981# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17982
17983# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17984 if (allocated(stored_values274)) then
17985# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17986#ifdef MFC_DEBUG
17987# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17988 block
17989# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17990 use iso_fortran_env, only: output_unit
17991# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17992
17993# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17994 print *, 'm_icpp_patches.fpp:656: ', '@:DEALLOCATE(stored_values274)'
17995# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17996
17997# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
17998 call flush (output_unit)
17999# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18000 end block
18001# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18002#endif
18003# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18004
18005# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18006#if defined(MFC_OpenACC)
18007# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18008!$acc exit data delete(stored_values274)
18009# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18010#elif defined(MFC_OpenMP)
18011# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18012!$omp target exit data map(release:stored_values274)
18013# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18014#endif
18015# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18016 deallocate (stored_values274)
18017# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18018 end if
18019# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18020
18021# 656 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18022 files_loaded274 = .false.
18023
18024 end subroutine s_icpp_rectangle
18025
18026 !> The swept line patch is a 2D geometry that may be used, for example, in creating a solid boundary, or pre-/post- shock
18027 !! region, at an angle with respect to the axes of the Cartesian coordinate system. The geometry of the patch is well-defined
18028 !! when its centroid and normal vector, aimed in the sweep direction, are provided. Note that the sweep line patch DOES allow
18029 !! the smoothing of its boundary.
18030 subroutine s_icpp_sweep_line(patch_id, patch_id_fp, q_prim_vf)
18031
18032 integer, intent(in) :: patch_id
18033
18034#ifdef MFC_MIXED_PRECISION
18035 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
18036#else
18037 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
18038#endif
18039 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
18040 integer :: i, j, k !< Generic loop operators
18041 real(wp) :: a, b, c
18042
18043 integer :: xRows, yRows, nRows, iix, iiy, max_files
18044# 677 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18045 integer :: f, iter, unit, unit2, idx, idy, index_x, index_y, jump, line_count
18046# 677 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18047 real(wp) :: x_step, y_step
18048# 677 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18049 real(wp) :: dummy_x, dummy_y, dummy_z, x0, y0
18050# 677 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18051 integer :: global_offset_x, global_offset_y !< MPI subdomain offset
18052# 677 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18053 real(wp) :: delta_x, delta_y
18054# 677 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18055 character(len=300), dimension(sys_size) :: fileNames !< Arrays to store all data from files
18056# 677 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18057 real(wp), allocatable :: stored_values(:,:,:)
18058# 677 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18059 real(wp), allocatable :: x_coords(:), y_coords(:)
18060# 677 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18061 logical :: files_loaded = .false.
18062# 677 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18063 real(wp) :: domain_xstart
18064# 677 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18065 character(len=20) :: file_num_str !< For storing the file number as a string
18066# 677 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18067 integer :: ios
18068# 677 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18069 integer :: ios2
18070# 677 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18071
18072# 677 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18073 ! hcid=274 (2dHardcodedIC.fpp): full 2D field from external data, no extrusion.
18074# 677 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18075 ! Declared here (not in Hardcoded2DVariables()) so it's visible wherever
18076# 677 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18077 ! HardcodedDeallocation() is called, matching the pattern of stored_values/x_coords/
18078# 677 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18079 ! y_coords/files_loaded above.
18080# 677 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18081 real(wp), allocatable, dimension(:,:,:) :: stored_values274
18082# 677 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18083 logical :: files_loaded274 = .false.
18084# 677 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18085 integer :: f274, ix274, iy274, unit274, ios274
18086# 677 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18087 integer :: local_ix_beg274, local_iy_beg274
18088# 677 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18089 character(len=300) :: fname274
18090# 677 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18091 character(len=20) :: file_num_str274
18092# 677 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18093 real(wp) :: dummy_x274, dummy_y274, dummy_val274, x0_274, y0_274, x_step274, y_step274
18094# 677 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18095 real(wp) :: file_dx274, file_dy274, r_align274
18096 ! Place any declaration of intermediate variables here
18097# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18098 real(wp) :: rhoH, rhoL, pRef, pInt, h, lam, wl, amp, intH, alph, Mach
18099# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18100 real(wp) :: eps
18101# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18102
18103# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18104 ! IGR Jets Arrays to stor position and radii of jets from input file
18105# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18106 real(wp), dimension(:), allocatable :: y_th_arr, z_th_arr, r_th_arr
18107# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18108 ! Variables to describe initial condition of jet
18109# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18110 real(wp) :: r, ux_th, ux_am, p_th, p_am, rho_th, rho_am, y_th, z_th, r_th, eps_smooth
18111# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18112 real(wp) :: rcut, xcut !< Intermediate variables for creating smooth initial condition
18113# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18114 real(wp), dimension(0:n,0:p) :: rcut_arr
18115# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18116 integer :: l, q, s !< Iterators for reading input files
18117# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18118 integer :: start, end !< Ints to keep track of position in file
18119# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18120 character(len=100000) :: line ! String to store line in file
18121# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18122 character(len=25) :: value !< String to store value in line
18123# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18124 integer :: NJet !< Number of jets
18125# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18126 real(wp), allocatable, dimension(:,:) :: ih ! Array to store interface height in
18127# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18128 logical :: file_exist ! Flag to check if file exists
18129# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18130
18131# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18132 eps = 1e-9_wp
18133# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18134
18135# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18136 if (patch_icpp(patch_id)%hcid == 303) then ! IGR Multijet
18137# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18138 eps_smooth = 3._wp
18139# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18140 inquire (file="njet.txt", exist=file_exist)
18141# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18142 if (file_exist) then
18143# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18144 open (unit=10, file="njet.txt", status="old", action="read")
18145# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18146 read (10, *) njet
18147# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18148 close (10)
18149# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18150 else
18151# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18152 call s_mpi_abort("Error: njet.txt file specified for hcid=303 does not exist")
18153# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18154 end if
18155# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18156
18157# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18158#ifdef MFC_DEBUG
18159# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18160 block
18161# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18162 use iso_fortran_env, only: output_unit
18163# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18164
18165# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18166 print *, 'm_icpp_patches.fpp:678: ', '@:ALLOCATE(y_th_arr(0:NJet - 1))'
18167# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18168
18169# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18170 call flush (output_unit)
18171# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18172 end block
18173# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18174#endif
18175# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18176 allocate (y_th_arr(0:njet - 1))
18177# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18178
18179# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18180
18181# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18182#if defined(MFC_OpenACC)
18183# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18184!$acc enter data create(y_th_arr)
18185# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18186#elif defined(MFC_OpenMP)
18187# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18188!$omp target enter data map(always,alloc:y_th_arr)
18189# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18190#endif
18191# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18192#ifdef MFC_DEBUG
18193# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18194 block
18195# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18196 use iso_fortran_env, only: output_unit
18197# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18198
18199# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18200 print *, 'm_icpp_patches.fpp:678: ', '@:ALLOCATE(z_th_arr(0:NJet - 1))'
18201# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18202
18203# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18204 call flush (output_unit)
18205# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18206 end block
18207# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18208#endif
18209# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18210 allocate (z_th_arr(0:njet - 1))
18211# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18212
18213# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18214
18215# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18216#if defined(MFC_OpenACC)
18217# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18218!$acc enter data create(z_th_arr)
18219# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18220#elif defined(MFC_OpenMP)
18221# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18222!$omp target enter data map(always,alloc:z_th_arr)
18223# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18224#endif
18225# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18226#ifdef MFC_DEBUG
18227# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18228 block
18229# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18230 use iso_fortran_env, only: output_unit
18231# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18232
18233# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18234 print *, 'm_icpp_patches.fpp:678: ', '@:ALLOCATE(r_th_arr(0:NJet - 1))'
18235# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18236
18237# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18238 call flush (output_unit)
18239# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18240 end block
18241# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18242#endif
18243# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18244 allocate (r_th_arr(0:njet - 1))
18245# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18246
18247# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18248
18249# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18250#if defined(MFC_OpenACC)
18251# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18252!$acc enter data create(r_th_arr)
18253# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18254#elif defined(MFC_OpenMP)
18255# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18256!$omp target enter data map(always,alloc:r_th_arr)
18257# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18258#endif
18259# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18260
18261# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18262 inquire (file="jets.csv", exist=file_exist)
18263# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18264 if (file_exist) then
18265# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18266 open (unit=10, file="jets.csv", status="old", action="read")
18267# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18268 do q = 0, njet - 1
18269# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18270 read (10, '(A)') line ! Read a full line as a string
18271# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18272 start = 1
18273# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18274
18275# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18276 do l = 0, 2
18277# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18278 end = index(line(start:), ',') ! Find the next comma
18279# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18280 if (end == 0) then
18281# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18282 value = trim(adjustl(line(start:))) ! Last value in the line
18283# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18284 else
18285# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18286 value = trim(adjustl(line(start:start + end - 2))) ! Extract substring
18287# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18288 start = start + end ! Move to next value
18289# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18290 end if
18291# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18292 if (l == 0) then
18293# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18294 read (value, *) y_th_arr(q) ! Convert string to numeric value
18295# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18296 else if (l == 1) then
18297# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18298 read (value, *) z_th_arr(q)
18299# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18300 else
18301# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18302 read (value, *) r_th_arr(q)
18303# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18304 end if
18305# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18306 end do
18307# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18308 end do
18309# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18310 close (10)
18311# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18312
18313# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18314 do q = 0, p
18315# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18316 do l = 0, n
18317# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18318 rcut = 0._wp
18319# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18320 do s = 0, njet - 1
18321# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18322 r = sqrt((y_cc(l) - y_th_arr(s))**2._wp + (z_cc(q) - z_th_arr(s))**2._wp)
18323# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18324 rcut = rcut + f_cut_on(r - r_th_arr(s), eps_smooth)
18325# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18326 end do
18327# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18328 rcut_arr(l, q) = rcut
18329# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18330 end do
18331# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18332 end do
18333# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18334 else
18335# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18336 call s_mpi_abort("Error: jets.csv file specified for hcid=303 does not exist")
18337# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18338 end if
18339# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18340 end if
18341# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18342
18343# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18344 if (patch_icpp(patch_id)%hcid == 304) then ! 3D Cartesian interface from file
18345# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18346#ifdef MFC_DEBUG
18347# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18348 block
18349# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18350 use iso_fortran_env, only: output_unit
18351# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18352
18353# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18354 print *, 'm_icpp_patches.fpp:678: ', '@:ALLOCATE(ih(0:n_glb, 0:p_glb))'
18355# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18356
18357# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18358 call flush (output_unit)
18359# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18360 end block
18361# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18362#endif
18363# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18364 allocate (ih(0:n_glb, 0:p_glb))
18365# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18366
18367# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18368
18369# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18370#if defined(MFC_OpenACC)
18371# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18372!$acc enter data create(ih)
18373# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18374#elif defined(MFC_OpenMP)
18375# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18376!$omp target enter data map(always,alloc:ih)
18377# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18378#endif
18379# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18380
18381# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18382 if (interface_file == '.') then
18383# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18384 call s_mpi_abort("Error: interface_file must be specified for hcid=304")
18385# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18386 else
18387# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18388 inquire (file=trim(interface_file), exist=file_exist)
18389# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18390 if (file_exist) then
18391# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18392 open (unit=10, file=trim(interface_file), status="old", action="read")
18393# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18394 do i = 0, n_glb
18395# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18396 read (10, '(A)') line ! Read a full line as a string
18397# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18398 start = 1
18399# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18400
18401# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18402 do j = 0, p_glb
18403# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18404 end = index(line(start:), ',') ! Find the next comma
18405# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18406 if (end == 0) then
18407# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18408 value = trim(adjustl(line(start:))) ! Last value in the line
18409# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18410 else
18411# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18412 value = trim(adjustl(line(start:start + end - 2))) ! Extract substring
18413# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18414 start = start + end ! Move to next value
18415# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18416 end if
18417# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18418 read (value, *) ih(i, j) ! Convert string to numeric value
18419# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18420 if (.not. f_is_default(normmag)) ih(i, j) = ih(i, j)*normmag
18421# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18422 if (.not. f_is_default(normfac)) ih(i, j) = ih(i, j) + normfac
18423# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18424 end do
18425# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18426 end do
18427# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18428 close (10)
18429# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18430 else
18431# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18432 call s_mpi_abort("Error: interface_file specified for hcid=304 does not exist")
18433# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18434 end if
18435# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18436 end if
18437# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18438 end if
18439# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18440
18441# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18442 if (patch_icpp(patch_id)%hcid == 305) then ! 3D Axisymmetric interface from file
18443# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18444#ifdef MFC_DEBUG
18445# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18446 block
18447# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18448 use iso_fortran_env, only: output_unit
18449# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18450
18451# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18452 print *, 'm_icpp_patches.fpp:678: ', '@:ALLOCATE(ih(0:n_glb, 0:0))'
18453# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18454
18455# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18456 call flush (output_unit)
18457# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18458 end block
18459# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18460#endif
18461# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18462 allocate (ih(0:n_glb, 0:0))
18463# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18464
18465# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18466
18467# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18468#if defined(MFC_OpenACC)
18469# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18470!$acc enter data create(ih)
18471# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18472#elif defined(MFC_OpenMP)
18473# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18474!$omp target enter data map(always,alloc:ih)
18475# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18476#endif
18477# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18478 if (interface_file == '.') then
18479# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18480 call s_mpi_abort("Error: interface_file must be specified for hcid=305")
18481# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18482 else
18483# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18484 inquire (file=trim(interface_file), exist=file_exist)
18485# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18486 if (file_exist) then
18487# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18488 open (unit=10, file=trim(interface_file), status="old", action="read")
18489# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18490 do i = 0, n_glb
18491# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18492 read (10, '(A)') line ! Read a full line as a string
18493# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18494 value = trim(line)
18495# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18496 read (value, *) ih(i, 0) ! Convert string to numeric value
18497# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18498 if (.not. f_is_default(normmag)) ih(i, 0) = ih(i, 0)*normmag
18499# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18500 if (.not. f_is_default(normfac)) ih(i, 0) = ih(i, 0) + normfac
18501# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18502 end do
18503# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18504 close (10)
18505# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18506 else
18507# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18508 call s_mpi_abort("Error: interface_file specified for hcid=305 does not exist")
18509# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18510 end if
18511# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18512 end if
18513# 678 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18514 end if
18515
18516 ! Transferring the centroid information of the line to be swept
18517 x_centroid = patch_icpp(patch_id)%x_centroid
18518 y_centroid = patch_icpp(patch_id)%y_centroid
18519 smooth_patch_id = patch_icpp(patch_id)%smooth_patch_id
18520 smooth_coeff = patch_icpp(patch_id)%smooth_coeff
18521
18522 ! Obtaining coefficients of the equation describing the sweep line
18523 a = patch_icpp(patch_id)%normal(1)
18524 b = patch_icpp(patch_id)%normal(2)
18525 c = -a*x_centroid - b*y_centroid
18526
18527 ! Initialize eta=1; modified if smoothing is enabled
18528 eta = 1._wp
18529
18530 ! Assign patch vars if cell is covered and patch has write permission
18531 do j = 0, n
18532 do i = 0, m
18533 if (patch_icpp(patch_id)%smoothen) then
18534 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))
18535 end if
18536
18537 if ((a*x_cc(i) + b*y_cc(j) + c >= 0._wp .and. patch_icpp(patch_id)%alter_patch(patch_id_fp(i, j, &
18538 & 0))) .or. patch_id_fp(i, j, 0) == smooth_patch_id) then
18539 call s_assign_patch_primitive_variables(patch_id, i, j, 0, eta, q_prim_vf, patch_id_fp)
18540
18541
18542 if (patch_icpp(patch_id)%hcid /= dflt_int) then
18543 select case (patch_icpp(patch_id)%hcid)
18544# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18545 case (300) ! Rayleigh-Taylor instability
18546# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18547 rhoh = 3._wp
18548# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18549 rhol = 1._wp
18550# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18551 pref = 1.e5_wp
18552# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18553 pint = pref
18554# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18555 h = 0.7_wp
18556# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18557 lam = 0.2_wp
18558# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18559 wl = 2._wp*pi/lam
18560# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18561 amp = 0.025_wp/wl
18562# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18563
18564# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18565 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
18566# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18567
18568# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18569 alph = 5.e-1_wp*(1._wp + tanh((y_cc(j) - inth)/2.5e-3_wp))
18570# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18571
18572# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18573 if (alph < eps) alph = eps
18574# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18575 if (alph > 1._wp - eps) alph = 1._wp - eps
18576# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18577
18578# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18579 if (y_cc(j) > inth) then
18580# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18581 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
18582# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18583 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
18584# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18585 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = alph*rhoh
18586# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18587 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = (1._wp - alph)*rhol
18588# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18589 q_prim_vf(eqn_idx%E)%sf(i, j, k) = pref + rhoh*9.81_wp*(1.2_wp - y_cc(j))
18590# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18591 else
18592# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18593 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
18594# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18595 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
18596# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18597 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = alph*rhoh
18598# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18599 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = (1._wp - alph)*rhol
18600# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18601 pint = pref + rhoh*9.81_wp*(1.2_wp - inth)
18602# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18603 q_prim_vf(eqn_idx%E)%sf(i, j, k) = pint + rhol*9.81_wp*(inth - y_cc(j))
18604# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18605 end if
18606# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18607 case (301) ! (3D lung geometry in X direction, |sin(*)+sin(*)|)
18608# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18609 h = 0.0_wp
18610# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18611 lam = 1.0_wp
18612# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18613 amp = patch_icpp(patch_id)%a(2)
18614# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18615 inth = amp*abs((sin(2*pi*y_cc(j)/lam - pi/2) + sin(2*pi*z_cc(k)/lam - pi/2)) + h)
18616# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18617 if (x_cc(i) > inth) then
18618# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18619 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = patch_icpp(1)%alpha_rho(1)
18620# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18621 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = patch_icpp(1)%alpha_rho(2)
18622# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18623 q_prim_vf(eqn_idx%E)%sf(i, j, k) = patch_icpp(1)%pres
18624# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18625 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = patch_icpp(1)%alpha(1)
18626# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18627 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = patch_icpp(1)%alpha(2)
18628# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18629 end if
18630# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18631 case (302) ! 3D Jet with IGR
18632# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18633 ux_th = 10*sqrt(1.4*0.4)
18634# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18635 ux_am = 0.0*sqrt(1.4)
18636# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18637 p_th = 2.0_wp
18638# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18639 p_am = 1.0_wp
18640# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18641 rho_th = 1._wp
18642# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18643 rho_am = 1._wp
18644# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18645 y_th = 0.0_wp
18646# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18647 z_th = 0.0_wp
18648# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18649 r_th = 1._wp
18650# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18651 eps_smooth = 1._wp
18652# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18653 eps = 1e-6
18654# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18655
18656# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18657 r = sqrt((y_cc(j) - y_th)**2._wp + (z_cc(k) - z_th)**2._wp)
18658# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18659 rcut = f_cut_on(r - r_th, eps_smooth)
18660# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18661 xcut = f_cut_on(x_cc(i), eps_smooth)
18662# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18663
18664# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18665 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, k) = ux_th*rcut*xcut + ux_am
18666# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18667 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, k) = 0._wp
18668# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18669 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0._wp
18670# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18671
18672# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18673 if (num_fluids == 1) then
18674# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18675 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = (rho_th - rho_am)*rcut*xcut + rho_am
18676# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18677 else
18678# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18679 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = (1._wp - 2._wp*eps)*rcut*xcut + eps
18680# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18681 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = rho_th*q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)
18682# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18683 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))
18684# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18685 end if
18686# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18687
18688# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18689 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p_th*rcut*xcut + p_am
18690# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18691 case (303) ! 3D Multijet
18692# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18693 eps_smooth = 3.0_wp
18694# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18695 ux_th = 10*sqrt(1.4*0.4)
18696# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18697 ux_am = 2.5*sqrt(1.4*0.4)
18698# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18699 p_th = 0.8_wp
18700# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18701 p_am = 0.4_wp
18702# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18703 rho_th = 1._wp
18704# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18705 rho_am = 1._wp
18706# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18707 eps = 1e-6
18708# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18709
18710# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18711 rcut = rcut_arr(j, k)
18712# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18713 xcut = f_cut_on(x_cc(i), eps_smooth)
18714# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18715
18716# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18717 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, k) = ux_th*rcut*xcut + ux_am
18718# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18719 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, k) = 0._wp
18720# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18721 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0._wp
18722# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18723
18724# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18725 if (num_fluids == 1) then
18726# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18727 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = (rho_th - rho_am)*rcut*xcut + rho_am
18728# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18729 else
18730# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18731 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = (1._wp - 2._wp*eps)*rcut*xcut + eps
18732# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18733 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = rho_th*q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)
18734# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18735 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))
18736# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18737 end if
18738# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18739
18740# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18741 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p_th*rcut*xcut + p_am
18742# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18743 case (304) ! 3D Interface from file cartesian
18744# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18745 alph = 0.5_wp*(1 + (1._wp - 2._wp*eps)*tanh((ih(start_idx(2) + j, start_idx(3) + k) - x_cc(i))*(0.5_wp/dx)))
18746# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18747
18748# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18749 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
18750# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18751 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
18752# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18753
18754# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18755 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)*(950._wp/1000._wp)
18756# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18757 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = q_prim_vf(eqn_idx%adv%end)%sf(i, j, k)*(1._wp/1000._wp)
18758# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18759
18760# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18761 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p0_ic + (q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) + q_prim_vf(eqn_idx%cont%end)%sf(i, &
18762# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18763 & j, k))*g0_ic*(ih(start_idx(2) + j, start_idx(3) + k) - x_cc(i))
18764# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18765
18766# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18767 if (surface_tension) q_prim_vf(eqn_idx%c)%sf(i, j, k) = alph
18768# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18769 case (305) ! 3D Interface from file axisymmetric
18770# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18771 alph = 0.5_wp*(1 + (1._wp - 2._wp*eps)*tanh((ih(start_idx(2) + j, 0) - x_cc(i))*(0.01_wp/dx)))
18772# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18773
18774# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18775 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
18776# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18777 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
18778# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18779
18780# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18781 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)*1._wp
18782# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18783 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = q_prim_vf(eqn_idx%adv%end)%sf(i, j, k)*(1._wp/950._wp)
18784# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18785
18786# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18787 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p0_ic + (q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) + q_prim_vf(eqn_idx%cont%end)%sf(i, &
18788# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18789 & j, k))*g0_ic*(ih(start_idx(1) + i, start_idx(3) + k) - y_cc(j))
18790# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18791
18792# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18793 if (surface_tension) q_prim_vf(eqn_idx%c)%sf(i, j, k) = alph
18794# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18795 case (370) ! 3D extrusion of 2D profile from external data
18796# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18797 ! This hardcoded case extrudes a 2D profile to initialize a 3D simulation domain
18798# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18799 if (.not. files_loaded) then
18800# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18801 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
18802# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18803 do f = 1, max_files
18804# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18805 write (file_num_str, '(I0)') f
18806# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18807 filenames(f) = trim(files_dir) // "/" // "prim." // trim(file_num_str) // ".00." // trim(file_extension) // ".dat"
18808# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18809 end do
18810# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18811
18812# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18813 ! Common file reading setup
18814# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18815 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
18816# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18817 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
18818# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18819
18820# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18821 select case (num_dims)
18822# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18823 case (1, 2) ! 1D and 2D cases are similar
18824# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18825 ! Count lines
18826# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18827 line_count = 0
18828# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18829 do
18830# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18831 read (unit2, *, iostat=ios2) dummy_x, dummy_y
18832# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18833 if (ios2 /= 0) exit
18834# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18835 line_count = line_count + 1
18836# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18837 end do
18838# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18839 close (unit2)
18840# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18841
18842# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18843 xrows = line_count
18844# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18845 yrows = 1
18846# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18847 index_x = 0
18848# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18849 if (num_dims == 2) index_x = i
18850# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18851#ifdef MFC_DEBUG
18852# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18853 block
18854# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18855 use iso_fortran_env, only: output_unit
18856# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18857
18858# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18859 print *, 'm_icpp_patches.fpp:707: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
18860# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18861
18862# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18863 call flush (output_unit)
18864# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18865 end block
18866# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18867#endif
18868# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18869 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
18870# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18871
18872# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18873
18874# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18875
18876# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18877#if defined(MFC_OpenACC)
18878# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18879!$acc enter data create(x_coords, stored_values)
18880# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18881#elif defined(MFC_OpenMP)
18882# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18883!$omp target enter data map(always,alloc:x_coords, stored_values)
18884# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18885#endif
18886# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18887
18888# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18889 ! Read data from all files
18890# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18891 do f = 1, max_files
18892# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18893 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
18894# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18895 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
18896# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18897
18898# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18899 do iter = 1, xrows
18900# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18901 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
18902# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18903 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
18904# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18905 end do
18906# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18907 close (unit)
18908# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18909 end do
18910# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18911
18912# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18913 ! Calculate offsets
18914# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18915 domain_xstart = x_coords(1)
18916# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18917 x_step = x_cc(1) - x_cc(0)
18918# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18919 delta_x = merge(x_cc(0) - domain_xstart, x_cc(index_x) - domain_xstart, num_dims == 1)
18920# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18921 global_offset_x = nint(abs(delta_x)/x_step)
18922# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18923 case (3) ! 3D case - determine grid structure
18924# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18925 ! Find yRows by counting rows with same x
18926# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18927 read (unit2, *, iostat=ios2) x0, y0, dummy_z
18928# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18929 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
18930# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18931
18932# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18933 yrows = 1
18934# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18935 do
18936# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18937 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
18938# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18939 if (ios2 /= 0) exit
18940# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18941 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
18942# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18943 yrows = yrows + 1
18944# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18945 else
18946# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18947 exit
18948# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18949 end if
18950# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18951 end do
18952# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18953 close (unit2)
18954# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18955
18956# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18957 ! Count total rows
18958# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18959 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
18960# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18961 nrows = 0
18962# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18963 do
18964# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18965 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
18966# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18967 if (ios2 /= 0) exit
18968# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18969 nrows = nrows + 1
18970# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18971 end do
18972# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18973 close (unit2)
18974# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18975
18976# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18977 xrows = nrows/yrows
18978# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18979#ifdef MFC_DEBUG
18980# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18981 block
18982# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18983 use iso_fortran_env, only: output_unit
18984# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18985
18986# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18987 print *, 'm_icpp_patches.fpp:707: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
18988# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18989
18990# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18991 call flush (output_unit)
18992# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18993 end block
18994# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18995#endif
18996# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18997 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
18998# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
18999
19000# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19001
19002# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19003
19004# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19005
19006# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19007#if defined(MFC_OpenACC)
19008# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19009!$acc enter data create(x_coords, y_coords, stored_values)
19010# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19011#elif defined(MFC_OpenMP)
19012# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19013!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
19014# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19015#endif
19016# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19017 index_x = i
19018# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19019 index_y = j
19020# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19021
19022# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19023 ! Read all files
19024# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19025 do f = 1, max_files
19026# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19027 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
19028# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19029 if (ios /= 0) then
19030# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19031 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
19032# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19033 cycle
19034# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19035 end if
19036# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19037
19038# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19039 iter = 0
19040# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19041 do iix = 1, xrows
19042# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19043 do iiy = 1, yrows
19044# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19045 iter = iter + 1
19046# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19047 if (f == 1) then
19048# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19049 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
19050# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19051 else
19052# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19053 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
19054# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19055 end if
19056# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19057 if (ios /= 0) call s_mpi_abort("Error reading data")
19058# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19059 end do
19060# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19061 end do
19062# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19063 close (unit)
19064# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19065 end do
19066# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19067
19068# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19069 ! Calculate offsets
19070# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19071 x_step = x_cc(1) - x_cc(0)
19072# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19073 y_step = y_cc(1) - y_cc(0)
19074# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19075 delta_x = x_cc(index_x) - x_coords(1)
19076# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19077 delta_y = y_cc(index_y) - y_coords(1)
19078# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19079 global_offset_x = nint(abs(delta_x)/x_step)
19080# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19081 global_offset_y = nint(abs(delta_y)/y_step)
19082# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19083 end select
19084# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19085
19086# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19087 files_loaded = .true.
19088# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19089 end if
19090# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19091
19092# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19093 ! Data assignment
19094# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19095 select case (num_dims)
19096# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19097 case (1)
19098# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19099 idx = i + 1 + global_offset_x
19100# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19101 ! idx must land inside the file's row range: this rank's subdomain offset
19102# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19103 ! (global_offset_x) was derived from this rank's own grid, so a miss means the
19104# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19105 ! IC file is misaligned/mis-sized for the run grid, not a normal boundary case.
19106# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19107 if (idx < 1 .or. idx > xrows) &
19108# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19109 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
19110# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19111 do f = 1, sys_size
19112# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19113 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
19114# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19115 end do
19116# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19117 case (2)
19118# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19119 idx = i + 1 + global_offset_x - index_x
19120# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19121 if (idx < 1 .or. idx > xrows) &
19122# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19123 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
19124# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19125 do f = 1, sys_size - 1
19126# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19127 jump = merge(1, 0, f >= eqn_idx%mom%end)
19128# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19129 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
19130# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19131 end do
19132# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19133 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
19134# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19135 case (3)
19136# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19137 idx = i + 1 + global_offset_x - index_x
19138# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19139 idy = j + 1 + global_offset_y - index_y
19140# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19141 if (idx < 1 .or. idx > xrows .or. idy < 1 .or. idy > yrows) &
19142# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19143 & call s_mpi_abort("Hardcoded IC extrusion: row/column index out of range (IC file misaligned with the run grid)")
19144# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19145 do f = 1, sys_size - 1
19146# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19147 jump = merge(1, 0, f >= eqn_idx%mom%end)
19148# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19149 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
19150# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19151 end do
19152# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19153 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
19154# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19155 end select
19156# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19157 case (380) ! Taylor-Green vortex
19158# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19159 ! This is patch is hard-coded for test suite optimization used in the 3D_TaylorGreenVortex case: This analytic patch used
19160# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19161 ! geometry 9
19162# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19163 mach = 0.1
19164# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19165 if (patch_id == 1) then
19166# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19167 q_prim_vf(eqn_idx%E)%sf(i, j, &
19168# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19169 & 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)
19170# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19171 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)
19172# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19173 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)
19174# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19175 end if
19176# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19177 case default
19178# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19179 call s_int_to_str(patch_id, istr)
19180# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19181 call s_mpi_abort("Invalid hcid specified for patch " // trim(istr))
19182# 707 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19183 end select
19184 end if
19185
19186 ! Updating the patch identities bookkeeping variable
19187 if (1._wp - eta < sgm_eps) patch_id_fp(i, j, 0) = patch_id
19188 end if
19189 end do
19190 end do
19191 if (allocated(stored_values)) then
19192# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19193#ifdef MFC_DEBUG
19194# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19195 block
19196# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19197 use iso_fortran_env, only: output_unit
19198# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19199
19200# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19201 print *, 'm_icpp_patches.fpp:715: ', '@:DEALLOCATE(stored_values)'
19202# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19203
19204# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19205 call flush (output_unit)
19206# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19207 end block
19208# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19209#endif
19210# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19211
19212# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19213#if defined(MFC_OpenACC)
19214# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19215!$acc exit data delete(stored_values)
19216# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19217#elif defined(MFC_OpenMP)
19218# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19219!$omp target exit data map(release:stored_values)
19220# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19221#endif
19222# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19223 deallocate (stored_values)
19224# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19225#ifdef MFC_DEBUG
19226# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19227 block
19228# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19229 use iso_fortran_env, only: output_unit
19230# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19231
19232# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19233 print *, 'm_icpp_patches.fpp:715: ', '@:DEALLOCATE(x_coords)'
19234# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19235
19236# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19237 call flush (output_unit)
19238# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19239 end block
19240# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19241#endif
19242# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19243
19244# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19245#if defined(MFC_OpenACC)
19246# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19247!$acc exit data delete(x_coords)
19248# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19249#elif defined(MFC_OpenMP)
19250# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19251!$omp target exit data map(release:x_coords)
19252# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19253#endif
19254# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19255 deallocate (x_coords)
19256# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19257 end if
19258# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19259
19260# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19261 if (allocated(y_coords)) then
19262# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19263#ifdef MFC_DEBUG
19264# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19265 block
19266# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19267 use iso_fortran_env, only: output_unit
19268# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19269
19270# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19271 print *, 'm_icpp_patches.fpp:715: ', '@:DEALLOCATE(y_coords)'
19272# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19273
19274# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19275 call flush (output_unit)
19276# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19277 end block
19278# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19279#endif
19280# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19281
19282# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19283#if defined(MFC_OpenACC)
19284# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19285!$acc exit data delete(y_coords)
19286# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19287#elif defined(MFC_OpenMP)
19288# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19289!$omp target exit data map(release:y_coords)
19290# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19291#endif
19292# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19293 deallocate (y_coords)
19294# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19295 end if
19296# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19297
19298# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19299 files_loaded = .false.
19300# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19301
19302# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19303 if (allocated(stored_values274)) then
19304# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19305#ifdef MFC_DEBUG
19306# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19307 block
19308# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19309 use iso_fortran_env, only: output_unit
19310# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19311
19312# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19313 print *, 'm_icpp_patches.fpp:715: ', '@:DEALLOCATE(stored_values274)'
19314# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19315
19316# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19317 call flush (output_unit)
19318# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19319 end block
19320# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19321#endif
19322# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19323
19324# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19325#if defined(MFC_OpenACC)
19326# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19327!$acc exit data delete(stored_values274)
19328# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19329#elif defined(MFC_OpenMP)
19330# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19331!$omp target exit data map(release:stored_values274)
19332# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19333#endif
19334# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19335 deallocate (stored_values274)
19336# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19337 end if
19338# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19339
19340# 715 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19341 files_loaded274 = .false.
19342
19343 end subroutine s_icpp_sweep_line
19344
19345 !> The Taylor Green vortex is 2D decaying vortex that may be used, for example, to verify the effects of viscous attenuation.
19346 !! Geometry of the patch is well-defined when its centroid are provided.
19347 subroutine s_icpp_2d_taylorgreen_vortex(patch_id, patch_id_fp, q_prim_vf)
19348
19349 integer, intent(in) :: patch_id
19350
19351#ifdef MFC_MIXED_PRECISION
19352 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
19353#else
19354 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
19355#endif
19356 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
19357 integer :: i, j, k !< generic loop iterators
19358 real(wp) :: pi_inf, gamma, lit_gamma !< equation of state parameters
19359 real(wp) :: L0, U0 !< Taylor Green Vortex parameters
19360
19361 integer :: xRows, yRows, nRows, iix, iiy, max_files
19362# 735 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19363 integer :: f, iter, unit, unit2, idx, idy, index_x, index_y, jump, line_count
19364# 735 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19365 real(wp) :: x_step, y_step
19366# 735 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19367 real(wp) :: dummy_x, dummy_y, dummy_z, x0, y0
19368# 735 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19369 integer :: global_offset_x, global_offset_y !< MPI subdomain offset
19370# 735 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19371 real(wp) :: delta_x, delta_y
19372# 735 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19373 character(len=300), dimension(sys_size) :: fileNames !< Arrays to store all data from files
19374# 735 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19375 real(wp), allocatable :: stored_values(:,:,:)
19376# 735 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19377 real(wp), allocatable :: x_coords(:), y_coords(:)
19378# 735 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19379 logical :: files_loaded = .false.
19380# 735 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19381 real(wp) :: domain_xstart
19382# 735 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19383 character(len=20) :: file_num_str !< For storing the file number as a string
19384# 735 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19385 integer :: ios
19386# 735 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19387 integer :: ios2
19388# 735 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19389
19390# 735 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19391 ! hcid=274 (2dHardcodedIC.fpp): full 2D field from external data, no extrusion.
19392# 735 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19393 ! Declared here (not in Hardcoded2DVariables()) so it's visible wherever
19394# 735 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19395 ! HardcodedDeallocation() is called, matching the pattern of stored_values/x_coords/
19396# 735 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19397 ! y_coords/files_loaded above.
19398# 735 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19399 real(wp), allocatable, dimension(:,:,:) :: stored_values274
19400# 735 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19401 logical :: files_loaded274 = .false.
19402# 735 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19403 integer :: f274, ix274, iy274, unit274, ios274
19404# 735 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19405 integer :: local_ix_beg274, local_iy_beg274
19406# 735 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19407 character(len=300) :: fname274
19408# 735 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19409 character(len=20) :: file_num_str274
19410# 735 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19411 real(wp) :: dummy_x274, dummy_y274, dummy_val274, x0_274, y0_274, x_step274, y_step274
19412# 735 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19413 real(wp) :: file_dx274, file_dy274, r_align274
19414 ! Place any declaration of intermediate variables here
19415# 736 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19416 real(wp) :: eps, eps_mhd, C_mhd
19417# 736 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19418 real(wp) :: r, rmax, gam, umax, p0
19419# 736 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19420 real(wp) :: rhoH, rhoL, pRef, pInt, h, lam, wl, amp, intH, intL, alph
19421# 736 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19422 real(wp) :: factor, x1c, y1c, x2c, y2c, r1c, r2c, cvortex, u1c, u2c, v1c, v2c, rvortex
19423# 736 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19424 real(wp) :: r0, alpha, r2
19425# 736 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19426 real(wp) :: sinA, cosA
19427# 736 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19428 real(wp) :: r_sq
19429# 736 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19430
19431# 736 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19432 ! # 283 - Gauss-averaged isentropic vortex (conserved-variable cell averages)
19433# 736 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19434 real(wp) :: gauss_xi(3), gauss_w(3), xq, yq, r2q, T_facq, wq
19435# 736 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19436 real(wp) :: rho_avg, rhou_avg, rhov_avg, E_avg
19437# 736 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19438 real(wp) :: rhoq, pq, uq, vq, Eq, vortex_eps
19439# 736 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19440 integer :: igq, jgq
19441# 736 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19442
19443# 736 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19444 ! # 291 - Shear/Thermal Layer Case
19445# 736 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19446 real(wp) :: delta_shear, u_max, u_mean
19447# 736 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19448 real(wp) :: T_wall, T_inf, P_atm, T_loc
19449# 736 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19450 real(wp) :: delta_th, R_mix
19451# 736 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19452 real(wp) :: Y_N2, Y_O2, MW_N2, MW_O2
19453# 736 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19454 real(wp) :: bottom_blend_u, bottom_blend_T
19455# 736 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19456
19457# 736 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19458 ! # 207
19459# 736 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19460 real(wp) :: sigma, gauss1, gauss2
19461# 736 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19462
19463# 736 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19464 ! # 208
19465# 736 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19466 real(wp) :: ei, d, fsm, alpha_air, alpha_sf6
19467# 736 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19468 real(wp) :: y_center, y_dist, wave_phase, front_shift, x_mapped, interp_wt
19469# 736 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19470 integer :: v, idx_lo, idx_hi, idx_mid
19471# 736 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19472 real(wp), parameter :: Ly_param = 0.00775735_wp
19473# 736 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19474 real(wp), parameter :: A_param = 0.1_wp*96.9880867_wp*10.0_wp**(-6.0_wp)
19475# 736 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19476 integer, parameter :: Nwaves = 6
19477# 736 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19478 real(wp), parameter :: y0_ref = 0.0_wp
19479# 736 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19480
19481# 736 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19482 eps = 1.e-9_wp
19483
19484 pi_inf = pi_infs(1)
19485 gamma = gammas(1)
19486 lit_gamma = gs_min(1)
19487
19488 ! Transferring the patch's centroid and length information
19489 x_centroid = patch_icpp(patch_id)%x_centroid
19490 y_centroid = patch_icpp(patch_id)%y_centroid
19491 length_x = patch_icpp(patch_id)%length_x
19492 length_y = patch_icpp(patch_id)%length_y
19493
19494 ! Computing the beginning and the end x- and y-coordinates of the patch based on its centroid and lengths
19495 x_boundary%beg = x_centroid - 0.5_wp*length_x
19496 x_boundary%end = x_centroid + 0.5_wp*length_x
19497 y_boundary%beg = y_centroid - 0.5_wp*length_y
19498 y_boundary%end = y_centroid + 0.5_wp*length_y
19499
19500 ! Set eta=1 (no smoothing for this patch type)
19501 eta = 1._wp
19502 ! U0 is the characteristic velocity of the vortex
19503 u0 = patch_icpp(patch_id)%vel(1)
19504 ! L0 is the characteristic length of the vortex
19505 l0 = patch_icpp(patch_id)%vel(2)
19506 ! Assign patch vars if cell is covered and patch has write permission
19507 do j = 0, n
19508 do i = 0, m
19509 if (f_is_inside_cuboid(x_cc(i) - x_centroid, y_cc(j) - y_centroid, 0._wp, [length_x, length_y, &
19510 & 0._wp]) .and. patch_icpp(patch_id)%alter_patch(patch_id_fp(i, j, 0))) then
19511 call s_assign_patch_primitive_variables(patch_id, i, j, 0, eta, q_prim_vf, patch_id_fp)
19512
19513
19514 if (patch_icpp(patch_id)%hcid /= dflt_int) then
19515 select case (patch_icpp(patch_id)%hcid) ! 2D_hardcoded_ic example case
19516# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19517 case (200) ! Two-fluid cubic interface
19518# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19519 if (y_cc(j) <= (-x_cc(i)**3 + 1)**(1._wp/3._wp)) then
19520# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19521 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = eps
19522# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19523 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = 1._wp - eps
19524# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19525 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = eps*1000._wp
19526# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19527 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = (1._wp - eps)*1._wp
19528# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19529 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1000._wp
19530# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19531 end if
19532# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19533 case (202) ! Gresho vortex (Gouasmi et al 2022 JCP)
19534# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19535 r = ((x_cc(i) - 0.5_wp)**2 + (y_cc(j) - 0.5_wp)**2)**0.5_wp
19536# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19537 rmax = 0.2_wp
19538# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19539
19540# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19541 gam = 1._wp + 1._wp/fluid_pp(1)%gamma
19542# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19543 umax = 2*pi*rmax*patch_icpp(patch_id)%vel(2)
19544# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19545 p0 = umax**2*(1._wp/(gam*patch_icpp(patch_id)%vel(2)**2) - 0.5_wp)
19546# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19547
19548# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19549 if (r < rmax) then
19550# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19551 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -(y_cc(j) - 0.5_wp)*umax/rmax
19552# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19553 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = (x_cc(i) - 0.5_wp)*umax/rmax
19554# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19555 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*((r/rmax)**2._wp/2._wp)
19556# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19557 else if (r < 2*rmax) then
19558# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19559 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -((y_cc(j) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
19560# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19561 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = ((x_cc(i) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
19562# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19563 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)))
19564# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19565 else
19566# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19567 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 0._wp
19568# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19569 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0._wp
19570# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19571 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*(-2 + 4*log(2._wp))
19572# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19573 end if
19574# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19575 case (203) ! Gresho vortex (Gouasmi et al 2022 JCP) with density correction
19576# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19577 r = ((x_cc(i) - 0.5_wp)**2._wp + (y_cc(j) - 0.5_wp)**2)**0.5_wp
19578# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19579 rmax = 0.2_wp
19580# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19581
19582# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19583 gam = 1._wp + 1._wp/fluid_pp(1)%gamma
19584# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19585 umax = 2*pi*rmax*patch_icpp(patch_id)%vel(2)
19586# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19587 p0 = umax**2*(1._wp/(gam*patch_icpp(patch_id)%vel(2)**2) - 0.5_wp)
19588# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19589
19590# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19591 if (r < rmax) then
19592# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19593 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -(y_cc(j) - 0.5_wp)*umax/rmax
19594# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19595 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = (x_cc(i) - 0.5_wp)*umax/rmax
19596# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19597 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2*((r/rmax)**2._wp/2._wp)
19598# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19599 else if (r < 2*rmax) then
19600# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19601 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -((y_cc(j) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
19602# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19603 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = ((x_cc(i) - 0.5_wp)/r)*umax*(2._wp - r/rmax)
19604# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19605 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)))
19606# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19607 else
19608# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19609 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 0._wp
19610# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19611 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0._wp
19612# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19613 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p0 + umax**2._wp*(-2._wp + 4*log(2._wp))
19614# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19615 end if
19616# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19617
19618# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19619 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = q_prim_vf(eqn_idx%E)%sf(i, j, 0)**(1._wp/gam)
19620# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19621 case (204) ! Rayleigh-Taylor instability
19622# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19623 rhoh = 3._wp
19624# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19625 rhol = 1._wp
19626# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19627 pref = 1.e5_wp
19628# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19629 pint = pref
19630# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19631 h = 0.7_wp
19632# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19633 lam = 0.2_wp
19634# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19635 wl = 2._wp*pi/lam
19636# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19637 amp = 0.05_wp/wl
19638# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19639
19640# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19641 inth = amp*sin(2._wp*pi*x_cc(i)/lam - pi/2._wp) + h
19642# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19643
19644# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19645 alph = 0.5_wp*(1._wp + tanh((y_cc(j) - inth)/2.5e-3_wp))
19646# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19647
19648# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19649 if (alph < eps) alph = eps
19650# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19651 if (alph > 1._wp - eps) alph = 1._wp - eps
19652# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19653
19654# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19655 if (y_cc(j) > inth) then
19656# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19657 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = alph
19658# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19659 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = 1._wp - alph
19660# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19661 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = alph*rhoh
19662# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19663 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = (1._wp - alph)*rhol
19664# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19665 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = pref + rhoh*9.81_wp*(1.2_wp - y_cc(j))
19666# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19667 else
19668# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19669 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = alph
19670# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19671 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = 1._wp - alph
19672# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19673 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = alph*rhoh
19674# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19675 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = (1._wp - alph)*rhol
19676# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19677 pint = pref + rhoh*9.81_wp*(1.2_wp - inth)
19678# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19679 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = pint + rhol*9.81_wp*(inth - y_cc(j))
19680# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19681 end if
19682# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19683 case (205) ! 2D lung wave interaction problem
19684# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19685 h = 0.0_wp ! non dim origin y
19686# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19687 lam = 1.0_wp ! non dim lambda
19688# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19689 amp = patch_icpp(patch_id)%a(2) ! to be changed later! !non dim amplitude
19690# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19691
19692# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19693 inth = amp*sin(2*pi*x_cc(i)/lam - pi/2) + h
19694# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19695
19696# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19697 if (y_cc(j) > inth) then
19698# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19699 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(1)
19700# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19701 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(2)
19702# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19703 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = patch_icpp(1)%pres
19704# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19705 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = patch_icpp(1)%alpha(1)
19706# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19707 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = patch_icpp(1)%alpha(2)
19708# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19709 end if
19710# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19711 case (206) ! 2D lung wave interaction problem - horizontal domain
19712# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19713 h = 0.0_wp ! non dim origin y
19714# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19715 lam = 1.0_wp ! non dim lambda
19716# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19717 amp = patch_icpp(patch_id)%a(2)
19718# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19719
19720# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19721 intl = amp*sin(2*pi*y_cc(j)/lam - pi/2) + h
19722# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19723
19724# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19725 if (x_cc(i) > intl) then ! this is the liquid
19726# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19727 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(1)
19728# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19729 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = patch_icpp(1)%alpha_rho(2)
19730# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19731 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = patch_icpp(1)%pres
19732# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19733 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = patch_icpp(1)%alpha(1)
19734# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19735 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = patch_icpp(1)%alpha(2)
19736# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19737 end if
19738# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19739 case (207) ! Kelvin Helmholtz Instability
19740# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19741 sigma = 0.05_wp/sqrt(2.0_wp)
19742# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19743 gauss1 = exp(-(y_cc(j) - 0.75_wp)**2/(2.0_wp*sigma**2))
19744# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19745 gauss2 = exp(-(y_cc(j) - 0.25_wp)**2/(2.0_wp*sigma**2))
19746# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19747 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)
19748# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19749 case (208) ! Richtmeyer Meshkov Instability
19750# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19751 lam = 1.0_wp
19752# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19753 eps = 1.0e-6_wp
19754# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19755 ei = 5.0_wp
19756# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19757 ! Smoothening function to smooth out sharp discontinuity in the interface
19758# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19759 if (x_cc(i) <= 0.7_wp*lam) then
19760# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19761 d = x_cc(i) - lam*(0.4_wp - 0.1_wp*sin(2.0_wp*pi*(y_cc(j)/lam + 0.25_wp)))
19762# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19763 fsm = 0.5_wp*(1.0_wp + erf(d/(ei*sqrt(dx*dy))))
19764# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19765 alpha_air = eps + (1.0_wp - 2.0_wp*eps)*fsm
19766# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19767 alpha_sf6 = 1.0_wp - alpha_air
19768# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19769 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = alpha_sf6*5.04_wp
19770# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19771 q_prim_vf(eqn_idx%cont%end)%sf(i, j, 0) = alpha_air*1.0_wp
19772# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19773 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, 0) = alpha_sf6
19774# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19775 q_prim_vf(eqn_idx%adv%end)%sf(i, j, 0) = alpha_air
19776# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19777 end if
19778# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19779 case (250) ! MHD Orszag-Tang vortex
19780# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19781 ! 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),
19782# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19783 ! sin(4*pi*x)/sqrt(4*pi), 0)
19784# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19785
19786# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19787 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -sin(2._wp*pi*y_cc(j))
19788# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19789 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = sin(2._wp*pi*x_cc(i))
19790# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19791
19792# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19793 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = -sin(2._wp*pi*y_cc(j))/sqrt(4._wp*pi)
19794# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19795 q_prim_vf(eqn_idx%B%beg + 1)%sf(i, j, 0) = sin(4._wp*pi*x_cc(i))/sqrt(4._wp*pi)
19796# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19797 case (251) ! RMHD Cylindrical Blast Wave [Mignone, 2006: Section 4.3.1]
19798# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19799 if (x_cc(i)**2 + y_cc(j)**2 < 0.08_wp**2) then
19800# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19801 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 0.01
19802# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19803 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1.0
19804# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19805 else if (x_cc(i)**2 + y_cc(j)**2 <= 1._wp**2) then
19806# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19807 ! Linear interpolation between r=0.08 and r=1.0
19808# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19809 factor = (1.0_wp - sqrt(x_cc(i)**2 + y_cc(j)**2))/(1.0_wp - 0.08_wp)
19810# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19811 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 0.01_wp*factor + 1.e-4_wp*(1.0_wp - factor)
19812# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19813 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1.0_wp*factor + 3.e-5_wp*(1.0_wp - factor)
19814# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19815 else
19816# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19817 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1.e-4_wp
19818# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19819 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 3.e-5_wp
19820# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19821 end if
19822# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19823
19824# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19825 ! case 252 is for the 2D MHD Rotor problem
19826# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19827 case (252) ! 2D MHD Rotor Problem
19828# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19829 ! Ambient conditions are set in the JSON file. This case imposes the dense, rotating cylinder.
19830# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19831 !
19832# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19833 ! 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
19834# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19835 ! velocity w=20, giving v_tan=2 at r=0.1
19836# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19837
19838# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19839 ! Calculate distance squared from the center
19840# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19841 r_sq = (x_cc(i) - 0.5_wp)**2 + (y_cc(j) - 0.5_wp)**2
19842# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19843
19844# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19845 ! inner radius of 0.1
19846# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19847 if (r_sq <= 0.1**2) then
19848# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19849 ! -- Inside the rotor -- Set density uniformly to 10
19850# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19851 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 10._wp
19852# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19853
19854# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19855 ! Set vup constant rotation of rate v=2 v_x = -omega * (y - y_c) v_y = omega * (x - x_c)
19856# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19857 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -20._wp*(y_cc(j) - 0.5_wp)
19858# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19859 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = 20._wp*(x_cc(i) - 0.5_wp)
19860# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19861
19862# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19863 ! taper width of 0.015
19864# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19865 else if (r_sq <= 0.115**2) then
19866# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19867 ! linearly smooth the function between r = 0.1 and 0.115
19868# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19869 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1._wp + 9._wp*(0.115_wp - sqrt(r_sq))/(0.015_wp)
19870# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19871
19872# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19873 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)
19874# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19875 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)
19876# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19877 end if
19878# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19879 case (253) ! MHD Smooth Magnetic Vortex
19880# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19881 ! Section 5.2 of Implicit hybridized discontinuous Galerkin methods for compressible magnetohydrodynamics C. Ciuca, P.
19882# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19883 ! Fernandez, A. Christophe, N.C. Nguyen, J. Peraire
19884# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19885
19886# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19887 ! velocity
19888# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19889 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))
19890# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19891 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))
19892# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19893
19894# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19895 ! magnetic field
19896# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19897 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)
19898# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19899 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)
19900# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19901
19902# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19903 ! pressure
19904# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19905 q_prim_vf(eqn_idx%E)%sf(i, j, &
19906# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19907 & 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)
19908# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19909 case (260) ! Gaussian Divergence Pulse
19910# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19911 ! Bx(x) = 1 + C * erf((x-0.5)/\sigma) => \partialBx/\partialx = C * (2/\sqrt\pi) * exp[-((x-0.5)/\sigma)**2] * (1/\sigma)
19912# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19913 ! Choose C = \epsilon * \sigma * \sqrt\pi / 2 => \partialBx/\partialx = \epsilon * exp[-((x-0.5)/\sigma)**2] \psi is
19914# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19915 ! initialized to zero everywhere.
19916# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19917
19918# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19919 eps_mhd = patch_icpp(patch_id)%a(2)
19920# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19921 sigma = patch_icpp(patch_id)%a(3)
19922# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19923 c_mhd = eps_mhd*sigma*sqrt(pi)*0.5_wp
19924# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19925
19926# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19927 ! B-field
19928# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19929 q_prim_vf(eqn_idx%B%beg)%sf(i, j, 0) = 1._wp + c_mhd*erf((x_cc(i) - 0.5_wp)/sigma)
19930# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19931 case (261) ! Blob
19932# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19933 r0 = 1._wp/sqrt(8._wp)
19934# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19935 r2 = x_cc(i)**2 + y_cc(j)**2
19936# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19937 r = sqrt(r2)
19938# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19939 alpha = r/r0
19940# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19941 if (alpha < 1) then
19942# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19943 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)
19944# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19945 ! 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)
19946# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19947 ! q_prim_vf(eqn_idx%B%beg)%sf(i,j,0) = 1._wp/(4._wp*pi) * (alpha**8 - 2._wp*alpha**4 + 1._wp)
19948# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19949 ! 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
19950# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19951 end if
19952# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19953 case (262) ! Tilted 2D MHD shock-tube at \alpha = arctan2 (\approx63.4 deg)
19954# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19955 ! rotate by \alpha = atan(2)
19956# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19957 alpha = atan(2._wp)
19958# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19959 cosa = cos(alpha)
19960# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19961 sina = sin(alpha)
19962# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19963 ! projection along shock normal
19964# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19965 r = x_cc(i)*cosa + y_cc(j)*sina
19966# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19967
19968# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19969 if (r <= 0.5_wp) then
19970# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19971 ! LEFT state: \rho=1, v\parallel=+10, v\perp=0, p=20, B\parallel=B\perp=5/\sqrt(4\pi)
19972# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19973 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1._wp
19974# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19975 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 10._wp*cosa
19976# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19977 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = 10._wp*sina
19978# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19979 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 20._wp
19980# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19981 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
19982# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19983 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
19984# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19985 else
19986# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19987 ! RIGHT state: \rho=1, v\parallel=-10, v\perp=0, p=1, B\parallel=B\perp=5/\sqrt(4\pi)
19988# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19989 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = 1._wp
19990# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19991 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = -10._wp*cosa
19992# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19993 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = -10._wp*sina
19994# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19995 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = 1._wp
19996# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19997 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
19998# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
19999 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
20000# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20001 end if
20002# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20003 ! v^z and B^z remain zero by default
20004# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20005 case (270) ! 2D extrusion of 1D profile from external data
20006# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20007 ! This hardcoded case extrudes a 1D profile to initialize a 2D simulation domain
20008# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20009 if (.not. files_loaded) then
20010# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20011 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
20012# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20013 do f = 1, max_files
20014# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20015 write (file_num_str, '(I0)') f
20016# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20017 filenames(f) = trim(files_dir) // "/" // "prim." // trim(file_num_str) // ".00." // trim(file_extension) // ".dat"
20018# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20019 end do
20020# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20021
20022# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20023 ! Common file reading setup
20024# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20025 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
20026# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20027 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
20028# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20029
20030# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20031 select case (num_dims)
20032# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20033 case (1, 2) ! 1D and 2D cases are similar
20034# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20035 ! Count lines
20036# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20037 line_count = 0
20038# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20039 do
20040# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20041 read (unit2, *, iostat=ios2) dummy_x, dummy_y
20042# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20043 if (ios2 /= 0) exit
20044# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20045 line_count = line_count + 1
20046# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20047 end do
20048# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20049 close (unit2)
20050# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20051
20052# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20053 xrows = line_count
20054# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20055 yrows = 1
20056# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20057 index_x = 0
20058# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20059 if (num_dims == 2) index_x = i
20060# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20061#ifdef MFC_DEBUG
20062# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20063 block
20064# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20065 use iso_fortran_env, only: output_unit
20066# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20067
20068# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20069 print *, 'm_icpp_patches.fpp:769: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
20070# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20071
20072# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20073 call flush (output_unit)
20074# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20075 end block
20076# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20077#endif
20078# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20079 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
20080# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20081
20082# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20083
20084# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20085
20086# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20087#if defined(MFC_OpenACC)
20088# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20089!$acc enter data create(x_coords, stored_values)
20090# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20091#elif defined(MFC_OpenMP)
20092# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20093!$omp target enter data map(always,alloc:x_coords, stored_values)
20094# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20095#endif
20096# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20097
20098# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20099 ! Read data from all files
20100# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20101 do f = 1, max_files
20102# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20103 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
20104# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20105 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
20106# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20107
20108# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20109 do iter = 1, xrows
20110# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20111 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
20112# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20113 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
20114# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20115 end do
20116# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20117 close (unit)
20118# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20119 end do
20120# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20121
20122# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20123 ! Calculate offsets
20124# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20125 domain_xstart = x_coords(1)
20126# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20127 x_step = x_cc(1) - x_cc(0)
20128# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20129 delta_x = merge(x_cc(0) - domain_xstart, x_cc(index_x) - domain_xstart, num_dims == 1)
20130# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20131 global_offset_x = nint(abs(delta_x)/x_step)
20132# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20133 case (3) ! 3D case - determine grid structure
20134# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20135 ! Find yRows by counting rows with same x
20136# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20137 read (unit2, *, iostat=ios2) x0, y0, dummy_z
20138# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20139 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
20140# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20141
20142# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20143 yrows = 1
20144# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20145 do
20146# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20147 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
20148# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20149 if (ios2 /= 0) exit
20150# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20151 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
20152# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20153 yrows = yrows + 1
20154# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20155 else
20156# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20157 exit
20158# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20159 end if
20160# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20161 end do
20162# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20163 close (unit2)
20164# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20165
20166# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20167 ! Count total rows
20168# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20169 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
20170# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20171 nrows = 0
20172# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20173 do
20174# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20175 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
20176# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20177 if (ios2 /= 0) exit
20178# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20179 nrows = nrows + 1
20180# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20181 end do
20182# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20183 close (unit2)
20184# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20185
20186# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20187 xrows = nrows/yrows
20188# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20189#ifdef MFC_DEBUG
20190# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20191 block
20192# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20193 use iso_fortran_env, only: output_unit
20194# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20195
20196# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20197 print *, 'm_icpp_patches.fpp:769: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
20198# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20199
20200# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20201 call flush (output_unit)
20202# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20203 end block
20204# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20205#endif
20206# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20207 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
20208# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20209
20210# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20211
20212# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20213
20214# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20215
20216# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20217#if defined(MFC_OpenACC)
20218# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20219!$acc enter data create(x_coords, y_coords, stored_values)
20220# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20221#elif defined(MFC_OpenMP)
20222# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20223!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
20224# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20225#endif
20226# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20227 index_x = i
20228# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20229 index_y = j
20230# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20231
20232# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20233 ! Read all files
20234# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20235 do f = 1, max_files
20236# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20237 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
20238# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20239 if (ios /= 0) then
20240# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20241 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
20242# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20243 cycle
20244# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20245 end if
20246# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20247
20248# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20249 iter = 0
20250# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20251 do iix = 1, xrows
20252# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20253 do iiy = 1, yrows
20254# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20255 iter = iter + 1
20256# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20257 if (f == 1) then
20258# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20259 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
20260# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20261 else
20262# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20263 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
20264# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20265 end if
20266# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20267 if (ios /= 0) call s_mpi_abort("Error reading data")
20268# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20269 end do
20270# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20271 end do
20272# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20273 close (unit)
20274# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20275 end do
20276# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20277
20278# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20279 ! Calculate offsets
20280# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20281 x_step = x_cc(1) - x_cc(0)
20282# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20283 y_step = y_cc(1) - y_cc(0)
20284# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20285 delta_x = x_cc(index_x) - x_coords(1)
20286# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20287 delta_y = y_cc(index_y) - y_coords(1)
20288# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20289 global_offset_x = nint(abs(delta_x)/x_step)
20290# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20291 global_offset_y = nint(abs(delta_y)/y_step)
20292# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20293 end select
20294# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20295
20296# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20297 files_loaded = .true.
20298# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20299 end if
20300# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20301
20302# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20303 ! Data assignment
20304# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20305 select case (num_dims)
20306# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20307 case (1)
20308# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20309 idx = i + 1 + global_offset_x
20310# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20311 ! idx must land inside the file's row range: this rank's subdomain offset
20312# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20313 ! (global_offset_x) was derived from this rank's own grid, so a miss means the
20314# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20315 ! IC file is misaligned/mis-sized for the run grid, not a normal boundary case.
20316# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20317 if (idx < 1 .or. idx > xrows) &
20318# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20319 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
20320# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20321 do f = 1, sys_size
20322# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20323 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
20324# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20325 end do
20326# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20327 case (2)
20328# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20329 idx = i + 1 + global_offset_x - index_x
20330# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20331 if (idx < 1 .or. idx > xrows) &
20332# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20333 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
20334# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20335 do f = 1, sys_size - 1
20336# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20337 jump = merge(1, 0, f >= eqn_idx%mom%end)
20338# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20339 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
20340# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20341 end do
20342# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20343 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
20344# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20345 case (3)
20346# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20347 idx = i + 1 + global_offset_x - index_x
20348# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20349 idy = j + 1 + global_offset_y - index_y
20350# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20351 if (idx < 1 .or. idx > xrows .or. idy < 1 .or. idy > yrows) &
20352# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20353 & call s_mpi_abort("Hardcoded IC extrusion: row/column index out of range (IC file misaligned with the run grid)")
20354# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20355 do f = 1, sys_size - 1
20356# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20357 jump = merge(1, 0, f >= eqn_idx%mom%end)
20358# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20359 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
20360# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20361 end do
20362# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20363 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
20364# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20365 end select
20366# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20367 case (273) ! Temporal reacting mixing layer: 2D extrusion + streamwise velocity
20368# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20369 ! @:HardcodedReadValues() always zeros mom%end (the extruded-axis velocity).
20370# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20371 ! The mom%beg file slot is repurposed to carry the streamwise-velocity-vs-
20372# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20373 ! cross-stream-position profile (real cross-stream velocity is legitimately
20374# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20375 ! zero everywhere in the unperturbed base state), so swap it into mom%end and
20376# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20377 ! zero out mom%beg's true physical value.
20378# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20379 if (.not. files_loaded) then
20380# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20381 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
20382# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20383 do f = 1, max_files
20384# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20385 write (file_num_str, '(I0)') f
20386# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20387 filenames(f) = trim(files_dir) // "/" // "prim." // trim(file_num_str) // ".00." // trim(file_extension) // ".dat"
20388# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20389 end do
20390# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20391
20392# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20393 ! Common file reading setup
20394# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20395 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
20396# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20397 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
20398# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20399
20400# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20401 select case (num_dims)
20402# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20403 case (1, 2) ! 1D and 2D cases are similar
20404# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20405 ! Count lines
20406# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20407 line_count = 0
20408# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20409 do
20410# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20411 read (unit2, *, iostat=ios2) dummy_x, dummy_y
20412# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20413 if (ios2 /= 0) exit
20414# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20415 line_count = line_count + 1
20416# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20417 end do
20418# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20419 close (unit2)
20420# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20421
20422# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20423 xrows = line_count
20424# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20425 yrows = 1
20426# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20427 index_x = 0
20428# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20429 if (num_dims == 2) index_x = i
20430# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20431#ifdef MFC_DEBUG
20432# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20433 block
20434# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20435 use iso_fortran_env, only: output_unit
20436# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20437
20438# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20439 print *, 'm_icpp_patches.fpp:769: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
20440# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20441
20442# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20443 call flush (output_unit)
20444# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20445 end block
20446# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20447#endif
20448# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20449 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
20450# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20451
20452# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20453
20454# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20455
20456# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20457#if defined(MFC_OpenACC)
20458# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20459!$acc enter data create(x_coords, stored_values)
20460# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20461#elif defined(MFC_OpenMP)
20462# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20463!$omp target enter data map(always,alloc:x_coords, stored_values)
20464# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20465#endif
20466# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20467
20468# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20469 ! Read data from all files
20470# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20471 do f = 1, max_files
20472# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20473 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
20474# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20475 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
20476# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20477
20478# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20479 do iter = 1, xrows
20480# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20481 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
20482# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20483 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
20484# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20485 end do
20486# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20487 close (unit)
20488# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20489 end do
20490# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20491
20492# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20493 ! Calculate offsets
20494# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20495 domain_xstart = x_coords(1)
20496# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20497 x_step = x_cc(1) - x_cc(0)
20498# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20499 delta_x = merge(x_cc(0) - domain_xstart, x_cc(index_x) - domain_xstart, num_dims == 1)
20500# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20501 global_offset_x = nint(abs(delta_x)/x_step)
20502# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20503 case (3) ! 3D case - determine grid structure
20504# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20505 ! Find yRows by counting rows with same x
20506# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20507 read (unit2, *, iostat=ios2) x0, y0, dummy_z
20508# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20509 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
20510# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20511
20512# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20513 yrows = 1
20514# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20515 do
20516# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20517 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
20518# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20519 if (ios2 /= 0) exit
20520# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20521 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
20522# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20523 yrows = yrows + 1
20524# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20525 else
20526# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20527 exit
20528# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20529 end if
20530# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20531 end do
20532# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20533 close (unit2)
20534# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20535
20536# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20537 ! Count total rows
20538# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20539 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
20540# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20541 nrows = 0
20542# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20543 do
20544# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20545 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
20546# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20547 if (ios2 /= 0) exit
20548# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20549 nrows = nrows + 1
20550# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20551 end do
20552# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20553 close (unit2)
20554# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20555
20556# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20557 xrows = nrows/yrows
20558# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20559#ifdef MFC_DEBUG
20560# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20561 block
20562# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20563 use iso_fortran_env, only: output_unit
20564# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20565
20566# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20567 print *, 'm_icpp_patches.fpp:769: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
20568# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20569
20570# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20571 call flush (output_unit)
20572# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20573 end block
20574# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20575#endif
20576# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20577 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
20578# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20579
20580# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20581
20582# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20583
20584# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20585
20586# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20587#if defined(MFC_OpenACC)
20588# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20589!$acc enter data create(x_coords, y_coords, stored_values)
20590# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20591#elif defined(MFC_OpenMP)
20592# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20593!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
20594# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20595#endif
20596# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20597 index_x = i
20598# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20599 index_y = j
20600# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20601
20602# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20603 ! Read all files
20604# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20605 do f = 1, max_files
20606# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20607 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
20608# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20609 if (ios /= 0) then
20610# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20611 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
20612# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20613 cycle
20614# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20615 end if
20616# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20617
20618# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20619 iter = 0
20620# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20621 do iix = 1, xrows
20622# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20623 do iiy = 1, yrows
20624# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20625 iter = iter + 1
20626# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20627 if (f == 1) then
20628# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20629 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
20630# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20631 else
20632# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20633 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
20634# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20635 end if
20636# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20637 if (ios /= 0) call s_mpi_abort("Error reading data")
20638# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20639 end do
20640# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20641 end do
20642# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20643 close (unit)
20644# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20645 end do
20646# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20647
20648# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20649 ! Calculate offsets
20650# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20651 x_step = x_cc(1) - x_cc(0)
20652# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20653 y_step = y_cc(1) - y_cc(0)
20654# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20655 delta_x = x_cc(index_x) - x_coords(1)
20656# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20657 delta_y = y_cc(index_y) - y_coords(1)
20658# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20659 global_offset_x = nint(abs(delta_x)/x_step)
20660# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20661 global_offset_y = nint(abs(delta_y)/y_step)
20662# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20663 end select
20664# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20665
20666# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20667 files_loaded = .true.
20668# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20669 end if
20670# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20671
20672# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20673 ! Data assignment
20674# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20675 select case (num_dims)
20676# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20677 case (1)
20678# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20679 idx = i + 1 + global_offset_x
20680# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20681 ! idx must land inside the file's row range: this rank's subdomain offset
20682# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20683 ! (global_offset_x) was derived from this rank's own grid, so a miss means the
20684# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20685 ! IC file is misaligned/mis-sized for the run grid, not a normal boundary case.
20686# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20687 if (idx < 1 .or. idx > xrows) &
20688# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20689 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
20690# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20691 do f = 1, sys_size
20692# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20693 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
20694# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20695 end do
20696# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20697 case (2)
20698# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20699 idx = i + 1 + global_offset_x - index_x
20700# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20701 if (idx < 1 .or. idx > xrows) &
20702# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20703 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
20704# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20705 do f = 1, sys_size - 1
20706# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20707 jump = merge(1, 0, f >= eqn_idx%mom%end)
20708# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20709 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
20710# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20711 end do
20712# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20713 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
20714# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20715 case (3)
20716# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20717 idx = i + 1 + global_offset_x - index_x
20718# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20719 idy = j + 1 + global_offset_y - index_y
20720# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20721 if (idx < 1 .or. idx > xrows .or. idy < 1 .or. idy > yrows) &
20722# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20723 & call s_mpi_abort("Hardcoded IC extrusion: row/column index out of range (IC file misaligned with the run grid)")
20724# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20725 do f = 1, sys_size - 1
20726# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20727 jump = merge(1, 0, f >= eqn_idx%mom%end)
20728# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20729 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
20730# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20731 end do
20732# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20733 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
20734# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20735 end select
20736# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20737 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0)
20738# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20739 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = 0.0_wp
20740# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20741 case (274) ! Full 2D field from external data (no extrusion)
20742# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20743 ! Unlike case(270-273), this reads a genuinely 2D (x,y) field per variable, with no
20744# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20745 ! extrusion direction and no zeroed component -- all sys_size variables are read and
20746# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20747 ! assigned directly. Data files must have exactly (m_glb+1)*(n_glb+1) lines per
20748# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20749 ! variable, in x-major order (outer loop x, inner loop y), matching this rank's
20750# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20751 ! global grid exactly -- by construction, since the IC generator derives both the
20752# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20753 ! grid and the file contents from the same computation.
20754# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20755 !
20756# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20757 ! A local cell's global (x, y) index is derived from x_cc(i)/y_cc(j) against the
20758# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20759 ! file's own first coordinate and this rank's uniform grid spacing -- following the
20760# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20761 ! same pattern as case(270)'s global_offset_x/y above -- rather than from start_idx:
20762# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20763 ! start_idx is only allocated when parallel_io=T (s_initialize_parallel_io_common
20764# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20765 ! returns before allocating it otherwise), so a serial-IO run (the default for
20766# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20767 ! golden-file tests) would index into an unallocated array.
20768# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20769 !
20770# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20771 ! Every rank still scans the whole file (matching case(270)'s existing per-rank-reads-
20772# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20773 ! everything pattern), but stored_values274 only holds this rank's LOCAL (0:m, 0:n)
20774# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20775 ! slice rather than the full global grid -- a full-grid copy on every rank would scale
20776# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20777 ! as O(m_glb*n_glb*sys_size) per rank, which is the wrong axis to duplicate work on for
20778# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20779 ! a genuinely 2D (not 1D-profile) field. local_ix_beg274/local_iy_beg274 (this rank's
20780# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20781 ! global cell offset) are pinned from f274==1's very first record, before any other
20782# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20783 ! record is read, so every subsequent record -- across all variables -- can be tested
20784# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20785 ! against this rank's range and dropped if it falls outside it.
20786# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20787 x_step274 = x_cc(1) - x_cc(0)
20788# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20789 y_step274 = y_cc(1) - y_cc(0)
20790# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20791
20792# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20793 if (.not. files_loaded274) then
20794# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20795#ifdef MFC_DEBUG
20796# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20797 block
20798# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20799 use iso_fortran_env, only: output_unit
20800# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20801
20802# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20803 print *, 'm_icpp_patches.fpp:769: ', '@:ALLOCATE(stored_values274(0:m, 0:n, sys_size))'
20804# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20805
20806# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20807 call flush (output_unit)
20808# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20809 end block
20810# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20811#endif
20812# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20813 allocate (stored_values274(0:m, 0:n, sys_size))
20814# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20815
20816# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20817
20818# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20819#if defined(MFC_OpenACC)
20820# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20821!$acc enter data create(stored_values274)
20822# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20823#elif defined(MFC_OpenMP)
20824# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20825!$omp target enter data map(always,alloc:stored_values274)
20826# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20827#endif
20828# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20829 do f274 = 1, sys_size
20830# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20831 write (file_num_str274, '(I0)') f274
20832# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20833 fname274 = trim(files_dir) // "/prim." // trim(file_num_str274) // ".00." // trim(file_extension) // ".dat"
20834# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20835 open (newunit=unit274, file=trim(fname274), status='old', action='read', iostat=ios274)
20836# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20837 if (ios274 /= 0) call s_mpi_abort("Error opening file: " // trim(fname274))
20838# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20839 do ix274 = 0, m_glb
20840# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20841 do iy274 = 0, n_glb
20842# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20843 read (unit274, *, iostat=ios274) dummy_x274, dummy_y274, dummy_val274
20844# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20845 if (ios274 /= 0) call s_mpi_abort("Error reading file (fewer lines than grid?): " // trim(fname274))
20846# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20847 ! Capture the file's own origin and spacing from its first records so we can
20848# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20849 ! confirm it was sampled on this run's grid (a silent mismatch would otherwise
20850# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20851 ! read a wrong partial slice -> nonphysical field -> VCFL=Inf downstream).
20852# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20853 if (f274 == 1) then
20854# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20855 if (ix274 == 0 .and. iy274 == 0) then
20856# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20857 x0_274 = dummy_x274
20858# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20859 y0_274 = dummy_y274
20860# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20861 local_ix_beg274 = nint((x_cc(0) - x0_274)/x_step274)
20862# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20863 local_iy_beg274 = nint((y_cc(0) - y0_274)/y_step274)
20864# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20865 end if
20866# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20867 if (ix274 == 1 .and. iy274 == 0) file_dx274 = dummy_x274 - x0_274
20868# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20869 if (ix274 == 0 .and. iy274 == 1) file_dy274 = dummy_y274 - y0_274
20870# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20871 end if
20872# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20873 if (ix274 - local_ix_beg274 >= 0 .and. ix274 - local_ix_beg274 <= m .and. iy274 - local_iy_beg274 >= 0 &
20874# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20875 & .and. iy274 - local_iy_beg274 <= n) then
20876# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20877 stored_values274(ix274 - local_ix_beg274, iy274 - local_iy_beg274, f274) = dummy_val274
20878# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20879 end if
20880# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20881 end do
20882# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20883 end do
20884# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20885 ! The file must contain exactly (m_glb+1)*(n_glb+1) records: a successful extra
20886# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20887 ! read means it was generated for a larger grid and would be silently misread.
20888# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20889 read (unit274, *, iostat=ios274) dummy_x274, dummy_y274
20890# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20891 if (ios274 == 0) call s_mpi_abort("hcid=274 file has more lines than the grid: " // trim(fname274))
20892# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20893 close (unit274)
20894# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20895 end do
20896# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20897
20898# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20899 ! The run grid must be aligned with the file grid (uniform grid assumed, as in case 270).
20900# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20901 ! Check alignment via the integer cell offset of this rank's first cell from the file
20902# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20903 ! origin -- decomposition-safe: on every MPI rank x_cc(0) sits an integer number of cells
20904# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20905 ! into the global file, so a non-integer offset means a shifted/mismatched IC. (Comparing
20906# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20907 ! x0_274 to x_cc(0) directly would false-abort every rank whose subdomain doesn't start at
20908# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20909 ! the global origin.) The spacing checks below must also hold.
20910# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20911 r_align274 = (x_cc(0) - x0_274)/x_step274
20912# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20913 if (abs(r_align274 - nint(r_align274)) > 1.e-6_wp) &
20914# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20915 & call s_mpi_abort("hcid=274 file x-grid is misaligned with the run grid; regenerate the IC for this grid.")
20916# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20917 if (m_glb >= 1) then
20918# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20919 if (abs(file_dx274 - x_step274) > 1.e-6_wp*abs(x_step274)) &
20920# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20921 & call s_mpi_abort("hcid=274 file x-spacing does not match the grid; regenerate the IC for this grid.")
20922# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20923 end if
20924# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20925 if (n_glb >= 1) then
20926# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20927 r_align274 = (y_cc(0) - y0_274)/y_step274
20928# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20929 if (abs(r_align274 - nint(r_align274)) > 1.e-6_wp) &
20930# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20931 & call s_mpi_abort("hcid=274 file y-grid is misaligned with the run grid; regenerate the IC for this grid.")
20932# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20933 if (abs(file_dy274 - y_step274) > 1.e-6_wp*abs(y_step274)) &
20934# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20935 & call s_mpi_abort("hcid=274 file y-spacing does not match the grid; regenerate the IC for this grid.")
20936# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20937 end if
20938# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20939
20940# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20941 files_loaded274 = .true.
20942# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20943 end if
20944# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20945 ! Alignment is verified above (or this rank would already have aborted), so the local
20946# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20947 ! cell (i, j) maps to stored_values274(i, j, :) directly -- no re-derivation needed.
20948# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20949 do f274 = 1, sys_size
20950# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20951 q_prim_vf(f274)%sf(i, j, 0) = stored_values274(i, j, f274)
20952# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20953 end do
20954# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20955 case (271) ! Premixed Flame Vortices Interaction
20956# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20957 if (.not. files_loaded) then
20958# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20959 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
20960# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20961 do f = 1, max_files
20962# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20963 write (file_num_str, '(I0)') f
20964# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20965 filenames(f) = trim(files_dir) // "/" // "prim." // trim(file_num_str) // ".00." // trim(file_extension) // ".dat"
20966# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20967 end do
20968# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20969
20970# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20971 ! Common file reading setup
20972# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20973 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
20974# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20975 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
20976# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20977
20978# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20979 select case (num_dims)
20980# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20981 case (1, 2) ! 1D and 2D cases are similar
20982# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20983 ! Count lines
20984# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20985 line_count = 0
20986# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20987 do
20988# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20989 read (unit2, *, iostat=ios2) dummy_x, dummy_y
20990# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20991 if (ios2 /= 0) exit
20992# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20993 line_count = line_count + 1
20994# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20995 end do
20996# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20997 close (unit2)
20998# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
20999
21000# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21001 xrows = line_count
21002# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21003 yrows = 1
21004# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21005 index_x = 0
21006# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21007 if (num_dims == 2) index_x = i
21008# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21009#ifdef MFC_DEBUG
21010# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21011 block
21012# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21013 use iso_fortran_env, only: output_unit
21014# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21015
21016# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21017 print *, 'm_icpp_patches.fpp:769: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
21018# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21019
21020# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21021 call flush (output_unit)
21022# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21023 end block
21024# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21025#endif
21026# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21027 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
21028# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21029
21030# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21031
21032# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21033
21034# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21035#if defined(MFC_OpenACC)
21036# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21037!$acc enter data create(x_coords, stored_values)
21038# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21039#elif defined(MFC_OpenMP)
21040# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21041!$omp target enter data map(always,alloc:x_coords, stored_values)
21042# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21043#endif
21044# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21045
21046# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21047 ! Read data from all files
21048# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21049 do f = 1, max_files
21050# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21051 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
21052# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21053 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
21054# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21055
21056# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21057 do iter = 1, xrows
21058# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21059 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
21060# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21061 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
21062# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21063 end do
21064# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21065 close (unit)
21066# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21067 end do
21068# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21069
21070# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21071 ! Calculate offsets
21072# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21073 domain_xstart = x_coords(1)
21074# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21075 x_step = x_cc(1) - x_cc(0)
21076# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21077 delta_x = merge(x_cc(0) - domain_xstart, x_cc(index_x) - domain_xstart, num_dims == 1)
21078# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21079 global_offset_x = nint(abs(delta_x)/x_step)
21080# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21081 case (3) ! 3D case - determine grid structure
21082# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21083 ! Find yRows by counting rows with same x
21084# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21085 read (unit2, *, iostat=ios2) x0, y0, dummy_z
21086# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21087 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
21088# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21089
21090# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21091 yrows = 1
21092# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21093 do
21094# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21095 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
21096# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21097 if (ios2 /= 0) exit
21098# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21099 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
21100# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21101 yrows = yrows + 1
21102# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21103 else
21104# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21105 exit
21106# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21107 end if
21108# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21109 end do
21110# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21111 close (unit2)
21112# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21113
21114# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21115 ! Count total rows
21116# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21117 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
21118# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21119 nrows = 0
21120# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21121 do
21122# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21123 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
21124# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21125 if (ios2 /= 0) exit
21126# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21127 nrows = nrows + 1
21128# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21129 end do
21130# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21131 close (unit2)
21132# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21133
21134# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21135 xrows = nrows/yrows
21136# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21137#ifdef MFC_DEBUG
21138# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21139 block
21140# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21141 use iso_fortran_env, only: output_unit
21142# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21143
21144# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21145 print *, 'm_icpp_patches.fpp:769: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
21146# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21147
21148# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21149 call flush (output_unit)
21150# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21151 end block
21152# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21153#endif
21154# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21155 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
21156# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21157
21158# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21159
21160# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21161
21162# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21163
21164# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21165#if defined(MFC_OpenACC)
21166# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21167!$acc enter data create(x_coords, y_coords, stored_values)
21168# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21169#elif defined(MFC_OpenMP)
21170# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21171!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
21172# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21173#endif
21174# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21175 index_x = i
21176# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21177 index_y = j
21178# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21179
21180# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21181 ! Read all files
21182# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21183 do f = 1, max_files
21184# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21185 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
21186# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21187 if (ios /= 0) then
21188# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21189 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
21190# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21191 cycle
21192# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21193 end if
21194# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21195
21196# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21197 iter = 0
21198# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21199 do iix = 1, xrows
21200# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21201 do iiy = 1, yrows
21202# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21203 iter = iter + 1
21204# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21205 if (f == 1) then
21206# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21207 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
21208# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21209 else
21210# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21211 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
21212# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21213 end if
21214# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21215 if (ios /= 0) call s_mpi_abort("Error reading data")
21216# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21217 end do
21218# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21219 end do
21220# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21221 close (unit)
21222# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21223 end do
21224# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21225
21226# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21227 ! Calculate offsets
21228# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21229 x_step = x_cc(1) - x_cc(0)
21230# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21231 y_step = y_cc(1) - y_cc(0)
21232# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21233 delta_x = x_cc(index_x) - x_coords(1)
21234# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21235 delta_y = y_cc(index_y) - y_coords(1)
21236# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21237 global_offset_x = nint(abs(delta_x)/x_step)
21238# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21239 global_offset_y = nint(abs(delta_y)/y_step)
21240# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21241 end select
21242# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21243
21244# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21245 files_loaded = .true.
21246# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21247 end if
21248# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21249
21250# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21251 ! Data assignment
21252# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21253 select case (num_dims)
21254# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21255 case (1)
21256# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21257 idx = i + 1 + global_offset_x
21258# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21259 ! idx must land inside the file's row range: this rank's subdomain offset
21260# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21261 ! (global_offset_x) was derived from this rank's own grid, so a miss means the
21262# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21263 ! IC file is misaligned/mis-sized for the run grid, not a normal boundary case.
21264# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21265 if (idx < 1 .or. idx > xrows) &
21266# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21267 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
21268# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21269 do f = 1, sys_size
21270# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21271 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
21272# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21273 end do
21274# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21275 case (2)
21276# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21277 idx = i + 1 + global_offset_x - index_x
21278# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21279 if (idx < 1 .or. idx > xrows) &
21280# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21281 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
21282# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21283 do f = 1, sys_size - 1
21284# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21285 jump = merge(1, 0, f >= eqn_idx%mom%end)
21286# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21287 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
21288# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21289 end do
21290# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21291 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
21292# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21293 case (3)
21294# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21295 idx = i + 1 + global_offset_x - index_x
21296# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21297 idy = j + 1 + global_offset_y - index_y
21298# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21299 if (idx < 1 .or. idx > xrows .or. idy < 1 .or. idy > yrows) &
21300# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21301 & call s_mpi_abort("Hardcoded IC extrusion: row/column index out of range (IC file misaligned with the run grid)")
21302# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21303 do f = 1, sys_size - 1
21304# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21305 jump = merge(1, 0, f >= eqn_idx%mom%end)
21306# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21307 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
21308# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21309 end do
21310# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21311 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
21312# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21313 end select
21314# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21315 x1c = 0.0027_wp
21316# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21317 y1c = 0.005_wp
21318# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21319 x2c = 0.0027_wp
21320# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21321 y2c = 0.003_wp
21322# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21323 r1c = (x_cc(i) - x1c)**(2.0_wp) + (y_cc(j) - y1c)**(2.0_wp)
21324# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21325 r2c = (x_cc(i) - x2c)**(2.0_wp) + (y_cc(j) - y2c)**(2.0_wp)
21326# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21327 rvortex = 0.0005_wp
21328# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21329 cvortex = 6000.0_wp
21330# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21331
21332# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21333 u1c = -cvortex*((y_cc(j) - y1c))*exp(-r1c/(2.0_wp*rvortex**2.0_wp))
21334# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21335 v1c = cvortex*((x_cc(i) - x1c))*exp(-r1c/(2.0_wp*rvortex**2.0_wp))
21336# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21337
21338# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21339 u2c = cvortex*((y_cc(j) - y2c))*exp(-r2c/(2.0_wp*rvortex**2.0_wp))
21340# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21341 v2c = -cvortex*((x_cc(i) - x2c))*exp(-r2c/(2.0_wp*rvortex**2.0_wp))
21342# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21343 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) + u1c + u2c
21344# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21345 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = v1c + v2c
21346# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21347 case (272) ! Premixed Flame Instability
21348# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21349 if (.not. files_loaded) then
21350# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21351 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
21352# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21353 do f = 1, max_files
21354# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21355 write (file_num_str, '(I0)') f
21356# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21357 filenames(f) = trim(files_dir) // "/" // "prim." // trim(file_num_str) // ".00." // trim(file_extension) // ".dat"
21358# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21359 end do
21360# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21361
21362# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21363 ! Common file reading setup
21364# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21365 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
21366# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21367 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
21368# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21369
21370# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21371 select case (num_dims)
21372# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21373 case (1, 2) ! 1D and 2D cases are similar
21374# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21375 ! Count lines
21376# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21377 line_count = 0
21378# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21379 do
21380# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21381 read (unit2, *, iostat=ios2) dummy_x, dummy_y
21382# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21383 if (ios2 /= 0) exit
21384# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21385 line_count = line_count + 1
21386# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21387 end do
21388# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21389 close (unit2)
21390# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21391
21392# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21393 xrows = line_count
21394# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21395 yrows = 1
21396# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21397 index_x = 0
21398# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21399 if (num_dims == 2) index_x = i
21400# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21401#ifdef MFC_DEBUG
21402# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21403 block
21404# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21405 use iso_fortran_env, only: output_unit
21406# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21407
21408# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21409 print *, 'm_icpp_patches.fpp:769: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
21410# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21411
21412# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21413 call flush (output_unit)
21414# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21415 end block
21416# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21417#endif
21418# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21419 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
21420# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21421
21422# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21423
21424# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21425
21426# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21427#if defined(MFC_OpenACC)
21428# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21429!$acc enter data create(x_coords, stored_values)
21430# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21431#elif defined(MFC_OpenMP)
21432# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21433!$omp target enter data map(always,alloc:x_coords, stored_values)
21434# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21435#endif
21436# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21437
21438# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21439 ! Read data from all files
21440# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21441 do f = 1, max_files
21442# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21443 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
21444# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21445 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
21446# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21447
21448# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21449 do iter = 1, xrows
21450# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21451 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
21452# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21453 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
21454# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21455 end do
21456# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21457 close (unit)
21458# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21459 end do
21460# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21461
21462# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21463 ! Calculate offsets
21464# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21465 domain_xstart = x_coords(1)
21466# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21467 x_step = x_cc(1) - x_cc(0)
21468# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21469 delta_x = merge(x_cc(0) - domain_xstart, x_cc(index_x) - domain_xstart, num_dims == 1)
21470# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21471 global_offset_x = nint(abs(delta_x)/x_step)
21472# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21473 case (3) ! 3D case - determine grid structure
21474# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21475 ! Find yRows by counting rows with same x
21476# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21477 read (unit2, *, iostat=ios2) x0, y0, dummy_z
21478# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21479 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
21480# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21481
21482# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21483 yrows = 1
21484# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21485 do
21486# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21487 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
21488# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21489 if (ios2 /= 0) exit
21490# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21491 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
21492# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21493 yrows = yrows + 1
21494# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21495 else
21496# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21497 exit
21498# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21499 end if
21500# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21501 end do
21502# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21503 close (unit2)
21504# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21505
21506# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21507 ! Count total rows
21508# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21509 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
21510# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21511 nrows = 0
21512# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21513 do
21514# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21515 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
21516# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21517 if (ios2 /= 0) exit
21518# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21519 nrows = nrows + 1
21520# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21521 end do
21522# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21523 close (unit2)
21524# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21525
21526# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21527 xrows = nrows/yrows
21528# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21529#ifdef MFC_DEBUG
21530# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21531 block
21532# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21533 use iso_fortran_env, only: output_unit
21534# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21535
21536# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21537 print *, 'm_icpp_patches.fpp:769: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
21538# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21539
21540# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21541 call flush (output_unit)
21542# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21543 end block
21544# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21545#endif
21546# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21547 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
21548# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21549
21550# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21551
21552# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21553
21554# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21555
21556# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21557#if defined(MFC_OpenACC)
21558# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21559!$acc enter data create(x_coords, y_coords, stored_values)
21560# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21561#elif defined(MFC_OpenMP)
21562# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21563!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
21564# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21565#endif
21566# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21567 index_x = i
21568# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21569 index_y = j
21570# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21571
21572# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21573 ! Read all files
21574# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21575 do f = 1, max_files
21576# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21577 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
21578# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21579 if (ios /= 0) then
21580# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21581 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
21582# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21583 cycle
21584# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21585 end if
21586# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21587
21588# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21589 iter = 0
21590# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21591 do iix = 1, xrows
21592# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21593 do iiy = 1, yrows
21594# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21595 iter = iter + 1
21596# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21597 if (f == 1) then
21598# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21599 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
21600# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21601 else
21602# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21603 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
21604# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21605 end if
21606# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21607 if (ios /= 0) call s_mpi_abort("Error reading data")
21608# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21609 end do
21610# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21611 end do
21612# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21613 close (unit)
21614# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21615 end do
21616# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21617
21618# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21619 ! Calculate offsets
21620# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21621 x_step = x_cc(1) - x_cc(0)
21622# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21623 y_step = y_cc(1) - y_cc(0)
21624# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21625 delta_x = x_cc(index_x) - x_coords(1)
21626# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21627 delta_y = y_cc(index_y) - y_coords(1)
21628# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21629 global_offset_x = nint(abs(delta_x)/x_step)
21630# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21631 global_offset_y = nint(abs(delta_y)/y_step)
21632# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21633 end select
21634# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21635
21636# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21637 files_loaded = .true.
21638# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21639 end if
21640# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21641
21642# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21643 ! Data assignment
21644# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21645 select case (num_dims)
21646# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21647 case (1)
21648# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21649 idx = i + 1 + global_offset_x
21650# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21651 ! idx must land inside the file's row range: this rank's subdomain offset
21652# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21653 ! (global_offset_x) was derived from this rank's own grid, so a miss means the
21654# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21655 ! IC file is misaligned/mis-sized for the run grid, not a normal boundary case.
21656# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21657 if (idx < 1 .or. idx > xrows) &
21658# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21659 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
21660# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21661 do f = 1, sys_size
21662# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21663 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
21664# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21665 end do
21666# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21667 case (2)
21668# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21669 idx = i + 1 + global_offset_x - index_x
21670# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21671 if (idx < 1 .or. idx > xrows) &
21672# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21673 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
21674# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21675 do f = 1, sys_size - 1
21676# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21677 jump = merge(1, 0, f >= eqn_idx%mom%end)
21678# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21679 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
21680# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21681 end do
21682# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21683 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
21684# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21685 case (3)
21686# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21687 idx = i + 1 + global_offset_x - index_x
21688# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21689 idy = j + 1 + global_offset_y - index_y
21690# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21691 if (idx < 1 .or. idx > xrows .or. idy < 1 .or. idy > yrows) &
21692# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21693 & call s_mpi_abort("Hardcoded IC extrusion: row/column index out of range (IC file misaligned with the run grid)")
21694# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21695 do f = 1, sys_size - 1
21696# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21697 jump = merge(1, 0, f >= eqn_idx%mom%end)
21698# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21699 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
21700# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21701 end do
21702# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21703 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
21704# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21705 end select
21706# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21707
21708# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21709 y_center = y0_ref
21710# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21711 y_dist = y_cc(j) - y_center
21712# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21713 wave_phase = 2.0_wp*pi*nwaves*(y_dist/ly_param)
21714# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21715 front_shift = a_param*sin(wave_phase)
21716# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21717
21718# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21719 x_mapped = x_cc(i) - front_shift
21720# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21721
21722# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21723 if (x_mapped <= x_coords(1)) then
21724# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21725 do v = 1, sys_size - 1
21726# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21727 q_prim_vf(v + merge(1, 0, v >= eqn_idx%mom%end))%sf(i, j, 0) = stored_values(1, 1, v)
21728# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21729 end do
21730# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21731 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
21732# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21733 else if (x_mapped >= x_coords(xrows)) then
21734# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21735 do v = 1, sys_size - 1
21736# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21737 q_prim_vf(v + merge(1, 0, v >= eqn_idx%mom%end))%sf(i, j, 0) = stored_values(xrows, 1, v)
21738# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21739 end do
21740# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21741 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
21742# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21743 else
21744# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21745 idx_lo = 1; idx_hi = xrows
21746# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21747 do while (idx_hi - idx_lo > 1)
21748# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21749 idx_mid = (idx_lo + idx_hi)/2
21750# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21751 if (x_coords(idx_mid) <= x_mapped) then
21752# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21753 idx_lo = idx_mid
21754# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21755 else
21756# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21757 idx_hi = idx_mid
21758# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21759 end if
21760# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21761 end do
21762# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21763
21764# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21765 interp_wt = (x_mapped - x_coords(idx_lo))/(x_coords(idx_hi) - x_coords(idx_lo)) ! weight in [0,1)
21766# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21767
21768# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21769 do v = 1, sys_size - 1
21770# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21771 q_prim_vf(v + merge(1, 0, v >= eqn_idx%mom%end))%sf(i, j, 0) = (1.0_wp - interp_wt)*stored_values(idx_lo, 1, &
21772# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21773 & v) + interp_wt*stored_values(idx_hi, 1, v)
21774# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21775 end do
21776# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21777 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
21778# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21779 end if
21780# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21781 case (280) ! Isentropic vortex
21782# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21783 ! This is patch is hard-coded for test suite optimization used in the 2D_isentropicvortex case: This analytic patch uses
21784# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21785 ! geometry 2
21786# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21787 if (patch_id == 1) then
21788# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21789 q_prim_vf(eqn_idx%E)%sf(i, j, &
21790# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21791 & 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) &
21792# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21793 & - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0)))**(1.4 + 1.0)
21794# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21795 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, j, &
21796# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21797 & 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) &
21798# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21799 & - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0)))**1.4
21800# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21801 q_prim_vf(eqn_idx%mom%beg + 0)%sf(i, j, &
21802# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21803 & 0) = patch_icpp(1)%vel(1) + (y_cc(j) - patch_icpp(1)%y_centroid)*(5.0/(2.0*pi))*exp(1.0*(1.0 - (x_cc(i) &
21804# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21805 & - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0))
21806# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21807 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, &
21808# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21809 & 0) = patch_icpp(1)%vel(2) - (x_cc(i) - patch_icpp(1)%x_centroid)*(5.0/(2.0*pi))*exp(1.0*(1.0 - (x_cc(i) &
21810# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21811 & - patch_icpp(1)%x_centroid)**2.0 - (y_cc(j) - patch_icpp(1)%y_centroid)**2.0))
21812# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21813 end if
21814# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21815 case (281) ! Acoustic pulse
21816# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21817 ! This is patch is hard-coded for test suite optimization used in the 2D_acoustic_pulse case: This analytic patch uses
21818# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21819 ! geometry 2
21820# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21821 if (patch_id == 2) then
21822# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21823 q_prim_vf(eqn_idx%E)%sf(i, j, &
21824# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21825 & 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))
21826# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21827 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, j, &
21828# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21829 & 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))
21830# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21831 end if
21832# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21833 case (282) ! Zero-circulation vortex
21834# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21835 ! This is patch is hard-coded for test suite optimization used in the 2D_zero_circ_vortex case: This analytic patch uses
21836# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21837 ! geometry 2
21838# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21839 if (patch_id == 2) then
21840# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21841 q_prim_vf(eqn_idx%E)%sf(i, j, &
21842# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21843 & 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))
21844# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21845 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, j, &
21846# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21847 & 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))
21848# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21849 q_prim_vf(eqn_idx%mom%beg + 0)%sf(i, j, &
21850# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21851 & 0) = 112.99092883944267*(1 - (0.1/0.3))*y_cc(j)*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2)))
21852# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21853 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, &
21854# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21855 & 0) = 112.99092883944267*((0.1/0.3))*x_cc(i)*exp(0.5*(1 - sqrt(x_cc(i)**2 + y_cc(j)**2)))
21856# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21857 end if
21858# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21859 case (283) ! Isentropic vortex: conserved-variable GL cell averages (3-pt tensor product)
21860# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21861 ! GL averages of conserved variables (rho, rho*u, rho*v, E) eliminate the O(h^2) error that primitive-variable averaging
21862# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21863 ! introduces through the nonlinear prim->cons conversion: cell_avg(rho*u) != cell_avg(rho)*cell_avg(u) by O(h^2). We back
21864# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21865 ! out primitive values that reproduce the conserved averages exactly. Vortex strength eps is read from
21866# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21867 ! patch_icpp(patch_id)%epsilon; defaults to 5.
21868# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21869 if (patch_id == 1) then
21870# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21871 vortex_eps = merge(patch_icpp(patch_id)%epsilon, 5._wp, patch_icpp(patch_id)%epsilon > 0._wp)
21872# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21873 gauss_xi = [-sqrt(3._wp/5._wp), 0._wp, sqrt(3._wp/5._wp)]
21874# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21875 gauss_w = [5._wp/9._wp, 8._wp/9._wp, 5._wp/9._wp]
21876# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21877 rho_avg = 0._wp; rhou_avg = 0._wp; rhov_avg = 0._wp; e_avg = 0._wp
21878# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21879 do igq = 1, 3
21880# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21881 do jgq = 1, 3
21882# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21883 xq = x_cc(i) + gauss_xi(igq)*(x_cb(i) - x_cb(i - 1))*0.5_wp
21884# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21885 yq = y_cc(j) + gauss_xi(jgq)*(y_cb(j) - y_cb(j - 1))*0.5_wp
21886# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21887 r2q = (xq - patch_icpp(patch_id)%x_centroid)**2._wp + (yq - patch_icpp(patch_id)%y_centroid)**2._wp
21888# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21889 t_facq = 1._wp - (vortex_eps/(2._wp*pi))*(vortex_eps/(8._wp*(1.4_wp + 1._wp)*pi))*exp(2._wp*(1._wp - r2q))
21890# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21891 wq = gauss_w(igq)*gauss_w(jgq)
21892# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21893 rhoq = t_facq**1.4_wp
21894# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21895 pq = t_facq**2.4_wp
21896# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21897 uq = patch_icpp(patch_id)%vel(1) + (yq - patch_icpp(patch_id)%y_centroid)*(vortex_eps/(2._wp*pi))*exp(1._wp &
21898# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21899 & - r2q)
21900# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21901 vq = patch_icpp(patch_id)%vel(2) - (xq - patch_icpp(patch_id)%x_centroid)*(vortex_eps/(2._wp*pi))*exp(1._wp &
21902# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21903 & - r2q)
21904# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21905 eq = pq/0.4_wp + 0.5_wp*rhoq*(uq**2 + vq**2)
21906# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21907 rho_avg = rho_avg + wq*rhoq
21908# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21909 rhou_avg = rhou_avg + wq*(rhoq*uq)
21910# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21911 rhov_avg = rhov_avg + wq*(rhoq*vq)
21912# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21913 e_avg = e_avg + wq*eq
21914# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21915 end do
21916# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21917 end do
21918# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21919 rho_avg = rho_avg*0.25_wp
21920# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21921 rhou_avg = rhou_avg*0.25_wp
21922# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21923 rhov_avg = rhov_avg*0.25_wp
21924# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21925 e_avg = e_avg*0.25_wp
21926# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21927 ! Back out primitive vars so prim->cons conversion recovers the conserved averages
21928# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21929 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = rho_avg
21930# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21931 q_prim_vf(eqn_idx%mom%beg + 0)%sf(i, j, 0) = rhou_avg/rho_avg
21932# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21933 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, 0) = rhov_avg/rho_avg
21934# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21935 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = (e_avg - 0.5_wp*(rhou_avg**2 + rhov_avg**2)/rho_avg)*0.4_wp
21936# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21937 end if
21938# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21939 case (291) ! Isothermal Flat Plate
21940# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21941 t_inf = 1125.0_wp
21942# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21943 t_wall = 600.0_wp
21944# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21945 p_atm = 101325.0_wp
21946# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21947
21948# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21949 ! Boundary/Shear Layer thicknesses
21950# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21951 delta_th = 0.0003_wp ! Thermal BL thickness
21952# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21953 delta_shear = 8e-3_wp ! Velocity BL thickness
21954# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21955
21956# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21957 u_max = 50.0_wp ! Freestream Velocity (m/s)
21958# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21959
21960# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21961 mw_n2 = 28.0134e-3_wp
21962# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21963 mw_o2 = 31.999e-3_wp
21964# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21965 y_n2 = 0.767_wp
21966# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21967 y_o2 = 0.233_wp
21968# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21969 r_mix = 8.314462618_wp*((y_n2/mw_n2) + (y_o2/mw_o2))
21970# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21971 bottom_blend_u = tanh(y_cc(j)/delta_shear)
21972# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21973 bottom_blend_t = tanh(y_cc(j)/delta_th)
21974# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21975 u_mean = u_max*bottom_blend_u
21976# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21977 t_loc = t_wall + (t_inf - t_wall)*bottom_blend_t
21978# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21979 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, 0) = p_atm/(r_mix*t_loc)
21980# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21981 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = u_mean
21982# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21983 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
21984# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21985 q_prim_vf(eqn_idx%E)%sf(i, j, 0) = p_atm
21986# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21987 q_prim_vf(eqn_idx%species%beg)%sf(i, j, 0) = y_o2
21988# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21989 q_prim_vf(eqn_idx%species%end)%sf(i, j, 0) = y_n2
21990# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21991 case default
21992# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21993 if (proc_rank == 0) then
21994# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21995 call s_int_to_str(patch_id, istr)
21996# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21997 call s_mpi_abort("Invalid hcid specified for patch " // trim(istr))
21998# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
21999 end if
22000# 769 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22001 end select
22002 end if
22003
22004 ! Updating the patch identities bookkeeping variable
22005 if (1._wp - eta < sgm_eps) patch_id_fp(i, j, 0) = patch_id
22006
22007 ! Assign Parameters
22008 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, 0) = u0*sin(x_cc(i)/l0)*cos(y_cc(j)/l0)
22009 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = -u0*cos(x_cc(i)/l0)*sin(y_cc(j)/l0)
22010 q_prim_vf(eqn_idx%E)%sf(i, j, &
22011 & 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, &
22012 & 0)*u0*u0)/16
22013 end if
22014 end do
22015 end do
22016 if (allocated(stored_values)) then
22017# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22018#ifdef MFC_DEBUG
22019# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22020 block
22021# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22022 use iso_fortran_env, only: output_unit
22023# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22024
22025# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22026 print *, 'm_icpp_patches.fpp:784: ', '@:DEALLOCATE(stored_values)'
22027# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22028
22029# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22030 call flush (output_unit)
22031# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22032 end block
22033# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22034#endif
22035# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22036
22037# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22038#if defined(MFC_OpenACC)
22039# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22040!$acc exit data delete(stored_values)
22041# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22042#elif defined(MFC_OpenMP)
22043# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22044!$omp target exit data map(release:stored_values)
22045# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22046#endif
22047# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22048 deallocate (stored_values)
22049# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22050#ifdef MFC_DEBUG
22051# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22052 block
22053# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22054 use iso_fortran_env, only: output_unit
22055# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22056
22057# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22058 print *, 'm_icpp_patches.fpp:784: ', '@:DEALLOCATE(x_coords)'
22059# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22060
22061# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22062 call flush (output_unit)
22063# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22064 end block
22065# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22066#endif
22067# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22068
22069# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22070#if defined(MFC_OpenACC)
22071# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22072!$acc exit data delete(x_coords)
22073# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22074#elif defined(MFC_OpenMP)
22075# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22076!$omp target exit data map(release:x_coords)
22077# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22078#endif
22079# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22080 deallocate (x_coords)
22081# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22082 end if
22083# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22084
22085# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22086 if (allocated(y_coords)) then
22087# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22088#ifdef MFC_DEBUG
22089# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22090 block
22091# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22092 use iso_fortran_env, only: output_unit
22093# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22094
22095# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22096 print *, 'm_icpp_patches.fpp:784: ', '@:DEALLOCATE(y_coords)'
22097# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22098
22099# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22100 call flush (output_unit)
22101# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22102 end block
22103# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22104#endif
22105# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22106
22107# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22108#if defined(MFC_OpenACC)
22109# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22110!$acc exit data delete(y_coords)
22111# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22112#elif defined(MFC_OpenMP)
22113# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22114!$omp target exit data map(release:y_coords)
22115# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22116#endif
22117# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22118 deallocate (y_coords)
22119# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22120 end if
22121# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22122
22123# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22124 files_loaded = .false.
22125# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22126
22127# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22128 if (allocated(stored_values274)) then
22129# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22130#ifdef MFC_DEBUG
22131# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22132 block
22133# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22134 use iso_fortran_env, only: output_unit
22135# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22136
22137# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22138 print *, 'm_icpp_patches.fpp:784: ', '@:DEALLOCATE(stored_values274)'
22139# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22140
22141# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22142 call flush (output_unit)
22143# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22144 end block
22145# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22146#endif
22147# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22148
22149# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22150#if defined(MFC_OpenACC)
22151# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22152!$acc exit data delete(stored_values274)
22153# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22154#elif defined(MFC_OpenMP)
22155# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22156!$omp target exit data map(release:stored_values274)
22157# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22158#endif
22159# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22160 deallocate (stored_values274)
22161# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22162 end if
22163# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22164
22165# 784 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22166 files_loaded274 = .false.
22167
22168 end subroutine s_icpp_2d_taylorgreen_vortex
22169
22170 !> Initialize a 1D bubble-pulse patch with analytical primitive variable profiles.
22171 subroutine s_icpp_1d_bubble_pulse(patch_id, patch_id_fp, q_prim_vf)
22172
22173 ! Description: This patch assigns the primitive variables as analytical functions such that the code can be verified.
22174
22175 ! Patch identifier
22176 integer, intent(in) :: patch_id
22177
22178#ifdef MFC_MIXED_PRECISION
22179 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
22180#else
22181 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
22182#endif
22183 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
22184
22185 ! Generic loop iterators
22186 integer :: i, j, k
22187 ! Placeholders for the cell boundary values
22188 real(wp) :: pi_inf, gamma, lit_gamma
22189
22190 integer :: xRows, yRows, nRows, iix, iiy, max_files
22191# 808 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22192 integer :: f, iter, unit, unit2, idx, idy, index_x, index_y, jump, line_count
22193# 808 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22194 real(wp) :: x_step, y_step
22195# 808 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22196 real(wp) :: dummy_x, dummy_y, dummy_z, x0, y0
22197# 808 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22198 integer :: global_offset_x, global_offset_y !< MPI subdomain offset
22199# 808 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22200 real(wp) :: delta_x, delta_y
22201# 808 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22202 character(len=300), dimension(sys_size) :: fileNames !< Arrays to store all data from files
22203# 808 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22204 real(wp), allocatable :: stored_values(:,:,:)
22205# 808 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22206 real(wp), allocatable :: x_coords(:), y_coords(:)
22207# 808 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22208 logical :: files_loaded = .false.
22209# 808 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22210 real(wp) :: domain_xstart
22211# 808 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22212 character(len=20) :: file_num_str !< For storing the file number as a string
22213# 808 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22214 integer :: ios
22215# 808 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22216 integer :: ios2
22217# 808 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22218
22219# 808 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22220 ! hcid=274 (2dHardcodedIC.fpp): full 2D field from external data, no extrusion.
22221# 808 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22222 ! Declared here (not in Hardcoded2DVariables()) so it's visible wherever
22223# 808 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22224 ! HardcodedDeallocation() is called, matching the pattern of stored_values/x_coords/
22225# 808 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22226 ! y_coords/files_loaded above.
22227# 808 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22228 real(wp), allocatable, dimension(:,:,:) :: stored_values274
22229# 808 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22230 logical :: files_loaded274 = .false.
22231# 808 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22232 integer :: f274, ix274, iy274, unit274, ios274
22233# 808 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22234 integer :: local_ix_beg274, local_iy_beg274
22235# 808 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22236 character(len=300) :: fname274
22237# 808 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22238 character(len=20) :: file_num_str274
22239# 808 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22240 real(wp) :: dummy_x274, dummy_y274, dummy_val274, x0_274, y0_274, x_step274, y_step274
22241# 808 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22242 real(wp) :: file_dx274, file_dy274, r_align274
22243 ! Place any declaration of intermediate variables here
22244# 809 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22245 real(wp) :: x_mid_diffu, width_sq, profile_shape, temp, molar_mass_inv, y1, y2, y3, y4
22246
22247 pi_inf = pi_infs(1)
22248 gamma = gammas(1)
22249 lit_gamma = gs_min(1)
22250
22251 ! Transferring the patch's centroid and length information
22252 x_centroid = patch_icpp(patch_id)%x_centroid
22253 length_x = patch_icpp(patch_id)%length_x
22254
22255 ! Computing the beginning and the end x- and y-coordinates of the patch based on its centroid and lengths
22256 x_boundary%beg = x_centroid - 0.5_wp*length_x
22257 x_boundary%end = x_centroid + 0.5_wp*length_x
22258
22259 ! Set eta=1 (no smoothing for this patch type)
22260 eta = 1._wp
22261
22262 ! Assign patch vars if cell is covered and patch has write permission
22263 do i = 0, m
22264 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, &
22265 & 0, 0))) then
22266 call s_assign_patch_primitive_variables(patch_id, i, 0, 0, eta, q_prim_vf, patch_id_fp)
22267
22268
22269 if (patch_icpp(patch_id)%hcid /= dflt_int) then
22270 select case (patch_icpp(patch_id)%hcid)
22271# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22272 case (150) ! 1D Smooth Alfven Case for MHD
22273# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22274 ! velocity
22275# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22276 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, 0, 0) = 0.1_wp*sin(2._wp*pi*x_cc(i))
22277# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22278 q_prim_vf(eqn_idx%mom%beg + 2)%sf(i, 0, 0) = 0.1_wp*cos(2._wp*pi*x_cc(i))
22279# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22280
22281# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22282 ! magnetic field
22283# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22284 q_prim_vf(eqn_idx%B%end - 1)%sf(i, 0, 0) = 0.1_wp*sin(2._wp*pi*x_cc(i))
22285# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22286 q_prim_vf(eqn_idx%B%end)%sf(i, 0, 0) = 0.1_wp*cos(2._wp*pi*x_cc(i))
22287# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22288 case (170) ! 1D profile from external data (e.g. Cantera, SDtoolbox)
22289# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22290 ! This hardcoded case can be used to start a simulation with initial conditions given from a known 1D profile (e.g. Cantera,
22291# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22292 ! SDtoolbox)
22293# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22294 if (.not. files_loaded) then
22295# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22296 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
22297# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22298 do f = 1, max_files
22299# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22300 write (file_num_str, '(I0)') f
22301# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22302 filenames(f) = trim(files_dir) // "/" // "prim." // trim(file_num_str) // ".00." // trim(file_extension) // ".dat"
22303# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22304 end do
22305# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22306
22307# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22308 ! Common file reading setup
22309# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22310 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
22311# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22312 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
22313# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22314
22315# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22316 select case (num_dims)
22317# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22318 case (1, 2) ! 1D and 2D cases are similar
22319# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22320 ! Count lines
22321# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22322 line_count = 0
22323# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22324 do
22325# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22326 read (unit2, *, iostat=ios2) dummy_x, dummy_y
22327# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22328 if (ios2 /= 0) exit
22329# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22330 line_count = line_count + 1
22331# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22332 end do
22333# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22334 close (unit2)
22335# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22336
22337# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22338 xrows = line_count
22339# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22340 yrows = 1
22341# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22342 index_x = 0
22343# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22344 if (num_dims == 2) index_x = i
22345# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22346#ifdef MFC_DEBUG
22347# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22348 block
22349# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22350 use iso_fortran_env, only: output_unit
22351# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22352
22353# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22354 print *, 'm_icpp_patches.fpp:834: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
22355# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22356
22357# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22358 call flush (output_unit)
22359# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22360 end block
22361# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22362#endif
22363# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22364 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
22365# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22366
22367# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22368
22369# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22370
22371# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22372#if defined(MFC_OpenACC)
22373# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22374!$acc enter data create(x_coords, stored_values)
22375# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22376#elif defined(MFC_OpenMP)
22377# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22378!$omp target enter data map(always,alloc:x_coords, stored_values)
22379# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22380#endif
22381# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22382
22383# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22384 ! Read data from all files
22385# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22386 do f = 1, max_files
22387# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22388 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
22389# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22390 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
22391# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22392
22393# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22394 do iter = 1, xrows
22395# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22396 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
22397# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22398 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
22399# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22400 end do
22401# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22402 close (unit)
22403# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22404 end do
22405# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22406
22407# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22408 ! Calculate offsets
22409# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22410 domain_xstart = x_coords(1)
22411# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22412 x_step = x_cc(1) - x_cc(0)
22413# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22414 delta_x = merge(x_cc(0) - domain_xstart, x_cc(index_x) - domain_xstart, num_dims == 1)
22415# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22416 global_offset_x = nint(abs(delta_x)/x_step)
22417# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22418 case (3) ! 3D case - determine grid structure
22419# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22420 ! Find yRows by counting rows with same x
22421# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22422 read (unit2, *, iostat=ios2) x0, y0, dummy_z
22423# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22424 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
22425# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22426
22427# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22428 yrows = 1
22429# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22430 do
22431# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22432 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
22433# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22434 if (ios2 /= 0) exit
22435# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22436 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
22437# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22438 yrows = yrows + 1
22439# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22440 else
22441# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22442 exit
22443# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22444 end if
22445# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22446 end do
22447# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22448 close (unit2)
22449# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22450
22451# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22452 ! Count total rows
22453# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22454 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
22455# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22456 nrows = 0
22457# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22458 do
22459# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22460 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
22461# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22462 if (ios2 /= 0) exit
22463# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22464 nrows = nrows + 1
22465# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22466 end do
22467# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22468 close (unit2)
22469# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22470
22471# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22472 xrows = nrows/yrows
22473# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22474#ifdef MFC_DEBUG
22475# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22476 block
22477# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22478 use iso_fortran_env, only: output_unit
22479# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22480
22481# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22482 print *, 'm_icpp_patches.fpp:834: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
22483# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22484
22485# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22486 call flush (output_unit)
22487# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22488 end block
22489# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22490#endif
22491# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22492 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
22493# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22494
22495# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22496
22497# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22498
22499# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22500
22501# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22502#if defined(MFC_OpenACC)
22503# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22504!$acc enter data create(x_coords, y_coords, stored_values)
22505# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22506#elif defined(MFC_OpenMP)
22507# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22508!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
22509# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22510#endif
22511# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22512 index_x = i
22513# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22514 index_y = j
22515# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22516
22517# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22518 ! Read all files
22519# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22520 do f = 1, max_files
22521# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22522 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
22523# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22524 if (ios /= 0) then
22525# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22526 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
22527# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22528 cycle
22529# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22530 end if
22531# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22532
22533# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22534 iter = 0
22535# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22536 do iix = 1, xrows
22537# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22538 do iiy = 1, yrows
22539# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22540 iter = iter + 1
22541# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22542 if (f == 1) then
22543# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22544 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
22545# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22546 else
22547# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22548 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
22549# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22550 end if
22551# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22552 if (ios /= 0) call s_mpi_abort("Error reading data")
22553# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22554 end do
22555# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22556 end do
22557# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22558 close (unit)
22559# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22560 end do
22561# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22562
22563# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22564 ! Calculate offsets
22565# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22566 x_step = x_cc(1) - x_cc(0)
22567# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22568 y_step = y_cc(1) - y_cc(0)
22569# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22570 delta_x = x_cc(index_x) - x_coords(1)
22571# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22572 delta_y = y_cc(index_y) - y_coords(1)
22573# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22574 global_offset_x = nint(abs(delta_x)/x_step)
22575# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22576 global_offset_y = nint(abs(delta_y)/y_step)
22577# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22578 end select
22579# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22580
22581# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22582 files_loaded = .true.
22583# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22584 end if
22585# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22586
22587# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22588 ! Data assignment
22589# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22590 select case (num_dims)
22591# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22592 case (1)
22593# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22594 idx = i + 1 + global_offset_x
22595# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22596 ! idx must land inside the file's row range: this rank's subdomain offset
22597# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22598 ! (global_offset_x) was derived from this rank's own grid, so a miss means the
22599# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22600 ! IC file is misaligned/mis-sized for the run grid, not a normal boundary case.
22601# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22602 if (idx < 1 .or. idx > xrows) &
22603# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22604 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
22605# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22606 do f = 1, sys_size
22607# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22608 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
22609# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22610 end do
22611# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22612 case (2)
22613# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22614 idx = i + 1 + global_offset_x - index_x
22615# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22616 if (idx < 1 .or. idx > xrows) &
22617# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22618 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
22619# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22620 do f = 1, sys_size - 1
22621# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22622 jump = merge(1, 0, f >= eqn_idx%mom%end)
22623# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22624 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
22625# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22626 end do
22627# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22628 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
22629# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22630 case (3)
22631# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22632 idx = i + 1 + global_offset_x - index_x
22633# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22634 idy = j + 1 + global_offset_y - index_y
22635# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22636 if (idx < 1 .or. idx > xrows .or. idy < 1 .or. idy > yrows) &
22637# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22638 & call s_mpi_abort("Hardcoded IC extrusion: row/column index out of range (IC file misaligned with the run grid)")
22639# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22640 do f = 1, sys_size - 1
22641# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22642 jump = merge(1, 0, f >= eqn_idx%mom%end)
22643# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22644 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
22645# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22646 end do
22647# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22648 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
22649# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22650 end select
22651# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22652 case (180) ! Shu-Osher problem
22653# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22654 ! This is patch is hard-coded for test suite optimization used in the 1D_shuoser cases: "patch_icpp(2)%alpha_rho(1)": "1 +
22655# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22656 ! 0.2*sin(5*x)"
22657# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22658 if (patch_id == 2) then
22659# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22660 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, 0, 0) = 1 + 0.2*sin(5*x_cc(i))
22661# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22662 end if
22663# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22664 case (181) ! Titarev-Torro problem
22665# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22666 ! This is patch is hard-coded for test suite optimization used in the 1D_titarevtorro cases: "patch_icpp(2)%alpha_rho(1)":
22667# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22668 ! "1 + 0.1*sin(20*x*pi)"
22669# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22670 q_prim_vf(eqn_idx%cont%beg + 0)%sf(i, 0, 0) = 1 + 0.1*sin(20*x_cc(i)*pi)
22671# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22672 case (182) ! Multi-component diffusion
22673# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22674 ! This patch is a hard-coded for test suite optimization (multiple component diffusion)
22675# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22676 x_mid_diffu = 0.05_wp/2.0_wp
22677# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22678 width_sq = (2.5_wp*10.0_wp**(-3.0_wp))**2
22679# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22680 profile_shape = 1.0_wp - 0.5_wp*exp(-(x_cc(i) - x_mid_diffu)**2/width_sq)
22681# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22682 q_prim_vf(eqn_idx%mom%beg)%sf(i, 0, 0) = 0.0_wp
22683# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22684 q_prim_vf(eqn_idx%E)%sf(i, 0, 0) = 1.01325_wp*(10.0_wp)**5
22685# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22686 q_prim_vf(eqn_idx%adv%beg)%sf(i, 0, 0) = 1.0_wp
22687# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22688
22689# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22690 y1 = (0.195_wp - 0.142_wp)*profile_shape + 0.142_wp
22691# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22692 y2 = (0.0_wp - 0.1_wp)*profile_shape + 0.1_wp
22693# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22694 y3 = (0.214_wp - 0.0_wp)*profile_shape + 0.0_wp
22695# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22696 y4 = (0.591_wp - 0.758_wp)*profile_shape + 0.758_wp
22697# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22698
22699# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22700 q_prim_vf(eqn_idx%species%beg)%sf(i, 0, 0) = y1
22701# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22702 q_prim_vf(eqn_idx%species%beg + 1)%sf(i, 0, 0) = y2
22703# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22704 q_prim_vf(eqn_idx%species%beg + 2)%sf(i, 0, 0) = y3
22705# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22706 q_prim_vf(eqn_idx%species%beg + 3)%sf(i, 0, 0) = y4
22707# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22708
22709# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22710 temp = (320.0_wp - 1350.0_wp)*profile_shape + 1350.0_wp
22711# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22712
22713# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22714 molar_mass_inv = y1/31.998_wp + y2/18.01508_wp + y3/16.04256_wp + y4/28.0134_wp
22715# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22716
22717# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22718 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)
22719# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22720 case(191) ! 1D Dual Isothermal case
22721# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22722 q_prim_vf(eqn_idx%E)%sf(i, 0, 0) = 101325.0_wp
22723# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22724 q_prim_vf(eqn_idx%mom%beg)%sf(i, 0, 0) = 0.0_wp
22725# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22726 q_prim_vf(eqn_idx%species%beg)%sf(i, 0, 0) = 1.0_wp
22727# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22728
22729# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22730 if (x_cc(i) <= 0.025_wp) then
22731# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22732 temp = 700.0_wp + ((1000.0_wp - 700.0_wp)/0.025_wp)*x_cc(i)
22733# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22734 else
22735# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22736 temp = 1200.0_wp + ((900.0_wp - 1000.0_wp)/0.025_wp)*(x_cc(i) - 0.025_wp)
22737# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22738 end if
22739# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22740
22741# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22742 molar_mass_inv = 1.0_wp/2.01588_wp
22743# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22744 q_prim_vf(eqn_idx%cont%beg)%sf(i, 0, 0) = 101325.0_wp/(temp*8.3144626_wp*1000.0_wp*molar_mass_inv)
22745# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22746 case default
22747# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22748 call s_int_to_str(patch_id, istr)
22749# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22750 call s_mpi_abort("Invalid hcid specified for patch " // trim(istr))
22751# 834 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22752 end select
22753 end if
22754 end if
22755 end do
22756 if (allocated(stored_values)) then
22757# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22758#ifdef MFC_DEBUG
22759# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22760 block
22761# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22762 use iso_fortran_env, only: output_unit
22763# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22764
22765# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22766 print *, 'm_icpp_patches.fpp:838: ', '@:DEALLOCATE(stored_values)'
22767# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22768
22769# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22770 call flush (output_unit)
22771# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22772 end block
22773# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22774#endif
22775# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22776
22777# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22778#if defined(MFC_OpenACC)
22779# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22780!$acc exit data delete(stored_values)
22781# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22782#elif defined(MFC_OpenMP)
22783# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22784!$omp target exit data map(release:stored_values)
22785# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22786#endif
22787# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22788 deallocate (stored_values)
22789# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22790#ifdef MFC_DEBUG
22791# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22792 block
22793# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22794 use iso_fortran_env, only: output_unit
22795# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22796
22797# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22798 print *, 'm_icpp_patches.fpp:838: ', '@:DEALLOCATE(x_coords)'
22799# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22800
22801# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22802 call flush (output_unit)
22803# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22804 end block
22805# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22806#endif
22807# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22808
22809# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22810#if defined(MFC_OpenACC)
22811# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22812!$acc exit data delete(x_coords)
22813# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22814#elif defined(MFC_OpenMP)
22815# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22816!$omp target exit data map(release:x_coords)
22817# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22818#endif
22819# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22820 deallocate (x_coords)
22821# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22822 end if
22823# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22824
22825# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22826 if (allocated(y_coords)) then
22827# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22828#ifdef MFC_DEBUG
22829# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22830 block
22831# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22832 use iso_fortran_env, only: output_unit
22833# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22834
22835# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22836 print *, 'm_icpp_patches.fpp:838: ', '@:DEALLOCATE(y_coords)'
22837# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22838
22839# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22840 call flush (output_unit)
22841# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22842 end block
22843# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22844#endif
22845# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22846
22847# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22848#if defined(MFC_OpenACC)
22849# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22850!$acc exit data delete(y_coords)
22851# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22852#elif defined(MFC_OpenMP)
22853# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22854!$omp target exit data map(release:y_coords)
22855# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22856#endif
22857# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22858 deallocate (y_coords)
22859# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22860 end if
22861# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22862
22863# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22864 files_loaded = .false.
22865# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22866
22867# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22868 if (allocated(stored_values274)) then
22869# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22870#ifdef MFC_DEBUG
22871# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22872 block
22873# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22874 use iso_fortran_env, only: output_unit
22875# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22876
22877# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22878 print *, 'm_icpp_patches.fpp:838: ', '@:DEALLOCATE(stored_values274)'
22879# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22880
22881# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22882 call flush (output_unit)
22883# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22884 end block
22885# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22886#endif
22887# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22888
22889# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22890#if defined(MFC_OpenACC)
22891# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22892!$acc exit data delete(stored_values274)
22893# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22894#elif defined(MFC_OpenMP)
22895# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22896!$omp target exit data map(release:stored_values274)
22897# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22898#endif
22899# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22900 deallocate (stored_values274)
22901# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22902 end if
22903# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22904
22905# 838 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
22906 files_loaded274 = .false.
22907
22908 end subroutine s_icpp_1d_bubble_pulse
22909
22910 !> 2D modal (Fourier) patch. theta = atan2(y - y_centroid, x - x_centroid). Additive (modal_use_exp_form false): R = radius +
22911 !! sum_n [fourier_cos*cos(n*theta)+fourier_sin*sin(n*theta)]; coefficients are absolute (same units as radius). R is clipped to
22912 !! 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);
22913 !! coefficients are relative (dimensionless).
22914 subroutine s_icpp_2d_modal(patch_id, patch_id_fp, q_prim_vf)
22915
22916 integer, intent(in) :: patch_id
22917
22918#ifdef MFC_MIXED_PRECISION
22919 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
22920#else
22921 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
22922#endif
22923 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
22924 real(wp) :: r, theta, R_boundary, sum_series
22925 integer :: i, j, nn
22926
22927 x_centroid = patch_icpp(patch_id)%x_centroid
22928 y_centroid = patch_icpp(patch_id)%y_centroid
22929 smooth_patch_id = patch_icpp(patch_id)%smooth_patch_id
22930 smooth_coeff = patch_icpp(patch_id)%smooth_coeff
22931 eta = 1._wp
22932
22933 do j = 0, n
22934 do i = 0, m
22935 r = sqrt((x_cc(i) - x_centroid)**2 + (y_cc(j) - y_centroid)**2)
22936 if (r < small_radius) then
22937 theta = 0._wp
22938 else
22939 theta = atan2(y_cc(j) - y_centroid, x_cc(i) - x_centroid)
22940 end if
22941 sum_series = 0._wp
22942 do nn = 1, max_2d_fourier_modes
22943 sum_series = sum_series + patch_icpp(patch_id)%fourier_cos(nn)*cos(real(nn, &
22944 & wp)*theta) + patch_icpp(patch_id)%fourier_sin(nn)*sin(real(nn, wp)*theta)
22945 end do
22946 if (patch_icpp(patch_id)%modal_use_exp_form) then
22947 r_boundary = patch_icpp(patch_id)%radius*exp(sum_series)
22948 else
22949 r_boundary = patch_icpp(patch_id)%radius + sum_series
22950 r_boundary = max(r_boundary, 0._wp)
22951 if (patch_icpp(patch_id)%modal_clip_r_to_min) then
22952 r_boundary = max(r_boundary, patch_icpp(patch_id)%modal_r_min)
22953 end if
22954 end if
22955 if (patch_icpp(patch_id)%smoothen) then
22956 eta = 0.5_wp + 0.5_wp*tanh(smooth_coeff/min(dx, dy)*(r_boundary - r))
22957 end if
22958 if ((r <= r_boundary .and. patch_icpp(patch_id)%alter_patch(patch_id_fp(i, j, 0))) .or. patch_id_fp(i, j, &
22959 & 0) == smooth_patch_id) then
22960 call s_assign_patch_primitive_variables(patch_id, i, j, 0, eta, q_prim_vf, patch_id_fp)
22961 end if
22962 end do
22963 end do
22964
22965 end subroutine s_icpp_2d_modal
22966
22967 !> 3D spherical harmonic patch. Surface r = radius + sum_lm sph_har_coeff(l,m)*Y_lm(theta,phi). theta = acos(z/r), phi =
22968 !! atan2(y,x) relative to centroid.
22969 subroutine s_icpp_3d_spherical_harmonic(patch_id, patch_id_fp, q_prim_vf)
22970
22971 integer, intent(in) :: patch_id
22972
22973#ifdef MFC_MIXED_PRECISION
22974 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
22975#else
22976 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
22977#endif
22978 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
22979 real(wp) :: dx_loc, dy_loc, dz_loc, r, theta, phi, R_surface, eta_local
22980 integer :: i, j, k, ll, mm
22981
22982 x_centroid = patch_icpp(patch_id)%x_centroid
22983 y_centroid = patch_icpp(patch_id)%y_centroid
22984 z_centroid = patch_icpp(patch_id)%z_centroid
22985 smooth_patch_id = patch_icpp(patch_id)%smooth_patch_id
22986 smooth_coeff = patch_icpp(patch_id)%smooth_coeff
22987 eta_local = 1._wp
22988
22989 do k = 0, p
22990 do j = 0, n
22991 do i = 0, m
22992 if (grid_geometry == 3) then
22993 call s_convert_cylindrical_to_cartesian_coord(y_cc(j), z_cc(k))
22994 dx_loc = x_cc(i) - x_centroid
22995 dy_loc = cart_y - y_centroid
22996 dz_loc = cart_z - z_centroid
22997 else
22998 dx_loc = x_cc(i) - x_centroid
22999 dy_loc = y_cc(j) - y_centroid
23000 dz_loc = z_cc(k) - z_centroid
23001 end if
23002 r = sqrt(dx_loc**2 + dy_loc**2 + dz_loc**2)
23003 if (r < small_radius) then
23004 theta = 0._wp
23005 phi = 0._wp
23006 else
23007 theta = acos(min(1._wp, max(-1._wp, dz_loc/r)))
23008 phi = atan2(dy_loc, dx_loc)
23009 end if
23010 r_surface = patch_icpp(patch_id)%radius
23011 do ll = 0, max_sph_harm_degree
23012 do mm = -ll, ll
23013 if (patch_icpp(patch_id)%sph_har_coeff(ll, mm) == 0._wp) cycle
23014 r_surface = r_surface + patch_icpp(patch_id)%sph_har_coeff(ll, mm)*real_ylm(theta, phi, ll, mm)
23015 end do
23016 end do
23017 if (patch_icpp(patch_id)%smoothen) then
23018 eta_local = 0.5_wp + 0.5_wp*tanh(smooth_coeff/min(dx, dy, dz)*(r_surface - r))
23019 end if
23020 if ((r <= r_surface .and. patch_icpp(patch_id)%alter_patch(patch_id_fp(i, j, k))) .or. patch_id_fp(i, j, &
23021 & k) == smooth_patch_id) then
23022 call s_assign_patch_primitive_variables(patch_id, i, j, k, eta_local, q_prim_vf, patch_id_fp)
23023 end if
23024 end do
23025 end do
23026 end do
23027
23028 end subroutine s_icpp_3d_spherical_harmonic
23029
23030 !> The spherical patch is a 3D geometry that may be used, for example, in creating a bubble or a droplet. The patch geometry is
23031 !! well-defined when its centroid and radius are provided. Please note that the spherical patch DOES allow for the smoothing of
23032 !! its boundary.
23033 subroutine s_icpp_sphere(patch_id, patch_id_fp, q_prim_vf)
23034
23035 integer, intent(in) :: patch_id
23036
23037#ifdef MFC_MIXED_PRECISION
23038 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
23039#else
23040 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
23041#endif
23042 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
23043
23044 ! Generic loop iterators
23045 integer :: i, j, k
23046 real(wp) :: radius
23047
23048 integer :: xRows, yRows, nRows, iix, iiy, max_files
23049# 980 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23050 integer :: f, iter, unit, unit2, idx, idy, index_x, index_y, jump, line_count
23051# 980 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23052 real(wp) :: x_step, y_step
23053# 980 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23054 real(wp) :: dummy_x, dummy_y, dummy_z, x0, y0
23055# 980 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23056 integer :: global_offset_x, global_offset_y !< MPI subdomain offset
23057# 980 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23058 real(wp) :: delta_x, delta_y
23059# 980 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23060 character(len=300), dimension(sys_size) :: fileNames !< Arrays to store all data from files
23061# 980 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23062 real(wp), allocatable :: stored_values(:,:,:)
23063# 980 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23064 real(wp), allocatable :: x_coords(:), y_coords(:)
23065# 980 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23066 logical :: files_loaded = .false.
23067# 980 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23068 real(wp) :: domain_xstart
23069# 980 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23070 character(len=20) :: file_num_str !< For storing the file number as a string
23071# 980 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23072 integer :: ios
23073# 980 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23074 integer :: ios2
23075# 980 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23076
23077# 980 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23078 ! hcid=274 (2dHardcodedIC.fpp): full 2D field from external data, no extrusion.
23079# 980 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23080 ! Declared here (not in Hardcoded2DVariables()) so it's visible wherever
23081# 980 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23082 ! HardcodedDeallocation() is called, matching the pattern of stored_values/x_coords/
23083# 980 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23084 ! y_coords/files_loaded above.
23085# 980 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23086 real(wp), allocatable, dimension(:,:,:) :: stored_values274
23087# 980 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23088 logical :: files_loaded274 = .false.
23089# 980 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23090 integer :: f274, ix274, iy274, unit274, ios274
23091# 980 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23092 integer :: local_ix_beg274, local_iy_beg274
23093# 980 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23094 character(len=300) :: fname274
23095# 980 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23096 character(len=20) :: file_num_str274
23097# 980 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23098 real(wp) :: dummy_x274, dummy_y274, dummy_val274, x0_274, y0_274, x_step274, y_step274
23099# 980 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23100 real(wp) :: file_dx274, file_dy274, r_align274
23101 ! Place any declaration of intermediate variables here
23102# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23103 real(wp) :: rhoH, rhoL, pRef, pInt, h, lam, wl, amp, intH, alph, Mach
23104# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23105 real(wp) :: eps
23106# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23107
23108# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23109 ! IGR Jets Arrays to stor position and radii of jets from input file
23110# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23111 real(wp), dimension(:), allocatable :: y_th_arr, z_th_arr, r_th_arr
23112# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23113 ! Variables to describe initial condition of jet
23114# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23115 real(wp) :: r, ux_th, ux_am, p_th, p_am, rho_th, rho_am, y_th, z_th, r_th, eps_smooth
23116# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23117 real(wp) :: rcut, xcut !< Intermediate variables for creating smooth initial condition
23118# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23119 real(wp), dimension(0:n,0:p) :: rcut_arr
23120# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23121 integer :: l, q, s !< Iterators for reading input files
23122# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23123 integer :: start, end !< Ints to keep track of position in file
23124# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23125 character(len=100000) :: line ! String to store line in file
23126# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23127 character(len=25) :: value !< String to store value in line
23128# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23129 integer :: NJet !< Number of jets
23130# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23131 real(wp), allocatable, dimension(:,:) :: ih ! Array to store interface height in
23132# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23133 logical :: file_exist ! Flag to check if file exists
23134# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23135
23136# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23137 eps = 1e-9_wp
23138# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23139
23140# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23141 if (patch_icpp(patch_id)%hcid == 303) then ! IGR Multijet
23142# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23143 eps_smooth = 3._wp
23144# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23145 inquire (file="njet.txt", exist=file_exist)
23146# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23147 if (file_exist) then
23148# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23149 open (unit=10, file="njet.txt", status="old", action="read")
23150# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23151 read (10, *) njet
23152# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23153 close (10)
23154# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23155 else
23156# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23157 call s_mpi_abort("Error: njet.txt file specified for hcid=303 does not exist")
23158# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23159 end if
23160# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23161
23162# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23163#ifdef MFC_DEBUG
23164# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23165 block
23166# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23167 use iso_fortran_env, only: output_unit
23168# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23169
23170# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23171 print *, 'm_icpp_patches.fpp:981: ', '@:ALLOCATE(y_th_arr(0:NJet - 1))'
23172# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23173
23174# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23175 call flush (output_unit)
23176# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23177 end block
23178# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23179#endif
23180# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23181 allocate (y_th_arr(0:njet - 1))
23182# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23183
23184# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23185
23186# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23187#if defined(MFC_OpenACC)
23188# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23189!$acc enter data create(y_th_arr)
23190# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23191#elif defined(MFC_OpenMP)
23192# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23193!$omp target enter data map(always,alloc:y_th_arr)
23194# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23195#endif
23196# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23197#ifdef MFC_DEBUG
23198# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23199 block
23200# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23201 use iso_fortran_env, only: output_unit
23202# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23203
23204# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23205 print *, 'm_icpp_patches.fpp:981: ', '@:ALLOCATE(z_th_arr(0:NJet - 1))'
23206# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23207
23208# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23209 call flush (output_unit)
23210# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23211 end block
23212# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23213#endif
23214# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23215 allocate (z_th_arr(0:njet - 1))
23216# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23217
23218# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23219
23220# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23221#if defined(MFC_OpenACC)
23222# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23223!$acc enter data create(z_th_arr)
23224# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23225#elif defined(MFC_OpenMP)
23226# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23227!$omp target enter data map(always,alloc:z_th_arr)
23228# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23229#endif
23230# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23231#ifdef MFC_DEBUG
23232# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23233 block
23234# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23235 use iso_fortran_env, only: output_unit
23236# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23237
23238# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23239 print *, 'm_icpp_patches.fpp:981: ', '@:ALLOCATE(r_th_arr(0:NJet - 1))'
23240# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23241
23242# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23243 call flush (output_unit)
23244# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23245 end block
23246# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23247#endif
23248# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23249 allocate (r_th_arr(0:njet - 1))
23250# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23251
23252# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23253
23254# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23255#if defined(MFC_OpenACC)
23256# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23257!$acc enter data create(r_th_arr)
23258# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23259#elif defined(MFC_OpenMP)
23260# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23261!$omp target enter data map(always,alloc:r_th_arr)
23262# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23263#endif
23264# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23265
23266# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23267 inquire (file="jets.csv", exist=file_exist)
23268# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23269 if (file_exist) then
23270# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23271 open (unit=10, file="jets.csv", status="old", action="read")
23272# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23273 do q = 0, njet - 1
23274# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23275 read (10, '(A)') line ! Read a full line as a string
23276# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23277 start = 1
23278# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23279
23280# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23281 do l = 0, 2
23282# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23283 end = index(line(start:), ',') ! Find the next comma
23284# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23285 if (end == 0) then
23286# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23287 value = trim(adjustl(line(start:))) ! Last value in the line
23288# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23289 else
23290# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23291 value = trim(adjustl(line(start:start + end - 2))) ! Extract substring
23292# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23293 start = start + end ! Move to next value
23294# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23295 end if
23296# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23297 if (l == 0) then
23298# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23299 read (value, *) y_th_arr(q) ! Convert string to numeric value
23300# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23301 else if (l == 1) then
23302# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23303 read (value, *) z_th_arr(q)
23304# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23305 else
23306# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23307 read (value, *) r_th_arr(q)
23308# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23309 end if
23310# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23311 end do
23312# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23313 end do
23314# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23315 close (10)
23316# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23317
23318# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23319 do q = 0, p
23320# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23321 do l = 0, n
23322# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23323 rcut = 0._wp
23324# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23325 do s = 0, njet - 1
23326# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23327 r = sqrt((y_cc(l) - y_th_arr(s))**2._wp + (z_cc(q) - z_th_arr(s))**2._wp)
23328# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23329 rcut = rcut + f_cut_on(r - r_th_arr(s), eps_smooth)
23330# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23331 end do
23332# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23333 rcut_arr(l, q) = rcut
23334# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23335 end do
23336# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23337 end do
23338# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23339 else
23340# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23341 call s_mpi_abort("Error: jets.csv file specified for hcid=303 does not exist")
23342# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23343 end if
23344# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23345 end if
23346# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23347
23348# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23349 if (patch_icpp(patch_id)%hcid == 304) then ! 3D Cartesian interface from file
23350# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23351#ifdef MFC_DEBUG
23352# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23353 block
23354# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23355 use iso_fortran_env, only: output_unit
23356# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23357
23358# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23359 print *, 'm_icpp_patches.fpp:981: ', '@:ALLOCATE(ih(0:n_glb, 0:p_glb))'
23360# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23361
23362# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23363 call flush (output_unit)
23364# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23365 end block
23366# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23367#endif
23368# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23369 allocate (ih(0:n_glb, 0:p_glb))
23370# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23371
23372# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23373
23374# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23375#if defined(MFC_OpenACC)
23376# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23377!$acc enter data create(ih)
23378# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23379#elif defined(MFC_OpenMP)
23380# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23381!$omp target enter data map(always,alloc:ih)
23382# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23383#endif
23384# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23385
23386# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23387 if (interface_file == '.') then
23388# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23389 call s_mpi_abort("Error: interface_file must be specified for hcid=304")
23390# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23391 else
23392# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23393 inquire (file=trim(interface_file), exist=file_exist)
23394# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23395 if (file_exist) then
23396# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23397 open (unit=10, file=trim(interface_file), status="old", action="read")
23398# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23399 do i = 0, n_glb
23400# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23401 read (10, '(A)') line ! Read a full line as a string
23402# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23403 start = 1
23404# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23405
23406# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23407 do j = 0, p_glb
23408# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23409 end = index(line(start:), ',') ! Find the next comma
23410# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23411 if (end == 0) then
23412# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23413 value = trim(adjustl(line(start:))) ! Last value in the line
23414# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23415 else
23416# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23417 value = trim(adjustl(line(start:start + end - 2))) ! Extract substring
23418# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23419 start = start + end ! Move to next value
23420# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23421 end if
23422# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23423 read (value, *) ih(i, j) ! Convert string to numeric value
23424# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23425 if (.not. f_is_default(normmag)) ih(i, j) = ih(i, j)*normmag
23426# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23427 if (.not. f_is_default(normfac)) ih(i, j) = ih(i, j) + normfac
23428# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23429 end do
23430# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23431 end do
23432# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23433 close (10)
23434# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23435 else
23436# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23437 call s_mpi_abort("Error: interface_file specified for hcid=304 does not exist")
23438# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23439 end if
23440# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23441 end if
23442# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23443 end if
23444# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23445
23446# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23447 if (patch_icpp(patch_id)%hcid == 305) then ! 3D Axisymmetric interface from file
23448# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23449#ifdef MFC_DEBUG
23450# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23451 block
23452# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23453 use iso_fortran_env, only: output_unit
23454# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23455
23456# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23457 print *, 'm_icpp_patches.fpp:981: ', '@:ALLOCATE(ih(0:n_glb, 0:0))'
23458# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23459
23460# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23461 call flush (output_unit)
23462# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23463 end block
23464# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23465#endif
23466# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23467 allocate (ih(0:n_glb, 0:0))
23468# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23469
23470# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23471
23472# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23473#if defined(MFC_OpenACC)
23474# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23475!$acc enter data create(ih)
23476# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23477#elif defined(MFC_OpenMP)
23478# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23479!$omp target enter data map(always,alloc:ih)
23480# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23481#endif
23482# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23483 if (interface_file == '.') then
23484# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23485 call s_mpi_abort("Error: interface_file must be specified for hcid=305")
23486# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23487 else
23488# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23489 inquire (file=trim(interface_file), exist=file_exist)
23490# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23491 if (file_exist) then
23492# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23493 open (unit=10, file=trim(interface_file), status="old", action="read")
23494# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23495 do i = 0, n_glb
23496# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23497 read (10, '(A)') line ! Read a full line as a string
23498# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23499 value = trim(line)
23500# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23501 read (value, *) ih(i, 0) ! Convert string to numeric value
23502# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23503 if (.not. f_is_default(normmag)) ih(i, 0) = ih(i, 0)*normmag
23504# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23505 if (.not. f_is_default(normfac)) ih(i, 0) = ih(i, 0) + normfac
23506# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23507 end do
23508# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23509 close (10)
23510# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23511 else
23512# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23513 call s_mpi_abort("Error: interface_file specified for hcid=305 does not exist")
23514# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23515 end if
23516# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23517 end if
23518# 981 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23519 end if
23520
23521 ! Variables to initialize the pressure field that corresponds to the bubble-collapse test case found in Tiwari et al. (2013)
23522
23523 ! Transferring spherical patch's radius, centroid, smoothing patch identity and smoothing coefficient information
23524 x_centroid = patch_icpp(patch_id)%x_centroid
23525 y_centroid = patch_icpp(patch_id)%y_centroid
23526 z_centroid = patch_icpp(patch_id)%z_centroid
23527 radius = patch_icpp(patch_id)%radius
23528 smooth_patch_id = patch_icpp(patch_id)%smooth_patch_id
23529 smooth_coeff = patch_icpp(patch_id)%smooth_coeff
23530
23531 ! Initialize eta=1; modified if smoothing is enabled
23532 eta = 1._wp
23533
23534 ! Assign patch vars if cell is covered and patch has write permission
23535 do k = 0, p
23536 do j = 0, n
23537 do i = 0, m
23538 if (grid_geometry == 3) then
23540 else
23541 cart_y = y_cc(j)
23542 cart_z = z_cc(k)
23543 end if
23544
23545 if (patch_icpp(patch_id)%smoothen) then
23546 eta = tanh(smooth_coeff/min(dx, dy, &
23547 & dz)*(sqrt((x_cc(i) - x_centroid)**2 + (cart_y - y_centroid)**2 + (cart_z - z_centroid)**2) &
23548 & - radius))*(-0.5_wp) + 0.5_wp
23549 end if
23550
23551 if ((f_is_inside_sphere(x_cc(i) - x_centroid, cart_y - y_centroid, cart_z - z_centroid, &
23552 & radius) .and. patch_icpp(patch_id)%alter_patch(patch_id_fp(i, j, k))) .or. patch_id_fp(i, j, &
23553 & k) == smooth_patch_id) then
23554 call s_assign_patch_primitive_variables(patch_id, i, j, k, eta, q_prim_vf, patch_id_fp)
23555
23556
23557 if (patch_icpp(patch_id)%hcid /= dflt_int) then
23558 select case (patch_icpp(patch_id)%hcid)
23559# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23560 case (300) ! Rayleigh-Taylor instability
23561# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23562 rhoh = 3._wp
23563# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23564 rhol = 1._wp
23565# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23566 pref = 1.e5_wp
23567# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23568 pint = pref
23569# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23570 h = 0.7_wp
23571# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23572 lam = 0.2_wp
23573# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23574 wl = 2._wp*pi/lam
23575# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23576 amp = 0.025_wp/wl
23577# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23578
23579# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23580 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
23581# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23582
23583# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23584 alph = 5.e-1_wp*(1._wp + tanh((y_cc(j) - inth)/2.5e-3_wp))
23585# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23586
23587# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23588 if (alph < eps) alph = eps
23589# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23590 if (alph > 1._wp - eps) alph = 1._wp - eps
23591# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23592
23593# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23594 if (y_cc(j) > inth) then
23595# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23596 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
23597# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23598 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
23599# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23600 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = alph*rhoh
23601# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23602 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = (1._wp - alph)*rhol
23603# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23604 q_prim_vf(eqn_idx%E)%sf(i, j, k) = pref + rhoh*9.81_wp*(1.2_wp - y_cc(j))
23605# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23606 else
23607# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23608 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
23609# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23610 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
23611# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23612 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = alph*rhoh
23613# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23614 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = (1._wp - alph)*rhol
23615# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23616 pint = pref + rhoh*9.81_wp*(1.2_wp - inth)
23617# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23618 q_prim_vf(eqn_idx%E)%sf(i, j, k) = pint + rhol*9.81_wp*(inth - y_cc(j))
23619# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23620 end if
23621# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23622 case (301) ! (3D lung geometry in X direction, |sin(*)+sin(*)|)
23623# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23624 h = 0.0_wp
23625# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23626 lam = 1.0_wp
23627# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23628 amp = patch_icpp(patch_id)%a(2)
23629# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23630 inth = amp*abs((sin(2*pi*y_cc(j)/lam - pi/2) + sin(2*pi*z_cc(k)/lam - pi/2)) + h)
23631# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23632 if (x_cc(i) > inth) then
23633# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23634 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = patch_icpp(1)%alpha_rho(1)
23635# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23636 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = patch_icpp(1)%alpha_rho(2)
23637# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23638 q_prim_vf(eqn_idx%E)%sf(i, j, k) = patch_icpp(1)%pres
23639# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23640 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = patch_icpp(1)%alpha(1)
23641# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23642 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = patch_icpp(1)%alpha(2)
23643# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23644 end if
23645# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23646 case (302) ! 3D Jet with IGR
23647# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23648 ux_th = 10*sqrt(1.4*0.4)
23649# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23650 ux_am = 0.0*sqrt(1.4)
23651# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23652 p_th = 2.0_wp
23653# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23654 p_am = 1.0_wp
23655# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23656 rho_th = 1._wp
23657# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23658 rho_am = 1._wp
23659# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23660 y_th = 0.0_wp
23661# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23662 z_th = 0.0_wp
23663# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23664 r_th = 1._wp
23665# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23666 eps_smooth = 1._wp
23667# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23668 eps = 1e-6
23669# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23670
23671# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23672 r = sqrt((y_cc(j) - y_th)**2._wp + (z_cc(k) - z_th)**2._wp)
23673# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23674 rcut = f_cut_on(r - r_th, eps_smooth)
23675# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23676 xcut = f_cut_on(x_cc(i), eps_smooth)
23677# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23678
23679# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23680 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, k) = ux_th*rcut*xcut + ux_am
23681# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23682 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, k) = 0._wp
23683# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23684 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0._wp
23685# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23686
23687# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23688 if (num_fluids == 1) then
23689# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23690 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = (rho_th - rho_am)*rcut*xcut + rho_am
23691# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23692 else
23693# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23694 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = (1._wp - 2._wp*eps)*rcut*xcut + eps
23695# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23696 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = rho_th*q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)
23697# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23698 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))
23699# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23700 end if
23701# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23702
23703# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23704 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p_th*rcut*xcut + p_am
23705# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23706 case (303) ! 3D Multijet
23707# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23708 eps_smooth = 3.0_wp
23709# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23710 ux_th = 10*sqrt(1.4*0.4)
23711# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23712 ux_am = 2.5*sqrt(1.4*0.4)
23713# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23714 p_th = 0.8_wp
23715# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23716 p_am = 0.4_wp
23717# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23718 rho_th = 1._wp
23719# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23720 rho_am = 1._wp
23721# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23722 eps = 1e-6
23723# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23724
23725# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23726 rcut = rcut_arr(j, k)
23727# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23728 xcut = f_cut_on(x_cc(i), eps_smooth)
23729# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23730
23731# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23732 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, k) = ux_th*rcut*xcut + ux_am
23733# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23734 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, k) = 0._wp
23735# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23736 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0._wp
23737# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23738
23739# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23740 if (num_fluids == 1) then
23741# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23742 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = (rho_th - rho_am)*rcut*xcut + rho_am
23743# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23744 else
23745# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23746 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = (1._wp - 2._wp*eps)*rcut*xcut + eps
23747# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23748 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = rho_th*q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)
23749# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23750 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))
23751# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23752 end if
23753# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23754
23755# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23756 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p_th*rcut*xcut + p_am
23757# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23758 case (304) ! 3D Interface from file cartesian
23759# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23760 alph = 0.5_wp*(1 + (1._wp - 2._wp*eps)*tanh((ih(start_idx(2) + j, start_idx(3) + k) - x_cc(i))*(0.5_wp/dx)))
23761# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23762
23763# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23764 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
23765# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23766 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
23767# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23768
23769# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23770 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)*(950._wp/1000._wp)
23771# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23772 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = q_prim_vf(eqn_idx%adv%end)%sf(i, j, k)*(1._wp/1000._wp)
23773# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23774
23775# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23776 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p0_ic + (q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) + q_prim_vf(eqn_idx%cont%end)%sf(i, &
23777# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23778 & j, k))*g0_ic*(ih(start_idx(2) + j, start_idx(3) + k) - x_cc(i))
23779# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23780
23781# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23782 if (surface_tension) q_prim_vf(eqn_idx%c)%sf(i, j, k) = alph
23783# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23784 case (305) ! 3D Interface from file axisymmetric
23785# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23786 alph = 0.5_wp*(1 + (1._wp - 2._wp*eps)*tanh((ih(start_idx(2) + j, 0) - x_cc(i))*(0.01_wp/dx)))
23787# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23788
23789# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23790 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
23791# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23792 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
23793# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23794
23795# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23796 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)*1._wp
23797# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23798 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = q_prim_vf(eqn_idx%adv%end)%sf(i, j, k)*(1._wp/950._wp)
23799# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23800
23801# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23802 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p0_ic + (q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) + q_prim_vf(eqn_idx%cont%end)%sf(i, &
23803# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23804 & j, k))*g0_ic*(ih(start_idx(1) + i, start_idx(3) + k) - y_cc(j))
23805# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23806
23807# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23808 if (surface_tension) q_prim_vf(eqn_idx%c)%sf(i, j, k) = alph
23809# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23810 case (370) ! 3D extrusion of 2D profile from external data
23811# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23812 ! This hardcoded case extrudes a 2D profile to initialize a 3D simulation domain
23813# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23814 if (.not. files_loaded) then
23815# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23816 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
23817# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23818 do f = 1, max_files
23819# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23820 write (file_num_str, '(I0)') f
23821# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23822 filenames(f) = trim(files_dir) // "/" // "prim." // trim(file_num_str) // ".00." // trim(file_extension) // ".dat"
23823# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23824 end do
23825# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23826
23827# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23828 ! Common file reading setup
23829# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23830 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
23831# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23832 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
23833# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23834
23835# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23836 select case (num_dims)
23837# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23838 case (1, 2) ! 1D and 2D cases are similar
23839# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23840 ! Count lines
23841# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23842 line_count = 0
23843# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23844 do
23845# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23846 read (unit2, *, iostat=ios2) dummy_x, dummy_y
23847# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23848 if (ios2 /= 0) exit
23849# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23850 line_count = line_count + 1
23851# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23852 end do
23853# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23854 close (unit2)
23855# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23856
23857# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23858 xrows = line_count
23859# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23860 yrows = 1
23861# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23862 index_x = 0
23863# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23864 if (num_dims == 2) index_x = i
23865# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23866#ifdef MFC_DEBUG
23867# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23868 block
23869# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23870 use iso_fortran_env, only: output_unit
23871# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23872
23873# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23874 print *, 'm_icpp_patches.fpp:1020: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
23875# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23876
23877# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23878 call flush (output_unit)
23879# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23880 end block
23881# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23882#endif
23883# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23884 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
23885# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23886
23887# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23888
23889# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23890
23891# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23892#if defined(MFC_OpenACC)
23893# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23894!$acc enter data create(x_coords, stored_values)
23895# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23896#elif defined(MFC_OpenMP)
23897# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23898!$omp target enter data map(always,alloc:x_coords, stored_values)
23899# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23900#endif
23901# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23902
23903# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23904 ! Read data from all files
23905# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23906 do f = 1, max_files
23907# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23908 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
23909# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23910 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
23911# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23912
23913# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23914 do iter = 1, xrows
23915# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23916 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
23917# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23918 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
23919# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23920 end do
23921# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23922 close (unit)
23923# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23924 end do
23925# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23926
23927# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23928 ! Calculate offsets
23929# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23930 domain_xstart = x_coords(1)
23931# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23932 x_step = x_cc(1) - x_cc(0)
23933# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23934 delta_x = merge(x_cc(0) - domain_xstart, x_cc(index_x) - domain_xstart, num_dims == 1)
23935# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23936 global_offset_x = nint(abs(delta_x)/x_step)
23937# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23938 case (3) ! 3D case - determine grid structure
23939# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23940 ! Find yRows by counting rows with same x
23941# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23942 read (unit2, *, iostat=ios2) x0, y0, dummy_z
23943# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23944 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
23945# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23946
23947# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23948 yrows = 1
23949# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23950 do
23951# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23952 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
23953# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23954 if (ios2 /= 0) exit
23955# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23956 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
23957# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23958 yrows = yrows + 1
23959# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23960 else
23961# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23962 exit
23963# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23964 end if
23965# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23966 end do
23967# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23968 close (unit2)
23969# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23970
23971# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23972 ! Count total rows
23973# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23974 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
23975# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23976 nrows = 0
23977# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23978 do
23979# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23980 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
23981# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23982 if (ios2 /= 0) exit
23983# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23984 nrows = nrows + 1
23985# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23986 end do
23987# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23988 close (unit2)
23989# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23990
23991# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23992 xrows = nrows/yrows
23993# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23994#ifdef MFC_DEBUG
23995# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23996 block
23997# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
23998 use iso_fortran_env, only: output_unit
23999# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24000
24001# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24002 print *, 'm_icpp_patches.fpp:1020: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
24003# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24004
24005# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24006 call flush (output_unit)
24007# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24008 end block
24009# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24010#endif
24011# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24012 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
24013# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24014
24015# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24016
24017# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24018
24019# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24020
24021# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24022#if defined(MFC_OpenACC)
24023# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24024!$acc enter data create(x_coords, y_coords, stored_values)
24025# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24026#elif defined(MFC_OpenMP)
24027# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24028!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
24029# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24030#endif
24031# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24032 index_x = i
24033# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24034 index_y = j
24035# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24036
24037# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24038 ! Read all files
24039# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24040 do f = 1, max_files
24041# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24042 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
24043# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24044 if (ios /= 0) then
24045# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24046 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
24047# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24048 cycle
24049# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24050 end if
24051# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24052
24053# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24054 iter = 0
24055# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24056 do iix = 1, xrows
24057# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24058 do iiy = 1, yrows
24059# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24060 iter = iter + 1
24061# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24062 if (f == 1) then
24063# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24064 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
24065# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24066 else
24067# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24068 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
24069# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24070 end if
24071# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24072 if (ios /= 0) call s_mpi_abort("Error reading data")
24073# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24074 end do
24075# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24076 end do
24077# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24078 close (unit)
24079# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24080 end do
24081# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24082
24083# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24084 ! Calculate offsets
24085# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24086 x_step = x_cc(1) - x_cc(0)
24087# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24088 y_step = y_cc(1) - y_cc(0)
24089# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24090 delta_x = x_cc(index_x) - x_coords(1)
24091# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24092 delta_y = y_cc(index_y) - y_coords(1)
24093# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24094 global_offset_x = nint(abs(delta_x)/x_step)
24095# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24096 global_offset_y = nint(abs(delta_y)/y_step)
24097# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24098 end select
24099# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24100
24101# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24102 files_loaded = .true.
24103# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24104 end if
24105# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24106
24107# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24108 ! Data assignment
24109# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24110 select case (num_dims)
24111# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24112 case (1)
24113# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24114 idx = i + 1 + global_offset_x
24115# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24116 ! idx must land inside the file's row range: this rank's subdomain offset
24117# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24118 ! (global_offset_x) was derived from this rank's own grid, so a miss means the
24119# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24120 ! IC file is misaligned/mis-sized for the run grid, not a normal boundary case.
24121# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24122 if (idx < 1 .or. idx > xrows) &
24123# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24124 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
24125# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24126 do f = 1, sys_size
24127# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24128 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
24129# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24130 end do
24131# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24132 case (2)
24133# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24134 idx = i + 1 + global_offset_x - index_x
24135# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24136 if (idx < 1 .or. idx > xrows) &
24137# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24138 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
24139# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24140 do f = 1, sys_size - 1
24141# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24142 jump = merge(1, 0, f >= eqn_idx%mom%end)
24143# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24144 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
24145# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24146 end do
24147# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24148 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
24149# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24150 case (3)
24151# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24152 idx = i + 1 + global_offset_x - index_x
24153# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24154 idy = j + 1 + global_offset_y - index_y
24155# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24156 if (idx < 1 .or. idx > xrows .or. idy < 1 .or. idy > yrows) &
24157# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24158 & call s_mpi_abort("Hardcoded IC extrusion: row/column index out of range (IC file misaligned with the run grid)")
24159# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24160 do f = 1, sys_size - 1
24161# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24162 jump = merge(1, 0, f >= eqn_idx%mom%end)
24163# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24164 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
24165# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24166 end do
24167# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24168 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
24169# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24170 end select
24171# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24172 case (380) ! Taylor-Green vortex
24173# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24174 ! This is patch is hard-coded for test suite optimization used in the 3D_TaylorGreenVortex case: This analytic patch used
24175# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24176 ! geometry 9
24177# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24178 mach = 0.1
24179# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24180 if (patch_id == 1) then
24181# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24182 q_prim_vf(eqn_idx%E)%sf(i, j, &
24183# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24184 & 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)
24185# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24186 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)
24187# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24188 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)
24189# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24190 end if
24191# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24192 case default
24193# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24194 call s_int_to_str(patch_id, istr)
24195# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24196 call s_mpi_abort("Invalid hcid specified for patch " // trim(istr))
24197# 1020 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24198 end select
24199 end if
24200 end if
24201 end do
24202 end do
24203 end do
24204 if (allocated(stored_values)) then
24205# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24206#ifdef MFC_DEBUG
24207# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24208 block
24209# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24210 use iso_fortran_env, only: output_unit
24211# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24212
24213# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24214 print *, 'm_icpp_patches.fpp:1026: ', '@:DEALLOCATE(stored_values)'
24215# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24216
24217# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24218 call flush (output_unit)
24219# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24220 end block
24221# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24222#endif
24223# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24224
24225# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24226#if defined(MFC_OpenACC)
24227# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24228!$acc exit data delete(stored_values)
24229# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24230#elif defined(MFC_OpenMP)
24231# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24232!$omp target exit data map(release:stored_values)
24233# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24234#endif
24235# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24236 deallocate (stored_values)
24237# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24238#ifdef MFC_DEBUG
24239# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24240 block
24241# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24242 use iso_fortran_env, only: output_unit
24243# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24244
24245# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24246 print *, 'm_icpp_patches.fpp:1026: ', '@:DEALLOCATE(x_coords)'
24247# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24248
24249# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24250 call flush (output_unit)
24251# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24252 end block
24253# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24254#endif
24255# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24256
24257# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24258#if defined(MFC_OpenACC)
24259# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24260!$acc exit data delete(x_coords)
24261# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24262#elif defined(MFC_OpenMP)
24263# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24264!$omp target exit data map(release:x_coords)
24265# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24266#endif
24267# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24268 deallocate (x_coords)
24269# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24270 end if
24271# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24272
24273# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24274 if (allocated(y_coords)) then
24275# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24276#ifdef MFC_DEBUG
24277# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24278 block
24279# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24280 use iso_fortran_env, only: output_unit
24281# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24282
24283# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24284 print *, 'm_icpp_patches.fpp:1026: ', '@:DEALLOCATE(y_coords)'
24285# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24286
24287# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24288 call flush (output_unit)
24289# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24290 end block
24291# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24292#endif
24293# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24294
24295# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24296#if defined(MFC_OpenACC)
24297# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24298!$acc exit data delete(y_coords)
24299# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24300#elif defined(MFC_OpenMP)
24301# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24302!$omp target exit data map(release:y_coords)
24303# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24304#endif
24305# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24306 deallocate (y_coords)
24307# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24308 end if
24309# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24310
24311# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24312 files_loaded = .false.
24313# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24314
24315# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24316 if (allocated(stored_values274)) then
24317# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24318#ifdef MFC_DEBUG
24319# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24320 block
24321# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24322 use iso_fortran_env, only: output_unit
24323# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24324
24325# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24326 print *, 'm_icpp_patches.fpp:1026: ', '@:DEALLOCATE(stored_values274)'
24327# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24328
24329# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24330 call flush (output_unit)
24331# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24332 end block
24333# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24334#endif
24335# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24336
24337# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24338#if defined(MFC_OpenACC)
24339# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24340!$acc exit data delete(stored_values274)
24341# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24342#elif defined(MFC_OpenMP)
24343# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24344!$omp target exit data map(release:stored_values274)
24345# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24346#endif
24347# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24348 deallocate (stored_values274)
24349# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24350 end if
24351# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24352
24353# 1026 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24354 files_loaded274 = .false.
24355
24356 end subroutine s_icpp_sphere
24357
24358 !> The cuboidal patch is a 3D geometry that may be used, for example, in creating a solid boundary, or pre-/post-shock region,
24359 !! which is aligned with the axes of the Cartesian coordinate system. The geometry of such a patch is well- defined when its
24360 !! centroid and lengths in the x-, y- and z-coordinate directions are provided. Please notice that the cuboidal patch DOES NOT
24361 !! allow for the smearing of its boundaries.
24362 subroutine s_icpp_cuboid(patch_id, patch_id_fp, q_prim_vf)
24363
24364 integer, intent(in) :: patch_id
24365
24366#ifdef MFC_MIXED_PRECISION
24367 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
24368#else
24369 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
24370#endif
24371 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
24372 integer :: i, j, k !< Generic loop iterators
24373
24374 integer :: xRows, yRows, nRows, iix, iiy, max_files
24375# 1046 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24376 integer :: f, iter, unit, unit2, idx, idy, index_x, index_y, jump, line_count
24377# 1046 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24378 real(wp) :: x_step, y_step
24379# 1046 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24380 real(wp) :: dummy_x, dummy_y, dummy_z, x0, y0
24381# 1046 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24382 integer :: global_offset_x, global_offset_y !< MPI subdomain offset
24383# 1046 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24384 real(wp) :: delta_x, delta_y
24385# 1046 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24386 character(len=300), dimension(sys_size) :: fileNames !< Arrays to store all data from files
24387# 1046 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24388 real(wp), allocatable :: stored_values(:,:,:)
24389# 1046 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24390 real(wp), allocatable :: x_coords(:), y_coords(:)
24391# 1046 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24392 logical :: files_loaded = .false.
24393# 1046 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24394 real(wp) :: domain_xstart
24395# 1046 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24396 character(len=20) :: file_num_str !< For storing the file number as a string
24397# 1046 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24398 integer :: ios
24399# 1046 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24400 integer :: ios2
24401# 1046 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24402
24403# 1046 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24404 ! hcid=274 (2dHardcodedIC.fpp): full 2D field from external data, no extrusion.
24405# 1046 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24406 ! Declared here (not in Hardcoded2DVariables()) so it's visible wherever
24407# 1046 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24408 ! HardcodedDeallocation() is called, matching the pattern of stored_values/x_coords/
24409# 1046 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24410 ! y_coords/files_loaded above.
24411# 1046 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24412 real(wp), allocatable, dimension(:,:,:) :: stored_values274
24413# 1046 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24414 logical :: files_loaded274 = .false.
24415# 1046 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24416 integer :: f274, ix274, iy274, unit274, ios274
24417# 1046 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24418 integer :: local_ix_beg274, local_iy_beg274
24419# 1046 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24420 character(len=300) :: fname274
24421# 1046 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24422 character(len=20) :: file_num_str274
24423# 1046 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24424 real(wp) :: dummy_x274, dummy_y274, dummy_val274, x0_274, y0_274, x_step274, y_step274
24425# 1046 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24426 real(wp) :: file_dx274, file_dy274, r_align274
24427 ! Place any declaration of intermediate variables here
24428# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24429 real(wp) :: rhoH, rhoL, pRef, pInt, h, lam, wl, amp, intH, alph, Mach
24430# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24431 real(wp) :: eps
24432# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24433
24434# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24435 ! IGR Jets Arrays to stor position and radii of jets from input file
24436# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24437 real(wp), dimension(:), allocatable :: y_th_arr, z_th_arr, r_th_arr
24438# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24439 ! Variables to describe initial condition of jet
24440# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24441 real(wp) :: r, ux_th, ux_am, p_th, p_am, rho_th, rho_am, y_th, z_th, r_th, eps_smooth
24442# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24443 real(wp) :: rcut, xcut !< Intermediate variables for creating smooth initial condition
24444# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24445 real(wp), dimension(0:n,0:p) :: rcut_arr
24446# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24447 integer :: l, q, s !< Iterators for reading input files
24448# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24449 integer :: start, end !< Ints to keep track of position in file
24450# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24451 character(len=100000) :: line ! String to store line in file
24452# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24453 character(len=25) :: value !< String to store value in line
24454# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24455 integer :: NJet !< Number of jets
24456# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24457 real(wp), allocatable, dimension(:,:) :: ih ! Array to store interface height in
24458# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24459 logical :: file_exist ! Flag to check if file exists
24460# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24461
24462# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24463 eps = 1e-9_wp
24464# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24465
24466# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24467 if (patch_icpp(patch_id)%hcid == 303) then ! IGR Multijet
24468# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24469 eps_smooth = 3._wp
24470# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24471 inquire (file="njet.txt", exist=file_exist)
24472# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24473 if (file_exist) then
24474# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24475 open (unit=10, file="njet.txt", status="old", action="read")
24476# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24477 read (10, *) njet
24478# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24479 close (10)
24480# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24481 else
24482# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24483 call s_mpi_abort("Error: njet.txt file specified for hcid=303 does not exist")
24484# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24485 end if
24486# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24487
24488# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24489#ifdef MFC_DEBUG
24490# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24491 block
24492# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24493 use iso_fortran_env, only: output_unit
24494# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24495
24496# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24497 print *, 'm_icpp_patches.fpp:1047: ', '@:ALLOCATE(y_th_arr(0:NJet - 1))'
24498# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24499
24500# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24501 call flush (output_unit)
24502# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24503 end block
24504# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24505#endif
24506# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24507 allocate (y_th_arr(0:njet - 1))
24508# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24509
24510# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24511
24512# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24513#if defined(MFC_OpenACC)
24514# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24515!$acc enter data create(y_th_arr)
24516# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24517#elif defined(MFC_OpenMP)
24518# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24519!$omp target enter data map(always,alloc:y_th_arr)
24520# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24521#endif
24522# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24523#ifdef MFC_DEBUG
24524# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24525 block
24526# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24527 use iso_fortran_env, only: output_unit
24528# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24529
24530# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24531 print *, 'm_icpp_patches.fpp:1047: ', '@:ALLOCATE(z_th_arr(0:NJet - 1))'
24532# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24533
24534# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24535 call flush (output_unit)
24536# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24537 end block
24538# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24539#endif
24540# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24541 allocate (z_th_arr(0:njet - 1))
24542# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24543
24544# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24545
24546# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24547#if defined(MFC_OpenACC)
24548# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24549!$acc enter data create(z_th_arr)
24550# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24551#elif defined(MFC_OpenMP)
24552# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24553!$omp target enter data map(always,alloc:z_th_arr)
24554# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24555#endif
24556# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24557#ifdef MFC_DEBUG
24558# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24559 block
24560# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24561 use iso_fortran_env, only: output_unit
24562# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24563
24564# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24565 print *, 'm_icpp_patches.fpp:1047: ', '@:ALLOCATE(r_th_arr(0:NJet - 1))'
24566# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24567
24568# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24569 call flush (output_unit)
24570# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24571 end block
24572# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24573#endif
24574# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24575 allocate (r_th_arr(0:njet - 1))
24576# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24577
24578# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24579
24580# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24581#if defined(MFC_OpenACC)
24582# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24583!$acc enter data create(r_th_arr)
24584# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24585#elif defined(MFC_OpenMP)
24586# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24587!$omp target enter data map(always,alloc:r_th_arr)
24588# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24589#endif
24590# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24591
24592# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24593 inquire (file="jets.csv", exist=file_exist)
24594# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24595 if (file_exist) then
24596# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24597 open (unit=10, file="jets.csv", status="old", action="read")
24598# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24599 do q = 0, njet - 1
24600# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24601 read (10, '(A)') line ! Read a full line as a string
24602# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24603 start = 1
24604# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24605
24606# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24607 do l = 0, 2
24608# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24609 end = index(line(start:), ',') ! Find the next comma
24610# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24611 if (end == 0) then
24612# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24613 value = trim(adjustl(line(start:))) ! Last value in the line
24614# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24615 else
24616# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24617 value = trim(adjustl(line(start:start + end - 2))) ! Extract substring
24618# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24619 start = start + end ! Move to next value
24620# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24621 end if
24622# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24623 if (l == 0) then
24624# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24625 read (value, *) y_th_arr(q) ! Convert string to numeric value
24626# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24627 else if (l == 1) then
24628# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24629 read (value, *) z_th_arr(q)
24630# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24631 else
24632# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24633 read (value, *) r_th_arr(q)
24634# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24635 end if
24636# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24637 end do
24638# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24639 end do
24640# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24641 close (10)
24642# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24643
24644# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24645 do q = 0, p
24646# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24647 do l = 0, n
24648# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24649 rcut = 0._wp
24650# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24651 do s = 0, njet - 1
24652# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24653 r = sqrt((y_cc(l) - y_th_arr(s))**2._wp + (z_cc(q) - z_th_arr(s))**2._wp)
24654# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24655 rcut = rcut + f_cut_on(r - r_th_arr(s), eps_smooth)
24656# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24657 end do
24658# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24659 rcut_arr(l, q) = rcut
24660# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24661 end do
24662# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24663 end do
24664# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24665 else
24666# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24667 call s_mpi_abort("Error: jets.csv file specified for hcid=303 does not exist")
24668# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24669 end if
24670# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24671 end if
24672# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24673
24674# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24675 if (patch_icpp(patch_id)%hcid == 304) then ! 3D Cartesian interface from file
24676# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24677#ifdef MFC_DEBUG
24678# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24679 block
24680# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24681 use iso_fortran_env, only: output_unit
24682# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24683
24684# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24685 print *, 'm_icpp_patches.fpp:1047: ', '@:ALLOCATE(ih(0:n_glb, 0:p_glb))'
24686# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24687
24688# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24689 call flush (output_unit)
24690# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24691 end block
24692# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24693#endif
24694# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24695 allocate (ih(0:n_glb, 0:p_glb))
24696# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24697
24698# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24699
24700# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24701#if defined(MFC_OpenACC)
24702# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24703!$acc enter data create(ih)
24704# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24705#elif defined(MFC_OpenMP)
24706# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24707!$omp target enter data map(always,alloc:ih)
24708# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24709#endif
24710# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24711
24712# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24713 if (interface_file == '.') then
24714# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24715 call s_mpi_abort("Error: interface_file must be specified for hcid=304")
24716# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24717 else
24718# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24719 inquire (file=trim(interface_file), exist=file_exist)
24720# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24721 if (file_exist) then
24722# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24723 open (unit=10, file=trim(interface_file), status="old", action="read")
24724# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24725 do i = 0, n_glb
24726# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24727 read (10, '(A)') line ! Read a full line as a string
24728# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24729 start = 1
24730# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24731
24732# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24733 do j = 0, p_glb
24734# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24735 end = index(line(start:), ',') ! Find the next comma
24736# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24737 if (end == 0) then
24738# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24739 value = trim(adjustl(line(start:))) ! Last value in the line
24740# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24741 else
24742# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24743 value = trim(adjustl(line(start:start + end - 2))) ! Extract substring
24744# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24745 start = start + end ! Move to next value
24746# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24747 end if
24748# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24749 read (value, *) ih(i, j) ! Convert string to numeric value
24750# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24751 if (.not. f_is_default(normmag)) ih(i, j) = ih(i, j)*normmag
24752# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24753 if (.not. f_is_default(normfac)) ih(i, j) = ih(i, j) + normfac
24754# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24755 end do
24756# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24757 end do
24758# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24759 close (10)
24760# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24761 else
24762# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24763 call s_mpi_abort("Error: interface_file specified for hcid=304 does not exist")
24764# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24765 end if
24766# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24767 end if
24768# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24769 end if
24770# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24771
24772# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24773 if (patch_icpp(patch_id)%hcid == 305) then ! 3D Axisymmetric interface from file
24774# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24775#ifdef MFC_DEBUG
24776# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24777 block
24778# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24779 use iso_fortran_env, only: output_unit
24780# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24781
24782# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24783 print *, 'm_icpp_patches.fpp:1047: ', '@:ALLOCATE(ih(0:n_glb, 0:0))'
24784# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24785
24786# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24787 call flush (output_unit)
24788# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24789 end block
24790# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24791#endif
24792# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24793 allocate (ih(0:n_glb, 0:0))
24794# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24795
24796# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24797
24798# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24799#if defined(MFC_OpenACC)
24800# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24801!$acc enter data create(ih)
24802# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24803#elif defined(MFC_OpenMP)
24804# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24805!$omp target enter data map(always,alloc:ih)
24806# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24807#endif
24808# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24809 if (interface_file == '.') then
24810# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24811 call s_mpi_abort("Error: interface_file must be specified for hcid=305")
24812# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24813 else
24814# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24815 inquire (file=trim(interface_file), exist=file_exist)
24816# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24817 if (file_exist) then
24818# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24819 open (unit=10, file=trim(interface_file), status="old", action="read")
24820# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24821 do i = 0, n_glb
24822# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24823 read (10, '(A)') line ! Read a full line as a string
24824# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24825 value = trim(line)
24826# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24827 read (value, *) ih(i, 0) ! Convert string to numeric value
24828# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24829 if (.not. f_is_default(normmag)) ih(i, 0) = ih(i, 0)*normmag
24830# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24831 if (.not. f_is_default(normfac)) ih(i, 0) = ih(i, 0) + normfac
24832# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24833 end do
24834# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24835 close (10)
24836# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24837 else
24838# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24839 call s_mpi_abort("Error: interface_file specified for hcid=305 does not exist")
24840# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24841 end if
24842# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24843 end if
24844# 1047 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24845 end if
24846
24847 ! Transferring the cuboid's centroid and length information
24848 x_centroid = patch_icpp(patch_id)%x_centroid
24849 y_centroid = patch_icpp(patch_id)%y_centroid
24850 z_centroid = patch_icpp(patch_id)%z_centroid
24851 length_x = patch_icpp(patch_id)%length_x
24852 length_y = patch_icpp(patch_id)%length_y
24853 length_z = patch_icpp(patch_id)%length_z
24854
24855 ! Computing the beginning and the end x-, y- and z-coordinates of the cuboid based on its centroid and lengths
24856 x_boundary%beg = x_centroid - 0.5_wp*length_x
24857 x_boundary%end = x_centroid + 0.5_wp*length_x
24858 y_boundary%beg = y_centroid - 0.5_wp*length_y
24859 y_boundary%end = y_centroid + 0.5_wp*length_y
24860 z_boundary%beg = z_centroid - 0.5_wp*length_z
24861 z_boundary%end = z_centroid + 0.5_wp*length_z
24862
24863 ! Set eta=1 (no smoothing for this patch type)
24864 eta = 1._wp
24865
24866 ! Assign patch vars if cell is covered and patch has write permission
24867 do k = 0, p
24868 do j = 0, n
24869 do i = 0, m
24870 if (grid_geometry == 3) then
24872 else
24873 cart_y = y_cc(j)
24874 cart_z = z_cc(k)
24875 end if
24876
24877 if (f_is_inside_cuboid(x_cc(i) - x_centroid, cart_y - y_centroid, cart_z - z_centroid, [length_x, length_y, &
24878 & length_z])) then
24879 if (patch_icpp(patch_id)%alter_patch(patch_id_fp(i, j, k))) then
24880 call s_assign_patch_primitive_variables(patch_id, i, j, k, eta, q_prim_vf, patch_id_fp)
24881
24882
24883 if (patch_icpp(patch_id)%hcid /= dflt_int) then
24884 select case (patch_icpp(patch_id)%hcid)
24885# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24886 case (300) ! Rayleigh-Taylor instability
24887# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24888 rhoh = 3._wp
24889# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24890 rhol = 1._wp
24891# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24892 pref = 1.e5_wp
24893# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24894 pint = pref
24895# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24896 h = 0.7_wp
24897# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24898 lam = 0.2_wp
24899# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24900 wl = 2._wp*pi/lam
24901# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24902 amp = 0.025_wp/wl
24903# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24904
24905# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24906 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
24907# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24908
24909# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24910 alph = 5.e-1_wp*(1._wp + tanh((y_cc(j) - inth)/2.5e-3_wp))
24911# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24912
24913# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24914 if (alph < eps) alph = eps
24915# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24916 if (alph > 1._wp - eps) alph = 1._wp - eps
24917# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24918
24919# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24920 if (y_cc(j) > inth) then
24921# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24922 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
24923# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24924 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
24925# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24926 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = alph*rhoh
24927# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24928 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = (1._wp - alph)*rhol
24929# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24930 q_prim_vf(eqn_idx%E)%sf(i, j, k) = pref + rhoh*9.81_wp*(1.2_wp - y_cc(j))
24931# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24932 else
24933# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24934 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
24935# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24936 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
24937# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24938 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = alph*rhoh
24939# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24940 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = (1._wp - alph)*rhol
24941# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24942 pint = pref + rhoh*9.81_wp*(1.2_wp - inth)
24943# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24944 q_prim_vf(eqn_idx%E)%sf(i, j, k) = pint + rhol*9.81_wp*(inth - y_cc(j))
24945# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24946 end if
24947# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24948 case (301) ! (3D lung geometry in X direction, |sin(*)+sin(*)|)
24949# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24950 h = 0.0_wp
24951# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24952 lam = 1.0_wp
24953# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24954 amp = patch_icpp(patch_id)%a(2)
24955# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24956 inth = amp*abs((sin(2*pi*y_cc(j)/lam - pi/2) + sin(2*pi*z_cc(k)/lam - pi/2)) + h)
24957# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24958 if (x_cc(i) > inth) then
24959# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24960 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = patch_icpp(1)%alpha_rho(1)
24961# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24962 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = patch_icpp(1)%alpha_rho(2)
24963# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24964 q_prim_vf(eqn_idx%E)%sf(i, j, k) = patch_icpp(1)%pres
24965# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24966 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = patch_icpp(1)%alpha(1)
24967# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24968 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = patch_icpp(1)%alpha(2)
24969# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24970 end if
24971# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24972 case (302) ! 3D Jet with IGR
24973# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24974 ux_th = 10*sqrt(1.4*0.4)
24975# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24976 ux_am = 0.0*sqrt(1.4)
24977# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24978 p_th = 2.0_wp
24979# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24980 p_am = 1.0_wp
24981# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24982 rho_th = 1._wp
24983# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24984 rho_am = 1._wp
24985# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24986 y_th = 0.0_wp
24987# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24988 z_th = 0.0_wp
24989# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24990 r_th = 1._wp
24991# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24992 eps_smooth = 1._wp
24993# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24994 eps = 1e-6
24995# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24996
24997# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
24998 r = sqrt((y_cc(j) - y_th)**2._wp + (z_cc(k) - z_th)**2._wp)
24999# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25000 rcut = f_cut_on(r - r_th, eps_smooth)
25001# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25002 xcut = f_cut_on(x_cc(i), eps_smooth)
25003# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25004
25005# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25006 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, k) = ux_th*rcut*xcut + ux_am
25007# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25008 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, k) = 0._wp
25009# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25010 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0._wp
25011# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25012
25013# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25014 if (num_fluids == 1) then
25015# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25016 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = (rho_th - rho_am)*rcut*xcut + rho_am
25017# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25018 else
25019# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25020 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = (1._wp - 2._wp*eps)*rcut*xcut + eps
25021# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25022 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = rho_th*q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)
25023# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25024 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))
25025# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25026 end if
25027# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25028
25029# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25030 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p_th*rcut*xcut + p_am
25031# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25032 case (303) ! 3D Multijet
25033# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25034 eps_smooth = 3.0_wp
25035# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25036 ux_th = 10*sqrt(1.4*0.4)
25037# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25038 ux_am = 2.5*sqrt(1.4*0.4)
25039# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25040 p_th = 0.8_wp
25041# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25042 p_am = 0.4_wp
25043# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25044 rho_th = 1._wp
25045# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25046 rho_am = 1._wp
25047# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25048 eps = 1e-6
25049# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25050
25051# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25052 rcut = rcut_arr(j, k)
25053# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25054 xcut = f_cut_on(x_cc(i), eps_smooth)
25055# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25056
25057# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25058 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, k) = ux_th*rcut*xcut + ux_am
25059# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25060 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, k) = 0._wp
25061# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25062 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0._wp
25063# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25064
25065# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25066 if (num_fluids == 1) then
25067# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25068 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = (rho_th - rho_am)*rcut*xcut + rho_am
25069# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25070 else
25071# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25072 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = (1._wp - 2._wp*eps)*rcut*xcut + eps
25073# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25074 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = rho_th*q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)
25075# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25076 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))
25077# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25078 end if
25079# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25080
25081# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25082 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p_th*rcut*xcut + p_am
25083# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25084 case (304) ! 3D Interface from file cartesian
25085# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25086 alph = 0.5_wp*(1 + (1._wp - 2._wp*eps)*tanh((ih(start_idx(2) + j, start_idx(3) + k) - x_cc(i))*(0.5_wp/dx)))
25087# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25088
25089# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25090 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
25091# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25092 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
25093# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25094
25095# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25096 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)*(950._wp/1000._wp)
25097# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25098 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = q_prim_vf(eqn_idx%adv%end)%sf(i, j, k)*(1._wp/1000._wp)
25099# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25100
25101# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25102 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p0_ic + (q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) + q_prim_vf(eqn_idx%cont%end)%sf(i, &
25103# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25104 & j, k))*g0_ic*(ih(start_idx(2) + j, start_idx(3) + k) - x_cc(i))
25105# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25106
25107# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25108 if (surface_tension) q_prim_vf(eqn_idx%c)%sf(i, j, k) = alph
25109# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25110 case (305) ! 3D Interface from file axisymmetric
25111# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25112 alph = 0.5_wp*(1 + (1._wp - 2._wp*eps)*tanh((ih(start_idx(2) + j, 0) - x_cc(i))*(0.01_wp/dx)))
25113# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25114
25115# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25116 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
25117# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25118 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
25119# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25120
25121# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25122 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)*1._wp
25123# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25124 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = q_prim_vf(eqn_idx%adv%end)%sf(i, j, k)*(1._wp/950._wp)
25125# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25126
25127# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25128 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p0_ic + (q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) + q_prim_vf(eqn_idx%cont%end)%sf(i, &
25129# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25130 & j, k))*g0_ic*(ih(start_idx(1) + i, start_idx(3) + k) - y_cc(j))
25131# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25132
25133# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25134 if (surface_tension) q_prim_vf(eqn_idx%c)%sf(i, j, k) = alph
25135# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25136 case (370) ! 3D extrusion of 2D profile from external data
25137# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25138 ! This hardcoded case extrudes a 2D profile to initialize a 3D simulation domain
25139# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25140 if (.not. files_loaded) then
25141# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25142 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
25143# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25144 do f = 1, max_files
25145# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25146 write (file_num_str, '(I0)') f
25147# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25148 filenames(f) = trim(files_dir) // "/" // "prim." // trim(file_num_str) // ".00." // trim(file_extension) // ".dat"
25149# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25150 end do
25151# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25152
25153# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25154 ! Common file reading setup
25155# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25156 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
25157# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25158 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
25159# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25160
25161# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25162 select case (num_dims)
25163# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25164 case (1, 2) ! 1D and 2D cases are similar
25165# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25166 ! Count lines
25167# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25168 line_count = 0
25169# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25170 do
25171# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25172 read (unit2, *, iostat=ios2) dummy_x, dummy_y
25173# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25174 if (ios2 /= 0) exit
25175# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25176 line_count = line_count + 1
25177# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25178 end do
25179# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25180 close (unit2)
25181# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25182
25183# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25184 xrows = line_count
25185# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25186 yrows = 1
25187# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25188 index_x = 0
25189# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25190 if (num_dims == 2) index_x = i
25191# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25192#ifdef MFC_DEBUG
25193# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25194 block
25195# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25196 use iso_fortran_env, only: output_unit
25197# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25198
25199# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25200 print *, 'm_icpp_patches.fpp:1086: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
25201# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25202
25203# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25204 call flush (output_unit)
25205# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25206 end block
25207# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25208#endif
25209# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25210 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
25211# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25212
25213# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25214
25215# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25216
25217# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25218#if defined(MFC_OpenACC)
25219# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25220!$acc enter data create(x_coords, stored_values)
25221# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25222#elif defined(MFC_OpenMP)
25223# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25224!$omp target enter data map(always,alloc:x_coords, stored_values)
25225# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25226#endif
25227# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25228
25229# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25230 ! Read data from all files
25231# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25232 do f = 1, max_files
25233# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25234 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
25235# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25236 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
25237# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25238
25239# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25240 do iter = 1, xrows
25241# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25242 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
25243# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25244 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
25245# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25246 end do
25247# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25248 close (unit)
25249# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25250 end do
25251# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25252
25253# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25254 ! Calculate offsets
25255# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25256 domain_xstart = x_coords(1)
25257# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25258 x_step = x_cc(1) - x_cc(0)
25259# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25260 delta_x = merge(x_cc(0) - domain_xstart, x_cc(index_x) - domain_xstart, num_dims == 1)
25261# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25262 global_offset_x = nint(abs(delta_x)/x_step)
25263# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25264 case (3) ! 3D case - determine grid structure
25265# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25266 ! Find yRows by counting rows with same x
25267# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25268 read (unit2, *, iostat=ios2) x0, y0, dummy_z
25269# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25270 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
25271# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25272
25273# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25274 yrows = 1
25275# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25276 do
25277# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25278 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
25279# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25280 if (ios2 /= 0) exit
25281# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25282 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
25283# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25284 yrows = yrows + 1
25285# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25286 else
25287# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25288 exit
25289# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25290 end if
25291# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25292 end do
25293# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25294 close (unit2)
25295# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25296
25297# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25298 ! Count total rows
25299# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25300 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
25301# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25302 nrows = 0
25303# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25304 do
25305# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25306 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
25307# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25308 if (ios2 /= 0) exit
25309# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25310 nrows = nrows + 1
25311# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25312 end do
25313# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25314 close (unit2)
25315# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25316
25317# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25318 xrows = nrows/yrows
25319# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25320#ifdef MFC_DEBUG
25321# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25322 block
25323# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25324 use iso_fortran_env, only: output_unit
25325# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25326
25327# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25328 print *, 'm_icpp_patches.fpp:1086: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
25329# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25330
25331# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25332 call flush (output_unit)
25333# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25334 end block
25335# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25336#endif
25337# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25338 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
25339# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25340
25341# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25342
25343# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25344
25345# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25346
25347# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25348#if defined(MFC_OpenACC)
25349# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25350!$acc enter data create(x_coords, y_coords, stored_values)
25351# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25352#elif defined(MFC_OpenMP)
25353# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25354!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
25355# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25356#endif
25357# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25358 index_x = i
25359# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25360 index_y = j
25361# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25362
25363# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25364 ! Read all files
25365# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25366 do f = 1, max_files
25367# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25368 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
25369# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25370 if (ios /= 0) then
25371# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25372 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
25373# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25374 cycle
25375# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25376 end if
25377# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25378
25379# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25380 iter = 0
25381# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25382 do iix = 1, xrows
25383# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25384 do iiy = 1, yrows
25385# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25386 iter = iter + 1
25387# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25388 if (f == 1) then
25389# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25390 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
25391# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25392 else
25393# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25394 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
25395# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25396 end if
25397# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25398 if (ios /= 0) call s_mpi_abort("Error reading data")
25399# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25400 end do
25401# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25402 end do
25403# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25404 close (unit)
25405# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25406 end do
25407# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25408
25409# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25410 ! Calculate offsets
25411# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25412 x_step = x_cc(1) - x_cc(0)
25413# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25414 y_step = y_cc(1) - y_cc(0)
25415# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25416 delta_x = x_cc(index_x) - x_coords(1)
25417# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25418 delta_y = y_cc(index_y) - y_coords(1)
25419# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25420 global_offset_x = nint(abs(delta_x)/x_step)
25421# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25422 global_offset_y = nint(abs(delta_y)/y_step)
25423# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25424 end select
25425# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25426
25427# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25428 files_loaded = .true.
25429# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25430 end if
25431# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25432
25433# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25434 ! Data assignment
25435# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25436 select case (num_dims)
25437# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25438 case (1)
25439# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25440 idx = i + 1 + global_offset_x
25441# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25442 ! idx must land inside the file's row range: this rank's subdomain offset
25443# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25444 ! (global_offset_x) was derived from this rank's own grid, so a miss means the
25445# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25446 ! IC file is misaligned/mis-sized for the run grid, not a normal boundary case.
25447# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25448 if (idx < 1 .or. idx > xrows) &
25449# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25450 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
25451# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25452 do f = 1, sys_size
25453# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25454 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
25455# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25456 end do
25457# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25458 case (2)
25459# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25460 idx = i + 1 + global_offset_x - index_x
25461# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25462 if (idx < 1 .or. idx > xrows) &
25463# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25464 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
25465# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25466 do f = 1, sys_size - 1
25467# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25468 jump = merge(1, 0, f >= eqn_idx%mom%end)
25469# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25470 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
25471# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25472 end do
25473# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25474 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
25475# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25476 case (3)
25477# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25478 idx = i + 1 + global_offset_x - index_x
25479# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25480 idy = j + 1 + global_offset_y - index_y
25481# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25482 if (idx < 1 .or. idx > xrows .or. idy < 1 .or. idy > yrows) &
25483# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25484 & call s_mpi_abort("Hardcoded IC extrusion: row/column index out of range (IC file misaligned with the run grid)")
25485# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25486 do f = 1, sys_size - 1
25487# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25488 jump = merge(1, 0, f >= eqn_idx%mom%end)
25489# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25490 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
25491# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25492 end do
25493# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25494 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
25495# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25496 end select
25497# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25498 case (380) ! Taylor-Green vortex
25499# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25500 ! This is patch is hard-coded for test suite optimization used in the 3D_TaylorGreenVortex case: This analytic patch used
25501# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25502 ! geometry 9
25503# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25504 mach = 0.1
25505# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25506 if (patch_id == 1) then
25507# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25508 q_prim_vf(eqn_idx%E)%sf(i, j, &
25509# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25510 & 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)
25511# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25512 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)
25513# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25514 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)
25515# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25516 end if
25517# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25518 case default
25519# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25520 call s_int_to_str(patch_id, istr)
25521# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25522 call s_mpi_abort("Invalid hcid specified for patch " // trim(istr))
25523# 1086 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25524 end select
25525 end if
25526
25527 ! Updating the patch identities bookkeeping variable
25528 if (1._wp - eta < sgm_eps) patch_id_fp(i, j, k) = patch_id
25529 end if
25530 end if
25531 end do
25532 end do
25533 end do
25534 if (allocated(stored_values)) then
25535# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25536#ifdef MFC_DEBUG
25537# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25538 block
25539# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25540 use iso_fortran_env, only: output_unit
25541# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25542
25543# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25544 print *, 'm_icpp_patches.fpp:1096: ', '@:DEALLOCATE(stored_values)'
25545# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25546
25547# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25548 call flush (output_unit)
25549# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25550 end block
25551# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25552#endif
25553# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25554
25555# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25556#if defined(MFC_OpenACC)
25557# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25558!$acc exit data delete(stored_values)
25559# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25560#elif defined(MFC_OpenMP)
25561# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25562!$omp target exit data map(release:stored_values)
25563# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25564#endif
25565# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25566 deallocate (stored_values)
25567# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25568#ifdef MFC_DEBUG
25569# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25570 block
25571# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25572 use iso_fortran_env, only: output_unit
25573# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25574
25575# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25576 print *, 'm_icpp_patches.fpp:1096: ', '@:DEALLOCATE(x_coords)'
25577# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25578
25579# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25580 call flush (output_unit)
25581# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25582 end block
25583# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25584#endif
25585# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25586
25587# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25588#if defined(MFC_OpenACC)
25589# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25590!$acc exit data delete(x_coords)
25591# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25592#elif defined(MFC_OpenMP)
25593# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25594!$omp target exit data map(release:x_coords)
25595# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25596#endif
25597# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25598 deallocate (x_coords)
25599# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25600 end if
25601# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25602
25603# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25604 if (allocated(y_coords)) then
25605# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25606#ifdef MFC_DEBUG
25607# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25608 block
25609# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25610 use iso_fortran_env, only: output_unit
25611# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25612
25613# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25614 print *, 'm_icpp_patches.fpp:1096: ', '@:DEALLOCATE(y_coords)'
25615# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25616
25617# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25618 call flush (output_unit)
25619# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25620 end block
25621# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25622#endif
25623# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25624
25625# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25626#if defined(MFC_OpenACC)
25627# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25628!$acc exit data delete(y_coords)
25629# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25630#elif defined(MFC_OpenMP)
25631# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25632!$omp target exit data map(release:y_coords)
25633# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25634#endif
25635# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25636 deallocate (y_coords)
25637# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25638 end if
25639# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25640
25641# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25642 files_loaded = .false.
25643# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25644
25645# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25646 if (allocated(stored_values274)) then
25647# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25648#ifdef MFC_DEBUG
25649# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25650 block
25651# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25652 use iso_fortran_env, only: output_unit
25653# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25654
25655# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25656 print *, 'm_icpp_patches.fpp:1096: ', '@:DEALLOCATE(stored_values274)'
25657# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25658
25659# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25660 call flush (output_unit)
25661# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25662 end block
25663# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25664#endif
25665# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25666
25667# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25668#if defined(MFC_OpenACC)
25669# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25670!$acc exit data delete(stored_values274)
25671# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25672#elif defined(MFC_OpenMP)
25673# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25674!$omp target exit data map(release:stored_values274)
25675# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25676#endif
25677# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25678 deallocate (stored_values274)
25679# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25680 end if
25681# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25682
25683# 1096 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25684 files_loaded274 = .false.
25685
25686 end subroutine s_icpp_cuboid
25687
25688 !> The cylindrical patch is a 3D geometry that may be used, for example, in setting up a cylindrical solid boundary confinement,
25689 !! like a blood vessel. The geometry of this patch is well-defined when the centroid, the radius and the length along the
25690 !! cylinder's axis, parallel to the x-, y- or z-coordinate direction, are provided. Please note that the cylindrical patch DOES
25691 !! allow for the smoothing of its lateral boundary.
25692 subroutine s_icpp_cylinder(patch_id, patch_id_fp, q_prim_vf)
25693
25694 integer, intent(in) :: patch_id
25695
25696#ifdef MFC_MIXED_PRECISION
25697 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
25698#else
25699 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
25700#endif
25701 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
25702 integer :: i, j, k !< Generic loop iterators
25703 real(wp) :: radius
25704
25705 integer :: xRows, yRows, nRows, iix, iiy, max_files
25706# 1117 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25707 integer :: f, iter, unit, unit2, idx, idy, index_x, index_y, jump, line_count
25708# 1117 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25709 real(wp) :: x_step, y_step
25710# 1117 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25711 real(wp) :: dummy_x, dummy_y, dummy_z, x0, y0
25712# 1117 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25713 integer :: global_offset_x, global_offset_y !< MPI subdomain offset
25714# 1117 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25715 real(wp) :: delta_x, delta_y
25716# 1117 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25717 character(len=300), dimension(sys_size) :: fileNames !< Arrays to store all data from files
25718# 1117 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25719 real(wp), allocatable :: stored_values(:,:,:)
25720# 1117 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25721 real(wp), allocatable :: x_coords(:), y_coords(:)
25722# 1117 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25723 logical :: files_loaded = .false.
25724# 1117 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25725 real(wp) :: domain_xstart
25726# 1117 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25727 character(len=20) :: file_num_str !< For storing the file number as a string
25728# 1117 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25729 integer :: ios
25730# 1117 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25731 integer :: ios2
25732# 1117 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25733
25734# 1117 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25735 ! hcid=274 (2dHardcodedIC.fpp): full 2D field from external data, no extrusion.
25736# 1117 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25737 ! Declared here (not in Hardcoded2DVariables()) so it's visible wherever
25738# 1117 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25739 ! HardcodedDeallocation() is called, matching the pattern of stored_values/x_coords/
25740# 1117 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25741 ! y_coords/files_loaded above.
25742# 1117 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25743 real(wp), allocatable, dimension(:,:,:) :: stored_values274
25744# 1117 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25745 logical :: files_loaded274 = .false.
25746# 1117 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25747 integer :: f274, ix274, iy274, unit274, ios274
25748# 1117 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25749 integer :: local_ix_beg274, local_iy_beg274
25750# 1117 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25751 character(len=300) :: fname274
25752# 1117 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25753 character(len=20) :: file_num_str274
25754# 1117 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25755 real(wp) :: dummy_x274, dummy_y274, dummy_val274, x0_274, y0_274, x_step274, y_step274
25756# 1117 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25757 real(wp) :: file_dx274, file_dy274, r_align274
25758 ! Place any declaration of intermediate variables here
25759# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25760 real(wp) :: rhoH, rhoL, pRef, pInt, h, lam, wl, amp, intH, alph, Mach
25761# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25762 real(wp) :: eps
25763# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25764
25765# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25766 ! IGR Jets Arrays to stor position and radii of jets from input file
25767# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25768 real(wp), dimension(:), allocatable :: y_th_arr, z_th_arr, r_th_arr
25769# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25770 ! Variables to describe initial condition of jet
25771# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25772 real(wp) :: r, ux_th, ux_am, p_th, p_am, rho_th, rho_am, y_th, z_th, r_th, eps_smooth
25773# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25774 real(wp) :: rcut, xcut !< Intermediate variables for creating smooth initial condition
25775# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25776 real(wp), dimension(0:n,0:p) :: rcut_arr
25777# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25778 integer :: l, q, s !< Iterators for reading input files
25779# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25780 integer :: start, end !< Ints to keep track of position in file
25781# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25782 character(len=100000) :: line ! String to store line in file
25783# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25784 character(len=25) :: value !< String to store value in line
25785# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25786 integer :: NJet !< Number of jets
25787# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25788 real(wp), allocatable, dimension(:,:) :: ih ! Array to store interface height in
25789# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25790 logical :: file_exist ! Flag to check if file exists
25791# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25792
25793# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25794 eps = 1e-9_wp
25795# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25796
25797# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25798 if (patch_icpp(patch_id)%hcid == 303) then ! IGR Multijet
25799# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25800 eps_smooth = 3._wp
25801# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25802 inquire (file="njet.txt", exist=file_exist)
25803# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25804 if (file_exist) then
25805# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25806 open (unit=10, file="njet.txt", status="old", action="read")
25807# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25808 read (10, *) njet
25809# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25810 close (10)
25811# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25812 else
25813# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25814 call s_mpi_abort("Error: njet.txt file specified for hcid=303 does not exist")
25815# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25816 end if
25817# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25818
25819# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25820#ifdef MFC_DEBUG
25821# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25822 block
25823# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25824 use iso_fortran_env, only: output_unit
25825# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25826
25827# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25828 print *, 'm_icpp_patches.fpp:1118: ', '@:ALLOCATE(y_th_arr(0:NJet - 1))'
25829# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25830
25831# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25832 call flush (output_unit)
25833# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25834 end block
25835# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25836#endif
25837# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25838 allocate (y_th_arr(0:njet - 1))
25839# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25840
25841# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25842
25843# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25844#if defined(MFC_OpenACC)
25845# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25846!$acc enter data create(y_th_arr)
25847# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25848#elif defined(MFC_OpenMP)
25849# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25850!$omp target enter data map(always,alloc:y_th_arr)
25851# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25852#endif
25853# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25854#ifdef MFC_DEBUG
25855# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25856 block
25857# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25858 use iso_fortran_env, only: output_unit
25859# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25860
25861# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25862 print *, 'm_icpp_patches.fpp:1118: ', '@:ALLOCATE(z_th_arr(0:NJet - 1))'
25863# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25864
25865# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25866 call flush (output_unit)
25867# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25868 end block
25869# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25870#endif
25871# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25872 allocate (z_th_arr(0:njet - 1))
25873# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25874
25875# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25876
25877# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25878#if defined(MFC_OpenACC)
25879# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25880!$acc enter data create(z_th_arr)
25881# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25882#elif defined(MFC_OpenMP)
25883# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25884!$omp target enter data map(always,alloc:z_th_arr)
25885# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25886#endif
25887# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25888#ifdef MFC_DEBUG
25889# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25890 block
25891# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25892 use iso_fortran_env, only: output_unit
25893# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25894
25895# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25896 print *, 'm_icpp_patches.fpp:1118: ', '@:ALLOCATE(r_th_arr(0:NJet - 1))'
25897# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25898
25899# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25900 call flush (output_unit)
25901# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25902 end block
25903# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25904#endif
25905# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25906 allocate (r_th_arr(0:njet - 1))
25907# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25908
25909# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25910
25911# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25912#if defined(MFC_OpenACC)
25913# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25914!$acc enter data create(r_th_arr)
25915# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25916#elif defined(MFC_OpenMP)
25917# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25918!$omp target enter data map(always,alloc:r_th_arr)
25919# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25920#endif
25921# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25922
25923# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25924 inquire (file="jets.csv", exist=file_exist)
25925# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25926 if (file_exist) then
25927# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25928 open (unit=10, file="jets.csv", status="old", action="read")
25929# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25930 do q = 0, njet - 1
25931# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25932 read (10, '(A)') line ! Read a full line as a string
25933# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25934 start = 1
25935# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25936
25937# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25938 do l = 0, 2
25939# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25940 end = index(line(start:), ',') ! Find the next comma
25941# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25942 if (end == 0) then
25943# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25944 value = trim(adjustl(line(start:))) ! Last value in the line
25945# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25946 else
25947# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25948 value = trim(adjustl(line(start:start + end - 2))) ! Extract substring
25949# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25950 start = start + end ! Move to next value
25951# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25952 end if
25953# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25954 if (l == 0) then
25955# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25956 read (value, *) y_th_arr(q) ! Convert string to numeric value
25957# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25958 else if (l == 1) then
25959# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25960 read (value, *) z_th_arr(q)
25961# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25962 else
25963# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25964 read (value, *) r_th_arr(q)
25965# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25966 end if
25967# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25968 end do
25969# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25970 end do
25971# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25972 close (10)
25973# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25974
25975# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25976 do q = 0, p
25977# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25978 do l = 0, n
25979# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25980 rcut = 0._wp
25981# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25982 do s = 0, njet - 1
25983# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25984 r = sqrt((y_cc(l) - y_th_arr(s))**2._wp + (z_cc(q) - z_th_arr(s))**2._wp)
25985# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25986 rcut = rcut + f_cut_on(r - r_th_arr(s), eps_smooth)
25987# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25988 end do
25989# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25990 rcut_arr(l, q) = rcut
25991# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25992 end do
25993# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25994 end do
25995# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25996 else
25997# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
25998 call s_mpi_abort("Error: jets.csv file specified for hcid=303 does not exist")
25999# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26000 end if
26001# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26002 end if
26003# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26004
26005# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26006 if (patch_icpp(patch_id)%hcid == 304) then ! 3D Cartesian interface from file
26007# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26008#ifdef MFC_DEBUG
26009# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26010 block
26011# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26012 use iso_fortran_env, only: output_unit
26013# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26014
26015# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26016 print *, 'm_icpp_patches.fpp:1118: ', '@:ALLOCATE(ih(0:n_glb, 0:p_glb))'
26017# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26018
26019# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26020 call flush (output_unit)
26021# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26022 end block
26023# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26024#endif
26025# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26026 allocate (ih(0:n_glb, 0:p_glb))
26027# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26028
26029# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26030
26031# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26032#if defined(MFC_OpenACC)
26033# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26034!$acc enter data create(ih)
26035# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26036#elif defined(MFC_OpenMP)
26037# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26038!$omp target enter data map(always,alloc:ih)
26039# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26040#endif
26041# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26042
26043# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26044 if (interface_file == '.') then
26045# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26046 call s_mpi_abort("Error: interface_file must be specified for hcid=304")
26047# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26048 else
26049# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26050 inquire (file=trim(interface_file), exist=file_exist)
26051# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26052 if (file_exist) then
26053# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26054 open (unit=10, file=trim(interface_file), status="old", action="read")
26055# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26056 do i = 0, n_glb
26057# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26058 read (10, '(A)') line ! Read a full line as a string
26059# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26060 start = 1
26061# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26062
26063# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26064 do j = 0, p_glb
26065# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26066 end = index(line(start:), ',') ! Find the next comma
26067# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26068 if (end == 0) then
26069# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26070 value = trim(adjustl(line(start:))) ! Last value in the line
26071# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26072 else
26073# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26074 value = trim(adjustl(line(start:start + end - 2))) ! Extract substring
26075# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26076 start = start + end ! Move to next value
26077# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26078 end if
26079# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26080 read (value, *) ih(i, j) ! Convert string to numeric value
26081# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26082 if (.not. f_is_default(normmag)) ih(i, j) = ih(i, j)*normmag
26083# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26084 if (.not. f_is_default(normfac)) ih(i, j) = ih(i, j) + normfac
26085# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26086 end do
26087# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26088 end do
26089# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26090 close (10)
26091# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26092 else
26093# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26094 call s_mpi_abort("Error: interface_file specified for hcid=304 does not exist")
26095# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26096 end if
26097# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26098 end if
26099# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26100 end if
26101# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26102
26103# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26104 if (patch_icpp(patch_id)%hcid == 305) then ! 3D Axisymmetric interface from file
26105# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26106#ifdef MFC_DEBUG
26107# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26108 block
26109# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26110 use iso_fortran_env, only: output_unit
26111# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26112
26113# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26114 print *, 'm_icpp_patches.fpp:1118: ', '@:ALLOCATE(ih(0:n_glb, 0:0))'
26115# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26116
26117# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26118 call flush (output_unit)
26119# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26120 end block
26121# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26122#endif
26123# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26124 allocate (ih(0:n_glb, 0:0))
26125# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26126
26127# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26128
26129# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26130#if defined(MFC_OpenACC)
26131# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26132!$acc enter data create(ih)
26133# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26134#elif defined(MFC_OpenMP)
26135# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26136!$omp target enter data map(always,alloc:ih)
26137# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26138#endif
26139# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26140 if (interface_file == '.') then
26141# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26142 call s_mpi_abort("Error: interface_file must be specified for hcid=305")
26143# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26144 else
26145# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26146 inquire (file=trim(interface_file), exist=file_exist)
26147# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26148 if (file_exist) then
26149# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26150 open (unit=10, file=trim(interface_file), status="old", action="read")
26151# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26152 do i = 0, n_glb
26153# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26154 read (10, '(A)') line ! Read a full line as a string
26155# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26156 value = trim(line)
26157# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26158 read (value, *) ih(i, 0) ! Convert string to numeric value
26159# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26160 if (.not. f_is_default(normmag)) ih(i, 0) = ih(i, 0)*normmag
26161# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26162 if (.not. f_is_default(normfac)) ih(i, 0) = ih(i, 0) + normfac
26163# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26164 end do
26165# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26166 close (10)
26167# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26168 else
26169# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26170 call s_mpi_abort("Error: interface_file specified for hcid=305 does not exist")
26171# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26172 end if
26173# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26174 end if
26175# 1118 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26176 end if
26177
26178 ! Transferring the cylindrical patch's centroid, length, radius, smoothing patch identity and smoothing coefficient
26179 ! information
26180 x_centroid = patch_icpp(patch_id)%x_centroid
26181 y_centroid = patch_icpp(patch_id)%y_centroid
26182 z_centroid = patch_icpp(patch_id)%z_centroid
26183 length_x = patch_icpp(patch_id)%length_x
26184 length_y = patch_icpp(patch_id)%length_y
26185 length_z = patch_icpp(patch_id)%length_z
26186 radius = patch_icpp(patch_id)%radius
26187 smooth_patch_id = patch_icpp(patch_id)%smooth_patch_id
26188 smooth_coeff = patch_icpp(patch_id)%smooth_coeff
26189
26190 ! Computing the beginning and the end x-, y- and z-coordinates of the cylinder based on its centroid and lengths
26191 x_boundary%beg = x_centroid - 0.5_wp*length_x
26192 x_boundary%end = x_centroid + 0.5_wp*length_x
26193 y_boundary%beg = y_centroid - 0.5_wp*length_y
26194 y_boundary%end = y_centroid + 0.5_wp*length_y
26195 z_boundary%beg = z_centroid - 0.5_wp*length_z
26196 z_boundary%end = z_centroid + 0.5_wp*length_z
26197
26198 ! Initialize eta=1; modified if smoothing is enabled
26199 eta = 1._wp
26200
26201 ! Assign patch vars if cell is covered and patch has write permission
26202 do k = 0, p
26203 do j = 0, n
26204 do i = 0, m
26205 if (grid_geometry == 3) then
26207 else
26208 cart_y = y_cc(j)
26209 cart_z = z_cc(k)
26210 end if
26211
26212 if (patch_icpp(patch_id)%smoothen) then
26213 if (.not. f_is_default(length_x)) then
26214 eta = tanh(smooth_coeff/min(dy, &
26215 & dz)*(sqrt((cart_y - y_centroid)**2 + (cart_z - z_centroid)**2) - radius))*(-0.5_wp) &
26216 & + 0.5_wp
26217 else if (.not. f_is_default(length_y)) then
26218 eta = tanh(smooth_coeff/min(dx, &
26219 & dz)*(sqrt((x_cc(i) - x_centroid)**2 + (cart_z - z_centroid)**2) - radius))*(-0.5_wp) &
26220 & + 0.5_wp
26221 else
26222 eta = tanh(smooth_coeff/min(dx, &
26223 & dy)*(sqrt((x_cc(i) - x_centroid)**2 + (cart_y - y_centroid)**2) - radius))*(-0.5_wp) &
26224 & + 0.5_wp
26225 end if
26226 end if
26227
26228 if (((.not. f_is_default(length_x) .and. f_is_inside_cylinder(cart_y - y_centroid, cart_z - z_centroid, &
26229 & x_cc(i) - x_centroid, radius, &
26230 & length_x)) .or. (.not. f_is_default(length_y) .and. f_is_inside_cylinder(x_cc(i) - x_centroid, &
26231 & cart_z - z_centroid, cart_y - y_centroid, radius, &
26232 & length_y)) .or. (.not. f_is_default(length_z) .and. f_is_inside_cylinder(x_cc(i) - x_centroid, &
26233 & cart_y - y_centroid, cart_z - z_centroid, radius, &
26234 & length_z)) .and. patch_icpp(patch_id)%alter_patch(patch_id_fp(i, j, k))) .or. patch_id_fp(i, j, &
26235 & k) == smooth_patch_id) then
26236 call s_assign_patch_primitive_variables(patch_id, i, j, k, eta, q_prim_vf, patch_id_fp)
26237
26238
26239 if (patch_icpp(patch_id)%hcid /= dflt_int) then
26240 select case (patch_icpp(patch_id)%hcid)
26241# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26242 case (300) ! Rayleigh-Taylor instability
26243# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26244 rhoh = 3._wp
26245# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26246 rhol = 1._wp
26247# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26248 pref = 1.e5_wp
26249# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26250 pint = pref
26251# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26252 h = 0.7_wp
26253# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26254 lam = 0.2_wp
26255# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26256 wl = 2._wp*pi/lam
26257# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26258 amp = 0.025_wp/wl
26259# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26260
26261# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26262 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
26263# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26264
26265# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26266 alph = 5.e-1_wp*(1._wp + tanh((y_cc(j) - inth)/2.5e-3_wp))
26267# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26268
26269# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26270 if (alph < eps) alph = eps
26271# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26272 if (alph > 1._wp - eps) alph = 1._wp - eps
26273# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26274
26275# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26276 if (y_cc(j) > inth) then
26277# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26278 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
26279# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26280 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
26281# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26282 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = alph*rhoh
26283# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26284 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = (1._wp - alph)*rhol
26285# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26286 q_prim_vf(eqn_idx%E)%sf(i, j, k) = pref + rhoh*9.81_wp*(1.2_wp - y_cc(j))
26287# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26288 else
26289# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26290 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
26291# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26292 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
26293# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26294 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = alph*rhoh
26295# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26296 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = (1._wp - alph)*rhol
26297# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26298 pint = pref + rhoh*9.81_wp*(1.2_wp - inth)
26299# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26300 q_prim_vf(eqn_idx%E)%sf(i, j, k) = pint + rhol*9.81_wp*(inth - y_cc(j))
26301# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26302 end if
26303# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26304 case (301) ! (3D lung geometry in X direction, |sin(*)+sin(*)|)
26305# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26306 h = 0.0_wp
26307# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26308 lam = 1.0_wp
26309# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26310 amp = patch_icpp(patch_id)%a(2)
26311# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26312 inth = amp*abs((sin(2*pi*y_cc(j)/lam - pi/2) + sin(2*pi*z_cc(k)/lam - pi/2)) + h)
26313# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26314 if (x_cc(i) > inth) then
26315# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26316 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = patch_icpp(1)%alpha_rho(1)
26317# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26318 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = patch_icpp(1)%alpha_rho(2)
26319# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26320 q_prim_vf(eqn_idx%E)%sf(i, j, k) = patch_icpp(1)%pres
26321# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26322 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = patch_icpp(1)%alpha(1)
26323# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26324 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = patch_icpp(1)%alpha(2)
26325# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26326 end if
26327# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26328 case (302) ! 3D Jet with IGR
26329# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26330 ux_th = 10*sqrt(1.4*0.4)
26331# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26332 ux_am = 0.0*sqrt(1.4)
26333# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26334 p_th = 2.0_wp
26335# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26336 p_am = 1.0_wp
26337# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26338 rho_th = 1._wp
26339# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26340 rho_am = 1._wp
26341# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26342 y_th = 0.0_wp
26343# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26344 z_th = 0.0_wp
26345# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26346 r_th = 1._wp
26347# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26348 eps_smooth = 1._wp
26349# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26350 eps = 1e-6
26351# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26352
26353# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26354 r = sqrt((y_cc(j) - y_th)**2._wp + (z_cc(k) - z_th)**2._wp)
26355# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26356 rcut = f_cut_on(r - r_th, eps_smooth)
26357# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26358 xcut = f_cut_on(x_cc(i), eps_smooth)
26359# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26360
26361# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26362 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, k) = ux_th*rcut*xcut + ux_am
26363# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26364 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, k) = 0._wp
26365# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26366 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0._wp
26367# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26368
26369# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26370 if (num_fluids == 1) then
26371# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26372 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = (rho_th - rho_am)*rcut*xcut + rho_am
26373# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26374 else
26375# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26376 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = (1._wp - 2._wp*eps)*rcut*xcut + eps
26377# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26378 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = rho_th*q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)
26379# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26380 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))
26381# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26382 end if
26383# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26384
26385# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26386 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p_th*rcut*xcut + p_am
26387# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26388 case (303) ! 3D Multijet
26389# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26390 eps_smooth = 3.0_wp
26391# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26392 ux_th = 10*sqrt(1.4*0.4)
26393# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26394 ux_am = 2.5*sqrt(1.4*0.4)
26395# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26396 p_th = 0.8_wp
26397# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26398 p_am = 0.4_wp
26399# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26400 rho_th = 1._wp
26401# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26402 rho_am = 1._wp
26403# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26404 eps = 1e-6
26405# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26406
26407# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26408 rcut = rcut_arr(j, k)
26409# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26410 xcut = f_cut_on(x_cc(i), eps_smooth)
26411# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26412
26413# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26414 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, k) = ux_th*rcut*xcut + ux_am
26415# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26416 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, k) = 0._wp
26417# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26418 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0._wp
26419# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26420
26421# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26422 if (num_fluids == 1) then
26423# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26424 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = (rho_th - rho_am)*rcut*xcut + rho_am
26425# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26426 else
26427# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26428 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = (1._wp - 2._wp*eps)*rcut*xcut + eps
26429# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26430 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = rho_th*q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)
26431# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26432 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))
26433# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26434 end if
26435# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26436
26437# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26438 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p_th*rcut*xcut + p_am
26439# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26440 case (304) ! 3D Interface from file cartesian
26441# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26442 alph = 0.5_wp*(1 + (1._wp - 2._wp*eps)*tanh((ih(start_idx(2) + j, start_idx(3) + k) - x_cc(i))*(0.5_wp/dx)))
26443# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26444
26445# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26446 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
26447# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26448 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
26449# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26450
26451# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26452 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)*(950._wp/1000._wp)
26453# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26454 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = q_prim_vf(eqn_idx%adv%end)%sf(i, j, k)*(1._wp/1000._wp)
26455# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26456
26457# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26458 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p0_ic + (q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) + q_prim_vf(eqn_idx%cont%end)%sf(i, &
26459# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26460 & j, k))*g0_ic*(ih(start_idx(2) + j, start_idx(3) + k) - x_cc(i))
26461# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26462
26463# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26464 if (surface_tension) q_prim_vf(eqn_idx%c)%sf(i, j, k) = alph
26465# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26466 case (305) ! 3D Interface from file axisymmetric
26467# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26468 alph = 0.5_wp*(1 + (1._wp - 2._wp*eps)*tanh((ih(start_idx(2) + j, 0) - x_cc(i))*(0.01_wp/dx)))
26469# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26470
26471# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26472 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
26473# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26474 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
26475# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26476
26477# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26478 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)*1._wp
26479# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26480 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = q_prim_vf(eqn_idx%adv%end)%sf(i, j, k)*(1._wp/950._wp)
26481# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26482
26483# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26484 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p0_ic + (q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) + q_prim_vf(eqn_idx%cont%end)%sf(i, &
26485# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26486 & j, k))*g0_ic*(ih(start_idx(1) + i, start_idx(3) + k) - y_cc(j))
26487# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26488
26489# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26490 if (surface_tension) q_prim_vf(eqn_idx%c)%sf(i, j, k) = alph
26491# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26492 case (370) ! 3D extrusion of 2D profile from external data
26493# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26494 ! This hardcoded case extrudes a 2D profile to initialize a 3D simulation domain
26495# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26496 if (.not. files_loaded) then
26497# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26498 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
26499# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26500 do f = 1, max_files
26501# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26502 write (file_num_str, '(I0)') f
26503# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26504 filenames(f) = trim(files_dir) // "/" // "prim." // trim(file_num_str) // ".00." // trim(file_extension) // ".dat"
26505# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26506 end do
26507# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26508
26509# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26510 ! Common file reading setup
26511# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26512 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
26513# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26514 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
26515# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26516
26517# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26518 select case (num_dims)
26519# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26520 case (1, 2) ! 1D and 2D cases are similar
26521# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26522 ! Count lines
26523# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26524 line_count = 0
26525# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26526 do
26527# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26528 read (unit2, *, iostat=ios2) dummy_x, dummy_y
26529# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26530 if (ios2 /= 0) exit
26531# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26532 line_count = line_count + 1
26533# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26534 end do
26535# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26536 close (unit2)
26537# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26538
26539# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26540 xrows = line_count
26541# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26542 yrows = 1
26543# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26544 index_x = 0
26545# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26546 if (num_dims == 2) index_x = i
26547# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26548#ifdef MFC_DEBUG
26549# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26550 block
26551# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26552 use iso_fortran_env, only: output_unit
26553# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26554
26555# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26556 print *, 'm_icpp_patches.fpp:1182: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
26557# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26558
26559# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26560 call flush (output_unit)
26561# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26562 end block
26563# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26564#endif
26565# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26566 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
26567# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26568
26569# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26570
26571# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26572
26573# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26574#if defined(MFC_OpenACC)
26575# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26576!$acc enter data create(x_coords, stored_values)
26577# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26578#elif defined(MFC_OpenMP)
26579# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26580!$omp target enter data map(always,alloc:x_coords, stored_values)
26581# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26582#endif
26583# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26584
26585# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26586 ! Read data from all files
26587# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26588 do f = 1, max_files
26589# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26590 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
26591# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26592 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
26593# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26594
26595# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26596 do iter = 1, xrows
26597# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26598 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
26599# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26600 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
26601# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26602 end do
26603# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26604 close (unit)
26605# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26606 end do
26607# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26608
26609# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26610 ! Calculate offsets
26611# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26612 domain_xstart = x_coords(1)
26613# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26614 x_step = x_cc(1) - x_cc(0)
26615# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26616 delta_x = merge(x_cc(0) - domain_xstart, x_cc(index_x) - domain_xstart, num_dims == 1)
26617# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26618 global_offset_x = nint(abs(delta_x)/x_step)
26619# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26620 case (3) ! 3D case - determine grid structure
26621# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26622 ! Find yRows by counting rows with same x
26623# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26624 read (unit2, *, iostat=ios2) x0, y0, dummy_z
26625# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26626 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
26627# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26628
26629# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26630 yrows = 1
26631# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26632 do
26633# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26634 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
26635# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26636 if (ios2 /= 0) exit
26637# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26638 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
26639# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26640 yrows = yrows + 1
26641# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26642 else
26643# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26644 exit
26645# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26646 end if
26647# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26648 end do
26649# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26650 close (unit2)
26651# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26652
26653# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26654 ! Count total rows
26655# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26656 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
26657# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26658 nrows = 0
26659# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26660 do
26661# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26662 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
26663# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26664 if (ios2 /= 0) exit
26665# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26666 nrows = nrows + 1
26667# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26668 end do
26669# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26670 close (unit2)
26671# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26672
26673# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26674 xrows = nrows/yrows
26675# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26676#ifdef MFC_DEBUG
26677# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26678 block
26679# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26680 use iso_fortran_env, only: output_unit
26681# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26682
26683# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26684 print *, 'm_icpp_patches.fpp:1182: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
26685# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26686
26687# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26688 call flush (output_unit)
26689# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26690 end block
26691# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26692#endif
26693# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26694 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
26695# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26696
26697# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26698
26699# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26700
26701# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26702
26703# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26704#if defined(MFC_OpenACC)
26705# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26706!$acc enter data create(x_coords, y_coords, stored_values)
26707# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26708#elif defined(MFC_OpenMP)
26709# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26710!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
26711# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26712#endif
26713# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26714 index_x = i
26715# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26716 index_y = j
26717# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26718
26719# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26720 ! Read all files
26721# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26722 do f = 1, max_files
26723# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26724 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
26725# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26726 if (ios /= 0) then
26727# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26728 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
26729# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26730 cycle
26731# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26732 end if
26733# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26734
26735# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26736 iter = 0
26737# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26738 do iix = 1, xrows
26739# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26740 do iiy = 1, yrows
26741# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26742 iter = iter + 1
26743# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26744 if (f == 1) then
26745# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26746 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
26747# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26748 else
26749# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26750 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
26751# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26752 end if
26753# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26754 if (ios /= 0) call s_mpi_abort("Error reading data")
26755# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26756 end do
26757# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26758 end do
26759# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26760 close (unit)
26761# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26762 end do
26763# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26764
26765# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26766 ! Calculate offsets
26767# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26768 x_step = x_cc(1) - x_cc(0)
26769# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26770 y_step = y_cc(1) - y_cc(0)
26771# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26772 delta_x = x_cc(index_x) - x_coords(1)
26773# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26774 delta_y = y_cc(index_y) - y_coords(1)
26775# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26776 global_offset_x = nint(abs(delta_x)/x_step)
26777# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26778 global_offset_y = nint(abs(delta_y)/y_step)
26779# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26780 end select
26781# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26782
26783# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26784 files_loaded = .true.
26785# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26786 end if
26787# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26788
26789# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26790 ! Data assignment
26791# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26792 select case (num_dims)
26793# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26794 case (1)
26795# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26796 idx = i + 1 + global_offset_x
26797# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26798 ! idx must land inside the file's row range: this rank's subdomain offset
26799# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26800 ! (global_offset_x) was derived from this rank's own grid, so a miss means the
26801# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26802 ! IC file is misaligned/mis-sized for the run grid, not a normal boundary case.
26803# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26804 if (idx < 1 .or. idx > xrows) &
26805# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26806 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
26807# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26808 do f = 1, sys_size
26809# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26810 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
26811# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26812 end do
26813# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26814 case (2)
26815# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26816 idx = i + 1 + global_offset_x - index_x
26817# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26818 if (idx < 1 .or. idx > xrows) &
26819# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26820 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
26821# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26822 do f = 1, sys_size - 1
26823# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26824 jump = merge(1, 0, f >= eqn_idx%mom%end)
26825# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26826 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
26827# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26828 end do
26829# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26830 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
26831# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26832 case (3)
26833# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26834 idx = i + 1 + global_offset_x - index_x
26835# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26836 idy = j + 1 + global_offset_y - index_y
26837# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26838 if (idx < 1 .or. idx > xrows .or. idy < 1 .or. idy > yrows) &
26839# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26840 & call s_mpi_abort("Hardcoded IC extrusion: row/column index out of range (IC file misaligned with the run grid)")
26841# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26842 do f = 1, sys_size - 1
26843# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26844 jump = merge(1, 0, f >= eqn_idx%mom%end)
26845# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26846 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
26847# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26848 end do
26849# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26850 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
26851# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26852 end select
26853# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26854 case (380) ! Taylor-Green vortex
26855# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26856 ! This is patch is hard-coded for test suite optimization used in the 3D_TaylorGreenVortex case: This analytic patch used
26857# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26858 ! geometry 9
26859# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26860 mach = 0.1
26861# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26862 if (patch_id == 1) then
26863# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26864 q_prim_vf(eqn_idx%E)%sf(i, j, &
26865# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26866 & 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)
26867# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26868 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)
26869# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26870 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)
26871# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26872 end if
26873# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26874 case default
26875# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26876 call s_int_to_str(patch_id, istr)
26877# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26878 call s_mpi_abort("Invalid hcid specified for patch " // trim(istr))
26879# 1182 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26880 end select
26881 end if
26882
26883 ! Updating the patch identities bookkeeping variable
26884 if (1._wp - eta < sgm_eps) patch_id_fp(i, j, k) = patch_id
26885 end if
26886 end do
26887 end do
26888 end do
26889 if (allocated(stored_values)) then
26890# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26891#ifdef MFC_DEBUG
26892# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26893 block
26894# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26895 use iso_fortran_env, only: output_unit
26896# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26897
26898# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26899 print *, 'm_icpp_patches.fpp:1191: ', '@:DEALLOCATE(stored_values)'
26900# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26901
26902# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26903 call flush (output_unit)
26904# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26905 end block
26906# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26907#endif
26908# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26909
26910# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26911#if defined(MFC_OpenACC)
26912# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26913!$acc exit data delete(stored_values)
26914# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26915#elif defined(MFC_OpenMP)
26916# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26917!$omp target exit data map(release:stored_values)
26918# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26919#endif
26920# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26921 deallocate (stored_values)
26922# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26923#ifdef MFC_DEBUG
26924# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26925 block
26926# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26927 use iso_fortran_env, only: output_unit
26928# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26929
26930# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26931 print *, 'm_icpp_patches.fpp:1191: ', '@:DEALLOCATE(x_coords)'
26932# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26933
26934# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26935 call flush (output_unit)
26936# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26937 end block
26938# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26939#endif
26940# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26941
26942# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26943#if defined(MFC_OpenACC)
26944# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26945!$acc exit data delete(x_coords)
26946# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26947#elif defined(MFC_OpenMP)
26948# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26949!$omp target exit data map(release:x_coords)
26950# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26951#endif
26952# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26953 deallocate (x_coords)
26954# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26955 end if
26956# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26957
26958# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26959 if (allocated(y_coords)) then
26960# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26961#ifdef MFC_DEBUG
26962# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26963 block
26964# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26965 use iso_fortran_env, only: output_unit
26966# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26967
26968# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26969 print *, 'm_icpp_patches.fpp:1191: ', '@:DEALLOCATE(y_coords)'
26970# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26971
26972# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26973 call flush (output_unit)
26974# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26975 end block
26976# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26977#endif
26978# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26979
26980# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26981#if defined(MFC_OpenACC)
26982# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26983!$acc exit data delete(y_coords)
26984# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26985#elif defined(MFC_OpenMP)
26986# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26987!$omp target exit data map(release:y_coords)
26988# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26989#endif
26990# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26991 deallocate (y_coords)
26992# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26993 end if
26994# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26995
26996# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26997 files_loaded = .false.
26998# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
26999
27000# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27001 if (allocated(stored_values274)) then
27002# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27003#ifdef MFC_DEBUG
27004# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27005 block
27006# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27007 use iso_fortran_env, only: output_unit
27008# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27009
27010# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27011 print *, 'm_icpp_patches.fpp:1191: ', '@:DEALLOCATE(stored_values274)'
27012# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27013
27014# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27015 call flush (output_unit)
27016# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27017 end block
27018# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27019#endif
27020# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27021
27022# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27023#if defined(MFC_OpenACC)
27024# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27025!$acc exit data delete(stored_values274)
27026# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27027#elif defined(MFC_OpenMP)
27028# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27029!$omp target exit data map(release:stored_values274)
27030# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27031#endif
27032# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27033 deallocate (stored_values274)
27034# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27035 end if
27036# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27037
27038# 1191 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27039 files_loaded274 = .false.
27040
27041 end subroutine s_icpp_cylinder
27042
27043 !> The swept plane patch is a 3D geometry that may be used, for example, in creating a solid boundary, or pre-/post- shock
27044 !! region, at an angle with respect to the axes of the Cartesian coordinate system. The geometry of the patch is well-defined
27045 !! when its centroid and normal vector, aimed in the sweep direction, are provided. Note that the sweep plane patch DOES allow
27046 !! the smoothing of its boundary.
27047 subroutine s_icpp_sweep_plane(patch_id, patch_id_fp, q_prim_vf)
27048
27049 integer, intent(in) :: patch_id
27050
27051#ifdef MFC_MIXED_PRECISION
27052 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
27053#else
27054 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
27055#endif
27056 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
27057 integer :: i, j, k !< Generic loop iterators
27058 real(wp) :: a, b, c, d
27059
27060 integer :: xRows, yRows, nRows, iix, iiy, max_files
27061# 1212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27062 integer :: f, iter, unit, unit2, idx, idy, index_x, index_y, jump, line_count
27063# 1212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27064 real(wp) :: x_step, y_step
27065# 1212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27066 real(wp) :: dummy_x, dummy_y, dummy_z, x0, y0
27067# 1212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27068 integer :: global_offset_x, global_offset_y !< MPI subdomain offset
27069# 1212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27070 real(wp) :: delta_x, delta_y
27071# 1212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27072 character(len=300), dimension(sys_size) :: fileNames !< Arrays to store all data from files
27073# 1212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27074 real(wp), allocatable :: stored_values(:,:,:)
27075# 1212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27076 real(wp), allocatable :: x_coords(:), y_coords(:)
27077# 1212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27078 logical :: files_loaded = .false.
27079# 1212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27080 real(wp) :: domain_xstart
27081# 1212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27082 character(len=20) :: file_num_str !< For storing the file number as a string
27083# 1212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27084 integer :: ios
27085# 1212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27086 integer :: ios2
27087# 1212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27088
27089# 1212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27090 ! hcid=274 (2dHardcodedIC.fpp): full 2D field from external data, no extrusion.
27091# 1212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27092 ! Declared here (not in Hardcoded2DVariables()) so it's visible wherever
27093# 1212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27094 ! HardcodedDeallocation() is called, matching the pattern of stored_values/x_coords/
27095# 1212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27096 ! y_coords/files_loaded above.
27097# 1212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27098 real(wp), allocatable, dimension(:,:,:) :: stored_values274
27099# 1212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27100 logical :: files_loaded274 = .false.
27101# 1212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27102 integer :: f274, ix274, iy274, unit274, ios274
27103# 1212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27104 integer :: local_ix_beg274, local_iy_beg274
27105# 1212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27106 character(len=300) :: fname274
27107# 1212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27108 character(len=20) :: file_num_str274
27109# 1212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27110 real(wp) :: dummy_x274, dummy_y274, dummy_val274, x0_274, y0_274, x_step274, y_step274
27111# 1212 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27112 real(wp) :: file_dx274, file_dy274, r_align274
27113 ! Place any declaration of intermediate variables here
27114# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27115 real(wp) :: rhoH, rhoL, pRef, pInt, h, lam, wl, amp, intH, alph, Mach
27116# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27117 real(wp) :: eps
27118# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27119
27120# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27121 ! IGR Jets Arrays to stor position and radii of jets from input file
27122# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27123 real(wp), dimension(:), allocatable :: y_th_arr, z_th_arr, r_th_arr
27124# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27125 ! Variables to describe initial condition of jet
27126# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27127 real(wp) :: r, ux_th, ux_am, p_th, p_am, rho_th, rho_am, y_th, z_th, r_th, eps_smooth
27128# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27129 real(wp) :: rcut, xcut !< Intermediate variables for creating smooth initial condition
27130# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27131 real(wp), dimension(0:n,0:p) :: rcut_arr
27132# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27133 integer :: l, q, s !< Iterators for reading input files
27134# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27135 integer :: start, end !< Ints to keep track of position in file
27136# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27137 character(len=100000) :: line ! String to store line in file
27138# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27139 character(len=25) :: value !< String to store value in line
27140# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27141 integer :: NJet !< Number of jets
27142# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27143 real(wp), allocatable, dimension(:,:) :: ih ! Array to store interface height in
27144# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27145 logical :: file_exist ! Flag to check if file exists
27146# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27147
27148# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27149 eps = 1e-9_wp
27150# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27151
27152# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27153 if (patch_icpp(patch_id)%hcid == 303) then ! IGR Multijet
27154# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27155 eps_smooth = 3._wp
27156# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27157 inquire (file="njet.txt", exist=file_exist)
27158# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27159 if (file_exist) then
27160# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27161 open (unit=10, file="njet.txt", status="old", action="read")
27162# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27163 read (10, *) njet
27164# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27165 close (10)
27166# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27167 else
27168# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27169 call s_mpi_abort("Error: njet.txt file specified for hcid=303 does not exist")
27170# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27171 end if
27172# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27173
27174# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27175#ifdef MFC_DEBUG
27176# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27177 block
27178# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27179 use iso_fortran_env, only: output_unit
27180# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27181
27182# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27183 print *, 'm_icpp_patches.fpp:1213: ', '@:ALLOCATE(y_th_arr(0:NJet - 1))'
27184# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27185
27186# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27187 call flush (output_unit)
27188# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27189 end block
27190# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27191#endif
27192# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27193 allocate (y_th_arr(0:njet - 1))
27194# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27195
27196# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27197
27198# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27199#if defined(MFC_OpenACC)
27200# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27201!$acc enter data create(y_th_arr)
27202# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27203#elif defined(MFC_OpenMP)
27204# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27205!$omp target enter data map(always,alloc:y_th_arr)
27206# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27207#endif
27208# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27209#ifdef MFC_DEBUG
27210# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27211 block
27212# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27213 use iso_fortran_env, only: output_unit
27214# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27215
27216# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27217 print *, 'm_icpp_patches.fpp:1213: ', '@:ALLOCATE(z_th_arr(0:NJet - 1))'
27218# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27219
27220# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27221 call flush (output_unit)
27222# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27223 end block
27224# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27225#endif
27226# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27227 allocate (z_th_arr(0:njet - 1))
27228# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27229
27230# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27231
27232# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27233#if defined(MFC_OpenACC)
27234# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27235!$acc enter data create(z_th_arr)
27236# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27237#elif defined(MFC_OpenMP)
27238# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27239!$omp target enter data map(always,alloc:z_th_arr)
27240# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27241#endif
27242# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27243#ifdef MFC_DEBUG
27244# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27245 block
27246# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27247 use iso_fortran_env, only: output_unit
27248# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27249
27250# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27251 print *, 'm_icpp_patches.fpp:1213: ', '@:ALLOCATE(r_th_arr(0:NJet - 1))'
27252# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27253
27254# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27255 call flush (output_unit)
27256# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27257 end block
27258# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27259#endif
27260# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27261 allocate (r_th_arr(0:njet - 1))
27262# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27263
27264# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27265
27266# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27267#if defined(MFC_OpenACC)
27268# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27269!$acc enter data create(r_th_arr)
27270# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27271#elif defined(MFC_OpenMP)
27272# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27273!$omp target enter data map(always,alloc:r_th_arr)
27274# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27275#endif
27276# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27277
27278# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27279 inquire (file="jets.csv", exist=file_exist)
27280# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27281 if (file_exist) then
27282# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27283 open (unit=10, file="jets.csv", status="old", action="read")
27284# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27285 do q = 0, njet - 1
27286# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27287 read (10, '(A)') line ! Read a full line as a string
27288# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27289 start = 1
27290# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27291
27292# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27293 do l = 0, 2
27294# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27295 end = index(line(start:), ',') ! Find the next comma
27296# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27297 if (end == 0) then
27298# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27299 value = trim(adjustl(line(start:))) ! Last value in the line
27300# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27301 else
27302# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27303 value = trim(adjustl(line(start:start + end - 2))) ! Extract substring
27304# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27305 start = start + end ! Move to next value
27306# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27307 end if
27308# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27309 if (l == 0) then
27310# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27311 read (value, *) y_th_arr(q) ! Convert string to numeric value
27312# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27313 else if (l == 1) then
27314# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27315 read (value, *) z_th_arr(q)
27316# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27317 else
27318# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27319 read (value, *) r_th_arr(q)
27320# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27321 end if
27322# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27323 end do
27324# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27325 end do
27326# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27327 close (10)
27328# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27329
27330# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27331 do q = 0, p
27332# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27333 do l = 0, n
27334# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27335 rcut = 0._wp
27336# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27337 do s = 0, njet - 1
27338# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27339 r = sqrt((y_cc(l) - y_th_arr(s))**2._wp + (z_cc(q) - z_th_arr(s))**2._wp)
27340# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27341 rcut = rcut + f_cut_on(r - r_th_arr(s), eps_smooth)
27342# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27343 end do
27344# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27345 rcut_arr(l, q) = rcut
27346# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27347 end do
27348# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27349 end do
27350# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27351 else
27352# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27353 call s_mpi_abort("Error: jets.csv file specified for hcid=303 does not exist")
27354# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27355 end if
27356# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27357 end if
27358# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27359
27360# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27361 if (patch_icpp(patch_id)%hcid == 304) then ! 3D Cartesian interface from file
27362# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27363#ifdef MFC_DEBUG
27364# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27365 block
27366# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27367 use iso_fortran_env, only: output_unit
27368# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27369
27370# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27371 print *, 'm_icpp_patches.fpp:1213: ', '@:ALLOCATE(ih(0:n_glb, 0:p_glb))'
27372# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27373
27374# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27375 call flush (output_unit)
27376# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27377 end block
27378# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27379#endif
27380# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27381 allocate (ih(0:n_glb, 0:p_glb))
27382# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27383
27384# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27385
27386# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27387#if defined(MFC_OpenACC)
27388# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27389!$acc enter data create(ih)
27390# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27391#elif defined(MFC_OpenMP)
27392# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27393!$omp target enter data map(always,alloc:ih)
27394# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27395#endif
27396# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27397
27398# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27399 if (interface_file == '.') then
27400# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27401 call s_mpi_abort("Error: interface_file must be specified for hcid=304")
27402# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27403 else
27404# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27405 inquire (file=trim(interface_file), exist=file_exist)
27406# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27407 if (file_exist) then
27408# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27409 open (unit=10, file=trim(interface_file), status="old", action="read")
27410# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27411 do i = 0, n_glb
27412# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27413 read (10, '(A)') line ! Read a full line as a string
27414# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27415 start = 1
27416# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27417
27418# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27419 do j = 0, p_glb
27420# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27421 end = index(line(start:), ',') ! Find the next comma
27422# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27423 if (end == 0) then
27424# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27425 value = trim(adjustl(line(start:))) ! Last value in the line
27426# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27427 else
27428# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27429 value = trim(adjustl(line(start:start + end - 2))) ! Extract substring
27430# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27431 start = start + end ! Move to next value
27432# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27433 end if
27434# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27435 read (value, *) ih(i, j) ! Convert string to numeric value
27436# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27437 if (.not. f_is_default(normmag)) ih(i, j) = ih(i, j)*normmag
27438# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27439 if (.not. f_is_default(normfac)) ih(i, j) = ih(i, j) + normfac
27440# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27441 end do
27442# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27443 end do
27444# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27445 close (10)
27446# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27447 else
27448# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27449 call s_mpi_abort("Error: interface_file specified for hcid=304 does not exist")
27450# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27451 end if
27452# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27453 end if
27454# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27455 end if
27456# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27457
27458# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27459 if (patch_icpp(patch_id)%hcid == 305) then ! 3D Axisymmetric interface from file
27460# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27461#ifdef MFC_DEBUG
27462# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27463 block
27464# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27465 use iso_fortran_env, only: output_unit
27466# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27467
27468# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27469 print *, 'm_icpp_patches.fpp:1213: ', '@:ALLOCATE(ih(0:n_glb, 0:0))'
27470# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27471
27472# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27473 call flush (output_unit)
27474# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27475 end block
27476# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27477#endif
27478# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27479 allocate (ih(0:n_glb, 0:0))
27480# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27481
27482# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27483
27484# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27485#if defined(MFC_OpenACC)
27486# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27487!$acc enter data create(ih)
27488# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27489#elif defined(MFC_OpenMP)
27490# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27491!$omp target enter data map(always,alloc:ih)
27492# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27493#endif
27494# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27495 if (interface_file == '.') then
27496# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27497 call s_mpi_abort("Error: interface_file must be specified for hcid=305")
27498# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27499 else
27500# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27501 inquire (file=trim(interface_file), exist=file_exist)
27502# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27503 if (file_exist) then
27504# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27505 open (unit=10, file=trim(interface_file), status="old", action="read")
27506# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27507 do i = 0, n_glb
27508# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27509 read (10, '(A)') line ! Read a full line as a string
27510# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27511 value = trim(line)
27512# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27513 read (value, *) ih(i, 0) ! Convert string to numeric value
27514# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27515 if (.not. f_is_default(normmag)) ih(i, 0) = ih(i, 0)*normmag
27516# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27517 if (.not. f_is_default(normfac)) ih(i, 0) = ih(i, 0) + normfac
27518# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27519 end do
27520# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27521 close (10)
27522# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27523 else
27524# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27525 call s_mpi_abort("Error: interface_file specified for hcid=305 does not exist")
27526# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27527 end if
27528# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27529 end if
27530# 1213 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27531 end if
27532
27533 ! Transferring the centroid information of the plane to be swept
27534 x_centroid = patch_icpp(patch_id)%x_centroid
27535 y_centroid = patch_icpp(patch_id)%y_centroid
27536 z_centroid = patch_icpp(patch_id)%z_centroid
27537 smooth_patch_id = patch_icpp(patch_id)%smooth_patch_id
27538 smooth_coeff = patch_icpp(patch_id)%smooth_coeff
27539
27540 ! Obtaining coefficients of the equation describing the sweep plane
27541 a = patch_icpp(patch_id)%normal(1)
27542 b = patch_icpp(patch_id)%normal(2)
27543 c = patch_icpp(patch_id)%normal(3)
27544 d = -a*x_centroid - b*y_centroid - c*z_centroid
27545
27546 ! Initialize eta=1; modified if smoothing is enabled
27547 eta = 1._wp
27548
27549 ! Assign patch vars if cell is covered and patch has write permission
27550 do k = 0, p
27551 do j = 0, n
27552 do i = 0, m
27553 if (grid_geometry == 3) then
27555 else
27556 cart_y = y_cc(j)
27557 cart_z = z_cc(k)
27558 end if
27559
27560 if (patch_icpp(patch_id)%smoothen) then
27561 eta = 5.e-1_wp + 5.e-1_wp*tanh(smooth_coeff/min(dx, dy, &
27562 & dz)*(a*x_cc(i) + b*cart_y + c*cart_z + d)/sqrt(a**2 + b**2 + c**2))
27563 end if
27564
27565 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, &
27566 & k))) .or. patch_id_fp(i, j, k) == smooth_patch_id) then
27567 call s_assign_patch_primitive_variables(patch_id, i, j, k, eta, q_prim_vf, patch_id_fp)
27568
27569
27570 if (patch_icpp(patch_id)%hcid /= dflt_int) then
27571 select case (patch_icpp(patch_id)%hcid)
27572# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27573 case (300) ! Rayleigh-Taylor instability
27574# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27575 rhoh = 3._wp
27576# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27577 rhol = 1._wp
27578# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27579 pref = 1.e5_wp
27580# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27581 pint = pref
27582# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27583 h = 0.7_wp
27584# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27585 lam = 0.2_wp
27586# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27587 wl = 2._wp*pi/lam
27588# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27589 amp = 0.025_wp/wl
27590# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27591
27592# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27593 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
27594# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27595
27596# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27597 alph = 5.e-1_wp*(1._wp + tanh((y_cc(j) - inth)/2.5e-3_wp))
27598# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27599
27600# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27601 if (alph < eps) alph = eps
27602# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27603 if (alph > 1._wp - eps) alph = 1._wp - eps
27604# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27605
27606# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27607 if (y_cc(j) > inth) then
27608# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27609 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
27610# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27611 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
27612# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27613 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = alph*rhoh
27614# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27615 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = (1._wp - alph)*rhol
27616# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27617 q_prim_vf(eqn_idx%E)%sf(i, j, k) = pref + rhoh*9.81_wp*(1.2_wp - y_cc(j))
27618# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27619 else
27620# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27621 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
27622# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27623 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
27624# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27625 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = alph*rhoh
27626# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27627 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = (1._wp - alph)*rhol
27628# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27629 pint = pref + rhoh*9.81_wp*(1.2_wp - inth)
27630# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27631 q_prim_vf(eqn_idx%E)%sf(i, j, k) = pint + rhol*9.81_wp*(inth - y_cc(j))
27632# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27633 end if
27634# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27635 case (301) ! (3D lung geometry in X direction, |sin(*)+sin(*)|)
27636# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27637 h = 0.0_wp
27638# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27639 lam = 1.0_wp
27640# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27641 amp = patch_icpp(patch_id)%a(2)
27642# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27643 inth = amp*abs((sin(2*pi*y_cc(j)/lam - pi/2) + sin(2*pi*z_cc(k)/lam - pi/2)) + h)
27644# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27645 if (x_cc(i) > inth) then
27646# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27647 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = patch_icpp(1)%alpha_rho(1)
27648# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27649 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = patch_icpp(1)%alpha_rho(2)
27650# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27651 q_prim_vf(eqn_idx%E)%sf(i, j, k) = patch_icpp(1)%pres
27652# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27653 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = patch_icpp(1)%alpha(1)
27654# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27655 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = patch_icpp(1)%alpha(2)
27656# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27657 end if
27658# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27659 case (302) ! 3D Jet with IGR
27660# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27661 ux_th = 10*sqrt(1.4*0.4)
27662# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27663 ux_am = 0.0*sqrt(1.4)
27664# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27665 p_th = 2.0_wp
27666# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27667 p_am = 1.0_wp
27668# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27669 rho_th = 1._wp
27670# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27671 rho_am = 1._wp
27672# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27673 y_th = 0.0_wp
27674# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27675 z_th = 0.0_wp
27676# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27677 r_th = 1._wp
27678# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27679 eps_smooth = 1._wp
27680# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27681 eps = 1e-6
27682# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27683
27684# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27685 r = sqrt((y_cc(j) - y_th)**2._wp + (z_cc(k) - z_th)**2._wp)
27686# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27687 rcut = f_cut_on(r - r_th, eps_smooth)
27688# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27689 xcut = f_cut_on(x_cc(i), eps_smooth)
27690# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27691
27692# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27693 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, k) = ux_th*rcut*xcut + ux_am
27694# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27695 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, k) = 0._wp
27696# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27697 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0._wp
27698# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27699
27700# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27701 if (num_fluids == 1) then
27702# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27703 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = (rho_th - rho_am)*rcut*xcut + rho_am
27704# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27705 else
27706# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27707 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = (1._wp - 2._wp*eps)*rcut*xcut + eps
27708# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27709 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = rho_th*q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)
27710# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27711 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))
27712# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27713 end if
27714# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27715
27716# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27717 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p_th*rcut*xcut + p_am
27718# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27719 case (303) ! 3D Multijet
27720# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27721 eps_smooth = 3.0_wp
27722# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27723 ux_th = 10*sqrt(1.4*0.4)
27724# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27725 ux_am = 2.5*sqrt(1.4*0.4)
27726# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27727 p_th = 0.8_wp
27728# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27729 p_am = 0.4_wp
27730# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27731 rho_th = 1._wp
27732# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27733 rho_am = 1._wp
27734# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27735 eps = 1e-6
27736# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27737
27738# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27739 rcut = rcut_arr(j, k)
27740# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27741 xcut = f_cut_on(x_cc(i), eps_smooth)
27742# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27743
27744# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27745 q_prim_vf(eqn_idx%mom%beg)%sf(i, j, k) = ux_th*rcut*xcut + ux_am
27746# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27747 q_prim_vf(eqn_idx%mom%beg + 1)%sf(i, j, k) = 0._wp
27748# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27749 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0._wp
27750# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27751
27752# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27753 if (num_fluids == 1) then
27754# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27755 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = (rho_th - rho_am)*rcut*xcut + rho_am
27756# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27757 else
27758# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27759 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = (1._wp - 2._wp*eps)*rcut*xcut + eps
27760# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27761 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = rho_th*q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)
27762# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27763 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))
27764# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27765 end if
27766# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27767
27768# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27769 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p_th*rcut*xcut + p_am
27770# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27771 case (304) ! 3D Interface from file cartesian
27772# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27773 alph = 0.5_wp*(1 + (1._wp - 2._wp*eps)*tanh((ih(start_idx(2) + j, start_idx(3) + k) - x_cc(i))*(0.5_wp/dx)))
27774# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27775
27776# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27777 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
27778# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27779 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
27780# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27781
27782# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27783 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)*(950._wp/1000._wp)
27784# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27785 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = q_prim_vf(eqn_idx%adv%end)%sf(i, j, k)*(1._wp/1000._wp)
27786# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27787
27788# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27789 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p0_ic + (q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) + q_prim_vf(eqn_idx%cont%end)%sf(i, &
27790# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27791 & j, k))*g0_ic*(ih(start_idx(2) + j, start_idx(3) + k) - x_cc(i))
27792# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27793
27794# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27795 if (surface_tension) q_prim_vf(eqn_idx%c)%sf(i, j, k) = alph
27796# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27797 case (305) ! 3D Interface from file axisymmetric
27798# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27799 alph = 0.5_wp*(1 + (1._wp - 2._wp*eps)*tanh((ih(start_idx(2) + j, 0) - x_cc(i))*(0.01_wp/dx)))
27800# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27801
27802# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27803 q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k) = alph
27804# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27805 q_prim_vf(eqn_idx%adv%end)%sf(i, j, k) = 1._wp - alph
27806# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27807
27808# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27809 q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) = q_prim_vf(eqn_idx%adv%beg)%sf(i, j, k)*1._wp
27810# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27811 q_prim_vf(eqn_idx%cont%end)%sf(i, j, k) = q_prim_vf(eqn_idx%adv%end)%sf(i, j, k)*(1._wp/950._wp)
27812# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27813
27814# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27815 q_prim_vf(eqn_idx%E)%sf(i, j, k) = p0_ic + (q_prim_vf(eqn_idx%cont%beg)%sf(i, j, k) + q_prim_vf(eqn_idx%cont%end)%sf(i, &
27816# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27817 & j, k))*g0_ic*(ih(start_idx(1) + i, start_idx(3) + k) - y_cc(j))
27818# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27819
27820# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27821 if (surface_tension) q_prim_vf(eqn_idx%c)%sf(i, j, k) = alph
27822# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27823 case (370) ! 3D extrusion of 2D profile from external data
27824# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27825 ! This hardcoded case extrudes a 2D profile to initialize a 3D simulation domain
27826# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27827 if (.not. files_loaded) then
27828# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27829 max_files = merge(sys_size, sys_size - 1, num_dims == 1)
27830# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27831 do f = 1, max_files
27832# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27833 write (file_num_str, '(I0)') f
27834# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27835 filenames(f) = trim(files_dir) // "/" // "prim." // trim(file_num_str) // ".00." // trim(file_extension) // ".dat"
27836# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27837 end do
27838# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27839
27840# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27841 ! Common file reading setup
27842# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27843 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
27844# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27845 if (ios2 /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(1)))
27846# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27847
27848# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27849 select case (num_dims)
27850# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27851 case (1, 2) ! 1D and 2D cases are similar
27852# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27853 ! Count lines
27854# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27855 line_count = 0
27856# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27857 do
27858# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27859 read (unit2, *, iostat=ios2) dummy_x, dummy_y
27860# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27861 if (ios2 /= 0) exit
27862# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27863 line_count = line_count + 1
27864# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27865 end do
27866# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27867 close (unit2)
27868# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27869
27870# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27871 xrows = line_count
27872# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27873 yrows = 1
27874# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27875 index_x = 0
27876# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27877 if (num_dims == 2) index_x = i
27878# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27879#ifdef MFC_DEBUG
27880# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27881 block
27882# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27883 use iso_fortran_env, only: output_unit
27884# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27885
27886# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27887 print *, 'm_icpp_patches.fpp:1253: ', '@:ALLOCATE(x_coords(xRows), stored_values(xRows, 1, sys_size))'
27888# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27889
27890# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27891 call flush (output_unit)
27892# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27893 end block
27894# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27895#endif
27896# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27897 allocate (x_coords(xrows), stored_values(xrows, 1, sys_size))
27898# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27899
27900# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27901
27902# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27903
27904# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27905#if defined(MFC_OpenACC)
27906# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27907!$acc enter data create(x_coords, stored_values)
27908# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27909#elif defined(MFC_OpenMP)
27910# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27911!$omp target enter data map(always,alloc:x_coords, stored_values)
27912# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27913#endif
27914# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27915
27916# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27917 ! Read data from all files
27918# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27919 do f = 1, max_files
27920# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27921 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
27922# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27923 if (ios /= 0) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
27924# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27925
27926# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27927 do iter = 1, xrows
27928# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27929 read (unit, *, iostat=ios) x_coords(iter), stored_values(iter, 1, f)
27930# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27931 if (ios /= 0) call s_mpi_abort("Error reading file: " // trim(filenames(f)))
27932# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27933 end do
27934# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27935 close (unit)
27936# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27937 end do
27938# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27939
27940# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27941 ! Calculate offsets
27942# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27943 domain_xstart = x_coords(1)
27944# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27945 x_step = x_cc(1) - x_cc(0)
27946# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27947 delta_x = merge(x_cc(0) - domain_xstart, x_cc(index_x) - domain_xstart, num_dims == 1)
27948# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27949 global_offset_x = nint(abs(delta_x)/x_step)
27950# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27951 case (3) ! 3D case - determine grid structure
27952# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27953 ! Find yRows by counting rows with same x
27954# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27955 read (unit2, *, iostat=ios2) x0, y0, dummy_z
27956# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27957 if (ios2 /= 0) call s_mpi_abort("Error reading first line")
27958# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27959
27960# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27961 yrows = 1
27962# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27963 do
27964# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27965 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
27966# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27967 if (ios2 /= 0) exit
27968# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27969 if (f_approx_equal(dummy_x, x0) .and. (.not. f_approx_equal(dummy_y, y0))) then
27970# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27971 yrows = yrows + 1
27972# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27973 else
27974# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27975 exit
27976# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27977 end if
27978# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27979 end do
27980# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27981 close (unit2)
27982# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27983
27984# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27985 ! Count total rows
27986# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27987 open (newunit=unit2, file=trim(filenames(1)), status='old', action='read', iostat=ios2)
27988# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27989 nrows = 0
27990# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27991 do
27992# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27993 read (unit2, *, iostat=ios2) dummy_x, dummy_y, dummy_z
27994# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27995 if (ios2 /= 0) exit
27996# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27997 nrows = nrows + 1
27998# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
27999 end do
28000# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28001 close (unit2)
28002# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28003
28004# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28005 xrows = nrows/yrows
28006# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28007#ifdef MFC_DEBUG
28008# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28009 block
28010# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28011 use iso_fortran_env, only: output_unit
28012# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28013
28014# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28015 print *, 'm_icpp_patches.fpp:1253: ', '@:ALLOCATE(x_coords(nrows), y_coords(nrows), stored_values(xRows, yRows, sys_size))'
28016# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28017
28018# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28019 call flush (output_unit)
28020# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28021 end block
28022# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28023#endif
28024# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28025 allocate (x_coords(nrows), y_coords(nrows), stored_values(xrows, yrows, sys_size))
28026# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28027
28028# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28029
28030# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28031
28032# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28033
28034# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28035#if defined(MFC_OpenACC)
28036# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28037!$acc enter data create(x_coords, y_coords, stored_values)
28038# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28039#elif defined(MFC_OpenMP)
28040# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28041!$omp target enter data map(always,alloc:x_coords, y_coords, stored_values)
28042# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28043#endif
28044# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28045 index_x = i
28046# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28047 index_y = j
28048# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28049
28050# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28051 ! Read all files
28052# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28053 do f = 1, max_files
28054# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28055 open (newunit=unit, file=trim(filenames(f)), status='old', action='read', iostat=ios)
28056# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28057 if (ios /= 0) then
28058# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28059 if (f == 1) call s_mpi_abort("Error opening file: " // trim(filenames(f)))
28060# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28061 cycle
28062# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28063 end if
28064# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28065
28066# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28067 iter = 0
28068# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28069 do iix = 1, xrows
28070# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28071 do iiy = 1, yrows
28072# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28073 iter = iter + 1
28074# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28075 if (f == 1) then
28076# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28077 read (unit, *, iostat=ios) x_coords(iter), y_coords(iter), stored_values(iix, iiy, f)
28078# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28079 else
28080# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28081 read (unit, *, iostat=ios) dummy_x, dummy_y, stored_values(iix, iiy, f)
28082# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28083 end if
28084# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28085 if (ios /= 0) call s_mpi_abort("Error reading data")
28086# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28087 end do
28088# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28089 end do
28090# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28091 close (unit)
28092# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28093 end do
28094# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28095
28096# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28097 ! Calculate offsets
28098# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28099 x_step = x_cc(1) - x_cc(0)
28100# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28101 y_step = y_cc(1) - y_cc(0)
28102# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28103 delta_x = x_cc(index_x) - x_coords(1)
28104# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28105 delta_y = y_cc(index_y) - y_coords(1)
28106# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28107 global_offset_x = nint(abs(delta_x)/x_step)
28108# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28109 global_offset_y = nint(abs(delta_y)/y_step)
28110# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28111 end select
28112# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28113
28114# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28115 files_loaded = .true.
28116# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28117 end if
28118# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28119
28120# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28121 ! Data assignment
28122# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28123 select case (num_dims)
28124# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28125 case (1)
28126# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28127 idx = i + 1 + global_offset_x
28128# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28129 ! idx must land inside the file's row range: this rank's subdomain offset
28130# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28131 ! (global_offset_x) was derived from this rank's own grid, so a miss means the
28132# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28133 ! IC file is misaligned/mis-sized for the run grid, not a normal boundary case.
28134# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28135 if (idx < 1 .or. idx > xrows) &
28136# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28137 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
28138# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28139 do f = 1, sys_size
28140# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28141 q_prim_vf(f)%sf(i, 0, 0) = stored_values(idx, 1, f)
28142# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28143 end do
28144# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28145 case (2)
28146# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28147 idx = i + 1 + global_offset_x - index_x
28148# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28149 if (idx < 1 .or. idx > xrows) &
28150# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28151 & call s_mpi_abort("Hardcoded IC extrusion: row index out of range (IC file misaligned with the run grid)")
28152# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28153 do f = 1, sys_size - 1
28154# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28155 jump = merge(1, 0, f >= eqn_idx%mom%end)
28156# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28157 q_prim_vf(f + jump)%sf(i, j, 0) = stored_values(idx, 1, f)
28158# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28159 end do
28160# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28161 q_prim_vf(eqn_idx%mom%end)%sf(i, j, 0) = 0.0_wp
28162# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28163 case (3)
28164# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28165 idx = i + 1 + global_offset_x - index_x
28166# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28167 idy = j + 1 + global_offset_y - index_y
28168# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28169 if (idx < 1 .or. idx > xrows .or. idy < 1 .or. idy > yrows) &
28170# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28171 & call s_mpi_abort("Hardcoded IC extrusion: row/column index out of range (IC file misaligned with the run grid)")
28172# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28173 do f = 1, sys_size - 1
28174# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28175 jump = merge(1, 0, f >= eqn_idx%mom%end)
28176# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28177 q_prim_vf(f + jump)%sf(i, j, k) = stored_values(idx, idy, f)
28178# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28179 end do
28180# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28181 q_prim_vf(eqn_idx%mom%end)%sf(i, j, k) = 0.0_wp
28182# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28183 end select
28184# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28185 case (380) ! Taylor-Green vortex
28186# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28187 ! This is patch is hard-coded for test suite optimization used in the 3D_TaylorGreenVortex case: This analytic patch used
28188# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28189 ! geometry 9
28190# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28191 mach = 0.1
28192# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28193 if (patch_id == 1) then
28194# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28195 q_prim_vf(eqn_idx%E)%sf(i, j, &
28196# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28197 & 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)
28198# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28199 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)
28200# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28201 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)
28202# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28203 end if
28204# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28205 case default
28206# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28207 call s_int_to_str(patch_id, istr)
28208# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28209 call s_mpi_abort("Invalid hcid specified for patch " // trim(istr))
28210# 1253 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28211 end select
28212 end if
28213
28214 ! Updating the patch identities bookkeeping variable
28215 if (1._wp - eta < sgm_eps) patch_id_fp(i, j, k) = patch_id
28216 end if
28217 end do
28218 end do
28219 end do
28220 if (allocated(stored_values)) then
28221# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28222#ifdef MFC_DEBUG
28223# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28224 block
28225# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28226 use iso_fortran_env, only: output_unit
28227# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28228
28229# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28230 print *, 'm_icpp_patches.fpp:1262: ', '@:DEALLOCATE(stored_values)'
28231# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28232
28233# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28234 call flush (output_unit)
28235# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28236 end block
28237# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28238#endif
28239# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28240
28241# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28242#if defined(MFC_OpenACC)
28243# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28244!$acc exit data delete(stored_values)
28245# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28246#elif defined(MFC_OpenMP)
28247# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28248!$omp target exit data map(release:stored_values)
28249# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28250#endif
28251# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28252 deallocate (stored_values)
28253# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28254#ifdef MFC_DEBUG
28255# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28256 block
28257# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28258 use iso_fortran_env, only: output_unit
28259# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28260
28261# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28262 print *, 'm_icpp_patches.fpp:1262: ', '@:DEALLOCATE(x_coords)'
28263# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28264
28265# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28266 call flush (output_unit)
28267# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28268 end block
28269# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28270#endif
28271# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28272
28273# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28274#if defined(MFC_OpenACC)
28275# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28276!$acc exit data delete(x_coords)
28277# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28278#elif defined(MFC_OpenMP)
28279# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28280!$omp target exit data map(release:x_coords)
28281# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28282#endif
28283# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28284 deallocate (x_coords)
28285# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28286 end if
28287# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28288
28289# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28290 if (allocated(y_coords)) then
28291# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28292#ifdef MFC_DEBUG
28293# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28294 block
28295# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28296 use iso_fortran_env, only: output_unit
28297# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28298
28299# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28300 print *, 'm_icpp_patches.fpp:1262: ', '@:DEALLOCATE(y_coords)'
28301# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28302
28303# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28304 call flush (output_unit)
28305# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28306 end block
28307# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28308#endif
28309# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28310
28311# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28312#if defined(MFC_OpenACC)
28313# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28314!$acc exit data delete(y_coords)
28315# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28316#elif defined(MFC_OpenMP)
28317# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28318!$omp target exit data map(release:y_coords)
28319# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28320#endif
28321# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28322 deallocate (y_coords)
28323# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28324 end if
28325# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28326
28327# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28328 files_loaded = .false.
28329# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28330
28331# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28332 if (allocated(stored_values274)) then
28333# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28334#ifdef MFC_DEBUG
28335# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28336 block
28337# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28338 use iso_fortran_env, only: output_unit
28339# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28340
28341# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28342 print *, 'm_icpp_patches.fpp:1262: ', '@:DEALLOCATE(stored_values274)'
28343# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28344
28345# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28346 call flush (output_unit)
28347# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28348 end block
28349# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28350#endif
28351# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28352
28353# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28354#if defined(MFC_OpenACC)
28355# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28356!$acc exit data delete(stored_values274)
28357# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28358#elif defined(MFC_OpenMP)
28359# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28360!$omp target exit data map(release:stored_values274)
28361# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28362#endif
28363# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28364 deallocate (stored_values274)
28365# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28366 end if
28367# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28368
28369# 1262 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28370 files_loaded274 = .false.
28371
28372 end subroutine s_icpp_sweep_plane
28373
28374 !> The STL patch is a 2/3D geometry that is imported from an STL file.
28375 subroutine s_icpp_model(patch_id, patch_id_fp, q_prim_vf)
28376
28377 integer, intent(in) :: patch_id
28378
28379#ifdef MFC_MIXED_PRECISION
28380 integer(kind=1), dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
28381#else
28382 integer, dimension(0:m,0:n,0:p), intent(inout) :: patch_id_fp
28383#endif
28384 type(scalar_field), dimension(1:sys_size), intent(inout) :: q_prim_vf
28385 integer :: i, j, k !< loop iterators
28386 integer :: model_id !< Index into the preloading stl_models(:)
28387 real(wp) :: threshold !< Inside/outside cutoff for this model
28388 real(wp), dimension(1:3) :: point !< Cell-center query point
28389 logical :: in_box !< Whether the cell center lies in the model's bounding box
28390
28391 model_id = patch_icpp(patch_id)%model_id
28392 threshold = stl_models(model_id)%model_threshold
28393
28394 do i = 0, m; do j = 0, n; do k = 0, p
28395 point = (/x_cc(i), y_cc(j), 0._wp/)
28396 if (p > 0) point(3) = z_cc(k)
28397 if (grid_geometry == 3) point = f_convert_cyl_to_cart(point)
28398
28399 ! Run the winding test only on cells whose Cartesian point lies inside the bounding box, else skip the calculation
28400 in_box = point(1) >= stl_bounding_boxes(model_id, 1, 1) .and. point(1) <= stl_bounding_boxes(model_id, 1, &
28401 & 3) .and. point(2) >= stl_bounding_boxes(model_id, 2, &
28402 & 1) .and. point(2) <= stl_bounding_boxes(model_id, 2, 3)
28403 if (p > 0 .or. grid_geometry == 3) then
28404 in_box = in_box .and. point(3) >= stl_bounding_boxes(model_id, 3, &
28405 & 1) .and. point(3) <= stl_bounding_boxes(model_id, 3, 3)
28406 end if
28407
28408 if (in_box) then
28409 eta = f_model_is_inside(gpu_ntrs(model_id), model_id, point)
28410 else
28411 eta = 0._wp
28412 end if
28413
28414 if (eta > threshold) then
28415 eta = 1._wp
28416 else if (.not. patch_icpp(patch_id)%smoothen) then
28417 eta = 0._wp
28418 end if
28419
28420 call s_assign_patch_primitive_variables(patch_id, i, j, k, eta, q_prim_vf, patch_id_fp)
28421
28422
28423 end do; end do; end do
28424
28425 end subroutine s_icpp_model
28426
28427 !> Convert cylindrical (r, theta) coordinates to Cartesian (y, z) module variables.
28429
28430
28431# 1322 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28432#if MFC_OpenACC
28433# 1322 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28434!$acc routine seq
28435# 1322 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28436#elif MFC_OpenMP
28437# 1322 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28438
28439# 1322 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28440
28441# 1322 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28442!$omp declare target device_type(any)
28443# 1322 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28444#endif
28445
28446 real(wp), intent(in) :: cyl_y, cyl_z
28447
28448 cart_y = cyl_y*sin(cyl_z)
28449 cart_z = cyl_y*cos(cyl_z)
28450
28452
28453 !> Return a 3D Cartesian coordinate vector from a cylindrical (x, r, theta) input vector.
28454 function f_convert_cyl_to_cart(cyl) result(cart)
28455
28456
28457# 1334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28458#if MFC_OpenACC
28459# 1334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28460!$acc routine seq
28461# 1334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28462#elif MFC_OpenMP
28463# 1334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28464
28465# 1334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28466
28467# 1334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28468!$omp declare target device_type(any)
28469# 1334 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28470#endif
28471
28472 real(wp), dimension(1:3), intent(in) :: cyl
28473 real(wp), dimension(1:3) :: cart
28474
28475 cart = (/cyl(1), cyl(2)*sin(cyl(3)), cyl(2)*cos(cyl(3))/)
28476
28477 end function f_convert_cyl_to_cart
28478
28479 !> Archimedes spiral function
28480 elemental function f_r(myth, offset, a)
28481
28482
28483# 1346 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28484#if MFC_OpenACC
28485# 1346 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28486!$acc routine seq
28487# 1346 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28488#elif MFC_OpenMP
28489# 1346 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28490
28491# 1346 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28492
28493# 1346 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28494!$omp declare target device_type(any)
28495# 1346 "/home/runner/work/MFC/MFC/src/pre_process/m_icpp_patches.fpp"
28496#endif
28497 real(wp), intent(in) :: myth, offset, a
28498 real(wp) :: b
28499 real(wp) :: f_r
28500
28501 ! r(th) = a + b*th
28502
28503 b = 2._wp*a/(2._wp*pi)
28504 f_r = a + b*myth + offset
28505
28506 end function f_r
28507
28508end 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.
integer, parameter model_eqns_4eq
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.
real(wp), dimension(:), allocatable x_cc
Locations of cell-centers (cc) in x-, y- and z-directions, respectively.
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.
subroutine, public s_instantiate_stl_models()
Load, transform, and register STL/OBJ immersed-boundary models onto the simulation grid.
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.
Contains helper functions specific to various patch gemoetries for determining if a grid cell lies in...
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).