Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

sfc_climo_gen - use scale parameter to read scaled datasets #958

Open
wants to merge 23 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
df89e12
Update ccpp-physics submodule.
sanatcumar Aug 17, 2023
d4cfcc0
Update ccpp-physics
sanatcumar Aug 17, 2023
df0788d
Merge remote-tracking branch 'upstream/develop' into develop
sanatcumar Sep 27, 2023
815ee4f
Merge with develop
sanatcumar Nov 14, 2023
4da0201
Merge remote-tracking branch 'upstream/develop' into develop
sanatcumar Nov 14, 2023
28e9ec0
Merge remote-tracking branch 'upstream/develop' into develop
sanatcumar Nov 27, 2023
09ec74a
Merge remote-tracking branch 'upstream/develop' into develop
sanatcumar Nov 28, 2023
d1d8929
Merge branch 'ufs-community:develop' into develop
sanatcumar Jun 3, 2024
2b2c303
use_scale push
sanatcumar Jun 3, 2024
6e203b4
changes to interep.F90
sanatcumar Jun 3, 2024
f16e80d
removed unnecessary declerations
sanatcumar Jun 3, 2024
a44ee4d
Fixed unnecessary logic
sanatcumar Jun 3, 2024
1117f4f
Removed commented statements
sanatcumar Jun 3, 2024
b6a2460
Removed prints/ commented statements and empty spaces
sanatcumar Jun 3, 2024
e2b4d0a
Added doxygen info
sanatcumar Jun 25, 2024
7789731
Doxygen udpates
sanatcumar Jun 25, 2024
6de1010
updated the fix links
sanatcumar Aug 21, 2024
da6fb4b
Merge branch 'ufs-community:develop' into use_scale
sanatcumar Aug 22, 2024
1401c52
addressing Orion memory out issues
Nov 5, 2024
c62fab0
Orion Memory issues
Nov 5, 2024
6c74f46
Merge branch 'ufs-community:develop' into use_scale
sanatcumar Nov 6, 2024
562ee6a
Includes codes to read in the new SAI data sets
sanatcumar Jan 10, 2025
0237062
Version that will can pass the link to the file from the driver.
sanatcumar Jan 15, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions driver_scripts/driver_grid.hera.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
#SBATCH -e log.fv3_grid_driver
#SBATCH --nodes=6 --ntasks-per-node=12
#SBATCH --partition=bigmem
#SBATCH -q debug
#SBATCH -t 00:30:00
#SBATCH -q batch
#SBATCH -t 04:30:00

#-----------------------------------------------------------------------
# Driver script to create a cubic-sphere based model grid on Hera.
Expand Down Expand Up @@ -80,7 +80,7 @@ export gtype=uniform # 'uniform', 'stretch', 'nest',
export make_gsl_orog=false # When 'true' will output 'oro' files for
# the GSL orographic drag suite.

export vegsoilt_frac='.false.' # When .false., output dominant soil and
export vegsoilt_frac='.true.' # When .false., output dominant soil and
# vegetation type category. When .true.,
# output fraction of each category and
# the dominant category. A Fortran logical,
Expand Down Expand Up @@ -159,8 +159,12 @@ fi

export home_dir=$SLURM_SUBMIT_DIR/..
export TEMP_DIR=/scratch2/NCEPDEV/stmp1/$LOGNAME/fv3_grid.$gtype
export out_dir=/scratch2/NCEPDEV/stmp1/$LOGNAME/my_grids
export out_dir=/scratch2/NCEPDEV/stmp1/$LOGNAME/my_grids/sai/frac

export input_leaf_area_index_file=/scratch2/NCEPDEV/land/Sanath.Kumar/ufs/lai/data2/LAI_climo_umd.nc
export input_leaf_area_index_file=/scratch2/NCEPDEV/land/Sanath.Kumar/ufs/lai/LAI_climo_pnnl_wrf1.nc
export input_leaf_area_index_file=/scratch2/NCEPDEV/land/Sanath.Kumar/approved/UFS_UTILS/fix/sfc_climo/LAI_climo_pnnl.nc
export input_stem_area_index_file=/scratch2/NCEPDEV/land/Sanath.Kumar/ufs/data/SAI_climo_pnnl_compressed_varnamfix.nc
#-----------------------------------------------------------------------
# Should not need to change anything below here.
#-----------------------------------------------------------------------
Expand Down
7 changes: 4 additions & 3 deletions driver_scripts/driver_grid.orion.sh
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,10 @@
#SBATCH --open-mode=truncate
#SBATCH -o log.fv3_grid_driver
#SBATCH -e log.fv3_grid_driver
#SBATCH --nodes=2 --ntasks-per-node=15
#SBATCH -q debug
#SBATCH -t 00:30:00
#SBATCH --nodes=6 --ntasks-per-node=12
#SBATCH --partition=bigmem
#SBATCH -q batch
#SBATCH -t 04:30:00

#-----------------------------------------------------------------------
# Driver script to create a cubic-sphere based model grid on Orion.
Expand Down
12 changes: 12 additions & 0 deletions sorc/sfc_climo_gen.fd/driver.F90
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,18 @@ program driver
call source_grid_cleanup
endif


! Stem Area Index

if (trim(input_stem_area_index_file) /= "NULL") then
call define_source_grid(localpet, npets, input_stem_area_index_file)
method=ESMF_REGRIDMETHOD_BILINEAR
if (trim(stem_area_index_method)=="conserve") method=ESMF_REGRIDMETHOD_CONSERVE
call interp(localpet, method, input_stem_area_index_file)
call source_grid_cleanup
endif


call model_grid_cleanup

print*,"- CALL ESMF_finalize"
Expand Down
61 changes: 57 additions & 4 deletions sorc/sfc_climo_gen.fd/interp.F90
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ subroutine interp(localpet, method, input_file)
integer :: varid, record
integer :: tile_num, pt_loc_this_tile
integer :: isrctermprocessing

double precision :: scale
integer(esmf_kind_i4), allocatable :: mask_mdl_one_tile(:,:)
integer(esmf_kind_i4), pointer :: unmapped_ptr(:)

Expand Down Expand Up @@ -110,7 +110,13 @@ subroutine interp(localpet, method, input_file)
status = nf90_inq_varid(ncid, field_names(n), varid)
call netcdf_err(status, "IN ROUTINE INTERP READING FIELD ID")
status = nf90_get_var(ncid, varid, data_src_global, start=(/1,1,t/), count=(/i_src,j_src,1/))

call netcdf_err(status, "IN ROUTINE INTERP READING FIELD")
status=nf90_get_att(ncid, varid, 'scale_factor', scale)
if (status == 0) then
call scale_data(data_src_global,i_src,j_src,scale)
endif

endif

print*,"- CALL FieldScatter FOR SOURCE GRID DATA."
Expand Down Expand Up @@ -194,7 +200,7 @@ subroutine interp(localpet, method, input_file)

if (.not. fract_vegsoil_type) then
select case (trim(field_names(n)))
case ('substrate_temperature','vegetation_greenness','leaf_area_index','slope_type','soil_type','soil_color')
case ('substrate_temperature','vegetation_greenness','leaf_area_index','slope_type','soil_type','soil_color','stem_area_index')
if (localpet == 0) then
allocate(vegt_mdl_one_tile(i_mdl,j_mdl))
else
Expand Down Expand Up @@ -227,7 +233,7 @@ subroutine interp(localpet, method, input_file)

if (.not. fract_vegsoil_type) then
select case (trim(field_names(n)))
case ('substrate_temperature','vegetation_greenness','leaf_area_index','slope_type','soil_type','soil_color')
case('substrate_temperature','vegetation_greenness','leaf_area_index','slope_type','soil_type','soil_color','stem_area_index')
print*,"- CALL FieldGather FOR MODEL GRID VEG TYPE."
call ESMF_FieldGather(vegt_field_mdl, vegt_mdl_one_tile, rootPet=0, tile=tile, rc=rc)
if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) &
Expand All @@ -240,7 +246,7 @@ subroutine interp(localpet, method, input_file)
call search (data_mdl_one_tile, mask_mdl_one_tile, i_mdl, j_mdl, tile, field_names(n))
if (.not. fract_vegsoil_type) then
select case (field_names(n))
case ('substrate_temperature','vegetation_greenness','leaf_area_index','slope_type','soil_type','soil_color')
case('substrate_temperature','vegetation_greenness','leaf_area_index','slope_type','soil_type','soil_color','stem_area_index')
call adjust_for_landice (data_mdl_one_tile, vegt_mdl_one_tile, i_mdl, j_mdl, field_names(n))
end select
endif
Expand All @@ -257,6 +263,7 @@ subroutine interp(localpet, method, input_file)
endif
endif


enddo OUTPUT_LOOP

if (allocated(vegt_mdl_one_tile)) deallocate(vegt_mdl_one_tile)
Expand Down Expand Up @@ -306,6 +313,7 @@ subroutine adjust_for_landice(field, vegt, idim, jdim, field_ch)
integer :: i, j, ierr

real :: landice_value


select case (field_ch)
case ('substrate_temperature') ! soil substrate temp
Expand Down Expand Up @@ -335,6 +343,15 @@ subroutine adjust_for_landice(field, vegt, idim, jdim, field_ch)
endif
enddo
enddo
case ('stem_area_index') ! stem area index
landice_value = 0.0 ! bare ground
do j = 1, jdim
do i = 1, idim
if (nint(vegt(i,j)) == landice) then
field(i,j) = landice_value
endif
enddo
enddo
case ('slope_type') ! slope type
landice_value = 9.0
do j = 1, jdim
Expand Down Expand Up @@ -372,3 +389,39 @@ subroutine adjust_for_landice(field, vegt, idim, jdim, field_ch)
end select

end subroutine adjust_for_landice




!> use Scale to fix the data to the correct value
!!
!! @param[inout] field to scale.
!! @param[in] idim i dimension of model tile.
!! @param[in] jdim j dimension of model tile.
!! @param[in] scale factor to scale the field.
!! @author George Gayno NCEP/EMC
!! @author Sanath Kumar NCEP/EMC
!!
subroutine scale_data(field,idim,jdim,scale)

use esmf
use mpi

implicit none
integer, intent(in) :: idim, jdim
integer :: i, j
real(esmf_kind_r4), intent(inout) :: field(idim,jdim)
double precision :: scale

do j = 1, jdim
do i = 1, idim
field(i,j) = field(i,j)*scale

enddo
enddo
end subroutine scale_data





3 changes: 3 additions & 0 deletions sorc/sfc_climo_gen.fd/output.f90
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,9 @@ subroutine output(data_one_tile, lat_one_tile, lon_one_tile, i_mdl, j_mdl, &
case ('leaf_area_index')
out_file = "./leaf_area_index." // grid_tiles(tile) // ".nc"
out_file_with_halo = "./leaf_area_index." // grid_tiles(tile) // ".halo.nc"
case ('stem_area_index')
out_file = "./stem_area_index." // grid_tiles(tile) // ".nc"
out_file_with_halo = "./stem_area_index." // grid_tiles(tile) // ".halo.nc"
case ('visible_black_sky_albedo', 'visible_white_sky_albedo', 'near_IR_black_sky_albedo', 'near_IR_white_sky_albedo')
out_file = "./snowfree_albedo." // grid_tiles(tile) // ".nc"
out_file_with_halo = "./snowfree_albedo." // grid_tiles(tile) // ".halo.nc"
Expand Down
7 changes: 6 additions & 1 deletion sorc/sfc_climo_gen.fd/program_setup.f90
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ module program_setup
private

character(len=500), public :: input_leaf_area_index_file = "NULL" !< File containing input leaf area index data.
character(len=500), public :: input_stem_area_index_file = "NULL" !< File containing input stem area index data.
character(len=500), public :: input_facsf_file = "NULL" !< File containing input fractional
!! coverage data for strong zenith angle
!! dependent albedo.
Expand All @@ -38,6 +39,8 @@ module program_setup

character(len=50), public :: leaf_area_index_method='bilinear' !< Interpolation method for leaf area index.
!! Conservative or bilinear (default).
character(len=50), public :: stem_area_index_method='bilinear' !< Interpolation method for stem area index.
!! Conservative or bilinear (default).
character(len=50), public :: maximum_snow_albedo_method='bilinear' !< Interpolation method for max snow albedo.
!! Conservative or bilinear (default).
character(len=50), public :: snowfree_albedo_method='bilinear' !< Interpolation method for snowfree albedo.
Expand Down Expand Up @@ -73,10 +76,12 @@ subroutine read_setup_namelist(localpet)
namelist /config/ input_facsf_file, input_substrate_temperature_file, &
input_maximum_snow_albedo_file, input_snowfree_albedo_file, &
input_slope_type_file, input_soil_type_file, input_soil_color_file,&
input_leaf_area_index_file, input_vegetation_type_file, &
input_leaf_area_index_file,input_stem_area_index_file,&
input_vegetation_type_file, &
input_vegetation_greenness_file, mosaic_file_mdl, &
orog_dir_mdl, orog_files_mdl, halo, &
vegetation_greenness_method, leaf_area_index_method, &
stem_area_index_method, &
maximum_snow_albedo_method, snowfree_albedo_method, &
fract_vegsoil_type

Expand Down
2 changes: 2 additions & 0 deletions sorc/sfc_climo_gen.fd/search.f90
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@ subroutine search (field, mask, idim, jdim, tile, field_name)
default_value = 0.5
case ('leaf_area_index') ! leaf area index
default_value = 1.0
case ('stem_area_index') ! stem area index
default_value = 0.0
case ('visible_black_sky_albedo') ! visible black sky albedo
default_value = 0.1
case ('visible_white_sky_albedo') ! visible white sky albedo
Expand Down
4 changes: 3 additions & 1 deletion sorc/sfc_climo_gen.fd/source_grid.F90
Original file line number Diff line number Diff line change
Expand Up @@ -214,9 +214,11 @@ subroutine define_source_grid(localpet, npets, input_file)
call netcdf_err(status, "READING FIELD 1 ID")
status=nf90_get_att(ncid, varid, 'missing_value', missing)
call netcdf_err(status, "READING MISSING VALUE")

status = nf90_close(ncid)




!--------------------------------------------------------------------------
! Create ESMF grid object for the source data grid. Check if
! data is periodic in the east/west direction.
Expand Down
2 changes: 2 additions & 0 deletions ush/fv3gfs_driver_grid.sh
Original file line number Diff line number Diff line change
Expand Up @@ -593,6 +593,8 @@ The following parameters were used
lake_data_srce=$lake_data_srce
binary_lake=$binary_lake
lake_cutoff=$lake_cutoff
input_leaf_area_index_file=$input_leaf_area_index_file
stem_leaf_area_index_file=$input_stem_area_index_file
EOF
elif [ $gtype = nest ] || [ $gtype = regional_gfdl ]; then

Expand Down
4 changes: 4 additions & 0 deletions ush/sfc_climo_gen.sh
Original file line number Diff line number Diff line change
Expand Up @@ -85,12 +85,16 @@ input_soil_color_file="${input_sfc_climo_dir}/soil_color.clm.0.05.nc"
input_vegetation_type_file="${VEG_TYPE_FILE}"
input_vegetation_greenness_file="${input_sfc_climo_dir}/vegetation_greenness.0.144.nc"
mosaic_file_mdl="$mosaic_file"
input_leaf_area_index_file="${input_leaf_area_index_file}"
input_stem_area_index_file="${input_stem_area_index_file}"
orog_dir_mdl="$FIX_FV3"
orog_files_mdl=$the_orog_files
halo=$HALO
maximum_snow_albedo_method="bilinear"
snowfree_albedo_method="bilinear"
vegetation_greenness_method="bilinear"
leaf_area_index_method="conserve"
stem_area_index_method="conserve"
fract_vegsoil_type=${vegsoilt_frac}
/
EOF
Expand Down
Loading