dolfin team mailing list archive
-
dolfin team
-
Mailing list archive
-
Message #18888
Re: python: xml read for vector / std::vector
On Friday August 6 2010 11:48:37 Anders Logg wrote:
> On Wed, Aug 04, 2010 at 05:06:57PM -0700, Johan Hake wrote:
> > 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.
>
> Input/output is implemented for the Array class so it would be
> appropriate to use that. It was implemented to handle input/output for
> parallel mesh data (stored in the data section of a mesh as
> MeshFunctions, Arrays and maps).
Ok
> Can someone remind me of why we don't have a typemap for numpy.array
> and dolfin::Array? Or what am I missing here?
We have that, but the XMLArray read and writes std::vector, which typemaps we
decided to ditch.
Johan
Follow ups
References