Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran 90-将值从主子程序传输到函数和其他子程序_Fortran_Fortran90 - Fatal编程技术网

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

Fortran 90-将值从主子程序传输到函数和其他子程序,fortran,fortran90,Fortran,Fortran90,我希望每个人都做得很好。我目前有一个项目在工作,我很难处理一些编程技术 为了总结我的项目,我必须修改Fortran上的一些代码,以便它能够适应用于名为PRO/II的模拟软件。所有的函数和子程序都已经编写好了 然而,为了使代码与PRO/II兼容,我必须改变在Fortran上分配一些输入数据(由用户自己输入)的方式。事实上,在此之前,用户在文本文件中输入数据,然后由fortran子程序读取 然而,现在,数据直接输入到仿真软件中。我设法写了一个代码来记录子程序中的所有输入数据。但是,在PRO/II上运

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

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

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

然而,现在,数据直接输入到仿真软件中。我设法写了一个代码来记录子程序中的所有输入数据。但是,在PRO/II上运行模拟时,它只将输入数据归因于“主子程序”。主子例程之外的任何函数或子例程都无法访问这些值。事实上,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个子例程,每次调用它们时,它们都会打开文本文件来读取值

有没有一种方法可以让所有函数和子例程读取值,而不必从文本文件中读取?换句话说,有没有一种方法可以将我在主子程序中计算的所有变量转换成程序中的每个函数和子程序

我真的很难弄明白

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


提前感谢您的帮助。

您可以将值放入
模块中的变量中,并且
可以在所有函数和子例程以及主程序中使用该模块

下面是一个小例子:

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