Source code for Mordicus.Modules.CT.IO.numpyToVTKWriter
# -*- coding: utf-8 -*-
import numpy as np
import vtk
from vtk.util import numpy_support
from Mordicus.Core.IO.SolutionReaderBase import SolutionReaderBase
from mpi4py import MPI
from pathlib import Path
import os
primalSolutionComponents = {1:[""], 2:["1", "2"], 3:["1", "2", "3"]}
[docs]def WritePOD(VTKBase, solutionName, reducedOrderBasis):
"""
Functional API
Reads a snapshots from the Z-set solution file "solutionFileName" (.ut), at time "time" and of primality "primality", from the HF computation
Parameters
----------
solutionFileName : str
Z-set solution file
fieldName : str
name of the solution from which the snapshot is read
time : float
time at which the snapshot is read
primality : bool
primality of the solution from which the snapshot is read
Returns
-------
np.ndarray
of size (numberOfDofs,)
"""
writer = VTKWriter(VTKBase = VTKBase)
return writer.numpyToVTKWrite(solutionName, reducedOrderBasis)
[docs]class VTKWriter(SolutionReaderBase):
"""
Class containing writers for VTK files
Attributes
----------
VTKBase : vtu data structure
name of the VTK data structure (.vtu)
"""
def __init__(self, VTKBase):
"""
Parameters
----------
VTKBase : vtu data structure
"""
super(VTKWriter, self).__init__()
self.VTKBase = VTKBase
[docs] def numpyToVTKPODWrite(self, solutionName, reducedOrderBasis):
nmpyPODModes_array = reducedOrderBasis
#print('\nPOD modes (numberOfModes, numberOfDOFs) ', nmpyPODModes_array.shape)
p = self.VTKBase.GetPointData()
for ind in range(0,nmpyPODModes_array.shape[0]):
nmpyPODMode_array = nmpyPODModes_array[ind,:]
VTK_data = numpy_support.numpy_to_vtk(num_array=nmpyPODMode_array.ravel(), deep=True, array_type=vtk.VTK_FLOAT)
VTK_data.SetName("POD_mode "+ str(solutionName) + ' ' + str(ind))
name = VTK_data.GetName()
size = VTK_data.GetSize()
p.AddArray(VTK_data)
out_fname = 'PODmodes.vtu'
writer = vtk.vtkXMLUnstructuredGridWriter()
writer.SetFileName(out_fname)
writer.SetInputData(self.VTKBase)
writer.SetDataModeToAscii()
writer.Write()
print('\nfile ', out_fname, ' written\n' )
[docs] def numpyToVTKSanpWrite(self, solutionName, SnapshotsList):
numpySnap_array = SnapshotsList[0]
p = self.VTKBase.GetPointData()
VTK_data = numpy_support.numpy_to_vtk(num_array=numpySnap_array.ravel(), deep=True, array_type=vtk.VTK_FLOAT)
VTK_data.SetName("Rec Sol "+ str(solutionName))
name = VTK_data.GetName()
size = VTK_data.GetSize()
p.AddArray(VTK_data)
out_fname = 'RecSol.vtu'
writer = vtk.vtkXMLUnstructuredGridWriter()
writer.SetFileName(out_fname)
writer.SetInputData(self.VTKBase)
writer.SetDataModeToAscii()
writer.Write()
print('\nfile ', out_fname, ' written\n' )