爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 5852|回复: 0

[其他] NCL调用FORTRAN字符串传递问题

[复制链接]

新浪微博达人勋

发表于 2017-5-30 20:37:28 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

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


密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表