[Dart-dev] DART/branches Revision: 10940

dart at ucar.edu dart at ucar.edu
Tue Jan 24 11:41:33 MST 2017


hendric at ucar.edu
2017-01-24 11:41:32 -0700 (Tue, 24 Jan 2017)
154
added functionality to read a single file in with only
one member (from a perfect model run) and then perturb
the data to create an ensemble for filter.




Modified: DART/branches/rma_single_file/filter/filter_mod.f90
===================================================================
--- DART/branches/rma_single_file/filter/filter_mod.f90	2017-01-24 00:43:16 UTC (rev 10939)
+++ DART/branches/rma_single_file/filter/filter_mod.f90	2017-01-24 18:41:32 UTC (rev 10940)
@@ -76,7 +76,8 @@
 use quality_control_mod,   only : initialize_qc
 
 use state_space_diag_mod,  only : netcdf_file_type, init_singlefile_output, &
-                                  finalize_singlefile_output, write_single_file
+                                  finalize_singlefile_output, &
+                                  write_single_file
 
 !------------------------------------------------------------------------------
 
@@ -2305,6 +2306,7 @@
 ! Allocate space for the filename handles
 file_info_input     = io_filenames_init(num_state_ens_copies, single_file_in,      &
                                         restart_list=input_restart_file_list,  &
+                                        single_filename = 'filter_input.nc', &
                                         root_name='input')
 file_info_preassim  = io_filenames_init(num_state_ens_copies, single_file_out,     &
                                         root_name='preassim')

Modified: DART/branches/rma_single_file/io/direct_netcdf_mod.f90
===================================================================
--- DART/branches/rma_single_file/io/direct_netcdf_mod.f90	2017-01-24 00:43:16 UTC (rev 10939)
+++ DART/branches/rma_single_file/io/direct_netcdf_mod.f90	2017-01-24 18:41:32 UTC (rev 10940)
@@ -83,7 +83,8 @@
 
 use io_filenames_mod,     only : get_restart_filename, copy_has_units, &
                                  stage_metadata_type, get_file_description, &
-                                 copy_is_clamped, query_read_copy, query_write_copy
+                                 copy_is_clamped, query_read_copy, query_write_copy, &
+                                 file_info_type, get_stage_metadata
 
 use model_mod,            only : write_model_time, read_model_time
 
@@ -1550,27 +1551,28 @@
 !> 
 
 
-subroutine read_single_file(state_ens_handle, fname, use_time_from_file, time)
+subroutine read_single_file(state_ens_handle, file_info, use_time_from_file, time)
 
 type(ensemble_type),  intent(inout) :: state_ens_handle
-character(len=*),     intent(in)    :: fname
+type(file_info_type), intent(in)    :: file_info
 logical,              intent(in)    :: use_time_from_file
 type(time_type),      intent(inout) :: time
 
 integer :: dart_index ! where to start in state_ens_handle%copies
-!#! type(stage_metadata_type) :: restart_files
+type(stage_metadata_type) :: name_handle
 
 ! NetCDF IO variables
-integer :: ncid, varid, ret, icopy, ivar, istart, iend, i
+integer :: ncid, varid, MemDimID, ret, icopy, ivar, istart, iend, i
 integer :: ens_size, model_size, var_size, domain
 character(len=32) :: var_name
-real(r8), allocatable :: var_block(:) !>todo remove hard-coded
+real(r8), allocatable :: var_block(:)
+character(len=256) :: fname
 
 ! check whether file_info handle is initialized
 !#! call assert_file_info_initialized(file_info, 'read_restart_direct')
 
 ! do this once
-!#! restart_files = get_stage_metadata(file_info)
+name_handle = get_stage_metadata(file_info)
 
 ens_size = state_ens_handle%num_copies - state_ens_handle%num_extras
 
@@ -1582,10 +1584,13 @@
 
 state_ens_handle%time = time
 
+fname = get_restart_filename(name_handle,1,1)
+print*, 'fname -> ', fname
+
 domain = 1 !>@todo : single domain for single file read supported
 
 ret = nf90_open(fname, NF90_NOWRITE, ncid)
-call nc_check(ret, 'read_transpose_single_task: nf90_open', fname)
+call nc_check(ret, 'read_single_file: nf90_open', fname)
 
 do ivar = 1, get_num_variables(domain)
    var_size = get_variable_size(domain, ivar)
@@ -1593,11 +1598,20 @@
    
    var_name = get_variable_name(domain, ivar)
    ret = nf90_inq_varid(ncid, var_name, varid)
-   call nc_check(ret, 'read_transpose_single_task: nf90_inq_varid', fname)
-   
+   call nc_check(ret, 'read_single_file: nf90_inq_varid', fname)
+
+   ! if member dimension is defined then we are reading from a single file
+   !>@todo there is probably a cleaner way of doing this
+   ret = nf90_inq_dimid(ncid, "member", MemDimID)
+   if( ret == 0 ) then
+      ret = nf90_inquire_dimension(ncid, MemDimID, len=ens_size) 
+      call nc_check(ret, 'read_single_file: nf90_inquire_dimension', fname)


More information about the Dart-dev mailing list