[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