diff --git a/driver/fvGFS/fv_ufs_restart_io.F90 b/driver/fvGFS/fv_ufs_restart_io.F90 index b114d47f..9b53772b 100644 --- a/driver/fvGFS/fv_ufs_restart_io.F90 +++ b/driver/fvGFS/fv_ufs_restart_io.F90 @@ -435,7 +435,7 @@ subroutine add_zaxis_to_field(field, axis_name, num_levels) character(len=*), intent(in) :: axis_name integer, intent(in) :: num_levels - real(8), allocatable, dimension(:) :: buffer + real, allocatable, dimension(:) :: buffer integer :: rc, i call ESMF_AttributeAdd(field, convention="NetCDF", purpose="FV3", & @@ -485,6 +485,12 @@ subroutine write_ak_bk(Atm, timestamp) character(len=8), dimension(2) :: dim_names_2d integer :: j +#ifdef OVERLOAD_R4 + character(len=5), parameter :: axis_type = 'float' +#else + character(len=6), parameter :: axis_type = 'double' +#endif + dim_names_2d(1) = "xaxis_1" dim_names_2d(2) = "Time" @@ -501,7 +507,7 @@ subroutine write_ak_bk(Atm, timestamp) call register_axis(Fv_restart, "xaxis_1", size(Atm%ak(:), 1)) call register_axis(Fv_restart, "Time", unlimited) - call register_field(Fv_restart, "xaxis_1", "double", (/"xaxis_1"/)) + call register_field(Fv_restart, "xaxis_1", axis_type, (/"xaxis_1"/)) call register_variable_attribute(Fv_restart,"xaxis_1", "axis", "X", str_len=1) if (allocated(buffer)) deallocate(buffer) allocate(buffer(size(Atm%ak(:), 1))) @@ -510,7 +516,7 @@ subroutine write_ak_bk(Atm, timestamp) end do call write_data(Fv_restart, "xaxis_1", buffer) deallocate(buffer) - call register_field(Fv_restart, "Time", "double", (/"Time"/)) + call register_field(Fv_restart, "Time", axis_type, (/"Time"/)) call register_variable_attribute(Fv_restart, dim_names_2d(2), "cartesian_axis", "T", str_len=1) call register_variable_attribute(Fv_restart, dim_names_2d(2), "units", "time level", str_len=len("time level")) call register_variable_attribute(Fv_restart, dim_names_2d(2), "long_name", dim_names_2d(2), str_len=len(dim_names_2d(2))) diff --git a/tools/fv_io.F90 b/tools/fv_io.F90 index 359e01a5..abbd95d0 100644 --- a/tools/fv_io.F90 +++ b/tools/fv_io.F90 @@ -126,6 +126,12 @@ module fv_io_mod integer ::grid_xtdimid, grid_ytdimid, haloid, pfullid !For writing BCs integer ::grid_xtstagdimid, grid_ytstagdimid, oneid +#ifdef OVERLOAD_R4 + character(len=5), parameter :: axis_type = 'float' +#else + character(len=6), parameter :: axis_type = 'double' +#endif + contains @@ -163,7 +169,7 @@ subroutine fv_io_register_axis(file_obj, numx, xpos, numy, ypos, numz, zsize) axisname = 'xaxis_'//suffix call register_axis(file_obj, axisname, 'X', domain_position=xpos(i)) if (.not. file_obj%is_readonly) then !if writing file - call register_field(file_obj, axisname, "double", (/axisname/)) + call register_field(file_obj, axisname, axis_type, (/axisname/)) call register_variable_attribute(file_obj,axisname, "axis", "X", str_len=1) call get_global_io_domain_indices(file_obj, axisname, is, ie, buffer) call write_data(file_obj, axisname, buffer) @@ -177,7 +183,7 @@ subroutine fv_io_register_axis(file_obj, numx, xpos, numy, ypos, numz, zsize) axisname = 'yaxis_'//suffix call register_axis(file_obj, axisname, 'Y', domain_position=ypos(i)) if (.not. file_obj%is_readonly) then !if writing file - call register_field(file_obj, axisname, "double", (/axisname/)) + call register_field(file_obj, axisname, axis_type, (/axisname/)) call register_variable_attribute(file_obj,axisname, "axis", "Y", str_len=1) call get_global_io_domain_indices(file_obj, axisname, is, ie, buffer) call write_data(file_obj, axisname, buffer) @@ -191,7 +197,7 @@ subroutine fv_io_register_axis(file_obj, numx, xpos, numy, ypos, numz, zsize) axisname = 'zaxis_'//suffix call register_axis(file_obj, axisname, zsize(i)) if (.not. file_obj%is_readonly) then !if writing file - call register_field(file_obj, axisname, "double", (/axisname/)) + call register_field(file_obj, axisname, axis_type, (/axisname/)) call register_variable_attribute(file_obj,axisname, "axis", "Z", str_len=1) if (allocated(buffer)) deallocate(buffer) allocate(buffer(zsize(i))) @@ -206,7 +212,7 @@ subroutine fv_io_register_axis(file_obj, numx, xpos, numy, ypos, numz, zsize) call register_axis(file_obj, "Time", unlimited) if (.not. file_obj%is_readonly) then !if writing file - call register_field(file_obj, "Time", "double", (/"Time"/)) + call register_field(file_obj, "Time", axis_type, (/"Time"/)) call register_variable_attribute(file_obj, "Time", "cartesian_axis", "T", str_len=1) call register_variable_attribute(file_obj, "Time", "units", "time level", & str_len=len("time level")) @@ -307,7 +313,7 @@ subroutine fv_io_register_restart(Atm) call register_axis(Atm%Fv_restart, "xaxis_1", size(Atm%ak(:), 1)) call register_axis(Atm%Fv_restart, "Time", unlimited) if (.not. Atm%Fv_restart%is_readonly) then !if writing file - call register_field(Atm%Fv_restart, "xaxis_1", "double", (/"xaxis_1"/)) + call register_field(Atm%Fv_restart, "xaxis_1", axis_type, (/"xaxis_1"/)) call register_variable_attribute(Atm%Fv_restart,"xaxis_1", "axis", "X", str_len=1) if (allocated(buffer)) deallocate(buffer) allocate(buffer(size(Atm%ak(:), 1))) @@ -316,7 +322,7 @@ subroutine fv_io_register_restart(Atm) end do call write_data(Atm%Fv_restart, "xaxis_1", buffer) deallocate(buffer) - call register_field(Atm%Fv_restart, "Time", "double", (/"Time"/)) + call register_field(Atm%Fv_restart, "Time", axis_type, (/"Time"/)) call register_variable_attribute(Atm%Fv_restart, dim_names_2d(2), "cartesian_axis", "T", str_len=1) call register_variable_attribute(Atm%Fv_restart, dim_names_2d(2), "units", "time level", str_len=len("time level")) call register_variable_attribute(Atm%Fv_restart, dim_names_2d(2), "long_name", dim_names_2d(2), str_len=len(dim_names_2d(2)))