Commit f4b37abc authored by Felipe Bordeu's avatar Felipe Bordeu Committed by Felipe Bordeu
Browse files

(Xdmf IO) better h5py optional support

parent 659b0c01
Loading
Loading
Loading
Loading
+81 −77
Original line number Diff line number Diff line
@@ -13,10 +13,9 @@ import numpy as np
import xml.sax

from BasicTools.Helpers.TextFormatHelper import TFormat
from BasicTools.IO.XdmfTools import FieldNotFound
from BasicTools.NumpyDefs import PBasicFloatType

import BasicTools.Containers.ElementNames as ElementNames
from BasicTools.IO.XdmfTools import FieldNotFound, HasHdf5Support, XdmfNumber


def ReadXdmf(fileName):
@@ -102,7 +101,7 @@ class XdmfDomain(Xdmfbase):
        if isinstance(nameornumber,str):
            for g in self.grids:
                if g.Name == nameornumber : return g
            raise
            raise Exception(f" grid with name '{nameornumber}' not found")
        else:
            return self.grids[nameornumber]

@@ -906,11 +905,16 @@ def CheckIntegrity():
    except Exception as e :
        pass

    res = XdmfReader(filename = TestDataPath + "Unstructured.xmf" )
    for filename in ["Unstructured.xmf", "UnstructuredBinary.xmf", "UnstructuredAscii.xmf" ]:

        if not HasHdf5Support() and filename == "Unstructured.xmf":
            continue

        res = XdmfReader(filename = TestDataPath + filename )
        res.lazy = False
        res.Read()

    res = XdmfReader(filename = TestDataPath + "Unstructured.xmf" )
        res = XdmfReader(filename = TestDataPath + filename )
        # read only the xml part
        res.Read()

@@ -990,7 +994,7 @@ def CheckIntegrity():

        topo = res.xdmf.domains[0].GetGrid("Grid").topology.dataitems[0].GetData()
        #print(topo)
    if topo[2] != 1: raise
        if topo[0] != XdmfNumber[ElementNames.Hexaedron_8]: raise

        ######################### Structured #########################
        res = XdmfReader(filename = TestDataPath + "Structured.xmf" )
@@ -1016,7 +1020,7 @@ def CheckIntegrity():
def Example1():
    import BasicTools.TestData as test
    # Create a Reader
    reader = XdmfReader(filename = test.GetTestDataPath() + "Unstructured.xmf")
    reader = XdmfReader(filename = test.GetTestDataPath() + "UnstructuredBinary.xmf")
    # Do the reading (only the xml part, to read all the data set lazy to False)
    #res.lazy = False
    reader.Read()
+7 −1
Original line number Diff line number Diff line
@@ -63,10 +63,16 @@ class FieldNotFound(ValueError):
    def __str__(self):
        return repr(self.value) # pragma: no cover

def HasHdf5Support():
    try:
        import h5py
        return True
    except:
        return False

def CheckIntegrity():

    FieldNotFound('toto');
    FieldNotFound('toto')
    return 'OK'

if __name__ == '__main__':
+18 −4
Original line number Diff line number Diff line
@@ -13,10 +13,10 @@ import os
from BasicTools.Helpers.TextFormatHelper import TFormat

import BasicTools.Containers.ElementNames as EN
from BasicTools.IO.XdmfTools import XdmfName,XdmfNumber
from BasicTools.IO.WriterBase import WriterBase as WriterBase
from BasicTools.Helpers.MPIInterface import MPIInterface as MPI
from BasicTools.NumpyDefs import PBasicIndexType
from BasicTools.IO.XdmfTools import XdmfName,XdmfNumber, HasHdf5Support

def ArrayToString(data):
    return " ".join(str(x) for x in data)
@@ -237,7 +237,12 @@ class XdmfWriter(WriterBase):
        self.__chunkSize = 2**30
        self.automaticOpen = False

        try:
            import h5py
            self.__isHdf5 = True
        except:
            self.__isHdf5 = False

        self.__hdf5FileName = ""
        self.__hdf5FileNameOnly = None
        self.__hdf5FilePointer = None
@@ -289,7 +294,13 @@ class XdmfWriter(WriterBase):
        if val :
            self.SetBinary(True)

        try:
            import h5py
            self.__isHdf5 = val
        except:
            self.__isHdf5 = False
            if val:
                print("h5py not available using binary file for output")

    def SetChunkSize(self,size):
        self.__chunkSize = size
@@ -1518,7 +1529,10 @@ def CheckIntegrityDDM(GUI=False):
        writer.Write(mesh1D, CellFields = [np.arange(mesh1D.GetNumberOfElements())+0.1 ], CellFieldsNames=["IPId_0"])

    writer.Close()
    if HasHdf5Support():
        return "ok"
    else:
        return "ok, but no hdf5 support"


if __name__ == '__main__':