先谢谢你的帮助.. 我想在主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
当我将write语句放在模块或主子程序中时,我无法在输出中看到它们。
非常感谢你的帮助 Msekh
答案 0 :(得分: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
这会将stress的值写入与单元6连接的类文件对象(通常这是stdout,但它可能会创建一个名为fort.6
的新文件,具体取决于编译器和环境设置。)
答案 1 :(得分: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