Этого треда уже нет.
Это копия, сохраненная 17 февраля в 01:38.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
python-tail-recursion.jpg22 Кб, 420x340
F2PY и Fortran: аргумент процедуры - массив, зависящий от глобальной переменной Windows 7: New Opera 3566938 В конец треда | Веб
Пишу расширение для Питона. На Фортране с помощью F2PY, да. Пишу функцию, которая должна принимать кучу аргументов, в т.ч. массив. Как написано в руководстве, и как я всегда делал:


module yoba
contains
subroutine ff(N,AR)
!f2py depend(N) AR
integer,intent(in) :: N
real(4),dimension(0:N-1),intent(in) :: AR
! Какой-то код
end subroutine
end module


Но аргументов у функции при таком подходе будет штук 10, неудобно. Плюс функция будет вызываться тысячи раз за время исполнения основной программы, а часть аргументов меняться не будет. Поэтому хочется их инициализировать один раз, сохранив данные в пространстве памяти модуля на Фортране в переменных модуля, а потом постоянно дергать из моей функции. Например, хочется так:


module yoba
integer,public :: N
contains
subroutine init(x)
integer :: x
N=x
end subroutine
subroutine ff(AR)
!f2py depend(N) AR
real(4),dimension(0:N-1),intent(in) :: AR
! Какой-то код
end subroutine
end module


GNU Fortran съедает этот код легко и непринуждённо, и позволяет использовать в тестовой программе на Фортране же. А вот F2PY - нет, он орёт, что переменная N не объявлена.

Можно ли заставить F2PY использовать переменные модуля таким образом, или надо обязательно таскать в каждой функции стопяцот аргументов?
Linux: Firefox based 2 3567013
>>3566938 (OP)
Тебе не то чтобы в /pr/. Тебе даже на двач теперь ходить не надо ради такой ерунды.
Windows 7: New Opera 3 3567066
>>013
За руководство спасибо. Нюанс в том, что массив AR в функции

subroutine ff(AR)
!f2py depend(N) AR
real(4),dimension(0:N-1),intent(in) :: AR
! Какой-то код
end subroutine

создаётся в питонокоде и приезжает из него в фортранокод. AR большой и в каждом вызове ff новый, так что тратить на его копирование процессорное время жалко. AR приходится использовать как аргумент ff, а вот N и другие подобные переменные, описывающие размер передаваемых и отдаваемых массивов хочется вынести в COMMON BLOCK

А можно ли в питонокоде присваивать ссылку на массив указателю в COMMON BLOCK, а потом в фортранокоде использовать массив по ссылке?
Windows 7: New Opera 4 3567068
>>013

>Тебе не то чтобы в /pr/. Тебе даже на двач теперь ходить не надо ради такой ерунды.



Что поделать, мне не дают зарегистрироваться на StackOverflow, чтобы там вопрошать
Тред утонул или удален.
Это копия, сохраненная 17 февраля в 01:38.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /s/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски