Я не могу заставить f2py ссылаться на параметр из модуля в отдельной подпрограмме, где он используется для определения размера входного массива. То есть параметра Я это defeind в модуле:F2PY - параметр модуля доступа из подпрограммы
! File: testmod.f90
MODULE testmod
INTEGER, PARAMETER :: dimsize = 20
END MODULE testmod
и параметр dimsize должен ссылаться в подпрограмме (не содержится в модуле) в другом файле, который будет точкой входа для моего питона модуля:
! File testsub.f90
SUBROUTINE testsub(arg)
USE testmod
REAL, INTENT(IN) :: arg(dimsize)
END SUBROUTINE testsub
компилировать так:
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
но получаю эту ошибку:
testmodmodule.c: In function 'f2py_rout_testmod_testsub':
testmodmodule.c:180: error: 'dimsize' undeclared (first use in this function)
Я попытался модифицировать testsub.g90 включить следующую директиву, как предложено Ní другие должности:
SUBROUTINE testsub(arg)
USE testmod
!f2py integer, parameter :: dimsize
REAL, INTENT(IN) :: arg(dimsize)
END SUBROUTINE testsub
, но безрезультатно. Мне нужно оставить подпрограмму отдельно от модуля.
Как я могу получить f2py, чтобы правильно разрешить переменную dimsize
?
ТИА
У меня такая же проблема с 'ifort' в Windows 7 с использованием f2py версии 2. Проблема возникает в вызове _first_ f2py, где я вижу ошибку: ' In:: testmoddd: testsub.f90: testub get_useparameters: нет информации о модуле testmod, используемой testub В:: testmoddd: testsub.f90: testsub getarrlen: переменная «dimsize» undefined' – bdforbes
@bdforbes: hmmm .... Я начинаю думать, что это просто серьезный недостаток f2py при использовании Fortran90. Я должен был придерживаться F77! – ccbunney