Skip to content

Commit

Permalink
Write netcdf axis variables using the same real kind as data variables (
Browse files Browse the repository at this point in the history
  • Loading branch information
DusanJovic-NOAA committed Sep 26, 2023
1 parent 52bf918 commit 9616e4e
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 9 deletions.
12 changes: 9 additions & 3 deletions driver/fvGFS/fv_ufs_restart_io.F90
Original file line number Diff line number Diff line change
Expand Up @@ -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", &
Expand Down Expand Up @@ -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"

Expand All @@ -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)))
Expand All @@ -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)))
Expand Down
18 changes: 12 additions & 6 deletions tools/fv_io.F90
Original file line number Diff line number Diff line change
Expand Up @@ -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


Expand Down Expand Up @@ -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)
Expand All @@ -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)
Expand All @@ -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)))
Expand All @@ -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"))
Expand Down Expand Up @@ -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)))
Expand All @@ -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)))
Expand Down

0 comments on commit 9616e4e

Please sign in to comment.