在Fortran模块中重塑变量:将变量作为子例程的参数和“use”语句都可以安全吗?

时间:2015-04-29 22:57:00

标签: fortran

我有一个模块,我将2D数组(因为我的计算域是2D网格)存储为一维向量,因为我的代码中99%的其他子程序使用1D向量。但是,我有一个子程序MYsubr可以处理二维数组,因为我不知道有一种方法将矢量重新整形成直接在“使用模块”中的矩阵,我只是将它作为子程序的参数传递,然后重新整形在子程序中。有一个更好的方法吗? 我的模块是:

module myMODULE
   integer,allocatable :: var(:)
   .....
   ..... (thousands of other variables needed in mysubr)
end

并且主程序调用带有“var”作为参数的子程序,但是模块myMODULE也会调用var:

program main
   implicit none
   integer :: Nmax
   integer :: Mmax
   Nmax = 100
   Mmax = 200
    .....
   allocate(var(Nmax*Mmax))
    .....
    .....
   call MYsub(var,Nmax,Mmax)
end
subroutine MYsub(var,Nmax,Mmax)
   use myMODULE
   integer :: var(Nmax,Mmax)
    .....
    ....,
end 

通过这种方式,我可以重塑var。这有什么风险?它完美地编译。只要我不改变MYsub中var的值,它显然很好,如果我改变它怎么办?我应该在MYsub中使用这个配方更安全:

use myMODULE, unused => var

所以这样我就避免了变量的别名。

0 个答案:

没有答案