improvements

This commit is contained in:
Mayeul Aubin 2025-03-06 15:29:15 +01:00
parent 3dc03cec4f
commit e488275523
11 changed files with 640 additions and 125 deletions

View file

@ -49,6 +49,26 @@ def register_arguments_card(parser:ArgumentParser):
parser.add_argument("--OutputRngStateLPT", type=str, default=None, help="Output RNG state file.")
def register_arguments_card_for_ICs(parser:ArgumentParser):
parser.add_argument("-Np","--N_particles", type=int, default=128, help="Number of particles per axis.")
parser.add_argument("-Nlpt","--N_LPT_mesh", type=int, default=None, help="Number of mesh points per axis for the LPT mesh.")
parser.add_argument("-L","--L", type=float, default=100.0, help="Size of the simulation box (in Mpc/h).")
parser.add_argument("-corner","--corner", type=float, nargs=3, default=[0.0, 0.0, 0.0], help="Corner of the simulation box.")
parser.add_argument("--ICsMode", type=int, default=None, help="Initial conditions mode.")
parser.add_argument("--ICs", type=str, default=None, help="Initial conditions file.")
parser.add_argument("--InputWhiteNoise", type=str, default=None, help="Input white noise file.")
parser.add_argument("--InputPowerSpectrum", type=str, default=None, help="Input power spectrum file.")
def register_arguments_card_for_timestepping(parser:ArgumentParser):
parser.add_argument("-zini","--RedshiftLPT", type=float, default=19.0, help="Redshift for the LPT evolution.")
parser.add_argument("-zfinal","--RedshiftFCs", type=float, default=0.0, help="Redshift for the FCs evolution.")
parser.add_argument("--TimeSteppingFileName", type=str, default=None, help="Time stepping file.")
parser.add_argument("-lc","--GenerateLightcone", type=bool, default=False, help="Generate lightcone.")
def parse_arguments_card(parsed_args):
"""
Parse the arguments for the parameter card.
@ -56,9 +76,9 @@ def parse_arguments_card(parsed_args):
from args_main import parse_arguments_main
from cosmo_params import parse_arguments_cosmo
param_file=parsed_args.paramfile
cosmo_dict=parse_arguments_cosmo(parsed_args)
card_dict=dict(
paramfile=parsed_args.paramfile,
N_particles=parsed_args.N_particles,
N_LPT_mesh=parsed_args.N_LPT_mesh,
N_PM_mesh=parsed_args.N_PM_mesh,
@ -117,8 +137,8 @@ def parse_arguments_card(parsed_args):
ligthcone_prefix = "lightcone_" if card_dict["GenerateLightcone"] else ""
## Now we set the parameters that are None to the default values
if param_file is None:
param_file = main_dict["paramdir"]+"parameters_"+main_dict["simname"]+".sbmy"
if card_dict["paramfile"] is None:
card_dict["paramfile"] = main_dict["paramdir"]+"parameters_"+main_dict["simname"]+".sbmy"
if card_dict["N_LPT_mesh"] is None:
card_dict["N_LPT_mesh"] = card_dict["N_particles"] # Default is the same as the number of particles
if card_dict["N_PM_mesh"] is None:
@ -172,7 +192,7 @@ def parse_arguments_card(parsed_args):
if card_dict["OutputFinalDensity"] is None:
card_dict["OutputFinalDensity"] = main_dict["resultdir"]+ligthcone_prefix+"final_density_"+main_dict["simname"]+".h5"
if card_dict["OutputTilesBase"] is None:
card_dict["OutputTilesBase"] = main_dict["resultdir"]+"sCOLA_tile_"+main_dict["simname"]
card_dict["OutputTilesBase"] = main_dict["workdir"]+"sCOLA_tile"
if card_dict["OutputLPTPotential1"] is None:
card_dict["OutputLPTPotential1"] = main_dict["workdir"]+"initial_conditions_DM_phi.h5"
if card_dict["OutputLPTPotential2"] is None:
@ -184,7 +204,69 @@ def parse_arguments_card(parsed_args):
if card_dict["OutputRngStateLPT"] is None:
card_dict["OutputRngStateLPT"] = main_dict["workdir"]+"rng_state.h5"
return card_dict, param_file
return card_dict
def parse_arguments_card_for_ICs(parsed_args):
"""
Parse the arguments for the parameter card for ICs.
"""
from args_main import parse_arguments_main
main_dict = parse_arguments_main(parsed_args)
card_dict = dict(
N_particles=parsed_args.N_particles,
N_LPT_mesh=parsed_args.N_LPT_mesh,
L=parsed_args.L,
corner=parsed_args.corner,
ICsMode=parsed_args.ICsMode,
ICs=parsed_args.ICs,
InputWhiteNoise=parsed_args.InputWhiteNoise,
InputPowerSpectrum=parsed_args.InputPowerSpectrum,
)
## Now we set the parameters that are None to the default values
if card_dict["N_LPT_mesh"] is None:
card_dict["N_LPT_mesh"] = card_dict["N_particles"] # Default is the same as the number of particles
if card_dict["InputWhiteNoise"] is None:
card_dict["InputWhiteNoise"] = main_dict["workdir"]+"white_noise.h5"
if card_dict["ICs"] is None:
card_dict["ICs"] = main_dict["workdir"]+"initial_conditions_DM_delta.h5"
if card_dict["InputPowerSpectrum"] is None:
card_dict["InputPowerSpectrum"] = main_dict["workdir"]+"power_spectrum.h5"
if card_dict["ICsMode"] is None:
match main_dict["ICs_gen"]:
case "ext" | "monofonic":
card_dict["ICsMode"] = 2
case "sbmy":
card_dict["ICsMode"] = 1
case _:
raise ValueError(f"ICs generator {main_dict['ICs_gen']} not recognized.")
return card_dict
def parse_arguments_card_for_timestepping(parsed_args):
"""
Parse the arguments for the parameter card for timestepping.
"""
from args_main import parse_arguments_main
main_dict = parse_arguments_main(parsed_args)
card_dict = dict(
RedshiftLPT=parsed_args.RedshiftLPT,
RedshiftFCs=parsed_args.RedshiftFCs,
TimeSteppingFileName=parsed_args.TimeSteppingFileName,
GenerateLightcone=parsed_args.GenerateLightcone,
)
## Now we set the parameters that are None to the default values
if card_dict["TimeSteppingFileName"] is None:
card_dict["TimeSteppingFileName"] = main_dict["paramdir"]+"time_stepping.h5"
return card_dict
@ -341,13 +423,14 @@ def main_parameter_card(parsed_args):
from low_level import print_message, print_starting_module, print_ending_module
print_starting_module("card", verbose=parsed_args.verbose)
print_message("Parsing arguments for the parameter card.", 1, "card", verbose=parsed_args.verbose)
card_dict, param_file = parse_arguments_card(parsed_args)
card_dict = parse_arguments_card(parsed_args)
paramfile = card_dict["paramfile"]
parameter_card_dict = create_parameter_card_dict(**card_dict)
if isfile(param_file) and not parsed_args.force:
print_message(f"Parameter card {param_file} exists. Use --force to overwrite.", 1, "card", verbose=parsed_args.verbose)
if isfile(paramfile) and not parsed_args.force:
print_message(f"Parameter card {paramfile} exists. Use --force to overwrite.", 1, "card", verbose=parsed_args.verbose)
return card_dict
write_parameter_card(parameter_card_dict, param_file, verbose=parsed_args.verbose)
print_message(f"Parameter card written to {param_file}", 2, "card", verbose=parsed_args.verbose)
write_parameter_card(parameter_card_dict, paramfile, verbose=parsed_args.verbose)
print_message(f"Parameter card written to {paramfile}", 2, "card", verbose=parsed_args.verbose)
print_ending_module("card", verbose=parsed_args.verbose)
return card_dict