[Dart-dev] [4833] DART/trunk/matlab: Removed a bit of redundant fetching of the time variable ...
nancy at ucar.edu
nancy at ucar.edu
Wed Mar 30 11:38:38 MDT 2011
Revision: 4833
Author: thoar
Date: 2011-03-30 11:38:38 -0600 (Wed, 30 Mar 2011)
Log Message:
-----------
Removed a bit of redundant fetching of the time variable ...
support added for WRF for plot_var_var_correl.m
Modified Paths:
--------------
DART/trunk/matlab/GetBgridInfo.m
DART/trunk/matlab/GetPe2lyrInfo.m
DART/trunk/matlab/GetWRFInfo.m
DART/trunk/matlab/PlotCorrel.m
DART/trunk/matlab/PlotVarVarCorrel.m
DART/trunk/matlab/ens_correl.m
DART/trunk/matlab/plot_correl.m
DART/trunk/matlab/plot_var_var_correl.m
-------------- next part --------------
Modified: DART/trunk/matlab/GetBgridInfo.m
===================================================================
--- DART/trunk/matlab/GetBgridInfo.m 2011-03-30 15:23:18 UTC (rev 4832)
+++ DART/trunk/matlab/GetBgridInfo.m 2011-03-30 17:38:38 UTC (rev 4833)
@@ -37,6 +37,13 @@
prognostic_vars = {'ps','t','u','v'};
+% Coordinate between time types and dates
+
+timeunits = nc_attget(fname,'time','units');
+timebase = sscanf(timeunits,'%*s%*s%d%*c%d%*c%d'); % YYYY MM DD
+timeorigin = datenum(timebase(1),timebase(2),timebase(3));
+dates = times + timeorigin;
+
switch lower(deblank(routine))
case {'plotbins','plotenserrspread','plotensmeantimeseries','plotenstimeseries'}
@@ -48,6 +55,7 @@
pinfo = setfield(pinfo, 'model', model);
pinfo = setfield(pinfo, 'fname', fname);
+ pinfo = setfield(pinfo, 'times', dates);
pinfo = setfield(pinfo, 'var', pgvar);
pinfo = setfield(pinfo, 'level', level);
pinfo = setfield(pinfo, 'levelindex', lvlind);
@@ -60,7 +68,7 @@
disp('Getting information for the ''base'' variable.')
base_var = GetVar(prognostic_vars);
- [base_time, base_tmeind] = GetTime( base_var,times);
+ [base_time, base_tmeind] = GetTime( base_var,dates);
[base_lvl, base_lvlind] = GetLevel( base_var,levels);
[base_lat, base_latind] = GetLatitude( base_var,TmpJ,VelJ);
[base_lon, base_lonind] = GetLongitude(base_var,TmpI,VelI);
@@ -71,6 +79,7 @@
pinfo = setfield(pinfo, 'model', model);
pinfo = setfield(pinfo, 'fname', fname);
+ pinfo = setfield(pinfo, 'times', dates);
pinfo = setfield(pinfo, 'base_var', base_var);
pinfo = setfield(pinfo, 'comp_var', comp_var);
pinfo = setfield(pinfo, 'base_time', base_time);
@@ -88,7 +97,7 @@
disp('Getting information for the ''base'' variable.')
base_var = GetVar(prognostic_vars);
- [base_time, base_tmeind] = GetTime( base_var,times);
+ [base_time, base_tmeind] = GetTime( base_var,dates);
[base_lvl , base_lvlind] = GetLevel( base_var,levels);
[base_lat , base_latind] = GetLatitude( base_var,TmpJ,VelJ);
[base_lon , base_lonind] = GetLongitude(base_var,TmpI,VelI);
@@ -101,6 +110,7 @@
pinfo = setfield(pinfo, 'model', model);
pinfo = setfield(pinfo, 'fname', fname);
+ pinfo = setfield(pinfo, 'times', dates);
pinfo = setfield(pinfo, 'base_var', base_var);
pinfo = setfield(pinfo, 'comp_var', comp_var);
pinfo = setfield(pinfo, 'base_time', base_time);
@@ -129,6 +139,7 @@
copy = length(copyindices);
pinfo = setfield(pinfo, 'model' , model);
+ pinfo = setfield(pinfo, 'times' , dates);
pinfo = setfield(pinfo, 'var_names' , pgvar);
%pinfo = setfield(pinfo, 'truth_file' , []);
%pinfo = setfield(pinfo, 'prior_file' , pinfo.prior_file);
@@ -170,8 +181,9 @@
s1 = input('Input line type string. <cr> for ''k-'' ','s');
if isempty(s1), ltype = 'k-'; else ltype = s1; end
- pinfo = setfield(pinfo, 'model',model);
- pinfo = setfield(pinfo, 'fname' ,fname);
+ pinfo = setfield(pinfo, 'model', model);
+ pinfo = setfield(pinfo, 'fname', fname);
+ pinfo = setfield(pinfo, 'times', dates);
pinfo = setfield(pinfo, 'var1name' ,var1);
pinfo = setfield(pinfo, 'var2name' ,var2);
pinfo = setfield(pinfo, 'var3name' ,var3);
Modified: DART/trunk/matlab/GetPe2lyrInfo.m
===================================================================
--- DART/trunk/matlab/GetPe2lyrInfo.m 2011-03-30 15:23:18 UTC (rev 4832)
+++ DART/trunk/matlab/GetPe2lyrInfo.m 2011-03-30 17:38:38 UTC (rev 4833)
@@ -35,6 +35,13 @@
prognostic_vars = {'u','v','z'};
+% Coordinate between time types and dates
+
+timeunits = nc_attget(fname,'time','units');
+timebase = sscanf(timeunits,'%*s%*s%d%*c%d%*c%d'); % YYYY MM DD
+timeorigin = datenum(timebase(1),timebase(2),timebase(3));
+dates = times + timeorigin;
+
switch lower(deblank(routine))
case {'plotbins','plotenserrspread','plotensmeantimeseries','plotenstimeseries'}
@@ -46,6 +53,7 @@
pinfo = setfield(pinfo, 'model' , model );
pinfo = setfield(pinfo, 'fname' , fname );
+ pinfo = setfield(pinfo, 'times' , dates );
pinfo = setfield(pinfo, 'var' , pgvar );
pinfo = setfield(pinfo, 'level' , level );
pinfo = setfield(pinfo, 'levelindex', lvlind);
@@ -58,7 +66,7 @@
disp('Getting information for the ''base'' variable.')
base_var = GetVar(prognostic_vars);
- [base_time, base_tmeind] = GetTime( base_var,times);
+ [base_time, base_tmeind] = GetTime( base_var,dates);
[base_lvl, base_lvlind] = GetLevel( base_var,levels);
[base_lat, base_latind] = GetLatitude( base_var,lats);
[base_lon, base_lonind] = GetLongitude(base_var,lons);
@@ -86,7 +94,7 @@
disp('Getting information for the ''base'' variable.')
base_var = GetVar(prognostic_vars);
- [base_time, base_tmeind] = GetTime( base_var,times);
+ [base_time, base_tmeind] = GetTime( base_var,dates);
[base_lvl , base_lvlind] = GetLevel( base_var,levels);
[base_lat , base_latind] = GetLatitude( base_var,lats);
[base_lon , base_lonind] = GetLongitude(base_var,lons);
@@ -99,6 +107,7 @@
pinfo = setfield(pinfo, 'model', model);
pinfo = setfield(pinfo, 'fname', fname);
+ pinfo = setfield(pinfo, 'times', dates);
pinfo = setfield(pinfo, 'base_var', base_var);
pinfo = setfield(pinfo, 'comp_var', comp_var);
pinfo = setfield(pinfo, 'base_time', base_time);
@@ -127,6 +136,7 @@
copy = length(copyindices);
pinfo = setfield(pinfo, 'model' , model);
+ pinfo = setfield(pinfo, 'times' , dates);
pinfo = setfield(pinfo, 'var_names' , pgvar);
pinfo = setfield(pinfo, 'truth_file' , []);
%pinfo = setfield(pinfo, 'prior_file' , pinfo.prior_file);
@@ -170,6 +180,7 @@
pinfo = setfield(pinfo, 'model', model);
pinfo = setfield(pinfo, 'fname', fname);
+ pinfo = setfield(pinfo, 'times', dates);
pinfo = setfield(pinfo, 'var1name' , var1);
pinfo = setfield(pinfo, 'var2name' , var2);
pinfo = setfield(pinfo, 'var3name' , var3);
Modified: DART/trunk/matlab/GetWRFInfo.m
===================================================================
--- DART/trunk/matlab/GetWRFInfo.m 2011-03-30 15:23:18 UTC (rev 4832)
+++ DART/trunk/matlab/GetWRFInfo.m 2011-03-30 17:38:38 UTC (rev 4833)
@@ -44,7 +44,6 @@
timeorigin = datenum(timebase(1),timebase(2),timebase(3));
dates = times + timeorigin;
-
dx = varget(fname, 'DX');
dy = varget(fname, 'DY');
truelat1 = varget(fname, 'TRUELAT1');
@@ -94,6 +93,7 @@
pinfo.model = model;
pinfo.fname = fname;
+ pinfo.times = dates;
pinfo.var = pgvar;
pinfo.level = level;
pinfo.levelindex = lvlind;
@@ -116,6 +116,7 @@
pinfo.model = model;
pinfo.fname = fname;
+ pinfo.times = dates;
pinfo.base_var = base_var;
pinfo.comp_var = comp_var;
pinfo.base_time = base_time;
@@ -134,18 +135,17 @@
disp('Getting information for the ''base'' variable.')
base_var = GetVarString(pinfo_in.vars);
[base_time, base_tmeind] = GetTime(dates);
- [base_lvl , base_lvlind] = GetLevel(fname,base_var);
- [base_lat , base_latind] = GetLatitude( base_var,TmpJ,VelJ);
- [base_lon , base_lonind] = GetLongitude(base_var,TmpI,VelI);
+ [base_lvl , base_lvlind] = GetLevel(fname, base_var);
+ [base_lat, base_lon, base_latind, base_lonind] = GetLatLon(fname, base_var);
disp('Getting information for the ''comparison'' variable.')
- comp_var = GetVarString(pinfo_in.vars, base_var);
- [comp_lvl, comp_lvlind] = GetLevel(fname,comp_var,base_lvl);
- [comp_lat, comp_latind] = GetLatitude( comp_var,TmpJ,VelJ, base_lat);
- [comp_lon, comp_lonind] = GetLongitude(comp_var,TmpI,VelI, base_lon);
+ comp_var = GetVarString(pinfo_in.vars, base_var);
+ [comp_lvl, comp_lvlind] = GetLevel(fname, comp_var, base_lvl);
+ [comp_lat, comp_lon, comp_latind, comp_lonind] = GetLatLon(fname, comp_var, base_latind, base_lonind);
pinfo.model = model;
pinfo.fname = fname;
+ pinfo.times = dates;
pinfo.base_var = base_var;
pinfo.comp_var = comp_var;
pinfo.base_time = base_time;
@@ -174,6 +174,7 @@
copy = length(copyindices);
pinfo.model = model;
+ pinfo.times = dates;
pinfo.var_names = pgvar;
%pinfo.truth_file = [];
%pinfo.prior_file = pinfo.prior_file;
@@ -217,6 +218,7 @@
pinfo.model = model;
pinfo.fname = fname;
+ pinfo.times = dates;
pinfo.var1name = var1;
pinfo.var2name = var2;
pinfo.var3name = var3;
@@ -285,6 +287,7 @@
% Determine a sensible default.
if (nargin == 2),
time = deftime;
+ tindex = find(times == deftime);
else
if (ntimes < 2)
tindex = round(ntimes/2);
Modified: DART/trunk/matlab/PlotCorrel.m
===================================================================
--- DART/trunk/matlab/PlotCorrel.m 2011-03-30 15:23:18 UTC (rev 4832)
+++ DART/trunk/matlab/PlotCorrel.m 2011-03-30 17:38:38 UTC (rev 4833)
@@ -36,7 +36,6 @@
% Get some file-specific information.
model = nc_attget(pinfo.fname,nc_global,'model');
-timeunits = nc_attget(pinfo.fname,'time','units');
varinfo = nc_getvarinfo(pinfo.fname, pinfo.base_var);
for i = 1:length(varinfo.Dimension)
@@ -109,7 +108,6 @@
clf;
- times = nc_varget(pinfo.fname, 'time');
switch lower(pinfo.comp_var)
case {'ps','t'}
lats = nc_varget(pinfo.fname,'TmpJ'); ny = length(lats);
@@ -167,8 +165,6 @@
clf;
- times = nc_varget(pinfo.fname, 'time');
-
% Get the plotting lat/lon for the comparison variable.
% This is the variable that has a spatial extent.
@@ -256,8 +252,6 @@
clf;
- times = nc_varget(pinfo.fname,'time');
-
switch lower(pinfo.comp_var)
case {'u'}
lats = nc_varget(pinfo.fname,'YC'); ny = length(lats);
@@ -320,7 +314,6 @@
lats = nc_varget(pinfo.fname,'lat'); ny = length(lats);
lons = nc_varget(pinfo.fname,'lon'); nx = length(lons);
- times = nc_varget(pinfo.fname,'time');
latunits = nc_attget(pinfo.fname,'lat','units');
lonunits = nc_attget(pinfo.fname,'lon','units');
Modified: DART/trunk/matlab/PlotVarVarCorrel.m
===================================================================
--- DART/trunk/matlab/PlotVarVarCorrel.m 2011-03-30 15:23:18 UTC (rev 4832)
+++ DART/trunk/matlab/PlotVarVarCorrel.m 2011-03-30 17:38:38 UTC (rev 4833)
@@ -23,7 +23,7 @@
% pinfo.state_var_index = 1;
% PlotVarVarCorrel( pinfo )
-%% DART software - Copyright \xA9 2004 - 2010 UCAR. This open source software is
+%% DART software - Copyright � 2004 - 2010 UCAR. This open source software is
% provided by UCAR, "as is", without charge, subject to all terms of use at
% http://www.image.ucar.edu/DAReS/DART/DART_download
%
@@ -33,7 +33,7 @@
% $Revision$
% $Date$
-if (exist(pinfo.fname) ~= 2), error('%s does not exist.',pinfo.fname), end
+if (exist(pinfo.fname,'file') ~= 2), error('%s does not exist.',pinfo.fname), end
% Get some file-specific information.
model = nc_attget(pinfo.fname, nc_global, 'model');
@@ -43,7 +43,7 @@
switch lower(model)
- case {'fms_bgrid','pe2lyr'}
+ case {'fms_bgrid','pe2lyr','wrf'}
clf;
@@ -54,24 +54,22 @@
nmembers = size(comp_mem,2);
correl = ens_correl(base_mem, pinfo.base_tmeind, comp_mem);
- times = nc_varget(pinfo.fname,'time');
subplot(2,1,1)
PlotLocator(pinfo)
subplot(2,1,2)
- plot(times,correl);
+ plot(pinfo.times,correl);
s1 = sprintf('%s Correlation of ''%s'', T = %d, lvl = %d, lat = %.2f, lon=%.2f', ...
model, pinfo.base_var, pinfo.base_time, pinfo.base_lvl, ...
pinfo.base_lat, pinfo.base_lon);
- s2 = sprintf('with ''%s'', lvl = %d, lat = %.2f, lon= %.2f, %d ensemble members -- %s', ...
- pinfo.comp_var, pinfo.comp_lvl, pinfo.comp_lat, pinfo.comp_lon, ...
- nmembers, pinfo.fname);
+ s2 = sprintf('with ''%s'', lvl = %d, lat = %.2f, lon= %.2f, %d ensemble members', ...
+ pinfo.comp_var, pinfo.comp_lvl, pinfo.comp_lat, pinfo.comp_lon, nmembers);
- title({s1,s2},'interpreter','none','fontweight','bold')
- xlabel(sprintf('time (%s) %d timesteps',timeunits, num_times))
+ title({s1,s2,pinfo.fname},'interpreter','none','fontweight','bold')
+ datetick('x','yyyymmmdd HH:MM')
ylabel('correlation')
% call out the time index in question, and put a corr==0 reference line.
Modified: DART/trunk/matlab/ens_correl.m
===================================================================
--- DART/trunk/matlab/ens_correl.m 2011-03-30 15:23:18 UTC (rev 4832)
+++ DART/trunk/matlab/ens_correl.m 2011-03-30 17:38:38 UTC (rev 4833)
@@ -14,16 +14,17 @@
% Extract sample of base at base time
-base_ens = base_var(base_time, :);
+base_ens = base_var(base_time, :);
-% size(base_var)
-% size(base_time)
-% size(state_var)
-% size(base_ens)
+% preallocate space for result
+num_times = size(state_var, 1);
+corr = zeros(num_times,1);
+corr(:) = NaN;
+
% Loop through time to correlate with the other ensemble series
-num_times = size(state_var, 1);
for i = 1:num_times
x = corrcoef(base_ens, state_var(i, :));
corr(i) = x(1, 2);
-end
+end
+
Modified: DART/trunk/matlab/plot_correl.m
===================================================================
--- DART/trunk/matlab/plot_correl.m 2011-03-30 15:23:18 UTC (rev 4832)
+++ DART/trunk/matlab/plot_correl.m 2011-03-30 17:38:38 UTC (rev 4833)
@@ -28,6 +28,15 @@
if ( exist(diagn_file,'file') ~= 2 ), error('%s does not exist.',diagn_file); end
+% check to make sure they are using a file with some ensemble members.
+
+diminfo = nc_getdiminfo(diagn_file,'copy');
+num_copies = diminfo.Length; % determine # of ensemble members
+
+if (num_copies <= 3)
+ error('Sorry -- %s does not have enough ensemble members to correlate.',diagn_file)
+end
+
pinfo = CheckModel(diagn_file);
pinfo.fname = diagn_file;
@@ -118,4 +127,4 @@
end
PlotCorrel( pinfo );
-clear inputstring inds str1 vrbl vrbl_inds
+clear inputstring inds str1 vrbl vrbl_inds diminfo num_copies
Modified: DART/trunk/matlab/plot_var_var_correl.m
===================================================================
--- DART/trunk/matlab/plot_var_var_correl.m 2011-03-30 15:23:18 UTC (rev 4832)
+++ DART/trunk/matlab/plot_var_var_correl.m 2011-03-30 17:38:38 UTC (rev 4833)
@@ -31,36 +31,35 @@
error('Sorry -- %s does not have enough ensemble members to correlate.',fname)
end
-vars = CheckModel(fname); % also gets default values for this file.
-pinfo.fname = fname;
+pinfo = CheckModel(fname); % also gets default values for this file.
-switch lower(vars.model)
+switch lower(pinfo.model)
case {'9var','lorenz_63','lorenz_84','lorenz_96','lorenz_04', ...
'forced_lorenz_96','ikeda'}
inputstring = input( ...
sprintf('Input index for base variable (between %d and %d, inclusive) ', ...
- vars.min_state_var, vars.max_state_var), 's');
+ pinfo.min_state_var, pinfo.max_state_var), 's');
pinfo.base_var_index = str2num(deblank(inputstring));
inputstring = input( ...
sprintf('Input time index for base point (between 1 and %d, inclusive) ', ...
- vars.time_series_length),'s');
+ pinfo.time_series_length),'s');
pinfo.base_time = str2num(deblank(inputstring));
inputstring = input( ...
sprintf('Input variable index for correlation (between %d and %d, inclusive) ', ...
- vars.min_state_var, vars.max_state_var), 's');
+ pinfo.min_state_var, pinfo.max_state_var), 's');
pinfo.state_var_index = str2num(deblank(inputstring));
- pinfo.base_var = vars.def_var;
- pinfo.state_var = vars.def_var;
+ pinfo.base_var = pinfo.def_var;
+ pinfo.state_var = pinfo.def_var;
case {'lorenz_96_2scale'}
fprintf('Your choice of variables is ''X'' or ''Y''\n')
- fprintf('''X'' can range from %d to %d\n', vars.min_X_var, vars.max_X_var)
- fprintf('''Y'' can range from %d to %d\n', vars.min_Y_var, vars.max_Y_var)
+ fprintf('''X'' can range from %d to %d\n', pinfo.min_X_var, pinfo.max_X_var)
+ fprintf('''Y'' can range from %d to %d\n', pinfo.min_Y_var, pinfo.max_Y_var)
% parsing the result of this one is a bit tricky.
inputstring = input('Input base variable and index i.e. X 5\n','s');
@@ -68,7 +67,7 @@
inputstring = input( ...
sprintf('Input time index for base point (between 1 and %d, inclusive) \n', ...
- vars.time_series_length),'s');
+ pinfo.time_series_length),'s');
pinfo.base_time = str2num(deblank(inputstring));
% parsing the result of this one is a bit tricky.
@@ -78,18 +77,18 @@
case {'simple_advection'}
disp('Your choice of variables are:')
- disp(vars.vars)
+ disp(pinfo.vars)
fprintf('the indices (locations) can range from %d to %d, inclusive\n', ...
- vars.min_state_var, vars.max_state_var)
+ pinfo.min_state_var, pinfo.max_state_var)
str1 = sprintf('Input base variable and index i.e. %s %d\n', ...
- vars.def_var,vars.def_state_vars(1));
+ pinfo.def_var,pinfo.def_state_vars(1));
inputstring = input(str1,'s');
[pinfo.base_var, pinfo.base_var_index] = ParseAlphaNumerics(inputstring);
inputstring = input( ...
sprintf('Input time index for base point (between 1 and %d, inclusive) ', ...
- vars.time_series_length),'s');
+ pinfo.time_series_length),'s');
pinfo.base_time = str2num(deblank(inputstring));
inputstring = input('Input variable and index for correlation \n','s');
@@ -103,6 +102,10 @@
pinfo = GetCamInfo(pinfo, fname, 'PlotVarVarCorrel');
+ case 'wrf'
+
+ pinfo = GetWRFInfo(pinfo, fname, 'PlotVarVarCorrel');
+
case 'pe2lyr'
pinfo = GetPe2lyrInfo(pinfo, fname, 'PlotVarVarCorrel');
@@ -113,9 +116,11 @@
otherwise
- error('model %s not implemented yet', vars.model)
+ error('model %s not implemented yet', pinfo.model)
end
+pinfo
+
PlotVarVarCorrel( pinfo )
-clear vars inputstring
+clear inputstring diminfo num_copies
More information about the Dart-dev
mailing list