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

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

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


Revision 1.4 - (hide annotations) (download)
Mon Feb 3 14:28:52 2014 UTC (11 years, 5 months ago) by gforget
Branch: MAIN
Changes since 1.3: +32 -8 lines
- process2nctiles.m :
   allow for tileSize specification, using
     gcmfaces_loc_tile.m to map of tile indices
   create on subdirectory per field
   revise handling of dimensions
- write2nctiles.m :
   allow for tileNo (map of tile indices) specification
   revise loops accordingly
   fix readme treatment
   switch from NETCDF4 to classic nectdf
   add one digit in file names

1 gforget 1.1 function [dimOut]=write2nctiles(fileOut,fldIn,doCreate,varargin);
2     %object : write gcmfaces object to netcdf files (tiled)
3     %inputs : fileOut is the name of the file to be created
4     % fldIn is the array to write to disk
5     % doCreate is a 0/1 switch; 1 => create file ; 0 => append to file.
6     %optional paramaters :
7     % can be provided in the form {'name',value}
8     % those that are currently active are
9     % 'descr' is the file description (default '').
10 gforget 1.2 % 'rdm' is the extended estimate description (default '').
11 gforget 1.1 % 'fldName' is the nc variable name for fld (default : the outside name of fldIn).
12     % 'longName' is the corresponding long name (default : '').
13     % 'units' is the unit of fld (default : '(unknown)').
14     % 'missval' is the missing value (default : NaN).
15     % 'fillval' is the fill value (default : NaN).
16 gforget 1.4 % 'tileNo' is a map of tile indices (default is face number)
17 gforget 1.1 %netcdf dimensions : array dimensions are simply set to 'i1,i2,...'
18    
19     gcmfaces_global;
20    
21     doCheck=0;%set to one to print stuff to screen
22    
23     %set more optional paramaters to default values
24     descr='';
25 gforget 1.2 rdm='';
26 gforget 1.1 fldName=inputname(2); longName='';
27 gforget 1.4 units='(unknown)'; missval=NaN; fillval=NaN; dimIn=[];
28     tileNo=mygrid.XC; for ff=1:mygrid.nFaces; tileNo{ff}(:)=ff; end;
29 gforget 1.1
30     %set more optional paramaters to user defined values
31     for ii=1:nargin-3;
32     if ~iscell(varargin{ii});
33     warning('inputCheck:write2nctiles_1',...
34     ['write2nctiles expects \n'...
35     ' its optional parameters as cell arrays. \n'...
36     ' Argument no. ' num2str(ii+1) ' was ignored \n'...
37     ' Type ''help write2nctiles'' for details.']);
38     elseif ~ischar(varargin{ii}{1});
39     warning('inputCheck:write2nctiles_2',...
40     ['write2nctiles expects \n'...
41     ' its optional parameters cell arrays \n'...
42     ' to start with character string. \n'...
43     ' Argument no. ' num2str(ii+1) ' was ignored \n'...
44     ' Type ''help write2nctiles'' for details.']);
45     else;
46     if strcmp(varargin{ii}{1},'descr')|...
47 gforget 1.2 strcmp(varargin{ii}{1},'rdm')|...
48 gforget 1.1 strcmp(varargin{ii}{1},'fldName')|...
49     strcmp(varargin{ii}{1},'longName')|...
50     strcmp(varargin{ii}{1},'units')|...
51     strcmp(varargin{ii}{1},'missval')|...
52     strcmp(varargin{ii}{1},'fillval')|...
53 gforget 1.4 strcmp(varargin{ii}{1},'tileNo')|...
54 gforget 1.1 strcmp(varargin{ii}{1},'dimIn');
55     eval([varargin{ii}{1} '=varargin{ii}{2};']);
56     else;
57     warning('inputCheck:write2nctiles_3',...
58     ['unknown option ''' varargin{ii}{1} ''' was ignored']);
59     end;
60     end;
61     end;
62    
63 gforget 1.4 %split fldIn (if isa gcmfaces) into tiles
64     tileList=unique(convert2vector(tileNo));
65     tileList=tileList(~isnan(tileList));
66     ntile=length(tileList);
67     %
68     if isa(fldIn,'gcmfaces');
69     for ff=1:ntile;
70     tmp1=[];
71     for gg=1:mygrid.nFaces;
72     [tmpi,tmpj]=find(tileNo{gg}==ff);
73     if ~isempty(tmpi);
74     tmpi=[min(tmpi(:)):max(tmpi(:))];
75     tmpj=[min(tmpj(:)):max(tmpj(:))];
76     tmp1=fldIn{gg}(tmpi,tmpj,:,:);
77     end;
78     end;
79     fldTiles{ff}=tmp1;
80     end;
81     end;
82    
83     %start processing loop
84     for ff=1:ntile;
85 gforget 1.1
86     if isa(fldIn,'gcmfaces');
87 gforget 1.4 fldTile=fldTiles{ff};
88 gforget 1.1 %reverse order of dimensions
89     nn=length(size(fldTile));
90     fldTile=permute(fldTile,[nn:-1:1]);
91     else;
92     fldTile=fldIn;
93     end;
94 gforget 1.4 fileTile=[fileOut sprintf('.%04d.nc',ff)];
95 gforget 1.1
96     %select dimensions of relevance:
97     nDim=length(size(fldTile));
98     dimsize=size(fldTile);
99     for iDim=1:nDim;
100     if size(fldTile,iDim)~=1;
101     dimlist{iDim}=['i' num2str(iDim)];
102     dimName{iDim}=['array index ' num2str(iDim)];
103     eval(['dimvec.i' num2str(iDim) '=[1:size(fldTile,iDim)];']);
104     end;
105     end;
106    
107     %omit singleton dimensions:
108     ii=find(dimsize~=1);
109     dimsize=dimsize(ii);
110     dimlist={dimlist{ii}};
111     dimName={dimName{ii}};
112    
113     %check :
114     if doCheck;
115     whos fldTile
116     descr
117     fldName
118     longName
119     units
120     missval
121     fillval
122     dimlist
123     dimName
124     dimsize
125     dimvec
126     keyboard;
127     end;
128    
129     %output dimension information
130     dimOut{ff}=dimlist;
131    
132     if doCreate;
133     %create netcdf file:
134     %-------------------
135 gforget 1.4 % ncid=nccreate(fileTile,'NETCDF4');%to allow for big files
136     ncid=nccreate(fileTile,'clobber');
137 gforget 1.1
138 gforget 1.3 if ~isempty(rdm);
139     descr2=[descr ' -- ' rdm{1}];
140     else;
141     descr2=descr;
142     end;
143 gforget 1.4 ncputAtt(ncid,'','description',descr2);
144 gforget 1.2 for pp=2:length(rdm);
145     tmp1=char(pp+63);
146     netcdf.putAtt(ncid,nc_global,tmp1,rdm{pp});
147     end;
148     %append readme
149     pp=length(rdm)+1;
150     netcdf.putAtt(ncid,nc_global,tmp1,'file created using gcmfaces_IO/write2nctiles.m');
151 gforget 1.1 ncputAtt(ncid,'','date',date);
152    
153     ncdefDim(ncid,'itxt',30);
154     for dd=1:length(dimlist); ncdefDim(ncid,dimlist{dd},dimsize(dd)); end;
155    
156     for dd=1:length(dimlist);
157     ncdefVar(ncid,dimlist{dd},'double',{dimlist{dd}});
158     ncputAtt(ncid,dimlist{dd},'long_name',dimName{dd});
159     end;
160     ncclose(ncid);
161    
162     %fill in the dimensions dimensions values vectors:
163     %-------------------------------------------------
164     ncid=ncopen(fileTile,'write');
165     for dd=1:length(dimlist);
166     ncputvar(ncid,dimlist{dd},getfield(dimvec,dimlist{dd}));
167     end;
168     ncclose(ncid);
169     end;
170    
171     %use dimentsion specified by user
172     if ~isempty(dimIn); dimlist=dimIn{ff}; end;
173    
174     %define and fill field:
175     %----------------------
176     ncid=ncopen(fileTile,'write');
177     if (myenv.useNativeMatlabNetcdf); netcdf.reDef(ncid); end;
178     ncdefVar(ncid,fldName,'double',flipdim(dimlist,2));%note the direction flip
179     if ~isempty(longName); ncputAtt(ncid,fldName,'long_name',longName); end;
180     if ~isempty(units); ncputAtt(ncid,fldName,'units',units); end;
181     ncputAtt(ncid,fldName,'missing_value',missval);
182     if (myenv.useNativeMatlabNetcdf); netcdf.endDef(ncid); end;
183     ncputvar(ncid,fldName,fldTile);
184     ncclose(ncid);
185    
186 gforget 1.4 end;%for ff=1:ntile;
187 gforget 1.1

  ViewVC Help
Powered by ViewVC 1.1.22