2013-10-20 107 views
2

我希望大家都做得很好。我目前有一个项目在工作,我很难处理一些编程技术。Fortran 90 - 将主子程序的值传递给函数和其他子程序

总结我的项目,我必须在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 I输入被传输到Fortran程序不能被函数D和E访问。所以,我试着从主子程序中拷贝所有需要的值到文本文件中,并且每次都通过不同的函数和子程序读取所有的值。但是,PRO/II运行模拟需要花费很长时间。我有80个函数和20个子程序,每次调用它们时,都会打开文本文件以读取值。

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

我真的很难找出答案。

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

在此先感谢您的帮助球员。

回答

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 
相关问题