Hello,
I am trying to build a netcdf file from an array but I have some problems in assigning the time scale.
This array (lon, lat, sea level pressure) was obtained by averaging monthly values from the original dataset, provided as a netcdf file.
Now, I need to create a new netcdf file with this annual values but I do not know how to assign the temporal information to my array.
Here there is the code I used:
clear all%Open the monthly values netcdf file
ncid = netcdf.open('slp20c.nc','NC_NOWRITE');[n0, x0, vD0, varAtt0] = netcdf.inqVar(ncid,0);[n1, x1, vD1, varAtt1] = netcdf.inqVar(ncid,1);[n2, x2, vD2, varAtt2] = netcdf.inqVar(ncid,2);[n3, x3, vD3, varAtt3] = netcdf.inqVar(ncid,3);varid0 = netcdf.inqVarID(ncid,'time');varid1 = netcdf.inqVarID(ncid,'lon');varid2 = netcdf.inqVarID(ncid,'lat');varid3 = netcdf.inqVarID(ncid,'prmsl');data0 = netcdf.getVar(ncid,0);data1 = netcdf.getVar(ncid,1);data2 = netcdf.getVar(ncid,2);data3 = netcdf.getVar(ncid,3);%Select data in the desired time range, Jan1871-Dec2007
data=data3(:,:,1:1644);data=permute(data,[3 1 2]);a=1:12:1644; b=12:12:1644;%Compute the annual average of the field values
for i=1:length(a) yearavg(i,:,:)=mean(data(a(i):b(i),:,:));endyearavg=permute(yearavg,[2 3 1]);%Create new netcdf file with the values obtained in yearavg
nt=137; %nr of years
nx=51; %nr of longitude points
ny=46; %nr of latitude points
lon=310:2:410; lon=lon.';lat=90:-2:0; lat=lat.';time=[1871 1 1 0 0 0];time=repmat(time,137,1);year=1871:2007; year=year.';time(:,1)=year;time=datenum(time);filenc='test.nc';ncid = netcdf.create(filenc,'CLASSIC_MODEL');dimid_lon = netcdf.defDim(ncid,'lon',nx);dimid_lat = netcdf.defDim(ncid,'lat',ny);dimid_time = netcdf.defDim(ncid,'time',nt);varid_lon = netcdf.defVar(ncid,'lon','double',dimid_lon);netcdf.putAtt(ncid,varid_lon,'long_name','Longitude')netcdf.putAtt(ncid,varid_lon,'units','degree_e')varid_lat = netcdf.defVar(ncid,'lat','double',dimid_lat);netcdf.putAtt(ncid,varid_lat,'long_name','Latitude')netcdf.putAtt(ncid,varid_lat,'units','degree_n')varid_time = netcdf.defVar(ncid,'time','double',dimid_time);netcdf.putAtt(ncid,varid_time,'long_name','Time')netcdf.putAtt(ncid,varid_time,'units','month')varid_slp = netcdf.defVar(ncid,'slp','double',[dimid_lon,dimid_lat,dimid_time]);netcdf.putAtt(ncid,varid_slp,'long_name','slp')netcdf.putAtt(ncid,varid_slp,'units','hPa')netcdf.putAtt(ncid,varid_slp,'missing_value',-9999)count=[nx ny nt];start=[0 0 0];netcdf.endDef(ncid)netcdf.putVar(ncid,varid_slp,start,count,yearavg);netcdf.close(ncid)
When I then open test.nc file, and I check the data, the new array seems to be correct, but all the longitude,latitude,time axes values are now fixed to a number (9.96920996838687e+36).
May anyone help? Thank you Isabella
Best Answer