问题描述
我有一个分辨率为 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