我想使用自动生成的外部函数来评估在 python (sympy) 中创建的数字符号矩阵。
我的目标是生成这样一个子程序
subroutine my_fun(y, x, z, m, C)
implicit none
REAL*8, intent(in) :: x
REAL*8, intent(in) :: y
REAL*8, intent(in) :: z
INTEGER*4, intent(in) :: m
REAL*8, intent(out), dimension(1:m) :: C
INTEGER*4 :: line
line=1
C(line) = x + y*z
line=line+1
C(line) = y*z-x
end subroutine
我尝试通过以下方式使用 codegen
C = symbols('C', cls=IndexedBase)
m= symbols('m', integer=True)
i = Idx('line', m)
[(c_name, c_code), (h_name, c_header)] = codegen(('my_fun', Eq(C[line],x+y*z)),\
'F95', 'test10', header=True, empty=True)
但结果还很远
subroutine my_fun(x, y, z, m, C)
implicit none
REAL*8, intent(in) :: x
REAL*8, intent(in) :: y
REAL*8, intent(in) :: z
INTEGER*4, intent(in) :: m
REAL*8, intent(out), dimension(1:m) :: C
INTEGER*4 :: line
do line = 1, m
C(line) = x + y*z
end do
end subroutine
简而言之,我无法输入多个表达式并自由生成数组。我从How to generate Fortran subroutine with SymPy codegen 中得到一些想法
最好的