После некоторого копания в Интернете и пробной ошибки, мне все еще интересно, как передавать массивы строк из Python в Fortran с помощью f2py.Как передать массив строк в подпрограмму Fortran с помощью f2py
У меня есть Fortran подпрограмму в string.f90
как:
SUBROUTINE FOO(A)
CHARACTER*5,dimension(10),intent(inout):: A
PRINT*, "A=",A
END
Тогда я бегу f2py -m mystring -c string.f90
. Компиляция прошла успешно.
Питон сессия в test.py
:
import mystring
import numpy as np
nobstot=10
xstring=np.empty(nobstot,dtype='S5')
xstring[0]="ABCDE"
mystring.foo(xstring)
Run python test.py
, у меня есть сообщение об ошибке:
1-th dimension must be 5 but got 0 (not defined).
Traceback (most recent call last) :
File "test.py", line 6, in <module>
mystring.foo(xstring)
mystring.error: failed in converting 1st argument `a' of mystring.foo to C/Fortran array
В f2py компиляции этапе были вынесено gfortran и GCC компилятор.
После >>> print mystring.foo.__doc__
, был:
foo(a)
Wrapper for ``foo``.
Parameters
---------
a : in/output rank-2 array('S') with bounds (10,5)
Итак, я попытался test.py
как:
import mystring
import numpy as np
nobstot=10
xstring=np.empty((nobstot,5),dtype='S1')
print xstring.shape
xstring[0]="ABCDE"
mystring.foo(xstring)
Затем запустите python test.py
, сообщение об ошибке было:
Traceback (most recent call last):
File "test.py", line 7, in <module>
mystring.foo(xstring)
ValueError: failed to initialize intent(inout) array -- input 'S' not compatible to 'c'
Не добавлять приветствия к вашему после. Ваше имя уже помещено под ваш вопрос рядом с вашим значком автоматически. –
@ Vladimire F. Got it. Большое спасибо за вашу помощь. –