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

Contents 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.2 - (show annotations) (download)
Sat Feb 1 18:19:26 2014 UTC (11 years, 5 months ago) by gforget
Branch: MAIN
Changes since 1.1: +12 -2 lines
- add month (month index variable)
- embed README (optional) in global attributes

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 % 'rdm' is the extended estimate description (default '').
11 % '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 %netcdf dimensions : array dimensions are simply set to 'i1,i2,...'
17
18 gcmfaces_global;
19
20 doCheck=0;%set to one to print stuff to screen
21
22 %set more optional paramaters to default values
23 descr='';
24 rdm='';
25 fldName=inputname(2); longName='';
26 units='(unknown)'; missval=NaN; fillval=NaN;
27 dimIn=[];
28
29 %set more optional paramaters to user defined values
30 for ii=1:nargin-3;
31 if ~iscell(varargin{ii});
32 warning('inputCheck:write2nctiles_1',...
33 ['write2nctiles expects \n'...
34 ' its optional parameters as cell arrays. \n'...
35 ' Argument no. ' num2str(ii+1) ' was ignored \n'...
36 ' Type ''help write2nctiles'' for details.']);
37 elseif ~ischar(varargin{ii}{1});
38 warning('inputCheck:write2nctiles_2',...
39 ['write2nctiles expects \n'...
40 ' its optional parameters cell arrays \n'...
41 ' to start with character string. \n'...
42 ' Argument no. ' num2str(ii+1) ' was ignored \n'...
43 ' Type ''help write2nctiles'' for details.']);
44 else;
45 if strcmp(varargin{ii}{1},'descr')|...
46 strcmp(varargin{ii}{1},'rdm')|...
47 strcmp(varargin{ii}{1},'fldName')|...
48 strcmp(varargin{ii}{1},'longName')|...
49 strcmp(varargin{ii}{1},'units')|...
50 strcmp(varargin{ii}{1},'missval')|...
51 strcmp(varargin{ii}{1},'fillval')|...
52 strcmp(varargin{ii}{1},'dimIn');
53 eval([varargin{ii}{1} '=varargin{ii}{2};']);
54 else;
55 warning('inputCheck:write2nctiles_3',...
56 ['unknown option ''' varargin{ii}{1} ''' was ignored']);
57 end;
58 end;
59 end;
60
61 for ff=1:mygrid.nFaces;
62
63 if isa(fldIn,'gcmfaces');
64 fldTile=fldIn{ff};
65 %reverse order of dimensions
66 nn=length(size(fldTile));
67 fldTile=permute(fldTile,[nn:-1:1]);
68 else;
69 fldTile=fldIn;
70 end;
71 fileTile=[fileOut sprintf('.%03d.nc',ff)];
72
73 %select dimensions of relevance:
74 nDim=length(size(fldTile));
75 dimsize=size(fldTile);
76 for iDim=1:nDim;
77 if size(fldTile,iDim)~=1;
78 dimlist{iDim}=['i' num2str(iDim)];
79 dimName{iDim}=['array index ' num2str(iDim)];
80 eval(['dimvec.i' num2str(iDim) '=[1:size(fldTile,iDim)];']);
81 end;
82 end;
83
84 %omit singleton dimensions:
85 ii=find(dimsize~=1);
86 dimsize=dimsize(ii);
87 dimlist={dimlist{ii}};
88 dimName={dimName{ii}};
89
90 %check :
91 if doCheck;
92 whos fldTile
93 descr
94 fldName
95 longName
96 units
97 missval
98 fillval
99 dimlist
100 dimName
101 dimsize
102 dimvec
103 keyboard;
104 end;
105
106 %output dimension information
107 dimOut{ff}=dimlist;
108
109 if doCreate;
110 %create netcdf file:
111 %-------------------
112 ncid=nccreate(fileTile,'NETCDF4');
113
114 if ~isempty(rdm); descr=[descr ' -- ' rdm{1}]; end;
115 ncputAtt(ncid,'','description',descr);
116 for pp=2:length(rdm);
117 tmp1=char(pp+63);
118 netcdf.putAtt(ncid,nc_global,tmp1,rdm{pp});
119 end;
120 %append readme
121 pp=length(rdm)+1;
122 netcdf.putAtt(ncid,nc_global,tmp1,'file created using gcmfaces_IO/write2nctiles.m');
123 ncputAtt(ncid,'','date',date);
124
125 ncdefDim(ncid,'itxt',30);
126 for dd=1:length(dimlist); ncdefDim(ncid,dimlist{dd},dimsize(dd)); end;
127
128 for dd=1:length(dimlist);
129 ncdefVar(ncid,dimlist{dd},'double',{dimlist{dd}});
130 ncputAtt(ncid,dimlist{dd},'long_name',dimName{dd});
131 end;
132 ncclose(ncid);
133
134 %fill in the dimensions dimensions values vectors:
135 %-------------------------------------------------
136 ncid=ncopen(fileTile,'write');
137 for dd=1:length(dimlist);
138 ncputvar(ncid,dimlist{dd},getfield(dimvec,dimlist{dd}));
139 end;
140 ncclose(ncid);
141 end;
142
143 %use dimentsion specified by user
144 if ~isempty(dimIn); dimlist=dimIn{ff}; end;
145
146 %define and fill field:
147 %----------------------
148 ncid=ncopen(fileTile,'write');
149 if (myenv.useNativeMatlabNetcdf); netcdf.reDef(ncid); end;
150 ncdefVar(ncid,fldName,'double',flipdim(dimlist,2));%note the direction flip
151 if ~isempty(longName); ncputAtt(ncid,fldName,'long_name',longName); end;
152 if ~isempty(units); ncputAtt(ncid,fldName,'units',units); end;
153 ncputAtt(ncid,fldName,'missing_value',missval);
154 if (myenv.useNativeMatlabNetcdf); netcdf.endDef(ncid); end;
155 ncputvar(ncid,fldName,fldTile);
156 ncclose(ncid);
157
158 end;%for ff=1:mygrid.nFaces;
159

  ViewVC Help
Powered by ViewVC 1.1.22