使用'f2py'从python调用Fortran代码,而fortran代码使用C ++代码

时间:2019-07-01 01:30:26

标签: python c++ fortran f2py

我有一个

格式的Fortran程序
PROGRAM main
  USE a_one
  USE a_two
  ...


END PROGRAM main

带有makefile:

# Paths
MDIR            =       ./main
SDIR            =       ./solver
ODIR            =       ./obj
CASE            =       $(SDIR)/CASE/test_
TOP             =       .  

# include machine specific settings based on WLT_COMPILE_HOSTNAME environment variable
FC              =       ifort
CC              =       mpic++ #icc
LINKLIB         =       -lstdc++ -shared-intel -lifcore

FFLAGS          =       -fpp -O1 -DPTR_INTEGER8 -warn nousage -module $(ODIR) -g -traceback
CCFLAG          =       -O1 -g -DDATABASE_INTERFACE_LOWERCASE -DDATABASE_APPEND_UNDERSCORE

# Define rule to make .f90 and .f files
$(ODIR)/%.o : $(SDIR)/%.f90 
        $(FC) -c $(FFLAGS) $< -o $@

# Define rule to make C objects
$(ODIR)/%.cc.o : $(SDIR)/C++/%.cxx
        $(CC) $(CCFLAG) -c $< -o $@

# Data structure type: Tree DB (C++ variable size nodes)
CC_OBJ          =       tree.cc.o

# set executable name based on DB and CASE
EXEC        =       $(dir ${CASE})/test_new.out

# Define list of all object files to be made
_OBJ     =  module_a.o module_b.o $(_CASE).o $(_CASE).PARAMS.o $(CC_OBJ)
OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ))

MAIN_OBJ = $(ODIR)/main.o

All:  my_main

my_main : $(OBJ) $(MAIN_OBJ)
        $(FC) $(FFLAGS) $(OBJ) $(MAIN_OBJ) -o $(EXEC) $(LINKLIB)

正如您所看到的,除了fortran代码外,该程序中还使用了一些c ++代码。我正在尝试将此代码重构为子例程

SUBROUTINE main (in_matrix, out_matrix, n)
  USE a_one
  USE a_two
  ...


END SUBROUTINE main

并从python代码调用它。我遵循

中的指示

https://modelingguru.nasa.gov/docs/DOC-2343使用“ f2py”来执行此操作,但无法使其正常工作。然后我意识到我有可能导致此问题的C ++代码。我想知道如何修改以上链接中的说明以考虑c ++代码。谢谢。

0 个答案:

没有答案