← Back to team overview

dolfin team mailing list archive

Re: python: xml read for vector / std::vector

 

On Wednesday August 4 2010 13:09:47 Riesen Patrick wrote:
> -----Original Message-----
> From: Garth N. Wells [mailto:gnw20@xxxxxxxxx]
> Sent: Wed 04.08.2010 19:07
> To: johan.hake@xxxxxxxxx
> Cc: Riesen  Patrick; dolfin@xxxxxxxxxxxxxxxxxxx
> Subject: Re: [Dolfin] python: xml read for vector / std::vector
> 
> On Wed, 2010-08-04 at 10:03 -0700, Johan Hake wrote:
> > On Wednesday August 4 2010 09:28:22 Patrick Riesen wrote:
> > > Patrick Riesen wrote:
> > > > Johan Hake wrote:
> > > >> Patrick!
> > > >> 
> > > >> On Wednesday August 4 2010 09:13:24 Patrick Riesen wrote:
> > > >>> hello dolfin developers
> > > >>> 
> > > >>> I write out a std::vector in XML file format from cpp. Can I read
> > > >>> the XML file in again in python and construct a numpy array?
> > > >>> I know how to do it with a dolfin Vector, but is it possible with a
> > > >>> std::vector<double>? I could not figure out the syntax, i tried
> > > >>> 
> > > >>> # this is ok
> > > >>> fn = File("data/norm.xml")
> > > >>> div_vec = d.Vector()
> > > >>> a = n.array((11,1))
> > > >>> 
> > > >>> # fails
> > > >>> fn >> a
> > > >>> # fails
> > > >>> fn >> div_vec.array()
> > > >> 
> > > >> Have you tried:
> > > >>   fn >> div_vec
> > > >>   a = div_vec.array()
> > > > 
> > > > yes, that gives the error:
> > > > *** Error: Handler stack not empty. Something is wrong!
> > 
> > The format is then different for the Vector XML file and the std::vector
> > file?
> > 
> > > if i write out a dolfin::Vector in xml, it's all fine with:
> > > 
> > > fn = File("data/norm.xml")
> > > div_vec = d.Vector()
> > > fn >> div_vec
> > > a = div_vec.array()
> > > 
> > > but if i write out a std::vector<double> in xml, I can't read it in.
> > 
> > Silly question from a Python user:
> >   How do you write the std::vector to a XML file?
> 
> You don't ;);
> 
> DOLFIN does. It's overloaded in the XMLFile class.
> Well, anyway, i thought if dolfin can write out a std::vector to xml via
> File/XMLFile, pydolfin can also read it in, but obviously not. 

I think you stumble across some unused code there. I am not sure but I think 
Ola implemented this for some debugging of the parallel interface. But I am 
not sure actually. 

If we had a typemap for std::vector <-> numpy array (which we could have, but 
desided we did not want...) we sould be able to do:

  somefile >> array
  somefile << array

Where somefile will be file generated by XMLArray, which probably define a 
different XML interfaces than XMLVector.

> it would
> have been slightly slightly more convenient ;-)
> then i'll just use the dolfin Vector to do the job.

:)

Johan

> 
> regards,
> patrick
> 
> > A simple hack would be to convert the std::vector to a dolfin::Vector and
> > save this to a XML file in C++. Then you can read it in, in PyDOLFIN.
> 
> That should work.
> 
> Garth
> 
> > Johan
> > 
> > > regards,
> > > patrick
> > > 
> > > >> Johan
> > > >> 
> > > >>> thanks for the help,
> > > >>> 
> > > >>> patrick
> > > >>> 
> > > >>> 
> > > >>> 
> > > >>> _______________________________________________
> > > >>> Mailing list: https://launchpad.net/~dolfin
> > > >>> Post to     : dolfin@xxxxxxxxxxxxxxxxxxx
> > > >>> Unsubscribe : https://launchpad.net/~dolfin
> > > >>> More help   : https://help.launchpad.net/ListHelp
> > > > 
> > > > _______________________________________________
> > > > Mailing list: https://launchpad.net/~dolfin
> > > > Post to     : dolfin@xxxxxxxxxxxxxxxxxxx
> > > > Unsubscribe : https://launchpad.net/~dolfin
> > > > More help   : https://help.launchpad.net/ListHelp
> > 
> > _______________________________________________
> > Mailing list: https://launchpad.net/~dolfin
> > Post to     : dolfin@xxxxxxxxxxxxxxxxxxx
> > Unsubscribe : https://launchpad.net/~dolfin
> > More help   : https://help.launchpad.net/ListHelp



Follow ups

References