12 Parse a Phantom .in file and return a dictionary of the parameters.
14 with open(in_file,
"r")
as f:
21 stripped_line = line.strip()
22 if not stripped_line
or stripped_line.startswith(
"#"):
28 parts = line.split(
"=", 1)
29 var_name = parts[0].strip()
36 value_part = value_part.split(
"!")[0]
39 value = value_part.strip()
51 if "." not in value
and "E" not in value
and "e" not in value:
60 params[var_name] = value
65def load_simulation(simulation_path, dump_file_name=None, in_file_name=None, do_print=True):
67 Load a Phantom simulation into a Shamrock model.
70 if do_print
and shamrock.sys.world_rank() == 0:
71 print(
"-----------------------------------------------------------")
72 print(
"---------------- Phantom dump loading -----------------")
73 print(
"-----------------------------------------------------------")
75 if in_file_name
is not None:
76 in_file_path = os.path.join(simulation_path, in_file_name)
81 if dump_file_name
is None:
82 if in_file_name
is not None:
83 dump_file_name = in_params[
"dumpfile"]
86 raise ValueError(
"Either dump_file_name or in_file_name must be provided")
88 dump_path = os.path.join(simulation_path, dump_file_name)
90 if do_print
and shamrock.sys.world_rank() == 0:
91 print(
" - Loading phantom dump from: ", dump_path)
94 is_setup_file = dump_file_name.endswith(
".tmp")
97 dump = shamrock.load_phantom_dump(dump_path)
100 ctx = shamrock.Context()
101 ctx.pdata_layout_new()
102 model = shamrock.get_Model_SPH(context=ctx, vector_type=
"f64_3", sph_kernel=
"M4")
104 if do_print
and shamrock.sys.world_rank() == 0:
105 print(
" - Generating Shamrock solver config from phantom dump")
106 cfg = model.gen_config_from_phantom_dump(dump)
107 if do_print
and shamrock.sys.world_rank() == 0:
108 print(
" - Setting Shamrock solver config")
110 model.set_solver_config(cfg)
112 if do_print
and shamrock.sys.world_rank() == 0:
113 print(
" - Initializing domain scheduler")
115 model.init_scheduler(int(1e8), 1)
117 if do_print
and shamrock.sys.world_rank() == 0:
118 print(f
" - Initializing from phantom dump (setup file: {is_setup_file})")
121 model.init_from_phantom_dump(dump, 0.05)
123 model.init_from_phantom_dump(dump, 1.0)
126 if do_print
and shamrock.sys.world_rank() == 0:
127 print(
" - Shamrock solver config:")
128 model.get_current_config().print_status()
130 if in_params
is not None:
131 print(
" - Phantom input file parameters:")
132 for key, value
in in_params.items():
133 print(f
"{key}: {value}")
138 return ctx, model, in_params
143 Run a Phantom simulation in Shamrock.
146 input_file_name = sim_name +
".in"
149 simulation_folder, in_file_name=input_file_name
152 dump_file_name = in_params[
"dumpfile"]
156 dump_number = int(dump_file_name.split(
"_")[1].split(
".")[0])
157 print(f
"Dump number: {dump_number}")
159 dtmax = float(in_params[
"dtmax"])
160 tmax = float(in_params[
"tmax"])
162 def get_ph_dump_file_name(dump_number):
163 return f
"{sim_name}_{dump_number:05d}"
165 def get_ph_dump_name(dump_number):
166 return os.path.join(simulation_folder, get_ph_dump_file_name(dump_number))
168 def do_dump(dump_number):
169 if shamrock.sys.world_rank() == 0:
170 print(
"-----------------------------------------------------------")
171 print(
"---------------- Phantom dump saving -----------------")
172 print(
"-----------------------------------------------------------")
173 print(f
" - Saving dump {dump_number} to {get_ph_dump_name(dump_number)}")
174 dump = model.make_phantom_dump()
175 dump.save_dump(get_ph_dump_name(dump_number))
179 with open(os.path.join(simulation_folder, f
"{sim_name}.in"),
"r")
as f:
180 lines = f.readlines()
181 with open(os.path.join(simulation_folder, f
"{sim_name}.in"),
"w")
as f:
183 if "dumpfile" in line:
184 line = f
" dumpfile = {get_ph_dump_file_name(dump_number)} ! dump file to start from\n"
189 os.path.exists(os.path.join(simulation_folder, f
"{sim_name}_00000.tmp"))
190 and shamrock.sys.world_rank() == 0
192 os.remove(os.path.join(simulation_folder, f
"{sim_name}_00000.tmp"))
201 next_time = model.get_time() + dtmax
207 last_step = model.evolve_until(next_time)
212 return ctx, model, in_params