Сгенерировать подпрограмму Fortran с помощью Sympy codegen для системы уравнений

Основываясь на предыдущем примере, который я нашел здесь , я пытаюсь выяснить, как сгенерировать код Fortran, соответствующий конкретной форме, к которой я должен придерживаться. Требуемый код FORTRAN будет выглядеть так ( он основан на модели FitzHugh-Nagumo ):

SUBROUTINE FF(NE,U,PAR,F) ! ---------- -- ! Define the nonlinear term IMPLICIT NONE INTEGER, INTENT(IN) :: NE DOUBLE PRECISION, INTENT(IN) :: U(NE),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NE) DOUBLE PRECISION u,v,e,a1,a0 u=U(1) v=U(2) e=PAR(1) a1=PAR(2) a0=PAR(3) F(1)= uu**3-v F(2)= e*(u-a1*v-a0) END SUBROUTINE FF 

Мне удается создать правильные выражения в SymPy, но я не понял, как сгенерировать требуемый код с помощью codegen . Вот моя попытка:

 from sympy import symbols,latex from sympy.utilities.codegen import codegen from sympy.tensor import IndexedBase, Idx from sympy import Matrix U, PAR = symbols('U PAR', cls=IndexedBase) u = U[1] v = U[2] e = PAR[1] a1 = PAR[2] a0 = PAR[3] dudt = uu**3-v dvdt = e*(u-a1*v-a0) print latex(dudt) print latex(dvdt) F = Matrix([dudt,dvdt]) print F result = codegen(('my_function', F), 'f95', 'my_project') print result[0][1] 

Но это дает мне:

 IndexException: Range is not defined for all indices in: PAR[3] 

Если вам просто нужно вызвать функцию FORTRAN в вашем коде на Python, я обнаружил, что использование оболочки FORTRAN было намного проще, чем пытаться воссоздать код FORTRAN в python, особенно если GOTO сильно используются.

Вы пробовали f2py? https://sysbio.ioc.ee/projects/f2py2e/