#!/usr/bin/env python
import os
import optparse
import numpy
import array
from proteus import Archiver
from xml.etree.ElementTree import *

usage = "usage: %prog filePrefix [options]"
parser = optparse.OptionParser(usage=usage)
parser.add_option("-x", "--nodes-x",
                  help="Number of points along x dimension",
                  action="store",
                  type="int",
                  dest="x")    
parser.add_option("-y", "--nodes-y",
                  help="Number of points along y dimension",
                  action="store",
                  type="int",
                  dest="y")    
parser.add_option("-t", "--nodes-t",
                  help="Number of points along t dimension",
                  action="store",
                  type="int",
                  dest="t")    
parser.add_option("-X", "--dimensions-x",
                  help="Number of points along x dimension",
                  action="store",
                  type="float",
                  dest="X")    
parser.add_option("-Y", "--dimensions-y",
                  help="Number of points along y dimension",
                  action="store",
                  type="float",
                  dest="Y")    
parser.add_option("-T", "--dimensions-t",
                  help="Number of points along t dimension",
                  action="store",
                  type="float",
                  dest="T")    

(opts,args) = parser.parse_args()
filePrefix=args[0]
dx = opts.X/float(opts.x-1)
dy = opts.Y/float(opts.y-1)
dt = opts.T/float(opts.t-1)
f = open(args[0]+".bin","rb")
a = array.array('d')
a.read(f,opts.t*opts.y*opts.x)
A = numpy.array(a,'d')
A = numpy.reshape(A,(opts.t,opts.y,opts.x))
f.close()
#open xdmf file (xmf and h5)
archive = Archiver.XdmfArchive(".",filePrefix,useTextArchive=False)
archive.domain = SubElement(archive.tree.getroot(),"Domain")
archive.gridCollection = SubElement(archive.domain,"Grid",{"Name":"WavesSpaceTimeGrid",
                                                           "GridType":"Collection",
                                                           "CollectionType":"Temporal"})
#write xdmf
for i in range(opts.t):
    grid = SubElement(archive.gridCollection,"Grid",{"GridType":"Uniform"})
    time = SubElement(grid,"Time",{"Value":str(i*dt)})
    topology = SubElement(grid,"Topology",{"TopologyType":"3DCoRectMesh",
                                           "Dimensions":"%i %i %i" % (1,opts.y,opts.x)})
    geometry = SubElement(grid,"Geometry",{"GeometryType":"ORIGIN_DXDYDZ"})
    geometryOrigin = SubElement(geometry,"DataItem",
                              {"Format":"XML",
                               "DataType":"Float",
                               "Precision":"8",
                               "Dimensions":"%i" % (3,)})
    geometryOrigin.text = "%f %f %f" % (0.0,0.0,0.0)
    geometryDxDy = SubElement(geometry,"DataItem",
                              {"Format":"XML",
                               "DataType":"Float",
                               "Precision":"8",
                               "Dimensions":"%i" % (3,)})
    geometryDxDy.text = "%f %f %f" % (0.0,dy,dx)
    attribute = SubElement(grid,"Attribute",{"Name":filePrefix,
                                             "AttributeType":"Scalar",
                                             "Center":"Node"})
    values    = SubElement(attribute,"DataItem",
                           {"Format":archive.dataItemFormat,
                            "DataType":"Float",
                            "Precision":"8",
                            "Dimensions":"%i %i %i" % (1,opts.y,opts.x,)})
    values.text = archive.hdfFilename+":/"+filePrefix+`i`
    archive.hdfFile.createArray("/",filePrefix+`i`,A[i,...])
archive.close()
