[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