写的Fortran程序,发现里面出现匪夷所思的问题
(本人初上手Fortran还不太熟练)
program density
implicit none
open(unit=20,file="density.txt")
real(kind=8) :: step
!步长
real(kind=8) :: rho0_o, rho0_ca, rho0_ni, rho0_sn
!归一化常数
real(kind=8) :: c_o, z_o, c_ca, z_ca, c_ni, z_ni, c_sn, z_sn
!二参数
real(kind=8) :: r
real(kind=8) :: rho_o, rho_ca, rho_ni, rho_sn
!核子半径以及相应的密度
real(kind=8) :: range_o, range_ca, range_ni, range_sn
!核子半径的积分范围
rho0_o=0.090592
rho0_ca=0.086452
rho0_ni=0.081731
rho0_sn=0.070291
!上一个程序得到的归一化常数填入
range_o=4.0
range_ca=6.0
range_ni=8.0
range_sn=12.0
!核半径范围
c_o=2.608
z_o=0.513
c_ca=3.766
z_ca=0.586
c_ni=4.3092
z_ni=0.5169
c_sn=5.358
z_sn=0.550
!二参数
step=0.001
!步长
write(20,*)"density of O"
do r=0,range_o,step
rho_o=rho0_o/(1+exp((r-c_o)/z_o))
write(20,*)r,rho_o
end do
!O的核子密度
write(20,*)"density of Ca"
do r=0,range_ca,step
rho_ca=rho0_ca/(1+exp((r-c_ca)/z_ca))
write(20,*)r,rho_ca
end do
!Ca的核子密度
write(20,*)"density of Ni"
do r=0,range_ni,step
rho_ni=rho0_ni/(1+exp((r-c_ni)/z_ni))
write(20,*)r,rho_ni
end do
!Ni的核子密度
write(20,*)"density of Sn"
do r=0,range_sn,step
rho_sn=rho0_sn/(1+exp((r-c_sn)/z_sn))
write(20,*)r,rho_sn
end do
!Sn的核子密度
stop
end program
报错是这样的:
这个错误通常出现在使用了未定义类型的变量或未正确声明变量类型的情况下。
可能的原因是:
变量名拼写错误。
变量没有声明。
在使用变量之前未定义变量的类型。
在使用变量之前,没有正确包含需要的头文件或模块。
您可以尝试检查您的代码中是否存在这些问题,并进行修复。
fortran代码要求,在每个单元(函数)里,所有申明代码必须在执行代码之前。你需把第三行open放在14行以后。