将真正的阵列从fortran 90传递到fortran 77

时间:2016-08-09 11:43:51

标签: fortran double fortran90 fortran77

我在fortran 77中有第三部分代码,并且我在fortran 90中编写了一个子程序,我想与此代码进行交互。我发现变量没有从一个子程序正确传递到另一个子程序。我认为原因是两个程序中双精度的定义不兼容。

我希望返回到f77的变量是double precision。我应该在f90中使用哪个真正的定义?我正在使用selected_real_kind(p=15,r=307)

编辑: 我已在f90中将声明更改为double precision,并且我已验证double precision变量已正确传递。当我将可分配数组从f90传递到f77

时出现问题

最初在代码f77中分配数组。然后我在f90中分配一些可分配的数组,然后将它们传递给f77,但这不起作用

f77代码:

    program oldprog
    double precision da(100)

    call sub(da)
    end

    subroutine sub(da)
    double precision da(*)
    call mynewsub(da)
    end

f90代码:

subroutine mynewsub(da)
  implicit none
  double precision, allocatable:: da(:)
  allocate(da(100))
  da = 1.0
end subroutine mynewsub

我想跳过mynewsub中的分配,但后来我得到了SIGSEGV

1 个答案:

答案 0 :(得分:1)

您的mynewsub接受数组为可分配参数。

这需要Fortran 95中的显式接口,并且在Fortran 90中是不可能的,甚至没有谈到根本没有allocatable的FORTRAN 77。

你不能这样做。

在您的主程序中

program oldprog
    double precision da(100)

数组是静态的。它不能以任何方式在任何版本的Fortran中重新分配,它永远是固定的。

你应该考虑让它可以在任何地方分配代码更新到Fortran 95的相关部分。