- 积分
- 5732
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2015-1-6
- 最后登录
- 1970-1-1
|
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
ncl调用fortran时,var变量定义为“rainc”时,fortran程序中WRITE(*,*)TRIM(var),l输出结果为rainc 10,但在fortran程序的 if 中却无法识别if(TRIM(var).eq. "rainc" ),只会输出else里的"var err",请问有人了解这个问题吗?
ncl脚本ceshi_for.ncl
external readpostvar "./readpostvar.so"
begin
;--------------read the data-------------------
path = "./DATABAK/FCST_results/sound/"
postvarpath = path + "postvar2016070500_012"
filename=new((/200/),"character")
ctmp=stringtochar(postvarpath)
filename(0:dimsizes(ctmp)-1)=ctmp
var=new((/10/),"character")
c1tmp=stringtochar("rainc")
var(0:dimsizes(c1tmp)-1)=c1tmp
nx = 720
ny = 360
nz = 29
rainc = new((/ny,nx/),"float")
readpostvar::readpostvar(filename,nz,ny,nx,var,rainc)
print(rainc(148,120))
end
对应的FORTRAN程序:
SUBROUTINE readpostvar(filename,nz,ny,nx,var,rainc)
IMPLICIT NONE
CHARACTER(LEN=200),INTENT(IN) :: filename
INTEGER,INTENT(IN) :: nx,ny,nz
CHARACTER(LEN=10),INTENT(IN) :: var
REAL,INTENT(OUT) :: rainc(nx,ny)
INTEGER :: iz,i,j,l
REAL :: temp(nx,ny)
OPEN(98,FILE=TRIM(filename),FORM="unformatted",ACCESS="direct",RECL=nx*ny*4)
l = LEN(var)
WRITE(*,*)TRIM(var),l
IF(TRIM(var) .eq. "rainc")THEN
WRITE(*,*)var
l = 1
DO iz = 1,nz*12 + 2
READ(98,rec=l)((temp(i,j),i=1,nx),j=1,ny)
l = l + 1
END DO
READ(98,rec=l)((rainc(i,j),i=1,nx),j=1,ny)
ELSE
WRITE(*,*)"var err"
STOP 666
END IF
END
对应的.stub文件:
C NCLFORTSTART
SUBROUTINE readpostvar(filename,nz,ny,nx,var,rainc)
CHARACTER*200 filename
INTEGER nx,ny,nz
CHARACTER*10 var
DIMENSION rainc(nx,ny)
C NCLEND
|
|