定义了一个方程,怎么ivf还说我没有初值呢
这是错误类型:这是错误的程序:
C **************************************************************************
SUBROUTINE CANOPY (DOY, MAXHT, RELHT, MAXLAI, MXMAI,RELLAI,RELMAI,
* SNOW,SNODEN, MXRTLN, MXKPL, CS, DENSEF, HEIGHT, LAI, SAI,
* MAI, RTLEN,RPLANT)
C canopy parameters
IMPLICIT NONE
C input
INTEGER DOY ! day of year (first day of DFILE and run)"
REAL MAXHT ! maximum height for the year, m, minimum of 0.01 m
REAL RELHT(*)! ten pairs of DOY and relative canopy height
REAL MAXLAI ! maximum projected leaf area index for the year,m2/m2
REAL MXMAI
REAL RELLAI(*) ! ten pairs of DOY and relative LAI
REAL RELMAI(*)
REAL SNOW ! water equivalent of snow on the ground, mm
REAL SNODEN ! snow density, mm/mm
REAL MXRTLN ! maximum root length per unit land area, m/m2
REAL MXKPL ! maximum plant conductivity, (mm/d)/MPa
REAL CS ! ratio of projected SAI to canopy height, m-1
REAL DENSEF ! density factor
C output
REAL HEIGHT ! canopy height above any snow, m, minimum of 0.01 m
REAL LAI ! leaf area index, m2/m2, minimum of 0.00001
REAL SAI ! stem area index, m2/m2
REAL MAI
REAL RTLEN ! root length per unit land area, m/m2
REAL RPLANT ! plant resistivity to water flow, MPa d/mm
C local
REAL SNODEP ! snow depth
REAL HNOSNO ! height of canopy without snow
REAL HSNO ! height of canopy above snow
REAL RATIO ! fraction of canopy above snow
REAL RELHIT ! RELHT for DOY
REAL KPL ! plant conductivity, mm d-1 MPa-1
C intrinsic
C REAL, MAX
C external functions needed
REAL INTERP
C
RELHIT = INTERP(10, RELHT, REAL(DOY))
SNODEP = .001 * SNOW / SNODEN
HNOSNO = MAX(.01, RELHIT * MAXHT)
HSNO = MAX(0., HNOSNO - SNODEP)
RATIO = HSNO / HNOSNO
HEIGHT = MAX(.01, HSNO)
C
LAI = RATIO * DENSEF * INTERP(10, RELLAI, REAL(DOY)) * MAXLAI
SAI = DENSEF * CS * HEIGHT
MAI = INTERP(10, RELMAI, REAL(DOY)) * MXMAI
IF (LAI .LT. .00001) LAI = .00001
C
RTLEN = DENSEF * RELHIT * MXRTLN
KPL = DENSEF * RELHIT * MXKPL
IF (KPL .LT. 1E-08) KPL = 1E-08
RPLANT = 1. / KPL
C
END
FUNCTION INTERP (NPAIRS, FUNCT, XVALUE)
C interpolates between points in data functions
IMPLICIT NONE
C input
INTEGER NPAIRS! number of pairs of values to be used
REAL FUNCT(*)! array of pairs of values: x1, y1, x2, y2, ...
REAL XVALUE! x value
C output
REAL INTERP! y value
C local
INTEGER I, J ! DO indexes
REAL XX(1:10) ! Cseries of x values of FUNCT
REAL YY(1:10) ! Cseries of y values of FUNCT
C
C put FUNCT into XX and YY
I = 0
DO 10 j = 1, 2 * NPAIRS - 1, 2
I = I + 1
XX(I) = FUNCT(j)
YY(I) = FUNCT(j + 1)
10 CONTINUE
C interpolate using XX and YY
DO 20 j = 1, NPAIRS
IF (XVALUE .EQ. XX(j)) THEN
INTERP = YY(j)
RETURN
ELSEIF (XVALUE .LT. XX(j)) THEN
INTERP = YY(j - 1) + (XVALUE - XX(j - 1)) *
* (YY(j) - YY(j - 1)) / (XX(j) - XX(j - 1))
RETURN
ELSE
END IF
20 CONTINUE
END
可能是 interp 函数里的循环(81-91行)始终没有满足条件。于是 interp 没有值就返回了。 这不是说你没定义哦,这是说这个变量没有值.
没有定义,一定是编译错误.
没有值,一定是运行时错误 楚香饭 发表于 2014-10-25 19:34
可能是 interp 函数里的循环(81-91行)始终没有满足条件。于是 interp 没有值就返回了。 ...
应该满足了,我在xp里的ivf跑就没有问题,移植到win7就不行了,说interp没定义 1.我和百事可乐都告诉你了,这不是没定义,而是没有初值。请不要只顾自己说,完全不管别人的回复。
2.再次强调,你的代码不足,无法调试。
3.请自行 debug,看是否满足了。如何 debug 请阅读 http://debug.w.fcode.cn 我看了看函数中的变量值已经读取了,另外我怎么把主程序发给你?行数比较多 楚香饭 发表于 2014-10-28 11:01
1.我和百事可乐都告诉你了,这不是没定义,而是没有初值。请不要只顾自己说,完全不管别人的回复。
2.再次 ...
哥们,您看这种情况下是不是RELMAI有初始值了? 我建议你学习一下 debug ,下个断点一跟踪 ,立即可以得出是否有值。
如要给长代码,可直接上传附件。 这是所有的源代码 楚香饭 发表于 2014-10-28 12:21
我建议你学习一下 debug ,下个断点一跟踪 ,立即可以得出是否有值。
如要给长代码,可直接上传附件。 ...
我传了程序的源代码,按照网页说的进行了逐句调试,可是输出值确实很大,而且每次我在运行之前都要加上/check:uninit.不知道是不是必须要这是调试出的断点数据:
页:
[1]
2