Tim, Thanks. But what I want is all bundled up a routine that takes in the Fortran array of character strings and allocates and copies over them to the C ptr business. Likely I could figure it out myself with but Blaise is such a Fortran wizard he can do it optimally in his sleep :-)
Barry On May 25, 2012, at 8:14 PM, Tim Gallagher wrote: > For what it's worth, I answered a question about how to pass string arrays > awhile ago on StackOverflow: > > http://stackoverflow.com/questions/9686532/arrays-of-strings-in-fortran-c-bridges-using-iso-c-binding/9686741#9686741 > > Tim > > ----- Original Message ----- > From: "Barry Smith" <bsmith at mcs.anl.gov> > To: "For users of the development version of PETSc" <petsc-dev at mcs.anl.gov> > Sent: Friday, May 25, 2012 8:57:52 PM > Subject: Re: [petsc-dev] What needs to be done before a release? > > Blaise > > If you provide a fortran function to convert an array of Fortran strings to > an array of C strings and tell us how to delete the result then we'll provide > a PetscOptionsGetEnum() for Fortran. > > Barry > > On May 2, 2012, at 12:02 PM, Blaise Bourdin wrote: > >> Barry, >> >>>> Also, fortran wrappers over PetscOptionsEnum and PetscBagRegisterEnum >>>> would be nice. I understand that it >>>> is a bit tricky since it involves passing fortran arrays of strings. >>> >>> Yup. We'd be willing to support these from FORTRAN but someone else has >>> to do the dirty work of figuring out how to handle those array of strings >>> (maybe F2003?). >> >> I am attaching a simple proof of concept example that demonstrates how to >> write a fortran interface and call petsc C functions from fortran using >> F2003 C-interoperability instead of going through the fortran bindings. >> >> Don't be put off by all the warnings if you use gfortran. They would be easy >> to avoid. Basically, right now, you detect the fortran integer and real >> kinds that match that of the C ones. It would be quite simple to get the >> fortran C-interoperable integer and real types associated with the C type of >> PetscInt, PetscReal etc. >> >> Basically, we (I?) could write a fortran interface and a fortran function >> for the tricky functions involving arrays of string, instead of creating a >> custom binding in C. Are you willing to let some fortran pollution into the >> petsc code? Where would these function have to be? >> >> Blaise >> >> PS: you need FCFLAGS='-ffixed-line-length-none -ffree-line-length-none >> -ffree-form' or some subset of these to compile with gfortran. I'm not sure >> why these are not the default with a file suffix .F90 >> >> <PetscF2003Binding.F90> >> -- >> Department of Mathematics and Center for Computation & Technology >> Louisiana State University, Baton Rouge, LA 70803, USA >> Tel. +1 (225) 578 1612, Fax +1 (225) 578 4276 >> http://www.math.lsu.edu/~bourdin >> >> >> >> >> >> >> >