爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 6932|回复: 7

[其他] NCL center_finite_diff_n 出错:Assignment type mismatch 跪求问大佬!!

[复制链接]

新浪微博达人勋

发表于 2022-7-4 23:10:04 | 显示全部楼层 |阅读模式
40金钱
本帖最后由 猪猪2020 于 2022-7-5 00:18 编辑

a = addfile("/home/yangyun/data_sets/pi/ne30/ocn/VVEL_regrid_.00101-50201.nc","r")
b = addfile("/home/yangyun/data_sets/pi/ne30/ocn/TEMP_regrid_.00101-50201.nc","r")
;47°-63°N 20°-45°W
VVEL0 = a->VVEL(75*12:375*12-1,0:19,46:64,314:341)
TEMP0 = b->TEMP(75*12:375*12-1,0:19,46:64,314:341)
lon = VVEL0&lon ; VVEL0和TEMP0两个nc文件dimsizes是相同的
lat = VVEL0&lat

;DJF
T=month_to_season (TEMP0, "DJF")
V=month_to_season (VVEL0, "DJF")

;dTdX
nlat=19
dlon = (lon(2)-lon(1))*0.0174533 ; convert to radians
                                    ; pre-allocate space
dTdX = new ( dimsizes(T), typeof(T), T@_FillValue)

do nl=0,nlat-1                    ; loop over each latitude
      dX = 6378388.*cos(0.0174533*lat(nl))*dlon  ; constant at this latitude
      dTdX(:,:,nl:nl,:) = center_finite_diff_n (T(:,:,nl:nl,:), dX , True,0,3)
end do

出错说:数据类型不匹配(T V 是海洋的栅格数据包含缺测值,即陆地上的值是缺测值)






出错代码

出错代码

检查变量

检查变量
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2022-7-5 08:27:02 | 显示全部楼层
把出错地方作用两边的变量用printVarSummary()函数输出,看看数据类型是否一致,若不一致可用数据类型转换的函数,转换一下就可以了!
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-7-5 10:47:22 | 显示全部楼层
流浪的心 发表于 2022-7-5 08:27
把出错地方作用两边的变量用printVarSummary()函数输出,看看数据类型是否一致,若不一致可用数据类型转换 ...

大佬,我查看了一下数据类型,都是float

数据类型显示的是一样的

数据类型显示的是一样的
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2022-7-5 10:57:57 | 显示全部楼层
dX也是float吗
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2022-7-5 14:22:55 | 显示全部楼层
主要是检查center_finite_diff_n()生产的是什么类型,你可以测试一下,即aaa = center_finite_diff_n (T(:,:,nl:nl,:), dX , True,0,3),然后看一下aaa的类型是否是float!
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2022-7-6 09:21:02 | 显示全部楼层
数据类型一样的话可能你左右两边数据的维数不一样,输出dTdX(:,:,nl:nl,:)看看这个是不是3维的数据,你写了循环但是脚本没看到你的nlat用在哪里,最后你的dim又选择的是第四维,所以报错
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2022-7-6 10:20:05 | 显示全部楼层
好多数据的坐标变量会用double,你应该查看一下lon lat的类型
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-7-6 16:11:39 | 显示全部楼层
具体原因不太知道,但是我写了下面的代码程序就不报错了dTdx(:,nl:nl,:) = tofloat(center_finite_diff_n (T(:,nl:nl,:), dx , True,0,2))
将输出的结果强制转换成float。目前没有发现结果有什么问题
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

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

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

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