Мой эндшпиль должен взять несколько разных скриптов Fortran, которые я написал и связал с ними через Python. Сами скрипты относительно просты: по существу, просто много математики без каких-либо программных структур, более сложных, чем массивы. Тем не менее, я довольно новичок в этом, поэтому у меня есть небольшой тестовый скрипт, который я пытаюсь выполнить.f2py восстановление переменных из модуля Fortran
Основной сценарий ниже (в сокращенном виде):
subroutine addwake
use geometry
implicit none
integer::i,j,k,m
real(kind=8),allocatable::xn2(:,:),yn2(:,:),zn2(:,:)
real(kind=8)::avg,m1,m2,m0
character(50)::namefile
!f2py intent(out) i,j,k,m
!f2py intent(out),allocatable xn2,yn2,zn2
!f2py intent(out) avg,m1,m2,m0
!f2py intout(out) namefile
! Check if surface node arrays are allocated
if(allocated(xn))then
deallocate(xn,yn,zn)
end if
! Read in sectional point distribution
...
end subroutine addwake
Это использует модуль (geometry.f95), который является источником моего горя.
module geometry
implicit none
! panel coordinates and connectivity
integer::jmax,kmax
integer::npts_wake
real(kind=8)::dspan
real(kind=8),allocatable::xn(:,:),yn(:,:),zn(:,:)
!f2py intent(out) jmax,kmax,npts_wake
!f2py intent(out) dspan
!f2py intent(out),allocatable xn,yn,zn
end module geometry
компилировать код непосредственно через f2py -c -m wake geometry.f95 addwake.f95
, а затем перейти в интерпретатор Python, чтобы запустить его. Он работает нормально, давая мне ожидаемый результат (текстовый файл с упорядоченными списками чисел), но затем я пытаюсь извлечь значения переменных, что мне нужно будет сделать в моей интеграции. Когда я пытаюсь это, я получаю следующие результаты:
>>> print wake.geometry.xn
[[ 2.01331785 2.01331785 2.01331785 2.01331785 2.01331785]
[ 2.00308232 2.00308232 2.00308232 2.00308232 2.00308232]
[ 1.99284679 1.99284679 1.99284679 1.99284679 1.99284679]
...,
[ 0.979798 0.979798 0.979798 0.979798 0.979798 ]
[ 0.989899 0.989899 0.989899 0.989899 0.989899 ]
[ 1. 1. 1. 1. 1. ]]
>>> print wake.geometry.yn
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: yn
>>> print wake.geometry.zn
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: zn
Если я изменяю заявление f2py в geometry.f95 таким образом, что каждый переменном определяются на отдельной строке, я получаю ошибку атрибута для всех трех переменных. Я здесь очень превзойден, поэтому любые идеи?