![]() |
Jump to DART Documentation Main Index |
A collection of standalone programs for simulating various properties of ensembles.
The program of most interest here is gen_sampling_err_table.f90 which generates the lookup table needed when using sampling error correction in filter. Talk to Jeff Anderson about the other programs in this directory.
To enable the sampling error correction algorithm in
filter, set the namelist item
&assim_tools_nml : sampling_error_correction
to .true., and copy the netCDF file
system_simulation/sampling_error_correction_table.nc
into the run directory.
The supported set of precomputed
ensemble sizes can be found by exploring the ens_sizes
variable in sampling_error_correction_table.nc.
To add support for another ensemble size, build the executables in the
work directory,
(usually by running quickbuild.csh)
set the ens_sizes (it takes a list, but keep it short)
namelist item in work/input.nml,
and run gen_sampling_err_table.
It generates a LARGE number of samples
per ensemble size for statistical rigor.
Larger ensemble sizes take longer to generate, and compiler optimizations
matter - perhaps significantly. For example, the numbers below come
from calculating one ensemble size at a time on my desktop machine
with gfortran and basic optimization:
ensemble size | run-time (seconds) |
---|---|
10 | 57 |
50 | 273 |
100 | 548 |
The basic structure of sampling_error_correction_table.nc is shown below.
0[1095] desktop:system_simulation/work % ncdump -v ens_sizes *nc netcdf sampling_error_correction_table { dimensions: bins = 200 ; ens_sizes = UNLIMITED ; // (40 currently) variables: int count(ens_sizes, bins) ; count:description = "number of samples in each bin" ; double true_corr_mean(ens_sizes, bins) ; double alpha(ens_sizes, bins) ; alpha:description = "sampling error correction factors" ; int ens_sizes(ens_sizes) ; ens_sizes:description = "ensemble size used for calculation" ; // global attributes: :num_samples = 100000000 ; :title = "Sampling Error Corrections for fixed ensemble sizes." ; :reference = "Anderson, J., 2012: Localization and Sampling Error Correction in Ensemble Kalman Filter Data Assimilation. Mon. Wea. Rev., 140, 2359-2371, doi: 10.1175/MWR-D-11-00013.1." ; :version = "$Id$" ; data: These ensemble sizes are already supported! ens_sizes = 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 22, 24, 28, 30, 32, 36, 40, 44, 48, 49, 50, 52, 56, 60, 64, 70, 72, 80, 84, 88, 90, 96, 100, 120, 140, 160, 180, 200 }
This namelist is read from the file input.nml. Namelists start with an ampersand '&' and terminate with a slash '/'. Character strings that contain a '/' must be enclosed in quotes to prevent them from prematurely terminating the namelist.
&gen_sampling_error_table_nml ens_sizes = 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 22, 24, 28, 30, 32, 36, 40, 44, 48, 49, 50, 52, 56, 60, 64, 70, 72, 80, 84, 88, 90, 96, 100, 120, 140, 160, 180, 200 debug = .false. /
Item | Type | Description |
---|---|---|
ens_sizes | integer(200) | An array of ensemble sizes to compute. Any new size gets appended to the variables in the netCDF file. Any order is fine, the array does not have to be monotonic. The numbers listed in the example exist in the file distributed with DART. Do not get carried away by generating a lot of new ensemble sizes in one execution. The table of run-time above should give you some indication of how long it takes to create a new entry. |
debug | logical | A switch to add some run-time output. Generally not needed. |
types_mod utilities_mod random_seq_mod
Routine | Message | Comment |
---|---|---|
gen_sampling_err_table | duplicate ensemble size found | no need to recompute an alpha for an ensemble size already supported. |
gen_sampling_err_table | existing file used a different bin size | The code has been modified to use a different number of bins than the existing netCDF file. If that's what you intend, you need to make a new file. |
gen_sampling_err_table | existing file uses N samples, the program has Y samples. | The code has been modified to use a different number of replicates used to estimate the alphas. If that's what you intend, you need to make a new file. |
full_error | cannot handle task counts > 99999 | Ensemble size must be less than 100,000. |
full_error | empty bin | The sample size must be large enough for all bins to have counts |
none
none at this time.
DART software - Copyright 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
Contact: | Jeff Anderson |
Revision: | $Revision$ |
Source: | $URL$ |
Change Date: | $Date$ |
Change history: | try "svn log" or "svn diff" |