Skip to content

Commit 82450ff

Browse files
committed
fix: accept equivalent hdf5 psi layouts
1 parent 1dd05be commit 82450ff

1 file changed

Lines changed: 25 additions & 15 deletions

File tree

src/io/checkpoint.rs

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -166,15 +166,30 @@ pub fn load_checkpoint(path: &Path) -> Result<(Grid3, State3), Error> {
166166
.dataset(PSI_DATASET)
167167
.map_err(|_| Error::MissingCheckpointField("state/psi"))?;
168168
let psi_shape = psi_dataset.shape();
169-
if psi_shape.as_slice() != [nx, ny, nz] {
170-
return Err(Error::MalformedCheckpointField("state/psi"));
171-
}
172-
let psi_raw: Vec<ComplexRepr> = psi_dataset
173-
.read_raw()
174-
.map_err(|_| Error::MalformedCheckpointField("state/psi"))?;
175-
if psi_raw.len() != grid.len() {
176-
return Err(Error::MalformedCheckpointField("state/psi"));
177-
}
169+
let psi: Vec<Complex64> = match psi_shape.as_slice() {
170+
[sx, sy, sz] if [*sx, *sy, *sz] == [nx, ny, nz] => {
171+
let psi_raw: Vec<ComplexRepr> = psi_dataset
172+
.read_raw()
173+
.map_err(|_| Error::MalformedCheckpointField("state/psi"))?;
174+
if psi_raw.len() != grid.len() {
175+
return Err(Error::MalformedCheckpointField("state/psi"));
176+
}
177+
psi_raw.into_iter().map(from_repr).collect()
178+
}
179+
[sx, sy, sz, 2] if [*sx, *sy, *sz] == [nx, ny, nz] => {
180+
let psi_raw: Vec<f64> = psi_dataset
181+
.read_raw()
182+
.map_err(|_| Error::MalformedCheckpointField("state/psi"))?;
183+
if psi_raw.len() != grid.len() * 2 {
184+
return Err(Error::MalformedCheckpointField("state/psi"));
185+
}
186+
psi_raw
187+
.chunks_exact(2)
188+
.map(|pair| Complex64::new(pair[0], pair[1]))
189+
.collect()
190+
}
191+
_ => return Err(Error::MalformedCheckpointField("state/psi")),
192+
};
178193

179194
if let Some(config_group) = maybe_group(&root, CONFIG_GROUP)? {
180195
validate_optional_group(&config_group, &["dt", "hbar_over_m", "poisson_scale"])?;
@@ -193,10 +208,5 @@ pub fn load_checkpoint(path: &Path) -> Result<(Grid3, State3), Error> {
193208
)?;
194209
}
195210

196-
Ok((
197-
grid,
198-
State3 {
199-
psi: psi_raw.into_iter().map(from_repr).collect(),
200-
},
201-
))
211+
Ok((grid, State3 { psi }))
202212
}

0 commit comments

Comments
 (0)