Merge branch 'fix-xdmf' into development
This commit is contained in:
commit
723737c992
|
@ -1437,7 +1437,7 @@ class Result:
|
|||
|
||||
topology = ET.SubElement(grid, 'Topology')
|
||||
topology.attrib = {'TopologyType': '3DCoRectMesh',
|
||||
'Dimensions': '{} {} {}'.format(*(self.cells+1))}
|
||||
'Dimensions': '{} {} {}'.format(*(self.cells[::-1]+1))}
|
||||
|
||||
geometry = ET.SubElement(grid, 'Geometry')
|
||||
geometry.attrib = {'GeometryType':'Origin_DxDyDz'}
|
||||
|
@ -1446,13 +1446,13 @@ class Result:
|
|||
origin.attrib = {'Format': 'XML',
|
||||
'NumberType': 'Float',
|
||||
'Dimensions': '3'}
|
||||
origin.text = "{} {} {}".format(*self.origin)
|
||||
origin.text = "{} {} {}".format(*self.origin[::-1])
|
||||
|
||||
delta = ET.SubElement(geometry, 'DataItem')
|
||||
delta.attrib = {'Format': 'XML',
|
||||
'NumberType': 'Float',
|
||||
'Dimensions': '3'}
|
||||
delta.text="{} {} {}".format(*(self.size/self.cells))
|
||||
delta.text="{} {} {}".format(*(self.size/self.cells)[::-1])
|
||||
|
||||
attributes.append(ET.SubElement(grid, 'Attribute'))
|
||||
attributes[-1].attrib = {'Name': 'u / m',
|
||||
|
@ -1461,7 +1461,7 @@ class Result:
|
|||
data_items.append(ET.SubElement(attributes[-1], 'DataItem'))
|
||||
data_items[-1].attrib = {'Format': 'HDF',
|
||||
'Precision': '8',
|
||||
'Dimensions': '{} {} {} 3'.format(*(self.cells+1))}
|
||||
'Dimensions': '{} {} {} 3'.format(*(self.cells[::-1]+1))}
|
||||
data_items[-1].text = f'{os.path.split(self.fname)[1]}:/{inc}/geometry/u_n'
|
||||
|
||||
for ty in ['phase','homogenization']:
|
||||
|
@ -1483,7 +1483,7 @@ class Result:
|
|||
data_items[-1].attrib = {'Format': 'HDF',
|
||||
'NumberType': number_type_map(dtype),
|
||||
'Precision': f'{dtype.itemsize}',
|
||||
'Dimensions': '{} {} {} {}'.format(*self.cells,1 if shape == () else
|
||||
'Dimensions': '{} {} {} {}'.format(*self.cells[::-1],1 if shape == () else
|
||||
np.prod(shape))}
|
||||
data_items[-1].text = f'{os.path.split(self.fname)[1]}:{name}'
|
||||
|
||||
|
@ -1516,10 +1516,9 @@ class Result:
|
|||
Export to VTK cell/point data.
|
||||
|
||||
One VTK file per visible increment is created.
|
||||
For cell data, the VTK format is a image data (.vti) for
|
||||
grid-based simulations and an unstructured grid (.vtu) for
|
||||
mesh-baed simulations. For point data, the VTK format is poly
|
||||
data (.vtp).
|
||||
For point data, the VTK format is poly data (.vtp).
|
||||
For cell data, either an image (.vti) or unstructured (.vtu) dataset
|
||||
is written for grid-based or mesh-based simulations, respectively.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
|
@ -1539,7 +1538,7 @@ class Result:
|
|||
Fill value for non-existent entries of integer type.
|
||||
Defaults to 0.
|
||||
parallel : bool
|
||||
Write out VTK files in parallel in a separate background process.
|
||||
Write VTK files in parallel in a separate background process.
|
||||
Defaults to True.
|
||||
|
||||
"""
|
||||
|
|
|
@ -8,6 +8,7 @@ import hashlib
|
|||
from datetime import datetime
|
||||
|
||||
import pytest
|
||||
import vtk
|
||||
import numpy as np
|
||||
|
||||
from damask import Result
|
||||
|
@ -404,17 +405,46 @@ class TestResult:
|
|||
os.chdir(tmp_path)
|
||||
single_phase.save_VTK(mode=mode)
|
||||
|
||||
def test_XDMF(self,tmp_path,single_phase,update,ref_path):
|
||||
def test_XDMF_datatypes(self,tmp_path,single_phase,update,ref_path):
|
||||
for shape in [('scalar',()),('vector',(3,)),('tensor',(3,3)),('matrix',(12,))]:
|
||||
for dtype in ['f4','f8','i1','i2','i4','i8','u1','u2','u4','u8']:
|
||||
single_phase.add_calculation(f"np.ones(np.shape(#F#)[0:1]+{shape[1]},'{dtype}')",f'{shape[0]}_{dtype}')
|
||||
fname = os.path.splitext(os.path.basename(single_phase.fname))[0]+'.xdmf'
|
||||
os.chdir(tmp_path)
|
||||
|
||||
single_phase.save_XDMF()
|
||||
|
||||
if update:
|
||||
shutil.copy(tmp_path/fname,ref_path/fname)
|
||||
|
||||
assert sorted(open(tmp_path/fname).read()) == sorted(open(ref_path/fname).read()) # XML is not ordered
|
||||
|
||||
@pytest.mark.skipif(not hasattr(vtk,'vtkXdmfReader'),reason='https://discourse.vtk.org/t/2450')
|
||||
def test_XDMF_shape(self,tmp_path,single_phase):
|
||||
os.chdir(tmp_path)
|
||||
|
||||
single_phase.save_XDMF()
|
||||
fname = os.path.splitext(os.path.basename(single_phase.fname))[0]+'.xdmf'
|
||||
reader_xdmf = vtk.vtkXdmfReader()
|
||||
reader_xdmf.SetFileName(fname)
|
||||
reader_xdmf.Update()
|
||||
dim_xdmf = reader_xdmf.GetOutput().GetDimensions()
|
||||
bounds_xdmf = reader_xdmf.GetOutput().GetBounds()
|
||||
|
||||
single_phase.view('increments',0).save_VTK()
|
||||
fname = os.path.splitext(os.path.basename(single_phase.fname))[0]+'_inc00.vti'
|
||||
for i in range(10): # waiting for parallel IO
|
||||
reader_vti = vtk.vtkXMLImageDataReader()
|
||||
reader_vti.SetFileName(fname)
|
||||
reader_vti.Update()
|
||||
dim_vti = reader_vti.GetOutput().GetDimensions()
|
||||
bounds_vti = reader_vti.GetOutput().GetBounds()
|
||||
if dim_vti == dim_xdmf and bounds_vti == bounds_xdmf:
|
||||
return
|
||||
time.sleep(.5)
|
||||
|
||||
assert False
|
||||
|
||||
def test_XDMF_invalid(self,default):
|
||||
with pytest.raises(TypeError):
|
||||
default.save_XDMF()
|
||||
|
|
Loading…
Reference in New Issue