我有一个模块,我将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
所以这样我就避免了变量的别名。