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

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

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


Revision 1.3 - (hide annotations) (download)
Fri Apr 27 18:20:50 2012 UTC (13 years, 2 months ago) by gforget
Branch: MAIN
Changes since 1.2: +40 -36 lines
- added param : doCreate is a 0/1 switch; 1 => create file ; 0 => append to file.
- rm lon/lat as optional params; they are now ppended as variables using doCreate=0.

1 gforget 1.3 function []=write2nc(fileOut,fldIn,doCreate,varargin);
2 gforget 1.1 %object : write array (not a gcmfaces object) to netcdf file
3     %inputs : fileOut is the name of the file to be created
4     % fldIn is the array to write to disk
5 gforget 1.3 % doCreate is a 0/1 switch; 1 => create file ; 0 => append to file.
6 gforget 1.1 %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     % 'tim' is a time vector (default : []) if fld has one such dimension.
16     % 'timName' is the long_name for that dimension (default : 'time index')
17     %netcdf dimensions : for unspecified (non-singleton) dimensions we will try to make a guess based on
18     % the length of mygrid.RC, mygrid.RF and mygrid.LATS; in case that guess fails
19     % we will use 'i1','i2' etc.
20    
21     gcmfaces_global;
22    
23 gforget 1.2 doCheck=0;%set to one to print stuff to screen
24 gforget 1.1
25     %set more optional paramaters to default values
26 gforget 1.3 descr='';
27     fldName=inputname(2); longName='';
28     units='(unknown)'; missval=NaN; fillval=NaN;
29     tim=[]; timName='time index';
30 gforget 1.1
31     %set more optional paramaters to user defined values
32 gforget 1.3 for ii=1:nargin-3;
33 gforget 1.1 if ~iscell(varargin{ii});
34     warning('inputCheck:write2nc_1',...
35     ['write2nc expects \n'...
36     ' its optional parameters as cell arrays. \n'...
37     ' Argument no. ' num2str(ii+1) ' was ignored \n'...
38     ' Type ''help write2nc'' for details.']);
39     elseif ~ischar(varargin{ii}{1});
40     warning('inputCheck:write2nc_2',...
41     ['write2nc expects \n'...
42     ' its optional parameters cell arrays \n'...
43     ' to start with character string. \n'...
44     ' Argument no. ' num2str(ii+1) ' was ignored \n'...
45     ' Type ''help write2nc'' for details.']);
46     else;
47     if strcmp(varargin{ii}{1},'descr')|...
48     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     strcmp(varargin{ii}{1},'tim')|...
54 gforget 1.3 strcmp(varargin{ii}{1},'timName');
55 gforget 1.1 eval([varargin{ii}{1} '=varargin{ii}{2};']);
56     else;
57     warning('inputCheck:write2nc_3',...
58     ['unknown option ''' varargin{ii}{1} ''' was ignored']);
59     end;
60     end;
61     end;
62    
63     %select dimensions of relevance:
64     nDim=length(size(fldIn));
65     dimsize=size(fldIn);
66     for iDim=1:nDim;
67     if isfield(mygrid,'LATS'); nLATS=length(mygrid.LATS); else; nLATS=0; end;
68     if size(fldIn,iDim)==nLATS;
69     dimlist{iDim}='ilat';
70     dimName{iDim}='latitude';
71     dimvec.ilat=mygrid.LATS;
72     elseif size(fldIn,iDim)==length(mygrid.RC);
73     dimlist{iDim}='idept';
74     dimName{iDim}='depth';
75     dimvec.idept=-mygrid.RC;
76     elseif size(fldIn,iDim)==length(mygrid.RF);
77     dimlist{iDim}='idepw';
78     dimName{iDim}='depth';
79     dimvec.idepw=-mygrid.RF;
80     elseif size(fldIn,iDim)==length(tim);
81     dimlist{iDim}='itim';
82     dimName{iDim}=timName;
83     dimvec.itim=tim;
84     elseif size(fldIn,iDim)~=1;
85     dimlist{iDim}=['i' num2str(iDim)];
86     dimName{iDim}=['array index ' num2str(iDim)];
87 gforget 1.3 eval(['dimvec.i' num2str(iDim) '=[1:size(fldIn,iDim)];']);
88 gforget 1.1 end;
89     end;
90    
91     %omit singleton dimensions:
92     ii=find(dimsize~=1);
93     dimsize=dimsize(ii);
94     dimlist={dimlist{ii}};
95     dimName={dimName{ii}};
96    
97     %check :
98     if doCheck;
99 gforget 1.3 whos fldIn tim
100 gforget 1.1 descr
101     fldName
102     longName
103     units
104     missval
105     fillval
106     timName
107     dimlist
108     dimName
109     dimsize
110     dimvec
111     keyboard;
112     end;
113    
114 gforget 1.3 if doCreate;
115     %create netcdf file:
116     %-------------------
117     ncid=nccreate(fileOut,'clobber');
118    
119     aa=sprintf([descr ' [file created with gcmfaces_IO/write2nc.m]']);
120     ncputAtt(ncid,'','description',aa);
121     ncputAtt(ncid,'','date',date);
122    
123     ncdefDim(ncid,'itxt',30);
124     for dd=1:length(dimlist); ncdefDim(ncid,dimlist{dd},dimsize(dd)); end;
125    
126     for dd=1:length(dimlist)1;
127     ncdefVar(ncid,dimlist{dd},'double',{dimlist{dd}});
128     ncputAtt(ncid,dimlist{dd},'long_name',dimName{dd});
129     end;
130     ncclose(ncid);
131    
132     %fill in the dimensions dimensions values vectors:
133     %-------------------------------------------------
134     ncid=ncopen(fileOut,'write');
135     for dd=1:length(dimlist);
136     ncputvar(ncid,dimlist{dd},getfield(dimvec,dimlist{dd}));
137     end;
138     ncclose(ncid);
139 gforget 1.1 end;
140    
141 gforget 1.3 %define and fill field:
142     %----------------------
143     ncid=ncopen(fileOut,'write');
144 gforget 1.1 ncdefVar(ncid,fldName,'double',flipdim(dimlist,2));%note the direction flip
145 gforget 1.3 if ~isempty(longName); ncputAtt(ncid,fldName,'long_name',longName); end;
146     if ~isempty(units); ncputAtt(ncid,fldName,'units',units); end;
147 gforget 1.1 ncputAtt(ncid,fldName,'missing_value',missval);
148     ncputAtt(ncid,fldName,'_FillValue',fillval);
149     ncputvar(ncid,fldName,fldIn);
150     ncclose(ncid);
151    
152    

  ViewVC Help
Powered by ViewVC 1.1.22