1 Code Modification¶
The following scripts are provided by the author to enable urban LCZ (Local Climate Zone) classification within the Community Terrestrial Systems Model (CTSM), the land component of CESM. These scripts are intended for a specific version of CTSM, and we recommend manual code modification to ensure compatibility.
1.1 Use Modified Code Based on CTSM5.2.005¶
The author provides modified source files based on CTSM version 5.2.005. Users may directly replace the corresponding original files in their CTSM codebase with the modified versions listed below.
Download Source Code¶
export CTSMNAME=CTSMdev
cd ${WRF_ROOT}/${WRFNAME}
git clone --branch ctsm5.2.025 https://github.com/ESCOMP/CTSM ${CTSMNAME}
cd ${CTSMNAME}
./manage_externals/checkout_externals
./manage_externals/checkout_externals -S
Note: ctsm5.2.025 is provided for the existing code modification. Users should manually modify the code based on the specific version of CTSM they are using.
Replace Modified Files¶
1.2 Manual Code Modifications for Specific CTSM Versions¶
For a specific CTSM version, users need to manually modify the source code, which requires a basic understanding of the Fortran programming language.
Modified code sections are denoted using the following markers:
!YS
MODIFICATION
!YS
Download Source Code¶
export CTSMNAME=CTSMdev
cd ${WRF_ROOT}/${WRFNAME}
git clone https://github.com/ESCOMP/CTSM ${CTSMNAME}
cd ${CTSMNAME}
git checkout ctsm5.3.024
./bin/git-fleximod update
Note: The latest CTSM updates model infrastructure and removes the
mct
coupler.
Code Modification¶
Modify
bld/namelist_files/namelist_definition_ctsm.xml
at the bottom line,From:
<entry id="max_tillage_depth" type="real" category="physics" group="tillage_inparm" valid_values="" value="0.26d00"> Maximum depth to till soil (m). Default 0.26; original (Graham et al., 2021) value was unintentionally 0.32. </entry> </namelist_definition>
To:
<entry id="max_tillage_depth" type="real" category="physics" group="tillage_inparm" valid_values="" value="0.26d00"> Maximum depth to till soil (m). Default 0.26; original (Graham et al., 2021) value was unintentionally 0.32. </entry> !YS <!-- ======================================================================================== --> <!-- Namelist options related to the urban land-unit --> <!-- ======================================================================================== --> <entry id="use_lcz" type="logical" category="clm_physics" group="clm_inparm" valid_values="" value=".false."> If TRUE, urban local climate zone landunits will be activated (Currently NOT implemented). </entry> !YS </namelist_definition>
In
src/cpl/share_esmf/UrbanTimeVarType.F90
After around Line 18
use GridcellType , only : grc
, add:!YS use clm_varctl , only : use_lcz !YS
After around Line 80
end if
, add:!YS if (use_lcz) then stream_varname_MAX = 10 else stream_varname_MAX = 3 end if !YS
After around Line 124
use UrbanParamsType , only : urban_explicit_ac
, add:!YS use landunit_varcon , only : isturb_lcz1, isturb_lcz2, isturb_lcz3, & isturb_lcz4, isturb_lcz5, isturb_lcz6, & isturb_lcz7, isturb_lcz8, isturb_lcz9, & isturb_lcz10 !YS
After around Line 167
stream_meshfile_urbantv = ' '
, changeFrom:
stream_varnames(1) = "tbuildmax_TBD" stream_varnames(2) = "tbuildmax_HD" stream_varnames(3) = "tbuildmax_MD"
To:
!YS if(.not. use_lcz) then stream_varnames(isturb_tbd -6) = "tbuildmax_TBD" stream_varnames(isturb_hd -6) = "tbuildmax_HD" stream_varnames(isturb_md -6) = "tbuildmax_MD" else if(use_lcz) then stream_varnames(isturb_lcz1 -6) = "tbuildmax_LCZ1" stream_varnames(isturb_lcz2 -6) = "tbuildmax_LCZ2" stream_varnames(isturb_lcz3 -6) = "tbuildmax_LCZ3" stream_varnames(isturb_lcz4 -6) = "tbuildmax_LCZ4" stream_varnames(isturb_lcz5 -6) = "tbuildmax_LCZ5" stream_varnames(isturb_lcz6 -6) = "tbuildmax_LCZ6" stream_varnames(isturb_lcz7 -6) = "tbuildmax_LCZ7" stream_varnames(isturb_lcz8 -6) = "tbuildmax_LCZ8" stream_varnames(isturb_lcz9 -6) = "tbuildmax_LCZ9" stream_varnames(isturb_lcz10-6) = "tbuildmax_LCZ10" end if !YS
In
src/dyn_subgrid/dynInitColumnsMod.F90
After around Line 129, change
From:
case(isturb_MIN:isturb_MAX)
To:
!YS case(isturb_MIN:isturb_MAX) !YS case(isturb_MIN:) !YS
In
src/main/clm_varctl.F90
After around Line 413
logical, public :: use_biomass_heat_storage = .false. ! true => include biomass heat storage in canopy energy budget
, add:!YS !---------------------------------------------------------- ! urban landunit based on LCZs !---------------------------------------------------------- logical, public :: use_lcz = .false. !YS
In
src/main/controlMod.F90
After around Line 215
z0param_method, use_z0m_snowmelt
, add:
!YS ! flag for urban LCZs namelist /clm_inparm/ use_lcz !YS
After Line 896
end if
, add
!YS ! urban landunit call mpi_bcast(use_lcz, 1, MPI_LOGICAL, 0, mpicom, ier) !YS
In
src/main/initGridCellsMod.F90
After around Line 63
use shr_const_mod , only : SHR_CONST_PI
, add:!YS use clm_varctl , only : use_lcz use landunit_varcon , only : isturb_lcz1,isturb_lcz2,isturb_lcz3,isturb_lcz4,& isturb_lcz5,isturb_lcz6,isturb_lcz7,isturb_lcz8,& isturb_lcz9,isturb_lcz10 !YS
After around Line 139
end do
, changeFrom:
! Determine urban tall building district landunit do gdc = bounds_clump%begg,bounds_clump%endg call set_landunit_urban( & ltype=isturb_tbd, gi=gdc, li=li, ci=ci, pi=pi) end do ! Determine urban high density landunit do gdc = bounds_clump%begg,bounds_clump%endg call set_landunit_urban( & ltype=isturb_hd, gi=gdc, li=li, ci=ci, pi=pi) end do ! Determine urban medium density landunit do gdc = bounds_clump%begg,bounds_clump%endg call set_landunit_urban( & ltype=isturb_md, gi=gdc, li=li, ci=ci, pi=pi) end do
To:
!YS if (.not. use_lcz) then ! Determine urban tall building district landunit do gdc = bounds_clump%begg,bounds_clump%endg call set_landunit_urban( & ltype=isturb_tbd, gi=gdc, li=li, ci=ci, pi=pi) end do ! Determine urban high density landunit do gdc = bounds_clump%begg,bounds_clump%endg call set_landunit_urban( & ltype=isturb_hd, gi=gdc, li=li, ci=ci, pi=pi) end do ! Determine urban medium density landunit do gdc = bounds_clump%begg,bounds_clump%endg call set_landunit_urban( & ltype=isturb_md, gi=gdc, li=li, ci=ci, pi=pi) end do else if (use_lcz) then ! Determine urban LCZ1 landunit do gdc = bounds_clump%begg,bounds_clump%endg call set_landunit_urban( & ltype=isturb_lcz1, gi=gdc, li=li, ci=ci, pi=pi) end do ! Determine urban LCZ2 landunit do gdc = bounds_clump%begg,bounds_clump%endg call set_landunit_urban( & ltype=isturb_lcz2, gi=gdc, li=li, ci=ci, pi=pi) end do ! Determine urban LCZ3 landunit do gdc = bounds_clump%begg,bounds_clump%endg call set_landunit_urban( & ltype=isturb_lcz3, gi=gdc, li=li, ci=ci, pi=pi) end do ! Determine urban LCZ4 landunit do gdc = bounds_clump%begg,bounds_clump%endg call set_landunit_urban( & ltype=isturb_lcz4, gi=gdc, li=li, ci=ci, pi=pi) end do ! Determine urban LCZ5 landunit do gdc = bounds_clump%begg,bounds_clump%endg call set_landunit_urban( & ltype=isturb_lcz5, gi=gdc, li=li, ci=ci, pi=pi) end do ! Determine urban LCZ6 landunit do gdc = bounds_clump%begg,bounds_clump%endg call set_landunit_urban( & ltype=isturb_lcz6, gi=gdc, li=li, ci=ci, pi=pi) end do ! Determine urban LCZ7 landunit do gdc = bounds_clump%begg,bounds_clump%endg call set_landunit_urban( & ltype=isturb_lcz7, gi=gdc, li=li, ci=ci, pi=pi) end do ! Determine urban LCZ8 landunit do gdc = bounds_clump%begg,bounds_clump%endg call set_landunit_urban( & ltype=isturb_lcz8, gi=gdc, li=li, ci=ci, pi=pi) end do ! Determine urban LCZ9 landunit do gdc = bounds_clump%begg,bounds_clump%endg call set_landunit_urban( & ltype=isturb_lcz9, gi=gdc, li=li, ci=ci, pi=pi) end do ! Determine urban LCZ10 landunit do gdc = bounds_clump%begg,bounds_clump%endg call set_landunit_urban( & ltype=isturb_lcz10, gi=gdc, li=li, ci=ci, pi=pi) end do end if !YS
After around Line 593
use pftconMod , only : noveg
, add:!YS use clm_varctl , only : use_lcz use landunit_varcon , only : isturb_lcz1, isturb_lcz2, isturb_lcz3, & isturb_lcz4, isturb_lcz5, isturb_lcz6, & isturb_lcz7, isturb_lcz8, isturb_lcz9, & isturb_lcz10 use subgridMod , only : subgrid_get_info_urban_lcz1, subgrid_get_info_urban_lcz2, & subgrid_get_info_urban_lcz3, subgrid_get_info_urban_lcz4, & subgrid_get_info_urban_lcz5, subgrid_get_info_urban_lcz6, & subgrid_get_info_urban_lcz7, subgrid_get_info_urban_lcz8, & subgrid_get_info_urban_lcz9, subgrid_get_info_urban_lcz10 !YS
After around Line 628
! Set decomposition properties, and set variables specific to urban density type
, changeFrom:
select case (ltype) case (isturb_tbd) call subgrid_get_info_urban_tbd(gi, & npatches=npatches, ncols=ncols, nlunits=nlunits) case (isturb_hd) call subgrid_get_info_urban_hd(gi, & npatches=npatches, ncols=ncols, nlunits=nlunits) case (isturb_md) call subgrid_get_info_urban_md(gi, & npatches=npatches, ncols=ncols, nlunits=nlunits) case default write(iulog,*)' set_landunit_urban: unknown ltype: ', ltype call endrun(msg=errMsg(sourcefile, __LINE__)) end select
To:
!YS if (.not. use_lcz) then select case (ltype) case (isturb_tbd) call subgrid_get_info_urban_tbd(gi, & npatches=npatches, ncols=ncols, nlunits=nlunits) case (isturb_hd) call subgrid_get_info_urban_hd(gi, & npatches=npatches, ncols=ncols, nlunits=nlunits) case (isturb_md) call subgrid_get_info_urban_md(gi, & npatches=npatches, ncols=ncols, nlunits=nlunits) case default write(iulog,*)' set_landunit_urban: unknown ltype: ', ltype call endrun(msg=errMsg(sourcefile, __LINE__)) end select else if (use_lcz) then select case (ltype) case (isturb_lcz1) call subgrid_get_info_urban_lcz1(gi, & npatches=npatches, ncols=ncols, nlunits=nlunits) case (isturb_lcz2) call subgrid_get_info_urban_lcz2(gi, & npatches=npatches, ncols=ncols, nlunits=nlunits) case (isturb_lcz3) call subgrid_get_info_urban_lcz3(gi, & npatches=npatches, ncols=ncols, nlunits=nlunits) case (isturb_lcz4) call subgrid_get_info_urban_lcz4(gi, & npatches=npatches, ncols=ncols, nlunits=nlunits) case (isturb_lcz5) call subgrid_get_info_urban_lcz5(gi, & npatches=npatches, ncols=ncols, nlunits=nlunits) case (isturb_lcz6) call subgrid_get_info_urban_lcz6(gi, & npatches=npatches, ncols=ncols, nlunits=nlunits) case (isturb_lcz7) call subgrid_get_info_urban_lcz7(gi, & npatches=npatches, ncols=ncols, nlunits=nlunits) case (isturb_lcz8) call subgrid_get_info_urban_lcz8(gi, & npatches=npatches, ncols=ncols, nlunits=nlunits) case (isturb_lcz9) call subgrid_get_info_urban_lcz9(gi, & npatches=npatches, ncols=ncols, nlunits=nlunits) case (isturb_lcz10) call subgrid_get_info_urban_lcz10(gi, & npatches=npatches, ncols=ncols, nlunits=nlunits) case default write(iulog,*)' set_landunit_urban: unknown ltype: ', ltype call endrun(msg=errMsg(sourcefile, __LINE__)) end select end if !YS
In
src/main/landunit_varcon.F90
After around Line 8
#include "shr_assert.h"
, add!YS use clm_varctl , only : use_lcz !YS
After around Line 30
integer, parameter, public :: isturb_md = 9 !urban md landunit type
, changeFrom:
integer, parameter, public :: isturb_MAX = 9 !maximum urban type index integer, parameter, public :: max_lunit = 9 !maximum value that lun%itype can have !(i.e., largest value in the above list) integer, parameter, public :: landunit_name_length = 40 ! max length of landunit names character(len=landunit_name_length), public :: landunit_names(max_lunit) ! name of each landunit type ! parameters that depend on the above constants integer, parameter, public :: numurbl = isturb_MAX - isturb_MIN + 1 ! number of urban landunits
To:
!YS integer, parameter, public :: isturb_MAX = 9 !maximum urban type index !YS integer, parameter, public :: max_lunit = 9 !maximum value that lun%itype can have !(i.e., largest value in the above !YS integer, parameter, public :: landunit_name_length = 40 ! max length of landunit names !YS character(len=landunit_name_length), public :: landunit_names(max_lunit) ! name of each landunit type !YS ! 10 lCZs urban landunits integer, parameter, public :: isturb_lcz1 = 7 !LCZ 1 urban landunit type integer, parameter, public :: isturb_lcz2 = 8 !LCZ 2 urban landunit type integer, parameter, public :: isturb_lcz3 = 9 !LCZ 3 urban landunit type integer, parameter, public :: isturb_lcz4 = 10 !LCZ 4 urban landunit type integer, parameter, public :: isturb_lcz5 = 11 !LCZ 5 urban landunit type integer, parameter, public :: isturb_lcz6 = 12 !LCZ 6 urban landunit type integer, parameter, public :: isturb_lcz7 = 13 !LCZ 7 urban landunit type integer, parameter, public :: isturb_lcz8 = 14 !LCZ 8 urban landunit type integer, parameter, public :: isturb_lcz9 = 15 !LCZ 9 urban landunit type integer, parameter, public :: isturb_lcz10 = 16 !LCZ 10 urban landunit type integer, parameter, public :: landunit_name_length = 40 ! max length of landunit names integer, public :: max_lunit !maximum value that lun%itype can have integer, public :: isturb_MAX !maximum urban type index integer, public :: numurbl character(len=landunit_name_length), allocatable, public :: landunit_names(:) ! name of each landunit type !YS ! parameters that depend on the above constants !YS integer, parameter, public :: numurbl = isturb_MAX - isturb_MIN + 1 ! number of urban landunits
After around Line 86
character(len=*), parameter :: subname = 'landunit_varcon_init'
, add:!YS ! parameters that depend on the above constants if (.not. use_lcz) then max_lunit = 9 isturb_MAX = 9 else if (use_lcz) then max_lunit = 16 isturb_MAX = 16 end if numurbl = isturb_MAX - isturb_MIN + 1 allocate(landunit_names(max_lunit)) !YS
After around Line 155
landunit_names(istwet) = 'wetland'
, changeFrom:
landunit_names(isturb_tbd) = 'urban_tbd' landunit_names(isturb_hd) = 'urban_hd' landunit_names(isturb_md) = 'urban_md'
To:
!YS if (.not. use_lcz) then landunit_names(isturb_tbd) = 'urban_tbd' landunit_names(isturb_hd) = 'urban_hd' landunit_names(isturb_md) = 'urban_md' else if (use_lcz) then landunit_names(isturb_lcz1) = 'urban_lcz1' landunit_names(isturb_lcz2) = 'urban_lcz2' landunit_names(isturb_lcz3) = 'urban_lcz3' landunit_names(isturb_lcz4) = 'urban_lcz4' landunit_names(isturb_lcz5) = 'urban_lcz5' landunit_names(isturb_lcz6) = 'urban_lcz6' landunit_names(isturb_lcz7) = 'urban_lcz7' landunit_names(isturb_lcz8) = 'urban_lcz8' landunit_names(isturb_lcz9) = 'urban_lcz9' landunit_names(isturb_lcz10) = 'urban_lcz10' !landunit_names(isturb_lcz11) = 'urban_lcz11' end if !YS
In
src/main/subgridMod.F90
After around Line 20
use FatesInterfaceTypesMod, only : fates_maxElementsPerSite
, add:!YS use clm_varctl , only : use_lcz use landunit_varcon, only : isturb_lcz1, isturb_lcz2, isturb_lcz3, isturb_lcz4, & isturb_lcz5, isturb_lcz6, isturb_lcz7, & isturb_lcz8, isturb_lcz9, isturb_lcz10 !YS
After around Line 47
public :: urban_landunit_exists ! returns true if the urban landunit should be created in memory
, add:!YS public :: subgrid_get_info_urban_lcz1 public :: subgrid_get_info_urban_lcz2 public :: subgrid_get_info_urban_lcz3 public :: subgrid_get_info_urban_lcz4 public :: subgrid_get_info_urban_lcz5 public :: subgrid_get_info_urban_lcz6 public :: subgrid_get_info_urban_lcz7 public :: subgrid_get_info_urban_lcz8 public :: subgrid_get_info_urban_lcz9 public :: subgrid_get_info_urban_lcz10 !YS
After around Line 95, change
From:
call subgrid_get_info_urban_tbd(gi, npatches_temp, ncols_temp, nlunits_temp) call accumulate_counters() call subgrid_get_info_urban_hd(gi, npatches_temp, ncols_temp, nlunits_temp) call accumulate_counters() call subgrid_get_info_urban_md(gi, npatches_temp, ncols_temp, nlunits_temp) call accumulate_counters()
To:
!YS if (.not. use_lcz) then call subgrid_get_info_urban_tbd(gi, npatches_temp, ncols_temp, nlunits_temp) call accumulate_counters() call subgrid_get_info_urban_hd(gi, npatches_temp, ncols_temp, nlunits_temp) call accumulate_counters() call subgrid_get_info_urban_md(gi, npatches_temp, ncols_temp, nlunits_temp) call accumulate_counters() else if (use_lcz) then call subgrid_get_info_urban_lcz1(gi, npatches_temp, ncols_temp, nlunits_temp) call accumulate_counters() call subgrid_get_info_urban_lcz2(gi, npatches_temp, ncols_temp, nlunits_temp) call accumulate_counters() call subgrid_get_info_urban_lcz3(gi, npatches_temp, ncols_temp, nlunits_temp) call accumulate_counters() call subgrid_get_info_urban_lcz4(gi, npatches_temp, ncols_temp, nlunits_temp) call accumulate_counters() call subgrid_get_info_urban_lcz5(gi, npatches_temp, ncols_temp, nlunits_temp) call accumulate_counters() call subgrid_get_info_urban_lcz6(gi, npatches_temp, ncols_temp, nlunits_temp) call accumulate_counters() call subgrid_get_info_urban_lcz7(gi, npatches_temp, ncols_temp, nlunits_temp) call accumulate_counters() call subgrid_get_info_urban_lcz8(gi, npatches_temp, ncols_temp, nlunits_temp) call accumulate_counters() call subgrid_get_info_urban_lcz9(gi, npatches_temp, ncols_temp, nlunits_temp) call accumulate_counters() call subgrid_get_info_urban_lcz10(gi, npatches_temp, ncols_temp, nlunits_temp) call accumulate_counters() end if !YS
After aound Line 370
end subroutine subgrid_get_info_urban_md
, add:!YS subroutine subgrid_get_info_urban_lcz1(gi, npatches, ncols, nlunits) ! ! !DESCRIPTION: ! Obtain properties for urban lcz1 landunit in this grid cell ! ! !ARGUMENTS: integer, intent(in) :: gi ! grid cell index integer, intent(out) :: npatches ! number of urban lcz1 patches in this grid cell integer, intent(out) :: ncols ! number of urban lcz1 columns in this grid cell integer, intent(out) :: nlunits ! number of urban lcz1 landunits in this grid cell ! ! !LOCAL VARIABLES: character(len=*), parameter :: subname = 'subgrid_get_info_urban_lcz1' !----------------------------------------------------------------------- call subgrid_get_info_urban(gi, isturb_lcz1, npatches, ncols, nlunits) end subroutine subgrid_get_info_urban_lcz1 !----------------------------------------------------------------------- subroutine subgrid_get_info_urban_lcz2(gi, npatches, ncols, nlunits) ! ! !DESCRIPTION: ! Obtain properties for urban lcz2 landunit in this grid cell ! ! !ARGUMENTS: integer, intent(in) :: gi ! grid cell index integer, intent(out) :: npatches ! number of urban lcz2 patches in this grid cell integer, intent(out) :: ncols ! number of urban lcz2 columns in this grid cell integer, intent(out) :: nlunits ! number of urban lcz2 landunits in this grid cell ! ! !LOCAL VARIABLES: character(len=*), parameter :: subname = 'subgrid_get_info_urban_lcz2' !----------------------------------------------------------------------- call subgrid_get_info_urban(gi, isturb_lcz2, npatches, ncols, nlunits) end subroutine subgrid_get_info_urban_lcz2 !----------------------------------------------------------------------- subroutine subgrid_get_info_urban_lcz3(gi, npatches, ncols, nlunits) ! ! !DESCRIPTION: ! Obtain properties for urban lcz3 landunit in this grid cell ! ! !ARGUMENTS: integer, intent(in) :: gi ! grid cell index integer, intent(out) :: npatches ! number of urban lcz3 patches in this grid cell integer, intent(out) :: ncols ! number of urban lcz3 columns in this grid cell integer, intent(out) :: nlunits ! number of urban lcz3 landunits in this grid cell ! ! !LOCAL VARIABLES: character(len=*), parameter :: subname = 'subgrid_get_info_urban_lcz3' !----------------------------------------------------------------------- call subgrid_get_info_urban(gi, isturb_lcz3, npatches, ncols, nlunits) end subroutine subgrid_get_info_urban_lcz3 !----------------------------------------------------------------------- subroutine subgrid_get_info_urban_lcz4(gi, npatches, ncols, nlunits) ! ! !DESCRIPTION: ! Obtain properties for urban lcz4 landunit in this grid cell ! ! !ARGUMENTS: integer, intent(in) :: gi ! grid cell index integer, intent(out) :: npatches ! number of urban lcz4 patches in this grid cell integer, intent(out) :: ncols ! number of urban lcz4 columns in this grid cell integer, intent(out) :: nlunits ! number of urban lcz4 landunits in this grid cell ! ! !LOCAL VARIABLES: character(len=*), parameter :: subname = 'subgrid_get_info_urban_lcz4' !----------------------------------------------------------------------- call subgrid_get_info_urban(gi, isturb_lcz4, npatches, ncols, nlunits) end subroutine subgrid_get_info_urban_lcz4 !----------------------------------------------------------------------- subroutine subgrid_get_info_urban_lcz5(gi, npatches, ncols, nlunits) ! ! !DESCRIPTION: ! Obtain properties for urban lcz5 landunit in this grid cell ! ! !ARGUMENTS: integer, intent(in) :: gi ! grid cell index integer, intent(out) :: npatches ! number of urban lcz5 patches in this grid cell integer, intent(out) :: ncols ! number of urban lcz5 columns in this grid cell integer, intent(out) :: nlunits ! number of urban lcz5 landunits in this grid cell ! ! !LOCAL VARIABLES: character(len=*), parameter :: subname = 'subgrid_get_info_urban_lcz5' !----------------------------------------------------------------------- call subgrid_get_info_urban(gi, isturb_lcz5, npatches, ncols, nlunits) end subroutine subgrid_get_info_urban_lcz5 !----------------------------------------------------------------------- subroutine subgrid_get_info_urban_lcz6(gi, npatches, ncols, nlunits) ! ! !DESCRIPTION: ! Obtain properties for urban lcz6 landunit in this grid cell ! ! !ARGUMENTS: integer, intent(in) :: gi ! grid cell index integer, intent(out) :: npatches ! number of urban lcz6 patches in this grid cell integer, intent(out) :: ncols ! number of urban lcz6 columns in this grid cell integer, intent(out) :: nlunits ! number of urban lcz6 landunits in this grid cell ! ! !LOCAL VARIABLES: character(len=*), parameter :: subname = 'subgrid_get_info_urban_lcz6' !----------------------------------------------------------------------- call subgrid_get_info_urban(gi, isturb_lcz6, npatches, ncols, nlunits) end subroutine subgrid_get_info_urban_lcz6 !----------------------------------------------------------------------- subroutine subgrid_get_info_urban_lcz7(gi, npatches, ncols, nlunits) ! ! !DESCRIPTION: ! Obtain properties for urban lcz7 landunit in this grid cell ! ! !ARGUMENTS: integer, intent(in) :: gi ! grid cell index integer, intent(out) :: npatches ! number of urban lcz7 patches in this grid cell integer, intent(out) :: ncols ! number of urban lcz7 columns in this grid cell integer, intent(out) :: nlunits ! number of urban lcz7 landunits in this grid cell ! ! !LOCAL VARIABLES: character(len=*), parameter :: subname = 'subgrid_get_info_urban_lcz7' !----------------------------------------------------------------------- call subgrid_get_info_urban(gi, isturb_lcz7, npatches, ncols, nlunits) end subroutine subgrid_get_info_urban_lcz7 !----------------------------------------------------------------------- subroutine subgrid_get_info_urban_lcz8(gi, npatches, ncols, nlunits) ! ! !DESCRIPTION: ! Obtain properties for urban lcz8 landunit in this grid cell ! ! !ARGUMENTS: integer, intent(in) :: gi ! grid cell index integer, intent(out) :: npatches ! number of urban lcz8 patches in this grid cell integer, intent(out) :: ncols ! number of urban lcz8 columns in this grid cell integer, intent(out) :: nlunits ! number of urban lcz8 landunits in this grid cell ! ! !LOCAL VARIABLES: character(len=*), parameter :: subname = 'subgrid_get_info_urban_lcz8' !----------------------------------------------------------------------- call subgrid_get_info_urban(gi, isturb_lcz8, npatches, ncols, nlunits) end subroutine subgrid_get_info_urban_lcz8 !----------------------------------------------------------------------- subroutine subgrid_get_info_urban_lcz9(gi, npatches, ncols, nlunits) ! ! !DESCRIPTION: ! Obtain properties for urban lcz9 landunit in this grid cell ! ! !ARGUMENTS: integer, intent(in) :: gi ! grid cell index integer, intent(out) :: npatches ! number of urban lcz9 patches in this grid cell integer, intent(out) :: ncols ! number of urban lcz9 columns in this grid cell integer, intent(out) :: nlunits ! number of urban lcz9 landunits in this grid cell ! ! !LOCAL VARIABLES: character(len=*), parameter :: subname = 'subgrid_get_info_urban_lcz9' !----------------------------------------------------------------------- call subgrid_get_info_urban(gi, isturb_lcz9, npatches, ncols, nlunits) end subroutine subgrid_get_info_urban_lcz9 !----------------------------------------------------------------------- subroutine subgrid_get_info_urban_lcz10(gi, npatches, ncols, nlunits) ! ! !DESCRIPTION: ! Obtain properties for urban lcz10 landunit in this grid cell ! ! !ARGUMENTS: integer, intent(in) :: gi ! grid cell index integer, intent(out) :: npatches ! number of urban lcz10 patches in this grid cell integer, intent(out) :: ncols ! number of urban lcz10 columns in this grid cell integer, intent(out) :: nlunits ! number of urban lcz10 landunits in this grid cell ! ! !LOCAL VARIABLES: character(len=*), parameter :: subname = 'subgrid_get_info_urban_lcz10' !----------------------------------------------------------------------- call subgrid_get_info_urban(gi, isturb_lcz10, npatches, ncols, nlunits) end subroutine subgrid_get_info_urban_lcz10 !YS