0

提前感谢您的帮助.. 我想在 FORTRAN 主程序的输出文件中打印数据,这些数据在模块中定义,我已经在主程序中声明使用该模块。但是我在主程序和模块中都无法获得写语句。

MODULE model 
IMPLICIT NONE
 SUBROUTINE model_initialize 
 IMPLICIT NONE
 INTEGER a,dim REAL(float) :: E,nu 
 REAL(float) :: lambda,mu 
 E=5000 lambda = E*nu/(1.d0+nu)/(1.d0-2.d0*nu) 
 mu = E/2.d0/(1.d0+nu) 
 RETURN 
 END SUBROUTINE model_initialize 
 Write (6,)'Lambda',lambda 
 Write (6,)'mu',mu 
 END MODULE model 
 SUBROUTINE XXXX 
 USE model 
 IMPLICIT NONE 
 CALL model_initialize 
 Write (6,)'Lambda',lambda 
 Write (6,)'mu',mu 
 END SUBROUTINE XXX

当我将写语句放在模块或主子程序中时,我无法在输出中看到它们。

非常感谢Msekh的帮助

4

2 回答 2

1

Mgilson 已经为您提供了一个应该可以工作的示例,但是您发布的代码将无法编译。这就是为什么:

  • 您的子程序model_initialize位于模块的“规范部分”中。它应该是外部的(如xxxx)或模块内部的(在这种情况下,您必须提供contains声明)。
  • 中的变量model_initialize是子程序的本地变量,在子程序之外无法访问。
  • 您不能write在模块的规范部分中有可执行代码(如 ),只能在内部过程中。
  • float不是原生的 Fortran 类型,您必须使用数字参数(通常为 4、8、16),定义您自己的,或使用iso_fortran_env模块中的定义。

也就是说,如果您只需要定义一些要使其可访问的数据,您可以简单地将其直接放入模块中,如下所示:

module model
  use iso_fortran_env 
  implicit none

  integer :: A, dim 
  real(real32) :: E, nu, lambda, mu

  E = 5000
  lambda = E*nu/(1.d0+nu)/(1.d0-2.d0*nu)   ! <-- nu is undefined
  mu = E/2.d0/(1.d0+nu)

contains

  subroutine xxxx 
    write (6,*) 'lambda', lambda 
    write (6,*) 'mu', mu 
  end subroutine xxxx
end module model
于 2013-01-29T12:40:23.080 回答
1

你的意思是这样的:

module material
  real :: stress = 6.0
  save
end module material

subroutine xxx()
  use material, only: stress
  write(6,*) stress
end subroutine

program main
call xxx()
end program main

这会将压力值写入与单元 6 连接的类文件对象(通常这是标准输出,但它可能会fort.6根据编译器和环境设置创建一个名为的新文件)。

于 2013-01-17T02:30:54.100 回答