[petsc-users] How to use f2py on a PETSc/SLEPc-based fortran code

Austin Herrema aherrema at iastate.edu
Wed Mar 22 14:08:53 CDT 2017


Makes sense, and definitely seems to be a more natural way to go now that I
see it.

When compiling using this rule it seems to get close but doesn't compile
all the way. Here is the output (in reality, what I was referring to as
"modname.so" is "iga_blade_py.so" and the "outer_driver.f90" is called
merely "run_analysis.f90"--sorry for the confusion):

running build
running config_cc
unifing config_cc, config, build_clib, build_ext, build commands --compiler
options
running config_fc
unifing config_fc, config, build_clib, build_ext, build commands
--fcompiler options
running build_src
build_src
building extension "iga_blade_py" sources
f2py options: []
f2py:> /tmp/tmpIH70ZJ/src.macosx-10.10-x86_64-2.7/iga_blade_pymodule.c
creating /tmp/tmpIH70ZJ/src.macosx-10.10-x86_64-2.7
Reading fortran codes...
Reading file 'run_analysis.f90' (format:free)
Post-processing...
Block: iga_blade_py
Block: run_analysis
Post-processing (stage 2)...
Building modules...
Building module "iga_blade_py"...
Constructing wrapper function "run_analysis"...
 run_analysis()
Wrote C/API module "iga_blade_py" to file
"/tmp/tmpIH70ZJ/src.macosx-10.10-x86_64-2.7/iga_blade_pymodule.c"
  adding '/tmp/tmpIH70ZJ/src.macosx-10.10-x86_64-2.7/fortranobject.c' to
sources.
  adding '/tmp/tmpIH70ZJ/src.macosx-10.10-x86_64-2.7' to include_dirs.
copying
/usr/local/lib/python2.7/site-packages/numpy/f2py/src/fortranobject.c ->
/tmp/tmpIH70ZJ/src.macosx-10.10-x86_64-2.7
copying
/usr/local/lib/python2.7/site-packages/numpy/f2py/src/fortranobject.h ->
/tmp/tmpIH70ZJ/src.macosx-10.10-x86_64-2.7
build_src: building npy-pkg config files
running build_ext
customize UnixCCompiler
customize UnixCCompiler using build_ext
customize Gnu95FCompiler
Found executable /usr/local/bin/gfortran
customize Gnu95FCompiler
customize Gnu95FCompiler using build_ext
building 'iga_blade_py' extension
compiling C sources
C compiler: clang -fno-strict-aliasing -fno-common -dynamic -g -O2 -DNDEBUG
-g -fwrapv -O3 -Wall -Wstrict-prototypes

error: unknown file type '' (from
'-Wl,-rpath,/usr/local/Cellar/slepc/3.7.3_4/real/lib')
make: *** [iga_blade_py.so] Error 1

On Wed, Mar 22, 2017 at 1:39 PM, Jose E. Roman <jroman at dsic.upv.es> wrote:

>
> > El 22 mar 2017, a las 19:23, Barry Smith <bsmith at mcs.anl.gov> escribió:
> >
> >
> >> On Mar 22, 2017, at 1:08 PM, Austin Herrema <aherrema at iastate.edu>
> wrote:
> >>
> >> Thank you for the suggestion! Seems like a reasonable way to go. Not
> working for me, however, I suspect because I'm using homebrew installations
> of PETSc and SLEPc (I don't think all the makefiles are kept). Any other
> way to do the same thing by chance? Worst case I could use a non-homebrew
> installation but I'd prefer not to mess with that if I can help it...
> >
> >   How do you link a "regular" SLEPc C program using the home-brew
> libraries? You need basically the same link line for f2py as you need for C
> programs.
>
>
> What Barry may be suggesting is: instead of using a script to invoke f2py,
> add a rule to your makefile
>
> modname.so: outer_driver.f90
>         f2py -c -m modname outer_driver.f90 file1.o file2.o file3.o
> ${SLEPC_EPS_LIB}
>
> Then 'make modname.so' will pick the libraries from SLEPc makefiles.
>
> Jose
>
> >
> >>
> >> Thanks,
> >> Austin
> >>
> >> On Wed, Mar 22, 2017 at 11:20 AM Jose E. Roman <jroman at dsic.upv.es>
> wrote:
> >> Try the following:
> >> $ cd $SLEPC_DIR
> >> $ make getlinklibs_slepc
> >> Then copy the output and paste it at the end of your f2py command.
> >>
> >> Jose
> >>
> >>
> >>> El 22 mar 2017, a las 16:38, Austin Herrema <aherrema at iastate.edu>
> escribió:
> >>>
> >>> Hello all,
> >>>
> >>> I am trying to do as the subject line describes--use f2py to run a
> large PETSc/SLEPc fortran finite element code through python. I really only
> need to wrap the outermost function of the fortran code--don't need any
> access to subroutines. I'll describe what I'm doing, some of which I'm not
> 100% confident is correct (not much experience with f2py)--feel free to
> correct/redirect any of it.
> >>>
> >>> First, I'm editing the fortran code so that the top-level function is
> a subroutine rather than a main program (it's my understanding that this is
> required for f2py?).
> >>>
> >>> I use my regular makefile (modeled after a standard SLEPc makefile
> from the user guide) to compile all of the .f90/.F90 files (many of them)
> to .o files using SLEPc/PETSc rules. The final linking phase fails since
> there isn't a main program, but I'm just ignoring that for now since that's
> not what I ultimately need...
> >>>
> >>> Using a python script, I set up and run the f2py command. Right now it
> has the form...
> >>> "f2py -c -m modname outer_driver.f90 file1.o file2.o file3.o..." etc.
> >>>
> >>> This appears to work, but upon attempting to import, it cannot find
> the SLEPc (and, I presume, PETSc) objects/functions:
> >>>
> >>>>>> import mod_name
> >>> Traceback (most recent call last):
> >>>  File "<stdin>", line 1, in <module>
> >>> ImportError: dlopen(./mod_name.so, 2): Symbol not found: _epscreate_
> >>>  Referenced from: ./mod_name.so
> >>>  Expected in: flat namespace
> >>> in ./mod_name.so
> >>>
> >>> Based on this discussion, I believe I need to somehow include
> PETSc/SLEPc info when linking with f2py. Is that correct? Any direction on
> how to do that? I don't quite understand what the OP of that question
> ultimately ended up doing to get it to work. I tried using the -I flag
> pointing to the slepc_common file (like the SLEPc makefile does). The
> problem is that that is a file, not a directory, which contains a number of
> other makefile-style variables--so it works to include it in a makefile,
> but doesn't work in python. Maybe there are only a few directories I really
> need to include? Or is it possible to somehow run f2py through a makefile?
> I'm a bit ignorant in that realm as well.
> >>>
> >>> Thank you for any help or suggestions!
> >>> Austin
> >>>
> >>>
> >>> --
> >>> Austin Herrema
> >>> PhD Student | Graduate Research Assistant | Iowa State University
> >>> Wind Energy Science, Engineering, and Policy | Mechanical Engineering
> >>
> >> --
> >> Austin Herrema
> >> PhD Student | Graduate Research Assistant | Iowa State University
> >> Wind Energy Science, Engineering, and Policy | Mechanical Engineering
> >
>
>


-- 
*Austin Herrema*
PhD Student | Graduate Research Assistant | Iowa State University
Wind Energy Science, Engineering, and Policy | Mechanical Engineering
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20170322/f99453b7/attachment.html>


More information about the petsc-users mailing list