MFC:Pre_process  v1.0
m_start_up.f90
Go to the documentation of this file.
1 !! __ _______________
2 !! / |/ / ____/ ____/
3 !! / /|_/ / /_ / /
4 !! / / / / __/ / /___
5 !! /_/ /_/_/ \____/
6 !!
7 !! This file is part of MFC.
8 !!
9 !! MFC is the legal property of its developers, whose names
10 !! are listed in the copyright file included with this source
11 !! distribution.
12 !!
13 !! MFC is free software: you can redistribute it and/or modify
14 !! it under the terms of the GNU General Public License as published
15 !! by the Free Software Foundation, either version 3 of the license
16 !! or any later version.
17 !!
18 !! MFC is distributed in the hope that it will be useful,
19 !! but WITHOUT ANY WARRANTY; without even the implied warranty of
20 !! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 !! GNU General Public License for more details.
22 !!
23 !! You should have received a copy of the GNU General Public License
24 !! along with MFC (LICENSE).
25 !! If not, see <http://www.gnu.org/licenses/>.
26 
33 
36 MODULE m_start_up
37 
38  ! Dependencies =============================================================
39  USE m_derived_types !< definitions of the derived types
40 
41  USE m_global_parameters !< global parameters for the code
42 
43  USE m_mpi_proxy !< message passing interface (mpi) module proxy
44 
45  USE m_data_output !< procedures to write the grid data and the
46  !! conservative variables to files
47 
48  USE mpi !< message passing interface (mpi) module
49 
51  ! ==========================================================================
52 
53 
54  IMPLICIT NONE
55 
56  PRIVATE; PUBLIC :: s_initialize_start_up_module, &
67 
68  abstract INTERFACE ! ===================================================
69 
70  SUBROUTINE s_read_abstract_grid_data_files(dflt_int)! ----------
71 
72  INTEGER, INTENT(IN) :: dflt_int
73 
74  END SUBROUTINE s_read_abstract_grid_data_files ! ---------------
75 
76  SUBROUTINE s_read_abstract_ic_data_files(q_cons_vf) ! -----------
77 
78  IMPORT :: scalar_field, sys_size
79 
80  ! Conservative variables
81  TYPE(scalar_field), &
82  DIMENSION(sys_size), &
83  INTENT(INOUT) :: q_cons_vf
84 
85  END SUBROUTINE s_read_abstract_ic_data_files ! -----------------
86 
87  END INTERFACE ! ========================================================
88 
89 
90  CHARACTER(LEN = path_len + name_len) :: proc_rank_dir
92 
93  CHARACTER(LEN = path_len + 2*name_len), PRIVATE :: t_step_dir
96 
98  PROCEDURE(s_read_abstract_ic_data_files), POINTER :: s_read_ic_data_files => null()
99 
100  CONTAINS
101 
102 
103 
107  SUBROUTINE s_read_input_file() ! ---------------------------------------
109 
110  CHARACTER(LEN = name_len) :: file_loc
112 
113  LOGICAL :: file_check
116 
117  ! Namelist for all of the parameters to be inputed by the user
118  namelist /user_inputs/ case_dir, old_grid, old_ic, t_step_old, m, &
119  n, p, x_domain, y_domain, z_domain, &
121  a_z, x_a, y_a, z_a, x_b, y_b, z_b, &
123  adv_alphan, mpp_lim, &
125  patch_icpp, fluid_pp, &
130  rhoref, pref, bubbles, r0ref, nb, &
133 
134 
135  ! Inquiring the status of the pre_process.inp file
136  file_loc = 'pre_process.inp'
137  INQUIRE(file = trim(file_loc), exist = file_check)
138 
139 
140  ! Checking whether the input file is there. If it is, the input file
141  ! is read. If not, the program is terminated.
142  IF(file_check) THEN
143  OPEN(1, file = trim(file_loc), form = 'formatted', &
144  status = 'old', action = 'read')
145  READ(1, nml = user_inputs)
146  CLOSE(1)
147  ! Store m,n,p into global m,n,p
148  m_glb = m
149  n_glb = n
150  p_glb = p
151  ELSE
152  print '(A)', 'File pre_process.inp is missing. Exiting ...'
153  CALL s_mpi_abort()
154  END IF
155 
156 
157  END SUBROUTINE s_read_input_file ! -------------------------------------
158 
159 
160 
161 
166  SUBROUTINE s_check_input_file() ! --------------------------------------
167 
168 
169  CHARACTER(LEN = LEN_TRIM(case_dir)) :: file_loc
171 
172 
173  LOGICAL :: dir_check
175 
176 
177  INTEGER :: i
179 
180  INTEGER :: bub_fac
182 
183  bub_fac = 0
184  IF (bubbles .AND. (num_fluids == 1)) bub_fac = 1
185 
186 
187  ! Checking the existence of the case folder
188  case_dir = adjustl(case_dir)
189 
190  file_loc = trim(case_dir) // '/.'
191 
192  CALL my_inquire(file_loc,dir_check)
193 
194  ! Startup checks for bubbles and bubble variables
195  IF(bubbles .AND. (model_eqns .NE. 4 .AND. model_eqns .NE. 2)) THEN
196  print '(A)', 'Unsupported combination of values of ' // &
197  'bubbles and model_eqns. ' // &
198  'Exiting ...'
199  CALL s_mpi_abort()
200  ELSEIF(bubbles .AND. polydisperse .and. (nb==1)) THEN
201  print '(A)', 'Polydisperse bubble dynamics requires nb > 1 ' // &
202  'Exiting ...'
203  CALL s_mpi_abort()
204  ELSEIF(bubbles .AND. polydisperse .and. (mod(nb,2)==0)) THEN
205  print '(A)', 'nb must be odd ' // &
206  'Exiting ...'
207  CALL s_mpi_abort()
208  ELSEIF(model_eqns == 4 .AND. (rhoref == dflt_real)) THEN
209  print '(A)', 'Unsupported combination of values of ' // &
210  'bubbles and rhoref. ' // &
211  'Exiting ...'
212  CALL s_mpi_abort()
213  ELSEIF(model_eqns == 4 .AND. (pref == dflt_real)) THEN
214  print '(A)', 'Unsupported combination of values of ' // &
215  'bubbles and pref. ' // &
216  'Exiting ...'
217  CALL s_mpi_abort()
218  ELSEIF(model_eqns == 4 .AND. (num_fluids > 1)) THEN
219  print '(A)', 'Unsupported combination of values of ' // &
220  'model_eqns and num_fluids. ' // &
221  'Exiting ...'
222  CALL s_mpi_abort()
223  ELSEIF(bubbles .AND. (r0ref == dflt_real)) THEN
224  print '(A)', 'Unsupported combination of values of ' // &
225  'bubbles and R0ref. ' // &
226  'Exiting ...'
227  CALL s_mpi_abort()
228  ELSEIF(bubbles .AND. (nb == dflt_int)) THEN
229  print '(a)', 'unsupported combination of values of ' // &
230  'bubbles and nb. ' // &
231  'exiting ...'
232  CALL s_mpi_abort()
233  ELSEIF(bubbles .AND. (thermal > 3)) THEN
234  print '(a)', 'unsupported combination of values of ' // &
235  'bubbles and thermal. ' // &
236  'exiting ...'
237  CALL s_mpi_abort()
238  END IF
239 
240 
241  ! Constraint on the location of the case directory
242  IF(dir_check .NEQV. .true.) THEN
243  print '(A)', 'Unsupported choice for the value of ' // &
244  'case_dir.'
245  print '(A)', 'WARNING: Ensure that compiler flags/choices in Makefiles match your compiler! '
246  print '(A)', 'WARNING: Ensure that preprocessor flags are enabled! '
247  CALL s_mpi_abort()
248 
249  ! Constraints on the use of a preexisting grid and initial condition
250  ELSEIF((old_grid .NEQV. .true.) .AND. old_ic) THEN
251  print '(A)', 'Unsupported choice of the combination of ' // &
252  'values for old_grid and old_ic. Exiting ...'
253  CALL s_mpi_abort()
254 
255  ELSEIF((old_grid .OR. old_ic) .AND. t_step_old == dflt_int) THEN
256  print '(A)', 'Unsupported choice of the combination of ' // &
257  'values for old_grid and old_ic and t_step_old. Exiting ...'
258  CALL s_mpi_abort()
259 
260  ! Constraints on dimensionality and the number of cells for the grid
261  ELSEIF(m <= 0) THEN
262  print '(A)', 'Unsupported choice for the value of m. ' // &
263  'Exiting ...'
264  CALL s_mpi_abort()
265  ELSEIF(n < 0) THEN
266  print '(A)', 'Unsupported choice for the value of n. ' // &
267  'Exiting ...'
268  CALL s_mpi_abort()
269  ELSEIF(p < 0) THEN
270  print '(A)', 'Unsupported choice for the value of p. ' // &
271  'Exiting ...'
272  CALL s_mpi_abort()
273  ELSEIF(cyl_coord .AND. p > 0 .AND. mod(p,2) /= 1) THEN
274  print '(A)', 'Unsupported choice for the value of p. ' // &
275  'Total number of cells in azimuthal direction '// &
276  'must be an even number. Exiting ...'
277  CALL s_mpi_abort()
278  ELSEIF(n == 0 .AND. p > 0) THEN
279  print '(A)', 'Unsupported choice of the combination of ' // &
280  'values for n and p. Exiting ...'
281  CALL s_mpi_abort()
282  ELSEIF( (m+1)*(n+1)*(p+1) &
283  < &
284  2**(min(1,m) + min(1,n) + min(1,p))*num_procs ) THEN
285  print '(A)', 'Unsupported choice of the combination of ' // &
286  'values for num_procs, m, n and p. ' // &
287  'Exiting ...'
288  CALL s_mpi_abort()
289 
290  ! Constraints on domain boundaries locations in the x-direction
291  ELSEIF( (old_grid .AND. x_domain%beg /= dflt_real) &
292  .OR. &
293  ( (old_grid .NEQV. .true.) .AND. &
294  x_domain%beg == dflt_real ) ) THEN
295  print '(A)', 'Unsupported choice of the combination of ' // &
296  'values for old_grid and x_domain%beg. ' // &
297  'Exiting ...'
298  CALL s_mpi_abort()
299  ELSEIF( (old_grid .AND. x_domain%end /= dflt_real) &
300  .OR. &
301  ( (old_grid .NEQV. .true.) .AND. &
302  x_domain%end == dflt_real ) ) THEN
303  print '(A)', 'Unsupported choice of the combination of ' // &
304  'values for old_grid and x_domain%end. ' // &
305  'Exiting ...'
306  CALL s_mpi_abort()
307  ELSEIF( (old_grid .NEQV. .true.) &
308  .AND. &
309  x_domain%beg >= x_domain%end ) THEN
310  print '(A)', 'Unsupported choice of the combination of ' // &
311  'values for old_grid, x_domain%beg and ' // &
312  'x_domain%end. Exiting ...'
313  CALL s_mpi_abort()
314  END IF
315 
316  IF (cyl_coord .NEQV. .true.) THEN ! Cartesian coordinates
317 
318  ! Constraints on domain boundaries locations in the y-direction
319  IF( ( n == 0 .AND. y_domain%beg /= dflt_real ) &
320  .OR. &
321  ( n > 0 &
322  .AND. &
323  ( (old_grid .AND. y_domain%beg /= dflt_real) &
324  .OR. &
325  ( (old_grid .NEQV. .true.) .AND. &
326  y_domain%beg == dflt_real ) ) ) ) THEN
327  print '(A)', 'Unsupported choice of the combination of ' // &
328  'values for old_grid, n and y_domain%beg. ' // &
329  'Exiting ...'
330  CALL s_mpi_abort()
331  ELSEIF( ( n == 0 .AND. y_domain%end /= dflt_real ) &
332  .OR. &
333  ( n > 0 &
334  .AND. &
335  ( (old_grid .AND. y_domain%end /= dflt_real) &
336  .OR. &
337  ( (old_grid .NEQV. .true.) .AND. &
338  y_domain%end == dflt_real ) ) ) ) THEN
339  print '(A)', 'Unsupported choice of the combination of ' // &
340  'values for old_grid, n and y_domain%end. ' // &
341  'Exiting ...'
342  CALL s_mpi_abort()
343  ELSEIF( n > 0 &
344  .AND. &
345  (old_grid .NEQV. .true.) &
346  .AND. &
347  y_domain%beg >= y_domain%end ) THEN
348  print '(A)', 'Unsupported choice of the combination of ' // &
349  'values for old_grid, n, y_domain%beg and ' // &
350  'y_domain%end. Exiting ...'
351  CALL s_mpi_abort()
352 
353  ! Constraints on domain boundaries locations in the z-direction
354  ELSEIF( ( p == 0 .AND. z_domain%beg /= dflt_real ) &
355  .OR. &
356  ( p > 0 &
357  .AND. &
358  ( (old_grid .AND. z_domain%beg /= dflt_real) &
359  .OR. &
360  ( (old_grid .NEQV. .true.) .AND. &
361  z_domain%beg == dflt_real ) ) ) ) THEN
362  print '(A)', 'Unsupported choice of the combination of ' // &
363  'values for old_grid, p and z_domain%beg. ' // &
364  'Exiting ...'
365  CALL s_mpi_abort()
366  ELSEIF( ( p == 0 .AND. z_domain%end /= dflt_real ) &
367  .OR. &
368  ( p > 0 &
369  .AND. &
370  ( (old_grid .AND. z_domain%end /= dflt_real) &
371  .OR. &
372  ( (old_grid .NEQV. .true.) .AND. &
373  z_domain%end == dflt_real ) ) ) ) THEN
374  print '(A)', 'Unsupported choice of the combination of ' // &
375  'values for old_grid, p and z_domain%end. ' // &
376  'Exiting ...'
377  CALL s_mpi_abort()
378  ELSEIF( p > 0 &
379  .AND. &
380  (old_grid .NEQV. .true.) &
381  .AND. &
382  z_domain%beg >= z_domain%end ) THEN
383  print '(A)', 'Unsupported choice of the combination of ' // &
384  'values for old_grid, p, z_domain%beg and ' // &
385  'z_domain%end. Exiting ...'
386  CALL s_mpi_abort()
387  END IF
388 
389  ELSE ! Cylindrical coordinates
390 
391  ! Constraints on domain boundaries for cylindrical coordinates
392  IF( n == 0 &
393  .OR. &
394  y_domain%beg /= 0d0 &
395  .OR. &
396  y_domain%end == dflt_real &
397  .OR. &
398  y_domain%end < 0d0 &
399  .OR. &
400  y_domain%beg >= y_domain%end ) THEN
401  print '(A)', 'Unsupported choice of the combination of ' // &
402  'cyl_coord and n, y_domain%beg, or ' // &
403  'y_domain%end. Exiting ...'
404  CALL s_mpi_abort()
405  ELSEIF ( (p == 0 .AND. z_domain%beg /= dflt_real) &
406  .OR. &
407  (p == 0 .AND. z_domain%end /= dflt_real)) THEN
408  print '(A)', 'Unsupported choice of the combination of ' // &
409  'cyl_coord and p, z_domain%beg, or ' // &
410  'z_domain%end. Exiting ...'
411  CALL s_mpi_abort()
412  ELSEIF( p > 0 .AND. ( z_domain%beg /= 0d0 &
413  .OR. &
414  z_domain%end /= 2d0*pi )) THEN
415  print '(A)', 'Unsupported choice of the combination of ' // &
416  'cyl_coord and p, z_domain%beg, or ' // &
417  'z_domain%end. Exiting ...'
418  CALL s_mpi_abort()
419  END IF
420 
421  END IF
422 
423  ! Constraints on the grid stretching in the x-direction
424  IF(old_grid .AND. stretch_x) THEN
425  print '(A)', 'Unsupported choice of the combination of ' // &
426  'values for old_grid and stretch_x. ' // &
427  'Exiting ...'
428  CALL s_mpi_abort()
429  ELSEIF(stretch_x .AND. a_x == dflt_real) THEN
430  print '(A)', 'Unsupported choice of the combination of ' // &
431  'values for stretch_x and a_x. Exiting ...'
432  CALL s_mpi_abort()
433  ELSEIF(stretch_x .AND. x_a == dflt_real) THEN
434  print '(A)', 'Unsupported choice of the combination of ' // &
435  'values for stretch_x and x_a. Exiting ...'
436  CALL s_mpi_abort()
437  ELSEIF(stretch_x .AND. x_b == dflt_real) THEN
438  print '(A)', 'Unsupported choice of the combination of ' // &
439  'values for stretch_x and x_b. Exiting ...'
440  CALL s_mpi_abort()
441  ELSEIF(stretch_x .AND. x_a >= x_b) THEN
442  print '(A)', 'Unsupported choice of the combination of ' // &
443  'values for stretch_x, x_a and x_b. ' // &
444  'Exiting ...'
445  CALL s_mpi_abort()
446  ELSEIF( stretch_x &
447  .AND. &
448  (a_x + log(cosh(a_x*(x_domain%beg - x_a))) &
449  + log(cosh(a_x*(x_domain%beg - x_b))) &
450  - 2d0*log(cosh( 0.5d0*a_x*(x_b - x_a) )))/a_x <= 0d0 ) THEN
451  print '(A)', 'Unsupported choice of the combination of ' // &
452  'values for x_domain%beg, stretch_x, a_x, ' // &
453  'x_a, and x_b. Exiting ...'
454  CALL s_mpi_abort()
455  ELSEIF( stretch_x &
456  .AND. &
457  (a_x + log(cosh(a_x*(x_domain%end - x_a))) &
458  + log(cosh(a_x*(x_domain%end - x_b))) &
459  - 2d0*log(cosh( 0.5d0*a_x*(x_b - x_a) )))/a_x <= 0d0 ) THEN
460  print '(A)', 'Unsupported choice of the combination of ' // &
461  'values for x_domain%end, stretch_x, a_x, ' // &
462  'x_a, and x_b. Exiting ...'
463  CALL s_mpi_abort()
464  ELSEIF(loops_x < 1) THEN
465  print '(A)', 'Unsupported choice for the value of loops_x. '// &
466  'Exiting ...'
467  CALL s_mpi_abort()
468 
469  ! Constraints on the grid stretching in the y-direction
470  ELSEIF(old_grid .AND. stretch_y) THEN
471  print '(A)', 'Unsupported choice of the combination of ' // &
472  'values for old_grid and stretch_y. ' // &
473  'Exiting ...'
474  CALL s_mpi_abort()
475  ELSEIF(n == 0 .AND. stretch_y) THEN
476  print '(A)', 'Unsupported choice of the combination of ' // &
477  'values for n and stretch_y. Exiting ...'
478  CALL s_mpi_abort()
479  ELSEIF(stretch_y .AND. a_y == dflt_real) THEN
480  print '(A)', 'Unsupported choice of the combination of ' // &
481  'values for stretch_y and a_y. Exiting ...'
482  CALL s_mpi_abort()
483  ELSEIF(stretch_y .AND. y_a == dflt_real) THEN
484  print '(A)', 'Unsupported choice of the combination of ' // &
485  'values for stretch_y and y_a. Exiting ...'
486  CALL s_mpi_abort()
487  ELSEIF(stretch_y .AND. y_b == dflt_real) THEN
488  print '(A)', 'Unsupported choice of the combination of ' // &
489  'values for stretch_y and y_b. Exiting ...'
490  CALL s_mpi_abort()
491  ELSEIF(stretch_y .AND. y_a >= y_b) THEN
492  print '(A)', 'Unsupported choice of the combination of ' // &
493  'values for stretch_y, y_a and y_b. ' // &
494  'Exiting ...'
495  CALL s_mpi_abort()
496  ELSEIF( stretch_y &
497  .AND. &
498  (a_y + log(cosh(a_y*(y_domain%beg - y_a))) &
499  + log(cosh(a_y*(y_domain%beg - y_b))) &
500  - 2d0*log(cosh( 0.5d0*a_y*(y_b - y_a) )))/a_y <= 0d0 ) THEN
501  print '(A)', 'Unsupported choice of the combination of ' // &
502  'values for y_domain%beg, stretch_y, a_y, ' // &
503  'y_a, and y_b. Exiting ...'
504  CALL s_mpi_abort()
505  ELSEIF( stretch_y &
506  .AND. &
507  (a_y + log(cosh(a_y*(y_domain%end - y_a))) &
508  + log(cosh(a_y*(y_domain%end - y_b))) &
509  - 2d0*log(cosh( 0.5d0*a_y*(y_b - y_a) )))/a_y <= 0d0 ) THEN
510  print '(A)', 'Unsupported choice of the combination of ' // &
511  'values for y_domain%end, stretch_y, a_y, ' // &
512  'y_a, and y_b. Exiting ...'
513  CALL s_mpi_abort()
514  ELSEIF(loops_y < 1) THEN
515  print '(A)', 'Unsupported choice for the value of loops_y. '// &
516  'Exiting ...'
517  CALL s_mpi_abort()
518 
519  ! Constraints on the grid stretching in the z-direction
520  ELSEIF(old_grid .AND. stretch_z) THEN
521  print '(A)', 'Unsupported choice of the combination of ' // &
522  'values for old_grid and stretch_z. ' // &
523  'Exiting ...'
524  CALL s_mpi_abort()
525  ELSEIF(cyl_coord .AND. stretch_z) THEN
526  print '(A)', 'Unsupported choice of the combination of ' // &
527  'values for cyl_coord and stretch_z. ' // &
528  'Exiting ...'
529  CALL s_mpi_abort()
530  ELSEIF(p == 0 .AND. stretch_z) THEN
531  print '(A)', 'Unsupported choice of the combination of ' // &
532  'values for p and stretch_z. Exiting ...'
533  CALL s_mpi_abort()
534  ELSEIF(stretch_z .AND. a_z == dflt_real) THEN
535  print '(A)', 'Unsupported choice of the combination of ' // &
536  'values for stretch_z and a_z. Exiting ...'
537  CALL s_mpi_abort()
538  ELSEIF(stretch_z .AND. z_a == dflt_real) THEN
539  print '(A)', 'Unsupported choice of the combination of ' // &
540  'values for stretch_z and z_a. Exiting ...'
541  CALL s_mpi_abort()
542  ELSEIF(stretch_z .AND. z_b == dflt_real) THEN
543  print '(A)', 'Unsupported choice of the combination of ' // &
544  'values for stretch_z and z_b. Exiting ...'
545  CALL s_mpi_abort()
546  ELSEIF(stretch_z .AND. z_a >= z_b) THEN
547  print '(A)', 'Unsupported choice of the combination of ' // &
548  'values for stretch_z, z_a and z_b. ' // &
549  'Exiting ...'
550  CALL s_mpi_abort()
551  ELSEIF( stretch_z &
552  .AND. &
553  (a_z + log(cosh(a_z*(z_domain%beg - z_a))) &
554  + log(cosh(a_z*(z_domain%beg - z_b))) &
555  - 2d0*log(cosh( 0.5d0*a_z*(z_b - z_a) )))/a_z <= 0d0 ) THEN
556  print '(A)', 'Unsupported choice of the combination of ' // &
557  'values for z_domain%beg, stretch_z, a_z, ' // &
558  'z_a, and z_b. Exiting ...'
559  CALL s_mpi_abort()
560  ELSEIF( stretch_z &
561  .AND. &
562  (a_z + log(cosh(a_z*(z_domain%end - z_a))) &
563  + log(cosh(a_z*(z_domain%end - z_b))) &
564  - 2d0*log(cosh( 0.5d0*a_z*(z_b - z_a) )))/a_z <= 0d0 ) THEN
565  print '(A)', 'Unsupported choice of the combination of ' // &
566  'values for z_domain%end, stretch_z, a_z, ' // &
567  'z_a, and z_b. Exiting ...'
568  CALL s_mpi_abort()
569  ELSEIF(loops_z < 1) THEN
570  print '(A)', 'Unsupported choice for the value of loops_z. '// &
571  'Exiting ...'
572  CALL s_mpi_abort()
573 
574  ! Constraints on model equations and number of fluids in the flow
575  ELSEIF(all(model_eqns /= (/1,2,3,4/))) THEN
576  print '(A)', 'Unsupported value of model_eqns. Exiting ...'
577  CALL s_mpi_abort()
578  ELSEIF( num_fluids /= dflt_int &
579  .AND. &
580  (num_fluids < 1 .OR. num_fluids > num_fluids_max) ) THEN
581  print '(A)', 'Unsupported value of num_fluids. Exiting ...'
582  CALL s_mpi_abort()
583  ELSEIF( (model_eqns == 1 .AND. num_fluids /= dflt_int) &
584  .OR. &
585  (model_eqns == 2 .AND. num_fluids == dflt_int) ) THEN
586  print '(A)', 'Unsupported combination of values of ' // &
587  'model_eqns and num_fluids. ' // &
588  'Exiting ...'
589  CALL s_mpi_abort()
590  ELSEIF(model_eqns == 1 .AND. adv_alphan) THEN
591  print '(A)', 'Unsupported combination of values of ' // &
592  'model_eqns and adv_alphan. ' // &
593  'Exiting ...'
594  CALL s_mpi_abort()
595  ELSEIF(num_fluids == 1 .AND. (adv_alphan .NEQV. .true.)) THEN
596  print '(A)', 'Unsupported combination of values of ' // &
597  'num_fluids and adv_alphan. ' // &
598  'Exiting ...'
599  CALL s_mpi_abort()
600 
601  ! Constraints on the order of the WENO scheme
602  ELSEIF( weno_order /= 1 .AND. weno_order /= 3 &
603  .AND. &
604  weno_order /= 5 ) THEN
605  print '(A)', 'Unsupported choice for the value of ' // &
606  'weno_order. Exiting ...'
607  CALL s_mpi_abort()
608  ELSEIF(m+1 < weno_order) THEN
609  print '(A)', 'Unsupported choice of the combination of ' // &
610  'values for m and weno_order. Exiting ...'
611  CALL s_mpi_abort()
612  ELSEIF(n > 0 .AND. n+1 < weno_order) THEN
613  print '(A)', 'Unsupported choice of the combination of ' // &
614  'values for n and weno_order. Exiting ...'
615  CALL s_mpi_abort()
616  ELSEIF(p > 0 .AND. p+1 < weno_order) THEN
617  print '(A)', 'Unsupported choice of the combination of ' // &
618  'values for p and weno_order. Exiting ...'
619  CALL s_mpi_abort()
620  ELSEIF( (m+1)*(n+1)*(p+1) &
621  < &
622  weno_order**(min(1,m) + min(1,n) + min(1,p))*num_procs ) &
623  THEN
624  print '(A)', 'Unsupported choice of the combination of ' // &
625  'values for num_procs, m, n, p and ' // &
626  'weno_order. Exiting ...'
627  CALL s_mpi_abort()
628 
629  ! Constraints on the boundary conditions in the x-direction
630  ELSEIF(bc_x%beg < -12 .OR. bc_x%beg > -1) THEN
631  print '(A)', 'Unsupported choice for the value of ' // &
632  'bc_x%beg. Exiting ...'
633  CALL s_mpi_abort()
634  ELSEIF(bc_x%end < -12 .OR. bc_x%end > -1) THEN
635  print '(A)', 'Unsupported choice for the value of ' // &
636  'bc_x%end. Exiting ...'
637  CALL s_mpi_abort()
638  ELSEIF( (bc_x%beg == -1 .AND. bc_x%end /= -1) &
639  .OR. &
640  (bc_x%end == -1 .AND. bc_x%beg /= -1) ) THEN
641  print '(A)', 'Unsupported choice of the combination of ' // &
642  'values for bc_x%beg and bc_x%end. ' // &
643  'Exiting ...'
644  CALL s_mpi_abort()
645  END IF
646 
647  IF (cyl_coord .NEQV. .true.) THEN ! Cartesian coordinates
648 
649  ! Constraints on the boundary conditions in the y-direction
650  IF( bc_y%beg /= dflt_real &
651  .AND. &
652  (bc_y%beg < -12 .OR. bc_y%beg > -1) ) THEN
653  print '(A)', 'Unsupported choice for the value of ' // &
654  'bc_y%beg. Exiting ...'
655  CALL s_mpi_abort()
656  ELSEIF( bc_y%end /= dflt_real &
657  .AND. &
658  (bc_y%end < -12 .OR. bc_y%end > -1) ) THEN
659  print '(A)', 'Unsupported choice for the value of ' // &
660  'bc_y%end. Exiting ...'
661  CALL s_mpi_abort()
662  ELSEIF( (n == 0 .AND. bc_y%beg /= dflt_real) &
663  .OR. &
664  (n > 0 .AND. bc_y%beg == dflt_real) ) THEN
665  print '(A)', 'Unsupported choice for the value of n and ' // &
666  'bc_y%beg. Exiting ...'
667  CALL s_mpi_abort()
668  ELSEIF( (n == 0 .AND. bc_y%end /= dflt_real) &
669  .OR. &
670  (n > 0 .AND. bc_y%end == dflt_real) ) THEN
671  print '(A)', 'Unsupported choice for the value of n and ' // &
672  'bc_y%end. Exiting ...'
673  CALL s_mpi_abort()
674  ELSEIF( n > 0 &
675  .AND. &
676  ( (bc_y%beg == -1 .AND. bc_y%end /= -1) &
677  .OR. &
678  (bc_y%end == -1 .AND. bc_y%beg /= -1) ) ) THEN
679  print '(A)', 'Unsupported choice of the combination of ' // &
680  'values for n, bc_y%beg and bc_y%end. ' // &
681  'Exiting ...'
682  CALL s_mpi_abort()
683 
684  ! Constraints on the boundary conditions in the z-direction
685  ELSEIF( bc_z%beg /= dflt_real &
686  .AND. &
687  (bc_z%beg < -12 .OR. bc_z%beg > -1) ) THEN
688  print '(A)', 'Unsupported choice for the value of ' // &
689  'bc_z%beg. Exiting ...'
690  CALL s_mpi_abort()
691  ELSEIF( bc_z%end /= dflt_real &
692  .AND. &
693  (bc_z%end < -12 .OR. bc_z%end > -1) ) THEN
694  print '(A)', 'Unsupported choice for the value of ' // &
695  'bc_z%end. Exiting ...'
696  CALL s_mpi_abort()
697  ELSEIF( (p == 0 .AND. bc_z%beg /= dflt_real) &
698  .OR. &
699  (p > 0 .AND. bc_z%beg == dflt_real) ) THEN
700  print '(A)', 'Unsupported choice for the value of p and ' // &
701  'bc_z%beg. Exiting ...'
702  CALL s_mpi_abort()
703  ELSEIF( (p == 0 .AND. bc_z%end /= dflt_real) &
704  .OR. &
705  (p > 0 .AND. bc_z%end == dflt_real) ) THEN
706  print '(A)', 'Unsupported choice for the value of p and ' // &
707  'bc_z%end. Exiting ...'
708  CALL s_mpi_abort()
709  ELSEIF( p > 0 &
710  .AND. &
711  ( (bc_z%beg == -1 .AND. bc_z%end /= -1) &
712  .OR. &
713  (bc_z%end == -1 .AND. bc_z%beg /= -1) ) ) THEN
714  print '(A)', 'Unsupported choice of the combination of ' // &
715  'values for p, bc_z%beg and bc_z%end. ' // &
716  'Exiting ...'
717  CALL s_mpi_abort()
718  END IF
719 
720  ELSE ! Cylindrical coordinates
721 
722  ! Constraints on the boundary conditions in the r-direction
723  IF( bc_y%beg /= dflt_real &
724  .AND. &
725  ( ( p > 0 .AND. bc_y%beg /= -13) &
726  .OR. &
727  ( p == 0 .AND. bc_y%beg /= -2 ) )) THEN
728  print '(A)', 'Unsupported choice for the value of ' // &
729  'bc_y%beg. Exiting ...'
730  CALL s_mpi_abort()
731  ELSEIF( bc_y%end /= dflt_real &
732  .AND. &
733  (bc_y%end < -12 .OR. bc_y%end > -1) ) THEN
734  print '(A)', 'Unsupported choice for the value of ' // &
735  'bc_y%end. Exiting ...'
736  CALL s_mpi_abort()
737  ELSEIF( (n > 0 .AND. bc_y%beg == dflt_real) ) THEN
738  print '(A)', 'Unsupported choice for the value of n and ' // &
739  'bc_y%beg. Exiting ...'
740  CALL s_mpi_abort()
741  ELSEIF( (n > 0 .AND. bc_y%end == dflt_real) ) THEN
742  print '(A)', 'Unsupported choice for the value of n and ' // &
743  'bc_y%end. Exiting ...'
744  CALL s_mpi_abort()
745 
746  ! Constraints on the boundary conditions in the theta-direction
747  ELSEIF( bc_z%beg /= dflt_real &
748  .AND. &
749  (bc_z%beg /= -1 .AND. bc_z%beg /= -2) ) THEN
750  print '(A)', 'Unsupported choice for the value of ' // &
751  'bc_z%beg. Exiting ...'
752  CALL s_mpi_abort()
753  ELSEIF( bc_z%end /= dflt_real &
754  .AND. &
755  (bc_z%end /= -1 .AND. bc_z%end /= -2) ) THEN
756  print '(A)', 'Unsupported choice for the value of ' // &
757  'bc_z%end. Exiting ...'
758  CALL s_mpi_abort()
759  ELSEIF( (p == 0 .AND. bc_z%beg /= dflt_real) &
760  .OR. &
761  (p > 0 .AND. bc_z%beg == dflt_real) ) THEN
762  print '(A)', 'Unsupported choice for the value of p and ' // &
763  'bc_z%beg. Exiting ...'
764  CALL s_mpi_abort()
765  ELSEIF( (p == 0 .AND. bc_z%end /= dflt_real) &
766  .OR. &
767  (p > 0 .AND. bc_z%end == dflt_real) ) THEN
768  print '(A)', 'Unsupported choice for the value of p and ' // &
769  'bc_z%end. Exiting ...'
770  CALL s_mpi_abort()
771  ELSEIF( p > 0 &
772  .AND. &
773  ( (bc_z%beg == -1 .AND. bc_z%end /= -1) &
774  .OR. &
775  (bc_z%end == -1 .AND. bc_z%beg /= -1) ) ) THEN
776  print '(A)', 'Unsupported choice of the combination of ' // &
777  'values for p, bc_z%beg and bc_z%end. ' // &
778  'Exiting ...'
779  CALL s_mpi_abort()
780  END IF
781 
782  END IF
783 
784  ! Constraints on number of patches making up the initial condition
785  IF( num_patches < 0 .OR. num_patches > num_patches_max .OR. &
786  (num_patches == 0 .AND. t_step_old == dflt_int)) THEN
787  print '(A)', 'Unsupported choice for the value of ' // &
788  'num_patches. Exiting ...'
789  CALL s_mpi_abort()
790  ! Constraints on perturbing the initial condition
791  ELSEIF ((perturb_flow .AND. perturb_flow_fluid == dflt_int) &
792  .OR. &
793  ((perturb_flow .NEQV. .true.) .AND. (perturb_flow_fluid /= dflt_int))) THEN
794  print '(A)', 'Unsupported choice of the combination of ' // &
795  'values for perturb_flow and perturb_flow_fluid. ' // &
796  'Exiting ...'
797  CALL s_mpi_abort()
798  ELSEIF ( (perturb_flow_fluid > num_fluids) &
799  .OR. &
800  (perturb_flow_fluid < 0 .AND. perturb_flow_fluid /= dflt_int)) THEN
801  print '(A)', 'Unsupported choice for the value of ' //&
802  'perturb_flow_fluid. Exiting ...'
803  CALL s_mpi_abort()
804  ELSEIF ((perturb_sph .AND. perturb_sph_fluid == dflt_int) &
805  .OR. &
806  ((perturb_sph .NEQV. .true.) .AND. (perturb_sph_fluid /= dflt_int))) THEN
807  print '(A)', 'Unsupported choice of the combination of ' // &
808  'values for perturb_sph and perturb_sph_fluid. ' // &
809  'Exiting ...'
810  CALL s_mpi_abort()
811  ELSEIF ( (perturb_sph_fluid > num_fluids) &
812  .OR. &
813  (perturb_sph_fluid < 0 .AND. perturb_sph_fluid /= dflt_int)) THEN
814  print '(A)', 'Unsupported choice for the value of ' //&
815  'perturb_sph_fluid. Exiting ...'
816  CALL s_mpi_abort()
817  ELSEIF( (any(fluid_rho /= dflt_real)) .AND. (perturb_sph .NEQV. .true.)) THEN
818  print '(A)', 'Unsupported choices for values of perturb_sph ' //&
819  'and fluid_rho. Exiting ...'
820  CALL s_mpi_abort()
821  END IF
822 
823  IF (perturb_sph) THEN
824  DO i = 1, num_fluids
825  IF (fluid_rho(i) == dflt_real) THEN
826  print '(A,I0,A)', 'Unsupported choice for value of fluid_rho(', &
827  i, '). Exiting ...'
828  CALL s_mpi_abort()
829  END IF
830  END DO
831  END IF
832 
833 
834  ! Constraints on the geometric initial condition patch parameters
835  DO i = 1, num_patches_max
836  IF(i <= num_patches) THEN
837  IF(patch_icpp(i)%geometry == 1) THEN
839  ELSEIF(patch_icpp(i)%geometry == 2) THEN
841  ELSEIF(patch_icpp(i)%geometry == 3) THEN
843  ELSEIF(patch_icpp(i)%geometry == 4) THEN
845  ELSEIF(patch_icpp(i)%geometry == 5) THEN
847  ELSEIF(patch_icpp(i)%geometry == 6) THEN
849  ELSEIF(patch_icpp(i)%geometry == 7) THEN
851  ELSEIF(patch_icpp(i)%geometry == 8) THEN
853  ELSEIF(patch_icpp(i)%geometry == 9) THEN
855  ELSEIF(patch_icpp(i)%geometry == 10) THEN
857  ELSEIF(patch_icpp(i)%geometry == 11) THEN
859  ELSEIF(patch_icpp(i)%geometry == 12) THEN
861  ELSEIF(patch_icpp(i)%geometry == 13) THEN
863  ELSEIF(patch_icpp(i)%geometry == 14) THEN
865  ELSEIF(patch_icpp(i)%geometry == 15) THEN
867  ELSEIF(patch_icpp(i)%geometry == 16) THEN
868  print*, '1d pressure sinusoid'
869  ELSEIF(patch_icpp(i)%geometry == 17) THEN
870  print*, '2d spiral'
871  ELSEIF(patch_icpp(i)%geometry == 18) THEN
872  print*, '2d var circle'
873  ELSEIF(patch_icpp(i)%geometry == 19) THEN
874  print*, '3d var circle'
875  ELSE
876  print '(A,I0,A)', 'Unsupported choice of the ' // &
877  'geometry of active patch ',i, &
878  ' detected. Exiting ...'
879  CALL s_mpi_abort()
880  END IF
881  ELSE
882  IF(patch_icpp(i)%geometry == dflt_int) THEN
884  ELSE
885  print '(A,I0,A)', 'Unsupported choice of the ' // &
886  'geometry of inactive patch ',i, &
887  ' detected. Exiting ...'
888  CALL s_mpi_abort()
889  END IF
890  END IF
891  END DO
892 
893 
894  ! Constraints on overwrite rights initial condition patch parameters
895  DO i = 1, num_patches_max
896  IF(i <= num_patches) THEN
898  ELSE
900  END IF
901  END DO
902 
903 
904  ! Constraints on smoothing initial condition patch parameters
905  DO i = 1, num_patches_max
906  IF( i > 1 .AND. ( patch_icpp(i)%geometry == 2 .OR. &
907  patch_icpp(i)%geometry == 4 .OR. &
908  patch_icpp(i)%geometry == 5 .OR. &
909  patch_icpp(i)%geometry == 8 .OR. &
910  patch_icpp(i)%geometry == 10 .OR. &
911  patch_icpp(i)%geometry == 11 .OR. &
912  patch_icpp(i)%geometry == 12 ) ) THEN
914  ELSE
916  END IF
917  END DO
918 
919 
920  ! Constraints on flow variables initial condition patch parameters
921  DO i = 1, num_patches_max
922  IF(i <= num_patches) THEN
924  ELSE
926  END IF
927  END DO
928 
929 
930  ! Constraints on the stiffened equation of state fluids parameters
931  DO i = 1, num_fluids_max
932 
933  IF( fluid_pp(i)%gamma /= dflt_real &
934  .AND. &
935  fluid_pp(i)%gamma <= 0d0 ) THEN
936  print '(A,I0,A)', 'Unsupported value of ' // &
937  'fluid_pp(',i,')%' // &
938  'gamma. Exiting ...'
939  CALL s_mpi_abort()
940  ELSEIF( model_eqns == 1 &
941  .AND. &
942  fluid_pp(i)%gamma /= dflt_real ) THEN
943  print '(A,I0,A)', 'Unsupported combination ' // &
944  'of values of model_eqns ' // &
945  'and fluid_pp(',i,')%' // &
946  'gamma. Exiting ...'
947  CALL s_mpi_abort()
948  ELSEIF((i <= num_fluids+bub_fac .AND. fluid_pp(i)%gamma <= 0d0 ) &
949  .OR. &
950  (i > num_fluids+bub_fac .AND. fluid_pp(i)%gamma /= dflt_real)) &
951  THEN
952  print '(A,I0,A)', 'Unsupported combination ' // &
953  'of values of num_fluids ' // &
954  'and fluid_pp(',i,')%' // &
955  'gamma. Exiting ...'
956  CALL s_mpi_abort()
957  ELSEIF( fluid_pp(i)%pi_inf /= dflt_real &
958  .AND. &
959  fluid_pp(i)%pi_inf < 0d0 ) THEN
960  print '(A,I0,A)', 'Unsupported value of ' // &
961  'fluid_pp(',i,')%' // &
962  'pi_inf. Exiting ...'
963  CALL s_mpi_abort()
964  ELSEIF( model_eqns == 1 &
965  .AND. &
966  fluid_pp(i)%pi_inf /= dflt_real ) THEN
967  print '(A,I0,A)', 'Unsupported combination ' // &
968  'of values of model_eqns ' // &
969  'and fluid_pp(',i,')%' // &
970  'pi_inf. Exiting ...'
971  CALL s_mpi_abort()
972  ELSEIF((i <= num_fluids+bub_fac .AND. fluid_pp(i)%pi_inf < 0d0 ) &
973  .OR. &
974  (i > num_fluids+bub_fac .AND. fluid_pp(i)%pi_inf /= dflt_real))&
975  THEN
976  print '(A,I0,A)', 'Unsupported combination ' // &
977  'of values of num_fluids ' // &
978  'and fluid_pp(',i,')%' // &
979  'pi_inf. Exiting ...'
980  CALL s_mpi_abort()
981  END IF
982 
983  END DO
984 
985 
986  END SUBROUTINE s_check_input_file ! ------------------------------------
987 
988 
989 
994  SUBROUTINE s_check_line_segment_patch_geometry(patch_id) ! -------------
996  INTEGER, INTENT(IN) :: patch_id
997 
998  ! Constraints on the geometric parameters of the line segment patch
999  IF(n > 0 .OR. patch_icpp(patch_id)%length_x <= 0d0 &
1000  .OR. &
1001  patch_icpp(patch_id)%x_centroid == dflt_real &
1002  .OR. &
1003  cyl_coord ) THEN
1004 
1005  print '(A,I0,A)', 'Inconsistency(ies) detected in ' // &
1006  'geometric parameters of line segment ' // &
1007  'patch ',patch_id,'. Exiting ...'
1008  CALL s_mpi_abort()
1009 
1010  END IF
1011 
1012 
1013  END SUBROUTINE s_check_line_segment_patch_geometry ! -------------------
1014 
1015 
1016 
1021  SUBROUTINE s_check_circle_patch_geometry(patch_id) ! -------------------
1023  INTEGER, INTENT(IN) :: patch_id
1024 
1025  ! Constraints on the geometric parameters of the circle patch
1026  IF(n == 0 .OR. p > 0 .OR. patch_icpp(patch_id)%radius <= 0d0 &
1027  .OR. &
1028  patch_icpp(patch_id)%x_centroid == dflt_real &
1029  .OR. &
1030  patch_icpp(patch_id)%y_centroid == dflt_real) THEN
1031 
1032  print '(A,I0,A)', 'Inconsistency(ies) detected in ' // &
1033  'geometric parameters of circle ' // &
1034  'patch ',patch_id,'. Exiting ...'
1035  CALL s_mpi_abort()
1036 
1037  END IF
1038 
1039 
1040  END SUBROUTINE s_check_circle_patch_geometry ! -------------------------
1041 
1042 
1043 
1048  SUBROUTINE s_check_rectangle_patch_geometry(patch_id) ! ----------------
1050  INTEGER, INTENT(IN) :: patch_id
1051 
1052 
1053  ! Constraints on the geometric parameters of the rectangle patch
1054  IF( n == 0 .OR. p > 0 &
1055  .OR. &
1056  patch_icpp(patch_id)%x_centroid == dflt_real &
1057  .OR. &
1058  patch_icpp(patch_id)%y_centroid == dflt_real &
1059  .OR. &
1060  patch_icpp(patch_id)%length_x <= 0d0 &
1061  .OR. &
1062  patch_icpp(patch_id)%length_y <= 0d0 ) THEN
1063 
1064  print '(A,I0,A)', 'Inconsistency(ies) detected in ' // &
1065  'geometric parameters of rectangle ' // &
1066  'patch ',patch_id,'. Exiting ...'
1067  CALL s_mpi_abort()
1068 
1069  END IF
1070 
1071 
1072  END SUBROUTINE s_check_rectangle_patch_geometry ! ----------------------
1073 
1074 
1075 
1076 
1081  SUBROUTINE s_check_line_sweep_patch_geometry(patch_id) ! ---------------
1083  INTEGER, INTENT(IN) :: patch_id
1084 
1085  ! Constraints on the geometric parameters of the line sweep patch
1086  IF( n == 0 .OR. p > 0 &
1087  .OR. &
1088  patch_icpp(patch_id)%x_centroid == dflt_real &
1089  .OR. &
1090  patch_icpp(patch_id)%y_centroid == dflt_real &
1091  .OR. &
1092  patch_icpp(patch_id)%normal(1) == dflt_real &
1093  .OR. &
1094  patch_icpp(patch_id)%normal(2) == dflt_real &
1095  .OR. &
1096  patch_icpp(patch_id)%normal(3) /= dflt_real ) THEN
1097 
1098  print '(A,I0,A)', 'Inconsistency(ies) detected in ' // &
1099  'geometric parameters of line sweep ' // &
1100  'patch ',patch_id,'. Exiting ...'
1101  CALL s_mpi_abort()
1102 
1103  END IF
1104 
1105 
1106  END SUBROUTINE s_check_line_sweep_patch_geometry ! ---------------------
1107 
1108 
1109 
1114  SUBROUTINE s_check_ellipse_patch_geometry(patch_id) ! ------------------
1116  INTEGER, INTENT(IN) :: patch_id
1117 
1118  ! Constraints on the geometric parameters of the ellipse patch
1119  IF( n == 0 .OR. p > 0 &
1120  .OR. &
1121  patch_icpp(patch_id)%x_centroid == dflt_real &
1122  .OR. &
1123  patch_icpp(patch_id)%y_centroid == dflt_real &
1124  .OR. &
1125  patch_icpp(patch_id)%radii(1) == dflt_real &
1126  .OR. &
1127  patch_icpp(patch_id)%radii(2) == dflt_real &
1128  .OR. &
1129  patch_icpp(patch_id)%radii(3) /= dflt_real ) THEN
1130 
1131  print '(A,I0,A)', 'Inconsistency(ies) detected in ' // &
1132  'geometric parameters of ellipse ' // &
1133  'patch ',patch_id,'. Exiting ...'
1134  CALL s_mpi_abort()
1135 
1136  END IF
1137 
1138 
1139  END SUBROUTINE s_check_ellipse_patch_geometry ! ------------------------
1140 
1141 
1142 
1143 
1148  SUBROUTINE s_check_isentropic_vortex_patch_geometry(patch_id) ! --------
1150 
1151  INTEGER, INTENT(IN) :: patch_id
1152 
1153 
1154  ! Constraints on the isentropic vortex patch geometric parameters
1155  IF( n == 0 .OR. p > 0 .OR. model_eqns == 2 &
1156  .OR. &
1157  patch_icpp(patch_id)%radius <= 0d0 &
1158  .OR. &
1159  patch_icpp(patch_id)%epsilon <= 0d0 &
1160  .OR. &
1161  patch_icpp(patch_id)%beta <= 0d0 ) THEN
1162 
1163  print '(A,I0,A)', 'Inconsistency(ies) detected in ' // &
1164  'geometric parameters of isentropic ' // &
1165  'vortex patch ',patch_id,'. Exiting ...'
1166  CALL s_mpi_abort()
1167 
1168  END IF
1169 
1170 
1171  END SUBROUTINE s_check_isentropic_vortex_patch_geometry ! --------------
1172 
1177  SUBROUTINE s_check_1d_analytical_patch_geometry(patch_id) ! ---------------
1179  INTEGER, INTENT(IN) :: patch_id
1180 
1181  ! Constraints on the geometric parameters of the analytical patch
1182  IF( n > 0 .OR. p > 0 &
1183  .OR. &
1184  (model_eqns .ne. 4 .AND. model_eqns .ne. 2) &
1185  .OR. &
1186  patch_icpp(patch_id)%x_centroid == dflt_real &
1187  .OR. &
1188  patch_icpp(patch_id)%length_x <= 0d0 ) THEN
1189 
1190  print '(A,I0,A)', 'Inconsistency(ies) detected in ' // &
1191  'geometric parameters of 1D analytical ' // &
1192  'patch ',patch_id,'. Exiting...'
1193  CALL s_mpi_abort()
1194  END IF
1195  END SUBROUTINE s_check_1d_analytical_patch_geometry ! ---------------------
1196 
1201  SUBROUTINE s_check_2d_analytical_patch_geometry(patch_id) ! ---------------
1203  INTEGER, INTENT(IN) :: patch_id
1204 
1205  ! Constraints on the geometric parameters of the analytical patch
1206  IF( n == 0 .OR. p > 0 &
1207  .OR. &
1208  patch_icpp(patch_id)%x_centroid == dflt_real &
1209  .OR. &
1210  patch_icpp(patch_id)%y_centroid == dflt_real &
1211  .OR. &
1212  patch_icpp(patch_id)%length_x <= 0d0 &
1213  .OR. &
1214  patch_icpp(patch_id)%length_y <= 0d0 ) THEN
1215 
1216  print '(A,I0,A)', 'Inconsistency(ies) detected in ' // &
1217  'geometric parameters of 2D analytical ' // &
1218  'patch ',patch_id,'. Exiting...'
1219  CALL s_mpi_abort()
1220  END IF
1221  END SUBROUTINE s_check_2d_analytical_patch_geometry ! ---------------------
1222 
1223 
1224 
1229  SUBROUTINE s_check_3d_analytical_patch_geometry(patch_id) ! ---------------
1231  INTEGER, INTENT(IN) :: patch_id
1232 
1233  ! Constraints on the geometric parameters of the analytical patch
1234  IF( p == 0 &
1235  .OR. &
1236  patch_icpp(patch_id)%x_centroid == dflt_real &
1237  .OR. &
1238  patch_icpp(patch_id)%y_centroid == dflt_real &
1239  .OR. &
1240  patch_icpp(patch_id)%z_centroid == dflt_real &
1241  .OR. &
1242  patch_icpp(patch_id)%length_x <= 0d0 &
1243  .OR. &
1244  patch_icpp(patch_id)%length_y <= 0d0 &
1245  .OR. &
1246  patch_icpp(patch_id)%length_z <= 0d0 ) THEN
1247 
1248  print '(A,I0,A)', 'Inconsistency(ies) detected in ' // &
1249  'geometric parameters of 3D analytical ' // &
1250  'patch ',patch_id,'. Exiting...'
1251  CALL s_mpi_abort()
1252  END IF
1253  END SUBROUTINE s_check_3d_analytical_patch_geometry ! ---------------------
1254 
1255 
1256 
1257 
1262  SUBROUTINE s_check_sphere_patch_geometry(patch_id) ! -------------------
1264  INTEGER, INTENT(IN) :: patch_id
1265 
1266  ! Constraints on the geometric parameters of the sphere patch
1267  IF( p == 0 &
1268  .OR. &
1269  patch_icpp(patch_id)%radius <= 0d0 &
1270  .OR. &
1271  patch_icpp(patch_id)%x_centroid == dflt_real &
1272  .OR. &
1273  patch_icpp(patch_id)%y_centroid == dflt_real &
1274  .OR. &
1275  patch_icpp(patch_id)%z_centroid == dflt_real ) THEN
1276 
1277  print '(A,I0,A)', 'Inconsistency(ies) detected in ' // &
1278  'geometric parameters of sphere ' // &
1279  'patch ',patch_id,'. Exiting ...'
1280  CALL s_mpi_abort()
1281 
1282  END IF
1283 
1284 
1285  END SUBROUTINE s_check_sphere_patch_geometry ! -------------------------
1286 
1287 
1288 
1293  SUBROUTINE s_check_spherical_harmonic_patch_geometry(patch_id) ! -------
1295  INTEGER, INTENT(IN) :: patch_id
1296 
1297 
1298  ! Constraints on the geometric parameters of the spherical harmonic patch
1299  IF( p == 0 &
1300  .OR. &
1301  patch_icpp(patch_id)%radius <= 0d0 &
1302  .OR. &
1303  patch_icpp(patch_id)%x_centroid == dflt_real &
1304  .OR. &
1305  patch_icpp(patch_id)%y_centroid == dflt_real &
1306  .OR. &
1307  patch_icpp(patch_id)%z_centroid == dflt_real &
1308  .OR. &
1309  all(patch_icpp(patch_id)%epsilon /= (/1d0,2d0,3d0,4d0,5d0/)) &
1310  .OR. &
1311  patch_icpp(patch_id)%beta < 0d0 &
1312  .OR. &
1313  patch_icpp(patch_id)%beta > patch_icpp(patch_id)%epsilon) THEN
1314 
1315  print '(A,I0,A)', 'Inconsistency(ies) detected in ' // &
1316  'geometric parameters of spherical ' // &
1317  'harmonic patch ',patch_id,'. Exiting ...'
1318  CALL s_mpi_abort()
1319 
1320  END IF
1321 
1322 
1323  END SUBROUTINE s_check_spherical_harmonic_patch_geometry ! -------------
1324 
1325 
1326 
1327 
1332  SUBROUTINE s_check_cuboid_patch_geometry(patch_id) ! -------------------
1334 
1335  ! Patch identifier
1336  INTEGER, INTENT(IN) :: patch_id
1337 
1338 
1339  ! Constraints on the geometric parameters of the cuboid patch
1340  IF( p == 0 &
1341  .OR. &
1342  patch_icpp(patch_id)%x_centroid == dflt_real &
1343  .OR. &
1344  patch_icpp(patch_id)%y_centroid == dflt_real &
1345  .OR. &
1346  patch_icpp(patch_id)%z_centroid == dflt_real &
1347  .OR. &
1348  patch_icpp(patch_id)%length_x <= 0d0 &
1349  .OR. &
1350  patch_icpp(patch_id)%length_y <= 0d0 &
1351  .OR. &
1352  patch_icpp(patch_id)%length_z <= 0d0 ) THEN
1353 
1354  print '(A,I0,A)', 'Inconsistency(ies) detected in ' // &
1355  'geometric parameters of cuboid ' // &
1356  'patch ',patch_id,'. Exiting ...'
1357  CALL s_mpi_abort()
1358 
1359  END IF
1360 
1361 
1362  END SUBROUTINE s_check_cuboid_patch_geometry ! -------------------------
1363 
1364 
1365 
1366 
1371  SUBROUTINE s_check_cylinder_patch_geometry(patch_id) ! -----------------
1373 
1374 
1375  ! Patch identifier
1376  INTEGER, INTENT(IN) :: patch_id
1377 
1378 
1379  ! Constraints on the geometric parameters of the cylinder patch
1380  IF( p == 0 &
1381  .OR. &
1382  patch_icpp(patch_id)%x_centroid == dflt_real &
1383  .OR. &
1384  patch_icpp(patch_id)%y_centroid == dflt_real &
1385  .OR. &
1386  patch_icpp(patch_id)%z_centroid == dflt_real &
1387  .OR. &
1388  ( patch_icpp(patch_id)%length_x <= 0d0 .AND. &
1389  patch_icpp(patch_id)%length_y <= 0d0 .AND. &
1390  patch_icpp(patch_id)%length_z <= 0d0 ) &
1391  .OR. &
1392  ( patch_icpp(patch_id)%length_x > 0d0 .AND. &
1393  ( patch_icpp(patch_id)%length_y /= dflt_real .OR. &
1394  patch_icpp(patch_id)%length_z /= dflt_real ) ) &
1395  .OR. &
1396  ( patch_icpp(patch_id)%length_y > 0d0 .AND. &
1397  ( patch_icpp(patch_id)%length_x /= dflt_real .OR. &
1398  patch_icpp(patch_id)%length_z /= dflt_real ) ) &
1399  .OR. &
1400  ( patch_icpp(patch_id)%length_z > 0d0 .AND. &
1401  ( patch_icpp(patch_id)%length_x /= dflt_real .OR. &
1402  patch_icpp(patch_id)%length_y /= dflt_real ) ) &
1403  .OR. &
1404  patch_icpp(patch_id)%radius <= 0d0 ) THEN
1405 
1406  print '(A,I0,A)', 'Inconsistency(ies) detected in ' // &
1407  'geometric parameters of cylinder ' // &
1408  'patch ',patch_id,'. Exiting ...'
1409  CALL s_mpi_abort()
1410 
1411  END IF
1412 
1413 
1414  END SUBROUTINE s_check_cylinder_patch_geometry ! -----------------------
1415 
1416 
1417 
1418 
1423  SUBROUTINE s_check_plane_sweep_patch_geometry(patch_id) ! --------------
1425 
1426  ! Patch identifier
1427  INTEGER, INTENT(IN) :: patch_id
1428 
1429 
1430  ! Constraints on the geometric parameters of the plane sweep patch
1431  IF( p == 0 &
1432  .OR. &
1433  patch_icpp(patch_id)%x_centroid == dflt_real &
1434  .OR. &
1435  patch_icpp(patch_id)%y_centroid == dflt_real &
1436  .OR. &
1437  patch_icpp(patch_id)%z_centroid == dflt_real &
1438  .OR. &
1439  patch_icpp(patch_id)%normal(1) == dflt_real &
1440  .OR. &
1441  patch_icpp(patch_id)%normal(2) == dflt_real &
1442  .OR. &
1443  patch_icpp(patch_id)%normal(3) == dflt_real ) THEN
1444 
1445  print '(A,I0,A)', 'Inconsistency(ies) detected in ' // &
1446  'geometric parameters of plane sweep ' // &
1447  'patch ',patch_id,'. Exiting ...'
1448  CALL s_mpi_abort()
1449 
1450  END IF
1451 
1452 
1453  END SUBROUTINE s_check_plane_sweep_patch_geometry ! --------------------
1454 
1455 
1456 
1461  SUBROUTINE s_check_ellipsoid_patch_geometry(patch_id) ! ----------------
1463  INTEGER, INTENT(IN) :: patch_id
1464 
1465 
1466  ! Constraints on the geometric parameters of the ellipsoid patch
1467  IF( p == 0 &
1468  .OR. &
1469  patch_icpp(patch_id)%x_centroid == dflt_real &
1470  .OR. &
1471  patch_icpp(patch_id)%y_centroid == dflt_real &
1472  .OR. &
1473  patch_icpp(patch_id)%z_centroid == dflt_real &
1474  .OR. &
1475  patch_icpp(patch_id)%radii(1) == dflt_real &
1476  .OR. &
1477  patch_icpp(patch_id)%radii(2) == dflt_real &
1478  .OR. &
1479  patch_icpp(patch_id)%radii(3) == dflt_real ) THEN
1480 
1481  print '(A,I0,A)', 'Inconsistency(ies) detected in ' // &
1482  'geometric parameters of ellipsoid ' // &
1483  'patch ',patch_id,'. Exiting ...'
1484  CALL s_mpi_abort()
1485 
1486  END IF
1487 
1488 
1489  END SUBROUTINE s_check_ellipsoid_patch_geometry ! ----------------------
1490 
1491 
1492 
1496  SUBROUTINE s_check_inactive_patch_geometry(patch_id) ! -----------------
1498  INTEGER, INTENT(IN) :: patch_id
1499 
1500 
1501  ! Constraints on the geometric parameters of the inactive patch
1502  IF( patch_icpp(patch_id)%x_centroid /= dflt_real &
1503  .OR. &
1504  patch_icpp(patch_id)%y_centroid /= dflt_real &
1505  .OR. &
1506  patch_icpp(patch_id)%z_centroid /= dflt_real &
1507  .OR. &
1508  patch_icpp(patch_id)%length_x /= dflt_real &
1509  .OR. &
1510  patch_icpp(patch_id)%length_y /= dflt_real &
1511  .OR. &
1512  patch_icpp(patch_id)%length_z /= dflt_real &
1513  .OR. &
1514  patch_icpp(patch_id)%radius /= dflt_real &
1515  .OR. &
1516  patch_icpp(patch_id)%epsilon /= dflt_real &
1517  .OR. &
1518  patch_icpp(patch_id)%beta /= dflt_real &
1519  .OR. &
1520  patch_icpp(patch_id)%normal(1) /= dflt_real &
1521  .OR. &
1522  patch_icpp(patch_id)%normal(2) /= dflt_real &
1523  .OR. &
1524  patch_icpp(patch_id)%normal(3) /= dflt_real &
1525  .OR. &
1526  patch_icpp(patch_id)%radii(1) /= dflt_real &
1527  .OR. &
1528  patch_icpp(patch_id)%radii(2) /= dflt_real &
1529  .OR. &
1530  patch_icpp(patch_id)%radii(3) /= dflt_real ) THEN
1531 
1532  print '(A,I0,A)', 'Inconsistency(ies) detected in ' // &
1533  'geometric parameters of inactive ' // &
1534  'patch ',patch_id,'. Exiting ...'
1535  CALL s_mpi_abort()
1536 
1537  END IF
1538 
1539 
1540  END SUBROUTINE s_check_inactive_patch_geometry ! -----------------------
1541 
1542 
1547  SUBROUTINE s_check_active_patch_alteration_rights(patch_id) ! ----------
1549  INTEGER, INTENT(IN) :: patch_id
1550 
1551 
1552  ! Constraints on the alteration rights of an active patch
1553  IF( patch_icpp(patch_id)%alter_patch(0) .EQV. .false. &
1554  .OR. &
1555  any(patch_icpp(patch_id)%alter_patch(patch_id:)) ) THEN
1556 
1557  print '(A,I0,A)', 'Inconsistency(ies) detected in ' // &
1558  'alteration rights of active ' // &
1559  'patch ',patch_id,'. Exiting ...'
1560  CALL s_mpi_abort()
1561 
1562  END IF
1563 
1564 
1565  END SUBROUTINE s_check_active_patch_alteration_rights ! ----------------
1566 
1567 
1568 
1573  SUBROUTINE s_check_inactive_patch_alteration_rights(patch_id) ! --------
1575 
1576 
1577  ! Patch identifier
1578  INTEGER, INTENT(IN) :: patch_id
1579 
1580 
1581  ! Constraints on the alteration rights of an inactive patch
1582  IF( patch_icpp(patch_id)%alter_patch(0) .EQV. .false. &
1583  .OR. &
1584  any(patch_icpp(patch_id)%alter_patch(1:)) ) THEN
1585 
1586  print '(A,I0,A)', 'Inconsistency(ies) detected in ' // &
1587  'alteration rights of inactive ' // &
1588  'patch ',patch_id,'. Exiting ...'
1589  CALL s_mpi_abort()
1590 
1591  END IF
1592 
1593 
1594  END SUBROUTINE s_check_inactive_patch_alteration_rights ! --------------
1595 
1596 
1601  SUBROUTINE s_check_supported_patch_smoothing(patch_id) ! ---------------
1603  INTEGER, INTENT(IN) :: patch_id
1604 
1605 
1606  ! Constraints on the smoothing parameters of a supported patch
1607  IF( ( patch_icpp(patch_id)%smoothen &
1608  .AND. &
1609  ( patch_icpp(patch_id)%smooth_patch_id >= patch_id &
1610  .OR. &
1611  patch_icpp(patch_id)%smooth_patch_id == 0 &
1612  .OR. &
1613  patch_icpp(patch_id)%smooth_coeff <= 0d0 ) ) &
1614  .OR. &
1615  ( (patch_icpp(patch_id)%smoothen .NEQV. .true.) &
1616  .AND. &
1617  ( patch_icpp(patch_id)%smooth_patch_id /= patch_id &
1618  .OR. &
1619  patch_icpp(patch_id)%smooth_coeff /= dflt_real ) ) ) THEN
1620 
1621  print '(A,I0,A)', 'Inconsistency(ies) detected in ' // &
1622  'smoothing parameters of supported ' // &
1623  'patch ',patch_id,'. Exiting ...'
1624  CALL s_mpi_abort()
1625 
1626  END IF
1627 
1628 
1629  END SUBROUTINE s_check_supported_patch_smoothing ! ---------------------
1630 
1631 
1632 
1637  SUBROUTINE s_check_unsupported_patch_smoothing(patch_id) ! -------------
1639 
1640  ! Patch identifier
1641  INTEGER, INTENT(IN) :: patch_id
1642 
1643 
1644  ! Constraints on the smoothing parameters of an unsupported patch
1645  IF( patch_icpp(patch_id)%smoothen &
1646  .OR. &
1647  patch_icpp(patch_id)%smooth_patch_id /= patch_id &
1648  .OR. &
1649  patch_icpp(patch_id)%smooth_coeff /= dflt_real ) THEN
1650 
1651  print '(A,I0,A)', 'Inconsistency(ies) detected in ' // &
1652  'smoothing parameters of unsupported ' // &
1653  'patch ',patch_id,'. Exiting ...'
1654  CALL s_mpi_abort()
1655 
1656  END IF
1657 
1658 
1659  END SUBROUTINE s_check_unsupported_patch_smoothing ! -------------------
1660 
1661 
1662 
1667  SUBROUTINE s_check_active_patch_primitive_variables(patch_id) ! --------
1669  INTEGER, INTENT(IN) :: patch_id
1670 
1671 
1672  ! Constraints on the primitive variables of an active patch
1673  IF( patch_icpp(patch_id)%vel(1) == dflt_real &
1674  .OR. &
1675  (n == 0 .AND. patch_icpp(patch_id)%vel(2) /= dflt_real) &
1676  .OR. &
1677  (n > 0 .AND. patch_icpp(patch_id)%vel(2) == dflt_real) &
1678  .OR. &
1679  (p == 0 .AND. patch_icpp(patch_id)%vel(3) /= dflt_real) &
1680  .OR. &
1681  (p > 0 .AND. patch_icpp(patch_id)%vel(3) == dflt_real) &
1682  ! .OR. &
1683  ! patch_icpp(patch_id)%pres <= 0d0 &
1684  .OR. &
1685  ( model_eqns == 1 .AND. &
1686  ( patch_icpp(patch_id)%rho <= 0d0 .OR. &
1687  patch_icpp(patch_id)%gamma <= 0d0 .OR. &
1688  patch_icpp(patch_id)%pi_inf < 0d0 ) ) &
1689  .OR. &
1690  ( patch_icpp(patch_id)%geometry == 5 &
1691  .AND. &
1692  patch_icpp(patch_id)%pi_inf > 0 ) &
1693  .OR. &
1694  ( model_eqns == 2 &
1695  .AND. &
1696  (any(patch_icpp(patch_id)%alpha_rho(1:num_fluids) < 0d0) &
1697  ! .OR. &
1698  !ANY(patch_icpp(patch_id)%alpha(1: adv_idx%end &
1699  ! - E_idx ) < 0d0) &
1700  ! .OR. &
1701  !SUM(patch_icpp(patch_id)%alpha(1: adv_idx%end &
1702  ! - E_idx ))> 1d0)
1703  ))) THEN
1704 
1705  print '(A,I0,A)', 'Inconsistency(ies) detected in ' // &
1706  'primitive variables of active ' // &
1707  'patch ',patch_id,'. Exiting ...'
1708  CALL s_mpi_abort()
1709 
1710  END IF
1711 
1712  IF(model_eqns == 2 .AND. num_fluids < num_fluids_max) THEN
1713 
1714  IF( any( patch_icpp(patch_id)%alpha_rho(num_fluids+1:) &
1715  /= dflt_real ) &
1716  .OR. &
1717  any( patch_icpp(patch_id)%alpha(num_fluids+1:) &
1718  /= dflt_real ) &
1719  .OR. &
1720  ( (adv_alphan .NEQV. .true.) &
1721  .AND. &
1722  patch_icpp(patch_id)%alpha(num_fluids) /= dflt_real) &
1723  .OR. &
1724  ( adv_alphan &
1725  .AND. &
1726  patch_icpp(patch_id)%alpha(num_fluids) == dflt_real) ) THEN
1727 
1728  print '(A,I0,A)', 'Inconsistency(ies) detected in ' // &
1729  'primitive variables of active ' // &
1730  'patch ',patch_id,'. Exiting ...'
1731  !CALL s_mpi_abort()
1732 
1733  END IF
1734 
1735  END IF
1736 
1737 
1738  END SUBROUTINE s_check_active_patch_primitive_variables ! --------------
1739 
1740 
1741 
1742 
1747  SUBROUTINE s_check_inactive_patch_primitive_variables(patch_id) ! ------
1749  INTEGER, INTENT(IN) :: patch_id
1750 
1751 
1752  ! Constraints on the primitive variables of an inactive patch
1753  IF( any(patch_icpp(patch_id)%alpha_rho /= dflt_real) &
1754  .OR. &
1755  patch_icpp(patch_id)%rho /= dflt_real &
1756  .OR. &
1757  any(patch_icpp(patch_id)%vel /= dflt_real) &
1758  .OR. &
1759  patch_icpp(patch_id)%pres /= dflt_real &
1760  .OR. &
1761  any(patch_icpp(patch_id)%alpha /= dflt_real) &
1762  .OR. &
1763  patch_icpp(patch_id)%gamma /= dflt_real &
1764  .OR. &
1765  patch_icpp(patch_id)%pi_inf /= dflt_real ) THEN
1766 
1767  print '(A,I0,A)', 'Inconsistency(ies) detected in ' // &
1768  'primitive variables of inactive ' // &
1769  'patch ',patch_id,'. Exiting ...'
1770  CALL s_mpi_abort()
1771 
1772  END IF
1773 
1774 
1775  END SUBROUTINE s_check_inactive_patch_primitive_variables ! ------------
1776 
1777 
1778 
1783  SUBROUTINE s_read_serial_grid_data_files(dflt_int) ! ---
1785 
1786  INTEGER, INTENT(IN) :: dflt_int
1787 
1788  ! Generic string used to store the address of a particular file
1789  CHARACTER(LEN = LEN_TRIM(case_dir) + 3*name_len) :: file_loc
1790 
1791  ! Logical variable used to test the existence of folders
1792  LOGICAL :: dir_check
1793 
1794  ! Generic logical used for the purpose of asserting whether a file
1795  ! is or is not present in the designated location
1796  LOGICAL :: file_check
1797 
1798  ! Setting address of the local processor rank and time-step directory
1799  WRITE(proc_rank_dir, '(A,I0)') '/p', proc_rank
1800  proc_rank_dir = trim(case_dir) // trim(proc_rank_dir)
1801 
1802  WRITE(t_step_dir, '(A,I0)') '/', t_step_old
1803  t_step_dir = trim(proc_rank_dir) // trim(t_step_dir)
1804 
1805 
1806  ! Inquiring as to the existence of the time-step directory
1807  file_loc = trim(t_step_dir) // '/.'
1808  CALL my_inquire(file_loc,dir_check)
1809 
1810  ! If the time-step directory is missing, the pre-process exits
1811  IF(dir_check .NEQV. .true.) THEN
1812  print '(A)', 'Time-step folder ' // trim(t_step_dir) // &
1813  ' is missing. Exiting ...'
1814  CALL s_mpi_abort()
1815  END IF
1816 
1817 
1818  ! Reading the Grid Data File for the x-direction ===================
1819 
1820  ! Checking whether x_cb.dat exists
1821  file_loc = trim(t_step_dir) // '/x_cb.dat'
1822  INQUIRE(file = trim(file_loc), exist = file_check)
1823 
1824  ! If it exists, x_cb.dat is read
1825  IF(file_check) THEN
1826  OPEN(1, file = trim(file_loc), form = 'unformatted', &
1827  status = 'old', action = 'read')
1828  READ(1) x_cb
1829  CLOSE(1)
1830  ELSE
1831  print '(A)', 'File x_cb.dat is missing in ' // &
1832  trim(t_step_dir) // '. Exiting ...'
1833  CALL s_mpi_abort()
1834  END IF
1835 
1836  ! Computing cell-center locations
1837  x_cc = (x_cb(0:m) + x_cb(-1:(m-1)))/2d0
1838 
1839  ! Computing minimum cell-width
1840  dx = minval(x_cb(0:m) - x_cb(-1:m-1))
1841  IF(num_procs > 1) CALL s_mpi_reduce_min(dx)
1842 
1843  ! Setting locations of domain bounds
1844  x_domain%beg = x_cb(-1)
1845  x_domain%end = x_cb( m)
1846 
1847  ! ==================================================================
1848 
1849 
1850  ! Reading the Grid Data File for the y-direction ===================
1851 
1852  IF(n > 0) THEN
1853 
1854  ! Checking whether y_cb.dat exists
1855  file_loc = trim(t_step_dir) // '/y_cb.dat'
1856  INQUIRE(file = trim(file_loc), exist = file_check)
1857 
1858  ! If it exists, y_cb.dat is read
1859  IF(file_check) THEN
1860  OPEN(1, file = trim(file_loc), form = 'unformatted', &
1861  status = 'old', action = 'read')
1862  READ(1) y_cb
1863  CLOSE(1)
1864  ELSE
1865  print '(A)', 'File y_cb.dat is missing in ' // &
1866  trim(t_step_dir) // '. Exiting ...'
1867  CALL s_mpi_abort()
1868  END IF
1869 
1870  ! Computing cell-center locations
1871  y_cc = (y_cb(0:n) + y_cb(-1:(n-1)))/2d0
1872 
1873  ! Computing minimum cell-width
1874  dy = minval(y_cb(0:n) - y_cb(-1:n-1))
1875  IF(num_procs > 1) CALL s_mpi_reduce_min(dy)
1876 
1877  ! Setting locations of domain bounds
1878  y_domain%beg = y_cb(-1)
1879  y_domain%end = y_cb( n)
1880 
1881  ! ==================================================================
1882 
1883 
1884  ! Reading the Grid Data File for the z-direction ===================
1885 
1886  IF(p > 0) THEN
1887 
1888  ! Checking whether z_cb.dat exists
1889  file_loc = trim(t_step_dir) // '/z_cb.dat'
1890  INQUIRE(file = trim(file_loc), exist = file_check)
1891 
1892  ! If it exists, z_cb.dat is read
1893  IF(file_check) THEN
1894  OPEN(1, file = trim(file_loc), form = 'unformatted', &
1895  status = 'old', action = 'read')
1896  READ(1) z_cb
1897  CLOSE(1)
1898  ELSE
1899  print '(A)', 'File z_cb.dat is missing in ' // &
1900  trim(t_step_dir) // '. Exiting ...'
1901  CALL s_mpi_abort()
1902  END IF
1903 
1904  ! Computing cell-center locations
1905  z_cc = (z_cb(0:p) + z_cb(-1:(p-1)))/2d0
1906 
1907  ! Computing minimum cell-width
1908  dz = minval(z_cb(0:p) - z_cb(-1:p-1))
1909  IF(num_procs > 1) CALL s_mpi_reduce_min(dz)
1910 
1911  ! Setting locations of domain bounds
1912  z_domain%beg = z_cb(-1)
1913  z_domain%end = z_cb( p)
1914 
1915  END IF
1916 
1917  END IF
1918 
1919  ! ==================================================================
1920 
1921 
1922  ! If only the preexisting grid data files are read in and there will
1923  ! not be any preexisting initial condition data files imported, then
1924  ! the directory associated with the rank of the local processor may
1925  ! be cleaned to make room for the new pre-process data. In addition,
1926  ! the time-step directory that will contain the new grid and initial
1927  ! condition data are also generated.
1928  IF(old_ic .NEQV. .true.) THEN
1929  CALL system('rm -rf ' // trim(proc_rank_dir) // '/*')
1930  CALL system('mkdir -p ' // trim(proc_rank_dir) // '/0')
1931  END IF
1932 
1933 
1934  END SUBROUTINE s_read_serial_grid_data_files ! --------------------------------
1935 
1936 
1937 
1942  SUBROUTINE s_check_grid_data_files() ! -----------------
1944 
1945  ! Cell-boundary Data Consistency Check in x-direction ==============
1946 
1947  IF(any(x_cb(0:m) - x_cb(-1:m-1) <= 0d0)) THEN
1948  print '(A)', 'x_cb.dat in ' // trim(t_step_dir) // &
1949  ' contains non-positive cell-spacings. Exiting ...'
1950  CALL s_mpi_abort()
1951  END IF
1952 
1953  ! ==================================================================
1954 
1955 
1956  ! Cell-boundary Data Consistency Check in y-direction ==============
1957 
1958  IF(n > 0) THEN
1959 
1960  IF(any(y_cb(0:n) - y_cb(-1:n-1) <= 0d0)) THEN
1961  print '(A)', 'y_cb.dat in ' // trim(t_step_dir) // &
1962  ' contains non-positive cell-spacings. ' // &
1963  'Exiting ...'
1964  CALL s_mpi_abort()
1965  END IF
1966 
1967  ! ==================================================================
1968 
1969 
1970  ! Cell-boundary Data Consistency Check in z-direction ==============
1971 
1972  IF(p > 0) THEN
1973 
1974  IF(any(z_cb(0:p) - z_cb(-1:p-1) <= 0d0)) THEN
1975  print '(A)', 'z_cb.dat in ' // trim(t_step_dir) // &
1976  ' contains non-positive cell-spacings' // &
1977  ' .Exiting ...'
1978  CALL s_mpi_abort()
1979  END IF
1980 
1981  END IF
1982 
1983  END IF
1984 
1985  ! ==================================================================
1986 
1987 
1988  END SUBROUTINE s_check_grid_data_files ! -------------------------------
1989 
1990 
1991 
1997  SUBROUTINE s_read_serial_ic_data_files(q_cons_vf) ! ---------------------------
1999  TYPE(scalar_field), &
2000  DIMENSION(sys_size), &
2001  INTENT(INOUT) :: q_cons_vf
2002 
2003 
2004  CHARACTER(LEN = LEN_TRIM(case_dir) + 3*name_len) :: file_loc
2005  ! Generic string used to store the address of a particular file
2006 
2007  CHARACTER(len = &
2008  int(floor(log10(REAL(sys_size, kind(0d0))))) + 1) :: file_num
2011 
2012  LOGICAL :: file_check
2015 
2016 
2017  INTEGER :: i
2018 
2019 
2020  ! Reading the Conservative Variables Data Files ====================
2021  DO i = 1, adv_idx%end
2022 
2023  ! Checking whether data file associated with variable position
2024  ! of the currently manipulated conservative variable exists
2025  WRITE(file_num, '(I0)') i
2026  file_loc = trim(t_step_dir) // '/q_cons_vf' // &
2027  trim(file_num) // '.dat'
2028  INQUIRE(file = trim(file_loc), exist = file_check)
2029 
2030  ! If it exists, the data file is read
2031  IF(file_check) THEN
2032  OPEN(1, file = trim(file_loc), form = 'unformatted', &
2033  status = 'old', action = 'read')
2034  READ(1) q_cons_vf(i)%sf
2035  CLOSE(1)
2036  ELSE
2037  print '(A)', 'File q_cons_vf' // trim(file_num) // &
2038  '.dat is missing in ' // trim(t_step_dir) // &
2039  '. Exiting ...'
2040  CALL s_mpi_abort()
2041  END IF
2042 
2043  END DO
2044 
2045  ! ==================================================================
2046 
2047 
2048  ! Since the preexisting grid and initial condition data files have
2049  ! been read in, the directory associated with the rank of the local
2050  ! process may be cleaned out to make room for new pre-process data.
2051  ! In addition, the time-step folder that will contain the new grid
2052  ! and initial condition data are also generated.
2053  CALL system('rm -rf ' // trim(proc_rank_dir) // '/*')
2054  CALL system('mkdir -p ' // trim(proc_rank_dir) // '/0')
2055 
2056 
2057  END SUBROUTINE s_read_serial_ic_data_files ! ----------------------------------
2058 
2059 
2060 
2061 
2067  SUBROUTINE s_read_parallel_grid_data_files(dflt_int)
2069  INTEGER, INTENT(IN) :: dflt_int
2070 
2071  REAL(KIND(0d0)), ALLOCATABLE, DIMENSION(:) :: x_cb_glb, y_cb_glb, z_cb_glb
2072 
2073  INTEGER :: ifile, ierr, data_size
2074  INTEGER, DIMENSION(MPI_STATUS_SIZE) :: status
2075 
2076  CHARACTER(LEN=path_len + 2*name_len) :: file_loc
2077  LOGICAL :: file_exist
2078 
2079  ALLOCATE(x_cb_glb(-1:m_glb))
2080  ALLOCATE(y_cb_glb(-1:n_glb))
2081  ALLOCATE(z_cb_glb(-1:p_glb))
2082 
2083  ! Read in cell boundary locations in x-direction
2084  file_loc = trim(case_dir) // '/restart_data' // trim(mpiiofs) // 'x_cb.dat'
2085  INQUIRE(file = trim(file_loc),exist = file_exist)
2086 
2087  IF (file_exist) THEN
2088  data_size = m_glb+2
2089  CALL mpi_file_open(mpi_comm_world,file_loc,mpi_mode_rdonly,mpi_info_int,ifile,ierr)
2090  CALL mpi_file_read_all(ifile,x_cb_glb,data_size,mpi_double_precision,status,ierr)
2091  CALL mpi_file_close(ifile,ierr)
2092  ELSE
2093  print '(A)', 'File ', trim(file_loc), ' is missing. Exiting... '
2094  CALL s_mpi_abort()
2095  END IF
2096 
2097  ! Assigning local cell boundary locations
2098  x_cb(-1:m) = x_cb_glb((start_idx(1)-1):(start_idx(1)+m))
2099  ! Computing cell center locations
2100  x_cc(0:m) = (x_cb(0:m) + x_cb(-1:(m-1)))/2d0
2101  ! Computing minimum cell width
2102  dx = minval(x_cb(0:m) - x_cb(-1:(m-1)))
2103  IF (num_procs > 1) CALL s_mpi_reduce_min(dx)
2104  ! Setting locations of domain bounds
2105  x_domain%beg = x_cb(-1)
2106  x_domain%end = x_cb( m)
2107 
2108  IF (n > 0) THEN
2109  ! Read in cell boundary locations in y-direction
2110  file_loc = trim(case_dir) // '/restart_data' // trim(mpiiofs) // 'y_cb.dat'
2111  INQUIRE(file = trim(file_loc),exist = file_exist)
2112 
2113  IF (file_exist) THEN
2114  data_size = n_glb+2
2115  CALL mpi_file_open(mpi_comm_world,file_loc,mpi_mode_rdonly,mpi_info_int,ifile,ierr)
2116  CALL mpi_file_read_all(ifile,y_cb_glb,data_size,mpi_double_precision,status,ierr)
2117  CALL mpi_file_close(ifile,ierr)
2118  ELSE
2119  print '(A)', 'File ', trim(file_loc), ' is missing. Exiting... '
2120  CALL s_mpi_abort()
2121  END IF
2122 
2123  ! Assigning local cell boundary locations
2124  y_cb(-1:n) = y_cb_glb((start_idx(2)-1):(start_idx(2)+n))
2125  ! Computing cell center locations
2126  y_cc = (y_cb(0:n) + y_cb(-1:(n-1)))/2d0
2127  ! Computing minimum cell width
2128  dy = minval(y_cb(0:n) - y_cb(-1:(n-1)))
2129  IF (num_procs > 1) CALL s_mpi_reduce_min(dy)
2130  ! Setting locations of domain bounds
2131  y_domain%beg = y_cb(-1)
2132  y_domain%end = y_cb( n)
2133 
2134  IF (p > 0) THEN
2135  ! Read in cell boundary locations in z-direction
2136  file_loc = trim(case_dir) // '/restart_data' // trim(mpiiofs) // 'z_cb.dat'
2137  INQUIRE(file = trim(file_loc),exist = file_exist)
2138 
2139  IF (file_exist) THEN
2140  data_size = p_glb+2
2141  CALL mpi_file_open(mpi_comm_world,file_loc,mpi_mode_rdonly,mpi_info_int,ifile,ierr)
2142  CALL mpi_file_read_all(ifile,z_cb_glb,data_size,mpi_double_precision,status,ierr)
2143  CALL mpi_file_close(ifile,ierr)
2144  ELSE
2145  print '(A)', 'File ', trim(file_loc), ' is missing. Exiting... '
2146  CALL s_mpi_abort()
2147  END IF
2148 
2149  ! Assigning local cell boundary locations
2150  z_cb(-1:p) = z_cb_glb((start_idx(3)-1):(start_idx(3)+p))
2151  ! Computing cell center locations
2152  z_cc = (z_cb(0:p) + z_cb(-1:(p-1)))/2d0
2153  ! Computing minimum cell width
2154  dz = minval(z_cb(0:p) - z_cb(-1:(p-1)))
2155  IF (num_procs > 1) CALL s_mpi_reduce_min(dz)
2156  ! Setting locations of domain bounds
2157  z_domain%beg = z_cb(-1)
2158  z_domain%end = z_cb( p)
2159 
2160  END IF
2161  END IF
2162 
2163  DEALLOCATE(x_cb_glb, y_cb_glb, z_cb_glb)
2164 
2165 
2166  END SUBROUTINE s_read_parallel_grid_data_files ! -----------------------
2167 
2168 
2169 
2175  SUBROUTINE s_read_parallel_ic_data_files(q_cons_vf) ! ------------------
2177  TYPE(scalar_field), &
2178  DIMENSION(sys_size), &
2179  INTENT(INOUT) :: q_cons_vf
2180 
2181  INTEGER :: ifile, ierr, data_size
2182  INTEGER, DIMENSION(MPI_STATUS_SIZE) :: status
2183  INTEGER(KIND=MPI_OFFSET_KIND) :: disp
2184  INTEGER(KIND=MPI_OFFSET_KIND) :: m_MOK, n_MOK, p_MOK
2185  INTEGER(KIND=MPI_OFFSET_KIND) :: WP_MOK, var_MOK, str_MOK
2186  INTEGER(KIND=MPI_OFFSET_KIND) :: NVARS_MOK
2187  INTEGER(KIND=MPI_OFFSET_KIND) :: MOK
2188 
2189  CHARACTER(LEN=path_len + 2*name_len) :: file_loc
2190  LOGICAL :: file_exist
2191 
2192  INTEGER :: i
2193 
2194  ! Open the file to read
2195  WRITE(file_loc, '(I0,A)') t_step_old, '.dat'
2196  file_loc = trim(restart_dir) // trim(mpiiofs) // trim(file_loc)
2197  INQUIRE(file = trim(file_loc),exist = file_exist)
2198 
2199  IF (file_exist) THEN
2200  CALL mpi_file_open(mpi_comm_world,file_loc,mpi_mode_rdonly,mpi_info_int,ifile,ierr)
2201 
2202  ! Initialize MPI data I/O
2203  CALL s_initialize_mpi_data(q_cons_vf)
2204 
2205  ! Size of local arrays
2206  data_size = (m+1)*(n+1)*(p+1)
2207 
2208  ! Resize some integers so MPI can read even the biggest files
2209  m_mok = int(m_glb+1, mpi_offset_kind)
2210  n_mok = int(n_glb+1, mpi_offset_kind)
2211  p_mok = int(p_glb+1, mpi_offset_kind)
2212  wp_mok = int(8d0, mpi_offset_kind)
2213  mok = int(1d0, mpi_offset_kind)
2214  str_mok = int(name_len, mpi_offset_kind)
2215  nvars_mok = int(sys_size, mpi_offset_kind)
2216 
2217  ! Read the data for each variable
2218  DO i = 1, adv_idx%end
2219  var_mok = int(i, mpi_offset_kind)
2220 
2221  ! Initial displacement to skip at beginning of file
2222  disp = m_mok*max(mok,n_mok)*max(mok,p_mok)*wp_mok*(var_mok-1)
2223 
2224  CALL mpi_file_set_view(ifile,disp,mpi_double_precision,mpi_io_data%view(i), &
2225  'native',mpi_info_int,ierr)
2226  CALL mpi_file_read(ifile,mpi_io_data%var(i)%sf,data_size, &
2227  mpi_double_precision,status,ierr)
2228  END DO
2229 
2230  CALL s_mpi_barrier()
2231 
2232  CALL mpi_file_close(ifile,ierr)
2233 
2234  ELSE
2235  print '(A)', 'File ', trim(file_loc), ' is missing. Exiting... '
2236  CALL s_mpi_abort()
2237  END IF
2238  CALL s_mpi_barrier()
2239  IF (proc_rank == 0) CALL system('rm -f ' // trim(file_loc))
2240 
2241  END SUBROUTINE s_read_parallel_ic_data_files ! -------------------------
2242 
2243 
2244 
2245 
2246 
2247  SUBROUTINE s_initialize_start_up_module() !-----------------------------
2249  IF (parallel_io .NEQV. .true.) THEN
2252  ELSE
2255  END IF
2256 
2257  END SUBROUTINE s_initialize_start_up_module ! --------------------------
2258 
2259 
2260 
2261 
2262 
2263  SUBROUTINE s_finalize_start_up_module() ! ------------------------------
2265  s_read_grid_data_files => null()
2266  s_read_ic_data_files => null()
2267 
2268  END SUBROUTINE s_finalize_start_up_module ! ----------------------------
2269 
2270 END MODULE m_start_up
real(kind(0d0)), dimension(num_fluids_max) fluid_rho
integer, parameter num_patches_max
Maximum number of patches allowed.
character(len=path_len+2 *name_len), private t_step_dir
Time-step folder into which grid and initial condition data will be placed.
subroutine s_check_spherical_harmonic_patch_geometry(patch_id)
This subroutine verifies that the geometric parameters of the spherical harmonic patch have consisten...
subroutine, public s_read_input_file()
Reads the configuration file pre_process.inp, in order to populate the parameters in module m_global_...
Definition: m_start_up.f90:108
subroutine s_check_active_patch_primitive_variables(patch_id)
This subroutine verifies that the primitive variables associated with the given active patch are phys...
integer t_step_old
Existing IC/grid folder.
subroutine s_check_2d_analytical_patch_geometry(patch_id)
This subroutine verifies that the geometric parameters of the analytical patch have consistently been...
This module contains subroutines that read, and check consistency of, the user provided inputs and da...
Definition: m_start_up.f90:36
This module takes care of writing the grid and initial condition data files into the "0" time-step di...
subroutine s_mpi_barrier()
Halts all processes until all have reached barrier.
subroutine s_check_3d_analytical_patch_geometry(patch_id)
This subroutine verifies that the geometric parameters of the analytical patch have consistently been...
integer perturb_sph_fluid
Fluid to be perturbed with perturb_sph flag.
type(physical_parameters), dimension(num_fluids_max) fluid_pp
Database of the physical parameters of each of the fluids that is present in the flow. These include the stiffened gas equation of state parameters, the Reynolds numbers and the Weber numbers.
subroutine, public s_check_input_file()
Checking that the user inputs make sense, i.e. that the individual choices are compatible with the co...
Definition: m_start_up.f90:167
subroutine s_check_ellipsoid_patch_geometry(patch_id)
This subroutine verifies that the geometric parameters of the ellipsoid patch have consistently been ...
integer mpi_info_int
MPI info for parallel IO with Lustre file systems.
real(kind(0d0)), dimension(:), allocatable y_cc
This module contains all of the parameters characterizing the computational domain, simulation algorithm, initial condition and the stiffened equation of state.
subroutine, public s_read_serial_grid_data_files(dflt_int)
The goal of this subroutine is to read in any preexisting grid data as well as based on the imported ...
Derived type annexing a scalar field (SF)
logical old_grid
Use existing grid data.
subroutine s_check_supported_patch_smoothing(patch_id)
This subroutine verifies that the smoothing parameters of the given patch, which supports the smoothi...
type(bounds_info) z_domain
Locations of the domain bounds in the x-, y- and z-coordinate directions.
subroutine s_check_rectangle_patch_geometry(patch_id)
This subroutine verifies that the geometric parameters of the rectangle patch have consistently been ...
type(bounds_info) x_domain
real(kind(0d0)), dimension(:), allocatable y_cb
real(kind(0d0)), dimension(:), allocatable x_cb
subroutine s_check_unsupported_patch_smoothing(patch_id)
This subroutine verifies that the smoothing parameters of the given patch, which does not support the...
subroutine s_check_cylinder_patch_geometry(patch_id)
This subroutine verifies that the geometric parameters of the cylinder patch have consistently been i...
subroutine s_check_plane_sweep_patch_geometry(patch_id)
This subroutine verifies that the geometric parameters of the plane sweep patch have consistently bee...
subroutine s_check_cuboid_patch_geometry(patch_id)
This subroutine verifies that the geometric parameters of the cuboid patch have consistently been inp...
subroutine s_check_line_segment_patch_geometry(patch_id)
This subroutine verifies that the geometric parameters of the line segment patch have consistently be...
Definition: m_start_up.f90:995
This module contains subroutines that are compiler specific.
integer p_glb
Global number of cells in each direction.
character(len=path_len+2 *name_len), public restart_dir
Restart data folder.
subroutine, public s_read_serial_ic_data_files(q_cons_vf)
The goal of this subroutine is to read in any preexisting initial condition data files so that they m...
This file contains the definitions of all of the custom-defined types used in the pre-process code...
type(int_bounds_info) adv_idx
Indexes of first & last advection eqns.
real(kind(0d0)), dimension(:), allocatable z_cb
Locations of cell-boundaries (cb) in x-, y- and z-directions, respectively.
integer p
Number of cells in the x-, y- and z-coordinate directions.
real(kind(0d0)), parameter dflt_real
Default real value.
subroutine s_check_inactive_patch_alteration_rights(patch_id)
This subroutine verifies that the rights of the given inactive patch, to overwrite the preceding patc...
subroutine s_check_ellipse_patch_geometry(patch_id)
This subroutine verifies that the geometric parameters of the ellipse patch have consistently been in...
procedure(s_read_abstract_grid_data_files), pointer, public s_read_grid_data_files
Definition: m_start_up.f90:97
integer num_fluids
Number of different fluids present in the flow.
subroutine s_check_inactive_patch_primitive_variables(patch_id)
This subroutine verifies that the primitive variables associated with the given inactive patch remain...
subroutine, public s_finalize_start_up_module()
real(kind(0d0)), dimension(:), allocatable x_cc
logical old_ic
Use existing IC data.
integer, dimension(:), allocatable start_idx
Starting cell-center index of local processor in global grid.
integer sys_size
Number of unknowns in the system of equations.
logical mpp_lim
Alpha limiter.
integer model_eqns
Multicomponent flow model.
subroutine s_mpi_reduce_min(var_loc)
The following subroutine takes the inputted variable and determines its minimum value on the entire c...
integer precision
Precision of output files.
type(mpi_io_var), public mpi_io_data
subroutine s_check_active_patch_alteration_rights(patch_id)
This subroutine verifies that any rights granted to the given active patch, to overwrite the precedin...
subroutine, public s_read_parallel_grid_data_files(dflt_int)
Cell-boundary data are checked for consistency by looking at the (non-)uniform cell-width distributio...
character(len=path_len+name_len) proc_rank_dir
Location of the folder associated with the rank of the local processor.
Definition: m_start_up.f90:90
character(len=path_len) case_dir
Case folder location.
character(len=name_len) mpiiofs
real(kind(0d0)) pref
Reference parameters for Tait EOS.
integer, parameter num_fluids_max
Maximum number of fluids allowed.
integer num_procs
Number of processors.
subroutine s_check_isentropic_vortex_patch_geometry(patch_id)
This subroutine verifies that the geometric parameters of the isentropic vortex patch have been enter...
subroutine s_check_sphere_patch_geometry(patch_id)
This subroutine verifies that the geometric parameters of the sphere patch have consistently been inp...
subroutine s_check_circle_patch_geometry(patch_id)
This subroutine verifies that the geometric parameters of the circle patch have consistently been inp...
type(bounds_info) y_domain
subroutine, public s_read_parallel_ic_data_files(q_cons_vf)
The goal of this subroutine is to read in any preexisting initial condition data files so that they m...
subroutine, public s_check_grid_data_files()
Cell-boundary data are checked for consistency by looking at the (non-)uniform cell-width distributio...
integer num_patches
Number of patches composing initial condition.
type(ic_patch_parameters), dimension(num_patches_max) patch_icpp
Database of the initial condition patch parameters (icpp) for each of the patches employed in the con...
subroutine s_check_1d_analytical_patch_geometry(patch_id)
This subroutine verifies that the geometric parameters of the analytical patch have consistently been...
subroutine s_check_line_sweep_patch_geometry(patch_id)
This subroutine verifies that the geometric parameters of the line sweep patch have consistently been...
integer weno_order
Order of accuracy for the WENO reconstruction.
procedure(s_read_abstract_ic_data_files), pointer, public s_read_ic_data_files
Definition: m_start_up.f90:98
subroutine, public s_initialize_start_up_module()
subroutine my_inquire(fileloc, dircheck)
Inquires on the existence of a directory.
subroutine s_mpi_abort()
The subroutine terminates the MPI execution environment.
Definition: m_mpi_proxy.f90:91
real(kind(0d0)), dimension(:), allocatable z_cc
Locations of cell-centers (cc) in x-, y- and z-directions, respectively.
subroutine s_initialize_mpi_data(q_cons_vf)
real(kind(0d0)) dz
Minimum cell-widths in the x-, y- and z-coordinate directions.
logical parallel_io
Format of the data files.
subroutine s_check_inactive_patch_geometry(patch_id)
This subroutine verifies that the geometric parameters of the inactive patch remain unaltered by the ...
integer, parameter name_len
Maximum name length.
integer, parameter dflt_int
Default integer value.
real(kind(0d0)), parameter pi
logical adv_alphan
Advection of the last volume fraction.
type(bounds_info) bc_z
Boundary conditions in the x-, y- and z-coordinate directions.
integer proc_rank
Rank of the local processor.
This module serves as a proxy to the parameters and subroutines available in the MPI implementation&#39;s...
Definition: m_mpi_proxy.f90:39
logical stretch_z
Grid stretching flags for the x-, y- and z-coordinate directions.
integer perturb_flow_fluid
Fluid to be perturbed with perturb_flow flag.