/[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.1 - (show annotations) (download)
Thu Jan 30 17:05:12 2014 UTC (11 years, 5 months ago) by gforget
Branch: MAIN
- new nctiles IO : times series per tiles (full faces for now) in netcdf4 format.

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

  ViewVC Help
Powered by ViewVC 1.1.22