【问题标题】:Fortran 90 - to transmit values from main subroutine to the functions and other subroutinesFortran 90 - 将值从主子程序传输到函数和其他子程序
【发布时间】:2013-10-28 21:26:13
【问题描述】:

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

总结一下我的项目,我必须修改 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 个子例程,每次调用它们时,它们都会打开文本文件来读取值。

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

我真的很难弄清楚。

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

提前感谢你们的帮助。

【问题讨论】:

    标签: fortran fortran90


    【解决方案1】:

    您可以将您的值放入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
    

    【讨论】:

      猜你喜欢
      • 2018-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-11
      • 1970-01-01
      相关资源
      最近更新 更多