[Dart-dev] DART/releases Revision: 12164

dart at ucar.edu dart at ucar.edu
Fri Dec 1 16:13:10 MST 2017


nancy at ucar.edu
2017-12-01 16:13:10 -0700 (Fri, 01 Dec 2017)
187
Added a debug option to the filter namelist, 'write_obs_every_cycle',
to output the full obs_seq.final during each cycle of filter.
(Very slow - use only when debugging a filter crash.)




Index: DART/releases/classic
===================================================================
--- DART/releases/classic	2017-12-01 23:05:44 UTC (rev 12163)
+++ DART/releases/classic	2017-12-01 23:13:10 UTC (rev 12164)

Property changes on: DART/releases/classic
___________________________________________________________________
Modified: svn:mergeinfo
## -4,4 +4,4 ##
 /DART/branches/gitm_lanai:6571-6652
 /DART/branches/helen:5995-6161
 /DART/branches/trunk_with_cam_style:9473-9540
-/DART/trunk:11352-12137
\ No newline at end of property
+/DART/trunk:11352-12163
\ No newline at end of property
Modified: DART/releases/classic/filter/filter.dopplerfold.f90
===================================================================
--- DART/releases/classic/filter/filter.dopplerfold.f90	2017-12-01 23:05:44 UTC (rev 12163)
+++ DART/releases/classic/filter/filter.dopplerfold.f90	2017-12-01 23:13:10 UTC (rev 12164)
@@ -10,25 +10,22 @@
 use types_mod,            only : r8, missing_r8, metadatalength
 use obs_sequence_mod,     only : read_obs_seq, obs_type, obs_sequence_type,                  &
                                  get_obs_from_key, set_copy_meta_data, get_copy_meta_data,   &
-                                 get_obs_def, get_time_range_keys, set_obs_values, set_obs,  &
-                                 write_obs_seq, get_num_obs, get_obs_values, init_obs,       &
-                                 assignment(=), get_num_copies, get_qc, get_num_qc, set_qc,  &
+                                 get_obs_def, get_time_range_keys, write_obs_seq,            &
+                                 get_obs_values, init_obs, set_qc_meta_data, get_expected_obs,&
+                                 assignment(=), get_num_copies, get_qc, get_num_qc,          &
                                  static_init_obs_sequence, destroy_obs, read_obs_seq_header, &
-                                 set_qc_meta_data, get_expected_obs, get_first_obs,          &
-                                 get_obs_time_range, delete_obs_from_seq, delete_seq_head,   &
-                                 delete_seq_tail, replace_obs_values, replace_qc,            &
-                                 destroy_obs_sequence, get_qc_meta_data, add_qc
-use obs_def_mod,          only : obs_def_type, get_obs_def_error_variance, get_obs_def_time, &
-                                 get_obs_kind
+                                 delete_seq_head, delete_seq_tail, replace_obs_values, add_qc,&
+                                 destroy_obs_sequence, get_qc_meta_data, replace_qc
+use obs_def_mod,          only : obs_def_type, get_obs_def_error_variance, get_obs_def_time
 use time_manager_mod,     only : time_type, get_time, set_time, operator(/=), operator(>),   &
                                  operator(-), print_time
 use utilities_mod,        only : register_module,  error_handler, E_ERR, E_MSG, E_DBG,       &
-                                 initialize_utilities, logfileunit, nmlfileunit, timestamp,  &
+                                 logfileunit, nmlfileunit, timestamp,                        &
                                  do_output, find_namelist_in_file, check_namelist_read,      &
                                  open_file, close_file, do_nml_file, do_nml_term
 use assim_model_mod,      only : static_init_assim_model, get_model_size,                    &
                                  netcdf_file_type, init_diag_output, finalize_diag_output,   & 
-                                 aoutput_diagnostics, ens_mean_for_model, end_assim_model
+                                 ens_mean_for_model, end_assim_model
 use assim_tools_mod,      only : filter_assim, set_assim_tools_trace, get_missing_ok_status
 use obs_model_mod,        only : move_ahead, advance_state, set_obs_model_trace
 use ensemble_manager_mod, only : init_ensemble_manager, end_ensemble_manager,                &
@@ -36,10 +33,10 @@
                                  all_vars_to_all_copies, all_copies_to_all_vars,             &
                                  read_ensemble_restart, write_ensemble_restart,              &
                                  compute_copy_mean, compute_copy_mean_sd,                    &
-                                 compute_copy_mean_var, duplicate_ens, get_copy_owner_index, &
+                                 compute_copy_mean_var, get_copy_owner_index,                &
                                  get_ensemble_time, set_ensemble_time, broadcast_copy,       &
-                                 prepare_to_read_from_vars, prepare_to_write_to_vars, prepare_to_read_from_copies,    &
-                                 prepare_to_write_to_copies, get_ensemble_time, set_ensemble_time,    &
+                                 prepare_to_read_from_vars, prepare_to_write_to_vars,        &
+                                 prepare_to_read_from_copies, get_ensemble_time, set_ensemble_time,&
                                  map_task_to_pe,  map_pe_to_task, prepare_to_update_copies
 use adaptive_inflate_mod, only : adaptive_inflate_end, do_varying_ss_inflate,                &
                                  do_single_ss_inflate, inflate_ens, adaptive_inflate_init,   &
@@ -106,6 +103,7 @@
 logical  :: output_forward_op_errors = .false.
 logical  :: output_timestamps        = .false.
 logical  :: trace_execution          = .false.
+logical  :: write_obs_every_cycle = .false.  ! debug only
 logical  :: silence                  = .false.
 
 character(len = 129) :: obs_sequence_in_name  = "obs_seq.out",    &
@@ -146,7 +144,7 @@
    inf_output_restart, inf_deterministic, inf_in_file_name, inf_damping,            &
    inf_out_file_name, inf_diag_file_name, inf_initial, inf_sd_initial,              &
    inf_lower_bound, inf_upper_bound, inf_sd_lower_bound, output_inflation,          &
-   silence
+   write_obs_every_cycle, silence
 
 ! FIXME: this belongs someplace else.
 ! Are any of the observation types subject to being updated
@@ -744,6 +742,16 @@
    if(do_obs_inflate(prior_inflate) .and. my_task_id() == 0) &
       call output_inflate_diagnostics(prior_inflate, curr_ens_time)
 
+   ! only intended for debugging when cycling inside filter.
+   ! writing the obs_seq file can be slow - but if filter crashes
+   ! you can get partial results by enabling this flag.
+   if (write_obs_every_cycle) then
+      call trace_message('Before writing in-progress output sequence file')
+      ! Only pe 0 outputs the observation space diagnostic file
+      if(my_task_id() == 0) call write_obs_seq(seq, obs_sequence_out_name)
+      call trace_message('After  writing in-progress output sequence file')
+   endif
+
    call trace_message('Near bottom of main loop, cleaning up obs space')
    ! Deallocate storage used for keys for each set


More information about the Dart-dev mailing list