[Dart-dev] DART/branches Revision: 10784

dart at ucar.edu dart at ucar.edu
Tue Dec 6 16:17:19 MST 2016


hendric at ucar.edu
2016-12-06 16:17:18 -0700 (Tue, 06 Dec 2016)
266
Moving namelist option to output stages to filter since they
are program specific and only apply to filter.  New option 
to add stages independent of the program:

  subroutine set_stage_to_write(stage_name, write_stage)
  function   get_stage_to_write(stage_name)




Modified: DART/branches/rma_fixed_filenames/filter/filter_mod.f90
===================================================================
--- DART/branches/rma_fixed_filenames/filter/filter_mod.f90	2016-12-05 23:06:36 UTC (rev 10783)
+++ DART/branches/rma_fixed_filenames/filter/filter_mod.f90	2016-12-06 23:17:18 UTC (rev 10784)
@@ -27,7 +27,7 @@
 use utilities_mod,         only : register_module,  error_handler, E_ERR, E_MSG, E_DBG,       &
                                   logfileunit, nmlfileunit, timestamp,  &
                                   do_output, find_namelist_in_file, check_namelist_read,      &
-                                  open_file, close_file, do_nml_file, do_nml_term
+                                  open_file, close_file, do_nml_file, do_nml_term, to_upper
 use assim_model_mod,       only : static_init_assim_model, get_model_size,                    &
                                   end_assim_model,  pert_model_copies
 use assim_tools_mod,       only : filter_assim, set_assim_tools_trace, get_missing_ok_status, &
@@ -62,8 +62,7 @@
 use random_seq_mod,        only : random_seq_type, init_random_seq, random_gaussian
 
 use state_vector_io_mod,   only : state_vector_io_init, read_state, write_state, &
-                                  get_output_preassim, get_output_postassim, &
-                                  get_output_mean, get_output_sd, get_output_input
+                                  set_stage_to_write, get_stage_to_write
 
 use io_filenames_mod,      only : io_filenames_init, file_info_type, file_info_dump, &
                                   set_file_metadata
@@ -71,8 +70,7 @@
 use forward_operator_mod,  only : get_obs_ens_distrib_state
 use quality_control_mod,   only : initialize_qc
 
-use state_space_diag_mod,  only : init_state_space_diag, netcdf_file_type, &
-                                  get_num_output_state_members, set_num_output_state_members
+use state_space_diag_mod,  only : init_state_space_diag, netcdf_file_type
 
 ! state copy meta data
 use copies_on_off_mod, only : ENS_MEAN_COPY, ENS_SD_COPY, PRIOR_INF_COPY, &
@@ -144,6 +142,12 @@
 ! File options.  Single vs. Multiple.
 logical            :: single_file_in               = .false. ! all copies read from 1 file
 logical            :: single_file_out              = .false. ! all copies written to 1 file
+! Stages to write
+character(len=10)  :: stages_to_write(4) = (/"null      ", "null      ", "null      ", "output    "/) ! input, preassim, postassim, output
+integer :: num_output_state_members = 0
+logical :: output_restarts  = .true. 
+logical :: output_mean      = .true.
+logical :: output_sd        = .true.
 
 character(len=256) :: obs_sequence_in_name  = "obs_seq.out",    &
                       obs_sequence_out_name = "obs_seq.final",  &
@@ -185,9 +189,12 @@
    silence, output_restart_file_list, &
    distributed_state, input_restart_file_list, &
    single_file_in, single_file_out, &
-   perturb_from_single_instance, perturbation_amplitude
+   perturb_from_single_instance, perturbation_amplitude, &
+   stages_to_write, num_output_state_members, &
+   output_restarts, output_mean, output_sd
 
 
+
 !----------------------------------------------------------------
 
 contains
@@ -318,8 +325,8 @@
 ! Setup the indices into the ensemble storage:
 
 ! Can't output more ensemble members than exist
-if(get_num_output_state_members() > ens_size) call set_num_output_state_members(ens_size)
-if(num_output_obs_members         > ens_size) num_output_obs_members = ens_size
+if(num_output_state_members > ens_size) num_output_state_members = ens_size
+if(num_output_obs_members   > ens_size) num_output_obs_members   = ens_size
 
 ! State
 call set_state_copies(ens_size, num_extras)
@@ -389,6 +396,8 @@
 call init_file_info_extras(file_info_postassim,'postassim')
 call init_file_info_extras(file_info_output,   'output')
 
+call parse_stages_to_write(stages_to_write)
+
 if (.not. silence) then  !>@todo abuse of the 'silence' variable
    call file_info_dump(file_info_input,     'filter:input')
    call file_info_dump(file_info_preassim,  'filter:preassim')
@@ -431,7 +440,7 @@
       prior_obs_spread_index, posterior_obs_spread_index)
 
 if(ds) call error_handler(E_ERR, 'filter', 'smoother broken by Helen')
-if(ds) call smoother_gen_copy_meta_data(get_num_output_state_members(), output_inflation=.true.) !> @todo fudge
+if(ds) call smoother_gen_copy_meta_data(num_output_state_members, output_inflation=.true.) !> @todo fudge
 
 call timestamp_message('After  initializing output files')
 call     trace_message('After  initializing output files')
@@ -602,8 +611,12 @@
       call trace_message('After  prior inflation damping and prep')
    endif
 
-   if (get_output_input()) then
-     call write_state(state_ens_handle, file_info_input, num_members=0)
+   if (get_stage_to_write('input')) then
+     call write_state(state_ens_handle, file_info_input, &
+                         output_restarts=output_restarts, &
+                         output_mean=output_mean, &
+                         output_sd=output_sd, &
+                         num_members=0)


More information about the Dart-dev mailing list