On Nov 8, 2011, at 8:57 PM, Jed Brown wrote: > We have bindings for this, but I can't find a way to make it work. I can pass > a context into a function, but I can't get one back out with a subroutine > call. F90 pointers are grotesque creatures that don't seem to be up to this > task either, at least not with any chance of portability. > > Is there anything we can do to avoid common blocks without losing all hope of > portability? How does anyone use this sorry excuse for a language? If you were to do this in fortran 90 alone, you'd need to use the transfer function. Drew Mc Cormack had a short tutorial on this topic a long time ago. http://www.macresearch.org/advanced_fortran_90_callbacks_with_the_transfer_function I would expect that there'd be a way to get it to play nice with C using the C_interop module. not sure about the bindings we use.
fortran90, 2003 and 2008 are a bit richer than FORTRAN 77... Blaise > > Note that having the context passed in as an argument isn't feasible for > PCShell and MatShell, so it's nigh impossible to use these objects with > multigrid (or any other case where you have multiple instances of shell > objects, breaking the common blocks.) -- 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
