[Dart-dev] DART/branches Revision: 10757

dart at ucar.edu dart at ucar.edu
Wed Nov 16 15:33:47 MST 2016


jamesmcc at ucar.edu
2016-11-16 15:33:46 -0700 (Wed, 16 Nov 2016)
37
Moving to Poterjoy particle filter. 



Modified: DART/branches/wrfHydro/assim_tools/assim_tools_mod.f90
===================================================================
--- DART/branches/wrfHydro/assim_tools/assim_tools_mod.f90	2016-11-16 22:09:25 UTC (rev 10756)
+++ DART/branches/wrfHydro/assim_tools/assim_tools_mod.f90	2016-11-16 22:33:46 UTC (rev 10757)
@@ -8,7 +8,6 @@
 
  
 ! A variety of operations required by assimilation.
-
 use      types_mod,       only : r8, digits12, PI, missing_r8
 use  utilities_mod,       only : file_exist, get_unit, check_namelist_read, do_output,    &
                                  find_namelist_in_file, register_module, error_handler,   &
@@ -41,7 +40,7 @@
                                  prepare_to_update_copies, map_pe_to_task
 
 use mpi_utilities_mod,    only : my_task_id, broadcast_send, broadcast_recv,              & 
-                                 sum_across_tasks
+                                 sum_across_tasks, task_sync
 
 use adaptive_inflate_mod, only : do_obs_inflate,  do_single_ss_inflate,                   &
                                  do_varying_ss_inflate, get_inflate, set_inflate,         &
@@ -73,7 +72,6 @@
 real(r8), allocatable  :: cutoff_list(:)
 logical                :: has_special_cutoffs
 logical                :: close_obs_caching = .true.
-real(r8), parameter    :: small = epsilon(1.0_r8)   ! threshold for avoiding NaNs/Inf
 
 character(len = 255)   :: msgstring, msgstring2, msgstring3
 
@@ -99,10 +97,12 @@
 !      5 = random draw from posterior
 !      6 = deterministic draw from posterior with fixed kurtosis
 !      8 = Rank Histogram Filter (see Anderson 2011)
+!      9 = Localized particle filter (Poterjoy Nov. 2014)
 !
 !  special_localization_obs_types -> Special treatment for the specified observation types
 !  special_localization_cutoffs   -> Different cutoff value for each specified obs type
 !
+! JPOTERJOY: added namelist variables frac_neff, pf_kddm, kddm_bins
 integer  :: filter_kind                     = 1
 real(r8) :: cutoff                          = 0.2_r8
 logical  :: sort_obs_inc                    = .false.
@@ -111,6 +111,10 @@
 integer  :: adaptive_localization_threshold = -1
 real(r8) :: adaptive_cutoff_floor           = 0.0_r8
 integer  :: print_every_nth_obs             = 0
+real(r8) :: frac_neff                       = 0.30_r8
+integer  :: pf_kddm                         = 1
+integer  :: kddm_bins                       = 5
+real(r8), parameter ::             max_infl = 99999.0_r8
 
 ! since this is in the namelist, it has to have a fixed size.
 integer, parameter   :: MAX_ITEMS = 300
@@ -135,10 +139,12 @@
 ! sections.  to try out the alternatives, set this to .false.
 logical  :: only_area_adapt  = .true.
 
+! JPOTERJOY: new namelist variables
 namelist / assim_tools_nml / filter_kind, cutoff, sort_obs_inc, &
    spread_restoration, sampling_error_correction,                          & 
    adaptive_localization_threshold, adaptive_cutoff_floor,                 &
    print_every_nth_obs, rectangular_quadrature, gaussian_likelihood_tails, &
+   pf_kddm, frac_neff, kddm_bins,                                          &
    output_localization_diagnostics, localization_diagnostics_file,         &
    special_localization_obs_types, special_localization_cutoffs,           &
    allow_missing_in_clm
@@ -207,7 +213,7 @@
                          text3=trim(msgstring))
    endif
    j = j + 1
-enddo
+end do
 num_special_cutoff = j
 
 if (num_special_cutoff > 0) has_special_cutoffs = .true.
@@ -314,8 +320,17 @@
 real(r8) :: close_state_dist(ens_handle%my_num_vars)
 real(r8) :: last_close_obs_dist(obs_ens_handle%my_num_vars)
 real(r8) :: last_close_state_dist(ens_handle%my_num_vars)
-real(r8) :: diff_sd, outlier_ratio
 
+! JPOTERJOY: added variables
+character(8)  :: date
+character(10) :: time
+real(r8) :: prior_var, prior_mean, orig_obs_prior(ens_size)
+real(r8) :: ens_init(ens_size,ens_handle%my_num_vars)
+real(r8) :: obs_ens_init(ens_size,obs_ens_handle%my_num_vars)
+real(r8) :: wo(ens_size,ens_handle%my_num_vars), hwo(ens_size,obs_ens_handle%my_num_vars)
+real(r8) :: w(ens_size), ens_mean, ens_var, ws, obs_err_infl
+integer  :: indx(ens_size)
+
 integer  :: my_num_obs, i, j, owner, owners_index, my_num_state
 integer  :: my_obs_indx(obs_ens_handle%my_num_vars), my_state_indx(ens_handle%my_num_vars)
 integer  :: this_obs_key, obs_mean_index, obs_var_index
@@ -343,12 +358,11 @@
 type(obs_def_type)   :: obs_def
 type(time_type)      :: obs_time, this_obs_time
 
-logical :: do_adapt_inf_update
-logical :: missing_in_state
 ! for performance, local copies 


More information about the Dart-dev mailing list