From b1f91b389cb73dc0da3f4eb2c42452a7694a906c Mon Sep 17 00:00:00 2001 From: Robin Hogan Date: Thu, 23 Sep 2021 22:30:27 +0100 Subject: [PATCH 01/28] Fixed ordering of spread when more than 1 wavelength --- radsurf/radsurf_forest_lw.F90 | 14 +++++++------- radsurf/radsurf_forest_sw.F90 | 14 +++++++------- radsurf/radsurf_urban_lw.F90 | 14 +++++++------- radsurf/radsurf_urban_sw.F90 | 15 ++++++++------- 4 files changed, 29 insertions(+), 28 deletions(-) diff --git a/radsurf/radsurf_forest_lw.F90 b/radsurf/radsurf_forest_lw.F90 index d6c82f8..68935ce 100644 --- a/radsurf/radsurf_forest_lw.F90 +++ b/radsurf/radsurf_forest_lw.F90 @@ -608,19 +608,19 @@ subroutine spartacus_forest_lw(config, & ! Absorption by clear-air region - see Eqs. 29 and 30 lw_internal%clear_air_abs(:,ilay) = lw_internal%clear_air_abs(:,ilay) & & + air_ext(:,jlay)*(1.0_jprb-air_ssa(:,jlay)) & - & * sum(int_flux(:,1:ns) * spread(1.0_jprb/lg%mu,nlw,1), 2) & + & * sum(int_flux(:,1:ns) * spread(1.0_jprb/lg%mu,1,nlw), 2) & & - emiss_reg(:,1,jlay)*dz(jlay) do jreg = 2,nreg ! Absorption by clear-air in the vegetated regions lw_internal%veg_air_abs(:,ilay) = lw_internal%veg_air_abs(:,ilay) & & + air_ext(:,jlay)*(1.0_jprb-air_ssa(:,jlay)) & ! Use clear-air properties & * sum(int_flux(:,(jreg-1)*ns+1:jreg*ns) & - & * spread(1.0_jprb/lg%mu,nlw,1), 2) & + & * spread(1.0_jprb/lg%mu,1,nlw), 2) & & - emiss_air(:,jreg,jlay)*dz(jlay) lw_internal%veg_abs(:,ilay) = lw_internal%veg_abs(:,ilay) & & + veg_ext(jlay)*(1.0_jprb-veg_ssa(:,jlay)) & ! Use vegetation properties & * sum(int_flux(:,(jreg-1)*ns+1:jreg*ns) & - & * spread(1.0_jprb/lg%mu,nlw,1), 2) * od_scaling(jreg,jlay) & + & * spread(1.0_jprb/lg%mu,1,nlw), 2) * od_scaling(jreg,jlay) & & - emiss_veg(:,jreg,jlay)*dz(jlay) end do @@ -651,7 +651,7 @@ subroutine spartacus_forest_lw(config, & ! each spectral interval, so use the Legendre-Gauss horizontal ! weights flux_dn_above = 0.0_jprb - flux_dn_above(:,1:ns) = spread(lg%hweight,nlw,1) + flux_dn_above(:,1:ns) = spread(lg%hweight,1,nlw) lw_norm%top_dn(:,icol) = 1.0_jprb lw_norm%top_net(:,icol) = top_emissivity @@ -695,17 +695,17 @@ subroutine spartacus_forest_lw(config, & ! Absorption by clear-air region - see Eqs. 29 and 30 lw_norm%clear_air_abs(:,ilay) = lw_norm%clear_air_abs(:,ilay) & & + air_ext(:,jlay)*(1.0_jprb-air_ssa(:,jlay)) & - & * sum(int_flux(:,1:ns) * spread(1.0_jprb/lg%mu,nlw,1), 2) + & * sum(int_flux(:,1:ns) * spread(1.0_jprb/lg%mu,1,nlw), 2) do jreg = 2,nreg ! Absorption by clear-air in the vegetated regions lw_norm%veg_air_abs(:,ilay) = lw_norm%veg_air_abs(:,ilay) & & + air_ext(:,jlay)*(1.0_jprb-air_ssa(:,jlay)) & ! Use clear-air properties & * sum(int_flux(:,(jreg-1)*ns+1:jreg*ns) & - & * spread(1.0_jprb/lg%mu,nlw,1), 2) + & * spread(1.0_jprb/lg%mu,1,nlw), 2) lw_norm%veg_abs(:,ilay) = lw_norm%veg_abs(:,ilay) & & + veg_ext(jlay)*(1.0_jprb-veg_ssa(:,jlay)) & ! Use vegetation properties & * sum(int_flux(:,(jreg-1)*ns+1:jreg*ns) & - & * spread(1.0_jprb/lg%mu,nlw,1), 2) * od_scaling(jreg,jlay) + & * spread(1.0_jprb/lg%mu,1,nlw), 2) * od_scaling(jreg,jlay) end do #ifdef PRINT_ARRAYS diff --git a/radsurf/radsurf_forest_sw.F90 b/radsurf/radsurf_forest_sw.F90 index 2f44880..36f1c28 100644 --- a/radsurf/radsurf_forest_sw.F90 +++ b/radsurf/radsurf_forest_sw.F90 @@ -647,14 +647,14 @@ subroutine spartacus_forest_sw(config, & sw_norm_dir%clear_air_abs(:,ilay) = sw_norm_dir%clear_air_abs(:,ilay) & & + air_ext(:,jlay)*(1.0_jprb-air_ssa(:,jlay)) & & * (int_flux_dir(:,1) & ! / cos_sza & - & + sum(int_flux_diff(:,1:ns) * spread(1.0_jprb/lg%mu,nsw,1), 2)) + & + sum(int_flux_diff(:,1:ns) * spread(1.0_jprb/lg%mu,1,nsw), 2)) do jreg = 2,nreg ! Absorption by clear-air in the vegetated regions sw_norm_dir%veg_air_abs(:,ilay) = sw_norm_dir%veg_air_abs(:,ilay) & & + air_ext(:,jlay)*(1.0_jprb-air_ssa(:,jlay)) & ! Use clear-air properties & * (int_flux_dir(:,jreg) & ! / cos_sza & & + sum(int_flux_diff(:,(jreg-1)*ns+1:jreg*ns) & - & * spread(1.0_jprb/lg%mu,nsw,1), 2)) + & * spread(1.0_jprb/lg%mu,1,nsw), 2)) sw_norm_dir%veg_abs_dir(:,ilay) = sw_norm_dir%veg_abs_dir(:,ilay) & & + veg_ext(jlay)*(1.0_jprb-veg_ssa(:,jlay)) & ! Use vegetation properties & * int_flux_dir(:,jreg) * od_scaling(jreg,jlay) @@ -662,7 +662,7 @@ subroutine spartacus_forest_sw(config, & & + veg_ext(jlay)*(1.0_jprb-veg_ssa(:,jlay)) & ! Use vegetation properties & * (int_flux_dir(:,jreg) & ! / cos_sza & & + sum(int_flux_diff(:,(jreg-1)*ns+1:jreg*ns) & - & * spread(1.0_jprb/lg%mu,nsw,1), 2)) * od_scaling(jreg,jlay) + & * spread(1.0_jprb/lg%mu,1,nsw), 2)) * od_scaling(jreg,jlay) end do ! Compute sunlit fraction. First the layer transmittance in @@ -721,7 +721,7 @@ subroutine spartacus_forest_sw(config, & ! weights flux_dn_dir_above = 0.0_jprb ! No direct calculation now needed below flux_dn_diff_above = 0.0_jprb - flux_dn_diff_above(:,1:ns) = spread(lg%hweight,nsw,1) + flux_dn_diff_above(:,1:ns) = spread(lg%hweight,1,nsw) sw_norm_diff%top_dn_dir(:,icol) = 0.0_jprb sw_norm_diff%top_dn(:,icol) = 1.0_jprb @@ -763,17 +763,17 @@ subroutine spartacus_forest_sw(config, & ! Absorption by clear-air region - see Eqs. 29 and 30 sw_norm_diff%clear_air_abs(:,ilay) = sw_norm_diff%clear_air_abs(:,ilay) & & + air_ext(:,jlay)*(1.0_jprb-air_ssa(:,jlay)) & - & * sum(int_flux_diff(:,1:ns) * spread(1.0_jprb/lg%mu,nsw,1), 2) + & * sum(int_flux_diff(:,1:ns) * spread(1.0_jprb/lg%mu,1,nsw), 2) do jreg = 2,nreg ! Absorption by clear-air in the vegetated regions sw_norm_diff%veg_air_abs(:,ilay) = sw_norm_diff%veg_air_abs(:,ilay) & & + air_ext(:,jlay)*(1.0_jprb-air_ssa(:,jlay)) & ! Use clear-air properties & * sum(int_flux_diff(:,(jreg-1)*ns+1:jreg*ns) & - & * spread(1.0_jprb/lg%mu,nsw,1), 2) + & * spread(1.0_jprb/lg%mu,1,nsw), 2) sw_norm_diff%veg_abs(:,ilay) = sw_norm_diff%veg_abs(:,ilay) & & + veg_ext(jlay)*(1.0_jprb-veg_ssa(:,jlay)) & ! Use vegetation properties & * sum(int_flux_diff(:,(jreg-1)*ns+1:jreg*ns) & - & * spread(1.0_jprb/lg%mu,nsw,1), 2) * od_scaling(jreg,jlay) + & * spread(1.0_jprb/lg%mu,1,nsw), 2) * od_scaling(jreg,jlay) end do #ifdef PRINT_ARRAYS diff --git a/radsurf/radsurf_urban_lw.F90 b/radsurf/radsurf_urban_lw.F90 index 00af83e..a607f2f 100644 --- a/radsurf/radsurf_urban_lw.F90 +++ b/radsurf/radsurf_urban_lw.F90 @@ -790,7 +790,7 @@ subroutine spartacus_urban_lw(config, & ! Absorption by clear-air region - see Eqs. 29 and 30 lw_internal%clear_air_abs(:,ilay) = lw_internal%clear_air_abs(:,ilay) & & + air_ext(:,jlay)*(1.0_jprb-air_ssa(:,jlay)) & - & * sum(int_flux(:,1:ns) * spread(1.0_jprb/lg%mu,nlw,1), 2) & + & * sum(int_flux(:,1:ns) * spread(1.0_jprb/lg%mu,1,nlw), 2) & & - emiss_reg(:,1,jlay)*dz(jlay) if (do_vegetation) then associate ( veg_ext => canopy_props%veg_ext(ilay1:ilay2), & @@ -800,12 +800,12 @@ subroutine spartacus_urban_lw(config, & lw_internal%veg_air_abs(:,ilay) = lw_internal%veg_air_abs(:,ilay) & & + air_ext(:,jlay)*(1.0_jprb-air_ssa(:,jlay)) & ! Use clear-air properties & * sum(int_flux(:,(jreg-1)*ns+1:jreg*ns) & - & * spread(1.0_jprb/lg%mu,nlw,1), 2) & + & * spread(1.0_jprb/lg%mu,1,nlw), 2) & & - emiss_air(:,jreg,jlay)*dz(jlay) lw_internal%veg_abs(:,ilay) = lw_internal%veg_abs(:,ilay) & & + veg_ext(jlay)*(1.0_jprb-veg_ssa(:,jlay)) & ! Use vegetation properties & * sum(int_flux(:,(jreg-1)*ns+1:jreg*ns) & - & * spread(1.0_jprb/lg%mu,nlw,1), 2) * od_scaling(jreg,jlay) & + & * spread(1.0_jprb/lg%mu,1,nlw), 2) * od_scaling(jreg,jlay) & & - emiss_veg(:,jreg,jlay)*dz(jlay) end do end associate @@ -848,7 +848,7 @@ subroutine spartacus_urban_lw(config, & ! each spectral interval, so use the Legendre-Gauss horizontal ! weights flux_dn_above = 0.0_jprb - flux_dn_above(:,1:ns) = spread(lg%hweight,nlw,1) + flux_dn_above(:,1:ns) = spread(lg%hweight,1,nlw) lw_norm%top_dn(:,icol) = 1.0_jprb lw_norm%top_net(:,icol) = top_emissivity @@ -899,7 +899,7 @@ subroutine spartacus_urban_lw(config, & ! Absorption by clear-air region - see Eqs. 29 and 30 lw_norm%clear_air_abs(:,ilay) = lw_norm%clear_air_abs(:,ilay) & & + air_ext(:,jlay)*(1.0_jprb-air_ssa(:,jlay)) & - & * sum(int_flux(:,1:ns) * spread(1.0_jprb/lg%mu,nlw,1), 2) + & * sum(int_flux(:,1:ns) * spread(1.0_jprb/lg%mu,1,nlw), 2) if (do_vegetation) then associate ( veg_ext => canopy_props%veg_ext(ilay1:ilay2), & & veg_ssa => lw_spectral_props%veg_ssa(:,ilay1:ilay2) ) @@ -908,11 +908,11 @@ subroutine spartacus_urban_lw(config, & lw_norm%veg_air_abs(:,ilay) = lw_norm%veg_air_abs(:,ilay) & & + air_ext(:,jlay)*(1.0_jprb-air_ssa(:,jlay)) & ! Use clear-air properties & * sum(int_flux(:,(jreg-1)*ns+1:jreg*ns) & - & * spread(1.0_jprb/lg%mu,nlw,1), 2) + & * spread(1.0_jprb/lg%mu,1,nlw), 2) lw_norm%veg_abs(:,ilay) = lw_norm%veg_abs(:,ilay) & & + veg_ext(jlay)*(1.0_jprb-veg_ssa(:,jlay)) & ! Use vegetation properties & * sum(int_flux(:,(jreg-1)*ns+1:jreg*ns) & - & * spread(1.0_jprb/lg%mu,nlw,1), 2) * od_scaling(jreg,jlay) + & * spread(1.0_jprb/lg%mu,1,nlw), 2) * od_scaling(jreg,jlay) end do end associate end if diff --git a/radsurf/radsurf_urban_sw.F90 b/radsurf/radsurf_urban_sw.F90 index be6e197..7d9b8a9 100644 --- a/radsurf/radsurf_urban_sw.F90 +++ b/radsurf/radsurf_urban_sw.F90 @@ -459,6 +459,7 @@ subroutine spartacus_urban_sw(config, & end if end if + ! Compute the rates of exchange between regions, excluding the ! tangent term f_exchange = 0.0_jprb @@ -855,7 +856,7 @@ subroutine spartacus_urban_sw(config, & sw_norm_dir%clear_air_abs(:,ilay) = sw_norm_dir%clear_air_abs(:,ilay) & & + air_ext(:,jlay)*(1.0_jprb-air_ssa(:,jlay)) & & * (int_flux_dir(:,1) & ! / zcos_sza & - & + sum(int_flux_diff(:,1:ns) * spread(1.0_jprb/lg%mu,nsw,1), 2)) + & + sum(int_flux_diff(:,1:ns) * spread(1.0_jprb/lg%mu,1,nsw), 2)) if (do_vegetation) then associate (veg_ext => canopy_props%veg_ext(ilay1:ilay2), & & veg_ssa => sw_spectral_props%veg_ssa(:,ilay1:ilay2) ) @@ -865,7 +866,7 @@ subroutine spartacus_urban_sw(config, & & + air_ext(:,jlay)*(1.0_jprb-air_ssa(:,jlay)) & ! Use clear-air properties & * (int_flux_dir(:,jreg) & ! / zcos_sza & & + sum(int_flux_diff(:,(jreg-1)*ns+1:jreg*ns) & - & * spread(1.0_jprb/lg%mu,nsw,1), 2)) + & * spread(1.0_jprb/lg%mu,1,nsw), 2)) sw_norm_dir%veg_abs_dir(:,ilay) = sw_norm_dir%veg_abs_dir(:,ilay) & & + veg_ext(jlay)*(1.0_jprb-veg_ssa(:,jlay)) & ! Use vegetation properties & * int_flux_dir(:,jreg) * od_scaling(jreg,jlay) @@ -873,7 +874,7 @@ subroutine spartacus_urban_sw(config, & & + veg_ext(jlay)*(1.0_jprb-veg_ssa(:,jlay)) & ! Use vegetation properties & * (int_flux_dir(:,jreg) & ! / zcos_sza & & + sum(int_flux_diff(:,(jreg-1)*ns+1:jreg*ns) & - & * spread(1.0_jprb/lg%mu,nsw,1), 2)) * od_scaling(jreg,jlay) + & * spread(1.0_jprb/lg%mu,1,nsw), 2)) * od_scaling(jreg,jlay) end do end associate end if @@ -974,7 +975,7 @@ subroutine spartacus_urban_sw(config, & ! weights flux_dn_dir_above = 0.0_jprb ! No direct calculation now needed below flux_dn_diff_above = 0.0_jprb - flux_dn_diff_above(:,1:ns) = spread(lg%hweight,nsw,1) + flux_dn_diff_above(:,1:ns) = spread(lg%hweight,1,nsw) sw_norm_diff%top_dn_dir(:,icol) = 0.0_jprb sw_norm_diff%top_dn(:,icol) = 1.0_jprb @@ -1025,7 +1026,7 @@ subroutine spartacus_urban_sw(config, & ! Absorption by clear-air region - see Eqs. 29 and 30 sw_norm_diff%clear_air_abs(:,ilay) = sw_norm_diff%clear_air_abs(:,ilay) & & + air_ext(:,jlay)*(1.0_jprb-air_ssa(:,jlay)) & - & * sum(int_flux_diff(:,1:ns) * spread(1.0_jprb/lg%mu,nsw,1), 2) + & * sum(int_flux_diff(:,1:ns) * spread(1.0_jprb/lg%mu,1,nsw), 2) if (do_vegetation) then associate (veg_ext => canopy_props%veg_ext(ilay1:ilay2), & & veg_ssa => sw_spectral_props%veg_ssa(:,ilay1:ilay2) ) @@ -1034,11 +1035,11 @@ subroutine spartacus_urban_sw(config, & sw_norm_diff%veg_air_abs(:,ilay) = sw_norm_diff%veg_air_abs(:,ilay) & & + air_ext(:,jlay)*(1.0_jprb-air_ssa(:,jlay)) & ! Use clear-air properties & * sum(int_flux_diff(:,(jreg-1)*ns+1:jreg*ns) & - & * spread(1.0_jprb/lg%mu,nsw,1), 2) + & * spread(1.0_jprb/lg%mu,1,nsw), 2) sw_norm_diff%veg_abs(:,ilay) = sw_norm_diff%veg_abs(:,ilay) & & + veg_ext(jlay)*(1.0_jprb-veg_ssa(:,jlay)) & ! Use vegetation properties & * sum(int_flux_diff(:,(jreg-1)*ns+1:jreg*ns) & - & * spread(1.0_jprb/lg%mu,nsw,1), 2) * od_scaling(jreg,jlay) + & * spread(1.0_jprb/lg%mu,1,nsw), 2) * od_scaling(jreg,jlay) end do end associate end if From 260d2a629f34c8cebae9b7b87ddcedd4bf3f89b2 Mon Sep 17 00:00:00 2001 From: Robin Hogan Date: Mon, 27 Sep 2021 23:23:19 +0100 Subject: [PATCH 02/28] Added solar_zenith_angle namelist entry --- ChangeLog | 2 ++ driver/spartacus_surface_config.F90 | 19 +++++++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6a5e3bc..5e6862b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -20,6 +20,8 @@ version 0.7.2 or no clear-air region): exchange coefficients to/from such regions are now zero, and eigenvalues only computed for regions of finite size + - Added solar_zenith_angle to driver namelist to specify in + degrees as an alternative to cos_solar_zenith_angle version 0.7.1 (23 October 2020) - Added Apache license statement to each source file diff --git a/driver/spartacus_surface_config.F90 b/driver/spartacus_surface_config.F90 index ffd4b5d..a28a3f0 100644 --- a/driver/spartacus_surface_config.F90 +++ b/driver/spartacus_surface_config.F90 @@ -72,7 +72,8 @@ module spartacus_surface_config ! argument is missing then on error the program will be aborted. subroutine read_config_from_namelist(this, file_name, is_success) - use radiation_io, only : nulerr, radiation_abort + use radiation_io, only : nulerr, radiation_abort + use radiation_constants, only : Pi class(driver_config_type), intent(inout), target :: this character(*), intent(in) :: file_name @@ -89,8 +90,10 @@ subroutine read_config_from_namelist(this, file_name, is_success) real(kind=jprb), pointer :: top_flux_dn_sw, top_flux_dn_direct_sw real(kind=jprb), pointer :: top_flux_dn_lw + real(kind=jprb) :: solar_zenith_angle + namelist /radsurf_driver/ do_parallel, nblocksize, nrepeat, istartcol, iendcol, & - & iverbose, cos_solar_zenith_angle, vegetation_fsd, & + & iverbose, cos_solar_zenith_angle, solar_zenith_angle, vegetation_fsd, & & ground_sw_albedo, roof_sw_albedo, wall_sw_albedo, & & ground_lw_emissivity, roof_lw_emissivity, wall_lw_emissivity, & & vegetation_extinction, vegetation_sw_ssa, vegetation_fraction, & @@ -119,6 +122,9 @@ subroutine read_config_from_namelist(this, file_name, is_success) top_flux_dn_direct_sw => this%top_flux_dn_direct_sw top_flux_dn_lw => this%top_flux_dn_lw + ! Alternative way to specify solar zenith angle, in degrees + solar_zenith_angle = -100.0_jprb + ! Open the namelist file and read the radiation_driver namelist open(unit=10, iostat=iosopen, file=trim(file_name)) if (iosopen /= 0) then @@ -138,6 +144,15 @@ subroutine read_config_from_namelist(this, file_name, is_success) ! variables are present in the NetCDF data file instead read(unit=10, nml=radsurf_driver) close(unit=10) + + if (cos_solar_zenith_angle == -1.0_jprb) then + ! User has not specified cos_solar_zenith_angle; try + ! solar_zenith_angle + if (solar_zenith_angle >= 0.0_jprb .and. solar_zenith_angle <= 180.0_jprb) then + cos_solar_zenith_angle = cos(solar_zenith_angle * Pi/180.0_jprb) + end if + end if + end if end subroutine read_config_from_namelist From fac4bcb1ceaeb95aa40170a511de66b4be6f676c Mon Sep 17 00:00:00 2001 From: Robin Hogan Date: Mon, 27 Sep 2021 23:23:47 +0100 Subject: [PATCH 03/28] Option to save spectral fluxes --- radsurf/radsurf_save.F90 | 600 +++++++++++++++++++++++++++------------ 1 file changed, 425 insertions(+), 175 deletions(-) diff --git a/radsurf/radsurf_save.F90 b/radsurf/radsurf_save.F90 index bb1d345..e958a3e 100644 --- a/radsurf/radsurf_save.F90 +++ b/radsurf/radsurf_save.F90 @@ -56,20 +56,20 @@ subroutine save_canopy_fluxes(file_name, config, canopy_props, & end if if (config%do_sw) then - do_spectral_sw = (config%do_save_spectral_flux & - & .and. flux_sw%nspec > 1) + do_spectral_sw = config%do_save_spectral_flux + ! .and. flux_sw%nspec > 1 do_broadband_sw = config%do_save_broadband_flux else - do_spectral_sw = .false. + do_spectral_sw = .false. do_broadband_sw = .false. end if if (config%do_lw) then - do_spectral_lw = (config%do_save_spectral_flux & - & .and. flux_lw%nspec > 1) + do_spectral_lw = config%do_save_spectral_flux + ! .and. flux_lw%nspec > 1 do_broadband_sw = config%do_save_broadband_flux else - do_spectral_lw = .false. + do_spectral_lw = .false. do_broadband_sw = .false. end if @@ -99,7 +99,7 @@ subroutine save_canopy_fluxes(file_name, config, canopy_props, & & title_str="Radiative fluxes from the SPARTACUS-Surface radiation model", & & references_str="Hogan, R. J., T. Quaife and R. Braghiere, 2018: Fast matrix treatment of 3-D radiative" & & //" transfer in vegetation canopies: SPARTACUS-Vegetation 1.1. Geosci. Model Dev., 11, 339-350." & - & //NEW_LINE('A')//"Hogan, R. J., 2019b: Flexible treatment of radiative transfer in complex urban" & + & //NEW_LINE('A')//"Hogan, R. J., 2019: Flexible treatment of radiative transfer in complex urban" & & // " canopies for use in weather and climate models. Boundary-Layer Meteorol., 173, 53-78.", & & source_str="SPARTACUS-Surface offline radiation model", & & comment_str="All fluxes and absorption rates are in terms of power per unit horizontal area of the domain. " & @@ -174,113 +174,243 @@ subroutine define_canopy_flux_variables(out_file, band_name, band_long_name, & type(canopy_flux_type), intent(in) :: flux logical, intent(in) :: do_broadband, do_spectral - call out_file%define_variable("ground_flux_dn_"//band_name, units_str="W m-2", & - & long_name="Downwelling "//band_long_name//" flux at ground", & - & dim1_name="column") - call out_file%define_variable("ground_flux_net_"//band_name, units_str="W m-2", & - & long_name="Net "//band_long_name//" flux at ground", & - & dim1_name="column") + ! Define wavelength-independent variables if (allocated(flux%ground_dn_dir)) then - call out_file%define_variable("ground_flux_dn_direct_"//band_name, units_str="W m-2", & - & long_name="Downwelling direct "//band_long_name//" flux at ground", & - & dim1_name="column") - call out_file%define_variable("ground_flux_vertical_diffuse_"//band_name, units_str="W m-2", & - & long_name="Diffuse "//band_long_name//" flux into a vertical surface at ground level", & - & dim1_name="column") call out_file%define_variable("ground_sunlit_fraction", units_str="1", & & long_name="Fraction of ground in direct sunlight", dim1_name="column") - else - call out_file%define_variable("ground_flux_vertical_"//band_name, units_str="W m-2", & - & long_name="Flux in "//band_long_name//" into a vertical surface at ground level", & - & dim1_name="column") end if - call out_file%define_variable("top_flux_dn_"//band_name, units_str="W m-2", & - & long_name="Downwelling "//band_long_name//" flux at top of canopy", & - & dim1_name="column") - call out_file%define_variable("top_flux_net_"//band_name, units_str="W m-2", & - & long_name="Net "//band_long_name//" flux at top of canopy", & - & dim1_name="column") - if (allocated(flux%top_dn_dir)) then - call out_file%define_variable("top_flux_dn_direct_"//band_name, units_str="W m-2", & - & long_name="Downwelling direct "//band_long_name//" flux at top of canopy", & - & dim1_name="column") + if (allocated(flux%roof_in_dir)) then + call out_file%define_variable("roof_sunlit_fraction", units_str="1", & + & long_name="Fraction of roof in direct sunlight", & + & dim2_name="column", dim1_name="layer", fill_value=FillValueFlux) + end if + if (allocated(flux%wall_in_dir)) then + call out_file%define_variable("wall_sunlit_fraction", units_str="1", & + & long_name="Fraction of wall in direct sunlight", & + & dim2_name="column", dim1_name="layer", fill_value=FillValueFlux) end if - if (allocated(flux%roof_in)) then - call out_file%define_variable("roof_flux_in_"//band_name, units_str="W m-2", & - & long_name="Incoming "//band_long_name//" flux at roofs", & + if (allocated(flux%veg_abs_dir)) then + call out_file%define_variable("veg_sunlit_fraction", units_str="1", & + & long_name="Fraction of vegetation in direct sunlight", & & dim2_name="column", dim1_name="layer", fill_value=FillValueFlux) - if (allocated(flux%roof_in_dir)) then - call out_file%define_variable("roof_flux_in_direct_"//band_name, units_str="W m-2", & - & long_name="Direct incoming "//band_long_name//" flux at roofs", & + end if + + ! Define broadband variables + if (do_broadband) then + call out_file%define_variable("ground_flux_dn_"//band_name, units_str="W m-2", & + & long_name="Downwelling "//band_long_name//" flux at ground", & + & dim1_name="column") + call out_file%define_variable("ground_flux_net_"//band_name, units_str="W m-2", & + & long_name="Net "//band_long_name//" flux at ground", & + & dim1_name="column") + if (allocated(flux%ground_dn_dir)) then + call out_file%define_variable("ground_flux_dn_direct_"//band_name, units_str="W m-2", & + & long_name="Downwelling direct "//band_long_name//" flux at ground", & + & dim1_name="column") + call out_file%define_variable("ground_flux_vertical_diffuse_"//band_name, units_str="W m-2", & + & long_name="Diffuse "//band_long_name//" flux into a vertical surface at ground level", & + & dim1_name="column") + else + call out_file%define_variable("ground_flux_vertical_"//band_name, units_str="W m-2", & + & long_name="Flux in "//band_long_name//" into a vertical surface at ground level", & + & dim1_name="column") + end if + call out_file%define_variable("top_flux_dn_"//band_name, units_str="W m-2", & + & long_name="Downwelling "//band_long_name//" flux at top of canopy", & + & dim1_name="column") + call out_file%define_variable("top_flux_net_"//band_name, units_str="W m-2", & + & long_name="Net "//band_long_name//" flux at top of canopy", & + & dim1_name="column") + if (allocated(flux%top_dn_dir)) then + call out_file%define_variable("top_flux_dn_direct_"//band_name, units_str="W m-2", & + & long_name="Downwelling direct "//band_long_name//" flux at top of canopy", & + & dim1_name="column") + end if + if (allocated(flux%roof_in)) then + call out_file%define_variable("roof_flux_in_"//band_name, units_str="W m-2", & + & long_name="Incoming "//band_long_name//" flux at roofs", & & dim2_name="column", dim1_name="layer", fill_value=FillValueFlux) - call out_file%define_variable("roof_sunlit_fraction", units_str="1", & - & long_name="Fraction of roof in direct sunlight", & + if (allocated(flux%roof_in_dir)) then + call out_file%define_variable("roof_flux_in_direct_"//band_name, units_str="W m-2", & + & long_name="Direct incoming "//band_long_name//" flux at roofs", & + & dim2_name="column", dim1_name="layer", fill_value=FillValueFlux) + end if + call out_file%define_variable("roof_flux_net_"//band_name, units_str="W m-2", & + & long_name="Net "//band_long_name//" flux at roofs", & + & dim2_name="column", dim1_name="layer", fill_value=FillValueFlux) + call out_file%define_variable("wall_flux_in_"//band_name, units_str="W m-2", & + & long_name="Incoming "//band_long_name//" flux at walls", & + & dim2_name="column", dim1_name="layer", fill_value=FillValueFlux) + if (allocated(flux%wall_in_dir)) then + call out_file%define_variable("wall_flux_in_direct_"//band_name, units_str="W m-2", & + & long_name="Direct incoming "//band_long_name//" flux at walls", & + & dim2_name="column", dim1_name="layer", fill_value=FillValueFlux) + end if + call out_file%define_variable("wall_flux_net_"//band_name, units_str="W m-2", & + & long_name="Net "//band_long_name//" flux at walls", & & dim2_name="column", dim1_name="layer", fill_value=FillValueFlux) end if - call out_file%define_variable("roof_flux_net_"//band_name, units_str="W m-2", & - & long_name="Net "//band_long_name//" flux at roofs", & - & dim2_name="column", dim1_name="layer", fill_value=FillValueFlux) - call out_file%define_variable("wall_flux_in_"//band_name, units_str="W m-2", & - & long_name="Incoming "//band_long_name//" flux at walls", & - & dim2_name="column", dim1_name="layer", fill_value=FillValueFlux) - if (allocated(flux%wall_in_dir)) then - call out_file%define_variable("wall_flux_in_direct_"//band_name, units_str="W m-2", & - & long_name="Direct incoming "//band_long_name//" flux at walls", & + if (allocated(flux%clear_air_abs)) then + call out_file%define_variable("clear_air_absorption_"//band_name, units_str="W m-2", & + & long_name="Absorbed "//band_long_name//" in clear air", & + & dim2_name="column", dim1_name="layer", fill_value=FillValueFlux) + end if + + if (allocated(flux%veg_abs)) then + call out_file%define_variable("veg_absorption_"//band_name, units_str="W m-2", & + & long_name="Absorbed "//band_long_name//" by vegetation", & & dim2_name="column", dim1_name="layer", fill_value=FillValueFlux) - call out_file%define_variable("wall_sunlit_fraction", units_str="1", & - & long_name="Fraction of wall in direct sunlight", & + call out_file%define_variable("veg_air_absorption_"//band_name, units_str="W m-2", & + & long_name="Absorbed "//band_long_name//" by air in vegetated regions", & + & dim2_name="column", dim1_name="layer", fill_value=FillValueFlux) + end if + if (allocated(flux%veg_abs_dir)) then + call out_file%define_variable("veg_absorption_direct_"//band_name, units_str="W m-2", & + & long_name="Absorbed direct "//band_long_name//" by vegetation", & & dim2_name="column", dim1_name="layer", fill_value=FillValueFlux) end if - call out_file%define_variable("wall_flux_net_"//band_name, units_str="W m-2", & - & long_name="Net "//band_long_name//" flux at walls", & - & dim2_name="column", dim1_name="layer", fill_value=FillValueFlux) - end if - if (allocated(flux%clear_air_abs)) then - call out_file%define_variable("clear_air_absorption_"//band_name, units_str="W m-2", & - & long_name="Absorbed "//band_long_name//" in clear air", & - & dim2_name="column", dim1_name="layer", fill_value=FillValueFlux) - end if - if (allocated(flux%veg_abs)) then - call out_file%define_variable("veg_absorption_"//band_name, units_str="W m-2", & - & long_name="Absorbed "//band_long_name//" by vegetation", & - & dim2_name="column", dim1_name="layer", fill_value=FillValueFlux) - call out_file%define_variable("veg_air_absorption_"//band_name, units_str="W m-2", & - & long_name="Absorbed "//band_long_name//" by air in vegetated regions", & - & dim2_name="column", dim1_name="layer", fill_value=FillValueFlux) - end if - if (allocated(flux%veg_abs_dir)) then - call out_file%define_variable("veg_absorption_direct_"//band_name, units_str="W m-2", & - & long_name="Absorbed direct "//band_long_name//" by vegetation", & - & dim2_name="column", dim1_name="layer", fill_value=FillValueFlux) - call out_file%define_variable("veg_sunlit_fraction", units_str="W m-2", & - & long_name="Fraction of vegetation in direct sunlight", & - & dim2_name="column", dim1_name="layer", fill_value=FillValueFlux) + if (allocated(flux%flux_dn_layer_top)) then + call out_file%define_variable("flux_dn_layer_top_"//band_name, units_str="W m-2", & + & long_name="Downwelling "//band_long_name//" flux at top of layer", & + & dim2_name="column", dim1_name="layer", fill_value=FillValueFlux) + if (allocated(flux%flux_dn_dir_layer_top)) then + call out_file%define_variable("flux_dn_direct_layer_top_"//band_name, units_str="W m-2", & + & long_name="Downwelling direct "//band_long_name//" flux at top of layer", & + & dim2_name="column", dim1_name="layer", fill_value=FillValueFlux) + end if + call out_file%define_variable("flux_up_layer_top_"//band_name, units_str="W m-2", & + & long_name="Upwelling "//band_long_name//" flux at top of layer", & + & dim2_name="column", dim1_name="layer", fill_value=FillValueFlux) + call out_file%define_variable("flux_dn_layer_base_"//band_name, units_str="W m-2", & + & long_name="Downwelling "//band_long_name//" flux at base of layer", & + & dim2_name="column", dim1_name="layer", fill_value=FillValueFlux) + if (allocated(flux%flux_dn_dir_layer_base)) then + call out_file%define_variable("flux_dn_direct_layer_base_"//band_name, units_str="W m-2", & + & long_name="Downwelling direct "//band_long_name//" flux at base of layer", & + & dim2_name="column", dim1_name="layer", fill_value=FillValueFlux) + end if + call out_file%define_variable("flux_up_layer_base_"//band_name, units_str="W m-2", & + & long_name="Upwelling "//band_long_name//" flux at base of layer", & + & dim2_name="column", dim1_name="layer", fill_value=FillValueFlux) + end if end if - if (allocated(flux%flux_dn_layer_top)) then - call out_file%define_variable("flux_dn_layer_top_"//band_name, units_str="W m-2", & - & long_name="Downwelling "//band_long_name//" flux at top of layer", & - & dim2_name="column", dim1_name="layer", fill_value=FillValueFlux) - if (allocated(flux%flux_dn_dir_layer_top)) then - call out_file%define_variable("flux_dn_direct_layer_top_"//band_name, units_str="W m-2", & - & long_name="Downwelling direct "//band_long_name//" flux at top of layer", & - & dim2_name="column", dim1_name="layer", fill_value=FillValueFlux) + ! Define spectral fluxes + if (do_spectral) then + call out_file%define_variable("ground_spectral_flux_dn_"//band_name, units_str="W m-2", & + & long_name="Downwelling "//band_long_name//" spectral flux at ground", & + & dim2_name="column", dim1_name="band_"//band_name) + call out_file%define_variable("ground_spectral_flux_net_"//band_name, units_str="W m-2", & + & long_name="Net "//band_long_name//" spectral flux at ground", & + & dim2_name="column", dim1_name="band_"//band_name) + if (allocated(flux%ground_dn_dir)) then + call out_file%define_variable("ground_spectral_flux_dn_direct_"//band_name, units_str="W m-2", & + & long_name="Downwelling direct "//band_long_name//" spectral flux at ground", & + & dim2_name="column", dim1_name="band_"//band_name) + call out_file%define_variable("ground_spectral_flux_vertical_diffuse_"//band_name, units_str="W m-2", & + & long_name="Diffuse "//band_long_name//" spectral flux into a vertical surface at ground level", & + & dim2_name="column", dim1_name="band_"//band_name) + else + call out_file%define_variable("ground_spectral_flux_vertical_"//band_name, units_str="W m-2", & + & long_name="Flux in "//band_long_name//" into a vertical surface at ground level", & + & dim2_name="column", dim1_name="band_"//band_name) end if - call out_file%define_variable("flux_up_layer_top_"//band_name, units_str="W m-2", & - & long_name="Upwelling "//band_long_name//" flux at top of layer", & - & dim2_name="column", dim1_name="layer", fill_value=FillValueFlux) - call out_file%define_variable("flux_dn_layer_base_"//band_name, units_str="W m-2", & - & long_name="Downwelling "//band_long_name//" flux at base of layer", & - & dim2_name="column", dim1_name="layer", fill_value=FillValueFlux) - if (allocated(flux%flux_dn_dir_layer_base)) then - call out_file%define_variable("flux_dn_direct_layer_base_"//band_name, units_str="W m-2", & - & long_name="Downwelling direct "//band_long_name//" flux at base of layer", & - & dim2_name="column", dim1_name="layer", fill_value=FillValueFlux) + call out_file%define_variable("top_spectral_flux_dn_"//band_name, units_str="W m-2", & + & long_name="Downwelling "//band_long_name//" spectral flux at top of canopy", & + & dim2_name="column", dim1_name="band_"//band_name) + call out_file%define_variable("top_spectral_flux_net_"//band_name, units_str="W m-2", & + & long_name="Net "//band_long_name//" spectral flux at top of canopy", & + & dim2_name="column", dim1_name="band_"//band_name) + if (allocated(flux%top_dn_dir)) then + call out_file%define_variable("top_spectral_flux_dn_direct_"//band_name, units_str="W m-2", & + & long_name="Downwelling direct "//band_long_name//" spectral flux at top of canopy", & + & dim2_name="column", dim1_name="band_"//band_name) + end if + if (allocated(flux%roof_in)) then + call out_file%define_variable("roof_spectral_flux_in_"//band_name, units_str="W m-2", & + & long_name="Incoming "//band_long_name//" spectral flux at roofs", & + & dim3_name="column", dim2_name="layer", dim1_name="band_"//band_name, & + & fill_value=FillValueFlux) + if (allocated(flux%roof_in_dir)) then + call out_file%define_variable("roof_spectral_flux_in_direct_"//band_name, units_str="W m-2", & + & long_name="Direct incoming "//band_long_name//" spectral flux at roofs", & + & dim3_name="column", dim2_name="layer", dim1_name="band_"//band_name, & + & fill_value=FillValueFlux) + end if + call out_file%define_variable("roof_spectral_flux_net_"//band_name, units_str="W m-2", & + & long_name="Net "//band_long_name//" spectral flux at roofs", & + & dim3_name="column", dim2_name="layer", dim1_name="band_"//band_name, & + & fill_value=FillValueFlux) + call out_file%define_variable("wall_spectral_flux_in_"//band_name, units_str="W m-2", & + & long_name="Incoming "//band_long_name//" spectral flux at walls", & + & dim3_name="column", dim2_name="layer", dim1_name="band_"//band_name, & + & fill_value=FillValueFlux) + if (allocated(flux%wall_in_dir)) then + call out_file%define_variable("wall_spectral_flux_in_direct_"//band_name, units_str="W m-2", & + & long_name="Direct incoming "//band_long_name//" spectral flux at walls", & + & dim3_name="column", dim2_name="layer", dim1_name="band_"//band_name, & + & fill_value=FillValueFlux) + end if + call out_file%define_variable("wall_spectral_flux_net_"//band_name, units_str="W m-2", & + & long_name="Net "//band_long_name//" spectral flux at walls", & + & dim3_name="column", dim2_name="layer", dim1_name="band_"//band_name, & + & fill_value=FillValueFlux) + end if + if (allocated(flux%clear_air_abs)) then + call out_file%define_variable("clear_air_spectral_absorption_"//band_name, units_str="W m-2", & + & long_name="Absorbed "//band_long_name//" in clear air", & + & dim3_name="column", dim2_name="layer", dim1_name="band_"//band_name, & + & fill_value=FillValueFlux) + end if + + if (allocated(flux%veg_abs)) then + call out_file%define_variable("veg_spectral_absorption_"//band_name, units_str="W m-2", & + & long_name="Absorbed "//band_long_name//" by vegetation", & + & dim3_name="column", dim2_name="layer", dim1_name="band_"//band_name, & + & fill_value=FillValueFlux) + call out_file%define_variable("veg_air_spectral_absorption_"//band_name, units_str="W m-2", & + & long_name="Absorbed "//band_long_name//" by air in vegetated regions", & + & dim3_name="column", dim2_name="layer", dim1_name="band_"//band_name, & + & fill_value=FillValueFlux) + end if + if (allocated(flux%veg_abs_dir)) then + call out_file%define_variable("veg_spectral_absorption_direct_"//band_name, units_str="W m-2", & + & long_name="Absorbed direct "//band_long_name//" by vegetation", & + & dim3_name="column", dim2_name="layer", dim1_name="band_"//band_name, & + & fill_value=FillValueFlux) + end if + + if (allocated(flux%flux_dn_layer_top)) then + call out_file%define_variable("spectral_flux_dn_layer_top_"//band_name, units_str="W m-2", & + & long_name="Downwelling "//band_long_name//" spectral flux at top of layer", & + & dim3_name="column", dim2_name="layer", dim1_name="band_"//band_name, & + & fill_value=FillValueFlux) + if (allocated(flux%flux_dn_dir_layer_top)) then + call out_file%define_variable("spectral_flux_dn_direct_layer_top_"//band_name, units_str="W m-2", & + & long_name="Downwelling direct "//band_long_name//" spectral flux at top of layer", & + & dim3_name="column", dim2_name="layer", dim1_name="band_"//band_name, & + & fill_value=FillValueFlux) + end if + call out_file%define_variable("spectral_flux_up_layer_top_"//band_name, units_str="W m-2", & + & long_name="Upwelling "//band_long_name//" spectral flux at top of layer", & + & dim3_name="column", dim2_name="layer", dim1_name="band_"//band_name, & + & fill_value=FillValueFlux) + call out_file%define_variable("spectral_flux_dn_layer_base_"//band_name, units_str="W m-2", & + & long_name="Downwelling "//band_long_name//" spectral flux at base of layer", & + & dim3_name="column", dim2_name="layer", dim1_name="band_"//band_name, & + & fill_value=FillValueFlux) + if (allocated(flux%flux_dn_dir_layer_base)) then + call out_file%define_variable("spectral_flux_dn_direct_layer_base_"//band_name, units_str="W m-2", & + & long_name="Downwelling direct "//band_long_name//" spectral flux at base of layer", & + & dim3_name="column", dim2_name="layer", dim1_name="band_"//band_name, & + & fill_value=FillValueFlux) + end if + call out_file%define_variable("spectral_flux_up_layer_base_"//band_name, units_str="W m-2", & + & long_name="Upwelling "//band_long_name//" spectral flux at base of layer", & + & dim3_name="column", dim2_name="layer", dim1_name="band_"//band_name, & + & fill_value=FillValueFlux) end if - call out_file%define_variable("flux_up_layer_base_"//band_name, units_str="W m-2", & - & long_name="Upwelling "//band_long_name//" flux at base of layer", & - & dim2_name="column", dim1_name="layer", fill_value=FillValueFlux) end if end subroutine define_canopy_flux_variables @@ -301,99 +431,197 @@ subroutine write_canopy_flux_variables(out_file, band_name, nmaxlay, & ! Temporary variable at layer interfaces real(kind=jprb) :: tmp(nmaxlay, flux%ncol) + real(kind=jprb) :: tmp_spec(flux%nspec, nmaxlay, flux%ncol) - call out_file%put("ground_flux_dn_"//band_name, sum(flux%ground_dn,1)) - call out_file%put("ground_flux_net_"//band_name, sum(flux%ground_net,1)) + ! Wavelength-independent quantities if (allocated(flux%ground_dn_dir)) then - call out_file%put("ground_flux_dn_direct_"//band_name, & - & sum(flux%ground_dn_dir,1)) - call out_file%put("ground_flux_vertical_diffuse_"//band_name, & - & sum(flux%ground_vertical_diff,1)) call out_file%put("ground_sunlit_fraction", flux%ground_sunlit_frac) - else - call out_file%put("ground_flux_vertical_"//band_name, & - & sum(flux%ground_vertical_diff,1)) end if - call out_file%put("top_flux_dn_"//band_name, sum(flux%top_dn,1)) - call out_file%put("top_flux_net_"//band_name, sum(flux%top_net,1)) - if (allocated(flux%top_dn_dir)) then - call out_file%put("top_flux_dn_direct_"//band_name, & - & sum(flux%top_dn_dir,1)) - end if - if (allocated(flux%roof_in)) then - call unpack_variable_broadband(flux%ncol, nmaxlay, nlay, FillValueFlux, & - & flux%roof_in, tmp) - call out_file%put("roof_flux_in_"//band_name, tmp) - call unpack_variable_broadband(flux%ncol, nmaxlay, nlay, FillValueFlux, & - & flux%roof_net, tmp) - call out_file%put("roof_flux_net_"//band_name, tmp) - call unpack_variable_broadband(flux%ncol, nmaxlay, nlay, FillValueFlux, & - & flux%wall_in, tmp) - call out_file%put("wall_flux_in_"//band_name, tmp) - call unpack_variable_broadband(flux%ncol, nmaxlay, nlay, FillValueFlux, & - & flux%wall_net, tmp) - call out_file%put("wall_flux_net_"//band_name, tmp) - if (allocated(flux%roof_in_dir)) then - call unpack_variable_broadband(flux%ncol, nmaxlay, nlay, FillValueFlux, & - & flux%roof_in_dir, tmp) - call out_file%put("roof_flux_in_direct_"//band_name, tmp) - call unpack_variable_broadband(flux%ncol, nmaxlay, nlay, FillValueFlux, & - & flux%wall_in_dir, tmp) - call out_file%put("wall_flux_in_direct_"//band_name, tmp) - call unpack_variable(flux%ncol, nmaxlay, nlay, FillValueFlux, & - & flux%roof_sunlit_frac, tmp) - call out_file%put("roof_sunlit_fraction", tmp) - call unpack_variable(flux%ncol, nmaxlay, nlay, FillValueFlux, & - & flux%wall_sunlit_frac, tmp) - call out_file%put("wall_sunlit_fraction", tmp) - end if - end if - if (allocated(flux%clear_air_abs)) then - call unpack_variable_broadband(flux%ncol, nmaxlay, nlay, FillValueFlux, & - & flux%clear_air_abs, tmp) - call out_file%put("clear_air_absorption_"//band_name, tmp) - end if - if (allocated(flux%veg_abs)) then - call unpack_variable_broadband(flux%ncol, nmaxlay, nlay, FillValueFlux, & - & flux%veg_abs, tmp) - call out_file%put("veg_absorption_"//band_name, tmp) - call unpack_variable_broadband(flux%ncol, nmaxlay, nlay, FillValueFlux, & - & flux%veg_air_abs, tmp) - call out_file%put("veg_air_absorption_"//band_name, tmp) + if (allocated(flux%roof_in_dir)) then + call unpack_variable(flux%ncol, nmaxlay, nlay, FillValueFlux, & + & flux%roof_sunlit_frac, tmp) + call out_file%put("roof_sunlit_fraction", tmp) + call unpack_variable(flux%ncol, nmaxlay, nlay, FillValueFlux, & + & flux%wall_sunlit_frac, tmp) + call out_file%put("wall_sunlit_fraction", tmp) end if if (allocated(flux%veg_abs_dir)) then - call unpack_variable_broadband(flux%ncol, nmaxlay, nlay, FillValueFlux, & - & flux%veg_abs_dir, tmp) - call out_file%put("veg_absorption_direct_"//band_name, tmp) call unpack_variable(flux%ncol, nmaxlay, nlay, FillValueFlux, & & flux%veg_sunlit_frac, tmp) call out_file%put("veg_sunlit_fraction", tmp) end if - if (allocated(flux%flux_dn_layer_top)) then - call unpack_variable_broadband(flux%ncol, nmaxlay, nlay, FillValueFlux, & - & flux%flux_dn_layer_top, tmp) - call out_file%put("flux_dn_layer_top_"//band_name, tmp) - if (allocated(flux%flux_dn_dir_layer_top)) then + + ! Broadband fluxes + if (do_broadband) then + call out_file%put("ground_flux_dn_"//band_name, sum(flux%ground_dn,1)) + call out_file%put("ground_flux_net_"//band_name, sum(flux%ground_net,1)) + if (allocated(flux%ground_dn_dir)) then + call out_file%put("ground_flux_dn_direct_"//band_name, & + & sum(flux%ground_dn_dir,1)) + call out_file%put("ground_flux_vertical_diffuse_"//band_name, & + & sum(flux%ground_vertical_diff,1)) + else + call out_file%put("ground_flux_vertical_"//band_name, & + & sum(flux%ground_vertical_diff,1)) + end if + call out_file%put("top_flux_dn_"//band_name, sum(flux%top_dn,1)) + call out_file%put("top_flux_net_"//band_name, sum(flux%top_net,1)) + if (allocated(flux%top_dn_dir)) then + call out_file%put("top_flux_dn_direct_"//band_name, & + & sum(flux%top_dn_dir,1)) + end if + if (allocated(flux%roof_in)) then + call unpack_variable_broadband(flux%ncol, nmaxlay, nlay, FillValueFlux, & + & flux%roof_in, tmp) + call out_file%put("roof_flux_in_"//band_name, tmp) + call unpack_variable_broadband(flux%ncol, nmaxlay, nlay, FillValueFlux, & + & flux%roof_net, tmp) + call out_file%put("roof_flux_net_"//band_name, tmp) + call unpack_variable_broadband(flux%ncol, nmaxlay, nlay, FillValueFlux, & + & flux%wall_in, tmp) + call out_file%put("wall_flux_in_"//band_name, tmp) call unpack_variable_broadband(flux%ncol, nmaxlay, nlay, FillValueFlux, & - & flux%flux_dn_dir_layer_top, tmp) - call out_file%put("flux_dn_direct_layer_top_"//band_name, tmp) + & flux%wall_net, tmp) + call out_file%put("wall_flux_net_"//band_name, tmp) + if (allocated(flux%roof_in_dir)) then + call unpack_variable_broadband(flux%ncol, nmaxlay, nlay, FillValueFlux, & + & flux%roof_in_dir, tmp) + call out_file%put("roof_flux_in_direct_"//band_name, tmp) + call unpack_variable_broadband(flux%ncol, nmaxlay, nlay, FillValueFlux, & + & flux%wall_in_dir, tmp) + call out_file%put("wall_flux_in_direct_"//band_name, tmp) + end if end if - call unpack_variable_broadband(flux%ncol, nmaxlay, nlay, FillValueFlux, & - & flux%flux_up_layer_top, tmp) - call out_file%put("flux_up_layer_top_"//band_name, tmp) - call unpack_variable_broadband(flux%ncol, nmaxlay, nlay, FillValueFlux, & - & flux%flux_dn_layer_base, tmp) - call out_file%put("flux_dn_layer_base_"//band_name, tmp) - if (allocated(flux%flux_dn_dir_layer_base)) then + if (allocated(flux%clear_air_abs)) then call unpack_variable_broadband(flux%ncol, nmaxlay, nlay, FillValueFlux, & - & flux%flux_dn_dir_layer_base, tmp) - call out_file%put("flux_dn_direct_layer_base_"//band_name, tmp) + & flux%clear_air_abs, tmp) + call out_file%put("clear_air_absorption_"//band_name, tmp) + end if + if (allocated(flux%veg_abs)) then + call unpack_variable_broadband(flux%ncol, nmaxlay, nlay, FillValueFlux, & + & flux%veg_abs, tmp) + call out_file%put("veg_absorption_"//band_name, tmp) + call unpack_variable_broadband(flux%ncol, nmaxlay, nlay, FillValueFlux, & + & flux%veg_air_abs, tmp) + call out_file%put("veg_air_absorption_"//band_name, tmp) + end if + if (allocated(flux%veg_abs_dir)) then + call unpack_variable_broadband(flux%ncol, nmaxlay, nlay, FillValueFlux, & + & flux%veg_abs_dir, tmp) + call out_file%put("veg_absorption_direct_"//band_name, tmp) + end if + if (allocated(flux%flux_dn_layer_top)) then + call unpack_variable_broadband(flux%ncol, nmaxlay, nlay, FillValueFlux, & + & flux%flux_dn_layer_top, tmp) + call out_file%put("flux_dn_layer_top_"//band_name, tmp) + if (allocated(flux%flux_dn_dir_layer_top)) then + call unpack_variable_broadband(flux%ncol, nmaxlay, nlay, FillValueFlux, & + & flux%flux_dn_dir_layer_top, tmp) + call out_file%put("flux_dn_direct_layer_top_"//band_name, tmp) + end if + call unpack_variable_broadband(flux%ncol, nmaxlay, nlay, FillValueFlux, & + & flux%flux_up_layer_top, tmp) + call out_file%put("flux_up_layer_top_"//band_name, tmp) + call unpack_variable_broadband(flux%ncol, nmaxlay, nlay, FillValueFlux, & + & flux%flux_dn_layer_base, tmp) + call out_file%put("flux_dn_layer_base_"//band_name, tmp) + if (allocated(flux%flux_dn_dir_layer_base)) then + call unpack_variable_broadband(flux%ncol, nmaxlay, nlay, FillValueFlux, & + & flux%flux_dn_dir_layer_base, tmp) + call out_file%put("flux_dn_direct_layer_base_"//band_name, tmp) + end if + call unpack_variable_broadband(flux%ncol, nmaxlay, nlay, FillValueFlux, & + & flux%flux_up_layer_base, tmp) + call out_file%put("flux_up_layer_base_"//band_name, tmp) end if - call unpack_variable_broadband(flux%ncol, nmaxlay, nlay, FillValueFlux, & - & flux%flux_up_layer_base, tmp) - call out_file%put("flux_up_layer_base_"//band_name, tmp) end if - + + ! Spectral fluxes + if (do_spectral) then + call out_file%put("ground_spectral_flux_dn_"//band_name, flux%ground_dn) + call out_file%put("ground_spectral_flux_net_"//band_name, flux%ground_net) + if (allocated(flux%ground_dn_dir)) then + call out_file%put("ground_spectral_flux_dn_direct_"//band_name, & + & flux%ground_dn_dir) + call out_file%put("ground_spectral_flux_vertical_diffuse_"//band_name, & + & flux%ground_vertical_diff) + else + call out_file%put("ground_spectral_flux_vertical_"//band_name, & + & flux%ground_vertical_diff) + end if + call out_file%put("top_spectral_flux_dn_"//band_name, flux%top_dn) + call out_file%put("top_spectral_flux_net_"//band_name, flux%top_net) + if (allocated(flux%top_dn_dir)) then + call out_file%put("top_spectral_flux_dn_direct_"//band_name, & + & flux%top_dn_dir) + end if + if (allocated(flux%roof_in)) then + call unpack_variable_spectral(flux%ncol, nmaxlay, nlay, flux%nspec, FillValueFlux, & + & flux%roof_in, tmp_spec) + call out_file%put("roof_spectral_flux_in_"//band_name, tmp_spec) + call unpack_variable_spectral(flux%ncol, nmaxlay, nlay, flux%nspec, FillValueFlux, & + & flux%roof_net, tmp_spec) + call out_file%put("roof_spectral_flux_net_"//band_name, tmp_spec) + call unpack_variable_spectral(flux%ncol, nmaxlay, nlay, flux%nspec, FillValueFlux, & + & flux%wall_in, tmp_spec) + call out_file%put("wall_spectral_flux_in_"//band_name, tmp_spec) + call unpack_variable_spectral(flux%ncol, nmaxlay, nlay, flux%nspec, FillValueFlux, & + & flux%wall_net, tmp_spec) + call out_file%put("wall_spectral_flux_net_"//band_name, tmp_spec) + if (allocated(flux%roof_in_dir)) then + call unpack_variable_spectral(flux%ncol, nmaxlay, nlay, flux%nspec, FillValueFlux, & + & flux%roof_in_dir, tmp_spec) + call out_file%put("roof_spectral_flux_in_direct_"//band_name, tmp_spec) + call unpack_variable_spectral(flux%ncol, nmaxlay, nlay, flux%nspec, FillValueFlux, & + & flux%wall_in_dir, tmp_spec) + call out_file%put("wall_spectral_flux_in_direct_"//band_name, tmp_spec) + end if + end if + if (allocated(flux%clear_air_abs)) then + call unpack_variable_spectral(flux%ncol, nmaxlay, nlay, flux%nspec, FillValueFlux, & + & flux%clear_air_abs, tmp_spec) + call out_file%put("clear_air_spectral_absorption_"//band_name, tmp_spec) + end if + if (allocated(flux%veg_abs)) then + call unpack_variable_spectral(flux%ncol, nmaxlay, nlay, flux%nspec, FillValueFlux, & + & flux%veg_abs, tmp_spec) + call out_file%put("veg_spectral_absorption_"//band_name, tmp_spec) + call unpack_variable_spectral(flux%ncol, nmaxlay, nlay, flux%nspec, FillValueFlux, & + & flux%veg_air_abs, tmp_spec) + call out_file%put("veg_air_spectral_absorption_"//band_name, tmp_spec) + end if + if (allocated(flux%veg_abs_dir)) then + call unpack_variable_spectral(flux%ncol, nmaxlay, nlay, flux%nspec, FillValueFlux, & + & flux%veg_abs_dir, tmp_spec) + call out_file%put("veg_spectral_absorption_direct_"//band_name, tmp_spec) + end if + if (allocated(flux%flux_dn_layer_top)) then + call unpack_variable_spectral(flux%ncol, nmaxlay, nlay, flux%nspec, FillValueFlux, & + & flux%flux_dn_layer_top, tmp_spec) + call out_file%put("spectral_flux_dn_layer_top_"//band_name, tmp_spec) + if (allocated(flux%flux_dn_dir_layer_top)) then + call unpack_variable_spectral(flux%ncol, nmaxlay, nlay, flux%nspec, FillValueFlux, & + & flux%flux_dn_dir_layer_top, tmp_spec) + call out_file%put("spectral_flux_dn_direct_layer_top_"//band_name, tmp_spec) + end if + call unpack_variable_spectral(flux%ncol, nmaxlay, nlay, flux%nspec, FillValueFlux, & + & flux%flux_up_layer_top, tmp_spec) + call out_file%put("spectral_flux_up_layer_top_"//band_name, tmp_spec) + call unpack_variable_spectral(flux%ncol, nmaxlay, nlay, flux%nspec, FillValueFlux, & + & flux%flux_dn_layer_base, tmp_spec) + call out_file%put("spectral_flux_dn_layer_base_"//band_name, tmp_spec) + if (allocated(flux%flux_dn_dir_layer_base)) then + call unpack_variable_spectral(flux%ncol, nmaxlay, nlay, flux%nspec, FillValueFlux, & + & flux%flux_dn_dir_layer_base, tmp_spec) + call out_file%put("spectral_flux_dn_direct_layer_base_"//band_name, tmp_spec) + end if + call unpack_variable_spectral(flux%ncol, nmaxlay, nlay, flux%nspec, FillValueFlux, & + & flux%flux_up_layer_base, tmp_spec) + call out_file%put("spectral_flux_up_layer_base_"//band_name, tmp_spec) + end if + end if + + end subroutine write_canopy_flux_variables subroutine unpack_variable(ncol, nmaxlay, nlay, fill_value, var_in, var_out) @@ -440,5 +668,27 @@ subroutine unpack_variable_broadband(ncol, nmaxlay, nlay, fill_value, var_in, va end subroutine unpack_variable_broadband + subroutine unpack_variable_spectral(ncol, nmaxlay, nlay, nspec, fill_value, var_in, var_out) + + integer(kind=jpim), intent(in) :: ncol, nmaxlay, nlay(:), nspec + real(kind=jprb), intent(in) :: fill_value + real(kind=jprb), intent(in) :: var_in(:,:) + real(kind=jprb), intent(out) :: var_out(nspec,nmaxlay,ncol) + + integer :: jcol, jlay, itotlay + + var_out = fill_value + + itotlay = 1 + + do jcol = 1,ncol + do jlay = 1,nlay(jcol) + var_out(:,jlay,jcol) = var_in(:,itotlay) + itotlay = itotlay + 1 + end do + end do + + end subroutine unpack_variable_spectral + end module radsurf_save From ab53ad5675ac6981570488a360d97f83f22ff504 Mon Sep 17 00:00:00 2001 From: Robin Hogan Date: Mon, 27 Sep 2021 23:24:40 +0100 Subject: [PATCH 04/28] Fixed bug in wall absorption when more than one spectral interval --- radsurf/radsurf_urban_lw.F90 | 4 ++-- radsurf/radsurf_urban_sw.F90 | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/radsurf/radsurf_urban_lw.F90 b/radsurf/radsurf_urban_lw.F90 index a607f2f..3dd10a6 100644 --- a/radsurf/radsurf_urban_lw.F90 +++ b/radsurf/radsurf_urban_lw.F90 @@ -816,7 +816,7 @@ subroutine spartacus_urban_lw(config, & lw_internal%wall_in(:,ilay) = lw_internal%wall_in(:,ilay) & & + f_wall(jreg,jlay) & & * sum(int_flux(:,(jreg-1)*ns+1:jreg*ns) & - & * spread(lg%tan_ang,1,nlw)) + & * spread(lg%tan_ang,1,nlw),2) end do lw_internal%wall_net(:,ilay) = lw_internal%wall_in(:,ilay) & & * wall_emissivity(:,jlay) - emiss_wall(:,jlay)*dz(jlay) @@ -922,7 +922,7 @@ subroutine spartacus_urban_lw(config, & lw_norm%wall_in(:,ilay) = lw_norm%wall_in(:,ilay) & & + f_wall(jreg,jlay) & & * (sum(int_flux(:,(jreg-1)*ns+1:jreg*ns) & - & * spread(lg%tan_ang,1,nlw))) + & * spread(lg%tan_ang,1,nlw),2)) end do lw_norm%wall_net(:,ilay) = lw_norm%wall_in(:,ilay) & & * wall_emissivity(:,jlay) diff --git a/radsurf/radsurf_urban_sw.F90 b/radsurf/radsurf_urban_sw.F90 index 7d9b8a9..d8fe4e3 100644 --- a/radsurf/radsurf_urban_sw.F90 +++ b/radsurf/radsurf_urban_sw.F90 @@ -888,7 +888,7 @@ subroutine spartacus_urban_sw(config, & do jreg = 1,nreg sw_norm_dir%wall_in(:,ilay) = sw_norm_dir%wall_in(:,ilay) & & + f_wall(jreg,jlay) * sum(int_flux_diff(:,(jreg-1)*ns+1:jreg*ns) & - & * spread(lg%tan_ang,1,nsw)) + & * spread(lg%tan_ang,1,nsw),2) end do sw_norm_dir%wall_net(:,ilay) = sw_norm_dir%wall_in(:,ilay) & & * (1.0_jprb - wall_albedo(:,jlay)) @@ -1049,7 +1049,7 @@ subroutine spartacus_urban_sw(config, & sw_norm_diff%wall_in(:,ilay) = sw_norm_diff%wall_in(:,ilay) & & + f_wall(jreg,jlay) & & * (sum(int_flux_diff(:,(jreg-1)*ns+1:jreg*ns) & - & * spread(lg%tan_ang,1,nsw))) + & * spread(lg%tan_ang,1,nsw),2)) end do sw_norm_diff%wall_net(:,ilay) = sw_norm_diff%wall_in(:,ilay) & & * (1.0_jprb - wall_albedo(:,jlay)) From 77c071b2bb97cba7668d0792e98777f725c2236d Mon Sep 17 00:00:00 2001 From: Robin Hogan Date: Mon, 4 Oct 2021 12:05:59 +0100 Subject: [PATCH 05/28] Added RAMI5 test scenes --- test/rami5/Makefile | 84 +++++++ test/rami5/README | 4 + test/rami5/change_namelist.sh | 42 ++++ test/rami5/config.nam | 29 +++ test/rami5/loadnc.m | 212 ++++++++++++++++++ test/rami5/process_spartacus.m | 139 ++++++++++++ test/rami5/process_spartacus_scenes.m | 6 + .../scene_nc/rami5_HET07_JPS_SUM_scene.nc | Bin 0 -> 16012 bytes .../scene_nc/rami5_HET08_OPS_WIN_scene.nc | Bin 0 -> 21640 bytes .../scene_nc/rami5_HET09_JBS_SUM_scene.nc | Bin 0 -> 21648 bytes .../scene_nc/rami5_HET14_WCO_UND_scene.nc | Bin 0 -> 16260 bytes .../scene_nc/rami5_HET15_JBS_WIN_scene.nc | Bin 0 -> 21648 bytes test/rami5/write_ascii.m | 41 ++++ test/rami5/write_ascii_profile.m | 24 ++ 14 files changed, 581 insertions(+) create mode 100644 test/rami5/Makefile create mode 100644 test/rami5/README create mode 100755 test/rami5/change_namelist.sh create mode 100644 test/rami5/config.nam create mode 100644 test/rami5/loadnc.m create mode 100644 test/rami5/process_spartacus.m create mode 100644 test/rami5/process_spartacus_scenes.m create mode 100644 test/rami5/scene_nc/rami5_HET07_JPS_SUM_scene.nc create mode 100644 test/rami5/scene_nc/rami5_HET08_OPS_WIN_scene.nc create mode 100644 test/rami5/scene_nc/rami5_HET09_JBS_SUM_scene.nc create mode 100644 test/rami5/scene_nc/rami5_HET14_WCO_UND_scene.nc create mode 100644 test/rami5/scene_nc/rami5_HET15_JBS_WIN_scene.nc create mode 100644 test/rami5/write_ascii.m create mode 100644 test/rami5/write_ascii_profile.m diff --git a/test/rami5/Makefile b/test/rami5/Makefile new file mode 100644 index 0000000..d17af09 --- /dev/null +++ b/test/rami5/Makefile @@ -0,0 +1,84 @@ +# This Makefile is for running SPARTACUS-Surface on the RAMI-V +# "actual" test scenes. The variables required by SPARTACUS are +# provided in the NetCDF files in the scene_nc directory. Typing +# "make" will run SPARTACUS on them to produce outputs in the out_nc +# directory. The Matlab script "process_spartacus_scenes.m" produces +# the ASCII files for submission in the "mes" directory. + +BASE = rami5 +SPSURF = ../../bin/spartacus_surface +CONFIG = config.nam +CONFTMP = config_tmp.nam +CHANGE_NL = ./change_namelist.sh +INDIR = scene_nc +OUTDIR = out_nc + +INSUFFIX = _scene.nc +OUTSUFFIX = _out.nc +LOGSUFFIX = _out.log +BSOUTSUFFIX = _blacksoil_out.nc +BSLOGSUFFIX = _blacksoil_out.log + +# Default target when you run "make": run the five actual actual cases +# with solar configurations required by RAMI-V +rami5: HET09_JBS_SUM HET07_JPS_SUM HET08_OPS_WIN HET14_WCO_UND HET15_JBS_WIN + +# For a larger number of runs when you run "make all": also includes +# overhead sun and the RAMI-VI sun angles +all: rami5 overhead rami4 + +# Individual targets consisting of - where +# is either "diffuse" indicating the incoming solar +# radiation at top-of-canopy is isotropic, or -direct where SZA +# is the solar zenith angle in degrees + +# Jarvselja Birch Stand - Summer +HET09_JBS_SUM: HET09_JBS_SUM-diffuse HET09_JBS_SUM-56-direct HET09_JBS_SUM-41-direct +# Jarvselja Birch Stand - Winter +HET15_JBS_WIN: HET15_JBS_WIN-diffuse HET15_JBS_WIN-76-direct HET15_JBS_WIN-56-direct +# Jarvselja Pine Stand - Summer +HET07_JPS_SUM: HET07_JPS_SUM-diffuse HET07_JPS_SUM-56-direct HET07_JPS_SUM-41-direct +# Offenpass Pine Stand - Winter +HET08_OPS_WIN: HET08_OPS_WIN-diffuse HET08_OPS_WIN-76-direct HET08_OPS_WIN-56-direct +# Wellington Citrus Orchard +HET14_WCO_UND: HET14_WCO_UND-diffuse HET14_WCO_UND-42-direct HET14_WCO_UND-60-direct HET14_WCO_UND-67-direct + +# Run the five scenes with overhead sun, from which the penetration of +# direct sunlight is computed and can be compared with values on the +# RAMI-V web site +overhead: HET09_JBS_SUM-00-direct HET15_JBS_WIN-00-direct HET07_JPS_SUM-00-direct HET08_OPS_WIN-00-direct HET14_WCO_UND-00-direct + +# Solar zenith angles use by the same scenes from the RAMI-IV +# intercomparison +rami4: HET09_JBS_SUM-37-direct HET15_JBS_WIN-54-direct HET07_JPS_SUM-37-direct HET08_OPS_WIN-47-direct HET14_WCO_UND-00-direct HET14_WCO_UND-20-direct HET14_WCO_UND-50-direct + +# Run SPARTACUS-Surface on scene with diffuse top-of-canopy solar +# illumination, both with the real soil albedo and a "black soil" +# configuration +%-diffuse: + mkdir -p out_nc + set -o pipefail && $(SPSURF) $(CONFIG) $(INDIR)/$(BASE)_$*$(INSUFFIX) \ + $(OUTDIR)/$(BASE)_$*-diffuse$(OUTSUFFIX) | tee $(OUTDIR)/$(BASE)_$*-diffuse$(LOGSUFFIX) + $(CHANGE_NL) $(CONFIG) $(CONFTMP) ground_sw_albedo=0.0 + set -o pipefail && $(SPSURF) $(CONFTMP) $(INDIR)/$(BASE)_$*$(INSUFFIX) \ + $(OUTDIR)/$(BASE)_$*-diffuse$(BSOUTSUFFIX) | tee $(OUTDIR)/$(BASE)_$*-diffuse$(BSLOGSUFFIX) + +# Run SPARTACUS-Surface on scene with direct top-of-canopy solar +# illumination. First create config_tmp.nam with the required solar +# zenith angle, then run SPARTACUS-Surface, in both cases using awk to +# extract parts of the "stem" represented by the "%" character in GNU +# make. +%-direct: + mkdir -p out_nc + $(CHANGE_NL) $(CONFIG) $(CONFTMP) top_flux_dn_direct_sw=1.0 \ + solar_zenith_angle=$(shell echo $* | awk -F- '{print $$2}') + set -o pipefail && $(SPSURF) $(CONFTMP) $(INDIR)/$(BASE)_$(shell echo $* | awk -F- '{print $$1}')$(INSUFFIX) \ + $(OUTDIR)/$(BASE)_$*$(OUTSUFFIX) | tee $(OUTDIR)/$(BASE)_$*$(LOGSUFFIX) + $(CHANGE_NL) $(CONFIG) $(CONFTMP) top_flux_dn_direct_sw=1.0 \ + solar_zenith_angle=$(shell echo $* | awk -F- '{print $$2}') \ + ground_sw_albedo=0.0 + set -o pipefail && $(SPSURF) $(CONFTMP) $(INDIR)/$(BASE)_$(shell echo $* | awk -F- '{print $$1}')$(INSUFFIX) \ + $(OUTDIR)/$(BASE)_$*$(BSOUTSUFFIX) | tee $(OUTDIR)/$(BASE)_$*$(BSLOGSUFFIX) + +clean: + rm -rf $(CONFTMP) out_nc/$(BASE)*.nc out_nc/$(BASE)*.log mes/*.mes mes/*.png diff --git a/test/rami5/README b/test/rami5/README new file mode 100644 index 0000000..d33d43e --- /dev/null +++ b/test/rami5/README @@ -0,0 +1,4 @@ +Running "make" will run SPARTACUS-Surface on five "actual" scenes from the RAMI-V intercomparison: + https://rami-benchmark.jrc.ec.europa.eu/_www/phase_descr.php?strPhase=RAMI5 +Note that the "urban" surface type is used to represent forests, with the tree trunks treated as buildings and other woody material (branches) merged into the vegetation properties. +The output netCDF files are placed in the out_nc directory. The Matlab script process_spartacus_scenes.m then converts the outputs into ASCII files for the RAMI-V submission. diff --git a/test/rami5/change_namelist.sh b/test/rami5/change_namelist.sh new file mode 100755 index 0000000..cecf2ee --- /dev/null +++ b/test/rami5/change_namelist.sh @@ -0,0 +1,42 @@ +#!/bin/bash +# +# (C) Copyright 2014- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +# Change entries in a Fortran namelist file +# Usage: change_namelist.sh infile.nam outfile.nam key1=value1 key2=value2 ... + +INFILE=$1 +OUTFILE=$2 +shift +shift + +SEDLINE="" +while [ "$1" ] +do + FOUND=$(echo $1 | grep '=') + if [ ! "$FOUND" ] + then + echo "Error in $0: argument '$1' not of the form key=value" + exit 1 + fi + KEY=$(echo $1 | awk -F= '{print $1}') + VALUE=$(echo $1 | awk -F= '{print $2}') + FOUND=$(grep $KEY $INFILE) + if [ ! "$FOUND" ] + then + echo "Error: $KEY not found in $INFILE" + exit 1 + fi + + SEDLINE="$SEDLINE -e s|^[[:space:]!]*"$KEY".*|"$KEY"="$VALUE",|" + shift +done +#echo sed $SEDLINE $INFILE ">" $OUTFILE +sed $SEDLINE $INFILE > $OUTFILE diff --git a/test/rami5/config.nam b/test/rami5/config.nam new file mode 100644 index 0000000..7422631 --- /dev/null +++ b/test/rami5/config.nam @@ -0,0 +1,29 @@ +&radsurf_driver +do_parallel = true, +vegetation_fsd = 0.5, +iverbose = 3, +do_conservation_check = true, +top_flux_dn_direct_sw = 0.0, +!solar_zenith_angle = 60, +vegetation_fsd = 0.9, +!ground_sw_albedo = 0.0, +/ + +&radsurf +iverbose = 3, +do_sw = true, +do_lw = false, +use_sw_direct_albedo = false, +do_vegetation = true, +do_urban = true, +n_vegetation_region_forest = 2, +n_vegetation_region_urban = 2, +nsw = 14, +nlw = 1, +n_stream_sw_forest = 1, +n_stream_sw_urban = 4, +do_save_broadband_flux = false, +do_save_spectral_flux = true, +do_save_flux_profile = true, +vegetation_isolation_factor_urban = 0.0, +/ diff --git a/test/rami5/loadnc.m b/test/rami5/loadnc.m new file mode 100644 index 0000000..1745c10 --- /dev/null +++ b/test/rami5/loadnc.m @@ -0,0 +1,212 @@ +function [data, attribute, dimensions] = load_nc_struct(nc_file, names); +% load_nc_struct -- Load NetCDF variables and attributes. +% +% [data, attribute] = load_nc_struct('nc_file') loads all variables of +% 'nc_file' into structure 'data' and all attributes into structure +% 'attribute', so variable 'X' could then be accessed using 'data.X' +% and attribute 'long_name' of 'X' could be accessed with +% 'attribute.X.long_name'. + +if nargin < 1, help(mfilename), return, end + +result = []; +if nargout > 0, data = []; attribute = []; end + +rootid = netcdf.open(nc_file, 'nowrite'); +if isempty(rootid), return, end +disp(['Loading ' nc_file]); + +ver_str = version; +if str2num(ver_str(1)) >= 8 + ncid = get_science_data_group(rootid); +else + ncid = rootid; +end + +if nargout > 2 + dimids = netcdf.inqDimIDs(ncid); + for id = dimids + [dimname,dimlen] = netcdf.inqDim(ncid,id); + dimnames{id+1} = dimname; + dimensions.(dimname) = dimlen; + end +end + +if nargin < 2 + names = var_names(ncid); +end + +allnames = var_names(ncid); + +disp(['Variables:']); +for ii = 1:length(names) + if any(strcmp(names{ii},allnames)) + newname = names{ii}; + newname(find(newname == '-')) = '_'; + newname(find(newname == '.')) = '_'; + newname(find(newname == '@')) = '_'; + varid = netcdf.inqVarID(ncid, names{ii}); + + [varname, xtype,vdimids,natts] = netcdf.inqVar(ncid, varid); + if xtype == 12 + continue; + end + [add_offset, scale_factor] = get_scaling(ncid, varid); + + if xtype == netcdf.getConstant('NC_FLOAT') | ~isempty(add_offset) | ~isempty(scale_factor) + missing_value = double(get_missing_value(ncid, varid)); + data.(newname) = double(netcdf.getVar(ncid, varid)); + else + missing_value = get_missing_value(ncid, varid); + data.(newname) = netcdf.getVar(ncid, varid); + end + + if ~isempty(missing_value) + data.(newname)(find(data.(newname) == missing_value)) = NaN; + end + + if ~isempty(scale_factor) + data.(newname) = data.(newname) .* scale_factor; + else + scale_factor = 1.0; + end + if ~isempty(add_offset) + data.(newname) = data.(newname) + add_offset; + else + add_offset = 0.0; + end + + if nargout > 1 + % Do attributes + for jj = 1:natts + % Check for underscore starting attribute name + attname = netcdf.inqAttName(ncid, varid, jj-1); + attname_mod = attname; + if strcmp(attname,'_FillValue') + attname_mod = 'FillValue_'; + elseif attname(1) == '_' + warning([newname '.' attname ' changed to ' names{ii} ':X' attname]); + attname_mod = ['X' attname]; + end + eval(['attribute.' names{ii} '.' attname_mod ' = netcdf.getAtt(ncid, varid, attname);']); + if nargout > 2 + attribute.(names{ii}).dimensions = dimnames(vdimids+1); + end + end + end + + the_size = size(data.(newname)); + if the_size(end) == 1; + the_size = the_size(1:end-1); + end + + long_name = ''; + try + long_name = netcdf.getAtt(ncid, varid, 'long_name'); + long_name = clean_up_string(long_name); + long_name = ['"' long_name '"']; + end + units = ''; + try + units = netcdf.getAtt(ncid, varid, 'units'); + units = clean_up_string(units); + units = [' (' units ')']; + end + + names{ii} = newname; + + + size_str = num2str(the_size(1)); + for ii = 2:length(the_size); + size_str = [size_str ',' num2str(the_size(ii))]; + end + + newname = [newname ' (' size_str ')']; + + namefill = blanks(max(0,30-length(newname))); + + + if add_offset ~= 0.0 | scale_factor ~= 1.0 + scale_str = ' scaled'; + else + scale_str = ''; + end + disp([namefill newname ': ' long_name units scale_str]); + + end +end + +if nargout > 1 + % Do global attributes + disp('Global attributes:'); + [ndims,nvars,ngatts,unlimdimid] = netcdf.inq(ncid); + for ii = 1:ngatts + attname = netcdf.inqAttName(ncid,netcdf.getConstant('NC_GLOBAL'),ii-1); + + newattname = attname; + if attname(1) == '_'; + newattname = [attname(2:end) '_']; + end + attribute.global.(newattname) = netcdf.getAtt(ncid,netcdf.getConstant('NC_GLOBAL'),attname); + +% if isempty(find(attnames{ii} == '/' | attnames{ii} == '-' | attnames{ii} == '+' | attnames{ii} == ' ') > 0) +% eval(['attr = f.' attnames{ii} '(:);']); +% if ischar(attr) +% attr = clean_up_string(attr); +% end +% eval(['attribute.global.' attnames{ii} ' = attr;']); + namefill = blanks(max(0,14-length(attname))); + disp([namefill newattname ': ' num2str(attribute.global.(newattname))]); +% else +% disp(['Attribute name ' attnames{ii} ' incompatible with Matlab - not loaded.']) +% end + end +end +netcdf.close(rootid) + +function newstr = clean_up_string(oldstr) +newstr = num2str(oldstr); +if length(newstr) > 1 + if newstr(end-1) == '\' & newstr(end) == '0' + newstr = deblank(newstr(1:end-2)); + end +end + +function names = var_names(ncid) + [ndims,nvars,ngatts,unlimdimid] = netcdf.inq(ncid); + for ii = 0:nvars-1 + names{ii+1} = netcdf.inqVar(ncid, ii); + end + +function missing_value = get_missing_value(ncid, varid) + missing_value = []; + try + missing_value = netcdf.getAtt(ncid, varid, 'missing_value'); + catch exception + try + missing_value = netcdf.getAtt(ncid, varid, '_FillValue'); + end + end + +function [add_offset,scale_factor] = get_scaling(ncid, varid) + add_offset = []; + scale_factor = []; + try + add_offset = netcdf.getAtt(ncid, varid, 'add_offset'); + end + try + scale_factor = netcdf.getAtt(ncid, varid, 'scale_factor'); + end + +function sciid = get_science_data_group(ncid) + group_id = netcdf.inqGrps(ncid); + sciid = ncid; + if ~isempty(group_id) + for ii = 1:length(group_id) + if strcmp(netcdf.inqGrpName(group_id(ii)),'ScienceData') + sciid = group_id(ii); + return; + end + end + end + diff --git a/test/rami5/process_spartacus.m b/test/rami5/process_spartacus.m new file mode 100644 index 0000000..29e4544 --- /dev/null +++ b/test/rami5/process_spartacus.m @@ -0,0 +1,139 @@ +% This Matlab script processes the output of SPARTACUS-Surface run on +% a single RAMI-V scene, producing ASCII files suitable for submission +% to the intercomparison in the "mes" directory. You can call this +% script directly (optionally specifying the scene by predefining the +% "iscene" variable) or run the process_spartacus_scene.m script to +% run them all. + +% Scene number in range 0 to 4 +if ~exist('iscene','var') + iscene = 1; +end + +% Optionally use the RAMI-IV solar zenith angles +if ~exist('is_rami4','var') + is_rami4 = 0; +end + +% Obtain scene ID string and other information from the "iscene" +% variable +if iscene == 0 + scene_id = 'HET15_JBS_WIN'; zmax = 30.5130; solar_ids = {'diffuse', '76','56'}; + if is_rami4 + solar_ids = {'diffuse','54'}; + end +elseif iscene == 1 + scene_id = 'HET09_JBS_SUM'; zmax = 30.5130; solar_ids = {'diffuse', '56','41'}; + if is_rami4 + solar_ids = {'diffuse','37'}; + end +elseif iscene == 2 + scene_id = 'HET07_JPS_SUM'; zmax = 18.56; solar_ids = {'diffuse', '56','41'}; + if is_rami4 + solar_ids = {'diffuse','37'}; + end +elseif iscene == 3 + scene_id = 'HET14_WCO_UND'; zmax = 4.12; solar_ids = {'diffuse', '42','60','67'}; + if is_rami4 + solar_ids = {'diffuse','00','20','50'}; + end +elseif iscene == 4 + scene_id = 'HET08_OPS_WIN'; zmax = 15.0213; solar_ids = {'diffuse', '76','56'}; + if is_rami4 + solar_ids = {'diffuse','47'}; + end +else + error(['iscene=' num2str(iscene) ' not recognised']); +end + +% Band names +bands = {'O03','O04','O06','O08','O10','O11','O12','M08','O17','MD5','M11','MD7','M12'}; + +% Some outputs are only required in the photosynthetically active +% range +bands_par = bands(1:5); +iband_black = length(bands)+1; % 14th band is for black surfaces + +% Filenames are tagged with the model name +model = 'spartacus'; + +% Make output directory +mkdir mes + +% Loop over the solar configurations for this scene +for sid = 1:length(solar_ids) + solar_id = solar_ids{sid}; + + % Load the netCDF files + in = loadnc(['scene_nc/rami5_' scene_id '_scene.nc']); + out= loadnc(['out_nc/rami5_' scene_id '-' solar_id '_out.nc']); + bs = loadnc(['out_nc/rami5_' scene_id '-' solar_id '_blacksoil_out.nc']); + + % If wavelengths are provided then write_ascii will attempt to plot + % the results + %wav = in.wavelength(1:13); + wav = []; + + residual = out.ground_spectral_flux_net_sw ... + + sum(out.wall_spectral_flux_net_sw,2) ... + + sum(out.roof_spectral_flux_net_sw,2) ... + + sum(out.veg_spectral_absorption_sw,2) ... + - out.top_spectral_flux_net_sw; + + if strcmp(solar_id, 'diffuse') + % White-sky albedo + write_ascii(scene_id, bands, solar_id, 'bhr', model, out.top_spectral_flux_dn_sw - out.top_spectral_flux_net_sw, ... + 'White-sky albedo', wav); + else + % Black-sky albedo + write_ascii(scene_id, bands, solar_id, 'dhr', model, out.top_spectral_flux_dn_sw - out.top_spectral_flux_net_sw, ... + 'Black-sky albedo', wav); + end + + % Absorption by all vegetation (foliage and wood) + write_ascii(scene_id, bands_par, solar_id, 'fabs_tot', model, ... + sum(out.veg_spectral_absorption_sw+out.wall_spectral_flux_net_sw+out.roof_spectral_flux_net_sw, 2), ... + 'Vegetation absorption', wav); + + % Absorption by foliage only + foliage_ratio = (ones(14,1)*in.foliage_extinction').*in.foliage_sw_ssa ... + ./ ((ones(14,1)*in.veg_extinction').*in.veg_sw_ssa); + foliage_ratio(find(isnan(foliage_ratio))) = 0; + write_ascii(scene_id, bands_par, solar_id, 'fabs_fol', model, ... + sum(out.veg_spectral_absorption_sw.*foliage_ratio, 2),... + 'Foliage absorption', wav); + + % Transmission scattered one or more timesby vegetation but not by + % soil + if strcmp(solar_id, 'diffuse') + write_ascii(scene_id, bands_par, solar_id, 'ftran_coco', model, ... + bs.ground_spectral_flux_dn_sw - bs.ground_spectral_flux_dn_sw(iband_black), ... + 'Canopy-only collided transmission', wav); + else + write_ascii(scene_id, bands_par, solar_id, 'ftran_coco', model, ... + bs.ground_spectral_flux_dn_sw - bs.ground_spectral_flux_dn_direct_sw, ... + 'Canopy-only collided transmission', wav); + end + + % Unscattered transmission + write_ascii(scene_id, bands_par, solar_id, 'ftran_uc', model, ... + bs.ground_spectral_flux_dn_sw(iband_black).*ones(size(bs.ground_spectral_flux_dn_sw)), ... + 'Uncollided transmission', wav); + + % Total transmission + write_ascii(scene_id, bands_par, solar_id, 'ftran_tot', model, out.ground_spectral_flux_dn_sw, ... + 'Total transmission', wav); + + % Flux profile is average of layer top and layer base values, which + % are slightly different at the interfaces because of the stepped + % nature of the trunk description + flux_up = [out.spectral_flux_up_layer_base_sw zeros(14,1)] ... + + [zeros(14,1) out.spectral_flux_up_layer_top_sw]; + flux_up(:,2:end-1) = 0.5.*flux_up(:,2:end-1); + flux_dn = [out.spectral_flux_dn_layer_base_sw zeros(14,1)] ... + + [zeros(14,1) out.spectral_flux_dn_layer_top_sw]; + flux_dn(:,2:end-1) = 0.5.*flux_dn(:,2:end-1); + + write_ascii_profile(scene_id, bands_par, solar_id, 'ftran_tot_vprof', model, ... + zmax, out.height, flux_up, flux_dn); +end diff --git a/test/rami5/process_spartacus_scenes.m b/test/rami5/process_spartacus_scenes.m new file mode 100644 index 0000000..2f125fe --- /dev/null +++ b/test/rami5/process_spartacus_scenes.m @@ -0,0 +1,6 @@ +% Matlab script to process the outputs of SPARTACUS-Surface run on +% five "actual" RAMI-V scenes numbered 0-4 +is_rami4 = 0; +for iscene = 0:4 + process_spartacus +end diff --git a/test/rami5/scene_nc/rami5_HET07_JPS_SUM_scene.nc b/test/rami5/scene_nc/rami5_HET07_JPS_SUM_scene.nc new file mode 100644 index 0000000000000000000000000000000000000000..7c379dac95ee0aae69f459894d8335a80b72c922 GIT binary patch literal 16012 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 OzWjUQfyL54;rCzZ@k-GE literal 0 HcmV?d00001 diff --git a/test/rami5/scene_nc/rami5_HET08_OPS_WIN_scene.nc b/test/rami5/scene_nc/rami5_HET08_OPS_WIN_scene.nc new file mode 100644 index 0000000000000000000000000000000000000000..9157e20d33b8f3d0f292fe68640954c93b6fd50e GIT binary patch literal 21640 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 literal 0 HcmV?d00001 diff --git a/test/rami5/scene_nc/rami5_HET15_JBS_WIN_scene.nc b/test/rami5/scene_nc/rami5_HET15_JBS_WIN_scene.nc new file mode 100644 index 0000000000000000000000000000000000000000..346ac2546e95e78228d3ee5dd4c0f4daefa4958e GIT binary patch literal 21648 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 1 + for iw = 1:length(wavelength) + wl{iw} = num2str(round(wavelength(iw))); + end + clf + set(gcf,'paperposition',[0.5 0.5 18 12]); + plot(values,'k') + set(gca,'xticklabel',wl,'xtick',[1:length(wl)]); + xlabel('Wavelength (nm)'); + h=ylabel([varname ' (' meas ')']); + set(h,'interpreter','none'); + h=title([scene ' ' illum ' ' model]); + set(h,'interpreter','none'); + drawnow + filename = ['mes/' scene '_' illum '-' meas '_' model '.png']; + print_png(filename, '150'); + end diff --git a/test/rami5/write_ascii_profile.m b/test/rami5/write_ascii_profile.m new file mode 100644 index 0000000..31bf0f0 --- /dev/null +++ b/test/rami5/write_ascii_profile.m @@ -0,0 +1,24 @@ +function write_ascii_profile(scene, bands, zenith, meas, model, zmax, z, flux_up, flux_dn); + for iband = 1:length(bands) + if strcmp(zenith,'diffuse') + illum = 'DIFFUSE'; + else + zen = str2num(zenith); + azim = zeros(1,91); + azim([56 41 76 42 60 67]+1) = [153 147 155 76 45 41]; + illum = sprintf('z%02da%03d', zen, azim(zen+1)); + end + + zint = linspace(zmax, 0, 11); + fup = interp1(z, flux_up(iband,:), zint); + fdn = interp1(z, flux_dn(iband,:), zint); + + filename = ['mes/' scene '_' bands{iband} '_' illum '-' meas '_' model '.mes']; + disp(['Writing ' filename]); + fid = fopen(filename,'w'); + fprintf(fid,'%4d %4d\t%.6f\n', 11, 3, zmax/10); + for iz = 1:11 + fprintf(fid,'%.6f\t%.6f\t%.6f\n', zint(iz), fup(iz), fdn(iz)); + end + fclose(fid); + end From b31ae4622b9eda6d40485dab1c5dd23d106a0a7f Mon Sep 17 00:00:00 2001 From: Robin Hogan Date: Mon, 4 Oct 2021 12:17:39 +0100 Subject: [PATCH 06/28] rami5 test cases now called with make test --- ChangeLog | 1 + Makefile | 6 +++++- test/rami5/Makefile | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 5e6862b..0a6c7bf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -22,6 +22,7 @@ version 0.7.2 finite size - Added solar_zenith_angle to driver namelist to specify in degrees as an alternative to cos_solar_zenith_angle + - Added RAMI-V test scenes in test/rami5 version 0.7.1 (23 October 2020) - Added Apache license statement to each source file diff --git a/Makefile b/Makefile index fc212e2..b55b3cd 100644 --- a/Makefile +++ b/Makefile @@ -83,7 +83,7 @@ libradsurf: libradtool driver: libradsurf cd driver && $(MAKE) -test: test_simple test_rami4pilps test_urban +test: test_simple test_rami4pilps test_urban test_rami5 test_simple: cd test/simple && $(MAKE) test @@ -97,6 +97,9 @@ test_urban: test_urban_single: cd test/urban && $(MAKE) test_single +test_rami5: + cd test/rami5 && $(MAKE) test + test_code: cd driver && $(MAKE) test_code @@ -108,6 +111,7 @@ clean-tests: cd test/simple && $(MAKE) clean cd test/rami4pilps && $(MAKE) clean cd test/urban && $(MAKE) clean + cd test/rami5 && $(MAKE) clean clean-toplevel: cd radsurf && $(MAKE) clean diff --git a/test/rami5/Makefile b/test/rami5/Makefile index d17af09..4d82380 100644 --- a/test/rami5/Makefile +++ b/test/rami5/Makefile @@ -21,6 +21,7 @@ BSLOGSUFFIX = _blacksoil_out.log # Default target when you run "make": run the five actual actual cases # with solar configurations required by RAMI-V +test: rami5 rami5: HET09_JBS_SUM HET07_JPS_SUM HET08_OPS_WIN HET14_WCO_UND HET15_JBS_WIN # For a larger number of runs when you run "make all": also includes From d2ce1d6429fd3822eeef6b440bf1bc1aa4875d77 Mon Sep 17 00:00:00 2001 From: Robin Hogan Date: Mon, 4 Oct 2021 21:56:15 +0100 Subject: [PATCH 07/28] Remove unused vars etc --- radsurf/radsurf_simple_spectrum.F90 | 2 +- radtool/radtool_calc_matrices_sw_eig.F90 | 3 +-- radtool/radtool_matrix.F90 | 4 ---- 3 files changed, 2 insertions(+), 7 deletions(-) diff --git a/radsurf/radsurf_simple_spectrum.F90 b/radsurf/radsurf_simple_spectrum.F90 index 1fb271b..59b5c0a 100644 --- a/radsurf/radsurf_simple_spectrum.F90 +++ b/radsurf/radsurf_simple_spectrum.F90 @@ -21,7 +21,7 @@ subroutine calc_simple_spectrum_lw(config, canopy_props, lw_spectral_props, & & istartcol, iendcol) use parkind1, only : jpim, jprb - use yomhook, only : lhook, dr_hook + !use yomhook, only : lhook, dr_hook use radiation_io, only : radiation_abort use radsurf_config, only : config_type use radsurf_canopy_properties, only : canopy_properties_type diff --git a/radtool/radtool_calc_matrices_sw_eig.F90 b/radtool/radtool_calc_matrices_sw_eig.F90 index 66de82f..99d73e2 100644 --- a/radtool/radtool_calc_matrices_sw_eig.F90 +++ b/radtool/radtool_calc_matrices_sw_eig.F90 @@ -165,8 +165,7 @@ subroutine calc_matrices_sw_eig(nmat, ndiff, ndir, dz, mu0, & real(kind=jprb), dimension(nmat,ndiff,ndiff) :: gamma1i, gamma2i real(kind=jprb), dimension(nmat,ndiff,ndir) :: gamma3i - ! Temporary vector and matrix - real(kind=jprb), dimension(nmat,ndiff) :: tmp_vec + ! Temporary matrix real(kind=jprb), dimension(nmat,ndiff,ndiff) :: tmp_mat ! Loop index over matrix elements diff --git a/radtool/radtool_matrix.F90 b/radtool/radtool_matrix.F90 index 307a597..db6a570 100644 --- a/radtool/radtool_matrix.F90 +++ b/radtool/radtool_matrix.F90 @@ -820,8 +820,6 @@ pure subroutine diag_mat_right_divide_3(n,iend,A,B,X) real(jprb), dimension(iend) :: U22, U23, U33 real(jprb), dimension(iend) :: y2, y3 - integer :: j - ! associate (U11 => A(:,1,1), U12 => A(:,1,2), U13 => A(1,3)) ! LU decomposition of the *transpose* of A: ! ( 1 ) (U11 U12 U13) @@ -1112,8 +1110,6 @@ function invert(n,iend,m,A) real(jprb) :: invert(iend,m,m) real(jprb) :: LU(iend,m,m) - integer :: j - real(jprb) :: hook_handle if (lhook) call dr_hook('radtool_matrix:invert',0,hook_handle) From 738dea0a8daacb3d3fc85f3b2f19caad904f3055 Mon Sep 17 00:00:00 2001 From: Robin Hogan Date: Mon, 4 Oct 2021 22:02:27 +0100 Subject: [PATCH 08/28] Upgrade to 0.7.2 --- ChangeLog | 2 +- TODO | 10 ++++------ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0a6c7bf..3c17a67 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,4 @@ -version 0.7.2 +version 0.7.2 (4 October 2021) - Longwave urban modifications to give correct emission from walls, fixing error most noticeable with 2-streams - see radtool_legendre_gauss.F90 and radsurf_urban_lw.F90 diff --git a/TODO b/TODO index 6d8fee4..f8f713f 100644 --- a/TODO +++ b/TODO @@ -1,18 +1,16 @@ FEATURES -Compute leaf sunlit fraction (wavelength independent) -Broadband or spectral fluxes each optional Gas optics -Closed forest: optimization by looking for veg cover = 0 or 1 -Report radiation components into a horizontal and vertical surface for calculation MRT -Road/roofs/wall direct fraction, and direct flux attenuated only by air Dump out inputs like in ecRad Combine lw_spectral_props%calc_monochromatic_emission and calc_simple_spectrum_lw into one function call for broadband Planck function Support implicit solvers, e.g. windows in TEB with very low heat capacity -Way to calculate thermal comfort / mean radiant temperature considering diffuse angles +Store norm_perims for verification BUG FIXES +Fix use of veg_contact_fraction +test_surface_out.nc fails with number of veg regions = 1 +Fix crash when vegetation region has zero vegetation extinction, esp. in single precision Fix non-zero residual in urban longwave when nstream>=2 CHECK From e37fc221bbc797388f09a86d90bd5a6d311ae2ee Mon Sep 17 00:00:00 2001 From: Robin Hogan Date: Tue, 5 Oct 2021 14:16:43 +0100 Subject: [PATCH 09/28] Introduce radsurf_norm_perim.F90; redefine veg_contact_fraction --- ChangeLog | 12 + driver/spartacus_surface_read_input.F90 | 23 +- radsurf/Makefile | 13 +- radsurf/radsurf_canopy_properties.F90 | 4 +- radsurf/radsurf_forest_lw.F90 | 77 ++----- radsurf/radsurf_forest_sw.F90 | 80 ++----- radsurf/radsurf_norm_perim.F90 | 283 ++++++++++++++++++++++++ radsurf/radsurf_urban_lw.F90 | 146 +++--------- radsurf/radsurf_urban_sw.F90 | 148 +++---------- 9 files changed, 418 insertions(+), 368 deletions(-) create mode 100644 radsurf/radsurf_norm_perim.F90 diff --git a/ChangeLog b/ChangeLog index 3c17a67..eebedd1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +version 0.7.3 + - Redefined veg_contact_fraction: now the fraction of the building + edge that is touching veg, not the fraction of the vegetation edge + that is touching a building + - Default veg_contact_fraction (in + spartacus_surface_read_input.F90) is equal to the fraction of the + non-building area containing vegetation, equivalent to randomly + placed vegetation + - Normalized perimeter of vegetation-air interface now properly + takes into account the building fraction in the symmetric + vegetation scale formula; this is now in radsurf_norm_perim.F90 + version 0.7.2 (4 October 2021) - Longwave urban modifications to give correct emission from walls, fixing error most noticeable with 2-streams - see diff --git a/driver/spartacus_surface_read_input.F90 b/driver/spartacus_surface_read_input.F90 index 2a9cd3c..1bc76f5 100644 --- a/driver/spartacus_surface_read_input.F90 +++ b/driver/spartacus_surface_read_input.F90 @@ -99,13 +99,6 @@ subroutine read_input(file, config, driver_config, ncol, ntotlay, & & canopy_props%building_fraction) call read_packed_1d(file, 'building_scale', canopy_props%nlay, & & canopy_props%building_scale) - if (file%exists('veg_contact_fraction')) then - call read_packed_1d(file, 'veg_contact_fraction', canopy_props%nlay, & - & canopy_props%veg_contact_fraction) - else - allocate(canopy_props%veg_contact_fraction(ntotlay)) - canopy_props%veg_contact_fraction = 0.0_jprb - end if end if if (config%do_vegetation) then if (driver_config%vegetation_fraction >= 0.0_jprb) then @@ -133,6 +126,22 @@ subroutine read_input(file, config, driver_config, ncol, ntotlay, & call read_packed_1d(file, 'veg_fsd', canopy_props%nlay, & & canopy_props%veg_fsd) end if + + if (config%do_urban) then + if (file%exists('veg_contact_fraction')) then + call read_packed_1d(file, 'veg_contact_fraction', canopy_props%nlay, & + & canopy_props%veg_contact_fraction) + else + allocate(canopy_props%veg_contact_fraction(ntotlay)) + ! By default the vegetation is assumed to be randomly + ! placed, which means that the probability of a wall being + ! in contact with vegetation is equal to the fraction of the + ! non-building area that contains vegetation + canopy_props%veg_contact_fraction = min(1.0_jprb, canopy_props%veg_fraction & + & / max(config%min_vegetation_fraction, 1.0_jprb-canopy_props%building_fraction)) + end if + end if + end if if (config%do_lw) then diff --git a/radsurf/Makefile b/radsurf/Makefile index 721498b..2f6cae3 100644 --- a/radsurf/Makefile +++ b/radsurf/Makefile @@ -12,7 +12,8 @@ SOURCES = \ radsurf_save.F90 \ radsurf_simple_spectrum.F90 \ radsurf_sw_spectral_properties.F90 \ - radsurf_lw_spectral_properties.F90 + radsurf_lw_spectral_properties.F90 \ + radsurf_norm_perim.F90 OBJECTS := $(SOURCES:.F90=.o) LIBSURF = ../lib/libradsurf.a @@ -28,7 +29,7 @@ $(LIBSURF): $(OBJECTS) clean: rm -f *.o $(LIBSURF) -radsurf_canopy_properties.o: radsurf_config.o +radsurf_canopy_properties.o, radsurf_norm_perim.o: radsurf_config.o radsurf_lw_spectral_properties.o: radsurf_canopy_properties.o radsurf_config.o radsurf_sw_spectral_properties.o: radsurf_canopy_properties.o radsurf_config.o radsurf_interface.o: radsurf_canopy_properties.o \ @@ -38,15 +39,15 @@ radsurf_interface.o: radsurf_canopy_properties.o \ radsurf_forest_lw.o radsurf_urban_sw.o radsurf_urban_lw.o radsurf_forest_sw.o: radsurf_config.o radsurf_canopy_properties.o \ radsurf_sw_spectral_properties.o radsurf_boundary_conds_out.o \ - radsurf_canopy_flux.o radsurf_overlap.o + radsurf_canopy_flux.o radsurf_overlap.o radsurf_norm_perim.o radsurf_forest_lw.o: radsurf_config.o radsurf_canopy_properties.o \ - radsurf_boundary_conds_out.o \ + radsurf_boundary_conds_out.o radsurf_norm_perim.o \ radsurf_canopy_flux.o radsurf_overlap.o radsurf_lw_spectral_properties.o radsurf_urban_sw.o: radsurf_config.o radsurf_canopy_properties.o \ - radsurf_boundary_conds_out.o \ + radsurf_boundary_conds_out.o radsurf_norm_perim.o \ radsurf_canopy_flux.o radsurf_overlap.o radsurf_sw_spectral_properties.o radsurf_urban_lw.o: radsurf_config.o radsurf_canopy_properties.o \ - radsurf_boundary_conds_out.o \ + radsurf_boundary_conds_out.o radsurf_norm_perim.o \ radsurf_canopy_flux.o radsurf_overlap.o radsurf_lw_spectral_properties.o radsurf_save.o: radsurf_config.o radsurf_canopy_properties.o \ radsurf_canopy_flux.o diff --git a/radsurf/radsurf_canopy_properties.F90 b/radsurf/radsurf_canopy_properties.F90 index 139f624..898204d 100644 --- a/radsurf/radsurf_canopy_properties.F90 +++ b/radsurf/radsurf_canopy_properties.F90 @@ -88,8 +88,8 @@ module radsurf_canopy_properties ! Fractional standard deviation of vegetation optical depth real(kind=jprb), allocatable :: veg_fsd(:) ! (ntotlay) - ! Fraction of vegetation edge in contact with buildings rather - ! than air + ! Fraction of building edge in contact with vegetation rather than + ! air (note that this was redefined in v0.7.3) real(kind=jprb), allocatable :: veg_contact_fraction(:) ! (ntotlay) ! Representation codes (ITileFlat etc) for each tile: dimensioning diff --git a/radsurf/radsurf_forest_lw.F90 b/radsurf/radsurf_forest_lw.F90 index 68935ce..92ecc18 100644 --- a/radsurf/radsurf_forest_lw.F90 +++ b/radsurf/radsurf_forest_lw.F90 @@ -53,6 +53,7 @@ subroutine spartacus_forest_lw(config, & & rect_mat_x_expandedmat, rect_expandedmat_x_vec, solve_vec, & & solve_rect_mat, rect_mat_x_singlemat, rect_singlemat_x_vec use radsurf_overlap, only : calc_overlap_matrices + use radsurf_norm_perim, only : calc_norm_perim_forest !#define PRINT_ARRAYS 1 @@ -124,14 +125,14 @@ subroutine spartacus_forest_lw(config, & ! Normalized vegetation perimeter length (perimeter length divided ! by domain area), m-1. If nreg=2 then there is a clear-sky and a - ! vegetation region, and norm_perim(1) is the normalized length - ! between the two regions, while norm_perim(2) is unused. If - ! nreg=3 then region 1 is clear-sky, region 2 is low optical depth - ! vegetation and region 3 is high optical depth - ! vegetation. norm_perim(1) is the normalized length between - ! regions 1 and 2, norm_perim(2) is that between regions 2 and 3, - ! and norm_perim(3) is that between regions 3 and 1. - real(kind=jprb) :: norm_perim(nreg) + ! vegetation region, and norm_perim(1,jlay) is the normalized + ! length between the two regions, while norm_perim(2,jlay) is + ! unused. If nreg=3 then region 1 is clear-sky, region 2 is low + ! optical depth vegetation and region 3 is high optical depth + ! vegetation. norm_perim(1,jlay) is the normalized length between + ! regions 1 and 2, norm_perim(2,jlay) is that between regions 2 + ! and 3, and norm_perim(3,jlay) is that between regions 3 and 1. + real(kind=jprb) :: norm_perim(nreg,nlay) ! Rate of exchange between regions, excluding the tangent term, ! where the dimensions are in the sense of @@ -249,6 +250,12 @@ subroutine spartacus_forest_lw(config, & call print_array3('v_overlap',v_overlap) #endif + ! Compute normalized lengths + call calc_norm_perim_forest(config,nlay,nreg, & + & canopy_props%veg_fraction(ilay1:ilay2), & + & canopy_props%veg_scale(ilay1:ilay2), & + & norm_perim) + ! -------------------------------------------------------- ! Section 3: First loop over layers ! -------------------------------------------------------- @@ -293,48 +300,6 @@ subroutine spartacus_forest_lw(config, & & / max(ext_reg(:,3)*(1.0_jprb-ssa_reg(:,3)), 1.0e-8_jprb) end if - norm_perim = 0.0_jprb - if (nreg > 1 .and. veg_fraction(jlay) > config%min_vegetation_fraction) then - ! Compute the normalized vegetation perimeter length - if (config%use_symmetric_vegetation_scale_forest) then - norm_perim(1) = 4.0_jprb * veg_fraction(jlay) * (1.0_jprb - veg_fraction(jlay)) & - & / veg_scale(jlay) - else - norm_perim(1) = 4.0_jprb * veg_fraction(jlay) / veg_scale(jlay) - end if - - if (nreg > 2) then - ! Share the clear-air/vegetation perimeter between the two - ! vegetated regions - norm_perim(nreg) = config%vegetation_isolation_factor_forest * norm_perim(1) - norm_perim(1) = (1.0_jprb - config%vegetation_isolation_factor_forest) & - & * norm_perim(1) - ! We assume that the horizontal scale of the vegetation - ! inhomogeneities is the same as the scale of the tree - ! crowns themselves. Therefore, to compute the interface - ! between the two vegetated regions, we use the same - ! formula as before but with the fraction associated with - ! one of the two vegetated regions, which is half the - ! total vegetation fraction. - if (config%use_symmetric_vegetation_scale_forest) then - norm_perim(2) = (1.0_jprb - config%vegetation_isolation_factor_forest) & - & * 4.0_jprb * (0.5_jprb*veg_fraction(jlay)) & - & * (1.0_jprb - (0.5_jprb*veg_fraction(jlay))) & - & / veg_scale(jlay) - else - ! norm_perim(2) = (1.0_jprb - config%vegetation_isolation_factor_forest) & - ! & * 4.0_jprb * (0.5_jprb*veg_fraction(jlay)) / veg_scale(jlay) - ! Lollipop model - see Hogan, Quaife and Braghiere (2018) explaining sqrt(2) - norm_perim(2) = (1.0_jprb - config%vegetation_isolation_factor_forest) & - & * 4.0_jprb * veg_fraction(jlay) / (sqrt(2.0_jprb)*veg_scale(jlay)) - end if - else - ! Only one vegetated region so the other column of norm_perim - ! is unused - norm_perim(2:) = 0.0_jprb - end if - end if - ! Compute the rates of exchange between regions, excluding the ! tangent term f_exchange = 0.0_jprb @@ -344,18 +309,18 @@ subroutine spartacus_forest_lw(config, & f_exchange(jreg+1,jreg) = 0.0_jprb f_exchange(jreg,jreg+1) = 0.0_jprb else - f_exchange(jreg+1,jreg) = norm_perim(jreg) / (Pi * frac(jreg,jlay)) - f_exchange(jreg,jreg+1) = norm_perim(jreg) / (Pi * frac(jreg+1,jlay)) + f_exchange(jreg+1,jreg) = norm_perim(jreg,jlay) / (Pi * frac(jreg,jlay)) + f_exchange(jreg,jreg+1) = norm_perim(jreg,jlay) / (Pi * frac(jreg+1,jlay)) end if end do - if (nreg > 2 .and. norm_perim(nreg) > 0.0_jprb) then + if (nreg > 2 .and. norm_perim(nreg,jlay) > 0.0_jprb) then if (frac(3,jlay) <= config%min_vegetation_fraction & & .or. frac(1,jlay) <= config%min_vegetation_fraction) then f_exchange(1,3) = 0.0_jprb f_exchange(3,1) = 0.0_jprb else - f_exchange(1,3) = norm_perim(jreg) / (Pi * frac(3,jlay)) - f_exchange(3,1) = norm_perim(jreg) / (Pi * frac(1,jlay)) + f_exchange(1,3) = norm_perim(jreg,jlay) / (Pi * frac(3,jlay)) + f_exchange(3,1) = norm_perim(jreg,jlay) / (Pi * frac(1,jlay)) end if end if @@ -435,7 +400,7 @@ subroutine spartacus_forest_lw(config, & call print_vector('ext_reg',ext_reg(1,:)) call print_vector('ssa_reg',ssa_reg(1,:)) call print_matrix('f_exchange',f_exchange) - call print_vector('norm_perim', norm_perim) + call print_vector('norm_perim', norm_perim(:,jlay)) call print_matrix('gamma1',gamma1(1,:,:)) call print_matrix('gamma2',gamma2(1,:,:)) call print_vector('emiss_rate',emiss_rate(1,:)) diff --git a/radsurf/radsurf_forest_sw.F90 b/radsurf/radsurf_forest_sw.F90 index 36f1c28..4ddefcd 100644 --- a/radsurf/radsurf_forest_sw.F90 +++ b/radsurf/radsurf_forest_sw.F90 @@ -55,6 +55,7 @@ subroutine spartacus_forest_sw(config, & & rect_mat_x_expandedmat, rect_expandedmat_x_vec, solve_vec, & & solve_rect_mat, rect_mat_x_singlemat use radsurf_overlap, only : calc_overlap_matrices + use radsurf_norm_perim, only : calc_norm_perim_forest !#define PRINT_ARRAYS 1 @@ -124,14 +125,14 @@ subroutine spartacus_forest_sw(config, & ! Normalized vegetation perimeter length (perimeter length divided ! by domain area), m-1. If nreg=2 then there is a clear-sky and a - ! vegetation region, and norm_perim(1) is the normalized length - ! between the two regions, while norm_perim(2) is unused. If - ! nreg=3 then region 1 is clear-sky, region 2 is low optical depth - ! vegetation and region 3 is high optical depth - ! vegetation. norm_perim(1) is the normalized length between - ! regions 1 and 2, norm_perim(2) is that between regions 2 and 3, - ! and norm_perim(3) is that between regions 3 and 1. - real(kind=jprb) :: norm_perim(nreg) + ! vegetation region, and norm_perim(1,jlay) is the normalized + ! length between the two regions, while norm_perim(2,jlay) is + ! unused. If nreg=3 then region 1 is clear-sky, region 2 is low + ! optical depth vegetation and region 3 is high optical depth + ! vegetation. norm_perim(1,jlay) is the normalized length between + ! regions 1 and 2, norm_perim(2,jlay) is that between regions 2 + ! and 3, and norm_perim(3,jlay) is that between regions 3 and 1. + real(kind=jprb) :: norm_perim(nreg,nlay) ! Tangent of solar zenith angle real(kind=jprb) :: tan0 @@ -255,6 +256,12 @@ subroutine spartacus_forest_sw(config, & call calc_overlap_matrices(nlay,nreg,frac,u_overlap,v_overlap, & & config%min_vegetation_fraction); + ! Compute normalized lengths + call calc_norm_perim_forest(config,nlay,nreg, & + & canopy_props%veg_fraction(ilay1:ilay2), & + & canopy_props%veg_scale(ilay1:ilay2), & + & norm_perim) + ! -------------------------------------------------------- ! Section 3: First loop over layers ! -------------------------------------------------------- @@ -289,51 +296,6 @@ subroutine spartacus_forest_sw(config, & & / max(ext_reg(:,3), 1.0e-8_jprb) end if - ! Compute the normalized vegetation perimeter length - if (veg_fraction(jlay) > config%min_vegetation_fraction) then - if (config%use_symmetric_vegetation_scale_forest) then - norm_perim(1) = 4.0_jprb * veg_fraction(jlay) * (1.0_jprb - veg_fraction(jlay)) & - & / veg_scale(jlay) - else - norm_perim(1) = 4.0_jprb * veg_fraction(jlay) / veg_scale(jlay) - end if - - if (nreg > 2) then - ! Share the clear-air/vegetation perimeter between the two - ! vegetated regions - norm_perim(nreg) = config%vegetation_isolation_factor_forest * norm_perim(1) - norm_perim(1) = (1.0_jprb - config%vegetation_isolation_factor_forest) & - & * norm_perim(1) - ! We assume that the horizontal scale of the vegetation - ! inhomogeneities is the same as the scale of the tree - ! crowns themselves. Therefore, to compute the interface - ! between the two vegetated regions, we use the same - ! formula as before but with the fraction associated with - ! one of the two vegetated regions, which is half the - ! total vegetation fraction. - if (config%use_symmetric_vegetation_scale_forest) then - norm_perim(2) = (1.0_jprb - config%vegetation_isolation_factor_forest) & - & * 4.0_jprb * (0.5_jprb*veg_fraction(jlay)) & - & * (1.0_jprb - (0.5_jprb*veg_fraction(jlay))) & - & / veg_scale(jlay) - else - ! norm_perim(2) = (1.0_jprb - config%vegetation_isolation_factor_forest) & - ! & * 4.0_jprb * (0.5_jprb*veg_fraction(jlay)) / veg_scale(jlay) - ! Lollipop model - see Hogan, Quaife and Braghiere (2018) explaining sqrt(2) - norm_perim(2) = (1.0_jprb - config%vegetation_isolation_factor_forest) & - & * 4.0_jprb * veg_fraction(jlay) / (sqrt(2.0_jprb)*veg_scale(jlay)) - end if - else - ! Only one vegetated region so the other column of norm_perim - ! is unused - norm_perim(2:) = 0.0_jprb - end if - - else - ! No vegetation so no perimeters - norm_perim = 0.0_jprb - end if - ! Compute the rates of exchange between regions, excluding the ! tangent term f_exchange = 0.0_jprb @@ -343,18 +305,18 @@ subroutine spartacus_forest_sw(config, & f_exchange(jreg+1,jreg) = 0.0_jprb f_exchange(jreg,jreg+1) = 0.0_jprb else - f_exchange(jreg+1,jreg) = norm_perim(jreg) / (Pi * frac(jreg,jlay)) - f_exchange(jreg,jreg+1) = norm_perim(jreg) / (Pi * frac(jreg+1,jlay)) + f_exchange(jreg+1,jreg) = norm_perim(jreg,jlay) / (Pi * frac(jreg,jlay)) + f_exchange(jreg,jreg+1) = norm_perim(jreg,jlay) / (Pi * frac(jreg+1,jlay)) end if end do - if (nreg > 2 .and. norm_perim(nreg) > 0.0_jprb) then + if (nreg > 2 .and. norm_perim(nreg,jlay) > 0.0_jprb) then if (frac(3,jlay) <= config%min_vegetation_fraction & & .or. frac(1,jlay) <= config%min_vegetation_fraction) then f_exchange(1,3) = 0.0_jprb f_exchange(3,1) = 0.0_jprb else - f_exchange(1,3) = norm_perim(jreg) / (Pi * frac(3,jlay)) - f_exchange(3,1) = norm_perim(jreg) / (Pi * frac(1,jlay)) + f_exchange(1,3) = norm_perim(jreg,jlay) / (Pi * frac(3,jlay)) + f_exchange(3,1) = norm_perim(jreg,jlay) / (Pi * frac(1,jlay)) end if end if @@ -431,7 +393,7 @@ subroutine spartacus_forest_sw(config, & call print_vector('veg_fraction',veg_fraction) call print_vector('veg_scale', veg_scale); call print_matrix('frac', frac); - call print_vector('norm_perim', norm_perim) + call print_vector('norm_perim', norm_perim(:,jlay) call print_matrix('f_exchange',f_exchange) call print_vector('tan_ang',lg%tan_ang) call print_matrix('gamma0',gamma0(1,:,:)) diff --git a/radsurf/radsurf_norm_perim.F90 b/radsurf/radsurf_norm_perim.F90 new file mode 100644 index 0000000..a6879a3 --- /dev/null +++ b/radsurf/radsurf_norm_perim.F90 @@ -0,0 +1,283 @@ +! radsurf_norm_perim.F90 - Compute normalized perimeter length between regions +! +! (C) Copyright 2020- ECMWF. +! +! This software is licensed under the terms of the Apache Licence Version 2.0 +! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +! +! In applying this licence, ECMWF does not waive the privileges and immunities +! granted to it by virtue of its status as an intergovernmental organisation +! nor does it submit to any jurisdiction. +! +! Author: Robin Hogan +! Email: r.j.hogan@ecmwf.int +! + +module radsurf_norm_perim + +contains + + !--------------------------------------------------------------------- + ! This routine computes the normalized perimeter length (perimeter + ! length divided by domain area), in m-1, between regions in + ! forests. "nreg" is the number of permeable regions per layer, + ! which can be 1 (clear), 2 (clear and vegetated) or 3 (clear and + ! two vegetated). "norm_perim" has nreg elements per layer: if + ! nreg=1 then norm_perim is unused, if nreg=2 then norm_perim(1,:) + ! is the length between the two regions and if nreg=3 then + ! norm_perim(i,:) is the length between regions i and i+1 except for + ! norm_perim(3,:) which is the length between regions 1 and 3. + subroutine calc_norm_perim_forest(config, nlay, nreg, & + & veg_fraction, veg_scale, norm_perim) + + use parkind1, only : jpim, jprb + use yomhook, only : lhook, dr_hook + use radsurf_config, only : config_type + + implicit none + + ! Algorithm configuration + type(config_type), intent(in) :: config + + ! Number of layers and permeable regions + integer(jpim), intent(in) :: nlay, nreg + + ! Vegetation area fraction, and the horizontal scale of the + ! vegetation (m), which are converted to edge length using Eqs. 19 + ! or 20 of Hogan et al. (GMD 2018) + real(jprb), dimension(nlay), intent(in) :: veg_fraction, veg_scale + + ! Normalized perimeter length between regions (m-1) + real(jprb), dimension(nreg,nlay), intent(out) :: norm_perim + + ! Layer index + integer(jpim) :: jlay + + real(jprb) :: hook_handle + + if (lhook) call dr_hook('radsurf_norm_perim:calc_norm_perim_forest',0,hook_handle) + + norm_perim = 0.0_jprb + + do jlay = 1,nlay + if (nreg > 1) then + if (veg_fraction(jlay) > config%min_vegetation_fraction) then + ! Compute the normalized vegetation perimeter length + if (config%use_symmetric_vegetation_scale_forest) then + ! If S=veg scale, v=veg fraction and c=clear fraction then + ! normal formula for normalized perimeter length is + ! L=4*v*c/S + norm_perim(1,jlay) = 4.0_jprb * veg_fraction(jlay) & + & * max(0.0_jprb, 1.0_jprb - veg_fraction(jlay)) & + & / veg_scale(jlay) + else + ! The Jensen et al. (JClim 2008) effective diameter "D" is + ! used in a simpler formula for normalized perimeter + ! length L=4v/D + norm_perim(1,jlay) = 4.0_jprb * veg_fraction(jlay) / veg_scale(jlay) + end if + + if (nreg > 2) then + ! Share the clear-air/vegetation perimeter between the two + ! vegetated regions + norm_perim(nreg,jlay) = config%vegetation_isolation_factor_forest * norm_perim(1,jlay) + norm_perim(1,jlay) = (1.0_jprb - config%vegetation_isolation_factor_forest) & + & * norm_perim(1,jlay) + ! We assume that the horizontal scale of the vegetation + ! inhomogeneities is the same as the scale of the tree + ! crowns themselves. Therefore, to compute the interface + ! between the two vegetated regions, we use the same + ! formula as before but with the fraction associated with + ! one of the two vegetated regions, which is half the + ! total vegetation fraction. + if (config%use_symmetric_vegetation_scale_forest) then + norm_perim(2,jlay) = (1.0_jprb - config%vegetation_isolation_factor_forest) & + & * 4.0_jprb * (0.5_jprb*veg_fraction(jlay)) & + & * (1.0_jprb - (0.5_jprb*veg_fraction(jlay))) & + & / veg_scale(jlay) + else + ! norm_perim(2) = (1.0_jprb - config%vegetation_isolation_factor_forest) & + ! & * 4.0_jprb * (0.5_jprb*veg_fraction(jlay)) / veg_scale(jlay) + ! Lollipop model - see Hogan, Quaife and Braghiere (2018) explaining sqrt(2) + norm_perim(2,jlay) = (1.0_jprb - config%vegetation_isolation_factor_forest) & + & * 4.0_jprb * veg_fraction(jlay) / (sqrt(2.0_jprb)*veg_scale(jlay)) + end if + else + ! Only one vegetated region so the other column of + ! norm_perim is unused + norm_perim(2:,jlay) = 0.0_jprb + end if + end if + end if + end do + + if (lhook) call dr_hook('radsurf_norm_perim:calc_norm_perim_forest',1,hook_handle) + + end subroutine calc_norm_perim_forest + + + !--------------------------------------------------------------------- + ! This routine computes the normalized perimeter lengths (perimeter + ! length divided by domain area), in m-1, between regions and walls + ! in an urban environment. "nreg" is the number of permeable regions + ! per layer, which can be 1 (clear), 2 (clear and vegetated) or 3 + ! (clear and two vegetated). "norm_perim" has nreg elements per + ! layer: if nreg=1 then norm_perim is unused, if nreg=2 then + ! norm_perim(1,:) is the length between the two regions and if + ! nreg=3 then norm_perim(i,:) is the length between regions i and + ! i+1 except for norm_perim(3,:) which is the length between regions + ! 1 and 3. "norm_perim_wall(i,:)" is the length of the interface + ! between a wall and region i. + subroutine calc_norm_perim_urban(config, nlay, nreg, building_fraction, & + & building_scale, veg_fraction, veg_scale, veg_contact_fraction, & + & norm_perim, norm_perim_wall) + + use parkind1, only : jpim, jprb + use yomhook, only : lhook, dr_hook + use radsurf_config, only : config_type + + implicit none + + ! Algorithm configuration + type(config_type), intent(in) :: config + + ! Number of layers and permeable regions + integer(jpim), intent(in) :: nlay, nreg + + ! Building area fraction and the effective diameter of the + ! buildings (m), and vegetation area fraction and the horizontal + ! scale of the vegetation (m). The latter two are converted to + ! vegetation edge length using Eqs. 19 or 20 of Hogan et al. (GMD + ! 2018). The former two use Eq. 19 of this paper. + real(jprb), dimension(nlay), intent(in) & + & :: building_fraction, building_scale, & + & veg_fraction, veg_scale, veg_contact_fraction + + ! Normalized perimeter length between regions, and between regions + ! and walls (m-1) + real(jprb), dimension(nreg,nlay), intent(out) & + & :: norm_perim, norm_perim_wall + + ! Layer index + integer(jpim) :: jlay + + real(jprb) :: hook_handle + + if (lhook) call dr_hook('radsurf_norm_perim:calc_norm_perim_urban',0,hook_handle) + + norm_perim = 0.0_jprb + norm_perim_wall = 0.0_jprb + + do jlay = 1,nlay + ! First compute the perimeter length between permeable regions + if (nreg > 1) then + if (veg_fraction(jlay) > config%min_vegetation_fraction) then + ! Compute the normalized vegetation perimeter length + if (config%use_symmetric_vegetation_scale_urban) then + ! If S=veg scale, v=veg fraction and c=clear fraction then + ! normal formula for normalized perimeter length is + ! L=4*v*c/S. But there are buildings present too with + ! fraction b, and v+c+b=1. So we are dealing only with the + ! veg+clear fraction, and need to normalize quantities by + ! v+c: L/(v+c)=4*(v/(v+c))*(c/(v+c))/S leading to + ! L=4*v*c/(S*(v+c)). Note that this is the length of the + ! vegetation-clear interface and cannot be reassigned to + ! the veg-building or clear-building interface. + norm_perim(1,jlay) = 4.0_jprb * veg_fraction(jlay) & + & * max(0.0_jprb, 1.0_jprb - veg_fraction(jlay) - building_fraction(jlay)) & + & / (max(config%min_building_fraction, & + & 1.0_jprb - building_fraction(jlay)) * veg_scale(jlay)) + else + ! The Jensen et al. (JClim 2008) effective diameter "D" is + ! used in a simpler formula for normalized perimeter + ! length L=4v/D. In this case if we normalize L and v by + ! (v+c) they cancel leaving the same formula: + norm_perim(1,jlay) = 4.0_jprb * veg_fraction(jlay) / veg_scale(jlay) + end if + + if (nreg > 2) then + ! Share the clear-air/vegetation perimeter between the two + ! vegetated regions + norm_perim(nreg,jlay) = config%vegetation_isolation_factor_urban * norm_perim(1,jlay) + norm_perim(1,jlay) = (1.0_jprb - config%vegetation_isolation_factor_urban) & + & * norm_perim(1,jlay) + ! We assume that the horizontal scale of the vegetation + ! inhomogeneities is the same as the scale of the tree + ! crowns themselves. Therefore, to compute the interface + ! between the two vegetated regions, we use the same + ! formula as before but with the fraction associated with + ! one of the two vegetated regions, which is half the + ! total vegetation fraction. + if (config%use_symmetric_vegetation_scale_urban) then + norm_perim(2,jlay) = (1.0_jprb - config%vegetation_isolation_factor_urban) & + & * 4.0_jprb * (0.5_jprb*veg_fraction(jlay)) & + & * (1.0_jprb - (0.5_jprb*veg_fraction(jlay)) - building_fraction(jlay)) & + & / (max(config%min_building_fraction, & + & 1.0_jprb - building_fraction(jlay)) * veg_scale(jlay)) + else + ! norm_perim(2) = (1.0_jprb - config%vegetation_isolation_factor_urban) & + ! & * 4.0_jprb * (0.5_jprb*veg_fraction(jlay)) / veg_scale(jlay) + ! Lollipop model - see Hogan, Quaife and Braghiere (2018) explaining sqrt(2) + norm_perim(2,jlay) = (1.0_jprb - config%vegetation_isolation_factor_urban) & + & * 4.0_jprb * veg_fraction(jlay) / (sqrt(2.0_jprb)*veg_scale(jlay)) + end if + else + ! Only one vegetated region so the other column of + ! norm_perim is unused + norm_perim(2:,jlay) = 0.0_jprb + end if + end if + end if + + ! Second, compute the normalized length of the interface + ! between each region and a building wall + if (building_fraction(jlay) > config%min_building_fraction) then + + ! By default the only region in contact with walls is the + ! clear region + norm_perim_wall(1,jlay) = 4.0_jprb * building_fraction(jlay) / building_scale(jlay) + + if (nreg > 1) then + if (1.0_jprb - veg_fraction(jlay) - building_fraction(jlay) & + & <= config%min_vegetation_fraction) then + ! There is no clear region (region 1), so all walls must + ! be in contact with vegetation (region 2 and possibly + ! 3) + if (nreg == 2) then + norm_perim_wall(2,jlay) = norm_perim_wall(1,jlay) + else + norm_perim_wall(2,jlay) = norm_perim_wall(1,jlay) & + & * (1.0_jprb - config%vegetation_isolation_factor_urban) + norm_perim_wall(3,jlay) = norm_perim_wall(1,jlay) & + & * config%vegetation_isolation_factor_urban + end if + norm_perim_wall(1,jlay) = 0.0_jprb + else if (veg_fraction(jlay) > config%min_vegetation_fraction) then + ! Nominal case: clear and vegetated regions are present + if (veg_contact_fraction(jlay) > 0.0_jprb) then + ! Compute normalized length of interface between wall + ! and any vegetation + if (nreg == 2) then + norm_perim_wall(2,jlay) = norm_perim_wall(1,jlay)*veg_contact_fraction(jlay) + else + norm_perim_wall(2,jlay) = norm_perim_wall(1,jlay)*veg_contact_fraction(jlay) & + & * (1.0_jprb - config%vegetation_isolation_factor_urban) + norm_perim_wall(3,jlay) = norm_perim_wall(1,jlay)*veg_contact_fraction(jlay) & + & * config%vegetation_isolation_factor_urban + end if + ! Reduce length of interface between wall and clear-air + norm_perim_wall(1,jlay) = norm_perim_wall(1,jlay) & + & * (1.0_jprb - veg_contact_fraction(jlay)) + end if + end if + ! else no significant vegetation so norm_perim_wall(2:,jlay) = 0 + end if + end if + + end do + + if (lhook) call dr_hook('radsurf_norm_perim:calc_norm_perim_urban',1,hook_handle) + + end subroutine calc_norm_perim_urban + +end module radsurf_norm_perim diff --git a/radsurf/radsurf_urban_lw.F90 b/radsurf/radsurf_urban_lw.F90 index 3dd10a6..d898edd 100644 --- a/radsurf/radsurf_urban_lw.F90 +++ b/radsurf/radsurf_urban_lw.F90 @@ -54,6 +54,7 @@ subroutine spartacus_urban_lw(config, & & rect_mat_x_expandedmat, rect_expandedmat_x_vec, solve_vec, & & solve_rect_mat, rect_mat_x_singlemat, rect_singlemat_x_vec use radsurf_overlap, only : calc_overlap_matrices_urban + use radsurf_norm_perim, only : calc_norm_perim_urban !#define PRINT_ARRAYS 1 @@ -125,21 +126,17 @@ subroutine spartacus_urban_lw(config, & ! Normalized vegetation perimeter length (perimeter length divided ! by domain area), m-1. If nreg=2 then there is a clear-sky and a - ! vegetation region, and norm_perim(1) is the normalized length - ! between the two regions, while norm_perim(2) is unused. If - ! nreg=3 then region 1 is clear-sky, region 2 is low optical depth - ! vegetation and region 3 is high optical depth - ! vegetation. norm_perim(1) is the normalized length between - ! regions 1 and 2, norm_perim(2) is that between regions 2 and 3, - ! and norm_perim(3) is that between regions 3 and 1. - real(kind=jprb) :: norm_perim(nreg) + ! vegetation region, and norm_perim(1,jlay) is the normalized + ! length between the two regions, while norm_perim(2,jlay) is + ! unused. If nreg=3 then region 1 is clear-sky, region 2 is low + ! optical depth vegetation and region 3 is high optical depth + ! vegetation. norm_perim(1,jlay) is the normalized length between + ! regions 1 and 2, norm_perim(2,jlay) is that between regions 2 + ! and 3, and norm_perim(3,jlay) is that between regions 3 and 1. + real(kind=jprb) :: norm_perim(nreg,nlay) ! Normalized perimeter between each region and the wall, m-1. - real(kind=jprb) :: norm_perim_wall(nreg) - - ! Normalized perimeter length between air or wall and any - ! vegetation, m-1 - real(kind=jprb) :: norm_perim_air_veg, norm_perim_wall_veg + real(kind=jprb) :: norm_perim_wall(nreg,nlay) ! Rate of exchange between regions, excluding the tangent term, ! where the dimensions are in the sense of @@ -282,6 +279,15 @@ subroutine spartacus_urban_lw(config, & call print_array3('v_overlap',v_overlap) #endif + ! Compute normalized lengths + call calc_norm_perim_urban(config,nlay,nreg, & + & canopy_props%building_fraction(ilay1:ilay2), & + & canopy_props%building_scale(ilay1:ilay2), & + & canopy_props%veg_fraction(ilay1:ilay2), & + & canopy_props%veg_scale(ilay1:ilay2), & + & canopy_props%veg_contact_fraction(ilay1:ilay2), & + & norm_perim, norm_perim_wall) + ! -------------------------------------------------------- ! Section 3: First loop over layers ! -------------------------------------------------------- @@ -340,102 +346,6 @@ subroutine spartacus_urban_lw(config, & end if - norm_perim = 0.0_jprb - if (nreg > 1) then - associate (veg_fraction => canopy_props%veg_fraction(ilay1:ilay2)) - if (veg_fraction(jlay) > config%min_vegetation_fraction) then - ! Compute the normalized vegetation perimeter length - associate (veg_scale => canopy_props%veg_scale(ilay1:ilay2)) - if (config%use_symmetric_vegetation_scale_urban) then - norm_perim(1) = 4.0_jprb * veg_fraction(jlay) & - & * max(0.0_jprb, 1.0_jprb - veg_fraction(jlay) - building_fraction(jlay)) & - & / veg_scale(jlay) - else - norm_perim(1) = 4.0_jprb * veg_fraction(jlay) / veg_scale(jlay) - end if - end associate - - norm_perim_air_veg = norm_perim(1) - - if (nreg > 2) then - ! Share the clear-air/vegetation perimeter between the two - ! vegetated regions - norm_perim(nreg) = config%vegetation_isolation_factor_urban * norm_perim(1) - norm_perim(1) = (1.0_jprb - config%vegetation_isolation_factor_urban) & - & * norm_perim(1) - ! We assume that the horizontal scale of the vegetation - ! inhomogeneities is the same as the scale of the tree - ! crowns themselves. Therefore, to compute the interface - ! between the two vegetated regions, we use the same - ! formula as before but with the fraction associated - ! with one of the two vegetated regions, which is half - ! the total vegetation fraction. - associate (veg_scale => canopy_props%veg_scale(ilay1:ilay2)) - if (config%use_symmetric_vegetation_scale_urban) then - norm_perim(2) = (1.0_jprb - config%vegetation_isolation_factor_urban) & - & * 4.0_jprb * (0.5_jprb*veg_fraction(jlay)) & - & * (1.0_jprb - (0.5_jprb*veg_fraction(jlay))) & - & / veg_scale(jlay) - else - ! norm_perim(2) = (1.0_jprb - config%vegetation_isolation_factor_urban) & - ! & * 4.0_jprb * (0.5_jprb*veg_fraction(jlay)) / veg_scale(jlay) - ! Lollipop model - see Hogan, Quaife and Braghiere (2018) explaining sqrt(2) - norm_perim(2) = (1.0_jprb - config%vegetation_isolation_factor_urban) & - & * 4.0_jprb * veg_fraction(jlay) / (sqrt(2.0_jprb)*veg_scale(jlay)) - end if - end associate - else - ! Only one vegetated region so the other column of - ! norm_perim is unused - norm_perim(2:) = 0.0_jprb - end if - end if - end associate - end if - - ! Compute the normalized length of the interface between each - ! region and a building wall - norm_perim_wall = 0.0_jprb - if (building_fraction(jlay) > config%min_building_fraction) then - norm_perim_wall(1) = 4.0_jprb * building_fraction(jlay) / building_scale(jlay) - if (nreg > 1) then - associate ( veg_contact_fraction => canopy_props%veg_contact_fraction(ilay1:ilay2) ) - if (veg_contact_fraction(jlay) > 0.0_jprb) then - ! Compute normalized length of interface between wall - ! and any vegetation - norm_perim_wall_veg = min(norm_perim_air_veg*veg_contact_fraction(jlay), & - & norm_perim_wall(1)) - if (nreg == 2) then - norm_perim_wall(2) = norm_perim_wall_veg - norm_perim(1) = norm_perim(1) - norm_perim_wall_veg - else - norm_perim_wall(2) = norm_perim_wall_veg & - & * (1.0_jprb - config%vegetation_isolation_factor_urban) - norm_perim(1) = norm_perim(1) - norm_perim_wall(2) - norm_perim_wall(3) = norm_perim_wall_veg & - & * config%vegetation_isolation_factor_urban - norm_perim(3) = norm_perim(3) - norm_perim_wall(3) - end if - ! Reduce length of interface between wall and clear-air - norm_perim_wall(1) = norm_perim_wall(1) - norm_perim_wall_veg - else if (frac(1,jlay) <= config%min_vegetation_fraction) then - ! There is no clear region (region 1), so all walls must - ! be in contact with vegetation (region 2 and possibly - ! 3) - if (nreg == 2) then - norm_perim_wall(2) = norm_perim_wall(1) - else - norm_perim_wall(2) = norm_perim_wall(1) & - & * (1.0_jprb - config%vegetation_isolation_factor_urban) - norm_perim_wall(3) = norm_perim_wall(1) & - & * config%vegetation_isolation_factor_urban - end if - norm_perim_wall(1) = 0.0_jprb - end if - end associate - end if - end if - ! Compute the rates of exchange between regions, excluding the ! tangent term f_exchange = 0.0_jprb @@ -445,18 +355,18 @@ subroutine spartacus_urban_lw(config, & f_exchange(jreg+1,jreg) = 0.0_jprb f_exchange(jreg,jreg+1) = 0.0_jprb else - f_exchange(jreg+1,jreg) = norm_perim(jreg) / (Pi * frac(jreg,jlay)) - f_exchange(jreg,jreg+1) = norm_perim(jreg) / (Pi * frac(jreg+1,jlay)) + f_exchange(jreg+1,jreg) = norm_perim(jreg,jlay) / (Pi * frac(jreg,jlay)) + f_exchange(jreg,jreg+1) = norm_perim(jreg,jlay) / (Pi * frac(jreg+1,jlay)) end if end do - if (nreg > 2 .and. norm_perim(nreg) > 0.0_jprb) then + if (nreg > 2 .and. norm_perim(nreg,jlay) > 0.0_jprb) then if (frac(3,jlay) <= config%min_vegetation_fraction & & .or. frac(1,jlay) <= config%min_vegetation_fraction) then f_exchange(1,3) = 0.0_jprb f_exchange(3,1) = 0.0_jprb else - f_exchange(1,3) = norm_perim(jreg) / (Pi * frac(3,jlay)) - f_exchange(3,1) = norm_perim(jreg) / (Pi * frac(1,jlay)) + f_exchange(1,3) = norm_perim(jreg,jlay) / (Pi * frac(3,jlay)) + f_exchange(3,1) = norm_perim(jreg,jlay) / (Pi * frac(1,jlay)) end if end if @@ -466,7 +376,7 @@ subroutine spartacus_urban_lw(config, & if (frac(jreg,jlay) <= config%min_vegetation_fraction) then f_wall(jreg,jlay) = 0.0_jprb else - f_wall(jreg,jlay) = norm_perim_wall(jreg) * lg%vadjustment2 & + f_wall(jreg,jlay) = norm_perim_wall(jreg,jlay) * lg%vadjustment2 & & / (Pi * frac(jreg,jlay)) end if end do @@ -538,7 +448,7 @@ subroutine spartacus_urban_lw(config, & do jreg = 1,nreg volume_emiss = frac(jreg,jlay) * (ext_reg(:,jreg) * (1.0_jprb - ssa_reg(:,jreg)) & & * planck_reg(:,jreg)) - wall_emiss = norm_perim_wall(jreg) * lg%vadjustment & + wall_emiss = norm_perim_wall(jreg,jlay) * lg%vadjustment & & * wall_emission(:,jlay) do js = 1,ns ifr = js + (jreg-1)*ns @@ -563,7 +473,7 @@ subroutine spartacus_urban_lw(config, & end if end do - emiss_wall(:,jlay) = (sum(norm_perim_wall) * lg%vadjustment) * wall_emission(:,jlay) + emiss_wall(:,jlay) = (sum(norm_perim_wall(:,jlay)) * lg%vadjustment) * wall_emission(:,jlay) #ifdef PRINT_ARRAYS @@ -572,7 +482,7 @@ subroutine spartacus_urban_lw(config, & call print_vector('ssa_reg',ssa_reg(1,:)) call print_matrix('f_exchange',f_exchange) call print_vector('norm_perim', norm_perim) - call print_vector('norm_perim_wall', norm_perim_wall) + call print_vector('norm_perim_wall', norm_perim_wall(:,jlay)) call print_matrix('gamma1',gamma1(1,:,:)) call print_matrix('gamma2',gamma2(1,:,:)) call print_vector('emiss_rate',emiss_rate(1,:)) diff --git a/radsurf/radsurf_urban_sw.F90 b/radsurf/radsurf_urban_sw.F90 index d8fe4e3..030aa77 100644 --- a/radsurf/radsurf_urban_sw.F90 +++ b/radsurf/radsurf_urban_sw.F90 @@ -56,6 +56,7 @@ subroutine spartacus_urban_sw(config, & & rect_mat_x_expandedmat, rect_expandedmat_x_vec, solve_vec, & & solve_rect_mat, rect_mat_x_singlemat, rect_singlemat_x_vec use radsurf_overlap, only : calc_overlap_matrices_urban + use radsurf_norm_perim, only : calc_norm_perim_urban !#define PRINT_ARRAYS 1 @@ -125,21 +126,17 @@ subroutine spartacus_urban_sw(config, & ! Normalized vegetation perimeter length (perimeter length divided ! by domain area), m-1. If nreg=2 then there is a clear-sky and a - ! vegetation region, and norm_perim(1) is the normalized length - ! between the two regions, while norm_perim(2) is unused. If - ! nreg=3 then region 1 is clear-sky, region 2 is low optical depth - ! vegetation and region 3 is high optical depth - ! vegetation. norm_perim(1) is the normalized length between - ! regions 1 and 2, norm_perim(2) is that between regions 2 and 3, - ! and norm_perim(3) is that between regions 3 and 1. - real(kind=jprb) :: norm_perim(nreg) + ! vegetation region, and norm_perim(1,jlay) is the normalized + ! length between the two regions, while norm_perim(2,jlay) is + ! unused. If nreg=3 then region 1 is clear-sky, region 2 is low + ! optical depth vegetation and region 3 is high optical depth + ! vegetation. norm_perim(1,jlay) is the normalized length between + ! regions 1 and 2, norm_perim(2,jlay) is that between regions 2 + ! and 3, and norm_perim(3,jlay) is that between regions 3 and 1. + real(kind=jprb) :: norm_perim(nreg,nlay) ! Normalized perimeter between each region and the wall, m-1. - real(kind=jprb) :: norm_perim_wall(nreg) - - ! Normalized perimeter length between air or wall and any - ! vegetation, m-1 - real(kind=jprb) :: norm_perim_air_veg, norm_perim_wall_veg + real(kind=jprb) :: norm_perim_wall(nreg,nlay) ! Tangent, sine of solar zenith angle real(kind=jprb) :: tan0, sin0 @@ -321,6 +318,15 @@ subroutine spartacus_urban_sw(config, & call print_array3('v_overlap',v_overlap) #endif + ! Compute normalized lengths + call calc_norm_perim_urban(config,nlay,nreg, & + & canopy_props%building_fraction(ilay1:ilay2), & + & canopy_props%building_scale(ilay1:ilay2), & + & canopy_props%veg_fraction(ilay1:ilay2), & + & canopy_props%veg_scale(ilay1:ilay2), & + & canopy_props%veg_contact_fraction(ilay1:ilay2), & + & norm_perim, norm_perim_wall) + ! -------------------------------------------------------- ! Section 3: First loop over layers ! -------------------------------------------------------- @@ -362,104 +368,6 @@ subroutine spartacus_urban_sw(config, & end associate end if - norm_perim = 0.0_jprb - if (nreg > 1) then - associate ( veg_fraction => canopy_props%veg_fraction(ilay1:ilay2) ) - if (veg_fraction(jlay) > config%min_vegetation_fraction) then - ! Compute the normalized vegetation perimeter length - associate (veg_scale => canopy_props%veg_scale(ilay1:ilay2)) - if (config%use_symmetric_vegetation_scale_urban) then - norm_perim(1) = 4.0_jprb * veg_fraction(jlay) & - & * max(0.0_jprb, 1.0_jprb - veg_fraction(jlay) - building_fraction(jlay)) & - & / veg_scale(jlay) - else - norm_perim(1) = 4.0_jprb * veg_fraction(jlay) / veg_scale(jlay) - end if - end associate - norm_perim_air_veg = norm_perim(1) - - if (nreg > 2) then - ! Share the clear-air/vegetation perimeter between the two - ! vegetated regions - norm_perim(nreg) = config%vegetation_isolation_factor_urban * norm_perim(1) - norm_perim(1) = (1.0_jprb - config%vegetation_isolation_factor_urban) & - & * norm_perim(1) - ! We assume that the horizontal scale of the vegetation - ! inhomogeneities is the same as the scale of the tree - ! crowns themselves. Therefore, to compute the interface - ! between the two vegetated regions, we use the same - ! formula as before but with the fraction associated - ! with one of the two vegetated regions, which is half - ! the total vegetation fraction. - associate (veg_scale => canopy_props%veg_scale(ilay1:ilay2)) - if (config%use_symmetric_vegetation_scale_urban) then - norm_perim(2) = (1.0_jprb - config%vegetation_isolation_factor_urban) & - & * 4.0_jprb * (0.5_jprb*veg_fraction(jlay)) & - & * (1.0_jprb - (0.5_jprb*veg_fraction(jlay))) & - & / veg_scale(jlay) - else - ! norm_perim(2) = (1.0_jprb - config%vegetation_isolation_factor_urban) & - ! & * 4.0_jprb * (0.5_jprb*veg_fraction(jlay)) / veg_scale(jlay) - ! Lollipop model - see Hogan, Quaife and Braghiere (2018) explaining sqrt(2) - norm_perim(2) = (1.0_jprb - config%vegetation_isolation_factor_urban) & - & * 4.0_jprb * veg_fraction(jlay) / (sqrt(2.0_jprb)*veg_scale(jlay)) - end if - end associate - else - ! Only one vegetated region so the other column of - ! norm_perim is unused - norm_perim(2:) = 0.0_jprb - end if - end if - end associate - end if - - ! Compute the normalized length of the interface between each - ! region and a building wall - norm_perim_wall = 0.0_jprb - - if (building_fraction(jlay) > config%min_building_fraction) then - norm_perim_wall(1) = 4.0_jprb * building_fraction(jlay) / building_scale(jlay) - - if (nreg > 1) then - associate (veg_contact_fraction => canopy_props%veg_contact_fraction(ilay1:ilay2)) - if (veg_contact_fraction(jlay) > 0.0_jprb) then - ! Compute normalized length of interface between wall - ! and any vegetation - norm_perim_wall_veg = min(norm_perim_air_veg*veg_contact_fraction(jlay), & - & norm_perim_wall(1)) - if (nreg == 2) then - norm_perim_wall(2) = norm_perim_wall_veg - norm_perim(1) = norm_perim(1) - norm_perim_wall_veg - else - norm_perim_wall(2) = norm_perim_wall_veg & - & * (1.0_jprb - config%vegetation_isolation_factor_urban) - norm_perim(1) = norm_perim(1) - norm_perim_wall(2) - norm_perim_wall(3) = norm_perim_wall_veg & - & * config%vegetation_isolation_factor_urban - norm_perim(3) = norm_perim(3) - norm_perim_wall(3) - end if - ! Reduce length of interface between wall and clear-air - norm_perim_wall(1) = norm_perim_wall(1) - norm_perim_wall_veg - else if (frac(1,jlay) <= config%min_vegetation_fraction) then - ! There is no clear region (region 1), so all walls must - ! be in contact with vegetation (region 2 and possibly - ! 3) - if (nreg == 2) then - norm_perim_wall(2) = norm_perim_wall(1) - else - norm_perim_wall(2) = norm_perim_wall(1) & - & * (1.0_jprb - config%vegetation_isolation_factor_urban) - norm_perim_wall(3) = norm_perim_wall(1) & - & * config%vegetation_isolation_factor_urban - end if - norm_perim_wall(1) = 0.0_jprb - end if - end associate - end if - end if - - ! Compute the rates of exchange between regions, excluding the ! tangent term f_exchange = 0.0_jprb @@ -469,18 +377,18 @@ subroutine spartacus_urban_sw(config, & f_exchange(jreg+1,jreg) = 0.0_jprb f_exchange(jreg,jreg+1) = 0.0_jprb else - f_exchange(jreg+1,jreg) = norm_perim(jreg) / (Pi * frac(jreg,jlay)) - f_exchange(jreg,jreg+1) = norm_perim(jreg) / (Pi * frac(jreg+1,jlay)) + f_exchange(jreg+1,jreg) = norm_perim(jreg,jlay) / (Pi * frac(jreg,jlay)) + f_exchange(jreg,jreg+1) = norm_perim(jreg,jlay) / (Pi * frac(jreg+1,jlay)) end if end do - if (nreg > 2 .and. norm_perim(nreg) > 0.0_jprb) then + if (nreg > 2 .and. norm_perim(nreg,jlay) > 0.0_jprb) then if (frac(3,jlay) <= config%min_vegetation_fraction & & .or. frac(1,jlay) <= config%min_vegetation_fraction) then f_exchange(1,3) = 0.0_jprb f_exchange(3,1) = 0.0_jprb else - f_exchange(1,3) = norm_perim(jreg) / (Pi * frac(3,jlay)) - f_exchange(3,1) = norm_perim(jreg) / (Pi * frac(1,jlay)) + f_exchange(1,3) = norm_perim(jreg,jlay) / (Pi * frac(3,jlay)) + f_exchange(3,1) = norm_perim(jreg,jlay) / (Pi * frac(1,jlay)) end if end if @@ -490,14 +398,14 @@ subroutine spartacus_urban_sw(config, & if (frac(jreg,jlay) <= config%min_vegetation_fraction) then f_wall(jreg,jlay) = 0.0_jprb else - f_wall(jreg,jlay) = norm_perim_wall(jreg) / (Pi * frac(jreg,jlay)) + f_wall(jreg,jlay) = norm_perim_wall(jreg,jlay) / (Pi * frac(jreg,jlay)) end if end do if (non_building_fraction(jlay) <= config%min_building_fraction) then f_wall_dir_clear(jlay) = 0.0_jprb else - f_wall_dir_clear(jlay) = sum(norm_perim_wall(1:nreg)) & + f_wall_dir_clear(jlay) = sum(norm_perim_wall(1:nreg,jlay)) & & / (Pi * non_building_fraction(jlay)) end if @@ -590,8 +498,8 @@ subroutine spartacus_urban_sw(config, & call print_vector('ext_reg',ext_reg(1,:)) call print_vector('ssa_reg',ssa_reg(1,:)) call print_matrix('f_exchange',f_exchange) - call print_vector('norm_perim', norm_perim) - call print_vector('norm_perim_wall', norm_perim_wall) + call print_vector('norm_perim', norm_perim(:,jlay)) + call print_vector('norm_perim_wall', norm_perim_wall(:,jlay)) call print_matrix('gamma0',gamma0(1,:,:)) call print_matrix('gamma1',gamma1(1,:,:)) call print_matrix('gamma2',gamma2(1,:,:)) From e9ab4f0f3f851d028ecb2a38bd0abb0c930ad950 Mon Sep 17 00:00:00 2001 From: Robin Hogan Date: Wed, 6 Oct 2021 23:24:55 +0100 Subject: [PATCH 10/28] Updated README --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c48f02c..356ac8a 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Robin Hogan -This document was last updated 10 October 2020 +This document was last updated 6 October 2021 ## INTRODUCTION @@ -105,6 +105,8 @@ RAMI4PILPS test cases that were used by Hogan et al. (2018). The `test/urban` directory contains an urban profile from Fig. 1 of Hogan (2019). +The `test/rami5` directory contains the files necessary to run five of +the actual forest scenes from the RAMI-V intercomparison project. ## LICENCE From 12d53ae475441cae8edf3b91f75465b02142acb8 Mon Sep 17 00:00:00 2001 From: Robin Hogan Date: Wed, 6 Oct 2021 23:25:50 +0100 Subject: [PATCH 11/28] Fixed interpretation of veg isolation factor to match Fig. 2 in documentation --- ChangeLog | 4 ++++ radsurf/radsurf_norm_perim.F90 | 8 ++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index eebedd1..9090cf4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -9,6 +9,10 @@ version 0.7.3 - Normalized perimeter of vegetation-air interface now properly takes into account the building fraction in the symmetric vegetation scale formula; this is now in radsurf_norm_perim.F90 + - vegetation_isolation_factor treatment changed such that a value + of 1 now indicates that thick and thin vegetation regions equally + likely to be in contact with the clear-air region, rather than + that only the thick region is in contact with clear-air version 0.7.2 (4 October 2021) - Longwave urban modifications to give correct emission from diff --git a/radsurf/radsurf_norm_perim.F90 b/radsurf/radsurf_norm_perim.F90 index a6879a3..15dff87 100644 --- a/radsurf/radsurf_norm_perim.F90 +++ b/radsurf/radsurf_norm_perim.F90 @@ -80,8 +80,8 @@ subroutine calc_norm_perim_forest(config, nlay, nreg, & if (nreg > 2) then ! Share the clear-air/vegetation perimeter between the two ! vegetated regions - norm_perim(nreg,jlay) = config%vegetation_isolation_factor_forest * norm_perim(1,jlay) - norm_perim(1,jlay) = (1.0_jprb - config%vegetation_isolation_factor_forest) & + norm_perim(nreg,jlay) = 0.5_jprb*config%vegetation_isolation_factor_forest * norm_perim(1,jlay) + norm_perim(1,jlay) = (1.0_jprb - 0.5_jprb*config%vegetation_isolation_factor_forest) & & * norm_perim(1,jlay) ! We assume that the horizontal scale of the vegetation ! inhomogeneities is the same as the scale of the tree @@ -198,8 +198,8 @@ subroutine calc_norm_perim_urban(config, nlay, nreg, building_fraction, & if (nreg > 2) then ! Share the clear-air/vegetation perimeter between the two ! vegetated regions - norm_perim(nreg,jlay) = config%vegetation_isolation_factor_urban * norm_perim(1,jlay) - norm_perim(1,jlay) = (1.0_jprb - config%vegetation_isolation_factor_urban) & + norm_perim(nreg,jlay) = 0.5_jprb*config%vegetation_isolation_factor_urban * norm_perim(1,jlay) + norm_perim(1,jlay) = (1.0_jprb - 0.5_jprb*config%vegetation_isolation_factor_urban) & & * norm_perim(1,jlay) ! We assume that the horizontal scale of the vegetation ! inhomogeneities is the same as the scale of the tree From 13988c5f3c25f37399c378f2a1b28834cf22f32b Mon Sep 17 00:00:00 2001 From: Robin Hogan Date: Wed, 6 Oct 2021 23:26:01 +0100 Subject: [PATCH 12/28] Updated documentation --- doc/spartacus_surface_documentation.pdf | Bin 206928 -> 215086 bytes doc/spartacus_surface_documentation.tex | 239 +++++++++++++++++++----- 2 files changed, 189 insertions(+), 50 deletions(-) diff --git a/doc/spartacus_surface_documentation.pdf b/doc/spartacus_surface_documentation.pdf index 522378bbd626b7574875d8e8d376ffde530736f7..95729da48d8c9a75d54bac39528d793d0d2030eb 100644 GIT binary patch delta 94528 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

S3#Z==73Y3`Cu%_)zZ0K3UiX*t5Vw=&;) zq{0zA`&u}-K(GsI_5O*Q>1P)Db$?N_>-WDt_t(i5-!f&z)%@eYC+XI7ca{wjG>^8l zid{iWA=tQD$3|?$zm+?*J*I~{4b3$=+!Y@XIlCGxT$*7FAH%hft{yC4#W?p{2fehB z-X%-~=RT7bXd$$y2*XK!1N)I2vI?oF6=)o}YH=L7AqW-&46o0pv=>Lo66gffzAoxB zp~UuW_&x1br+OHd;X0(**Lmc|O?;&9rz1I?ybqo-o|$6pVQs$vw}4TEQ_LGcWz-9p zU^zFqaydD#UBGXjVxZ?#WKv|GvUKx#aofDthKAnD3pN8lMQ!$_Q;6 z%C+q5??L!MO9#SpbT%lBzh+3($e{Ma7nLt@Ks6iXoJL0p4M_OldeoR*;?Ou#-v@#E z5eqQ258X-}XbGknR?g)0Al`MTb=e=r)E>&iPwr1ARv8p6@w{$AA@m}xp85c04rIlp zx%wu&+6h&1IQj`4keBBmA;5Rw(6k^u+RoEUaZ1VavLw-N9ib|!rR+FaUKX^*n^zQt zi`W)7H2!@CEq)Q+sh#nk|=+<4I~1A8jLj}WVYq)}IBqcAFePk3l!>fJhcXNxB^ z!^Is6K^bGLX3+mY&^YlM2g?=7Za6`dwrkp?S$6!H2;`C&6UueIMv{FKODzm=K6DCW zBAiu?)LlpPL#|MNo>mg@K$PC)zR2~MLUeX6`{3RA(C8;BppdfmW*-EUmDO^;36erS zPA^o9bk=ZHdfCiC@06IQz%2IA-a|rU54%U3`$@mMWX%&P&UnBFUneA z^I1NZ3E*`cP?gIczaS5_$+?s2ekdk}$o1?x4RzN^MT#Ween{J!RyiT!L)XiUGS6n< zvxd~#=E1`ER?YP}Oi2Rnks*dmFeXE9*@^W4_uqpMN&At}K*#UU2GG$PoMIEHb6T#_CBmq2Xz@1AEA(^V->+@!L%$&>1 ziJV)7L(7Ql*mH;(>x%yQ^Gb$SH*kFkLfhR%>00fHD5>OV)ZKt{&C;EP5-Pk(TQh5F zZ0p7PAuc&=u9TG0_j}dNMwkf}DRG1#5P5HOATCmpCU758*fR{9S40Q+_mA)S6ur6j zKNIX7S(p50%qDX1|Ad}(&=~P95|NizM~c-5QzCF<$>Aev#4f$e&|J+fWLD?XMQ*Re zGCK}6Z?f~lp(FqdJZlRA&6qwZ?2C^9Oi1* z;f7yn{G8Ry2YDs0#gW78Er+MvnpeP@c*V!9ah6r!Dm*3Z?q&vWINZjcD7 zz`!tb!);Eb2Y{!cvf>-d-<@^2Q=3_wQWj>3Kn&{IZ4m;A!qM zyVU+{%>OQ{){TZ7Lpa+E$@Ywy5pLcX8P5*i8WG|~DR5$>!Rd+hsFF8NJ!EL&Qts-E z2KjxW;oW6vrdCgrGNRoH&AhE+1Jza#(^*wD*L6r5^2&&W`s@{xcQPX&(7-9ht$dD?aQyD1A8yo~Q8s#H<0# z;=MF!W9CFq&lri=9zoy(anz4T5Hwyu<}B;rcQXKW-d`C4A9-F%UD=}B3s&fG@04Q| zrSWpv7vias2H5>v+>tfy!M?*Xc{sv%Sy-6t#rk9Bc%AR$L24G$M;)wZ&V3TiDJs*) z0TwPfW!{P{%E=?s=c~drIcv;e#1@$Ukf-ucIncSI<>0c4`cSXxxqV`CN30S1FFu?JFl=|*uifHu4uJ|O1*|kvO>26Vk#{mrYIxnRa+UsvZvSkTjtc_zhA6#jz6f)wTPB2FRsAd zx9A;Z5^AWKRpmBgYoc2(X)YihlN9jbgl&=Qrg#$skNy`mbn>1B{PR%_l<8u^o z^l1~!39eX;9(y)RFSJ8_iiGijIH+AMS&HK!=;?W9Ews(day+1PIWx>LW14085}fvr zC%Nu=y)iOau6%#$e+ER^R-Vp^-n|d z#trbta?S4XCp`mlco{A=1DEy!llMl>Yol~IE6mB#f+urAAVbxE^+_6-1P(I-^gAg^ zyvLiqGPZ=%w&tCdGwIz=@0Y4|Dct+#QO4A+2;{1DEElGq?K7eeA0Fn3tHS`6?5=%G z@wBWQA0tylc?8W7XZvFi5W?LgZV+bkF$T%Lpz33*&udqn1@fLvJeaz8RA8a3K7;L7 z^9*mAzP8fG%;JD!;(Kw~0_hT%rdX2}K^{&!4hWq+b=M?HrS!F0hPiJSf;s}rJSbFZ ziyZl&6y+J=f$PzwZNQPIXBD8rlIGfnuF>k&IDO_bIcwJUtaQ^+b+zGp$5i{pdcCAZ zK0c*E4)h?jAA56M&i1u_%DgkujC(UR@QRX@$Hn!aDejVyh=h?`Ll2Lzb^ZL%q=40n zWY!1E+3IG1(*oOX8*}rMb0V^kWci39{JrEt%v@`5ADvGF@}@NQZx!GTlU+hYd@m6w zU^$vN5O5KP%*masLvUkSvddKhHF_%F7dDhx%*P%4uht70AvVKsMN{9xVEtd&v^E& z$t{`-g{)qhq?xQaaor%-j#V-qPnxH*Racy74h(0z_S4nbqbbtkY4L#YHL~@#DV#Ya zeMt0mlS-~&Ns|Ht-$lE$5zj$LNBvbOl?88xp+6bGNz_F7jRxqrEr=O zlA979^Vl&)h*+cb?9C z6V^xZO*iBH%eRuKfT}|u1K@k1V$+#zZ7I{$MWrqD1pAPtu(F5N?R3LG83j4=c8_E6 ze*52TjNuNOJmlqoQzxR+=7sK}vU5$VO#h)by!o?DGw3cWLRJ%T{OIZA=FXkAD8>>K z%(7IGxp?HvT^r%m^BjNfR#aw`5w#x~6k@itMb?EiwaZuenoB9>G2qCh81mCBL#t0? z?e<1sGHP`9_g^pAkauqq@6V~dJFWL0?eVDw(Sl@h)I5f6!HpRz7=p0`{dr&{z$x$j z#z*~0G%Vt)46ON3CehPa@iYC~%W5vhJR}3f0CPX|ONbm8uAEyh&@S~B+NuNWH@t&P z&EVgaB((#XO6ttK|vB%X|Qjk9w~Z^_y{$+RfwN-xVc zJxL@)F%^7EupaBmkA5Ci%NaPTZWN?fVzeLbL&-_y;sXCU>RRV9rW(6|7V`3EnBV-i zjJH_@JKe^bND0im6hnGtlQN|%V4#)%f>QX-_UD@wW`fB)kO5q6UHTwz8lFmvXlZx{ z#;cT5U0bsH*13!^mGpW6tla_TE}7@_a;Zk=tH+mo(FpI2m8sgJCb9u)a%5ZbQ%GVahpo9s9(+Zt0x|^qK9~hp)e^{+xQuVE$7f;K_q}b`Xn@s4e{hEi{@EirXMW?JBp6hc9XHY_Sa5TQ$VIdrYyfay%?#qxUiRJY zGe3hnYCZQZTEB6dLTpU`jd27*)`MkVzf7-}D8w^#oJ%M&8k&aVK7g%cPerW|rHrAb zN$pJxUa_d^!o-(~pR~$he{Vvsvy@5SjLh4~b^kE>1b`a~ELm)_A`I)sE9L!&Mi7BIvato{)|}+2`KHF(tN8M<&(jfz+6iX!yHqNa<1} zQJ4TEksXtLv{)zfc5K6l9~WK-4d4Og%#$EWnOKC8{X2WiEec!p7MY$Z7_iM9|Hn3l zArF%Un?sGWp!oZY3ZIa6)`1ap{9k#8i#CQLIv_Z@A_FXDc?5sJ=C7DD-=JVn5PCru zHRC9K=vp3T5sZAmnFl}mrCocqo~Hh)Xc^RRa*(NAZA_{niPfe6OgGXv3IVf~T* zT<2kksocxaF1Ud}c2G((kWCJ}x|7N?LqK;zNyHuOFh!@5Jg#eXR!E-Y!RuxoHU2ti zp!wh)qDz4onNQS?aJ~Gt!k=4`RjE zB+M9qbod3_AGj+JAoR;_0d8q1wi3$0&2{fv2&Jm{2{K(n1Wkpi_}t|FY+E9kFLg=H zl{;-&ejfXfR;TxCXuyuo=$b#74w%8s8-UFI+Hwp>(umE3@9j^&OETA+X5`Wlq-HRi z6*4$3yg!BV3&JCLUbbe}ED|g*)QmIUWob6w35vJ(x}(|mRn%d<#{I8nG15{paEtx& zQL1QyF6336wGN2k#CUO~`B|IKsA3ozQPkBHLcBi+ok-_Rm@1z`vpqD*1L%QnDu?4S zvdG!H;W0edgUi5g32Vg7r)$XmrV-{r81M+8g5p=h)@l?Fa))0|iVtEybrxZ>~ij_0u` zMM=tjE8vQ zxuXCG7i%JolQK3J+kbLM8HS&qLEPTXg@~7zh(Vc?h>456G1-X&0)(CGzk&b|E{;TH zPbF+F&j0sguEs9UKOor5O#h2~{{Ml`j9e`LTU+VqIA66n`U>XDIhM^05IF$dpNICnsU(`R(uw5(pww>FD52hOubqej z0K>V|TC8|d7ORQnm%IJa-jhnNv)@CSSyL-@2Dc?6^5ikJsjS+UN2imcBOR7o?O(p4ml8wt>Mx6Dc$LfE z+YC9DmDi{9kw4r(k7dtu&(C|Bt<@Vh<>jGprTW_`V(K7jt+J-F^GUgJpX55dZW7j4 z6}U0Hp~(&d%m%Rx9B^)8wcD_7k71>j<9;_e9eaw97jH5(P8+etw4k5VWH+HwfE@IM zclhSq+)D{c_}ovN-d|fOv-TNPEueCTCUW?nR4{<-NV7h8U`EPHZzt0`4*7^QXt>bt z+0lNefVbwiX{gj|hWv(Gz*Re+!x~uONn7P+xtOh0=a1rbrU5UkAP5f9UI(SVa~uG= z3AqtlskL@<)G_oh^0|b-z&fKDkhVq>U(I2A{amVRpXM_)oqL18k*Ejq&1ex_WH-qj>%H8{zD={9+UW znnL}|!zRW^j7maGJLX9_2F5)nSgpRMRk!}itYeIGOm%3dp0vJ{Jb!)_Km=sSHx|@n zB20qL8h!r-GgOb=!PiVsalQ5|�DzF06+p3;z#yg8Z&5qsYVxSJYf{U&=!=y)EkT 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 NhZjUeC8;b0`X92an~eYf delta 86334 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≪3jp-b-92aLJQMN+n?2 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\raggedright}p{5cm}>{\raggedright}p{5cm}} %\begin{longtable}{lXLp{4cm}Lp{5.5cm}} \begin{longtable}{lXlLp{5.5cm}} @@ -615,7 +621,8 @@ \section{Configuring the \spsurf\ algorithm} % To be added: % & do_canopy_gases_sw, do_canopy_gases_lw, \end{longtable} -\end{center} +%\end{center} +} %\end{table} The number of streams can be any positive integer, but note that this @@ -640,7 +647,7 @@ \section{Configuring the \spsurf\ algorithm} assumption used by][]{Hogan+2018}, and 1.0 in which the dense and sparse regions form unconnected tree crowns. -\begin{figure}[b!] +\begin{figure}[tb!] \centerline{\includegraphics[width=0.75\textwidth]{isolation_schematic.pdf}} \caption{\label{fig:isolation_schematic}Schematic illustrating how the \code{vegetation\_isolation\_factor\_*} parameters in Table @@ -648,44 +655,6 @@ \section{Configuring the \spsurf\ algorithm} region and the two vegetated regions in each layer.} \end{figure} -\spsurf\ assumes that the rate of lateral exchange of radiation -between the clear and vegetated regions is proportional to the -normalized perimeter length, $L$, separating the vegetation and clear -regions, i.e.\ the perimeter length divided by the horizontal area of -the domain. This variable has units of m$^{-1}$ and is a strong -function of vegetation fraction, so it is more convenient for models to -parameterize the horizontal size of typical tree crowns, as expressed -by the \code{vegetation\_scale} input variable in Table -\ref{tab:invar}. The \code{use\_symmetric\_vegetation\_scale\_*} -parameters determine how this scale is used to compute $L$. If a -symmetric vegetation scale is selected then Eq.\ 20 of -\cite{Hogan+2018} is used: -% -\begin{equation} - L=4v(1-v)/S,\label{eq:S} -\end{equation} -% -where $v$ is the vegetation fraction and $S$ is the vegetation scale. -In this case, as the vegetation fraction approaches one, the -normalized perimeter approaches zero, indicating that the tree crowns -effectively merge. If \code{use\_symmetric\_vegetation\_scale\_*} is -\code{false} then Eq.\ 19 of \cite{Hogan+2018} is used: -% -\begin{equation} - L=4v/D,\label{eq:D} -\end{equation} -% -where this time \code{vegetation\_scale} is interpreted as the -effective crown diameter, $D$. This has the property that $L$ -approaches a constant value as the vegetation fraction approaches one, -which could be thought of as the property of \emph{crown shyness} -exhibited by some forest canopies. - -The \code{building\_scale} input variable in Table \ref{tab:invar} is -always interpreted as an effective building diameter, i.e.\ the code -uses (\ref{eq:D}) to convert to the normalized building perimeter -length in each layer, $L$, given the building fraction $v$. - \section{Configuring the offline package} \label{sec:nam_radsurf_config} In addition to the namelist parameters described in section @@ -696,7 +665,8 @@ \section{Configuring the offline package} present in the namelist then they will override the corresponding variable provided in the input file. -\begin{center} +%\begin{center} +{ \tablesetup \begin{longtable}{ll} % @@ -736,7 +706,176 @@ \section{Configuring the offline package} \codetab{top\_flux\_dn\_lw} & Override top-of-canopy downwelling longwave flux (W~m$^{-2}$)\\ \hline \end{longtable} -\end{center} +} +%\end{center} + +\section{Interpretation of geometry input variables} +\subsection{Forests} +\spsurf\ assumes that the rate of lateral exchange of radiation +between the clear-air and vegetated regions is proportional to the +normalized length of the perimeter separating the vegetation and clear +regions, $L_{av}$, i.e.\ the perimeter length divided by the horizontal +area of the domain. This variable has units of m$^{-1}$ and in +practice is a strong function of vegetation fraction, so it is more +convenient for models to parameterize the horizontal size of typical +tree crowns, as expressed by the \code{vegetation\_scale} input +variable in Table \ref{tab:invar}. The +\code{use\_symmetric\_vegetation\_scale\_*} parameters determine how +this scale is used to compute $L_{av}$ in the `forest' and `vegetated +urban' surface types (shown in Fig.\ \ref{fig:type_schematic}). If a +symmetric vegetation scale is selected then Eq.\ 20 of +\cite{Hogan+2018} is used: +% +\begin{equation} + L_{av}=\frac{4av}{S_v},\label{eq:S} +\end{equation} +% +where $a$ is the clear-air fraction, $v$ is the vegetation fraction +and $S_v$ is the vegetation scale. In the case of a forest, there are +no other regions so $a=1-v$ and as the vegetation fraction approaches +one, the normalized perimeter approaches zero, indicating that the +tree crowns effectively merge. If +\code{use\_symmetric\_vegetation\_scale\_*} is \code{false} then +Eq.\ 19 of \cite{Hogan+2018} is used: +% +\begin{equation} + L_{av}=\frac{4v}{D_v},\label{eq:D} +\end{equation} +% +where this time \code{vegetation\_scale} is interpreted as the +effective crown diameter, $D_v$. This has the property that $L_{av}$ +approaches a constant value as the vegetation fraction approaches one, +which could be thought of as the property of \emph{crown shyness} +exhibited by some forest canopies. + +If you have two vegetated regions (\code{n\_vegetation\_region\_*} in +Table \ref{tab:nam_radsurf} is 2) then the normalized perimeter length +between vegetation and clear-air, $L_{av}$, will be partitioned between the +two vegetated regions in proportion to the relevant +\code{vegetation\_isolation\_factor\_*} parameter $f$: +% +\begin{align} +L_{a1}=&L_{av}(1-f/2);\label{eq:La1}\\ +L_{a2}=&L_{av}f/2,\label{eq:La2} +\end{align} +% +where $L_{a1}$ and $L_{a2}$ are the normalized perimeter lengths +between clear-air and each of the two vegetation regions. Figure +\ref{fig:isolation_schematic} illustrates the limits of $f=0$ and +$f=1$. +% +This still leaves the length of the interface between the two +vegetated regions, $L_{12}$, to be determined, which is used +internally to compute the rate of lateral radiation exchange between +these two regions. It is computed in \spsurf\ as follows. If the +symmetric vegetation scale is selected then the horizontal scale of +the vegetation inhomogeneities is assumed to be the same as the scale +of the tree crowns themselves. Therefore, to compute the length of the +interface between the two vegetated regions we use (\ref{eq:S}) but +replace the vegetation fraction $v$ with the fraction of just one of +the two vegetation regions, $v/2$, such that +% +\begin{equation} +L_{12}=(1-f)\frac{4(v/2)(1-v/2)}{S_v}=(1-f)\frac{v(2-v)}{S_v}.\label{eq:L12S} +\end{equation} +% +If the non-symmetric vegetation scale, $D_v$, is to be used then the +following formula is applied instead +% +\begin{equation} +L_{12}=(1-f)\frac{4v}{2^{1/2}D_v}.\label{eq:L12D} +\end{equation} +% +The factor of $2^{1/2}$ on the denominator was used by +\cite{Hogan+2018} and is consistent with a tree model depicted in +their Fig.\ 1 in which crowns are quasi-circular in horizontal +cross-section and the optically thicker of the two region lies within +a quasi-circular core surrounded by the optically thinner region. + +If you are trying to simulate a 3D forest scene for which you know the +exact location and sizes of the trees (e.g.\ from one of the RAMI +intercomparisons) then you should analyze the scene to compute the +vertical profile of $L_{av}$, then invert either (\ref{eq:S}) or +(\ref{eq:D}) to obtain the profile of vegetation scale to use as input +to the algorithm. The two formulas for $L_{12}$ above do not allow for +both $L_{av}$ and $L_{12}$ to be specified independently, even if you are +analysing a 3D scene for which information on $L_{12}$ might be known, +but it should be noted that $L_{av}$ has a much larger impact on radiative +fluxes in the canopy than $L_{12}$. + +\subsection{Urban areas} +The \code{building\_scale} input variable in Table \ref{tab:invar} is +always interpreted as an effective building diameter, i.e.\ the code +uses the equivalent of (\ref{eq:D}) to convert to the normalized +building perimeter length in each layer, $L_b$, given the building +fraction $b$: +% +\begin{equation} + L_b=\frac{4b}{D_b}. +\end{equation} +% +If there is no vegetation then all the building perimeter length is in +contact with clear air, so $L_{ab}=L_b$. If vegetation is present then +the building perimeter $L_b$ is divided between clear-air and +vegetation according to the \code{veg\_contact\_fraction} variable, +$c$: +% +\begin{align} + L_{ab}&=(1-c)L_b;\\ + L_{vb}&=cL_b. +\end{align} +% +In the offline version of \spsurf, if \code{veg\_contact\_fraction} is +not provided in the input file then it is assumed that trees are +randomly located in the space between buildings, and therefore that +the probability of a building wall being in contact with vegetation is +equal to the fraction of this space containing vegetation, i.e.: +% +\begin{equation} + c=v/(a+v).\label{eq:c} +\end{equation} +% +Note that the building, clear-air and vegetation fractions sum to one: +$b+a+v=1$. If \spsurf\ is embedded in a larger model then +\code{veg\_contact\_fraction} must be provided explicitly, in which +case it is recommended that (\ref{eq:c}) is used. Please note that in +\spsurf\ version 0.7.2 and earlier, \code{veg\_contact\_fraction} was +defined as the fraction of vegetation perimeter in contact with the +walls, rather than the current definition which is the fraction of +building perimeter in contact with vegetation. + +The length of the interface between vegetation and clear-air is +treated slightly differently for vegetated urban areas than forests, +due to the fact that the building fraction $b$ is removed from +consideration. If a symmetric vegetation scale is selected then we +apply (\ref{eq:S}) to the non-building part of the domain only (with +fraction $a+v$): +% +\begin{equation} + \frac{L_{av}}{a+v}=\frac{4}{S_v}\,\frac{a}{a+v}\,\frac{v}{a+v}, +\end{equation} +% +leading to +% +\begin{equation} + L_{av}=\frac{4}{S_v}\frac{av}{a+v}. +\end{equation} +% +If a non-symmetric vegetation scale is selected then (\ref{eq:D}) is +applied as before. +% +If there are two vegetation regions in an urban area then the +normalized perimeter length between clear-air and each of the two +vegetation regions uses (\ref{eq:La1}) and (\ref{eq:La2}), as +before. If the symmetric vegetation scale is selected then we take a +similar approach and (\ref{eq:L12S}) becomes +% +\begin{equation} + L_{12}=(1-f)\frac{4(v/2)(1-v/2-b)}{(a+b)S_v}, +\end{equation} +% +while for a non-symmetric vegetation scale, (\ref{eq:L12D}) is applied +as before. \section{Checking the configuration} \label{sec:checking} From d48be2beda63e489729a682efb33ba2d50af5d6c Mon Sep 17 00:00:00 2001 From: Robin Hogan Date: Thu, 7 Oct 2021 16:41:14 +0100 Subject: [PATCH 13/28] Updated rami5 scene input files to be consistent with new definition of veg_contact_fraction --- ChangeLog | 3 +++ .../scene_nc/rami5_HET07_JPS_SUM_scene.nc | Bin 16012 -> 16040 bytes .../scene_nc/rami5_HET08_OPS_WIN_scene.nc | Bin 21640 -> 21668 bytes .../scene_nc/rami5_HET09_JBS_SUM_scene.nc | Bin 21648 -> 21676 bytes .../scene_nc/rami5_HET14_WCO_UND_scene.nc | Bin 16260 -> 16288 bytes .../scene_nc/rami5_HET15_JBS_WIN_scene.nc | Bin 21648 -> 21676 bytes 6 files changed, 3 insertions(+) diff --git a/ChangeLog b/ChangeLog index 9090cf4..d3fbc74 100644 --- a/ChangeLog +++ b/ChangeLog @@ -13,6 +13,9 @@ version 0.7.3 of 1 now indicates that thick and thin vegetation regions equally likely to be in contact with the clear-air region, rather than that only the thick region is in contact with clear-air + - Modified the test/rami5/scene_nc files to use the new definition + of veg_contact_fraction and a consistent definition of veg_scale + to the code version 0.7.2 (4 October 2021) - Longwave urban modifications to give correct emission from diff --git a/test/rami5/scene_nc/rami5_HET07_JPS_SUM_scene.nc b/test/rami5/scene_nc/rami5_HET07_JPS_SUM_scene.nc index 7c379dac95ee0aae69f459894d8335a80b72c922..000dd22ee4fad654155be66d09b49151c6a37732 100644 GIT binary patch delta 442 zcmV;r0Y(0deW-nqV*v=UWYYp55OZ&4ba!ELWnXq>a&u{KZU6uP0ssI21u!l*E;9fC zlQRR{0l1S81g8P;leh$j0rZnV1&0CnlgI^^0Wgzb23G-Sleh+V0c?{n2l4_J5VIr* z9{~ZdvqT9`0Rd36lnNIC0r0b|3yT2(kdrtKivfI-#0@P5baHiWYjczP4JHc;c4cQ} zbYXO9Z*G$=4jTyt0001>000^=lT;3K0nn4k4srq;2(vs7*8u^@lN1rp0f@8Y5fcId zNVE78qX7Zvvz!%31AjiEmGnNMjtxIU{|Y~FWjQ~BvOPbBNN7KT*R(%{2&g}U3SU2a zgP1>MQM^B1TwOm`YwABuu?Rm1KWTr>KWTTBKWS+#li(FNv!oj6BQ@2Z761SM delta 473 zcmV;~0Ve*aeT;pOV*v-TWYYqZTLahuoRc&JrvcQH+ysXK*pp-hhXLG^>;;zr6qAGo zR{>0u+y-|6P?J;#@&Xq0vq%UZ0Rfb=XbDdN0W`C?3KszZ)U(hFiva<2lUxmp0fLk0 z4J`_GWoKn{VRUJ4Zj&1hCJi8A3UqR1Wgv8Nb#7~uOb#0h000F5005u>02&mNa1L_` zv;Y7A4tHT}Y?ELQBa;sgM*KO)8MKO%D@KQq1WKN_epKO{gNKPu`PKQB_7KPxH- zKP0CgKQZE6KU_GYKaY5GKgo+_Km_?iKoG6pKoCy#KoEDGKo6)fKoew4KoW)7Ko-Ef zKoiA_Kp)tUKo@r1KsLK>KsWHmKw$U*P?LZeypymO1b;s@>#;usVa7h+7KA>z!SFt} z$2~r^$mu?)*U~oR33WS32O>K-83Q_Y PicUGDJptykz#8Zy3I4AA diff --git a/test/rami5/scene_nc/rami5_HET08_OPS_WIN_scene.nc b/test/rami5/scene_nc/rami5_HET08_OPS_WIN_scene.nc index 9157e20d33b8f3d0f292fe68640954c93b6fd50e..10e0c7fd8c85a2d4f75399237b024f1c4e51c743 100644 GIT binary patch delta 459 zcmV;+0W|)IsR5*^0gz(>2(e_(0w54`Z)S9NVRB_(c4cyNX>V=-00062000FrE;lYS z005IO1Ka_$lMDo>0qm2s1cw3elRO270rZo^1(yLVlUxQ@0c4Z326q8ylPm}G0c5iv z2p<6fT(dw4PXPf`vyciG0Rc?2s0)h$0YsBD4T}MMlfVrv26S?DZfkRs_YEcs3U*~@ zWprV5X>V?mDh?Y71poj5_y7PLJd;oka|tv6000hmVQg%ZKo296?+!=-Y_m8I*8u_i zlMoTl0gSWY5fcId9JBNjq5%R&6tkEWnFN1ySJFRr!PY;S45L4i*E&DCOITC=fse8|**= zB>X@DGAcj=+9*H_@v%SwB!)lcPvJk)eJ4NULdHM1g-Jh^D1<*uj2{3100000005J@ zBY2WV1(Pis^iL0KKs^9Hrao6ejy|^F1wOZ%BtF%8-agu#cs}i(y*~trXg>-B3O@_4 z>_0?fmOoy-q(5TNI6r5h(m!VbWItv*3qNPg6+dij7(aB<(Uag6B$KlvgtHhOa5sl| Brj-By delta 482 zcmZ3olCfhYQE6VbjzUplNk(dsLP zVrG#Z0|>AJ@ec+D8HLF?e8r3slOF)dfXyNN*BKcfOx6)R&sebekDxFUBg19^kwuJ5 zZa+3}5uM3WA0kp|Ul1_SKKJ`#`!v_9_6r0&?H6Q<+i%PLZol{AA^SbQ#O%+kF}J^w z?Pz~;>P7pb?@!pDj1IQH=ow&t_qMG4gZ2FOF9ZMEf9>tF|G53V{inV1_CHN7I(Q{qAO+Fsk7HMBQn=EXwe>9hf5o51wOOeJks*E+5cPC=Kc+ToAbQW WZ0sF4U=9G$lg}zwY&MZCFb4oL0=lLE diff --git a/test/rami5/scene_nc/rami5_HET09_JBS_SUM_scene.nc b/test/rami5/scene_nc/rami5_HET09_JBS_SUM_scene.nc index 1b1b12332934340fb43e89e1e1893fcfdc449955..e81a6656505810a1a0d5802c102365ede3fde099 100644 GIT binary patch delta 652 zcmW-dT}V@59LCQ(H`9fhm?*h)7cmRnEET4B_U^B4YtmwsTBf4SZK*Y9Y-gL5qLC#w zjM1BES|mo8V5A*T!etmEEj3ve6(%Iq@&f`(Lldo55B#3n=fl;D`g)N|kAema?>WL9 z*6P!YLuWCT+Km=#Wwn{2D2^ZAeu-3)LQzB-FpJz|C$|T!5;wOAtrG>W32l-|UK>g! zhQJfZMBIT6bdIEMTR|pvZ%`aU238%cMW~o<=SLxw$M$b`BBUX7h!fS4@epw!W3idf zTFIXfQ4-&7EH^Sb#-E)iwCI=$qeaM6=*&XB$*8jkb(I#$zdnA}DN3Lq1))|%lS#ib zEQGy7oCGe34xdIh*@f^34%)+RM%+h8z;;D;aqDq+>kuR~@IW$tMC{&+8UH1}>x=P`Q$OoFYE1=$5hOChuFy*=7f>#U< z*&tNy62h6}4RG47LBsQ4Fo`^nzc2;jCx!m8EB>4Q3%6ag(^CY;EY;KP!y5Xo)LWX*%pH$rAu zHA-5UMs%BuGMA`pYh1mDQiFw)J2T@pu&`R1M1edW4`hwCVsGC zwdp?AmD;iHMiZLb7qHA8f+j~InynRR*eS+>03&L{05hMdFstD`?(({dJI~oM>u?7q zpO<51_83MUXu;@NYYfK4_F8X#Js1OJ#Y5Uxw7Uw#~-BP%-E7B~p%co{_1 zhtbK&1F#u;Avoa|3^t`eh|&gr#yXIgy&+iJ0umo9om)`SkC$yw^D`BW7Cr^=m4f(4 zJY5_bq;H*R^y_pagfI8N`U_7$vSR%WuvG<$h$@iHcmUa~px?dM(W#(D>f91e`@6r< zC$$cGulo$O=PuAwbDOBXzmlp!M`ax$oa6NpcX60;**6!tsKu>Zr=*s<9C?o`^cmt5 qZSw6ajXfMo>*5p>t=rF%yW3QivGLqM*Wb~!I(nSi`5hZ7lKudkt_Y_9 diff --git a/test/rami5/scene_nc/rami5_HET14_WCO_UND_scene.nc b/test/rami5/scene_nc/rami5_HET14_WCO_UND_scene.nc index 5422a55f8f70ed07a1378009a5ae67f7a7758a83..58b52497aa19cb59ef033fc5409bb62b97772582 100644 GIT binary patch delta 429 zcmV;e0aE^if1rPmV*v=UWXl2|5OZ&4ba!ELWnXq>a&u{KZU6uP0ssI21u!l*E;9fC zlPd$<0kD$@1g8P$lduGb0qm1F1&0CflfVU+0VtDL23G-KlduMN0c4XX2l4_J46_^v z9{~Zdvpfk;0RdFAj0zV40r<0|3yT2(oRcsOivfI-ybUb|baHiWYjczH4JI!Nc4cQ} zbYXO9Z*D9ga$$66WpW^NXkl(3V{Bz%av))8axMS>00jU50Hgo_8bFgw4s!wIlfVvh z0UWb557q$!Bovbj5zYcF471!35&{A?1heoHqX7Y^vy>H01Anl7`9F*DPd~Nqs6XI( zD?jtAz(4*J(Lex}Vn726>p%n8dq4y{azF#{>p%nAz(52n2|xpvkU#>{3qS*-=s*LY z)IbCHu|Nd+V?YIa=RgF2;6Mck-#`L&vOoY$nm_wV6F>9jr9bJeG(Y7Qra$X-)j!ul z>p#wYnLor{OB_H5IMF~I?pi<>urojp_0~W6RhmDu8(cqY7aEg%8K@9Fu+A000001poj5qyPXKB$H?ka{(9R&H^m(v-lAb0s=MY zvkVlY0RfD&uoX=Me{d_rKW9N>Kc$R9KhF8fKjL%(KkU9@KkzjuKlMHTKlfnQKlsYY zKluP7Klz`aKl=EDKl-vwKl&HMKm2Z}KmAH4KmOp6Kmg$SKmpr+KmlnsDA(e002Idu%tdK%ym7pK|?&5QW`vpPy;-5s5U%T zP^CONxMn;b%LzOJD=Rz8P8&O%$G1Ci5f3{%B@a6gcl;wfD@s6|FO2rHkn;2OXrcZ4e8%= zgu5)YXBfNIY$&%G%$Dj}6Gc%RKfHqysU(G>h%{ghxyf#BA6g@BZVTEV3SJA^BGbHf zluGo0Cy|l31MTQMN!_uEjO_lPIE3_UPOt`{QnrI1g-`)IxYLP{n$RImR8J;D#DR?2 zYC2~je?mk_e4C-tz-Sr2J5gxXGF1k%kg3v|ggT=^YZhv&&60n6{A^H^KtYN^Er=%5 z{$^MRdxtm)ToN5VgKn{l;Sn6PkKKy6kC1@viR|Gv;@-9qNND1LYWgso;@knPNCn!3 z0Wby@K?z?9>GlZ7?WG`h!v@74mf)!1C0rgIhHJDJuFg+EJ@o~w-v+?$hzEO#2doWp zsO(;WBeM^n@Mi&>D7^sr%|AdB(+Netm*L3zI21mLhBRdcWNbHP1KbD$9#lvE( zY4u?f6M#>DpTl|U2XI!K1J8VF#jmPIu;<=W{OrvYJeXOAdpncx<3rZ@5V z(`?Gn)X&(=KWIZ~JvK6Hxyd4_nHbTk+aGmycK$eLJKH&ZJ*3sZ)5P>~(OV;ycVM1$ zvS{N6WS;4b8^}9WDr_KnwjpdMPOQ-+o1`QKKzpX5oVkmAEjff!XfgHd&}7&-YFIeiL3KOk&dqwM(@%C!$MRalFu zaW^q#&H|HC=P`cE6BRpmu6xM`E4E7u9Qtn6)^B(kD5F zi~d8_ezBU~WhY(MbpJdU8_t73i303{7Qo0Mo_^Ucrn7qr+T}C_kzry8sQ02vONHQ% z!{8eJ3#M9+ftybg*r{qkq_GB9SqF%0baZpehkm-z1l2!}Lq*n809#A2I2%T{r>E%q zxj4GM>IdGtL*U#z0ir$KZ-7uKNPH_n{8b3VUqXLaJJ1!EMml%cn~o2DqZ2hVw0H0_ zZA;stmo`1Aa=e^If`W?s+_;%HJ6y{P#--ff<^r}uxqeX%cf+rj%d(l~Bwbc9dyPXJ jiyPo1i=8o7NY4>zd2kpvIq-M1ykNgTuHug#DvSC9%)$k3 From 3ebbd4ab7f7d974e86e3bf4ecfbeec0984bef04c Mon Sep 17 00:00:00 2001 From: Robin Hogan Date: Tue, 26 Oct 2021 08:10:44 +0100 Subject: [PATCH 14/28] Added shortwave SimpleUrban and InfiniteStreet tile types --- radsurf/Makefile | 13 +- radsurf/radsurf_canopy_flux.F90 | 5 +- radsurf/radsurf_canopy_properties.F90 | 20 +- radsurf/radsurf_interface.F90 | 36 ++- radsurf/radsurf_simple_urban_sw.F90 | 285 +++++++++++++++++++++ radsurf/radsurf_sw_spectral_properties.F90 | 7 +- radsurf/radsurf_view_factor.F90 | 140 ++++++++++ 7 files changed, 490 insertions(+), 16 deletions(-) create mode 100644 radsurf/radsurf_simple_urban_sw.F90 create mode 100644 radsurf/radsurf_view_factor.F90 diff --git a/radsurf/Makefile b/radsurf/Makefile index 2f6cae3..0498792 100644 --- a/radsurf/Makefile +++ b/radsurf/Makefile @@ -13,7 +13,9 @@ SOURCES = \ radsurf_simple_spectrum.F90 \ radsurf_sw_spectral_properties.F90 \ radsurf_lw_spectral_properties.F90 \ - radsurf_norm_perim.F90 + radsurf_norm_perim.F90 \ + radsurf_view_factor.F90 \ + radsurf_simple_urban_sw.F90 OBJECTS := $(SOURCES:.F90=.o) LIBSURF = ../lib/libradsurf.a @@ -29,14 +31,14 @@ $(LIBSURF): $(OBJECTS) clean: rm -f *.o $(LIBSURF) -radsurf_canopy_properties.o, radsurf_norm_perim.o: radsurf_config.o +radsurf_canopy_properties.o radsurf_norm_perim.o: radsurf_config.o radsurf_lw_spectral_properties.o: radsurf_canopy_properties.o radsurf_config.o radsurf_sw_spectral_properties.o: radsurf_canopy_properties.o radsurf_config.o radsurf_interface.o: radsurf_canopy_properties.o \ radsurf_sw_spectral_properties.o radsurf_lw_spectral_properties.o \ - radsurf_boundary_conds_out.o \ + radsurf_boundary_conds_out.o radsurf_simple_urban_sw.o \ radsurf_canopy_flux.o radsurf_config.o radsurf_forest_sw.o \ - radsurf_forest_lw.o radsurf_urban_sw.o radsurf_urban_lw.o + radsurf_forest_lw.o radsurf_urban_sw.o radsurf_urban_lw.o radsurf_forest_sw.o: radsurf_config.o radsurf_canopy_properties.o \ radsurf_sw_spectral_properties.o radsurf_boundary_conds_out.o \ radsurf_canopy_flux.o radsurf_overlap.o radsurf_norm_perim.o @@ -54,3 +56,6 @@ radsurf_save.o: radsurf_config.o radsurf_canopy_properties.o \ radsurf_simple_spectrum.o: radsurf_config.o radsurf_canopy_properties.o \ radsurf_lw_spectral_properties.o radsurf_canopy_flux.o: radsurf_canopy_properties.o +radsurf_simple_urban_sw.o: radsurf_config.o radsurf_canopy_properties.o \ + radsurf_sw_spectral_properties.o radsurf_canopy_flux.o \ + radsurf_norm_perim.o radsurf_view_factor.o diff --git a/radsurf/radsurf_canopy_flux.F90 b/radsurf/radsurf_canopy_flux.F90 index 9bc8fd2..c9732f7 100644 --- a/radsurf/radsurf_canopy_flux.F90 +++ b/radsurf/radsurf_canopy_flux.F90 @@ -467,6 +467,7 @@ subroutine check_canopy_flux(this, canopy_props, istartcol, iendcol, iverbose) use radiation_io, only : nulout use radsurf_canopy_properties, only : ITileFlat, ITileForest, & & ITileUrban, ITileVegetatedUrban, & + & ITileSimpleUrban, ITileInfiniteStreet, & & canopy_properties_type class(canopy_flux_type), intent(inout) :: this @@ -513,7 +514,9 @@ subroutine check_canopy_flux(this, canopy_props, istartcol, iendcol, iverbose) clear_air_net = 0.0_jprb end if if (canopy_props%i_representation(jcol) == ITileUrban & - & .or. canopy_props%i_representation(jcol) == ITileVegetatedUrban) then + & .or. canopy_props%i_representation(jcol) == ITileVegetatedUrban & + & .or. canopy_props%i_representation(jcol) == ITileSimpleUrban & + & .or. canopy_props%i_representation(jcol) == ITileInfiniteStreet ) then roof_net = sum(this%roof_net(:,ilay1:ilay2)) wall_net = sum(this%wall_net(:,ilay1:ilay2)) else diff --git a/radsurf/radsurf_canopy_properties.F90 b/radsurf/radsurf_canopy_properties.F90 index 898204d..2da8358 100644 --- a/radsurf/radsurf_canopy_properties.F90 +++ b/radsurf/radsurf_canopy_properties.F90 @@ -20,22 +20,25 @@ module radsurf_canopy_properties implicit none ! Number of tile types - integer(kind=jpim), parameter :: NTileTypes = 4 + integer(kind=jpim), parameter :: NTileTypes = 6 ! Codes for the different type of tile enum, bind(c) enumerator :: ITileFlat = 0, & & ITileForest, & & ITileUrban, & - & ITileVegetatedUrban + & ITileVegetatedUrban, & + & ITileSimpleUrban, & + & ITileInfiniteStreet end enum character(len=*), parameter :: TileRepresentationName(NTileTypes) & - & = (/ 'Flat ', & - & 'Forest ', & - & 'Urban ', & - & 'VegetatedUrban' /) - + & = [ 'Flat ', & + & 'Forest ', & + & 'Urban ', & + & 'VegetatedUrban', & + & 'SimpleUrban ', & + & 'InfiniteStreet' ] !--------------------------------------------------------------------- ! Derived type storing a physical, non spectral, description of the @@ -142,7 +145,8 @@ subroutine allocate_canopy(this, config, ncol, ntotlay, & do_vegetation = .false. end if if (.not. any(i_representation == ITileUrban & - & .or. i_representation == ITileVegetatedUrban)) then + & .or. i_representation == ITileVegetatedUrban & + & .or. i_representation == ITileSimpleUrban)) then do_urban = .false. end if end if diff --git a/radsurf/radsurf_interface.F90 b/radsurf/radsurf_interface.F90 index 80df8b5..924749c 100644 --- a/radsurf/radsurf_interface.F90 +++ b/radsurf/radsurf_interface.F90 @@ -26,10 +26,11 @@ subroutine radsurf(config, canopy_props, & use parkind1, only : jpim, jprb use yomhook, only : lhook, dr_hook - use radiation_io, only : nulout + use radiation_io, only : nulout, nulerr, radiation_abort use radsurf_config, only : config_type use radsurf_canopy_properties, only : ITileFlat, ITileForest, & & ITileUrban, ITileVegetatedUrban, & + & ITileSimpleUrban, ITileInfiniteStreet, & & canopy_properties_type use radsurf_sw_spectral_properties, only : sw_spectral_properties_type use radsurf_lw_spectral_properties, only : lw_spectral_properties_type @@ -39,6 +40,7 @@ subroutine radsurf(config, canopy_props, & use radsurf_forest_lw, only : spartacus_forest_lw use radsurf_urban_sw, only : spartacus_urban_sw use radsurf_urban_lw, only : spartacus_urban_lw + use radsurf_simple_urban_sw, only : simple_urban_sw implicit none @@ -73,6 +75,8 @@ subroutine radsurf(config, canopy_props, & ! Direct ground shortwave albedo, in case not provided by user real(kind=jprb), pointer :: ground_sw_albedo_dir(:,:) ! (nswinterval,ncol) + logical :: is_infinite_street + real(jprb) :: hook_handle if (lhook) call dr_hook('radiation_interface:radsurf',0,hook_handle) @@ -264,6 +268,36 @@ subroutine radsurf(config, canopy_props, & & lw_internal, lw_norm) end if + case (ITileSimpleUrban : ITileInfiniteStreet) + is_infinite_street = (irep == ITileInfiniteStreet) + if (config%iverbose >= 4) then + if (is_infinite_street) then + write(nulout,'(i5,a)') jcol, ': Simple urban - infinite street model' + else + write(nulout,'(i5,a)') jcol, ': Simple urban - exponential street model' + end if + end if + if (canopy_props%nlay(jcol) > 1) then + write(nulerr, '(a)') '*** Error: simple urban representations must have only one layer' + call radiation_abort('Attempt to use simple urban representation with more than one layer') + end if + + if (config%do_sw) then + if (canopy_props%cos_sza(jcol) > 0.0_jprb) then + call simple_urban_sw(config, is_infinite_street, & + & config%nswinternal, & + & jcol, ilay1, canopy_props%cos_sza(jcol), & + & canopy_props, sw_spectral_props, & + & sw_spectral_props%ground_albedo(:,jcol), & + & ground_sw_albedo_dir(:,jcol), & + & bc_out%sw_albedo(:,jcol), bc_out%sw_albedo_dir(:,jcol), & + & sw_norm_dir, sw_norm_diff) + else + call sw_norm_dir%zero(jcol,ilay1,ilay2) + call sw_norm_diff%zero(jcol,ilay1,ilay2) + end if + end if + end select end do diff --git a/radsurf/radsurf_simple_urban_sw.F90 b/radsurf/radsurf_simple_urban_sw.F90 new file mode 100644 index 0000000..5efd3ea --- /dev/null +++ b/radsurf/radsurf_simple_urban_sw.F90 @@ -0,0 +1,285 @@ +! radsurf_simple_urban_sw.F90 - Urban solver assuming single-layer infinite street canyon +! +! (C) Copyright 2021- ECMWF. +! +! This software is licensed under the terms of the Apache Licence Version 2.0 +! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +! +! In applying this licence, ECMWF does not waive the privileges and immunities +! granted to it by virtue of its status as an intergovernmental organisation +! nor does it submit to any jurisdiction. +! +! Author: Robin Hogan +! Email: r.j.hogan@ecmwf.int +! + +module radsurf_simple_urban_sw + +contains + + ! -------------------------------------------------------- + ! Single-layer solar urban radiative transfer (i.e. the assumption + ! that all buildings are the same height) using the Harman et + ! al. (BLM 2004) method of solving a 2x2 matrix problem, but with + ! the option of two different models for urban geometry: the + ! original "infinite street" of constant width, and the more recent + ! "exponential model" for the distribution of wall-to-wall + ! separation distances + subroutine simple_urban_sw(config, is_infinite_street, & + & nsw, icol, ilay, cos_sza, & + & canopy_props, sw_spectral_props, & + & ground_albedo_diff, ground_albedo_dir, & + & top_albedo_diff, top_albedo_dir, & + & sw_norm_dir, sw_norm_diff) + + use parkind1, only : jpim, jprb + use yomhook, only : lhook, dr_hook + use radiation_io, only : radiation_abort + use radsurf_config, only : config_type + use radsurf_canopy_properties, only : canopy_properties_type + use radsurf_sw_spectral_properties, only : sw_spectral_properties_type + use radsurf_canopy_flux, only : canopy_flux_type + use radiation_constants, only : Pi + use radsurf_norm_perim, only : calc_norm_perim_urban + use radsurf_view_factor, only : calc_view_factors_inf, & + & calc_view_factors_exp + use radtool_matrix, only : solve_vec + + implicit none + + ! Inputs + + ! Algorithm configuration + type(config_type), intent(in) :: config + ! Do we use the infinite-street or exponential model? + logical, intent(in) :: is_infinite_street + ! Number of spectral intervals + integer(kind=jpim), intent(in) :: nsw + ! Index of current column and layer + integer(kind=jpim), intent(in) :: icol, ilay + ! Cosine of the solar zenith angle + real(kind=jprb), intent(in) :: cos_sza + ! Geometric and other spectrally independent properties of the canopy + type(canopy_properties_type), intent(in) :: canopy_props + ! Spectral properties of the air, vegetation and urban facets + type(sw_spectral_properties_type), intent(in) :: sw_spectral_props + ! Spectral albedo of the ground to diffuse and direct radiation + real(kind=jprb), dimension(nsw),intent(in) :: ground_albedo_diff, & + & ground_albedo_dir + + ! Outputs + + ! Top-of-canopy spectral albedo to diffuse and direct radiation + real(kind=jprb), dimension(nsw),intent(out):: top_albedo_diff, & + & top_albedo_dir + ! Flux outputs + type(canopy_flux_type), intent(inout), optional & + & :: sw_norm_dir, & ! SW fluxes normalized by top-of-canopy direct + & sw_norm_diff ! SW fluxes normalized by top-of-canopy diffuse + + ! Local variables + + ! view_A_B is the fraction of radiaion emanating from facet A that + ! intercepts facet B, where "dir" is direct radiation emanating + ! from the sky and all other "A" facets refer to diffuse radiation + real(kind=jprb) :: view_dir_ground, view_dir_wall + real(kind=jprb) :: view_ground_sky, view_wall_wall + real(kind=jprb) :: view_wall_ground, view_ground_wall + + ! Normalized perimeter length between regions (unused), and + ! between air and walls (m-1) + real(jprb) :: norm_perim(1), norm_perim_wall(1) + + ! Dummy variables for calc_norm_perim_urban + real(kind=jprb) :: veg_fraction(1), veg_scale(1), veg_contact_fraction(1) + + ! The "X" in Hogan (BLM 2019a, exponential), metres + real(kind=jprb) :: building_separation_scale + + ! The street width in the infinite-street assumption, metres + real(kind=jprb) :: street_width + + ! Fundamentally the Harman et al. (BLM 2004) method solves a 2x2 + ! matrix problem of the form + ! interaction_matrix*solution_vector=source_vector, which here + ! includes an additional dimension for the number of spectral + ! intervals + real(kind=jprb) :: interaction_matrix(nsw,2,2) + real(kind=jprb) :: solution_vector(nsw,2), source_vector(nsw,2) + + real(jprb) :: hook_handle + + if (lhook) call dr_hook('radsurf_simple_urban_sw:simple_urban_sw',0,hook_handle) + + associate( & + & dz => canopy_props%dz(ilay), & + & building_fraction => canopy_props%building_fraction(ilay), & + & building_scale => canopy_props%building_scale(ilay), & + & roof_albedo => sw_spectral_props%roof_albedo(:,ilay), & + & wall_albedo => sw_spectral_props%wall_albedo(:,ilay), & + & wall_specular_frac => sw_spectral_props%wall_specular_frac(:,ilay)) + + ! Compute normalized perimeter length of walls, noting that + ! calc_norm_perim_urban accepts vectors of inputs but we only + ! want to compute a single value, and dummy values are entered + ! for the unused vegetation variables + veg_fraction = 0.0_jprb + veg_scale = 1.0_jprb + veg_contact_fraction = 0.0_jprb + call calc_norm_perim_urban(config, 1, 1, spread(building_fraction,1,1), & + & spread(building_scale,1,1), veg_fraction, veg_scale, & + & veg_contact_fraction, norm_perim, norm_perim_wall) + + ! Compute length scales and view factors + if (is_infinite_street) then + ! Hogan (BLM 2019b, radiative transfer), Eq. 7 + street_width = 2.0_jprb * (1.0_jprb - building_fraction) / norm_perim_wall(1) + call calc_view_factors_inf(dz / street_width, & + & view_ground_sky, view_wall_wall, & + & cos_sza=cos_sza, view_dir_ground=view_dir_ground); + else + ! Hogan (BLM 2019b, radiative transfer), Eq. 8 + building_separation_scale = Pi * (1.0_jprb - building_fraction) & + & / norm_perim_wall(1) + call calc_view_factors_exp(dz / building_separation_scale, & + & view_ground_sky, view_wall_wall, & + & cos_sza=cos_sza, view_dir_ground=view_dir_ground); + end if + + ! Compute extra view factors + view_dir_wall = 1.0_jprb - view_dir_ground + view_wall_ground = 0.5_jprb * (1.0_jprb - view_wall_wall) + view_ground_wall = 1.0_jprb - view_ground_sky + + ! Set to the flux components to zero initially + call sw_norm_diff%zero(icol, ilay, ilay) + call sw_norm_dir%zero( icol, ilay, ilay) + + ! First the fluxes normalized by the direct downwelling flux at + ! canopy top. + + ! The elements of the interaction matrix are common for direct + ! and diffuse input fluxes + interaction_matrix(:,1,1) = 1.0_jprb + interaction_matrix(:,1,2) = -view_wall_ground*wall_albedo + interaction_matrix(:,2,1) = -view_ground_wall*ground_albedo_diff + interaction_matrix(:,2,2) = 1.0_jprb - view_wall_wall*wall_albedo + + ! Incoming radiation at ground and walls due to incoming direct + ! radiation at top-of-canopy. Note that because the ground + ! albedo is separated into diffuse and direct parts, but the + ! wall albedo is not, we cannot solve for the sum of these terms + ! at the ground. Rather, solution_vector(:,1) is the diffuse + ! downwelling flux at the ground, while solution_vector(:,2) is + ! the total flux (direct plus diffuse) into the walls. Thus, the + ! source into the walls (source_vector(:,2)) contains the direct + ! flux into the walls plus the direct flux incident on the + ! ground and scattered once into the walls. + source_vector(:,1) = 0.0_jprb + source_vector(:,2) = (view_dir_wall + ground_albedo_dir*view_dir_ground*view_ground_wall) & + * (1.0_jprb-building_fraction) + + ! Solve 2x2 matrix problem + solution_vector = solve_vec(nsw,nsw,2,interaction_matrix,source_vector) + + ! Ground fluxes + sw_norm_dir%ground_dn_dir(:,icol) = view_dir_ground & + * (1.0_jprb-building_fraction) + sw_norm_dir%ground_dn(:,icol) = sw_norm_dir%ground_dn_dir(:,icol) + solution_vector(:,1) + sw_norm_dir%ground_net(:,icol) & + & = sw_norm_dir%ground_dn_dir(:,ilay) * (1.0_jprb-ground_albedo_dir) & + & + solution_vector(:,1) * (1.0_jprb-ground_albedo_diff) + sw_norm_dir%ground_sunlit_frac(icol) = view_dir_ground + ! vertical flux??? + + ! Roof fluxes + sw_norm_dir%roof_in_dir(:,ilay) = building_fraction + sw_norm_dir%roof_in(:,ilay) = building_fraction + sw_norm_dir%roof_net(:,ilay) = building_fraction * (1.0_jprb-roof_albedo) + sw_norm_dir%roof_sunlit_frac(ilay) = 1.0_jprb + + ! Wall fluxes + sw_norm_dir%wall_in_dir(:,ilay) = view_dir_wall & + * (1.0_jprb-building_fraction) + !source_vector(:,2) + sw_norm_dir%wall_in(:,ilay) = solution_vector(:,2) + sw_norm_dir%wall_net(:,ilay) & + & = sw_norm_dir%wall_in(:,ilay) * (1.0_jprb-wall_albedo) + + ! Top-of-canopy fluxes + sw_norm_dir%top_dn_dir(:,icol) = 1.0_jprb + sw_norm_dir%top_dn(:,icol) = 1.0_jprb + sw_norm_dir%top_net(:,icol) = 1.0_jprb - building_fraction*roof_albedo & + & - (sw_norm_dir%ground_dn(:,ilay) - sw_norm_dir%ground_net(:,ilay)) & + & * view_ground_sky & + & - (sw_norm_dir%wall_in(:,ilay) - sw_norm_dir%wall_net(:,ilay)) & + & * view_wall_ground + + ! Flux "profiles" + if (allocated(sw_norm_dir%flux_dn_layer_top)) then + sw_norm_dir%flux_dn_dir_layer_top(:,ilay) = 1.0_jprb + sw_norm_dir%flux_dn_layer_top(:,ilay) = 1.0_jprb + sw_norm_dir%flux_up_layer_top(:,ilay) & + & = sw_norm_dir%top_net(:,icol) - sw_norm_dir%top_dn(:,icol) + sw_norm_dir%flux_dn_dir_layer_base(:,ilay) = sw_norm_dir%ground_dn_dir(:,ilay) + sw_norm_dir%flux_dn_layer_base(:,ilay) = sw_norm_dir%ground_dn(:,ilay) + sw_norm_dir%flux_up_layer_base(:,ilay) & + & = sw_norm_dir%ground_net(:,ilay) - sw_norm_dir%ground_dn(:,ilay) + end if + + ! Second the fluxes normalized by the diffuse downwelling flux + ! at canopy top. + + ! Incoming radiation at ground and walls due to incoming diffuse + ! radiation at top-of-canopy. This time we do not need to + ! separate the incoming and scattered radiation at the surface, + ! so solution_vector(:,1) is the total flux into the ground. + source_vector(:,1) = view_ground_sky * (1.0_jprb-building_fraction) + source_vector(:,2) = view_ground_wall* (1.0_jprb-building_fraction) + + ! Solve 2x2 matrix problem + solution_vector = solve_vec(nsw,nsw,2,interaction_matrix,source_vector) + + ! Ground fluxes + sw_norm_diff%ground_dn_dir(:,ilay) = 0.0_jprb + sw_norm_diff%ground_dn(:,ilay) = solution_vector(:,1) + sw_norm_diff%ground_net(:,ilay) & + & = sw_norm_diff%ground_dn(:,ilay) * (1.0_jprb-ground_albedo_dir) + ! vertical flux??? + + ! Roof fluxes + sw_norm_diff%roof_in(:,ilay) = building_fraction + sw_norm_diff%roof_net(:,ilay) = building_fraction * (1.0_jprb-roof_albedo) + + ! Wall fluxes + sw_norm_diff%wall_in(:,ilay) = solution_vector(:,2) + sw_norm_diff%wall_net(:,ilay) & + & = sw_norm_diff%wall_in(:,ilay) * (1.0_jprb-wall_albedo) + + ! Top-of-canopy fluxes + sw_norm_diff%top_dn_dir(:,icol) = 0.0_jprb + sw_norm_diff%top_dn(:,icol) = 1.0_jprb + sw_norm_diff%top_net(:,icol) = 1.0_jprb - building_fraction*roof_albedo & + & - (sw_norm_diff%ground_dn(:,ilay) - sw_norm_diff%ground_net(:,ilay)) & + & * view_ground_sky & + & - (sw_norm_diff%wall_in(:,ilay) - sw_norm_diff%wall_net(:,ilay)) & + & * view_wall_ground + + ! Flux "profiles" + if (allocated(sw_norm_diff%flux_dn_layer_top)) then + sw_norm_diff%flux_dn_layer_top(:,ilay) = 1.0_jprb + sw_norm_diff%flux_up_layer_top(:,ilay) & + & = sw_norm_diff%top_net(:,icol) - sw_norm_diff%top_dn(:,icol) + sw_norm_diff%flux_dn_layer_base(:,ilay) = sw_norm_diff%ground_dn(:,ilay) + sw_norm_diff%flux_up_layer_base(:,ilay) & + & = sw_norm_diff%ground_net(:,ilay) - sw_norm_diff%ground_dn(:,ilay) + end if + + end associate + + if (lhook) call dr_hook('radsurf_simple_urban_sw:simple_urban_sw',1,hook_handle) + + end subroutine simple_urban_sw + + +end module radsurf_simple_urban_sw diff --git a/radsurf/radsurf_sw_spectral_properties.F90 b/radsurf/radsurf_sw_spectral_properties.F90 index 3d0d7ba..28b8d49 100644 --- a/radsurf/radsurf_sw_spectral_properties.F90 +++ b/radsurf/radsurf_sw_spectral_properties.F90 @@ -59,7 +59,8 @@ subroutine allocate_spectral(this, config, ncol, ntotlay, nspec, & use radsurf_config, only : config_type use radsurf_canopy_properties, only : ITileFlat, ITileForest, & - & ITileUrban, ITileVegetatedUrban + & ITileUrban, ITileVegetatedUrban, & + & ITileSimpleUrban, ITileInfiniteStreet class(sw_spectral_properties_type), intent(inout) :: this type(config_type), intent(in) :: config @@ -86,7 +87,9 @@ subroutine allocate_spectral(this, config, ncol, ntotlay, nspec, & do_vegetation = .false. end if if (.not. any(i_representation == ITileUrban & - & .or. i_representation == ITileVegetatedUrban)) then + & .or. i_representation == ITileVegetatedUrban & + & .or. i_representation == ITileSimpleUrban & + & .or. i_representation == ITileInfiniteStreet)) then do_urban = .false. end if end if diff --git a/radsurf/radsurf_view_factor.F90 b/radsurf/radsurf_view_factor.F90 new file mode 100644 index 0000000..6ccf3a5 --- /dev/null +++ b/radsurf/radsurf_view_factor.F90 @@ -0,0 +1,140 @@ +! radsurf_view_factor.F90 - Compute view factors for single-layer urban canopy +! +! (C) Copyright 2021- ECMWF. +! +! This software is licensed under the terms of the Apache Licence Version 2.0 +! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +! +! In applying this licence, ECMWF does not waive the privileges and immunities +! granted to it by virtue of its status as an intergovernmental organisation +! nor does it submit to any jurisdiction. +! +! Author: Robin Hogan +! Email: r.j.hogan@ecmwf.int +! + +! Equation numbers in this file refer to Hogan (BLM 2019) "An +! exponential model of urban geometry for use in radiative transfer +! applications" + +module radsurf_view_factor + +contains + + !--------------------------------------------------------------------- + ! Calculate view factors making the single-layer infinite street + ! assumption + ! elemental + subroutine calc_view_factors_inf(height_width_ratio, & + & view_ground_sky, view_wall_wall, cos_sza, view_dir_ground) + + use parkind1, only : jpim, jprb + use radiation_constants, only : Pi + + implicit none + + ! Ratio of building height to street width in the single-layer + ! infinite street canyon assumption (H/W) + real(kind=jprb), intent(in) :: height_width_ratio + ! Fraction of diffuse radiation emanating from the ground that + ! reaches the sky and fraction emanating from a wall that reaches + ! another wall + real(kind=jprb), intent(out) :: view_ground_sky, view_wall_wall + ! Cosine of solar zenith angle + real(kind=jprb), intent(in), optional :: cos_sza + ! Fraction of direct radiation at the top-of-canopy that + ! penetrates to the ground unscattered + real(kind=jprb), intent(out), optional :: view_dir_ground + + ! Direct penetration factor, defined as (H/W)*tan(sza) - see Eq. 2 + real(kind=jprb) :: norm_x0 + ! Ratio of two variables in Eq. 16 + real(kind=jprb) :: y_over_w + + view_ground_sky = sqrt(height_width_ratio * height_width_ratio + 1.0_jprb) & + & - height_width_ratio + view_wall_wall = sqrt(1.0_jprb / (height_width_ratio * height_width_ratio) + 1.0_jprb) & + & - 1.0_jprb / height_width_ratio + + if (present(cos_sza) .and. present(view_dir_ground)) then + ! The sqrt term is tan(sza) + norm_x0 = (Pi*0.5_jprb) * height_width_ratio * sqrt(1.0_jprb / (cos_sza*cos_sza) - 1.0_jprb) + y_over_w = sqrt(max(norm_x0*norm_x0 - 1.0_jprb, 0.0_jprb)) + if (y_over_w > 0.0_jprb) then + view_dir_ground = (2.0_jprb/Pi) * (y_over_w - norm_x0 + atan(1.0_jprb / y_over_w)) + else + view_dir_ground = 1.0_jprb - 2.0_jprb*norm_x0/Pi + end if + end if + + end subroutine calc_view_factors_inf + + + !--------------------------------------------------------------------- + ! Calculate view factors assuming the exponential model of urban + ! geometry + elemental subroutine calc_view_factors_exp(height_separation_ratio, & + & view_ground_sky, view_wall_wall, cos_sza, view_dir_ground) + + use parkind1, only : jpim, jprb + use radiation_constants, only : Pi + + implicit none + + ! Parameters + integer, parameter :: nw = 8 ! Number of weights + real(kind=jprb), parameter :: weights(nw) & + & = [0.0506142681451884_jprb, 0.111190517226687_jprb, & + & 0.156853322938944_jprb, 0.181341891689181_jprb, & + & 0.181341891689181_jprb, 0.156853322938944_jprb, & + & 0.111190517226687_jprb, 0.0506142681451884_jprb ] + real(kind=jprb), parameter :: nodes(nw) & + & = [0.0198550717512319_jprb, 0.101666761293187_jprb, & + & 0.237233795041836_jprb, 0.408282678752175_jprb, & + & 0.591717321247825_jprb, 0.762766204958164_jprb, & + & 0.898333238706813_jprb, 0.980144928248768_jprb ] + + ! Ratio of building height to the building horizontal separation + ! scale in the exponential-urban-geometry assumption (H/X) + real(kind=jprb), intent(in) :: height_separation_ratio + ! Fraction of diffuse radiation emanating from the ground that + ! reaches the sky and fraction emanating from a wall that reaches + ! another wall + real(kind=jprb), intent(out) :: view_ground_sky, view_wall_wall + ! Cosine of solar zenith angle + real(kind=jprb), intent(in), optional :: cos_sza + ! Fraction of direct radiation at the top-of-canopy that + ! penetrates to the ground unscattered + real(kind=jprb), intent(out), optional :: view_dir_ground + + ! Direct penetration factor, defined as (H/X)*tan(sza) - see Eq. 2 + real(kind=jprb) :: norm_x0 + + real(kind=jprb) :: tk(nw), exp_tk(nw) + + real(kind=jprb) :: hweight(nw), vweight(nw) + + ! Eqs. 12 and 17 + hweight = weights * nodes / sum(weights * nodes) + vweight = weights * sqrt(1.0_jprb - nodes*nodes) + vweight = vweight / sum(vweight) + + ! The sqrt term is tan(zenith angle) since node is the cosine of + ! the zenith angle + tk = height_separation_ratio * sqrt(1.0_jprb / (nodes*nodes) - 1.0_jprb) + exp_tk = exp(-tk) + + ! Eqs. 41 and 42 (note that there is a mistake in the latter + ! equation in the paper) + view_ground_sky = sum(hweight * exp_tk) + view_wall_wall = 1.0_jprb - sum(vweight * (1.0_jprb-exp_tk) / tk) + + if (present(cos_sza) .and. present(view_dir_ground)) then + ! The sqrt term is tan(sza) + norm_x0 = height_separation_ratio * sqrt(1.0_jprb / (cos_sza*cos_sza) - 1.0_jprb) + view_dir_ground = exp(-norm_x0) + end if + + end subroutine calc_view_factors_exp + +end module radsurf_view_factor From a6f18668fa183d2e9a01610652b009b7823add14 Mon Sep 17 00:00:00 2001 From: Robin Hogan Date: Tue, 26 Oct 2021 08:11:49 +0100 Subject: [PATCH 15/28] Option to override surface type from namelist --- driver/spartacus_surface_config.F90 | 38 ++++++++++++++----------- driver/spartacus_surface_read_input.F90 | 14 +++++++-- 2 files changed, 33 insertions(+), 19 deletions(-) diff --git a/driver/spartacus_surface_config.F90 b/driver/spartacus_surface_config.F90 index a28a3f0..67e0ed7 100644 --- a/driver/spartacus_surface_config.F90 +++ b/driver/spartacus_surface_config.F90 @@ -41,22 +41,24 @@ module spartacus_surface_config logical :: do_conservation_check = .false. ! Override values - real(kind=jprb) :: cos_sza_override = -1.0 - real(kind=jprb) :: ground_sw_albedo = -1.0 - real(kind=jprb) :: roof_sw_albedo = -1.0 - real(kind=jprb) :: wall_sw_albedo = -1.0 - real(kind=jprb) :: ground_lw_emissivity = -1.0 - real(kind=jprb) :: roof_lw_emissivity = -1.0 - real(kind=jprb) :: wall_lw_emissivity = -1.0 - real(kind=jprb) :: vegetation_fraction = -1.0 - real(kind=jprb) :: vegetation_extinction = -1.0 - real(kind=jprb) :: vegetation_fsd = -1.0 - real(kind=jprb) :: vegetation_sw_ssa = -1.0 - real(kind=jprb) :: vegetation_lw_ssa = -1.0 - real(kind=jprb) :: top_flux_dn_sw = -1.0 - real(kind=jprb) :: top_flux_dn_direct_sw = -1.0 - real(kind=jprb) :: top_flux_dn_lw = -1.0 - + real(kind=jprb) :: cos_sza_override = -1.0_jprb + real(kind=jprb) :: ground_sw_albedo = -1.0_jprb + real(kind=jprb) :: roof_sw_albedo = -1.0_jprb + real(kind=jprb) :: wall_sw_albedo = -1.0_jprb + real(kind=jprb) :: ground_lw_emissivity = -1.0_jprb + real(kind=jprb) :: roof_lw_emissivity = -1.0_jprb + real(kind=jprb) :: wall_lw_emissivity = -1.0_jprb + real(kind=jprb) :: vegetation_fraction = -1.0_jprb + real(kind=jprb) :: vegetation_extinction = -1.0_jprb + real(kind=jprb) :: vegetation_fsd = -1.0_jprb + real(kind=jprb) :: vegetation_sw_ssa = -1.0_jprb + real(kind=jprb) :: vegetation_lw_ssa = -1.0_jprb + real(kind=jprb) :: top_flux_dn_sw = -1.0_jprb + real(kind=jprb) :: top_flux_dn_direct_sw = -1.0_jprb + real(kind=jprb) :: top_flux_dn_lw = -1.0_jprb + + integer(kind=jpim) :: isurfacetype = -1 + contains procedure :: read => read_config_from_namelist @@ -89,6 +91,7 @@ subroutine read_config_from_namelist(this, file_name, is_success) real(kind=jprb), pointer :: vegetation_extinction, vegetation_sw_ssa real(kind=jprb), pointer :: top_flux_dn_sw, top_flux_dn_direct_sw real(kind=jprb), pointer :: top_flux_dn_lw + integer(kind=jpim), pointer :: isurfacetype real(kind=jprb) :: solar_zenith_angle @@ -98,7 +101,7 @@ subroutine read_config_from_namelist(this, file_name, is_success) & ground_lw_emissivity, roof_lw_emissivity, wall_lw_emissivity, & & vegetation_extinction, vegetation_sw_ssa, vegetation_fraction, & & top_flux_dn_sw, top_flux_dn_direct_sw, top_flux_dn_lw, & - & do_conservation_check + & do_conservation_check, isurfacetype do_parallel => this%do_parallel do_conservation_check => this%do_conservation_check @@ -121,6 +124,7 @@ subroutine read_config_from_namelist(this, file_name, is_success) top_flux_dn_sw => this%top_flux_dn_sw top_flux_dn_direct_sw => this%top_flux_dn_direct_sw top_flux_dn_lw => this%top_flux_dn_lw + isurfacetype => this%isurfacetype ! Alternative way to specify solar zenith angle, in degrees solar_zenith_angle = -100.0_jprb diff --git a/driver/spartacus_surface_read_input.F90 b/driver/spartacus_surface_read_input.F90 index 1bc76f5..e9a4ce6 100644 --- a/driver/spartacus_surface_read_input.F90 +++ b/driver/spartacus_surface_read_input.F90 @@ -26,7 +26,7 @@ subroutine read_input(file, config, driver_config, ncol, ntotlay, & use easy_netcdf, only : netcdf_file use radsurf_config, only : config_type use spartacus_surface_config, only : driver_config_type - use radsurf_canopy_properties, only : canopy_properties_type + use radsurf_canopy_properties, only : canopy_properties_type, TileRepresentationName use radsurf_sw_spectral_properties, only : sw_spectral_properties_type use radsurf_lw_spectral_properties, only : lw_spectral_properties_type use radiation_constants, only : StefanBoltzmann @@ -91,7 +91,17 @@ subroutine read_input(file, config, driver_config, ncol, ntotlay, & ilay = ilay + canopy_props%nlay(jcol) end do - call file%get('surface_type', canopy_props%i_representation) + if (driver_config%isurfacetype >= 0) then + allocate(canopy_props%i_representation(ncol)) + if (driver_config%iverbose >= 2) then + write(nulout,'(a,i0,a,a,a)') ' Overriding all surface types with ', & + & driver_config%isurfacetype, ' (', & + & trim(TileRepresentationName(driver_config%isurfacetype)), ')' + end if + canopy_props%i_representation = driver_config%isurfacetype + else + call file%get('surface_type', canopy_props%i_representation) + end if ! Read canopy geometry if (config%do_urban) then From 2103ce883fdac21dd2f8b1415c706c32d9911651 Mon Sep 17 00:00:00 2001 From: Robin Hogan Date: Tue, 26 Oct 2021 08:12:19 +0100 Subject: [PATCH 16/28] Report timings and gprof option with make GPROF=1 --- Makefile_include.gfortran | 9 +++++++-- driver/spartacus_surface_driver.F90 | 17 ++++++++++++++++- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/Makefile_include.gfortran b/Makefile_include.gfortran index b0b627d..0e24794 100644 --- a/Makefile_include.gfortran +++ b/Makefile_include.gfortran @@ -15,7 +15,7 @@ ifndef DEBUG # --NORMAL CONFIGURATION-- # Optimization flags -OPTFLAGS = -O3 +OPTFLAGS = -O3 -march=native # Warning flags: all except those that warn about unused stuff WARNFLAGS = -Wall -Wno-unused-label -Wno-unused-dummy-argument -Wno-unused-variable -Wimplicit-interface @@ -30,4 +30,9 @@ OPTFLAGS = -O0 WARNFLAGS = -Wall DEBUGFLAGS = -g -ffpe-trap=invalid,zero,overflow -fcheck=bounds -finit-real=snan -endif \ No newline at end of file +endif + +ifdef GPROF +# Add gprof output +DEBUGFLAGS += -pg +endif diff --git a/driver/spartacus_surface_driver.F90 b/driver/spartacus_surface_driver.F90 index 26443c5..d661731 100644 --- a/driver/spartacus_surface_driver.F90 +++ b/driver/spartacus_surface_driver.F90 @@ -23,7 +23,7 @@ program spartacus_surface_driver ! Section 1: Declarations ! -------------------------------------------------------- - use parkind1, only : jprb ! Working precision + use parkind1, only : jprb, jprd ! Working precision use radiation_io, only : nulout use radsurf_config, only : config_type @@ -74,7 +74,13 @@ program spartacus_surface_driver ! For parallel processing of multiple blocks integer :: jblock, nblock ! Block loop index and number + +#ifndef NO_OPENMP integer, external :: omp_get_thread_num + double precision, external :: omp_get_wtime + ! Start/stop time in seconds + real(kind=jprd) :: tstart, tstop +#endif ! Loop index for repeats (for benchmarking) integer :: jrepeat @@ -185,6 +191,9 @@ program spartacus_surface_driver ! Option of repeating calculation multiple time for more accurate ! profiling +#ifndef NO_OPENMP + tstart = omp_get_wtime() +#endif do jrepeat = 1,driver_config%nrepeat if (driver_config%do_parallel) then @@ -252,6 +261,12 @@ program spartacus_surface_driver end if end do +#ifndef NO_OPENMP + tstop = omp_get_wtime() + if (driver_config%iverbose >= 2) then + write(nulout, '(a,g11.5,a)') 'Time elapsed in radiative transfer: ', tstop-tstart, ' seconds' + endif +#endif ! -------------------------------------------------------- ! Section 5: Check and save output From 756e7087fd9b0001edd6fb25bb391a00c8e3f597 Mon Sep 17 00:00:00 2001 From: Robin Hogan Date: Tue, 26 Oct 2021 23:08:10 +0100 Subject: [PATCH 17/28] Added longwave simple urban solver --- radsurf/Makefile | 9 +- radsurf/radsurf_canopy_properties.F90 | 2 +- radsurf/radsurf_interface.F90 | 10 + radsurf/radsurf_lw_spectral_properties.F90 | 7 +- radsurf/radsurf_save.F90 | 4 +- radsurf/radsurf_simple_urban_lw.F90 | 260 +++++++++++++++++++++ radsurf/radsurf_simple_urban_sw.F90 | 32 ++- 7 files changed, 308 insertions(+), 16 deletions(-) create mode 100644 radsurf/radsurf_simple_urban_lw.F90 diff --git a/radsurf/Makefile b/radsurf/Makefile index 0498792..849b112 100644 --- a/radsurf/Makefile +++ b/radsurf/Makefile @@ -15,7 +15,8 @@ SOURCES = \ radsurf_lw_spectral_properties.F90 \ radsurf_norm_perim.F90 \ radsurf_view_factor.F90 \ - radsurf_simple_urban_sw.F90 + radsurf_simple_urban_sw.F90 \ + radsurf_simple_urban_lw.F90 OBJECTS := $(SOURCES:.F90=.o) LIBSURF = ../lib/libradsurf.a @@ -38,7 +39,8 @@ radsurf_interface.o: radsurf_canopy_properties.o \ radsurf_sw_spectral_properties.o radsurf_lw_spectral_properties.o \ radsurf_boundary_conds_out.o radsurf_simple_urban_sw.o \ radsurf_canopy_flux.o radsurf_config.o radsurf_forest_sw.o \ - radsurf_forest_lw.o radsurf_urban_sw.o radsurf_urban_lw.o + radsurf_forest_lw.o radsurf_urban_sw.o radsurf_urban_lw.o \ + radsurf_simple_urban_lw.o radsurf_forest_sw.o: radsurf_config.o radsurf_canopy_properties.o \ radsurf_sw_spectral_properties.o radsurf_boundary_conds_out.o \ radsurf_canopy_flux.o radsurf_overlap.o radsurf_norm_perim.o @@ -59,3 +61,6 @@ radsurf_canopy_flux.o: radsurf_canopy_properties.o radsurf_simple_urban_sw.o: radsurf_config.o radsurf_canopy_properties.o \ radsurf_sw_spectral_properties.o radsurf_canopy_flux.o \ radsurf_norm_perim.o radsurf_view_factor.o +radsurf_simple_urban_lw.o: radsurf_config.o radsurf_canopy_properties.o \ + radsurf_lw_spectral_properties.o radsurf_canopy_flux.o \ + radsurf_norm_perim.o radsurf_view_factor.o diff --git a/radsurf/radsurf_canopy_properties.F90 b/radsurf/radsurf_canopy_properties.F90 index 2da8358..5bff340 100644 --- a/radsurf/radsurf_canopy_properties.F90 +++ b/radsurf/radsurf_canopy_properties.F90 @@ -32,7 +32,7 @@ module radsurf_canopy_properties & ITileInfiniteStreet end enum - character(len=*), parameter :: TileRepresentationName(NTileTypes) & + character(len=*), parameter :: TileRepresentationName(0:NTileTypes-1) & & = [ 'Flat ', & & 'Forest ', & & 'Urban ', & diff --git a/radsurf/radsurf_interface.F90 b/radsurf/radsurf_interface.F90 index 924749c..e723801 100644 --- a/radsurf/radsurf_interface.F90 +++ b/radsurf/radsurf_interface.F90 @@ -41,6 +41,7 @@ subroutine radsurf(config, canopy_props, & use radsurf_urban_sw, only : spartacus_urban_sw use radsurf_urban_lw, only : spartacus_urban_lw use radsurf_simple_urban_sw, only : simple_urban_sw + use radsurf_simple_urban_lw, only : simple_urban_lw implicit none @@ -298,6 +299,15 @@ subroutine radsurf(config, canopy_props, & end if end if + if (config%do_lw) then + call simple_urban_lw(config, is_infinite_street, & + & config%nlwinternal, & + & jcol, ilay1, & + & canopy_props, lw_spectral_props, & + & bc_out%lw_emissivity(:,jcol), bc_out%lw_emission(:,jcol), & + & lw_internal, lw_norm) + end if + end select end do diff --git a/radsurf/radsurf_lw_spectral_properties.F90 b/radsurf/radsurf_lw_spectral_properties.F90 index a85744d..daa942f 100644 --- a/radsurf/radsurf_lw_spectral_properties.F90 +++ b/radsurf/radsurf_lw_spectral_properties.F90 @@ -66,7 +66,8 @@ subroutine allocate_spectral(this, config, nspec, ncol, ntotlay, & use radsurf_config, only : config_type use radsurf_canopy_properties, only : ITileFlat, ITileForest, & - & ITileUrban, ITileVegetatedUrban + & ITileUrban, ITileVegetatedUrban, & + & ITileSimpleUrban, ITileInfiniteStreet class(lw_spectral_properties_type), intent(inout) :: this type(config_type), intent(in) :: config @@ -93,7 +94,9 @@ subroutine allocate_spectral(this, config, nspec, ncol, ntotlay, & do_vegetation = .false. end if if (.not. any(i_representation == ITileUrban & - & .or. i_representation == ITileVegetatedUrban)) then + & .or. i_representation == ITileVegetatedUrban & + & .or. i_representation == ITileSimpleUrban & + & .or. i_representation == ITileInfiniteStreet)) then do_urban = .false. end if end if diff --git a/radsurf/radsurf_save.F90 b/radsurf/radsurf_save.F90 index e958a3e..f7ebbd6 100644 --- a/radsurf/radsurf_save.F90 +++ b/radsurf/radsurf_save.F90 @@ -116,7 +116,9 @@ subroutine save_canopy_fluxes(file_name, config, canopy_props, & & "0: Flat"//NEW_LINE('A') & & //"1: Forest"//NEW_LINE('A') & & //"2: Unvegetated urban"//NEW_LINE('A') & - & //"3: Vegetated urban") + & //"3: Vegetated urban"//NEW_LINE('A') & + & //"4: Simple urban"//NEW_LINE('A') & + & //"5: Infinite street") call out_file%define_variable("nlayer", data_type_name="short", & & dim1_name="column", long_name="Number of active layers") diff --git a/radsurf/radsurf_simple_urban_lw.F90 b/radsurf/radsurf_simple_urban_lw.F90 new file mode 100644 index 0000000..0dd97a8 --- /dev/null +++ b/radsurf/radsurf_simple_urban_lw.F90 @@ -0,0 +1,260 @@ +! radsurf_simple_urban_lw.F90 - Longwave solver for unvegetated single-layer urban canopy +! +! (C) Copyright 2021- ECMWF. +! +! This software is licensed under the terms of the Apache Licence Version 2.0 +! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +! +! In applying this licence, ECMWF does not waive the privileges and immunities +! granted to it by virtue of its status as an intergovernmental organisation +! nor does it submit to any jurisdiction. +! +! Author: Robin Hogan +! Email: r.j.hogan@ecmwf.int +! + +module radsurf_simple_urban_lw + +contains + + ! -------------------------------------------------------- + ! Single-layer solar urban radiative transfer (i.e. the assumption + ! that all buildings are the same height) using the Harman et + ! al. (BLM 2004) method of solving a 2x2 matrix problem, but with + ! the option of two different models for urban geometry: the + ! original "infinite street" of constant width, and the more recent + ! "exponential model" for the distribution of wall-to-wall + ! separation distances + subroutine simple_urban_lw(config, is_infinite_street, & + & nlw, icol, ilay, & + & canopy_props, lw_spectral_props, & + & top_emissivity, top_emission, & + & lw_internal, lw_norm) + + use parkind1, only : jpim, jprb + use yomhook, only : lhook, dr_hook + use radiation_io, only : radiation_abort + use radsurf_config, only : config_type + use radsurf_canopy_properties, only : canopy_properties_type + use radsurf_lw_spectral_properties, only : lw_spectral_properties_type + use radsurf_canopy_flux, only : canopy_flux_type + use radiation_constants, only : Pi + use radsurf_norm_perim, only : calc_norm_perim_urban + use radsurf_view_factor, only : calc_view_factors_inf, & + & calc_view_factors_exp + use radtool_matrix, only : solve_vec + + implicit none + + ! Inputs + + ! Algorithm configuration + type(config_type), intent(in) :: config + ! Do we use the infinite-street or exponential model? + logical, intent(in) :: is_infinite_street + ! Number of spectral intervals + integer(kind=jpim), intent(in) :: nlw + ! Index of current column and layer + integer(kind=jpim), intent(in) :: icol, ilay + ! Geometric and other spectrally independent properties of the canopy + type(canopy_properties_type), intent(in) :: canopy_props + ! Spectral properties of the air, vegetation and urban facets + type(lw_spectral_properties_type), intent(in) :: lw_spectral_props + + ! Outputs + + ! Top-of-canopy spectral emissivity and emission (W m-2) + real(kind=jprb), dimension(nlw),intent(out):: top_emissivity, & + & top_emission + ! Flux outputs + type(canopy_flux_type), intent(inout), optional & + & :: lw_internal, & ! LW fluxes from internal emission + & lw_norm ! LW fluxes normalized by top-of-canopy diffuse + + ! Local variables + + ! view_A_B is the fraction of radiaion emanating from facet A that + ! intercepts facet B + real(kind=jprb) :: view_ground_sky, view_wall_wall + real(kind=jprb) :: view_wall_ground, view_ground_wall + + ! Normalized perimeter length between regions (unused), and + ! between air and walls (m-1) + real(jprb) :: norm_perim(1), norm_perim_wall(1) + + ! Dummy variables for calc_norm_perim_urban + real(kind=jprb) :: veg_fraction(1), veg_scale(1), veg_contact_fraction(1) + + ! The "X" in Hogan (BLM 2019a, exponential), metres + real(kind=jprb) :: building_separation_scale + + ! The street width in the infinite-street assumption, metres + real(kind=jprb) :: street_width + + ! Fundamentally the Harman et al. (BLM 2004) method solves a 2x2 + ! matrix problem of the form + ! interaction_matrix*solution_vector=source_vector, which here + ! includes an additional dimension for the number of spectral + ! intervals + real(kind=jprb) :: interaction_matrix(nlw,2,2) + real(kind=jprb) :: solution_vector(nlw,2), source_vector(nlw,2) + + real(jprb) :: hook_handle + + if (lhook) call dr_hook('radsurf_simple_urban_lw:simple_urban_lw',0,hook_handle) + + associate( & + & dz => canopy_props%dz(ilay), & + & building_fraction => canopy_props%building_fraction(ilay), & + & building_scale => canopy_props%building_scale(ilay), & + & ground_emissivity => lw_spectral_props%ground_emissivity(:,icol), & + & ground_emission => lw_spectral_props%ground_emission(:,icol), & + & roof_emissivity => lw_spectral_props%roof_emissivity(:,ilay), & + & roof_emission => lw_spectral_props%roof_emission(:,ilay), & + & wall_emissivity => lw_spectral_props%wall_emissivity(:,ilay), & + & wall_emission => lw_spectral_props%wall_emission(:,ilay) ) + + ! Compute normalized perimeter length of walls, noting that + ! calc_norm_perim_urban accepts vectors of inputs but we only + ! want to compute a single value, and dummy values are entered + ! for the unused vegetation variables + veg_fraction = 0.0_jprb + veg_scale = 1.0_jprb + veg_contact_fraction = 0.0_jprb + call calc_norm_perim_urban(config, 1, 1, spread(building_fraction,1,1), & + & spread(building_scale,1,1), veg_fraction, veg_scale, & + & veg_contact_fraction, norm_perim, norm_perim_wall) + + ! Compute length scales and view factors + if (is_infinite_street) then + ! Hogan (BLM 2019b, radiative transfer), Eq. 7 + street_width = 2.0_jprb * (1.0_jprb - building_fraction) / norm_perim_wall(1) + call calc_view_factors_inf(dz / street_width, & + & view_ground_sky, view_wall_wall); + else + ! Hogan (BLM 2019b, radiative transfer), Eq. 8 + building_separation_scale = Pi * (1.0_jprb - building_fraction) & + & / norm_perim_wall(1) + call calc_view_factors_exp(dz / building_separation_scale, & + & view_ground_sky, view_wall_wall); + end if + + ! Compute extra view factors + view_wall_ground = 0.5_jprb * (1.0_jprb - view_wall_wall) + view_ground_wall = 1.0_jprb - view_ground_sky + + ! Set to the flux components to zero initially + call lw_norm%zero(icol, ilay, ilay) + call lw_internal%zero( icol, ilay, ilay) + + ! First the fluxes due to internal emission + + ! The elements of the interaction matrix are common for direct + ! and diffuse input fluxes + interaction_matrix(:,1,1) = 1.0_jprb + interaction_matrix(:,1,2) = -view_wall_ground*(1.0_jprb-wall_emissivity) + interaction_matrix(:,2,1) = -view_ground_wall*(1.0_jprb-ground_emissivity) + interaction_matrix(:,2,2) = 1.0_jprb - view_wall_wall*(1.0_jprb-ground_emissivity) + + ! Incoming radiation at ground and walls due to emission from + ! the other facet + source_vector(:,1) = view_wall_ground * wall_emission * norm_perim_wall(1) * dz + source_vector(:,2) = view_ground_wall * ground_emission * (1.0_jprb-building_fraction) & + & + view_wall_wall * wall_emission * norm_perim_wall(1) * dz + + ! Solve 2x2 matrix problem + solution_vector = solve_vec(nlw,nlw,2,interaction_matrix,source_vector) + + ! Ground fluxes + lw_internal%ground_dn(:,icol) = solution_vector(:,1) + lw_internal%ground_net(:,icol) & + & = solution_vector(:,1) * ground_emissivity & + & - ground_emission * (1.0_jprb - building_fraction) + ! vertical flux??? + + ! Roof fluxes + lw_internal%roof_in(:,ilay) = 0.0_jprb + lw_internal%roof_net(:,ilay) = - building_fraction * roof_emission + + ! Wall fluxes + lw_internal%wall_in(:,ilay) = solution_vector(:,2) + lw_internal%wall_net(:,ilay) & + & = solution_vector(:,2) * wall_emissivity & + & - wall_emission * norm_perim_wall(1) * dz + + ! Top-of-canopy fluxes + lw_internal%top_dn(:,icol) = 0.0_jprb + lw_internal%top_net(:,icol) = - building_fraction*roof_emission & + & - (lw_internal%ground_dn(:,ilay) - lw_internal%ground_net(:,ilay)) & + & * view_ground_sky & + & - (lw_internal%wall_in(:,ilay) - lw_internal%wall_net(:,ilay)) & + & * view_wall_ground + + ! Flux "profiles" + if (allocated(lw_internal%flux_dn_layer_top)) then + lw_internal%flux_dn_layer_top(:,ilay) = 0.0_jprb + lw_internal%flux_up_layer_top(:,ilay) & + & = (lw_internal%ground_dn(:,ilay) - lw_internal%ground_net(:,ilay)) & + & * view_ground_sky & + & + (lw_internal%wall_in(:,ilay) - lw_internal%wall_net(:,ilay)) & + & * view_wall_ground + lw_internal%flux_dn_layer_base(:,ilay) = lw_internal%ground_dn(:,ilay) + lw_internal%flux_up_layer_base(:,ilay) & + & = lw_internal%ground_dn(:,ilay) - lw_internal%ground_net(:,ilay) + end if + + ! Second the fluxes normalized by the diffuse downwelling flux + ! at canopy top. + + ! Incoming radiation at ground and walls due to incoming diffuse + ! radiation at top-of-canopy + source_vector(:,1) = view_ground_sky * (1.0_jprb-building_fraction) + source_vector(:,2) = view_ground_wall* (1.0_jprb-building_fraction) + + ! Solve 2x2 matrix problem + solution_vector = solve_vec(nlw,nlw,2,interaction_matrix,source_vector) + + ! Ground fluxes + lw_norm%ground_dn(:,ilay) = solution_vector(:,1) + lw_norm%ground_net(:,ilay) & + & = lw_norm%ground_dn(:,ilay) * ground_emissivity + ! vertical flux??? + + ! Roof fluxes + lw_norm%roof_in(:,ilay) = building_fraction + lw_norm%roof_net(:,ilay) = building_fraction * roof_emissivity + + ! Wall fluxes + lw_norm%wall_in(:,ilay) = solution_vector(:,2) + lw_norm%wall_net(:,ilay) & + & = lw_norm%wall_in(:,ilay) * wall_emissivity + + ! Top-of-canopy fluxes + lw_norm%top_dn(:,icol) = 1.0_jprb + lw_norm%top_net(:,icol) = 1.0_jprb - building_fraction*(1.0_jprb-roof_emissivity) & + & - (lw_norm%ground_dn(:,ilay) - lw_norm%ground_net(:,ilay)) & + & * view_ground_sky & + & - (lw_norm%wall_in(:,ilay) - lw_norm%wall_net(:,ilay)) & + & * view_wall_ground + + ! Flux "profiles" + if (allocated(lw_norm%flux_dn_layer_top)) then + lw_norm%flux_dn_layer_top(:,ilay) = 1.0_jprb - building_fraction + lw_norm%flux_up_layer_top(:,ilay) & + & = (lw_norm%ground_dn(:,ilay) - lw_norm%ground_net(:,ilay)) & + & * view_ground_sky & + & + (lw_norm%wall_in(:,ilay) - lw_norm%wall_net(:,ilay)) & + & * view_wall_ground + lw_norm%flux_dn_layer_base(:,ilay) = lw_norm%ground_dn(:,ilay) + lw_norm%flux_up_layer_base(:,ilay) & + & = lw_norm%ground_dn(:,ilay) - lw_norm%ground_net(:,ilay) + end if + + end associate + + if (lhook) call dr_hook('radsurf_simple_urban_lw:simple_urban_lw',1,hook_handle) + + end subroutine simple_urban_lw + + +end module radsurf_simple_urban_lw diff --git a/radsurf/radsurf_simple_urban_sw.F90 b/radsurf/radsurf_simple_urban_sw.F90 index 5efd3ea..42d1539 100644 --- a/radsurf/radsurf_simple_urban_sw.F90 +++ b/radsurf/radsurf_simple_urban_sw.F90 @@ -1,4 +1,4 @@ -! radsurf_simple_urban_sw.F90 - Urban solver assuming single-layer infinite street canyon +! radsurf_simple_urban_sw.F90 - Shortwave solver for unvegetated single-layer urban canopy ! ! (C) Copyright 2021- ECMWF. ! @@ -99,6 +99,9 @@ subroutine simple_urban_sw(config, is_infinite_street, & ! The street width in the infinite-street assumption, metres real(kind=jprb) :: street_width + ! Tangent of solar zenith angle + real(kind=jprb) :: tan_sza + ! Fundamentally the Harman et al. (BLM 2004) method solves a 2x2 ! matrix problem of the form ! interaction_matrix*solution_vector=source_vector, which here @@ -201,10 +204,13 @@ subroutine simple_urban_sw(config, is_infinite_street, & ! Wall fluxes sw_norm_dir%wall_in_dir(:,ilay) = view_dir_wall & * (1.0_jprb-building_fraction) - !source_vector(:,2) sw_norm_dir%wall_in(:,ilay) = solution_vector(:,2) sw_norm_dir%wall_net(:,ilay) & & = sw_norm_dir%wall_in(:,ilay) * (1.0_jprb-wall_albedo) + tan_sza = sqrt(1.0_jprb / (cos_sza*cos_sza) - 1.0_jprb) + sw_norm_dir%wall_sunlit_frac(ilay) = 0.5_jprb * view_dir_wall & + & / (max(tan_sza,1.0e-6_jprb) * norm_perim_wall(1)*dz & + & / (Pi*(1.0_jprb - building_fraction))) ! Top-of-canopy fluxes sw_norm_dir%top_dn_dir(:,icol) = 1.0_jprb @@ -217,14 +223,17 @@ subroutine simple_urban_sw(config, is_infinite_street, & ! Flux "profiles" if (allocated(sw_norm_dir%flux_dn_layer_top)) then - sw_norm_dir%flux_dn_dir_layer_top(:,ilay) = 1.0_jprb - sw_norm_dir%flux_dn_layer_top(:,ilay) = 1.0_jprb + sw_norm_dir%flux_dn_dir_layer_top(:,ilay) = (1.0_jprb-building_fraction) + sw_norm_dir%flux_dn_layer_top(:,ilay) = (1.0_jprb-building_fraction) sw_norm_dir%flux_up_layer_top(:,ilay) & - & = sw_norm_dir%top_net(:,icol) - sw_norm_dir%top_dn(:,icol) + & = (sw_norm_dir%ground_dn(:,ilay) - sw_norm_dir%ground_net(:,ilay)) & + & * view_ground_sky & + & + (sw_norm_dir%wall_in(:,ilay) - sw_norm_dir%wall_net(:,ilay)) & + & * view_wall_ground sw_norm_dir%flux_dn_dir_layer_base(:,ilay) = sw_norm_dir%ground_dn_dir(:,ilay) sw_norm_dir%flux_dn_layer_base(:,ilay) = sw_norm_dir%ground_dn(:,ilay) sw_norm_dir%flux_up_layer_base(:,ilay) & - & = sw_norm_dir%ground_net(:,ilay) - sw_norm_dir%ground_dn(:,ilay) + & = sw_norm_dir%ground_dn(:,ilay) - sw_norm_dir%ground_net(:,ilay) end if ! Second the fluxes normalized by the diffuse downwelling flux @@ -244,7 +253,7 @@ subroutine simple_urban_sw(config, is_infinite_street, & sw_norm_diff%ground_dn_dir(:,ilay) = 0.0_jprb sw_norm_diff%ground_dn(:,ilay) = solution_vector(:,1) sw_norm_diff%ground_net(:,ilay) & - & = sw_norm_diff%ground_dn(:,ilay) * (1.0_jprb-ground_albedo_dir) + & = sw_norm_diff%ground_dn(:,ilay) * (1.0_jprb-ground_albedo_diff) ! vertical flux??? ! Roof fluxes @@ -267,12 +276,15 @@ subroutine simple_urban_sw(config, is_infinite_street, & ! Flux "profiles" if (allocated(sw_norm_diff%flux_dn_layer_top)) then - sw_norm_diff%flux_dn_layer_top(:,ilay) = 1.0_jprb + sw_norm_diff%flux_dn_layer_top(:,ilay) = (1.0_jprb-building_fraction) sw_norm_diff%flux_up_layer_top(:,ilay) & - & = sw_norm_diff%top_net(:,icol) - sw_norm_diff%top_dn(:,icol) + & = (sw_norm_diff%ground_dn(:,ilay) - sw_norm_diff%ground_net(:,ilay)) & + & * view_ground_sky & + & + (sw_norm_diff%wall_in(:,ilay) - sw_norm_diff%wall_net(:,ilay)) & + & * view_wall_ground sw_norm_diff%flux_dn_layer_base(:,ilay) = sw_norm_diff%ground_dn(:,ilay) sw_norm_diff%flux_up_layer_base(:,ilay) & - & = sw_norm_diff%ground_net(:,ilay) - sw_norm_diff%ground_dn(:,ilay) + & = sw_norm_diff%ground_dn(:,ilay) - sw_norm_diff%ground_net(:,ilay) end if end associate From 3e210b2ef5f39ce594a1237f394c589cb5f254f0 Mon Sep 17 00:00:00 2001 From: Robin Hogan Date: Tue, 26 Oct 2021 23:11:30 +0100 Subject: [PATCH 18/28] Added single_layer test case --- ChangeLog | 5 +++ Makefile | 8 ++++- test/single_layer/Makefile | 23 ++++++++++++++ test/single_layer/README | 16 ++++++++++ test/single_layer/change_namelist.sh | 42 +++++++++++++++++++++++++ test/single_layer/config.nam | 26 +++++++++++++++ test/single_layer/test_single_layer.nc | Bin 0 -> 8364 bytes 7 files changed, 119 insertions(+), 1 deletion(-) create mode 100644 test/single_layer/Makefile create mode 100644 test/single_layer/README create mode 100755 test/single_layer/change_namelist.sh create mode 100644 test/single_layer/config.nam create mode 100644 test/single_layer/test_single_layer.nc diff --git a/ChangeLog b/ChangeLog index d3fbc74..3b1d00f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -16,6 +16,11 @@ version 0.7.3 - Modified the test/rami5/scene_nc files to use the new definition of veg_contact_fraction and a consistent definition of veg_scale to the code + - Added surface types 4 (SimpleUrban) and 5 (InfiniteStreet): fast + methods for single-layer unvegetated urban canopies + - test/single_layer case for testing the new surface types + - Namelist parameter radsurf_config:isurfacetype can be used to + override the surface_type in the input file version 0.7.2 (4 October 2021) - Longwave urban modifications to give correct emission from diff --git a/Makefile b/Makefile index b55b3cd..8563740 100644 --- a/Makefile +++ b/Makefile @@ -83,7 +83,7 @@ libradsurf: libradtool driver: libradsurf cd driver && $(MAKE) -test: test_simple test_rami4pilps test_urban test_rami5 +test: test_simple test_rami4pilps test_urban test_rami5 test_single_layer test_simple: cd test/simple && $(MAKE) test @@ -94,9 +94,14 @@ test_rami4pilps: test_urban: cd test/urban && $(MAKE) test +# Single profile test_urban_single: cd test/urban && $(MAKE) test_single +# Single layer +test_single_layer: + cd test/single_layer && $(MAKE) test + test_rami5: cd test/rami5 && $(MAKE) test @@ -112,6 +117,7 @@ clean-tests: cd test/rami4pilps && $(MAKE) clean cd test/urban && $(MAKE) clean cd test/rami5 && $(MAKE) clean + cd test/single_layer && $(MAKE) clean clean-toplevel: cd radsurf && $(MAKE) clean diff --git a/test/single_layer/Makefile b/test/single_layer/Makefile new file mode 100644 index 0000000..0203511 --- /dev/null +++ b/test/single_layer/Makefile @@ -0,0 +1,23 @@ +SPSURF = ../../bin/spartacus_surface +CONFIG = config.nam +CONFIG_TMP = config_tmp.nam +CHANGE_NL = ./change_namelist.sh +BASENAME = test_single_layer +INPUT = $(BASENAME).nc + +test: test_sp test_exp test_inf + +test_sp: + $(CHANGE_NL) $(CONFIG) $(CONFIG_TMP) isurfacetype=2 + $(SPSURF) $(CONFIG_TMP) $(INPUT) $(BASENAME)_sp_out.nc + +test_exp: + $(CHANGE_NL) $(CONFIG) $(CONFIG_TMP) isurfacetype=4 + $(SPSURF) $(CONFIG_TMP) $(INPUT) $(BASENAME)_exp_out.nc + +test_inf: + $(CHANGE_NL) $(CONFIG) $(CONFIG_TMP) isurfacetype=5 + $(SPSURF) $(CONFIG_TMP) $(INPUT) $(BASENAME)_inf_out.nc + +clean: + rm -f $(BASENAME)_*_out.nc $(CONFIG_TMP) diff --git a/test/single_layer/README b/test/single_layer/README new file mode 100644 index 0000000..7c1c844 --- /dev/null +++ b/test/single_layer/README @@ -0,0 +1,16 @@ +Calling make in this directory runs SPARTACUS-Surface on the +test_single_layer.nc file containing a single-layer description of an +urban canopy (i.e. all buildings the same height), with each column +increasing the mean building height so as to cover a very wide range +of street height-to-width ratios. Three solvers are applied, +controlled by the isurfacetype namelist parameter: + + Urban: the SPARTACUS solver with 8 diffuse streams per hemisphere + + InfiniteStreet: the Harman et al. (2004) method of performing the + radiative transfer by solving a 2x2 matrix problem, and describing + the urban canopy as a single-layer infinite street + + SimpleUrban: the Harman et al. (2004) method of solving a 2x2 matrix + problem, but assuming exponential model of urban geometry (Hogan + 2019) as in the SPARTACUS method diff --git a/test/single_layer/change_namelist.sh b/test/single_layer/change_namelist.sh new file mode 100755 index 0000000..cecf2ee --- /dev/null +++ b/test/single_layer/change_namelist.sh @@ -0,0 +1,42 @@ +#!/bin/bash +# +# (C) Copyright 2014- ECMWF. +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. +# +# In applying this licence, ECMWF does not waive the privileges and immunities +# granted to it by virtue of its status as an intergovernmental organisation +# nor does it submit to any jurisdiction. + +# Change entries in a Fortran namelist file +# Usage: change_namelist.sh infile.nam outfile.nam key1=value1 key2=value2 ... + +INFILE=$1 +OUTFILE=$2 +shift +shift + +SEDLINE="" +while [ "$1" ] +do + FOUND=$(echo $1 | grep '=') + if [ ! "$FOUND" ] + then + echo "Error in $0: argument '$1' not of the form key=value" + exit 1 + fi + KEY=$(echo $1 | awk -F= '{print $1}') + VALUE=$(echo $1 | awk -F= '{print $2}') + FOUND=$(grep $KEY $INFILE) + if [ ! "$FOUND" ] + then + echo "Error: $KEY not found in $INFILE" + exit 1 + fi + + SEDLINE="$SEDLINE -e s|^[[:space:]!]*"$KEY".*|"$KEY"="$VALUE",|" + shift +done +#echo sed $SEDLINE $INFILE ">" $OUTFILE +sed $SEDLINE $INFILE > $OUTFILE diff --git a/test/single_layer/config.nam b/test/single_layer/config.nam new file mode 100644 index 0000000..582f077 --- /dev/null +++ b/test/single_layer/config.nam @@ -0,0 +1,26 @@ +&radsurf_driver +do_parallel = true, +!top_flux_dn_sw = 1000.0, +!top_flux_dn_direct_sw = 0.0, +cos_solar_zenith_angle = 0.5, +!do_conservation_check = true, +nrepeat = 1, +iverbose = 2, +nblocksize = 100, +isurfacetype = 2, +/ + +&radsurf +iverbose = 2, +do_sw = true, +do_lw = true, +!use_sw_direct_albedo = false, +do_vegetation = false, +do_urban = true, +n_vegetation_region_urban = 0, +nsw = 1, +nlw = 1, +n_stream_sw_urban = 8, +n_stream_lw_urban = 8, +do_save_flux_profile = false, +/ diff --git a/test/single_layer/test_single_layer.nc b/test/single_layer/test_single_layer.nc new file mode 100644 index 0000000000000000000000000000000000000000..65b6128c4ee6c5cebcb723c411cea66b6ac8e7a4 GIT binary patch literal 8364 zcmc&%O^g&p6rNoKVOUvMM35LQJs3!Kis|n8hh5kmTsDGWcKMg2>7A*WY3ZLy|Lm{` z%E90d8Z|&-VmwMBh$qhyxd@8!03JPPqA~s^dNIbo_o{n#nVDT^p%Oc(>6+^IzW3Fu z_g+;MH;;71VlfIW4s9N^1tr_?O$&O#(`#r`%u#jAV@^dYF&yoNHlL3NGKkRwZ2^vZ zx@T~yKu#Igt*XHiT%7pMgk}+sxgIHLE^|r6cF6dXLt{IKio3=Wv1sao-|4 zN*<9@M3xK5TtR|PQkDwDDrt3@BzBO5OKME7*1R=^erfH%GfA52C-9TWD47iQ(kUgI zQm~g%lzcjiy{wX#xL7VDWwX$eXfm0~rm-Vsr4%SiRLP`sGIr8=8381kOJ_15EK@0y z%H*(#b-+F1;31+)c0^x_cDA$&J;|1Rjq)e+q=c58+o6oC2o{o-->#T;aY zp_uiUndqPQ(92hHX`wNgB$m9_1NB>0z34%q|lY z;X&IAW3j$%@b1-g2iDf)F7h2t4(;Q^dB7X_&t|`ONOxcjT68;XZbhU!pFeU29(_CE zy==nQjWX0uwc=={W)+l8{8xHkJt9}P}37L!Iz8A2TOmlZjTDTcR_4obLylb|j zAF(Y@Gsp}~tb>2J-gg>%P2V2?{`Zw^S9NVebJQaY!mFmj<`T{W;~gK|?{L4IEoLCA zT-{e#+jR*i%)IpTReiapRt-bkMG&y?tyK1RwHZROjYp>gBWa*8Ec8;IL5lO8TzxG_b`^4b$%|}j|R4+?+_ir+Dp(Ff>}KF78z9T^q9_O2QO{W-F#BQ^xrUp$;H z;rwsRw&>hfaPG5Z+}!m*RP8+s+?R6htr>-Djt{=E?!r3F8vjc<_g38we+%BLj{=uo z_s~@P`65dFolS2pzENVhxi1_CPCagLmr}i{I_7&6K0V?6i-bDyGOOsY|AkjD?*D;g zfs7cM7l(@t-m+XTE*Hoyyw}B*0@=-~%+owp4z7CfRDq1^X5C=He;@)+l({tX@p+J6 z;n{VyV)%#EvZa=FI3Rnf+u%@<=Cy98T~FARL`k#k`V=YK4XXjCQ8-+Y0FBJVJDNe{ z_H~%QhnNXDuo;Dab1hy3l_fXw4~a)vk2Q1i?jS6R?<>H!uc5(Nz5PTHy@ssX1N#3{ z{d*n#&H3ME{o~wc+&gpP=!}Uj!L|D|a9_%~x7M)8^^bFJ)oqW9F2VKhO`d^Wyf(xJ zuU`GEcyhTic<$W!VG@gNgb8h|R4RkpVEoln3d-L2zj$J~g4Miu8QLGM-#|4s`18jn zMB;5+EPp5z?~$$DLh%N2TZG~rcsnl?@AzA1h2ow0wJH?v{cDm?yic!R6pHuLSxqF~ zrufSb3dMW)ge4Sj!}v0xcu&3Ytx&w|C>!at@^yidNoBoyz*6Z=Hs z4K4b*C=`!edQB+adRu6`4DEm6FQNRNz4D7tywigDUFd&DD8DP;#f9SiQ2jzA-teOJ zNuhW|Y`q#Tocu~CzkSb*3dK8iMiz>9>e}x@@!s2iT`1n=-xQ&E-#`A5NW9|0(|-%a qduT8%6fghopF;8WHa-`McXXmhDBdaZjZnPvFNyUZ-s=RNul@zxx Date: Wed, 27 Oct 2021 13:44:02 +0100 Subject: [PATCH 19/28] Updated documentation to include new simple urban surface types --- doc/spartacus_surface_documentation.pdf | Bin 215086 -> 218221 bytes doc/spartacus_surface_documentation.tex | 40 +- doc/surface_type_schematic.fig | 874 +++++++++++++++++------- doc/surface_type_schematic.pdf | Bin 4092 -> 4916 bytes 4 files changed, 659 insertions(+), 255 deletions(-) diff --git a/doc/spartacus_surface_documentation.pdf b/doc/spartacus_surface_documentation.pdf index 95729da48d8c9a75d54bac39528d793d0d2030eb..49513e0ec758e902527e5d8f4fb4f21ee2c486f9 100644 GIT binary patch delta 68459 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 delta 65413 zcmV)aK&rp(s12@=4X_C%7&9~=Fd%PYY6?6&3NK7$ZfA68AT%&FHi5@IzkMgeO+u28g`4ZsCSsc?j0tCAbA8*IM}AQ1<2(z+0rj|dm)nTpVPdAJAW+Leo#Ltt#g&8 zF^LXU*~0VeXj15ua9f+f+&EuabFa+Wuim~hx4|x~E2pijNhA`;0#1U2b|!iM*Ig29 zzx@7s2X_2&$Aj%xe}BJ!f2mLDVX)}%b>JkyF!tL3O44}yWl^Z4n>~vt3BiE5E07Q*k?HQ8Icgm zlf6z%3B7MKG#dC~{@I%^$L|$t!^LDGjk8Ar)g0jK?Hm^G(4L z@UVoARAkMe&d)9Ac+oLbxty+Z439iMLRWGF`wA+i+sZk#ToJysu!<$L+|s>i;o?>IwxfXJV38?ne4#o`)k(=9fIoET zv(olW_dy19cm|zQ*5GGscy_68)ACJ6{5YiHLz)k&pMSBPO`Epa5q)*8gFxpN$1D8< z`gHh}#x(a?es|x_^$e$UU&p}3gJXcv!XVfd=~GtUs3>8sqc~!`{RFG|gE59vtF^8n zROlV484y2c#4`axyePtCB|#a1cxFU@$nI`Vb$aN#sTmwy5xyX?iV?`!5M3qS6tNT& z!wmII*?+~<-N0=plS~3{C?9_;L8b1@a5zx@#ci3yvXUks`Fn| zkY04dJ!LY#>c%;NLRT{6A&l_`gxNZ? zuD##q;$cpr+pC*FPB-t<$ zQ`?fmH-mm?IHUv`GVDf%bYkqti2zIQot)-78{>rWaHX>`7!1e+we8JuuA8~#`??tx z;Ol3u5^q1lQr_9tyKfa*h_lk#22saMIn0L~c~;kh&-A=`jG>p&@xq8P{9~NYW=z2) zMSnan)>9IPc4&%rhwkNt4$xi|dI&P!EoH#)da+deNf&!vRAb6h5uy6NQwBqD4S{%2`j%fTW}@1u=20KAktF)^<*O!=JC`sMiqmBSyGxPT0FIJC|Oq>6FT z+<^yuSBEctEW{VTtHhf>mhvipz&{Li8c&Qo(Lv5SjDnLOLh}lq71`C|ixP|RMd>Q> zMv0}oiV_Uw#zQYm&wk!2OcO%cvwtBX3rNh^Z1$XyFtjgQ{jj?-EcUr7dhAGtFLhT) zNBtEg)6|iYFN-#-ONe~+fY2~SarcvrsVmzfpR+@Ldg@;~BU{5zg!S*7U+gW%>j44= z4%^Q$sIkEFtoIZ^a^T=b?$fn+Q~(ULV%e{7$WNmoLX$pZo~{|hI?!C#EPsJ(#M}ZK#fZGZi#U5-)K`T7V|MJ z3LpBe5KsD!5?}hR5?}g`6n`_XT@;_I&PI_AG1pOpe_FH$JxkS8Q#dSj`uL!ZcQ&g1nIVF8WTB{(HL+pzcA8q)b#l zB#OD?2F2q|_K-JC{vmIl=K6r6#n%O}7}WmGcL7I*w+CPuf2zv6X$LSiGOv2tr#1Ci zgoKHeb17<79*@vm3RLE%N$28oCHV5g8bV9e<0jqs`TdWHeYS7SVPk_|nE2rfDyzxvnH{+E~-eRrl9}&7=5#cmKa~Vt9>X8gjo{o;SwRE4M>>3= zVj&CO0*y-d=7)>_`sa&%E2*~s7X89zpx3s;&gYljIW#{h;!l1P&|ESVwy%RKB?%)t zNz+#6n^ST5cylaoX0(5nsiVRdDVE_gYw4=+MvGdVK0@(<>6a^<^BNGKMsd}p6~o?74TDF~tHW zbJh5I8J6SaWv&cwH^VxXx)~mheI}QS)I{xn+vTR6j1m(Od+)Sfo<+xHIAbD)EJDZ% z#?4V;XMerEHHR~>kn24wS#fO4C$RaYIGXF*%=|ysl`{Q@{FvD%dIb{vuj-?IE37V0 z-J?UDrHug!pUr+vwb3*T?MidFYbMOp*Dh_Zf!eor~+79~#}$1vDSy&)3)aeoZ>TCLC_NckN)NHaos?m(CxvbAITTa&;@c-sN}Zs0ZU5^_}&S@4va){HRmdhR;?` zee#7q@Iu0miKYGd-6}J4M2F~&udatPI>c~B2V4(_PpD6A_f@c6eo(7~)rTgtnJ6bv z|9@}mDm~t6+BQE`TkR4=b*F!n-ZoWjPAt%$A<K6nWETHd$^T4+oXJXbqK&J-5bQ za=!i6>_BjQ!W!kNx`3@AO_^!ybM1T&=1L7T+8RRAC-b?^nyN4!Xw&M&wbtu-=eL}9 zr=Z|W%%@}CKt*ZuU-Xs-y8zdGv$W|m{eMNU^^R`ucYC$<@VS5MMqBj9rPS$BxwqP& zbIR`~ygQ1Z1MX6nP^*-gja39yEhTmB;`skm@r3if^ka3?|H_Gq1^rZ*bZNW8U)+OJ z0>XwL)7F=%3d#ftC|S5mk^;=1v?J()HKI>5_`#7PTv44<2 zSJNN)V$E7NWo)I9HKz=;_NBGuPWXzi2dr}Tv2hp6Uu{Ub;PZJ}9R zW2kU|eYU`Y^``&{&IX56BFu&_b!DbPluoltOWn&GYeE_k!GvqVv+1T(XU&6Tdo~xb z{>A223f+;p(mx%ZwOxPe;EzKR1^tgv9dNzlk+vXw_gFooW)Irv7Yc#v{(l?QnsfDo z96d>|Cw`^}6q*Nm0j%C=Yi@Vv8`!K=rw(2v;&A)#zhv!ij8Rm8&m;MoU$IEolc3-N zZ){Wd?Q_!*L~@8fBh@$Qu3aTF|Bxd6B^74qtIln830?H76W84q40!U8mzUSdt1dQU z9db<-JF&~oim>5wWtZ|@&VRW0>C>bj3Z)R)$3gO`FjT~1I+FFv;*}$VREBB{mJB1f z(0p8QlvJPwd@(1`*7}?!1w9{Q$ymqI!=wascw-&&50m1mr{>R$!Jv2;63i9B)tYul z=!*EnSyBoCjI5Gmom(u=;uCHWCh*gjxW#y2uiYYIM0QQ_%oArie}8ZVEFH^t{(uE| zoH^4whO5TcF|ZnsGiTCUGk`<`c)SR1$<9KBSb|NXcrD@(;^u%lYuXmf4tBI%Exxp| zmKjsNJzckSU%I&Tw=3rUY)6O#=GjZ!6jyx~X0(JM4nswqVPemY&6 zYzc8!nJ;myYzc9G#HSPYIG6R%t`1L} zSjPgIZrPqNaoMl1Ea!LJv-riKj_TL(ixXfV*1X}i6kRo*6tS8G6y35tDdMtUtC8#b z>REInNy4?W9DhKef03=17HhislE&7N;Yk(CSh%0IBkaiV1dL_8U)tTyT|=x7)YZZI zI&@)7M8GD{Ev}fZ98ZK;jweD_hbKd<V|;XkBB7;TB&e^CA(O7l;{3T19&b98cLVUxUg&^5ZAJS|$lTIenX5Ho?$?VV)WphH23Pr86`Sm^L0H6Sxwk2qj zhh2go34A!;!MOmClg0faS$uuYiMZ#2(FCOWw?LwuJrO9*r=6umti;dTm5et0EiY(y>K2LvGl4Q_I z!E&9O5j>Vn^I_8*e)~|jANG$lo)APZIw2JkqL?Dda#kejWFSH%OiYoiy5`OGjZTtf zQ+}%Y*N{jq8JACFA^?NTUqS*>KO&L5V4U+1$@_<{A0DrHvMjGfvix|>)1_4m)RMz* zrd+o}XG-SXrrEy++S151lTv?ON+Up5X*NUSy6&sha1NUxpjbA2K(TCwNMhOak-Q~o z*m?a&Gn=IFOkT=tQm{nnDYI>L7N;SUSWbN?v7ClTVmbAZd{_NRgz6$?DHj(Ks*9Xy znOZ3}RoQY4xz2!)n-hEURAUW2Arm=MX6+1^E{eDK+EZ z#GWwuvFe9+G8)|3eZ2S-qZhbb| z1oLroq7Dc_3BiRrAX1h&B_6t6jDZe;#8U4AIfweN_gL!v-fypS@S3}uZgaCL+ir*K zS?{~<&NSPnQOSP=Mfn#}$x|j(HlgxNs~jSU<;d^K6#prU z#;M3DOutYkq+m%JE=uhWZBq{)HhsCGQJ$(5A)r{T@By8X%uafbRRzEIcTNBSMbi~T z!+2knA?0g-e+dP8|1g|LEYB%;zmQnLnO3=%7sY?l8p4UC)rS*1+e0L=6#GbCp%~@% z2N0a(6w+TvFy~B2|DaVY!6BSjf_*r#1cyjs3HFh^La>XrKR?N;$SCH&kmMv`xzIic|K*c8Jv_Kwf_i_V0z5-`nyBdkTj?LL zg`j^_99@J*gEouuyA@a&!xezo9S z00nw+! zRNGwzf#jjD@KAWcm)~s6lTY2j6pX1FKX|CNwsl+6AsSPBs8CJ!4$An2DIEH{k_>+b z@E#1)U$K{5;TJ8I%(oyzTfZ%B;jS`|tNl=KO<0T7o4(r~zoV+7oyEJl1!0jC@uh(H zr#dP!&T?QRnOPR3QD{&=VvMD3H*romQ?fJ1cR1v=Jr;wF4tV_W_JzMZE?T8dOa zQ78|lAn5X5dOITv&5|N>I{5ocUlN9;=lTMt??Go;iUt0Z#>Vk~o70B^WW>iA@lyiR z9sc8H`YHwLA~MoX?zW;I!GwQSGq6R$5X|hce5Eu;btb*vNR2j4gf@8k+aZckZ_MTSAEZo>3J8CVgb1ut@gH_ zf`7O^r}_mXnBqmv7c74pfkTL(Kxnt7GrqJ3iv|oAj=c%vXeK5~Yf4a(z+VMYRIJFk zdto;>TbMXbt`+1r>KH@V@tRNzF-*c|cxK}dD3#{osRBukB4(&J{v8T;R;XQHSFQ2y z)Q)YXH8G&k7SIw2?kv=n-|OuG+HL&YX-v#qG&DhacBJH?^Adlx&OIJ`C3{8UloqBv z58Q1rrjsrbrsB3+S7<+_gh|p@>l&sM=6!hY1?PM7_P*Mcxa`|}GWV1q&;v@(O_{=e z{C@vXQuc|Jw5N`-WvYC$?Y$3;41HA%dkj!@vV31}>!$3XE1fRi80q_i;_d_z<_(35 z&CJd2p&PpWrxt&v%buoAk<)VZ-aOuRy?wDT}cJR;S*Qs z^B^q`Xc;O>$_weArretvYc??PG|D5)6oiU#t)!6SS_zs^nJ>TVhHCo#U9~Dr_781% zbHQsH3j2TkVQUmiSjCdYPQi6zCMI~_1RCTN2&X=%%C`IsY}MA>c-bl39fcy5Gm}`q zB3q$M_jnyAJCsQu;mT)R0eD&_`P3IoT)XEB1kQX=%x`Re7PJ5ad)qZqh1aJO6O~%) z<3N3o{>Z=-Rhz1}uu-zED`Vdi@IK(epHml|8Fhcrd9c0))piy`31=}bx?}=OiK!wP z(zD&J?@FAN*aSC~wS5Rq-ImCY@6Ai3H}tf!1;|nj0@tCr%vvkcxyx(8$T1X@K<7?6 z2+f4^X~z7JR!XJOT!NV`+nUU}N@?d0AGj%ib+4>za0wDtleM??%TXy$1cS)bee`Cg zS;&88jzI(M`@9nA;(@dD)h2lmJGj50AXXSNU@gWo8;p_dM1a?5?!px`l9pSHF5{~-E#L__WU>O(rkzg- zw;mfSork9vJdFVJT8SlXzhQzKLz1drNhNi+H+plT;Ry==k z9M;GvJBx1s5voyRYo{yQP=%v5Hc(kZmcAZZ+~De_DtM?HavEv~Xy&mtkvkGe<}|kp zav1X*1_=6a5P80Qgp}yPzS-LsW>y#TC##FtU^m!LZHDDeE16bW`{CSq2B_{$6~VimauflKcs z7kK6=ILz6EJT1O~rUL>x+9}A7jZZR`7yCDz37d}ymx@x+Qi$N}!wLen#|DQx7R@GBJwOKcd)E#$a@+bdxWQ=Gy)Cc1ZCSU^M0NY>x#ZFc9e;t)4Q@eu zAWguhX2$y~;deM!4t2904e=(}U|d%#6vwgs!M0_#UD#-Byxm+}Re;!AawfI(ekwt> z;YPs}kbi|71_Jgk*XtVlLg9ZXvg*P7z^WC>u5NMGDOv|KR~i5o+(c1A6I)S*GJy}`?^S$Uw(gk4Ws+=S|-b{{`>yM28ia(8@qFB-Ur8mzq@)W z0Fkle=&fsvUZq8h8S>FX@O(T zi+JM-ya;9NYWZbjHxtpgOQAy{O*9m|&O>;_Oc!RZK-y~VT%i4fxmezy-4t+S+8!4W zK%_YSz8$(rM!?4x@po5auqS3lB$>)_Rs7fz&3kF5#b7YB#;%jgG;uj@mDP4Y?z%Ji zKUo00HHE^N0*vX+)E|Fi_}tmHiC%KZUcDfc%)+(ImKKCD4Kt%rip~f6!7Yp}*L1id zpk*`;JGawjQ3eMEo*XV9@A$>Z=ljO*!VoLm1>h11e5&5qW~NSQp}tth;HJ! zzw~7r%)sa#f3c%dmcwK`_3%bv{v=kWL06UA5#*dZ^Y;2-7R`UO2r;AuL(M)Ff>45` zFnk}w+j?8Idkk7$1pp(Eg$@y%dx8a0IJ7GPf@;6&>)m*uXHFY30e~*khVz?vMH^Di zim5UPJeVV1KT~9tL8nYfD~9p6usAn9;7=+~`3n}L6Fw5F5~l)jD&ZqJ^K6sT3m=75 zix*JLs)dhY_Ae|KocyPy&M{P8;6DCn8cikQ3(e%%o(Xt8(`KXV@DQ{6`+@cfQu{w* zE>pRavA7eHr8G1GGdGh#87P0nSzB)#w-SEWui#^XqFfFyL$WZ6xd{9}%pvb746*)x~ zgI5%iqNpfgNXj~|EGf%=Vy&_nE7)%_uyWC1MR}8iqX)HfVCxk2c#ePgzw#MFQUTPS zR0urrRxy#B&RFrRn1k|BaTaQou{RiiiWmu)C}20>1&qMxGe&@9=O10-kV0{BIv z9D^SOWWehsgx(U!lgob!3Uk?!!g7vglA#h~AQ7ZA5HMTO6hlI&0!qwK65(ht_SQHh z@>^&JD)u&!7{xoFO;8VxpO7H(P&pZJW`eN{SVz$cgzzcBXy6l!75$0&`hSV`#g>2) z#BcUZv=n#G682!G6ClZi3kUW z$T9)vWc)-0SUgDF)>&~SOvGYQd;*TgDav*@x&apQPDO%_3CBcAGD#|05!4$@I8F`@RB@t; z-Dqj*Xrk=C$HYtUE6$G^lPs-65E0JO>=!SyPDM(s=KVzO*#Es zUR0ZRxnbAwqOMnan)7q)uhe{cSzT}0>Q@KW=d+7NyV`#8?(q2i;hPU9Kb|bw^Kx3L z^6H{#XWixXW?tcGUMnc0V(_h|s`jR>x>8oLU0qbob=7~hU(~F=S#;{}vYnM@SJnIp zR*SP+ZY#|nHElKT#)y}i|InV5wJO`HoNopimx5ka)6Xj@r%S2J?FLRO8K+Hq(+D;8 zKi2lF?iy9r4LG;zrfn|Ta*N{g!1RyVw5sPYRs9KYZoag$i_7lOu8+8{Mjfl-Xx5#| zzJr5F@&13yO{I!=Fwdlb{kp2|=C}hwI4O>+d9!Gz)m$Q1zw+ED}+vi`vu8eCv6SUg3IKzs+rW$kQu z88F0AJCgdqXeLRmK_`TGq#PZ11Ph?#v;ASQ#%RfnD=diAx=(g5fCXwmDtAB|OS!tjB8sxO2%6(nKTN| zmw4OM$8Y8D)pa?$>YATg{g=KJkNsCQz5d_1M$!KI4%)p+`#*pF7hR)@ zF=|E^UoWn%PB)REltvMk5J^VJ0)&4+7=B20gxbB=+)>}LE(?9+l4zH6REN>6)>%cr zoFkOQu%f{_FXusU_j4Rkylb23Nd--!S@`ux74NHmy7j_(t&2!;y^BcUYr2R#1ti`{ zoe#)1t8hf1yD$&Qm*lwE&$jLafF zW|zjvAZf6hybyg{$}4ZX?~(UB@4k25c^l?QkzJEMx9PbtQ!*O!xx?Xpg@&}s$AKGHbFYOL})LiN``N2 zM-ld!vv4yVs)qn25Sm+qz7l_?wGq)fq$go?@;FE~icxvy zCXK)E1Hz%*cSh1=LU)TU#d>Y!G15sKq1_FFdn~WQyF}B6beqHJBRb?(o5soD*@<_c zBNQwlj?C|$tCGcN8x$C`h#AE&cH@4^n{ zmwa&N^q&l+4Q4R_s`(@ze|0ut3k0|BU!HdJulsb~Nyp|8 z?hBn zoA2&#{=6aZ9i9=b5=T5vX3Oo(Z-3y~3cmkgh7nKV*>n5UcE$xm0wm*EF}u6@*9|r% z!YHACYN$TmTT%gGB%@hGBx0a1NN&I90>y&ODB!1bR%NrbB}qFWj97dQ39P_>5edT-v531!zHQB-DYz;ZRLq}u&skCQ zysV$fs(Eg?wV-(ZVL`+^)4u`=v%^O{&UZ%|w}WMorPVw0IQ+B8nzYGQO4SzA>=w{- zLNts@Ka-ccTECt)o;+AGJt)`uGfS6GdNj(0hG8-hNDw-eVK_mUON(KLeF(KYG@;ag zve5)m%R>@MEgQ+N`~NDD+FzdK%`ny8ibxShGMUID8OMlr$)Sr>nn#amon1jB2TdT4 z95kUka)1QV$N}>0r-(`?$#jB4ojkQlZ^96SG@(Rtk%SV-MlzWDigLI43{u}4)lniLZA_lXCd^U7 zP8Q^&+2o-KWs{92kWC(vP&U~}ytwqKc=T!NaS>q^fTz(gWFx*i|TBL_`?AdMU} zp)_)U1hU8h@;S$(w@Pt>Cv6a($R^1UP3Xy5X*`=;IH7d1;e^u3MH0#<8_DMxmBumY z6nBJp)g5Jaca%tkang53-$F*;VRfu8fxC!t;E?V{^Ms*@G1HA+fXeuMHyT#Ul0Yay ziI7%5Iu@!Q%~U^Hz;Gc&-;eHpd(kcm0`)dyY)m&Apa?|c1O^PXud6ri)ta*;nXh1t z^Fl4M`l-&E2JqMVCs;KtPgwE@CP+q3I~@ajfDRu@iPz9=I5BV^Xx;&@42)%Oz7EQv zZVjo1y&=IRV~`}d2Eq|%q7zl6t6DYiUr)&a@X=Pgbek1<-DuIu2f8VL+JXCPg{jc= zzGVzHzA*JIVTcGr@qJY)xA>5+THKP)(^`LOiITN4s#YL;yDYccbho+%U(L+()q=$H z&0(AE%ri}?UmRAO5`l>9)v5Ps)uhWq{ZOB@c_I*wN%uzU#~)iKUmlwDvB(evF+mI` z6eJxrAVUE))C2nK-Za{O9N_7c`{qb1c&N#$E=E))0I2u6NYcff`$Y^-JZk&u95Jgl z#)*G3~7eTJ_}A?AZ3aUVBV<->p#Zp}lEvSl^2v`FCI ziw;mp3`heu3DO^bk?{$kuE|!h>3|A-hNvC%#?MPIOundQgH>ReERz22DyFp$L?5 z)~SycRhAZdv^#7c;UzS1hRTru%q+$b-No4~&tsTF4pa(%;WAF0!FCd1$AGEmYu`8q zgVC8$_F|0(cmyXP1wtz~ZH%84=Q=B1EH$Ax&woXe8RlJy{T~A{?Jp zN!pZwP|6@gIy!xutulPom3C#X$$sbEaTW{t$3t-xM-}I6+1) z36l_Cp}_Tj@Yl;KZ}Z7%g31I6`-ud-UdAPY!u|&;iOw3`+vlty1_%mqjWJ`4_t_3s zN0GF+v?d)0m^H@y3NLZ?WE}_rtfo<)6-IQ=JMZx3pX42`tjpd38^8hYuytvwLpGY- zo+_d2w&(w*-0lxeHnst;zNo(%yYwsu`m(7@&sBndmi^Kff6~&svO<^M*5#_D z_f!d8dV79n=`VH@u3LEubH{Y*$}@rp7X8Y9$l7K_7l_9&z{4?#0j{i22G}}X#Q;y0 zPzKoZ|6ARP%Zs8*w@yz;nOXM=`+{u`dm7lmW~&a`vVZcvq7n^#-jP^8Y(=C8>L^X^)I?`;SA#VhMJNnIAHsr9RLmA5fxG_znC zR24IgSu{=%mj>E4-&r~4VO^!mYm$wRXcDpY;`W8x`x`8C?%LYg!(pGDeam$4yZBA$w?#%l1{d&Wmg` zQ$09Sa-t_IFef^yT^9yDT>_J$1K{pe5!@f2*=K8Db#r!LwJWMzb))Oa9dYJ##7~h5 zN`gsEhX5HDnhsQOV1S(1bf5y3(S)RbzL(#o43(jj)tBAnnq$IY5o}Sq1IxU)+&1bU zGlt@rPfaB}0u__4acd=#D%-UAq^vT1urkU=Jy4Ufi7P8Ko7f7Hp#u^W#q`+Dd);_u zu!HH(^5|#}_bd^bMQr##wk>D(-1^nwH&mJ{mu0KA7x9bv)bzT4vuxE# zZO^6D;7PT6%T2b+^5z8|CS!?97{ZcHB`%dnBvD7)x`Cv+RVDV7g!RBoBCIPbl(4p9 zd^FuWJwoYbPkz_h)X-|5^~=7^>-|$!W#?G7%GWBftPl06D;Q_mc70hrl2Ig~h)#}# z7|O*+OeK_uWeT5MQK59Q)f!EICr^t|HraDeVbfrr??mZ)Eq5XUFUJ$fLt+jKZSVD8 zw%e?!@}-?p>t$MG*Ye53H;GWLtUyLNx?a->@>L0Bl{3H74nEZj1h(b+a8k1=+ijYs zE?f4OqQ3hRo!}J3ea<~w{r3d{P`tNn-zhc8SWdUoF)2 zmibTWyzx2jF0m=-?SLd>Y0oht@vCECM%u&8(X^Kw5oWAp5j|Hu65Wn~4Q^Ro%Xtr+ z=KL_Wi=2058P1>6bCC14q8QkVp34_rC@!kr=Sn>o#MmW|Fr7}i(NsqV-qycS<} z$E(gFd~B1v(UleIjkcbDRd4jH8tRRk!!t)<4Q?ypoNYX+4Vqc1@Y9YHf3)#Rb{C)W&91EU-(Zj6r@Bd+Og-IIclNr! zv>57}UX@}!L{m5)>WT{FsIA;5?3sFI2;`;>{x8un_5QR6O!FUpUm!A*aZeKhI53eB z69YCkF_S?VD1XIUOLyb872f+-XjiExM)2UXo1QeCq{(SJX~t<6NsddCki-*;R7lDm z=hycF7vM{jOp()eV}cL}eE9Agr0Ht6qN}g({`7G7`B$#D3Q6d3Z}qTU`F!Pj0TJ9; zJtV6i*Dl%IbC<5aEb^Zy<-1dv<~!`F_Yxb$cEjB@{C_Oc+;knI_?KuWH$Ojo`}tRn z=q%tk0dYMJ%j@}lHRSHy!`-iU4EpGbAq0mwLAZ(!cR&72R|)igyQ0JigVl>3byzvB zATG>ISJ~>r-9PTA*%BooS50;Kx;v`_%Q`Ecc|-_D&8+)_fCMm-Qxb5#D&=b1nG5NG zXG!Q&rhm`}6c$wwLlSraZXtiH>QY9B$Li(rR6a$y-clb&Z-d+u#Btp-ER2NEI}YX2 zwz%&Shq2*Yen@;8T-{dC*%l8N5kb)3m-E&>gzFN*P7Z)BQH1zw6 zf6$axMw?`bjlDdi)p0LNqh@u1*F;uvnLe4`B!ATkxjj`{0rgU=dqy=;diH8xl=aJo z(RH-pbp5(+p$2o!RjBU1CM(o% zA9EF|yZ91?%8Gn#;%WAFJ2HLDpp&KR(NytTmv=DvmOF zqkls6(Jj)a-c&QyskhO(Jjux#)!)cWh3YN;WpOy3YNH`WC*Y5zyHT_hBw^JplliXR zWBXJ!k@VfK$_qxg5Yts2MCeeCEOnGT zt%?j=+bFJ!@|rQ**ruimh|68oC_)PFdC zrT##I(rIHZhbNgNGPz)bFKN9`%^cM+D($+%`HQlhpLOTA4nHOB+<(K~U-9NxRB4^6l&($GIIvo8n3B5#axXUy1=Ytn zRFFQ^X6d3fQ`Y;awyo5xYp?Y+q`#h`q>SoQDJ>jWxlf+xi0bCut#6?-k>R9B7!Cc#?&Bp#6+@oOewu%9i{GHv7 zd1f!|Y`GE}3N^P$6Y%DHg!;@7Xl%oX&+`FYrW%3Lizl*YN3Y;uhM{#^Aqu6SvTF1cJ!L~8b>orw! zpd}s|v~f|@igUlKp=!peaRr_2LWQD0ycpN<^g1#A&k6V8(^$O!tf}&Ca%>%FmezG< z`r>_*?_}T4H3tKrE2peBPeo6KVy# zUOiFZkS8;Pasav6M19IpHT_`y&33R<0j)0=IO7}9l6XeE;vvzP%q&II=GrS@uITg%&a>W*@bp) z(DkuS^SJGc3u%v`c${k4sBY~YRU?aDq3OD7GG=byXgPtuD-&efH6ruc&13hzDAV7H zyw+yzE3XSWSL|di)A|*MGzo)`bYgE@8jG%!Wd&Sozu)(`Fn{spn#uH zd7w{b;OS&y=0PhWUK$u{w&Y->z@VZsJZ{v=y<4z6B;mwn*U!>GK z_uB{#zYy2weSgm4Oh!sMz{-2MA5)$;!5?rD)zAk91>Ou4SqFHy>6xb*rzN1ANEGjJ z2&%0~Za6dc(pky1)=)yEHPbvvEG?m_vi;7~pnv-`-Vd-QDw!_v_Y2O2UhpdlRe+I! zhdS(KAb{)@`b>&s2+C*$;pbs#f*QQ9pPOO5Zx_pLomB3)4nV52L_$Rca3I%O8Io0(I8OH zcnk?fM%BOrLFK{IOlKKAX!WQ+9J=BtsZQng5yZGncOzW-P?LsDzTa}hy|77(LzD0N zN^fMWat|E|u}jA?&zc=HhOca(3k|=l(7m{Rh}h6pv{|0A-}G52Kp!1}VKus0jO{x+4+Fg_*P>f;&|K zyVUZAn^cL}(Pf}AIMvmYINYPe)eklq&<~o~P=TS*QDE%u48W2>-MyrlS-F!Emn9S_ zy?^Ogr{2=0C>*P7WojuIYSXdAIZYWkmX@da@l@Nh3d%D{Mh=7mPJ9&rIU^#p1$`q6 z=oV}D4{#0n`u)+CUC_BL$~L;3>pti*V@(ZuLG@b{FdXWW5!KhmrBxr6iW`q54T`Qs z>w9Gsb!F;H*U_0n@9agJy5m^xouP>cM}Ksycr^m6Tcub)!WSq~M^&xKpVEmXqIIS|`ZCZ^T9<^DjYc&s#nNRw-2_SI&VM`=Vwi}X}v@q z?+;P=i;73nSOl>W$7f4f!_^bwW*`Xl7LyrxgayKoDf8q8DtiECGuZ|3&VN=s|4SZy zPCO@EOr-DXGzp1(mgQ4X$*D~CAOl;dWCdm`q=96T?iEZ1qtqCT!Z5wCa_nhCYy7%0w?y9v{clEAa`;YFmdVN1b zz3Qh9iOC(YMx5V-2qvKL-F-JUM2J|KOxX}^JR{6^nPVkuD0)}cgkf!Dwhubp(Fuoa zIo_h6paImZ>!WO$tBg5Jk8cW`v4;uXA`;qNSugwXfhfwhc*FBdi!Hu*wS`)}mRhn>w-j3jRM_}!bQdE)XgkS)7w7h5tdE62~s6j>2Td&I@z5DbiXJBb&J)qIRex-Yo; z(CYotjc<;!XPp49E*>3JB&*MG^VvMZm#(j^^ggpV=#cbQQoca81g$TANGoz@~pF*rqaT6ExYbYT;C;N?{XtgxiJ^kZnWx;9Rq zeoxMt@joeDcT!(&_}ntpeX?FHsZoqiX;1*)3+u;SUsbSuuK#1+8EMA5p8D&8nw-zo zZLcZroSB4-nNmxifVg$_bl;?a-G^+(568voYJl4UH((Qc{hfOvvXE@?fGXm(LT zuSf;KX_nuM|2xJMP$uIX2vScsHu3++aqRwMB?6TovAKEvZ)gWAD_iQV5;!ezQAZ*1 zAGD+UTvdBEYfAc%`13lALcxMI6*}goLjiKV(WFL!*GG@7 zzF&oYW~+q8+|TCX?d-~!n(AEOX*rG3aY|@zN<_?k#~3kkjn0?T_x-wuEE1C11gjmI z@^G%1is|kC=ia_(A3-ccd0|?EPLm*`;75NU;-7BpYy6NHLY^} z`@V?gk2cNV+w4eLO{DRo$CK+@H@f0j3oLMpGDYT+k<&MA#21gVg1H+}nNdcx0TeLE z*|HW{XV$c?ALT2qrPznS1J`2cce4zgKCPAOE1}7#(d}>VUWg&z-X#97V+Rj<-ygc; ze;ULKk}1*in7W16rfJ}a#u5zvf}#MA`ES?W>W`w~k)P$@&4)5c9>$6v8DE~3bFuzH zGf@q&_QO7fDnQ^Xxc7o=({5laJHme=I?B}y+SQ#hY!pFqQyC)wxoGXOKsJ&H`w>ec z2X{A`IOLP~GFG)tPN{vRYj>p6qF^h1EZg*@QII9n2rVIctSjI8`P40^5oo&6P@YLK zzIgYgCsm6J0%vJ!UB*~y?1Ne;%OBys^V>3BW|ZuIHr7N+Vdtd)7*$QmR4zb4mi~cJ z1WtDUHY-hsPIboR2bsHOo-!(= z8l5g5o(n`Hy*5^+>W-So2Wco!U?jrbp`|4cazO60;w&;~1>MK3tHh#zG~X^CdCH6L z6Cj7drC4neW&m1FVI_i1wn@9_cpI!T)5Sq+e@Cq@Y)oJPm*)c^9V-N94isDjjeC;d z(ABow$)n&Q&7mUaF}84lpnWyd$PYW&H`|YbOdjalAp>-JpE-7?Hj?yP&K|FsE~+**X}|zoSl67X<+BF za1osF)aome$HwHJl<*!&z`~uVk37GVnKrOwzX{v}>s%QlTX3)4i_YPA>VBgM`>aVO zq$5%Hd3168k(jHakm>Y9X-r83d@lm1U5lg&6F{W0W3mtC>qK4-ZI}t;A_`%FeBj)9 zQY0x8^KkNZGl#t5@KrC7>8Zj&o4oNqY-5=6u-S0AG`I_jKTl`~iRot?nZd`s%R5|k zv6L}^A<-2X5HX7*gabBq5-tLR!ok6q1zohvql{rIdDum8ia{ryf|%#_?bZ6)2Fv1Q zFyG0+rV9R=q|E@(Wt3TUkc($>Fxx$#lw)ep4$N05A{6FM_y|UCOLBP zHW`pzmkjVJa|X=9B6s@@v3p-}Z`vi~`N?450I1EZx?jDcG-&&g?rt0foHX&sXu(5q zWzPb4+tOR!5Ni5gIajsg(BFC!Rc#G5F@TYFFl<>v^ZbS5T3NFa3=c8Q+1HU-IsVTtLxd`fxDo+5w z?u3%xH}Jz$ohpj>Zq-?#dD45&>v^<g6Ml7L_N{@D7Blhs@SI%K zdp4IiT$In_5>d5-(u1s*I_}ntbY<3qS#dOpG6$jTe}MM?+7=2D`R25Mv;;^jg>mun z-1-;7s4KsNP1TUV(x59pHhDbSmPqHzoYV5;PFa?p#@?mX>3;(ZISHBF@+Z@Q)A)G< z(AggwP7x?tv6+ay{pmMJ=K532JbJ>kOlC78hKGf>$1nlG1Z0nk)|}c!!UX{BIOA=$ zX7jD!cn6;wx?O)|J@!lde|r`)Jv9@r#J2#onl|`cUe!tKfCOHQ4^LWvwfVF<7Ql$A zuC5U3^-knSHgCdI^%R!lu2B)l2y#_99FLVn$=QvF<+U1826;_fBWXTWLt&RjoCjsd zCxQ-6SPfsRRXoTWaXu+Ihy|6)wAkqp#k_-3C^bCnsf7!4cROrN?$g4jnJ+8vr#yqT zIzW~ey$w}M-HXoI#3F9(V_qPCp(o0*x;^pL>bw{JRq^@hUK8H9L%t3Sds@~MIejFv z4B6J`$030Z(tJ?4Q-v)%HA614^S3&pf;dZ-3_v`a!w%b?WIk(r{;f?$G8t!f7aBu~9o>2w-tbjjncrwX&3u9FH#lPhtwd=Ct z<+tI5=V3tX(No0-tc^`}*kc}U^gOTcuO6-LglfIw%tW;3)H5{77+BKr5o~36-B8Va zPT?NvE*8ku+jF!ppJ^_hK0ph@P))BKozW-wm$I4`W6|Hye?ARk?PP7%5K`Ms7>SR@(h+f^=F)zvj;mDy(Uh3tX7Fi7RJiG{_ z>}lCtp)1?$5>t_f*bjw6_o0Pjl zQItbY@alkYQWno3SVlxyu+abVKe+IVWF1iIk**`6&Ecn@>XBJe|Mf8J(nw8{8(~go zNr^T~=Z9Fw>+6+aRkHR{yHiys^En`)%)xngBYD1{k(l#lFT&xW^ zcMzAbGf*-kge8zlvtr8OAl@rC_NRruRh9B55 zC}3weyBv9N|2nT&B!4Vkp+t_FTE9ZlLPk)E1=rU?ijnJnzuNc)}_xp5Xs|d@4dY!l9_o0t@bCH1T7Q2&=lTeo!qfar!V6J6%|Ho{P!#WqW?2~ z|1;7X1bkpQKucytr))?e7F?4>;hU#}P?YJp;C@uuTw1H6AoL@GkE@{vxm>KM|4Czgjs zvGDSd;#FmZl5g8H$FEv~YMO$_QZUEos{totHd*V{nB#S901{Z-oXqk48Du-sl9H>qSvylabbnwmwCwwS2(dsUn6mW+DRq9_{(nO1L{B9IFixICaJOHe zT!~?BsyN*L|9c2e!?AFtBxoC6p7wR=8lDb7z*nn}= zf3J&ZoOYtDG1c z?nD*>0%lWdapK9@tR@zpZgxw1k1BmmzW3>7OszDT+!u@}lgBXrWYs=Z5(|CIgz;|} zG?7h@PX56NP4PYJEbSmREJZ|(r=w7{Xh+Ebj@SXo7dw2M7;xNc?F5RRN&uME9~O^@ zYUjPz847Gm&kv^~KX^gz%N}PRA9u7{tJki|%fk>#4K`CGG{H1l?lK@y~x!#uf-bEgTK>KT!qO1 zb1)NL5u0;!&!wmlbKmiLzinmA+NafZK*}APC=tI>A%OBD%?6OaGE$a$J6T@wC`V+$ zBSgMW4tB$Ye6>GK!(^T_6xZB?F4_egS0Dxxi)Q7g}$?Hog^ZzabNk9Ms zW5G=(qGXut(YGIPL-n{F0?kAfmn)Bo%o;hEqWT!}h~D@Uls9D=MJ87G;^x}BGM>`u zZBh59^1U+hPL=&oM+iePX2n8v^vFP62O`QoP3vBwLQpF0nz1Idd|ThlJQ<6(1cHeo zoD3ILZv2#RvAzM(A2jBy8R5x5^w{r&V=q}R0AVpUbpJ~EuNO`))#CI&_`uHGlkR4w z({A~quPZ1sfo1o7))z8Ce{NK6KTT8lB(3b8j=P7~_IWMC{fET?nDVh6dPiV?8IvGJ z&&sTE=#IL7YFgki+2k?et_}?lt5T0vucuyqVe!xS<>9PEP?y3?#c45{+_XMEPQQF4USyz(DZBEVW6{P?W)X7 zOuiW3}6q7qG)R&B#zvV;Ci(n&;fp zv(90kIB01C-}%fNF1F1)5~8v)!WM17nP$Sj)2^wv%n>2WtgH~Gw5yvV7GN-9kpZV# zgaAo~8DurauHCLq<1~HGl7m1>L4oH4GD2!srxKHd;opBPKsN@=4?LMf^jzi8+}q7Y zG%MC7hF0n_Q_{P9u6?+$Sa*jWYuiXFBDo>_P3fky8E6OoMy^P^m^kLdr zxi*@yVhunKlE59UY8_x?-vJYa?4U8NazSygcr1+%T_uc&*z)nVUMn)AXCtMK__*zL zAhG?v3hTrVN9YB1qQ1Uue|_v<#*Ti0LQ=--;e-oN9hPr&AaD9_8*#s~syyv*0@9(x zLYKkK8>Ui-65Sz3kk_rRdn}=H*+F_=MB$)ej9Z)3?0l(2e^_61^t=|^NcqrpWKo4` zJuM8>TajA?1a@A{3M|7W52jWB&aw13?L5{ILn$+JT!YY>XtALf2ekbFAd5%m0ALA-#w zO9KGnM$24@$Wy(de)dv$_%sbTJYXzR`HkZD*1JcP2NEDu7fHw>m@6sykZrwm!Fwl4 zA%PQlkJ$i!iatuZIG^A9X(lx(I{xEu{Tbf>j^ed4`5t-4JztoB2e ziMF^d11hkQf1jB_wpY0Hp?o8JT>g(rU-^NwpNuomR54_iS`|O}5ONS=0F{x+LYh{$ z0O2$e`B^n*q;RTE?IJ{8>SOKCd<&!9$vJfni~Iy;kc)XS_fRX3p>Z);pKK(UxOJ#3 zELk+hEHjMr@8qB)_T@FN9dT!oC?pBNK(KHyQ>AJY70z!6wAyLu4;SkUVeOe6{9)D* zzw1z79VM2kdrVw#RJf?w&P+`_szx8CBxuE* za^pQ&_Sn8gA3}Usnelpat5H$Yfde!l1Sp8b+}NdrxnrYdSfSI0=J zUBE4QUG3Y{9yuiDzSW;8G*B${K1*3(gp^#JzC4=pH0sPrJ0dgWOhR@4m`+|Z#Ta&t zK_m88PDWbn1;)euW%G*i#jISRu=0`HRxv8P7HlAG-I&<53|pRvgC}kVXf`W2${`%k z!_-4l#XJCbNmV%%H;*<7?HqnZ?os8Z${N?cl+r)<8b{jxw6WBJ|5%A}|;}S_h z4|VfqBy=@tNzoj%gR9n}<`3Wi=o-uAnJ!v*9^X^@w3=DT?&(KbJD$!HzqXT9U0CMC zZcn=6(6`i7xDH}QI9p*EAV-wHKf4KB_UXMY9VwZC*t}(!QOF9}B}`Nx^56&xTlwhm zYFhOJJvQU}zzM4cu*oamt`4NXjL(c(TiUlO^g<4?PyML&WleHEd;#Ap;%tG_u#(fJC->gwQ>0_wARX;+iJ1ePBN~wW$S;G;WCT5E> zo`^xyanamIfm@{_sGR+_RJkQ?FzDoB4o3qS0IOC4yjv+|rTwdblMIQY%~4c!qHIAve*-b zENum_2W7vWGNChq{y;Z0dHiWoEM7gxQ$7~CYkf;$GA#`cRk6VC4;U!1f` zf0@=3(VxAY$Azc7B@~9ID7e52Uu9@bo5lFHVE;w~g=6 z&Xun@Y`#4Tz0*f$Z%tvBBP#NWH9I?nny@k@G8O}5?%%rS-J)ZMSyryHzNQ-W-|Ks@ zn!-q>{mA#M^HHzB1POnaNfPRx-|gG#f{YFPm6ht{L>+8ZOY}#sq$=M~uK`(6J4Y)Q z*CH;0iMxunAm_wXgFEuAJG>PUMMU_3foseV2kxlu_TM8s%%;1LX>$CO6UYY8LcR2x z;zlDe6WwJS1CQWy4*~JEH25#ST|=H^1xQ3)YaJ$6NEqmVOA4A64|9fyn<;Aphw(V} zqz$D_#6R_XXCT-=d~J`sYX!{U*7SueKSK<>J09lJf*8PHPac>`&uiMEjM{-0u<-ah zP913tTu$~(HMXEznzfJPK|(k4I@8-az4bC+GHF3fzi41tye|-39fcD}6-)NtH$59+ zNV9t^MPH17p~YOOj+YLK7$S~(i@)7uJ_s?TGF`3Em6ACnzJe?Uj;`01b@hW?IAOV| zp*vja_hd~)b3&ae&PQFD@LfH`06fQ(9TAE{l-=o>TuXBaTs9SypW(A zU1r(o!mDWCTV@v9vGS_e!#39Z!JYikQ@QmHJ+oak`D-bbKR3Mm;t z)xM3D$YC6sR!2A&jSz-1_{69LJ!_qSL`f9cJ`x+->rQY?LRL|Q&#)BkQzIHn1SRz$ zh^clkcw(?p7GGCKF}@$ybp2b(`=yXAwiODE4w6!k$?UAqItSPV+OlC6-#shm3#TD7 zE~Ux?g{Q~0p`ZG62MmjXJ(bzlCdXvJiXEZDk?ij!mxWI19>s%dr-m zAmLYsOEOj%ALR0Ym?%z>3 zoq(aQ1=1cyw_VdT-5Pp~$yl742s6i^LK^PB61?1hU7WUrWAldXvt#@_TNERJ;Q>F@ zru>}}=|H($LdG5D`fXSmn`LK6YIApaaK$5ova7{XNu9&pPKsG@o~htq6*QBuWy7HY4|Nmyb5T zLd;yuJ?bbk+hE8tUhvp}juMBlqSI=d=1?|6RO?GNgn4287^zvAf($fQX+fpw}J|fv5iX7D< zSyjz>!)<*)e zO9b>AAqm0_`xo2yvxOksj>S&lsI?E z)sv%(UJFI7Fe14kYGW+O_#+-AI+W$;K_}gP2WCZj0mj3w6TwiV-l@YDsAz(Hdn z)|Ady?uhK$*T+i;m>i{_H{+$5r&BdQsa&jBd@&klFS>Ibfee#y`b9Xr45p%T@drhn z@)HcnheIwSGwcGnv1EDJp3)9yZ%FXMIkXhagP$B^trIVqzNIj49rl^#4d`4T>iMe;mxx?M)GN%Zy~#rNsr> zmCoH#VY`;m%yb?RM)HM1Ee*gCl_8oI8*HlEmq7Sak(CB&7|aaLL1~k%`yI`D6_0H` z!*Bnt1J^3T$<$0L2Md1z&Ho|V)ZjZ|#WT%3P*(JTA7 z65U`AK}GJ55JniFxm6d~2uvq$G^<|78%~G}JB&$Rk2$gmw@qh^1-R z=A;M53bPNU_dDujVfbY&D#4vyp4vZ&`1)B+UJw~RlUoRgDViU53uV?HV%+qZ8 zS;p4i+N{37hii`!P!ccqySr(TC;$;DOoQ~t9m9kasLP%dEpgygzgP#pD&eLBgTbvf zK}3$$)eo#4!AOA^p%@Xi2#F6IX9(LDsvfqcp7v`=e$$xR4^(%Jt8=jA;P$w(USJ3# zV)cB-OR4KEw9}ZEMc@n=kq7wgc8f3qccl0%&k7PYU32-xc{>V$0SGi7K$I!ad-aH2 z+ArlLoHRyMoEr50^W;<}&jA)>%7Fij;q43@(wS#>ELN;dHW+xyk6KJ)3{p-csPysR zg(h9)k!8zr(g*gevX>hpB34=12NXgNX0n}*Ivb9VK*EMFDGtgcP%gb8UlyTV&TE)Ba0?n0CAAwn zjGF`~04FJ~E_J6U4=y#wR%9oR)|B2Y!ykNpeDs{*a;zEapmzV-8-{6$-U3>yq}dV- zC$9`jN(F~jv;3}n$=G?`I^f#WUO4U(lc^abQh*vca>{$$z=pq(<9kT|d9eZ`QX;ws zh&2-2pn9-T;VAQ@@TT20Lsmkv2ZB(a*=qeM$j3)XSUo=mJcuJPjh=YFI#9VP)O4>! zWbtoV>WB^of1009-e)o9qDNc!yy^|Ckhwuu$*tPbqms7PcBGQ!0Z>q*keZLD7`9c${`lRF|=vt-^7Z3628OKzpMXVKJ z@TeYiiNaqHNRB)iHK172QlKn=NF1!}5^$X8m33pxo$efdQ0oxRHzE3)d+t5T?XYeg zj`22QP|HY&JpH<&^USi7D^wgiteaD1Cw5XlW|8&D^_&l8WVmMQ%G$d+Loe|3wtwB) zz&ZdlG2*M-JySu|KYw#_3+h|gkVD7zR)<5)WcxwSD)p)y4A}Dks_k)$J|r_gGg;T+ z+2Mu$wht*T26xIlFJ|kRB2nTCQ)zDaz@$QqlK@}lD3X{yX&T5mRPxBGzv^rgoT{#y zO^u&ktWk{{fQ=UY2Wd5!#nxsD$TX>=vifn*e;S}F3y;gWw{d%^D?xpeRyo3IP1)S= zf*JTgZwV`z161KDx9cXwPD1h`rsscs2YqtP_|v%*ryKASui-xCoZ|uuqO<)BW1kBX zvdhn!Y4D?AtO2aMYq?rwC1DN=GTEp~@%wt*JTqOOBOkWbTFji(4cR?)@j+7aAt}N3 zNjoh;@zX%i)*q=3k%veZ^y)%nw#_C!1q2qJ8xdt{2KZ+8!U>YT z*M-4(ve&?D-;>dGQp|Z@86FmQy(?MM5v1Kgf-GN;h4+U|;Dsw4DsE8lr+&BJ{g*1T zy`ZRVR%P0YtDl>{$o%qg?N-)y&+AQ&roJ!mHO4?^3@_?Tc!1*F0ArnrlJnt_>d!Vd zFa5qUH;^AnC!{bewX9>hZ)|=uq*E{8}fGd$3r18qCfIq3VCF^8UGNV7j zC?;@Cn@G9>2%18&mjFu`+-f1dVW6wohcDBeO6Os4yT{BGa*jv zXs*^EnH*xrh4N%tHGPX}DMFnInt~TA_Sp?Fi)K4$&i$O3^d`4_?fsB7{CXyndFIp~#zl&K7OM8}<$1T+Z`|&=rb7qCU;RWOVpVt6 z-#`pbhu#zg_oS&#b|tRPXaUc)*f_!gguLm)gwnF*=hfm;TjKo^ZEOR~h)0z7jRgmHrkj2UoPqDmQUNX;H4b&ZySEvIb`n zB61c&S}D?qciT(?e4dt{Gq-7j_K&GnIj4l_WR~6G++uqy%B**Tk`Mlzrc{3`(XCy&QDJ3-8zP z6VR*v^Jy0@8M^d*ey9DH*JggVXTKRT@f^q$Ii7pZ7^idug|PC7K{QgVX0 zpp`onb9Ks7vc4Z;M`tx9F~U8pS&xv48X#e>9g%EJ%W;Ry42Rc_2fUCaQfe=n8Lo=a zZ<#;7EJF2pl*J$W-H?AycIQE}nK1v;S9e%qZMl`_CL9DzE3>|?PcNJ!#SRW*NgiYV zY{geJGfI+gNdJl9m+{8x{32K#O2iwgNB^TTl;R0^KK(cRO9k~Nk2=YP)D{|ImY6q;Zx|8om zKq@Drr;760In3N|*56u_exv?)7c9tdsW%&aVr}_SPnv(+x3YSz>oVC&g$k`MS z_#_HVoTA9;>U}w19G>)0;U5oTIJ!Ns7La+Nh?p04uRzbg)v78*f9c` z74e~X_yYLAj6d1FUmE89yIPBxz(DwAs?^udhFX-4GYHIS5QbSbirss-%!*K1bzdRJ z3TD6y9PU#eLVXqh7^XFhDiTYGkg0Xtz5aSB#@6Ud7%_PT<)Qt4!6!u6bq=ZcjtLNW7#1pomslyXES0ZE`1RTevJc>&o8I&z>Z z2QY5C!Xh3-aq9h^xnNtUjNE_ET0@LRRcZS^s0dNXj0sVx#XZVBa4>;#1#%4_iZsy$ z7BC3B(n>H00d>p*eS53q+}bHYJeTR+(@oAWtR!z&Rnev_KXHL$v&Kjyp3spJGRMD3 z$AICVGTJcSaYM1$f}q*53E*F8LKLmxh7BZ_kWfoN?x;8w7?!^4>;e$rfDZ$_mlQ}H z6N*)(^Tfd+c3}Kxw`YF-n0L7qo{=>jGe>kDPh=q@$K~7{ zsec62S^&TWq9AfV>+wl9c3ICF~yl6?I#8{g#bKqu&^^Y z6d^Nq=LW_hp_|Lwg7@aen&~z+iN#v9=5Wd5;Sw~Zf z>!#J(b3=-?>bL>pa)%Grm6kV-3@fVKD6J%W(G_Kd6;KVWb3d$X=-;_-?MDh|hlZ(Y zc_Hk|nX3oh(WPa`OXu>}Y0dVCKbbs9c|IW*a8OjC zc_IuU#1Bz9Wp?jOtRmTV28te1w>c$Xb*s)$S>ktmb+n|tSitDdCgaDoqL&VF@=z|5 z48tzkkbjFH42UCR=|)Q#Ron7bBNBjIv7v2j9s8ZI4AtLuv-Lu-L!NZi)BxcLyCw%v zeG&M1_y`hk6dI`GvFZS>^z6vSzgykas%|(v|0r#M614Oi z;RUrXh2j-&*-9hiH>$a1JMbGMbRqhX#Ks|Rct_|igiTx#;{9A|DXt!E%XDss z$p~Z19-jFQV)PCdPjX7efaLe&i}HP+KUs3bBMBKOY1=wIUY+S+D>=6Ldl3jP)DgKN z8#}RN|DlP#QYdU3G%!1R5n;_j0u69^-_f#{5|=p0!^?yaXEB&EpO}GlGBNL|c3^+4 z**;30Hv@*{y%Gy*87{Fq$IAoFPdhL1P8x^8@I6M408_qqVI*X<<w91kWNB2u=bvT*j zD3{lS#}p*i^J;vr$MjxCT?~nQ-NH1#Xac+Iw+g49T{WdaX?+Vv{Xh`;L1?~8!0L~? zhL=qiK}T}I70jGqjP}`viA#^;RzPdV53L0QZl?Wk;w(=qjFe_nDi7mP z5rLoDpw+CcSirDfl#TJ&2ws81EzuKz7)#0Fvp+o3s`AkHK4!|&) z1ne;CXB;~r0XVDptjyBxg94yKhnxL>;kYrb0N}URkZypzr4EMX=A%dYcUJTu%Dz<0 zkFIMXozTM3S}uk`euKSp#F*DqywrFc4xQ&Mn-SDmdZ6N(&v4+!4;fU>A-p+CTy3sL zV_$8n#PSQ8C8xdf!7B2xzas5bsO`uYXhBhKqE`mOF&MW&+yKrP%+%{$6ybYNS%P0a zH^N^BPuzkV>ptG*cjE=U>aS-%af)h=MRm$KPFN^Cj{8VMy?F%DwXb!F(3+)8d7^_* ziuNPNSb^g3C^Wp^^E&s?!MFk*N++|82^2ke(g(0c{8RPhEM`t%R&~CdB7P>9)9uQ4 zwXz*qegb+uXt+ahAlambN~Bv8dpkAV3_;}bv$;Z(AFfdI`K3&lG+Bp$5np3MJ z4_7=@fUOjZMCZiR9~ubLfviHghO>*_ZS8ixqh!}4V50t-Mw+TW0PHTJ_PNBU%;)Ct-{}x;j3;V7%dc`2Tcm!;}Y_x@y}RXD!PMPIE3VM7!5pqcbHF`)CT!MFy?k{cD!*L4nX= z>QU-!&ytH34c}7-xP`yfu{!Y35nMIcw+&|pf7f!E>Hk2aws|933Ap!aSEj$zR7X5=1(9=k{GE(gTo^J{f?%l>FP~*gn z?I*6Lsw>spt;E&}#?aIW&~5u!z9CmSSI~X1Ju3tvYtnyTt=R>w}Gg^WDeKJ>axZ1#u zvMN4aHdW0Xz8oh``L_n478HhGDC3&Z9Re`hU+@VUD-mybUpLxA}GXrLAdXi(4|K7V)Yr@G}tN@h~~@Vq*Hr z?aeqI1u}sI1Pnr+cYXTgV!aY*VCZ)%`_>p2Eck4(oT<}i5m+0(vvt9n^U1GeT7Qr* z-8;GDv;%_*z)if=0^oleP28$#wN`LzRnMn-k(d*92qk5^M0QR z)uz^-8#e-6iK;n_aUY0O3w##=G7WU2TZIg@?j3y-`D3jTO~kkmS_wCO4m}ndP3><- zZ)eZ+P{O<>+(NOQbXnEUT0-Bl7A$?exhi`h*6ucXmlin~;$YUiau&ea+Alwe_Xj*z ztDD=|m=4^=EAuvttZ5@OZuQmoX*F@k1|=rAhYo|jkDj05F`7TJp}OfLL`nI0anE}6 zg$=#l-1`rHrmncP$EY?MaK~ihE2m)l1bpY4RDFwK(s}>90OBu)l=C?0_32 zC7&10g}E0zrPo%JeIo*+fGwtEB)`+CjnGC3t0(wF>;XF9UhHs0p7-lTYqXT|03 zWD~~Xp-CJCGeZl%x z#kV@C<{}IS(-9Ky3Sww_%ediiYWLNZwFT@GOGuM~v2L;#aR@>YyLB~}Xg(qi5ds`S z;u0Y{=v7d50rLcvB5bW^B%8KSRcG%xySh}OWS=Q^ku;3aoNY5(MC4JeQ+IeY#YRrz zeaEexrrj>t;=RCh87}Z}SqLfaXYbm^3a=1{2Jc>0*`a_t#DTj-;A01!5v3np$0_yd zT>XzSifuJ9xS}|{9$l$o(a!sJZdjIBTfT+Mpfvl^SiEV<`+KAJL!wg{ecCVHX%Ra;JYPcmexGaolJZ0a?0OctG8T%^yu-o9-c z(Up1Gd{Js85>>m^To=GnWRl75m|z?6bLn#vE#(!_SL3?z&PDCfQ3;e;75WU4Msf0{ zN9E{;T(QTuHiN+Q@!AxOJ6t4;Ud=skbf&S&$sI6`9JZ6F%2Gt2;>pVk#D-jl9JNRZ za84B0N2gNiYsbV?m%xWkDccV>COqiDn!#(<75g)P78(ay_E+GtRWd<_rb7kAVkng6 z?I1$rL(L}Rojh{q`f=@rIUo9alzx++2ttDPo}seuZYNOu+)`uXMYh`PoxZ^OYn0hT3NsJ5JX7 z0c(W-P%WQu;(?@ulJt?jdzNchIjOfR+- za{92*=;qmT-%Lu&V&+Cj3CtdmP*ESqigk9wRitz_sS$)CKdu*HlG4FOt|WwN)}7~x z=GC3~^xp;P2%1&iuJX`}$u{$6=)dTl?Y42)7%K!v*O=5*Cl^{IZv)-S(|ToFG+Tf* zv)wc;(=#up>y@iBShOy+e}C0|P~-Yv$jdpgue#GJA+Ccb1FA$=CEIKUWAGPX3RY9{ zXJxsQE>Hd!S?3g-X|!$a=!9ox2@j@ePi>DabyoIZR1b#DH{d}7da9HL@frpiFqpG#JD!}(+-i-t?cocN$ICb9dT5$H8QIaMo5 z1r4t{S7bA@U)mIqfvnqH0*(#!9wo*sz=GSQd;&$r?U+hXS+Gaw*r6CoTaGz7eJWI! zX7!_6`z{-?lSVO`0a9cWV|-a~+Z-wEw9!C{2fKM!5+ygMcwfc7M#T!SzT{9)3r+V| zVG!(yQJ9Mw4^AMS)27%g`1;!d_ebg$E+_tuH@rJ{P0C%lGE_Xx%AXhjRZO@T@E^2# zl~9E>#rU#K*OwIqC@dj>0>}D^4j)UI)1CIuQ~1J= zs!qPjwhPlXA^!uW3L0F1U*gpt!fm!3E4Yzzc%DvQHWK!O&3QT9I;*~zR=3oLwhAKk zS)JW+fb>ti_koPpA|Z+V@ZBmD5E=eC;ko6_u4%!GmKcnEo&voR3k-7`M}GBwzDS7Q z4Df=j!Z&loj}d*VDmdA3K6U$^MG0fH?**jtS z=|GDLuc$E4AS0i%gWvS>Ks%7@m8+LUG`QL8=+_a=+(raO1UtIHC8qQR%)Iqtg5b3_ z*o5g<2gs%G@psC-EjfOcNH$Z|0v{J7n=M7Ra|DEnJ7(u|yZY#lqID)kQR{*yti%gJ zNd=f<+u%1w6A)oX1t)r1R5EOeV0{}< z%A;B11Xq(YmHVO5vgswpOn?n13V?Uz)V#};j8!v%Qm;wdr$-$~!&MR|kG3H4px2>)l4}6%^5ZZOMNxaT)1n6 zw%ZYM5pbYyx9Hc@?5t$<3(Woj4=fw0lesDoa#?}vNE`8fR3A!;y(7IAoF2vP6}=qn zPcYhej|sXHzjqjrMpPo3h{wq;zCpJCw2gfsQ=^qrW$3UR;+}N874ZiTK-m6ZTC__Z z?m+0?IUwa=E}=D^;&;^;uiTP5E(Y|~9S<)5SGP=-j69o66^dHJZ42;2;g29NCw)v1G^*5K9Nn|#`X^b5 zROo2snT37foF^JFf5e3ISSVK4R8G^Z#(H9vFkIZp7T(n%LHf z?!kQ>jF2Glz?ASOJHI5y?NxF=dFz+^G)Z8cDn+de*bb^6W&3sjshBp(KNYdzQ|~;A$C@7;O28SV z|7fS@1V=MIe>(M~4Sc5vE%R0&177)pJM+LHxq(Y9}mFifJC%Rztjm zGp>z*k_P|^<3bWVH^l*8^R4!yeZ0{7k*Oi0t!vXV{wd|i9C(x2C3_k=D= z@ltvs`B9~w4%{g7nEF4*c&OhDR5dMcYL>i#tun3df06u!0&E9?$_8IA1X7WsoReOFaYgqI1kzWTmb2GGgPd5YYA*VuvXFEKO51K;Y zSu5a&Z18|u=6lC2Ga8?mrh9?AhiUqI@S=9^XX;OKRh_Lbp!C7$B*kY&M|Tcz z+I6nk@SFmlgc7{}cQ){~^z!qhqAxzj`xSrVnX?!7k^YLT1+4Y_DnEGX zZ!2d;^jr4kFPb9S>m~>yF>xjB+253S#;)h_w#uE9jJh@j_ALwQHt=xSl+NlB&>QHlz1skE z51t>D+wb{2hKK#4iwSi#^RS>#W|-lezQhDQcckc_(9dJs$le%pjTOD25&86dL8t~Oixcj3D1sT zZviPpzDgWj=k{PQ8Y>XU&k{jXS#_TIDT?JJ3In6%m4Y7S=o|>aA<*3y7rEE zT&Q1lMgxxNJ5K19;Rgv4$_157Ou`|MGEP=_5MgGHYTG=TN=eZV+uLjl6FCqZa@e^a-B|D{A8o+k-Ul|a$sxg>#UK>fN+G0gBwQv_`N+p@JEAOSV~GvbV^OyT262mGd!`8SA44Lmro=79<}yn|G#2um`I z5mvbuO(y#VjBsLFUb$vXOwkhwl2n~J6fxNA*=$RHLRH3}V2jcDC__JyGLk2ei`;2> z11FFtH0%b6)$F+%6mWqJoJVIVxaMvUeb^xEj2>8+5KfbSD<%6)Ry1ic(4uI9?Akj` z(}ps7oH*2sp`sh(3W|A6FGM0=s`^pM=%YH?lN$WOf6KKZf$OOZTxqs6sJAMzyhnoO zniKf7Wym&uYpWBmK&ILJX6e9{*RGiljjmn@ZLS78Wa%!GoaY2?lu5D)y(lQy5r~Xp z#<(xwyFHxzwfZ=!7vkj#@O~-8i|xzLnd)kOh2JW?8PY1gt#;t#$tQGgJ~F!e8-4Y1 zaC3W*?2C6pjMk$4x(S`1VM_ndiu`_cVHeEQWB(OHHI=c5}G0H72OKVOP^8OKI&cUWr%Jys%|{Y-T3(NK25vw z;$^Z;3>N?L;(qZCChxdy1b{~Y%VlBLC&dAhA>-zjsq#acfWS8_Jo7=I6+31M#{)nM zf?c0OEjVb&C~g5U8OUjXrP!Q)Eb-!!G1tXUWgz&V0|tx?7=cdQ5QaLatU{*1aQ5qI zTQbt|{Pg^lGBLLIgf*&^5rgOCDtIzEHMRZkem-+*hAq}6?dX{)AYBsznVfm|`?FCh zMbeO9cIE}t*x3kl&a!IrpH(qD(P6z>G{Bb_mszIC&e(xnx@1+T6J~AAO@*bfwXwA^ z7?6{4Ylq4@xAd38=p3DkHskNmV9)Ra2$RsOkvT1x7g`o0i)#X8*B;492}ilfx#O8n zpNdiIu$`jI$abS*4c%zYdQ@gi7r%f7h0Tz1CZLlNFn{u>x%hO9$Tec804WH#Mv!Gq zfIrRmyt9Lc?ny#y^BbD>FB8cJ!Z-1=DbR(V{O-s+05)j#^`ULB_)3dy)W}k*&y$E{ zAW_OmN0BSDReNxBGylqH(=Gfo*XzmW#YtoM`-2_$<`ZWvwNGT!>(t`+{^GR6frc$~ zuK0a%^EwFR&&wfX8eQ$8V>CgshQgJpV1#0CqMfrnFz4j4&;JloA0^-^BUc8B0@VTf z?U;oK)SY_H;@RT`1gHk|bF6G+**4C<)E&#|mh9jy_+rW$DJNH}fXHwag3J|&kHk$w z>SqDy1G52qoiK(MAVpbV7op%RJt@9&e45^^#B8;5vMziYq$1O1mNcLy`ffAUtVy|5 z>Dozeb8#)bkZCb)E7NxsKELjnfwKW7d|&XI2NziI&4)s_sPL*U=2B&C;ASlb;~v)i z8a%3Ph(K*3kZg1fui)g`>^rVmYGoKxV9yR(m_i ztL$sH?wd^WQUW|CsQ!{Y)-DklX=fhXy6tkfw7HLm{deH{*80JWkZ7DQaB@b-blbH@ z?kYsySm3#FaAo~a&|}9=`=Zb^*_Csgi1&}^ZEk596=E+JXhi5f=@GH=XYLP z_voXNSt&ZZrE4v?nZy}~dN&`^UTBf0d`RIkOS z>##8d+m&>nw{q(oveq&TQ0mbQ5qwj5GkzKP2N8|bN}QSu?e~!6M_J+-Ik6PVnv&`d z8W+`Uyin@P>8WyatT5&bra8dR5r@N8lT{2JKBW2vIKE2uq;16&;2Z`avSc_x^zz^gpAD%CEq@bnb!1G|<9ReG1^yPU+`A94-5w5bM~q9fT)*fAY} zWkKYJYiCH|Nf0Dt1D1Q1Nu3D7FoJiJ9xp=S|J7p$4V-YZj!0Avw7 zZ#iP?2(3S%xpC>jsCYq+aOBsslJtS=+ZpP2I4tRjz0x(8Ky zIJi?{$a$`7^zy`sAZ<+_T*D+LLzXhLtTmZj(XFnh@JLh7sKbtR(;le9^`8h4pPPTu z#c%0w6ECkewGIn-w4*<#{wCxQ^rd982I3vq;HDMZU{PCW*QM0npe$9NhrKJf=p-7H z^?ZE>Qt%~SNtx5$t_c7}*SFMG@<}h-ml!Y4GW;8=S*m|s`cTRr&B07?c_QE1e=#cggntI6laQyxFr=dKN{LiyIH)k@57djZre`WZG`Z})Xtr-7g z_{v0CvTU5exd*wYA-?P8Ntudsww8BJ$<70;|sIxM}VnfvV`izwMY^G}-HG6v;w(JX&i*n)hdJtwnp)l?eAjhbS+OS!i5Xaqv|?rHne)yZDLZ?_6Z+ zAvDwXQ52-&F+caaS4(~!;ny~_7%z0iD}~y{P`Gf2gpp)B7iZvIJ=(@__47nRKLdDE zqIJjXb$m0j658@zjhp|UWOI}2EW_Gpa{{coqRuZR*81^)SiMw^?G4VyGaCb~rvRM_ zjrXxTa42DV5mG2jvIyU1JKU0?QrSK?@$5>1*bmH66<0mIem$T?MsLt2 z!6;}!lG^DUR-!-}DsxrxWDBTyssLjv46eA7^5d-x6`0*NYFK6#eR`DwIOveX*4($` z%PGVIs{9%9k$EMVZfrTTQcU->6tgk0y>8s?QqmqdNpO9E znzr4|AfN?=TF3;;hb@IIcYksQ2|d|FiuS`#&2!)$&8<7CcoZWFK6r>{|SUqT|sP@#nSrW1h$2{KBg@7H7e^ROP|ncPHj z1GLYL>McMHCw$dD)pIQA{+rw$eF=u1ghn+-yK>xDuCzGJeCyOIzm_~G@J9K&@eo~g zseX1A?OF)=0vCibKUPB-I43n>FMNG-nP6^=JaJ9G+ADtJL2z>c{O>F+7as&@SJ0p@nH2HB>f7JtMK2{Sq0| zr@4T@-o4YtUtKplwcZJKnd6Rx&o)>(qU1?Z$O);&IFKZ_IUj2JuDBOa&LPsyuW=+%I!-*vIW1R0XzU}3(xC@3mFNl|)O7@K>n zOu$+BFT~Bq-|6fR4Xtgj+`1~9C^8wW^XIn2*Z*B%iNB_+iAj;6(L8Qs7=n>e9GlJaRgvy1f^A2+gIhYJJ z@iRk(R5+%6vD-Vx0{llx!4LblQoN1eT(Ug z@rm~%#xAa>)oDr$%h}P-{t=2OW*{c8^{XzkPKO5~ujJ<+W2&3}XrnSN1SM7le?dR8kC3*1b07+6QuHL2CpAr8RZ9VZ^!2blU&jWMq%H*W{#Fil#63I2~nAA zUJS`$ka+g!H&htTt_%jGbTMPH#`puVGA_%bLAmgfJ=q&R9#zhgS>1&EQ{cz2?5@in z>-rdB;m?3VS7DTrMh*YyFI!H)XHK2tSlnGF%OeyM6cz%oj+K!TQTqyfpdMZd!hu6I%>;%S|$oY z@Z*OcB_L^X8F49|ke?69^>pw3UMc;U2-tqpv?xb3;VE?|<>H2`Md%Tba=&iQVMxU$ zf)e+HMqw^WEIWqB&&mbdCK}G!pp0=ZT(amIEYc6Dq2H^~$`ere3JbBpo34c!z=oRY zl4)S}Vf0I`KezeN^c;b~o**oW5eR`c+oxrnR%t$bh{kCb&sLLUGJbZuevUcwq#O=` z(#ByqWqtyubIX!YAzE&!*(4PX^9$g>XdoQ~@8idfT>mG{ibQvED~G^HkicMvzk z5=F`OseT!lTZkex5VSjtr`h``lc8u{&|(e4(XGF8;p2(TqAI29mfJ7HRvJpQBGbqo z6Pgtd;&UkB!)XL6C=@YUxqfSpu?R;2q@!YsqkmY&oDdvXTk|DnvCJ1T1^*<3`_XUB ze{4~Uf^^_k>Bd_q+z&$WD%95&wnH_LK(6yv-DujsZGkGyXs-}WqHgQ@*e~WvI-?$G zuY-xjhN_4#tDLo5ZJXR94eYWLv=wekxd)Zb2`#G_t)M*-Enj_S&0J8T z_5;vDtq%g73-{bKEH!edsu+WmW`vPX@1>n6<~0l~PI=|*Dg_6jYe6`F(C1LzezfX2 z^tCIx`TapJ_twF9)Xz6=TTH2SsaF%O-0N#qAH{s+Xk`+4II%ilrAg{;a>Sp{8kf_X z*oE3hqPGH$8a*RDOX<4;w6W&H#vh+^)&fK#ape7rC$|HBXLL{_8`HhXk3+c5B4&DO{*rol@;|Y4enm~dmfyY!KYCSh6 zJZGNAahDc2QXnM#o7K9MN03#EPv3>$!-y14Vta_bu`$AitrZ=~Sg7e@O)ft|zX@Sc zPbqD2wIl<|=4C;2aV4FsS)&BoOHD7+{A$$@ey_9U?A!;DM;8R;zQ@Y&i>Eor*~=Z6 zJ?#i&@F59=9RCHi#m|TbYMWhMT6O3}m0>Gj-R|A z(<7bIiI0T6>0%2Li6aX(!$ZZAg>JeoISdy##{eH{{?hHjvky;M1pQ`OPf~T65BeKa zqIQ~9j)L4t7Q`XXl=pMI!|G{_V`EDzE=o7Q@=(W9_k53YH=^32-da$L4!kPB=AbyY zAj`_(EMn?OdL6PfHNix6KAy1H?!#?rmE4AUwk#W6x;9Bae^(mPodY}Bqy@#++uIRH zhq84@6bXHv!`bf^s0y;QU8X2lb1RYzH@Eo04oeTWN+~oT$}d`^5oO%GW=7*_{m9I} z(r!PNObP4g+f!I^R~Y(p$2aUR=KE~8{|N|GMx!aKc+&lslK@F~PV6za0{gK;4EcPn zTP0d9eC2YQc;ktt!_uRh^1qzl_rHcf{cwrjl&F*LJ>7NSxE_4vjXbm`ZW zx$D88_GW@sEwSEUzV?QeoC!Z*9b%uB92a2iSS*#CnXPgwhc{2*-_`iYE_ynEQJfu# zWb-A|yuUtAY0=iR-w!HVQr(NUI0c7)GZHx>?(@d6Qbt`BtJyd&BKy#P@IJ_$d_58I z9$(}hFMPMYv$fp+M*pj$he%YvWP41)({#Wh)$FlP2Od>5A_dd3;K$Q$cwDcDwp+4u zYyNhd@F$cx#;PG7;jj30hcxtLQOyh!;&vA9dfWtPr2H%5795^?LbEl zX}{-RVFH1WJ)XbU`ZJ`VW|$GhdrGT&Dwb_ED5Vmsn%(t2>|n5gF5dg3z)KU`0mKe3 zGo)36MT4_lr}Fgf-~dIH>c3qq3c_Of#f<#q)+j+Nh)DUx02oIYQvu4JyH>qp0al|P z@arDV?ZwK7E!|_YM57LJZ!ONyw<6mYSWh+}Lgl>Htn+O{`sU)iW%`(j<`>cQ@Tlnj zqp(?+{0D6Q&l(K@%f`<7PbQU2NI?hO)YJJVkwOi~H!Ad(#?Y|%OWZ&2__Q)T64^X9 zd2vLd*g*}GgnU1H*HH8Eb_rfWjWC+0z0duNNetPFJ@5+2UxkeFJTk-2_x9pw?{@@deX)khPZ6ZFP`QC`hq{}N*a!ZMc$sdE^SU;@mv+vnbYH)2gR?KNt9JZSAZDKHIdXaKbCnq>xgUYw8*!3HDcVttOWu@A9aPLS z@dpl-Ne~xt>bOF;AXK%d<6kk+tOi|wv&x7Vu~Q$D1vMtSnmd&|><>hXZ-nv7zi#9l zI<>?pAsYwChrl@D{r*Q|A|vqv=ZkU1*B-e7;(PH;Oe+q`8DbZp2EHGS_nP`Ozq6!Z z&hdmaThzvi8c}K)5_yx5&&V8patYWJgb{S+Y9=YXzm}xs*o~4F>pzMp9kkK9Z@9<_ zW#qH))_o}r2<3ZUzs`dF7Z>!%KUhnzFGJS&B5ch_+=bPt7}4oD zN&jg!2|T>a$_;R}EIS=;N(S%_$n!hT9L}Rlc4ECZ)fxgm(R1yPSoXsIkvT1@e2tBU zYAMIY4i&T@gb6JypT&N!IOwh^c?{M&Rfj$PMA!S5 zYmbBSa)M%oeLlCqEFcg&pIXjjwowabpwP3Tv;ORzRXY58x)uvB*VdCaI`vxLR=_1E z6H7*m{6-yEhqa?)I?i-Di3fobg(1IXXfY$ zt!b(}PFQLHZ&^xQ_7LUyCg68R$c~`MA)1i%B)1-{y;`-CpQ`PYS$=D1z~VN?zfI`w zDOO8TO}R793i1_ENNH7_yTTit>$Y`I455G!Z+-(dWgVArAO)SJZDd`)S{L&q=rAW_ zK9F*qIF3Im&5Ls@)jO1d@|VeSr+@e68HBvdhY==v#iW)JMmRNN*{7KnK%&BdZNJuW z*G#>aXR(QniXsga^WmD!7~5cGpcdjqt-!`C2fEg-O$LPF? zOD_Y0@!~cYoMc-v;f55QKMA*3TX>UT$F1O#D)79xdbEt;2E#J7M-VlYd>iYdW|#@NCF5g;+w7Sz+oj!9dK8`0pfR zkbwE(o2TgBrF7E2+K8_kot!VKDk9)_hT==^ zH^*q$gZII&B9Lacxl3^H!%X(THMIF3BNG_{QNT{iG~aVLt8k%((=AlT3=y~#q&=MshyCCk(KJ?=Qd>Fl0m`hiRf5S;a?6(U*P~&{3H5Tae;- z$lO;#r!nlU?!%Sw&&Zg_39h)rT-XAU-7*UwpU~o2AXEM&wI30i<_)!>=F?}jFv2~B ziH(Fw`qi`bk})?>s+|+8gZW53?xs|`OXmQ-JecnL zI$2hrAR~YCOWrErH$0E|Esf&8H;R_~QOP%&K0FJTP>c~eGkaDY5bR-F2eDttyU63t zTIk)w*#;pncH^$+-m=<;nmfYnVUz!5&pcF1mzJ19n{XN$>n5W-5Hhu$+wBND8P%N| zVbxFTDq25R#u%J>ZZq|2a=8G$^uXB=pWu2bLJ=g2;kc32j-$|c{CEyJbsQ!>csvH{e7!~0g_UR|Y1Hb-bdZ7m=5FlJ1%r;Qxw zF(2Y9?e!B65{=D&%Zyn1-(|;$h+Hn^tSW2M)6sOB2aJQD0pKA9v^Rlvlju_u@ccO1 zb(~_m;wW%{yoN*hV#lS;{=9te&dny!K&&MQCu~nF>ACZtTZ(?1j0@g~0Te8x$4U7# z_d=cEi`YXKTxwB+)bJzJcKvu{ZAX5JZV_IryA-QgPi#m`!) zFUrr8mBAknD_eQFmZX9FTo+;pU^^-~-sDP%6sV^oUt?1yAHj)M_U7jiB$fegv2kG& z%cW@L%JhoP^ok_D3((f{jf160#!|M3+wZpINY77yatRI0b+6R{-0l@%NEe0J zD~!d!6Nbx6QdC5RdPfDOI>+*+W*O~~n%a>o^EMW{%#5Vrfc37tk;73H|5&U}+cs}S zt(QL_NSyJjpm`U%Xb+}I+eSg9puVbTUm2_|5{NP|E$Rt+ zqE3hd4cRMf6v#kunA^nd)~(kr%^-M#y-h71^b*(Su815!I$id$hKEZ!(e|6lr8w-N z?4iO9G-eFkR_Z@|2J>8O(U_g^qomh>HUY>}-b?PmY(`%q>%pRte(%@eA-Z4fL|12{ zcNfrhG-y87oW7spxpg?{%43HJ7Vh61m$DXBQz>}o#Q{hn%mP^ov*OjMfVGiUlOIO# zf@GjvORa@$*sTb%XO-|ZKQl?kuV>|^0T)s zF}rM4(EG!yZM}o$a+aa`(aiVjtx=#bm#zC>c&g{?-sm|NoAf*2((8m@X#p*~4*q}` z93Dhbp9UCcZUV;@Yfz%vQ>$4M5*9ENY{@X!-?WfcLXGFpfEl0UyBJo)-COH5Y0jzE z247VfiM2(|X5OIyVfkbYuL_v=zomEwj z$yhF&;#X3VKd+>QvHaguVp+ocA`7m^f+ghy1SDW6##Do-YTJFcttSPHc9M5R8J*6%3m zMF5alItDvTKgI@N2EgA&b13qe|Ez&XPSkwI*&oJY#wFN4g!)jyu-*CP;5OFF>PqxT zi>;p@+B@v|?TQ>JWk!jd)%46n`*RlTEzwO%1A@g#R46(qW*wu^Q;uU?Nt#2JvIh5} zfch0CT&(dvseTU1j7&UG3qaCWt296l8v@+nAvL}bgvQ>k7y?&%7)fJc`-NM|5+nB# z{u^(!c$PR8(fh&}PoG!qlSyOrt{8AIlG6|1Ov72U$8Hz#)B6RK3^Lx?7*8g3(eNt2^V@B{BOMzbjLWt@NJffDxp&RZNL>tX4f^8k`s z2?PW$Zi0|WY8N?VAeU%mB5e@T3N^7X^DkcTun~!YDx9l;IF^Wb#Vx2`&lL_2p)po( z5Y%Zi`F1J7S&wEc^&mqA3zocSra%5(0TTGwBOtNoyIQ1)^Oe0~@8Q>fyB&HL`$(Oy z)t9J)Au4TDdb2{_=2k_>IVx0HDgbHS^wlDq^45-@({{3eE6lgV`1hnMV4A)>(@8ll zW;YlRutb~6QD=7@HDKLL4E5J+lL?KjP+(;~RH4UdN2z>WEpkQ<@)HbkawbP?d=FU; z3qfo}}C+~lK5IWMvJrbO{z_$vcZe(i zQ@z6;JTwBgJeun-*Hi1Hf-qsY5Pj$lWv&(B=9y4Kbi}AopmyM{0<&d_k#7`tJbGxN zJ=HbDwgZ*oNdPnX+?y@M^gzH#Z_^;bD{`YVd=;jZ>CM%)JO;M~xS?^P2}hg3k`k}j zu&Yj&|7r%`z_O!k7dD@-mHKEyP@aNLrjRV2>M*9@2K#VX&Sn#v-(I)A7^Pj7KUTHQ z`fX0W*bBj|YmQ3mBXLAci#s2N9{Crf2=iI5-EMqb#jk-oCpJXfZ6HDlKKNAWqrLiR zS1cxxzwUMXfxu*vdXRX7G{&ZNHhQ}(iPFGaiMPmaWY7W#3`8o*Xb6JzCvUa#ck4d@ zOYASeR6D^NKq0u2gtZ{W00L8k)O=QC^xqw!2;WmztI}eZf<;tzB=O!X+w5{E06NtB zSFJ5dvmHW)6(>(0tEETa4;VSkofS)qU+jQCE*|MfXN8`^zfZMBMA&%(k+2gWgSHBf zZhr0jDX@ax$?nY#h}}-5b3vGh6%i|x(CP`#7yYnFysfuqvk~@_w&~vD{BuH>01Y8V zitM=(kHv-c4ZihY0{`DBC|mN!J{1xt_y0-FSlHQ_|2dUtfZFR0=u*i3`SmAKUeZdQ zT3SY=aAW%T3DTj=iAmZ4%oETx+FfZq(09)~mY4~RSc~N3Nauolf@%iObz3E8!E(C# zN2&(1CBcd!l@fr zX>=lFWbc)C0=sYQKS!qQthG=e1g;FSHH=76=O4;|9dVFe5Vaq2Nupt#(a<60-KjL- zy_gb;K$aX;viu#ni5Ku5S82At7TmbRT{+Z(`$m)8W0R^5LF8jaFiCj#X-b_FnX=X( z#5lO-6gp^usKQN2@NzCeG#gdKrD4PBDDmM?8v9O8%rWtsGQlr9hMl)<+uu$Jl{9a` z`Z|4m?c4-}{4bPDk~1wF-XvaW5yKM#FEOedKyL=G@Uer`E4Uag?=}BmH3dV5UJ?&V zrK}k^tID@HS$6M6AA1k(e-xS_0Q+s@%3tC5Ta8Prf^u)l#0W5I{p$a&C25UWk=vKj}8h;`5e zB#6zZMrv!mwrbw$3<2jN91!L94A`Zdd)`Z*H4s77V7H_wkK&WAO9GHd0*9e%7i! z^|{))FU~LLI<`dOBHEPc4*_eoRVrTr9$mm*7e!wi_Uwk0adiuS((xV>)&~rSXuGX+ zGRb;+?dipHGDXcyl@&gSol@2pJVdYE!OG?*$Bc=cx+=1IQ-9_x9MSOQUiJphF%2L} ziQJCn*%3zdaq{5;bQoKrAc(!5fdFq zE5V*+h+Nj9$@{hFC{~rhp4{&rE3rcMhW7Zu?vC!gxgYaW>&@=4jeWgJz)z}i;~Hpg zPuA&t%&PNtC4gbT-({OuMvdNIo*zwIAJMB+x1&(_(_Lb=U#Ee|*j(S{Q+AVHUQW!8 z%!GBV$Jviw{9kW(I6}|BE&H}~p}74BB%+Vi!_~9R11>Gc(dhfdmfpO&(c>9Hf!D*A zF{Bfc=kH&2`5)x?axW8qYkc;ZXbi=_Ee%v^?>ZV{SYB-jRR!-=f6Sv^nOlG&?c*g4 z9t|jwU?poY_hG1HN4(k_S@sQv=smeV@$pYOzVp5lz-=b&I@;2i&oTMAHg01GQSD@!^kFE|yj*3&{+|2&OT z(Fp;y#@RChd1G_ay5+9}G$C<2geSt)z@|a4o|7jWCcfZwhwHK8renaAy!&O{C!=>7 z|G9xic9yrk)G-YswscK7L z5+Hd&4CF;XFqYd?CqZF3kA$I^69|n@PryJv_d%FF-5MHRtJ#@>6L@LV*v7CRe4tbI zTN{B_N5bWO>hd5|1<^eS*dI@b4WQsP`tk(Cjsk()V0QSEB6XNRiW|x{w+}uNDy&g1 zxOc8iyo@L^Y%osGM(1FVt)ePv=}$7HpTB4h>Q{`jxj6d&-c8N@{=4y5pY*lVGtg~K zQpSmB3<7b2_)3=s#6dPT0rvpQ^ywZB0C#n1eC0#XYKRS4>|-?sYX_;7H=q|5W`039 zLU^yg`lwdy2Ucz^jKLh-wzchVYkp^jAV9!F=rj>GyLJz=M|2OjHaQFb__WnFC!i+) zy|DXE&}--YR6B-rd+ic&15Uwz>YUm|dOjz`VRW zK>RK)1iuxA`b<{7-8I?6+E?1aA6B(jR#reAzrX!}U+%0QT-Y*Du2Ru`lu`tyXU4aj zcHcBFa`snedv_zZ+t1&%C&0XKLSN!p0;{-g?rSSXY^&^~JlM+LGlVZRh1>JPhgv^r`R7`vE3Xt3ZXtb>2d7fVa+~e_a?PU~iSzey_=8uCRk%ixtoekJ@~5=YEUc<n43?KfuJeB@p~Be;GwE#k)VD3g8S;5WlDc ziamNs1YyhBwstVZ)S+|AlriwZ!jN&(_=;QXhaT5d!q-c1PX zbNr{hi4chN(b{9Tkl` zJQ6SzQbwK878)@;Erk7cqO{9@UF)~J_5c>Fw!?C*aZhwWxQZm5)k=|3Nt+M=4FZ40 z%-_tCfdhW!kbpCzBj+7tx&~EC%!hc~Ap|bz8h)|ztqj{4Q3@%h*`-Y>hwLyo`0^7E zxN{tp4*f|J4!9`sUO;qC_^D47qhYbHO17(!Hk%0wq$~4ooiVW#jf+r23Lq4sMta=; zhmga@^~)iGdp1kq>9=D=g9v%Ki6;6{5hAG3X-hb&RbJaxj{f2t{Wz=(n^aEb%K~JDAJVVXc7!>U4;X2!@0! zhxI`e;Xc^$@FG!<&W{!$D*j2`&T(lEkdnCFmoB2~vGmxyAv2LOh2)K4eP$BYOO zAsi4$DwqDG#u>~mw?M+)=zFVR2QY7=(2(Ls<7XswBp44zN{W4=vqT2t6!_0H;N1l5ttbvpbXRzx(g}hSU$j`!~vA- z=WzadB80_}YwuCswY`#t!qB5xy}*cr#)_6f8tFR z{*e4A=gX9qzc$ml+S894QQ)k6K~*UkKi zez<5pRvy3g+wM1ap--+L5_k>$7U&$yb`kYnZ=0wla0Yptrcz^E5O%(h)n;trAD|k| z-&0e}AK$eXC+pX89rZ6+NjqeCrCNR&>dX1`W!?K~HCLlMAnNAtT)a3Ze7z|uB%1J* zs+uWwK6|->ubGCQ4QmWax4(ZJM)ha{u^*Ev>Tn*o)YlntB=-DxsCa{UufY2L!i+V5 z@PSMy)j}T3aX2`rm{rHx(5ew}F!qa!L>?ZAapwOxd{2_a*Pe3~`LYfDq-?yMdk?^> zrOwa6Ejq!+1U6LItcP!&Jzt*wf{#Uqku&NPs@G)~kBikh*8X#cC}_aOy`LJam_|nz zig+2;k;Q9Ss)3S0cl|u+@x(wEYfq(wRcpmK2%+jHOL-rgR@-==aCho9aST0ZW_^8z z#>hsQ7AF``{>vA(Sw}WoEM8RV#sXQCry|pNdsDDV890tpSz)gw6H>ar-W=iugVXAk zFZKNBpsL!`2dtwE1S&;Sh2Z`u(b)HHN0E=AL+;({O-PLBV~%W#iW@HP&+u7eVEzqm zOEc-5xSp3#fB4Qfj29|Y}rGu*R}rI zI70?llA;??&#h~TLWSeMj~0Or^5xd=`YKdJZYOWpJ&}Ult4*RxAWoFta_f7RCk*kA zsR<}>ZVglph5ue+lIxTbji1qIW9FW$(19_o2hQ_n`>(!W_`_e$mmm}4%#1Byh>ML+ z`2=cxuH*&z?TsRL6B}B5Yk&0M=urYZ#3xQhn~&*)+{^crLkN4F=hzYd67v)SimDaH zRmdB+neD9#=%a{yZRF_ymQSy7NtSN4z_z|NOI9_7iCC?ngA~KZ=AbO2N)V7?D{Q7! z;4#b8$?=%sQDhEEZ{J~}Oaf*tw-^u^k<8`1Hr>DCgR*LB4v1l`a%2*)#G7zti^cPMQG>IJx#Z-S_!Qf;WA# z>Fan~BhvYZjH_0BiKu+!Pj9K!^AV4&o&|~Ax&w`HaO3W9`El9}^o7bOLFwZK>$@w| z5GP=Kursl@_=5wuvz4}US$ddCkAC|kq*m)9NOK(F>_eg6^A+pnI%O9BExrvLO2l`1 z(Wfw0XzW&h^S~t%(JvV3EtNU^t`SPT*fo-Ug+rqATCCV$A(6MKO=in-Za=574oUTG zRY_MF_i=41aOJ-gWA$jzYsf0)o1Pbjc11whIV*94rv&>an3vfL>s;yDF-$-cG1k!^uI3$@!)nqkM!#>LaRX?F zTQCk*_@a3sm^m$0x;@tG(&poCSn9{3ZNmA6vg1K3 zDBFH>?KSpIgM*Oy+p9tN+yT=&Gp|m2aE_yMCHY*^=J-yQ{TIG--%6>Jo@dWLVTNDo z1)g_4?VQ|%^Mey2(r3Hr%ZW+>!V-Ml6g(9k%OJdy_WH%xtVJj$>$G9iq3fRIwmRnGk#LUY?h@uo7ht5iw$=k!7g`-<7VclP zx14n2XKKHxzk;%vcdj;0Qd(?f4f_yB1O!BUtbwi7*b6C)H8GgOspwD!nkYL*0uTwy zKOf2Bm8Rc5rBUa0;!By949|c;N92ZVeZnZ?RVODSE_yMu|B8I@It|r*v*Ntd6PqyG z=ahEci|Bg24FbjcdISpH)CdTcZmsn7QqyrnYsqxi77U{^G)=du@j@9Mb>0tnyG1!4 zYGkB0&RQoC1bG_NtKd(V;$*T6^`cfaOxRK-K%Hev4`fE?>rj_xuXcgY{-m^++182> zvggdctgv|EqC;6=*PeT-mvFhW42t?>!S)Sm%Y?k(e;NukH&Ei0|iXhGtMb1v-Tsp9yooM`(m&xPfxL?cEe-Z~5-P@lC+>_0MvqB5L-LdYv+xa6~| z`VAE6lK#rpZraXzqxwLl5NLhum6NR!|C2KHFC^+g$8J^ALg)dslX}rc1Pp$bQ2OMy z{1VgCXFkev7>xFw97;7WP#qm0nroqjo4MmE?{5ZHE%^O8+A}GIH(ApjYb9x&0ZNa) z{_BlDWOkEa-SaT~{lcc9(pR2I(Cpc@pES)r-4_viMFkUG)XhL+WUpI7-a~YG*$nEl zC(G0BBqvwx{!ONz#UmZbjA~UQ&@!)kQl-k4wm3&qtmdyfd@NMQvnv zC$gRJVN3w#x9WIx$eO|z3QXQ}C#DmVvXtlt6A_!s92)__mdsx1=e&u2sB&6?1D{{; zSZOfD23$DvS35$MuT6i;bIZEZPIOD1jZSmxp4w0e=_vAaoN6>$T#*nW__v?DV!Dli%7>A+9t z1X~uAnz{ej8C3W6i$=A`&G5O%Y++bm>(o1N0DD`UIEq-+>H#Nk1IoCHGy4)fhH%e0 zPqQo9ctQsw|L9jqx;HZDO(X}@v>B16ph9<=fkx<&FehPbkYNzuHiyH<-R~O0;TX!#l`d@d# zU0;hn&wyL63<@X&o1(o#UT`waoC5H=Ka=z8b*kgooVB?j?!RT2lv%m@(2h0(w67x@ zU*hmeu1j%VD#=xfEPe=LZ23H;eB~9Ff~dy=Bc(CpG8#-<#5|Ss-%nP3vMTEj-ie zf|AZWZpw3V1TM>zRvh+;#UToHVCuQ#*X`2!-u|e=?C&6s~kV%jxuwE6y0IA7)oGsL)nf#N@FT)rB7k&(Q)IwDQ$~ag$ z;vg2I!Vgh++X;7g=YYd)qDDjg@7r|){3fKx2UzOc}=`Em>HAS&@Y zU6O)u1ct}z0`B)RrM1tF&EeiP)ykY@#&Kn|#{Qq2w)@4irZf4+Y`Ah)K(pcCq-0SP?-V|w zUqk`eR-VMM`VCoLsD7{2J4V!z^6rYtKOA~gq{I(egXg>l-?y=mjuz|8ku|7E)rWn( zS|Y|5Wgz5yNzr1bSnD=FZMsI2)&CR zQdF2lt1jVdwqKJ;dM{|9-rL{hJ9FYteU{+_YuT@<_2)7-Ze8yEjwSCPjiqBcf38L* zz!2{M9-lM4fGSB$OEH72dF9B3+|Ku|{<4G|KOT@#RjAwjLj)k+ZkedVX3D*(>dpJ* zYCzaW?>i_d{dHYnVW%Pzm%+DRtm&$y7^{{?C(FCWTs;;F!O&Ti0>Pu4O zGZNuQW~ZIhma_Cqr9m(Gj+o7wsn;|%9rI&rgE1Py0nZyyh)*m4$DT<)zF#{s#XvVX z9f!+n%q#1GtCQ$Msh#Pre-xG+o|{|9cBTadpM^y5Y-yd}0o$546lXFyN>fnh{UN=; znkWEGyJe=FA&?)uBX8rc#2c}0g*fCM!qO0bi87VmvWvuuPhZGri#i)HnKRsB1j{bP zv-lAmh%8jNF(xQh()sSa-8`*irdF7BxXv@T}j^`ip-C!I>q50z4tdnBJsziz3YyP6B_+}?~VTgEmKN4Dk- z@FJ+c2yWrjQezl1ot}w=HCrL5+WDM_rIFNSZKbP;5gNtur=-F0q=_rGOm-24^ay8j zC|k-qUYtWuykPxWNq}lg#7#e(eT476C5XSHzdJpe>Mm}X>c@AevSHwq{0W2xY|$45 z$*|EU2JesxzLr1XQ_iTWB>u+4c>iV^s2ZCLIh}tOwOG!WkI0@+Pd-icu&*f_1c4u5C}q!$)7lDHLQfX+4E@U+w%%`iqQLra^s_50T zcTo~Ax3_#eAJ!3`KF-QA=Ifxk-pF5LaJMZAST0sY*3@E+YYLQw79t|j(I9FC{=p=o z&obzIAjb2PdG$nmC!OmRzQ2KQWWdFEs!V ziShJ9owz)iMj-#n39v=a&rVG76oWi?F+5SbUgV>lt?>fs&$a&Yi$LL3OP+-4`hdA3 zFsu>4vSXbo5J&quUiDZZ(qAtIZ;b*LnxRNqS3GiEgu_WVPa2M*KEgXNI9JeqY}Nr6 zX0HszbDdf~{37*5%EJQO94DNa`9;UNLJMnfz3eh{!lSzgTt!R!r|Dm?|3)aQIZQZbmeN6A#=QgArq@YZzH%_Jh zhC!-c&GF#wy&i}7F^GN8cBTWjdSV8@7WN&&G8jvrAWsVOx5!z2W8~%$AH0VhT;mum<&_p#%T!}uD59U zIpijRp*N;tV~|PVcz#`O!rQqRrK!Jr4-5AuORRg!$u-(D1UPT)Puxr$z9Bl2eHh`J zL+HNA4t?IzLgTN|iFlkpOQQ9T@}~!P-w54zF-jk^N=e}3(g1MSK`ahgZ;*r~v z-G`rKG5cJkzkb5K=$pKxT>I}AjpWc@w6nmWxvsbFMEofg51bz8*^k4vt9TI`vyAO> zfM9+sZF3|_GDZ=+NU;7ZQDR7&I$o8h>OSNkuoWT54pckZkBwJ`3-b}7fr*0ZVhUF( zSKrnrHe|x9nfH#xrFK)FF_{zOR=EB(1*y0IY^*Ik3DxeD*nlZdFMr>Y^D(O>_DcrW zknam--F6^q4K=b?6*;L!ChKPJvE4d-A`NK&$n9l&4r;AM!EB>;McEYir;~o|@vK2G z8Dx>c2wcZd)f^$il8@1a*VlB#=NBmD;bgCiWiRx-2(`# z^9k>F*B69r868Pd@TWN*1+rMrtt;g!Z%w{C(v3zH8IGIM{&)+W&gg9<_Uj4T@M1C( zG;4~5pCLl}?t5E_y74g@?kvi2DrqojVcKY(3nV(2VQa0^xbXysb+j~b546gwb~(?d zljzthLgDF955g2ksp3Mlls;%Fb2jyo#0mT1C=2h3C;i1d2~8!k;$hZBjY@l=u_C_a zJ81e*Au>T80y&Z_>|j%VRq{i^_yLwd5MBAbnyDNo6Ox5TldpM8f}hP3?Qv`2RS7i^ z9~ha(O3RlnTE6}a%WJC>A6TzW47IU)dtg>#g3m7S3ZGlBu>}zM(!3 z=>1+1d>k$sQ!06hKQ?o=v5-hW#D*XIp)kh5fR5&0Y<+C*QoB^Ool^{6(^pwRt=4Jx zeY6q5TyoiSSNbD;JE?_@jOfo%qk8zk2J~*1(qfJ`9T2a1y;KEUjJ)SIgRd4KQlh8P zd6@!P`k3XOwq!#BmoG4)p23N$w!Ya4NDnHCCjmG~61Pa^Q5CBr7OL??1q-Mq0qGod z&NXGY1P`Xe^00iEOq6y>P7Uh;Nxx+_EL9NpAQtz_F&dD%KrlXA$cW|lzIe>7fuxlx zCC3g_Ledo$MO@Hge?Ie3DNtUw*58k^*`A|OhR}kfCi@Y>z1GY^#LyzEB5nx#H&8@=Hv%Ex0e7qvj_u-B$QI`EQ28KxDVq9-3|r-N{m;So!T496t50DN?(OTMUS z`-D8(ve(Hl9RS!TJ54I)J3m={pB~2tg4V<9{Cm-{GIK^fSm_C;Ic!pzJl>CT$ZGzT z{S;&6=zHb5Ys=`M9V>xSpfLCugmQ1iT?$k*>*a-3|JTIOCOddM2-2(U#Yn7R4o~o! zw$kuZG*aB7(b~%0B^-gkzqGvh*ElER*f=KpwB^G^@$K=`^)K&9yh$!I^DAa*lojsmXPaEPy*o$eKe#x#RaV4YKUqKo-oNv5>E zAY0Qh%Q=K5d(2uxF_W2c?gOFz61du0rH_voavv*$B#EbBy}KnD)!Et@a>hF6&#yXJ zmHQ!Aw&mGnPZXW-E!Sw%oBZyRL!yKHMWpB6TqAPIn=?k;&JDzvsurE1H6kua_PMjNzAwp!>OBqP{`j=6^w&9b=(cjR zhdo_4umw&F@Z6J6$TwFkM#84gMSQC9s_UEmM=iw#L`^1c7w2qPq_CYPK1DSj(BD3;(gu-#w zs$|y<_|#>jN-te{$7T4N$m+24M}PY*O(k{UnVn-2{FT=HL3dCw!HRL(r-@xwCD}zq z7VYQW3G6T3?eIi9z7*9!@uT$~4Lre#ILI>o+i7X3yz;jyarg_k@Km8LJyph*W5@H_ zBOSwHRewGP3s{UjpOf&$K0Ee}$15e<=LU32AV!A!Tjv`^jGHf>bPAHV@{2NqMZ{{n z?73D4DECmPd@?QTab&Yv=MEw4vO;G^i6fjq6O&I0CHKl721g|mP|a1b4N$6>0wq5V zgzi{M&6JD;rIr>X&uVF3R{nJeMVb$PvnVpFA)+PxN9^L0yS;>wka^lr629y}8_bDl zU|~&d$q@jQr+NsKO6{foDcoxPw?U*YqIj7g`+aJjZ6&3=&`$%{a$x=h>=nv=SxTYu zimwobo&>M00OQecHkB*td+dB>Hd6A7mIGi((rwt{MHl}IF z^3$(6@uoC0ww*nAsP^fA46hr5!?*=?iTea6PhUPF zhsar%)v-X$nnhS}ima=Tr!=VuW>5l=67>6<8R4A^|1Vd=`2a-2ycZ9LQHn!5_-t*7 zW53iXJR?sqCtG)%q~V^HKh=ZmK;)|@p)moZ-Ar0Hfdc;!MpU@mA;OQw1HJBcZTUW4 zS=}sZ5o#`4NG>rj?(9A0+lB}NGp-&8A~p8l+DCHJ5$0L3+T@_l zH;dTMu%fu|hIbx6y`?hwlhJ45wU`U60257?Zzl62*KbNtd*k+%Wf165U(PeTRl=-D zXNIan;|iJ^-JHe5Xm)SwVugi%NZ8{N@>DP>CGo1-u2;kpjh$$xp%PfITy_-%yi0;1 zx-MVqw6>m?;f{g@5G*ToAe7bs;JQYbM6H1pHIb#AZ1|TDRXi$1GPa61F64D#Zf+| zg6#${du)K>!Hgh+y6qZG2HNk6$vSk!d>n^ zh^dmc39ARnm=wwA%Hwk&d5(|ri*N0LBo)GZW5{wGn_j3B6@OU^@rIhKT2<$Zi10(E zLl;Cc$)dKwK}jE@BEg6vZC67Zcp61B8K>;bZ@8yXg`9TCFO8;&Ek2bFJ3bDRDl=J` ztD|qw-);XDr^z7r19cL6W&~L6Xw%rw(IZ)`k?~0WX6FjbAu5Z|$2SA8r;TSmir-bL zYqW{~CLc>`J=RAwbCCW1H}09?uOFi()KzA`FUG^IX`21ifqOb&19T|NcaWlyMdtjqpl{zl z-t70IU^JWOk@^MFO1JIl719XSE$q+NQ*!|4(%e26!p!t4&6aeF)FftR_s)@^jMC%98yc zZ1RC}&{+(&w~=t@BarfzAJ5LHM>>?u>501pqsCi@duF9hzp*^A*)^9#VMd(CGL?9r zW7Cr#i!Au06h5g?w&>VYA|?+{y(gj?c z*TT%?9kU18CW$%NqtkMaU{61T5|T#9lE4KgKIL5>LWS1$-%2#D{C)Dr6f`_)!|G%9 zSG<*~K&(Z9DNX4S0Os+S-wvD@(5)_?#Cv~b3tB~FWMBk7i}CDrE)Y6%z0W6#ctUdj zib=rd2PTbxWNdQOkh3pr=AupsAE`U-5NG_Y!H#+aKL@u4V@%a!dVr2D>?(ILC{UG} zd6k82nYOnIIK4-vb*%7!%!@Y^+8_$bO)Jk^l8wszInTAXpSn^<|C~`YqVgrD{6LD; zUJZv0o!jf56MM}lO=gUNqjNbvW)1rsfBj-M16(vS$-B8ewmhg&7{83CYmZSg5<&>P z{7ig5s7|ZH-xO9+-|}EAV8K`vYIUP|8Kv~sv&}X`p*}dE=4$dOQ9U9gPwj`&W89V) zZgG=TFZ~$5a(0952KdfvkV!`Sp4&t@a5W*Fc~T4p93p|?@n06lT?T#|=BPlK~sv7$Du{$__61Nsk!qd8P)NbsnG z2Piv|Rtjoq+PVDVacH5H9^gVx>^$Ilg!m5j2BYZ6%{Si_or0unEtp{Pb+ zl^>QQOsAa?I@`NmFgX0^MMtE0G_VYyJNiI>Tbe{qm5!cBQQIgmbNd%XnpmP<~s4T zaaO?Xuc@rA>c_b>UWE&DPhpcS;OM&MQcubIK|jY{(}Rp$qOY?S zfc%+_*DdHv4P+&LXP0Y`IE`{p2qVlJWsTA+8b?C!Dl$6MQae3+ zislw<0fgOC*khHoZ2BWL+hgpHEk!%R9b{b1WBx%m8K4~D2`L=Dy1J(BEtbxm^Pl@> zZ7LT3;xqfP?=82-of34r9gqfI(= zIw*2$I1AV&^mm;E`+rtVwEFOXrL%skoaqHqU|6m6Kf%gzzt!)O3{Wt#)|XJQGD$E1 zp!ItvDhn8Z^}o*={{s8s1>@lQF4Ut!;bCF_AC-FS>>Ql`ol{I#*8!iW;k$Y1>F6CS z!?r`8Q6P7mOCy^BpNn*m5$Ob>E?>jpoH^B+A+SQqJ$h@(UYl+0!4UwnUZ_P;+0#)k z<;K8hWvoYPZtP_&Z>-%9L0`r2OF1;5X?GIq2al&5DSM2?>~a-=p!Xq2c^WAMYc>HO zIw*H74X1&&3Y>*pP!S%)$mYGQhfIfq=Ci^%W$Bab7dF-+r8$`m2yx7lr2a#W zi+}+TfeSYkcAPRN6}GV!!7>&vC?5`^!|(v$0BA!|s_0V!?f0|_+V`LbB7fM%3RKKu zSq3_Wk$arLktdQu<|{~B!OSLzYyULn_%NQwhzsIJ02=WfyMi9%fSBXxbJK!yI6A`t zz#z&*jCKzgf&&2yq-L<|r3feh0tKEwMig{Of%n2EF?321{mK%z;KA!HSP&p+F%6-h zJUEsBXfabGo&^0q6}ca>Dv^w`1&|jkkjp8nB_PyIxC?Ms^%#wJ zCKwCu8$kyK+*HW?Dzsw=XnZ1!0=J`7Eyft_6DTq*&lB!qjv91Qfpk?KD1RS(K$J6m zARG6s(rgIUtrAq1qH~}OCpVI(6%YZaQmNxcu8!?gVS7=(4%fy_xM zKyyf&F;uBAyeAGkObH0l$g3bb+9|kB-=H&eW&SneTS17hu?DZx?dLP}Vet!1ABUBb zc7owHkfs<{8E1%xkY_yl)q?Zg^)?=e5Np01Ba9u7S8*r>_uf{Y9m}ot!eS}{22Bc_ z!}0F;RU3WN%lwDdlgP6^&joI*f9SO=U&VmY9ZnF21$_hIfJ#9LrA%GdbTWkVB?|T+ zkhoooiAwXR<3%eWI(Z?ei@vuCo_Smn(f;fC!4N1&=-U(*Pv8p|0Z~KJE^B+g za;uy`e*yi*IFt@`Q$zG;Ew+V)Wv2*;v5Jg4GT@;&SRb?Gg28R_MmVbOa(m}|;GIgK zTq7d^i`)EG^=>Smt!g~1m;(Eb{}O;L$UiGAn?NDSjrF)^^-u$UTwIN7+<(Pqms!Vr3+kV{n__M~s`L$!gd(u#%RbnQTiYT|Ez#4Fv@U%Mn$b>B_FM_Jq zo?_{c+*b9uI4eY$<@er--V|5O8@HcpYeJy*&ef8rF-qWHJ2K2Izj7xGoEOK(=O)1T z7IIJhxI!EFp0g@e8>=;^e+f2+&~@0jQ;o>^dCpNCrPt$MC(4h>L!;Fsq8wH3TBh^; z&Z3)SigTv>TD-7lWIFHJonI<@0&LadpCJ`4bm*rRtb3}Rty81z5F#WPN44xSdGkgE zs#!HtCGS)v*#0g#)3yNV6g591BOjXe^ormnPpN=6ZU2bfH;t4RxmxyAUk_}|BW=Vo zXM!WG9u*87-WzY846i8Zq(`}DwROVT;P!4VJ}luX!&;A?$MRZt{QPL(f!{>Xn#o6x z#@$+BsxKRN0!nc^*#-t(KKGX&ADBhLzhWIULlMa1;;{{*;w6EO%e+6ZVV~vUlJLAb zGE*GmR*)nF@rAk=%33{cm!iOfekQmNCA`=OD~>T9pB+R!1cmmo_MYL=t8QdjH5tqoT`Xay$OD}8je@YE5xkbeg+L~ zTu)r^JUO``Uc#cu|8mhtX~I7LYr#psV#cbkU~y!2ck9;vor?5oA%4x(`1jHHsX21_ zI{0aDVujd1=&zMqygDd7H~k=bMg1GTk@_bQpFwrMu4XTAJATCj)C@eU+O2 zf-QdPu$~2S7h^C>T`E2e2rv5d{u2s$2YRNFOHpxJ(38J~x?5?e=p&YmyYwB)^YI`i zwZjtqz(D)B3@8Y6@qaqJdi?TkNN}hN3jMK&msX6=q*4b*Xb+!u zk?T50BU=ybfYNZ5r#cKvIb?h7T4fkZnfxP=kqoIlDSNMEzDB8?$g!5NGp2c;=iF{p zVNxsR>g@0D{P#P}!`!R$%*kw16CwpJ!JpB#{0E1+v5LCXLJ?es4H#z2(vYgNTy7%z zeRg&d_93O0`1BthFIj&Q?879zM2|zsd-T_gF6bO!?2QOx<=sc=6DF&HkGuj_<1oLy z64#*xOIB=pzTONAm50*f<1?$(d)g+`1Pg=6^`EVk@J?qWs28qR%oqT@CcQ)CD+Ypc z7I`OIiY$b|8XOngJ^rg*qgFcC3Y$Zx`YT^mccwq=JLRggUn_%b!H2s)fP+6&glIMz7#6`cPt}ROl+wjBsmu% z|1=J2)w4M({!Z|oeW!&C!z1?v`_w#O#1wJwX`RX6^Y8uEMkBSR?d{6l{qgz5r?z69 zHiPReG{Je@y0LUgkyYiqbZlSyRb;E{a~V6Zxlfu$R}_)U4s64Ar_I;z{``{6d-Z7l z>uMl}FejZ$0BNL&F)rjE2WEUqhw>Us=Z4^3(RUe&>&W#}r3z*m%VuAJt;><+(xn)~5Hm)8!U{ zHg*fvmkBxrHoq|^@S~2dX63=%_n&KUQe_*ggLZ5!dAmRE{>G;>-hyYL^J287ir!(g zTa#%rh)=({+f<^hMj<&U){bSFMZZ~ECXfG=TyWN|DXqK;gTMv7SKLN^N8h^DI7}ue zZg+0Z1#`)}`2g&|4F+NFCM+un_ZeL?|X-@Yn3r%@5vB7kYM6=s~S3Vi}IK@8#H_34r#(m zE4(R}PIL22C+itJR$j|70o|WMDHEL^n)8$X&%T1%n{p?u`5|W~GbnWr((QCW!Fv)- zQZe;7wNNoqS9L3ml93icc@rjj2mRi+LY8vU0figQu2Ui|6S&+%{n_`Tc)c6ze%0>G zirJc=&6UOiuo|0fUPD)JlnvUzXoEX#Q|d6+~ysKJ*PMxH6Lh22hJ7W{o% zez($(MMT)!o~ggY<^6s7vy~nRBy*B_l@L?Had#KiK}s z+0>i;(N4w$)FI0Avb;uCyEWVBIpvJr^-Pyv_u}#O`ljkJ&H{%^tI)%;onmyWxoDU8 z!20z}ha2vK1!I`jLI}rJp4-KC@l?mbPqHOXFupF0X5yRe_m~z8{n`cKZybKNP8z3F z&`;ZMR*hw!?%A}egTx=46bF%J$GTFSo@DmYC%l66VtKCPe(-1aqeCrPgurEMC{qUY z%vHmP0&;!blsMpn;3(^(E{)a7TsfoR%7eP7I+Zf!I~5obf#Lcwkqh3&`#)m z>Jdst1b5pJv9;y}O!(!o7h%xSmnDsM=ik|kqmgkZlUCb3JvY3qGtpZ+41ar5r{}F8 z5&usmabJ2*E5xp5P;V*G_Aj4Cz+`Ag>j5`P^j5B1oYxgz$}n@Qd^Iu>+2toFjx3)k_V04J>s88@lv&9 z4AK6-!qX?VOUo^Pq|YFacgUw`&V-ns)!KyIwA%ZH`UN6T#~rLNmsmOWdLeGu%B$79 zTX>yr_>!{a$04LJQ0Z)hOi#1_m>b+%2d_`H^2%DX%+Ic<&D{Z zjI3VjizS_b2_+moy$t2$x#6omJSO0Y+ zPny_qnS((AdW7*pwYVToC0@z?lq$Knpf&Y1W3!JsK3izOu0-Dq3R|Y4H0+b>P(*%08>BFtBpoKQt`sh8u*n8!aa#v>usjJBR zH$~tnO5hloFbEYq$Pt(J>s)WlALUu`n92VTcoI~|osCd|v^R#FrW}|b6KmfW-2TB( z7n{#6iza2Fog{`v{G*JwUF>R-a{N6#A4oQV-fBnJNU_=WdpwCD$u;dT!OWS$b=4km z3A35a4w_#f(R^7Vo0Qg;JdV>u8{er3bz(iDC>CcXNohh3;o#sAz~+E0Y^ZA<8&YuH zkYrNVQI(HV#dLxAEheCYmwpqjJ{o(hBU#~`GhIl1ivvkKQDHz%Nj~*q1tAbvh04&G z&DBB}w!97hSYvjkC=t|7Ao`fBXMQ>(8PrHHj6KIM*{^g+CfP5AKpiP))RD~ax5mu6 z>&;6dnW|h!69O-fAyiEpEmPv00oIQEp-ZXPdG=>%GQ-rgne~r`ly7TZ6W`OjR)xDG7s&2oms(AW+%?Zt9B(y#)z z`{K1!*_e2UMDZ{iEd7%Q%X~SiN9uezqQ_KUD(Y9TrFLVnY78HGsG4doLBQw?Ma`#O4{0@4L2SQI-Qa&O>wkoJ2 z@d0?)RHk??R8Dm$0}<{_*O$r~n){0EUCgC_FJ1aMpr&Ov6H%eMukK2cbx{x%fGNyw zWX?_{!iu#}IHxJ5Dxg3n*}K@>ZyvPeu|5M>7TPB6KzBNy8qO6CAP^3a;cv(r^7Z${ z8>!XsVy!)Fu*36Qy;BaBPUE0nQqEG4*Kthx7rlh*B@+nH{42R zTtD@Z4y_Ri^0i%cuNh38L)3-17z1k4X1bz1^Qsjy&a%gC2iPUc`G1fJPa{d`$~<7` zVC)>}WHR7kFaS*uS^r%lo*-8F0s^gb9VGqWFApZOc$86kB5hpN6LRwsL`KCr(86_S76U&Y~6e9kw2iCI~ zi%x^u>C&ebvlI;hfG?~nL8diH&WPen0h;wlG=sI|Tk|N|e6<(NGSv-wa4BaSLeum^ zMvwMWi$gskxu^sAs$TnDlv8Bd69GskE^&~m!{G0u4aBO}(}F4cF=k@f+7%^RYaOPk zL1CLvCDH(us8p!rKUfhn0D!aCe`n}zNqD3Gah#32_LP2=*8)a%YQnGGIc^xT@xexnO74+P0Y)%g&$L_3R_G>O%0`=tB{7S z2c^*@o4YP}xion?CX$d-J{f5_-+Cc1IMY)yXR)9NX+!y6cxfZm)u%t;rQvCR(`RO_ z*P%99#H?`#hhhLzp?+s`w3WcQS)VFqU`gX^znv+`7%g$FFUt zw5xn@*C6Ft$nku9vpVR<0E1cRw|)>D2%mmI07O{7KL89VAgW}sDu*BDQER;y763QW z_dV!3rfd`d=z@UDJpjU{y6YheSo}VV?eWhB5)@>DRKx{I1BQWa(4&3qv-Vb5O*3%9 zV>GPhUhtDzbn&NLDeY$5&{%zB+{jD;(Yt7E2sHtfMzDI|EB%OdVD>>AjvMpQn!lf( z+0eo`-;vsoH5d^&PC2iGeDn$#{b7g#sdocQ#$feZkuW|0>uF<7$9J9hwSilyI zvDd@dKOA~nsljf-{DgzOPhcw=t+l=z>=2Bm3&g*}k%Ed-KQ1>%(qC3Sm_1?)cw}2( zSP6y#&cd_=etX;sj8BAZ71BKzYZi_@W*sycknC^`WNluEMgaXegOCz~^$KD%Zw6&&(PK8^eJpHNs%YV9Hlkv|a6}$}nnDdaNKOpC zu*=O2st|3njl3hsc=KcDc2Ozv6wZSj<2{;n-gRt(SYC&`Lho#aP+Ripa);wcL^Zh^IlU35YeJ;Df z`1x+29R8j}sV>?_dKwp1?C(wPW4?-S#MM78lkYCk dvA?5-&aR%$<`!_QENoodJaCkh;))V*{|)l$+nE3W diff --git a/doc/spartacus_surface_documentation.tex b/doc/spartacus_surface_documentation.tex index 4d76ed1..7034a93 100644 --- a/doc/spartacus_surface_documentation.tex +++ b/doc/spartacus_surface_documentation.tex @@ -18,7 +18,7 @@ \newcolumntype{L}{>{\raggedright\arraybackslash\hangindent=1em}} \newcolumntype{M}{>{\raggedright\arraybackslash\hangindent=1em\ttfamily}} \newcolumntype{X}{>{\nullfont}c} -\def\tablesetup{\rowcolors{2}{light-gray}{light-gray}\footnotesize} +\def\tablesetup{\rowcolors{2}{light-gray}{light-gray}\small} \newmdenv[ leftmargin = 0pt, innerleftmargin = 1em, @@ -370,7 +370,7 @@ \section{Running the offline scheme} Variable & Dimensions & Description \\ \hline \codetab{cos\_solar\_zenith\_angle} & \codetab{col} & Cosine of solar zenith angle \\ -\codetab{surface\_type} & \codetab{col} & Surface type: (0) flat, (1) forest, (2) urban, and (3) vegetated urban \\ +\codetab{surface\_type} & \codetab{col} & Surface type: (0) flat, (1) forest, (2) urban, (3) vegetated urban, (4) simple urban, and (5) infinite street \\ \codetab{height} & \codetab{col, layer\_int} & Height of layer interfaces (m) \\ \codetab{veg\_fraction} & \codetab{col, layer} & Vegetation fraction \\ \codetab{veg\_scale} & \codetab{col, layer} & Vegetation horizontal scale (m) \\ @@ -415,13 +415,26 @@ \section{Running the offline scheme} Input fields should be provided in order of increasing height, and the output data use the same convention. The \code{surface\_type} variable selects how the column is to be treated, as depicted in -Fig.\ \ref{fig:type_schematic}. +Fig.\ \ref{fig:type_schematic}. Types 1--3 use the SPARTACUS method as +described by \cite{Hogan2019b} but differ according to whether trees, +buildings or both are represented. Types 4 and 5 use a simplified +description of unvegetated urban areas in which all buildings are +assumed to have the same height, and the \cite{Harman+2004} method is +used to represent multiple scattering within the urban canopy by +solving a $2\times2$ matrix problem. Type 4 makes the same assumption +about the horizontal distribution of buildings as SPARTACUS, which is +that the wall-to-wall separation distances follow an exponential +distribution \citep{Hogan2019a}. Type 5 makes the `infinite street' +assumption: streets are assumed to be of equal width and infinite in +length. While the latter assumption is commonly used in urban exchange +models, it was found by \cite{Hogan2019a} to be a poorer fit to the +building distributions in real cities. \begin{figure}[tb!] \centerline{\includegraphics[width=0.75\textwidth]{surface_type_schematic.pdf}} - \caption{\label{fig:type_schematic}Schematic of the four surfaces - represented by the \code{surface\_type} variable provided in the - \spsurf\ input file (see Table \ref{tab:invar}).} + \caption{\label{fig:type_schematic}Schematic of the six surface + types represented by the \code{surface\_type} variable provided in + the \spsurf\ input file (see Table \ref{tab:invar}).} \end{figure} The output netCDF file contains the typical set of broadband fluxes @@ -435,6 +448,7 @@ \section{Running the offline scheme} { \tablesetup \begin{longtable}{llLp{7cm}}% +%\begin{table}[tb!] \caption{\label{tab:outvar}Variables contained in the output netCDF file from \spsurf. All fluxes (or irradiances) and absorption rates have units of W~m$^{-2}$, but note that this is power per unit area @@ -442,6 +456,7 @@ \section{Running the offline scheme} type. `Net' fluxes are defined as the flux into a facet type (or downward) minus the flux out of a facet type (or upward).}\\ % +%\begin{tabular}{llLp{7cm}}% \hline Variable & Dimensions & Description\\ \hline @@ -482,6 +497,7 @@ \section{Running the offline scheme} \codetab{veg\_sunlit\_fraction} & \codetab{col, layer} & Fraction of the one-sided leaf area that is in direct sunlight\\ \hline \end{longtable} +%\end{tabular}\end{table} } %\end{center} @@ -559,6 +575,7 @@ \section{Running the offline scheme} \end{longtable} \end{center} +%\pagebreak \section{Configuring the \spsurf\ algorithm} \label{sec:nam_radsurf} @@ -690,6 +707,7 @@ \section{Configuring the offline package} \hline \multicolumn{2}{l}{\emph{Override input variables}}\\ \codetab{cos\_solar\_zenith\_angle} & Override cosine of solar zenith angle\\ +\codetab{isurfacetype} & Override value of surface type (0--5)\\ \codetab{ground\_sw\_albedo} & Override shortwave albedo of ground\\ \codetab{roof\_sw\_albedo} & Override shortwave albedo of roofs\\ \codetab{wall\_sw\_albedo} & Override shortwave albedo of walls\\ @@ -708,6 +726,7 @@ \section{Configuring the offline package} \end{longtable} } %\end{center} +%\pagebreak \section{Interpretation of geometry input variables} \subsection{Forests} @@ -977,7 +996,7 @@ \section{Incorporating \spsurf\ into another program} ! Allocatable integer vectors of length "ncol" nlay ! Number of layers in column istartlay ! Index of first layer - i_representation ! Surface type (0-4) + i_representation ! Surface type (0-5) ! Allocatable real vectors of length "ncol" dz ! Layer thickness (m) @@ -1054,7 +1073,7 @@ \section{Incorporating \spsurf\ into another program} ! Allocatable integer vectors of length "ncol" nlay ! Number of layers in column (can be 0) istartlay ! Index to first layer of the column - i_representation ! Surface type (0-3) + i_representation ! Surface type (0-5) ! Allocatable real vectors of length "ncol" cos_sza, ground_temperature @@ -1236,6 +1255,11 @@ \section{License and copyright} \begin{thebibliography}{00} \markright{References} % +\harvarditem{Harman~et~al.}{2004}{Harman+2004}Harman, I. N., +M. J. Best and S. E. Belcher, 2004: Radiative exchange in an urban +street canyon. \textit{Boundary-Layer Meteorol.,} \textbf{110,} +301--316. +% \harvarditem{Hogan}{2019a}{Hogan2019a}Hogan, R. J., 2019a: An exponential model of urban geometry for use in radiative transfer applications. \textit{Boundary-Layer Meteorol.,} \textbf{170,} diff --git a/doc/surface_type_schematic.fig b/doc/surface_type_schematic.fig index 09a5fe5..0dbe925 100644 --- a/doc/surface_type_schematic.fig +++ b/doc/surface_type_schematic.fig @@ -1,438 +1,810 @@ -#FIG 3.2 Produced by xfig version 3.2.7a +#FIG 3.2 Produced by xfig version 3.2.5c Landscape Center Inches -Letter +Letter 100.00 Single -2 1200 2 -6 -150 6975 150 7575 +6 -2100 6300 600 7800 +6 -150 6750 150 7350 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -150 6975 -75 6975 -75 7125 -150 7125 -150 6975 + -150 6750 -75 6750 -75 6900 -150 6900 -150 6750 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -75 6975 0 6975 0 7125 -75 7125 -75 6975 + -75 6750 0 6750 0 6900 -75 6900 -75 6750 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 0 6975 75 6975 75 7125 0 7125 0 6975 + 0 6750 75 6750 75 6900 0 6900 0 6750 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 75 6975 150 6975 150 7125 75 7125 75 6975 + 75 6750 150 6750 150 6900 75 6900 75 6750 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -150 7275 -75 7275 -75 7425 -150 7425 -150 7275 + -150 7050 -75 7050 -75 7200 -150 7200 -150 7050 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -150 7425 -75 7425 -75 7575 -150 7575 -150 7425 + -150 7200 -75 7200 -75 7350 -150 7350 -150 7200 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -75 7125 0 7125 0 7275 -75 7275 -75 7125 + -75 6900 0 6900 0 7050 -75 7050 -75 6900 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 0 7125 75 7125 75 7275 0 7275 0 7125 + 0 6900 75 6900 75 7050 0 7050 0 6900 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 75 7125 150 7125 150 7275 75 7275 75 7125 + 75 6900 150 6900 150 7050 75 7050 75 6900 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -150 7125 -75 7125 -75 7275 -150 7275 -150 7125 + -150 6900 -75 6900 -75 7050 -150 7050 -150 6900 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -75 7275 0 7275 0 7425 -75 7425 -75 7275 + -75 7050 0 7050 0 7200 -75 7200 -75 7050 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -75 7425 0 7425 0 7575 -75 7575 -75 7425 + -75 7200 0 7200 0 7350 -75 7350 -75 7200 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 0 7275 75 7275 75 7425 0 7425 0 7275 + 0 7050 75 7050 75 7200 0 7200 0 7050 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 0 7425 75 7425 75 7575 0 7575 0 7425 + 0 7200 75 7200 75 7350 0 7350 0 7200 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 75 7425 150 7425 150 7575 75 7575 75 7425 + 75 7200 150 7200 150 7350 75 7350 75 7200 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 75 7275 150 7275 150 7425 75 7425 75 7275 + 75 7050 150 7050 150 7200 75 7200 75 7050 -6 -6 150 6975 300 7275 +6 150 6750 300 7050 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 150 6975 225 6975 225 7125 150 7125 150 6975 + 150 6750 225 6750 225 6900 150 6900 150 6750 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 225 7125 300 7125 300 7275 225 7275 225 7125 + 225 6900 300 6900 300 7050 225 7050 225 6900 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 150 7125 225 7125 225 7275 150 7275 150 7125 + 150 6900 225 6900 225 7050 150 7050 150 6900 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 225 6975 300 6975 300 7125 225 7125 225 6975 + 225 6750 300 6750 300 6900 225 6900 225 6750 -6 -6 150 7275 300 7575 +6 150 7050 300 7350 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 150 7275 225 7275 225 7425 150 7425 150 7275 + 150 7050 225 7050 225 7200 150 7200 150 7050 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 225 7425 300 7425 300 7575 225 7575 225 7425 + 225 7200 300 7200 300 7350 225 7350 225 7200 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 150 7425 225 7425 225 7575 150 7575 150 7425 + 150 7200 225 7200 225 7350 150 7350 150 7200 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 225 7275 300 7275 300 7425 225 7425 225 7275 + 225 7050 300 7050 300 7200 225 7200 225 7050 -6 -6 3600 6975 3750 7275 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 3600 6975 3675 6975 3675 7125 3600 7125 3600 6975 + -1575 6450 -1500 6450 -1500 6600 -1575 6600 -1575 6450 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 3675 7125 3750 7125 3750 7275 3675 7275 3675 7125 + -1650 6600 -1575 6600 -1575 6750 -1650 6750 -1650 6600 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 3600 7125 3675 7125 3675 7275 3600 7275 3600 7125 + -1575 6600 -1500 6600 -1500 6750 -1575 6750 -1575 6600 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 3675 6975 3750 6975 3750 7125 3675 7125 3675 6975 + -1500 6450 -1425 6450 -1425 6600 -1500 6600 -1500 6450 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1425 6450 -1350 6450 -1350 6600 -1425 6600 -1425 6450 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1425 6600 -1350 6600 -1350 6750 -1425 6750 -1425 6600 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1500 6600 -1425 6600 -1425 6750 -1500 6750 -1500 6600 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -150 6600 -75 6600 -75 6750 -150 6750 -150 6600 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -75 6600 0 6600 0 6750 -75 6750 -75 6600 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 0 6600 75 6600 75 6750 0 6750 0 6600 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 75 6600 150 6600 150 6750 75 6750 75 6600 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 225 6600 300 6600 300 6750 225 6750 225 6600 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 150 6600 225 6600 225 6750 150 6750 150 6600 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1650 6300 -1575 6300 -1575 6450 -1650 6450 -1650 6300 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1575 6300 -1500 6300 -1500 6450 -1575 6450 -1575 6300 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1500 6300 -1425 6300 -1425 6450 -1500 6450 -1500 6300 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1425 6300 -1350 6300 -1350 6450 -1425 6450 -1425 6300 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -525 7200 -450 7200 -450 7350 -525 7350 -525 7200 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -525 7050 -450 7050 -450 7200 -525 7200 -525 7050 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -600 7050 -525 7050 -525 7200 -600 7200 -600 7050 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -600 7200 -525 7200 -525 7350 -600 7350 -600 7200 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -675 7050 -600 7050 -600 7200 -675 7200 -675 7050 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -675 7200 -600 7200 -600 7350 -675 7350 -675 7200 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -750 7050 -675 7050 -675 7200 -750 7200 -750 7050 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -750 7200 -675 7200 -675 7350 -750 7350 -750 7200 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1650 6450 -1575 6450 -1575 6600 -1650 6600 -1650 6450 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -750 6900 -675 6900 -675 7050 -750 7050 -750 6900 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1500 6750 -1425 6750 -1425 6900 -1500 6900 -1500 6750 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1425 6750 -1350 6750 -1350 6900 -1425 6900 -1425 6750 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1500 7050 -1425 7050 -1425 7200 -1500 7200 -1500 7050 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1500 7200 -1425 7200 -1425 7350 -1500 7350 -1500 7200 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1425 6900 -1350 6900 -1350 7050 -1425 7050 -1425 6900 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1350 6900 -1275 6900 -1275 7050 -1350 7050 -1350 6900 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1275 6900 -1200 6900 -1200 7050 -1275 7050 -1275 6900 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1500 6900 -1425 6900 -1425 7050 -1500 7050 -1500 6900 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1425 7050 -1350 7050 -1350 7200 -1425 7200 -1425 7050 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1425 7200 -1350 7200 -1350 7350 -1425 7350 -1425 7200 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1350 7050 -1275 7050 -1275 7200 -1350 7200 -1350 7050 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1350 7200 -1275 7200 -1275 7350 -1350 7350 -1350 7200 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1275 7200 -1200 7200 -1200 7350 -1275 7350 -1275 7200 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1275 7050 -1200 7050 -1200 7200 -1275 7200 -1275 7050 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1725 6750 -1650 6750 -1650 6900 -1725 6900 -1725 6750 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1650 6750 -1575 6750 -1575 6900 -1650 6900 -1650 6750 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1575 6750 -1500 6750 -1500 6900 -1575 6900 -1575 6750 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1800 7050 -1725 7050 -1725 7200 -1800 7200 -1800 7050 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1800 7200 -1725 7200 -1725 7350 -1800 7350 -1800 7200 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1725 6900 -1650 6900 -1650 7050 -1725 7050 -1725 6900 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1650 6900 -1575 6900 -1575 7050 -1650 7050 -1650 6900 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1575 6900 -1500 6900 -1500 7050 -1575 7050 -1575 6900 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1800 6900 -1725 6900 -1725 7050 -1800 7050 -1800 6900 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1725 7050 -1650 7050 -1650 7200 -1725 7200 -1725 7050 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1725 7200 -1650 7200 -1650 7350 -1725 7350 -1725 7200 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1650 7050 -1575 7050 -1575 7200 -1650 7200 -1650 7050 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1650 7200 -1575 7200 -1575 7350 -1650 7350 -1650 7200 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1575 7200 -1500 7200 -1500 7350 -1575 7350 -1575 7200 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1575 7050 -1500 7050 -1500 7200 -1575 7200 -1575 7050 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -675 6900 -600 6900 -600 7050 -675 7050 -675 6900 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -600 6900 -525 6900 -525 7050 -600 7050 -600 6900 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -525 6900 -450 6900 -450 7050 -525 7050 -525 6900 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1725 6600 -1650 6600 -1650 6750 -1725 6750 -1725 6600 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1725 6450 -1650 6450 -1650 6600 -1725 6600 -1725 6450 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1725 6300 -1650 6300 -1650 6450 -1725 6450 -1725 6300 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1875 6900 -1800 6900 -1800 7050 -1875 7050 -1875 6900 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1875 7050 -1800 7050 -1800 7200 -1875 7200 -1875 7050 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1875 7200 -1800 7200 -1800 7350 -1875 7350 -1875 7200 +2 2 0 1 -1 24 44 -1 10 0.000 0 0 -1 0 0 5 + -2100 7350 600 7350 600 7500 -2100 7500 -2100 7350 +2 1 1 1 0 7 56 -1 -1 3.000 0 0 -1 0 0 2 + -2100 7200 600 7200 +2 1 1 1 0 7 56 -1 -1 3.000 0 0 -1 0 0 2 + -2100 6900 600 6900 +2 1 1 1 0 7 56 -1 -1 3.000 0 0 -1 0 0 2 + -2100 6600 600 6600 +2 1 1 1 0 7 56 -1 -1 3.000 0 0 -1 0 0 2 + -2100 6300 600 6300 +4 0 0 50 -1 18 11 0.0000 4 165 795 -2100 7725 (2) Urban\001 +-6 +6 1200 6300 3900 7800 +6 3600 6750 3750 7050 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 3600 6750 3675 6750 3675 6900 3600 6900 3600 6750 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 3675 6900 3750 6900 3750 7050 3675 7050 3675 6900 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 3600 6900 3675 6900 3675 7050 3600 7050 3600 6900 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 3675 6750 3750 6750 3750 6900 3675 6900 3675 6750 -6 -6 3600 7275 3750 7575 +6 3600 7050 3750 7350 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 3600 7275 3675 7275 3675 7425 3600 7425 3600 7275 + 3600 7050 3675 7050 3675 7200 3600 7200 3600 7050 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 3675 7425 3750 7425 3750 7575 3675 7575 3675 7425 + 3675 7200 3750 7200 3750 7350 3675 7350 3675 7200 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 3600 7425 3675 7425 3675 7575 3600 7575 3600 7425 + 3600 7200 3675 7200 3675 7350 3600 7350 3600 7200 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 3675 7275 3750 7275 3750 7425 3675 7425 3675 7275 + 3675 7050 3750 7050 3750 7200 3675 7200 3675 7050 -6 -6 3300 6975 3600 7575 +6 3300 6750 3600 7350 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 3300 6975 3375 6975 3375 7125 3300 7125 3300 6975 + 3300 6750 3375 6750 3375 6900 3300 6900 3300 6750 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 3375 6975 3450 6975 3450 7125 3375 7125 3375 6975 + 3375 6750 3450 6750 3450 6900 3375 6900 3375 6750 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 3450 6975 3525 6975 3525 7125 3450 7125 3450 6975 + 3450 6750 3525 6750 3525 6900 3450 6900 3450 6750 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 3525 6975 3600 6975 3600 7125 3525 7125 3525 6975 + 3525 6750 3600 6750 3600 6900 3525 6900 3525 6750 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 3300 7275 3375 7275 3375 7425 3300 7425 3300 7275 + 3300 7050 3375 7050 3375 7200 3300 7200 3300 7050 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 3300 7425 3375 7425 3375 7575 3300 7575 3300 7425 + 3300 7200 3375 7200 3375 7350 3300 7350 3300 7200 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 3375 7125 3450 7125 3450 7275 3375 7275 3375 7125 + 3375 6900 3450 6900 3450 7050 3375 7050 3375 6900 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 3450 7125 3525 7125 3525 7275 3450 7275 3450 7125 + 3450 6900 3525 6900 3525 7050 3450 7050 3450 6900 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 3525 7125 3600 7125 3600 7275 3525 7275 3525 7125 + 3525 6900 3600 6900 3600 7050 3525 7050 3525 6900 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 3300 7125 3375 7125 3375 7275 3300 7275 3300 7125 + 3300 6900 3375 6900 3375 7050 3300 7050 3300 6900 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 3375 7275 3450 7275 3450 7425 3375 7425 3375 7275 + 3375 7050 3450 7050 3450 7200 3375 7200 3375 7050 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 3375 7425 3450 7425 3450 7575 3375 7575 3375 7425 + 3375 7200 3450 7200 3450 7350 3375 7350 3375 7200 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 3450 7275 3525 7275 3525 7425 3450 7425 3450 7275 + 3450 7050 3525 7050 3525 7200 3450 7200 3450 7050 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 3450 7425 3525 7425 3525 7575 3450 7575 3450 7425 + 3450 7200 3525 7200 3525 7350 3450 7350 3450 7200 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 3525 7425 3600 7425 3600 7575 3525 7575 3525 7425 + 3525 7200 3600 7200 3600 7350 3525 7350 3525 7200 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 3525 7275 3600 7275 3600 7425 3525 7425 3525 7275 + 3525 7050 3600 7050 3600 7200 3525 7200 3525 7050 -6 -2 1 0 1 25 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 1575 5175 1725 5025 -2 1 0 1 25 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 1500 4875 1575 4725 -2 1 0 1 25 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 1500 4875 1425 4800 -2 1 0 2 25 7 50 -1 -1 0.000 0 0 -1 0 0 3 - 1575 5400 1575 5175 1500 4875 -2 1 0 1 25 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 3525 5175 3600 5100 -2 1 0 2 25 7 50 -1 -1 0.000 0 0 -1 0 0 3 - 3525 5400 3525 5175 3450 5025 -2 1 0 1 25 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 2625 5175 2775 5025 -2 1 0 1 25 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 2550 4875 2625 4500 -2 1 0 1 25 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 2550 4875 2400 4800 -2 1 0 2 25 7 50 -1 -1 0.000 0 0 -1 0 0 3 - 2625 5400 2625 5175 2550 4875 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1500 6825 1575 6825 1575 6975 1500 6975 1500 6825 + 1500 6600 1575 6600 1575 6750 1500 6750 1500 6600 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1575 6825 1650 6825 1650 6975 1575 6975 1575 6825 + 1575 6600 1650 6600 1650 6750 1575 6750 1575 6600 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1575 6675 1650 6675 1650 6825 1575 6825 1575 6675 + 1575 6450 1650 6450 1650 6600 1575 6600 1575 6450 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1650 6825 1725 6825 1725 6975 1650 6975 1650 6825 + 1650 6600 1725 6600 1725 6750 1650 6750 1650 6600 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1725 6675 1800 6675 1800 6825 1725 6825 1725 6675 + 1725 6450 1800 6450 1800 6600 1725 6600 1725 6450 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1725 6825 1800 6825 1800 6975 1725 6975 1725 6825 + 1725 6600 1800 6600 1800 6750 1725 6750 1725 6600 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1800 6675 1875 6675 1875 6825 1800 6825 1800 6675 + 1800 6450 1875 6450 1875 6600 1800 6600 1800 6450 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1800 6825 1875 6825 1875 6975 1800 6975 1800 6825 + 1800 6600 1875 6600 1875 6750 1800 6750 1800 6600 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1650 6675 1725 6675 1725 6825 1650 6825 1650 6675 + 1650 6450 1725 6450 1725 6600 1650 6600 1650 6450 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1650 6975 1725 6975 1725 7125 1650 7125 1650 6975 + 1650 6750 1725 6750 1725 6900 1650 6900 1650 6750 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1725 6975 1800 6975 1800 7125 1725 7125 1725 6975 + 1725 6750 1800 6750 1800 6900 1725 6900 1725 6750 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1800 6975 1875 6975 1875 7125 1800 7125 1800 6975 + 1800 6750 1875 6750 1875 6900 1800 6900 1800 6750 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1650 7275 1725 7275 1725 7425 1650 7425 1650 7275 + 1650 7050 1725 7050 1725 7200 1650 7200 1650 7050 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1650 7425 1725 7425 1725 7575 1650 7575 1650 7425 + 1650 7200 1725 7200 1725 7350 1650 7350 1650 7200 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1725 7125 1800 7125 1800 7275 1725 7275 1725 7125 + 1725 6900 1800 6900 1800 7050 1725 7050 1725 6900 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1800 7125 1875 7125 1875 7275 1800 7275 1800 7125 + 1800 6900 1875 6900 1875 7050 1800 7050 1800 6900 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1875 7125 1950 7125 1950 7275 1875 7275 1875 7125 + 1875 6900 1950 6900 1950 7050 1875 7050 1875 6900 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1650 7125 1725 7125 1725 7275 1650 7275 1650 7125 + 1650 6900 1725 6900 1725 7050 1650 7050 1650 6900 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1725 7275 1800 7275 1800 7425 1725 7425 1725 7275 + 1725 7050 1800 7050 1800 7200 1725 7200 1725 7050 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1725 7425 1800 7425 1800 7575 1725 7575 1725 7425 + 1725 7200 1800 7200 1800 7350 1725 7350 1725 7200 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1800 7275 1875 7275 1875 7425 1800 7425 1800 7275 + 1800 7050 1875 7050 1875 7200 1800 7200 1800 7050 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1800 7425 1875 7425 1875 7575 1800 7575 1800 7425 + 1800 7200 1875 7200 1875 7350 1800 7350 1800 7200 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1875 7425 1950 7425 1950 7575 1875 7575 1875 7425 + 1875 7200 1950 7200 1950 7350 1875 7350 1875 7200 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1875 7275 1950 7275 1950 7425 1875 7425 1875 7275 + 1875 7050 1950 7050 1950 7200 1875 7200 1875 7050 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1500 6975 1575 6975 1575 7125 1500 7125 1500 6975 + 1500 6750 1575 6750 1575 6900 1500 6900 1500 6750 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1575 6975 1650 6975 1650 7125 1575 7125 1575 6975 + 1575 6750 1650 6750 1650 6900 1575 6900 1575 6750 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1350 7275 1425 7275 1425 7425 1350 7425 1350 7275 + 1350 7050 1425 7050 1425 7200 1350 7200 1350 7050 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1350 7425 1425 7425 1425 7575 1350 7575 1350 7425 + 1350 7200 1425 7200 1425 7350 1350 7350 1350 7200 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1425 7125 1500 7125 1500 7275 1425 7275 1425 7125 + 1425 6900 1500 6900 1500 7050 1425 7050 1425 6900 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1500 7125 1575 7125 1575 7275 1500 7275 1500 7125 + 1500 6900 1575 6900 1575 7050 1500 7050 1500 6900 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1575 7125 1650 7125 1650 7275 1575 7275 1575 7125 + 1575 6900 1650 6900 1650 7050 1575 7050 1575 6900 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1350 7125 1425 7125 1425 7275 1350 7275 1350 7125 + 1350 6900 1425 6900 1425 7050 1350 7050 1350 6900 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1425 7275 1500 7275 1500 7425 1425 7425 1425 7275 + 1425 7050 1500 7050 1500 7200 1425 7200 1425 7050 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1425 7425 1500 7425 1500 7575 1425 7575 1425 7425 + 1425 7200 1500 7200 1500 7350 1425 7350 1425 7200 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1500 7275 1575 7275 1575 7425 1500 7425 1500 7275 + 1500 7050 1575 7050 1575 7200 1500 7200 1500 7050 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1500 7425 1575 7425 1575 7575 1500 7575 1500 7425 + 1500 7200 1575 7200 1575 7350 1500 7350 1500 7200 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1575 7425 1650 7425 1650 7575 1575 7575 1575 7425 + 1575 7200 1650 7200 1650 7350 1575 7350 1575 7200 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1575 7275 1650 7275 1650 7425 1575 7425 1575 7275 -2 2 0 1 12 14 51 -1 20 0.000 0 0 -1 0 0 5 - 1350 4950 1800 4950 1800 5250 1350 5250 1350 4950 -2 2 0 1 12 14 51 -1 20 0.000 0 0 -1 0 0 5 - 2325 4950 2925 4950 2925 5250 2325 5250 2325 4950 -2 2 0 1 12 14 51 -1 20 0.000 0 0 -1 0 0 5 - 1350 4650 1725 4650 1725 4950 1350 4950 1350 4650 -2 2 0 1 12 14 51 -1 20 0.000 0 0 -1 0 0 5 - 2475 4350 2775 4350 2775 4650 2475 4650 2475 4350 -2 2 0 1 12 14 51 -1 20 0.000 0 0 -1 0 0 5 - 2325 4650 2850 4650 2850 4950 2325 4950 2325 4650 -2 2 0 1 12 14 51 -1 20 0.000 0 0 -1 0 0 5 - 3375 4950 3675 4950 3675 5250 3375 5250 3375 4950 -2 2 0 1 -1 24 50 -1 10 0.000 0 0 -1 0 0 5 - 1200 5400 3900 5400 3900 5550 1200 5550 1200 5400 + 1575 7050 1650 7050 1650 7200 1575 7200 1575 7050 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1500 6675 1575 6675 1575 6825 1500 6825 1500 6675 + 1500 6450 1575 6450 1575 6600 1500 6600 1500 6450 2 1 0 2 25 7 50 -1 -1 0.000 0 0 -1 0 0 3 - 2625 7575 2625 7350 2550 7050 + 2625 7350 2625 7125 2550 6825 2 1 0 1 25 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 2625 7350 2775 7200 + 2625 7125 2775 6975 2 1 0 1 25 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 2550 7050 2625 6900 + 2550 6825 2625 6675 2 1 0 1 25 7 50 -1 -1 0.000 0 0 -1 0 0 2 - 2550 7050 2475 6975 + 2550 6825 2475 6750 2 2 0 1 12 14 51 -1 20 0.000 0 0 -1 0 0 5 - 2400 6825 2775 6825 2775 7125 2400 7125 2400 6825 + 2400 6600 2775 6600 2775 6900 2400 6900 2400 6600 2 2 0 1 12 14 51 -1 20 0.000 0 0 -1 0 0 5 - 2400 7125 2850 7125 2850 7425 2400 7425 2400 7125 + 2400 6900 2850 6900 2850 7200 2400 7200 2400 6900 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1950 7425 2025 7425 2025 7575 1950 7575 1950 7425 + 1950 7200 2025 7200 2025 7350 1950 7350 1950 7200 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1950 7275 2025 7275 2025 7425 1950 7425 1950 7275 + 1950 7050 2025 7050 2025 7200 1950 7200 1950 7050 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1950 7125 2025 7125 2025 7275 1950 7275 1950 7125 + 1950 6900 2025 6900 2025 7050 1950 7050 1950 6900 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1500 6525 1575 6525 1575 6675 1500 6675 1500 6525 + 1500 6300 1575 6300 1575 6450 1500 6450 1500 6300 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1575 6525 1650 6525 1650 6675 1575 6675 1575 6525 + 1575 6300 1650 6300 1650 6450 1575 6450 1575 6300 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1650 6525 1725 6525 1725 6675 1650 6675 1650 6525 + 1650 6300 1725 6300 1725 6450 1650 6450 1650 6300 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1725 6525 1800 6525 1800 6675 1725 6675 1725 6525 + 1725 6300 1800 6300 1800 6450 1725 6450 1725 6300 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1800 6525 1875 6525 1875 6675 1800 6675 1800 6525 + 1800 6300 1875 6300 1875 6450 1800 6450 1800 6300 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 3300 6825 3375 6825 3375 6975 3300 6975 3300 6825 + 3300 6600 3375 6600 3375 6750 3300 6750 3300 6600 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 3375 6825 3450 6825 3450 6975 3375 6975 3375 6825 + 3375 6600 3450 6600 3450 6750 3375 6750 3375 6600 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 3450 6825 3525 6825 3525 6975 3450 6975 3450 6825 + 3450 6600 3525 6600 3525 6750 3450 6750 3450 6600 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 3525 6825 3600 6825 3600 6975 3525 6975 3525 6825 + 3525 6600 3600 6600 3600 6750 3525 6750 3525 6600 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 3675 6825 3750 6825 3750 6975 3675 6975 3675 6825 + 3675 6600 3750 6600 3750 6750 3675 6750 3675 6600 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 3600 6825 3675 6825 3675 6975 3600 6975 3600 6825 + 3600 6600 3675 6600 3675 6750 3600 6750 3600 6600 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 2025 7125 2100 7125 2100 7275 2025 7275 2025 7125 + 2025 6900 2100 6900 2100 7050 2025 7050 2025 6900 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 2025 7275 2100 7275 2100 7425 2025 7425 2025 7275 + 2025 7050 2100 7050 2100 7200 2025 7200 2025 7050 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 2025 7425 2100 7425 2100 7575 2025 7575 2025 7425 + 2025 7200 2100 7200 2100 7350 2025 7350 2025 7200 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1875 6975 1950 6975 1950 7125 1875 7125 1875 6975 + 1875 6750 1950 6750 1950 6900 1875 6900 1875 6750 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1875 6825 1950 6825 1950 6975 1875 6975 1875 6825 + 1875 6600 1950 6600 1950 6750 1875 6750 1875 6600 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1875 6675 1950 6675 1950 6825 1875 6825 1875 6675 + 1875 6450 1950 6450 1950 6600 1875 6600 1875 6450 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 1875 6525 1950 6525 1950 6675 1875 6675 1875 6525 -2 2 0 1 -1 24 50 -1 10 0.000 0 0 -1 0 0 5 - -2100 5400 600 5400 600 5550 -2100 5550 -2100 5400 + 1875 6300 1950 6300 1950 6450 1875 6450 1875 6300 +2 2 0 1 -1 24 44 -1 10 0.000 0 0 -1 0 0 5 + 1200 7350 3900 7350 3900 7500 1200 7500 1200 7350 +2 1 1 1 0 7 56 -1 -1 3.000 0 0 -1 0 0 2 + 1200 6900 3900 6900 +2 1 1 1 0 7 56 -1 -1 3.000 0 0 -1 0 0 2 + 1200 6600 3900 6600 +2 1 1 1 0 7 56 -1 -1 3.000 0 0 -1 0 0 2 + 1200 7200 3900 7200 +2 1 1 1 0 7 56 -1 -1 3.000 0 0 -1 0 0 2 + 1200 6300 3900 6300 +4 0 0 50 -1 18 11 0.0000 4 180 1680 1200 7725 (3) Vegetated urban\001 +-6 +6 -1050 8700 -900 9000 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1575 6675 -1500 6675 -1500 6825 -1575 6825 -1575 6675 + -1050 8700 -975 8700 -975 8850 -1050 8850 -1050 8700 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1650 6825 -1575 6825 -1575 6975 -1650 6975 -1650 6825 + -975 8850 -900 8850 -900 9000 -975 9000 -975 8850 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1575 6825 -1500 6825 -1500 6975 -1575 6975 -1575 6825 + -1050 8850 -975 8850 -975 9000 -1050 9000 -1050 8850 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1500 6675 -1425 6675 -1425 6825 -1500 6825 -1500 6675 + -975 8700 -900 8700 -900 8850 -975 8850 -975 8700 +-6 +6 -1050 9000 -900 9300 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1425 6675 -1350 6675 -1350 6825 -1425 6825 -1425 6675 + -1050 9000 -975 9000 -975 9150 -1050 9150 -1050 9000 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1425 6825 -1350 6825 -1350 6975 -1425 6975 -1425 6825 + -975 9150 -900 9150 -900 9300 -975 9300 -975 9150 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1500 6825 -1425 6825 -1425 6975 -1500 6975 -1500 6825 + -1050 9150 -975 9150 -975 9300 -1050 9300 -1050 9150 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -150 6825 -75 6825 -75 6975 -150 6975 -150 6825 + -975 9000 -900 9000 -900 9150 -975 9150 -975 9000 +-6 +6 -900 8700 -750 9000 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -75 6825 0 6825 0 6975 -75 6975 -75 6825 + -900 8700 -825 8700 -825 8850 -900 8850 -900 8700 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 0 6825 75 6825 75 6975 0 6975 0 6825 + -825 8850 -750 8850 -750 9000 -825 9000 -825 8850 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 75 6825 150 6825 150 6975 75 6975 75 6825 + -900 8850 -825 8850 -825 9000 -900 9000 -900 8850 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 225 6825 300 6825 300 6975 225 6975 225 6825 + -825 8700 -750 8700 -750 8850 -825 8850 -825 8700 +-6 +6 -900 9000 -750 9300 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - 150 6825 225 6825 225 6975 150 6975 150 6825 + -900 9000 -825 9000 -825 9150 -900 9150 -900 9000 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1650 6525 -1575 6525 -1575 6675 -1650 6675 -1650 6525 + -825 9150 -750 9150 -750 9300 -825 9300 -825 9150 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1575 6525 -1500 6525 -1500 6675 -1575 6675 -1575 6525 + -900 9150 -825 9150 -825 9300 -900 9300 -900 9150 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1500 6525 -1425 6525 -1425 6675 -1500 6675 -1500 6525 + -825 9000 -750 9000 -750 9150 -825 9150 -825 9000 +-6 +6 -750 8700 -600 9000 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1425 6525 -1350 6525 -1350 6675 -1425 6675 -1425 6525 + -750 8700 -675 8700 -675 8850 -750 8850 -750 8700 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -525 7425 -450 7425 -450 7575 -525 7575 -525 7425 + -675 8850 -600 8850 -600 9000 -675 9000 -675 8850 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -525 7275 -450 7275 -450 7425 -525 7425 -525 7275 + -750 8850 -675 8850 -675 9000 -750 9000 -750 8850 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -600 7275 -525 7275 -525 7425 -600 7425 -600 7275 + -675 8700 -600 8700 -600 8850 -675 8850 -675 8700 +-6 +6 -750 9000 -600 9300 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -600 7425 -525 7425 -525 7575 -600 7575 -600 7425 + -750 9000 -675 9000 -675 9150 -750 9150 -750 9000 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -675 7275 -600 7275 -600 7425 -675 7425 -675 7275 + -675 9150 -600 9150 -600 9300 -675 9300 -675 9150 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -675 7425 -600 7425 -600 7575 -675 7575 -675 7425 + -750 9150 -675 9150 -675 9300 -750 9300 -750 9150 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -750 7275 -675 7275 -675 7425 -750 7425 -750 7275 + -675 9000 -600 9000 -600 9150 -675 9150 -675 9000 +-6 +6 -600 8700 -450 9000 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -750 7425 -675 7425 -675 7575 -750 7575 -750 7425 + -600 8700 -525 8700 -525 8850 -600 8850 -600 8700 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1650 6675 -1575 6675 -1575 6825 -1650 6825 -1650 6675 + -525 8850 -450 8850 -450 9000 -525 9000 -525 8850 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -750 7125 -675 7125 -675 7275 -750 7275 -750 7125 + -600 8850 -525 8850 -525 9000 -600 9000 -600 8850 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1500 6975 -1425 6975 -1425 7125 -1500 7125 -1500 6975 + -525 8700 -450 8700 -450 8850 -525 8850 -525 8700 +-6 +6 -600 9000 -450 9300 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1425 6975 -1350 6975 -1350 7125 -1425 7125 -1425 6975 + -600 9000 -525 9000 -525 9150 -600 9150 -600 9000 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1500 7275 -1425 7275 -1425 7425 -1500 7425 -1500 7275 + -525 9150 -450 9150 -450 9300 -525 9300 -525 9150 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1500 7425 -1425 7425 -1425 7575 -1500 7575 -1500 7425 + -600 9150 -525 9150 -525 9300 -600 9300 -600 9150 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1425 7125 -1350 7125 -1350 7275 -1425 7275 -1425 7125 + -525 9000 -450 9000 -450 9150 -525 9150 -525 9000 +-6 +6 300 8700 450 9000 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1350 7125 -1275 7125 -1275 7275 -1350 7275 -1350 7125 + 300 8700 375 8700 375 8850 300 8850 300 8700 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1275 7125 -1200 7125 -1200 7275 -1275 7275 -1275 7125 + 375 8850 450 8850 450 9000 375 9000 375 8850 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1500 7125 -1425 7125 -1425 7275 -1500 7275 -1500 7125 + 300 8850 375 8850 375 9000 300 9000 300 8850 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1425 7275 -1350 7275 -1350 7425 -1425 7425 -1425 7275 + 375 8700 450 8700 450 8850 375 8850 375 8700 +-6 +6 300 9000 450 9300 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1425 7425 -1350 7425 -1350 7575 -1425 7575 -1425 7425 + 300 9000 375 9000 375 9150 300 9150 300 9000 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1350 7275 -1275 7275 -1275 7425 -1350 7425 -1350 7275 + 375 9150 450 9150 450 9300 375 9300 375 9150 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1350 7425 -1275 7425 -1275 7575 -1350 7575 -1350 7425 + 300 9150 375 9150 375 9300 300 9300 300 9150 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1275 7425 -1200 7425 -1200 7575 -1275 7575 -1275 7425 + 375 9000 450 9000 450 9150 375 9150 375 9000 +-6 +6 150 8700 300 9000 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1275 7275 -1200 7275 -1200 7425 -1275 7425 -1275 7275 + 150 8700 225 8700 225 8850 150 8850 150 8700 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1725 6975 -1650 6975 -1650 7125 -1725 7125 -1725 6975 + 225 8850 300 8850 300 9000 225 9000 225 8850 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1650 6975 -1575 6975 -1575 7125 -1650 7125 -1650 6975 + 150 8850 225 8850 225 9000 150 9000 150 8850 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1575 6975 -1500 6975 -1500 7125 -1575 7125 -1575 6975 + 225 8700 300 8700 300 8850 225 8850 225 8700 +-6 +6 150 9000 300 9300 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1800 7275 -1725 7275 -1725 7425 -1800 7425 -1800 7275 + 150 9000 225 9000 225 9150 150 9150 150 9000 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1800 7425 -1725 7425 -1725 7575 -1800 7575 -1800 7425 + 225 9150 300 9150 300 9300 225 9300 225 9150 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1725 7125 -1650 7125 -1650 7275 -1725 7275 -1725 7125 + 150 9150 225 9150 225 9300 150 9300 150 9150 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1650 7125 -1575 7125 -1575 7275 -1650 7275 -1650 7125 + 225 9000 300 9000 300 9150 225 9150 225 9000 +-6 +6 0 8700 150 9000 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1575 7125 -1500 7125 -1500 7275 -1575 7275 -1575 7125 + 0 8700 75 8700 75 8850 0 8850 0 8700 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1800 7125 -1725 7125 -1725 7275 -1800 7275 -1800 7125 + 75 8850 150 8850 150 9000 75 9000 75 8850 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1725 7275 -1650 7275 -1650 7425 -1725 7425 -1725 7275 + 0 8850 75 8850 75 9000 0 9000 0 8850 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1725 7425 -1650 7425 -1650 7575 -1725 7575 -1725 7425 + 75 8700 150 8700 150 8850 75 8850 75 8700 +-6 +6 0 9000 150 9300 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1650 7275 -1575 7275 -1575 7425 -1650 7425 -1650 7275 + 0 9000 75 9000 75 9150 0 9150 0 9000 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1650 7425 -1575 7425 -1575 7575 -1650 7575 -1650 7425 + 75 9150 150 9150 150 9300 75 9300 75 9150 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1575 7425 -1500 7425 -1500 7575 -1575 7575 -1575 7425 + 0 9150 75 9150 75 9300 0 9300 0 9150 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1575 7275 -1500 7275 -1500 7425 -1575 7425 -1575 7275 + 75 9000 150 9000 150 9150 75 9150 75 9000 +-6 +6 -2025 8700 -1875 9000 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -675 7125 -600 7125 -600 7275 -675 7275 -675 7125 + -2025 8700 -1950 8700 -1950 8850 -2025 8850 -2025 8700 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -600 7125 -525 7125 -525 7275 -600 7275 -600 7125 + -1950 8850 -1875 8850 -1875 9000 -1950 9000 -1950 8850 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -525 7125 -450 7125 -450 7275 -525 7275 -525 7125 + -2025 8850 -1950 8850 -1950 9000 -2025 9000 -2025 8850 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1725 6825 -1650 6825 -1650 6975 -1725 6975 -1725 6825 + -1950 8700 -1875 8700 -1875 8850 -1950 8850 -1950 8700 +-6 +6 -2025 9000 -1875 9300 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1725 6675 -1650 6675 -1650 6825 -1725 6825 -1725 6675 + -2025 9000 -1950 9000 -1950 9150 -2025 9150 -2025 9000 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1725 6525 -1650 6525 -1650 6675 -1725 6675 -1725 6525 + -1950 9150 -1875 9150 -1875 9300 -1950 9300 -1950 9150 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1875 7125 -1800 7125 -1800 7275 -1875 7275 -1875 7125 + -2025 9150 -1950 9150 -1950 9300 -2025 9300 -2025 9150 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1875 7275 -1800 7275 -1800 7425 -1875 7425 -1875 7275 + -1950 9000 -1875 9000 -1875 9150 -1950 9150 -1950 9000 +-6 +6 -1875 9000 -1725 9300 2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 - -1875 7425 -1800 7425 -1800 7575 -1875 7575 -1875 7425 -2 2 0 1 -1 24 44 -1 10 0.000 0 0 -1 0 0 5 - -2100 7575 600 7575 600 7725 -2100 7725 -2100 7575 -2 2 0 1 -1 24 44 -1 10 0.000 0 0 -1 0 0 5 - 1200 7575 3900 7575 3900 7725 1200 7725 1200 7575 -2 1 1 1 0 7 56 -1 -1 3.000 0 0 -1 0 0 2 - 1200 7125 3900 7125 -2 1 1 1 0 7 56 -1 -1 3.000 0 0 -1 0 0 2 - 1200 6825 3900 6825 -2 1 1 1 0 7 56 -1 -1 3.000 0 0 -1 0 0 2 - 1200 7425 3900 7425 -2 1 1 1 0 7 56 -1 -1 3.000 0 0 -1 0 0 2 - 1200 6525 3900 6525 -2 1 1 1 0 7 56 -1 -1 3.000 0 0 -1 0 0 2 - -2100 7425 600 7425 -2 1 1 1 0 7 56 -1 -1 3.000 0 0 -1 0 0 2 - -2100 7125 600 7125 -2 1 1 1 0 7 56 -1 -1 3.000 0 0 -1 0 0 2 - -2100 6825 600 6825 -2 1 1 1 0 7 56 -1 -1 3.000 0 0 -1 0 0 2 - -2100 6525 600 6525 + -1875 9000 -1800 9000 -1800 9150 -1875 9150 -1875 9000 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1800 9150 -1725 9150 -1725 9300 -1800 9300 -1800 9150 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1875 9150 -1800 9150 -1800 9300 -1875 9300 -1875 9150 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1800 9000 -1725 9000 -1725 9150 -1800 9150 -1800 9000 +-6 +6 -1875 8700 -1725 9000 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1875 8700 -1800 8700 -1800 8850 -1875 8850 -1875 8700 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1800 8850 -1725 8850 -1725 9000 -1800 9000 -1800 8850 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1875 8850 -1800 8850 -1800 9000 -1875 9000 -1875 8850 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + -1800 8700 -1725 8700 -1725 8850 -1800 8850 -1800 8700 +-6 +6 3225 8700 3675 9300 +6 3225 8700 3375 9000 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 3225 8700 3300 8700 3300 8850 3225 8850 3225 8700 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 3300 8850 3375 8850 3375 9000 3300 9000 3300 8850 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 3225 8850 3300 8850 3300 9000 3225 9000 3225 8850 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 3300 8700 3375 8700 3375 8850 3300 8850 3300 8700 +-6 +6 3225 9000 3375 9300 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 3225 9000 3300 9000 3300 9150 3225 9150 3225 9000 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 3300 9150 3375 9150 3375 9300 3300 9300 3300 9150 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 3225 9150 3300 9150 3300 9300 3225 9300 3225 9150 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 3300 9000 3375 9000 3375 9150 3300 9150 3300 9000 +-6 +6 3375 8700 3525 9000 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 3375 8700 3450 8700 3450 8850 3375 8850 3375 8700 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 3450 8850 3525 8850 3525 9000 3450 9000 3450 8850 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 3375 8850 3450 8850 3450 9000 3375 9000 3375 8850 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 3450 8700 3525 8700 3525 8850 3450 8850 3450 8700 +-6 +6 3375 9000 3525 9300 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 3375 9000 3450 9000 3450 9150 3375 9150 3375 9000 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 3450 9150 3525 9150 3525 9300 3450 9300 3450 9150 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 3375 9150 3450 9150 3450 9300 3375 9300 3375 9150 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 3450 9000 3525 9000 3525 9150 3450 9150 3450 9000 +-6 +6 3525 8700 3675 9000 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 3525 8700 3600 8700 3600 8850 3525 8850 3525 8700 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 3600 8850 3675 8850 3675 9000 3600 9000 3600 8850 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 3525 8850 3600 8850 3600 9000 3525 9000 3525 8850 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 3600 8700 3675 8700 3675 8850 3600 8850 3600 8700 +-6 +6 3525 9000 3675 9300 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 3525 9000 3600 9000 3600 9150 3525 9150 3525 9000 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 3600 9150 3675 9150 3675 9300 3600 9300 3600 9150 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 3525 9150 3600 9150 3600 9300 3525 9300 3525 9150 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 3600 9000 3675 9000 3675 9150 3600 9150 3600 9000 +-6 +-6 +6 2325 8700 2775 9300 +6 2325 8700 2475 9000 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 2325 8700 2400 8700 2400 8850 2325 8850 2325 8700 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 2400 8850 2475 8850 2475 9000 2400 9000 2400 8850 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 2325 8850 2400 8850 2400 9000 2325 9000 2325 8850 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 2400 8700 2475 8700 2475 8850 2400 8850 2400 8700 +-6 +6 2325 9000 2475 9300 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 2325 9000 2400 9000 2400 9150 2325 9150 2325 9000 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 2400 9150 2475 9150 2475 9300 2400 9300 2400 9150 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 2325 9150 2400 9150 2400 9300 2325 9300 2325 9150 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 2400 9000 2475 9000 2475 9150 2400 9150 2400 9000 +-6 +6 2475 8700 2625 9000 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 2475 8700 2550 8700 2550 8850 2475 8850 2475 8700 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 2550 8850 2625 8850 2625 9000 2550 9000 2550 8850 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 2475 8850 2550 8850 2550 9000 2475 9000 2475 8850 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 2550 8700 2625 8700 2625 8850 2550 8850 2550 8700 +-6 +6 2475 9000 2625 9300 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 2475 9000 2550 9000 2550 9150 2475 9150 2475 9000 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 2550 9150 2625 9150 2625 9300 2550 9300 2550 9150 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 2475 9150 2550 9150 2550 9300 2475 9300 2475 9150 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 2550 9000 2625 9000 2625 9150 2550 9150 2550 9000 +-6 +6 2625 8700 2775 9000 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 2625 8700 2700 8700 2700 8850 2625 8850 2625 8700 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 2700 8850 2775 8850 2775 9000 2700 9000 2700 8850 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 2625 8850 2700 8850 2700 9000 2625 9000 2625 8850 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 2700 8700 2775 8700 2775 8850 2700 8850 2700 8700 +-6 +6 2625 9000 2775 9300 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 2625 9000 2700 9000 2700 9150 2625 9150 2625 9000 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 2700 9150 2775 9150 2775 9300 2700 9300 2700 9150 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 2625 9150 2700 9150 2700 9300 2625 9300 2625 9150 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 2700 9000 2775 9000 2775 9150 2700 9150 2700 9000 +-6 +-6 +6 1425 8700 1875 9300 +6 1425 8700 1575 9000 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 1425 8700 1500 8700 1500 8850 1425 8850 1425 8700 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 1500 8850 1575 8850 1575 9000 1500 9000 1500 8850 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 1425 8850 1500 8850 1500 9000 1425 9000 1425 8850 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 1500 8700 1575 8700 1575 8850 1500 8850 1500 8700 +-6 +6 1425 9000 1575 9300 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 1425 9000 1500 9000 1500 9150 1425 9150 1425 9000 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 1500 9150 1575 9150 1575 9300 1500 9300 1500 9150 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 1425 9150 1500 9150 1500 9300 1425 9300 1425 9150 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 1500 9000 1575 9000 1575 9150 1500 9150 1500 9000 +-6 +6 1575 8700 1725 9000 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 1575 8700 1650 8700 1650 8850 1575 8850 1575 8700 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 1650 8850 1725 8850 1725 9000 1650 9000 1650 8850 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 1575 8850 1650 8850 1650 9000 1575 9000 1575 8850 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 1650 8700 1725 8700 1725 8850 1650 8850 1650 8700 +-6 +6 1575 9000 1725 9300 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 1575 9000 1650 9000 1650 9150 1575 9150 1575 9000 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 1650 9150 1725 9150 1725 9300 1650 9300 1650 9150 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 1575 9150 1650 9150 1650 9300 1575 9300 1575 9150 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 1650 9000 1725 9000 1725 9150 1650 9150 1650 9000 +-6 +6 1725 8700 1875 9000 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 1725 8700 1800 8700 1800 8850 1725 8850 1725 8700 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 1800 8850 1875 8850 1875 9000 1800 9000 1800 8850 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 1725 8850 1800 8850 1800 9000 1725 9000 1725 8850 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 1800 8700 1875 8700 1875 8850 1800 8850 1800 8700 +-6 +6 1725 9000 1875 9300 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 1725 9000 1800 9000 1800 9150 1725 9150 1725 9000 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 1800 9150 1875 9150 1875 9300 1800 9300 1800 9150 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 1725 9150 1800 9150 1800 9300 1725 9300 1725 9150 +2 2 0 1 15 17 50 -1 20 0.000 0 0 -1 0 0 5 + 1800 9000 1875 9000 1875 9150 1800 9150 1800 9000 +-6 +-6 +2 1 0 1 25 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 1575 5175 1725 5025 +2 1 0 1 25 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 1500 4875 1575 4725 +2 1 0 1 25 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 1500 4875 1425 4800 +2 1 0 2 25 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 1575 5400 1575 5175 1500 4875 +2 1 0 1 25 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 3525 5175 3600 5100 +2 1 0 2 25 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 3525 5400 3525 5175 3450 5025 +2 1 0 1 25 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 2625 5175 2775 5025 +2 1 0 1 25 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 2550 4875 2625 4500 +2 1 0 1 25 7 50 -1 -1 0.000 0 0 -1 0 0 2 + 2550 4875 2400 4800 +2 1 0 2 25 7 50 -1 -1 0.000 0 0 -1 0 0 3 + 2625 5400 2625 5175 2550 4875 +2 2 0 1 12 14 51 -1 20 0.000 0 0 -1 0 0 5 + 1350 4950 1800 4950 1800 5250 1350 5250 1350 4950 +2 2 0 1 12 14 51 -1 20 0.000 0 0 -1 0 0 5 + 2325 4950 2925 4950 2925 5250 2325 5250 2325 4950 +2 2 0 1 12 14 51 -1 20 0.000 0 0 -1 0 0 5 + 1350 4650 1725 4650 1725 4950 1350 4950 1350 4650 +2 2 0 1 12 14 51 -1 20 0.000 0 0 -1 0 0 5 + 2475 4350 2775 4350 2775 4650 2475 4650 2475 4350 +2 2 0 1 12 14 51 -1 20 0.000 0 0 -1 0 0 5 + 2325 4650 2850 4650 2850 4950 2325 4950 2325 4650 +2 2 0 1 12 14 51 -1 20 0.000 0 0 -1 0 0 5 + 3375 4950 3675 4950 3675 5250 3375 5250 3375 4950 +2 2 0 1 -1 24 50 -1 10 0.000 0 0 -1 0 0 5 + 1200 5400 3900 5400 3900 5550 1200 5550 1200 5400 +2 2 0 1 -1 24 50 -1 10 0.000 0 0 -1 0 0 5 + -2100 5400 600 5400 600 5550 -2100 5550 -2100 5400 2 1 1 1 0 7 56 -1 -1 3.000 0 0 -1 0 0 2 1200 5250 3900 5250 2 1 1 1 0 7 56 -1 -1 3.000 0 0 -1 0 0 2 @@ -441,7 +813,15 @@ Single 1200 4650 3900 4650 2 1 1 1 0 7 56 -1 -1 3.000 0 0 -1 0 0 2 1200 4350 3900 4350 -4 0 0 50 -1 18 11 0.0000 4 165 720 -2100 5775 (0) Flat\001 -4 0 0 50 -1 18 11 0.0000 4 165 900 1200 5775 (1) Forest\001 -4 0 0 50 -1 18 11 0.0000 4 180 1710 1200 7950 (3) Vegetated urban\001 -4 0 0 50 -1 18 11 0.0000 4 165 810 -2100 7950 (2) Urban\001 +2 2 0 1 -1 24 44 -1 10 0.000 0 0 -1 0 0 5 + -2100 9300 600 9300 600 9450 -2100 9450 -2100 9300 +2 1 1 1 0 7 56 -1 -1 3.000 0 0 -1 0 0 2 + -2100 8700 600 8700 +2 2 0 1 -1 24 44 -1 10 0.000 0 0 -1 0 0 5 + 1200 9300 3900 9300 3900 9450 1200 9450 1200 9300 +2 1 1 1 0 7 56 -1 -1 3.000 0 0 -1 0 0 2 + 1200 8700 3900 8700 +4 0 0 50 -1 18 11 0.0000 4 165 585 -2100 5775 (0) Flat\001 +4 0 0 50 -1 18 11 0.0000 4 165 825 1200 5775 (1) Forest\001 +4 0 0 50 -1 18 11 0.0000 4 165 1395 -2100 9675 (4) Simple urban\001 +4 0 0 50 -1 18 11 0.0000 4 165 1395 1200 9675 (5) Infinite street\001 diff --git a/doc/surface_type_schematic.pdf b/doc/surface_type_schematic.pdf index 77a87ca4d77330f0616ec3d9a4cfb85c7e03eb43..d817fdfb01a82a0d650a40282d00d48f0db3d648 100644 GIT binary patch delta 3057 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 Date: Wed, 27 Oct 2021 13:45:28 +0100 Subject: [PATCH 20/28] Changed gfortran optimizations from -O3 to the faster(!) -O2 -march=native --- Makefile_include.gfortran | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Makefile_include.gfortran b/Makefile_include.gfortran index 0e24794..7875318 100644 --- a/Makefile_include.gfortran +++ b/Makefile_include.gfortran @@ -14,8 +14,11 @@ OMPFLAG = -fopenmp ifndef DEBUG # --NORMAL CONFIGURATION-- -# Optimization flags -OPTFLAGS = -O3 -march=native +# Optimization flags: note that experience with gfortran is that the +# code is faster with -O2 than with -O3. The "-march=native" optimizes +# for the architecture on which the compilation takes place, but this +# means the code might not run on older CPUs. +OPTFLAGS = -O2 -march=native # Warning flags: all except those that warn about unused stuff WARNFLAGS = -Wall -Wno-unused-label -Wno-unused-dummy-argument -Wno-unused-variable -Wimplicit-interface From 7d6044ee8158dec948e899e0376fb5ab02bda3d6 Mon Sep 17 00:00:00 2001 From: Robin Hogan Date: Wed, 27 Oct 2021 13:46:36 +0100 Subject: [PATCH 21/28] Minor optimizations of matrix-matrix and matrix-vector multiplications --- radtool/radtool_matrix.F90 | 138 ++++++++++++++++++++++++++++++++----- 1 file changed, 119 insertions(+), 19 deletions(-) diff --git a/radtool/radtool_matrix.F90 b/radtool/radtool_matrix.F90 index db6a570..058ab10 100644 --- a/radtool/radtool_matrix.F90 +++ b/radtool/radtool_matrix.F90 @@ -54,6 +54,12 @@ module radtool_matrix module procedure fast_expm_exchange_2, fast_expm_exchange_3 end interface fast_expm_exchange + ! The routines in this module can be called millions of times, so + ! calling Dr Hook for each one may be a significant overhead. + ! Uncomment the following to turn Dr Hook on. + +!#define DO_DR_HOOK_MATRIX + contains ! --- MATRIX-VECTOR MULTIPLICATION --- @@ -64,7 +70,9 @@ module radtool_matrix ! multiplications on first iend pairs function mat_x_vec(n,iend,m,A,b,do_top_left_only_in) +#ifdef DO_DR_HOOK_MATRIX use yomhook, only : lhook, dr_hook +#endif integer, intent(in) :: n, m, iend real(jprb), intent(in), dimension(:,:,:) :: A @@ -72,12 +80,14 @@ function mat_x_vec(n,iend,m,A,b,do_top_left_only_in) logical, intent(in), optional :: do_top_left_only_in real(jprb), dimension(iend,m):: mat_x_vec - integer :: j1, j2 + integer :: j1, j2, jn logical :: do_top_left_only +#ifdef DO_DR_HOOK_MATRIX real(jprb) :: hook_handle if (lhook) call dr_hook('radtool_matrix:mat_x_vec',0,hook_handle) +#endif if (present(do_top_left_only_in)) then do_top_left_only = do_top_left_only_in @@ -88,18 +98,22 @@ function mat_x_vec(n,iend,m,A,b,do_top_left_only_in) ! Array-wise assignment mat_x_vec = 0.0_jprb - if (do_top_left_only) then - mat_x_vec(1:iend,1) = A(1:iend,1,1)*b(1:iend,1) - else + if (.not. do_top_left_only) then do j1 = 1,m do j2 = 1,m - mat_x_vec(1:iend,j1) = mat_x_vec(1:iend,j1) & - & + A(1:iend,j1,j2)*b(1:iend,j2) + do jn = 1,iend + mat_x_vec(jn,j1) = mat_x_vec(jn,j1) & + & + A(jn,j1,j2)*b(jn,j2) + end do end do end do + else + mat_x_vec(1:iend,1) = A(1:iend,1,1)*b(1:iend,1) end if +#ifdef DO_DR_HOOK_MATRIX if (lhook) call dr_hook('radtool_matrix:mat_x_vec',1,hook_handle) +#endif end function mat_x_vec @@ -110,7 +124,9 @@ end function mat_x_vec ! multiplications on all n pairs function rect_mat_x_vec(n,k,l,A,b) +#ifdef DO_DR_HOOK_MATRIX use yomhook, only : lhook, dr_hook +#endif integer, intent(in) :: n, k, l real(jprb), intent(in), dimension(n,k,l) :: A @@ -118,9 +134,12 @@ function rect_mat_x_vec(n,k,l,A,b) real(jprb), dimension(n,k) :: rect_mat_x_vec integer :: j1, j2 + +#ifdef DO_DR_HOOK_MATRIX real(jprb) :: hook_handle if (lhook) call dr_hook('radtool_matrix:rect_mat_x_vec',0,hook_handle) +#endif ! Array-wise assignment rect_mat_x_vec = 0.0_jprb @@ -133,7 +152,9 @@ function rect_mat_x_vec(n,k,l,A,b) end do end do +#ifdef DO_DR_HOOK_MATRIX if (lhook) call dr_hook('radtool_matrix:rect_mat_x_vec',1,hook_handle) +#endif end function rect_mat_x_vec @@ -144,7 +165,9 @@ end function rect_mat_x_vec ! multiplications on first iend pairs function singlemat_x_vec(n,iend,m,A,b) +#ifdef DO_DR_HOOK_MATRIX use yomhook, only : lhook, dr_hook +#endif integer, intent(in) :: n, m, iend real(jprb), intent(in), dimension(m,m) :: A @@ -152,9 +175,12 @@ function singlemat_x_vec(n,iend,m,A,b) real(jprb), dimension(iend,m) :: singlemat_x_vec integer :: j1, j2 + +#ifdef DO_DR_HOOK_MATRIX real(jprb) :: hook_handle if (lhook) call dr_hook('radtool_matrix:single_mat_x_vec',0,hook_handle) +#endif ! Array-wise assignment singlemat_x_vec = 0.0_jprb @@ -166,7 +192,9 @@ function singlemat_x_vec(n,iend,m,A,b) end do end do +#ifdef DO_DR_HOOK_MATRIX if (lhook) call dr_hook('radtool_matrix:single_mat_x_vec',1,hook_handle) +#endif end function singlemat_x_vec @@ -177,7 +205,9 @@ end function singlemat_x_vec ! multiplications on all pairs function rect_singlemat_x_vec(n,m,k,A,b) +#ifdef DO_DR_HOOK_MATRIX use yomhook, only : lhook, dr_hook +#endif integer, intent(in) :: n, m, k real(jprb), intent(in), dimension(m,k) :: A @@ -185,9 +215,12 @@ function rect_singlemat_x_vec(n,m,k,A,b) real(jprb), dimension(n,m) :: rect_singlemat_x_vec integer :: j1, j2 + +#ifdef DO_DR_HOOK_MATRIX real(jprb) :: hook_handle if (lhook) call dr_hook('radtool_matrix:rect_single_mat_x_vec',0,hook_handle) +#endif ! Array-wise assignment rect_singlemat_x_vec = 0.0_jprb @@ -199,7 +232,9 @@ function rect_singlemat_x_vec(n,m,k,A,b) end do end do +#ifdef DO_DR_HOOK_MATRIX if (lhook) call dr_hook('radtool_matrix:rect_single_mat_x_vec',1,hook_handle) +#endif end function rect_singlemat_x_vec @@ -212,19 +247,24 @@ end function rect_singlemat_x_vec ! all n matrix pairs function mat_x_mat(n,iend,m,A,B,i_matrix_pattern) +#ifdef DO_DR_HOOK_MATRIX use yomhook, only : lhook, dr_hook +#endif integer, intent(in) :: n, m, iend integer, intent(in), optional :: i_matrix_pattern real(jprb), intent(in), dimension(:,:,:) :: A, B real(jprb), dimension(iend,m,m) :: mat_x_mat - integer :: j1, j2, j3 + integer :: j1, j2, j3, jn integer :: mblock, m2block integer :: i_actual_matrix_pattern + +#ifdef DO_DR_HOOK_MATRIX real(jprb) :: hook_handle if (lhook) call dr_hook('radtool_matrix:mat_x_mat',0,hook_handle) +#endif if (present(i_matrix_pattern)) then i_actual_matrix_pattern = i_matrix_pattern @@ -235,7 +275,19 @@ function mat_x_mat(n,iend,m,A,B,i_matrix_pattern) ! Array-wise assignment mat_x_mat = 0.0_jprb - if (i_actual_matrix_pattern == IMatrixPatternShortwave) then + if (i_actual_matrix_pattern /= IMatrixPatternShortwave) then + ! Ordinary dense matrix + do j2 = 1,m + do j3 = 1,m + do j1 = 1,m + do jn = 1,iend + mat_x_mat(jn,j1,j2) = mat_x_mat(jn,j1,j2) & + & + A(jn,j1,j3)*B(jn,j3,j2) + end do + end do + end do + end do + else ! Matrix has a sparsity pattern ! (C D E) ! A = (F G H) @@ -267,19 +319,11 @@ function mat_x_mat(n,iend,m,A,B,i_matrix_pattern) end do end do end do - else - ! Ordinary dense matrix - do j2 = 1,m - do j1 = 1,m - do j3 = 1,m - mat_x_mat(1:iend,j1,j2) = mat_x_mat(1:iend,j1,j2) & - & + A(1:iend,j1,j3)*B(1:iend,j3,j2) - end do - end do - end do end if +#ifdef DO_DR_HOOK_MATRIX if (lhook) call dr_hook('radtool_matrix:mat_x_mat',1,hook_handle) +#endif end function mat_x_mat @@ -290,7 +334,9 @@ end function mat_x_mat ! all n matrix pairs function rect_mat_x_mat(n,k,l,m,A,B) +#ifdef DO_DR_HOOK_MATRIX use yomhook, only : lhook, dr_hook +#endif integer, intent(in) :: n, k, l, m real(jprb), intent(in), dimension(n,k,l) :: A @@ -298,9 +344,12 @@ function rect_mat_x_mat(n,k,l,m,A,B) real(jprb), dimension(n,k,m) :: rect_mat_x_mat integer :: j1, j2, j3 + +#ifdef DO_DR_HOOK_MATRIX real(jprb) :: hook_handle if (lhook) call dr_hook('radtool_matrix:rect_mat_x_mat',0,hook_handle) +#endif ! Array-wise assignment rect_mat_x_mat = 0.0_jprb @@ -315,7 +364,9 @@ function rect_mat_x_mat(n,k,l,m,A,B) end do end do +#ifdef DO_DR_HOOK_MATRIX if (lhook) call dr_hook('radtool_matrix:rect_mat_x_mat',1,hook_handle) +#endif end function rect_mat_x_mat @@ -326,7 +377,9 @@ end function rect_mat_x_mat ! multiplications on the first iend matrix pairs function singlemat_x_mat(n,iend,m,A,B) +#ifdef DO_DR_HOOK_MATRIX use yomhook, only : lhook, dr_hook +#endif integer, intent(in) :: n, m, iend real(jprb), intent(in), dimension(m,m) :: A @@ -334,9 +387,12 @@ function singlemat_x_mat(n,iend,m,A,B) real(jprb), dimension(iend,m,m) :: singlemat_x_mat integer :: j1, j2, j3 + +#ifdef DO_DR_HOOK_MATRIX real(jprb) :: hook_handle if (lhook) call dr_hook('radtool_matrix:singlemat_x_mat',0,hook_handle) +#endif ! Array-wise assignment singlemat_x_mat = 0.0_jprb @@ -350,7 +406,9 @@ function singlemat_x_mat(n,iend,m,A,B) end do end do +#ifdef DO_DR_HOOK_MATRIX if (lhook) call dr_hook('radtool_matrix:singlemat_x_mat',1,hook_handle) +#endif end function singlemat_x_mat @@ -361,7 +419,9 @@ end function singlemat_x_mat ! multiplications on the first iend matrix pairs function mat_x_singlemat(n,iend,m,A,B) +#ifdef DO_DR_HOOK_MATRIX use yomhook, only : lhook, dr_hook +#endif integer, intent(in) :: n, m, iend real(jprb), intent(in), dimension(:,:,:) :: A @@ -369,9 +429,12 @@ function mat_x_singlemat(n,iend,m,A,B) real(jprb), dimension(iend,m,m) :: mat_x_singlemat integer :: j1, j2, j3 + +#ifdef DO_DR_HOOK_MATRIX real(jprb) :: hook_handle if (lhook) call dr_hook('radtool_matrix:mat_x_singlemat',0,hook_handle) +#endif ! Array-wise assignment mat_x_singlemat = 0.0_jprb @@ -385,7 +448,9 @@ function mat_x_singlemat(n,iend,m,A,B) end do end do +#ifdef DO_DR_HOOK_MATRIX if (lhook) call dr_hook('radtool_matrix:mat_x_singlemat',1,hook_handle) +#endif end function mat_x_singlemat @@ -395,7 +460,10 @@ end function mat_x_singlemat ! (with the n dimension varying fastest) and perform matrix ! multiplications on all matrix pairs function rect_mat_x_singlemat(n,m,o,p,A,B) + +#ifdef DO_DR_HOOK_MATRIX use yomhook, only : lhook, dr_hook +#endif integer, intent(in) :: n, m, o, p real(jprb), intent(in), dimension(:,:,:) :: A @@ -403,9 +471,12 @@ function rect_mat_x_singlemat(n,m,o,p,A,B) real(jprb), dimension(n,m,p) :: rect_mat_x_singlemat integer :: j1, j2, j3 + +#ifdef DO_DR_HOOK_MATRIX real(jprb) :: hook_handle if (lhook) call dr_hook('radtool_matrix:rect_mat_x_singlemat',0,hook_handle) +#endif ! Array-wise assignment rect_mat_x_singlemat = 0.0_jprb @@ -419,7 +490,9 @@ function rect_mat_x_singlemat(n,m,o,p,A,B) end do end do +#ifdef DO_DR_HOOK_MATRIX if (lhook) call dr_hook('radtool_matrix:rect_mat_x_singlemat',1,hook_handle) +#endif end function rect_mat_x_singlemat @@ -431,7 +504,9 @@ end function rect_mat_x_singlemat ! replaced by A(i,j)*Is, where Is is the s-by-s identity matrix. function rect_expandedmat_x_mat(n,m,o,s,p,A,B) +#ifdef DO_DR_HOOK_MATRIX use yomhook, only : lhook, dr_hook +#endif integer, intent(in) :: n, m, o, s, p real(jprb), intent(in), dimension(m,o) :: A @@ -441,9 +516,12 @@ function rect_expandedmat_x_mat(n,m,o,s,p,A,B) integer :: j1, j3 ! Indices of the unexpanded A integer :: jj1, jj2 ! Indices of the output matrix integer :: offset2 + +#ifdef DO_DR_HOOK_MATRIX real(jprb) :: hook_handle if (lhook) call dr_hook('radtool_matrix:rect_expandedmat_x_mat',0,hook_handle) +#endif ! Array-wise assignment rect_expandedmat_x_mat = 0.0_jprb @@ -463,12 +541,13 @@ function rect_expandedmat_x_mat(n,m,o,s,p,A,B) end do end do +#ifdef DO_DR_HOOK_MATRIX if (lhook) call dr_hook('radtool_matrix:rect_expandedmat_x_mat',1,hook_handle) +#endif end function rect_expandedmat_x_mat - !--------------------------------------------------------------------- ! Treat B as an m-by-o matrix and A as n p-by-m*s matrices (with the ! n dimension varying fastest) and perform matrix multiplications on @@ -476,7 +555,9 @@ end function rect_expandedmat_x_mat ! replaced by B(i,j)*Is, where Is is the s-by-s identity matrix. function rect_mat_x_expandedmat(n,m,o,s,p,A,B) +#ifdef DO_DR_HOOK_MATRIX use yomhook, only : lhook, dr_hook +#endif integer, intent(in) :: n, m, o, s, p real(jprb), intent(in), dimension(:,:,:) :: A @@ -486,9 +567,12 @@ function rect_mat_x_expandedmat(n,m,o,s,p,A,B) integer :: j2, j3 ! Indices of the unexpanded B integer :: jj1, jj2 ! Indices of the output matrix integer :: offset3 + +#ifdef DO_DR_HOOK_MATRIX real(jprb) :: hook_handle if (lhook) call dr_hook('radtool_matrix:rect_mat_x_expandedmat',0,hook_handle) +#endif ! Array-wise assignment rect_mat_x_expandedmat = 0.0_jprb @@ -507,7 +591,9 @@ function rect_mat_x_expandedmat(n,m,o,s,p,A,B) end do end do +#ifdef DO_DR_HOOK_MATRIX if (lhook) call dr_hook('radtool_matrix:rect_mat_x_expandedmat',1,hook_handle) +#endif end function rect_mat_x_expandedmat @@ -521,7 +607,9 @@ end function rect_mat_x_expandedmat ! matrix. function rect_expandedmat_x_vec(n,m,k,s,A,b) +#ifdef DO_DR_HOOK_MATRIX use yomhook, only : lhook, dr_hook +#endif integer, intent(in) :: n, m, k, s real(jprb), intent(in), dimension(m,k) :: A @@ -531,9 +619,12 @@ function rect_expandedmat_x_vec(n,m,k,s,A,b) integer :: j1, j3 ! Indices of the unexpanded A integer :: jj1 ! Indices of the output vector integer :: offset2 + +#ifdef DO_DR_HOOK_MATRIX real(jprb) :: hook_handle if (lhook) call dr_hook('radtool_matrix:rect_expandedmat_x_vec',0,hook_handle) +#endif ! Array-wise assignment rect_expandedmat_x_vec = 0.0_jprb @@ -551,7 +642,9 @@ function rect_expandedmat_x_vec(n,m,k,s,A,b) end do end do +#ifdef DO_DR_HOOK_MATRIX if (lhook) call dr_hook('radtool_matrix:rect_expandedmat_x_vec',1,hook_handle) +#endif end function rect_expandedmat_x_vec @@ -561,7 +654,9 @@ end function rect_expandedmat_x_vec ! m-by-m square matrices function identity_minus_mat_x_mat(n,iend,m,A,B,i_matrix_pattern) +#ifdef DO_DR_HOOK_MATRIX use yomhook, only : lhook, dr_hook +#endif integer, intent(in) :: n, m, iend integer, intent(in), optional :: i_matrix_pattern @@ -569,9 +664,12 @@ function identity_minus_mat_x_mat(n,iend,m,A,B,i_matrix_pattern) real(jprb), dimension(iend,m,m) :: identity_minus_mat_x_mat integer :: j + +#ifdef DO_DR_HOOK_MATRIX real(jprb) :: hook_handle if (lhook) call dr_hook('radtool_matrix:identity_mat_x_mat',0,hook_handle) +#endif if (present(i_matrix_pattern)) then identity_minus_mat_x_mat = mat_x_mat(n,iend,m,A,B,i_matrix_pattern) @@ -585,7 +683,9 @@ function identity_minus_mat_x_mat(n,iend,m,A,B,i_matrix_pattern) & = 1.0_jprb + identity_minus_mat_x_mat(1:iend,j,j) end do +#ifdef DO_DR_HOOK_MATRIX if (lhook) call dr_hook('radtool_matrix:identity_mat_x_mat',1,hook_handle) +#endif end function identity_minus_mat_x_mat From ded9278f8d0effecdb28aa4e017e99d965ca3810 Mon Sep 17 00:00:00 2001 From: Robin Hogan Date: Mon, 29 Nov 2021 20:43:11 +0000 Subject: [PATCH 22/28] Added namelist option vegetation_extinction_scaling --- driver/spartacus_surface_config.F90 | 5 +++- driver/spartacus_surface_read_input.F90 | 34 +++++++++++++++++-------- 2 files changed, 28 insertions(+), 11 deletions(-) diff --git a/driver/spartacus_surface_config.F90 b/driver/spartacus_surface_config.F90 index 67e0ed7..7b05ca6 100644 --- a/driver/spartacus_surface_config.F90 +++ b/driver/spartacus_surface_config.F90 @@ -50,6 +50,7 @@ module spartacus_surface_config real(kind=jprb) :: wall_lw_emissivity = -1.0_jprb real(kind=jprb) :: vegetation_fraction = -1.0_jprb real(kind=jprb) :: vegetation_extinction = -1.0_jprb + real(kind=jprb) :: vegetation_extinction_scaling = -1.0_jprb real(kind=jprb) :: vegetation_fsd = -1.0_jprb real(kind=jprb) :: vegetation_sw_ssa = -1.0_jprb real(kind=jprb) :: vegetation_lw_ssa = -1.0_jprb @@ -89,6 +90,7 @@ subroutine read_config_from_namelist(this, file_name, is_success) real(kind=jprb), pointer :: ground_sw_albedo, roof_sw_albedo, wall_sw_albedo real(kind=jprb), pointer :: ground_lw_emissivity, roof_lw_emissivity, wall_lw_emissivity real(kind=jprb), pointer :: vegetation_extinction, vegetation_sw_ssa + real(kind=jprb), pointer :: vegetation_extinction_scaling real(kind=jprb), pointer :: top_flux_dn_sw, top_flux_dn_direct_sw real(kind=jprb), pointer :: top_flux_dn_lw integer(kind=jpim), pointer :: isurfacetype @@ -101,7 +103,7 @@ subroutine read_config_from_namelist(this, file_name, is_success) & ground_lw_emissivity, roof_lw_emissivity, wall_lw_emissivity, & & vegetation_extinction, vegetation_sw_ssa, vegetation_fraction, & & top_flux_dn_sw, top_flux_dn_direct_sw, top_flux_dn_lw, & - & do_conservation_check, isurfacetype + & do_conservation_check, isurfacetype, vegetation_extinction_scaling do_parallel => this%do_parallel do_conservation_check => this%do_conservation_check @@ -120,6 +122,7 @@ subroutine read_config_from_namelist(this, file_name, is_success) vegetation_fraction => this%vegetation_fraction vegetation_fsd => this%vegetation_fsd vegetation_extinction =>this%vegetation_extinction + vegetation_extinction_scaling=>this%vegetation_extinction_scaling vegetation_sw_ssa => this%vegetation_sw_ssa top_flux_dn_sw => this%top_flux_dn_sw top_flux_dn_direct_sw => this%top_flux_dn_direct_sw diff --git a/driver/spartacus_surface_read_input.F90 b/driver/spartacus_surface_read_input.F90 index e9a4ce6..75b7e0b 100644 --- a/driver/spartacus_surface_read_input.F90 +++ b/driver/spartacus_surface_read_input.F90 @@ -113,6 +113,10 @@ subroutine read_input(file, config, driver_config, ncol, ntotlay, & if (config%do_vegetation) then if (driver_config%vegetation_fraction >= 0.0_jprb) then allocate(canopy_props%veg_fraction(ntotlay)) + if (driver_config%iverbose >= 2) then + write(nulout,'(a,i0,a,a,a)') ' Overriding vegetation fraction with ', & + & driver_config%vegetation_fraction + end if canopy_props%veg_fraction = driver_config%vegetation_fraction else call read_packed_1d(file, 'veg_fraction', canopy_props%nlay, & @@ -120,17 +124,27 @@ subroutine read_input(file, config, driver_config, ncol, ntotlay, & end if call read_packed_1d(file, 'veg_extinction', canopy_props%nlay, & & canopy_props%veg_ext) - if (driver_config%vegetation_extinction >= 0.0) then + if (driver_config%vegetation_extinction >= 0.0_jprb) then if (driver_config%iverbose >= 2) then write(nulout,'(a,g10.3)') ' Overriding vegetation extinction with ', & & driver_config%vegetation_extinction end if canopy_props%veg_ext = driver_config%vegetation_extinction + else if (driver_config%vegetation_extinction_scaling >= 0.0_jprb) then + canopy_props%veg_ext = canopy_props%veg_ext * driver_config%vegetation_extinction_scaling + if (driver_config%iverbose >= 2) then + write(nulout,'(a,g10.3)') ' Scaling vegetation extinction with ', & + & driver_config%vegetation_extinction_scaling + end if end if call read_packed_1d(file, 'veg_scale', canopy_props%nlay, & & canopy_props%veg_scale) if (driver_config%vegetation_fsd >= 0.0_jprb) then allocate(canopy_props%veg_fsd(ntotlay)) + if (driver_config%iverbose >= 2) then + write(nulout,'(a,g10.3)') ' Overriding vegetation fractional standard deviation with ', & + & driver_config%vegetation_fsd + end if canopy_props%veg_fsd = driver_config%vegetation_fsd else call read_packed_1d(file, 'veg_fsd', canopy_props%nlay, & @@ -166,7 +180,7 @@ subroutine read_input(file, config, driver_config, ncol, ntotlay, & end if call read_2d(file, 'ground_lw_emissivity', lw_spectral_props%ground_emissivity) - if (driver_config%ground_lw_emissivity >= 0.0) then + if (driver_config%ground_lw_emissivity >= 0.0_jprb) then if (driver_config%iverbose >= 2) then write(nulout,'(a,g10.3)') ' Overriding ground longwave emissivity with ', & & driver_config%ground_lw_emissivity @@ -178,7 +192,7 @@ subroutine read_input(file, config, driver_config, ncol, ntotlay, & ! Read urban properties needed for longwave calculations call read_packed_2d(file, 'roof_lw_emissivity', canopy_props%nlay, lw_spectral_props%roof_emissivity) - if (driver_config%roof_lw_emissivity >= 0.0) then + if (driver_config%roof_lw_emissivity >= 0.0_jprb) then if (driver_config%iverbose >= 2) then write(nulout,'(a,g10.3)') ' Overriding roof longwave emissivity with ', & & driver_config%roof_lw_emissivity @@ -188,7 +202,7 @@ subroutine read_input(file, config, driver_config, ncol, ntotlay, & call read_packed_2d(file, 'wall_lw_emissivity', canopy_props%nlay, & & lw_spectral_props%wall_emissivity) - if (driver_config%wall_lw_emissivity >= 0.0) then + if (driver_config%wall_lw_emissivity >= 0.0_jprb) then if (driver_config%iverbose >= 2) then write(nulout,'(a,g10.3)') ' Overriding wall longwave emissivity with ', & & driver_config%wall_lw_emissivity @@ -201,7 +215,7 @@ subroutine read_input(file, config, driver_config, ncol, ntotlay, & ! Read vegetation properties needed for longwave calculations call read_packed_2d(file, 'veg_lw_ssa', canopy_props%nlay, & & lw_spectral_props%veg_ssa) - if (driver_config%vegetation_lw_ssa >= 0.0) then + if (driver_config%vegetation_lw_ssa >= 0.0_jprb) then if (driver_config%iverbose >= 2) then write(nulout,'(a,g10.3)') ' Overriding vegetation longwave single-scattering albedo with ', & & driver_config%vegetation_lw_ssa @@ -270,7 +284,7 @@ subroutine read_input(file, config, driver_config, ncol, ntotlay, & if (config%do_sw) then ! Read ground properties needed for shortwave calculations call read_2d(file, 'ground_sw_albedo', sw_spectral_props%ground_albedo) - if (driver_config%ground_sw_albedo >= 0.0) then + if (driver_config%ground_sw_albedo >= 0.0_jprb) then if (driver_config%iverbose >= 2) then write(nulout,'(a,g10.3)') ' Overriding ground shortwave albedo with ', & & driver_config%ground_sw_albedo @@ -286,7 +300,7 @@ subroutine read_input(file, config, driver_config, ncol, ntotlay, & ! Read urban properties needed for shortwave calculations call read_packed_2d(file, 'roof_sw_albedo', canopy_props%nlay, & & sw_spectral_props%roof_albedo) - if (driver_config%roof_sw_albedo >= 0.0) then + if (driver_config%roof_sw_albedo >= 0.0_jprb) then if (driver_config%iverbose >= 2) then write(nulout,'(a,g10.3)') ' Overriding roof shortwave albedo with ', & & driver_config%roof_sw_albedo @@ -302,7 +316,7 @@ subroutine read_input(file, config, driver_config, ncol, ntotlay, & write(nulout,'(a)') ' Assuming roof albedo to direct albedo is the same as to diffuse' end if allocate(sw_spectral_props%roof_albedo_dir(ubound(sw_spectral_props%roof_albedo,1),ntotlay)) - if (driver_config%roof_sw_albedo >= 0.0) then + if (driver_config%roof_sw_albedo >= 0.0_jprb) then sw_spectral_props%roof_albedo_dir = driver_config%roof_sw_albedo else sw_spectral_props%roof_albedo_dir = sw_spectral_props%roof_albedo @@ -310,7 +324,7 @@ subroutine read_input(file, config, driver_config, ncol, ntotlay, & end if call read_packed_2d(file, 'wall_sw_albedo', canopy_props%nlay, sw_spectral_props%wall_albedo) - if (driver_config%wall_sw_albedo >= 0.0) then + if (driver_config%wall_sw_albedo >= 0.0_jprb) then if (driver_config%iverbose >= 2) then write(nulout,'(a,g10.3)') ' Overriding wall shortwave albedo with ', & & driver_config%wall_sw_albedo @@ -335,7 +349,7 @@ subroutine read_input(file, config, driver_config, ncol, ntotlay, & ! Read vegetation properties needed for shortwave calculations call read_packed_2d(file, 'veg_sw_ssa', canopy_props%nlay, & & sw_spectral_props%veg_ssa) - if (driver_config%vegetation_sw_ssa >= 0.0) then + if (driver_config%vegetation_sw_ssa >= 0.0_jprb) then if (driver_config%iverbose >= 2) then write(nulout,'(a,g10.3)') ' Overriding vegetation shortwave single-scattering albedo with ', & & driver_config%vegetation_sw_ssa From 5b937e8f9c299d9b1653b159b583f5980c6ff228 Mon Sep 17 00:00:00 2001 From: Robin Hogan Date: Mon, 29 Nov 2021 20:46:35 +0000 Subject: [PATCH 23/28] Upgraded documentation --- doc/spartacus_surface_documentation.pdf | Bin 218221 -> 218090 bytes doc/spartacus_surface_documentation.tex | 4 +++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/spartacus_surface_documentation.pdf b/doc/spartacus_surface_documentation.pdf index 49513e0ec758e902527e5d8f4fb4f21ee2c486f9..f62324d6129e0bda71aefdfac17e938604ff4ffb 100644 GIT binary patch delta 65665 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

N535NP7{`e>wqO?RHb&XyeH}S-~sXF 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 Date: Mon, 29 Nov 2021 20:47:09 +0000 Subject: [PATCH 24/28] Upgrade to 0.7.3 --- ChangeLog | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 3b1d00f..5d8030d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,4 @@ -version 0.7.3 +version 0.7.3 (27 October 2021) - Redefined veg_contact_fraction: now the fraction of the building edge that is touching veg, not the fraction of the vegetation edge that is touching a building @@ -21,6 +21,8 @@ version 0.7.3 - test/single_layer case for testing the new surface types - Namelist parameter radsurf_config:isurfacetype can be used to override the surface_type in the input file + - Namelist parameter radsurf_config:vegetation_extinction_scaling + can scale the vegetation extinction in the input file version 0.7.2 (4 October 2021) - Longwave urban modifications to give correct emission from From bac0979c8ee9051abde80b66d04856b039806c4f Mon Sep 17 00:00:00 2001 From: Robin Hogan Date: Tue, 30 Nov 2021 14:34:07 +0000 Subject: [PATCH 25/28] Updated RAMI5 scene netCDF input files to version 0.8 --- .../scene_nc/rami5_HET07_JPS_SUM_scene.nc | Bin 16040 -> 17028 bytes .../scene_nc/rami5_HET08_OPS_WIN_scene.nc | Bin 21668 -> 22744 bytes .../scene_nc/rami5_HET09_JBS_SUM_scene.nc | Bin 21676 -> 22752 bytes .../scene_nc/rami5_HET14_WCO_UND_scene.nc | Bin 16288 -> 17280 bytes .../scene_nc/rami5_HET15_JBS_WIN_scene.nc | Bin 21676 -> 22752 bytes 5 files changed, 0 insertions(+), 0 deletions(-) diff --git a/test/rami5/scene_nc/rami5_HET07_JPS_SUM_scene.nc b/test/rami5/scene_nc/rami5_HET07_JPS_SUM_scene.nc index 000dd22ee4fad654155be66d09b49151c6a37732..3aa0f743048d6666444abc786ab90464307b65c8 100644 GIT binary patch delta 1649 zcmaJWzB9j%=lAUI zc{(=KZqjVAYJwYWUlPPBuR&9;@sNw1jLX4FBvtRl;(ouxKLX8nAJ zz~2y)an5p~YEFhRW3C#EkOaG2jVYIouLZ}{I)A(!H6Ma+v{L4OnTUU&WCpYo38~6p zz*|IuQL$<9lc@}8n}`HnshzZnNZ79oPO2gjI+Rxe?-7Xw-X%fF8X|GX>kMA5A(A$G zPv~Mb#N<@(rI2^$8B(-plwk4Vn(7U{2Qh-U*7 zV`MLpe(p$A6hSPg^+reU(}ZQuzzu=pdr{T|rfN(|L}+ZXU1WSa!`oEVvoWHLw6Rs3 zZykOLtxZxc>LWCpl(Ntm!~YhOhTOuOS)^bmtCYyl7*91PJF$Ueto4`ybU4L~`NGP$ zgvxcPSTn4zg!ScIjZWe73@*$kkYAtJCK&kz4InrIOOf7iH3kRb9=p zE}fO(t!^HxXCs{~_7vk$+8C%*QWS&G$ch zi<)vToyskrM!mbZo9cXglRDg#LY=vD(h}CsTby_QvRolGzzy!XCJ+mTz`2HnRa<*tS#%cUop}uA8?gY6PGHW< z&~Q`_=leI)+T1icx}t}Erv3;W*|L$=Uw%SIHTKc^)&e@}PBtBuR71yYzfOmf_h`dL zEp51xPcQvy5$$ig{+zNmZnB3S=|^yO@DeiZib2|MhEaU$G4z6ACbES_qLQA|s4Dv^ zs_Xg#H9;5Jb;XEU0?(oYn=YXCV{NFu&JQttd(iZ&8&FF3QuO(6<>-gyW$3=&e3<09 z4>50Y5bKVGX>NeHsl5=oJ^&3g?1i9}7tyIf0=156ccIBv0yByCQi(H@JTng*r#fyq zELpENTXyDNvmE)N)Us_P$5PTi-C{_{qehEGs-yoLNI4Wr#% zGf-mRJk>7VW3!7i-UV5efgUiKO#iuFQwDfV>2N6M5wz*oLv#LZXt=!tw#2T4_q&^+ zCFxgadz*uge)$~^&OQyD8V7W4D}qA{z0jEx51m>g9QTALK?%3x=F;HLz&y2%z)BurQ<^GDlARo6tYwg;p&9 delta 779 zcmWlXc}SCC9LIg1HJvMUXq!8ld1Qx$+PU<7-{13;qCuBN#|mv)YRguxWh#`Lx6-k+ zr;8v2EwMt)UQ0_W3qr++4$@38ixsAJP}03>ec{9B```DUZ%HXrpI^D1kyNGKLrkVH zo5^ITRdivFY+qJJc5bRA-H?-R*|#%mkDHqtav_ck*M%>16;~#^@T2BQPmsKg#)|8Z z{1Y7)mm&EC&31R`JN@l`3MnG#36G6PVWi_8IY?omX_C*#Unb~10~q9gMaYw`VURLG z=$@=_`I9g_%_lSs#N!x+(E} zh~`xYGCyC07OxOy$ZHt1ctn^`N{~(0u85D?8n&O^6cxmFZo9}nyEnlO{#d{|M6T$8ufDaU(!Rd(|cxzHJ-n45JuWpv$gyu1v*R&0v z3+=_vtj7jr3HSabuG^sFIiSBO5Y+DSQvwm~M#jSp!S9T!WaFT1Zh1Lr$#) zY;Ao|l#ijjS_VT38G0Qvk*Xb*@QpnSWYHXfEV_eZuGcT{7&s(X1roH9R?74d*up!vpg=s2pqn>(^KO&;HW?9~Rz(>lq+(6HfG^saRxp4_l{%>SScn#1sfxv_t+nc6)bY{MHFIyGPJhh&owHVQZqDBO+uzyW zcUSg(E-^PrY7~-To0J_Cm1Xjid?+!}QAMn#kkivD4PD0R^eU}}4h^0eAyw$K%QUo( zRjNvbpk6o(FQ<#ya$3!?1+-G7H?SH7M;GX{#k4`kaWq@5(lfNBOixGBQ;Xlkia5GZ zr!CbeX;#P4B|7bgoWj5SDnqGQZNt}6yq~i|$Fbti#Y)z|S(0ohF;f;Al&mcani@KF3Lj$Yiy3mab$ErO!}OO zw6;Lh;lFfTrZN->))H~7){qLRtkp3JR--Lh9w?|OD6i*?8i8k_HC0_&T%yu&dcBBj zah$-G&KEqOD6*JOr^>e|s1K&&4Rnzpcs|EzqzYE8C{+t8D(NClu$#pQG%GlpE#yQj zkqE2Tmlg{d1zNRAJQi*shK!-XGX&ebYxCxKO7Jv#8K){N5(YGW^``pU*8yWiC8-Y$vh8DLhdpUxN- zEN2QwK4UU&u3=KIk7uINnwX$dEHln!5;Nw^bH;u3C(KBjW=7g~CgSnFd}>a92)${VDUHP<*IVh%R7@s0b^bH?<71a zBC@ZiF0v{oF>;K57_+xh%Ge(47cL|&zRhcS2JBX7;m?!T0Ka}MY#2KqsBEIjooq~%sak}LzFL$jDH{US3LaVm)IO4$Ig4R@yw?#c&fu2drvmv%{&uco|1;W ziH>;rxfgyXyMRBO*@SnEsrWF}5C7@VgHN1Z;KScm;lS|@{5@wIJ~Z#fOYZxpsoIW zX#eVW_7;eA9+I~lB^?LbNEbgJPW>fv_t(MIpPC``0t+!`Ux+)SN5z=0`;WPoF7T$#%LxiQSw*Cld$&ZAn%@awF+Yf|a89v_l02UoQXAS!w zBF%T?Fw09xdLJDixA^05_x>kLkFO?Ou6Cqn&mAy+ zz5Nl&NB;@qx*Rca_#iSJ>0sVo1(CNnNQ-i_7Ixnztvk;_;`27rndwN*Z}Nr?`WuXK zHeiz88IyO-K$0nk>m&xk&Q64+K15IKqcq;d;sKAU{(hqn29V z7}t`kkdh*Yq&-!z%pb9woI;v?aR)=o~KWtqt_9h6%WU8JD#H5!?j4s<50785;BvA zh^&MqzA=3D%y84(*lcGb%49MO%Rhm$@}6PRv`sj7ZxyE5cHrDYewgsvBTVR@gz>+u z$LO$bj9V$kyxd!;%xuHFZavOjaSKy?eKEbv6Emlc#f(LlFlBcPW=JHMxn%^VexHqr kH#TClcM`^Zwh*Jge1tO|+u`&XL6*KU*>c&NhyVNjZ*|7Db^rhX delta 1571 zcmYk6d03Qn5Xbj@0l@`>mP0OYKvEG5^VoNP-&tVgRuMszAjQB86l*~|g4ReS5`9)) z6;bm*5mZuXVNo>GEJz|WL?jX_T%`ncJuoWKQ2L{Jo_S`TXP(bo&ok3f&K)|!Y2W57 zwkDqAxn!Lim&}Q4O^RQ$Nn5cbeN}=wX<%3#ox^~^7cmYy+QrvvDiCk2k$UJ)SA!Z9TLUg%`90u*BP!n8lquMbX)K#q>%D z4PV_CMti!v+^<9;T8v#IYF#bemDu7Oi@bR*$m#Pz_B=xN*pbLGg;obC|GJ#2XD+0(sa|x|?+M*V(NN1j zGw9Y&o@87sqno`$sN>u{G8h7>YsP%)2{6zTvsUW!v{9P5bSrtcr%LYiaY~a`Po>p^ zawX@sk#5iajjm>mC4+wro!SsW+dbD)c;1NrMv#bu$F9~WBflG?JpQIBnfwuklMfyt zdr%(|7YF10^g!&G(2Ihv4mG!L%OkK+AWL~WC zPc2T}+)Jz_iB!$K6y*Pm!Nk*w;hIjo zRdQ({>~xq_H0FV-V%gQT6Iq*AJigelo_yQ)kx($25PgWINN=ERWfvlkG~gW*zX9&z zLRPtcHB?!_tiJ9OcCBj#s;s7xyr+Zw$H_@`+?l3zRN`lgCIr<*AnvI7OYT7UMW)x- zX%HN{oYgMsWmha$qFV1oN?jxcWqwW}KRS}&ZNN`58=%h_Q6V1I0=c0+L5jEL=jy#)804Q3T*jiAv+))Z>X+O5q|-uoT-@@^!rt0bn4 z7W3deX#x4({e`9&b@Y1mY5W>eiiOd0ktUlnkcAIs71ghRtVgk?q(;{6<*w_-GU>p@ z91F0+O*%t1ia zK7@HJ!1!B%@b&4$Y^!LfGYwc1UyJOrQ`r4|7;1t7h<|R57S)Gn%q$?k=N;teee*?E O{qo}T=psV3L;eMvW?;?$ diff --git a/test/rami5/scene_nc/rami5_HET09_JBS_SUM_scene.nc b/test/rami5/scene_nc/rami5_HET09_JBS_SUM_scene.nc index e81a6656505810a1a0d5802c102365ede3fde099..9b5c741462d7bb11b1d6d8a14bc4c7da9e2c428c 100644 GIT binary patch delta 4162 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 O8s=6&$?wjYHvB(zJZSO& delta 2841 zcmeH}`BRif8poLzQIIHdDU2MW7>sgwU;;XCf4db1K`sweK%=5Y5W#CWykHPPS ziJ-Vpkg-ajyKnVXP7tQF7laAq3EBm6zd>e(I+Gop9i6oLhrVVtmPZb1gwRx5W5 z^%ZdDOO-eEM+)?W{+c6)M}HS0w>EZB+6?m&aHGAI8;2VSI14vHj&Ek z5x)sIyFqd{qk7IIQ)yys#BuK9lwX~egIy9k=ntw~EDBGLbL~~RWVM{Hk zHx)j0pvL3~9TAa8hs|iGx}Nn^@HiAb)`fWeVh;Y*9f`Jgskn191y}6P!DZJOOgx;0 zaeH!Lk*53S zS;)~&=5?=tEqv?G7A@V%79_rAexr}DfRE3ZS5Gxtct&Q%TqI&9?sH`<-GE7+nlg{N znM~4d%iO$^+06T+n54mpxx1WV601JuR$j^6-2cfuVz07!8OzyR+cxIi_=b7(b+TEN zKeBND3bw7mfyIzg79kX|u&M7^YE%k~uhL`Twko#p$t~t^K1dVnn}Hh9lnM@QkLGW^ zT1N^VmXXZjh2)x%E@|FTO*)G1g1a0AeZ!N)th<89n*GV08VR%}eI&(JPNXa66vSJT zvAnYoG4mU-H0LC~TcJjXLlL&?ZA4W0WCVx$U~iv2lH;?nOWcIS)^XTTl8z+97YMJh zge?4RF{C!HkaTti_G`q?x445duRr3#D=l0x*??NbEL@R#;c{OVE{ABLEX5op9t4No zT(Psj3m&^(Vr<)Or1^=kCu2I+8|TBj>NO@We}oTDy77GdLtIg`Ab43e3CyFsKDodj zF8Ahh{8W5fr@agR7}yZ;)p=;QMZ)w&4ulQ!A+7X=LMno4@oCg&eo48|IP_Rn zLT&du)OCwKr=8SZ{79PfmO#7VHcacyAS{^x=_LawV%wowtw#OHXv(d1L66Z(sBK%I zu8|LLX*Q&J!(C{Xtbyq<2ANRi2a&>J17>WBQs&%IR?^{ zWl&UHfvV&_>O1yPE<6|Ax9y=G>(ek z8XtO;+YpNG>OY|7NH)~RD+jUbWj+O8~7N-L2LTC(mQ+)S@*I71uR=I%`3{!_9G<$nNBI5DwW&^5POmUZfjNIKQWojOEm~q>Ik2TTkb< z_fgvjKirVdKJyQ`_6O+J+@zfT8G zNQNxq<1L)9KF|-wG`fen%B?8W?UudGZw*WTN63YbL8h6VK_Fwj5@czqAabKx*F@z=@GSfr4x#{DW8zq zda|EO>gk1xsl*hrMaJBZq_jWoK~ zk$Zc8iA&5Da%$%Ta@l_jN!v7%Tn(y&FwqXqTgSk+b_JZrZvwyV6T}b7F?+#b zd=q#HUrx@2FY(2k5#K{RY%He#vJz9i&;c1P+XuVe=WyJWkI6r82Yo5U{FK31|BD0S z-akar?g*qW*on;W!N}-|M~1Tx_Bq`|`gSE!izL`Y9%1fcUx=jk&_3jf6`BGPnzoUQ};PwEiL&d#|eLFkk8Fxe%|ZJ7k>gY C6KmlB diff --git a/test/rami5/scene_nc/rami5_HET14_WCO_UND_scene.nc b/test/rami5/scene_nc/rami5_HET14_WCO_UND_scene.nc index 58b52497aa19cb59ef033fc5409bb62b97772582..88e8388925e84d5902a883903a47bd1e6e95153b 100644 GIT binary patch delta 4299 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 delta 3279 zcmXxmXH-OFen=xe1l*zY-B$$1ZrCBWza4J}uPbK}F-7L*fNho)6 zcp-ViEo9C3PLeI}%$ngN>6hQenh_xJRCvXjIaO+}sLy20td@o=tzojX9Hos@W=xLb z(ypnQOqTXRX@H74lcgh+#HdEHbowQulY_3F)MwgVCTrewiIsW>>xZdQ1r2o;%YrS{ z(=2DQEKW*CwfvdlNZv8EW4u!ReY}IW3V8dQuJQJMGnbbU=FUslw2c=SIm}yYV#VXB z#_zUNSMx^|KL zp&v*otdgd-0I3|1lIrp?QhkP`%KD9zOATqNx+^KRULg6Fd&F5@Lrj%F@ZX?MC?5GX z1s^Pw!?w;IJZEl#`F_qAP;&|`G>1{qW*yYKZiJBGS`fG`fcdd$pj+uAc=p&%5SALw zzxt|>pOvVMQ+STZ9{nBJ-++@Mv?Qy~7w`{=) z#d<;hG(ExA!B&Cjw+=y2)k=ZgyEcJ-|8joMzqb6W7BvtR6psZJG>DRH7^eFCodi{&Ikv>iD6fz3^gmP0xgmPW+Lbf1MDEDG=-rXo< zFH{uD73B$8x26c?jy@I2mE9J~jn@d-@BD?F_#q)X@sW_D&?{s`pA#}x7t{NnH0br< zar(PzF%8V9ppoc1^q1`jb?i7m%_2LYf>oz*)^m5^%xW{C>f5_CA$BSzsjeq&nyEue z|33X?rC@hy6_#jT!|tP7aDrP*Mp~idBe$9MD7Vl_n>Td2U?Cmn3aBh|HI;kw=z!@r zRG2eChkm$CrTO`Ec%qdml})Kiy_e2jcc5R4!szUx8mc~}Nf#b{pt?VM>6A!JC1?9&{w5F zCT<24+}}o_wg!^KS$R@D{e|ih1Jmy$rbg4m@b=s&%8!qth1(}wrL2eR*(R91@&r~| zcVJU`0Jc3FB!$o3q)@g6yKK1Fm9|B;^@B>jaK@$%gPYGF^Y%kzpC81#(_3g^U=*3_ z#E_M`Kk>VLNWtMF9;i^jV=d=pF7eL*$f+8^kOzF|oG)&K+rx_3KWz>zcb`LREZWKb zLMZ**UQ6$KZ_3tUn+nOMQ(JJMTw!sR6xF6xNS2SG7)5X4t6|_2bBRT1|lS@Jet!eHd?)F`n z$k>B9tzVlWO!Xcl-~R~%k43|8fz@zn^AzlVwS?@=h2+vuLhkB(vJYesH>Lr_@z4En z&-5NyV34mL?D)YIeFmSyIW`|^-%Y{3; z3t%sRxTV)oRACBLuX~~9l^Q-N)gs5i2juCTPoknlw0`y*;;QxI)>)e|-=k>qHTcv^42gVWSlQTxm$ia+7J7m!BUMIv%h|$xs5l+8Y4b|!y z_-ODdIZfUT&(1C6tyVzmeIF6$%`A*kG{X$TJu>H8^&GaB8lY!M9h_!&!CAF+_&7C# zoF4v8UaQ8)Tby~H)>oMkXTk*|H*{h8;MYKJ>lLu|Nfde~T!B*=8gNE*2Kz&+$Ys$v z5~Y@r&u=E=xH*Nm%8N04*ap*GOk{yxorVzkQi7tx5pZ&&D*Uo;G4`8x7ji%ioFg|O&aLqF$XH!cEIV4nmAB_pp_9PFzhw>lN_8LlROO+#|J9!i`) zW@2a?8+WI6%bd%E5`;$CiBY8f63UCU;ke)i4$v%ee;iJJn!720pG(du!^CN*$B?Hr zn0j7A1|6StLGV=*^i1!CQid%Ysc*;rav^yPNyuMk9R&)i$z{HPIPHgVV^lV#>Xpdc z`ePHYAz>SOO7-EeK`4}6R>uAw@pSS$9!370M<{SCm|P0~L!4$M47T>gl)^7RA`DpT zT?&51=IGgw3&l1~aPZzZ4ixB+$h(&Ur z1HI|5tU)~Xyqk_Knb+~KbvCJ)%|IgDYq&=TPn|6^$&*{nA)P|zd#+dj>mm&VLLtCGIaFV*<=I%NuT;d5u z!T-fKNgF6|*)`hqj{|M)jU~^bJmR|EM6X|6F|qukERb4{fWxB`7`DtF_MOpzg3D}t z`_zJhrfX1W!&TaHRGYkXZV@--I(oi%j)@z6WsWasfz^-4am!eP81fQwApd+NzP+hT z8=UiKi?RoWjsAzc-p?oQjWYDuG=^g7*Ff{JCRowzf}!h@AhYxiWHp=PoBJqXl8N(%lRCv-~N^uFHOkQW;6NyQAAnGpHObc0A;BC zL@6J3P})s%N;Iscgd3@pYM4Z6e;83(Xc*4p$n`$-+le zd1D_P&N@Z;M-S2759742xZ>0PWr0|j;h2G#Nr()?UexCgQ0HJ&flK=n! diff --git a/test/rami5/scene_nc/rami5_HET15_JBS_WIN_scene.nc b/test/rami5/scene_nc/rami5_HET15_JBS_WIN_scene.nc index cbb0d704a4a1b40318131fef0e2330c75c42f983..dd085601a6e61da80e30eacf4983c4ac0875794a 100644 GIT binary patch delta 3757 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 delta 2652 zcmeIz`&*4$9suz6yLC|#wRgJiHW7C1jPMlu{eIU<7u`;Vl$4WOj-)V^I*gP~q03Oc zDJqxAks^|<;&h|giBsC$#vwf}ql@TFO~~a5v(+=t{0;Lwvwm3Xr_WmJdwJG+R>mtS z=B01pX=Mc8VR)f(8(t`nOW>d9R!%aSuKovGd)q~7<3mR^8*ovR+8JRr=cZoB2;XwU z>W3KN2ku7=)iRc;navn3=1yq(F@|B>ux2!4xSI>n8ewLH$=6R7@ff3E`F?G09%H;- z-mGKDn{2X1wdK_4t=l*Y0|&XKt|yN%^^)(Ns?TH0oVi532*#Y{K73oEumWvVF8a>VJ81zRK=V5Q05h=C-XeMMCNgmG6V*`I$*|DfO*{kkR84Qi|5sWsJI_u zUsb>lrXQhXBf#~-I!s_6VNysu{&c$onB?7Eriz>g70Rf;>e%}{&O@6dq1Y)Z_O!q%cc|^e!7g36DM)@;ZvyZ zHiYT}JHaxd0`znx?5ol5*@|vwcE^s)Z$aaxq3g*m|_ud89rQE`G_Lk`1@&x^l zmZSfU*XX}`I{HfnaqXapQ<(iXRakJml3K^BQ`hDdbRBb&ZnAQvoBB&=n1(+M)V8Nf zV+^Q!ff{xH5KRLf4$$w+?$Lu)74#6>Mw6a3(fw*YbkFZ4G$wg2jR{oHJ+Xvt%O9qm zUFWIqyEW8r{a)&mI6_yN=2HJJuc+ty+tl}RoDp?!kx|)aCrXd%QI`QBb!&8_F8x;2 z*(;ekcF&+LZHuU@LlJcmeWuP;wba@51zo)}nXXFTK>ujfOTF6PP`A&+bb0Ls8n&jI z?rW3M7^tA(CSn?D_lc(NNulv|lWCZhg8II^Po>ua{?i|7YN}SjoIgji`Ij?5^tz9I z8FLvdx-!_IqBc05I0G*1wTDODo}lS>ALeyFfEb(y;bSrEFDISZjz2vG$8|}t_3L8r zeSQ~g#vX&Dy%?m6{s!K^ZGzaOKG^-_5**&A4;jyWAp7syaF*W$IiC8ED@lcenOh-l z?_CQ>>>PybCwwS8C4y^Td2sW=5~#W84UPO?K=JZlP%|WfN@F{?+S~!f*&iW0vKwM0 zN#J?k0>n<5?5C(u*eEy)KBg65w@(LVT#aX6+NFeYxCGLE}YG?Z35Zd&0x3r6D+VOh9H+z$k`&o z5N&nblKvJ0Dx`9SMK&+4sSY~pt|7lS3WbBG(4=iOM%H>^VWb!pYcFC;)*Qlw9KiSH zwWzdygvv(0Zx?`u@-NVNE)e-`ttf0ULX)!j7+I-@g|Ypp2v%atU!w`L-2vb0|Bgzl z$Ed95CR~~&bnbeH{IVZVc$#9INt`W4UbMx+w1udMR$z;~N(BWt`n3d=rWa9pW77oO z{xftsi;C1k)N@p;fc!SBN6|2seOqg9EIC}djDjCQ_<(b+Es40Pt%Gb!Z@0d?QQWVq$ShqO zGP`~%_ITXGWI+KQZEYWiikA#@#d@Gkw;MuaJWQl{E!1AMnJj^6^n+4c%A`Ii4 zRL`O>mpu-Tii6-x3Wu|zK7#T`A#`1Mig~^gGOu$fS$IB}EKc(y*6|myRb-1kPv_#+ z#AoB~NJbZ&OsvJ34PMY7ZiLo3%P>Fc5RuyFkR{y%#G%B2NCVen^XDLRt2u>%z6-`( zYIG>aqUq!wBHa)`=8DR>jcCogB2U9kZBA@E#f!DbdCnGUtz|8?_p+rS?yS!X0c`Jd zgOC&noOWzuOYX94{m=*))of&y_YTO0I2W0ZT{9a!&5k{?T*7*nj>&F{yO#BbZBi$)Wy|EtJg-doH?lt>OaK4? From 10afd6d301f858fc05ab49d286cca3b0a874a626 Mon Sep 17 00:00:00 2001 From: Robin Hogan Date: Tue, 30 Nov 2021 14:51:57 +0000 Subject: [PATCH 26/28] Update additional files related to new RAMI-V scene versions to v0.8 --- ChangeLog | 5 ++++ test/rami5/README | 46 +++++++++++++++++++++++++++-- test/rami5/check_fractional_cover.m | 28 ++++++++++++++++++ test/rami5/config.nam | 3 +- test/rami5/process_spartacus.m | 2 +- 5 files changed, 78 insertions(+), 6 deletions(-) create mode 100644 test/rami5/check_fractional_cover.m diff --git a/ChangeLog b/ChangeLog index 5d8030d..6b307c3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +version 0.8 + - New versions of the RAMI-V test scene input files (see + test/rami5/README), using explicit vegetation fractional standard + deviation + version 0.7.3 (27 October 2021) - Redefined veg_contact_fraction: now the fraction of the building edge that is touching veg, not the fraction of the vegetation edge diff --git a/test/rami5/README b/test/rami5/README index d33d43e..434162a 100644 --- a/test/rami5/README +++ b/test/rami5/README @@ -1,4 +1,44 @@ -Running "make" will run SPARTACUS-Surface on five "actual" scenes from the RAMI-V intercomparison: +Running "make" will run SPARTACUS-Surface on five "actual" scenes from +the RAMI-V intercomparison: https://rami-benchmark.jrc.ec.europa.eu/_www/phase_descr.php?strPhase=RAMI5 -Note that the "urban" surface type is used to represent forests, with the tree trunks treated as buildings and other woody material (branches) merged into the vegetation properties. -The output netCDF files are placed in the out_nc directory. The Matlab script process_spartacus_scenes.m then converts the outputs into ASCII files for the RAMI-V submission. + +Note that the "urban" surface type is used to represent forests, with +the tree trunks treated as buildings and other woody material +(branches) merged into the vegetation properties. The output netCDF +files are placed in the out_nc directory. The Matlab script +process_spartacus_scenes.m then converts the outputs into ASCII files +for the RAMI-V submission in the "mes" directory. + +Typing "make overhead" runs the cases with overhead sun (solar zenith +angle of 0 degrees), and the matlab script check_fractional_cover.m +uses the direct flux at the surface +(ground_spectral_flux_dn_direct_sw) to diagnose the fractional scene +coverage, and compare it with the values provided on the RAMI-V web +site. + +An updated submission to the intercomparison was provided on 30 Nov +2021, involving the following changes: + + - The canopy radius, which in the RAMI-V scene description data is + provided for each tree as a profile of the maximum dimension of a + leaf/branch element from the tree axis, is now multiplied by 0.9 to + provide a more reasonable envelope for the actual tree crowns. + + - Hogan et al. (2018) found that it was necessary to project the + crown regions down to the surface, in order to improve the impacts + of shadows on the upwelling radiation and preventing excessive + "entrapment" of radiation. Many of the RAMI-V trees are very tall + and the foliage starts very high above the ground, for which this + adjustment would not be necessary. But in case it is important for + the shorter trees, any tree with a crown base less than 2 m above + the ground now has its crown projected down to the surface. + + - Previously a fixed vegetation fractional standard deviation was + specified via the namelist as 0.9. In real trees the branches are + much more heterogeneously distributed than the leaves. Therefore + we assume a value of 0.7 for the leaves and 1.4 for the branches, + and the profile of veg_fsd is provided in the scene netCDF files as + the average of the leaf and branch values, weighting by the + extinction of these two parts of the vegetation. + + diff --git a/test/rami5/check_fractional_cover.m b/test/rami5/check_fractional_cover.m new file mode 100644 index 0000000..19447f6 --- /dev/null +++ b/test/rami5/check_fractional_cover.m @@ -0,0 +1,28 @@ +% This Matlab script should be run after typing "make overhead": it +% uses the direct flux at the surface +% (ground_spectral_flux_dn_direct_sw) to diagnose the fractional scene +% coverage, and compare it with the values provided on the RAMI-V web +% site. + +cases = {'HET07_JPS_SUM',... + 'HET08_OPS_WIN',... + 'HET09_JBS_SUM',... + 'HET14_WCO_UND',... + 'HET15_JBS_WIN'}; + +% "True" values from the RAMI-V website +fractional_scene_coverage = [0.406 0.1248 0.5044 0.392 0.2510]; + +% Load SPARTACUS overhead results +for ic = 1:length(cases) + d=loadnc(['out_nc/rami5_' cases{ic} '-00_out.nc']); + fsc_spartacus(ic) = 1.0 - d.ground_spectral_flux_dn_direct_sw(end); +end + +% Compare to "truth" +for ic = 1:length(cases) + disp([cases{ic} ' FSCtrue=' num2str(fractional_scene_coverage(ic)) ... + ', FSCspartacus=' num2str(fsc_spartacus(ic)) ' (' ... + num2str(100.*(fsc_spartacus(ic)-fractional_scene_coverage(ic)) ... + ./ fractional_scene_coverage(ic)) '%)']); +end diff --git a/test/rami5/config.nam b/test/rami5/config.nam index 7422631..b561494 100644 --- a/test/rami5/config.nam +++ b/test/rami5/config.nam @@ -1,11 +1,10 @@ &radsurf_driver do_parallel = true, -vegetation_fsd = 0.5, iverbose = 3, do_conservation_check = true, top_flux_dn_direct_sw = 0.0, !solar_zenith_angle = 60, -vegetation_fsd = 0.9, +!vegetation_fsd = 0.9, !ground_sw_albedo = 0.0, / diff --git a/test/rami5/process_spartacus.m b/test/rami5/process_spartacus.m index 29e4544..74c481b 100644 --- a/test/rami5/process_spartacus.m +++ b/test/rami5/process_spartacus.m @@ -103,7 +103,7 @@ sum(out.veg_spectral_absorption_sw.*foliage_ratio, 2),... 'Foliage absorption', wav); - % Transmission scattered one or more timesby vegetation but not by + % Transmission scattered one or more times by vegetation but not by % soil if strcmp(solar_id, 'diffuse') write_ascii(scene_id, bands_par, solar_id, 'ftran_coco', model, ... From 39ab071532d2377d3640ac0171e4014e2f9db417 Mon Sep 17 00:00:00 2001 From: Robin Hogan Date: Sat, 19 Feb 2022 13:49:12 +0000 Subject: [PATCH 27/28] Improved documentation of roof fluxes --- doc/spartacus_surface_documentation.pdf | Bin 218090 -> 218420 bytes doc/spartacus_surface_documentation.tex | 42 ++++++++++++++---------- 2 files changed, 25 insertions(+), 17 deletions(-) diff --git a/doc/spartacus_surface_documentation.pdf b/doc/spartacus_surface_documentation.pdf index f62324d6129e0bda71aefdfac17e938604ff4ffb..a5636de4c47df54ddeb8c7ba4feb0d2958deb8e1 100644 GIT binary patch delta 15216 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 delta 14919 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

diff --git a/doc/spartacus_surface_documentation.tex b/doc/spartacus_surface_documentation.tex index 439e253..fd75caf 100644 --- a/doc/spartacus_surface_documentation.tex +++ b/doc/spartacus_surface_documentation.tex @@ -452,10 +452,11 @@ \section{Running the offline scheme} %\begin{table}[tb!] \caption{\label{tab:outvar}Variables contained in the output netCDF file from \spsurf. All fluxes (or irradiances) and absorption rates - have units of W~m$^{-2}$, but note that this is power per unit area - of the \emph{entire domain}, not per unit area of a specific facet - type. `Net' fluxes are defined as the flux into a facet type (or downward) minus the - flux out of a facet type (or upward).}\\ + have units of W~m$^{-2}$, but note that this is power per unit + horizontal area of the \emph{entire domain}, not per unit area of a + specific facet type. `Net' fluxes are defined as the flux into a + facet type (or downward) minus the flux out of a facet type (or + upward).}\\ % %\begin{tabular}{llLp{7cm}}% \hline @@ -470,12 +471,12 @@ \section{Running the offline scheme} \codetab{top\_flux\_dn\_sw} & \codetab{col} & Top-of-canopy downwelling shortwave flux\\ \codetab{top\_flux\_net\_sw} & \codetab{col} & Top-of-canopy net shortwave flux\\ \codetab{top\_flux\_dn\_direct\_sw} & \codetab{col} & Top-of-canopy direct downwelling shortwave flux\\ -\codetab{roof\_flux\_in\_sw} & \codetab{col, layer} & Shortwave flux into roofs \\ +\codetab{roof\_flux\_in\_sw} & \codetab{col, layer} & Shortwave flux into roofs at the top of the layer\\ \codetab{roof\_flux\_in\_direct\_sw} & \codetab{col, layer} & Direct shortwave flux into roofs \\ -\codetab{roof\_flux\_net\_sw} & \codetab{col, layer} & Net shortwave flux into roofs\\ +\codetab{roof\_flux\_net\_sw} & \codetab{col, layer} & Net shortwave flux into roofs (in minus out)\\ \codetab{wall\_flux\_in\_sw} & \codetab{col, layer} & Shortwave flux into walls\\ \codetab{wall\_flux\_in\_direct\_sw} & \codetab{col, layer} & Direct shortwave flux into walls\\ -\codetab{wall\_flux\_net\_sw} & \codetab{col, layer} & Net shortwave flux into walls\\ +\codetab{wall\_flux\_net\_sw} & \codetab{col, layer} & Net shortwave flux into walls (in minus out)\\ \codetab{clear\_air\_absorption\_sw} & \codetab{col, layer} & Shortwave absorption rate in clear-air part of layer\\ \codetab{veg\_absorption\_sw} & \codetab{col, layer} & Shortwave absorption rate by leaves\\ \codetab{veg\_absorption\_direct\_sw} & \codetab{col, layer} & Direct shortwave absorption rate by leaves\\ @@ -485,10 +486,10 @@ \section{Running the offline scheme} \codetab{ground\_flux\_vertical\_lw} & \codetab{col} & Longwave flux into a vertical surface at ground level\\ \codetab{top\_flux\_dn\_lw} & \codetab{col} & Top-of-canopy donwelling longwave flux\\ \codetab{top\_flux\_net\_lw} & \codetab{col} & Top-of-canopy net longwave flux\\ -\codetab{roof\_flux\_in\_lw} & \codetab{col, layer} & Longwave flux into roofs\\ -\codetab{roof\_flux\_net\_lw} & \codetab{col, layer} & Net longwave flux into roofs\\ +\codetab{roof\_flux\_in\_lw} & \codetab{col, layer} & Longwave flux into roofs at the top of the layer\\ +\codetab{roof\_flux\_net\_lw} & \codetab{col, layer} & Net longwave flux into roofs (in minus out)\\ \codetab{wall\_flux\_in\_lw} & \codetab{col, layer} & Longwave flux into walls\\ -\codetab{wall\_flux\_net\_lw} & \codetab{col, layer} & Net flux into walls\\ +\codetab{wall\_flux\_net\_lw} & \codetab{col, layer} & Net flux into walls (in minus out)\\ \codetab{clear\_air\_absorption\_lw} & \codetab{col, layer} & Net longwave absorption rate in clear-air part of layer\\ \codetab{veg\_absorption\_lw} & \codetab{col, layer} & Net longwave absorption rate by leaves\\ \codetab{veg\_air\_absorption\_lw} & \codetab{col, layer} & Net longwave absorption rate by air in vegetated part of layer\\ @@ -502,6 +503,13 @@ \section{Running the offline scheme} } %\end{center} +Note that the roof fluxes, e.g.\ \code{roof\_flux\_in\_sw}, have a +\code{layer} dimension but since (flat) roofs are only assumed to +exist at the interface between layers, these variables correspond to +the fluxes into roofs at the top of each layer. The ground fluxes are +similar to the roof fluxes but at the interface between the lowest +layer and the ground. + The \code{ground\_flux\_vertical\_*} variables are diffuse fluxes into a vertical plane at ground level, and are useful for computing thermal comfort indices and mean radiant temperature. If you want them at @@ -552,12 +560,12 @@ \section{Running the offline scheme} \begin{center} \tablesetup \begin{longtable}{llLp{7cm}}% -\caption{\label{tab:outfluxprofvar}Additional variables contained in the - output netCDF file from \spsurf\ if the namelist parameter +\caption{\label{tab:outfluxprofvar}Additional variables contained in + the output netCDF file from \spsurf\ if the namelist parameter \code{do\_save\_flux\_profile} is set to \code{true}. All fluxes - have units of W~m$^{-2}$, but - note that this is power per unit area of the \emph{entire domain}, - not per unit area of the clear/vegetated part of the layer.}\\ + have units of W~m$^{-2}$, but note that this is power per unit + horizontal area of the \emph{entire domain}, not per unit area of + the clear/vegetated part of the layer.}\\ % \hline Variable & Dimensions & Description\\ @@ -620,7 +628,7 @@ \section{Configuring the \spsurf\ algorithm} \multicolumn{4}{l}{\emph{Options specific to forest tiles}}\\ \codetab{n\_vegetation\_region\_forest} & I & \codetabemph{1}, \code{2} & Number of regions used to describe vegetation (2 needed for heterogeneity)\\ \codetab{n\_stream\_sw\_forest} & I & \codetabemph{4} & Streams per hemisphere to describe diffuse shortwave radiation\\ -\codetab{n\_stream\_sw\_forest} & I & \codetabemph{4} & Streams per hemisphere to describe longwave radiation\\ +\codetab{n\_stream\_lw\_forest} & I & \codetabemph{4} & Streams per hemisphere to describe longwave radiation\\ \codetab{use\_symmetric\_vegetation\_scale\_forest} & L & \codetabemph{true} & Compute vegetation perimeter length using Eq.\ 20 of \cite{Hogan+2018}? Otherwise Eq.\ 19\\ \codetab{vegetation\_isolation\_factor\_forest} & R & \codetabemph{0.0}, \code{0.0}--\code{1.0} & In forests dense vegetation region is (0.0) embedded within sparse region or (1.0) in physically isolated regions, or in between\\ \codetab{vegetation\_isolation\_factor\_urban} & R & \codetabemph{0.0}, \code{0.0}--\code{1.0} & In urban areas dense vegetation region is (0.0) embedded within sparse region or (1.0) in physically isolated regions, or in between\\ @@ -629,7 +637,7 @@ \section{Configuring the \spsurf\ algorithm} \codetab{min\_building\_fraction} & R & \codetabemph{10$^{-6}$} & Minimum building area fraction below which a building is ignored\\ \codetab{n\_vegetation\_region\_urban} & I & \codetabemph{1}, \code{2} & Number of regions used to describe vegetation (2 needed for heterogeneity)\\ \codetab{n\_stream\_sw\_urban} & I & \codetabemph{4} & Streams per hemisphere to describe diffuse shortwave radiation\\ -\codetab{n\_stream\_sw\_urban} & I & \codetabemph{4} & Streams per hemisphere to describe longwave radiation\\ +\codetab{n\_stream\_lw\_urban} & I & \codetabemph{4} & Streams per hemisphere to describe longwave radiation\\ \codetab{use\_symmetric\_vegetation\_scale\_urban} & L & \codetabemph{true} & Compute vegetation perimeter length using Eq.\ 20 of \cite{Hogan+2018}? Otherwise Eq.\ 19\\ \codetab{vegetation\_isolation\_factor\_urban} & R & \codetabemph{0.0}, \code{0.0}--\code{1.0} & Dense vegetation region is (0.0) embedded within sparse region or (1.0) in physically isolated regions\\ %\hline From 51787833330448bdcfc45272b1c33a55d16bb7cc Mon Sep 17 00:00:00 2001 From: Robin Hogan Date: Thu, 11 May 2023 14:12:03 +0000 Subject: [PATCH 28/28] Fixed bug whereby shortwave broadband fluxes not output if no longwave calculations --- driver/spartacus_surface_read_input.F90 | 2 +- radsurf/radsurf_config.F90 | 4 ++++ radsurf/radsurf_save.F90 | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/driver/spartacus_surface_read_input.F90 b/driver/spartacus_surface_read_input.F90 index 75b7e0b..25c06ba 100644 --- a/driver/spartacus_surface_read_input.F90 +++ b/driver/spartacus_surface_read_input.F90 @@ -114,7 +114,7 @@ subroutine read_input(file, config, driver_config, ncol, ntotlay, & if (driver_config%vegetation_fraction >= 0.0_jprb) then allocate(canopy_props%veg_fraction(ntotlay)) if (driver_config%iverbose >= 2) then - write(nulout,'(a,i0,a,a,a)') ' Overriding vegetation fraction with ', & + write(nulout,'(a,g10.3)') ' Overriding vegetation fraction with ', & & driver_config%vegetation_fraction end if canopy_props%veg_fraction = driver_config%vegetation_fraction diff --git a/radsurf/radsurf_config.F90 b/radsurf/radsurf_config.F90 index 5ec5354..866c247 100644 --- a/radsurf/radsurf_config.F90 +++ b/radsurf/radsurf_config.F90 @@ -298,6 +298,10 @@ subroutine print_config(this, iverbose) & 'do_sw', this%do_sw) call print_logical(' Do longwave (LW) calculations', & & 'do_sw', this%do_lw) + call print_logical(' Save broadband fluxes', & + & 'do_save_broadband_flux', this%do_save_broadband_flux) + call print_logical(' Save spectral fluxes', & + & 'do_save_spectral_flux', this%do_save_spectral_flux) if (this%do_sw) then call print_integer(' Number of SW spectral intervals', & & 'nsw', this%nsw) diff --git a/radsurf/radsurf_save.F90 b/radsurf/radsurf_save.F90 index f7ebbd6..ae577bf 100644 --- a/radsurf/radsurf_save.F90 +++ b/radsurf/radsurf_save.F90 @@ -70,7 +70,7 @@ subroutine save_canopy_fluxes(file_name, config, canopy_props, & do_broadband_sw = config%do_save_broadband_flux else do_spectral_lw = .false. - do_broadband_sw = .false. + do_broadband_lw = .false. end if ncol = canopy_props%ncol