[Dart-dev] DART/branches Revision: 12582

dart at ucar.edu dart at ucar.edu
Thu May 10 16:24:36 MDT 2018


hendric at ucar.edu
2018-05-10 16:24:35 -0600 (Thu, 10 May 2018)
132

repaired reading an ensemble of restarts from a list and
are using 'extra copies' to compute the mean using the
ensemble manager.




Modified: DART/branches/rma_closest_member_tool/assimilation_code/programs/closest_member_tool/closest_member_tool.f90
===================================================================
--- DART/branches/rma_closest_member_tool/assimilation_code/programs/closest_member_tool/closest_member_tool.f90	2018-05-10 18:58:13 UTC (rev 12581)
+++ DART/branches/rma_closest_member_tool/assimilation_code/programs/closest_member_tool/closest_member_tool.f90	2018-05-10 22:24:35 UTC (rev 12582)
@@ -41,7 +41,9 @@
 
 use io_filenames_mod,     only : file_info_type, io_filenames_init, &
                                  set_io_copy_flag, set_file_metadata, &
-                                 set_member_file_metadata, READ_COPY
+                                 set_member_file_metadata, file_info_dump, &
+                                 stage_metadata_type, get_stage_metadata, &
+                                 get_restart_filename, READ_COPY
 
 use state_structure_mod,  only : get_num_domains
 
@@ -48,7 +50,7 @@
 use mpi_utilities_mod,    only : initialize_mpi_utilities, task_count,     &
                                  finalize_mpi_utilities
 
-use ensemble_manager_mod, only : ensemble_type, init_ensemble_manager
+use ensemble_manager_mod, only : ensemble_type, init_ensemble_manager, compute_copy_mean_sd
 !>@todo needs to destroy ensemble before the end of the program
 
 implicit none
@@ -108,14 +110,15 @@
    single_restart_file_in,       &
    difference_method,            &
    use_only_qtys         
-
-
 type(ensemble_type)             :: ens_handle, mean_ens_handle
 character(len=256), allocatable :: file_array_input(:,:)
 character(len=256)              :: input_state_files(MAX_FILES) = '' 
-integer                         :: num_domains
+integer                         :: num_domains, idom, imem
 type(time_type)                 :: model_time
 logical                         :: read_time_from_file = .true.
+type(stage_metadata_type)       :: input_restart_files
+character(len=256)              :: string1, my_base, my_desc
+integer                         :: ENS_SD_COPY, ENS_MEAN_COPY 
 
 !> @todo seems like you are using get_state_meta_data just so you can get the kinds.
 !> WRF and MPAS will be doing the vertical conversion also.
@@ -142,16 +145,6 @@
 call static_init_assim_model()
 model_size = get_model_size()
 
-! Allocate space for file arrays.  contains a matrix of files 
-! (ens_size x num_domains). If perturbing from a single instance 
-! the number of input files does not have to ! be ens_size but 
-! rather a single file (or multiple files if more than one domain)
-
-num_domains = get_num_domains()
-
-allocate(file_array_input(ens_size, num_domains))
-file_array_input  = RESHAPE(input_restart_file_list,  (/ens_size,  num_domains/))
-
 write(msgstring, *) 'Model size/restart data length =', model_size
 call error_handler(E_MSG,'',msgstring)
 write(msgstring, *) 'Ensemble member count = ', ens_size
@@ -161,22 +154,72 @@
 
 ! make space for the mean and a single member, plus place to sort list 
 ! for output
-call init_ensemble_manager(ens_handle,      ens_size, model_size)
+call init_ensemble_manager(ens_handle,      ens_size+2, model_size)
 call init_ensemble_manager(mean_ens_handle, 1,        model_size)
 
-! Set file IO information
-!   Input Files
-call set_member_file_metadata(ens_file_info,  ens_size, my_copy_start=1)
-call set_io_copy_flag(ens_file_info, c1=1, c2=ens_size, io_flag=READ_COPY)
+mean_time         = set_time_missing()
+member_time       = set_time_missing()
+mean_advance_time = set_time_missing()
+mean_advance_time = set_time_missing()
 
+num_domains = get_num_domains()
+
+! Given either a vector of in/output_state_files or a text file containing
+! a list of files, return a vector of files containing the filenames.
+call set_multiple_filename_lists(input_state_files(:), &
+                                 input_restart_file_list(:), &
+                                 num_domains, &
+                                 ens_size, &
+                                 'filter','input_state_files','input_state_file_list')
+
+! be ens_size but rather a single file (or multiple files if more than one domain)
+allocate(file_array_input(ens_size, num_domains))
+
+file_array_input  = RESHAPE(input_state_files,  (/ens_size,  num_domains/))
+
+if (1==2) then
+   print*, input_state_files,       'input_state_files'
+   print*, input_restart_file_list, 'input_restart_file_list'
+   print*, file_array_input,        'file_array_input'
+endif
+! read in the ensemble and the mean - always in a separate file
+call io_filenames_init(ens_file_info, ens_size, .false., .false., restart_files=file_array_input)
+call io_filenames_init(mean_file_info, 1,       .false., .false., root_name='input')
+


More information about the Dart-dev mailing list