Ich kann f2py nicht dazu bringen, einen Parameter von einem Modul in einer separaten Unterroutine zu referenzieren, wo es verwendet wird, um eine Eingabearraydimension zu definieren. I.e.F2PY - Zugriff auf Modulparameter aus Unterprogramm
! File: testmod.f90
MODULE testmod
INTEGER, PARAMETER :: dimsize = 20
END MODULE testmod
und der Parameter dimsize in einem Unterprogramm referenziert werden muss (nicht im Modul enthielt) in einer anderen Datei, die der Einstiegspunkt für meinen Python-Modul sein wird: die Paramter werden in ein Modul defeind
! File testsub.f90
SUBROUTINE testsub(arg)
USE testmod
REAL, INTENT(IN) :: arg(dimsize)
END SUBROUTINE testsub
ich kompilieren wie folgt aus:
f2py -m testmod -h testmod.pyf testsub.f90
pgf90 -g -Mbounds -Mchkptr -c -fPIC testmod.f90 -o testmod.o
pgf90 -g -Mbounds -Mchkptr -c -fPIC testsub.f90 -o testsub.o
f2py -c testmod.pyf testmod.o testsub.o
aber diese Fehlermeldung erhalten:
testmodmodule.c: In function 'f2py_rout_testmod_testsub':
testmodmodule.c:180: error: 'dimsize' undeclared (first use in this function)
Ich habe versucht, testsub.g90 enthalten die folgende Anweisung, wie vorgeschlagen ni andere Beiträge ändern:
SUBROUTINE testsub(arg)
USE testmod
!f2py integer, parameter :: dimsize
REAL, INTENT(IN) :: arg(dimsize)
END SUBROUTINE testsub
, aber ohne Erfolg. Ich muss das Unterprogramm vom Modul getrennt halten.
Wie bekomme ich f2py, um die Variable dimsize
korrekt aufzulösen?
TIA
Ich habe das gleiche Problem mit 'ifort' auf Windows 7, mit f2py Version 2. Das Problem scheint bei der _first_f2py Aufruf auftreten, wo ich den Fehler: ' In:: testmoddd: testsub.f90: testsub get_useparameters: kein modul testmod info verwendet von testub In:: testmoddd: testub.f90: testub getarrlen: Variable "Dimsize" undefined' – bdforbes
@bdforbes: hmmm .... Ich fange an zu denken, dass dies nur ein ernstes ist Nachteil von f2py bei der Verwendung von Fortran90. Ich hätte bei F77 bleiben sollen! – ccbunney