【发布时间】:2017-04-05 21:52:57
【问题描述】:
我无法理解 gfortran 中的数组和标量。所以当试图运行这三个方程时
REAL(8), DIMENSION(1:NI, 1:NJ) :: Slope_rad, Aspect_rad
REAL(8) :: clearsky,theta,theta_PyrStat, &
Transmissivity,I0,Pressure
REAL(8), DIMENSION(runl) :: SolarZenithAngleCorr_rad, &
SolarAzimuthAngle_rad, rm_r2, PRESS_in, Hillshade, P
theta = acos(cos(Slope_rad)) *cos(SolarZenithAngleCorr_rad(T)) &
+sin(Slope_rad)*sin(SolarZenithAngleCorr_rad(T)) &
*cos(SolarAzimuthAngle_rad(T)-Aspect_rad)
clearsky = I0*rm_r2(T)*Transmissivity**(P/(Press_IN(T)*cos(SolarZenithAngleCorr_rad(T))))*cos(theta);
Hillshade(T) = 255*((cos(SolarZenithAngleCorr_rad(T))*cos(Slope_rad)) &
+(sin(SolarZenithAngleCorr_rad(T)) * sin(Slope_rad)) &
*cos(SolarAzimuthAngle_rad(T) - Aspect_rad))
我收到以下错误
main.f90:406:3:
theta = acos(cos(Slope_rad)) *cos(SolarZenithAngleCorr_rad(T)) &
1 错误:在 (1) 的分配中不相容的等级 0 和 2 main.f90:411:3:
clearsky = I0*rm_r2(T)*Transmissivity**(P/(Press_IN(T)*cos(SolarZenithAngleCorr_rad(T))))*cos(theta);
1 错误:在 (1) 的分配中不相容的等级 0 和 1 main.f90:417:3:
Hillshade(T) = 255*((cos(SolarZenithAngleCorr_rad(T))*cos(Slope_rad)) &
1 错误:在 (1) 处的分配中不兼容的等级 0 和 2
【问题讨论】:
-
你应该显示你的数组和变量的定义(见minimal reproducible example)。请使用标签 fortran 解决 Fortran 问题。当问题特定于版本时添加版本标签(这个不是)。
-
右侧的变量之一是一个数组,可能是
Slope_rad,但没有声明很难说是哪一个。我确定这是其他问题的重复,但我无法关闭它,因为我自己把 fortran 标签放在那里。 -
cos(Slope_rad)-Slope_rad是一个二维(2 级)数组,cos函数需要一个标量(0 级)参数。您需要指定使用Slope_rad的哪个索引。例如。cos(Slope_rad(1,1)) -
同理
P是rank 1数组,这里需要指定...Transmissivity**(P/...使用哪个索引。 -
@SteveES 这并不完全正确。
cos()接受数组没有任何问题,它是一个基本函数。该错误稍后发生。