From 562ee6a79eabaab7db2ba1e348590f8af7aa4732 Mon Sep 17 00:00:00 2001 From: sanatcumar Date: Fri, 10 Jan 2025 14:05:43 +0000 Subject: [PATCH] Includes codes to read in the new SAI data sets --- sorc/sfc_climo_gen.fd/driver.F90 | 12 ++++++++++++ sorc/sfc_climo_gen.fd/interp.F90 | 15 ++++++++++++--- sorc/sfc_climo_gen.fd/output.f90 | 3 +++ sorc/sfc_climo_gen.fd/program_setup.f90 | 7 ++++++- sorc/sfc_climo_gen.fd/search.f90 | 2 ++ ush/fv3gfs_driver_grid.sh | 2 ++ ush/sfc_climo_gen.sh | 4 +++- 7 files changed, 40 insertions(+), 5 deletions(-) diff --git a/sorc/sfc_climo_gen.fd/driver.F90 b/sorc/sfc_climo_gen.fd/driver.F90 index 520cc99d8..4ab6ba5f5 100644 --- a/sorc/sfc_climo_gen.fd/driver.F90 +++ b/sorc/sfc_climo_gen.fd/driver.F90 @@ -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" diff --git a/sorc/sfc_climo_gen.fd/interp.F90 b/sorc/sfc_climo_gen.fd/interp.F90 index 723ba26d6..e3795a637 100644 --- a/sorc/sfc_climo_gen.fd/interp.F90 +++ b/sorc/sfc_climo_gen.fd/interp.F90 @@ -200,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 @@ -233,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__)) & @@ -246,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 @@ -343,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 diff --git a/sorc/sfc_climo_gen.fd/output.f90 b/sorc/sfc_climo_gen.fd/output.f90 index 7df8c18b7..08fb52448 100644 --- a/sorc/sfc_climo_gen.fd/output.f90 +++ b/sorc/sfc_climo_gen.fd/output.f90 @@ -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" diff --git a/sorc/sfc_climo_gen.fd/program_setup.f90 b/sorc/sfc_climo_gen.fd/program_setup.f90 index 6c1a9068c..60b9da4ba 100644 --- a/sorc/sfc_climo_gen.fd/program_setup.f90 +++ b/sorc/sfc_climo_gen.fd/program_setup.f90 @@ -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. @@ -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. @@ -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 diff --git a/sorc/sfc_climo_gen.fd/search.f90 b/sorc/sfc_climo_gen.fd/search.f90 index 0de2b5817..bf1f572f3 100644 --- a/sorc/sfc_climo_gen.fd/search.f90 +++ b/sorc/sfc_climo_gen.fd/search.f90 @@ -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 diff --git a/ush/fv3gfs_driver_grid.sh b/ush/fv3gfs_driver_grid.sh index 7330e3c59..584c6fee6 100755 --- a/ush/fv3gfs_driver_grid.sh +++ b/ush/fv3gfs_driver_grid.sh @@ -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 diff --git a/ush/sfc_climo_gen.sh b/ush/sfc_climo_gen.sh index 6cf740f2f..9f097c9ee 100755 --- a/ush/sfc_climo_gen.sh +++ b/ush/sfc_climo_gen.sh @@ -85,7 +85,8 @@ 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_sfc_climo_dir}/LAI_climo_pnnl.nc" +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 @@ -93,6 +94,7 @@ 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