https://github.com/pierre-guillou/pdiags_bench
Tip revision: 8a2de479abf7bcbf2002b4f8f620c635217cc088 authored by Julien J Tierny on 30 January 2023, 16:30:54 UTC
added reference to the arxiv repo
added reference to the arxiv repo
Tip revision: 8a2de47
vti2nc3.py
import argparse
import netCDF4 as nc
import vtk
from vtk.util.numpy_support import vtk_to_numpy
def main(input_vti, output_nc3=None):
if output_nc3 is None:
ext = input_vti.split(".")[-1]
output_nc3 = input_vti.replace(ext, "nc")
reader = vtk.vtkXMLImageDataReader()
reader.SetFileName(input_vti)
reader.Update()
image_data = reader.GetOutput()
dims = list(image_data.GetDimensions())
array = image_data.GetPointData().GetAbstractArray(0)
if array.GetName() == "vtkGhostType":
array = image_data.GetPointData().GetAbstractArray(1)
array_name = array.GetName()
array = vtk_to_numpy(array)
with nc.Dataset(output_nc3, "w", format="NETCDF3_CLASSIC") as dst:
dim_names = ["x", "y", "z"]
for n, v in zip(dim_names, dims):
dst.createDimension(n, v)
data = dst.createVariable(array_name, "f8", dim_names)
data[:, :, :] = array.reshape(dims)
if __name__ == "__main__":
parser = argparse.ArgumentParser(
description="Converts a VTK Image Data file to NetCDF3"
)
parser.add_argument("input_vti", help="Input VTI file")
parser.add_argument("-o", "--output", help="Output NetCDF3 file")
args = parser.parse_args()
main(args.input_vti, args.output)