diff --git a/.gitignore b/.gitignore
index c54ae8b623..07d505edba 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,3 +14,4 @@ GAMER_ExtractProfile
.vscode
src/Makefile
src/Makefile.log
+src/.local_settings
diff --git a/configs/mac_clang.config b/configs/mac_clang.config
new file mode 100644
index 0000000000..592511a212
--- /dev/null
+++ b/configs/mac_clang.config
@@ -0,0 +1,41 @@
+# A "typical" macOS installation without GPU
+FFTW2_PATH /usr/local/fftw-2.1.5
+MPI_PATH /usr/local/mpich-3.2
+GSL_PATH /usr/local/gsl-1.16
+HDF5_PATH ${HOME}/mambaforge/envs/py312
+
+# compilers
+CXX clang++
+CXX_MPI mpicxx
+
+# clang flags
+CXXFLAG -g
+CXXFLAG -O3
+CXXFLAG -std=c++11
+#CXXFLAG -Ofast
+CXXFLAG -Wall
+CXXFLAG -Wextra
+CXXFLAG -Wno-unused-variable
+CXXFLAG -Wno-unused-parameter
+CXXFLAG -Wno-uninitialized
+CXXFLAG -Wno-unused-but-set-variable
+CXXFLAG -Wno-unused-function
+CXXFLAG -Wno-unused-result
+CXXFLAG -Wno-implicit-fallthrough
+CXXFLAG -Wno-parentheses
+CXXFLAG -Wno-unknown-pragmas
+CXXFLAG -Wno-mismatched-tags
+CXXFLAG -Wno-deprecated-declarations
+CXXFLAG -Wno-missing-braces
+
+OPENMPFLAG -Xclang -fopenmp
+
+LIBFLAG -lomp
+
+NVCCFLAG_COM -O3
+#NVCCFLAG_COM -use_fast_math
+NVCCFLAG_FLU -Xptxas -dlcm=ca -prec-div=false -ftz=true
+NVCCFLAG_POT -Xptxas -dlcm=ca
+
+#gpu
+GPU_COMPUTE_CAPABILITY -1
diff --git a/configs/mac.config b/configs/mac_gnu.config
similarity index 90%
rename from configs/mac.config
rename to configs/mac_gnu.config
index fc963cb87d..bf1c46444b 100644
--- a/configs/mac.config
+++ b/configs/mac_gnu.config
@@ -1,17 +1,17 @@
# A "typical" macOS installation without GPU
FFTW2_PATH /usr/local/fftw-2.1.5
MPI_PATH /usr/local/mpich-3.2
-HDF5_PATH ${HOME}/miniconda3
GSL_PATH /usr/local/gsl-1.16
+HDF5_PATH ${HOME}/mambaforge/envs/py312
# compilers
-CXX g++
+CXX g++-12
CXX_MPI mpicxx
# gnu flags
CXXFLAG -g
CXXFLAG -O3
-#CXXFLAG -std=c++11
+CXXFLAG -std=c++11
#CXXFLAG -Ofast
CXXFLAG -Wall
CXXFLAG -Wextra
diff --git a/doc/wiki/Installation-related/Installation:-Machine-Configuration-File.md b/doc/wiki/Installation-related/Installation:-Machine-Configuration-File.md
index 9bc9f15ce0..93e7de28c0 100644
--- a/doc/wiki/Installation-related/Installation:-Machine-Configuration-File.md
+++ b/doc/wiki/Installation-related/Installation:-Machine-Configuration-File.md
@@ -1,7 +1,18 @@
+The machine configuration file is located under `configs`. It specifies the library paths, compiler types, compilation flags, and GPU compute capability.
+
> [!TIP]
-> To set up your machine configuration file, make a copy of `template.config` and modify it.
+> Check the `configs` directory to see if a configuration file is already available for your machine.
+
+## Set Up the Machine Configuration File
+
+To set up your machine configuration file, go to `configs` and make a copy of `template.config` to modify:
+
+```bash
+cd configs
+cp template.config your_machine.config
+```
-The machine configuration file is under `configs`. The configuration file contains the library paths, the compiler types, the compilation flags, and the GPU compute capability.
+Please refer to the following sections to set up your machine configuration file.
### 0. Rules of the configuration file
* Comments must start with `#`.
diff --git a/doc/wiki/Installation-related/Installation:-Option-List.md b/doc/wiki/Installation-related/Installation:-Option-List.md
index ac4741ff2f..ed1c0aff93 100644
--- a/doc/wiki/Installation-related/Installation:-Option-List.md
+++ b/doc/wiki/Installation-related/Installation:-Option-List.md
@@ -22,9 +22,9 @@ disabled). See the "Restriction" of each option carefully.
| Option | Value | Description |
|:---:|:---:|---|
-| `-h` | - | Show a short help message. |
-| `-lh` | - | Show a detailed help message. |
-| `--machine` | Filename string | Select the `*.config` file from the `configs` directory. |
+| `-h` | - | Show a short help message. |
+| `-lh` | - | Show a detailed help message. |
+| `--machine` | Filename string | Select the `*.config` file from the `configs` directory. It will overwrite the default machine set in the [[default setting file \| Installation#default_setting]]. |
diff --git a/doc/wiki/Installation.md b/doc/wiki/Installation.md
index 64439b570d..5f1e1e85f9 100644
--- a/doc/wiki/Installation.md
+++ b/doc/wiki/Installation.md
@@ -2,33 +2,46 @@
Please see [[Machine Configuration File | Installation:-Machine-Configuration-File]].
-2. Go to the source directory
+
+
+2. Set your machine configuration file as default
+
+ ```bash
+ sh tool/config/set_settings.sh --local --machine=your_machine
+ ```
+
+> [!NOTE]
+> If you want to set the default machine configuration file for all GAMER copies under your user account, use the `--global` option instead of `--local`.
+You can still override the global setting for individual GAMER copies using the `--local` option.
+Furthermore, you can override the default setting by passing the [[--machine | Installation:-Option-List#--machine]]=`your_machine` when executing `configure.py`.
+
+3. Go to the source directory
```bash
cd src
```
-3. Generate `Makefile` using the Python script `configure.py`
+4. Generate `Makefile` using the Python script `configure.py`
To get the `Makefile`, please execute the following command:
```bash
- python configure.py --machine=your_configuration_file [--your_arguments]
+ python configure.py [--your_arguments]
```
- `your_configuration_file` is the configuration filename you got from step 1, and `[--your_arguments]` should match your simulation requirements. Please check out [[Option List | Installation:-Option-List]] for all the available options.
+ `[--your_arguments]` represent the options that should align with your simulation requirements. Refer to [[Option List | Installation:-Option-List]] for a complete list of available options.
- For example, the following command uses the `configs/pleiades.config` machine configuration, sets the FFTW method to `FFTW2`, and enables gravity and GPU.
+ For example, the following command sets the FFTW method to `FFTW2` and enables gravity and GPU.
``` bash
- python configure.py --machine=pleiades --fftw=FFTW2 --gravity=true --gpu=true
+ python configure.py --fftw=FFTW2 --gravity=true --gpu=true
```
> [!TIP]
> An example script `generate_make.sh` to generate Makefile can be found in each test problem folder,
e.g., `example/test_problem/Hydro/AcousticWave/generate_make.sh`.
-4. Compile the code
+5. Compile the code
```bash
make clean
diff --git a/doc/wiki/Quick-Start-related/Quick-Start:-1D-Shock-Tube.md b/doc/wiki/Quick-Start-related/Quick-Start:-1D-Shock-Tube.md
index a6d22fa763..e3f480de30 100644
--- a/doc/wiki/Quick-Start-related/Quick-Start:-1D-Shock-Tube.md
+++ b/doc/wiki/Quick-Start-related/Quick-Start:-1D-Shock-Tube.md
@@ -236,7 +236,7 @@ following modifications.
1\. Re-generate `Makefile` by [[configure.py | Installation]] and recompile `gamer`.
``` bash
-sh generate_make.sh --machine=YOUR_MACHINE --openmp=true --gpu=true
+sh generate_make.sh --openmp=true --gpu=true
make clean
make -j4
```
diff --git a/doc/wiki/Quick-Start.md b/doc/wiki/Quick-Start.md
index e44b22220b..17a46b92f0 100644
--- a/doc/wiki/Quick-Start.md
+++ b/doc/wiki/Quick-Start.md
@@ -4,9 +4,21 @@ Follow the instructions in [[Download]] to get the latest version of GAMER.
### Setup Your Machine Configuration File
-Follow the instructions in [[Machine Configuration File | Installation:-Machine-Configuration-File]] to set the configuration file of your machine.
+The machine configuration file is located under `configs`. This file contains the library paths, compiler types, compilation flags, and GPU compute capability. Check the existing configuration files to see if one matches your machine.
+
+If no suitable configuration file is available, you will need to create a new one. Follow the instructions in [[Machine Configuration File | Installation:-Machine-Configuration-File]] to set up a configuration file for your machine.
+
+If a configuration file matches your machine, you can set it as the default by running
+
+```bash
+sh tool/config/set_settings.sh --local --machine=your_machine
+```
+
+For example, setting `--machine=pleiades` with the above command will use the `configs/pleiades.config` machine configuration when compiling the code.
### Quick Demos
+Read the following guides to learn how to configure, compile, and run GAMER.
+
1. [[1D Shock Tube: OpenMP with/without GPU acceleration | Quick-Start:-1D-Shock-Tube]]
2. [[3D Blast Wave: hybrid MPI/OpenMP/GPU + yt analysis | Quick-Start:-3D-Blast-Wave]]
diff --git a/doc/wiki/Runtime-Parameters-related/Runtime-Parameters:-All.md b/doc/wiki/Runtime-Parameters-related/Runtime-Parameters:-All.md
index af754c96b2..0288725ab3 100644
--- a/doc/wiki/Runtime-Parameters-related/Runtime-Parameters:-All.md
+++ b/doc/wiki/Runtime-Parameters-related/Runtime-Parameters:-All.md
@@ -292,7 +292,7 @@ For variables with `Default/Min/Max` labeled as `Depend`, click the parameter na
| [[ OPT__OUTPUT_LORENTZ \| Runtime-Parameters:-Outputs#OPT__OUTPUT_LORENTZ ]] | 0 | None | None | output Lorentz factor [0] ##SRHD ONLY## |
| [[ OPT__OUTPUT_MACH \| Runtime-Parameters:-Outputs#OPT__OUTPUT_MACH ]] | 0 | None | None | output mach number [0] ##HYDRO ONLY## |
| [[ OPT__OUTPUT_MODE \| Runtime-Parameters:-Outputs#OPT__OUTPUT_MODE ]] | -1 | 1 | 3 | (1=const step, 2=const dt, 3=dump table) -> edit "Input__DumpTable" for 3 |
-| [[ OPT__OUTPUT_PART \| Runtime-Parameters:-Outputs#OPT__OUTPUT_PART ]] | 0 | 0 | 7 | output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0] |
+| [[ OPT__OUTPUT_PART \| Runtime-Parameters:-Outputs#OPT__OUTPUT_PART ]] | 0 | 0 | 8 | output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0] |
| [[ OPT__OUTPUT_PAR_DENS \| Runtime-Parameters:-Outputs#OPT__OUTPUT_PAR_DENS ]] | PAR_OUTPUT_DENS_PAR_ONLY | 0 | 2 | output the particle or total mass density on grids: (0=off, 1=particle mass density, 2=total mass density) [1] ##OPT__OUTPUT_TOTAL ONLY## |
| [[ OPT__OUTPUT_PAR_MESH \| Runtime-Parameters:-Outputs#OPT__OUTPUT_PAR_MESH ]] | Depend | Depend | Depend | output the attributes of tracer particles mapped from mesh quantities -> edit "Input__Par_Mesh" [1] ##PARTICLE ONLY## |
| [[ OPT__OUTPUT_PAR_MODE \| Runtime-Parameters:-Outputs#OPT__OUTPUT_PAR_MODE ]] | 0 | 0 | 2 | output the particle data: (0=off, 1=text-file, 2=C-binary) [0] ##PARTICLE ONLY## |
@@ -300,7 +300,8 @@ For variables with `Default/Min/Max` labeled as `Depend`, click the parameter na
| [[ OPT__OUTPUT_PRES \| Runtime-Parameters:-Outputs#OPT__OUTPUT_PRES ]] | 0 | None | None | output gas pressure [0] ##HYDRO ONLY## |
| [[ OPT__OUTPUT_RESTART \| Runtime-Parameters:-Outputs#OPT__OUTPUT_RESTART ]] | 0 | None | None | output data immediately after restart [0] |
| [[ OPT__OUTPUT_TEMP \| Runtime-Parameters:-Outputs#OPT__OUTPUT_TEMP ]] | OutTempDefault | None | None | output gas temperature [0 (HD) or 1 (SRHD)] ##HYDRO ONLY## |
-| [[ OPT__OUTPUT_TEXT_FORMAT_FLT \| Runtime-Parameters:-Outputs#OPT__OUTPUT_TEXT_FORMAT_FLT ]] | "%24.16e" | None | None | string format of output text files [%24.16e] |
+| [[ OPT__OUTPUT_TEXT_FORMAT_FLT \| Runtime-Parameters:-Outputs#OPT__OUTPUT_TEXT_FORMAT_FLT ]] | "%24.16e" | None | None | string format of floating-point variables in output text files [%24.16e] |
+| [[ OPT__OUTPUT_TEXT_LENGTH_INT \| Runtime-Parameters:-Outputs#OPT__OUTPUT_TEXT_LENGTH_INT ]] | 12 | 0 | None | string length of integer variables in output text files [12] |
| [[ OPT__OUTPUT_TOTAL \| Runtime-Parameters:-Outputs#OPT__OUTPUT_TOTAL ]] | 1 | 0 | 2 | output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1] |
| [[ OPT__OUTPUT_USER \| Runtime-Parameters:-Outputs#OPT__OUTPUT_USER ]] | 0 | None | None | output the user-specified data -> edit "Output_User.cpp" [0] |
| [[ OPT__OUTPUT_USER_FIELD \| Runtime-Parameters:-Outputs#OPT__OUTPUT_USER_FIELD ]] | 0 | None | None | output user-defined derived fields [0] -> edit "Flu_DerivedField_User.cpp" |
@@ -341,6 +342,7 @@ For variables with `Default/Min/Max` labeled as `Depend`, click the parameter na
| [[ OPT__UM_IC_REFINE \| Runtime-Parameters:-Initial-Conditions#OPT__UM_IC_REFINE ]] | 1 | None | None | refine UM_IC from level OPT__UM_IC_LEVEL to MAX_LEVEL [1] |
| [[ OPT__UNIT \| Runtime-Parameters:-Units#OPT__UNIT ]] | 0 | None | None | specify code units -> must set exactly 3 basic units below [0] ##USELESS FOR COMOVING## |
| [[ OPT__VERBOSE \| Runtime-Parameters:-Miscellaneous#OPT__VERBOSE ]] | 0 | None | None | output the simulation progress in detail [0] |
+| [[ OUTPUT_DIR \| Runtime-Parameters:-Outputs#OUTPUT_DIR ]] | "." | None | None | set the output directory [.] |
| [[ OUTPUT_DT \| Runtime-Parameters:-Outputs#OUTPUT_DT ]] | -1.0 | None | None | output data every OUTPUT_DT time interval ##OPT__OUTPUT_MODE==2 ONLY## |
| [[ OUTPUT_PART_X \| Runtime-Parameters:-Outputs#OUTPUT_PART_X ]] | -1.0 | None | None | x coordinate for OPT__OUTPUT_PART [-1.0] |
| [[ OUTPUT_PART_Y \| Runtime-Parameters:-Outputs#OUTPUT_PART_Y ]] | -1.0 | None | None | y coordinate for OPT__OUTPUT_PART [-1.0] |
diff --git a/doc/wiki/Runtime-Parameters-related/Runtime-Parameters:-Outputs.md b/doc/wiki/Runtime-Parameters-related/Runtime-Parameters:-Outputs.md
index 618fd65cf2..71dbedb1c9 100644
--- a/doc/wiki/Runtime-Parameters-related/Runtime-Parameters:-Outputs.md
+++ b/doc/wiki/Runtime-Parameters-related/Runtime-Parameters:-Outputs.md
@@ -2,6 +2,7 @@ Parameters described on this page:
[OPT__OUTPUT_TOTAL](#OPT__OUTPUT_TOTAL),
[OPT__OUTPUT_PART](#OPT__OUTPUT_PART),
[OPT__OUTPUT_TEXT_FORMAT_FLT](#OPT__OUTPUT_TEXT_FORMAT_FLT),
+[OPT__OUTPUT_TEXT_LENGTH_INT](#OPT__OUTPUT_TEXT_LENGTH_INT),
[OPT__OUTPUT_USER](#OPT__OUTPUT_USER),
[OPT__OUTPUT_PAR_MODE](#OPT__OUTPUT_PAR_MODE),
[OPT__OUTPUT_PAR_MESH](#OPT__OUTPUT_PAR_MESH),
@@ -31,6 +32,7 @@ Parameters described on this page:
[OUTPUT_PART_Y](#OUTPUT_PART_Y),
[OUTPUT_PART_Z](#OUTPUT_PART_Z),
[INIT_DUMPID](#INIT_DUMPID),
+[OUTPUT_DIR](#OUTPUT_DIR)
Parameters below are shown in the format: **`Name` (Valid Values) [Default Value]**
@@ -52,9 +54,9 @@ data dump frequency.
the HDF5 snapshots of GAMER.
-* #### `OPT__OUTPUT_PART` (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diagonal) [0]
+* #### `OPT__OUTPUT_PART` (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diagonal, 8=entire box) [0]
* **Description:**
-Output the data of a single line or slice in the text format.
+Output the data of a single line, slice, or entire box in the text format.
Use [OUTPUT_PART_X](#OUTPUT_PART_X), [OUTPUT_PART_Y](#OUTPUT_PART_Y), and
[OUTPUT_PART_Z](#OUTPUT_PART_Z) to specify the target coordinates.
This output option is mainly for quick inspection for simple test problems
@@ -75,6 +77,12 @@ This will affect files generated by, for example,
[OPT__OUTPUT_BASEPS](#OPT__OUTPUT_BASEPS).
* **Restriction:**
+
+* #### `OPT__OUTPUT_TEXT_LENGTH_INT` (≥0) [12]
+ * **Description:**
+String length of integer data in output text files.
+ * **Restriction:**
+
* #### `OPT__OUTPUT_USER` (0=off, 1=on) [0]
* **Description:**
@@ -283,6 +291,14 @@ in most cases, even when restarting simulations, unless you want to overwrite
the default value.
* **Restriction:**
+
+* #### `OUTPUT_DIR` (string) [.]
+ * **Description:**
+Specify the output data directory. In most cases, it is unnecessary to set this value
+unless you want to overwrite the default directory.
+ * **Restriction:**
+The string length should be shorter than `MAX_STRING-100`.
+
## Remarks
diff --git a/example/grackle/Make.mach.eureka-intel b/example/grackle/Make.mach.eureka-intel
new file mode 100644
index 0000000000..3a9bf09c4b
--- /dev/null
+++ b/example/grackle/Make.mach.eureka-intel
@@ -0,0 +1,97 @@
+#=======================================================================
+#
+# FILE: Make.mach.eureka-intel
+#
+# DESCRIPTION: Makefile for the calab-ntu Eureka GPU cluster with Intel
+# compiler and OpenMP support
+#
+# AUTHOR: Hsi-Yu Schive (modified by Guan-Ming Su, Barry T. Chiang,
+# and Chun-Yen Chen)
+#
+# DATE: April 1, 2016 (August 28, 2024)
+#=======================================================================
+
+MACH_TEXT = Eureka Intel
+MACH_VALID = 0
+MACH_FILE = Make.mach.eureka-intel
+
+#-----------------------------------------------------------------------
+# Install paths (local variables)
+#-----------------------------------------------------------------------
+
+LOCAL_HDF5_INSTALL = /software/hdf5/default
+LOCAL_FC_INSTALL = /software/intel/oneapi/compiler/default/linux/compiler/lib/intel64
+
+#-----------------------------------------------------------------------
+# Compiler settings
+#-----------------------------------------------------------------------
+
+MACH_CPP = icpc # C preprocessor command
+
+# Compilers
+MACH_CC_NOMPI = icc # C compiler
+MACH_CXX_NOMPI = icpc # C++ compiler
+MACH_FC_NOMPI = ifort # Fortran 77
+MACH_F90_NOMPI = ifort # Fortran 90
+MACH_LD_NOMPI = icpc # Linker
+MACH_LIBTOOL = libtool
+
+#-----------------------------------------------------------------------
+# Machine-dependent defines
+#-----------------------------------------------------------------------
+
+# Note: When compiling against HDF5 version 1.8 or greater, you need to
+# compile HDF5 with --with-default-api-version=v16, or specify with
+# -DH5_USE_16_API.
+
+MACH_DEFINES = -DLINUX -DH5_USE_16_API
+
+#-----------------------------------------------------------------------
+# Compiler flag settings
+#-----------------------------------------------------------------------
+
+MACH_OMPFLAGS = -fopenmp # OpenMP flags
+MACH_CPPFLAGS = -P -traditional # C preprocessor flags
+MACH_CFLAGS = -mp1 -prec_div -fp_port -align # C compiler flags
+MACH_CXXFLAGS = -mp1 -prec_div -fp_port -align # C++ compiler flags
+MACH_FFLAGS = # Fortran 77 compiler flags
+MACH_F90FLAGS = -mp1 -prec_div -fp_port -align #-save -zero # Fortran 90 compiler flags
+MACH_LDFLAGS = #-lifcore -lifport -lpthread -ldl # Linker flags
+
+#-----------------------------------------------------------------------
+# Optimization flags
+#-----------------------------------------------------------------------
+
+MACH_OPT_WARN = # Flags for verbose compiler warnings
+MACH_OPT_DEBUG = -g -O0 # Flags for debugging
+MACH_OPT_HIGH = -O2 # Flags for high conservative optimization
+MACH_OPT_AGGRESSIVE = -O3 #-Mfptrap -Mflushz -fastsse -Mdaz -Mnontemporal -Mnofprelaxed -Mvect=altcode,assoc,prefetch -Kieee # Flags for aggressive optimization
+
+#-----------------------------------------------------------------------
+# Includes
+#-----------------------------------------------------------------------
+
+LOCAL_INCLUDES_HDF5 = -I$(LOCAL_HDF5_INSTALL)/include # HDF5 includes
+MACH_INCLUDES = $(LOCAL_INCLUDES_HDF5)
+
+#-----------------------------------------------------------------------
+# Libraries
+#-----------------------------------------------------------------------
+
+LOCAL_LIBS_HDF5 = -L$(LOCAL_HDF5_INSTALL)/lib -lhdf5 # HDF5 libraries
+LOCAL_LIBS_MACH = -L$(LOCAL_FC_INSTALL) -lm -lifcore -lifport # Machine-dependent libraries
+
+MACH_LIBS = $(LOCAL_LIBS_HDF5) $(LOCAL_LIBS_MACH)
+
+#-----------------------------------------------------------------------
+# Installation
+#-----------------------------------------------------------------------
+
+# if $(HOME)/local does not exist, mkdir before `make install`
+
+### Use this when make omp-on is set
+MACH_INSTALL_PREFIX = /grackle_eureka_double_omp
+### Use this when make omp-off is set
+#MACH_INSTALL_PREFIX = /grackle_eureka_double_no_omp
+MACH_INSTALL_LIB_DIR =
+MACH_INSTALL_INCLUDE_DIR =
diff --git a/example/grackle/Make.mach.spock-intel b/example/grackle/Make.mach.spock-intel
new file mode 100644
index 0000000000..0129b59b38
--- /dev/null
+++ b/example/grackle/Make.mach.spock-intel
@@ -0,0 +1,97 @@
+#=======================================================================
+#
+# FILE: Make.mach.spock-intel
+#
+# DESCRIPTION: Makefile for the calab-ntu Spock GPU cluster with Intel
+# compiler and OpenMP support
+#
+# AUTHOR: Hsi-Yu Schive (modified by Guan-Ming Su, Barry T. Chiang,
+# and Chun-Yen Chen)
+#
+# DATE: April 1, 2016 (August 28, 2024)
+#=======================================================================
+
+MACH_TEXT = Spock Intel
+MACH_VALID = 0
+MACH_FILE = Make.mach.spock-intel
+
+#-----------------------------------------------------------------------
+# Install paths (local variables)
+#-----------------------------------------------------------------------
+
+LOCAL_HDF5_INSTALL = /software/hdf5/1.10.6-intel-2023.1.0
+LOCAL_FC_INSTALL = /software/intel/oneapi/compiler/latest/linux/compiler/lib/intel64
+
+#-----------------------------------------------------------------------
+# Compiler settings
+#-----------------------------------------------------------------------
+
+MACH_CPP = icpc # C preprocessor command
+
+# Compilers
+MACH_CC_NOMPI = icc # C compiler
+MACH_CXX_NOMPI = icpc # C++ compiler
+MACH_FC_NOMPI = ifort # Fortran 77
+MACH_F90_NOMPI = ifort # Fortran 90
+MACH_LD_NOMPI = icpc # Linker
+MACH_LIBTOOL = libtool
+
+#-----------------------------------------------------------------------
+# Machine-dependent defines
+#-----------------------------------------------------------------------
+
+# Note: When compiling against HDF5 version 1.8 or greater, you need to
+# compile HDF5 with --with-default-api-version=v16, or specify with
+# -DH5_USE_16_API.
+
+MACH_DEFINES = -DLINUX -DH5_USE_16_API
+
+#-----------------------------------------------------------------------
+# Compiler flag settings
+#-----------------------------------------------------------------------
+
+MACH_OMPFLAGS = -fopenmp # OpenMP flags
+MACH_CPPFLAGS = -P -traditional # C preprocessor flags
+MACH_CFLAGS = -mp1 -prec_div -fp_port -align # C compiler flags
+MACH_CXXFLAGS = -mp1 -prec_div -fp_port -align # C++ compiler flags
+MACH_FFLAGS = # Fortran 77 compiler flags
+MACH_F90FLAGS = -mp1 -prec_div -fp_port -align #-save -zero # Fortran 90 compiler flags
+MACH_LDFLAGS = #-lifcore -lifport -lpthread -ldl # Linker flags
+
+#-----------------------------------------------------------------------
+# Optimization flags
+#-----------------------------------------------------------------------
+
+MACH_OPT_WARN = # Flags for verbose compiler warnings
+MACH_OPT_DEBUG = -g -O0 # Flags for debugging
+MACH_OPT_HIGH = -O2 # Flags for high conservative optimization
+MACH_OPT_AGGRESSIVE = -O3 #-Mfptrap -Mflushz -fastsse -Mdaz -Mnontemporal -Mnofprelaxed -Mvect=altcode,assoc,prefetch -Kieee # Flags for aggressive optimization
+
+#-----------------------------------------------------------------------
+# Includes
+#-----------------------------------------------------------------------
+
+LOCAL_INCLUDES_HDF5 = -I$(LOCAL_HDF5_INSTALL)/include # HDF5 includes
+MACH_INCLUDES = $(LOCAL_INCLUDES_HDF5)
+
+#-----------------------------------------------------------------------
+# Libraries
+#-----------------------------------------------------------------------
+
+LOCAL_LIBS_HDF5 = -L$(LOCAL_HDF5_INSTALL)/lib -lhdf5 # HDF5 libraries
+LOCAL_LIBS_MACH = -L$(LOCAL_FC_INSTALL) -lm -lifcore -lifport # Machine-dependent libraries
+
+MACH_LIBS = $(LOCAL_LIBS_HDF5) $(LOCAL_LIBS_MACH)
+
+#-----------------------------------------------------------------------
+# Installation
+#-----------------------------------------------------------------------
+
+# if $(HOME)/local does not exist, mkdir before `make install`
+
+### Use this when make omp-on is set
+MACH_INSTALL_PREFIX = /grackle_spock_double_omp
+### Use this when make omp-off is set
+#MACH_INSTALL_PREFIX = /grackle_spock_double_no_omp
+MACH_INSTALL_LIB_DIR =
+MACH_INSTALL_INCLUDE_DIR =
diff --git a/example/grackle/README b/example/grackle/README
new file mode 100644
index 0000000000..bbbad59b4f
--- /dev/null
+++ b/example/grackle/README
@@ -0,0 +1,15 @@
+First-time GRACKLE installation guide (on calab-ntu gpu-clusters as an example):
+========================================
+1. First download the source code by executing "git clone https://github.com/grackle-project/grackle"
+2. Next navigate to "cd grackle". The required UVB interpolation tables can be downloaded via "git submodule update --init"
+3. Next navigate to "./configure; cd src/clib"
+4. Copy into the config files "Make.mach.eureka-intel" or "Make.mach.spock-intel" (from the directory "/example/grackle/") and change the prefix: "MACH_INSTALL_PREFIX = /grackle_spock_double_omp" in "Make.mach.spock-intel" to the path you wish to install the package
+5. Next execute "make clean; make machine-spock-intel" or "make clean; make machine-eureka-intel"
+6. Next execute "make precision-64" (double precision is recommended for GRACKLE) and "make omp-on" (GAMER does utilize OpenMP)
+7. Next execute "make show-config" to verify "CONFIG_PRECISION: 64" and "CONFIG_OMP: on"
+8. Next execute "make save-config-gamer" (save this GAMER-spock specific config setting) and "make load-config-gamer" (load this GAMER-spock specific config setting)
+9. Lastly for code compilation, execute "make -j 4; make install"
+10. To compile the corresponding gamer executable:
+ (1) Add the path "GRACKLE_PATH /grackle_spock_double_omp" to "/configs/spock_intel.config"
+ (2) Copy "generate_make.sh" from the AGORA test problem and change "--machine=spock_intel" in that file, and then execute "sh generate_make.sh"
+ (3) Generate a gamer executable via "make clean; make -j 4"
diff --git a/example/script/clean.sh b/example/script/clean.sh
index dd2cc95324..cc9345ab86 100644
--- a/example/script/clean.sh
+++ b/example/script/clean.sh
@@ -1,6 +1,6 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance Record__Center \
GRACKLE_INFO Record__DivB Record__Hybrid
diff --git a/example/test_problem/ELBDM/DiskHeating/Input__Parameter b/example/test_problem/ELBDM/DiskHeating/Input__Parameter
index 866e5bd8db..6069125174 100644
--- a/example/test_problem/ELBDM/DiskHeating/Input__Parameter
+++ b/example/test_problem/ELBDM/DiskHeating/Input__Parameter
@@ -245,8 +245,8 @@ SPEC_INT_GHOST_BOUNDARY 4 # ghost boundary size for spectral int
# data dump
OPT__OUTPUT_TOTAL 1 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
-OPT__OUTPUT_TEXT_FORMAT_FLT %24.16e # string format of output text files [%24.16e]
+OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
+OPT__OUTPUT_TEXT_FORMAT_FLT %24.16e # string format of floating-point variables in output text files [%24.16e]
OPT__OUTPUT_USER 0 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_PAR_MODE 0 # output the particle data: (0=off, 1=text-file, 2=C-binary) [0] ##PARTICLE ONLY##
OPT__OUTPUT_BASEPS 0 # output the base-level power spectrum [0]
@@ -276,6 +276,7 @@ OUTPUT_PART_X -1.0 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y -1.0 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z -1.0 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# miscellaneous
diff --git a/example/test_problem/ELBDM/DiskHeating/clean.sh b/example/test_problem/ELBDM/DiskHeating/clean.sh
index dd2cc95324..cc9345ab86 100644
--- a/example/test_problem/ELBDM/DiskHeating/clean.sh
+++ b/example/test_problem/ELBDM/DiskHeating/clean.sh
@@ -1,6 +1,6 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance Record__Center \
GRACKLE_INFO Record__DivB Record__Hybrid
diff --git a/example/test_problem/ELBDM/DiskHeating/download_ic.sh b/example/test_problem/ELBDM/DiskHeating/download_ic.sh
index 077cfd9760..fe24da5b58 100644
--- a/example/test_problem/ELBDM/DiskHeating/download_ic.sh
+++ b/example/test_problem/ELBDM/DiskHeating/download_ic.sh
@@ -1,9 +1,17 @@
-filename=disk-heating-ic
+#!/bin/bash
-curl https://girder.hub.yt/api/v1/item/6645cffcff473673ea91b24d/download -o ${filename}.tgz
-tar -zxvf ${filename}.tgz
-rm ${filename}.tgz
-ln -s ${filename}/UM_IC_0.4_M7 UM_IC
-ln -s ${filename}/PAR_IC_0.4_M7_low_res DiskHeatingParticleIC
+LOCAL_FILENAME="disk-heating-ic"
+FILE_ID="677dd2d0999605c485c8de8f"
+FILE_SHA256="5c981ffe1f0cd85237b51e9e2872e8047dad8a87e0419575255e4c1d5d8cf17a"
+# 1 download
+curl https://hub.yt/api/v1/item/${FILE_ID}/download -o "${LOCAL_FILENAME}.tgz"
+# 2. compare sha256sum
+! [ `sha256sum ${LOCAL_FILENAME}.tgz | awk '{print $1}'` = "${FILE_SHA256}" ] && echo "File broken: ${LOCAL_FILENAME}.tgz"
+
+# 3. unzip and link
+tar -zxvf ${LOCAL_FILENAME}.tgz
+rm ${LOCAL_FILENAME}.tgz
+ln -s ${LOCAL_FILENAME}/UM_IC_0.4_M7 UM_IC
+ln -s ${LOCAL_FILENAME}/PAR_IC_0.4_M7_low_res DiskHeatingParticleIC
diff --git a/example/test_problem/ELBDM/DiskHeating/generate_make.sh b/example/test_problem/ELBDM/DiskHeating/generate_make.sh
index 10febea161..19d04c42bc 100644
--- a/example/test_problem/ELBDM/DiskHeating/generate_make.sh
+++ b/example/test_problem/ELBDM/DiskHeating/generate_make.sh
@@ -2,6 +2,6 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --mpi=true --hdf5=true --fftw=FFTW3 --gpu=true \
+${PYTHON} configure.py --mpi=true --hdf5=true --fftw=FFTW3 --gpu=true \
--model=ELBDM --gravity=true --particle=true --store_par_acc=true \
--gsl=true --max_patch=20000000 "$@"
diff --git a/example/test_problem/ELBDM/ExtPot/Input__Parameter b/example/test_problem/ELBDM/ExtPot/Input__Parameter
index 0b560c879e..979c4e4b38 100644
--- a/example/test_problem/ELBDM/ExtPot/Input__Parameter
+++ b/example/test_problem/ELBDM/ExtPot/Input__Parameter
@@ -144,7 +144,7 @@ SPEC_INT_TABLE_PATH ./ # path to tables for spectral interpol
# data dump
OPT__OUTPUT_TOTAL 1 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 7 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 7 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 0 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_BASE 0 # only output the base-level data [0] ##OPT__OUTPUT_PART ONLY##
OPT__OUTPUT_POT 1 # output gravitational potential [1] ##OPT__OUTPUT_TOTAL ONLY##
@@ -156,6 +156,7 @@ OUTPUT_PART_X 0.5 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y 0.5 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z 0.5 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# miscellaneous
diff --git a/example/test_problem/ELBDM/ExtPot/clean.sh b/example/test_problem/ELBDM/ExtPot/clean.sh
index fc58a7e965..e0261d4d97 100644
--- a/example/test_problem/ELBDM/ExtPot/clean.sh
+++ b/example/test_problem/ELBDM/ExtPot/clean.sh
@@ -1,6 +1,6 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance Record__Hybrid
diff --git a/example/test_problem/ELBDM/ExtPot/generate_make.sh b/example/test_problem/ELBDM/ExtPot/generate_make.sh
index ea1818b24a..fab2dfe0c6 100644
--- a/example/test_problem/ELBDM/ExtPot/generate_make.sh
+++ b/example/test_problem/ELBDM/ExtPot/generate_make.sh
@@ -2,5 +2,5 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --mpi=true --hdf5=true --fftw=FFTW3 --gpu=true \
+${PYTHON} configure.py --mpi=true --hdf5=true --fftw=FFTW3 --gpu=true \
--model=ELBDM --gravity=true "$@"
diff --git a/example/test_problem/ELBDM/GaussianWavePacket/Input__Parameter b/example/test_problem/ELBDM/GaussianWavePacket/Input__Parameter
index 69450297e4..fce1aaaafb 100644
--- a/example/test_problem/ELBDM/GaussianWavePacket/Input__Parameter
+++ b/example/test_problem/ELBDM/GaussianWavePacket/Input__Parameter
@@ -136,7 +136,7 @@ SPEC_INT_TABLE_PATH ./ # path to tables for spectral interpol
# data dump
OPT__OUTPUT_TOTAL 0 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 1 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_PAR_MODE 0 # output the particle data: (0=off, 1=text-file, 2=C-binary) [0] ##PARTICLE ONLY##
OPT__OUTPUT_BASEPS 0 # output the base-level power spectrum [0]
@@ -151,6 +151,7 @@ OUTPUT_PART_X 0.0 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y 0.0 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z 0.0 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# miscellaneous
diff --git a/example/test_problem/ELBDM/GaussianWavePacket/clean.sh b/example/test_problem/ELBDM/GaussianWavePacket/clean.sh
index 231f044e13..1ed5787641 100644
--- a/example/test_problem/ELBDM/GaussianWavePacket/clean.sh
+++ b/example/test_problem/ELBDM/GaussianWavePacket/clean.sh
@@ -1,6 +1,6 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance Record__Hybrid
diff --git a/example/test_problem/ELBDM/GaussianWavePacket/generate_make.sh b/example/test_problem/ELBDM/GaussianWavePacket/generate_make.sh
index 36d72b4969..68b0c3d80b 100644
--- a/example/test_problem/ELBDM/GaussianWavePacket/generate_make.sh
+++ b/example/test_problem/ELBDM/GaussianWavePacket/generate_make.sh
@@ -2,4 +2,4 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --model=ELBDM "$@"
+${PYTHON} configure.py --model=ELBDM "$@"
diff --git a/example/test_problem/ELBDM/HaloMerger/Input__Parameter b/example/test_problem/ELBDM/HaloMerger/Input__Parameter
index b6a81826a5..2b5e8d3aeb 100644
--- a/example/test_problem/ELBDM/HaloMerger/Input__Parameter
+++ b/example/test_problem/ELBDM/HaloMerger/Input__Parameter
@@ -186,7 +186,7 @@ SPEC_INT_TABLE_PATH ./ # path to tables for spectral interpol
# data dump
OPT__OUTPUT_TOTAL 1 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 4 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 4 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 0 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_PAR_MODE 1 # output the particle data: (0=off, 1=text-file, 2=C-binary) [0] ##PARTICLE ONLY##
OPT__OUTPUT_BASEPS 0 # output the base-level power spectrum [0]
@@ -201,6 +201,7 @@ OUTPUT_PART_X 0.12938422 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y 0.12938422 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z 0.12938422 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# miscellaneous
diff --git a/example/test_problem/ELBDM/HaloMerger/clean.sh b/example/test_problem/ELBDM/HaloMerger/clean.sh
index aab55a8ee8..2c7ccfacf7 100644
--- a/example/test_problem/ELBDM/HaloMerger/clean.sh
+++ b/example/test_problem/ELBDM/HaloMerger/clean.sh
@@ -1,5 +1,5 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance
diff --git a/example/test_problem/ELBDM/HaloMerger/download_ic.sh b/example/test_problem/ELBDM/HaloMerger/download_ic.sh
index bea2af5a30..24b7398f2a 100644
--- a/example/test_problem/ELBDM/HaloMerger/download_ic.sh
+++ b/example/test_problem/ELBDM/HaloMerger/download_ic.sh
@@ -1,8 +1,15 @@
-filename=HALO_IC_m22_1_Mh_4e9
-link=https://girder.hub.yt/api/v1/item/65e5251f1613cd89a1dfe902/download
+#!/bin/bash
+LOCAL_FILENAME="HALO_IC_m22_1_Mh_4e9"
+FILE_ID="677cc8db999605c485c8de83"
+FILE_SHA256="acbd85842de65ff2360c7f3a1d1101c6f4f8939f430c3f61b8bc5f6f9a72fe94"
-curl ${link} -o ${filename}
+# 1. download
+curl https://hub.yt/api/v1/item/${FILE_ID}/download -o "${LOCAL_FILENAME}"
-ln -s ${filename} HALO_IC_Halo1
-ln -s ${filename} HALO_IC_Halo2
+# 2. compare sha256sum
+! [ `sha256sum ${LOCAL_FILENAME} | awk '{print $1}'` = "${FILE_SHA256}" ] && echo "File broken: ${LOCAL_FILENAME}"
+
+# 3. link
+ln -s ${LOCAL_FILENAME} HALO_IC_Halo1
+ln -s ${LOCAL_FILENAME} HALO_IC_Halo2
diff --git a/example/test_problem/ELBDM/HaloMerger/generate_make.sh b/example/test_problem/ELBDM/HaloMerger/generate_make.sh
index b7c2d9fa1a..3e16ee04f2 100644
--- a/example/test_problem/ELBDM/HaloMerger/generate_make.sh
+++ b/example/test_problem/ELBDM/HaloMerger/generate_make.sh
@@ -2,5 +2,5 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --mpi=true --hdf5=true --fftw=FFTW3 --gpu=true \
+${PYTHON} configure.py --mpi=true --hdf5=true --fftw=FFTW3 --gpu=true \
--model=ELBDM --gravity=true --particle=true --gsl=true "$@"
diff --git a/example/test_problem/ELBDM/IsolatedHalo/Input__Parameter b/example/test_problem/ELBDM/IsolatedHalo/Input__Parameter
index d42b2e7d9c..6a573c0a8d 100644
--- a/example/test_problem/ELBDM/IsolatedHalo/Input__Parameter
+++ b/example/test_problem/ELBDM/IsolatedHalo/Input__Parameter
@@ -185,7 +185,7 @@ SPEC_INT_TABLE_PATH ./ # path to tables for spectral interpol
# data dump
OPT__OUTPUT_TOTAL 1 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 0 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_PAR_MODE 0 # output the particle data: (0=off, 1=text-file, 2=C-binary) [0] ##PARTICLE ONLY##
OPT__OUTPUT_BASEPS 0 # output the base-level power spectrum [0]
@@ -200,6 +200,7 @@ OUTPUT_PART_X -1.0 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y -1.0 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z -1.0 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# yt inline analysis (SUPPORT_LIBYT only)
diff --git a/example/test_problem/ELBDM/IsolatedHalo/clean.sh b/example/test_problem/ELBDM/IsolatedHalo/clean.sh
index 65b1d694e6..72cc1fb33f 100644
--- a/example/test_problem/ELBDM/IsolatedHalo/clean.sh
+++ b/example/test_problem/ELBDM/IsolatedHalo/clean.sh
@@ -1,5 +1,5 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance Record__Hybrid
diff --git a/example/test_problem/ELBDM/IsolatedHalo/download_ic.sh b/example/test_problem/ELBDM/IsolatedHalo/download_ic.sh
index 3ed46f02dd..c417b94e6c 100644
--- a/example/test_problem/ELBDM/IsolatedHalo/download_ic.sh
+++ b/example/test_problem/ELBDM/IsolatedHalo/download_ic.sh
@@ -1,8 +1,16 @@
-filename=UM_IC_run05-halo08-lv4
-link=https://use.yt/upload/d75aa595
+#!/bin/bash
-curl -L ${link} -o ${filename}.tgz
-tar -zxvf ${filename}.tgz
-rm ${filename}.tgz
+LOCAL_FILENAME="UM_IC_run05-halo08-lv4"
+FILE_ID="677cbad6999605c485c8de77"
+FILE_SHA256="7ed91ba48a9aec139e0574629b689090ae43496fb957c6822c7ec1bd1217e22e"
-ln -s ${filename} UM_IC
+# 1. download
+curl https://hub.yt/api/v1/item/${FILE_ID}/download -o "${LOCAL_FILENAME}.tgz"
+
+# 2. compare sha256sum
+! [ `sha256sum ${LOCAL_FILENAME}.tgz | awk '{print $1}'` = "${FILE_SHA256}" ] && echo "File broken: ${LOCAL_FILENAME}.tgz"
+
+# 3. unzip and link
+tar -zxvf ${LOCAL_FILENAME}.tgz
+rm ${LOCAL_FILENAME}.tgz
+ln -s ${LOCAL_FILENAME} UM_IC
diff --git a/example/test_problem/ELBDM/IsolatedHalo/generate_make.sh b/example/test_problem/ELBDM/IsolatedHalo/generate_make.sh
index ea1818b24a..fab2dfe0c6 100644
--- a/example/test_problem/ELBDM/IsolatedHalo/generate_make.sh
+++ b/example/test_problem/ELBDM/IsolatedHalo/generate_make.sh
@@ -2,5 +2,5 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --mpi=true --hdf5=true --fftw=FFTW3 --gpu=true \
+${PYTHON} configure.py --mpi=true --hdf5=true --fftw=FFTW3 --gpu=true \
--model=ELBDM --gravity=true "$@"
diff --git a/example/test_problem/ELBDM/JeansInstabilityComoving/Input__Parameter b/example/test_problem/ELBDM/JeansInstabilityComoving/Input__Parameter
index fe16a22754..64ca5be5f2 100644
--- a/example/test_problem/ELBDM/JeansInstabilityComoving/Input__Parameter
+++ b/example/test_problem/ELBDM/JeansInstabilityComoving/Input__Parameter
@@ -159,7 +159,7 @@ SPEC_INT_TABLE_PATH ./ # path to tables for spectral interpol
# data dump
OPT__OUTPUT_TOTAL 1 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 1 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_BASEPS 0 # output the base-level power spectrum [0]
OPT__OUTPUT_BASE 0 # only output the base-level data [0] ##OPT__OUTPUT_PART ONLY##
@@ -171,6 +171,7 @@ OUTPUT_PART_X -1.0 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y -1.0 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z -1.0 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# miscellaneous
diff --git a/example/test_problem/ELBDM/JeansInstabilityComoving/clean.sh b/example/test_problem/ELBDM/JeansInstabilityComoving/clean.sh
index 345acbb05a..ae41070615 100644
--- a/example/test_problem/ELBDM/JeansInstabilityComoving/clean.sh
+++ b/example/test_problem/ELBDM/JeansInstabilityComoving/clean.sh
@@ -1,6 +1,6 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance Record__Hybrid
diff --git a/example/test_problem/ELBDM/JeansInstabilityComoving/generate_make.sh b/example/test_problem/ELBDM/JeansInstabilityComoving/generate_make.sh
index 29f50a3115..8d1303f304 100644
--- a/example/test_problem/ELBDM/JeansInstabilityComoving/generate_make.sh
+++ b/example/test_problem/ELBDM/JeansInstabilityComoving/generate_make.sh
@@ -2,5 +2,5 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --hdf5=true --gpu=true --fftw=FFTW3 --double=true \
+${PYTHON} configure.py --hdf5=true --gpu=true --fftw=FFTW3 --double=true \
--model=ELBDM --gravity=true --comoving=true "$@"
diff --git a/example/test_problem/ELBDM/LSS/Input__Parameter b/example/test_problem/ELBDM/LSS/Input__Parameter
index c4f3732b83..1c4a252d3d 100644
--- a/example/test_problem/ELBDM/LSS/Input__Parameter
+++ b/example/test_problem/ELBDM/LSS/Input__Parameter
@@ -171,7 +171,7 @@ SPEC_INT_TABLE_PATH ./ # path to tables for spectral interpol
# data dump
OPT__OUTPUT_TOTAL 1 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 0 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_PAR_MODE 0 # output the particle data: (0=off, 1=text-file, 2=C-binary) [0] ##PARTICLE ONLY##
OPT__OUTPUT_BASEPS 1 # output the base-level power spectrum [0]
@@ -186,6 +186,7 @@ OUTPUT_PART_X -1.0 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y -1.0 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z -1.0 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# miscellaneous
diff --git a/example/test_problem/ELBDM/LSS/clean.sh b/example/test_problem/ELBDM/LSS/clean.sh
index 65b1d694e6..72cc1fb33f 100644
--- a/example/test_problem/ELBDM/LSS/clean.sh
+++ b/example/test_problem/ELBDM/LSS/clean.sh
@@ -1,5 +1,5 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance Record__Hybrid
diff --git a/example/test_problem/ELBDM/LSS/download_ic.sh b/example/test_problem/ELBDM/LSS/download_ic.sh
index b27e678417..fa6c23f98d 100644
--- a/example/test_problem/ELBDM/LSS/download_ic.sh
+++ b/example/test_problem/ELBDM/LSS/download_ic.sh
@@ -1,5 +1,14 @@
-filename=Music_InitCondition_z3200_L1.4_N0256_s1002
-link=https://use.yt/upload/4dec54c9
+#!/bin/bash
-curl -L ${link} -o ${filename}
-ln -s ${filename} UM_IC
+LOCAL_FILENAME="Music_InitCondition_z3200_L1.4_N0256_s1002"
+FILE_ID="6780d8d6999605c485c8dea0"
+FILE_SHA256="114fd2a0d37e70ba7bd06907c878bd1c752ea76882ad1833af165696eef8cf9d"
+
+# 1. download
+curl https://hub.yt/api/v1/item/${FILE_ID}/download -o "${LOCAL_FILENAME}"
+
+# 2. compare sha256sum
+! [ `sha256sum ${LOCAL_FILENAME} | awk '{print $1}'` = "${FILE_SHA256}" ] && echo "File broken: ${LOCAL_FILENAME}"
+
+# 3. link
+ln -s ${LOCAL_FILENAME} UM_IC
diff --git a/example/test_problem/ELBDM/LSS/generate_make.sh b/example/test_problem/ELBDM/LSS/generate_make.sh
index 3d3c4e9786..2a102095a1 100644
--- a/example/test_problem/ELBDM/LSS/generate_make.sh
+++ b/example/test_problem/ELBDM/LSS/generate_make.sh
@@ -2,5 +2,5 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --mpi=true --hdf5=true --fftw=FFTW3 --gpu=true \
+${PYTHON} configure.py --mpi=true --hdf5=true --fftw=FFTW3 --gpu=true \
--model=ELBDM --gravity=true --comoving=true "$@"
diff --git a/example/test_problem/ELBDM/LSS_Hybrid/Input__Parameter b/example/test_problem/ELBDM/LSS_Hybrid/Input__Parameter
index ca04a71d29..8bcd29b50e 100644
--- a/example/test_problem/ELBDM/LSS_Hybrid/Input__Parameter
+++ b/example/test_problem/ELBDM/LSS_Hybrid/Input__Parameter
@@ -182,7 +182,7 @@ SPEC_INT_GHOST_BOUNDARY 4 # ghost boundary size for spectral int
# data dump
OPT__OUTPUT_TOTAL 1 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 0 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_PAR_MODE 0 # output the particle data: (0=off, 1=text-file, 2=C-binary) [0] ##PARTICLE ONLY##
OPT__OUTPUT_BASEPS 1 # output the base-level power spectrum [0]
@@ -197,6 +197,7 @@ OUTPUT_PART_X -1.0 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y -1.0 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z -1.0 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# miscellaneous
diff --git a/example/test_problem/ELBDM/LSS_Hybrid/clean.sh b/example/test_problem/ELBDM/LSS_Hybrid/clean.sh
index 65b1d694e6..72cc1fb33f 100644
--- a/example/test_problem/ELBDM/LSS_Hybrid/clean.sh
+++ b/example/test_problem/ELBDM/LSS_Hybrid/clean.sh
@@ -1,5 +1,5 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance Record__Hybrid
diff --git a/example/test_problem/ELBDM/LSS_Hybrid/download_heavy_halo_ic.sh b/example/test_problem/ELBDM/LSS_Hybrid/download_heavy_halo_ic.sh
index 8d03ee68cf..cdf8f8557f 100644
--- a/example/test_problem/ELBDM/LSS_Hybrid/download_heavy_halo_ic.sh
+++ b/example/test_problem/ELBDM/LSS_Hybrid/download_heavy_halo_ic.sh
@@ -1,7 +1,16 @@
-filename=Music_InitCondition_z99_L2.8_N0256_HeavyHalo
-link=https://use.yt/upload/4587e2e6
+#!/bin/bash
-curl -L ${link} -o ${filename}
-ln -sf ${filename} UM_IC_wave_heavy
+LOCAL_FILENAME="Music_InitCondition_z100_L2.8_N0256_HeavyHalo"
+FILE_ID="6780d9d2999605c485c8dea9"
+FILE_SHA256="2f15920763e6189abd81b6f39fd283ebeeb6b6b90dbbce0eb898d098ef4b497d"
+
+# 1. download
+curl https://hub.yt/api/v1/item/${FILE_ID}/download -o "${LOCAL_FILENAME}"
+
+# 2. compare sha256sum
+! [ `sha256sum ${LOCAL_FILENAME} | awk '{print $1}'` = "${FILE_SHA256}" ] && echo "File broken: ${LOCAL_FILENAME}"
+
+# 3. link
+ln -sf ${LOCAL_FILENAME} UM_IC_wave_heavy
python3 elbdm_wave_to_hybrid_IC.py -input UM_IC_wave_heavy -output UM_IC_hybrid_heavy -resolution 256
ln -sf UM_IC_hybrid_heavy UM_IC
diff --git a/example/test_problem/ELBDM/LSS_Hybrid/download_light_halo_ic.sh b/example/test_problem/ELBDM/LSS_Hybrid/download_light_halo_ic.sh
index ca91549205..0143dd78d6 100644
--- a/example/test_problem/ELBDM/LSS_Hybrid/download_light_halo_ic.sh
+++ b/example/test_problem/ELBDM/LSS_Hybrid/download_light_halo_ic.sh
@@ -1,9 +1,20 @@
-filename=Music_InitCondition_z99_L2.8_N0064_LightHalo
-link=https://use.yt/upload/a67d8dd1
+#!/bin/bash
+LOCAL_FILENAME="Music_InitCondition_z100_L2.8_N0064_LightHalo"
+FILE_ID="6780d97e999605c485c8dea6"
+FILE_SHA256="89e1626405e38e3bd756167e3c06719f193456aa8e7d210ddfd13246df0e1a91"
+
+# 1. clean
rm UM_IC*
-curl -L ${link} -o ${filename}
-python3 elbdm_rescale_periodic_IC.py -input ${filename} -output Music_InitCondition_z99_L2.8_N0256_LightHalo -n_in 64 -n_out 256
-ln -sf Music_InitCondition_z99_L2.8_N0256_LightHalo UM_IC_wave_light
+
+# 2. download
+curl https://hub.yt/api/v1/item/${FILE_ID}/download -o "${LOCAL_FILENAME}"
+
+# 3. compare sha256sum
+! [ `sha256sum ${LOCAL_FILENAME} | awk '{print $1}'` = "${FILE_SHA256}" ] && echo "File broken: ${LOCAL_FILENAME}"
+
+# 4. link
+python3 elbdm_rescale_periodic_IC.py -input ${LOCAL_FILENAME} -output Music_InitCondition_z100_L2.8_N0256_LightHalo -n_in 64 -n_out 256
+ln -sf Music_InitCondition_z100_L2.8_N0256_LightHalo UM_IC_wave_light
python3 elbdm_wave_to_hybrid_IC.py -input UM_IC_wave_light -output UM_IC_hybrid_light -resolution 256
ln -sf UM_IC_hybrid_light UM_IC
diff --git a/example/test_problem/ELBDM/LSS_Hybrid/download_spectral_interpolation_tables.sh b/example/test_problem/ELBDM/LSS_Hybrid/download_spectral_interpolation_tables.sh
index 211c7a4470..cc4b930d41 100644
--- a/example/test_problem/ELBDM/LSS_Hybrid/download_spectral_interpolation_tables.sh
+++ b/example/test_problem/ELBDM/LSS_Hybrid/download_spectral_interpolation_tables.sh
@@ -1,6 +1,18 @@
-filename=spectral_tables.zip
-link=https://use.yt/upload/66f39405
+#!/bin/bash
+LOCAL_FILENAME="spectral_tables.zip"
+FILE_ID="6780d950999605c485c8dea3"
+FILE_SHA256="304fb4d098d6ad6f6533f137fc78a4d05d2abf7c239392be29f694503410247f"
+
+# 1. clean
rm -r spectral_tables*
-curl -L ${link} -o ${filename}
-unzip ${filename}
+
+# 2. download
+curl https://hub.yt/api/v1/item/${FILE_ID}/download -o "${LOCAL_FILENAME}"
+
+# 3. compare sha256sum
+! [ `sha256sum ${LOCAL_FILENAME} | awk '{print $1}'` = "${FILE_SHA256}" ] && echo "File broken: ${LOCAL_FILENAME}"
+
+# 4. unzip
+unzip ${LOCAL_FILENAME}
+rm ${LOCAL_FILENAME}
diff --git a/example/test_problem/ELBDM/LSS_Hybrid/generate_make.sh b/example/test_problem/ELBDM/LSS_Hybrid/generate_make.sh
index 50a8a69744..81c9fba21b 100644
--- a/example/test_problem/ELBDM/LSS_Hybrid/generate_make.sh
+++ b/example/test_problem/ELBDM/LSS_Hybrid/generate_make.sh
@@ -2,6 +2,6 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --mpi=true --hdf5=true --fftw=FFTW3 --gpu=true \
+${PYTHON} configure.py --mpi=true --hdf5=true --fftw=FFTW3 --gpu=true \
--model=ELBDM --elbdm_scheme=ELBDM_HYBRID --wave_scheme=WAVE_GRAMFE --gramfe_scheme=GRAMFE_MATMUL \
--gravity=true --comoving=true --gsl=true --spectral_interpolation=true "$@"
diff --git a/example/test_problem/ELBDM/Perturbation/Input__Parameter b/example/test_problem/ELBDM/Perturbation/Input__Parameter
index 5bc450b35c..b57f4b133d 100644
--- a/example/test_problem/ELBDM/Perturbation/Input__Parameter
+++ b/example/test_problem/ELBDM/Perturbation/Input__Parameter
@@ -175,7 +175,7 @@ SPEC_INT_TABLE_PATH ./ # path to tables for spectral interpol
# data dump
OPT__OUTPUT_TOTAL 1 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 0 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_PAR_MODE 0 # output the particle data: (0=off, 1=text-file, 2=C-binary) [0] ##PARTICLE ONLY##
OPT__OUTPUT_BASEPS 0 # output the base-level power spectrum [0]
@@ -190,6 +190,7 @@ OUTPUT_PART_X -1.0 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y -1.0 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z -1.0 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# miscellaneous
OPT__VERBOSE 0 # output the simulation progress in detail [0]
diff --git a/example/test_problem/ELBDM/Perturbation/Input__Parameter_BaseSpectral b/example/test_problem/ELBDM/Perturbation/Input__Parameter_BaseSpectral
index a0209301f7..b4043c7c6a 100644
--- a/example/test_problem/ELBDM/Perturbation/Input__Parameter_BaseSpectral
+++ b/example/test_problem/ELBDM/Perturbation/Input__Parameter_BaseSpectral
@@ -175,7 +175,7 @@ SPEC_INT_TABLE_PATH ./ # path to tables for spectral interpol
# data dump
OPT__OUTPUT_TOTAL 1 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 0 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_PAR_MODE 0 # output the particle data: (0=off, 1=text-file, 2=C-binary) [0] ##PARTICLE ONLY##
OPT__OUTPUT_BASEPS 0 # output the base-level power spectrum [0]
diff --git a/example/test_problem/ELBDM/Perturbation/clean.sh b/example/test_problem/ELBDM/Perturbation/clean.sh
index 716676c079..7d723b7e5a 100644
--- a/example/test_problem/ELBDM/Perturbation/clean.sh
+++ b/example/test_problem/ELBDM/Perturbation/clean.sh
@@ -1,6 +1,6 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance Record__Hybrid
diff --git a/example/test_problem/ELBDM/Perturbation/generate_make.sh b/example/test_problem/ELBDM/Perturbation/generate_make.sh
index fd8e2b6300..382fd3e78a 100644
--- a/example/test_problem/ELBDM/Perturbation/generate_make.sh
+++ b/example/test_problem/ELBDM/Perturbation/generate_make.sh
@@ -2,6 +2,6 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --mpi=true --hdf5=true --fftw=FFTW3 --gpu=true \
+${PYTHON} configure.py --mpi=true --hdf5=true --fftw=FFTW3 --gpu=true \
--model=ELBDM --elbdm_scheme=ELBDM_HYBRID --wave_scheme=WAVE_GRAMFE --gramfe_scheme=GRAMFE_MATMUL \
--gravity=true --comoving=false --gsl=true --spectral_interpolation=true "$@"
diff --git a/example/test_problem/ELBDM/Perturbation/generate_make_BaseSpectral.sh b/example/test_problem/ELBDM/Perturbation/generate_make_BaseSpectral.sh
index 5ac98961d2..18f8a3ea65 100644
--- a/example/test_problem/ELBDM/Perturbation/generate_make_BaseSpectral.sh
+++ b/example/test_problem/ELBDM/Perturbation/generate_make_BaseSpectral.sh
@@ -2,6 +2,6 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --mpi=true --hdf5=true --fftw=FFTW3 \
+${PYTHON} configure.py --mpi=true --hdf5=true --fftw=FFTW3 \
--model=ELBDM --elbdm_scheme=ELBDM_WAVE \
--gravity=true --comoving=false
\ No newline at end of file
diff --git a/example/test_problem/ELBDM/PlaneWave/Input__Parameter b/example/test_problem/ELBDM/PlaneWave/Input__Parameter
index ca768ecb72..d2f4fbc80c 100644
--- a/example/test_problem/ELBDM/PlaneWave/Input__Parameter
+++ b/example/test_problem/ELBDM/PlaneWave/Input__Parameter
@@ -136,7 +136,7 @@ SPEC_INT_TABLE_PATH ./ # path to tables for spectral interpol
# data dump
OPT__OUTPUT_TOTAL 0 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 1 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_PAR_MODE 0 # output the particle data: (0=off, 1=text-file, 2=C-binary) [0] ##PARTICLE ONLY##
OPT__OUTPUT_BASEPS 0 # output the base-level power spectrum [0]
@@ -151,6 +151,7 @@ OUTPUT_PART_X 0.5 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y 0.5 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z 0.5 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# miscellaneous
diff --git a/example/test_problem/ELBDM/PlaneWave/clean.sh b/example/test_problem/ELBDM/PlaneWave/clean.sh
index 7d88bca72e..852a524f5d 100644
--- a/example/test_problem/ELBDM/PlaneWave/clean.sh
+++ b/example/test_problem/ELBDM/PlaneWave/clean.sh
@@ -1,6 +1,6 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance Record__Hybrid
diff --git a/example/test_problem/ELBDM/PlaneWave/generate_make.sh b/example/test_problem/ELBDM/PlaneWave/generate_make.sh
index 269c26b977..7ab268371e 100644
--- a/example/test_problem/ELBDM/PlaneWave/generate_make.sh
+++ b/example/test_problem/ELBDM/PlaneWave/generate_make.sh
@@ -2,4 +2,4 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --model=ELBDM --double=True --passive=1 "$@"
+${PYTHON} configure.py --model=ELBDM --double=True --passive=1 "$@"
diff --git a/example/test_problem/ELBDM/RestrictionMismatch/Input__Parameter_NoRefinement b/example/test_problem/ELBDM/RestrictionMismatch/Input__Parameter_NoRefinement
index 93854be3aa..c469114071 100644
--- a/example/test_problem/ELBDM/RestrictionMismatch/Input__Parameter_NoRefinement
+++ b/example/test_problem/ELBDM/RestrictionMismatch/Input__Parameter_NoRefinement
@@ -138,7 +138,7 @@ SPEC_INT_TABLE_PATH ./ # path to tables for spectral interpol
# data dump
OPT__OUTPUT_TOTAL 1 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 0 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_PAR_TEXT 0 # output the particle text file [0] ##PARTICLE ONLY##
OPT__OUTPUT_BASEPS 0 # output the base-level power spectrum [0]
diff --git a/example/test_problem/ELBDM/RestrictionMismatch/Input__Parameter_PhaseResOff b/example/test_problem/ELBDM/RestrictionMismatch/Input__Parameter_PhaseResOff
index c7f106ab60..dbc9b30f7d 100644
--- a/example/test_problem/ELBDM/RestrictionMismatch/Input__Parameter_PhaseResOff
+++ b/example/test_problem/ELBDM/RestrictionMismatch/Input__Parameter_PhaseResOff
@@ -138,7 +138,7 @@ SPEC_INT_TABLE_PATH ./ # path to tables for spectral interpol
# data dump
OPT__OUTPUT_TOTAL 1 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 0 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_PAR_TEXT 0 # output the particle text file [0] ##PARTICLE ONLY##
OPT__OUTPUT_BASEPS 0 # output the base-level power spectrum [0]
diff --git a/example/test_problem/ELBDM/RestrictionMismatch/Input__Parameter_PhaseResOn b/example/test_problem/ELBDM/RestrictionMismatch/Input__Parameter_PhaseResOn
index db6367d0a5..1678a5946f 100644
--- a/example/test_problem/ELBDM/RestrictionMismatch/Input__Parameter_PhaseResOn
+++ b/example/test_problem/ELBDM/RestrictionMismatch/Input__Parameter_PhaseResOn
@@ -138,7 +138,7 @@ SPEC_INT_TABLE_PATH ./ # path to tables for spectral interpol
# data dump
OPT__OUTPUT_TOTAL 1 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 0 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_PAR_TEXT 0 # output the particle text file [0] ##PARTICLE ONLY##
OPT__OUTPUT_BASEPS 0 # output the base-level power spectrum [0]
diff --git a/example/test_problem/ELBDM/RestrictionMismatch/Input__Parameter_PhaseResOnLongRun b/example/test_problem/ELBDM/RestrictionMismatch/Input__Parameter_PhaseResOnLongRun
index cbe905a010..3f077bb214 100644
--- a/example/test_problem/ELBDM/RestrictionMismatch/Input__Parameter_PhaseResOnLongRun
+++ b/example/test_problem/ELBDM/RestrictionMismatch/Input__Parameter_PhaseResOnLongRun
@@ -138,7 +138,7 @@ SPEC_INT_TABLE_PATH ./ # path to tables for spectral interpol
# data dump
OPT__OUTPUT_TOTAL 1 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 0 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_PAR_TEXT 0 # output the particle text file [0] ##PARTICLE ONLY##
OPT__OUTPUT_BASEPS 0 # output the base-level power spectrum [0]
diff --git a/example/test_problem/ELBDM/RestrictionMismatch/clean.sh b/example/test_problem/ELBDM/RestrictionMismatch/clean.sh
index 65b1d694e6..72cc1fb33f 100644
--- a/example/test_problem/ELBDM/RestrictionMismatch/clean.sh
+++ b/example/test_problem/ELBDM/RestrictionMismatch/clean.sh
@@ -1,5 +1,5 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance Record__Hybrid
diff --git a/example/test_problem/ELBDM/RestrictionMismatch/generate_make.sh b/example/test_problem/ELBDM/RestrictionMismatch/generate_make.sh
index 34da26ce5c..45dc152737 100644
--- a/example/test_problem/ELBDM/RestrictionMismatch/generate_make.sh
+++ b/example/test_problem/ELBDM/RestrictionMismatch/generate_make.sh
@@ -2,4 +2,4 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --model=ELBDM --double=True --hdf5=true --fftw=FFTW3 "$@"
+${PYTHON} configure.py --model=ELBDM --double=True --hdf5=true --fftw=FFTW3 "$@"
diff --git a/example/test_problem/ELBDM/SelfSimilarHalo/Input__Parameter b/example/test_problem/ELBDM/SelfSimilarHalo/Input__Parameter
index f4228edfed..81f858daca 100644
--- a/example/test_problem/ELBDM/SelfSimilarHalo/Input__Parameter
+++ b/example/test_problem/ELBDM/SelfSimilarHalo/Input__Parameter
@@ -151,7 +151,7 @@ SPEC_INT_TABLE_PATH ./ # path to tables for spectral interpol
# data dump
OPT__OUTPUT_TOTAL 1 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 7 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 7 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 0 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_BASEPS 0 # output the base-level power spectrum [0]
OPT__OUTPUT_BASE 0 # only output the base-level data [0] ##OPT__OUTPUT_PART ONLY##
@@ -165,6 +165,7 @@ OUTPUT_PART_X -1.0 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y -1.0 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z -1.0 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# miscellaneous
diff --git a/example/test_problem/ELBDM/SelfSimilarHalo/clean.sh b/example/test_problem/ELBDM/SelfSimilarHalo/clean.sh
index 65b1d694e6..72cc1fb33f 100644
--- a/example/test_problem/ELBDM/SelfSimilarHalo/clean.sh
+++ b/example/test_problem/ELBDM/SelfSimilarHalo/clean.sh
@@ -1,5 +1,5 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance Record__Hybrid
diff --git a/example/test_problem/ELBDM/SelfSimilarHalo/generate_make.sh b/example/test_problem/ELBDM/SelfSimilarHalo/generate_make.sh
index 3d3c4e9786..2a102095a1 100644
--- a/example/test_problem/ELBDM/SelfSimilarHalo/generate_make.sh
+++ b/example/test_problem/ELBDM/SelfSimilarHalo/generate_make.sh
@@ -2,5 +2,5 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --mpi=true --hdf5=true --fftw=FFTW3 --gpu=true \
+${PYTHON} configure.py --mpi=true --hdf5=true --fftw=FFTW3 --gpu=true \
--model=ELBDM --gravity=true --comoving=true "$@"
diff --git a/example/test_problem/ELBDM/Soliton/Input__Parameter b/example/test_problem/ELBDM/Soliton/Input__Parameter
index 14658c9257..da0c0ff967 100644
--- a/example/test_problem/ELBDM/Soliton/Input__Parameter
+++ b/example/test_problem/ELBDM/Soliton/Input__Parameter
@@ -153,7 +153,7 @@ SPEC_INT_TABLE_PATH ./ # path to tables for spectral interpol
# data dump
OPT__OUTPUT_TOTAL 1 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 7 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 7 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 0 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_BASEPS 0 # output the base-level power spectrum [0]
OPT__OUTPUT_BASE 0 # only output the base-level data [0] ##OPT__OUTPUT_PART ONLY##
@@ -165,6 +165,7 @@ OUTPUT_PART_X 192.0 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y 192.0 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z 192.0 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# miscellaneous
diff --git a/example/test_problem/ELBDM/Soliton/clean.sh b/example/test_problem/ELBDM/Soliton/clean.sh
index 65b1d694e6..72cc1fb33f 100644
--- a/example/test_problem/ELBDM/Soliton/clean.sh
+++ b/example/test_problem/ELBDM/Soliton/clean.sh
@@ -1,5 +1,5 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance Record__Hybrid
diff --git a/example/test_problem/ELBDM/Soliton/generate_make.sh b/example/test_problem/ELBDM/Soliton/generate_make.sh
index ea1818b24a..fab2dfe0c6 100644
--- a/example/test_problem/ELBDM/Soliton/generate_make.sh
+++ b/example/test_problem/ELBDM/Soliton/generate_make.sh
@@ -2,5 +2,5 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --mpi=true --hdf5=true --fftw=FFTW3 --gpu=true \
+${PYTHON} configure.py --mpi=true --hdf5=true --fftw=FFTW3 --gpu=true \
--model=ELBDM --gravity=true "$@"
diff --git a/example/test_problem/ELBDM/VortexPairLinear/Input__Parameter b/example/test_problem/ELBDM/VortexPairLinear/Input__Parameter
index 06654c88ad..1b84f3baff 100644
--- a/example/test_problem/ELBDM/VortexPairLinear/Input__Parameter
+++ b/example/test_problem/ELBDM/VortexPairLinear/Input__Parameter
@@ -133,7 +133,7 @@ SPEC_INT_TABLE_PATH ./ # path to tables for spectral interpol
# data dump
OPT__OUTPUT_TOTAL 1 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 5 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 5 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 1 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_BASE 0 # only output the base-level data [0] ##OPT__OUTPUT_PART ONLY##
OPT__OUTPUT_MODE 2 # (1=const step, 2=const dt, 3=dump table) -> edit "Input__DumpTable" for 3
@@ -143,6 +143,7 @@ OUTPUT_PART_X 0.5 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y 0.5 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z 0.0 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# miscellaneous
diff --git a/example/test_problem/ELBDM/VortexPairLinear/clean.sh b/example/test_problem/ELBDM/VortexPairLinear/clean.sh
index b5ee263945..72598c6d81 100644
--- a/example/test_problem/ELBDM/VortexPairLinear/clean.sh
+++ b/example/test_problem/ELBDM/VortexPairLinear/clean.sh
@@ -1,6 +1,6 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance Record__Hybrid
diff --git a/example/test_problem/ELBDM/VortexPairLinear/generate_make.sh b/example/test_problem/ELBDM/VortexPairLinear/generate_make.sh
index 896d289303..2247fa2c3c 100644
--- a/example/test_problem/ELBDM/VortexPairLinear/generate_make.sh
+++ b/example/test_problem/ELBDM/VortexPairLinear/generate_make.sh
@@ -2,4 +2,4 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --model=ELBDM --hdf5=true "$@"
+${PYTHON} configure.py --model=ELBDM --hdf5=true "$@"
diff --git a/example/test_problem/ELBDM/VortexPairLinear_Hybrid/Input__Parameter b/example/test_problem/ELBDM/VortexPairLinear_Hybrid/Input__Parameter
index 2fe42309ae..858464569c 100644
--- a/example/test_problem/ELBDM/VortexPairLinear_Hybrid/Input__Parameter
+++ b/example/test_problem/ELBDM/VortexPairLinear_Hybrid/Input__Parameter
@@ -140,7 +140,7 @@ SPEC_INT_TABLE_PATH ./ # path to tables for spectral interpol
# data dump
OPT__OUTPUT_TOTAL 1 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 5 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 5 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 1 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_BASE 0 # only output the base-level data [0] ##OPT__OUTPUT_PART ONLY##
OPT__OUTPUT_MODE 2 # (1=const step, 2=const dt, 3=dump table) -> edit "Input__DumpTable" for 3
@@ -150,6 +150,7 @@ OUTPUT_PART_X 0.5 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y 0.5 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z 0.0 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# miscellaneous
diff --git a/example/test_problem/ELBDM/VortexPairLinear_Hybrid/clean.sh b/example/test_problem/ELBDM/VortexPairLinear_Hybrid/clean.sh
index b5ee263945..72598c6d81 100644
--- a/example/test_problem/ELBDM/VortexPairLinear_Hybrid/clean.sh
+++ b/example/test_problem/ELBDM/VortexPairLinear_Hybrid/clean.sh
@@ -1,6 +1,6 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance Record__Hybrid
diff --git a/example/test_problem/ELBDM/VortexPairLinear_Hybrid/generate_make.sh b/example/test_problem/ELBDM/VortexPairLinear_Hybrid/generate_make.sh
index c50f009d30..c4f3150c8f 100644
--- a/example/test_problem/ELBDM/VortexPairLinear_Hybrid/generate_make.sh
+++ b/example/test_problem/ELBDM/VortexPairLinear_Hybrid/generate_make.sh
@@ -2,4 +2,4 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --model=ELBDM --elbdm_scheme=ELBDM_HYBRID --hdf5=true --mpi=true "$@"
+${PYTHON} configure.py --model=ELBDM --elbdm_scheme=ELBDM_HYBRID --hdf5=true --mpi=true "$@"
diff --git a/example/test_problem/ELBDM/VortexPairRotating/Input__Parameter b/example/test_problem/ELBDM/VortexPairRotating/Input__Parameter
index 0afea2f99b..0ec78cb919 100644
--- a/example/test_problem/ELBDM/VortexPairRotating/Input__Parameter
+++ b/example/test_problem/ELBDM/VortexPairRotating/Input__Parameter
@@ -133,7 +133,7 @@ SPEC_INT_TABLE_PATH ./ # path to tables for spectral interpol
# data dump
OPT__OUTPUT_TOTAL 1 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 4 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 4 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 1 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_BASE 0 # only output the base-level data [0] ##OPT__OUTPUT_PART ONLY##
OPT__OUTPUT_MODE 2 # (1=const step, 2=const dt, 3=dump table) -> edit "Input__DumpTable" for 3
@@ -143,6 +143,7 @@ OUTPUT_PART_X 0.5 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y 0.5 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z 0.0 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# miscellaneous
diff --git a/example/test_problem/ELBDM/VortexPairRotating/clean.sh b/example/test_problem/ELBDM/VortexPairRotating/clean.sh
index 14d9ffd0c9..2670872215 100644
--- a/example/test_problem/ELBDM/VortexPairRotating/clean.sh
+++ b/example/test_problem/ELBDM/VortexPairRotating/clean.sh
@@ -1,6 +1,6 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance Record__Hybrid
diff --git a/example/test_problem/ELBDM/VortexPairRotating/generate_make.sh b/example/test_problem/ELBDM/VortexPairRotating/generate_make.sh
index 896d289303..2247fa2c3c 100644
--- a/example/test_problem/ELBDM/VortexPairRotating/generate_make.sh
+++ b/example/test_problem/ELBDM/VortexPairRotating/generate_make.sh
@@ -2,4 +2,4 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --model=ELBDM --hdf5=true "$@"
+${PYTHON} configure.py --model=ELBDM --hdf5=true "$@"
diff --git a/example/test_problem/ELBDM/VortexPairRotating_Hybrid/Input__Parameter b/example/test_problem/ELBDM/VortexPairRotating_Hybrid/Input__Parameter
index 34402dfd7b..e9b5dbeea3 100644
--- a/example/test_problem/ELBDM/VortexPairRotating_Hybrid/Input__Parameter
+++ b/example/test_problem/ELBDM/VortexPairRotating_Hybrid/Input__Parameter
@@ -140,7 +140,7 @@ SPEC_INT_TABLE_PATH ./ # path to tables for spectral interpol
# data dump
OPT__OUTPUT_TOTAL 1 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 5 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 5 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 1 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_BASE 0 # only output the base-level data [0] ##OPT__OUTPUT_PART ONLY##
OPT__OUTPUT_MODE 2 # (1=const step, 2=const dt, 3=dump table) -> edit "Input__DumpTable" for 3
@@ -150,6 +150,7 @@ OUTPUT_PART_X 0.5 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y 0.5 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z 0.0 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# miscellaneous
diff --git a/example/test_problem/ELBDM/VortexPairRotating_Hybrid/clean.sh b/example/test_problem/ELBDM/VortexPairRotating_Hybrid/clean.sh
index 14d9ffd0c9..2670872215 100644
--- a/example/test_problem/ELBDM/VortexPairRotating_Hybrid/clean.sh
+++ b/example/test_problem/ELBDM/VortexPairRotating_Hybrid/clean.sh
@@ -1,6 +1,6 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance Record__Hybrid
diff --git a/example/test_problem/ELBDM/VortexPairRotating_Hybrid/generate_make.sh b/example/test_problem/ELBDM/VortexPairRotating_Hybrid/generate_make.sh
index c50f009d30..c4f3150c8f 100644
--- a/example/test_problem/ELBDM/VortexPairRotating_Hybrid/generate_make.sh
+++ b/example/test_problem/ELBDM/VortexPairRotating_Hybrid/generate_make.sh
@@ -2,4 +2,4 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --model=ELBDM --elbdm_scheme=ELBDM_HYBRID --hdf5=true --mpi=true "$@"
+${PYTHON} configure.py --model=ELBDM --elbdm_scheme=ELBDM_HYBRID --hdf5=true --mpi=true "$@"
diff --git a/example/test_problem/Hydro/AGORA_IsolatedGalaxy/Input_Options/Input__Flag_Jeans.high-res b/example/test_problem/Hydro/AGORA_IsolatedGalaxy/Input_Options/Input__Flag_Jeans.high-res
new file mode 100644
index 0000000000..1e38f0cd61
--- /dev/null
+++ b/example/test_problem/Hydro/AGORA_IsolatedGalaxy/Input_Options/Input__Flag_Jeans.high-res
@@ -0,0 +1,13 @@
+# Level Jeans_length/cell_size
+ 0 64.0
+ 1 64.0
+ 2 64.0
+ 3 64.0
+ 4 64.0
+ 5 64.0
+ 6 64.0
+ 7 64.0
+ 8 64.0
+ 9 64.0
+ 10 64.0
+ 11 64.0
diff --git a/example/test_problem/Hydro/AGORA_IsolatedGalaxy/Input__Flag_Jeans b/example/test_problem/Hydro/AGORA_IsolatedGalaxy/Input_Options/Input__Flag_Jeans.low-res
similarity index 100%
rename from example/test_problem/Hydro/AGORA_IsolatedGalaxy/Input__Flag_Jeans
rename to example/test_problem/Hydro/AGORA_IsolatedGalaxy/Input_Options/Input__Flag_Jeans.low-res
diff --git a/example/test_problem/Hydro/AGORA_IsolatedGalaxy/Input_Options/Input__Flag_ParMassCell.high-res b/example/test_problem/Hydro/AGORA_IsolatedGalaxy/Input_Options/Input__Flag_ParMassCell.high-res
new file mode 100644
index 0000000000..705a5d3102
--- /dev/null
+++ b/example/test_problem/Hydro/AGORA_IsolatedGalaxy/Input_Options/Input__Flag_ParMassCell.high-res
@@ -0,0 +1,13 @@
+# Level Total_particle_mass_per_cell
+ 0 1.0035496e-3
+ 1 1.0035496e-3
+ 2 1.0035496e-3
+ 3 1.0035496e-3
+ 4 1.0035496e-3
+ 5 1.0035496e-3
+ 6 1.0035496e-3
+ 7 1.0035496e-3
+ 8 1.0035496e-3
+ 9 1.0035496e-3
+ 10 1.0035496e-3
+ 11 1.0035496e-3
diff --git a/example/test_problem/Hydro/AGORA_IsolatedGalaxy/Input__Flag_ParMassCell b/example/test_problem/Hydro/AGORA_IsolatedGalaxy/Input_Options/Input__Flag_ParMassCell.low-res
similarity index 100%
rename from example/test_problem/Hydro/AGORA_IsolatedGalaxy/Input__Flag_ParMassCell
rename to example/test_problem/Hydro/AGORA_IsolatedGalaxy/Input_Options/Input__Flag_ParMassCell.low-res
diff --git a/example/test_problem/Hydro/AGORA_IsolatedGalaxy/Input_Options/Input__Flag_Rho.high-res b/example/test_problem/Hydro/AGORA_IsolatedGalaxy/Input_Options/Input__Flag_Rho.high-res
new file mode 100644
index 0000000000..2e89dbee6c
--- /dev/null
+++ b/example/test_problem/Hydro/AGORA_IsolatedGalaxy/Input_Options/Input__Flag_Rho.high-res
@@ -0,0 +1,12 @@
+# Level Density
+ 0 3.125751391053200e-10
+ 1 2.500601112842560e-09
+ 2 2.000480890274048e-08
+ 3 1.600384712219238e-07
+ 4 1.280307769775391e-06
+ 5 1.024246215820313e-05
+ 6 8.193969726562500e-05
+ 7 6.555175781250000e-04
+ 8 5.244140625000000e-03
+ 9 4.195312500000000e-02
+ 10 3.356250000000000e-01
diff --git a/example/test_problem/Hydro/AGORA_IsolatedGalaxy/Input__Flag_Rho b/example/test_problem/Hydro/AGORA_IsolatedGalaxy/Input_Options/Input__Flag_Rho.low-res
similarity index 100%
rename from example/test_problem/Hydro/AGORA_IsolatedGalaxy/Input__Flag_Rho
rename to example/test_problem/Hydro/AGORA_IsolatedGalaxy/Input_Options/Input__Flag_Rho.low-res
diff --git a/example/test_problem/Hydro/AGORA_IsolatedGalaxy/Input_Options/Input__Parameter.high-res b/example/test_problem/Hydro/AGORA_IsolatedGalaxy/Input_Options/Input__Parameter.high-res
new file mode 100644
index 0000000000..40ea1be1a9
--- /dev/null
+++ b/example/test_problem/Hydro/AGORA_IsolatedGalaxy/Input_Options/Input__Parameter.high-res
@@ -0,0 +1,263 @@
+
+
+# =================================================================================================================
+# NOTE:
+# 1. Comment symbol: #
+# 2. [*]: defaults
+# 3. Parameters set to "auto" (usually by setting to a negative value) do not have deterministic default values
+# and will be set according to the adopted compilation options and/or other runtime parameters
+# 4. To add new parameters, please edit "Init/Init_Load_Parameter.cpp"
+# 5. All dimensional variables should be set consistently with the code units (set by UNIT_L/M/T/V/D)
+# 6. For boolean options: 0/1 -> off/on
+# =================================================================================================================
+
+
+# simulation scale
+BOX_SIZE 1.31072e3 # box size along the longest side (in Mpc/h if COMOVING is adopted)
+NX0_TOT_X 128 # number of base-level cells along x
+NX0_TOT_Y 128 # number of base-level cells along y
+NX0_TOT_Z 128 # number of base-level cells along z
+OMP_NTHREAD -1 # number of OpenMP threads (<=0=auto) [-1] ##OPENMP ONLY##
+END_T -1.0 # end physical time (<0=auto -> must be set by test problems or restart) [-1.0]
+END_STEP -1 # end step (<0=auto -> must be set by test problems or restart) [-1]
+
+
+# test problems
+TESTPROB_ID 5 # test problem ID [0]
+ # 0: none
+ # 1: HYDRO blast wave
+ # 2: HYDRO acoustic wave
+ # 3: HYDRO Bondi accretion (+GRAVITY)
+ # 4: HYDRO cluster merger vs. Flash (+GRAVITY)
+ # 5: HYDRO AGORA isolated galaxy (+GRAVITY)
+ # 1000: ELBDM external potential (+GRAVITY)
+
+
+# code units (in cgs)
+OPT__UNIT 1 # specify code units -> must set exactly 3 basic units below [0] ##USELESS FOR COMOVING##
+UNIT_L 3.08567758149e21 # length unit (<=0 -> set to UNIT_V*UNIT_T or (UNIT_M/UNIT_D)^(1/3)) [-1.0]
+UNIT_M 1.9885e42 # mass unit (<=0 -> set to UNIT_D*UNIT_L^3) [-1.0]
+UNIT_T 3.15569252e13 # time unit (<=0 -> set to UNIT_L/UNIT_V) [-1.0]
+UNIT_V -1.0 # velocity unit (<=0 -> set to UNIT_L/UNIT_T) [-1.0]
+UNIT_D -1.0 # mass density unit (<=0 -> set to UNIT_M/UNIT_L^3) [-1.0]
+
+
+# boundary conditions
+OPT__BC_FLU_XM 2 # fluid boundary condition at the -x face: (1=periodic, 2=outflow, 3=reflecting, 4=user, 5=diode)
+OPT__BC_FLU_XP 2 # fluid boundary condition at the +x face: (1=periodic, 2=outflow, 3=reflecting, 4=user, 5=diode)
+OPT__BC_FLU_YM 2 # fluid boundary condition at the -y face: (1=periodic, 2=outflow, 3=reflecting, 4=user, 5=diode)
+OPT__BC_FLU_YP 2 # fluid boundary condition at the +y face: (1=periodic, 2=outflow, 3=reflecting, 4=user, 5=diode)
+OPT__BC_FLU_ZM 2 # fluid boundary condition at the -z face: (1=periodic, 2=outflow, 3=reflecting, 4=user, 5=diode)
+OPT__BC_FLU_ZP 2 # fluid boundary condition at the +z face: (1=periodic, 2=outflow, 3=reflecting, 4=user, 5=diode)
+OPT__BC_POT 2 # gravity boundary condition: (1=periodic, 2=isolated)
+
+
+# particle (PARTICLE only)
+PAR_NPAR 21250000 # total number of particles (must be set for PAR_INIT == 1/3)
+PAR_INIT 1 # initialization option for particles: (1=FUNCTION, 2=RESTART, 3=FILE->"PAR_IC")
+PAR_INTERP 2 # particle interpolation scheme: (1=NGP, 2=CIC, 3=TSC) [2]
+PAR_INTEG 2 # particle integration scheme: (1=Euler, 2=KDK) [2]
+PAR_IMPROVE_ACC 1 # improve force accuracy at patch boundaries [1] ##STORE_POT_GHOST and PAR_INTERP=2/3 ONLY##
+PAR_PREDICT_POS 1 # predict particle position during mass assignment [1]
+PAR_REMOVE_CELL -1.0 # remove particles X-root-cells from the boundaries (non-periodic BC only; <0=auto) [-1.0]
+
+
+# time-step
+DT__FLUID 0.5 # dt criterion: fluid solver CFL factor (<0=auto) [-1.0]
+DT__FLUID_INIT -1.0 # dt criterion: DT__FLUID at the first step (<0=auto) [-1.0]
+DT__GRAVITY 0.35355 # dt criterion: gravity solver safety factor (<0=auto) [-1.0]
+DT__PARVEL 0.5 # dt criterion: particle velocity safety factor [0.5]
+DT__PARVEL_MAX -1.0 # dt criterion: maximum allowed dt from particle velocity (<0=off) [-1.0]
+DT__PARACC 0.0 # dt criterion: particle acceleration safety factor (0=off) [0.5] ##STORE_PAR_ACC ONLY##
+DT__SYNC_PARENT_LV 0.05 # dt criterion: allow dt to adjust by (1.0+DT__SYNC_PARENT) in order to synchronize
+ # with the parent level (for OPT__DT_LEVEL==3 only) [0.1]
+DT__SYNC_CHILDREN_LV 0.1 # dt criterion: allow dt to adjust by (1.0-DT__SYNC_CHILDREN) in order to synchronize
+ # with the children level (for OPT__DT_LEVEL==3 only; 0=off) [0.1]
+OPT__DT_USER 0 # dt criterion: user-defined -> edit "Mis_GetTimeStep_UserCriteria.cpp" [0]
+OPT__DT_LEVEL 3 # dt at different AMR levels (1=shared, 2=differ by two, 3=flexible) [3]
+OPT__RECORD_DT 1 # record info of the dt determination [1]
+AUTO_REDUCE_DT 1 # reduce dt automatically when the program fails (for OPT__DT_LEVEL==3 only) [1]
+AUTO_REDUCE_DT_FACTOR 1.0 # reduce dt by a factor of AUTO_REDUCE_DT_FACTOR when the program fails [1.0]
+AUTO_REDUCE_DT_FACTOR_MIN 0.1 # minimum allowed AUTO_REDUCE_DT_FACTOR after consecutive failures [0.1]
+AUTO_REDUCE_MINMOD_FACTOR 0.8 # reduce MINMOD_COEFF by this factor together with AUTO_REDUCE_DT (1.0=off) [0.8] ##HYDRO ONLY##
+AUTO_REDUCE_MINMOD_MIN 1.0e-2 # minimum allowed MINMOD_COEFF after consecutive failures [1.0e-2] ##HYDRO ONLY##
+AUTO_REDUCE_INT_MONO_FACTOR 0.8 # reduce INT_MONO_COEFF(_B) by this factor together with AUTO_REDUCE_DT (1.0=off) [0.8]
+AUTO_REDUCE_INT_MONO_MIN 1.0e-2 # minimum allowed INT_MONO_COEFF(_B) after consecutive failures [1.0e-2]
+
+
+# grid refinement (examples of Input__Flag_XXX tables are put at "example/input/")
+REGRID_COUNT 4 # refine every REGRID_COUNT sub-step [4]
+FLAG_BUFFER_SIZE -1 # number of buffer cells for the flag operation (0~PATCH_SIZE; <0=auto -> PATCH_SIZE) [-1]
+FLAG_BUFFER_SIZE_MAXM1_LV 2 # FLAG_BUFFER_SIZE at the level MAX_LEVEL-1 (<0=auto -> REGRID_COUNT) [-1]
+FLAG_BUFFER_SIZE_MAXM2_LV -1 # FLAG_BUFFER_SIZE at the level MAX_LEVEL-2 (<0=auto) [-1]
+MAX_LEVEL 9 # maximum refinement level (0~NLEVEL-1) [NLEVEL-1]
+OPT__FLAG_RHO 1 # flag: density (Input__Flag_Rho) [0]
+OPT__FLAG_RHO_GRADIENT 0 # flag: density gradient (Input__Flag_RhoGradient) [0]
+OPT__FLAG_PRES_GRADIENT 0 # flag: pressure gradient (Input__Flag_PresGradient) [0] ##HYDRO ONLY##
+OPT__FLAG_VORTICITY 0 # flag: vorticity (Input__Flag_Vorticity) [0] ##HYDRO ONLY##
+OPT__FLAG_JEANS 1 # flag: Jeans length (Input__Flag_Jeans) [0] ##HYDRO ONLY##
+OPT__FLAG_LOHNER_DENS 0 # flag: Lohner for mass density (Input__Flag_Lohner) [0] ##BOTH HYDRO AND ELBDM##
+OPT__FLAG_LOHNER_ENGY 0 # flag: Lohner for energy density (Input__Flag_Lohner) [0] ##HYDRO ONLY##
+OPT__FLAG_LOHNER_PRES 0 # flag: Lohner for pressure (Input__Flag_Lohner) [0] ##HYDRO ONLY##
+OPT__FLAG_LOHNER_TEMP 0 # flag: Lohner for temperature (Input__Flag_Lohner) [0] ##HYDRO ONLY##
+OPT__FLAG_LOHNER_ENTR 0 # flag: Lohner for entropy (Input__Flag_Lohner) [0] ##HYDRO ONLY##
+OPT__FLAG_LOHNER_FORM 2 # form of Lohner: (1=FLASH-1, 2=FLASH-2, 3=form-invariant-1, 4=form-invariant-2) [2]
+OPT__FLAG_USER 1 # flag: user-defined (Input__Flag_User) -> edit "Flag_User.cpp" [0]
+OPT__FLAG_REGION 0 # flag: specify the regions **allowed** to be refined -> edit "Flag_Region.cpp" [0]
+OPT__FLAG_NPAR_PATCH 0 # flag: # of particles per patch (Input__Flag_NParPatch): (0=off, 1=itself, 2=itself+siblings) [0]
+OPT__FLAG_NPAR_CELL 0 # flag: # of particles per cell (Input__Flag_NParCell) [0]
+OPT__FLAG_PAR_MASS_CELL 1 # flag: total particle mass per cell (Input__Flag_ParMassCell) [0]
+OPT__NO_FLAG_NEAR_BOUNDARY 0 # flag: disallow refinement near the boundaries [0]
+OPT__PATCH_COUNT 1 # record the # of patches at each level: (0=off, 1=every step, 2=every sub-step) [1]
+OPT__PARTICLE_COUNT 1 # record the # of particles at each level: (0=off, 1=every step, 2=every sub-step) [1]
+OPT__REUSE_MEMORY 2 # reuse patch memory to reduce memory fragmentation: (0=off, 1=on, 2=aggressive) [2]
+OPT__MEMORY_POOL 0 # preallocate patches for OPT__REUSE_MEMORY=1/2 (Input__MemoryPool) [0]
+
+
+# load balance (LOAD_BALANCE only)
+LB_INPUT__WLI_MAX 0.1 # weighted-load-imbalance (WLI) threshold for redistributing all patches [0.1]
+LB_INPUT__PAR_WEIGHT 0.0 # load-balance weighting of one particle over one cell [0.0]
+OPT__RECORD_LOAD_BALANCE 1 # record the load-balance info [1]
+OPT__MINIMIZE_MPI_BARRIER 0 # minimize MPI barriers to improve load balance, especially with particles [0]
+ # (STORE_POT_GHOST, PAR_IMPROVE_ACC=1, OPT__TIMING_BARRIER=0 only; recommend AUTO_REDUCE_DT=0)
+
+
+# Grackle library for chemistry and radiative cooling (SUPPORT_GRACKLE only)
+GRACKLE_ACTIVATE 1 # enable Grackle [1]
+GRACKLE_VERBOSE 1 # map to "grackle_verbose" [1]
+GRACKLE_COOLING 1 # ... "with_radiative_cooling" [1]
+GRACKLE_PRIMORDIAL 0 # ... "primordial_chemistry" (0=Cloudy, 1/2/3=6-/9-/12-species) [0]
+GRACKLE_METAL 1 # ... "metal_cooling" (must increase NCOMP_PASSIVE_USER by 1) [0]
+GRACKLE_UV 1 # ... "UVbackground" [0]
+GRACKLE_CMB_FLOOR 1 # ... "cmb_temperature_floor" [1]
+GRACKLE_PE_HEATING 1 # ... "photoelectric_heating" [0]
+GRACKLE_PE_HEATING_RATE 8.5e-26 # ... "photoelectric_heating_rate (in erg/cm^3/s)" [8.5e-26]
+GRACKLE_CLOUDY_TABLE CloudyData_UVB=HM2012.h5 # "grackle_data_file"
+CHE_GPU_NPGROUP -1 # number of patch groups sent into the CPU/GPU Grackle solver (<=0=auto) [-1]
+
+
+# star formation (STAR_FORMATION only)
+SF_CREATE_STAR_SCHEME 1 # star formation schemes (0=off, 1=AGORA) [0]
+SF_CREATE_STAR_RSEED 123 # random seed [123]
+SF_CREATE_STAR_DET_RANDOM -1 # make random numbers deterministic (i.e., independent of OpenMP and MPI, <0=auto) [-1]
+SF_CREATE_STAR_MIN_LEVEL -1 # minimum AMR level allowed to form stars (<0=auto -> MAX_LEVEL) [0]
+SF_CREATE_STAR_MIN_GAS_DENS 2.0e1 # minimum gas density allowed to form stars (in HI count/cm^3) [1.0e1]
+SF_CREATE_STAR_MASS_EFF 1.0e-2 # Gas-to-star mass conversion efficiency [1.0e-2]
+SF_CREATE_STAR_MIN_STAR_MASS 2.0e3 # minimum star particle mass for the stochastical star formation (in Msun) [0.0]
+SF_CREATE_STAR_MAX_STAR_MFRAC 0.5 # maximum gas mass fraction allowed to convert to stars per substep [0.5]
+
+
+# fluid solver in HYDRO (MODEL==HYDRO only)
+GAMMA 1.666667 # ratio of specific heats (i.e., adiabatic index) [5.0/3.0]
+MOLECULAR_WEIGHT 0.6 # mean molecular weight -> currently only for post-processing [0.6]
+MINMOD_COEFF 1.0 # coefficient of the generalized MinMod limiter (1.0~2.0) [1.5]
+MINMOD_MAX_ITER 0 # maximum number of iterations to reduce MINMOD_COEFF when data reconstruction fails (0=off) [0]
+OPT__LR_LIMITER -1 # slope limiter of data reconstruction in the MHM/MHM_RP/CTU schemes:
+ # (-1=auto, 0=none, 1=vanLeer, 2=generalized MinMod, 3=vanAlbada, 4=vanLeer+generalized MinMod, 6=central, 7=Athena) [-1]
+OPT__1ST_FLUX_CORR -1 # correct unphysical results (defined by MIN_DENS/PRES) by the 1st-order fluxes:
+ # (<0=auto, 0=off, 1=3D, 2=3D+1D) [-1] ##MHM/MHM_RP/CTU ONLY##
+OPT__1ST_FLUX_CORR_SCHEME -1 # Riemann solver for OPT__1ST_FLUX_CORR (<0=auto, 0=none, 1=Roe, 2=HLLC, 3=HLLE, 4=HLLD) [-1]
+DUAL_ENERGY_SWITCH 2.0e-1 # apply dual-energy if E_int/E_kin < DUAL_ENERGY_SWITCH [2.0e-2] ##DUAL_ENERGY ONLY##
+
+
+# fluid solvers in all models
+FLU_GPU_NPGROUP -1 # number of patch groups sent into the GPU fluid solver (<=0=auto) [-1]
+GPU_NSTREAM -1 # number of CUDA streams for the asynchronous memory copy in GPU (<=0=auto) [-1]
+OPT__FIXUP_FLUX 1 # correct coarse grids by the fine-grid boundary fluxes [1] ##HYDRO and ELBDM ONLY##
+OPT__FIXUP_RESTRICT 1 # correct coarse grids by averaging the fine-grid data [1]
+OPT__CORR_AFTER_ALL_SYNC -1 # apply various corrections after all levels are synchronized (see "Flu_CorrAfterAllSync"):
+ # (-1=auto, 0=off, 1=every step, 2=before dump) [-1]
+OPT__NORMALIZE_PASSIVE 0 # ensure "sum(passive_scalar_density) == gas_density" [1]
+MIN_DENS 0.0 # minimum mass density (must >= 0.0) [0.0] ##HYDRO, MHD, and ELBDM ONLY##
+MIN_PRES 1.0e-15 # minimum pressure (must >= 0.0) [0.0] ##HYDRO and MHD ONLY##
+MIN_EINT 1.0e-15 # minimum internal energy (must >= 0.0) [0.0] ##HYDRO and MHD ONLY##
+MIN_ENTR 0.0 # minimum entropy (must >= 0.0) [0.0] ##HYDRO and MHD ONLY##
+JEANS_MIN_PRES 1 # minimum pressure estimated from the Jeans length [0] ##HYDRO/MHD and GRAVITY ONLY##
+JEANS_MIN_PRES_LEVEL -1 # for JEANS_MIN_PRES; ensure Jeans length is resolved by JEANS_MIN_PRES_NCELL*dh[JEANS_MIN_PRES_LEVEL]
+ # (<0=auto -> MAX_LEVEL) [-1]
+JEANS_MIN_PRES_NCELL 4 # for JEANS_MIN_PRES; see JEANS_MIN_PRES_LEVEL [4]
+
+
+# gravity solvers in all models
+NEWTON_G 1.0 # gravitational constant (will be overwritten if OPT__UNIT or COMOVING is on)
+SOR_OMEGA -1.0 # over-relaxation parameter in SOR: (<0=auto) [-1.0]
+SOR_MAX_ITER -1 # maximum number of iterations in SOR: (<0=auto) [-1]
+SOR_MIN_ITER -1 # minimum number of iterations in SOR: (<0=auto) [-1]
+POT_GPU_NPGROUP -1 # number of patch groups sent into the GPU Poisson solver (<=0=auto) [-1]
+OPT__GRA_P5_GRADIENT 0 # 5-points gradient in the Gravity solver (must have GRA/USG_GHOST_SIZE_G>=2) [0]
+OPT__SELF_GRAVITY 1 # add self-gravity [1]
+OPT__EXT_ACC 0 # add external acceleration (0=off, 1=function, 2=table) [0] ##HYDRO ONLY##
+OPT__EXT_POT 0 # add external potential (0=off, 1=function, 2=table) [0]
+
+
+# initialization
+OPT__INIT 1 # initialization option: (1=FUNCTION, 2=RESTART, 3=FILE->"UM_IC")
+RESTART_LOAD_NRANK 256 # number of parallel I/O (i.e., number of MPI ranks) for restart [1]
+OPT__INIT_RESTRICT 1 # restrict all data during the initialization [1]
+OPT__GPUID_SELECT -1 # GPU ID selection mode: (-3=Laohu, -2=CUDA, -1=MPI rank, >=0=input) [-1]
+INIT_SUBSAMPLING_NCELL 0 # perform sub-sampling during initialization: (0=off, >0=# of sub-sampling cells) [0]
+
+
+# interpolation schemes: (-1=auto, 1=MinMod-3D, 2=MinMod-1D, 3=vanLeer, 4=CQuad, 5=Quad, 6=CQuar, 7=Quar)
+OPT__FLU_INT_SCHEME -1 # ghost-zone fluid variables for the fluid solver [-1]
+OPT__REF_FLU_INT_SCHEME -1 # newly allocated fluid variables during grid refinement [-1]
+OPT__POT_INT_SCHEME 4 # ghost-zone potential for the Poisson solver (only supports 4 & 5) [4]
+OPT__RHO_INT_SCHEME 4 # ghost-zone mass density for the Poisson solver [4]
+OPT__GRA_INT_SCHEME 4 # ghost-zone potential for the gravity solver (for UNSPLIT_GRAVITY as well) [4]
+OPT__REF_POT_INT_SCHEME 4 # newly allocated potential during grid refinement [4]
+INT_MONO_COEFF 2.0 # coefficient for ensuring the interpolation monotonicity (1.0~4.0) [2.0]
+MONO_MAX_ITER 10 # maximum number of iterations to reduce INT_MONO_COEFF when interpolation fails (0=off) [10]
+
+
+# data dump
+OPT__OUTPUT_TOTAL 1 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
+OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
+OPT__OUTPUT_USER 0 # output the user-specified data -> edit "Output_User.cpp" [0]
+OPT__OUTPUT_PAR_MODE 0 # output the particle data: (0=off, 1=text-file, 2=C-binary) [0] ##PARTICLE ONLY##
+OPT__OUTPUT_POT 1 # output gravitational potential [1] ##OPT__OUTPUT_TOTAL ONLY##
+OPT__OUTPUT_PAR_DENS 1 # output the particle or total mass density on grids:
+ # (0=off, 1=particle mass density, 2=total mass density) [1] ##OPT__OUTPUT_TOTAL ONLY##
+OPT__OUTPUT_PRES 0 # output gas pressure [0] ##HYDRO ONLY##
+OPT__OUTPUT_TEMP 0 # output gas temperature [0] ##HYDRO ONLY##
+OPT__OUTPUT_ENTR 0 # output gas entropy [0] ##HYDRO ONLY##
+OPT__OUTPUT_CS 0 # output sound speed [0] ##HYDRO ONLY##
+OPT__OUTPUT_DIVVEL 0 # output divergence(velocity) [0] ##HYDRO ONLY##
+OPT__OUTPUT_MACH 0 # output mach number [0] ##HYDRO ONLY##
+OPT__OUTPUT_DIVMAG 0 # output |divergence(B)*dh/|B|| [0] ##MHD ONLY##
+OPT__OUTPUT_LORENTZ 0 # output Lorentz factor [0] ##SRHD ONLY##
+OPT__OUTPUT_3VELOCITY 0 # output 3-velocities [0] ##SRHD ONLY##
+OPT__OUTPUT_USER_FIELD 0 # output user-defined derived fields [0] -> edit "Flu_DerivedField_User.cpp"
+OPT__OUTPUT_MODE 2 # (1=const step, 2=const dt, 3=dump table) -> edit "Input__DumpTable" for 3
+OUTPUT_STEP 5 # output data every OUTPUT_STEP step ##OPT__OUTPUT_MODE==1 ONLY##
+OUTPUT_DT 1.0e1 # output data every OUTPUT_DT time interval ##OPT__OUTPUT_MODE==2 ONLY##
+OUTPUT_PART_X -1.0 # x coordinate for OPT__OUTPUT_PART [-1.0]
+OUTPUT_PART_Y -1.0 # y coordinate for OPT__OUTPUT_PART [-1.0]
+OUTPUT_PART_Z -1.0 # z coordinate for OPT__OUTPUT_PART [-1.0]
+INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+
+
+# miscellaneous
+OPT__VERBOSE 0 # output the simulation progress in detail [0]
+OPT__TIMING_BARRIER -1 # synchronize before timing -> more accurate, but may slow down the run (<0=auto) [-1]
+OPT__TIMING_BALANCE 0 # record the max/min elapsed time in various code sections for checking load balance [0]
+OPT__TIMING_MPI 0 # record the MPI bandwidth achieved in various code sections [0] ##LOAD_BALANCE ONLY##
+OPT__RECORD_MEMORY 1 # record the memory consumption [1]
+OPT__RECORD_PERFORMANCE 1 # record the code performance [1]
+OPT__MANUAL_CONTROL 1 # support manually dump data or stop run during the runtime
+ # (by generating the file DUMP_GAMER_DUMP or STOP_GAMER_STOP) [1]
+OPT__RECORD_USER 0 # record the user-specified info -> edit "Aux_Record_User.cpp" [0]
+OPT__OPTIMIZE_AGGRESSIVE 1 # apply aggressive optimizations (experimental) [0]
+
+
+# checks
+OPT__CK_REFINE 0 # check the grid refinement [0]
+OPT__CK_PROPER_NESTING 0 # check the proper-nesting condition [0]
+OPT__CK_CONSERVATION 1 # check the conservation law [0]
+OPT__CK_NORMALIZE_PASSIVE 0 # check the normalization of passive scalars [0] ##OPT__NORMALIZE_PASSIVE ONLY##
+OPT__CK_RESTRICT 0 # check the data restriction [0]
+OPT__CK_FINITE 0 # check if all variables are finite [0]
+OPT__CK_PATCH_ALLOCATE 0 # check if all patches are properly allocated [0]
+OPT__CK_FLUX_ALLOCATE 0 # check if all flux arrays are properly allocated ##HYDRO and ELBDM ONLY## [0]
+OPT__CK_NEGATIVE 0 # check the negative values: (0=off, 1=density, 2=pressure and entropy, 3=both) [0] ##HYDRO ONLY##
+OPT__CK_MEMFREE 1.0 # check the free memory in GB (0=off, >0=threshold) [1.0]
+OPT__CK_PARTICLE 0 # check the particle allocation [0]
diff --git a/example/test_problem/Hydro/AGORA_IsolatedGalaxy/Input__Parameter b/example/test_problem/Hydro/AGORA_IsolatedGalaxy/Input_Options/Input__Parameter.low-res
similarity index 99%
rename from example/test_problem/Hydro/AGORA_IsolatedGalaxy/Input__Parameter
rename to example/test_problem/Hydro/AGORA_IsolatedGalaxy/Input_Options/Input__Parameter.low-res
index 6117695cb8..41980091c2 100644
--- a/example/test_problem/Hydro/AGORA_IsolatedGalaxy/Input__Parameter
+++ b/example/test_problem/Hydro/AGORA_IsolatedGalaxy/Input_Options/Input__Parameter.low-res
@@ -211,7 +211,7 @@ MONO_MAX_ITER 10 # maximum number of iterations to redu
# data dump
OPT__OUTPUT_TOTAL 1 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 0 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_PAR_MODE 0 # output the particle data: (0=off, 1=text-file, 2=C-binary) [0] ##PARTICLE ONLY##
OPT__OUTPUT_POT 1 # output gravitational potential [1] ##OPT__OUTPUT_TOTAL ONLY##
@@ -234,6 +234,7 @@ OUTPUT_PART_X -1.0 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y -1.0 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z -1.0 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# miscellaneous
diff --git a/example/test_problem/Hydro/AGORA_IsolatedGalaxy/README b/example/test_problem/Hydro/AGORA_IsolatedGalaxy/README
index 835baed863..99589750c1 100644
--- a/example/test_problem/Hydro/AGORA_IsolatedGalaxy/README
+++ b/example/test_problem/Hydro/AGORA_IsolatedGalaxy/README
@@ -4,7 +4,7 @@ Enable : MODEL=HYDRO, PARTICLE, GRAVITY, DUAL_ENERGY
Disable: COMOVING
-Default setup:
+Simulation setup:
========================================
1. Units:
(1) External (for Input__TestProb only):
@@ -12,12 +12,19 @@ Default setup:
(2) Internal (for all other input files and internal usage):
[L] = kpc
- [M] = 1.0e8 Msun
+ [M] = 1.0e9 Msun
[T] = Myr
-->[V] = [L]/[T] ~ 9.8e2 km/s
-->[D] = [M]/[D]^3 ~ 6.8e-23 g/cm^3
-2. Default resolution ~ 80 pc (MAX_LEVEL = 7)
+2. Low-resolution default setup
+ (1) Download the low-resolution initial conditions and Input_* by executing "sh download_ic_low_res.sh"
+ (2) Default resolution ~ 80 pc (root grid 128^3; MAX_LEVEL = 7)
+
+3. High-resolution setup
+ (1) Download the high-resolution initial conditions and Input_* by executing "sh download_ic_high_res.sh"
+ (2) Highest resolution ~ 20 pc (root grid 128^3; MAX_LEVEL = 9)
+ (3) This setup reproduces the AGORA high-resolution run presented in the GAMER-2 paper (Schive et al. 2018)
Note:
@@ -27,10 +34,16 @@ Note:
Ji-hoon Kim, et al., 2016, ApJ, 833, 202 (arXiv: 1610.03066)
2. Other references:
AGORA website : https://sites.google.com/site/santacruzcomparisonproject/
- AGORA initial condition : https://goo.gl/8JzbIJ
+ AGORA initial conditions: https://goo.gl/8JzbIJ
Enzo setup : https://bitbucket.org/enzo/enzo-dev/src/19f4a44e06f1c386573dc77b3608ba66b64d93bc/run/Hydro/Hydro-3D/AgoraGalaxy/?at=week-of-code
Goldbaum et al. 2016 : https://arxiv.org/abs/1605.00646
yt hub : https://girder.hub.yt/#collection/5736481ddd9119000164acf1
-3. Run the script "download_ic.sh" to download the low-resolution initial condition files for this test
- --> It's the same script used in the "AgoraGalaxy" test problem of Enzo
+ CloudyData_UVB table : https://github.com/grackle-project/grackle_data_files/tree/main/input
+3. The low-resolution initial condition files from "sh download_ic_low_res.sh" are the same initial conditions used
+ in the "AgoraGalaxy" test problem of Enzo
4. Some handy yt analysis scripts are put at "yt_script"
+
+
+First-time GRACKLE installation guide (on NTU clusters as an example):
+========================================
+Please refer to the README file at "./example/grackle/"
diff --git a/example/test_problem/Hydro/AGORA_IsolatedGalaxy/clean.sh b/example/test_problem/Hydro/AGORA_IsolatedGalaxy/clean.sh
index 6a330bb25b..c4592d22ca 100644
--- a/example/test_problem/Hydro/AGORA_IsolatedGalaxy/clean.sh
+++ b/example/test_problem/Hydro/AGORA_IsolatedGalaxy/clean.sh
@@ -1,6 +1,6 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance \
GRACKLE_INFO
diff --git a/example/test_problem/Hydro/AGORA_IsolatedGalaxy/download_ic.sh b/example/test_problem/Hydro/AGORA_IsolatedGalaxy/download_ic.sh
deleted file mode 100644
index a2bc16e972..0000000000
--- a/example/test_problem/Hydro/AGORA_IsolatedGalaxy/download_ic.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-wget --no-check-certificate -O ./LOW.tar.gz https://www.dropbox.com/sh/1xzt1rysy9v3a9l/AAAMlJBQG1OQFW4cjhp11Ex6a/LOW.tar.gz?dl=1
-wget https://bitbucket.org/grackle/grackle/raw/default/input/CloudyData_UVB=HM2012.h5
-tar xzvf LOW.tar.gz
-mv LOW/*.dat ./
-rmdir LOW
-rm LOW.tar.gz
diff --git a/example/test_problem/Hydro/AGORA_IsolatedGalaxy/download_ic_high_res.sh b/example/test_problem/Hydro/AGORA_IsolatedGalaxy/download_ic_high_res.sh
new file mode 100644
index 0000000000..ef34aa20d1
--- /dev/null
+++ b/example/test_problem/Hydro/AGORA_IsolatedGalaxy/download_ic_high_res.sh
@@ -0,0 +1,28 @@
+#!/bin/bash
+LOCAL_FILENAME1="HI"
+LOCAL_FILENAME2="CloudyData_UVB=HM2012.h5"
+FILE_ID1="677e4757999605c485c8de92"
+FILE_ID2="677ca211999605c485c8de6c"
+FILE_SHA256_1="8ab54870656585b280b3085c6aa8d9e62f6969ba05123fc25c9a7549bcdd32a2"
+FILE_SHA256_2="8715f1b39e90a7296ec2adcd442fa13a3d45d2ad021c6fa2fae9e4ab7a4700b2"
+
+
+# file download
+curl https://hub.yt/api/v1/item/${FILE_ID1}/download -o "${LOCAL_FILENAME1}.tar.gz"
+curl https://hub.yt/api/v1/item/${FILE_ID2}/download -o "${LOCAL_FILENAME2}"
+
+# compare sha256sum
+! [ `sha256sum ${LOCAL_FILENAME1}.tar.gz | awk '{print $1}'` = "${FILE_SHA256_1}" ] && echo "File broken: ${LOCAL_FILENAME1}.tar.gz"
+! [ `sha256sum ${LOCAL_FILENAME2} | awk '{print $1}'` = "${FILE_SHA256_2}" ] && echo "File broken: ${LOCAL_FILENAME2}"
+
+# file unzip
+tar xzvf ${LOCAL_FILENAME1}.tar.gz
+mv ${LOCAL_FILENAME1}/* ./
+rm -rf ${LOCAL_FILENAME1}
+rm ${LOCAL_FILENAME1}.tar.gz
+
+# Input_* soft links
+ln -fs ./Input_Options/Input__Flag_Jeans.high-res Input__Flag_Jeans
+ln -fs ./Input_Options/Input__Flag_ParMassCell.high-res Input__Flag_ParMassCell
+ln -fs ./Input_Options/Input__Flag_Rho.high-res Input__Flag_Rho
+ln -fs ./Input_Options/Input__Parameter.high-res Input__Parameter
diff --git a/example/test_problem/Hydro/AGORA_IsolatedGalaxy/download_ic_low_res.sh b/example/test_problem/Hydro/AGORA_IsolatedGalaxy/download_ic_low_res.sh
new file mode 100644
index 0000000000..44d3cc0bd7
--- /dev/null
+++ b/example/test_problem/Hydro/AGORA_IsolatedGalaxy/download_ic_low_res.sh
@@ -0,0 +1,28 @@
+#!/bin/bash
+
+LOCAL_FILENAME1="LOW"
+LOCAL_FILENAME2="CloudyData_UVB=HM2012.h5"
+FILE_ID1="677ca225999605c485c8de6f"
+FILE_ID2="677ca211999605c485c8de6c"
+FILE_SHA256_1="8fd18d016f5af665d31d853a394c9089503df225f4c256eb1163c9a7b4e94644"
+FILE_SHA256_2="8715f1b39e90a7296ec2adcd442fa13a3d45d2ad021c6fa2fae9e4ab7a4700b2"
+
+# file download
+curl https://hub.yt/api/v1/item/${FILE_ID1}/download -o "${LOCAL_FILENAME1}.tar.gz"
+curl https://hub.yt/api/v1/item/${FILE_ID2}/download -o "${LOCAL_FILENAME2}"
+
+# compare sha256sum
+! [ `sha256sum ${LOCAL_FILENAME1}.tar.gz | awk '{print $1}'` = "${FILE_SHA256_1}" ] && echo "File broken: ${LOCAL_FILENAME1}.tar.gz"
+! [ `sha256sum ${LOCAL_FILENAME2} | awk '{print $1}'` = "${FILE_SHA256_2}" ] && echo "File broken: ${LOCAL_FILENAME2}"
+
+# file unzip
+tar xzvf ${LOCAL_FILENAME1}.tar.gz
+mv ${LOCAL_FILENAME1}/*.dat ./
+rmdir ${LOCAL_FILENAME1}
+rm ${LOCAL_FILENAME1}.tar.gz
+
+# Input_* soft links
+ln -fs ./Input_Options/Input__Flag_Jeans.low-res Input__Flag_Jeans
+ln -fs ./Input_Options/Input__Flag_ParMassCell.low-res Input__Flag_ParMassCell
+ln -fs ./Input_Options/Input__Flag_Rho.low-res Input__Flag_Rho
+ln -fs ./Input_Options/Input__Parameter.low-res Input__Parameter
diff --git a/example/test_problem/Hydro/AGORA_IsolatedGalaxy/generate_make.sh b/example/test_problem/Hydro/AGORA_IsolatedGalaxy/generate_make.sh
index 409e0efa24..22c9e42bda 100644
--- a/example/test_problem/Hydro/AGORA_IsolatedGalaxy/generate_make.sh
+++ b/example/test_problem/Hydro/AGORA_IsolatedGalaxy/generate_make.sh
@@ -2,6 +2,6 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --mpi=true --hdf5=true --fftw=FFTW3 --gpu=true --model=HYDRO \
+${PYTHON} configure.py --mpi=true --hdf5=true --fftw=FFTW3 --gpu=true --model=HYDRO \
--particle=true --gravity=true --flu_scheme=MHM --flux=HLLC --passive=1 \
--par_attribute_flt=1 --dual=DE_ENPY --star_formation=true --grackle=true "$@"
diff --git a/example/test_problem/Hydro/AcousticWave/Input__Parameter b/example/test_problem/Hydro/AcousticWave/Input__Parameter
index 29ad3cff03..505e7f5bcd 100644
--- a/example/test_problem/Hydro/AcousticWave/Input__Parameter
+++ b/example/test_problem/Hydro/AcousticWave/Input__Parameter
@@ -118,7 +118,7 @@ INIT_SUBSAMPLING_NCELL 0 # perform sub-sampling during initiali
# data dump
OPT__OUTPUT_TOTAL 0 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 1 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_PRES 0 # output gas pressure [0] ##HYDRO ONLY##
OPT__OUTPUT_TEMP 0 # output gas temperature [0 (HD) or 1 (SRHD)] ##HYDRO ONLY##
@@ -138,6 +138,7 @@ OUTPUT_PART_X 0.0 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y 0.0 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z 0.0 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# miscellaneous
diff --git a/example/test_problem/Hydro/AcousticWave/clean.sh b/example/test_problem/Hydro/AcousticWave/clean.sh
index 58fa7c7783..3db7e429e0 100644
--- a/example/test_problem/Hydro/AcousticWave/clean.sh
+++ b/example/test_problem/Hydro/AcousticWave/clean.sh
@@ -1,6 +1,6 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance
diff --git a/example/test_problem/Hydro/AcousticWave/generate_make.sh b/example/test_problem/Hydro/AcousticWave/generate_make.sh
index 1e1a433d7b..b8fa682b4c 100644
--- a/example/test_problem/Hydro/AcousticWave/generate_make.sh
+++ b/example/test_problem/Hydro/AcousticWave/generate_make.sh
@@ -2,4 +2,4 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --model=HYDRO --double=True "$@"
+${PYTHON} configure.py --model=HYDRO --double=True "$@"
diff --git a/example/test_problem/Hydro/BlastWave/Input__Parameter b/example/test_problem/Hydro/BlastWave/Input__Parameter
index 2e1d2daca9..e134a1e669 100644
--- a/example/test_problem/Hydro/BlastWave/Input__Parameter
+++ b/example/test_problem/Hydro/BlastWave/Input__Parameter
@@ -149,7 +149,7 @@ MONO_MAX_ITER 10 # maximum number of iterations to redu
# data dump
OPT__OUTPUT_TOTAL 1 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 7 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 7 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 0 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_BASEPS 0 # output the base-level power spectrum [0]
OPT__OUTPUT_BASE 0 # only output the base-level data [0] ##OPT__OUTPUT_PART ONLY##
@@ -172,6 +172,7 @@ OUTPUT_PART_X 0.5 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y 0.5 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z 0.5 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# miscellaneous
diff --git a/example/test_problem/Hydro/BlastWave/clean.sh b/example/test_problem/Hydro/BlastWave/clean.sh
index 93cccb7e03..e171d74471 100644
--- a/example/test_problem/Hydro/BlastWave/clean.sh
+++ b/example/test_problem/Hydro/BlastWave/clean.sh
@@ -1,6 +1,6 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance \
GRACKLE_INFO Record__DivB
diff --git a/example/test_problem/Hydro/BlastWave/generate_make.sh b/example/test_problem/Hydro/BlastWave/generate_make.sh
index a6b02341cb..e6bab92044 100644
--- a/example/test_problem/Hydro/BlastWave/generate_make.sh
+++ b/example/test_problem/Hydro/BlastWave/generate_make.sh
@@ -2,4 +2,4 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --model=HYDRO --hdf5=true "$@"
+${PYTHON} configure.py --model=HYDRO --hdf5=true "$@"
diff --git a/example/test_problem/Hydro/Bondi/Input__Parameter b/example/test_problem/Hydro/Bondi/Input__Parameter
index 53b984899f..eee8876f98 100644
--- a/example/test_problem/Hydro/Bondi/Input__Parameter
+++ b/example/test_problem/Hydro/Bondi/Input__Parameter
@@ -190,7 +190,7 @@ INT_OPP_SIGN_0TH_ORDER 1 # switch to 0th-order interpolation if
# data dump
OPT__OUTPUT_TOTAL 1 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 7 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 7 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 0 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_POT 1 # output gravitational potential [1] ##OPT__OUTPUT_TOTAL ONLY##
OPT__OUTPUT_CC_MAG 1 # output **cell-centered** magnetic field (necessary for yt analysis) [1] ##MHD ONLY##
@@ -211,6 +211,7 @@ OUTPUT_PART_X 3.75 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y 3.75 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z 3.75 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# yt inline analysis (SUPPORT_LIBYT only)
diff --git a/example/test_problem/Hydro/Bondi/Input__TestProb b/example/test_problem/Hydro/Bondi/Input__TestProb
index 60fce18c23..df4e5c2059 100644
--- a/example/test_problem/Hydro/Bondi/Input__TestProb
+++ b/example/test_problem/Hydro/Bondi/Input__TestProb
@@ -8,6 +8,8 @@ Bondi_InBC_Rho 1.0e-32 # density inside the void region (in
Bondi_InBC_T 1.0e-7 # temperature inside the void region (in keV)
Bondi_InBC_NCell 2.0 # number of finest cells (can be a fractional number) for the inner BC
Bondi_Soften_NCell 0.0 # number of finest cells (can be a fractional number) for the soften length (<=0.0 -> disable)
+Bondi_void 1 # enable the void region [1]
+Bondi_dynBH 0 # dynamically increase BH mass [0]
Bondi_HSE 0 # enable HSE [0]
Bondi_HSE_Mode 1 # initial configuration (1:T=Bondi_T0, 2:rho~1/r, 3:beta model) [1]
@@ -22,3 +24,13 @@ Bondi_HSE_TrunD 1.6735328e-24 # see Bondi_HSE_Truncate (in g/cm^3)
Bondi_HSE_TrunSmoothR 5.0e-2 # smooth out density within TrunR-SmoothRoff) [-1.0]
Bondi_HSE_Pres_NormT 0 # normalize pressure profile such that T(r=Dens_NormR)=Bondi_T0 [0]
Bondi_HSE_Beta_Rcore 1.0e-1 # core radius in the beta model (in kpc)
+
+Bondi_Soliton 0 # add soliton external potential [0]
+Bondi_Soliton_m22 1.0 # FDM particle mass in 1e-22 eV/c^2 for Bondi_Soliton [-1.0]
+Bondi_Soliton_type 5 # functional form for gradually introducing the soliton potential
+ # (0:unity, 1:arctan, 2:linear, 3:smooth step function, 4:sigmoid, 5:tanh) [5]
+Bondi_Soliton_t 4.0e3 # characteristic time normalized to Bondi_TimeB for adding the soliton potential [-1.0]
+Bondi_Soliton_rc -1.0 # soliton radius for Bondi_Soliton (in kpc)
+ # (<0.0 --> compute from Bondi_Soliton_MassHalo/Redshift using the core-halo relation) [-1.0]
+Bondi_Soliton_MassHalo 1.0e11 # halo mass for determining Bondi_Soliton_rc (in Msun) [-1.0]
+Bondi_Soliton_Redshift 7.0 # redshift for determining Bondi_Soliton_rc [-1.0]
diff --git a/example/test_problem/Hydro/Bondi/clean.sh b/example/test_problem/Hydro/Bondi/clean.sh
index 61ec00938b..fc6199b090 100644
--- a/example/test_problem/Hydro/Bondi/clean.sh
+++ b/example/test_problem/Hydro/Bondi/clean.sh
@@ -1,6 +1,6 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance \
GRACKLE_INFO Record__DivB
diff --git a/example/test_problem/Hydro/Bondi/generate_make.sh b/example/test_problem/Hydro/Bondi/generate_make.sh
index 4e8ddae896..70de7de3a3 100644
--- a/example/test_problem/Hydro/Bondi/generate_make.sh
+++ b/example/test_problem/Hydro/Bondi/generate_make.sh
@@ -2,5 +2,5 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --hdf5=true --gpu=true --fftw=FFTW3 \
+${PYTHON} configure.py --hdf5=true --gpu=true --fftw=FFTW3 \
--model=HYDRO --gravity=true --dual=DE_ENPY "$@"
diff --git a/example/test_problem/Hydro/Bondi/plot_diagonal.gpt b/example/test_problem/Hydro/Bondi/plot_diagonal.gpt
index 54e94c8526..a4872a825f 100644
--- a/example/test_problem/Hydro/Bondi/plot_diagonal.gpt
+++ b/example/test_problem/Hydro/Bondi/plot_diagonal.gpt
@@ -69,7 +69,7 @@ do for [ID=ID_START:ID_END:ID_DELTA] {
set yrange [1.0e-3:2.0e1]
plot sprintf( '%s/Diag_%06d', FILE_SIMU, ID ) \
- u (abs($4-CENTER)*3**0.5):16 w p pt 6 lc 6 tit 'Simulation' \
+ u (abs($4-CENTER)*3**0.5):17 w p pt 6 lc 6 tit 'Simulation' \
,FILE_BONDI u 2:7 w l lc -1 tit 'Analytical'
@@ -79,7 +79,7 @@ do for [ID=ID_START:ID_END:ID_DELTA] {
set yrange [1.0e-2:1.0e3]
plot sprintf( '%s/Diag_%06d', FILE_SIMU, ID ) \
- u (abs($4-CENTER)*3**0.5):13 w p pt 6 lc 6 tit 'Simulation' \
+ u (abs($4-CENTER)*3**0.5):14 w p pt 6 lc 6 tit 'Simulation' \
,FILE_BONDI u 2:( ($6/$7)**2.0*$4/GAMMA ) w l lc -1 tit 'Analytical'
diff --git a/example/test_problem/Hydro/CDM_LSS/Input__Parameter b/example/test_problem/Hydro/CDM_LSS/Input__Parameter
index ac07a13241..5b0398ee72 100644
--- a/example/test_problem/Hydro/CDM_LSS/Input__Parameter
+++ b/example/test_problem/Hydro/CDM_LSS/Input__Parameter
@@ -201,7 +201,7 @@ INT_MONO_COEFF 2.0 # coefficient for ensuring the interpo
# data dump
OPT__OUTPUT_TOTAL 1 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 0 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_PAR_MODE 0 # output the particle data: (0=off, 1=text-file, 2=C-binary) [0] ##PARTICLE ONLY##
OPT__OUTPUT_BASEPS 1 # output the base-level power spectrum [0]
@@ -216,6 +216,7 @@ OUTPUT_PART_X -1.0 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y -1.0 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z -1.0 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# miscellaneous
diff --git a/example/test_problem/Hydro/CDM_LSS/clean.sh b/example/test_problem/Hydro/CDM_LSS/clean.sh
index aab55a8ee8..2c7ccfacf7 100644
--- a/example/test_problem/Hydro/CDM_LSS/clean.sh
+++ b/example/test_problem/Hydro/CDM_LSS/clean.sh
@@ -1,5 +1,5 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance
diff --git a/example/test_problem/Hydro/CDM_LSS/download_ic.sh b/example/test_problem/Hydro/CDM_LSS/download_ic.sh
index ec3a9b39d3..549b3eb456 100644
--- a/example/test_problem/Hydro/CDM_LSS/download_ic.sh
+++ b/example/test_problem/Hydro/CDM_LSS/download_ic.sh
@@ -2,13 +2,10 @@
LOCAL_FILENAME="PAR_IC"
FILE_ID="677c92db999605c485c8de69"
+FILE_SHA256="46e27324953bcd7b4eecaecd395b6cf6ccbf662e65a12c935b3823abd8119be3"
-# 1. Download through `curl`
+# 1. download
curl https://hub.yt/api/v1/item/${FILE_ID}/download -o ${LOCAL_FILENAME}
-# 2. download through `girder`
-API_URL="https://girder.hub.yt/api/v1"
-
-# girder-cli --api-url ${API_URL} download --parent-type item ${FILE_ID} temp
-# mv temp/${LOCAL_FILENAME} ./
-# rmdir temp
+# 2. compare sha256sum
+! [ `sha256sum ${LOCAL_FILENAME} | awk '{print $1}'` = "${FILE_SHA256}" ] && echo "File broken: ${LOCAL_FILENAME}"
diff --git a/example/test_problem/Hydro/CDM_LSS/generate_make.sh b/example/test_problem/Hydro/CDM_LSS/generate_make.sh
index b65dd79740..3625c38069 100644
--- a/example/test_problem/Hydro/CDM_LSS/generate_make.sh
+++ b/example/test_problem/Hydro/CDM_LSS/generate_make.sh
@@ -2,5 +2,5 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --mpi=true --hdf5=true --fftw=FFTW3 --gpu=true \
+${PYTHON} configure.py --mpi=true --hdf5=true --fftw=FFTW3 --gpu=true \
--model=HYDRO --particle=true --gravity=true --comoving=true "$@"
diff --git a/example/test_problem/Hydro/CMZ/Input__Parameter b/example/test_problem/Hydro/CMZ/Input__Parameter
index e6f554f78e..d6ff47aa8e 100644
--- a/example/test_problem/Hydro/CMZ/Input__Parameter
+++ b/example/test_problem/Hydro/CMZ/Input__Parameter
@@ -244,7 +244,7 @@ INT_OPP_SIGN_0TH_ORDER 1 # switch to 0th-order interpolation if
# data dump
OPT__OUTPUT_TOTAL 1 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 0 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_PAR_MODE 0 # output the particle data: (0=off, 1=text-file, 2=C-binary) [0] ##PARTICLE ONLY##
OPT__OUTPUT_POT 1 # output gravitational potential [1] ##OPT__OUTPUT_TOTAL ONLY##
@@ -268,6 +268,7 @@ OUTPUT_PART_X -1.0 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y -1.0 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z -1.0 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# miscellaneous
diff --git a/example/test_problem/Hydro/CMZ/clean.sh b/example/test_problem/Hydro/CMZ/clean.sh
index 93cccb7e03..e171d74471 100644
--- a/example/test_problem/Hydro/CMZ/clean.sh
+++ b/example/test_problem/Hydro/CMZ/clean.sh
@@ -1,6 +1,6 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance \
GRACKLE_INFO Record__DivB
diff --git a/example/test_problem/Hydro/CMZ/generate_make.sh b/example/test_problem/Hydro/CMZ/generate_make.sh
index 6c58cd78a9..3da93a0a6b 100644
--- a/example/test_problem/Hydro/CMZ/generate_make.sh
+++ b/example/test_problem/Hydro/CMZ/generate_make.sh
@@ -2,6 +2,6 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --hdf5=true --gpu=true --fftw=FFTW3 \
+${PYTHON} configure.py --hdf5=true --gpu=true --fftw=FFTW3 \
--model=HYDRO --gravity=true --eos=ISOTHERMAL --barotropic=true \
--flu_scheme=MHM --flux=HLLC --passive=1 --par_attribute_flt=1 "$@"
diff --git a/example/test_problem/Hydro/CR_Diffusion/Input__Parameter b/example/test_problem/Hydro/CR_Diffusion/Input__Parameter
index 66c2ac9dad..1d4e672346 100644
--- a/example/test_problem/Hydro/CR_Diffusion/Input__Parameter
+++ b/example/test_problem/Hydro/CR_Diffusion/Input__Parameter
@@ -279,7 +279,7 @@ INT_OPP_SIGN_0TH_ORDER 1 # switch to 0th-order interpolation if
# data dump
OPT__OUTPUT_TOTAL 1 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 0 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_PAR_TEXT 0 # output the particle text file [0] ##PARTICLE ONLY##
OPT__OUTPUT_BASEPS 0 # output the base-level power spectrum [0]
@@ -295,6 +295,7 @@ OUTPUT_PART_X 0.0 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y 0.0 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z 0.0 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# yt inline analysis (SUPPORT_LIBYT only)
diff --git a/example/test_problem/Hydro/CR_Diffusion/clean.sh b/example/test_problem/Hydro/CR_Diffusion/clean.sh
index 2c2877c664..cc927c5846 100644
--- a/example/test_problem/Hydro/CR_Diffusion/clean.sh
+++ b/example/test_problem/Hydro/CR_Diffusion/clean.sh
@@ -1,6 +1,6 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance \
GRACKLE_INFO Record__DivB CR_Diffusion*
diff --git a/example/test_problem/Hydro/CR_Diffusion/generate_make.sh b/example/test_problem/Hydro/CR_Diffusion/generate_make.sh
index 431a9e912e..da6ed33ade 100644
--- a/example/test_problem/Hydro/CR_Diffusion/generate_make.sh
+++ b/example/test_problem/Hydro/CR_Diffusion/generate_make.sh
@@ -2,5 +2,5 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --model=HYDRO --flu_scheme=MHM_RP --flux=HLLD --mhd=true \
+${PYTHON} configure.py --model=HYDRO --flu_scheme=MHM_RP --flux=HLLD --mhd=true \
--cosmic_ray=true --eos=COSMIC_RAY --cr_diffusion=true --hdf5=true "$@"
diff --git a/example/test_problem/Hydro/CR_ShockTube/Input__Parameter b/example/test_problem/Hydro/CR_ShockTube/Input__Parameter
index 94cabe3720..0360331616 100644
--- a/example/test_problem/Hydro/CR_ShockTube/Input__Parameter
+++ b/example/test_problem/Hydro/CR_ShockTube/Input__Parameter
@@ -278,7 +278,7 @@ INT_OPP_SIGN_0TH_ORDER 1 # switch to 0th-order interpolation if
# data dump
OPT__OUTPUT_TOTAL 0 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 4 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 4 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 0 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_PAR_TEXT 0 # output the particle text file [0] ##PARTICLE ONLY##
OPT__OUTPUT_BASEPS 0 # output the base-level power spectrum [0]
@@ -294,6 +294,7 @@ OUTPUT_PART_X 0.0 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y 0.0 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z 0.0 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# yt inline analysis (SUPPORT_LIBYT only)
diff --git a/example/test_problem/Hydro/CR_ShockTube/clean.sh b/example/test_problem/Hydro/CR_ShockTube/clean.sh
index dcb84a1d4c..14a9350e26 100644
--- a/example/test_problem/Hydro/CR_ShockTube/clean.sh
+++ b/example/test_problem/Hydro/CR_ShockTube/clean.sh
@@ -1,6 +1,6 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance \
GRACKLE_INFO Record__DivB
diff --git a/example/test_problem/Hydro/CR_ShockTube/generate_make.sh b/example/test_problem/Hydro/CR_ShockTube/generate_make.sh
index 2b0048bba3..487fba62d0 100644
--- a/example/test_problem/Hydro/CR_ShockTube/generate_make.sh
+++ b/example/test_problem/Hydro/CR_ShockTube/generate_make.sh
@@ -2,7 +2,7 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --model=HYDRO --flu_scheme=MHM_RP --mhd=false --flux=HLLE \
+${PYTHON} configure.py --model=HYDRO --flu_scheme=MHM_RP --mhd=false --flux=HLLE \
--cosmic_ray=true --eos=COSMIC_RAY "$@"
-#${PYTHON} configure.py --machine=eureka_intel --model=HYDRO --flu_scheme=MHM_RP --mhd=true --flux=HLLD \
+#${PYTHON} configure.py --model=HYDRO --flu_scheme=MHM_RP --mhd=true --flux=HLLD \
# --cosmic_ray=true --eos=COSMIC_RAY "$@"
diff --git a/example/test_problem/Hydro/CR_SoundWave/Input__Parameter b/example/test_problem/Hydro/CR_SoundWave/Input__Parameter
index 2b9dd797ed..acc884ac52 100644
--- a/example/test_problem/Hydro/CR_SoundWave/Input__Parameter
+++ b/example/test_problem/Hydro/CR_SoundWave/Input__Parameter
@@ -277,7 +277,7 @@ INT_OPP_SIGN_0TH_ORDER 1 # switch to 0th-order interpolation if
# data dump
OPT__OUTPUT_TOTAL 0 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 1 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_PAR_TEXT 0 # output the particle text file [0] ##PARTICLE ONLY##
OPT__OUTPUT_BASEPS 0 # output the base-level power spectrum [0]
@@ -293,6 +293,7 @@ OUTPUT_PART_X 0.0 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y 0.0 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z 0.0 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# yt inline analysis (SUPPORT_LIBYT only)
diff --git a/example/test_problem/Hydro/CR_SoundWave/clean.sh b/example/test_problem/Hydro/CR_SoundWave/clean.sh
index 679e0a0fcb..8b9d2d3e39 100644
--- a/example/test_problem/Hydro/CR_SoundWave/clean.sh
+++ b/example/test_problem/Hydro/CR_SoundWave/clean.sh
@@ -1,6 +1,6 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance \
GRACKLE_INFO Record__DivB CR_SoundWave*
diff --git a/example/test_problem/Hydro/CR_SoundWave/generate_make.sh b/example/test_problem/Hydro/CR_SoundWave/generate_make.sh
index 15352871fb..36a09353b4 100644
--- a/example/test_problem/Hydro/CR_SoundWave/generate_make.sh
+++ b/example/test_problem/Hydro/CR_SoundWave/generate_make.sh
@@ -2,7 +2,7 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --model=HYDRO --flu_scheme=MHM_RP --mhd=false --flux=HLLE \
+${PYTHON} configure.py --model=HYDRO --flu_scheme=MHM_RP --mhd=false --flux=HLLE \
--double=true --cosmic_ray=true --eos=COSMIC_RAY "$@"
-#${PYTHON} configure.py --machine=eureka_intel --model=HYDRO --flu_scheme=MHM_RP --mhd=true --flux=HLLD \
+#${PYTHON} configure.py --model=HYDRO --flu_scheme=MHM_RP --mhd=true --flux=HLLD \
# --double=true --cosmic_ray=true --eos=COSMIC_RAY "$@"
diff --git a/example/test_problem/Hydro/Caustic/Input__Parameter b/example/test_problem/Hydro/Caustic/Input__Parameter
index 02bf3b1d82..01b609f8b7 100644
--- a/example/test_problem/Hydro/Caustic/Input__Parameter
+++ b/example/test_problem/Hydro/Caustic/Input__Parameter
@@ -148,7 +148,7 @@ MONO_MAX_ITER 10 # maximum number of iterations to redu
# data dump
OPT__OUTPUT_TOTAL 0 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 4 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 4 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 0 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_BASEPS 0 # output the base-level power spectrum [0]
OPT__OUTPUT_BASE 0 # only output the base-level data [0] ##OPT__OUTPUT_PART ONLY##
@@ -169,6 +169,7 @@ OUTPUT_PART_X 0.0 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y 0.0 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z 0.0 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# miscellaneous
diff --git a/example/test_problem/Hydro/Caustic/clean.sh b/example/test_problem/Hydro/Caustic/clean.sh
index aab55a8ee8..2c7ccfacf7 100644
--- a/example/test_problem/Hydro/Caustic/clean.sh
+++ b/example/test_problem/Hydro/Caustic/clean.sh
@@ -1,5 +1,5 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance
diff --git a/example/test_problem/Hydro/Caustic/generate_make.sh b/example/test_problem/Hydro/Caustic/generate_make.sh
index 1e1a433d7b..b8fa682b4c 100644
--- a/example/test_problem/Hydro/Caustic/generate_make.sh
+++ b/example/test_problem/Hydro/Caustic/generate_make.sh
@@ -2,4 +2,4 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --model=HYDRO --double=True "$@"
+${PYTHON} configure.py --model=HYDRO --double=True "$@"
diff --git a/example/test_problem/Hydro/ClusterMerger/Input__Parameter b/example/test_problem/Hydro/ClusterMerger/Input__Parameter
index 0b59e4cecc..b035e42052 100644
--- a/example/test_problem/Hydro/ClusterMerger/Input__Parameter
+++ b/example/test_problem/Hydro/ClusterMerger/Input__Parameter
@@ -191,7 +191,7 @@ INT_OPP_SIGN_0TH_ORDER 1 # switch to 0th-order interpolation if
# data dump
OPT__OUTPUT_TOTAL 1 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 0 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_PAR_MODE 0 # output the particle data: (0=off, 1=text-file, 2=C-binary) [0] ##PARTICLE ONLY##
OPT__OUTPUT_BASEPS 0 # output the base-level power spectrum [0]
@@ -217,6 +217,7 @@ OUTPUT_PART_X -1.0 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y -1.0 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z -1.0 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# miscellaneous
diff --git a/example/test_problem/Hydro/ClusterMerger/clean.sh b/example/test_problem/Hydro/ClusterMerger/clean.sh
index aab55a8ee8..2c7ccfacf7 100644
--- a/example/test_problem/Hydro/ClusterMerger/clean.sh
+++ b/example/test_problem/Hydro/ClusterMerger/clean.sh
@@ -1,5 +1,5 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance
diff --git a/example/test_problem/Hydro/ClusterMerger/download_ic.sh b/example/test_problem/Hydro/ClusterMerger/download_ic.sh
index a77f72155e..61bc0635d3 100644
--- a/example/test_problem/Hydro/ClusterMerger/download_ic.sh
+++ b/example/test_problem/Hydro/ClusterMerger/download_ic.sh
@@ -1,4 +1,15 @@
-filename=gamer_ic_merging_cluster.tgz
-curl -L https://use.yt/upload/cceea6c4 -o $filename
-tar -zxvf $filename
-rm $filename
+#!/bin/bash
+
+LOCAL_FILENAME="gamer_ic_merging_cluster.tgz"
+FILE_ID="677caaec999605c485c8de74"
+FILE_SHA256="a233a892818504cf15e188bca862e22250bb1f3e09155740e45d272e4ab5f1c1"
+
+# 1. download
+curl https://hub.yt/api/v1/item/${FILE_ID}/download -o "${LOCAL_FILENAME}"
+
+# 2. compare sha256sum
+! [ `sha256sum ${LOCAL_FILENAME} | awk '{print $1}'` = "${FILE_SHA256}" ] && echo "File broken: ${LOCAL_FILENAME}"
+
+# 3. unzip
+tar -zxvf ${LOCAL_FILENAME}
+rm ${LOCAL_FILENAME}
diff --git a/example/test_problem/Hydro/ClusterMerger/generate_make.sh b/example/test_problem/Hydro/ClusterMerger/generate_make.sh
index d0622ae176..8b00177e62 100644
--- a/example/test_problem/Hydro/ClusterMerger/generate_make.sh
+++ b/example/test_problem/Hydro/ClusterMerger/generate_make.sh
@@ -2,5 +2,5 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --mpi=true --hdf5=true --fftw=FFTW3 --gpu=true \
+${PYTHON} configure.py --mpi=true --hdf5=true --fftw=FFTW3 --gpu=true \
--model=HYDRO --particle=true --gravity=true --passive=2 --par_attribute_int=1 "$@"
diff --git a/example/test_problem/Hydro/EnergyPowerSpectrum/Input__Parameter b/example/test_problem/Hydro/EnergyPowerSpectrum/Input__Parameter
index 7668f00e2c..b305abf9e0 100644
--- a/example/test_problem/Hydro/EnergyPowerSpectrum/Input__Parameter
+++ b/example/test_problem/Hydro/EnergyPowerSpectrum/Input__Parameter
@@ -116,7 +116,7 @@ INIT_SUBSAMPLING_NCELL 0 # perform sub-sampling during initiali
# data dump
OPT__OUTPUT_TOTAL 0 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 7 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 7 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 1 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_BASEPS 0 # output the base-level power spectrum [0]
OPT__OUTPUT_PRES 0 # output gas pressure [0] ##HYDRO ONLY##
@@ -136,6 +136,7 @@ OUTPUT_PART_X 0.0 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y 0.0 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z 0.0 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# miscellaneous
diff --git a/example/test_problem/Hydro/EnergyPowerSpectrum/clean.sh b/example/test_problem/Hydro/EnergyPowerSpectrum/clean.sh
index b1ebd6f160..8ef0285816 100644
--- a/example/test_problem/Hydro/EnergyPowerSpectrum/clean.sh
+++ b/example/test_problem/Hydro/EnergyPowerSpectrum/clean.sh
@@ -1,6 +1,6 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance
diff --git a/example/test_problem/Hydro/EnergyPowerSpectrum/generate_make.sh b/example/test_problem/Hydro/EnergyPowerSpectrum/generate_make.sh
index eddc712680..395fef457a 100644
--- a/example/test_problem/Hydro/EnergyPowerSpectrum/generate_make.sh
+++ b/example/test_problem/Hydro/EnergyPowerSpectrum/generate_make.sh
@@ -2,4 +2,4 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --fftw=FFTW3 --model=HYDRO --eos=GAMMA --mpi=true "$@"
+${PYTHON} configure.py --fftw=FFTW3 --model=HYDRO --eos=GAMMA --mpi=true "$@"
diff --git a/example/test_problem/Hydro/Gravity/Input__Parameter b/example/test_problem/Hydro/Gravity/Input__Parameter
index 964bb7f0a0..3dfedacb02 100644
--- a/example/test_problem/Hydro/Gravity/Input__Parameter
+++ b/example/test_problem/Hydro/Gravity/Input__Parameter
@@ -167,7 +167,7 @@ MONO_MAX_ITER 0 # maximum number of iterations to redu
# data dump
OPT__OUTPUT_TOTAL 0 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 1 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_BASEPS 0 # output the base-level power spectrum [0]
OPT__OUTPUT_BASE 0 # only output the base-level data [0] ##OPT__OUTPUT_PART ONLY##
@@ -189,6 +189,7 @@ OUTPUT_PART_X -1.0 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y -1.0 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z -1.0 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# miscellaneous
diff --git a/example/test_problem/Hydro/Gravity/clean.sh b/example/test_problem/Hydro/Gravity/clean.sh
index 6fd80fa4d2..386037f7a8 100644
--- a/example/test_problem/Hydro/Gravity/clean.sh
+++ b/example/test_problem/Hydro/Gravity/clean.sh
@@ -1,6 +1,6 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance
diff --git a/example/test_problem/Hydro/Gravity/generate_make.sh b/example/test_problem/Hydro/Gravity/generate_make.sh
index f79e63d5ba..7d876d0706 100644
--- a/example/test_problem/Hydro/Gravity/generate_make.sh
+++ b/example/test_problem/Hydro/Gravity/generate_make.sh
@@ -2,4 +2,4 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --gpu=true --hdf5=true --fftw=FFTW3 --model=HYDRO --gravity=true "$@"
+${PYTHON} configure.py --gpu=true --hdf5=true --fftw=FFTW3 --model=HYDRO --gravity=true "$@"
diff --git a/example/test_problem/Hydro/JeansInstability/Input__Parameter b/example/test_problem/Hydro/JeansInstability/Input__Parameter
index bfd7ae17b3..b370bc1fc7 100644
--- a/example/test_problem/Hydro/JeansInstability/Input__Parameter
+++ b/example/test_problem/Hydro/JeansInstability/Input__Parameter
@@ -168,7 +168,7 @@ MONO_MAX_ITER 10 # maximum number of iterations to redu
# data dump
OPT__OUTPUT_TOTAL 0 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 1 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_BASEPS 0 # output the base-level power spectrum [0]
OPT__OUTPUT_BASE 0 # only output the base-level data [0] ##OPT__OUTPUT_PART ONLY##
@@ -191,6 +191,7 @@ OUTPUT_PART_X 0.0 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y 0.0 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z 0.0 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# miscellaneous
diff --git a/example/test_problem/Hydro/JeansInstability/clean.sh b/example/test_problem/Hydro/JeansInstability/clean.sh
index a05519f4a6..9053a4f127 100644
--- a/example/test_problem/Hydro/JeansInstability/clean.sh
+++ b/example/test_problem/Hydro/JeansInstability/clean.sh
@@ -1,6 +1,6 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance \
GRACKLE_INFO Record__DivB
diff --git a/example/test_problem/Hydro/JeansInstability/generate_make.sh b/example/test_problem/Hydro/JeansInstability/generate_make.sh
index 4dcd3dbbd4..fa4ab9ee94 100644
--- a/example/test_problem/Hydro/JeansInstability/generate_make.sh
+++ b/example/test_problem/Hydro/JeansInstability/generate_make.sh
@@ -2,5 +2,5 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --gpu=true --fftw=FFTW3 --double=true \
+${PYTHON} configure.py --gpu=true --fftw=FFTW3 --double=true \
--model=HYDRO --gravity=true --eos=GAMMA "$@"
diff --git a/example/test_problem/Hydro/Jet/Input__Parameter b/example/test_problem/Hydro/Jet/Input__Parameter
index c2fdb33475..0069445cc1 100644
--- a/example/test_problem/Hydro/Jet/Input__Parameter
+++ b/example/test_problem/Hydro/Jet/Input__Parameter
@@ -171,7 +171,7 @@ MONO_MAX_ITER 10 # maximum number of iterations to redu
# data dump
OPT__OUTPUT_TOTAL 1 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 0 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_BASEPS 0 # output the base-level power spectrum [0]
OPT__OUTPUT_BASE 0 # only output the base-level data [0] ##OPT__OUTPUT_PART ONLY##
@@ -193,6 +193,7 @@ OUTPUT_PART_X -1.0 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y -1.0 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z -1.0 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# miscellaneous
diff --git a/example/test_problem/Hydro/Jet/clean.sh b/example/test_problem/Hydro/Jet/clean.sh
index aab55a8ee8..2c7ccfacf7 100644
--- a/example/test_problem/Hydro/Jet/clean.sh
+++ b/example/test_problem/Hydro/Jet/clean.sh
@@ -1,5 +1,5 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance
diff --git a/example/test_problem/Hydro/Jet/generate_make.sh b/example/test_problem/Hydro/Jet/generate_make.sh
index 952e5053dd..3052779d2a 100644
--- a/example/test_problem/Hydro/Jet/generate_make.sh
+++ b/example/test_problem/Hydro/Jet/generate_make.sh
@@ -2,5 +2,5 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --hdf5=true --gpu=true --mpi=true --fftw=FFTW3 \
+${PYTHON} configure.py --hdf5=true --gpu=true --mpi=true --fftw=FFTW3 \
--model=HYDRO --gravity=true "$@"
diff --git a/example/test_problem/Hydro/JetICMWall/Input__Parameter b/example/test_problem/Hydro/JetICMWall/Input__Parameter
index ae53449b82..edb95363ed 100644
--- a/example/test_problem/Hydro/JetICMWall/Input__Parameter
+++ b/example/test_problem/Hydro/JetICMWall/Input__Parameter
@@ -135,7 +135,7 @@ MONO_MAX_ITER 4 # maximum number of iterations to redu
# data dump
OPT__OUTPUT_TOTAL 1 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 0 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_BASEPS 0 # output the base-level power spectrum [0]
OPT__OUTPUT_BASE 0 # only output the base-level data [0] ##OPT__OUTPUT_PART ONLY##
@@ -157,6 +157,7 @@ OUTPUT_PART_X -1.0 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y -1.0 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z -1.0 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# miscellaneous
diff --git a/example/test_problem/Hydro/JetICMWall/clean.sh b/example/test_problem/Hydro/JetICMWall/clean.sh
index aab55a8ee8..2c7ccfacf7 100644
--- a/example/test_problem/Hydro/JetICMWall/clean.sh
+++ b/example/test_problem/Hydro/JetICMWall/clean.sh
@@ -1,5 +1,5 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance
diff --git a/example/test_problem/Hydro/JetICMWall/generate_make.sh b/example/test_problem/Hydro/JetICMWall/generate_make.sh
index 035f4b5356..89094b3ed3 100644
--- a/example/test_problem/Hydro/JetICMWall/generate_make.sh
+++ b/example/test_problem/Hydro/JetICMWall/generate_make.sh
@@ -2,6 +2,6 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --mpi=true --hdf5=true --gpu=true --model=HYDRO \
+${PYTHON} configure.py --mpi=true --hdf5=true --gpu=true --model=HYDRO \
--srhd=true --eos=TAUBMATHEWS --flux=HLLC --flu_scheme=MHM \
--passive=4 "$@"
diff --git a/example/test_problem/Hydro/KelvinHelmholtzInstability/Input__Parameter b/example/test_problem/Hydro/KelvinHelmholtzInstability/Input__Parameter
index c4e8df6f48..9f5981edd0 100644
--- a/example/test_problem/Hydro/KelvinHelmholtzInstability/Input__Parameter
+++ b/example/test_problem/Hydro/KelvinHelmholtzInstability/Input__Parameter
@@ -144,7 +144,7 @@ MONO_MAX_ITER 10 # maximum number of iterations to redu
# data dump
OPT__OUTPUT_TOTAL 1 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 0 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_BASEPS 0 # output the base-level power spectrum [0]
OPT__OUTPUT_BASE 0 # only output the base-level data [0] ##OPT__OUTPUT_PART ONLY##
@@ -166,6 +166,7 @@ OUTPUT_PART_X -1.0 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y -1.0 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z -1.0 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# miscellaneous
diff --git a/example/test_problem/Hydro/KelvinHelmholtzInstability/clean.sh b/example/test_problem/Hydro/KelvinHelmholtzInstability/clean.sh
index aab55a8ee8..2c7ccfacf7 100644
--- a/example/test_problem/Hydro/KelvinHelmholtzInstability/clean.sh
+++ b/example/test_problem/Hydro/KelvinHelmholtzInstability/clean.sh
@@ -1,5 +1,5 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance
diff --git a/example/test_problem/Hydro/KelvinHelmholtzInstability/generate_make.sh b/example/test_problem/Hydro/KelvinHelmholtzInstability/generate_make.sh
index 12521fa79f..e4dc316bea 100644
--- a/example/test_problem/Hydro/KelvinHelmholtzInstability/generate_make.sh
+++ b/example/test_problem/Hydro/KelvinHelmholtzInstability/generate_make.sh
@@ -2,4 +2,4 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --hdf5=true --gpu=true --mpi=true --fftw=FFTW3 --model=HYDRO "$@"
+${PYTHON} configure.py --hdf5=true --gpu=true --mpi=true --fftw=FFTW3 --model=HYDRO "$@"
diff --git a/example/test_problem/Hydro/MHD_ABC/Input__Parameter b/example/test_problem/Hydro/MHD_ABC/Input__Parameter
index 2ddb989967..170e6c72e3 100644
--- a/example/test_problem/Hydro/MHD_ABC/Input__Parameter
+++ b/example/test_problem/Hydro/MHD_ABC/Input__Parameter
@@ -150,7 +150,7 @@ MONO_MAX_ITER 10 # maximum number of iterations to redu
# data dump
OPT__OUTPUT_TOTAL 1 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 0 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_BASE 0 # only output the base-level data [0] ##OPT__OUTPUT_PART ONLY##
OPT__OUTPUT_CC_MAG 1 # output **cell-centered** magnetic field (necessary for yt analysis) [1] ##MHD ONLY##
@@ -171,6 +171,7 @@ OUTPUT_PART_X -1.0 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y -1.0 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z -1.0 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# miscellaneous
diff --git a/example/test_problem/Hydro/MHD_ABC/clean.sh b/example/test_problem/Hydro/MHD_ABC/clean.sh
index 93cccb7e03..e171d74471 100644
--- a/example/test_problem/Hydro/MHD_ABC/clean.sh
+++ b/example/test_problem/Hydro/MHD_ABC/clean.sh
@@ -1,6 +1,6 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance \
GRACKLE_INFO Record__DivB
diff --git a/example/test_problem/Hydro/MHD_ABC/generate_make.sh b/example/test_problem/Hydro/MHD_ABC/generate_make.sh
index 6b066a4162..e6179f90c0 100644
--- a/example/test_problem/Hydro/MHD_ABC/generate_make.sh
+++ b/example/test_problem/Hydro/MHD_ABC/generate_make.sh
@@ -2,5 +2,5 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --hdf5=true --gpu=true --mpi=true \
+${PYTHON} configure.py --hdf5=true --gpu=true --mpi=true \
--model=HYDRO --mhd=true "$@"
diff --git a/example/test_problem/Hydro/MHD_LinearWave/Input__Parameter b/example/test_problem/Hydro/MHD_LinearWave/Input__Parameter
index ef9c31407b..23abdc7c7f 100644
--- a/example/test_problem/Hydro/MHD_LinearWave/Input__Parameter
+++ b/example/test_problem/Hydro/MHD_LinearWave/Input__Parameter
@@ -146,7 +146,7 @@ MONO_MAX_ITER 10 # maximum number of iterations to redu
# data dump
OPT__OUTPUT_TOTAL 0 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 1 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_CC_MAG 1 # output **cell-centered** magnetic field (necessary for yt analysis) [1] ##MHD ONLY##
OPT__OUTPUT_PRES 0 # output gas pressure [0] ##HYDRO ONLY##
@@ -164,6 +164,7 @@ OUTPUT_PART_X 0.0 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y 0.0 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z 0.0 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# miscellaneous
diff --git a/example/test_problem/Hydro/MHD_LinearWave/clean.sh b/example/test_problem/Hydro/MHD_LinearWave/clean.sh
index 2cfa93183c..f304eb25e0 100644
--- a/example/test_problem/Hydro/MHD_LinearWave/clean.sh
+++ b/example/test_problem/Hydro/MHD_LinearWave/clean.sh
@@ -1,6 +1,6 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance \
GRACKLE_INFO Record__DivB
diff --git a/example/test_problem/Hydro/MHD_LinearWave/generate_make.sh b/example/test_problem/Hydro/MHD_LinearWave/generate_make.sh
index f2e70fa968..751e715fdd 100644
--- a/example/test_problem/Hydro/MHD_LinearWave/generate_make.sh
+++ b/example/test_problem/Hydro/MHD_LinearWave/generate_make.sh
@@ -2,4 +2,4 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --double=true --model=HYDRO --mhd=true --eos=GAMMA "$@"
+${PYTHON} configure.py --double=true --model=HYDRO --mhd=true --eos=GAMMA "$@"
diff --git a/example/test_problem/Hydro/MHD_OrszagTangVortex/Input__Parameter b/example/test_problem/Hydro/MHD_OrszagTangVortex/Input__Parameter
index 70c182cc16..c524067066 100644
--- a/example/test_problem/Hydro/MHD_OrszagTangVortex/Input__Parameter
+++ b/example/test_problem/Hydro/MHD_OrszagTangVortex/Input__Parameter
@@ -150,7 +150,7 @@ MONO_MAX_ITER 10 # maximum number of iterations to redu
# data dump
OPT__OUTPUT_TOTAL 1 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 0 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_BASE 0 # only output the base-level data [0] ##OPT__OUTPUT_PART ONLY##
OPT__OUTPUT_CC_MAG 1 # output **cell-centered** magnetic field (necessary for yt analysis) [1] ##MHD ONLY##
@@ -171,6 +171,7 @@ OUTPUT_PART_X -1.0 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y -1.0 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z -1.0 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# miscellaneous
diff --git a/example/test_problem/Hydro/MHD_OrszagTangVortex/clean.sh b/example/test_problem/Hydro/MHD_OrszagTangVortex/clean.sh
index 93cccb7e03..e171d74471 100644
--- a/example/test_problem/Hydro/MHD_OrszagTangVortex/clean.sh
+++ b/example/test_problem/Hydro/MHD_OrszagTangVortex/clean.sh
@@ -1,6 +1,6 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance \
GRACKLE_INFO Record__DivB
diff --git a/example/test_problem/Hydro/MHD_OrszagTangVortex/generate_make.sh b/example/test_problem/Hydro/MHD_OrszagTangVortex/generate_make.sh
index 6b066a4162..e6179f90c0 100644
--- a/example/test_problem/Hydro/MHD_OrszagTangVortex/generate_make.sh
+++ b/example/test_problem/Hydro/MHD_OrszagTangVortex/generate_make.sh
@@ -2,5 +2,5 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --hdf5=true --gpu=true --mpi=true \
+${PYTHON} configure.py --hdf5=true --gpu=true --mpi=true \
--model=HYDRO --mhd=true "$@"
diff --git a/example/test_problem/Hydro/ParticleEquilibriumIC/Input__Parameter b/example/test_problem/Hydro/ParticleEquilibriumIC/Input__Parameter
index 896b05a15a..adf29812cf 100644
--- a/example/test_problem/Hydro/ParticleEquilibriumIC/Input__Parameter
+++ b/example/test_problem/Hydro/ParticleEquilibriumIC/Input__Parameter
@@ -209,7 +209,7 @@ INT_OPP_SIGN_0TH_ORDER 1 # switch to 0th-order interpolation if
# data dump
OPT__OUTPUT_TOTAL 1 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 0 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_PAR_MODE 1 # output the particle data: (0=off, 1=text-file, 2=C-binary) [0] ##PARTICLE ONLY##
OPT__OUTPUT_BASEPS 0 # output the base-level power spectrum [0]
@@ -224,6 +224,7 @@ OUTPUT_PART_X -1.0 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y -1.0 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z -1.0 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# miscellaneous
diff --git a/example/test_problem/Hydro/ParticleEquilibriumIC/clean.sh b/example/test_problem/Hydro/ParticleEquilibriumIC/clean.sh
index aab55a8ee8..2c7ccfacf7 100644
--- a/example/test_problem/Hydro/ParticleEquilibriumIC/clean.sh
+++ b/example/test_problem/Hydro/ParticleEquilibriumIC/clean.sh
@@ -1,5 +1,5 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance
diff --git a/example/test_problem/Hydro/ParticleEquilibriumIC/generate_make.sh b/example/test_problem/Hydro/ParticleEquilibriumIC/generate_make.sh
index 7ff336392f..f028629dfc 100644
--- a/example/test_problem/Hydro/ParticleEquilibriumIC/generate_make.sh
+++ b/example/test_problem/Hydro/ParticleEquilibriumIC/generate_make.sh
@@ -2,5 +2,5 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --mpi=true --hdf5=true --fftw=FFTW3 --gpu=true --gsl=true \
+${PYTHON} configure.py --mpi=true --hdf5=true --fftw=FFTW3 --gpu=true --gsl=true \
--model=HYDRO --particle=true --gravity=true "$@"
diff --git a/example/test_problem/Hydro/ParticleTest/Input__Parameter b/example/test_problem/Hydro/ParticleTest/Input__Parameter
index 50f2d5332c..321cce42de 100644
--- a/example/test_problem/Hydro/ParticleTest/Input__Parameter
+++ b/example/test_problem/Hydro/ParticleTest/Input__Parameter
@@ -185,7 +185,7 @@ INT_MONO_COEFF 2.0 # coefficient for ensuring the interpo
# data dump
OPT__OUTPUT_TOTAL 1 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 0 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_PAR_MODE 0 # output the particle data: (0=off, 1=text-file, 2=C-binary) [0] ##PARTICLE ONLY##
OPT__OUTPUT_PAR_MESH 1 # output the attributes of tracer particles mapped from mesh quantities -> edit "Input__Par_Mesh" [1] ##PARTICLE ONLY##
@@ -208,6 +208,7 @@ OUTPUT_PART_X 0.5 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y 0.5 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z 0.5 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# miscellaneous
diff --git a/example/test_problem/Hydro/ParticleTest/clean.sh b/example/test_problem/Hydro/ParticleTest/clean.sh
index aab55a8ee8..2c7ccfacf7 100644
--- a/example/test_problem/Hydro/ParticleTest/clean.sh
+++ b/example/test_problem/Hydro/ParticleTest/clean.sh
@@ -1,5 +1,5 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance
diff --git a/example/test_problem/Hydro/ParticleTest/generate_make.sh b/example/test_problem/Hydro/ParticleTest/generate_make.sh
index 40c13d3d6e..fe069d4ace 100644
--- a/example/test_problem/Hydro/ParticleTest/generate_make.sh
+++ b/example/test_problem/Hydro/ParticleTest/generate_make.sh
@@ -2,5 +2,5 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --mpi=true --hdf5=true --fftw=FFTW3 --gpu=true \
+${PYTHON} configure.py --mpi=true --hdf5=true --fftw=FFTW3 --gpu=true \
--model=HYDRO --particle=true --tracer=true --gravity=true "$@"
diff --git a/example/test_problem/Hydro/Plummer/Input__Parameter b/example/test_problem/Hydro/Plummer/Input__Parameter
index d16913e281..c5346a6b8e 100644
--- a/example/test_problem/Hydro/Plummer/Input__Parameter
+++ b/example/test_problem/Hydro/Plummer/Input__Parameter
@@ -192,7 +192,7 @@ MONO_MAX_ITER 10 # maximum number of iterations to redu
# data dump
OPT__OUTPUT_TOTAL 1 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 0 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_PAR_MODE 1 # output the particle data: (0=off, 1=text-file, 2=C-binary) [0] ##PARTICLE ONLY##
OPT__OUTPUT_BASEPS 0 # output the base-level power spectrum [0]
@@ -217,6 +217,7 @@ OUTPUT_PART_X -1.0 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y -1.0 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z -1.0 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# miscellaneous
diff --git a/example/test_problem/Hydro/Plummer/clean.sh b/example/test_problem/Hydro/Plummer/clean.sh
index 2e46ad0248..aef5e71407 100644
--- a/example/test_problem/Hydro/Plummer/clean.sh
+++ b/example/test_problem/Hydro/Plummer/clean.sh
@@ -1,5 +1,5 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance Record__Center
diff --git a/example/test_problem/Hydro/Plummer/generate_make.sh b/example/test_problem/Hydro/Plummer/generate_make.sh
index fba86cf573..e022e8b448 100644
--- a/example/test_problem/Hydro/Plummer/generate_make.sh
+++ b/example/test_problem/Hydro/Plummer/generate_make.sh
@@ -2,5 +2,5 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --mpi=true --hdf5=true --fftw=FFTW3 --gpu=true \
+${PYTHON} configure.py --mpi=true --hdf5=true --fftw=FFTW3 --gpu=true \
--model=HYDRO --particle=true --gravity=true "$@"
diff --git a/example/test_problem/Hydro/Riemann/Input__Parameter b/example/test_problem/Hydro/Riemann/Input__Parameter
index 84fe92d1dd..7911b39422 100644
--- a/example/test_problem/Hydro/Riemann/Input__Parameter
+++ b/example/test_problem/Hydro/Riemann/Input__Parameter
@@ -141,7 +141,7 @@ MONO_MAX_ITER 10 # maximum number of iterations to redu
# data dump
OPT__OUTPUT_TOTAL 0 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 4 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 4 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_BASE 0 # only output the base-level data [0] ##OPT__OUTPUT_PART ONLY##
OPT__OUTPUT_PRES 0 # output gas pressure [0] ##HYDRO ONLY##
OPT__OUTPUT_TEMP 0 # output gas temperature [0 (HD) or 1 (SRHD)] ##HYDRO ONLY##
@@ -162,6 +162,7 @@ OUTPUT_PART_X 0.0 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y 0.0 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z 0.0 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# miscellaneous
diff --git a/example/test_problem/Hydro/Riemann/clean.sh b/example/test_problem/Hydro/Riemann/clean.sh
index 1197541bb6..99c54c062b 100644
--- a/example/test_problem/Hydro/Riemann/clean.sh
+++ b/example/test_problem/Hydro/Riemann/clean.sh
@@ -1,6 +1,6 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance \
GRACKLE_INFO Record__DivB
diff --git a/example/test_problem/Hydro/Riemann/generate_make.sh b/example/test_problem/Hydro/Riemann/generate_make.sh
index f06567704d..82120dfead 100644
--- a/example/test_problem/Hydro/Riemann/generate_make.sh
+++ b/example/test_problem/Hydro/Riemann/generate_make.sh
@@ -2,4 +2,4 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --model=HYDRO "$@"
+${PYTHON} configure.py --model=HYDRO "$@"
diff --git a/example/test_problem/Hydro/Riemann/generate_make_Riemann_SRHD.sh b/example/test_problem/Hydro/Riemann/generate_make_Riemann_SRHD.sh
index 3ce51d82d4..1805834732 100644
--- a/example/test_problem/Hydro/Riemann/generate_make_Riemann_SRHD.sh
+++ b/example/test_problem/Hydro/Riemann/generate_make_Riemann_SRHD.sh
@@ -2,4 +2,4 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --model=HYDRO --srhd=true --double=true --eos=TAUBMATHEWS --flux=HLLC --flu_scheme=MHM --slope=PLM "$@"
+${PYTHON} configure.py --model=HYDRO --srhd=true --double=true --eos=TAUBMATHEWS --flux=HLLC --flu_scheme=MHM --slope=PLM "$@"
diff --git a/example/test_problem/Hydro/SphericalCollapse/Input__Parameter b/example/test_problem/Hydro/SphericalCollapse/Input__Parameter
index b801acfc6f..0268ae0b97 100644
--- a/example/test_problem/Hydro/SphericalCollapse/Input__Parameter
+++ b/example/test_problem/Hydro/SphericalCollapse/Input__Parameter
@@ -166,7 +166,7 @@ INIT_SUBSAMPLING_NCELL 4 # perform sub-sampling during initiali
# data dump
OPT__OUTPUT_TOTAL 1 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 7 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 7 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 0 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_BASEPS 0 # output the base-level power spectrum [0]
OPT__OUTPUT_BASE 0 # only output the base-level data [0] ##OPT__OUTPUT_PART ONLY##
@@ -188,6 +188,7 @@ OUTPUT_PART_X 0.0 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y 0.0 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z 0.0 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# miscellaneous
diff --git a/example/test_problem/Hydro/SphericalCollapse/clean.sh b/example/test_problem/Hydro/SphericalCollapse/clean.sh
index aab55a8ee8..2c7ccfacf7 100644
--- a/example/test_problem/Hydro/SphericalCollapse/clean.sh
+++ b/example/test_problem/Hydro/SphericalCollapse/clean.sh
@@ -1,5 +1,5 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance
diff --git a/example/test_problem/Hydro/SphericalCollapse/generate_make.sh b/example/test_problem/Hydro/SphericalCollapse/generate_make.sh
index 5849b640f0..6398a3fe92 100644
--- a/example/test_problem/Hydro/SphericalCollapse/generate_make.sh
+++ b/example/test_problem/Hydro/SphericalCollapse/generate_make.sh
@@ -2,5 +2,5 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --mpi=true --hdf5=true --fftw=FFTW3 --gpu=true \
+${PYTHON} configure.py --mpi=true --hdf5=true --fftw=FFTW3 --gpu=true \
--model=HYDRO --gravity=true --comoving=true --dual=DE_ENPY "$@"
diff --git a/example/test_problem/Hydro/Zeldovich/Input__Parameter b/example/test_problem/Hydro/Zeldovich/Input__Parameter
index 56f7878525..5358074506 100644
--- a/example/test_problem/Hydro/Zeldovich/Input__Parameter
+++ b/example/test_problem/Hydro/Zeldovich/Input__Parameter
@@ -181,7 +181,7 @@ INT_MONO_COEFF 2.0 # coefficient for ensuring the interpo
# data dump
OPT__OUTPUT_TOTAL 1 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 4 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
+OPT__OUTPUT_PART 4 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
OPT__OUTPUT_USER 1 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_PAR_MODE 0 # output the particle data: (0=off, 1=text-file, 2=C-binary) [0] ##PARTICLE ONLY##
OPT__OUTPUT_BASEPS 0 # output the base-level power spectrum [0]
@@ -197,6 +197,7 @@ OUTPUT_PART_X 0.0 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y 0.0 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z 0.0 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# miscellaneous
diff --git a/example/test_problem/Hydro/Zeldovich/clean.sh b/example/test_problem/Hydro/Zeldovich/clean.sh
index 9f5d25f7c4..052fa3dce0 100644
--- a/example/test_problem/Hydro/Zeldovich/clean.sh
+++ b/example/test_problem/Hydro/Zeldovich/clean.sh
@@ -1,6 +1,6 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* gamer.e* gamer.o* Zeldovich_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance \
GRACKLE_INFO Record__DivB
diff --git a/example/test_problem/Hydro/Zeldovich/generate_make.sh b/example/test_problem/Hydro/Zeldovich/generate_make.sh
index 0fa500a935..ac3b9a5f8b 100644
--- a/example/test_problem/Hydro/Zeldovich/generate_make.sh
+++ b/example/test_problem/Hydro/Zeldovich/generate_make.sh
@@ -2,6 +2,6 @@
PYTHON=python3
-${PYTHON} configure.py --machine=eureka_intel --mpi=true --hdf5=true --fftw=FFTW3 --gpu=true \
+${PYTHON} configure.py --mpi=true --hdf5=true --fftw=FFTW3 --gpu=true \
--gsl=true --double=true --model=HYDRO --gravity=true \
--comoving=true --dual=DE_ENPY --particle=true "$@"
diff --git a/example/test_problem/Template/Input__Parameter b/example/test_problem/Template/Input__Parameter
index 5f245d1b6f..ad73dfe255 100644
--- a/example/test_problem/Template/Input__Parameter
+++ b/example/test_problem/Template/Input__Parameter
@@ -378,8 +378,9 @@ SPEC_INT_GHOST_BOUNDARY 4 # ghost boundary size for spectral int
# data dump
OPT__OUTPUT_TOTAL 1 # output the simulation snapshot: (0=off, 1=HDF5, 2=C-binary) [1]
-OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag) [0]
-OPT__OUTPUT_TEXT_FORMAT_FLT %24.16e # string format of output text files [%24.16e]
+OPT__OUTPUT_PART 0 # output a single line or slice: (0=off, 1=xy, 2=yz, 3=xz, 4=x, 5=y, 6=z, 7=diag, 8=entire box) [0]
+OPT__OUTPUT_TEXT_FORMAT_FLT %24.16e # string format of floating-point variables in output text files [%24.16e]
+OPT__OUTPUT_TEXT_LENGTH_INT 12 # string length of integer variables in output text files [12]
OPT__OUTPUT_USER 0 # output the user-specified data -> edit "Output_User.cpp" [0]
OPT__OUTPUT_PAR_MODE 0 # output the particle data: (0=off, 1=text-file, 2=C-binary) [0] ##PARTICLE ONLY##
OPT__OUTPUT_PAR_MESH 1 # output the attributes of tracer particles mapped from mesh quantities -> edit "Input__Par_Mesh" [1] ##PARTICLE ONLY##
@@ -410,6 +411,7 @@ OUTPUT_PART_X -1.0 # x coordinate for OPT__OUTPUT_PART [-
OUTPUT_PART_Y -1.0 # y coordinate for OPT__OUTPUT_PART [-1.0]
OUTPUT_PART_Z -1.0 # z coordinate for OPT__OUTPUT_PART [-1.0]
INIT_DUMPID -1 # set the first dump ID (<0=auto) [-1]
+OUTPUT_DIR . # set the output directory [.]
# yt inline analysis (SUPPORT_LIBYT only)
diff --git a/example/test_problem/Template/clean.sh b/example/test_problem/Template/clean.sh
index 3909d21052..aa493a48c9 100644
--- a/example/test_problem/Template/clean.sh
+++ b/example/test_problem/Template/clean.sh
@@ -1,6 +1,6 @@
rm -f Record__Note Record__Timing Record__TimeStep Record__PatchCount Record__Dump Record__MemInfo Record__L1Err \
Record__Conservation Data* stderr stdout log XYslice* YZslice* XZslice* Xline* Yline* Zline* \
- Diag* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
+ Diag* Box* BaseXYslice* BaseYZslice* BaseXZslice* BaseXline* BaseYline* BaseZline* BaseDiag* \
PowerSpec_* Particle_* nohup.out Record__Performance Record__TimingMPI_* \
Record__ParticleCount Record__User Patch_* Record__NCorrUnphy FailedPatchGroup* *.pyc Record__LoadBalance \
GRACKLE_INFO Record__DivB Record__Center
diff --git a/include/Global.h b/include/Global.h
index bc08cdaa9e..30beccc53d 100644
--- a/include/Global.h
+++ b/include/Global.h
@@ -81,10 +81,12 @@ extern bool OPT__OPTIMIZE_AGGRESSIVE, OPT__INIT_GRID_WITH_OMP, OPT__NO_FLA
extern bool OPT__RECORD_NOTE, OPT__RECORD_UNPHY, INT_OPP_SIGN_0TH_ORDER;
extern bool OPT__INT_FRAC_PASSIVE_LR, OPT__CK_INPUT_FLUID, OPT__SORT_PATCH_BY_LBIDX;
extern char OPT__OUTPUT_TEXT_FORMAT_FLT[MAX_STRING];
+extern int OPT__OUTPUT_TEXT_LENGTH_INT;
extern int OPT__UM_IC_FLOAT8;
extern double COM_CEN_X, COM_CEN_Y, COM_CEN_Z, COM_MAX_R, COM_MIN_RHO, COM_TOLERR_R;
extern int COM_MAX_ITER;
extern double ANGMOM_ORIGIN_X, ANGMOM_ORIGIN_Y, ANGMOM_ORIGIN_Z;
+extern char OUTPUT_DIR[MAX_STRING-100];
extern double FLAG_ANGULAR_CEN_X, FLAG_ANGULAR_CEN_Y, FLAG_ANGULAR_CEN_Z;
extern double FLAG_RADIAL_CEN_X, FLAG_RADIAL_CEN_Y, FLAG_RADIAL_CEN_Z;
diff --git a/include/HDF5_Typedef.h b/include/HDF5_Typedef.h
index 16ea740aee..aa326b00bd 100644
--- a/include/HDF5_Typedef.h
+++ b/include/HDF5_Typedef.h
@@ -831,6 +831,7 @@ struct InputPara_t
int Opt__Output_Step;
double Opt__Output_Dt;
char *Opt__Output_Text_Format_Flt;
+ int Opt__Output_Text_Length_Int;
double Output_PartX;
double Output_PartY;
double Output_PartZ;
diff --git a/include/Prototype.h b/include/Prototype.h
index ac91b4a03d..af1ba95c9b 100644
--- a/include/Prototype.h
+++ b/include/Prototype.h
@@ -22,6 +22,8 @@ void Aux_Check_Refinement( const int lv, const char *comment );
void Aux_Check_Restrict( const int lv, const char *comment );
void Aux_Error( const char *File, const int Line, const char *Func, const char *Format, ... );
bool Aux_CheckFileExist( const char *FileName );
+bool Aux_CheckFolderExist( const char *FolderName );
+bool Aux_CheckPermission( const char *FileName, const int perms );
void Aux_GetCPUInfo( const char *FileName );
void Aux_GetMemInfo();
void Aux_Message( FILE *Type, const char *Format, ... );
diff --git a/include/RandomNumber.h b/include/RandomNumber.h
index 02973cee32..3fdcdfa852 100644
--- a/include/RandomNumber.h
+++ b/include/RandomNumber.h
@@ -13,6 +13,10 @@
#error : ERROR : unsupported RANDOM_NUMBER !!
#endif
+#if ( ( defined (__APPLE__) || defined (__MACH__) ) && RANDOM_NUMBER != RNG_CPP11 )
+#error : ERROR : macOS requires RANDOM_NUMBER == RNG_CPP11 !!
+#endif
+
void Aux_Error( const char *File, const int Line, const char *Func, const char *Format, ... );
diff --git a/include/Typedef.h b/include/Typedef.h
index c222b20ef2..cd91b4fda2 100644
--- a/include/Typedef.h
+++ b/include/Typedef.h
@@ -215,7 +215,8 @@ const OptOutputPart_t
OUTPUT_X = 4,
OUTPUT_Y = 5,
OUTPUT_Z = 6,
- OUTPUT_DIAG = 7;
+ OUTPUT_DIAG = 7,
+ OUTPUT_BOX = 8;
// OPT_OUTPUT_PAR_MODE options
diff --git a/src/Auxiliary/Aux_CheckFileExist.cpp b/src/Auxiliary/Aux_CheckFileExist.cpp
index de3551b56d..a92f549802 100644
--- a/src/Auxiliary/Aux_CheckFileExist.cpp
+++ b/src/Auxiliary/Aux_CheckFileExist.cpp
@@ -1,5 +1,7 @@
#include "GAMER.h"
#include
+#include
+#include
@@ -21,3 +23,67 @@ bool Aux_CheckFileExist( const char *FileName )
return ( stat(FileName,&Buf) == 0 );
} // FUNCTION : Aux_CheckFileExist
+
+
+
+//-------------------------------------------------------------------------------------------------------
+// Function : Aux_CheckFolderExist
+// Description : Check whether or not the target folder exists
+//
+// Note : Use the "stat" function to query the existence of the target folder
+//
+// Parameter : FolderName : Name of the target folder
+//
+// Return : true/false <-> folder exists/not exists
+//-------------------------------------------------------------------------------------------------------
+bool Aux_CheckFolderExist( const char *FolderName )
+{
+
+ struct stat Buf;
+
+ if ( stat(FolderName, &Buf) != 0 ) return false; // not exist
+ else if ( !(Buf.st_mode & S_IFDIR) ) return false; // not a directoy
+
+ return true;
+
+} // FUNCTION : Aux_CheckFolderExist
+
+
+
+//-------------------------------------------------------------------------------------------------------
+// Function : Aux_CheckPermission
+// Description : Check whether or not the target file has requested permissions
+//
+// Note : Use the "stat" function to query the permission of the target file
+//
+// Parameter : FileName : Name of the target file
+// : perms : Permissions code of the target file (sum of 4->read, 2->write, 1->execute)
+// --> Examples: 1. read and write permissions => 6 (4+2)
+// 2. read and execute permissions => 5 (4+1)
+//
+// Return : true/false <-> you does/does not have the file permissions
+//-------------------------------------------------------------------------------------------------------
+bool Aux_CheckPermission( const char *FileName, const int perms )
+{
+
+ if ( perms < 0 || perms > 7 ) Aux_Error( ERROR_INFO, "Incorrect file permission code %d (0~7) !!\n", perms );
+
+ const uid_t curUserId = getuid(); // get user id
+ const gid_t curGroupId = getgid(); // get group id
+
+ struct stat Buf;
+
+ if ( stat(FileName, &Buf) != 0 ) Aux_Error( ERROR_INFO, "file \"%s\" does not exist !!\n", FileName );
+
+ int perm_r, perm_w, perm_x;
+ if ( Buf.st_uid == curUserId ) { perm_r = S_IRUSR; perm_w = S_IWUSR; perm_x = S_IXUSR; } // user
+ else if ( Buf.st_gid == curGroupId ) { perm_r = S_IRGRP; perm_w = S_IWGRP; perm_x = S_IXGRP; } // group
+ else { perm_r = S_IROTH; perm_w = S_IWOTH; perm_x = S_IXOTH; } // other
+
+ if ( (perms & 4) && !(Buf.st_mode & perm_r) ) return false;
+ if ( (perms & 2) && !(Buf.st_mode & perm_w) ) return false;
+ if ( (perms & 1) && !(Buf.st_mode & perm_x) ) return false;
+
+ return true;
+
+} // FUNCTION : Aux_CheckPermission
diff --git a/src/Auxiliary/Aux_Check_Conservation.cpp b/src/Auxiliary/Aux_Check_Conservation.cpp
index acd6a46e51..b70c5a6674 100644
--- a/src/Auxiliary/Aux_Check_Conservation.cpp
+++ b/src/Auxiliary/Aux_Check_Conservation.cpp
@@ -33,7 +33,8 @@ void Aux_Check_Conservation( const char *comment )
{
static bool FirstTime = true;
- const char *FileName = "Record__Conservation";
+ char FileName[MAX_STRING];
+ sprintf( FileName, "%s/Record__Conservation", OUTPUT_DIR );
# if ( MODEL != HYDRO && MODEL != ELBDM && MODEL != PAR_ONLY )
diff --git a/src/Auxiliary/Aux_Check_MemFree.cpp b/src/Auxiliary/Aux_Check_MemFree.cpp
index bfbe6b431d..d9bc640915 100644
--- a/src/Auxiliary/Aux_Check_MemFree.cpp
+++ b/src/Auxiliary/Aux_Check_MemFree.cpp
@@ -18,6 +18,12 @@
void Aux_Check_MemFree( const double MinMemFree_Total, const char *comment )
{
+// memory reporting is not currently supported on macOS
+# ifdef __APPLE__
+ return;
+# endif
+
+
const int StrSize = 128;
const char FileName_Mem[StrSize] = "/proc/meminfo";
diff --git a/src/Auxiliary/Aux_Check_Parameter.cpp b/src/Auxiliary/Aux_Check_Parameter.cpp
index 1c41984f59..62bb242ec6 100644
--- a/src/Auxiliary/Aux_Check_Parameter.cpp
+++ b/src/Auxiliary/Aux_Check_Parameter.cpp
@@ -243,6 +243,11 @@ void Aux_Check_Parameter()
if ( OPT__MEMORY_POOL && !OPT__REUSE_MEMORY )
Aux_Error( ERROR_INFO, "please turn on OPT__REUSE_MEMORY for OPT__MEMORY_POOL !!\n" );
+# ifdef __APPLE__
+ if ( OPT__RECORD_MEMORY )
+ Aux_Message( stderr, "WARNING : memory reporting is not currently supported on macOS !!\n" );
+# endif
+
if ( OPT__CORR_AFTER_ALL_SYNC != CORR_AFTER_SYNC_NONE && OPT__CORR_AFTER_ALL_SYNC != CORR_AFTER_SYNC_EVERY_STEP &&
OPT__CORR_AFTER_ALL_SYNC != CORR_AFTER_SYNC_BEFORE_DUMP )
Aux_Error( ERROR_INFO, "incorrect option \"OPT__CORR_AFTER_ALL_SYNC = %d\" [0/1/2] !!\n", OPT__CORR_AFTER_ALL_SYNC );
@@ -332,6 +337,17 @@ void Aux_Check_Parameter()
# endif // #if ( MODEL == HYDRO )
+ if ( strlen(OUTPUT_DIR) > MAX_STRING-100-1 )
+ Aux_Error( ERROR_INFO, "Length of OUTPUT_DIR (%d) should be smaller than MAX_STRING-100-1 (%d) !!\n",
+ strlen(OUTPUT_DIR), MAX_STRING-100-1 );
+
+ if ( ! Aux_CheckFolderExist( OUTPUT_DIR ) )
+ Aux_Error( ERROR_INFO, "\"%s\" folder set by OUTPUT_DIR does not exist !!\n", OUTPUT_DIR );
+
+ if ( ! Aux_CheckPermission( OUTPUT_DIR, 2+1 ) )
+ Aux_Error( ERROR_INFO, "You do not have write and execute permissions for the \"%s\" folder set by OUTPUT_DIR !!\n", OUTPUT_DIR );
+
+
// general warnings
// =======================================================================================
diff --git a/src/Auxiliary/Aux_GetCPUInfo.cpp b/src/Auxiliary/Aux_GetCPUInfo.cpp
index d8828be4fe..b998607986 100644
--- a/src/Auxiliary/Aux_GetCPUInfo.cpp
+++ b/src/Auxiliary/Aux_GetCPUInfo.cpp
@@ -12,6 +12,13 @@
void Aux_GetCPUInfo( const char *FileName )
{
+// CPU info reporting is not currently supported on macOS
+# ifdef __APPLE__
+ Aux_Message( stderr, "WARNING : function \"%s\" is not supported on macOS !!\n", __FUNCTION__ );
+ return;
+# endif
+
+
FILE *Note = fopen( FileName, "a" );
char *line = NULL;
size_t len = 0;
diff --git a/src/Auxiliary/Aux_GetMemInfo.cpp b/src/Auxiliary/Aux_GetMemInfo.cpp
index 1eec0d7438..faf1a42c4e 100644
--- a/src/Auxiliary/Aux_GetMemInfo.cpp
+++ b/src/Auxiliary/Aux_GetMemInfo.cpp
@@ -17,17 +17,24 @@
void Aux_GetMemInfo()
{
- const char FileName_Record[] = "Record__MemInfo";
- const int PID = getpid();
- const int NInfo = 4; // number of memory information to be recorded (VmSize/Peak, VmRSS/HWM)
+// memory reporting is not currently supported on macOS
+# ifdef __APPLE__
+ return;
+# endif
+
+
+ const int PID = getpid();
+ const int NInfo = 4; // number of memory information to be recorded (VmSize/Peak, VmRSS/HWM)
static bool FirstTime=true;
- char FileName_Status[MAX_STRING], Useless[NInfo][MAX_STRING], *line=NULL;
+ char FileName_Record[MAX_STRING], FileName_Status[MAX_STRING], Useless[NInfo][MAX_STRING], *line=NULL;
char VmSize[MAX_STRING], VmPeak[MAX_STRING], VmRSS[MAX_STRING], VmHWM[MAX_STRING];
bool GetVmSize=false, GetVmPeak=false, GetVmRSS=false, GetVmHWM=false;
double Vm_double[NInfo], Vm_max[NInfo], Vm_sum[NInfo];
size_t len=0;
+ sprintf( FileName_Record, "%s/Record__MemInfo", OUTPUT_DIR );
+
// 1. read memory information from the file "FileName_Status"
sprintf( FileName_Status, "/proc/%d/status", PID );
diff --git a/src/Auxiliary/Aux_Record_Center.cpp b/src/Auxiliary/Aux_Record_Center.cpp
index bac5a0e25f..b19761ced1 100644
--- a/src/Auxiliary/Aux_Record_Center.cpp
+++ b/src/Auxiliary/Aux_Record_Center.cpp
@@ -20,8 +20,10 @@
void Aux_Record_Center()
{
- const char FileName[] = "Record__Center";
static bool FirstTime = true;
+ char FileName[MAX_STRING];
+ sprintf( FileName, "%s/Record__Center", OUTPUT_DIR );
+
// 1. Maximum fluid density in HYDRO/ELBDM
Extrema_t Max_Dens;
diff --git a/src/Auxiliary/Aux_Record_CorrUnphy.cpp b/src/Auxiliary/Aux_Record_CorrUnphy.cpp
index ffbe4a8aa4..c5ad7f844f 100644
--- a/src/Auxiliary/Aux_Record_CorrUnphy.cpp
+++ b/src/Auxiliary/Aux_Record_CorrUnphy.cpp
@@ -15,8 +15,9 @@
void Aux_Record_CorrUnphy()
{
- const char FileName[] = "Record__NCorrUnphy";
static bool FirstTime = true;
+ char FileName[MAX_STRING];
+ sprintf( FileName, "%s/Record__NCorrUnphy", OUTPUT_DIR );
long NCorrAllRank[NLEVEL];
FILE *File = NULL;
diff --git a/src/Auxiliary/Aux_Record_PatchCount.cpp b/src/Auxiliary/Aux_Record_PatchCount.cpp
index 17b51a163c..102297ced2 100644
--- a/src/Auxiliary/Aux_Record_PatchCount.cpp
+++ b/src/Auxiliary/Aux_Record_PatchCount.cpp
@@ -12,7 +12,9 @@
void Aux_Record_PatchCount()
{
- const char FileName[] = "Record__PatchCount";
+ char FileName[MAX_STRING];
+ sprintf( FileName, "%s/Record__PatchCount", OUTPUT_DIR );
+
static bool FirstTime = true;
if ( MPI_Rank == 0 && FirstTime )
diff --git a/src/Auxiliary/Aux_Record_Performance.cpp b/src/Auxiliary/Aux_Record_Performance.cpp
index 5dc39964fd..58f202a033 100644
--- a/src/Auxiliary/Aux_Record_Performance.cpp
+++ b/src/Auxiliary/Aux_Record_Performance.cpp
@@ -20,8 +20,9 @@
void Aux_Record_Performance( const double ElapsedTime )
{
- const char FileName[] = "Record__Performance";
static bool FirstTime = true;
+ char FileName[MAX_STRING];
+ sprintf( FileName, "%s/Record__Performance", OUTPUT_DIR );
// get the total number of active particles in each rank
diff --git a/src/Auxiliary/Aux_Record_User.cpp b/src/Auxiliary/Aux_Record_User.cpp
index 7ef904a442..3ecc2b9482 100644
--- a/src/Auxiliary/Aux_Record_User.cpp
+++ b/src/Auxiliary/Aux_Record_User.cpp
@@ -23,8 +23,9 @@ void (*Aux_Record_User_Ptr)() = NULL;
void Aux_Record_User_Template()
{
- const char FileName[] = "Record__User";
static bool FirstTime = true;
+ char FileName[MAX_STRING];
+ sprintf( FileName, "%s/Record__User", OUTPUT_DIR );
if ( FirstTime )
{
diff --git a/src/Auxiliary/Aux_TakeNote.cpp b/src/Auxiliary/Aux_TakeNote.cpp
index 3f2aaa9f36..465ac22e5d 100644
--- a/src/Auxiliary/Aux_TakeNote.cpp
+++ b/src/Auxiliary/Aux_TakeNote.cpp
@@ -4,9 +4,6 @@
#include "CUPOT.h"
#endif
#include
-#ifdef __APPLE__
-#include
-#endif
#include "time.h"
static int get_cpuid();
@@ -25,8 +22,10 @@ void Aux_TakeNote()
if ( MPI_Rank == 0 ) Aux_Message( stdout, "Aux_TakeNote ...\n" );
- const char FileName[] = "Record__Note";
FILE *Note;
+ char FileName[MAX_STRING];
+ sprintf( FileName, "%s/Record__Note", OUTPUT_DIR );
+
if ( MPI_Rank == 0 )
{
@@ -39,7 +38,9 @@ void Aux_TakeNote()
fprintf( Note, "***********************************************************************************\n" );
fclose( Note );
- system( "cat ./Input__Note >> Record__Note" );
+ char Command[MAX_STRING];
+ sprintf( Command, "cat ./Input__Note >> %s/Record__Note", OUTPUT_DIR );
+ system( Command );
Note = fopen( FileName, "a" );
fprintf( Note, "***********************************************************************************\n" );
@@ -1582,6 +1583,7 @@ void Aux_TakeNote()
fprintf( Note, "OPT__OUTPUT_PART % d\n", OPT__OUTPUT_PART );
fprintf( Note, "OPT__OUTPUT_USER % d\n", OPT__OUTPUT_USER );
fprintf( Note, "OPT__OUTPUT_TEXT_FORMAT_FLT %s\n", OPT__OUTPUT_TEXT_FORMAT_FLT );
+ fprintf( Note, "OPT__OUTPUT_TEXT_LENGTH_INT % d\n", OPT__OUTPUT_TEXT_LENGTH_INT );
# ifdef PARTICLE
fprintf( Note, "OPT__OUTPUT_PAR_MODE % d\n", OPT__OUTPUT_PAR_MODE );
# ifdef TRACER
@@ -1640,6 +1642,7 @@ void Aux_TakeNote()
fprintf( Note, "OUTPUT_PART_Y % 21.14e\n", OUTPUT_PART_Y );
fprintf( Note, "OUTPUT_PART_Z % 21.14e\n", OUTPUT_PART_Z );
fprintf( Note, "INIT_DUMPID % d\n", INIT_DUMPID );
+ fprintf( Note, "OUTPUT_DIR %s\n", OUTPUT_DIR );
fprintf( Note, "***********************************************************************************\n" );
fprintf( Note, "\n\n" );
@@ -2101,23 +2104,16 @@ void Aux_TakeNote()
// Function : get_cpuid
// Description : Get the CPU ID
//
-// Note : Work on both macOS and Linux systems
+// Note : Works only on Linux systems; macOS is ignored
//-------------------------------------------------------------------------------------------------------
int get_cpuid()
{
-// See https://stackoverflow.com/questions/33745364/sched-getcpu-equivalent-for-os-x
int CPU;
# ifdef __APPLE__
- uint32_t CPUInfo[4];
- __cpuid_count(1, 0, CPUInfo[0], CPUInfo[1], CPUInfo[2], CPUInfo[3]);
- if ((CPUInfo[3] & (1 << 9)) == 0) {
- CPU = -1; /* no APIC on chip */
- } else {
- CPU = (unsigned)CPUInfo[1] >> 24;
- }
- if (CPU < 0) CPU = 0;
+// macOS does not have an implementation of sched_getcpu that works cross-arch
+ CPU = -1;
# else
CPU = sched_getcpu();
# endif
diff --git a/src/Auxiliary/Aux_Timing.cpp b/src/Auxiliary/Aux_Timing.cpp
index 18eb4574df..a348aa170d 100644
--- a/src/Auxiliary/Aux_Timing.cpp
+++ b/src/Auxiliary/Aux_Timing.cpp
@@ -226,9 +226,9 @@ void Aux_ResetTimer()
void Aux_Record_Timing()
{
- const char FileName[] = "Record__Timing";
-
FILE *File = NULL;
+ char FileName[MAX_STRING];
+ sprintf( FileName, "%s/Record__Timing", OUTPUT_DIR );
const char Comment_LB[][4] = { "Max", "Min", "Ave" };
const int NLB = 8;
@@ -986,9 +986,10 @@ void Timing__Solver( const char FileName[] )
void Aux_AccumulatedTiming( const double TotalT, double InitT, double OtherT )
{
- const char FileName[] = "Record__Timing";
const char Comment_LB[][4] = { "Max", "Min", "Ave" };
const int NNewTimer = 2;
+ char FileName[MAX_STRING];
+ sprintf( FileName, "%s/Record__Timing", OUTPUT_DIR );
double dt_P, Flu_P, Gra_P, Src_P, Che_P, SF_P, FB_P, FixUp_P, Flag_P, Refine_P, Sum_P, MPI_Grid_P;
double Aux_P, Corr_P, Output_P, LB_P, Par_P, MPI_Par_P, libyt_P, Init_P, Other_P;
diff --git a/src/Feedback/FB_AdvanceDt.cpp b/src/Feedback/FB_AdvanceDt.cpp
index f0723f033d..5428a1d3ea 100644
--- a/src/Feedback/FB_AdvanceDt.cpp
+++ b/src/Feedback/FB_AdvanceDt.cpp
@@ -81,7 +81,7 @@ void FB_AdvanceDt( const int lv, const double TimeNew, const double TimeOld, con
// 2. allocate a temporary particle repository to store the updated particle data
-// --> must initialize it since we will replace amr->Par->AttributeFlt[] by ParAttFlt_Updated[] and
+// --> must initialize it since we will replace amr->Par->AttributeFlt[] by ParAttFlt_Updated[] and
// amr->Par->AttributeInt[] by ParAttInt_Updated[] at the end of this routine
// --> otherwise, the data of particles skipped by this routine (e.g., those not on FB_LEVEL) will be incorrect
// --> also to retain the information of inactive particles
diff --git a/src/Fluid/Flu_Close.cpp b/src/Fluid/Flu_Close.cpp
index 89a375d852..6ef546cf21 100644
--- a/src/Fluid/Flu_Close.cpp
+++ b/src/Fluid/Flu_Close.cpp
@@ -971,8 +971,8 @@ void CorrectUnphysical( const int lv, const int NPG, const int *PID0_List,
const bool CheckMinPres_No = false;
real In[NCOMP_TOTAL], tmp[NCOMP_TOTAL];
- char FileName[100];
- sprintf( FileName, "FailedPatchGroup_r%03d_lv%02d_PID0-%05d", MPI_Rank, lv, PID0_List[TID] );
+ char FileName[MAX_STRING];
+ sprintf( FileName, "%s/FailedPatchGroup_r%03d_lv%02d_PID0-%05d", OUTPUT_DIR, MPI_Rank, lv, PID0_List[TID] );
// use "a" instead of "w" since there may be more than one failed cell in a given patch group
FILE *File = fopen( FileName, "a" );
diff --git a/src/GPU_API/CUAPI_DiagnoseDevice.cu b/src/GPU_API/CUAPI_DiagnoseDevice.cu
index 607b3353bf..a3d4a6c278 100644
--- a/src/GPU_API/CUAPI_DiagnoseDevice.cu
+++ b/src/GPU_API/CUAPI_DiagnoseDevice.cu
@@ -59,7 +59,8 @@ void CUAPI_DiagnoseDevice()
// record the device properties
- const char FileName[] = "Record__Note";
+ char FileName[MAX_STRING];
+ sprintf( FileName, "%s/Record__Note", OUTPUT_DIR );
if ( MPI_Rank == 0 )
{
diff --git a/src/Init/Init_ByRestart_HDF5.cpp b/src/Init/Init_ByRestart_HDF5.cpp
index 56b451e96e..4ae2b3156c 100644
--- a/src/Init/Init_ByRestart_HDF5.cpp
+++ b/src/Init/Init_ByRestart_HDF5.cpp
@@ -2357,6 +2357,7 @@ void Check_InputPara( const char *FileName, const int FormatVersion )
LoadField( "Opt__Output_Step", &RS.Opt__Output_Step, SID, TID, NonFatal, &RT.Opt__Output_Step, 1, NonFatal );
LoadField( "Opt__Output_Dt", &RS.Opt__Output_Dt, SID, TID, NonFatal, &RT.Opt__Output_Dt, 1, NonFatal );
LoadField( "Opt__Output_Text_Format_Flt", &RS.Opt__Output_Text_Format_Flt, SID, TID, NonFatal, RT.Opt__Output_Text_Format_Flt, 1, NonFatal );
+ LoadField( "Opt__Output_Text_Length_Int", &RS.Opt__Output_Text_Length_Int, SID, TID, NonFatal, &RT.Opt__Output_Text_Length_Int, 1, NonFatal );
}
if ( OPT__OUTPUT_PART ) {
LoadField( "Output_PartX", &RS.Output_PartX, SID, TID, NonFatal, &RT.Output_PartX, 1, NonFatal );
diff --git a/src/Init/Init_Load_Parameter.cpp b/src/Init/Init_Load_Parameter.cpp
index 902f51edf1..b19f86e3d4 100644
--- a/src/Init/Init_Load_Parameter.cpp
+++ b/src/Init/Init_Load_Parameter.cpp
@@ -500,9 +500,10 @@ void Init_Load_Parameter()
// data dump
ReadPara->Add( "OPT__OUTPUT_TOTAL", &OPT__OUTPUT_TOTAL, 1, 0, 2 );
- ReadPara->Add( "OPT__OUTPUT_PART", &OPT__OUTPUT_PART, 0, 0, 7 );
+ ReadPara->Add( "OPT__OUTPUT_PART", &OPT__OUTPUT_PART, 0, 0, 8 );
ReadPara->Add( "OPT__OUTPUT_USER", &OPT__OUTPUT_USER, false, Useless_bool, Useless_bool );
ReadPara->Add( "OPT__OUTPUT_TEXT_FORMAT_FLT", OPT__OUTPUT_TEXT_FORMAT_FLT, "%24.16e", Useless_str, Useless_str );
+ ReadPara->Add( "OPT__OUTPUT_TEXT_LENGTH_INT",&OPT__OUTPUT_TEXT_LENGTH_INT, 12, 0, NoMax_int );
# ifdef PARTICLE
ReadPara->Add( "OPT__OUTPUT_PAR_MODE", &OPT__OUTPUT_PAR_MODE, 0, 0, 2 );
# ifdef TRACER
@@ -517,7 +518,7 @@ void Init_Load_Parameter()
ReadPara->Add( "OPT__OUTPUT_CC_MAG", &OPT__OUTPUT_CC_MAG, true, Useless_bool, Useless_bool );
# endif
# ifdef GRAVITY
- ReadPara->Add( "OPT__OUTPUT_POT", &OPT__OUTPUT_POT, true, Useless_bool, Useless_bool );
+ ReadPara->Add( "OPT__OUTPUT_POT", &OPT__OUTPUT_POT, true, Useless_bool, Useless_bool );
# endif
# ifdef PARTICLE
ReadPara->Add( "OPT__OUTPUT_PAR_DENS", &OPT__OUTPUT_PAR_DENS, PAR_OUTPUT_DENS_PAR_ONLY, 0, 2 );
@@ -552,6 +553,7 @@ void Init_Load_Parameter()
ReadPara->Add( "OUTPUT_PART_Y", &OUTPUT_PART_Y, -1.0, NoMin_double, NoMax_double );
ReadPara->Add( "OUTPUT_PART_Z", &OUTPUT_PART_Z, -1.0, NoMin_double, NoMax_double );
ReadPara->Add( "INIT_DUMPID", &INIT_DUMPID, -1, NoMin_int, NoMax_int );
+ ReadPara->Add( "OUTPUT_DIR", OUTPUT_DIR, ".", Useless_str, Useless_str );
// yt inline analysis
diff --git a/src/LoadBalance/LB_EstimateLoadImbalance.cpp b/src/LoadBalance/LB_EstimateLoadImbalance.cpp
index cc93dc8d4c..3325a3fed4 100644
--- a/src/LoadBalance/LB_EstimateLoadImbalance.cpp
+++ b/src/LoadBalance/LB_EstimateLoadImbalance.cpp
@@ -98,8 +98,9 @@ double LB_EstimateLoadImbalance()
// 4. write to the file "Record__LoadBalance"
if ( OPT__RECORD_LOAD_BALANCE )
{
- const char FileName[] = "Record__LoadBalance";
static bool FirstTime = true;
+ char FileName[MAX_STRING];
+ sprintf( FileName, "%s/Record__LoadBalance", OUTPUT_DIR );
if ( FirstTime )
{
diff --git a/src/LoadBalance/LB_GetBufferData.cpp b/src/LoadBalance/LB_GetBufferData.cpp
index a766d7620a..2d8b070ad6 100644
--- a/src/LoadBalance/LB_GetBufferData.cpp
+++ b/src/LoadBalance/LB_GetBufferData.cpp
@@ -1639,8 +1639,8 @@ void LB_GetBufferData( const int lv, const int FluSg, const int MagSg, const int
# ifdef TIMING
if ( OPT__TIMING_MPI )
{
- char FileName[100];
- sprintf( FileName, "Record__TimingMPI_Rank%05d", MPI_Rank );
+ char FileName[MAX_STRING];
+ sprintf( FileName, "%s/Record__TimingMPI_Rank%05d", OUTPUT_DIR, MPI_Rank );
char ModeName[100];
switch ( GetBufMode )
diff --git a/src/Main/Main.cpp b/src/Main/Main.cpp
index a471b2e184..8cdbe9629f 100644
--- a/src/Main/Main.cpp
+++ b/src/Main/Main.cpp
@@ -73,10 +73,12 @@ bool OPT__OPTIMIZE_AGGRESSIVE, OPT__INIT_GRID_WITH_OMP, OPT__NO_
bool OPT__RECORD_NOTE, OPT__RECORD_UNPHY, INT_OPP_SIGN_0TH_ORDER;
bool OPT__INT_FRAC_PASSIVE_LR, OPT__CK_INPUT_FLUID, OPT__SORT_PATCH_BY_LBIDX;
char OPT__OUTPUT_TEXT_FORMAT_FLT[MAX_STRING];
+int OPT__OUTPUT_TEXT_LENGTH_INT;
int OPT__UM_IC_FLOAT8;
double COM_CEN_X, COM_CEN_Y, COM_CEN_Z, COM_MAX_R, COM_MIN_RHO, COM_TOLERR_R;
int COM_MAX_ITER;
double ANGMOM_ORIGIN_X, ANGMOM_ORIGIN_Y, ANGMOM_ORIGIN_Z;
+char OUTPUT_DIR[MAX_STRING-100];
double FLAG_ANGULAR_CEN_X, FLAG_ANGULAR_CEN_Y, FLAG_ANGULAR_CEN_Z;
double FLAG_RADIAL_CEN_X, FLAG_RADIAL_CEN_Y, FLAG_RADIAL_CEN_Z;
@@ -854,7 +856,10 @@ int main( int argc, char *argv[] )
if ( MPI_Rank == 0 && OPT__RECORD_NOTE )
{
- FILE *Note = fopen( "Record__Note", "a" );
+ char FileName[MAX_STRING];
+ sprintf( FileName, "%s/Record__Note", OUTPUT_DIR );
+
+ FILE *Note = fopen( FileName, "a" );
fprintf( Note, "\n" );
fprintf( Note, "Total Processing Time : %lf s\n", Timer_Total.GetValue() );
fprintf( Note, "\n" );
diff --git a/src/Makefile_base b/src/Makefile_base
index 14e06f7d11..42c698030f 100644
--- a/src/Makefile_base
+++ b/src/Makefile_base
@@ -407,7 +407,7 @@ endif
# -------------------------------------------------------------------------------
ifeq "$(filter -DGPU, $(SIMU_OPTION))" "-DGPU"
LIB += -L$(CUDA_PATH)/lib64
-LIB += -Wl,-rpath=$(CUDA_PATH)/lib64
+LIB += -Wl,-rpath,$(CUDA_PATH)/lib64
LIB += -lcudart
endif
@@ -417,7 +417,7 @@ endif
ifeq "$(filter -DSUPPORT_FFTW=FFTW3, $(SIMU_OPTION))" "-DSUPPORT_FFTW=FFTW3"
LIB += -L$(FFTW3_PATH)/lib
- LIB += -Wl,-rpath=$(FFTW3_PATH)/lib
+ LIB += -Wl,-rpath,$(FFTW3_PATH)/lib
ifeq "$(filter -DSERIAL, $(SIMU_OPTION))" "-DSERIAL"
LIB += -lfftw3 -lfftw3f -lm
else
@@ -431,7 +431,7 @@ endif
ifeq "$(filter -DSUPPORT_FFTW=FFTW2, $(SIMU_OPTION))" "-DSUPPORT_FFTW=FFTW2"
LIB += -L$(FFTW2_PATH)/lib
- LIB += -Wl,-rpath=$(FFTW2_PATH)/lib
+ LIB += -Wl,-rpath,$(FFTW2_PATH)/lib
ifeq "$(filter -DFLOAT8, $(SIMU_OPTION))" "-DFLOAT8"
ifeq "$(filter -DSERIAL, $(SIMU_OPTION))" "-DSERIAL"
LIB += -ldrfftw -ldfftw
@@ -449,22 +449,22 @@ endif
ifeq "$(filter -DSUPPORT_GRACKLE, $(SIMU_OPTION))" "-DSUPPORT_GRACKLE"
LIB += -L$(GRACKLE_PATH)/lib -lgrackle
-LIB += -Wl,-rpath=$(GRACKLE_PATH)/lib
+LIB += -Wl,-rpath,$(GRACKLE_PATH)/lib
endif
ifeq "$(filter -DSUPPORT_HDF5, $(SIMU_OPTION))" "-DSUPPORT_HDF5"
LIB += -L$(HDF5_PATH)/lib -lhdf5
-LIB += -Wl,-rpath=$(HDF5_PATH)/lib
+LIB += -Wl,-rpath,$(HDF5_PATH)/lib
endif
ifeq "$(filter -DSUPPORT_GSL, $(SIMU_OPTION))" "-DSUPPORT_GSL"
LIB += -L$(GSL_PATH)/lib -lgsl -lgslcblas
-LIB += -Wl,-rpath=$(GSL_PATH)/lib
+LIB += -Wl,-rpath,$(GSL_PATH)/lib
endif
ifeq "$(filter -DSUPPORT_LIBYT, $(SIMU_OPTION))" "-DSUPPORT_LIBYT"
LIB += -L$(LIBYT_PATH)/lib -lyt
-LIB += -Wl,-rpath=$(LIBYT_PATH)/lib
+LIB += -Wl,-rpath,$(LIBYT_PATH)/lib
endif
diff --git a/src/Miscellaneous/Mis_GetTimeStep.cpp b/src/Miscellaneous/Mis_GetTimeStep.cpp
index 0ba4340add..06ae395c61 100644
--- a/src/Miscellaneous/Mis_GetTimeStep.cpp
+++ b/src/Miscellaneous/Mis_GetTimeStep.cpp
@@ -28,9 +28,10 @@
double Mis_GetTimeStep( const int lv, const double dTime_SyncFaLv, const double AutoReduceDtCoeff )
{
- const char FileName[] = "Record__TimeStep";
static bool FirstTime = true;
const int NdTimeMax = 20;
+ char FileName[MAX_STRING];
+ sprintf( FileName, "%s/Record__TimeStep", OUTPUT_DIR );
char (*dTime_Name)[MAX_STRING] = new char [NdTimeMax][MAX_STRING];
double *dTime = new double [NdTimeMax];
diff --git a/src/Model_ELBDM/ELBDM_Aux_Record_Hybrid.cpp b/src/Model_ELBDM/ELBDM_Aux_Record_Hybrid.cpp
index 8441fd0784..b5e03e2ee5 100644
--- a/src/Model_ELBDM/ELBDM_Aux_Record_Hybrid.cpp
+++ b/src/Model_ELBDM/ELBDM_Aux_Record_Hybrid.cpp
@@ -19,7 +19,8 @@ void ELBDM_Aux_Record_Hybrid()
static bool FirstTime = true;
- const char *FileName = "Record__Hybrid";
+ char FileName[MAX_STRING];
+ sprintf( FileName, "%s/Record__Hybrid", OUTPUT_DIR );
FILE *File = NULL;
if ( FirstTime )
diff --git a/src/Model_ELBDM/ELBDM_Flag_Spectral.cpp b/src/Model_ELBDM/ELBDM_Flag_Spectral.cpp
index b8b77764de..811981d67b 100644
--- a/src/Model_ELBDM/ELBDM_Flag_Spectral.cpp
+++ b/src/Model_ELBDM/ELBDM_Flag_Spectral.cpp
@@ -50,7 +50,7 @@ const static flag_spectral_float Flag_Spectral_Polynomials[FLAG_SPECTRAL_ORDER]
// Cond : Reference to a floating-point variable storing the magnitude
// of the largest coefficient
//
-// Return : Cond
+// Return : Cond
//-------------------------------------------------------------------------------------------------------
void Prepare_for_Spectral_Criterion( const real *Var1D, real& Cond )
{
diff --git a/src/Model_Hydro/MHD_Aux_Check_DivergenceB.cpp b/src/Model_Hydro/MHD_Aux_Check_DivergenceB.cpp
index 69cf5d8e3f..b789b151a3 100644
--- a/src/Model_Hydro/MHD_Aux_Check_DivergenceB.cpp
+++ b/src/Model_Hydro/MHD_Aux_Check_DivergenceB.cpp
@@ -129,7 +129,8 @@ void MHD_Aux_Check_DivergenceB( const bool Verbose, const char *comment )
if ( MPI_Rank == 0 )
{
static bool FirstTime = true;
- const char *FileName = "Record__DivB";
+ char FileName[MAX_STRING];
+ sprintf( FileName, "%s/Record__DivB", OUTPUT_DIR );
// output header
if ( FirstTime )
diff --git a/src/Output/Output_BoundaryFlagList.cpp b/src/Output/Output_BoundaryFlagList.cpp
index 7c665b98c0..ab3d26fe59 100644
--- a/src/Output/Output_BoundaryFlagList.cpp
+++ b/src/Output/Output_BoundaryFlagList.cpp
@@ -20,9 +20,9 @@ void Output_BoundaryFlagList( const int option, const int lv, const char *commen
Aux_Error( ERROR_INFO, "incorrect parameter %s = %d !!\n", "option", option );
- char FileName[100];
- if ( option ) sprintf( FileName, "BoundaryFlagList_%d_%d", MPI_Rank, lv );
- else sprintf( FileName, "BufferFlagList_%d_%d", MPI_Rank, lv );
+ char FileName[MAX_STRING];
+ if ( option ) sprintf( FileName, "%s/BoundaryFlagList_%d_%d", OUTPUT_DIR, MPI_Rank, lv );
+ else sprintf( FileName, "%s/BufferFlagList_%d_%d", OUTPUT_DIR, MPI_Rank, lv );
if ( comment != NULL )
{
diff --git a/src/Output/Output_DumpData.cpp b/src/Output/Output_DumpData.cpp
index 9e6961956b..676f5875b8 100644
--- a/src/Output/Output_DumpData.cpp
+++ b/src/Output/Output_DumpData.cpp
@@ -103,45 +103,50 @@ void Output_DumpData( const int Stage )
// set the file names for all output functions
- char FileName_Total[50], FileName_Part[50], FileName_Temp[50], FileName_PS[50];
+ char FileName_Total[MAX_STRING], FileName_Part[MAX_STRING], FileName_Temp[MAX_STRING], FileName_PS[MAX_STRING];
# ifdef PARTICLE
- char FileName_Particle[50];
+ char FileName_Particle[MAX_STRING];
# endif
- if ( OPT__OUTPUT_TOTAL ) sprintf( FileName_Total, "Data_%06d", DumpID );
+ if ( OPT__OUTPUT_TOTAL )
+ {
+ sprintf( FileName_Total, "%s/Data_%06d", OUTPUT_DIR, DumpID );
+ }
if ( OPT__OUTPUT_PART )
{
+ sprintf( FileName_Part, "%s/", OUTPUT_DIR );
switch ( OPT__OUTPUT_PART )
{
- case OUTPUT_XY : sprintf( FileName_Temp, "XYslice_z%.3f_%06d", OUTPUT_PART_Z, DumpID ); break;
- case OUTPUT_YZ : sprintf( FileName_Temp, "YZslice_x%.3f_%06d", OUTPUT_PART_X, DumpID ); break;
- case OUTPUT_XZ : sprintf( FileName_Temp, "XZslice_y%.3f_%06d", OUTPUT_PART_Y, DumpID ); break;
- case OUTPUT_X : sprintf( FileName_Temp, "Xline_y%.3f_z%.3f_%06d", OUTPUT_PART_Y, OUTPUT_PART_Z, DumpID ); break;
- case OUTPUT_Y : sprintf( FileName_Temp, "Yline_x%.3f_z%.3f_%06d", OUTPUT_PART_X, OUTPUT_PART_Z, DumpID ); break;
- case OUTPUT_Z : sprintf( FileName_Temp, "Zline_x%.3f_y%.3f_%06d", OUTPUT_PART_X, OUTPUT_PART_Y, DumpID ); break;
+ case OUTPUT_XY : sprintf( FileName_Temp, "XYslice_z%.3f_%06d", OUTPUT_PART_Z, DumpID ); break;
+ case OUTPUT_YZ : sprintf( FileName_Temp, "YZslice_x%.3f_%06d", OUTPUT_PART_X, DumpID ); break;
+ case OUTPUT_XZ : sprintf( FileName_Temp, "XZslice_y%.3f_%06d", OUTPUT_PART_Y, DumpID ); break;
+ case OUTPUT_X : sprintf( FileName_Temp, "Xline_y%.3f_z%.3f_%06d", OUTPUT_PART_Y, OUTPUT_PART_Z, DumpID ); break;
+ case OUTPUT_Y : sprintf( FileName_Temp, "Yline_x%.3f_z%.3f_%06d", OUTPUT_PART_X, OUTPUT_PART_Z, DumpID ); break;
+ case OUTPUT_Z : sprintf( FileName_Temp, "Zline_x%.3f_y%.3f_%06d", OUTPUT_PART_X, OUTPUT_PART_Y, DumpID ); break;
case OUTPUT_DIAG : sprintf( FileName_Temp, "Diag_%06d", DumpID ); break;
+ case OUTPUT_BOX : sprintf( FileName_Temp, "Box_%06d", DumpID ); break;
default : Aux_Error( ERROR_INFO, "incorrect parameter %s = %d !!\n", "OPT__OUTPUT_PART", OPT__OUTPUT_PART );
} // switch ( OPT__OUTPUT_PART )
if ( OPT__OUTPUT_BASE )
{
- sprintf( FileName_Part, "%s", "Base" );
+ strcat( FileName_Part, "Base" );
strcat( FileName_Part, FileName_Temp );
}
else
- strcpy( FileName_Part, FileName_Temp );
+ strcat( FileName_Part, FileName_Temp );
} // if ( OPT__OUTPUT_PART )
if ( OPT__OUTPUT_BASEPS )
- sprintf( FileName_PS, "PowerSpec_%06d", DumpID );
+ sprintf( FileName_PS, "%s/PowerSpec_%06d", OUTPUT_DIR, DumpID );
# ifdef PARTICLE
if ( OPT__OUTPUT_PAR_MODE == OUTPUT_PAR_TEXT )
- sprintf( FileName_Particle, "Particle_%06d.txt", DumpID );
+ sprintf( FileName_Particle, "%s/Particle_%06d.txt", OUTPUT_DIR, DumpID );
if ( OPT__OUTPUT_PAR_MODE == OUTPUT_PAR_CBIN )
- sprintf( FileName_Particle, "Particle_%06d.cbin", DumpID );
+ sprintf( FileName_Particle, "%s/Particle_%06d.cbin", OUTPUT_DIR, DumpID );
# endif
@@ -313,7 +318,8 @@ void Output_DumpData( const int Stage )
void Write_DumpRecord()
{
- const char FileName[] = "Record__Dump";
+ char FileName[MAX_STRING];
+ sprintf( FileName, "%s/Record__Dump", OUTPUT_DIR );
// create the "Record__Dump" file at the first dump
diff --git a/src/Output/Output_DumpData_Part.cpp b/src/Output/Output_DumpData_Part.cpp
index 8940b65724..ddd269c27d 100644
--- a/src/Output/Output_DumpData_Part.cpp
+++ b/src/Output/Output_DumpData_Part.cpp
@@ -25,6 +25,7 @@ static void GetDerivedField( real (*Der_FluIn)[NCOMP_TOTAL][ CUBE(DER_NXT)
// OUTPUT_Y : y line
// OUTPUT_Z : z line
// OUTPUT_DIAG : diagonal along (+1,+1,+1)
+// OUTPUT_BOX : entire box
//
// BaseOnly : Only output the base-level data
//
@@ -42,9 +43,10 @@ void Output_DumpData_Part( const OptOutputPart_t Part, const bool BaseOnly, cons
// check the input parameters
- if ( Part != OUTPUT_XY && Part != OUTPUT_YZ && Part != OUTPUT_XZ &&
- Part != OUTPUT_X && Part != OUTPUT_Y && Part != OUTPUT_Z && Part != OUTPUT_DIAG )
- Aux_Error( ERROR_INFO, "unsupported option \"Part = %d\" [0 ~ 6] !!\n", Part );
+ if ( Part != OUTPUT_XY && Part != OUTPUT_YZ && Part != OUTPUT_XZ &&
+ Part != OUTPUT_X && Part != OUTPUT_Y && Part != OUTPUT_Z &&
+ Part != OUTPUT_DIAG && Part != OUTPUT_BOX )
+ Aux_Error( ERROR_INFO, "unsupported option \"Part = %d\" [0 ~ 8] !!\n", Part );
if ( ( Part == OUTPUT_YZ || Part == OUTPUT_Y || Part == OUTPUT_Z ) &&
( x < 0.0 || x >= amr->BoxSize[0] ) )
@@ -93,14 +95,15 @@ void Output_DumpData_Part( const OptOutputPart_t Part, const bool BaseOnly, cons
switch ( Part )
{
- case OUTPUT_XY : Check_z = true; break;
- case OUTPUT_YZ : Check_x = true; break;
- case OUTPUT_XZ : Check_y = true; break;
- case OUTPUT_X : Check_y = true; Check_z = true; break;
- case OUTPUT_Y : Check_x = true; Check_z = true; break;
- case OUTPUT_Z : Check_x = true; Check_y = true; break;
+ case OUTPUT_XY : Check_z = true; break;
+ case OUTPUT_YZ : Check_x = true; break;
+ case OUTPUT_XZ : Check_y = true; break;
+ case OUTPUT_X : Check_y = true; Check_z = true; break;
+ case OUTPUT_Y : Check_x = true; Check_z = true; break;
+ case OUTPUT_Z : Check_x = true; Check_y = true; break;
case OUTPUT_DIAG :
+ case OUTPUT_BOX :
case OUTPUT_PART_NONE : break; // do nothing
}
@@ -241,7 +244,7 @@ void Output_DumpData_Part( const OptOutputPart_t Part, const bool BaseOnly, cons
}}}
} // if patch corner is within the target range
- } // if ( Part == OUTPUT_DIAG ... else ... )
+ } // if ( Part == OUTPUT_DIAG ) ... else ...
} // if ( amr->patch[0][lv][PID]->son == -1 )
} // for (int PID=0; PIDNPatchComma[lv][1]; PID++)
} // for (int lv=0; lv output OPT__FLAG_ANGULAR, FlagTable_Angular, FLAG_ANGULAR_CEN_X, FLAG_ANGULAR_CEN_Y, FLAG_ANGULAR_CEN_Z
// OPT__FLAG_RADIAL, FlagTable_Radial, FLAG_RADIAL_CEN_X, FLAG_RADIAL_CEN_Y, FLAG_RADIAL_CEN_Z
// 2500 : 2024/07/01 --> output particle integer attributes
+// 2501 : 2025/01/15 --> output OPT__OUTPUT_TEXT_LENGTH_INT
//-------------------------------------------------------------------------------------------------------
void Output_DumpData_Total_HDF5( const char *FileName )
{
@@ -1612,7 +1613,7 @@ void FillIn_KeyInfo( KeyInfo_t &KeyInfo, const int NFieldStored )
const time_t CalTime = time( NULL ); // calendar time
- KeyInfo.FormatVersion = 2500;
+ KeyInfo.FormatVersion = 2501;
KeyInfo.Model = MODEL;
KeyInfo.NLevel = NLEVEL;
KeyInfo.NCompFluid = NCOMP_FLUID;
@@ -2781,6 +2782,7 @@ void FillIn_InputPara( InputPara_t &InputPara, const int NFieldStored, char Fiel
InputPara.Opt__Output_Step = OUTPUT_STEP;
InputPara.Opt__Output_Dt = OUTPUT_DT;
InputPara.Opt__Output_Text_Format_Flt = OPT__OUTPUT_TEXT_FORMAT_FLT;
+ InputPara.Opt__Output_Text_Length_Int = OPT__OUTPUT_TEXT_LENGTH_INT;
InputPara.Output_PartX = OUTPUT_PART_X;
InputPara.Output_PartY = OUTPUT_PART_Y;
InputPara.Output_PartZ = OUTPUT_PART_Z;
@@ -3822,6 +3824,7 @@ void GetCompound_InputPara( hid_t &H5_TypeID, const int NFieldStored )
H5Tinsert( H5_TypeID, "Opt__Output_Step", HOFFSET(InputPara_t,Opt__Output_Step ), H5T_NATIVE_INT );
H5Tinsert( H5_TypeID, "Opt__Output_Dt", HOFFSET(InputPara_t,Opt__Output_Dt ), H5T_NATIVE_DOUBLE );
H5Tinsert( H5_TypeID, "Opt__Output_Text_Format_Flt", HOFFSET(InputPara_t,Opt__Output_Text_Format_Flt), H5_TypeID_VarStr );
+ H5Tinsert( H5_TypeID, "Opt__Output_Text_Length_Int", HOFFSET(InputPara_t,Opt__Output_Text_Length_Int), H5T_NATIVE_INT );
H5Tinsert( H5_TypeID, "Output_PartX", HOFFSET(InputPara_t,Output_PartX ), H5T_NATIVE_DOUBLE );
H5Tinsert( H5_TypeID, "Output_PartY", HOFFSET(InputPara_t,Output_PartY ), H5T_NATIVE_DOUBLE );
H5Tinsert( H5_TypeID, "Output_PartZ", HOFFSET(InputPara_t,Output_PartZ ), H5T_NATIVE_DOUBLE );
diff --git a/src/Output/Output_ExchangeDataPatchList.cpp b/src/Output/Output_ExchangeDataPatchList.cpp
index c2757796f7..2be286fe7e 100644
--- a/src/Output/Output_ExchangeDataPatchList.cpp
+++ b/src/Output/Output_ExchangeDataPatchList.cpp
@@ -20,9 +20,9 @@ void Output_ExchangeDataPatchList( const int option, const int lv, const char *c
Aux_Error( ERROR_INFO, "incorrect parameter %s = %d !!\n", "option", option );
- char FileName[100];
- if ( option ) sprintf( FileName, "SendDataPatchList_%d_%d", MPI_Rank, lv );
- else sprintf( FileName, "RecvDataPatchList_%d_%d", MPI_Rank, lv );
+ char FileName[MAX_STRING];
+ if ( option ) sprintf( FileName, "%s/SendDataPatchList_%d_%d", OUTPUT_DIR, MPI_Rank, lv );
+ else sprintf( FileName, "%s/RecvDataPatchList_%d_%d", OUTPUT_DIR, MPI_Rank, lv );
if ( comment != NULL )
{
diff --git a/src/Output/Output_ExchangeFluxPatchList.cpp b/src/Output/Output_ExchangeFluxPatchList.cpp
index d92b5e8d1a..c88c90c8ec 100644
--- a/src/Output/Output_ExchangeFluxPatchList.cpp
+++ b/src/Output/Output_ExchangeFluxPatchList.cpp
@@ -22,12 +22,12 @@ void Output_ExchangeFluxPatchList( const int option, const int lv, const char *c
Aux_Error( ERROR_INFO, "incorrect parameter %s = %d !!\n", "lv", lv );
- char FileName[100];
+ char FileName[MAX_STRING];
switch ( option )
{
- case 0: sprintf( FileName, "SendFluxPatchList_%d_%d", MPI_Rank, lv );
+ case 0: sprintf( FileName, "%s/SendFluxPatchList_%d_%d", OUTPUT_DIR, MPI_Rank, lv );
break;
- case 1: sprintf( FileName, "RecvFluxPatchList_%d_%d", MPI_Rank, lv );
+ case 1: sprintf( FileName, "%s/RecvFluxPatchList_%d_%d", OUTPUT_DIR, MPI_Rank, lv );
break;
}
diff --git a/src/Output/Output_ExchangePatchMap.cpp b/src/Output/Output_ExchangePatchMap.cpp
index 3921cebb6e..5e06f8e5d1 100644
--- a/src/Output/Output_ExchangePatchMap.cpp
+++ b/src/Output/Output_ExchangePatchMap.cpp
@@ -58,8 +58,8 @@ void Output_ExchangePatchMap( const int lv, const int xyz, const char *comment )
}
- char FileName[100];
- sprintf( FileName, "ExchangePatchMap_%d_%d_%2s", MPI_Rank, lv, Dim[1] );
+ char FileName[MAX_STRING];
+ sprintf( FileName, "%s/ExchangePatchMap_%d_%d_%2s", OUTPUT_DIR, MPI_Rank, lv, Dim[1] );
if ( comment != NULL )
{
strcat( FileName, "_" );
diff --git a/src/Output/Output_FlagMap.cpp b/src/Output/Output_FlagMap.cpp
index 05ce0b1750..837db08b51 100644
--- a/src/Output/Output_FlagMap.cpp
+++ b/src/Output/Output_FlagMap.cpp
@@ -54,8 +54,8 @@ void Output_FlagMap( const int lv, const int xyz, const char *comment )
}
- char FileName[100];
- sprintf( FileName, "FlagMap_%d_%d_%2s", MPI_Rank, lv, Dim[1] );
+ char FileName[MAX_STRING];
+ sprintf( FileName, "%s/FlagMap_%d_%d_%2s", OUTPUT_DIR, MPI_Rank, lv, Dim[1] );
if ( comment != NULL )
{
strcat( FileName, "_" );
diff --git a/src/Output/Output_Flux.cpp b/src/Output/Output_Flux.cpp
index 8c1abfff6d..45ae17e31e 100644
--- a/src/Output/Output_Flux.cpp
+++ b/src/Output/Output_Flux.cpp
@@ -34,8 +34,8 @@ void Output_Flux( const int lv, const int PID, const int Sib, const char *commen
patch_t *Relation = amr->patch[0][lv][PID];
- char FileName[100];
- sprintf( FileName, "Flux_r%d_lv%d_p%d%c%c", MPI_Rank, lv, PID, 45-2*(Sib%2), 120+Sib/2 );
+ char FileName[MAX_STRING];
+ sprintf( FileName, "%s/Flux_r%d_lv%d_p%d%c%c", OUTPUT_DIR, MPI_Rank, lv, PID, 45-2*(Sib%2), 120+Sib/2 );
if ( comment != NULL )
{
strcat( FileName, "_" );
diff --git a/src/Output/Output_L1Error.cpp b/src/Output/Output_L1Error.cpp
index 220cee5634..782deab1a9 100644
--- a/src/Output/Output_L1Error.cpp
+++ b/src/Output/Output_L1Error.cpp
@@ -38,10 +38,14 @@ static void WriteFile( void (*AnalFunc_Flu)( real fluid[], const double x, const
// --> Usually set to the same function pointer for initializing B field
// (e.g., SetBFieldIC() in various test problems)
// Prefix : Prefix of the output filename
-// Part : OUTPUT_X : x line
+// Part : OUTPUT_XY : x-y plane
+// OUTPUT_XZ : x-z plane
+// OUTPUT_YZ : y-z plane
+// OUTPUT_X : x line
// OUTPUT_Y : y line
// OUTPUT_Z : z line
// OUTPUT_DIAG : diagonal along (+1,+1,+1)
+// OUTPUT_BOX : entire box
// x/y/z : spatial coordinates for Part
//
// Return : None
@@ -74,38 +78,38 @@ void Output_L1Error( void (*AnalFunc_Flu)( real fluid[], const double x, const d
char FileName[NERR][MAX_STRING];
# if ( MODEL == HYDRO )
- sprintf( FileName[ 0], "%s_Dens_%06d", Prefix, DumpID );
- sprintf( FileName[ 1], "%s_MomX_%06d", Prefix, DumpID );
- sprintf( FileName[ 2], "%s_MomY_%06d", Prefix, DumpID );
- sprintf( FileName[ 3], "%s_MomZ_%06d", Prefix, DumpID );
- sprintf( FileName[ 4], "%s_Pres_%06d", Prefix, DumpID );
+ sprintf( FileName[ 0], "%s/%s_Dens_%06d", OUTPUT_DIR, Prefix, DumpID );
+ sprintf( FileName[ 1], "%s/%s_MomX_%06d", OUTPUT_DIR, Prefix, DumpID );
+ sprintf( FileName[ 2], "%s/%s_MomY_%06d", OUTPUT_DIR, Prefix, DumpID );
+ sprintf( FileName[ 3], "%s/%s_MomZ_%06d", OUTPUT_DIR, Prefix, DumpID );
+ sprintf( FileName[ 4], "%s/%s_Pres_%06d", OUTPUT_DIR, Prefix, DumpID );
for (int v=0; v= 2 )
+ fprintf( File[v], " %*s %c", StrLen_Flt, "Coord.", coord2 );
+ if ( dim == 3 )
+ fprintf( File[v], " %*s %c", StrLen_Flt, "Coord.", coord3 );
+
+ fprintf( File[v], " %*s %*s %*s\n",
+ StrLen_Flt, "Numerical", StrLen_Flt, "Analytical", StrLen_Flt, "Error" );
+ }
}
@@ -194,11 +212,11 @@ void Output_L1Error( void (*AnalFunc_Flu)( real fluid[], const double x, const d
for (int k=0; kx || xx+dh<=x ) ) continue;
WriteFile( AnalFunc_Flu, AnalFunc_Mag, File, lv, PID, i, j, k, L1_Err, Part );
+ NGrid++;
}}}
}
- } // if ( Part == OUTPUT_DIAG ... else ... )
+ } // if ( Part == OUTPUT_DIAG ) ... else ...
} // if ( amr->patch[0][lv][PID]->son == -1 )
} // for (int PID=0; PIDNPatchComma[lv][1]; PID++)
} // for (int lv=0; lvBoxSize[0]; break;
- case OUTPUT_Y : Norm = amr->BoxSize[1]; break;
- case OUTPUT_Z : Norm = amr->BoxSize[2]; break;
- case OUTPUT_DIAG : Norm = amr->BoxSize[0]; break;
- default : Aux_Error( ERROR_INFO, "unsupported option \"Part = %d\" [4/5/6/7] !!\n", Part );
+ case OUTPUT_XY : Norm = amr->BoxSize[0]*amr->BoxSize[1]; break;
+ case OUTPUT_XZ : Norm = amr->BoxSize[0]*amr->BoxSize[2]; break;
+ case OUTPUT_YZ : Norm = amr->BoxSize[1]*amr->BoxSize[2]; break;
+ case OUTPUT_X : Norm = amr->BoxSize[0]; break;
+ case OUTPUT_Y : Norm = amr->BoxSize[1]; break;
+ case OUTPUT_Z : Norm = amr->BoxSize[2]; break;
+ case OUTPUT_DIAG : Norm = amr->BoxSize[0]; break;
+ case OUTPUT_BOX : Norm = amr->BoxSize[0]*amr->BoxSize[1]*amr->BoxSize[2]; break;
+ default : Aux_Error( ERROR_INFO, "unsupported option \"Part = %d\" [1/2/3/4/5/6/7/8] !!\n", Part );
}
for (int v=0; v= 2 ) {
+ fprintf( File[v], " " );
+ fprintf( File[v], BlankPlusFormat_Flt, r2 ); }
+ if ( dim == 3 ) {
+ fprintf( File[v], " " );
+ fprintf( File[v], BlankPlusFormat_Flt, r3 ); }
fprintf( File[v], BlankPlusFormat_Flt, Nume[v] );
fprintf( File[v], BlankPlusFormat_Flt, Anal[v] );
fprintf( File[v], BlankPlusFormat_Flt, Err[v] );
diff --git a/src/Output/Output_Patch.cpp b/src/Output/Output_Patch.cpp
index 14342a2d88..05ec4298e5 100644
--- a/src/Output/Output_Patch.cpp
+++ b/src/Output/Output_Patch.cpp
@@ -59,8 +59,8 @@ void Output_Patch( const int lv, const int PID, const int FluSg, const int MagSg
real (*pot)[PS1][PS1] = amr->patch[PotSg][lv][PID]->pot;
# endif
- char FileName[100];
- sprintf( FileName, "Patch_r%d_lv%d_p%d", MPI_Rank, lv, PID );
+ char FileName[MAX_STRING];
+ sprintf( FileName, "%s/Patch_r%d_lv%d_p%d", OUTPUT_DIR, MPI_Rank, lv, PID );
if ( comment != NULL )
{
strcat( FileName, "_" );
diff --git a/src/Output/Output_PatchCorner.cpp b/src/Output/Output_PatchCorner.cpp
index a3e5d9af71..f3f6b4d452 100644
--- a/src/Output/Output_PatchCorner.cpp
+++ b/src/Output/Output_PatchCorner.cpp
@@ -18,8 +18,8 @@
void Output_PatchCorner( const int lv, const char *comment )
{
- char FileName[100];
- sprintf( FileName, "PatchCorner_%05d_%02d", MPI_Rank, lv );
+ char FileName[MAX_STRING];
+ sprintf( FileName, "%s/PatchCorner_%05d_%02d", OUTPUT_DIR, MPI_Rank, lv );
if ( comment != NULL )
{
strcat( FileName, "_" );
diff --git a/src/Output/Output_PatchMap.cpp b/src/Output/Output_PatchMap.cpp
index 02cb404320..5c04d91175 100644
--- a/src/Output/Output_PatchMap.cpp
+++ b/src/Output/Output_PatchMap.cpp
@@ -49,8 +49,8 @@ void Output_PatchMap( const int lv, const int PID, const int TSg, const int Comp
patch_t *Relation = amr->patch[ 0][lv][PID];
patch_t *Data = amr->patch[TSg][lv][PID];
- char FileName[100];
- sprintf( FileName, "PatchMap_r%d_lv%d_p%d_v%d", MPI_Rank, lv, PID, Comp );
+ char FileName[MAX_STRING];
+ sprintf( FileName, "%s/PatchMap_r%d_lv%d_p%d_v%d", OUTPUT_DIR, MPI_Rank, lv, PID, Comp );
if ( comment != NULL )
{
strcat( FileName, "_" );
diff --git a/src/Output/Output_PreparedPatch_Fluid.cpp b/src/Output/Output_PreparedPatch_Fluid.cpp
index d013ec11e2..32c32ddef7 100644
--- a/src/Output/Output_PreparedPatch_Fluid.cpp
+++ b/src/Output/Output_PreparedPatch_Fluid.cpp
@@ -50,8 +50,8 @@ void Output_PreparedPatch_Fluid( const int TLv, const int TPID,
// begin to output the prepared data
patch_t *Relation = amr->patch[0][TLv][TPID];
- char FileName[100];
- sprintf( FileName, "PrePatch_Fluid_r%d_lv%d_p%d", MPI_Rank, TLv, TPID );
+ char FileName[MAX_STRING];
+ sprintf( FileName, "%s/PrePatch_Fluid_r%d_lv%d_p%d", OUTPUT_DIR, MPI_Rank, TLv, TPID );
if ( comment != NULL )
{
strcat( FileName, "_" );
diff --git a/src/Particle/LoadBalance/Par_LB_SendParticleData.cpp b/src/Particle/LoadBalance/Par_LB_SendParticleData.cpp
index 20dce8d095..39dc256946 100644
--- a/src/Particle/LoadBalance/Par_LB_SendParticleData.cpp
+++ b/src/Particle/LoadBalance/Par_LB_SendParticleData.cpp
@@ -253,8 +253,8 @@ void Par_LB_SendParticleData( const int NParAttFlt, const int NParAttInt, int *S
dtime = Timer->GetValue() - time0;
// output to the same log file as LB_GetBufferData
- char FileName[100];
- sprintf( FileName, "Record__TimingMPI_Rank%05d", MPI_Rank );
+ char FileName[MAX_STRING];
+ sprintf( FileName, "%s/Record__TimingMPI_Rank%05d", OUTPUT_DIR, MPI_Rank );
FILE *File = fopen( FileName, "a" );
diff --git a/src/Particle/Par_Aux_Record_ParticleCount.cpp b/src/Particle/Par_Aux_Record_ParticleCount.cpp
index a92ba99205..3e8327ad48 100644
--- a/src/Particle/Par_Aux_Record_ParticleCount.cpp
+++ b/src/Particle/Par_Aux_Record_ParticleCount.cpp
@@ -15,8 +15,9 @@
void Par_Aux_Record_ParticleCount()
{
- const char FileName[] = "Record__ParticleCount";
static bool FirstTime = true;
+ char FileName[MAX_STRING];
+ sprintf( FileName, "%s/Record__ParticleCount", OUTPUT_DIR );
if ( MPI_Rank == 0 && FirstTime )
{
diff --git a/src/Particle/Par_Output_TextFile.cpp b/src/Particle/Par_Output_TextFile.cpp
index f71c3917af..c54771afb2 100644
--- a/src/Particle/Par_Output_TextFile.cpp
+++ b/src/Particle/Par_Output_TextFile.cpp
@@ -38,7 +38,7 @@ void Par_Output_TextFile( const char *FileName )
fprintf( File, " %*s", (v==0)?StrLen_Flt-1:StrLen_Flt, ParAttFltLabel[v] );
for (int v=0; vPar->Mass[p] < 0.0 ) continue;
for (int v=0; vPar->AttributeFlt[v][p] );
-# ifdef INT8_PAR
- for (int v=0; vPar->AttributeInt[v][p] );
-# else
- for (int v=0; vPar->AttributeInt[v][p] );
-# endif
+ for (int v=0; vPar->AttributeInt[v][p] );
fprintf( File, "\n" );
}
diff --git a/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp b/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp
index 44af678bbb..913058f677 100644
--- a/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp
+++ b/src/TestProblem/Hydro/Bondi/ExtAcc_Bondi.cpp
@@ -21,6 +21,11 @@
extern double Bondi_MassBH;
extern double Bondi_Soften_R;
+extern bool Bondi_Soliton;
+extern double Bondi_Soliton_m22;
+extern double Bondi_Soliton_rc;
+extern int Bondi_Soliton_type;
+extern double Bondi_Soliton_t;
//-------------------------------------------------------------------------------------------------------
// Function : SetExtAccAuxArray_Bondi
@@ -41,9 +46,55 @@ void SetExtAccAuxArray_Bondi( double AuxArray[], const double Time )
AuxArray[0] = amr->BoxCenter[0];
AuxArray[1] = amr->BoxCenter[1];
AuxArray[2] = amr->BoxCenter[2];
- AuxArray[3] = NEWTON_G*Bondi_MassBH; // gravitational_constant*point_source_mass
+ AuxArray[3] = NEWTON_G*Bondi_MassBH; // gravitational_constant*black_hole_mass (in code units)
AuxArray[4] = Bondi_Soften_R; // soften_length (<=0.0 --> disable)
+ double Coeff_t;
+ switch ( Bondi_Soliton_type )
+ {
+// unity
+ case 0: Coeff_t = 1.0;
+ break;
+
+// arctan function
+ case 1: Coeff_t = 2.0/M_PI*atan( Time/Bondi_Soliton_t );
+ break;
+
+// linear function
+ case 2: Coeff_t = ( Time < Bondi_Soliton_t ) ? Time/Bondi_Soliton_t
+ : 1.0;
+ break;
+
+// smooth step function
+ case 3: Coeff_t = ( Time < Bondi_Soliton_t ) ? 3.0*SQR( Time/Bondi_Soliton_t ) - 2.0*CUBE( Time/Bondi_Soliton_t )
+ : 1.0;
+ break;
+
+// sigmoid
+ case 4: Coeff_t = 2.0 / ( 1.0 + exp( -Time*log(3.0)/Bondi_Soliton_t ) ) - 1.0;
+ break;
+
+// tanh
+ case 5: Coeff_t = tanh( Time/Bondi_Soliton_t );
+ break;
+
+ default:
+ Aux_Error( ERROR_INFO, "unsupported Bondi_Soliton_type (%d) !!\n", Bondi_Soliton_type );
+ } // switch ( Bondi_Soliton_type )
+
+ if ( Bondi_Soliton )
+ {
+ AuxArray[5] = Coeff_t*NEWTON_G*( 4.17e9*Const_Msun/UNIT_M )/
+ ( SQR( Bondi_Soliton_m22*(real)10.0 )*( Bondi_Soliton_rc*UNIT_L/Const_pc ) );
+ AuxArray[6] = Bondi_Soliton_rc;
+ }
+
+ else
+ {
+ AuxArray[5] = -1.0;
+ AuxArray[6] = -1.0;
+ }
+
} // FUNCTION : SetExtAccAuxArray_Bondi
#endif // #ifndef __CUDACC__
@@ -72,13 +123,30 @@ static void ExtAcc_Bondi( real Acc[], const double x, const double y, const doub
const double UserArray[] )
{
- const double Cen[3] = { UserArray[0], UserArray[1], UserArray[2] };
- const real GM = (real)UserArray[3];
- const real eps = (real)UserArray[4];
- const real dx = (real)(x - Cen[0]);
- const real dy = (real)(y - Cen[1]);
- const real dz = (real)(z - Cen[2]);
- const real r = SQRT( dx*dx + dy*dy + dz*dz );
+ const double Cen[3] = { UserArray[0], UserArray[1], UserArray[2] };
+ real GM = (real)UserArray[3];
+ const real eps = (real)UserArray[4];
+ const real GM0_sol = (real)UserArray[5];
+ const real rc = (real)UserArray[6];
+ const real dx = (real)(x - Cen[0]);
+ const real dy = (real)(y - Cen[1]);
+ const real dz = (real)(z - Cen[2]);
+ const real r = SQRT( dx*dx + dy*dy + dz*dz );
+
+ if ( GM0_sol > (real)0.0 && rc > (real)0.0 )
+ {
+ const real a = SQRT( POW( (real)2.0, (real)1.0/(real)8.0 ) - (real)1.0 )*(r/rc);
+ const real GM_sol = (real)GM0_sol/( POW( SQR(a)+(real)1.0, (real)7.0 ) )*
+ ( (real) 3465*POW( a, (real)13.0 )
+ +(real) 23100*POW( a, (real)11.0 )
+ +(real) 65373*POW( a, (real) 9.0 )
+ +(real)101376*POW( a, (real) 7.0 )
+ +(real) 92323*POW( a, (real) 5.0 )
+ +(real) 48580*POW( a, (real) 3.0 )
+ -(real) 3465*a
+ +(real) 3465*POW( SQR(a)+(real)1.0, (real)7.0 )*ATAN(a) );
+ GM += GM_sol;
+ } // if ( GM0_sol > 0.0 && rc > 0.0 )
// Plummer
# if ( defined SOFTEN_PLUMMER )
diff --git a/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp
index 9f8fffb30f..c8a6a2bb32 100644
--- a/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp
+++ b/src/TestProblem/Hydro/Bondi/Flu_ResetByUser_Bondi.cpp
@@ -2,8 +2,7 @@
#if ( MODEL == HYDRO && defined GRAVITY )
-
-
+extern double Bondi_MassBH;
extern double Bondi_InBC_Rho;
extern double Bondi_InBC_R;
extern double Bondi_InBC_E;
@@ -19,6 +18,9 @@ extern double Bondi_SinkEk;
extern double Bondi_SinkEt;
extern int Bondi_SinkNCell;
+extern bool Bondi_void;
+extern bool Bondi_dynBH;
+
@@ -52,6 +54,9 @@ int Flu_ResetByUser_Func_Bondi( real fluid[], const double Emag, const double x,
const double dt, const int lv, double AuxArray[] )
{
+ if ( !Bondi_void ) return false;
+
+
const double Pos[3] = { x, y, z };
const double InBC_R2 = SQR( Bondi_InBC_R );
double dr2[3], r2;
@@ -113,6 +118,8 @@ void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const int MagSg,
int Reset;
real fluid[NCOMP_TOTAL], fluid_bk[NCOMP_TOTAL];
double x, y, z, x0, y0, z0;
+ double SinkMass_OneSubStep_ThisRank = 0.0; // variables to record sink mass at every time step
+ double SinkMass_OneSubStep_AllRank;
// reset to 0 since we only want to record the number of void cells **for one sub-step**
Bondi_SinkNCell = 0;
@@ -120,7 +127,7 @@ void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const int MagSg,
# pragma omp parallel for private( Reset, fluid, fluid_bk, x, y, z, x0, y0, z0 ) schedule( runtime ) \
reduction(+:Bondi_SinkMass, Bondi_SinkMomX, Bondi_SinkMomY, Bondi_SinkMomZ, Bondi_SinkMomXAbs, Bondi_SinkMomYAbs, Bondi_SinkMomZAbs, \
- Bondi_SinkEk, Bondi_SinkEt, Bondi_SinkNCell)
+ Bondi_SinkEk, Bondi_SinkEt, Bondi_SinkNCell, SinkMass_OneSubStep_ThisRank )
for (int PID=0; PIDNPatchComma[lv][1]; PID++)
{
x0 = amr->patch[0][lv][PID]->EdgeL[0] + 0.5*dh;
@@ -193,12 +200,26 @@ void Flu_ResetByUser_API_Bondi( const int lv, const int FluSg, const int MagSg,
Bondi_SinkEk += dv*Ek;
Bondi_SinkEt += dv*Et;
Bondi_SinkNCell ++;
+
+ SinkMass_OneSubStep_ThisRank += dv*fluid_bk[DENS];
}
- } // if ( Reset )
+ else if ( amr->patch[0][lv][PID]->son == -1 )
+ {
+// void region must be completely refined to the max level
+ Aux_Error( ERROR_INFO, "void region lies outside the max-level region !!\n" );
+ }
+ } // if ( Reset )
}}} // i,j,k
} // for (int PID=0; PIDNPatchComma[lv][1]; PID++)
+ if ( Bondi_dynBH )
+ {
+ MPI_Allreduce( &SinkMass_OneSubStep_ThisRank, &SinkMass_OneSubStep_AllRank, 1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD );
+
+ Bondi_MassBH += SinkMass_OneSubStep_AllRank;
+ }
+
} // FUNCTION : Flu_ResetByUser_API_Bondi
diff --git a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp
index f57f4af155..ab63b7f307 100644
--- a/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp
+++ b/src/TestProblem/Hydro/Bondi/Init_TestProb_Hydro_Bondi.cpp
@@ -4,76 +4,89 @@
// problem-specific global variables
// =======================================================================================
- double Bondi_MassBH; // black hole mass
-static double Bondi_Rho0; // background density
-static double Bondi_T0; // background temperature
- double Bondi_RefineRadius0; // refinement radius at the base level
- // NOTE: refinement radius at Lv is set to Bondi_RefineRadius0*2^(-Lv)
- // --> all refinement shells have roughly the same number of cells at its level
- // (except Lv=MAX_LEVEL, which will have twice the number of cells along the radius
- // unless Bondi_HalfMaxLvRefR is on)
- bool Bondi_HalfMaxLvRefR; // halve the refinement radius at the maximum level
- double Bondi_InBC_Rho; // density inside the void region
-static double Bondi_InBC_T; // temperature inside the void region
-static double Bondi_InBC_NCell; // number of finest cells for the radius of the void region
-static double Bondi_Soften_NCell; // number of finest cells for the soften length (<=0.0 ==> disable)
-
- double Bondi_InBC_R; // radius of the void region (=Bondi_InBC_NCell*dh[MAX_LEVEL])
- double Bondi_InBC_P; // pressure inside the void region
- double Bondi_InBC_E; // energy inside the void region
- double Bondi_Soften_R; // soften length (=Bondi_Soften_NCell*dh[MAX_LEVEL])
-static double Bondi_P0; // background pressure
-static double Bondi_Cs; // background sound speed
-static double Bondi_RS; // Schwarzschild radius
-static double Bondi_RB; // Bondi radius
-static double Bondi_TimeB; // Bondi time
-
- double Bondi_SinkMass; // total mass in the void region removed in one global time-step
- double Bondi_SinkMomX; // total x-momentum ...
- double Bondi_SinkMomY; // total y-momentum ...
- double Bondi_SinkMomZ; // total z-momentum ...
- double Bondi_SinkMomXAbs; // total |x-momentum| ...
- double Bondi_SinkMomYAbs; // total |y-momentum| ...
- double Bondi_SinkMomZAbs; // total |z-momentum| ...
- double Bondi_SinkEk; // total kinematic energy ...
- double Bondi_SinkEt; // total thermal energy ...
- int Bondi_SinkNCell; // total number of finest cells within the void region
+ double Bondi_MassBH; // black hole mass
+static double Bondi_Rho0; // background density
+static double Bondi_T0; // background temperature
+ double Bondi_RefineRadius0; // refinement radius at the base level
+ // NOTE: refinement radius at Lv is set to Bondi_RefineRadius0*2^(-Lv)
+ // --> all refinement shells have roughly the same number of cells at its level
+ // (except Lv=MAX_LEVEL, which will have twice the number of cells along the radius
+ // unless Bondi_HalfMaxLvRefR is on)
+ bool Bondi_HalfMaxLvRefR; // halve the refinement radius at the maximum level
+ double Bondi_InBC_Rho; // density inside the void region
+static double Bondi_InBC_T; // temperature inside the void region
+static double Bondi_InBC_NCell; // number of finest cells for the radius of the void region
+static double Bondi_Soften_NCell; // number of finest cells for the soften length (<=0.0 ==> disable)
+ bool Bondi_void; // enable the void region
+ bool Bondi_dynBH; // dynamically increase BH mass
+
+ double Bondi_InBC_R; // radius of the void region (=Bondi_InBC_NCell*dh[MAX_LEVEL])
+ double Bondi_InBC_P; // pressure inside the void region
+ double Bondi_InBC_E; // energy inside the void region
+ double Bondi_Soften_R; // soften length (=Bondi_Soften_NCell*dh[MAX_LEVEL])
+static double Bondi_P0; // background pressure
+static double Bondi_Cs; // background sound speed
+static double Bondi_RS; // Schwarzschild radius
+static double Bondi_RB; // Bondi radius
+static double Bondi_TimeB; // Bondi time
+
+ double Bondi_SinkMass; // total mass in the void region removed in one global time-step
+ double Bondi_SinkMomX; // total x-momentum ...
+ double Bondi_SinkMomY; // total y-momentum ...
+ double Bondi_SinkMomZ; // total z-momentum ...
+ double Bondi_SinkMomXAbs; // total |x-momentum| ...
+ double Bondi_SinkMomYAbs; // total |y-momentum| ...
+ double Bondi_SinkMomZAbs; // total |z-momentum| ...
+ double Bondi_SinkEk; // total kinematic energy ...
+ double Bondi_SinkEt; // total thermal energy ...
+ int Bondi_SinkNCell; // total number of finest cells within the void region
// external units in cgs
-const double UnitExt_L = Const_kpc;
-const double UnitExt_D = 1.0;
-const double UnitExt_M = Const_Msun;
-const double UnitExt_E = Const_keV;
+const double UnitExt_L = Const_kpc;
+const double UnitExt_D = 1.0;
+const double UnitExt_M = Const_Msun;
+const double UnitExt_E = Const_keV;
// hydrostatic equilibrium (HSE)
-static bool Bondi_HSE; // enable HSE
-static int Bondi_HSE_Mode; // initial configuration (1:T=Bondi_T0, 2:rho~1/r, 3:beta model)
-static double Bondi_HSE_Dens_NormR; // normalize the density profile to density(r=NormR)=NormD
-static double Bondi_HSE_Dens_NormD; // see Bondi_HSE_Dens_NormR
+static bool Bondi_HSE; // enable HSE
+static int Bondi_HSE_Mode; // initial configuration (1:T=Bondi_T0, 2:rho~1/r, 3:beta model)
+static double Bondi_HSE_Dens_NormR; // normalize the density profile to density(r=NormR)=NormD
+static double Bondi_HSE_Dens_NormD; // see Bondi_HSE_Dens_NormR
// parameters for Bondi_HSE_Mode=1
-static int Bondi_HSE_Dens_NBin; // number of bins in the density profile table
-static double Bondi_HSE_Dens_MinR; // minimum radius in the density profile
-static double Bondi_HSE_Dens_MaxR; // maximum ...
-static bool Bondi_HSE_Truncate; // truncate density within r adjust P2 in the pressure profile such that T(r=NormR)=Bondi_T0
-static double Bondi_HSE_Pres_NormP1; // P=P1*r^-2+P2 (P2=0 when Bondi_HSE_Pres_NormT=false)
-static double Bondi_HSE_Pres_NormP2;
+static bool Bondi_HSE_Pres_NormT; // true --> adjust P2 in the pressure profile such that T(r=NormR)=Bondi_T0
+static double Bondi_HSE_Pres_NormP1; // P=P1*r^-2+P2 (P2=0 when Bondi_HSE_Pres_NormT=false)
+static double Bondi_HSE_Pres_NormP2;
// parameters for Bondi_HSE_Mode=3 (beta model)
-const double Bondi_HSE_Beta = 2.0/3.0; // beta (must be 2/3 for now)
-static double Bondi_HSE_Beta_Rcore; // core radius (input parameter)
-static double Bondi_HSE_Beta_Rho0; // peak density (set by Bondi_HSE_Dens_NormR/D)
-static double Bondi_HSE_Beta_P1; // P(r) = P1*( 1/x + atan(x) ) + P2 assuming beta=2/3, where x=r/Rcore,
-static double Bondi_HSE_Beta_P2; // P1=G*MassBH*Rho0/Rcore, and P2 currently fixed to -0.5*pi*P1 so that P(inf)=0
+const double Bondi_HSE_Beta = 2.0/3.0; // beta (must be 2/3 for now)
+static double Bondi_HSE_Beta_Rcore; // core radius (input parameter)
+static double Bondi_HSE_Beta_Rho0; // peak density (set by Bondi_HSE_Dens_NormR/D)
+static double Bondi_HSE_Beta_P1; // P(r) = P1*( 1/x + atan(x) ) + P2 assuming beta=2/3, where x=r/Rcore,
+static double Bondi_HSE_Beta_P2; // P1=G*MassBH*Rho0/Rcore, and P2 currently fixed to -0.5*pi*P1 so that P(inf)=0
+
+// parameters for soliton
+ bool Bondi_Soliton; // add soliton external potential
+ double Bondi_Soliton_m22; // FDM particle mass in 1e-22 eV/c^2 for Bondi_Soliton
+ int Bondi_Soliton_type; // functional form for gradually introducing the soliton potential
+ // (0:unity, 1:arctan, 2:linear, 3:smooth step function, 4:sigmoid, 5:tanh)
+ double Bondi_Soliton_t; // characteristic time normalized to Bondi_TimeB for adding the soliton potential
+ double Bondi_Soliton_rc; // soliton radius for Bondi_Soliton
+ // (<0.0 --> compute from Bondi_Soliton_MassHalo/Redshift using the core-halo relation)
+static double Bondi_Soliton_MassHalo; // halo mass for determining Bondi_Soliton_rc
+static double Bondi_Soliton_Redshift; // redshift for determining Bondi_Soliton_rc
// =======================================================================================
@@ -89,6 +102,35 @@ static void BondiBC( real Array[], const int ArraySize[], real fluid[], const in
const int GhostSize, const int idx[], const double pos[], const double Time,
const int lv, const int TFluVarIdxList[], double AuxArray[] );
+void SetExtAccAuxArray_Bondi( double [], const double );
+
+
+
+
+#ifdef GRAVITY
+//-------------------------------------------------------------------------------------------------------
+// Function : Poi_UserWorkBeforePoisson_Bondi
+// Description : Call SetExtAccAuxArray_Bondi() to reset Bondi_MassBH and soliton parameters before
+// invoking the Poisson solver
+//
+// Note : 1. Invoked by Gra_AdvanceDt() using the function pointer "Poi_UserWorkBeforePoisson_Ptr"
+//
+// Parameter : Time : Target physical time
+// lv : Target refinement level
+//
+// Return : None
+//-------------------------------------------------------------------------------------------------------
+void Poi_UserWorkBeforePoisson_Bondi( const double Time, const int lv )
+{
+
+ SetExtAccAuxArray_Bondi( ExtAcc_AuxArray, Time );
+
+# ifdef GPU
+ CUAPI_SetConstMemory_ExtAccPot();
+# endif
+
+} // FUNCTION : Poi_UserWorkBeforePoisson_Bondi
+#endif // #ifdef GRAVITY
@@ -186,31 +228,41 @@ void SetParameter()
// --> note that VARIABLE, DEFAULT, MIN, and MAX must have the same data type
// --> some handy constants (e.g., NoMin_int, Eps_float, ...) are defined in "include/ReadPara.h"
// ********************************************************************************************************************************
-// ReadPara->Add( "KEY_IN_THE_FILE", &VARIABLE, DEFAULT, MIN, MAX );
+// ReadPara->Add( "KEY_IN_THE_FILE", &VARIABLE, DEFAULT, MIN, MAX );
// ********************************************************************************************************************************
- ReadPara->Add( "Bondi_MassBH", &Bondi_MassBH, -1.0, Eps_double, NoMax_double );
- ReadPara->Add( "Bondi_Rho0", &Bondi_Rho0, -1.0, Eps_double, NoMax_double );
- ReadPara->Add( "Bondi_T0", &Bondi_T0, -1.0, Eps_double, NoMax_double );
- ReadPara->Add( "Bondi_RefineRadius0", &Bondi_RefineRadius0, -1.0, Eps_double, NoMax_double );
- ReadPara->Add( "Bondi_HalfMaxLvRefR", &Bondi_HalfMaxLvRefR, true, Useless_bool, Useless_bool );
- ReadPara->Add( "Bondi_InBC_Rho", &Bondi_InBC_Rho, -1.0, Eps_double, NoMax_double );
- ReadPara->Add( "Bondi_InBC_T", &Bondi_InBC_T, -1.0, Eps_double, NoMax_double );
- ReadPara->Add( "Bondi_InBC_NCell", &Bondi_InBC_NCell, -1.0, Eps_double, NoMax_double );
- ReadPara->Add( "Bondi_Soften_NCell", &Bondi_Soften_NCell, -1.0, NoMin_double, NoMax_double );
-
- ReadPara->Add( "Bondi_HSE", &Bondi_HSE, false, Useless_bool, Useless_bool );
- ReadPara->Add( "Bondi_HSE_Mode", &Bondi_HSE_Mode, 1, 1, 3 );
- ReadPara->Add( "Bondi_HSE_Dens_NBin", &Bondi_HSE_Dens_NBin, 10000, 2, NoMax_int );
- ReadPara->Add( "Bondi_HSE_Dens_MinR", &Bondi_HSE_Dens_MinR, -1.0, NoMin_double, NoMax_double );
- ReadPara->Add( "Bondi_HSE_Dens_MaxR", &Bondi_HSE_Dens_MaxR, -1.0, NoMin_double, NoMax_double );
- ReadPara->Add( "Bondi_HSE_Dens_NormR", &Bondi_HSE_Dens_NormR, -1.0, NoMin_double, NoMax_double );
- ReadPara->Add( "Bondi_HSE_Dens_NormD", &Bondi_HSE_Dens_NormD, -1.0, Eps_double, NoMax_double );
- ReadPara->Add( "Bondi_HSE_Truncate", &Bondi_HSE_Truncate, true, Useless_bool, Useless_bool );
- ReadPara->Add( "Bondi_HSE_TrunR", &Bondi_HSE_TrunR, -1.0, NoMin_double, NoMax_double );
- ReadPara->Add( "Bondi_HSE_TrunD", &Bondi_HSE_TrunD, -1.0, Eps_double, NoMax_double );
- ReadPara->Add( "Bondi_HSE_TrunSmoothR",&Bondi_HSE_TrunSmoothR, -1.0, NoMin_double, NoMax_double );
- ReadPara->Add( "Bondi_HSE_Pres_NormT", &Bondi_HSE_Pres_NormT, false, Useless_bool, Useless_bool );
- ReadPara->Add( "Bondi_HSE_Beta_Rcore", &Bondi_HSE_Beta_Rcore, -1.0, Eps_double, NoMax_double );
+ ReadPara->Add( "Bondi_MassBH", &Bondi_MassBH, -1.0, Eps_double, NoMax_double );
+ ReadPara->Add( "Bondi_Rho0", &Bondi_Rho0, -1.0, Eps_double, NoMax_double );
+ ReadPara->Add( "Bondi_T0", &Bondi_T0, -1.0, Eps_double, NoMax_double );
+ ReadPara->Add( "Bondi_RefineRadius0", &Bondi_RefineRadius0, -1.0, Eps_double, NoMax_double );
+ ReadPara->Add( "Bondi_HalfMaxLvRefR", &Bondi_HalfMaxLvRefR, true, Useless_bool, Useless_bool );
+ ReadPara->Add( "Bondi_InBC_Rho", &Bondi_InBC_Rho, -1.0, Eps_double, NoMax_double );
+ ReadPara->Add( "Bondi_InBC_T", &Bondi_InBC_T, -1.0, Eps_double, NoMax_double );
+ ReadPara->Add( "Bondi_InBC_NCell", &Bondi_InBC_NCell, -1.0, Eps_double, NoMax_double );
+ ReadPara->Add( "Bondi_Soften_NCell", &Bondi_Soften_NCell, -1.0, NoMin_double, NoMax_double );
+ ReadPara->Add( "Bondi_void", &Bondi_void, true, Useless_bool, Useless_bool );
+ ReadPara->Add( "Bondi_dynBH", &Bondi_dynBH, false, Useless_bool, Useless_bool );
+
+ ReadPara->Add( "Bondi_HSE", &Bondi_HSE, false, Useless_bool, Useless_bool );
+ ReadPara->Add( "Bondi_HSE_Mode", &Bondi_HSE_Mode, 1, 1, 3 );
+ ReadPara->Add( "Bondi_HSE_Dens_NBin", &Bondi_HSE_Dens_NBin, 10000, 2, NoMax_int );
+ ReadPara->Add( "Bondi_HSE_Dens_MinR", &Bondi_HSE_Dens_MinR, -1.0, NoMin_double, NoMax_double );
+ ReadPara->Add( "Bondi_HSE_Dens_MaxR", &Bondi_HSE_Dens_MaxR, -1.0, NoMin_double, NoMax_double );
+ ReadPara->Add( "Bondi_HSE_Dens_NormR", &Bondi_HSE_Dens_NormR, -1.0, NoMin_double, NoMax_double );
+ ReadPara->Add( "Bondi_HSE_Dens_NormD", &Bondi_HSE_Dens_NormD, -1.0, Eps_double, NoMax_double );
+ ReadPara->Add( "Bondi_HSE_Truncate", &Bondi_HSE_Truncate, true, Useless_bool, Useless_bool );
+ ReadPara->Add( "Bondi_HSE_TrunR", &Bondi_HSE_TrunR, -1.0, NoMin_double, NoMax_double );
+ ReadPara->Add( "Bondi_HSE_TrunD", &Bondi_HSE_TrunD, -1.0, Eps_double, NoMax_double );
+ ReadPara->Add( "Bondi_HSE_TrunSmoothR", &Bondi_HSE_TrunSmoothR, -1.0, NoMin_double, NoMax_double );
+ ReadPara->Add( "Bondi_HSE_Pres_NormT", &Bondi_HSE_Pres_NormT, false, Useless_bool, Useless_bool );
+ ReadPara->Add( "Bondi_HSE_Beta_Rcore", &Bondi_HSE_Beta_Rcore, -1.0, Eps_double, NoMax_double );
+
+ ReadPara->Add( "Bondi_Soliton", &Bondi_Soliton, false, Useless_bool, Useless_bool );
+ ReadPara->Add( "Bondi_Soliton_m22", &Bondi_Soliton_m22, -1.0, NoMin_double, NoMax_double );
+ ReadPara->Add( "Bondi_Soliton_type", &Bondi_Soliton_type, 5, 0, 5 );
+ ReadPara->Add( "Bondi_Soliton_t", &Bondi_Soliton_t, -1.0, NoMin_double, NoMax_double );
+ ReadPara->Add( "Bondi_Soliton_rc", &Bondi_Soliton_rc, -1.0, NoMin_double, NoMax_double );
+ ReadPara->Add( "Bondi_Soliton_MassHalo", &Bondi_Soliton_MassHalo, -1.0, NoMin_double, NoMax_double );
+ ReadPara->Add( "Bondi_Soliton_Redshift", &Bondi_Soliton_Redshift, -1.0, NoMin_double, NoMax_double );
ReadPara->Read( FileName );
@@ -241,6 +293,14 @@ void SetParameter()
Aux_Message( stderr, "WARNING : OPT__BC_FLU[%d] != BC_FLU_OUTFLOW for non-HSE setup !?\n", s );
}
+ if ( Bondi_Soliton )
+ {
+ if ( Bondi_Soliton_m22 <= 0.0 ) Aux_Error( ERROR_INFO, "Bondi_Soliton_m22 (%14.7e) <= 0.0 !!\n", Bondi_Soliton_m22 );
+ if ( Bondi_Soliton_t < 0.0 ) Aux_Error( ERROR_INFO, "Bondi_Soliton_t (%14.7e) < 0.0 !!\n", Bondi_Soliton_t );
+ if ( Bondi_Soliton_MassHalo <= 0.0 ) Aux_Error( ERROR_INFO, "Bondi_Soliton_MassHalo (%14.7e) <= 0.0 !!\n", Bondi_Soliton_MassHalo );
+ if ( Bondi_Soliton_Redshift < 0.0 ) Aux_Error( ERROR_INFO, "Bondi_Soliton_Redshift (%14.7e) < 0.0 !!\n", Bondi_Soliton_Redshift );
+ }
+
// (2) set the problem-specific derived parameters
// must initialize EoS first
@@ -329,7 +389,33 @@ void SetParameter()
} // if ( Bondi_HSE )
-// (4) reset other general-purpose parameters
+// (4) initialize the soliton setup
+ if ( Bondi_Soliton )
+ {
+// compute the soliton radius using the core-halo relation from Eq. 7 in Schive et al., PRL 113, 261302 (2014)
+ if ( Bondi_Soliton_rc < 0.0 )
+ {
+ const double z = Bondi_Soliton_Redshift;
+ const double Mh = Bondi_Soliton_MassHalo*UnitExt_M/Const_Msun; // convert to Msun
+ const double H0 = 67.66*Const_km/Const_Mpc; // hard-coded for now
+ const double Om0 = 0.3111; // hard-coded for now
+ const double a0 = Om0*SQR(H0)/( 2.47e-5*SQR( 1e7/(Const_kpc*1e3) ) );
+ const double H_H0_z = 1.0/( 1.0-Om0*( 1.0-pow(1.0+z,3.0)*(1.0+z+a0)/a0 ) );
+ const double Om_z = Om0*pow(1.0+z,3.0)*H_H0_z;
+ const double Om_0 = Om0/( 1.0-Om0*( 1.0-(1.0+a0)/a0 ) );
+ const double zeta_z = ( 18.0*SQR(M_PI) + 82.0*(Om_z-1.0) - 39.0*SQR(Om_z-1.0) )/Om_z;
+ const double zeta_0 = ( 18.0*SQR(M_PI) + 82.0*(Om_0-1.0) - 39.0*SQR(Om_0-1.0) )/Om_0;
+
+ Bondi_Soliton_rc = 1.6/Bondi_Soliton_m22*pow( 1.0+z, -1.0/2.0 )*pow( zeta_z/zeta_0, -1.0/6.0 )*pow( Mh/1e9, -1.0/3.0 ); // in kpc
+ Bondi_Soliton_rc *= Const_kpc/UnitExt_L; // convert to external units to match the manually input value
+ }
+
+ Bondi_Soliton_rc *= UnitExt_L/UNIT_L; // convert to internal units
+ Bondi_Soliton_t *= Bondi_TimeB; // input Bondi_Soliton_t is normalized to the Bondi time
+ } // if ( Bondi_Soliton )
+
+
+// (5) reset other general-purpose parameters
// --> a helper macro PRINT_RESET_PARA is defined in Macro.h
const long End_Step_Default = __INT_MAX__;
const double End_T_Default = 1.0e1*Bondi_TimeB; // 10 Bondi time
@@ -349,40 +435,51 @@ void SetParameter()
if ( MPI_Rank == 0 )
{
Aux_Message( stdout, "=============================================================================\n" );
- Aux_Message( stdout, " test problem ID = %d\n", TESTPROB_ID );
- Aux_Message( stdout, " Bondi_MassBH = %13.7e (%13.7e Msun)\n", Bondi_MassBH, Bondi_MassBH*UNIT_M/Const_Msun );
- Aux_Message( stdout, " Bondi_Rho0 = %13.7e (%13.7e g/cm^3)\n", Bondi_Rho0, Bondi_Rho0*UNIT_D );
- Aux_Message( stdout, " Bondi_T0 = %13.7e (%13.7e keV)\n", Bondi_T0, Bondi_T0*UNIT_E/Const_keV );
- Aux_Message( stdout, " Bondi_RefineRadius0 = %13.7e (%13.7e kpc)\n", Bondi_RefineRadius0, Bondi_RefineRadius0*UNIT_L/Const_kpc );
- Aux_Message( stdout, " Bondi_HalfMaxLvRefR = %s\n", (Bondi_HalfMaxLvRefR)?"YES":"NO" );
- Aux_Message( stdout, " Bondi_InBC_Rho = %13.7e (%13.7e g/cm^3)\n", Bondi_InBC_Rho, Bondi_InBC_Rho*UNIT_D );
- Aux_Message( stdout, " Bondi_InBC_T = %13.7e (%13.7e keV)\n", Bondi_InBC_T, Bondi_InBC_T*UNIT_E/Const_keV );
- Aux_Message( stdout, " Bondi_InBC_NCell = %13.7e\n", Bondi_InBC_NCell );
- Aux_Message( stdout, " Bondi_InBC_R = %13.7e (%13.7e kpc)\n", Bondi_InBC_R, Bondi_InBC_R*UNIT_L/Const_kpc );
- Aux_Message( stdout, " Bondi_InBC_E = %13.7e\n", Bondi_InBC_E );
- Aux_Message( stdout, " Bondi_Soften_NCell = %13.7e\n", Bondi_Soften_NCell );
- Aux_Message( stdout, " Bondi_Soften_R = %13.7e (%13.7e kpc)\n", Bondi_Soften_R, Bondi_Soften_R*UNIT_L/Const_kpc );
- Aux_Message( stdout, " Bondi_Cs = %13.7e (%13.7e km/s)\n", Bondi_Cs, Bondi_Cs*UNIT_V/Const_km );
- Aux_Message( stdout, " Schwarzschild radius = %13.7e (%13.7e kpc)\n", Bondi_RS, Bondi_RS*UNIT_L/Const_kpc );
- Aux_Message( stdout, " Bondi radius = %13.7e (%13.7e kpc)\n", Bondi_RB, Bondi_RB*UNIT_L/Const_kpc );
- Aux_Message( stdout, " Bondi time = %13.7e (%13.7e Myr)\n", Bondi_TimeB, Bondi_TimeB*UNIT_T/Const_Myr );
-
- Aux_Message( stdout, " Bondi_HSE = %s\n", (Bondi_HSE)?"YES":"NO" );
+ Aux_Message( stdout, " test problem ID = %d\n", TESTPROB_ID );
+ Aux_Message( stdout, " Bondi_MassBH = %13.7e (%13.7e Msun)\n", Bondi_MassBH, Bondi_MassBH*UNIT_M/Const_Msun );
+ Aux_Message( stdout, " Bondi_Rho0 = %13.7e (%13.7e g/cm^3)\n", Bondi_Rho0, Bondi_Rho0*UNIT_D );
+ Aux_Message( stdout, " Bondi_T0 = %13.7e (%13.7e keV)\n", Bondi_T0, Bondi_T0*UNIT_E/Const_keV );
+ Aux_Message( stdout, " Bondi_RefineRadius0 = %13.7e (%13.7e kpc)\n", Bondi_RefineRadius0, Bondi_RefineRadius0*UNIT_L/Const_kpc );
+ Aux_Message( stdout, " Bondi_HalfMaxLvRefR = %s\n", (Bondi_HalfMaxLvRefR)?"YES":"NO" );
+ Aux_Message( stdout, " Bondi_InBC_Rho = %13.7e (%13.7e g/cm^3)\n", Bondi_InBC_Rho, Bondi_InBC_Rho*UNIT_D );
+ Aux_Message( stdout, " Bondi_InBC_T = %13.7e (%13.7e keV)\n", Bondi_InBC_T, Bondi_InBC_T*UNIT_E/Const_keV );
+ Aux_Message( stdout, " Bondi_InBC_NCell = %13.7e\n", Bondi_InBC_NCell );
+ Aux_Message( stdout, " Bondi_InBC_R = %13.7e (%13.7e kpc)\n", Bondi_InBC_R, Bondi_InBC_R*UNIT_L/Const_kpc );
+ Aux_Message( stdout, " Bondi_InBC_E = %13.7e\n", Bondi_InBC_E );
+ Aux_Message( stdout, " Bondi_Soften_NCell = %13.7e\n", Bondi_Soften_NCell );
+ Aux_Message( stdout, " Bondi_Soften_R = %13.7e (%13.7e kpc)\n", Bondi_Soften_R, Bondi_Soften_R*UNIT_L/Const_kpc );
+ Aux_Message( stdout, " Bondi_Cs = %13.7e (%13.7e km/s)\n", Bondi_Cs, Bondi_Cs*UNIT_V/Const_km );
+ Aux_Message( stdout, " Schwarzschild radius = %13.7e (%13.7e kpc)\n", Bondi_RS, Bondi_RS*UNIT_L/Const_kpc );
+ Aux_Message( stdout, " Bondi radius = %13.7e (%13.7e kpc)\n", Bondi_RB, Bondi_RB*UNIT_L/Const_kpc );
+ Aux_Message( stdout, " Bondi time = %13.7e (%13.7e Myr)\n", Bondi_TimeB, Bondi_TimeB*UNIT_T/Const_Myr );
+ Aux_Message( stdout, " Bondi_void = %s\n", (Bondi_void)?"YES":"NO" );
+ Aux_Message( stdout, " Bondi_dynBH = %s\n", (Bondi_dynBH)?"YES":"NO" );
+
+ Aux_Message( stdout, " Bondi_HSE = %s\n", (Bondi_HSE)?"YES":"NO" );
if ( Bondi_HSE ) {
- Aux_Message( stdout, " Bondi_HSE_Mode = %d\n", Bondi_HSE_Mode );
- Aux_Message( stdout, " Bondi_HSE_Dens_NBin = %d\n", Bondi_HSE_Dens_NBin );
- Aux_Message( stdout, " Bondi_HSE_Dens_MinR = %13.7e (%13.7e kpc)\n", Bondi_HSE_Dens_MinR, Bondi_HSE_Dens_MinR*UNIT_L/Const_kpc );
- Aux_Message( stdout, " Bondi_HSE_Dens_MaxR = %13.7e (%13.7e kpc)\n", Bondi_HSE_Dens_MaxR, Bondi_HSE_Dens_MaxR*UNIT_L/Const_kpc );
- Aux_Message( stdout, " Bondi_HSE_Dens_NormR = %13.7e (%13.7e kpc)\n", Bondi_HSE_Dens_NormR, Bondi_HSE_Dens_NormR*UNIT_L/Const_kpc );
- Aux_Message( stdout, " Bondi_HSE_Dens_NormD = %13.7e (%13.7e g/cm^3)\n", Bondi_HSE_Dens_NormD, Bondi_HSE_Dens_NormD*UNIT_D );
- Aux_Message( stdout, " Bondi_HSE_Truncate = %s\n", (Bondi_HSE_Truncate)?"YES":"NO" );
- Aux_Message( stdout, " Bondi_HSE_TrunR = %13.7e (%13.7e kpc)\n", Bondi_HSE_TrunR, Bondi_HSE_TrunR*UNIT_L/Const_kpc );
- Aux_Message( stdout, " Bondi_HSE_TrunD = %13.7e (%13.7e g/cm^3)\n", Bondi_HSE_TrunD, Bondi_HSE_TrunD*UNIT_D );
- Aux_Message( stdout, " Bondi_HSE_TrunSmoothR = %13.7e (%13.7e kpc)\n", Bondi_HSE_TrunSmoothR, Bondi_HSE_TrunSmoothR*UNIT_L/Const_kpc );
- Aux_Message( stdout, " Bondi_HSE_Pres_NormT = %s\n", (Bondi_HSE_Pres_NormT)?"YES":"NO" );
- Aux_Message( stdout, " Bondi_HSE_Beta = %13.7e\n", Bondi_HSE_Beta );
- Aux_Message( stdout, " Bondi_HSE_Beta_Rho0 = %13.7e (%13.7e g/cm^3)\n", Bondi_HSE_Beta_Rho0, Bondi_HSE_Beta_Rho0*UNIT_D );
- Aux_Message( stdout, " Bondi_HSE_Beta_Rcore = %13.7e (%13.7e kpc)\n", Bondi_HSE_Beta_Rcore, Bondi_HSE_Beta_Rcore*UNIT_L/Const_kpc ); }
+ Aux_Message( stdout, " Bondi_HSE_Mode = %d\n", Bondi_HSE_Mode );
+ Aux_Message( stdout, " Bondi_HSE_Dens_NBin = %d\n", Bondi_HSE_Dens_NBin );
+ Aux_Message( stdout, " Bondi_HSE_Dens_MinR = %13.7e (%13.7e kpc)\n", Bondi_HSE_Dens_MinR, Bondi_HSE_Dens_MinR*UNIT_L/Const_kpc );
+ Aux_Message( stdout, " Bondi_HSE_Dens_MaxR = %13.7e (%13.7e kpc)\n", Bondi_HSE_Dens_MaxR, Bondi_HSE_Dens_MaxR*UNIT_L/Const_kpc );
+ Aux_Message( stdout, " Bondi_HSE_Dens_NormR = %13.7e (%13.7e kpc)\n", Bondi_HSE_Dens_NormR, Bondi_HSE_Dens_NormR*UNIT_L/Const_kpc );
+ Aux_Message( stdout, " Bondi_HSE_Dens_NormD = %13.7e (%13.7e g/cm^3)\n", Bondi_HSE_Dens_NormD, Bondi_HSE_Dens_NormD*UNIT_D );
+ Aux_Message( stdout, " Bondi_HSE_Truncate = %s\n", (Bondi_HSE_Truncate)?"YES":"NO" );
+ Aux_Message( stdout, " Bondi_HSE_TrunR = %13.7e (%13.7e kpc)\n", Bondi_HSE_TrunR, Bondi_HSE_TrunR*UNIT_L/Const_kpc );
+ Aux_Message( stdout, " Bondi_HSE_TrunD = %13.7e (%13.7e g/cm^3)\n", Bondi_HSE_TrunD, Bondi_HSE_TrunD*UNIT_D );
+ Aux_Message( stdout, " Bondi_HSE_TrunSmoothR = %13.7e (%13.7e kpc)\n", Bondi_HSE_TrunSmoothR, Bondi_HSE_TrunSmoothR*UNIT_L/Const_kpc );
+ Aux_Message( stdout, " Bondi_HSE_Pres_NormT = %s\n", (Bondi_HSE_Pres_NormT)?"YES":"NO" );
+ Aux_Message( stdout, " Bondi_HSE_Beta = %13.7e\n", Bondi_HSE_Beta );
+ Aux_Message( stdout, " Bondi_HSE_Beta_Rho0 = %13.7e (%13.7e g/cm^3)\n", Bondi_HSE_Beta_Rho0, Bondi_HSE_Beta_Rho0*UNIT_D );
+ Aux_Message( stdout, " Bondi_HSE_Beta_Rcore = %13.7e (%13.7e kpc)\n", Bondi_HSE_Beta_Rcore, Bondi_HSE_Beta_Rcore*UNIT_L/Const_kpc ); }
+
+ Aux_Message( stdout, " Bondi_Soliton = %s\n", (Bondi_Soliton)?"YES":"NO" );
+ if( Bondi_Soliton ) {
+ Aux_Message( stdout, " Bondi_Soliton_m22 = %13.7e\n", Bondi_Soliton_m22 );
+ Aux_Message( stdout, " Bondi_Soliton_type = %d\n", Bondi_Soliton_type );
+ Aux_Message( stdout, " Bondi_Soliton_t = %13.7e (%13.7e Myr)\n", Bondi_Soliton_t, Bondi_Soliton_t*UNIT_T/Const_Myr );
+ Aux_Message( stdout, " Bondi_Soliton_rc = %13.7e (%13.7e kpc)\n", Bondi_Soliton_rc, Bondi_Soliton_rc*UNIT_L/Const_kpc );
+ Aux_Message( stdout, " Bondi_Soliton_MassHalo = %13.7e Msun\n", Bondi_Soliton_MassHalo*UnitExt_M/Const_Msun );
+ Aux_Message( stdout, " Bondi_Soliton_Redshift = %13.7e\n", Bondi_Soliton_Redshift ); }
Aux_Message( stdout, "=============================================================================\n" );
} // if ( MPI_Rank == 0 )
@@ -463,7 +560,6 @@ void SetGridIC( real fluid[], const double x, const double y, const double z, co
Aux_Error( ERROR_INFO, "unsupported Bondi_HSE_Mode (%d) !!\n", Bondi_HSE_Mode );
} // if ( Bondi_HSE )
-
// uniform background
else
{
@@ -585,6 +681,7 @@ void HSE_SetDensProfileTable()
} // FUNCTION : HSE_SetDensProfileTable
+
//-------------------------------------------------------------------------------------------------------
// Function : End_Bondi
// Description : Free memory before terminating the program
@@ -665,15 +762,16 @@ void Init_TestProb_Hydro_Bondi()
// set the function pointers of various problem-specific routines
- Init_Function_User_Ptr = SetGridIC;
- Flag_User_Ptr = Flag_Bondi;
- Aux_Record_User_Ptr = Record_Bondi;
- BC_User_Ptr = BondiBC;
- Flu_ResetByUser_Func_Ptr = Flu_ResetByUser_Func_Bondi;
- Flu_ResetByUser_API_Ptr = Flu_ResetByUser_API_Bondi;
- End_User_Ptr = End_Bondi;
+ Init_Function_User_Ptr = SetGridIC;
+ Flag_User_Ptr = Flag_Bondi;
+ Aux_Record_User_Ptr = Record_Bondi;
+ BC_User_Ptr = BondiBC;
+ Flu_ResetByUser_Func_Ptr = Flu_ResetByUser_Func_Bondi;
+ Flu_ResetByUser_API_Ptr = Flu_ResetByUser_API_Bondi;
+ End_User_Ptr = End_Bondi;
# ifdef GRAVITY
- Init_ExtAcc_Ptr = Init_ExtAcc_Bondi;
+ Init_ExtAcc_Ptr = Init_ExtAcc_Bondi;
+ Poi_UserWorkBeforePoisson_Ptr = Poi_UserWorkBeforePoisson_Bondi;
# endif
# endif // #if ( MODEL == HYDRO && defined GRAVITY )
diff --git a/src/TestProblem/Hydro/Bondi/Record_Bondi.cpp b/src/TestProblem/Hydro/Bondi/Record_Bondi.cpp
index 8dd04bc738..e597ab6981 100644
--- a/src/TestProblem/Hydro/Bondi/Record_Bondi.cpp
+++ b/src/TestProblem/Hydro/Bondi/Record_Bondi.cpp
@@ -6,6 +6,7 @@
// specific global variables declared in Init_TestProb_Hydro_Bondi.cpp
// =======================================================================================
+extern double Bondi_MassBH;
extern double Bondi_SinkMass;
extern double Bondi_SinkMomX;
extern double Bondi_SinkMomY;
@@ -36,7 +37,8 @@ extern int Bondi_SinkNCell;
void Record_Bondi()
{
- const char FileName[] = "Record__BondiAccretionRate";
+ char FileName[MAX_STRING];
+ sprintf( FileName, "%s/Record__BondiAccretionRate", OUTPUT_DIR );
static bool FirstTime = true;
static double Time0, dTime;
@@ -49,10 +51,10 @@ void Record_Bondi()
if ( Aux_CheckFileExist(FileName) ) Aux_Message( stderr, "WARNING : file \"%s\" already exists !!\n", FileName );
FILE *File_User = fopen( FileName, "a" );
- fprintf( File_User, "#%9s%16s%20s%20s%20s%20s%20s%20s%20s%20s%20s%20s%20s%20s\n",
+ fprintf( File_User, "#%9s%16s%20s%20s%20s%20s%20s%20s%20s%20s%20s%20s%20s%20s%20s\n",
"Step", "Time [yr]", "NVoidCell", "Mass [Msun]", "Time [yr]", "dM/dt [Msun/yr]",
"MomX [g*cm/s]", "MomY [g*cm/s]", "MomZ [g*cm/s]", "MomXAbs [g*cm/s]", "MomYAbs [g*cm/s]", "MomZAbs [g*cm/s]",
- "Ek [erg]", "Et [erg]" );
+ "Ek [erg]", "Et [erg]", "BHMass [Msun]" );
fclose( File_User );
}
@@ -69,7 +71,7 @@ void Record_Bondi()
// get the total amount of sunk variables
- double Mass_Sum, MomX_Sum, MomY_Sum, MomZ_Sum, MomXAbs_Sum, MomYAbs_Sum, MomZAbs_Sum, Ek_Sum, Et_Sum;
+ double Mass_Sum, MomX_Sum, MomY_Sum, MomZ_Sum, MomXAbs_Sum, MomYAbs_Sum, MomZAbs_Sum, Ek_Sum, Et_Sum, Mass_BH;
MPI_Reduce( &Bondi_SinkMass, &Mass_Sum, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD );
MPI_Reduce( &Bondi_SinkMomX, &MomX_Sum, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD );
@@ -90,6 +92,7 @@ void Record_Bondi()
MomZAbs_Sum *= UNIT_M*UNIT_L/UNIT_T;
Ek_Sum *= UNIT_E;
Et_Sum *= UNIT_E;
+ Mass_BH = Bondi_MassBH*UNIT_M/Const_Msun;
if ( MPI_Rank == 0 )
{
@@ -98,9 +101,9 @@ void Record_Bondi()
dTime *= UNIT_T/Const_yr;
FILE *File_User = fopen( FileName, "a" );
- fprintf( File_User, "%10ld%16.7e%20d%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e\n",
+ fprintf( File_User, "%10ld%16.7e%20d%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e%20.7e\n",
Step, Time[0]*UNIT_T/Const_yr, SinkNCell_Sum, Mass_Sum, dTime, Mass_Sum/dTime,
- MomX_Sum, MomY_Sum, MomZ_Sum, MomXAbs_Sum, MomYAbs_Sum, MomZAbs_Sum, Ek_Sum, Et_Sum );
+ MomX_Sum, MomY_Sum, MomZ_Sum, MomXAbs_Sum, MomYAbs_Sum, MomZAbs_Sum, Ek_Sum, Et_Sum, Mass_BH );
fclose( File_User );
}
} // if ( FirstTime ) ... else ...
diff --git a/src/TestProblem/Hydro/Gravity/Init_TestProb_Hydro_Gravity.cpp b/src/TestProblem/Hydro/Gravity/Init_TestProb_Hydro_Gravity.cpp
index 099df0d2c3..9113c521fa 100644
--- a/src/TestProblem/Hydro/Gravity/Init_TestProb_Hydro_Gravity.cpp
+++ b/src/TestProblem/Hydro/Gravity/Init_TestProb_Hydro_Gravity.cpp
@@ -370,7 +370,8 @@ void Aux_Record_Gravity()
if ( MPI_Rank == 0 )
{
// header
- const char FileName[] = "Record__PoissonPerformance";
+ char FileName[MAX_STRING];
+ sprintf( FileName, "%s/Record__PoissonPerformance", OUTPUT_DIR );
if ( !Aux_CheckFileExist(FileName) )
{
diff --git a/src/configure.py b/src/configure.py
index 673bfd6604..09bfa94a09 100755
--- a/src/configure.py
+++ b/src/configure.py
@@ -18,6 +18,15 @@
+####################################################################################################
+# Validation
+####################################################################################################
+# Check the Python version
+if sys.version_info[0] < 3 or sys.version_info[1] < 5:
+ raise BaseException("Python 3.5 or later is required.")
+
+
+
####################################################################################################
# Global variables
####################################################################################################
@@ -26,15 +35,17 @@
CLOSE_DIST = 2
PRINT_WIDTH = 100
-GAMER_CONFIG_DIR = os.path.join("..", "configs")
-GAMER_MAKE_BASE = "Makefile_base"
-GAMER_MAKE_OUT = "Makefile"
-GAMER_DESCRIPTION = "Prepare a customized Makefile for GAMER.\nDefault values are marked by '*'.\nUse -lh to show a detailed help message.\n"
-GAMER_EPILOG = "2023 Computational Astrophysics Lab, NTU. All rights reserved.\n"
+GAMER_CONFIG_DIR = os.path.join("..", "configs")
+GAMER_MAKE_BASE = "Makefile_base"
+GAMER_MAKE_OUT = "Makefile"
+GAMER_LOCAL_SETTING = ".local_settings"
+GAMER_GLOBAL_SETTING = os.path.expanduser("~/.config/gamer/global_settings")
+GAMER_DESCRIPTION = "Prepare a customized Makefile for GAMER.\nDefault values are marked by '*'.\nUse -lh to show a detailed help message.\n"
+GAMER_EPILOG = "2023 Computational Astrophysics Lab, NTU. All rights reserved.\n"
LOGGER = logging.getLogger()
-LOG_FORMAT = '%(asctime)s %(levelname)-8s: %(message)s'
-logging.basicConfig( filename=GAMER_MAKE_OUT+'.log', filemode='w', level=logging.INFO, format=LOG_FORMAT )
+LOG_FORMAT = "%(asctime)s %(levelname)-8s: %(message)s"
+logging.basicConfig( filename=GAMER_MAKE_OUT+".log", filemode="w", level=logging.INFO, format=LOG_FORMAT )
@@ -45,17 +56,17 @@ class CustomFormatter( logging.Formatter ):
"""
See: https://stackoverflow.com/questions/384076/how-can-i-color-python-logging-output
"""
- HEADER = '\033[95m'
- OKBLUE = '\033[94m'
- OKCYAN = '\033[96m'
- OKGREEN = '\033[92m'
- WARNING = '\033[93m'
- FAIL = '\033[91m'
- ENDC = '\033[0m'
- BOLD = '\033[1m'
- UNDERLINE = '\033[4m'
-
- CONSOLE_FORMAT = '%(levelname)-8s: %(message)s'
+ HEADER = "\033[95m"
+ OKBLUE = "\033[94m"
+ OKCYAN = "\033[96m"
+ OKGREEN = "\033[92m"
+ WARNING = "\033[93m"
+ FAIL = "\033[91m"
+ ENDC = "\033[0m"
+ BOLD = "\033[1m"
+ UNDERLINE = "\033[4m"
+
+ CONSOLE_FORMAT = "%(levelname)-8s: %(message)s"
FORMATS = { logging.DEBUG : HEADER + CONSOLE_FORMAT + ENDC,
logging.INFO : ENDC + "%(message)s" + ENDC,
logging.WARNING : WARNING + CONSOLE_FORMAT + ENDC,
@@ -97,7 +108,7 @@ def parse_args( self, args=None, namespace=None ):
msg = "\n"
for arg in argv:
if arg[0] != "-":
- msg += 'Unrecognized positional argument: %s\n'%(arg)
+ msg += "Unrecognized positional argument: %s\n"%(arg)
continue
arg = arg.split("=")[0] # separate the assigned value.
min_dist = 100000
@@ -107,48 +118,14 @@ def parse_args( self, args=None, namespace=None ):
if dist >= min_dist: continue
min_dist = dist
pos_key = "--"+key
- msg += 'Unrecognized argument: %s'%(arg)
- if min_dist <= CLOSE_DIST: msg += ', do you mean: %s ?\n'%(pos_key)
- msg += '\n'
- if arg == '--gpu_arch': msg += "ERROR: <--gpu_arch> is deprecated. Please set in your machine *.config file (see ../configs/template.config).\n"
+ msg += "Unrecognized argument: %s"%(arg)
+ if min_dist <= CLOSE_DIST: msg += ", do you mean: %s ?\n"%(pos_key)
+ msg += "\n"
+ if arg == "--gpu_arch": msg += "ERROR: <--gpu_arch> is deprecated. Please set in your machine *.config file (see ../configs/template.config).\n"
if len(argv) != 0: self.error( msg )
return args, self.gamer_names, self.depends, self.constraints
- def _get_option_tuples(self, option_string):
- # This function is directly from the source code of `argparse`.
- # We decided to add the function manually because versions prior to Python 3.5 do not support `allow_abbrev`.
- # See: https://github.com/python/cpython/blob/main/Lib/argparse.py
- result = []
-
- # option strings starting with two prefix characters are only split at the '='
- chars = self.prefix_chars
- if option_string[0] in chars and option_string[1] in chars:
- pass # we always use `allow_abbrev=False`
-
- # single character options can be concatenated with their arguments
- # but multiple character options always have to have their arguments separate
- elif option_string[0] in chars and option_string[1] not in chars:
- option_prefix = option_string
- short_option_prefix = option_string[:2]
- short_explicit_arg = option_string[2:]
-
- for option_string in self._option_string_actions:
- if option_string == short_option_prefix:
- action = self._option_string_actions[option_string]
- tup = action, option_string, '', short_explicit_arg
- result.append(tup)
- elif option_string.startswith(option_prefix):
- action = self._option_string_actions[option_string]
- tup = action, option_string, None, None
- result.append(tup)
-
- # shouldn't ever get here
- else:
- self.error(_('unexpected option string: %s') % option_string)
-
- return result # return the collected option tuples
-
def print_usage( self, *args, **kwargs ):
if "usage" in self.program:
print("Usage: %s\n" % self.program["usage"])
@@ -219,6 +196,48 @@ def print_help( self, *args, **kwargs ):
if "print_detail" in kwargs: self.print_option()
if "epilog" in self.program: print(self.program["epilog"])
+class SystemSetting( dict ):
+ """
+ Store the system settings from the default setting file.
+
+ Format of the setting file:
+ 1. Comment starts with `#`.
+ 2. The line begins with the variable name, followed by one or multiple spaces, and then the value.
+ 3. Only the fisrt value of the line will be loaded.
+ 4. If a variable is defined multiple times, only the last occurrence will be used.
+ """
+ def __init__( self, *args, **kwargs ):
+ super().__init__( *args, **kwargs )
+
+ def get_default( self, key, default_val ):
+ return self.get( key, default_val )
+
+ def load( self, pathname ):
+ """
+ Load the system settings from the default setting file. If a setting exists,
+ it will be overwritten. Return `False` if the file does not exist.
+
+ Parameters:
+ pathname : str - The path of the default setting file to be loaded.
+
+ Returns:
+ bool - Whether the file exists.
+ """
+ if not os.path.isfile(pathname):
+ return False
+ with open( pathname, "r" ) as f:
+ lines = f.readlines()
+ for line in lines:
+ tokens = line.strip().split()
+ if len(tokens) == 0: continue # empty line
+ if tokens[0][0] == "#": continue # skip comment line
+ if len(tokens) >= 2:
+ self[tokens[0]] = tokens[1]
+ else: # key without value
+ self[tokens[0]] = None
+
+ return True
+
####################################################################################################
@@ -290,7 +309,7 @@ def get_gpu_compute_capability():
Others: https://en.wikipedia.org/wiki/CUDA#GPUs_supported
"""
CUDA_SUCCESS = 0
- libnames = ('libcuda.so', 'libcuda.dylib', 'cuda.dll')
+ libnames = ("libcuda.so", "libcuda.dylib", "cuda.dll")
for libname in libnames:
try:
cuda = ctypes.CDLL(libname)
@@ -299,7 +318,7 @@ def get_gpu_compute_capability():
else:
break
else:
- raise OSError("could not load any of: " + ' '.join(libnames))
+ raise OSError("could not load any of: " + " ".join(libnames))
nGpus, cc_major, cc_minor, device = ctypes.c_int(), ctypes.c_int(), ctypes.c_int(), ctypes.c_int()
@@ -352,11 +371,12 @@ def string_align( string, indent_str, width, end_char ):
if string[i] == end_char: new_line = True
return new_str
-def load_arguments():
+def load_arguments( sys_setting : SystemSetting ):
parser = ArgumentParser( description = GAMER_DESCRIPTION,
formatter_class = argparse.RawTextHelpFormatter,
epilog = GAMER_EPILOG,
- add_help = False
+ add_help = False,
+ allow_abbrev=False
)
parser.add_argument( "-h", "--help",
@@ -372,8 +392,8 @@ def load_arguments():
# machine config setup
parser.add_argument( "--machine", type=str, metavar="MACHINE",
- default="eureka_intel",
- help="Select the MACHINE.config file under ../configs directory.\nChoice: [eureka_intel, YOUR_MACHINE_NAME] => "
+ default=sys_setting.get_default( "machine", "eureka_intel" ),
+ help="Select the *.config file from the ../configs directory. This will overwrite the default machine specified in the default setting file.\nChoice: [eureka_intel, spock_intel, ...] => "
)
# A. options of diffierent physical models
@@ -699,7 +719,7 @@ def load_arguments():
)
parser.add_argument( "--rng", type=str, metavar="TYPE", gamer_name="RANDOM_NUMBER",
- default="RNG_GNU_EXT",
+ default=None,
choices=["RNG_GNU_EXT", "RNG_CPP11"],
help="Select the random number generator (RNG_GNU_EXT: GNU extension drand48_r, RNG_CPP11: c++11 ).\nRNG_GNU_EXT may not be supported on some macOS.\nFor RNG_CPP11, add -std=c++11 to CXXFLAG in your config file.\n"
)
@@ -740,10 +760,14 @@ def load_arguments():
def load_config( config ):
LOGGER.info("Using %s as the config."%(config))
+ if not os.path.isfile( config ):
+ raise FileNotFoundError("The config file <%s> does not exist."%(config))
+
paths, compilers = {}, {"CXX":"", "CXX_MPI":""}
flags = {"CXXFLAG":"", "OPENMPFLAG":"", "LIBFLAG":"", "NVCCFLAG_COM":"", "NVCCFLAG_FLU":"", "NVCCFLAG_POT":""}
gpus = {"GPU_COMPUTE_CAPABILITY":""}
- with open( config, 'r') as f:
+
+ with open( config, "r" ) as f:
lines = f.readlines()
for line in lines:
@@ -766,10 +790,10 @@ def load_config( config ):
if gpus[temp[0]] != "": LOGGER.warning("The original value will be overwritten. <%s>: %s --> %s"%(temp[0], gpus[temp[0]], temp[1]))
gpus[temp[0]] = temp[1]
else:
- try:
+ if len(temp) >= 2:
paths[temp[0]] = temp[1]
- except:
- paths[temp[0]] = ''
+ else: # key without value
+ paths[temp[0]] = ""
return paths, compilers, flags, gpus
@@ -796,6 +820,10 @@ def set_conditional_defaults( args ):
if args["barotropic"] is None:
args["barotropic"] = (args["eos"] == "ISOTHERMAL")
+
+ if args["rng"] is None:
+ args["rng"] = "RNG_CPP11" if sys.platform == "darwin" else "RNG_GNU_EXT"
+
return args
def set_gpu( gpus, flags, args ):
@@ -903,7 +931,7 @@ def validation( paths, depends, constraints, **kwargs ):
if type(check_val) != type([]): check_val = [check_val] # transform to list
if kwargs[check_opt] in check_val: continue # satisify the validation
- val_str = ', '.join(str(x) for x in check_val)
+ val_str = ", ".join(str(x) for x in check_val)
LOGGER.error("The option <--%s=%s> requires <--%s> to be set to [%s]. Current: <--%s=%s>."%(opt, str(kwargs[opt]), check_opt, val_str, check_opt, kwargs[check_opt]))
success = False
@@ -969,6 +997,10 @@ def validation( paths, depends, constraints, **kwargs ):
LOGGER.error("<--overlap_mpi> is not supported yet.")
success = False
+ if kwargs["rng"] != "RNG_CPP11" and sys.platform == "darwin":
+ LOGGER.error("<--rng=RNG_CPP11> is required for macOS.")
+ success = False
+
if not success: raise BaseException( "The above vaildation failed." )
return
@@ -1013,36 +1045,41 @@ def warning( paths, **kwargs ):
command = " ".join(["# This makefile is generated by the following command:", "\n#", sys.executable] + sys.argv + ["\n"])
LOGGER.info( " ".join( [sys.executable] + sys.argv ) )
- # 2. Load the input arguments
- args, name_table, depends, constraints = load_arguments()
+ # 2. Load system settings
+ sys_setting = SystemSetting()
+ sys_setting.load(GAMER_GLOBAL_SETTING)
+ sys_setting.load(GAMER_LOCAL_SETTING)
+
+ # 3. Load the input arguments
+ args, name_table, depends, constraints = load_arguments( sys_setting )
- # 3. Prepare the makefile args
- # 3.1 Load the machine setup
+ # 4. Prepare the makefile args
+ # 4.1 Load the machine setup
paths, compilers, flags, gpus = load_config( os.path.join(GAMER_CONFIG_DIR, args["machine"]+".config") )
- # 3.2 Validate arguments
+ # 4.2 Validate arguments
validation( paths, depends, constraints, **args )
warning( paths, **args )
- # 3.3 Add the SIMU_OPTION
+ # 4.3 Add the SIMU_OPTION
LOGGER.info("========================================")
LOGGER.info("GAMER has the following setting.")
LOGGER.info("----------------------------------------")
sims = set_sims( name_table, depends, **args )
- # 3.4 Set the compiler
+ # 4.4 Set the compiler
compiles = set_compile( paths, compilers, flags, args )
- # 3.5 Set the GPU
+ # 4.5 Set the GPU
gpu_setup = set_gpu( gpus, flags, args )
- # 4. Create Makefile
- # 4.1 Read
+ # 5. Create Makefile
+ # 5.1 Read
with open( GAMER_MAKE_BASE, "r" ) as make_base:
makefile = make_base.read()
- # 4.2 Replace
+ # 5.2 Replace
LOGGER.info("----------------------------------------")
for key, val in paths.items():
LOGGER.info("%-25s : %s"%(key, val))
@@ -1071,7 +1108,7 @@ def warning( paths, **kwargs ):
if num == 0: raise BaseException("The string @@@%s@@@ is not replaced correctly."%key)
LOGGER.warning("@@@%s@@@ is replaced to '' since the value is not given or the related option is disabled."%key)
- # 4.3 Write
+ # 5.3 Write
with open( GAMER_MAKE_OUT, "w") as make_out:
make_out.write( command + makefile )
diff --git a/tool/config/set_settings.sh b/tool/config/set_settings.sh
new file mode 100644
index 0000000000..69387c766b
--- /dev/null
+++ b/tool/config/set_settings.sh
@@ -0,0 +1,296 @@
+#!/bin/bash
+
+################### DEFINE KEYS ###################
+# The keys can not contain spaces or start with `-`
+declare -A KEY_DESCRIPTIONS
+KEY_DESCRIPTIONS=(
+ ["machine"]="Specify the machine name"
+)
+###################################################
+
+#################### UTILITIES ####################
+
+# List of valid keys
+VALID_KEYS=("${!KEY_DESCRIPTIONS[@]}")
+
+# For padding keys with trailing spaces to format output
+MAX_KEY_LENGTH=0
+for key in "${VALID_KEYS[@]}"; do
+ if [ ${#key} -gt $MAX_KEY_LENGTH ]; then
+ MAX_KEY_LENGTH=${#key}
+ fi
+done
+
+# Print keys in a formatted way
+print_key() {
+ # $1 : the key name
+ # $2 : the key value or additional message
+ # $3 : indent number (optional, default 0)
+ printf "%${3}s" ""
+ printf "%-${MAX_KEY_LENGTH}s %s\n" "$1" "$2"
+}
+
+show_valid_keys() {
+ echo "Valid keys and their functionalities:"
+ for key in "${!KEY_DESCRIPTIONS[@]}"; do
+ print_key "$key" "${KEY_DESCRIPTIONS[$key]}" 2
+ done
+}
+
+show_help() {
+ echo "Usage:"
+ echo " $0 (--local | --global) [-l] --= ..."
+ echo " $0 (--local | --global) [-l] (-d | --delete) ..."
+ echo " $0 (--local | --global) (-l | --list)"
+ echo " $0 (-h | --help)"
+ echo ""
+ echo "Options:"
+ echo " --local Use local settings"
+ echo " --global Use global settings"
+ echo " --= Set a parameter"
+ echo " -d, --delete key Delete a parameter"
+ echo " --clear-all Clear all parameters"
+ echo " -l, --list List current settings"
+ echo " -h, --help Show this help message"
+ echo ""
+ show_valid_keys
+}
+
+##################### PARSER ######################
+
+# Parser parameters
+LOCAL=false
+GLOBAL=false
+LIST=false
+SET=false
+DELETE=false
+KEYS_PROCESSED=0
+declare -A SETTINGS
+DELETE_KEYS=()
+
+# Parser utility functions
+parse_set_parameter() {
+ local param="$1"
+ local key="${param%%=*}"
+ if [[ "$param" != *=* ]]; then
+ echo "Error: Invalid format for the key '$key'. Use --$key=." >&2
+ exit 1
+ fi
+ local value="${param#*=}"
+ SETTINGS["$key"]="$value"
+}
+
+parse_delete_keys() {
+ KEYS_PROCESSED=0
+ while [[ "$#" -gt 0 && "${1:0:1}" != "-" ]]; do
+ DELETE_KEYS+=("$1")
+ shift
+ KEYS_PROCESSED=$((KEYS_PROCESSED + 1))
+ done
+}
+
+# Main parser loop
+while [[ "$#" -gt 0 ]]; do
+ if [[ "${1:0:1}" = "-" && "${1:0:2}" != "--" ]]; then # Short options
+ opt="${1:1}"
+ shift
+ while [[ -n "$opt" ]]; do # Possibly combined
+ case "${opt:0:1}" in
+ l) LIST=true ;;
+ h) show_help; exit 0 ;;
+ d)
+ DELETE=true
+ # Put the remaining combined short options back to the argument list
+ # Warning: This method will only apply if all other options are not order sensitive
+ if [[ -n "${opt:1}" ]]; then
+ set -- "$@" "-$(echo "${opt:1}" | tr -d 'd')"
+ fi
+ parse_delete_keys "$@"
+ shift $KEYS_PROCESSED
+ break ;;
+ *)
+ echo "Error: Unknown option: -${opt:0:1}" >&2
+ printf "$(show_help)\n" >&2
+ exit 1 ;;
+ esac
+ opt="${opt:1}"
+ done
+ else # Long options
+ case $1 in
+ --local)
+ LOCAL=true
+ SETTING_TYPE="local"
+ SETTING_FILE="../../src/.local_settings"
+ shift ;;
+ --global)
+ GLOBAL=true;
+ SETTING_TYPE="global"
+ SETTING_FILE="$HOME/.config/gamer/global_settings"
+ shift ;;
+ --list) LIST=true; shift ;;
+ --help) show_help; exit 0 ;;
+ --delete)
+ DELETE=true
+ shift
+ parse_delete_keys "$@"
+ shift $KEYS_PROCESSED ;;
+ --clear-all)
+ DELETE=true
+ DELETE_KEYS=("${VALID_KEYS[@]}") # Set DELETE_KEYS to all valid keys
+ shift ;;
+ --*)
+ SET=true
+ parse_set_parameter "${1#--}"
+ shift ;;
+ *)
+ echo "Error: Unknown option: $1" >&2
+ printf "$(show_help)\n" >&2
+ exit 1 ;;
+ esac
+ fi
+done
+
+############### VALIDATE PARAMETERS ###############
+
+# Ensure at least one operation is specified
+if [ "$SET" = false ] && [ "$DELETE" = false ] && [ "$LIST" = false ]; then
+ echo "Error: Specify at least one operation." >&2
+ printf "$(show_help)\n" >&2
+ exit 1
+fi
+
+# Validate the keys and values for setting
+if [ "$SET" = true ]; then
+ for key in "${!SETTINGS[@]}"; do
+ if [[ ! " ${VALID_KEYS[@]} " =~ " $key " ]]; then
+ echo "Error: Invalid key '$key'." >&2
+ printf "$(show_valid_keys)\n" >&2
+ exit 1
+ fi
+ if [[ -z "${SETTINGS[$key]}" ]]; then
+ echo "Error: The value for the key '$key' cannot be empty. Use --$key=." >&2
+ exit 1
+ fi
+ if [[ "${SETTINGS[$key]}" =~ \ ]]; then
+ echo "Error: The value for the key '$key' cannot contain spaces." >&2
+ exit 1
+ fi
+ done
+fi
+
+# Ensure mutually exclusive operations
+if [ "$SET" = true ] && [ "$DELETE" = true ]; then
+ echo "Error: Cannot set and delete parameters at the same time." >&2
+ exit 1
+fi
+
+# Validate the keys for deletion
+if [ "$DELETE" = true ]; then
+ if [ ${#DELETE_KEYS[@]} -eq 0 ]; then
+ echo "Error: No keys specified for deletion." >&2
+ exit 1
+ fi
+ for key in "${DELETE_KEYS[@]}"; do
+ if [[ ! " ${VALID_KEYS[@]} " =~ " $key " ]]; then
+ echo "Error: Invalid key '$key' for deletion." >&2
+ printf "$(show_valid_keys)\n" >&2
+ exit 1
+ fi
+ done
+fi
+
+# Ensure either --local or --global is specified
+if [ "$LOCAL" = true ] && [ "$GLOBAL" = true ]; then
+ echo "Error: Cannot specify both --local and --global." >&2
+ exit 1
+elif [ "$LOCAL" = false ] && [ "$GLOBAL" = false ]; then
+ echo "Error: Specify either --local or --global." >&2
+ exit 1
+fi
+
+################ LOAD SETTINGS FILE ###############
+
+cd "$(dirname "$0")"
+
+# Load if the settings file exists
+declare -A EXISTING_SETTINGS
+if [ -f "$SETTING_FILE" ]; then
+ while read -r LINE; do
+ [[ "$LINE" =~ ^#.*$ ]] && continue
+ key="$(echo "$LINE" | awk '{print $1}')"
+ value="$(echo "$LINE" | awk '{print $2}')"
+ EXISTING_SETTINGS["$key"]="$value"
+ done < "$SETTING_FILE"
+fi
+
+################# UPDATE SETTINGS #################
+
+# The head of the list
+if [ "$LIST" = true ]; then # Header for listing settings
+ echo "$SETTING_TYPE settings in $SETTING_FILE"
+ echo "---------------------------"
+fi
+
+# Main loop to update or delete settings
+for key in "${VALID_KEYS[@]}"; do
+ old_value="${EXISTING_SETTINGS[$key]}"
+ new_value="${SETTINGS[$key]}"
+
+ if [ "$SET" = true ] && [ -n "$new_value" ]; then # The key will be set
+
+ EXISTING_SETTINGS["$key"]="$new_value" # Update or set new value
+ if [ "$LIST" = true ]; then
+ if [ -z "$old_value" ]; then
+ print_key "$key" "$new_value (new)"
+ else
+ print_key "$key" "$old_value -> $new_value"
+ fi
+ fi
+
+ elif [ "$DELETE" = true ] && [[ " ${DELETE_KEYS[@]} " =~ " $key " ]]; then # The key will be deleted
+
+ unset EXISTING_SETTINGS["$key"] # Delete the key
+ if [ "$LIST" = true ] && [ -n "$old_value" ]; then
+ print_key "$key" "$old_value -> (deleted)"
+ fi
+
+ elif [ "$LIST" = true ] && [ -n "$old_value" ]; then # List the existing settings
+ print_key "$key" "$old_value"
+ fi
+done
+[ "$LIST" = true ] && echo "---------------------------"
+
+################ SAVE SETTINGS FILE ###############
+
+if [ "$SET" = true ] || [ "$DELETE" = true ]; then
+
+ # Create the directory and the settings file if it doesn't exist
+ dir="$(dirname "$SETTING_FILE")"
+ if [ ! -d "$dir" ]; then
+ mkdir -p "$dir"
+ echo "Created directory $dir."
+ fi
+ if [ ! -f "$SETTING_FILE" ]; then
+ if touch "$SETTING_FILE"; then
+ echo "Created file $(basename "$SETTING_FILE") in $dir."
+ else
+ echo "Fatal: Failed to create file $(basename "$SETTING_FILE") in $dir." >&2
+ exit 1
+ fi
+ fi
+
+ # Write updated settings to file
+ {
+ echo "# GAMER setting file"
+ for key in "${!EXISTING_SETTINGS[@]}"; do
+ print_key "${key}" "${EXISTING_SETTINGS[$key]}"
+ done
+ } > "$SETTING_FILE"
+
+ # Check if writing to file was successful
+ if [ $? -ne 0 ]; then
+ echo "Fatal: Failed to write to '$SETTING_FILE'." >&2
+ exit 1
+ fi
+ echo "Successfully updated $SETTING_TYPE settings."
+fi