微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用新变量不同维度创建 NetCDF 文件

如何解决使用新变量不同维度创建 NetCDF 文件

我有一个分辨率为 9 公里(1/12°)的 NetCDF 文件

(尺寸 = 489 x 376 x 20)

变量:“经度”、“纬度”、“深度”、“时间”、“zu”、“zv”和“zw”

现在我新建了一个 2 公里的新网格。

(尺寸 = 1501 x 1953 x 20)

变量:'lon'、'lat'、'Depth'、'zuc'、'zvc' 和 'zwc'

问题

如何创建带有“lon”、“lat”、“Depth”、“zuc”、“zvc”和“zwc”的 NEW.nc?

脚本

filename='mydata.nc';

ncdisp(filename);


% Load in variables

Time = ncread(filename,'Time');

Longitude=ncread(filename,'Longitude');

Latitude=ncread(filename,'Latitude');

Depth=ncread(filename,'Depth');

zu=ncread(filename,'zu');

zv=ncread(filename,'zv');

zw=ncread(filename,'zw');


% Permute matrices to be interpolated and create a mesh

[lo,la,dep]=meshgrid(Longitude,Latitude,Depth);

Au=permute(zu,[2 1 3]); 

Av=permute(zv,[2 1 3]); 

Aw=permute(zw,[2 1 3]); 


% Define new resolution @ 0.02

lon=Longitude(1):.02:Longitude(end); lon=lon';

lat=Latitude(1):.02:Latitude(end); lat=lat';

[X,Y,Z]=meshgrid(lon,lat,Depth); % New mesh 

zuc = interp3(lo,dep,Au,X,Z); zuc=permute(zuc,[2 1 3]);

zvc = interp3(lo,Av,Z); zvc=permute(zvc,[2 1 3]);

zwc = interp3(lo,Aw,Z); zwc=permute(zwc,[2 1 3]);

解决方法

您只需要知道两个将数据写入 netcdf 的函数即可。我在下面给出了一个演示示例,您可以通过更改变量名称和维度将其扩展到您的情况。

 % nc filename to be written
file = 'myfile.nc' ;
%% Write lon and lat variables
% Get data
lon = 1:10 ;
lat = 1:10 ;
nx = length(lon) ;
nccreate(file,'lon','Dimensions',{'lon',1,nx},'DeflateLevel',7) ;
ny = length(lat) ;
nccreate(file,'lat',{'lat',ny},7) ;
nccreate(file,'time',{'time',Inf},'z','time'},7) ;
for i = 1:10
    ncwrite(file,i,i)   % write time 
    data = rand(10) ; 
    ncwrite(file,data,[1,i]) ;   % write 3D data 
end

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。