[Dart-dev] [6325] DART/trunk/models/CESM/matlab: Removing files that are actually from POP.
nancy at ucar.edu
nancy at ucar.edu
Mon Jul 29 13:48:43 MDT 2013
Revision: 6325
Author: thoar
Date: 2013-07-29 13:48:43 -0600 (Mon, 29 Jul 2013)
Log Message:
-----------
Removing files that are actually from POP.
These have never been appropriate for CESM.
models/POP/matlab has the maintained versions of all of these.
Removed Paths:
-------------
DART/trunk/models/CESM/matlab/Check_pop_to_dart.m
DART/trunk/models/CESM/matlab/Check_ud.m
DART/trunk/models/CESM/matlab/plot_evolution.m
DART/trunk/models/CESM/matlab/plot_global_grid.m
DART/trunk/models/CESM/matlab/plot_grid.m
DART/trunk/models/CESM/matlab/plot_interp_diffs.m
DART/trunk/models/CESM/matlab/plot_rmse_xxx_evolution.m
DART/trunk/models/CESM/matlab/plot_spread_xxx_evolution.m
DART/trunk/models/CESM/matlab/two_experiments_evolution.m
-------------- next part --------------
Deleted: DART/trunk/models/CESM/matlab/Check_pop_to_dart.m
===================================================================
--- DART/trunk/models/CESM/matlab/Check_pop_to_dart.m 2013-07-29 16:49:33 UTC (rev 6324)
+++ DART/trunk/models/CESM/matlab/Check_pop_to_dart.m 2013-07-29 19:48:43 UTC (rev 6325)
@@ -1,161 +0,0 @@
-function [dart pop] = Check_pop_to_dart(popfile,dartfile)
-%% Check_pop_to_dart : check pop_to_dart.f90 ... the conversion of a POP restart to a DART state vector file.
-%
-% popfile = 'pop.r.nc';
-% dartfile = 'dart_ics';
-% x = Check_pop_to_dart(popfile, dartfile);
-%
-% popfile = '~DART/models/POP/work/cx3.dart.001.pop.r.0002-01-01-00000.nc';
-% dartfile = '~DART/models/POP/work/perfect_ics';
-% [dart pop] = Check_pop_to_dart(popfile, dartfile);
-
-%% DART software - Copyright 2004 - 2013 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
-%
-% DART $Id$
-
-% Read the original POP file values.
-if (exist(popfile,'file') ~= 2)
- error('POP file %s does not exist.',popfile)
-end
-if (exist(dartfile,'file') ~= 2)
- error('DART file %s does not exist.',dartfile)
-end
-
-iyear = nc_attget(popfile,nc_global,'iyear');
-imonth = nc_attget(popfile,nc_global,'imonth');
-iday = nc_attget(popfile,nc_global,'iday');
-ihour = nc_attget(popfile,nc_global,'ihour');
-iminute = nc_attget(popfile,nc_global,'iminute');
-isecond = nc_attget(popfile,nc_global,'isecond');
-
-fprintf('POP year month day hour minute second %d %d %d %d %d %d\n', ...
- iyear,imonth,iday,ihour,iminute,isecond);
-
-% The nc_varget() function returns the variables with the fastest
-% varying dimension on the right. This is opposite to the Fortran
-% convention of the fastest varying dimension on the left ... so
-% one of the variables must be permuted in order to be compared.
-
-S = nc_varget(popfile, 'SALT_CUR'); pop.S = permute(S, [3 2 1]);
-T = nc_varget(popfile, 'TEMP_CUR'); pop.T = permute(T, [3 2 1]);
-U = nc_varget(popfile, 'UVEL_CUR'); pop.U = permute(U, [3 2 1]);
-V = nc_varget(popfile, 'VVEL_CUR'); pop.V = permute(V, [3 2 1]);
-PSURF = nc_varget(popfile, 'PSURF_CUR'); pop.PSURF = permute(PSURF, [2 1]);
-
-disp(sprintf('pop.PSURF min/max are %0.8g %0.8g',min(pop.PSURF(:)),max(pop.PSURF(:))))
-
-[nx ny nz] = size(pop.U);
-fprintf('vert dimension size is %d\n',nz)
-fprintf('N-S dimension size is %d\n',ny)
-fprintf('E-W dimension size is %d\n',nx)
-
-modelsize = nx*ny*nz;
-
-% filesize = S,T,U,V * (nx*ny*nz) + SSH * (nx*ny)
-storage = 8;
-size2d = nx*ny;
-size3d = nx*ny*nz;
-n2ditems = 1*size2d;
-n3ditems = 4*size3d;
-rec1size = 4+(4+4)+4; % time stamps ...
-rec2size = 4+(n3ditems*storage + n2ditems*storage)+4;
-
-fsize = rec1size + rec2size;
-disp(sprintf('with a modelsize of %d the file size should be %d bytes', ...
- modelsize,fsize))
-
-% Open and read timetag for state
-fid = fopen(dartfile,'rb','ieee-le');
-trec1 = fread(fid,1,'int32');
-seconds = fread(fid,1,'int32');
-days = fread(fid,1,'int32');
-trecN = fread(fid,1,'int32');
-
-fprintf('need to know POP calendar for better comparison.\n', days,seconds);
-fprintf('DART days seconds %d %d\n', days,seconds);
-
-if (trec1 ~= trecN)
- error('first record mismatch')
-end
-
-% Successively read state vector variables.
-rec1 = fread(fid, 1, 'int32');
-dart.S = get_data(fid, [nx ny nz], 'float64');
-dart.T = get_data(fid, [nx ny nz], 'float64');
-dart.U = get_data(fid, [nx ny nz], 'float64');
-dart.V = get_data(fid, [nx ny nz], 'float64');
-dart.SSH = get_data(fid, [nx ny ], 'float64');
-recN = fread(fid, 1, 'int32');
-fclose(fid);
-
-fprintf(' shape of DART variables is %d \n',size(dart.S))
-
-% The POP restart file has PSURF ... DART drags around SSH
-% SSH = psurf/980.6;
-
-dart.PSURF = dart.SSH * 980.6;
-
-disp(sprintf('PSURF min/max are %0.8g %0.8g',min(dart.PSURF(:)),max(dart.PSURF(:))))
-disp(sprintf('SSH min/max are %0.8g %0.8g',min(dart.SSH(:)),max(dart.SSH(:))))
-
-if (rec1 ~= recN)
- error('second record mismatch')
-end
-
-dart.dartfile = dartfile;
-dart.seconds = seconds;
-dart.days = days;
-
-% Find the range of the mismatch
-
-d = pop.S - dart.S; disp(sprintf('S diffs are %0.8g %0.8g',min(d(:)),max(d(:))))
-d = pop.T - dart.T; disp(sprintf('T diffs are %0.8g %0.8g',min(d(:)),max(d(:))))
-d = pop.U - dart.U; disp(sprintf('U diffs are %0.8g %0.8g',min(d(:)),max(d(:))))
-d = pop.V - dart.V; disp(sprintf('V diffs are %0.8g %0.8g',min(d(:)),max(d(:))))
-d = pop.PSURF - dart.PSURF; disp(sprintf('PSURF diffs are %0.8g %0.8g',min(d(:)),max(d(:))))
-
-% As an added bonus, we create an 'assim_model_state_ic' file with an
-% advance-to-time one day in the future.
-% Add something known to each state variable to check dart_to_pop.f90
-
-S1 = dart.S + 1.0;
-T1 = dart.T + 2.0;
-U1 = dart.U + 3.0;
-V1 = dart.V + 4.0;
-SSH1 = dart.SSH + 5.0;
-
-datvec = [S1(:); T1(:); U1(:); V1(:); SSH1(:)];
-clear S1 T1 U1 V1 SSH1
-
-fid = fopen('test.ic','wb','ieee-le');
-% Write the 'advance_to_time' FIRST
-fwrite(fid, trec1,'int32');
-fwrite(fid,seconds,'int32');
-fwrite(fid, days+1,'int32');
-fwrite(fid, trecN,'int32');
-
-% Write the 'model_state_time' (close to the data)
-fwrite(fid, trec1,'int32');
-fwrite(fid,seconds,'int32');
-fwrite(fid, days,'int32');
-fwrite(fid, trecN,'int32');
-
-% Write the (modified) model state ...
-fwrite(fid, rec1, 'int32');
-fwrite(fid, datvec, 'float64');
-fwrite(fid, recN, 'int32');
-fclose(fid);
-
-% That's all folks ...
-
-function B = get_data(fid, shape, typestr)
-A = fread(fid, prod(shape), typestr);
-B = reshape(A, shape);
-
-% <next few lines under version control, do not edit>
-% $URL$
-% $Revision$
-% $Date$
-
Deleted: DART/trunk/models/CESM/matlab/Check_ud.m
===================================================================
--- DART/trunk/models/CESM/matlab/Check_ud.m 2013-07-29 16:49:33 UTC (rev 6324)
+++ DART/trunk/models/CESM/matlab/Check_ud.m 2013-07-29 19:48:43 UTC (rev 6325)
@@ -1,166 +0,0 @@
-function [dart pop] = Check_ud(popfile,dartfile)
-%% Check_ud : check pop_to_dart.f90 ... the conversion of a POP restart to a DART state vector file.
-%
-% popfile = 'pop.r.nc'
-% dartfile = 'dart_ics';
-% x = Check_pop_to_dart(popfile, dartfile);
-%
-% popfile = '~DART/models/POP/work/cx3.dart.001.pop.r.0002-01-01-00000.nc';
-% dartfile = '~DART/models/POP/work/perfect_ics';
-% [dart pop] = Check_pop_to_dart(popfile, dartfile);
-
-%% DART software - Copyright 2004 - 2013 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
-%
-% DART $Id$
-
-% Read the original POP file values.
-if (exist(popfile,'file') ~= 2)
- error('POP file %s does not exist.',popfile)
-end
-if (exist(dartfile,'file') ~= 2)
- error('DART file %s does not exist.',dartfile)
-end
-
-iyear = nc_attget(popfile,nc_global,'iyear');
-imonth = nc_attget(popfile,nc_global,'imonth');
-iday = nc_attget(popfile,nc_global,'iday');
-ihour = nc_attget(popfile,nc_global,'ihour');
-iminute = nc_attget(popfile,nc_global,'iminute');
-isecond = nc_attget(popfile,nc_global,'isecond');
-
-fprintf('POP year month day hour minute second %d %d %d %d %d %d\n', ...
- iyear,imonth,iday,ihour,iminute,isecond);
-
-pop.S = nc_varget(popfile, 'SALT_CUR');
-pop.T = nc_varget(popfile, 'TEMP_CUR');
-pop.U = nc_varget(popfile, 'UVEL_CUR');
-pop.V = nc_varget(popfile, 'VVEL_CUR');
-pop.PSURF = nc_varget(popfile, 'PSURF_CUR');
-
-[nz ny nx] = size(pop.U);
-fprintf('vert dimension size is %d\n',nz)
-fprintf('N-S dimension size is %d\n',ny)
-fprintf('E-W dimension size is %d\n',nx)
-
-modelsize = nz*ny*nx;
-
-% filesize = S,T,U,V * (nx*ny*nz) + SSH * (nx*ny)
-storage = 8;
-size2d = nx*ny;
-size3d = nx*ny*nz;
-n2ditems = 1*size2d;
-n3ditems = 4*size3d;
-rec1size = 4+(4+4)+4; % time stamps ...
-rec2size = 4+(n3ditems*storage + n2ditems*storage)+4;
-
-fsize = rec1size + rec2size;
-disp(sprintf('with a modelsize of %d the file size should be %d bytes', ...
- modelsize,fsize))
-
-% Open and read timetag for state
-fid = fopen(dartfile,'rb','ieee-le');
-trec1 = fread(fid,1,'int32');
-seconds = fread(fid,1,'int32');
-days = fread(fid,1,'int32');
-trecN = fread(fid,1,'int32');
-
-fprintf('need to know POP calendar for better comparison.\n', days,seconds);
-fprintf('DART days seconds %d %d\n', days,seconds);
-
-if (trec1 ~= trecN)
- error('first record mismatch')
-end
-
-% Successively read state vector variables.
-rec1 = fread(fid, 1, 'int32');
-dart.S = get_3D_permuted(fid, [nx ny nz], 'float64');
-dart.T = get_3D_permuted(fid, [nx ny nz], 'float64');
-dart.U = get_3D_permuted(fid, [nx ny nz], 'float64');
-dart.V = get_3D_permuted(fid, [nx ny nz], 'float64');
-dart.SSH = get_2D_permuted(fid, [nx ny ], 'float64');
-recN = fread(fid, 1, 'int32');
-fclose(fid);
-
-fprintf(' shape of DART variables is %d \n',size(dart.S))
-
-% The POP restart file has PSURF ... DART drags around SSH
-% SSH = psurf/980.6;
-
-dart.PSURF = dart.SSH * 980.6;
-
-if (rec1 ~= recN)
- error('second record mismatch')
-end
-
-dart.dartfile = dartfile;
-dart.seconds = seconds;
-dart.days = days;
-
-% Find the range of the mismatch
-
-d = pop.S - dart.S; disp(sprintf('S diffs are %0.8g %0.8g',min(d(:)),max(d(:))))
-d = pop.T - dart.T; disp(sprintf('T diffs are %0.8g %0.8g',min(d(:)),max(d(:))))
-d = pop.U - dart.U; disp(sprintf('U diffs are %0.8g %0.8g',min(d(:)),max(d(:))))
-d = pop.V - dart.V; disp(sprintf('V diffs are %0.8g %0.8g',min(d(:)),max(d(:))))
-d = pop.PSURF - dart.PSURF; disp(sprintf('PSURF diffs are %0.8g %0.8g',min(d(:)),max(d(:))))
-
-% As an added bonus, we create an 'assim_model_state_ic' file with an
-% advance-to-time one day in the future.
-
-% Open and read timetag for state
-fid = fopen(dartfile,'rb','ieee-le');
-trec1 = fread(fid,1,'int32');
-seconds = fread(fid,1,'int32');
-days = fread(fid,1,'int32');
-trecN = fread(fid,1,'int32');
-
-% read state vector variables.
-rec1 = fread(fid, 1, 'int32');
-datvec = fread(fid, n3ditems+n2ditems, 'float64');
-recN = fread(fid, 1, 'int32');
-fclose(fid);
-
-% Open and write advance_to_time
-fid = fopen('test.ic','wb','ieee-le');
-fwrite(fid, trec1,'int32');
-fwrite(fid,seconds,'int32');
-fwrite(fid, days,'int32');
-fwrite(fid, trecN,'int32');
-
-fwrite(fid, trec1,'int32');
-fwrite(fid,seconds,'int32');
-fwrite(fid, days+1,'int32');
-fwrite(fid, trecN,'int32');
-
-% read state vector variables.
-fwrite(fid, rec1, 'int32');
-fwrite(fid, datvec, 'float64');
-fwrite(fid, recN, 'int32');
-fclose(fid);
-
-
-
-% The nc_varget() function returns the variables with the fastest
-% varying dimension on the right. This is opposite to the Fortran
-% convention of the fastest varying dimension on the left ... so
-% one of the variables must be permuted in order to be compared.
-
-function C = get_3D_permuted(fid, shape, typestr)
-datasize = prod(shape);
-A = fread(fid, prod(shape), typestr);
-B = reshape(A, shape);
-C = permute(B, [3 2 1]);
-
-function C = get_2D_permuted(fid, shape, typestr)
-datasize = prod(shape);
-A = fread(fid, prod(shape), typestr);
-B = reshape(A, shape);
-C = permute(B, [2 1]);
-
-% <next few lines under version control, do not edit>
-% $URL$
-% $Revision$
-% $Date$
-
Deleted: DART/trunk/models/CESM/matlab/plot_evolution.m
===================================================================
--- DART/trunk/models/CESM/matlab/plot_evolution.m 2013-07-29 16:49:33 UTC (rev 6324)
+++ DART/trunk/models/CESM/matlab/plot_evolution.m 2013-07-29 19:48:43 UTC (rev 6325)
@@ -1,517 +0,0 @@
-function plotdat = plot_evolution(fname, copystring, varargin)
-%% plot_evolution plots the temporal evolution of the observation-space quantities for all possible levels, all possible variables.
-% Part of the observation-space diagnostics routines.
-%
-% 'obs_diag' produces a netcdf file containing the diagnostics.
-% obs_diag condenses the obs_seq.final information into summaries for a few specified
-% regions - on a level-by-level basis.
-%
-% USAGE: plotdat = plot_evolution(fname, copystring [,varargin]);
-%
-% fname : netcdf file produced by 'obs_diag'
-% copystring : 'copy' string == quantity of interest. These
-% can be any of the ones available in the netcdf
-% file 'CopyMetaData' variable.
-% (ncdump -v CopyMetaData obs_diag_output.nc)
-% obstypestring : 'observation type' string. Optional.
-% Must match something in the netcdf
-% file 'ObservationTypes' variable.
-% (ncdump -v ObservationTypes obs_diag_output.nc)
-% If specified, only this observation type will be plotted.
-% If not specified, all observation types incluced in the netCDF file
-% will be plotted.
-%
-% OUTPUT: two files will result for each observation type plotted. One is a
-% postscript file containing a page for each level - all regions.
-% The other file is a simple text file containing summary information
-% about how many observations were assimilated, how many were available, etc.
-% Both of these filenames contain the observation type as part of the name.
-%
-% EXAMPLE 1 - plot the evolution of the bias for all observation types, all levels
-%
-% fname = 'obs_diag_output.nc'; % netcdf file produced by 'obs_diag'
-% copystring = 'bias'; % 'copy' string == quantity of interest
-% plotdat = plot_evolution(fname, copystring);
-%
-%
-% EXAMPLE 2 - plot the evolution of the rmse for just the mooring temperature observations
-% This requires that the 'MOORING_TEMPERATURE' is one of the known observation
-% types in the netCDF file.
-%
-% fname = 'obs_diag_output.nc'; % netcdf file produced by 'obs_diag'
-% copystring = 'rmse'; % 'copy' string == quantity of interest
-% plotdat = plot_evolution(fname, copystring, 'MOORING_TEMPERATURE');
-
-%% DART software - Copyright 2004 - 2013 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
-%
-% DART $Id$
-
-if nargin == 2
- nvars = 0;
-elseif nargin == 3
- varname = varargin{1};
- nvars = 1;
-else
- error('wrong number of arguments ... ')
-end
-
-
-if (exist(fname,'file') ~= 2)
- error('file/fname <%s> does not exist',fname)
-end
-
-% Harvest plotting info/metadata from netcdf file.
-
-plotdat.fname = fname;
-plotdat.copystring = copystring;
-plotdat.bincenters = nc_varget(fname,'time');
-plotdat.binedges = nc_varget(fname,'time_bounds');
-plotdat.mlevel = nc_varget(fname,'mlevel');
-plotdat.plevel = nc_varget(fname,'plevel');
-plotdat.plevel_edges = nc_varget(fname,'plevel_edges');
-plotdat.hlevel = nc_varget(fname,'hlevel');
-plotdat.hlevel_edges = nc_varget(fname,'hlevel_edges');
-plotdat.ncopies = length(nc_varget(fname,'copy'));
-plotdat.nregions = length(nc_varget(fname,'region'));
-plotdat.region_names = nc_varget(fname,'region_names');
-
-if (plotdat.nregions == 1)
- plotdat.region_names = deblank(plotdat.region_names');
-end
-
-plotdat.binseparation = nc_attget(fname, nc_global, 'bin_separation');
-plotdat.binwidth = nc_attget(fname, nc_global, 'bin_width');
-time_to_skip = nc_attget(fname, nc_global, 'time_to_skip');
-plotdat.lonlim1 = nc_attget(fname, nc_global, 'lonlim1');
-plotdat.lonlim2 = nc_attget(fname, nc_global, 'lonlim2');
-plotdat.latlim1 = nc_attget(fname, nc_global, 'latlim1');
-plotdat.latlim2 = nc_attget(fname, nc_global, 'latlim2');
-plotdat.biasconv = nc_attget(fname, nc_global, 'bias_convention');
-
-% Coordinate between time types and dates
-
-calendar = nc_attget(fname,'time','calendar');
-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));
-skip_seconds = time_to_skip(4)*3600 + time_to_skip(5)*60 + time_to_skip(6);
-iskip = time_to_skip(3) + skip_seconds/86400;
-
-plotdat.bincenters = plotdat.bincenters + timeorigin;
-plotdat.binedges = plotdat.binedges + timeorigin;
-plotdat.Nbins = length(plotdat.bincenters);
-plotdat.toff = plotdat.bincenters(1) + iskip;
-
-% set up a structure with all static plotting components
-
-plotdat.linewidth = 2.0;
-
-if (nvars == 0)
- [plotdat.allvarnames, plotdat.allvardims] = get_varsNdims(fname);
- [plotdat.varnames, plotdat.vardims] = FindTemporalVars(plotdat);
- plotdat.nvars = length(plotdat.varnames);
-else
- plotdat.varnames{1} = varname;
- plotdat.nvars = nvars;
-end
-
-
-plotdat.copyindex = get_copy_index(fname,copystring);
-plotdat.Npossindex = get_copy_index(fname,'Nposs');
-plotdat.Nusedindex = get_copy_index(fname,'Nused');
-plotdat.NQC4index = get_copy_index(fname,'N_DARTqc_4');
-plotdat.NQC5index = get_copy_index(fname,'N_DARTqc_5');
-plotdat.NQC6index = get_copy_index(fname,'N_DARTqc_6');
-plotdat.NQC7index = get_copy_index(fname,'N_DARTqc_7');
-
-%----------------------------------------------------------------------
-% Loop around (time-copy-level-region) observation types
-%----------------------------------------------------------------------
-
-for ivar = 1:plotdat.nvars
-
- % create the variable names of interest.
-
- plotdat.myvarname = plotdat.varnames{ivar};
- plotdat.guessvar = sprintf('%s_guess',plotdat.varnames{ivar});
- plotdat.analyvar = sprintf('%s_analy',plotdat.varnames{ivar});
-
- % remove any existing postscript file - will simply append each
- % level as another 'page' in the .ps file.
-
- psfname = sprintf('%s_%s_evolution.ps',plotdat.varnames{ivar},plotdat.copystring);
- disp(sprintf('Removing %s from the current directory.',psfname))
- system(sprintf('rm %s',psfname));
-
- % remove any existing log file -
-
- lgfname = sprintf('%s_%s_obscount.txt',plotdat.varnames{ivar},plotdat.copystring);
- disp(sprintf('Removing %s from the current directory.',lgfname))
- system(sprintf('rm %s',lgfname));
- logfid = fopen(lgfname,'wt');
- fprintf(logfid,'%s\n',lgfname);
-
- % get appropriate vertical coordinate variable
-
- guessdims = nc_var_dims(fname, plotdat.guessvar);
- analydims = nc_var_dims(fname, plotdat.analyvar);
-
- if ( findstr('surface',guessdims{3}) > 0 )
- plotdat.level = 1;
- plotdat.level_units = 'surface';
- elseif ( findstr('undef',guessdims{3}) > 0 )
- plotdat.level = 1;
- plotdat.level_units = 'undefined';
- else
- plotdat.level = nc_varget(fname, guessdims{3});
- plotdat.level_units = nc_attget(fname, guessdims{3}, 'units');
- end
- plotdat.nlevels = length(plotdat.level);
-
- % Here is the tricky part. Singleton dimensions are auto-squeezed ...
- % single levels, single regions ...
-
- guess_raw = nc_varget(fname, plotdat.guessvar);
- guess = reshape(guess_raw, plotdat.Nbins, plotdat.ncopies, ...
- plotdat.nlevels, plotdat.nregions);
-
- analy_raw = nc_varget(fname, plotdat.analyvar);
- analy = reshape(analy_raw, plotdat.Nbins, plotdat.ncopies, ...
- plotdat.nlevels, plotdat.nregions);
-
- % check to see if there is anything to plot
- nextrap = sum(guess(:,plotdat.NQC4index ,:,:)) + ...
- sum(guess(:,plotdat.NQC6index ,:,:));
- nposs = sum(guess(:,plotdat.Npossindex, :,:)) - nextrap;
-
- if ( sum(nposs(:)) < 1 )
- disp(sprintf('%s no obs for %s... skipping', plotdat.varnames{ivar}))
- continue
- end
-
- for ilevel = 1:plotdat.nlevels
-
- fprintf(logfid,'\nlevel %d %f %s\n',ilevel,plotdat.level(ilevel),plotdat.level_units);
- plotdat.ges_Nqc4 = guess(:,plotdat.NQC4index ,ilevel,:);
- plotdat.anl_Nqc4 = analy(:,plotdat.NQC4index ,ilevel,:);
- fprintf(logfid,'DART QC == 4, prior/post %d %d\n',sum(plotdat.ges_Nqc4(:)), ...
- sum(plotdat.anl_Nqc4(:)));
-
- plotdat.ges_Nqc5 = guess(:,plotdat.NQC5index ,ilevel,:);
- plotdat.anl_Nqc5 = analy(:,plotdat.NQC5index ,ilevel,:);
- fprintf(logfid,'DART QC == 5, prior/post %d %d\n',sum(plotdat.ges_Nqc5(:)), ...
- sum(plotdat.anl_Nqc5(:)));
-
- plotdat.ges_Nqc6 = guess(:,plotdat.NQC6index ,ilevel,:);
- plotdat.anl_Nqc6 = analy(:,plotdat.NQC6index ,ilevel,:);
- fprintf(logfid,'DART QC == 6, prior/post %d %d\n',sum(plotdat.ges_Nqc6(:)), ...
- sum(plotdat.anl_Nqc6(:)));
-
- plotdat.ges_Nqc7 = guess(:,plotdat.NQC7index ,ilevel,:);
- plotdat.anl_Nqc7 = analy(:,plotdat.NQC7index ,ilevel,:);
- fprintf(logfid,'DART QC == 7, prior/post %d %d\n',sum(plotdat.ges_Nqc7(:)), ...
- sum(plotdat.anl_Nqc7(:)));
-
- plotdat.ges_Nposs = guess(:,plotdat.Npossindex, ilevel,:);
- plotdat.anl_Nposs = analy(:,plotdat.Npossindex, ilevel,:);
- fprintf(logfid,'# obs , prior/post %d %d\n',sum(plotdat.ges_Nposs(:)), ...
- sum(plotdat.anl_Nposs(:)));
-
- plotdat.ges_Nposs = plotdat.ges_Nposs - plotdat.ges_Nqc4 - plotdat.ges_Nqc6;
- plotdat.anl_Nposs = plotdat.anl_Nposs - plotdat.anl_Nqc4 - plotdat.anl_Nqc6;
- fprintf(logfid,'# obs poss, prior/post %d %d\n',sum(plotdat.ges_Nposs(:)), ...
- sum(plotdat.anl_Nposs(:)));
-
- plotdat.ges_Nused = guess(:,plotdat.Nusedindex, ilevel,:);
- plotdat.anl_Nused = analy(:,plotdat.Nusedindex, ilevel,:);
- fprintf(logfid,'# obs used, prior/post %d %d\n',sum(plotdat.ges_Nused(:)), ...
- sum(plotdat.anl_Nused(:)));
-
- plotdat.ges_copy = guess(:,plotdat.copyindex, ilevel,:);
- plotdat.anl_copy = analy(:,plotdat.copyindex, ilevel,:);
-
- plotdat.Yrange = FindRange(plotdat);
-
- % plot by region
-
- if (plotdat.nregions > 2)
- clf; orient tall
- else
- clf; orient landscape
- end
-
- for iregion = 1:plotdat.nregions
-
- plotdat.region = iregion;
- plotdat.myregion = deblank(plotdat.region_names(iregion,:));
- plotdat.title = sprintf('%s @ %d %s', ...
- plotdat.myvarname, ...
- plotdat.level(ilevel), ...
- plotdat.level_units);
-
- myplot(plotdat);
- end
-
- % create a postscript file
- print(gcf,'-dpsc','-append',psfname);
-
- % block to go slow and look at each one ...
- % disp('Pausing, hit any key to continue ...')
- % pause
-
- end
-end
-
-%----------------------------------------------------------------------
-% 'Helper' functions
-%----------------------------------------------------------------------
-
-function myplot(plotdat)
-
- % Interlace the [ges,anl] to make a sawtooth plot.
- % By this point, the middle two dimensions are singletons.
- cg = plotdat.ges_copy(:,:,:,plotdat.region);
- ca = plotdat.anl_copy(:,:,:,plotdat.region);
-
- g = plotdat.ges_Nposs(:,:,:,plotdat.region);
- a = plotdat.anl_Nposs(:,:,:,plotdat.region);
- nobs_poss = reshape([g a]',2*plotdat.Nbins,1);
-
- g = plotdat.ges_Nused(:,:,:,plotdat.region);
- a = plotdat.anl_Nused(:,:,:,plotdat.region);
- nobs_used = reshape([g a]',2*plotdat.Nbins,1);
-
- tg = plotdat.bincenters;
- ta = plotdat.bincenters;
- t = reshape([tg ta]',2*plotdat.Nbins,1);
-
- % Determine some quantities for the legend
- nobs = sum(nobs_used);
- if ( nobs > 1 )
- mean_prior = mean(cg(isfinite(cg)));
- mean_post = mean(ca(isfinite(ca)));
- else
- mean_prior = NaN;
- mean_post = NaN;
- end
-
- string_guess = sprintf('forecast: mean=%.5g', mean_prior);
- string_analy = sprintf('analysis: mean=%.5g', mean_post);
- plotdat.subtitle = sprintf('%s %s %s',plotdat.myregion, string_guess, string_analy);
-
- % Plot the requested quantity on the left axis.
- % The observation count will use the axis on the right.
- % We want to suppress the 'auto' feature of the axis labelling,
- % so we manually set some values that normally
- % don't need to be set.
-
- ax1 = subplot(plotdat.nregions,1,plotdat.region);
-
- h1 = plot(tg,cg,'k+-',ta,ca,'ro-','LineWidth',plotdat.linewidth);
- h = legend('forecast', 'analysis');
- legend(h,'boxoff')
-
- axlims = axis;
- axlims = [axlims(1:2) plotdat.Yrange];
- axis(axlims)
-
- plotdat.ylabel{1} = plotdat.myregion;
- switch lower(plotdat.copystring)
- case 'bias'
- % plot a zero-bias line
- h4 = line(axlims(1:2),[0 0], 'Color','r','Parent',ax1);
- set(h4,'LineWidth',1.5,'LineSTyle',':')
- plotdat.ylabel{2} = sprintf('%s (%s)',plotdat.copystring,plotdat.biasconv);
- otherwise
- plotdat.ylabel{2} = sprintf('%s',plotdat.copystring);
- end
-
- % hokey effort to decide to plot months/days vs. daynum vs.
- ttot = plotdat.bincenters(plotdat.Nbins) - plotdat.bincenters(1) + 1;
-
- if ((plotdat.bincenters(1) > 1000) && (ttot > 5))
- datetick('x',6,'keeplimits','keepticks');
- monstr = datestr(plotdat.bincenters(1),21);
- xlabelstring = sprintf('month/day - %s start',monstr);
- elseif (plotdat.bincenters(1) > 1000)
- datetick('x',15,'keeplimits','keepticks')
- monstr = datestr(plotdat.bincenters(1),21);
- xlabelstring = sprintf('%s start',monstr);
- else
- xlabelstring = 'days';
- end
-
- % only put x axis on last/bottom plot
- if (plotdat.region == plotdat.nregions)
- xlabel(xlabelstring)
- end
-
- % more annotation ...
-
- if (plotdat.region == 1)
- title({plotdat.title, plotdat.subtitle}, ...
- 'Interpreter', 'none', 'Fontsize', 12, 'FontWeight', 'bold')
- BottomAnnotation(plotdat.fname)
- else
- title(plotdat.subtitle, 'Interpreter', 'none', ...
- 'Fontsize', 12, 'FontWeight', 'bold')
- end
-
- % create a separate scale for the number of observations
- ax2 = axes('position',get(ax1,'Position'), ...
- 'XAxisLocation','top', ...
- 'YAxisLocation','right',...
- 'Color','none',...
- 'XColor','b','YColor','b');
- h2 = line(t,nobs_poss,'Color','b','Parent',ax2);
- h3 = line(t,nobs_used,'Color','b','Parent',ax2);
- set(h2,'LineStyle','none','Marker','o');
- set(h3,'LineStyle','none','Marker','+');
-
- % use same X ticks - with no labels
- set(ax2,'XTick',get(ax1,'XTick'),'XTickLabel',[])
-
- % use the same Y ticks, but find the right label values
- [yticks, newticklabels] = matchingYticks(ax1,ax2);
- set(ax2,'YTick', yticks, 'YTickLabel', newticklabels)
-
- set(get(ax2,'Ylabel'),'String','# of obs : o=poss, +=used')
- set(get(ax1,'Ylabel'),'String',plotdat.ylabel)
- set(ax1,'Position',get(ax2,'Position'))
- grid
-
-
-
-
-function BottomAnnotation(main)
-% annotates the directory containing the data being plotted
-subplot('position',[0.48 0.01 0.04 0.04])
-axis off
-fullname = which(main); % Could be in MatlabPath
-if( isempty(fullname) )
- if ( main(1) == '/' ) % must be a absolute pathname
- string1 = sprintf('data file: %s',main);
- else % must be a relative pathname
- mydir = pwd;
- string1 = sprintf('data file: %s/%s',mydir,main);
- end
-else
- string1 = sprintf('data file: %s',fullname);
-end
-
-h = text(0.0, 0.5, string1);
-set(h,'HorizontalAlignment','center', ...
- 'VerticalAlignment','middle',...
- 'Interpreter','none',...
- 'FontSize',10)
-
-
-
-function [y,ydims] = FindTemporalVars(x)
-% Returns UNIQUE (i.e. base) temporal variable names
-if ( ~(isfield(x,'allvarnames') && isfield(x,'allvardims')))
- error('Doh! no ''allvarnames'' and ''allvardims'' components')
-end
-
-j = 0;
-
-for i = 1:length(x.allvarnames)
- indx = findstr('time',x.allvardims{i});
- if (indx > 0)
- j = j + 1;
-
- basenames{j} = ReturnBase(x.allvarnames{i});
- basedims{j} = x.allvardims{i};
- end
-end
-
-[b,i,j] = unique(basenames);
-y = cell(length(i),1);
-ydims = cell(length(i),1);
-for j = 1:length(i)
- disp(sprintf('%2d is %s',j,basenames{j}))
- y{j} = basenames{j};
-ydims{j} = basedims{j};
-end
-
-
-
-function s = ReturnBase(string1)
-inds = findstr('_guess',string1);
-if (inds > 0 )
- s = string1(1:inds-1);
-end
-
-inds = findstr('_analy',string1);
-if (inds > 0 )
- s = string1(1:inds-1);
-end
-
-inds = findstr('_VPguess',string1);
-if (inds > 0 )
- s = string1(1:inds-1);
-end
-
-inds = findstr('_VPanaly',string1);
-if (inds > 0 )
- s = string1(1:inds-1);
-end
-
-
-
-function x = FindRange(y)
-% Trying to pick 'nice' limits for plotting.
-% Completely ad hoc ... and not well posed.
-%
-% In this scope, y is bounded from below by 0.0
-%
-% If the numbers are very small ...
-
-bob = [y.ges_copy(:) ; ...
- y.anl_copy(:)];
-inds = find(isfinite(bob));
-
-if ( isempty(inds) )
- x = [0 1];
-else
- glommed = bob(inds);
- ymin = min(glommed);
- ymax = max(glommed);
-
- if ( ymax > 1.0 )
- ymin = floor(min(glommed));
- ymax = ceil(max(glommed));
- elseif ( ymax < 0.0 & y.copystring == 'bias' )
- ymax = 0.0;
- end
-
- Yrange = [ymin ymax];
-
- x = [min([Yrange(1) 0.0]) Yrange(2)];
-end
-
-
-
-function [yticks newticklabels] = matchingYticks(ax1, ax2)
-%% This takes the existing Y ticks from ax1 (presumed nice)
-% and determines the matching labels for ax2 so we can keep
-% at least one of the axes looking nice.
-
-Dlimits = get(ax1,'YLim');
-DYticks = get(ax1,'YTick');
-nYticks = length(DYticks);
-ylimits = get(ax2,'YLim');
-
-slope = (ylimits(2) - ylimits(1))/(Dlimits(2) - Dlimits(1));
-xtrcpt = ylimits(2) -slope*Dlimits(2);
-
-yticks = slope*DYticks + xtrcpt;
-newticklabels = num2str(round(10*yticks')/10);
-
-% <next few lines under version control, do not edit>
-% $URL$
-% $Revision$
-% $Date$
-
Deleted: DART/trunk/models/CESM/matlab/plot_global_grid.m
===================================================================
--- DART/trunk/models/CESM/matlab/plot_global_grid.m 2013-07-29 16:49:33 UTC (rev 6324)
+++ DART/trunk/models/CESM/matlab/plot_global_grid.m 2013-07-29 19:48:43 UTC (rev 6325)
@@ -1,60 +0,0 @@
-function plot_global_grid(ugrid_file, tgrid_file)
-%% plot_global_grid
-%
-% Example 1: plot the regular grid output
-%
-% ugrid_file = 'dipole_u_out_data';
-% tgrid_file = 'dipole_t_out_data';
-% plot_global_grid(ugrid_file, tgrid_file)
-%
-%
-% plot_global_grid(1); % to plot regular grid output
-% plot_global_grid(2); % to plot dipole x3 grid output
-% plot_global_grid(3); % to plot regular grid with same grid as x3 in SH
-
-%% DART software - Copyright 2004 - 2013 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
-%
-% DART $Id$
-
-u = read_file(ugrid_file);
-t = read_file(tgrid_file);
-
-function chunk = read_file(fname)
-
-if (exist(fname,'file') ~=2 )
- error('%s does not exist',fname)
-end
-
-chunk.fname = fname;
-mydata = load(fname);
-chunk.lons = mydata(:,1);
-chunk.lats = mydata(:,2);
-chunk.vals = mydata(:,3);
-chunk.nx = sum(abs(diff(chunk.lats)) > 20) + 1; % looking for big jumps
-chunk.ny = length(chunk.lons) / chunk.nx;
-chunk.datmat = reshape(chunk.vals, chunk.ny, chunk.nx);
-chunk.string = sprintf('min/max is %f %f',min(chunk.vals), max(chunk.vals));
-
-figure;
-
-% imagesc(chunk.lons, chunk.lats, chunk.datmat) ! dipole grids have lon(1) ~= 0
-imagesc(chunk.datmat)
-set(gca,'YDir','normal'); colorbar
-h = title({chunk.fname, chunk.string}); set(h,'Interpreter','none')
-xlabel(sprintf('%d longitudes',chunk.nx))
-ylabel(sprintf('%d latitudes',chunk.ny))
-
-figure;
-
-h = plot(chunk.lons, chunk.lats,'.'); set(h,'MarkerSize',0.2)
-h = title(chunk.fname); set(h,'Interpreter','none')
-xlabel(sprintf('%d longitudes',chunk.nx))
-ylabel(sprintf('%d latitudes',chunk.ny))
-
-% <next few lines under version control, do not edit>
-% $URL$
-% $Revision$
-% $Date$
-
Deleted: DART/trunk/models/CESM/matlab/plot_grid.m
===================================================================
--- DART/trunk/models/CESM/matlab/plot_grid.m 2013-07-29 16:49:33 UTC (rev 6324)
+++ DART/trunk/models/CESM/matlab/plot_grid.m 2013-07-29 19:48:43 UTC (rev 6325)
@@ -1,112 +0,0 @@
-function plot_grid(fname)
-%% plot_grid ... plots the ULAT,ULON and TLAT,TLON variables from a netcdf file.
-%
-% fname = 'h.A1.10.nc';
-% plot_grid(fname)
-%
-
-%% DART software - Copyright 2004 - 2013 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
-%
-% DART $Id$
-
-ulat = nc_varget(fname,'ULAT') * 180/pi;;
-ulon = nc_varget(fname,'ULON') * 180/pi;;
-tlat = nc_varget(fname,'TLAT') * 180/pi;;
-tlon = nc_varget(fname,'TLON') * 180/pi;;
-
-Ulat = ulat(:);
-Ulon = ulon(:);
-Tlat = tlat(:);
-Tlon = tlon(:);
-
-inds = find(tlon <= 0);
-tlon(inds) = tlon(inds) + 360.0;
-inds = find(ulon <= 0);
-ulon(inds) = ulon(inds) + 360.0;
-
-np = 5;
-nx = size(ulat,1);
-ny = size(ulat,2);
-
-figure(1); clf; orient landscape
- plot(Ulon,Ulat,'ko',Tlon,Tlat,'rx')
- legend('U,V Grid','S,T Grid')
- legend boxoff
-
-
-figure(2); clf; orient landscape
-
- i1 = 1;
- iN = np;
- j1 = 1;
- jN = np;
-
- myplot(i1,iN,j1,jN,ulon,ulat,tlon,tlat)
-
-figure(3); clf; orient landscape
-
- i1 = 1;
- iN = np;
- j1 = ny-np+1;
- jN = ny;
-
- myplot(i1,iN,j1,jN,ulon,ulat,tlon,tlat)
-
-figure(4); clf; orient landscape
-
- i1 = nx-np+1;
- iN = nx;
- j1 = ny-np+1;
- jN = ny;
-
- myplot(i1,iN,j1,jN,ulon,ulat,tlon,tlat)
-
-figure(5); clf; orient landscape
-
- i1 = nx-np+1;
- iN = nx;
- j1 = 1;
- jN = np;
-
- myplot(i1,iN,j1,jN,ulon,ulat,tlon,tlat)
-
-
-function myplot(i1,iN,j1,jN,ulon,ulat,tlon,tlat)
-
- h = plot(ulon(i1:iN,j1:jN), ulat(i1:iN,j1:jN), 'ko', ...
- tlon(i1:iN,j1:jN), tlat(i1:iN,j1:jN), 'rx');
- set(h,'MarkerSize',1)
-
- for i = i1:iN
- for j = j1:jN
- % h = text(ulon(i,j),ulat(i,j), sprintf('%d,%d',i,j));
- str = sprintf('''%d,%d''',i,j);
- mystr = sprintf('h1 = text(%f,%f,%s);',ulon(i,j),ulat(i,j),str);
- eval(mystr)
- set(h1,'HorizontalAlignment','center', ...
- 'VerticalAlignment','middle', ...
- 'FontSize',10,'Color','k')
-
- mystr = sprintf('h2 = text(%f,%f,%s);',tlon(i,j),tlat(i,j),str);
- eval(mystr)
- set(h2,'HorizontalAlignment','center', ...
- 'VerticalAlignment','middle', ...
- 'FontSize',10,'Color','r')
- end
- end
- title('POP grid layout')
- xlabel('U,V grid in black; T,S grid in red')
- set(gca,'box','off')
-
-% set(h,'Visible','off'); % Get the domain right.
-% h = [h1 h2];
-% legend('U,V Grid','S,T Grid')
-% legend boxoff
-
-% <next few lines under version control, do not edit>
-% $URL$
-% $Revision$
-% $Date$
-
Deleted: DART/trunk/models/CESM/matlab/plot_interp_diffs.m
===================================================================
--- DART/trunk/models/CESM/matlab/plot_interp_diffs.m 2013-07-29 16:49:33 UTC (rev 6324)
+++ DART/trunk/models/CESM/matlab/plot_interp_diffs.m 2013-07-29 19:48:43 UTC (rev 6325)
@@ -1,76 +0,0 @@
-function plot_interp_diffs(ugrid_file, tgrid_file)
-%% plot_interp_diffs - script to examine the interpolation tests.
-%
-% Example 1: plot the regular grid output
-%--------------------------------------------------
-% ugrid_file = 'regular_grid_u_data';
-% tgrid_file = 'regular_grid_t_data';
-% plot_interp_diffs(ugrid_file, tgrid_file)
-%
-% Example 2: plot the dipole grid output
-%--------------------------------------------------
-% ugrid_file = 'dipole_grid_u_data';
-% tgrid_file = 'dipole_grid_t_data';
-% plot_interp_diffs(ugrid_file, tgrid_file)
-%
-% Example 3: plot the dipole grid output
-%--------------------------------------------------
-% ugrid_file = 'regular_griddi_u_data';
-% tgrid_file = 'regular_griddi_t_data';
-% plot_interp_diffs(ugrid_file, tgrid_file)
-%
-
-%% DART software - Copyright 2004 - 2013 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
-%
-% DART $Id$
-
-u_org = read_file(ugrid_file);
-t_org = read_file(tgrid_file);
-u_new = read_file(sprintf('%s.out',ugrid_file));
-t_new = read_file(sprintf('%s.out',tgrid_file));
-
-udif = u_org.datmat - u_new.datmat;
-tdif = t_org.datmat - t_new.datmat;
-
-umin = min(udif(:));
-umax = max(udif(:));
-str1 = sprintf('min/max of difference is %f %f',umin,umax);
-
-tmin = min(tdif(:));
-tmax = max(tdif(:));
-str2 = sprintf('min/max of difference is %f %f',tmin,tmax);
-
-figure(1); clf;
-imagesc(udif); set(gca,'YDir','normal')
-colorbar
-title({'U Difference',str1})
-
-figure(2); clf;
-imagesc(tdif); set(gca,'YDir','normal')
-colorbar
-title({'T Difference',str2})
-
-
-function chunk = read_file(fname)
-
-if (exist(fname,'file') ~=2 )
- error('%s does not exist',fname)
-end
-
-chunk.fname = fname;
-mydata = load(fname);
-chunk.lons = mydata(:,1);
-chunk.lats = mydata(:,2);
-chunk.vals = mydata(:,3);
-chunk.nx = sum(abs(diff(chunk.lats)) > 20) + 1; % looking for big jumps
-chunk.ny = length(chunk.lons) / chunk.nx;
-chunk.datmat = reshape(chunk.vals, chunk.ny, chunk.nx);
-chunk.string = sprintf('min/max is %f %f',min(chunk.vals), max(chunk.vals));
-
-% <next few lines under version control, do not edit>
-% $URL$
-% $Revision$
-% $Date$
-
Deleted: DART/trunk/models/CESM/matlab/plot_rmse_xxx_evolution.m
===================================================================
--- DART/trunk/models/CESM/matlab/plot_rmse_xxx_evolution.m 2013-07-29 16:49:33 UTC (rev 6324)
+++ DART/trunk/models/CESM/matlab/plot_rmse_xxx_evolution.m 2013-07-29 19:48:43 UTC (rev 6325)
@@ -1,529 +0,0 @@
-function plotdat = plot_rmse_xxx_evolution(fname, copystring, varargin)
-%% plot_rmse_xxx_evolution plots the temporal evolution of the observation-space quantity RMSE and any other for all possible levels, all possible variables.
-% Part of the observation-space diagnostics routines.
-%
-% 'obs_diag' produces a netcdf file containing the diagnostics.
-% obs_diag condenses the obs_seq.final information into summaries for a few specified
-% regions - on a level-by-level basis.
-%
-% USAGE: plotdat = plot_rmse_xxx_evolution(fname, copystring [,varargin]);
-%
-% fname : netcdf file produced by 'obs_diag'
-% copystring : 'copy' string == quantity of interest. These
-% can be any of the ones available in the netcdf
-% file 'CopyMetaData' variable.
-% (ncdump -v CopyMetaData obs_diag_output.nc)
-% obstypestring : 'observation type' string. Optional.
-% Must match something in the netcdf
-% file 'ObservationTypes' variable.
-% (ncdump -v ObservationTypes obs_diag_output.nc)
-% If specified, only this observation type will be plotted.
-% If not specified, all observation types incluced in the netCDF file
-% will be plotted.
-%
-% OUTPUT: two files will result for each observation type plotted. One is a
-% postscript file containing a page for each level - all regions.
-% The other file is a simple text file containing summary information
-% about how many observations were assimilated, how many were available, etc.
-% Both of these filenames contain the observation type as part of the name.
-%
-%
-% EXAMPLE 1 - plot the RMSE and totalspread on the same axis.
-%
-% fname = 'obs_diag_output.nc'; % netcdf file produced by 'obs_diag'
-% copystring = 'totalspread'; % 'copy' string == quantity of interest
-% plotdat = plot_rmse_xxx_evolution(fname,copystring);
-%
-%
-% EXAMPLE 2 - plot the RMSE and spread on the same axis - for just one observation type.
-%
-% fname = 'obs_diag_output.nc';
-% copystring = 'totalspread';
-% obstype = 'MOORING_TEMPERATURE';
-% plotdat = plot_rmse_xxx_evolution(fname, copystring, obstype);
-
@@ Diff output truncated at 40000 characters. @@
More information about the Dart-dev
mailing list