используя фортран в питоне - PullRequest
0 голосов
/ 07 июня 2019

как я могу написать этот код Fortran на Python?Мне нужно использовать эту подпрограмму в домашней работе, но я пишу свой код на python. Есть способ использовать или изменить его?

# This subroutine calculates Energy and forces for Lennard-Jones clusters
#  input:   nat = no. of atoms, xyz = atomic Cartesian coordinates
#  output:  epot = energy, fxyz = forces on each atom  
#======================================================================== 

subroutine LJ EandF(nat,xyz,epot,fxyz)
implicit none
integer nat
real*8 xyz(3,nat),epot,fxyz(3,nat)
real*8 dx,dy,dz,r2
real*8 t2,t6,ff
real*8, parameter :: eps=1.d0
real*8, parameter :: sigma=1.d0 
real*8, parameter :: sigma2=sigma**2
integer iat, jat
do iat=1,nat-1
do jat=iat+1,nat
    dx=xyz(1,iat)-xyz(1,jat)
    dy=xyz(2,iat)-xyz(2,jat)
    dz=xyz(3,iat)-xyz(3,jat)
    r2=dx*dx+dy*dy+dz*dz
    t2=sigma2/r2
    t6=t2*t2*t2
    epot =epot + 4.d0*eps*(t6-1.d0)*t6
    ff= 48.d0*eps*(t6-0.5d0)*t6/r2
    fxyz(1,iat)=fxyz(1,iat) +ff*dx
    fxyz(1,jat)=fxyz(1,jat) -ff*dx
    fxyz(2,iat)=fxyz(2,iat) +ff*dy
    fxyz(2,jat)=fxyz(2,jat) -ff*dy
    fxyz(3,iat)=fxyz(3,iat) +ff*dz
    fxyz(3,jat)=fxyz(3,jat) -ff*dz
enddo
enddo
endsubroutine    

1 Ответ

0 голосов
/ 07 июня 2019

Вы можете использовать фортрановые подпрограммы и функции в python. Я рекомендую вам использовать f2py от numpy. В следующей ссылке вы найдете документацию: https://docs.scipy.org/doc/numpy/f2py/

Если вы хотите использовать подпрограмму fortran в python, вы должны быть осторожны, потому что подпрограмма будет преобразована в функцию python. Вы должны написать назначение переменных в вашей программе. Например, у вас есть модуль test в файле file.f90:

module test
  implicit none
  contains
  subroutine sub(a,b)
    real, intent(in):: a
    real, intent(out):: b
    b=2.0*a
  end subroutine sub
end module test

Теперь вы можете создать модуль python, используя f2py (командная строка):

f2py -c -m python_mod file.f90

f2py создаст файл с именем python_mod.so в рабочей папке. Теперь вы можете использовать его в программе на Python как функцию:

from python_mod import test

c = test.sub(3.0)
print(c)

Выход будет 6.0.

Надеюсь, вы найдете это полезным. Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...