/[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.1 - (hide 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 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     % '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