Fortran 90 - 将值从主子程序传输到函数和其他子程序

时间:2013-10-20 11:13:47

标签: fortran fortran90

我希望每个人都做得好。我目前有一个项目在工作,我很难处理一些编程技术。

总结一下我的项目,我必须修改Fortran上的一些代码,以便它可以适用于名为PRO / II的模拟软件。所有的功能和子程序都已经写好了。

但是,为了使代码与PRO / II兼容,我必须改变在Fortran上分配一些输入数据(由用户自己输入)的方式。实际上,之前,用户在文本文件中输入数据,然后由fortran子例程读取。

但是,现在,数据直接输入到模拟软件中。我设法写了一个代码来记录子程序中的所有输入数据。但是当在PRO / II上运行模拟时,它只将输入数据归属于“MAIN SUBROUTINE”。主子例程之外的任何函数或子例程都无法访问这些值。事实上,PRO / II只给我的主子程序的参数赋值。

从那里开始,当从主子程序调用一个函数时,没有问题。它是调用其他函数或子例程的函数。我会尽量让自己变得清晰。所以假设我有一个子程序X和许多函数和子程序如下:

Subroutine X


End Subroutine


Function A(variables)

Uses Functions B and C

End Function

Function B(variables)

Uses Function D and E

End Function

Function C(variables)

Uses functions D and E

End Function

Function D(variables)

End function

Function D(variables)

End Function

Function E(variables)

End Function

因此,问题在于我在主子程序中计算的值或我在PRO / II中输入的值传输到Fortran程序的值不能被函数D和E访问。所以,我尝试复制所有的值需要来自主子程序的文本文件,并且每次都通过不同的函数和子程序读取所有值。但PRO / II运行仿真需要永远。我有80个函数和20个子程序,每次调用它们时,都会打开文本文件来读取值。

我有没有办法让所有函数和子程序读取值而无需从文本文件中读取?换句话说,有没有办法将我在主子程序中计算的所有变量都放到程序中的每个函数和子程序中?

我真的很难搞清楚。

如果你们不明白这个问题或有任何疑问,请告诉我。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

您可以将值放入moduleuse所有函数和子程序中的模块以及主程序中的变量中!

这是一个小例子:

module globVar
  implicit none

  integer :: var1
end module

module calculus

contains
  function doStuff(input)
    use globVar, only: var1
    implicit none
    integer,intent(in)  :: input
    integer             :: doStuff

    doStuff = input*var1
  end function
end module calculus


program test
  use globVar
  use calculus

  implicit none

  write(*,*) 'Enter "var1"'
  read *,var1

  write(*,*) doStuff(2)
end program