From 6cde7b1ca29b83e82877980a1cebd508c068d438 Mon Sep 17 00:00:00 2001 From: Thomas-Ulrich Date: Wed, 28 Feb 2024 15:59:31 +0100 Subject: [PATCH 1/8] seissolxdmfwriter: bugfixes --- seissolxdmfwriter/README.md | 2 +- seissolxdmfwriter/seissolxdmfwriter/__init__.py | 2 +- .../seissolxdmfwriter/seissol_output_extractor.py | 8 +++++++- .../seissolxdmfwriter/seissolxdmfwriter.py | 10 +++------- seissolxdmfwriter/setup.py | 2 +- 5 files changed, 13 insertions(+), 11 deletions(-) diff --git a/seissolxdmfwriter/README.md b/seissolxdmfwriter/README.md index 2a3f47d..4c6903d 100644 --- a/seissolxdmfwriter/README.md +++ b/seissolxdmfwriter/README.md @@ -36,7 +36,7 @@ sxw.write( sxw.write_from_seissol_output( 'test-fault-sx', - fn, + sx, ['SRs', 'SRd','fault-tag', 'partition'], [3,4], reduce_precision=True, diff --git a/seissolxdmfwriter/seissolxdmfwriter/__init__.py b/seissolxdmfwriter/seissolxdmfwriter/__init__.py index 0de2884..ea4cb05 100644 --- a/seissolxdmfwriter/seissolxdmfwriter/__init__.py +++ b/seissolxdmfwriter/seissolxdmfwriter/__init__.py @@ -1,2 +1,2 @@ from .seissolxdmfwriter import * -__version__ = '0.3.0' +__version__ = '0.4.0' diff --git a/seissolxdmfwriter/seissolxdmfwriter/seissol_output_extractor.py b/seissolxdmfwriter/seissolxdmfwriter/seissol_output_extractor.py index 6286d7f..f96c168 100755 --- a/seissolxdmfwriter/seissolxdmfwriter/seissol_output_extractor.py +++ b/seissolxdmfwriter/seissolxdmfwriter/seissol_output_extractor.py @@ -131,6 +131,12 @@ def ReadData(self, dataName, idt=-1): else: return super().ReadData(dataName, idt) + def GetDataLocationPrecisionMemDimension(self, dataName): + if dataName == "SR" and "SR" not in self.ReadAvailableDataFields(): + return super().GetDataLocationPrecisionMemDimension("SRs") + else: + return super().GetDataLocationPrecisionMemDimension(dataName) + def main(): sx = SeissolxdmfExtended(args.xdmfFilename) @@ -184,7 +190,7 @@ def filter_cells(coords, filter_range): sxw.write_from_seissol_output( prefix_new, - args.xdmfFilename, + sx, args.variables, indices, reduce_precision=True, diff --git a/seissolxdmfwriter/seissolxdmfwriter/seissolxdmfwriter.py b/seissolxdmfwriter/seissolxdmfwriter/seissolxdmfwriter.py index e0e95d0..0a7d1ca 100644 --- a/seissolxdmfwriter/seissolxdmfwriter/seissolxdmfwriter.py +++ b/seissolxdmfwriter/seissolxdmfwriter/seissolxdmfwriter.py @@ -215,6 +215,7 @@ def read_non_temporal(sx, ar_name, filtered_cells): desc=ar_name, dynamic_ncols=False, ): + my_array = sx.ReadData(ar_name, idt)[filtered_cells] if i == 0: h5f.create_dataset( f"/{ar_name}", @@ -222,7 +223,6 @@ def read_non_temporal(sx, ar_name, filtered_cells): dtype=str(output_type(my_array, reduce_precision)), **compression_options, ) - my_array = sx.ReadData(ar_name, idt)[filtered_cells] if my_array.shape[0] == 0: print( f"time step {idt} of {ar_name} is corrupted, replacing with 0s" @@ -438,7 +438,7 @@ def write( def write_from_seissol_output( prefix, - input_file, + sx, var_names, time_indices, reduce_precision=False, @@ -449,21 +449,17 @@ def write_from_seissol_output( """ Write hdf5/xdmf files output, readable by ParaView from a seissolxdmf object prefix: file - input_file: filename of the seissol input + sx: seissolxdmf object var_names: list of variables to extract time_indices: list of times indices to extract reduce_precision: convert double to float and i64 to i32 if True backend: data format ("hdf5" or "raw") """ - import seissolxdmf as sx - if backend not in ("hdf5", "raw"): raise ValueError(f"Invalid backend {backend}. Must be 'hdf5' or 'raw'.") if compression_level < 0 or compression_level > 9: raise ValueError("compression_level has to be in 0-9") - sx = sx.seissolxdmf(input_file) - non_temporal_array_names = ["geometry", "connect"] to_move = [name for name in var_names if name in known_1d_arrays] dictDataTypes = {} diff --git a/seissolxdmfwriter/setup.py b/seissolxdmfwriter/setup.py index 3d5870b..28bfe89 100644 --- a/seissolxdmfwriter/setup.py +++ b/seissolxdmfwriter/setup.py @@ -34,5 +34,5 @@ def get_property(prop, project): "Operating System :: OS Independent", ], python_requires=">=3.6", - install_requires=["numpy", "h5py","seissolxdmf>=0.1.2"], + install_requires=["numpy", "h5py","seissolxdmf>=0.1.2", "tqdm"], ) From 2c62d924b87d3fcbc182d765115e98fdd0ab68aa Mon Sep 17 00:00:00 2001 From: Thomas-Ulrich Date: Thu, 29 Feb 2024 11:39:55 +0100 Subject: [PATCH 2/8] output full path (needed for later scp) --- .../seissolxdmfwriter/seissol_output_extractor.py | 2 +- seissolxdmfwriter/seissolxdmfwriter/seissolxdmfwriter.py | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/seissolxdmfwriter/seissolxdmfwriter/seissol_output_extractor.py b/seissolxdmfwriter/seissolxdmfwriter/seissol_output_extractor.py index f96c168..c029e2f 100755 --- a/seissolxdmfwriter/seissolxdmfwriter/seissol_output_extractor.py +++ b/seissolxdmfwriter/seissolxdmfwriter/seissol_output_extractor.py @@ -29,7 +29,7 @@ def generate_new_prefix(prefix, append2prefix): "--add2prefix", help="string to append to the prefix in the new file", type=str, - default="_resampled", + default="_extracted", ) parser.add_argument( "--variables", diff --git a/seissolxdmfwriter/seissolxdmfwriter/seissolxdmfwriter.py b/seissolxdmfwriter/seissolxdmfwriter/seissolxdmfwriter.py index 0a7d1ca..af9e389 100644 --- a/seissolxdmfwriter/seissolxdmfwriter/seissolxdmfwriter.py +++ b/seissolxdmfwriter/seissolxdmfwriter/seissolxdmfwriter.py @@ -90,6 +90,8 @@ def write_timeseries_xdmf( with open(prefix + ".xdmf", "w") as fid: fid.write(xdmf) print(f"done writing {prefix}.xdmf") + full_path = os.path.abspath(f"{prefix}.xdmf") + print(f"full path: {full_path}") def write_mesh_xdmf( @@ -135,6 +137,8 @@ def write_mesh_xdmf( with open(prefix + ".xdmf", "w") as fid: fid.write(xdmf) print(f"done writing {prefix}.xdmf") + full_path = os.path.abspath(f"{prefix}.xdmf") + print(f"full path: {full_path}") def output_type(input_array, reduce_precision): From 2c6681e0c1a7c400d3c1161d6a732c9d638ea336 Mon Sep 17 00:00:00 2001 From: Thomas-Ulrich Date: Thu, 29 Feb 2024 14:31:10 +0100 Subject: [PATCH 3/8] fix another bug --- seissolxdmfwriter/seissolxdmfwriter/seissolxdmfwriter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/seissolxdmfwriter/seissolxdmfwriter/seissolxdmfwriter.py b/seissolxdmfwriter/seissolxdmfwriter/seissolxdmfwriter.py index af9e389..471081b 100644 --- a/seissolxdmfwriter/seissolxdmfwriter/seissolxdmfwriter.py +++ b/seissolxdmfwriter/seissolxdmfwriter/seissolxdmfwriter.py @@ -195,7 +195,7 @@ def read_non_temporal(sx, ar_name, filtered_cells): elif ar_name == "connect": return sx.ReadConnect()[filtered_cells, :] else: - return sx.Read1dData(ar_name, sx.nElements, isInt=True)[:, filtered_cells] + return sx.Read1dData(ar_name, sx.nElements, isInt=True)[filtered_cells] nel = infer_n_elements(sx, filtered_cells) if backend == "hdf5": From eb47a587cae15fbc49af4129a65dd2c6dc55d19c Mon Sep 17 00:00:00 2001 From: Thomas-Ulrich Date: Fri, 1 Mar 2024 13:15:14 +0100 Subject: [PATCH 4/8] fix read of 1d array in case of padded data --- seissolxdmf/seissolxdmf/__init__.py | 2 +- seissolxdmf/seissolxdmf/seissolxdmf.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/seissolxdmf/seissolxdmf/__init__.py b/seissolxdmf/seissolxdmf/__init__.py index 9398ad5..e753673 100644 --- a/seissolxdmf/seissolxdmf/__init__.py +++ b/seissolxdmf/seissolxdmf/__init__.py @@ -1,2 +1,2 @@ from .seissolxdmf import * -__version__ = '0.1.2' +__version__ = '0.1.3' diff --git a/seissolxdmf/seissolxdmf/seissolxdmf.py b/seissolxdmf/seissolxdmf/seissolxdmf.py index 80e7b40..e83f378 100644 --- a/seissolxdmf/seissolxdmf/seissolxdmf.py +++ b/seissolxdmf/seissolxdmf/seissolxdmf.py @@ -238,7 +238,7 @@ def Read1dData(self, dataName, nElements, isInt=False): myData = self.ReadHdf5DatasetChunk(path + filename, hdf5var, 0, MemDimension) else: filename = dataLocation - myData = self.ReadSimpleBinaryFile(path + dataLocation, nElements, data_prec, isInt) + myData = self.ReadSimpleBinaryFile(path + dataLocation, nElements, data_prec, isInt, 0) return myData def ReadPartition(self): From 6b5eaabafca7a9c1de377edcda8972f2ee58e2fb Mon Sep 17 00:00:00 2001 From: Thomas-Ulrich Date: Fri, 1 Mar 2024 13:19:24 +0100 Subject: [PATCH 5/8] do not write full path in xdmf --- .../seissolxdmfwriter/seissolxdmfwriter.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/seissolxdmfwriter/seissolxdmfwriter/seissolxdmfwriter.py b/seissolxdmfwriter/seissolxdmfwriter/seissolxdmfwriter.py index 471081b..23328b7 100644 --- a/seissolxdmfwriter/seissolxdmfwriter/seissolxdmfwriter.py +++ b/seissolxdmfwriter/seissolxdmfwriter/seissolxdmfwriter.py @@ -42,6 +42,7 @@ def write_timeseries_xdmf( reduce_precision, backend, ): + bn_prefix = os.path.basename(prefix) data_format = "HDF" if backend == "hdf5" else "Binary" lDataName = list(dictDataTypes.keys()) lDataTypes = list(dictDataTypes.values()) @@ -50,8 +51,8 @@ def write_timeseries_xdmf( """ - geometry_location = dataLocation(prefix, "geometry", backend) - connect_location = dataLocation(prefix, "connect", backend) + geometry_location = dataLocation(bn_prefix, "geometry", backend) + connect_location = dataLocation(bn_prefix, "connect", backend) for i, ctime in enumerate(timeValues): xdmf += f""" @@ -65,7 +66,7 @@ def write_timeseries_xdmf(