Skip to content

Commit 637bc4f

Browse files
committed
stagyyparsers: extract _count_subdomains
This builds the ranges of cores covering the yin and yang blocks.
1 parent e104538 commit 637bc4f

File tree

1 file changed

+23
-30
lines changed

1 file changed

+23
-30
lines changed

stagpy/stagyyparsers.py

Lines changed: 23 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -724,6 +724,23 @@ def _try_text(file: Path, elt: Element) -> str:
724724
return text
725725

726726

727+
def _count_subdomains(xs: XmlStream, i0_yin: int) -> tuple[range, range]:
728+
i1_yin = i0_yin + 1
729+
i0_yang = 0
730+
i1_yang = 0
731+
for _ in xs.iter_tag("Grid"):
732+
if xs.current.attrib["GridType"] == "Collection":
733+
break
734+
if (name := xs.current.attrib["Name"]).startswith("meshYang"):
735+
if i1_yang == 0:
736+
i0_yang = int(name[-5:]) - 1
737+
i1_yang = i0_yang + (i1_yin - i0_yin)
738+
else:
739+
i1_yin += 1
740+
xs.drop()
741+
return range(i0_yin, i1_yin), range(i0_yang, i1_yang)
742+
743+
727744
@dataclass(frozen=True)
728745
class FieldSub:
729746
file: Path
@@ -826,19 +843,7 @@ def _data(self) -> Mapping[int, XmfEntry]:
826843
ifile = int(h5file[-14:-9])
827844
fields_info[name] = (ifile, shape)
828845

829-
i1_yin = i0_yin + 1
830-
i0_yang = 0
831-
i1_yang = 0
832-
for _ in xs.iter_tag("Grid"):
833-
if xs.current.attrib["GridType"] == "Collection":
834-
break
835-
if (name := xs.current.attrib["Name"]).startswith("meshYang"):
836-
if i1_yang == 0:
837-
i0_yang = int(name[-5:]) - 1
838-
i1_yang = i0_yang + (i1_yin - i0_yin)
839-
else:
840-
i1_yin += 1
841-
xs.drop()
846+
r_yin, r_yang = _count_subdomains(xs, i0_yin)
842847

843848
data[isnap] = XmfEntry(
844849
isnap=isnap,
@@ -849,8 +854,8 @@ def _data(self) -> Mapping[int, XmfEntry]:
849854
twod=twod,
850855
coord_filepattern=coord_filepattern,
851856
coord_shape=coord_shape,
852-
range_yin=range(i0_yin, i1_yin),
853-
range_yang=range(i0_yang, i1_yang),
857+
range_yin=r_yin,
858+
range_yang=r_yang,
854859
fields=fields_info,
855860
)
856861
return data
@@ -1141,28 +1146,16 @@ def _data(self) -> Mapping[int, XmfTracersEntry]:
11411146
ifile = int(h5file[-14:-9])
11421147
fields_info[name] = ifile
11431148

1144-
i1_yin = i0_yin + 1
1145-
i0_yang = 0
1146-
i1_yang = 0
1147-
for _ in xs.iter_tag("Grid"):
1148-
if xs.current.attrib["GridType"] == "Collection":
1149-
break
1150-
if (name := xs.current.attrib["Name"]).startswith("meshYang"):
1151-
if i1_yang == 0:
1152-
i0_yang = int(name[-5:]) - 1
1153-
i1_yang = i0_yang + (i1_yin - i0_yin)
1154-
else:
1155-
i1_yin += 1
1156-
xs.drop()
1149+
r_yin, r_yang = _count_subdomains(xs, i0_yin)
11571150

11581151
data[isnap] = XmfTracersEntry(
11591152
isnap=isnap,
11601153
time=time,
11611154
mo_lambda=extra.get("mo_lambda"),
11621155
mo_thick_sol=extra.get("mo_thick_sol"),
11631156
yin_yang=yin_yang,
1164-
range_yin=range(i0_yin, i1_yin),
1165-
range_yang=range(i0_yang, i1_yang),
1157+
range_yin=r_yin,
1158+
range_yang=r_yang,
11661159
fields=fields_info,
11671160
)
11681161
return data

0 commit comments

Comments
 (0)