2015-05-23 6 views
0

Я пытаюсь загрузить файл hdf5 в Paraview с помощью XMF. Это парадигма визуализации больших данных с использованием hdf в качестве хранилища и xmf в качестве метаданных-компоновщика для hdf-файла, читаемого с помощью параввью, посещения и других программ для визуализации больших данных.Код Python для написания xmf для одного HDF5, который содержит данные с временным чередованием для визуализации в Paraview, Посетить

В файле hdf5 есть последовательность тензорных данных, названных как stress_0, stress_1, ..... так далее, до напряжения_100. Индивидуальный набор данных содержит 64 * 64 * 64 * 6 точек данных.

Теперь я хотел бы сделать анимацию в Paraview в последовательности, используя последовательные тензорные данные stress_i для N шагов. В деталях я хотел бы загрузить stress_0, получить рамку изображения из Paraview, а затем загрузить stress_1 и получить рамку изображения и так далее.

Общей процедурой для этого является запись XMF с использованием XDMF. Но я не понимаю, как это сделать с учетом примера here.

Посетить сообщество, возможно, столкнулись с такими проблемами раньше. Одно из их обсуждений thread объясняет немного, но мало.

  1. Можно ли создать этот xmf, используя python, предоставляющий файл hdf5, со всеми метаданными содержащегося в нем массива? Я уверен, что это возможно. Но не знаю, пакет для этого. Любое предложение приветствуется.
+0

XDMF доступна [здесь] (http://www.xdmf.org/index.php/Get_Xdmf), и может быть скомпилирован в питона обертке. Однако, когда я использовал его пару лет назад, у него были некоторые довольно серьезные ошибки, которые означали, что он фактически не писал файл XMF правильно. В конце я использовал модуль python xml.etree.ElementTree для записи файла XMF. Я попробую очистить [этот пример] (https://gist.github.com/ZedThree/8ee244a42717e0037010) и опубликовать его в качестве ответа. – Yossarian

+0

Спасибо @Yossarian. Я уже понял это. Я поставлю решение этого сегодня. Я пишу простой файл python, который выполняет эту работу для меня, и когда я пишу файл hdf5, я тоже знаю структуру. – abhra

ответ

0

Наконец-то я понял это, следуя двум ссылкам, которые я упомянул ранее. Файл питон идет этот путь

from __future__ import division 
import numpy as np 

# using h5py 
#import h5py as h5pi 

#test = h5pi.File('name_of_h5.h5',mode='r',driver='core') 
#test.keys()[:] # this contains all the data files' name inside hdf5 

# defining the grid 
Nx,Ny,Nz =64, 64, 64 

# Total time steps 
tEnd = 5000 

# Data dumping step 
nOutput = 10 

# Not taking initial points 
waittime = 3400 

filename = 'Name_of_h5.xmf' 
f = open(filename, 'w') 

# Header for xml file 
f.write('''<?xml version="1.0" ?> 
<!DOCTYPE Xdmf SYSTEM "Xdmf.dtd" []> 
<Xdmf Version="2.0"> 
<Domain> 
<Grid Name="Box" GridType="Collection" CollectionType="Temporal"> 
''') 

# loop over the attributes name written using time 
t = 0 
frameN = 0 # For time sequence 
while t <= tEnd : 
    t = t + 1; 
    if(np.mod(t, nOutput) == 0 and t > waititme): 

     # Naming datasets 
     dataSetName1 = 'Name_of_h5.h5:/S_%.8d'%(t) 
     dataSetName2 = 'Name_of_h5.h5:/V_%.8d'%(t) 

     # at individual time write the time independent Box grid. is it overdoing? 
     f.write(''' 
     <!-- time step --> 
     <Grid Name="Box %d" GridType="Uniform"> # 
     <Topology TopologyType="3DCoRectMesh" Dimensions="%d %d %d"/> 
     <Geometry GeometryType="ORIGIN_DXDYDZ"> 
      <DataItem DataType="Float" Dimensions="3" Format="XML">0.0 0.0 0.0</DataItem> 
      <DataItem DataType="Float" Dimensions="3" Format="XML">1.0 1.0 1.0</DataItem> 
     </Geometry> 
     <Time Value="%d" /> 
     '''%(frameN, Nx, Ny, Nz, frameN)) 

     # First Attribute 
     f.write('''\n 
     <Attribute Name="S" AttributeType="Scalar" Center="Node"> 
     <DataItem Dimensions="%d %d %d" NumberType="Float" Precision="4" 
     Format="HDF">%s 
     </DataItem> 
     </Attribute> 
     '''%(Nx, Ny, Nz, dataSetName1)) 

     # Second Attribute 
     f.write('''\n 
     <Attribute Name="N" AttributeType="Vector" Center="Node"> 
     <DataItem Dimensions="%d %d %d 3" NumberType="Float" Precision="4" 
     Format="HDF"> %s 
     </DataItem> 
     </Attribute> 
     </Grid>\n'''%(Nx, Ny, Nz, dataSetName2)) 
     frameN +=1 

# End the xmf file 
f.write(''' 
    </Grid> 
</Domain> 
</Xdmf> 
''') 
+0

@yossarian: Пожалуйста, поделитесь своими комментариями о коде. Еще один момент, который я хотел бы упомянуть, заключается в том, что, учитывая файл hdf5, это тоже можно написать. – abhra