diff --git a/python/damask/_vtk.py b/python/damask/_vtk.py index a5fc43dfa..340bd1ea3 100644 --- a/python/damask/_vtk.py +++ b/python/damask/_vtk.py @@ -3,6 +3,7 @@ import multiprocessing as mp from pathlib import Path import numpy as np +import numpy.ma as ma import vtk from vtk.util.numpy_support import numpy_to_vtk as np_to_vtk from vtk.util.numpy_support import numpy_to_vtkIdTypeArray as np_to_vtkIdTypeArray @@ -230,7 +231,7 @@ class VTK: Parameters ---------- - data : numpy.ndarray + data : numpy.ndarray or numpy.ma.MaskedArray Data to add. First dimension needs to match either number of cells or number of points. label : str @@ -245,8 +246,10 @@ class VTK: raise ValueError('No label defined for numpy.ndarray') N_data = data.shape[0] - d = np_to_vtk((data.astype(np.single) if data.dtype in [np.double, np.longdouble] else - data).reshape(N_data,-1),deep=True) # avoid large files + data_ = np.where(data.mask,data.fill_value,data) if isinstance(data,ma.MaskedArray) else\ + data + d = np_to_vtk((data_.astype(np.single) if data_.dtype in [np.double, np.longdouble] else + data_).reshape(N_data,-1),deep=True) # avoid large files d.SetName(label) if N_data == N_points: diff --git a/python/tests/test_VTK.py b/python/tests/test_VTK.py index a3cba354f..4328dc810 100644 --- a/python/tests/test_VTK.py +++ b/python/tests/test_VTK.py @@ -4,6 +4,7 @@ import time import pytest import numpy as np +import numpy.ma as ma from damask import VTK from damask import grid_filters @@ -134,6 +135,15 @@ class TestVTK: with pytest.raises(TypeError): default.add('invalid_type','valid') + def test_add_masked(self,default): + data = np.random.rand(5*6*7,3) + masked = ma.MaskedArray(data,mask=data<.4,fill_value=42.) + default.add(masked,'D') + result_masked = str(default) + default.add(np.where(masked.mask,masked.fill_value,masked),'D') + assert result_masked == str(default) + + def test_comments(self,tmp_path,default): default.add_comments(['this is a comment']) default.save(tmp_path/'with_comments',parallel=False)