Shamrock 2025.10.0
Astrophysical Code
Loading...
Searching...
No Matches
__init__.py
1import glob
2import os
3
4import shamrock.sys
5
6
7def purge_old_dumps(dump_prefix, keep_first=1, keep_last=3, ext=".sham"):
8 if shamrock.sys.world_rank() == 0:
9 res = glob.glob(dump_prefix + "*" + ext)
10 res.sort()
11
12 # The list of dumps to remove (keep the first and last 3 dumps)
13 to_remove = res[keep_first:-keep_last]
14
15 for f in to_remove:
16 os.remove(f)
17
18
19def get_last_dump(dump_prefix, ext=".sham"):
20 res = glob.glob(dump_prefix + "*" + ext)
21
22 num_max = -1
23
24 for f in res:
25 try:
26 dump_num = int(f[len(dump_prefix) : -len(ext)])
27 if dump_num > num_max:
28 num_max = dump_num
29 except ValueError:
30 pass
31
32 if num_max == -1:
33 return None
34 else:
35 return num_max
36
37
39 def __init__(self, model, dump_prefix, ext=".sham"):
40 self.model = model
41 self.dump_prefix = dump_prefix
42 self.ext = ext
43 os.makedirs(os.path.dirname(self.dump_prefix), exist_ok=True)
44
45 def get_dump_name(self, idump):
46 return self.dump_prefix + f"{idump:07}" + self.ext
47
48 def get_last_dump(self):
49 return get_last_dump(self.dump_prefix, self.ext)
50
51 def purge_old_dumps(self, keep_first=1, keep_last=3):
52 purge_old_dumps(self.dump_prefix, keep_first, keep_last, self.ext)
53
54 def load_dump(self, idump):
55 dump_name = self.get_dump_name(idump)
56 if shamrock.sys.world_rank() == 0:
57 print(f"Loading dump: {dump_name} i={idump}")
58 self.model.load_from_dump(dump_name)
59
60 def write_dump(self, idump, purge_old_dumps=False, keep_first=1, keep_last=3):
61 dump_name = self.get_dump_name(idump)
62 self.model.dump(dump_name)
63 if purge_old_dumps:
64 self.purge_old_dumps(keep_first, keep_last)
65
66 def load_last_dump_or(self, functor_no_last_dump):
67 idump = self.get_last_dump()
68 if idump is None:
69 return functor_no_last_dump()
70 else:
71 return self.load_dump(idump)
purge_old_dumps(self, keep_first=1, keep_last=3)
Definition __init__.py:51