v. 0.31 12 June 2013 -- In plot_*.m replaced "figure()" by "set(0, "CurrentFigure", )" to avoid focus switching. -- Added restoring of randn() state in genR.m. v. 0.30 13 May 2011 -- Introduced adpative observation pre-screening; controlled by a new parameter "kfactor". -- Introduced a new option "noasynchronous"; for investigating the impact of assimilating asynchronous observations synchronously. -- Fixed a defect in assimilate.m: l.9: was: S = HA ./ repmat(sqrt(r), 1, p) / sqrt(m - 1); now: S = HA ./ repmat(sqrt(r), 1, m) / sqrt(m - 1); v. 0.29 24 April 2011 -- Parameter "rfactor" is renamed to "rfactor2". -- Introduced a new parameter "rfactor1" - multiple for observation error variance used in updating the ensemble mean. -- The model ("custom")parameter files are now looked for both in current and "enkfmatlabdir" directory. -- Many small changes. v. 0.28 26 August 2010 (Quite major changes) -- Moved fmain_a.m and main_a.m to fmain.m and main.m. -- Introduced L40b model. -- Introduced new parameter inflation_prm that specifies inflation magnitude for unobserved ("parameter") part of the state. -- Introduced new files model_getHA.m and model_getobs.m. -- Eliminated option "approx" for L3 and L40 models. -- Changed some defaults and code structure for these models. -- Made sure that runs with every parameter file from "prm" directory runs (at least on my machine). -- corrected the time step in L3. It is now equal to "dt" specified in the "custom" (model-specific) parameter file. (Used to be 1/60 for compiled version of the code, do not ask me why.) The Matlab version looks to be fine, although it was coded a bit strange, too. v. 0.27 3 Aug 2010 -- Fixed calculation of RMSE in calc_stats(). v. 0.26 14 April 2010 -- Synced "Potter" scheme in assimilate() with the changed interface in calc_k(). -- Changed the color map used for displaying state for the QG model. -- Added tools/set_colormap.m -- Added code to save/restore the state of randn() after/before call to get_obs() to make sure that the same observations are used when assimilating with different schemes. -- Added tools/spinup.m to gradually spinup the system by reducing the observation error variance. v. 0.25 12 Nov 2009 -- Added binaries for L3, L40 and QG models for 32- and 64-bit Windows platforms - thanks to Oliver Pajonk for compiling those. v. 0.24 9 Nov 2009 -- Added check on non-zero length in kurtosis.m and skewness.m. -- Fixed a defect in asynchronous stuff with EnKF scheme (an extra division by sqrt(r) for D) in assimilate_a. -- Modified calc_k.m for using with the asynchronous data assimilation. -- Modified setpath.m to prevent data error in the case if some of the entries in the user's path do not exist. -- Modified path separator for Windows - thanks to Oliver Pajonk. -- In a number of model_generate.m files added a search for the sample file in the prm.enkfmatlabdir directory. -- Introduced CF localisation for asynchronous assimilation in assimilate_a.m; at the moment - only for EnKF and DEnKF schemes. -- Added measurement of total time for assimilation and propagation to main.m and main_a.m. -- Added a check for the presence of sample file in prm.enkfmatlabdir directory to models/L3,L40,L40p,QG/model_generate.m v. 0.23 21 Sep 2009 -- Fixed a defect in setpath.m introduced in v. 0.22 v. 0.22 15 Sep 2009 -- Added kurtosis.m and skewness.m to eliminate dependence on the Statistics Toolbox -- Added a new field "enkfmatlabdir" to the parameters structure to simplify running from a directory other other than the EnKF-Matlab root. Modified setpath.m accordingly. NOTE: you may need to update your existing parameter files used in scripts by including "enkfmatlabdir" entry. v. 0.21 9 Sep 2009 -- Added code for asynchronous data assimilation - see README.asynchronous for details. -- Added file README.restart. -- Simplified step handling in main.m: a new run starts now at step = 1 (used to be step = 0), and a restart starts at + 1. -- Corrected defects in L40_step_c.c and L3_step_c.c that modified the initial state during integration. -- Replaced "bunch" by "batch" throughout the code, which is a common concept for assimilating observations in groups. -- Removed binaries for 32-bit machines. v. 0.20 3 Aug 2009 -- Got rid of 'LETKF'. Use 'ETKF' with loc_method set to 'LA' instead. -- Prohibited using ETKF with loc_method = 'CF'. -- Introduced get_version.m -- Created a subdirectory "custom" in "prm" for model-specific parameter files -- Made some changes in parameter files in "prm" v. 0.19 22 July 2009 -- Modified "model_plotstate.m" for L3. It now plots the history for each variable. For the old option of plotting the instanteous state set plot_state = 2 in the parameter file. -- Added file README.localisation -- Removed file README.ETKF -- Renamed parameter field "loc_framework" to "loc_method", and renamed the possible options for this field from "global" to "CF" (for covariance filtering) and from "local" to LA (for local analysis). -- Modified some files for working with asynchronous DA (in testing): some minor modifications in calc_stats.m, get_prm.m, get_prmstruct.m, main.m -- Changed field name in stats structure from "energy95' to 'var95' v. 0.18 12 March 2009 -- A few tweaks in assimilate.m to improve performance in "local" framework. v. 0.17 27 February 2009 -- BUG FIX: in assimilate.m - took inflation/rotation out of the observation bunch loop. v. 0.16 27 February 2009 -- In assimilate.m - separated code for assimilation with localisation in global framework (via covariance filtering) and with localisation in local framework. v. 0.15 12 February 2009 -- A small (hopefully, final) modification in assimilate.m, LETKF code. v. 0.14, 10 February 2009 -- Modified assimilate.m: for LETKF - now use locally tapered innovations during updating the mean. -- Modified get_localobs.m: now works properly with no localisation. -- Modified get_prm.m: now gives a warning if LETKF is run without localisation -- Added prm/prm-L40-letkf.txt. -- Modified README.ETKF. -- Modified README: updated possible QG dimensions in the reference table for models. v. 0.13, 4 February 2009 -- In assimilate.m - made LETKF completely local, including the update of the mean. -- In calc_k.m - removed option "observation_scaling" localisation method because it is not consistent with localisation in a global framework handled by this code (opposed to the local framework, e.g. with LETKF). -- Modified find_localobs.m - find_localobs() now returns not only the local observations but also the weights for tapering the anomalies. -- Added options of n = 4225 (65 x 65) and n = 1089 (33 x 33) for the QG model. (The prior option of n = 16641, 129 x 129, remains available.) Added files prm/prm-QGs-denkf.txt prm/prm-QGs-enkf.txt prm/prm-QGt-denkf.txt prm/prm-QGt-letkf.txt prm/prm-QGt-potter.txt along with prm/prm-custom-QGs.txt, prm/prm-custom-QGt.txt and prm/QGt.prm, prm/QGs.prm. -- Added samples/QGt_samples.mat. -- Added QGs_step_f.mexa64 and bin/QGt_step_f.mexa64. v. 0.12, 21 November 2008 -- Added models/L40p/README -- Added prm/README -- Removed prm/prm-L3.txt; added prm/prm-L3-m=3.txt and prm/prm-L3-m=2.txt. -- Modified README -- Modified assimilate.m, get_prmstruct.m to accomodate a new parameter "rfactor", which is a multiple for the observation error covariance R applied at updating the ensemble anomalies only (not for updating the mean) -- Added genR.m for generation of random orthonormal matrices -- A number of cosmetic changes or bug fixes v. 0.11, 25 August 2008 -- Minor changes in a number of files to handle simultaneous observation of two variables in LA2 and S models -- Minor correction of spatial scales for various localisation functions to ensure the same exp(0.5) - folding distance: calc_loccoeffs(1, function, 1) = exp(-0.5) for all available localisation functions with precision of 5 digits. v. 0.10, 14 August 2008 -- Modified code to allow custom localisation function. This includes: -- A new file calc_loccoeffs.m -- Two new fields in parameter structure defined in get_prmstruct.m, "periodic" and "loc_function" -- A minor restructuring in the "tools" directory v. 0.09, 13 August 2008 -- Minor changes in README -- Cosmetic changes in redraw_ensemble.m -- get_prmstruct.m: changed default value for prm.rotate from "'0'" (a bug) to "0" -- get_prmstruct.m: changed default value for p_bunchsize from 100 to 0 (that forces it to be equal to the number of observations) -- added README to models/LA -- added ensemble variance to the list of arguments of model_plotstate() -- now displaying variance for QG model v. 0.08, 27 June 2008 -- Added fclose() in readprmfile.m - thanks to Ding Youzhuan -- Minor changes in README v. 0.07, 26 June 2008 -- Appended ";" to "prm.loc_method = ..." in main.m (2 locations) v. 0.06, 16 June 2008 -- Introduced this file -- Fixed calc_rlocal.m used for localisation with LETKF: z = 0.5 * (dist / loc_len)^2 instead of (incorrect) z = 0.5 * dist^2 / loc_len -- Introduced a new option loc_method = {covariance_filtering, observation_scaling}. "covariance_filtering" is a traditional method of localisation; the new option "observation_scaling" is used for LETKF-like localisation via upscaling of observation error variance. "covariance_filtering" is a default for all methods other than LETKF. With LETKF, the update of ensemble anomalies is always calculated with "observation_scaling" option, while update of the mean can be calculated with either (with "observation_scaling" being a default option). -- In the context of the above, reshuffled calc_k.m. -- Eliminated the warning message from lscov when calculating RMSE of the best possible fit for LA* models.