minor; redefinition of the bend limiter pre-factor

This commit is contained in:
Tristan Hoellinger 2025-06-17 00:57:49 +02:00
parent 34594a2bf6
commit a5227d9113
8 changed files with 2642 additions and 2519 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -15690,7 +15690,7 @@
},
{
"cell_type": "code",
"execution_count": 15,
"execution_count": null,
"id": "c1c096bb",
"metadata": {},
"outputs": [
@ -15762,7 +15762,7 @@
" ymin=3e-3,\n",
" ymax=0.5,\n",
" fac_hubble=fac_hubble,\n",
" fac_bend=fac_bend * (2 ** sim_idx),\n",
" fac_bend=fac_bend,\n",
" da_max_early=da_early,\n",
" da_max_late=DEFAULT_DA_MAX_LATE_CUSTOM,\n",
" show=False,\n",

View file

@ -108,7 +108,7 @@
},
{
"cell_type": "code",
"execution_count": 5,
"execution_count": null,
"id": "7126d1c8",
"metadata": {},
"outputs": [],
@ -134,7 +134,7 @@
"\n",
"# Alternatively, let the user specify the parameters directly:\n",
"fac_hubble_list = [0.02, 0.02]\n",
"fac_bend_list = [0.04375/2, 0.04375]\n",
"fac_bend_list = [0.3125/2, 0.3125]\n",
"da_early_list = [0.0013, 0.0013]\n"
]
},

View file

@ -69,10 +69,10 @@ parser.add_argument(
help="Whether to compute and plot the LPT power spectrum.",
)
parser.add_argument(
"--scale_limiter",
"--rescale_limiter",
type=none_bool_str,
default=False,
help="Which limiter should be scaled by the scaling arguments? ",
help="Which limiter should be affected by the mod_val argument? ",
)
parser.add_argument(
"--use_p3m_fit",
@ -90,14 +90,14 @@ parser.add_argument(
# Timestep settings per method
for scheme in ["p3m1", "p3m2", "p3m3"]:
parser.add_argument(
f"--scaling_{scheme}",
f"--mod_val_{scheme}",
type=float,
default={
"p3m1": 1.,
"p3m1": 1.0,
"p3m2": 0.95,
"p3m3": 0.9,
}[scheme],
help=f"Relax the step limiter by this factor for {scheme.upper()}.",
help=f"Use this value value for the limiter indicated by rescale_limiter, for {scheme.upper()}.",
)
args = parser.parse_args()
@ -115,10 +115,10 @@ if __name__ == "__main__":
Np = args.Np
Npm = args.Npm
n_Tiles = args.n_Tiles
scaling_p3m1 = args.scaling_p3m1
scaling_p3m2 = args.scaling_p3m2
scaling_p3m3 = args.scaling_p3m3
name_scaled = args.scale_limiter
mod_val_p3m1 = args.mod_val_p3m1
mod_val_p3m2 = args.mod_val_p3m2
mod_val_p3m3 = args.mod_val_p3m3
name_scaled = args.rescale_limiter
use_p3m_fit = args.use_p3m_fit
if name_scaled is not False and name_scaled not in [
"fac_dyn_custom",
@ -144,9 +144,9 @@ if __name__ == "__main__":
logger.info(f"Number of tiles: {n_Tiles}^3")
logger.info(f"Limiter to scale: {name_scaled if name_scaled else 'None'}")
if name_scaled:
logger.info(f"Limiter rescaling for P3M1: {scaling_p3m1}")
logger.info(f"Limiter rescaling for P3M2: {scaling_p3m2}")
logger.info(f"Limiter rescaling for P3M3: {scaling_p3m3}")
logger.info(f"New limiter value for P3M1: {mod_val_p3m1}")
logger.info(f"New limiter value for P3M2: {mod_val_p3m2}")
logger.info(f"New limiter value for P3M3: {mod_val_p3m3}")
INDENT()
lpt = args.lpt
@ -192,9 +192,9 @@ if __name__ == "__main__":
"RedshiftLPT": RedshiftLPT,
"RedshiftFCs": RedshiftFCs,
"name_scaled": name_scaled,
"scaling_p3m1": scaling_p3m1,
"scaling_p3m2": scaling_p3m2,
"scaling_p3m3": scaling_p3m3,
"mod_val_p3m1": mod_val_p3m1,
"mod_val_p3m2": mod_val_p3m2,
"mod_val_p3m3": mod_val_p3m3,
}
with open(wd + "sim_params.txt", "w") as f:
f.write(f"{sim_params}\n")
@ -221,9 +221,9 @@ if __name__ == "__main__":
lpt_params["ICsMode"] = 1
lpt_params["InputWhiteNoise"] = input_white_noise_file
fac_dyn_custom = DEFAULT_FAC_DYN_CUSTOM
fac_dyn_custom = DEFAULT_FAC_DYN_CUSTOM_COLA
da_early = DEFAULT_DA_MAX_EARLY_CUSTOM
fac_H_custom = DEFAULT_FAC_H_CUSTOM
fac_H_custom = DEFAULT_FAC_H_CUSTOM_COLA
fac_bend = DEFAULT_FAC_BEND
sub_bend1 = DEFAULT_SUB_BEND1_COLA
sub_bend2 = DEFAULT_SUB_BEND2_COLA
@ -283,9 +283,9 @@ if __name__ == "__main__":
p3m1_params["n_Tiles"] = n_Tiles
p3m1_params["PrintOutputTimestepsLog"] = True
p3m1_params["OutputTimestepsLog"] = simdir + "colap3m1_timestep_log.txt"
p3m1_params["relax"] = scaling_p3m1
p3m1_params["rescale"] = mod_val_p3m1
if name_scaled:
p3m1_params[name_scaled] /= scaling_p3m1
p3m1_params[name_scaled] = mod_val_p3m1
p3m2_params = common_params_num.copy()
p3m2_params["method"] = "p3m"
@ -293,9 +293,9 @@ if __name__ == "__main__":
p3m2_params["n_Tiles"] = n_Tiles
p3m2_params["PrintOutputTimestepsLog"] = True
p3m2_params["OutputTimestepsLog"] = simdir + "colap3m2_timestep_log.txt"
p3m2_params["relax"] = scaling_p3m2
p3m2_params["rescale"] = mod_val_p3m2
if name_scaled:
p3m2_params[name_scaled] /= scaling_p3m2
p3m2_params[name_scaled] = mod_val_p3m2
p3m3_params = common_params_num.copy()
p3m3_params["method"] = "p3m"
@ -303,9 +303,9 @@ if __name__ == "__main__":
p3m3_params["n_Tiles"] = n_Tiles
p3m3_params["PrintOutputTimestepsLog"] = True
p3m3_params["OutputTimestepsLog"] = simdir + "colap3m3_timestep_log.txt"
p3m3_params["relax"] = scaling_p3m3
p3m3_params["rescale"] = mod_val_p3m3
if name_scaled:
p3m3_params[name_scaled] /= scaling_p3m3
p3m3_params[name_scaled] = mod_val_p3m3
all_sim_params = [
("p3m1", p3m1_params),
@ -323,9 +323,9 @@ if __name__ == "__main__":
for name, parameters in all_sim_params:
logger.info(
f"Generating parameters for {name.upper()} with relax = {parameters['relax']}..."
f"Generating parameters for {name.upper()} with rescale = {parameters['rescale']}..."
)
file_ext = f"{name}_relax{str(parameters['relax']).replace('.', '_')}"
file_ext = f"{name}_rescale{str(parameters['rescale']).replace('.', '_')}"
generate_sim_params(parameters, ICs_path, wd, simdir, file_ext, force)
logger.info(f"Generating parameters for {name.upper()} done.")
@ -398,7 +398,7 @@ if __name__ == "__main__":
nsteps_dict = {}
for name, parameters in all_sim_params:
TimeStepDistribution = parameters["TimeStepDistribution"]
file_ext = f"{name}_relax{str(parameters['relax']).replace('.', '_')}"
file_ext = f"{name}_rescale{str(parameters['rescale']).replace('.', '_')}"
method = parameters["method"]
TSpath = wd + file_ext + f"_ts_{method}.h5" if file_ext else wd + f"ts_{method}.h5"
if TimeStepDistribution in [0, 1, 2]:
@ -462,17 +462,17 @@ if __name__ == "__main__":
DELTA = read_field(simdir + "lpt_density.h5")
Pk_LPT, _ = get_autocorrelation(DELTA, G, AliasingCorr)
DELTA = read_field(simdir + f"p3m1_relax{str(p3m1_params['relax']).replace('.', '_')}_final_density_p3m.h5")
DELTA = read_field(simdir + f"p3m1_rescale{str(p3m1_params['rescale']).replace('.', '_')}_final_density_p3m.h5")
if plot_fields:
delta_p3m1 = DELTA.data[slice_ijk]
Pk_P3M1, _ = get_autocorrelation(DELTA, G, AliasingCorr)
DELTA = read_field(simdir + f"p3m2_relax{str(p3m2_params['relax']).replace('.', '_')}_final_density_p3m.h5")
DELTA = read_field(simdir + f"p3m2_rescale{str(p3m2_params['rescale']).replace('.', '_')}_final_density_p3m.h5")
if plot_fields:
delta_p3m2 = DELTA.data[slice_ijk]
Pk_P3M2, _ = get_autocorrelation(DELTA, G, AliasingCorr)
DELTA = read_field(simdir + f"p3m3_relax{str(p3m3_params['relax']).replace('.', '_')}_final_density_p3m.h5")
DELTA = read_field(simdir + f"p3m3_rescale{str(p3m3_params['rescale']).replace('.', '_')}_final_density_p3m.h5")
if plot_fields:
delta_p3m3 = DELTA.data[slice_ijk]
Pk_P3M3, _ = get_autocorrelation(DELTA, G, AliasingCorr)
@ -480,9 +480,9 @@ if __name__ == "__main__":
ref = "P3M1"
scaling_reference = scaling_p3m1
mod_val_reference = mod_val_p3m1
Pk_ref = Pk_P3M1
label_ref = f"P3M, scaling={scaling_reference}, ns={nsteps_dict['p3m1']}"
label_ref = f"P3M, mod_val={mod_val_reference}, ns={nsteps_dict['p3m1']}"
logger.info(f"Plotting power spectra...")
INDENT()
@ -516,7 +516,7 @@ if __name__ == "__main__":
(field_name, Pk) for field_name, Pk in fields_to_plot if field_name != ref
]
for field_name, Pk in fields_to_plot:
label = f"{field_name}, scaling={eval(f'scaling_{field_name.lower()}')}, ns={nsteps_dict[field_name.lower()]}"
label = f"{field_name}, mod_val={eval(f'mod_val_{field_name.lower()}')}, ns={nsteps_dict[field_name.lower()]}"
linestyle = "--"
zorder = 2
ax.plot(k, Pk / Pk_ref, label=label, linestyle=linestyle)
@ -627,9 +627,9 @@ if __name__ == "__main__":
}
titles_dict = {
"lpt": "LPT",
"p3m1": f"P3M1 relax={scaling_p3m1}",
"p3m2": f"P3M2 relax={scaling_p3m2}",
"p3m3": f"P3M3 relax={scaling_p3m3}",
"p3m1": f"P3M1 rescale={mod_val_p3m1}",
"p3m2": f"P3M2 rescale={mod_val_p3m2}",
"p3m3": f"P3M3 rescale={mod_val_p3m3}",
"diff_p3m2_p3m1": r"$\delta_{\rm P3M2}-\delta_{\rm P3M1}$",
"diff_p3m3_p3m1": r"$\delta_{\rm P3M3}-\delta_{\rm P3M1}$",
"diff_p3m1_spm": r"$\delta_{\rm P3M1}-\delta_{\rm sPM}$",

View file

@ -138,8 +138,8 @@ DEFAULT_FAC_DYN_CUSTOM = 0.0154
DEFAULT_FAC_DYN_CUSTOM_COLA = 0.03
DEFAULT_DA_MAX_EARLY_CUSTOM = 0.0013
DEFAULT_FAC_H_CUSTOM = 0.03
DEFAULT_FAC_H_CUSTOM_COLA = 0.06
DEFAULT_FAC_BEND = 0.04375
DEFAULT_FAC_H_CUSTOM_COLA = 0.05
DEFAULT_FAC_BEND = 0.3125
DEFAULT_SUB_BEND1 = 0.012
DEFAULT_SUB_BEND2 = 0.007
DEFAULT_SUB_BEND1_COLA = 0.012

View file

@ -486,8 +486,8 @@ def run_simulation(name, params, wd, logdir):
if params.get("nsteps") is not None:
file_ext = f"{name}_nsteps{params['nsteps']}"
elif params.get("relax") is not None:
file_ext = f"{name}_relax{str(params['relax']).replace('.', '_')}"
elif params.get("rescale") is not None:
file_ext = f"{name}_rescale{str(params['rescale']).replace('.', '_')}"
elif params.get("file_ext") is not None:
file_ext = params["file_ext"]
else:

View file

@ -1,11 +1,11 @@
#!/bin/bash
#SBATCH --job-name=cola_2_1_05_L64_N64_Np64_v4
#SBATCH --output=/data70/hoellinger/WIP3M/cola_2_1_05_L64_N64_Np64_v4/log.log
#SBATCH --error=/data70/hoellinger/WIP3M/cola_2_1_05_L64_N64_Np64_v4/err.err
#SBATCH --job-name=cola_Pf_L512_N512_Np256
#SBATCH --output=/data70/hoellinger/WIP3M/cola_Pf_L512_N512_Np256/log.log
#SBATCH --error=/data70/hoellinger/WIP3M/cola_Pf_L512_N512_Np256/err.err
#SBATCH --nodes=1 # Number of nodes (value or min-max)
#SBATCH --ntasks=64 # The number of tasks (i.e. cores) per node
#SBATCH --ntasks=128 # The number of tasks (i.e. cores) per node
#SBATCH --partition=comp,pscomp # Partition name
#SBATCH --time=12:00:00
#SBATCH --time=48:00:00
##SBATCH --exclusive
##SBATCH --nodelist=i26 # Node name
@ -15,43 +15,26 @@
conda activate p3m
export OMP_NUM_THREADS=16
python $WIP3M_ROOT_PATH"src/wip3m/convergence_cola_p3m_only_expl.py" \
--run_id cola_2_1_05_L64_N64_Np64_v4 \
--L 64 \
--N 64 \
--Np 64 \
--Npm 128 \
--n_Tiles 16 \
--z_i 19.0 \
--z_f 0.0 \
--plot_fields True \
--scale_limiter "fac_p3m_fit" \
--use_p3m_fit True \
--scaling_p3m1 2.0 \
--scaling_p3m2 1.0 \
--scaling_p3m3 0.5
# export OMP_NUM_THREADS=32
# export OMP_NUM_THREADS=64
# python $WIP3M_ROOT_PATH"src/wip3m/convergence_cola_p3m_only_expl.py" \
# --run_id cola_2_1_05_L128_N128_Np128 \
# --L 128 \
# --N 128 \
# --Np 128 \
# --Npm 256 \
# --n_Tiles 32 \
# --run_id cola_Pf_LNNp512 \
# --L 512 \
# --N 512 \
# --Np 512 \
# --Npm 1024 \
# --n_Tiles 128 \
# --z_i 19.0 \
# --z_f 0.0 \
# --plot_fields True \
# --scale_limiter "fac_p3m_fit" \
# --rescale_limiter "fac_p3m_fit" \
# --use_p3m_fit True \
# --scaling_p3m1 2.0 \
# --scaling_p3m2 1.0 \
# --scaling_p3m3 0.5
# --mod_val_p3m1 0.3 \
# --mod_val_p3m2 0.5 \
# --mod_val_p3m3 1.1
# export OMP_NUM_THREADS=64
# python $WIP3M_ROOT_PATH"src/wip3m/convergence_cola_p3m_only_expl.py" \
# --run_id cola_432_L1024_N512_Np512 \
# --run_id cola_Pf_L1024_N512_Np512 \
# --L 1024 \
# --N 512 \
# --Np 512 \
@ -60,27 +43,78 @@ python $WIP3M_ROOT_PATH"src/wip3m/convergence_cola_p3m_only_expl.py" \
# --z_i 19.0 \
# --z_f 0.0 \
# --plot_fields True \
# --scale_limiter "fac_p3m_fit" \
# --rescale_limiter "fac_p3m_fit" \
# --use_p3m_fit True \
# --scaling_p3m1 4.0 \
# --scaling_p3m2 3.0 \
# --scaling_p3m3 2.0
# --mod_val_p3m1 0.33 \
# --mod_val_p3m2 0.4 \
# --mod_val_p3m3 0.5
# export OMP_NUM_THREADS=64
# python $WIP3M_ROOT_PATH"src/wip3m/convergence_cola_p3m_only_expl.py" \
# --run_id cola_432_L128_N256_Np128 \
# --L 128 \
# --N 256 \
# --Np 128 \
# --Npm 256 \
# --n_Tiles 32 \
# --run_id cola_Pf_L1024_N1024_Np512 \
# --L 1024 \
# --N 1024 \
# --Np 512 \
# --Npm 1024 \
# --n_Tiles 128 \
# --z_i 19.0 \
# --z_f 0.0 \
# --plot_fields True \
# --scale_limiter "fac_p3m_fit" \
# --rescale_limiter "fac_p3m_fit" \
# --use_p3m_fit True \
# --scaling_p3m1 4.0 \
# --scaling_p3m2 3.0 \
# --scaling_p3m3 2.0
# --mod_val_p3m1 0.33 \
# --mod_val_p3m2 0.4 \
# --mod_val_p3m3 0.5
# export OMP_NUM_THREADS=64
# python $WIP3M_ROOT_PATH"src/wip3m/convergence_cola_p3m_only_expl.py" \
# --run_id cola_Pf_LNNp256 \
# --L 256 \
# --N 256 \
# --Np 256 \
# --Npm 512 \
# --n_Tiles 64 \
# --z_i 19.0 \
# --z_f 0.0 \
# --plot_fields True \
# --rescale_limiter "fac_p3m_fit" \
# --use_p3m_fit True \
# --mod_val_p3m1 0.3 \
# --mod_val_p3m2 0.5 \
# --mod_val_p3m3 1.1
# export OMP_NUM_THREADS=64
# python $WIP3M_ROOT_PATH"src/wip3m/convergence_cola_p3m_only_expl.py" \
# --run_id cola_Pf_L512_N256_Np256 \
# --L 512 \
# --N 256 \
# --Np 256 \
# --Npm 512 \
# --n_Tiles 64 \
# --z_i 19.0 \
# --z_f 0.0 \
# --plot_fields True \
# --rescale_limiter "fac_p3m_fit" \
# --use_p3m_fit True \
# --mod_val_p3m1 0.33 \
# --mod_val_p3m2 0.4 \
# --mod_val_p3m3 0.5
export OMP_NUM_THREADS=64
python $WIP3M_ROOT_PATH"src/wip3m/convergence_cola_p3m_only_expl.py" \
--run_id cola_Pf_L512_N512_Np256 \
--L 512 \
--N 512 \
--Np 256 \
--Npm 512 \
--n_Tiles 64 \
--z_i 19.0 \
--z_f 0.0 \
--plot_fields True \
--rescale_limiter "fac_p3m_fit" \
--use_p3m_fit True \
--mod_val_p3m1 0.33 \
--mod_val_p3m2 0.4 \
--mod_val_p3m3 0.5
exit 0