/[MITgcm]/MITgcm_contrib/gael/matlab_class/gcmfaces_IO/write2nctiles.m
ViewVC logotype

Diff of /MITgcm_contrib/gael/matlab_class/gcmfaces_IO/write2nctiles.m

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.3 by gforget, Sun Feb 2 01:47:38 2014 UTC revision 1.8 by gforget, Sat May 7 15:21:57 2016 UTC
# Line 13  function [dimOut]=write2nctiles(fileOut, Line 13  function [dimOut]=write2nctiles(fileOut,
13  %               'units' is the unit of fld (default : '(unknown)').  %               'units' is the unit of fld (default : '(unknown)').
14  %               'missval' is the missing value (default : NaN).  %               'missval' is the missing value (default : NaN).
15  %               'fillval' is the fill value (default : NaN).  %               'fillval' is the fill value (default : NaN).
16    %               'tileNo' is a map of tile indices (default is face number)
17    %               'coord' is auxilliary coordinates attribute (e.g. 'lon lat dep')
18    %               'dimsize' is the array size associated with 'coord'
19    %               'xtype' is 'double' by default
20  %netcdf dimensions : array dimensions are simply set to 'i1,i2,...'  %netcdf dimensions : array dimensions are simply set to 'i1,i2,...'
21    
22  gcmfaces_global;  gcmfaces_global;
23    if ~(myenv.useNativeMatlabNetcdf);
24      error('only native matlab nectdf is supported in write2nctiles');
25    end;
26    
27  doCheck=0;%set to one to print stuff to screen  doCheck=0;%set to one to print stuff to screen
28    
29    fldInIsaGcmfaces=isa(fldIn,'gcmfaces');
30    
31    if fldInIsaGcmfaces;
32      fldInIsEmpty=isempty(fldIn{1});
33    else;
34      fldInIsEmpty=isempty(fldIn);
35    end;
36    
37  %set more optional paramaters to default values  %set more optional paramaters to default values
38  descr='';  descr='';
39  rdm='';  rdm='';
40  fldName=inputname(2); longName='';  fldName=inputname(2); longName='';
41  units='(unknown)'; missval=NaN; fillval=NaN;  units='(unknown)'; missval=NaN; fillval=NaN; dimIn=[];
42  dimIn=[];  tileNo=mygrid.XC; for ff=1:mygrid.nFaces; tileNo{ff}(:)=ff; end;
43    coord=''; dimsize=[]; xtype='double';
44    
45  %set more optional paramaters to user defined values  %set more optional paramaters to user defined values
46  for ii=1:nargin-3;  for ii=1:nargin-3;
# Line 49  for ii=1:nargin-3; Line 65  for ii=1:nargin-3;
65                  strcmp(varargin{ii}{1},'units')|...                  strcmp(varargin{ii}{1},'units')|...
66                  strcmp(varargin{ii}{1},'missval')|...                  strcmp(varargin{ii}{1},'missval')|...
67                  strcmp(varargin{ii}{1},'fillval')|...                  strcmp(varargin{ii}{1},'fillval')|...
68                    strcmp(varargin{ii}{1},'tileNo')|...
69                    strcmp(varargin{ii}{1},'coord')|...
70                    strcmp(varargin{ii}{1},'dimsize')|...
71                    strcmp(varargin{ii}{1},'xtype')|...
72                  strcmp(varargin{ii}{1},'dimIn');                  strcmp(varargin{ii}{1},'dimIn');
73              eval([varargin{ii}{1} '=varargin{ii}{2};']);              eval([varargin{ii}{1} '=varargin{ii}{2};']);
74          else;          else;
# Line 58  for ii=1:nargin-3; Line 78  for ii=1:nargin-3;
78      end;      end;
79  end;  end;
80    
81  for ff=1:mygrid.nFaces;  %split fldIn (if isa gcmfaces) into tiles
82    tileList=unique(convert2vector(tileNo));
83    tileList=tileList(~isnan(tileList));
84    ntile=length(tileList);
85    %
86    if fldInIsaGcmfaces&~fldInIsEmpty;
87     for ff=1:ntile;
88       tmp1=[];
89       for gg=1:mygrid.nFaces;
90         [tmpi,tmpj]=find(tileNo{gg}==ff);
91         if ~isempty(tmpi);
92           tmpi=[min(tmpi(:)):max(tmpi(:))];
93           tmpj=[min(tmpj(:)):max(tmpj(:))];
94           tmp1=fldIn{gg}(tmpi,tmpj,:,:);
95         end;
96       end;
97       fldTiles{ff}=tmp1;
98     end;
99     clear fldIn;
100    elseif fldInIsaGcmfaces;
101     for ff=1:ntile;
102       fldTiles{ff}=[];
103     end;
104    end;
105    
106    %start processing loop
107    for ff=1:ntile;
108    
109  if isa(fldIn,'gcmfaces');  if fldInIsaGcmfaces;
110    fldTile=fldIn{ff};    fldTile=fldTiles{ff};
111    %reverse order of dimensions    %reverse order of dimensions
112    nn=length(size(fldTile));    nn=length(size(fldTile));
113    fldTile=permute(fldTile,[nn:-1:1]);    fldTile=permute(fldTile,[nn:-1:1]);
114      if ntile==1; clear fldTiles; end;
115  else;  else;
116    fldTile=fldIn;    fldTile=fldIn;
117  end;  end;
118  fileTile=[fileOut sprintf('.%03d.nc',ff)];  fileTile=[fileOut sprintf('.%04d.nc',ff)];
119    
120  %select dimensions of relevance:  %select dimensions of relevance:
121  nDim=length(size(fldTile));  if ~fldInIsEmpty;
122  dimsize=size(fldTile);    nDim=length(size(fldTile));
123      dimsize=size(fldTile);
124    elseif ~isempty(dimsize);
125      nDim=length(dimsize);
126    else;
127      error('undertermined array size');
128    end;
129    
130  for iDim=1:nDim;  for iDim=1:nDim;
131  if size(fldTile,iDim)~=1;  if dimsize(iDim)~=1;
132      dimlist{iDim}=['i' num2str(iDim)];      dimlist{iDim}=['i' num2str(iDim)];
133      dimName{iDim}=['array index ' num2str(iDim)];      dimName{iDim}=['array index ' num2str(iDim)];
134      eval(['dimvec.i' num2str(iDim) '=[1:size(fldTile,iDim)];']);      eval(['dimvec.i' num2str(iDim) '=[1:dimsize(iDim)];']);
135  end;  end;
136  end;  end;
137    
# Line 109  dimOut{ff}=dimlist; Line 163  dimOut{ff}=dimlist;
163  if doCreate;  if doCreate;
164    %create netcdf file:    %create netcdf file:
165    %-------------------    %-------------------
166    ncid=nccreate(fileTile,'NETCDF4');    if prod(dimsize)*4/1e9<1.5;%use (always available) basic netcdf:
167        mode='clobber';
168      else;%to allow for large file:
169        mode='NETCDF4';
170      end;
171      ncid=nccreate(fileTile,mode);
172      nc_global=netcdf.getConstant('NC_GLOBAL');
173    
174    if ~isempty(rdm);    if ~isempty(rdm);
175      descr2=[descr ' -- ' rdm{1}];      descr2=[descr ' -- ' rdm{1}];
176    else;    else;
177      descr2=descr;      descr2=descr;
178    end;    end;
179    ncputAtt(ncid,'','description',descr);    ncputAtt(ncid,'','description',descr2);
180    for pp=2:length(rdm);    for pp=2:length(rdm);
181    tmp1=char(pp+63);    tmp1=char(pp+63);
182    netcdf.putAtt(ncid,nc_global,tmp1,rdm{pp});    netcdf.putAtt(ncid,nc_global,tmp1,rdm{pp});
# Line 125  if doCreate; Line 185  if doCreate;
185    pp=length(rdm)+1;    pp=length(rdm)+1;
186    netcdf.putAtt(ncid,nc_global,tmp1,'file created using gcmfaces_IO/write2nctiles.m');    netcdf.putAtt(ncid,nc_global,tmp1,'file created using gcmfaces_IO/write2nctiles.m');
187    ncputAtt(ncid,'','date',date);    ncputAtt(ncid,'','date',date);
188      netcdf.putAtt(ncid,nc_global,'Conventions','CF-1.6')  
189    
190      ncputAtt(ncid,'','_FillValue',fillval);
191      ncputAtt(ncid,'','missing_value',missval);
192    
193    ncdefDim(ncid,'itxt',30);    ncdefDim(ncid,'itxt',30);
194    for dd=1:length(dimlist); ncdefDim(ncid,dimlist{dd},dimsize(dd)); end;    for dd=1:length(dimlist); ncdefDim(ncid,dimlist{dd},dimsize(dd)); end;
# Line 132  if doCreate; Line 196  if doCreate;
196    for dd=1:length(dimlist);    for dd=1:length(dimlist);
197      ncdefVar(ncid,dimlist{dd},'double',{dimlist{dd}});      ncdefVar(ncid,dimlist{dd},'double',{dimlist{dd}});
198      ncputAtt(ncid,dimlist{dd},'long_name',dimName{dd});      ncputAtt(ncid,dimlist{dd},'long_name',dimName{dd});
199        ncputAtt(ncid,dimlist{dd},'units','1');
200    end;    end;
201    ncclose(ncid);    ncclose(ncid);
202    
# Line 150  if ~isempty(dimIn); dimlist=dimIn{ff}; e Line 215  if ~isempty(dimIn); dimlist=dimIn{ff}; e
215  %define and fill field:  %define and fill field:
216  %----------------------  %----------------------
217  ncid=ncopen(fileTile,'write');  ncid=ncopen(fileTile,'write');
218  if (myenv.useNativeMatlabNetcdf); netcdf.reDef(ncid); end;  %
219  ncdefVar(ncid,fldName,'double',flipdim(dimlist,2));%note the direction flip  netcdf.reDef(ncid);
220    ncdefVar(ncid,fldName,xtype,flipdim(dimlist,2));%note the direction flip
221  if ~isempty(longName); ncputAtt(ncid,fldName,'long_name',longName); end;  if ~isempty(longName); ncputAtt(ncid,fldName,'long_name',longName); end;
222  if ~isempty(units); ncputAtt(ncid,fldName,'units',units); end;  if ~isempty(units); ncputAtt(ncid,fldName,'units',units); end;
223  ncputAtt(ncid,fldName,'missing_value',missval);  if ~isempty(coord); ncputAtt(ncid,fldName,'coordinates',coord); end;
224  if (myenv.useNativeMatlabNetcdf); netcdf.endDef(ncid); end;  if strcmp(fldName,'lon'); ncputAtt(ncid,fldName,'standard_name','longitude'); end;
225  ncputvar(ncid,fldName,fldTile);  if strcmp(fldName,'lat'); ncputAtt(ncid,fldName,'standard_name','latitude'); end;
226    if strcmp(fldName,'dep'); ncputAtt(ncid,fldName,'standard_name','depth'); end;
227    if strcmp(fldName,'tim'); ncputAtt(ncid,fldName,'standard_name','time'); end;
228    if strcmp(fldName,'land'); ncputAtt(ncid,fldName,'standard_name','land_binary_mask'); end;
229    if strcmp(fldName,'area'); ncputAtt(ncid,fldName,'standard_name','cell_area'); end;
230    if strcmp(fldName,'thic'); ncputAtt(ncid,fldName,'standard_name','cell_thickness'); end;
231    netcdf.endDef(ncid);
232    %
233    if ~fldInIsEmpty; ncputvar(ncid,fldName,fldTile); end;
234    %
235  ncclose(ncid);  ncclose(ncid);
236    
237  end;%for ff=1:mygrid.nFaces;  end;%for ff=1:ntile;
238    

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.8

  ViewVC Help
Powered by ViewVC 1.1.22