Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Module 在同一个Fortran程序中使用具有相同声明变量的两个模块_Module_Fortran - Fatal编程技术网

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$