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

Contents 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.5 - (show annotations) (download)
Mon Feb 3 19:47:50 2014 UTC (11 years, 5 months ago) by gforget
Branch: MAIN
CVS Tags: HEAD
Changes since 1.4: +0 -0 lines
FILE REMOVED
- process2nctiles.m : fix CF-1.6 compliance
- write2nctiles.m : fix CF-1.6 compliance
- write2nc.m : retired

1 function []=write2nc(fileOut,fldIn,doCreate,varargin);
2 %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 % 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 % '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 doCheck=0;%set to one to print stuff to screen
24
25 %set more optional paramaters to default values
26 descr='';
27 fldName=inputname(2); longName='';
28 units='(unknown)'; missval=NaN; fillval=NaN;
29 tim=[]; timName='time index';
30
31 %set more optional paramaters to user defined values
32 for ii=1:nargin-3;
33 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 strcmp(varargin{ii}{1},'timName');
55 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 eval(['dimvec.i' num2str(iDim) '=[1:size(fldIn,iDim)];']);
88 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 whos fldIn tim
100 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 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 end;
140
141 %define and fill field:
142 %----------------------
143 ncid=ncopen(fileOut,'write');
144 if (myenv.useNativeMatlabNetcdf); netcdf.reDef(ncid); end;
145 ncdefVar(ncid,fldName,'double',flipdim(dimlist,2));%note the direction flip
146 if ~isempty(longName); ncputAtt(ncid,fldName,'long_name',longName); end;
147 if ~isempty(units); ncputAtt(ncid,fldName,'units',units); end;
148 ncputAtt(ncid,fldName,'missing_value',missval);
149 ncputAtt(ncid,fldName,'_FillValue',fillval);
150 if (myenv.useNativeMatlabNetcdf); netcdf.endDef(ncid); end;
151 ncputvar(ncid,fldName,fldIn);
152 ncclose(ncid);
153
154

  ViewVC Help
Powered by ViewVC 1.1.22