Module 在同一个Fortran程序中使用具有相同声明变量的两个模块
我正在制作两个模块,在主程序中使用它们,而不是一个公共块。 现在我有两个模块,它们都依赖于相同的变量,如:Module 在同一个Fortran程序中使用具有相同声明变量的两个模块,module,fortran,Module,Fortran,我正在制作两个模块,在主程序中使用它们,而不是一个公共块。 现在我有两个模块,它们都依赖于相同的变量,如: module A implicit none Save INTEGER z,x PARAMETER (z= 433, x= 400) Real :: RM(z) Real :: RP02(x) . . . . end module A 及 当我在主程序中使用它们时,程序会因为相同的变量而出错 知道我该怎么做吗?使用第三个模块: ian@e
module A
implicit none
Save
INTEGER z,x
PARAMETER (z= 433, x= 400)
Real :: RM(z)
Real :: RP02(x)
.
.
.
.
end module A
及
当我在主程序中使用它们时,程序会因为相同的变量而出错
知道我该怎么做吗?使用第三个模块:
ian@eris:~/work/stack$ cat 3_modules.f90
Module array_sizes
Implicit None
Integer, Parameter, Public :: x = 400
Integer, Parameter, Public :: z = 433
Private
End Module array_sizes
Module a
Use array_sizes, Only : x, z
Implicit None
Real, Dimension( 1:z ), Public :: rm
Real, Dimension( 1:x ), Public :: rp02
Private
End Module a
Module b
Use array_sizes, Only : x, z
Implicit None
Real, Dimension( 1:z ), Public :: rps02
Real, Dimension( 1:x ), Public :: rdps02
Private
End Module b
Program testit
Use a, Only : rm , rp02
Use b, Only : rps02, rdps02
Implicit None
Call Random_number( rm )
Call Random_number( rp02 )
Call Random_number( rps02 )
Call Random_number( rdps02 )
Write( *, * ) 'Size rm ', size( rm )
Write( *, * ) 'Size rp02 ', size( rp02 )
Write( *, * ) 'Size rps02 ', size( rps02 )
Write( *, * ) 'Size rdps02', size( rdps02 )
Write( *, * ) rm( 1:4 ) * rps02( 1:4 )
End Program testit
ian@eris:~/work/stack$ gfortran -std=f2008 -Wall -Wextra -fcheck=all 3_modules.f90
ian@eris:~/work/stack$ ./a.out
Size rm 433
Size rp02 400
Size rps02 433
Size rdps02 400
4.44743484E-02 0.322003543 3.06500960E-02 0.369239926
ian@eris:~/work/stack$
首先谢谢你,我现在正在尝试,但是如果我有:real::QSIH(2,x,z)我如何使它成为现实,Dimension(1:x),Public::?real,Dimension(1:2,1:x,1:z),Public::QSIH-如果你对此有问题,我建议你在深入研究之前先读一本关于Fortran的书,Metcalf,里德和科恩是我的首选。
ian@eris:~/work/stack$ cat 3_modules.f90
Module array_sizes
Implicit None
Integer, Parameter, Public :: x = 400
Integer, Parameter, Public :: z = 433
Private
End Module array_sizes
Module a
Use array_sizes, Only : x, z
Implicit None
Real, Dimension( 1:z ), Public :: rm
Real, Dimension( 1:x ), Public :: rp02
Private
End Module a
Module b
Use array_sizes, Only : x, z
Implicit None
Real, Dimension( 1:z ), Public :: rps02
Real, Dimension( 1:x ), Public :: rdps02
Private
End Module b
Program testit
Use a, Only : rm , rp02
Use b, Only : rps02, rdps02
Implicit None
Call Random_number( rm )
Call Random_number( rp02 )
Call Random_number( rps02 )
Call Random_number( rdps02 )
Write( *, * ) 'Size rm ', size( rm )
Write( *, * ) 'Size rp02 ', size( rp02 )
Write( *, * ) 'Size rps02 ', size( rps02 )
Write( *, * ) 'Size rdps02', size( rdps02 )
Write( *, * ) rm( 1:4 ) * rps02( 1:4 )
End Program testit
ian@eris:~/work/stack$ gfortran -std=f2008 -Wall -Wextra -fcheck=all 3_modules.f90
ian@eris:~/work/stack$ ./a.out
Size rm 433
Size rp02 400
Size rps02 433
Size rdps02 400
4.44743484E-02 0.322003543 3.06500960E-02 0.369239926
ian@eris:~/work/stack$