diff --git a/diag_manager/diag_output.F90 b/diag_manager/diag_output.F90 index ed0a2d4bd2..0913b256a8 100644 --- a/diag_manager/diag_output.F90 +++ b/diag_manager/diag_output.F90 @@ -70,7 +70,7 @@ MODULE diag_output_mod PRIVATE PUBLIC :: diag_output_init, write_axis_meta_data, write_field_meta_data, done_meta_data,& & diag_fieldtype, get_diag_global_att, set_diag_global_att - PUBLIC :: diag_field_write, diag_write_time !< use_mpp_io = .false. + PUBLIC :: diag_field_write, diag_write_time, diag_flush TYPE(diag_global_att_type), SAVE :: diag_global_att INTEGER, PARAMETER :: NETCDF1 = 1 @@ -1364,6 +1364,27 @@ SUBROUTINE set_diag_global_att(component, gridType, tileName) diag_global_att%tile_name = tileName ! endif END SUBROUTINE set_diag_global_att + + !> @brief Flushes the file into disk + subroutine diag_flush(file_num, fileobjU, fileobj, fileobjND, fnum_for_domain) + integer, intent(in) :: file_num !< Index in the fileobj* types array + type(FmsNetcdfUnstructuredDomainFile_t),intent(inout) :: fileobjU(:) !< Array of non domain decomposed fileobj + type(FmsNetcdfDomainFile_t), intent(inout) :: fileobj(:) !< Array of domain decomposed fileobj + type(FmsNetcdfFile_t), intent(inout) :: fileobjND(:) !< Array of unstructured domain fileobj + character(len=2), intent(in) :: fnum_for_domain !< String indicating the type of domain + !! "2d" domain decomposed + !! "ug" unstructured domain decomposed + !! "nd" no domain + if (fnum_for_domain == "2d" ) then + call flush_file (fileobj (file_num)) + elseif (fnum_for_domain == "nd") then + call flush_file (fileobjND (file_num)) + elseif (fnum_for_domain == "ug") then + call flush_file (fileobjU(file_num)) + else + call error_mesg("diag_field_write","No file object is associated with this file number",fatal) + endif + end subroutine diag_flush END MODULE diag_output_mod !> @} ! close documentation grouping diff --git a/diag_manager/diag_util.F90 b/diag_manager/diag_util.F90 index fb8f236f4c..07ad463c03 100644 --- a/diag_manager/diag_util.F90 +++ b/diag_manager/diag_util.F90 @@ -58,7 +58,7 @@ MODULE diag_util_mod & get_axes_shift, get_diag_axis_name, get_diag_axis_domain_name, get_domainUG, & & get_axis_reqfld, axis_is_compressed, get_compressed_axes_ids USE diag_output_mod, ONLY: diag_output_init, write_axis_meta_data,& - & write_field_meta_data, done_meta_data + & write_field_meta_data, done_meta_data, diag_flush USE diag_output_mod, ONLY: diag_field_write, diag_write_time ! files(file)%last_flush .AND. (flush_nc_files.OR.debug_diag_manager) ) THEN + call diag_flush(file, fileobjU, fileobj, fileobjND, fnum_for_domain(file)) files(file)%last_flush = time END IF END IF diff --git a/fms2_io/fms2_io.F90 b/fms2_io/fms2_io.F90 index ce01f0739c..d82be39148 100644 --- a/fms2_io/fms2_io.F90 +++ b/fms2_io/fms2_io.F90 @@ -104,6 +104,7 @@ module fms2_io_mod public :: get_instance_filename public :: nullify_filename_appendix public :: string2 +public :: flush_file !> @} !> @brief Opens a given netcdf or domain file. diff --git a/fms2_io/netcdf_io.F90 b/fms2_io/netcdf_io.F90 index 70bd5a9c95..bf028d7819 100644 --- a/fms2_io/netcdf_io.F90 +++ b/fms2_io/netcdf_io.F90 @@ -233,6 +233,7 @@ module netcdf_io_mod public :: set_fileobj_time_name public :: write_restart_bc public :: read_restart_bc +public :: flush_file !> @ingroup netcdf_io_mod interface netcdf_add_restart_variable @@ -2265,6 +2266,16 @@ subroutine write_restart_bc(fileobj, unlim_dim_level) end subroutine write_restart_bc +!> @brief flushes the netcdf file into disk +subroutine flush_file(fileobj) + class(FmsNetcdfFile_t), intent(inout) :: fileobj !< FMS2_io fileobj + + integer :: err !< Netcdf error code + + err = nf90_sync(fileobj%ncid) + call check_netcdf_code(err, "Flush_file: File:"//trim(fileobj%path)) +end subroutine flush_file + end module netcdf_io_mod !> @} ! close documentation grouping