[Dart-dev] DART/branches Revision: 12579

dart at ucar.edu dart at ucar.edu
Wed May 9 14:08:29 MDT 2018


hendric at ucar.edu
2018-05-09 14:08:28 -0600 (Wed, 09 May 2018)
66

adding namelist option and code to read a list of
restart files




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-09 17:05:35 UTC (rev 12578)
+++ DART/branches/rma_closest_member_tool/assimilation_code/programs/closest_member_tool/closest_member_tool.f90	2018-05-09 20:08:28 UTC (rev 12579)
@@ -39,12 +39,14 @@
 
 use state_vector_io_mod,  only : read_state, write_state
 
-use io_filenames_mod,     only : file_info_type, io_filenames_init
+use io_filenames_mod,     only : file_info_type, io_filenames_init, &
+                                 set_io_copy_flag, set_file_metadata, &
+                                 set_member_file_metadata, READ_COPY
 
 use state_structure_mod,  only : get_num_domains
 
 use mpi_utilities_mod,    only : initialize_mpi_utilities, task_count,     &
-                                finalize_mpi_utilities
+                                 finalize_mpi_utilities
 
 use ensemble_manager_mod, only : ensemble_type, init_ensemble_manager
 !>@todo needs to destroy ensemble before the end of the program
@@ -83,7 +85,7 @@
 integer              :: ens_size               = 1
 integer              :: difference_method      = 4
 logical              :: single_restart_file_in = .false.
-character(len = obstypelength) :: use_only_kinds(max_list_len) = ''
+character(len = obstypelength) :: use_only_qtys(max_list_len) = ''
 character(len=256) :: input_restart_file_list(MAX_NUM_DOMS)  = 'null'
 character(len=256) :: mean_restart_file_list(MAX_NUM_DOMS)  = 'null'
 character(len=256) :: output_file_name
@@ -105,13 +107,15 @@
    ens_size,                     &
    single_restart_file_in,       &
    difference_method,            &
-   use_only_kinds         
+   use_only_qtys         
 
 
 type(ensemble_type)             :: ens_handle, mean_ens_handle
-character(len=256), allocatable :: file_array_input(:,:), file_array_output(:,:)
+character(len=256), allocatable :: file_array_input(:,:)
 character(len=256)              :: input_state_files(MAX_FILES) = '' 
-integer                         :: ndomains
+integer                         :: num_domains
+type(time_type)                 :: model_time
+logical                         :: read_time_from_file = .true.
 
 !> @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.
@@ -123,17 +127,8 @@
 ! This program should only be run with a single process
 call initialize_mpi_utilities('closest_member_tool')
 
-call error_handler(E_ERR,'closest_member_tool','Tool not working. Please contact '//&
-                         'dart at ucar.edu if you would like to use this tool.',  &
-                          source,revision,revdate)
-
-if(task_count() > 1) &
-   call error_handler(E_ERR,'closest_member_tool','Only use single process', &
-                      source,revision,revdate)
-
 call register_module(source,revision,revdate)
 
-
 ! Read the namelist entry and print it
 call find_namelist_in_file("input.nml", "closest_member_tool_nml", iunit)
 read(iunit, nml = closest_member_tool_nml, iostat = io)
@@ -147,6 +142,16 @@
 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
@@ -154,15 +159,27 @@
 write(msgstring, *) 'Computing difference using method: '//trim(method_name(difference_method))
 call error_handler(E_MSG,'',msgstring)
 
-! 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(mean_ens_handle, 1, model_size)
+! 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(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)
+


More information about the Dart-dev mailing list