[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