Changeset 4441 for palm/trunk/SOURCE/urban_surface_mod.f90
- Timestamp:
- Mar 4, 2020 7:20:35 PM (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/urban_surface_mod.f90
r4392 r4441 23 23 ! Current revisions: 24 24 ! ------------------ 25 ! 25 ! Change order of dimension in surface arrays %frac, %emissivity and %albedo 26 ! to allow for better vectorization in the radiation interactions. 26 27 ! 27 28 ! Former revisions: … … 800 801 !-- Allocate albedo_type and albedo. Each surface element 801 802 !-- has 3 values, 0: wall fraction, 1: green fraction, 2: window fraction. 802 ALLOCATE ( surf_usm_h%albedo_type( 0:2,1:surf_usm_h%ns) )803 ALLOCATE ( surf_usm_h%albedo( 0:2,1:surf_usm_h%ns) )803 ALLOCATE ( surf_usm_h%albedo_type(1:surf_usm_h%ns,0:2) ) 804 ALLOCATE ( surf_usm_h%albedo(1:surf_usm_h%ns,0:2) ) 804 805 surf_usm_h%albedo_type = albedo_type 805 806 DO l = 0, 3 806 ALLOCATE ( surf_usm_v(l)%albedo_type( 0:2,1:surf_usm_v(l)%ns) )807 ALLOCATE ( surf_usm_v(l)%albedo( 0:2,1:surf_usm_v(l)%ns) )807 ALLOCATE ( surf_usm_v(l)%albedo_type(1:surf_usm_v(l)%ns,0:2) ) 808 ALLOCATE ( surf_usm_v(l)%albedo(1:surf_usm_v(l)%ns,0:2) ) 808 809 surf_usm_v(l)%albedo_type = albedo_type 809 810 ENDDO … … 837 838 !-- Allocate arrays for relative surface fraction. 838 839 !-- 0 - wall fraction, 1 - green fraction, 2 - window fraction 839 ALLOCATE ( surf_usm_h%frac( 0:2,1:surf_usm_h%ns) )840 ALLOCATE ( surf_usm_h%frac(1:surf_usm_h%ns,0:2) ) 840 841 surf_usm_h%frac = 0.0_wp 841 842 DO l = 0, 3 842 ALLOCATE ( surf_usm_v(l)%frac( 0:2,1:surf_usm_v(l)%ns) )843 ALLOCATE ( surf_usm_v(l)%frac(1:surf_usm_v(l)%ns,0:2) ) 843 844 surf_usm_v(l)%frac = 0.0_wp 844 845 ENDDO … … 855 856 ALLOCATE ( surf_usm_h%transmissivity(1:surf_usm_h%ns) ) 856 857 ALLOCATE ( surf_usm_h%lai(1:surf_usm_h%ns) ) 857 ALLOCATE ( surf_usm_h%emissivity( 0:2,1:surf_usm_h%ns) )858 ALLOCATE ( surf_usm_h%emissivity(1:surf_usm_h%ns,0:2) ) 858 859 ALLOCATE ( surf_usm_h%r_a(1:surf_usm_h%ns) ) 859 860 ALLOCATE ( surf_usm_h%r_a_green(1:surf_usm_h%ns) ) … … 873 874 ALLOCATE ( surf_usm_v(l)%transmissivity(1:surf_usm_v(l)%ns) ) 874 875 ALLOCATE ( surf_usm_v(l)%lai(1:surf_usm_v(l)%ns) ) 875 ALLOCATE ( surf_usm_v(l)%emissivity( 0:2,1:surf_usm_v(l)%ns) )876 ALLOCATE ( surf_usm_v(l)%emissivity(1:surf_usm_v(l)%ns,0:2) ) 876 877 ALLOCATE ( surf_usm_v(l)%r_a(1:surf_usm_v(l)%ns) ) 877 878 ALLOCATE ( surf_usm_v(l)%r_a_green(1:surf_usm_v(l)%ns) ) … … 3616 3617 ! 3617 3618 !-- Initialize relatvie wall- (0), green- (1) and window (2) fractions 3618 surf_usm_h%frac( ind_veg_wall,m) = building_pars(ind_wall_frac_r,building_type)3619 surf_usm_h%frac( ind_pav_green,m) = building_pars(ind_green_frac_r,building_type)3620 surf_usm_h%frac( ind_wat_win,m) = building_pars(ind_win_frac_r,building_type)3619 surf_usm_h%frac(m,ind_veg_wall) = building_pars(ind_wall_frac_r,building_type) 3620 surf_usm_h%frac(m,ind_pav_green) = building_pars(ind_green_frac_r,building_type) 3621 surf_usm_h%frac(m,ind_wat_win) = building_pars(ind_win_frac_r,building_type) 3621 3622 surf_usm_h%lai(m) = building_pars(ind_lai_r,building_type) 3622 3623 … … 3650 3651 ! 3651 3652 !-- emissivity of wall-, green- and window fraction 3652 surf_usm_h%emissivity( ind_veg_wall,m) = building_pars(ind_emis_wall_r,building_type)3653 surf_usm_h%emissivity( ind_pav_green,m) = building_pars(ind_emis_green_r,building_type)3654 surf_usm_h%emissivity( ind_wat_win,m) = building_pars(ind_emis_win_r,building_type)3653 surf_usm_h%emissivity(m,ind_veg_wall) = building_pars(ind_emis_wall_r,building_type) 3654 surf_usm_h%emissivity(m,ind_pav_green) = building_pars(ind_emis_green_r,building_type) 3655 surf_usm_h%emissivity(m,ind_wat_win) = building_pars(ind_emis_win_r,building_type) 3655 3656 3656 3657 surf_usm_h%transmissivity(m) = building_pars(ind_trans_r,building_type) … … 3661 3662 ! 3662 3663 !-- albedo type for wall fraction, green fraction, window fraction 3663 surf_usm_h%albedo_type( ind_veg_wall,m) = INT( building_pars(ind_alb_wall_r,building_type) )3664 surf_usm_h%albedo_type( ind_pav_green,m) = INT( building_pars(ind_alb_green_r,building_type) )3665 surf_usm_h%albedo_type( ind_wat_win,m) = INT( building_pars(ind_alb_win_r,building_type) )3664 surf_usm_h%albedo_type(m,ind_veg_wall) = INT( building_pars(ind_alb_wall_r,building_type) ) 3665 surf_usm_h%albedo_type(m,ind_pav_green) = INT( building_pars(ind_alb_green_r,building_type) ) 3666 surf_usm_h%albedo_type(m,ind_wat_win) = INT( building_pars(ind_alb_win_r,building_type) ) 3666 3667 3667 3668 surf_usm_h%zw(nzb_wall,m) = building_pars(ind_thick_1_wall_r,building_type) … … 3774 3775 ! 3775 3776 !-- Initialize relatvie wall- (0), green- (1) and window (2) fractions 3776 surf_usm_v(l)%frac( ind_veg_wall,m) = building_pars(ind_wall_frac,building_type)3777 surf_usm_v(l)%frac( ind_pav_green,m) = building_pars(ind_green_frac_w,building_type)3778 surf_usm_v(l)%frac( ind_wat_win,m) = building_pars(ind_win_frac,building_type)3777 surf_usm_v(l)%frac(m,ind_veg_wall) = building_pars(ind_wall_frac,building_type) 3778 surf_usm_v(l)%frac(m,ind_pav_green) = building_pars(ind_green_frac_w,building_type) 3779 surf_usm_v(l)%frac(m,ind_wat_win) = building_pars(ind_win_frac,building_type) 3779 3780 surf_usm_v(l)%lai(m) = building_pars(ind_lai_w,building_type) 3780 3781 … … 3813 3814 ! 3814 3815 !-- emissivity of wall-, green- and window fraction 3815 surf_usm_v(l)%emissivity( ind_veg_wall,m) = building_pars(ind_emis_wall,building_type)3816 surf_usm_v(l)%emissivity( ind_pav_green,m) = building_pars(ind_emis_green,building_type)3817 surf_usm_v(l)%emissivity( ind_wat_win,m) = building_pars(ind_emis_win,building_type)3816 surf_usm_v(l)%emissivity(m,ind_veg_wall) = building_pars(ind_emis_wall,building_type) 3817 surf_usm_v(l)%emissivity(m,ind_pav_green) = building_pars(ind_emis_green,building_type) 3818 surf_usm_v(l)%emissivity(m,ind_wat_win) = building_pars(ind_emis_win,building_type) 3818 3819 3819 3820 surf_usm_v(l)%transmissivity(m) = building_pars(ind_trans,building_type) … … 3823 3824 surf_usm_v(l)%z0q(m) = building_pars(ind_z0qh,building_type) 3824 3825 3825 surf_usm_v(l)%albedo_type( ind_veg_wall,m) = INT( building_pars(ind_alb_wall,building_type) )3826 surf_usm_v(l)%albedo_type( ind_pav_green,m) = INT( building_pars(ind_alb_green,building_type) )3827 surf_usm_v(l)%albedo_type( ind_wat_win,m) = INT( building_pars(ind_alb_win,building_type) )3826 surf_usm_v(l)%albedo_type(m,ind_veg_wall) = INT( building_pars(ind_alb_wall,building_type) ) 3827 surf_usm_v(l)%albedo_type(m,ind_pav_green) = INT( building_pars(ind_alb_green,building_type) ) 3828 surf_usm_v(l)%albedo_type(m,ind_wat_win) = INT( building_pars(ind_alb_win,building_type) ) 3828 3829 3829 3830 surf_usm_v(l)%zw(nzb_wall,m) = building_pars(ind_thick_1,building_type) … … 3880 3881 ! 3881 3882 !-- Initialize relatvie wall- (0), green- (1) and window (2) fractions 3882 surf_usm_h%frac( ind_veg_wall,m) = building_pars(ind_wall_frac_r,st)3883 surf_usm_h%frac( ind_pav_green,m) = building_pars(ind_green_frac_r,st)3884 surf_usm_h%frac( ind_wat_win,m) = building_pars(ind_win_frac_r,st)3883 surf_usm_h%frac(m,ind_veg_wall) = building_pars(ind_wall_frac_r,st) 3884 surf_usm_h%frac(m,ind_pav_green) = building_pars(ind_green_frac_r,st) 3885 surf_usm_h%frac(m,ind_wat_win) = building_pars(ind_win_frac_r,st) 3885 3886 surf_usm_h%lai(m) = building_pars(ind_lai_r,st) 3886 3887 … … 3916 3917 ! 3917 3918 !-- emissivity of wall-, green- and window fraction 3918 surf_usm_h%emissivity( ind_veg_wall,m) = building_pars(ind_emis_wall_r,st)3919 surf_usm_h%emissivity( ind_pav_green,m) = building_pars(ind_emis_green_r,st)3920 surf_usm_h%emissivity( ind_wat_win,m) = building_pars(ind_emis_win_r,st)3919 surf_usm_h%emissivity(m,ind_veg_wall) = building_pars(ind_emis_wall_r,st) 3920 surf_usm_h%emissivity(m,ind_pav_green) = building_pars(ind_emis_green_r,st) 3921 surf_usm_h%emissivity(m,ind_wat_win) = building_pars(ind_emis_win_r,st) 3921 3922 3922 3923 surf_usm_h%transmissivity(m) = building_pars(ind_trans_r,st) … … 3927 3928 ! 3928 3929 !-- albedo type for wall fraction, green fraction, window fraction 3929 surf_usm_h%albedo_type( ind_veg_wall,m) = INT( building_pars(ind_alb_wall_r,st) )3930 surf_usm_h%albedo_type( ind_pav_green,m) = INT( building_pars(ind_alb_green_r,st) )3931 surf_usm_h%albedo_type( ind_wat_win,m) = INT( building_pars(ind_alb_win_r,st) )3930 surf_usm_h%albedo_type(m,ind_veg_wall) = INT( building_pars(ind_alb_wall_r,st) ) 3931 surf_usm_h%albedo_type(m,ind_pav_green) = INT( building_pars(ind_alb_green_r,st) ) 3932 surf_usm_h%albedo_type(m,ind_wat_win) = INT( building_pars(ind_alb_win_r,st) ) 3932 3933 3933 3934 surf_usm_h%zw(nzb_wall,m) = building_pars(ind_thick_1_wall_r,st) … … 4047 4048 ! 4048 4049 !-- Initialize relatvie wall- (0), green- (1) and window (2) fractions 4049 surf_usm_v(l)%frac( ind_veg_wall,m) = building_pars(ind_wall_frac,st)4050 surf_usm_v(l)%frac( ind_pav_green,m) = building_pars(ind_green_frac_w,st)4051 surf_usm_v(l)%frac( ind_wat_win,m) = building_pars(ind_win_frac,st)4050 surf_usm_v(l)%frac(m,ind_veg_wall) = building_pars(ind_wall_frac,st) 4051 surf_usm_v(l)%frac(m,ind_pav_green) = building_pars(ind_green_frac_w,st) 4052 surf_usm_v(l)%frac(m,ind_wat_win) = building_pars(ind_win_frac,st) 4052 4053 surf_usm_v(l)%lai(m) = building_pars(ind_lai_w,st) 4053 4054 … … 4086 4087 ! 4087 4088 !-- emissivity of wall-, green- and window fraction 4088 surf_usm_v(l)%emissivity( ind_veg_wall,m) = building_pars(ind_emis_wall,st)4089 surf_usm_v(l)%emissivity( ind_pav_green,m) = building_pars(ind_emis_green,st)4090 surf_usm_v(l)%emissivity( ind_wat_win,m) = building_pars(ind_emis_win,st)4089 surf_usm_v(l)%emissivity(m,ind_veg_wall) = building_pars(ind_emis_wall,st) 4090 surf_usm_v(l)%emissivity(m,ind_pav_green) = building_pars(ind_emis_green,st) 4091 surf_usm_v(l)%emissivity(m,ind_wat_win) = building_pars(ind_emis_win,st) 4091 4092 4092 4093 surf_usm_v(l)%transmissivity(m) = building_pars(ind_trans,st) … … 4096 4097 surf_usm_v(l)%z0q(m) = building_pars(ind_z0qh,st) 4097 4098 4098 surf_usm_v(l)%albedo_type( ind_veg_wall,m) = INT( building_pars(ind_alb_wall,st) )4099 surf_usm_v(l)%albedo_type( ind_pav_green,m) = INT( building_pars(ind_alb_green,st) )4100 surf_usm_v(l)%albedo_type( ind_wat_win,m) = INT( building_pars(ind_alb_win,st) )4099 surf_usm_v(l)%albedo_type(m,ind_veg_wall) = INT( building_pars(ind_alb_wall,st) ) 4100 surf_usm_v(l)%albedo_type(m,ind_pav_green) = INT( building_pars(ind_alb_green,st) ) 4101 surf_usm_v(l)%albedo_type(m,ind_wat_win) = INT( building_pars(ind_alb_win,st) ) 4101 4102 4102 4103 surf_usm_v(l)%zw(nzb_wall,m) = building_pars(ind_thick_1,st) … … 4193 4194 IF ( building_pars_f%pars_xy(ind_wall_frac,j,i) /= & 4194 4195 building_pars_f%fill ) & 4195 surf_usm_h%frac( ind_veg_wall,m) = &4196 surf_usm_h%frac(m,ind_veg_wall) = & 4196 4197 building_pars_f%pars_xy(ind_wall_frac,j,i) 4197 4198 4198 4199 IF ( building_pars_f%pars_xy(ind_green_frac_r,j,i) /= & 4199 4200 building_pars_f%fill ) & 4200 surf_usm_h%frac( ind_pav_green,m) = &4201 surf_usm_h%frac(m,ind_pav_green) = & 4201 4202 building_pars_f%pars_xy(ind_green_frac_r,j,i) 4202 4203 4203 4204 IF ( building_pars_f%pars_xy(ind_win_frac,j,i) /= & 4204 4205 building_pars_f%fill ) & 4205 surf_usm_h%frac( ind_wat_win,m) = &4206 surf_usm_h%frac(m,ind_wat_win) = & 4206 4207 building_pars_f%pars_xy(ind_win_frac,j,i) 4207 4208 … … 4325 4326 IF ( building_pars_f%pars_xy(ind_emis_wall,j,i) /= & 4326 4327 building_pars_f%fill ) & 4327 surf_usm_h%emissivity( ind_veg_wall,m) = &4328 surf_usm_h%emissivity(m,ind_veg_wall) = & 4328 4329 building_pars_f%pars_xy(ind_emis_wall,j,i) 4329 4330 4330 4331 IF ( building_pars_f%pars_xy(ind_emis_green,j,i) /= & 4331 4332 building_pars_f%fill ) & 4332 surf_usm_h%emissivity( ind_pav_green,m) = &4333 surf_usm_h%emissivity(m,ind_pav_green) = & 4333 4334 building_pars_f%pars_xy(ind_emis_green,j,i) 4334 4335 4335 4336 IF ( building_pars_f%pars_xy(ind_emis_win,j,i) /= & 4336 4337 building_pars_f%fill ) & 4337 surf_usm_h%emissivity( ind_wat_win,m) = &4338 surf_usm_h%emissivity(m,ind_wat_win) = & 4338 4339 building_pars_f%pars_xy(ind_emis_win,j,i) 4339 4340 … … 4356 4357 IF ( building_pars_f%pars_xy(ind_alb_wall_agfl,j,i) /= & 4357 4358 building_pars_f%fill ) & 4358 surf_usm_h%albedo_type( ind_veg_wall,m) = &4359 surf_usm_h%albedo_type(m,ind_veg_wall) = & 4359 4360 building_pars_f%pars_xy(ind_alb_wall_agfl,j,i) 4360 4361 4361 4362 IF ( building_pars_f%pars_xy(ind_alb_green_agfl,j,i) /= & 4362 4363 building_pars_f%fill ) & 4363 surf_usm_h%albedo_type( ind_pav_green,m) = &4364 surf_usm_h%albedo_type(m,ind_pav_green) = & 4364 4365 building_pars_f%pars_xy(ind_alb_green_agfl,j,i) 4365 4366 IF ( building_pars_f%pars_xy(ind_alb_win_agfl,j,i) /= & 4366 4367 building_pars_f%fill ) & 4367 surf_usm_h%albedo_type( ind_wat_win,m) = &4368 surf_usm_h%albedo_type(m,ind_wat_win) = & 4368 4369 building_pars_f%pars_xy(ind_alb_win_agfl,j,i) 4369 4370 … … 4481 4482 IF ( building_pars_f%pars_xy(ind_wall_frac,j,i) /= & 4482 4483 building_pars_f%fill ) & 4483 surf_usm_v(l)%frac( ind_veg_wall,m) = &4484 surf_usm_v(l)%frac(m,ind_veg_wall) = & 4484 4485 building_pars_f%pars_xy(ind_wall_frac,j,i) 4485 4486 4486 4487 IF ( building_pars_f%pars_xy(ind_green_frac_w,j,i) /= & 4487 4488 building_pars_f%fill ) & 4488 surf_usm_v(l)%frac( ind_pav_green,m) = &4489 surf_usm_v(l)%frac(m,ind_pav_green) = & 4489 4490 building_pars_f%pars_xy(ind_green_frac_w,j,i) 4490 4491 4491 4492 IF ( building_pars_f%pars_xy(ind_win_frac,j,i) /= & 4492 4493 building_pars_f%fill ) & 4493 surf_usm_v(l)%frac( ind_wat_win,m) = &4494 surf_usm_v(l)%frac(m,ind_wat_win) = & 4494 4495 building_pars_f%pars_xy(ind_win_frac,j,i) 4495 4496 … … 4614 4615 IF ( building_pars_f%pars_xy(ind_emis_wall,j,i) /= & 4615 4616 building_pars_f%fill ) & 4616 surf_usm_v(l)%emissivity( ind_veg_wall,m) = &4617 surf_usm_v(l)%emissivity(m,ind_veg_wall) = & 4617 4618 building_pars_f%pars_xy(ind_emis_wall,j,i) 4618 4619 4619 4620 IF ( building_pars_f%pars_xy(ind_emis_green,j,i) /= & 4620 4621 building_pars_f%fill ) & 4621 surf_usm_v(l)%emissivity( ind_pav_green,m) = &4622 surf_usm_v(l)%emissivity(m,ind_pav_green) = & 4622 4623 building_pars_f%pars_xy(ind_emis_green,j,i) 4623 4624 4624 4625 IF ( building_pars_f%pars_xy(ind_emis_win,j,i) /= & 4625 4626 building_pars_f%fill ) & 4626 surf_usm_v(l)%emissivity( ind_wat_win,m) = &4627 surf_usm_v(l)%emissivity(m,ind_wat_win) = & 4627 4628 building_pars_f%pars_xy(ind_emis_win,j,i) 4628 4629 … … 4647 4648 IF ( building_pars_f%pars_xy(ind_alb_wall_agfl,j,i) /= & 4648 4649 building_pars_f%fill ) & 4649 surf_usm_v(l)%albedo_type( ind_veg_wall,m) = &4650 surf_usm_v(l)%albedo_type(m,ind_veg_wall) = & 4650 4651 building_pars_f%pars_xy(ind_alb_wall_agfl,j,i) 4651 4652 4652 4653 IF ( building_pars_f%pars_xy(ind_alb_green_agfl,j,i) /= & 4653 4654 building_pars_f%fill ) & 4654 surf_usm_v(l)%albedo_type( ind_pav_green,m) = &4655 surf_usm_v(l)%albedo_type(m,ind_pav_green) = & 4655 4656 building_pars_f%pars_xy(ind_alb_green_agfl,j,i) 4656 4657 IF ( building_pars_f%pars_xy(ind_alb_win_agfl,j,i) /= & 4657 4658 building_pars_f%fill ) & 4658 surf_usm_v(l)%albedo_type( ind_wat_win,m) = &4659 surf_usm_v(l)%albedo_type(m,ind_wat_win) = & 4659 4660 building_pars_f%pars_xy(ind_alb_win_agfl,j,i) 4660 4661 … … 4730 4731 IF ( building_surface_pars_f%pars(ind_s_wall_frac,is) /= & 4731 4732 building_surface_pars_f%fill ) & 4732 surf_usm_h%frac( ind_veg_wall,m) = &4733 surf_usm_h%frac(m,ind_veg_wall) = & 4733 4734 building_surface_pars_f%pars(ind_s_wall_frac,is) 4734 4735 4735 4736 IF ( building_surface_pars_f%pars(ind_s_green_frac_w,is) /= & 4736 4737 building_surface_pars_f%fill ) & 4737 surf_usm_h%frac( ind_pav_green,m) = &4738 surf_usm_h%frac(m,ind_pav_green) = & 4738 4739 building_surface_pars_f%pars(ind_s_green_frac_w,is) 4739 4740 4740 4741 IF ( building_surface_pars_f%pars(ind_s_green_frac_r,is) /= & 4741 4742 building_surface_pars_f%fill ) & 4742 surf_usm_h%frac( ind_pav_green,m) = &4743 surf_usm_h%frac(m,ind_pav_green) = & 4743 4744 building_surface_pars_f%pars(ind_s_green_frac_r,is) 4744 4745 !TODO clarify: why should _w and _r be on the same surface? … … 4746 4747 IF ( building_surface_pars_f%pars(ind_s_win_frac,is) /= & 4747 4748 building_surface_pars_f%fill ) & 4748 surf_usm_h%frac( ind_wat_win,m) = &4749 surf_usm_h%frac(m,ind_wat_win) = & 4749 4750 building_surface_pars_f%pars(ind_s_win_frac,is) 4750 4751 … … 4826 4827 IF ( building_surface_pars_f%pars(ind_s_emis_wall,is) /= & 4827 4828 building_surface_pars_f%fill ) & 4828 surf_usm_h%emissivity( ind_veg_wall,m) = &4829 surf_usm_h%emissivity(m,ind_veg_wall) = & 4829 4830 building_surface_pars_f%pars(ind_s_emis_wall,is) 4830 4831 4831 4832 IF ( building_surface_pars_f%pars(ind_s_emis_green,is) /= & 4832 4833 building_surface_pars_f%fill ) & 4833 surf_usm_h%emissivity( ind_pav_green,m) = &4834 surf_usm_h%emissivity(m,ind_pav_green) = & 4834 4835 building_surface_pars_f%pars(ind_s_emis_green,is) 4835 4836 4836 4837 IF ( building_surface_pars_f%pars(ind_s_emis_win,is) /= & 4837 4838 building_surface_pars_f%fill ) & 4838 surf_usm_h%emissivity( ind_wat_win,m) = &4839 surf_usm_h%emissivity(m,ind_wat_win) = & 4839 4840 building_surface_pars_f%pars(ind_s_emis_win,is) 4840 4841 … … 4877 4878 IF ( building_surface_pars_f%pars(ind_s_wall_frac,is) /= & 4878 4879 building_surface_pars_f%fill ) & 4879 surf_usm_v(l)%frac( ind_veg_wall,m) = &4880 surf_usm_v(l)%frac(m,ind_veg_wall) = & 4880 4881 building_surface_pars_f%pars(ind_s_wall_frac,is) 4881 4882 4882 4883 IF ( building_surface_pars_f%pars(ind_s_green_frac_w,is) /= & 4883 4884 building_surface_pars_f%fill ) & 4884 surf_usm_v(l)%frac( ind_pav_green,m) = &4885 surf_usm_v(l)%frac(m,ind_pav_green) = & 4885 4886 building_surface_pars_f%pars(ind_s_green_frac_w,is) 4886 4887 4887 4888 IF ( building_surface_pars_f%pars(ind_s_green_frac_r,is) /= & 4888 4889 building_surface_pars_f%fill ) & 4889 surf_usm_v(l)%frac( ind_pav_green,m) = &4890 surf_usm_v(l)%frac(m,ind_pav_green) = & 4890 4891 building_surface_pars_f%pars(ind_s_green_frac_r,is) 4891 4892 !TODO clarify: why should _w and _r be on the same surface? … … 4893 4894 IF ( building_surface_pars_f%pars(ind_s_win_frac,is) /= & 4894 4895 building_surface_pars_f%fill ) & 4895 surf_usm_v(l)%frac( ind_wat_win,m) = &4896 surf_usm_v(l)%frac(m,ind_wat_win) = & 4896 4897 building_surface_pars_f%pars(ind_s_win_frac,is) 4897 4898 … … 4973 4974 IF ( building_surface_pars_f%pars(ind_s_emis_wall,is) /= & 4974 4975 building_surface_pars_f%fill ) & 4975 surf_usm_v(l)%emissivity( ind_veg_wall,m) = &4976 surf_usm_v(l)%emissivity(m,ind_veg_wall) = & 4976 4977 building_surface_pars_f%pars(ind_s_emis_wall,is) 4977 4978 4978 4979 IF ( building_surface_pars_f%pars(ind_s_emis_green,is) /= & 4979 4980 building_surface_pars_f%fill ) & 4980 surf_usm_v(l)%emissivity( ind_pav_green,m) = &4981 surf_usm_v(l)%emissivity(m,ind_pav_green) = & 4981 4982 building_surface_pars_f%pars(ind_s_emis_green,is) 4982 4983 4983 4984 IF ( building_surface_pars_f%pars(ind_s_emis_win,is) /= & 4984 4985 building_surface_pars_f%fill ) & 4985 surf_usm_v(l)%emissivity( ind_wat_win,m) = &4986 surf_usm_v(l)%emissivity(m,ind_wat_win) = & 4986 4987 building_surface_pars_f%pars(ind_s_emis_win,is) 4987 4988 … … 5015 5016 relative_fractions_corrected = .FALSE. 5016 5017 DO m = 1, surf_usm_h%ns 5017 sum_frac = SUM( surf_usm_h%frac( :,m) )5018 sum_frac = SUM( surf_usm_h%frac(m,:) ) 5018 5019 IF ( sum_frac /= 1.0_wp ) THEN 5019 5020 relative_fractions_corrected = .TRUE. … … 5023 5024 !-- driver creation. 5024 5025 IF ( sum_frac /= 0.0_wp ) THEN 5025 surf_usm_h%frac( :,m) = surf_usm_h%frac(:,m) / sum_frac5026 surf_usm_h%frac(m,:) = surf_usm_h%frac(m,:) / sum_frac 5026 5027 ! 5027 5028 !-- In case all relative fractions are erroneously set to zero, 5028 5029 !-- set wall fraction to 1. 5029 5030 ELSE 5030 surf_usm_h%frac( ind_veg_wall,m) = 1.0_wp5031 surf_usm_h%frac( ind_wat_win,m) = 0.0_wp5032 surf_usm_h%frac( ind_pav_green,m) = 0.0_wp5031 surf_usm_h%frac(m,ind_veg_wall) = 1.0_wp 5032 surf_usm_h%frac(m,ind_wat_win) = 0.0_wp 5033 surf_usm_h%frac(m,ind_pav_green) = 0.0_wp 5033 5034 ENDIF 5034 5035 ENDIF … … 5051 5052 DO l = 0, 3 5052 5053 DO m = 1, surf_usm_v(l)%ns 5053 sum_frac = SUM( surf_usm_v(l)%frac( :,m) )5054 sum_frac = SUM( surf_usm_v(l)%frac(m,:) ) 5054 5055 IF ( sum_frac /= 1.0_wp ) THEN 5055 5056 relative_fractions_corrected = .TRUE. … … 5057 5058 !-- Normalize relative fractions to 1. 5058 5059 IF ( sum_frac /= 0.0_wp ) THEN 5059 surf_usm_v(l)%frac( :,m) = surf_usm_v(l)%frac(:,m) / sum_frac5060 surf_usm_v(l)%frac(m,:) = surf_usm_v(l)%frac(m,:) / sum_frac 5060 5061 ! 5061 5062 !-- In case all relative fractions are erroneously set to zero, 5062 5063 !-- set wall fraction to 1. 5063 5064 ELSE 5064 surf_usm_v(l)%frac( ind_veg_wall,m) = 1.0_wp5065 surf_usm_v(l)%frac( ind_wat_win,m) = 0.0_wp5066 surf_usm_v(l)%frac( ind_pav_green,m) = 0.0_wp5065 surf_usm_v(l)%frac(m,ind_veg_wall) = 1.0_wp 5066 surf_usm_v(l)%frac(m,ind_wat_win) = 0.0_wp 5067 surf_usm_v(l)%frac(m,ind_pav_green) = 0.0_wp 5067 5068 ENDIF 5068 5069 ENDIF … … 5367 5368 - t_wall_h(nzb_wall,m) ) * & 5368 5369 surf_usm_h%ddz_wall(nzb_wall+1,m) & 5369 + surf_usm_h%frac( ind_veg_wall,m) &5370 / (surf_usm_h%frac( ind_veg_wall,m) &5371 + surf_usm_h%frac( ind_pav_green,m) ) &5370 + surf_usm_h%frac(m,ind_veg_wall) & 5371 / (surf_usm_h%frac(m,ind_veg_wall) & 5372 + surf_usm_h%frac(m,ind_pav_green) ) & 5372 5373 * surf_usm_h%wghf_eb(m) & 5373 - surf_usm_h%frac( ind_pav_green,m) &5374 / (surf_usm_h%frac( ind_veg_wall,m) &5375 + surf_usm_h%frac( ind_pav_green,m) ) &5374 - surf_usm_h%frac(m,ind_pav_green) & 5375 / (surf_usm_h%frac(m,ind_veg_wall) & 5376 + surf_usm_h%frac(m,ind_pav_green) ) & 5376 5377 * ( surf_usm_h%lambda_h_green(nzt_wall,m)* wall_mod(nzt_wall) & 5377 5378 * surf_usm_h%ddz_green(nzt_wall,m) & … … 5550 5551 - t_wall_v(l)%t(nzb_wall,m) ) * & 5551 5552 surf_usm_v(l)%ddz_wall(nzb_wall+1,m) & 5552 + surf_usm_v(l)%frac( ind_veg_wall,m) &5553 / (surf_usm_v(l)%frac( ind_veg_wall,m) &5554 + surf_usm_v(l)%frac( ind_pav_green,m) ) &5553 + surf_usm_v(l)%frac(m,ind_veg_wall) & 5554 / (surf_usm_v(l)%frac(m,ind_veg_wall) & 5555 + surf_usm_v(l)%frac(m,ind_pav_green) ) & 5555 5556 * surf_usm_v(l)%wghf_eb(m) & 5556 - surf_usm_v(l)%frac( ind_pav_green,m) &5557 / (surf_usm_v(l)%frac( ind_veg_wall,m) &5558 + surf_usm_v(l)%frac( ind_pav_green,m) ) &5557 - surf_usm_v(l)%frac(m,ind_pav_green) & 5558 / (surf_usm_v(l)%frac(m,ind_veg_wall) & 5559 + surf_usm_v(l)%frac(m,ind_pav_green) ) & 5559 5560 * ( surf_usm_v(l)%lambda_h_green(nzt_wall,m)* wall_mod(nzt_wall) & 5560 5561 * surf_usm_v(l)%ddz_green(nzt_wall,m) & … … 5768 5769 !$OMP DO SCHEDULE (STATIC) 5769 5770 DO m = 1, surf_usm_h%ns 5770 IF (surf_usm_h%frac( ind_pav_green,m) > 0.0_wp) THEN5771 IF (surf_usm_h%frac(m,ind_pav_green) > 0.0_wp) THEN 5771 5772 ! 5772 5773 !-- Obtain indices … … 6020 6021 DO m = 1, surf_usm_v(l)%ns 6021 6022 6022 IF (surf_usm_v(l)%frac( ind_pav_green,m) > 0.0_wp) THEN6023 IF (surf_usm_v(l)%frac(m,ind_pav_green) > 0.0_wp) THEN 6023 6024 ! 6024 6025 !-- no substrate layer for green walls / only groundbase green walls (ivy i.e.) -> green layers get same … … 7271 7272 ENDIF 7272 7273 7273 surf_usm_h%albedo( :,m) = -1.0_wp7274 surf_usm_h%albedo(m,:) = -1.0_wp 7274 7275 surf_usm_h%thickness_wall(m) = -1.0_wp 7275 7276 surf_usm_h%thickness_green(m) = -1.0_wp … … 7288 7289 ENDIF 7289 7290 surf_usm_h%surface_types(m) = usm_par(5,jw,iw) 7290 surf_usm_h%albedo( :,m) = usm_val(1,jw,iw)7291 surf_usm_h%albedo(m,:) = usm_val(1,jw,iw) 7291 7292 surf_usm_h%transmissivity(m) = 0.0_wp 7292 7293 ENDIF … … 7328 7329 ! 7329 7330 !-- Albedo 7330 IF ( surf_usm_h%albedo( ind_veg_wall,m) < 0.0_wp ) THEN7331 surf_usm_h%albedo( :,m) = surface_params(ialbedo,ip)7331 IF ( surf_usm_h%albedo(m,ind_veg_wall) < 0.0_wp ) THEN 7332 surf_usm_h%albedo(m,:) = surface_params(ialbedo,ip) 7332 7333 ENDIF 7333 7334 ! 7334 7335 !-- Albedo type is 0 (custom), others are replaced later 7335 surf_usm_h%albedo_type( :,m) = 07336 surf_usm_h%albedo_type(m,:) = 0 7336 7337 ! 7337 7338 !-- Transmissivity … … 7341 7342 ! 7342 7343 !-- emissivity of the wall 7343 surf_usm_h%emissivity( :,m) = surface_params(iemiss,ip)7344 surf_usm_h%emissivity(m,:) = surface_params(iemiss,ip) 7344 7345 ! 7345 7346 !-- heat conductivity λS between air and wall ( W mâ2 Kâ1 ) … … 7425 7426 surf_usm_v(l)%surface_types(m) = roof_category !< default category for wall surface in roof zone 7426 7427 END IF 7427 surf_usm_v(l)%albedo( :,m) = -1.0_wp7428 surf_usm_v(l)%albedo(m,:) = -1.0_wp 7428 7429 surf_usm_v(l)%thickness_wall(m) = -1.0_wp 7429 7430 surf_usm_v(l)%thickness_window(m) = -1.0_wp … … 7436 7437 surf_usm_v(l)%surface_types(m) = pedestrian_category !< default category for wall surface in 7437 7438 !<pedestrian zone 7438 surf_usm_v(l)%albedo( :,m) = -1.0_wp7439 surf_usm_v(l)%albedo(m,:) = -1.0_wp 7439 7440 surf_usm_v(l)%thickness_wall(m) = -1.0_wp 7440 7441 surf_usm_v(l)%thickness_window(m) = -1.0_wp … … 7443 7444 ELSE 7444 7445 surf_usm_v(l)%surface_types(m) = usm_par(ii+1,jw,iw) 7445 surf_usm_v(l)%albedo( :,m) = usm_val(ij,jw,iw)7446 surf_usm_v(l)%albedo(m,:) = usm_val(ij,jw,iw) 7446 7447 surf_usm_v(l)%thickness_wall(m) = usm_val(ij+1,jw,iw) 7447 7448 surf_usm_v(l)%thickness_window(m) = usm_val(ij+1,jw,iw) … … 7454 7455 IF ( usm_par(ii+3,jw,iw) == 0 ) THEN 7455 7456 surf_usm_v(l)%surface_types(m) = wall_category !< default category for wall surface 7456 surf_usm_v(l)%albedo( :,m) = -1.0_wp7457 surf_usm_v(l)%albedo(m,:) = -1.0_wp 7457 7458 surf_usm_v(l)%thickness_wall(m) = -1.0_wp 7458 7459 surf_usm_v(l)%thickness_window(m) = -1.0_wp … … 7461 7462 ELSE 7462 7463 surf_usm_v(l)%surface_types(m) = usm_par(ii+3,jw,iw) 7463 surf_usm_v(l)%albedo( :,m) = usm_val(ij+2,jw,iw)7464 surf_usm_v(l)%albedo(m,:) = usm_val(ij+2,jw,iw) 7464 7465 surf_usm_v(l)%thickness_wall(m) = usm_val(ij+3,jw,iw) 7465 7466 surf_usm_v(l)%thickness_window(m) = usm_val(ij+3,jw,iw) … … 7472 7473 IF ( usm_par(ii+5,jw,iw) == 0 ) THEN 7473 7474 surf_usm_v(l)%surface_types(m) = roof_category !< default category for roof surface 7474 surf_usm_v(l)%albedo( :,m) = -1.0_wp7475 surf_usm_v(l)%albedo(m,:) = -1.0_wp 7475 7476 surf_usm_v(l)%thickness_wall(m) = -1.0_wp 7476 7477 surf_usm_v(l)%thickness_window(m) = -1.0_wp … … 7479 7480 ELSE 7480 7481 surf_usm_v(l)%surface_types(m) = usm_par(ii+5,jw,iw) 7481 surf_usm_v(l)%albedo( :,m) = usm_val(ij+4,jw,iw)7482 surf_usm_v(l)%albedo(m,:) = usm_val(ij+4,jw,iw) 7482 7483 surf_usm_v(l)%thickness_wall(m) = usm_val(ij+5,jw,iw) 7483 7484 surf_usm_v(l)%thickness_window(m) = usm_val(ij+5,jw,iw) … … 7501 7502 surf_usm_v(l)%surface_types(m) = roof_category !< default category for wall surface in roof zone 7502 7503 END IF 7503 surf_usm_v(l)%albedo( :,m) = -1.0_wp7504 surf_usm_v(l)%albedo(m,:) = -1.0_wp 7504 7505 surf_usm_v(l)%thickness_wall(m) = -1.0_wp 7505 7506 surf_usm_v(l)%thickness_window(m) = -1.0_wp … … 7541 7542 ! 7542 7543 !-- Albedo 7543 IF ( surf_usm_v(l)%albedo( ind_veg_wall,m) < 0.0_wp ) THEN7544 surf_usm_v(l)%albedo( :,m) = surface_params(ialbedo,ip)7544 IF ( surf_usm_v(l)%albedo(m,ind_veg_wall) < 0.0_wp ) THEN 7545 surf_usm_v(l)%albedo(m,:) = surface_params(ialbedo,ip) 7545 7546 ENDIF 7546 7547 !-- Albedo type is 0 (custom), others are replaced later 7547 surf_usm_v(l)%albedo_type( :,m) = 07548 surf_usm_v(l)%albedo_type(m,:) = 0 7548 7549 !-- Transmissivity of the windows 7549 7550 IF ( surf_usm_v(l)%transmissivity(m) < 0.0_wp ) THEN … … 7833 7834 !-- Note, this is a temporary fix and need to be removed later. 7834 7835 IF ( during_spinup ) THEN 7835 frac_win = surf_usm_h%frac( ind_wat_win,m)7836 frac_wall = surf_usm_h%frac( ind_veg_wall,m)7837 frac_green = surf_usm_h%frac( ind_pav_green,m)7838 surf_usm_h%frac( ind_wat_win,m) = 0.0_wp7839 surf_usm_h%frac( ind_veg_wall,m) = 1.0_wp7840 surf_usm_h%frac( ind_pav_green,m) = 0.0_wp7836 frac_win = surf_usm_h%frac(m,ind_wat_win) 7837 frac_wall = surf_usm_h%frac(m,ind_veg_wall) 7838 frac_green = surf_usm_h%frac(m,ind_pav_green) 7839 surf_usm_h%frac(m,ind_wat_win) = 0.0_wp 7840 surf_usm_h%frac(m,ind_veg_wall) = 1.0_wp 7841 surf_usm_h%frac(m,ind_pav_green) = 0.0_wp 7841 7842 ENDIF 7842 7843 ! … … 7869 7870 rho_cp = c_p * hyp(k) / ( r_d * surf_usm_h%pt1(m) * exner(k) ) 7870 7871 7871 IF ( surf_usm_h%frac( ind_pav_green,m) > 0.0_wp ) THEN7872 IF ( surf_usm_h%frac(m,ind_pav_green) > 0.0_wp ) THEN 7872 7873 ! 7873 7874 !-- Calculate frequently used parameters … … 7921 7922 7922 7923 7923 IF ( surf_usm_h%frac( ind_pav_green,m) > 0.0_wp ) THEN7924 IF ( surf_usm_h%frac(m,ind_pav_green) > 0.0_wp ) THEN 7924 7925 !-- Adapted from LSM: 7925 7926 !-- Second step: calculate canopy resistance r_canopy … … 8021 8022 !-- is used 8022 8023 coef_1 = surf_usm_h%rad_net_l(m) + & 8023 ( 3.0_wp + 1.0_wp ) * surf_usm_h%emissivity( ind_veg_wall,m) * &8024 ( 3.0_wp + 1.0_wp ) * surf_usm_h%emissivity(m,ind_veg_wall) * & 8024 8025 sigma_sb * t_surf_wall_h(m) ** 4 + & 8025 8026 f_shf * surf_usm_h%pt1(m) + & 8026 8027 lambda_surface * t_wall_h(nzb_wall,m) 8027 IF ( ( .NOT. during_spinup ) .AND. (surf_usm_h%frac( ind_wat_win,m) > 0.0_wp ) ) THEN8028 IF ( ( .NOT. during_spinup ) .AND. (surf_usm_h%frac(m,ind_wat_win) > 0.0_wp ) ) THEN 8028 8029 coef_window_1 = surf_usm_h%rad_net_l(m) + & 8029 ( 3.0_wp + 1.0_wp ) * surf_usm_h%emissivity( ind_wat_win,m) &8030 ( 3.0_wp + 1.0_wp ) * surf_usm_h%emissivity(m,ind_wat_win) & 8030 8031 * sigma_sb * t_surf_window_h(m) ** 4 + & 8031 8032 f_shf_window * surf_usm_h%pt1(m) + & 8032 8033 lambda_surface_window * t_window_h(nzb_wall,m) 8033 8034 ENDIF 8034 IF ( ( humidity ) .AND. ( surf_usm_h%frac( ind_pav_green,m) > 0.0_wp ) ) THEN8035 IF ( ( humidity ) .AND. ( surf_usm_h%frac(m,ind_pav_green) > 0.0_wp ) ) THEN 8035 8036 coef_green_1 = surf_usm_h%rad_net_l(m) + & 8036 ( 3.0_wp + 1.0_wp ) * surf_usm_h%emissivity( ind_pav_green,m) * sigma_sb * &8037 ( 3.0_wp + 1.0_wp ) * surf_usm_h%emissivity(m,ind_pav_green) * sigma_sb * & 8037 8038 t_surf_green_h(m) ** 4 + & 8038 8039 f_shf_green * surf_usm_h%pt1(m) + f_qsws * ( qv1 - q_s & … … 8041 8042 ELSE 8042 8043 coef_green_1 = surf_usm_h%rad_net_l(m) + & 8043 ( 3.0_wp + 1.0_wp ) * surf_usm_h%emissivity( ind_pav_green,m) *&8044 ( 3.0_wp + 1.0_wp ) * surf_usm_h%emissivity(m,ind_pav_green) *& 8044 8045 sigma_sb * t_surf_green_h(m) ** 4 + & 8045 8046 f_shf_green * surf_usm_h%pt1(m) + & … … 8048 8049 ! 8049 8050 !-- denominator of the prognostic equation 8050 coef_2 = 4.0_wp * surf_usm_h%emissivity( ind_veg_wall,m) * &8051 coef_2 = 4.0_wp * surf_usm_h%emissivity(m,ind_veg_wall) * & 8051 8052 sigma_sb * t_surf_wall_h(m) ** 3 & 8052 8053 + lambda_surface + f_shf / exner(k) 8053 IF ( ( .NOT. during_spinup ) .AND. ( surf_usm_h%frac( ind_wat_win,m) > 0.0_wp ) ) THEN8054 coef_window_2 = 4.0_wp * surf_usm_h%emissivity( ind_wat_win,m) * &8054 IF ( ( .NOT. during_spinup ) .AND. ( surf_usm_h%frac(m,ind_wat_win) > 0.0_wp ) ) THEN 8055 coef_window_2 = 4.0_wp * surf_usm_h%emissivity(m,ind_wat_win) * & 8055 8056 sigma_sb * t_surf_window_h(m) ** 3 & 8056 8057 + lambda_surface_window + f_shf_window / exner(k) 8057 8058 ENDIF 8058 IF ( ( humidity ) .AND. ( surf_usm_h%frac( ind_pav_green,m) > 0.0_wp ) ) THEN8059 coef_green_2 = 4.0_wp * surf_usm_h%emissivity( ind_pav_green,m) * sigma_sb * &8059 IF ( ( humidity ) .AND. ( surf_usm_h%frac(m,ind_pav_green) > 0.0_wp ) ) THEN 8060 coef_green_2 = 4.0_wp * surf_usm_h%emissivity(m,ind_pav_green) * sigma_sb * & 8060 8061 t_surf_green_h(m) ** 3 + f_qsws * dq_s_dt & 8061 8062 + lambda_surface_green + f_shf_green / exner(k) 8062 8063 ELSE 8063 coef_green_2 = 4.0_wp * surf_usm_h%emissivity( ind_pav_green,m) * sigma_sb * &8064 coef_green_2 = 4.0_wp * surf_usm_h%emissivity(m,ind_pav_green) * sigma_sb * & 8064 8065 t_surf_green_h(m) ** 3 & 8065 8066 + lambda_surface_green + f_shf_green / exner(k) … … 8071 8072 surf_usm_h%c_surface(m) * t_surf_wall_h(m) ) / & 8072 8073 ( surf_usm_h%c_surface(m) + coef_2 * dt_3d * tsc(2) ) 8073 IF (( .NOT. during_spinup ) .AND. (surf_usm_h%frac( ind_wat_win,m) > 0.0_wp)) THEN8074 IF (( .NOT. during_spinup ) .AND. (surf_usm_h%frac(m,ind_wat_win) > 0.0_wp)) THEN 8074 8075 t_surf_window_h_p(m) = ( coef_window_1 * dt_3d * tsc(2) + & 8075 8076 surf_usm_h%c_surface_window(m) * t_surf_window_h(m) ) / & … … 8093 8094 !-- store also vpt_surface, which is, due to the lack of moisture on roofs simply 8094 8095 !-- assumed to be the surface temperature. 8095 surf_usm_h%pt_surface(m) = ( surf_usm_h%frac( ind_veg_wall,m) * t_surf_wall_h_p(m) &8096 + surf_usm_h%frac( ind_wat_win,m) * t_surf_window_h_p(m) &8097 + surf_usm_h%frac( ind_pav_green,m) * t_surf_green_h_p(m) ) &8096 surf_usm_h%pt_surface(m) = ( surf_usm_h%frac(m,ind_veg_wall) * t_surf_wall_h_p(m) & 8097 + surf_usm_h%frac(m,ind_wat_win) * t_surf_window_h_p(m) & 8098 + surf_usm_h%frac(m,ind_pav_green) * t_surf_green_h_p(m) ) & 8098 8099 / exner(k) 8099 8100 … … 8138 8139 !-- rad_net_l is never used! 8139 8140 surf_usm_h%rad_net_l(m) = surf_usm_h%rad_net_l(m) + & 8140 surf_usm_h%frac( ind_veg_wall,m) * &8141 sigma_sb * surf_usm_h%emissivity( ind_veg_wall,m) * &8141 surf_usm_h%frac(m,ind_veg_wall) * & 8142 sigma_sb * surf_usm_h%emissivity(m,ind_veg_wall) * & 8142 8143 ( t_surf_wall_h_p(m)**4 - t_surf_wall_h(m)**4 ) & 8143 + surf_usm_h%frac( ind_wat_win,m) * &8144 sigma_sb * surf_usm_h%emissivity( ind_wat_win,m) * &8144 + surf_usm_h%frac(m,ind_wat_win) * & 8145 sigma_sb * surf_usm_h%emissivity(m,ind_wat_win) * & 8145 8146 ( t_surf_window_h_p(m)**4 - t_surf_window_h(m)**4 ) & 8146 + surf_usm_h%frac( ind_pav_green,m) * &8147 sigma_sb * surf_usm_h%emissivity( ind_pav_green,m) * &8147 + surf_usm_h%frac(m,ind_pav_green) * & 8148 sigma_sb * surf_usm_h%emissivity(m,ind_pav_green) * & 8148 8149 ( t_surf_green_h_p(m)**4 - t_surf_green_h(m)**4 ) 8149 8150 … … 8158 8159 !-- ground/wall/roof surface heat flux 8159 8160 surf_usm_h%wshf_eb(m) = - f_shf * ( surf_usm_h%pt1(m) - t_surf_wall_h_p(m) / exner(k) ) * & 8160 surf_usm_h%frac( ind_veg_wall,m) &8161 surf_usm_h%frac(m,ind_veg_wall) & 8161 8162 - f_shf_window * ( surf_usm_h%pt1(m) - t_surf_window_h_p(m) / exner(k) ) * & 8162 surf_usm_h%frac( ind_wat_win,m) &8163 surf_usm_h%frac(m,ind_wat_win) & 8163 8164 - f_shf_green * ( surf_usm_h%pt1(m) - t_surf_green_h_p(m) / exner(k) ) * & 8164 surf_usm_h%frac( ind_pav_green,m)8165 surf_usm_h%frac(m,ind_pav_green) 8165 8166 ! 8166 8167 !-- store kinematic surface heat fluxes for utilization in other processes … … 8175 8176 8176 8177 8177 IF (surf_usm_h%frac( ind_pav_green,m) > 0.0_wp) THEN8178 IF (surf_usm_h%frac(m,ind_pav_green) > 0.0_wp) THEN 8178 8179 8179 8180 … … 8221 8222 IF ( m_liq_usm_h%var_usm_1d(m) /= m_liq_max ) THEN 8222 8223 surf_usm_h%qsws_liq(m) = surf_usm_h%qsws_liq(m) & 8223 + surf_usm_h%frac( ind_pav_green,m) * prr(k+k_off,j+j_off,i+i_off)&8224 + surf_usm_h%frac(m,ind_pav_green) * prr(k+k_off,j+j_off,i+i_off)& 8224 8225 * hyrho(k+k_off) & 8225 8226 * 0.001_wp * rho_l * l_v … … 8286 8287 !-- values are restored. 8287 8288 IF ( during_spinup ) THEN 8288 surf_usm_h%frac( ind_wat_win,m) = frac_win8289 surf_usm_h%frac( ind_veg_wall,m) = frac_wall8290 surf_usm_h%frac( ind_pav_green,m) = frac_green8289 surf_usm_h%frac(m,ind_wat_win) = frac_win 8290 surf_usm_h%frac(m,ind_veg_wall) = frac_wall 8291 surf_usm_h%frac(m,ind_pav_green) = frac_green 8291 8292 ENDIF 8292 8293 … … 8302 8303 !-- Note, this is a temporary fix and need to be removed later. 8303 8304 IF ( during_spinup ) THEN 8304 frac_win = surf_usm_v(l)%frac( ind_wat_win,m)8305 frac_wall = surf_usm_v(l)%frac( ind_veg_wall,m)8306 frac_green = surf_usm_v(l)%frac( ind_pav_green,m)8307 surf_usm_v(l)%frac( ind_wat_win,m) = 0.0_wp8308 surf_usm_v(l)%frac( ind_veg_wall,m) = 1.0_wp8309 surf_usm_v(l)%frac( ind_pav_green,m) = 0.0_wp8305 frac_win = surf_usm_v(l)%frac(m,ind_wat_win) 8306 frac_wall = surf_usm_v(l)%frac(m,ind_veg_wall) 8307 frac_green = surf_usm_v(l)%frac(m,ind_pav_green) 8308 surf_usm_v(l)%frac(m,ind_wat_win) = 0.0_wp 8309 surf_usm_v(l)%frac(m,ind_veg_wall) = 1.0_wp 8310 surf_usm_v(l)%frac(m,ind_pav_green) = 0.0_wp 8310 8311 ENDIF 8311 8312 ! … … 8331 8332 ENDIF 8332 8333 ! 8333 !-- calculate rho * c_p coefficient at wall layer8334 !-- calculate rho * c_p coefficient at wall layer 8334 8335 rho_cp = c_p * hyp(k) / ( r_d * surf_usm_v(l)%pt1(m) * exner(k) ) 8335 8336 8336 IF (surf_usm_v(l)%frac( 1,m) > 0.0_wp ) THEN8337 ! 8338 !-- Calculate frequently used parameters8337 IF (surf_usm_v(l)%frac(m,ind_pav_green) > 0.0_wp ) THEN 8338 ! 8339 !-- Calculate frequently used parameters 8339 8340 rho_lv = rho_cp / c_p * l_v 8340 8341 drho_l_lv = 1.0_wp / (rho_l * l_v) … … 8382 8383 8383 8384 8384 IF ( surf_usm_v(l)%frac( ind_pav_green,m) > 0.0_wp ) THEN8385 IF ( surf_usm_v(l)%frac(m,ind_pav_green) > 0.0_wp ) THEN 8385 8386 ! 8386 8387 !-- Adapted from LSM: … … 8460 8461 coef_1 = surf_usm_v(l)%rad_net_l(m) + & ! coef +1 corresponds to -lwout 8461 8462 ! included in calculation of radnet_l 8462 ( 3.0_wp + 1.0_wp ) * surf_usm_v(l)%emissivity( ind_veg_wall,m) * &8463 ( 3.0_wp + 1.0_wp ) * surf_usm_v(l)%emissivity(m,ind_veg_wall) * & 8463 8464 sigma_sb * t_surf_wall_v(l)%t(m) ** 4 + & 8464 8465 f_shf * surf_usm_v(l)%pt1(m) + & 8465 8466 lambda_surface * t_wall_v(l)%t(nzb_wall,m) 8466 IF ( ( .NOT. during_spinup ) .AND. ( surf_usm_v(l)%frac( ind_wat_win,m) > 0.0_wp ) ) THEN8467 IF ( ( .NOT. during_spinup ) .AND. ( surf_usm_v(l)%frac(m,ind_wat_win) > 0.0_wp ) ) THEN 8467 8468 coef_window_1 = surf_usm_v(l)%rad_net_l(m) + & ! coef +1 corresponds to -lwout 8468 8469 ! included in calculation of radnet_l 8469 ( 3.0_wp + 1.0_wp ) * surf_usm_v(l)%emissivity( ind_wat_win,m) * &8470 ( 3.0_wp + 1.0_wp ) * surf_usm_v(l)%emissivity(m,ind_wat_win) * & 8470 8471 sigma_sb * t_surf_window_v(l)%t(m) ** 4 + & 8471 8472 f_shf * surf_usm_v(l)%pt1(m) + & 8472 8473 lambda_surface_window * t_window_v(l)%t(nzb_wall,m) 8473 8474 ENDIF 8474 IF ( ( humidity ) .AND. ( surf_usm_v(l)%frac( ind_pav_green,m) > 0.0_wp ) ) THEN8475 IF ( ( humidity ) .AND. ( surf_usm_v(l)%frac(m,ind_pav_green) > 0.0_wp ) ) THEN 8475 8476 coef_green_1 = surf_usm_v(l)%rad_net_l(m) + & ! coef +1 corresponds to -lwout 8476 8477 ! included in calculation of radnet_l 8477 ( 3.0_wp + 1.0_wp ) * surf_usm_v(l)%emissivity( ind_pav_green,m) * sigma_sb * &8478 ( 3.0_wp + 1.0_wp ) * surf_usm_v(l)%emissivity(m,ind_pav_green) * sigma_sb * & 8478 8479 t_surf_green_v(l)%t(m) ** 4 + & 8479 8480 f_shf * surf_usm_v(l)%pt1(m) + f_qsws * ( qv1 - q_s & … … 8483 8484 coef_green_1 = surf_usm_v(l)%rad_net_l(m) + & ! coef +1 corresponds to -lwout included 8484 8485 ! in calculation of radnet_l 8485 ( 3.0_wp + 1.0_wp ) * surf_usm_v(l)%emissivity( ind_pav_green,m) * sigma_sb * &8486 ( 3.0_wp + 1.0_wp ) * surf_usm_v(l)%emissivity(m,ind_pav_green) * sigma_sb * & 8486 8487 t_surf_green_v(l)%t(m) ** 4 + & 8487 8488 f_shf * surf_usm_v(l)%pt1(m) + & … … 8491 8492 ! 8492 8493 !-- denominator of the prognostic equation 8493 coef_2 = 4.0_wp * surf_usm_v(l)%emissivity( ind_veg_wall,m) * sigma_sb * &8494 coef_2 = 4.0_wp * surf_usm_v(l)%emissivity(m,ind_veg_wall) * sigma_sb * & 8494 8495 t_surf_wall_v(l)%t(m) ** 3 & 8495 8496 + lambda_surface + f_shf / exner(k) 8496 IF ( ( .NOT. during_spinup ) .AND. ( surf_usm_v(l)%frac( ind_wat_win,m) > 0.0_wp ) ) THEN8497 coef_window_2 = 4.0_wp * surf_usm_v(l)%emissivity( ind_wat_win,m) * sigma_sb * &8497 IF ( ( .NOT. during_spinup ) .AND. ( surf_usm_v(l)%frac(m,ind_wat_win) > 0.0_wp ) ) THEN 8498 coef_window_2 = 4.0_wp * surf_usm_v(l)%emissivity(m,ind_wat_win) * sigma_sb * & 8498 8499 t_surf_window_v(l)%t(m) ** 3 & 8499 8500 + lambda_surface_window + f_shf / exner(k) 8500 8501 ENDIF 8501 IF ( ( humidity ) .AND. ( surf_usm_v(l)%frac( ind_pav_green,m) > 0.0_wp ) ) THEN8502 coef_green_2 = 4.0_wp * surf_usm_v(l)%emissivity( ind_pav_green,m) * sigma_sb * &8502 IF ( ( humidity ) .AND. ( surf_usm_v(l)%frac(m,ind_pav_green) > 0.0_wp ) ) THEN 8503 coef_green_2 = 4.0_wp * surf_usm_v(l)%emissivity(m,ind_pav_green) * sigma_sb * & 8503 8504 t_surf_green_v(l)%t(m) ** 3 + f_qsws * dq_s_dt & 8504 8505 + lambda_surface_green + f_shf / exner(k) 8505 8506 ELSE 8506 coef_green_2 = 4.0_wp * surf_usm_v(l)%emissivity( ind_pav_green,m) * sigma_sb * &8507 coef_green_2 = 4.0_wp * surf_usm_v(l)%emissivity(m,ind_pav_green) * sigma_sb * & 8507 8508 t_surf_green_v(l)%t(m) ** 3 & 8508 8509 + lambda_surface_green + f_shf / exner(k) … … 8514 8515 surf_usm_v(l)%c_surface(m) * t_surf_wall_v(l)%t(m) ) / & 8515 8516 ( surf_usm_v(l)%c_surface(m) + coef_2 * dt_3d * tsc(2) ) 8516 IF ( ( .NOT. during_spinup ) .AND. ( surf_usm_v(l)%frac( ind_wat_win,m) > 0.0_wp ) ) THEN8517 IF ( ( .NOT. during_spinup ) .AND. ( surf_usm_v(l)%frac(m,ind_wat_win) > 0.0_wp ) ) THEN 8517 8518 t_surf_window_v_p(l)%t(m) = ( coef_window_1 * dt_3d * tsc(2) + & 8518 8519 surf_usm_v(l)%c_surface_window(m) * t_surf_window_v(l)%t(m) ) / & … … 8534 8535 !-- store also vpt_surface, which is, due to the lack of moisture on roofs simply 8535 8536 !-- assumed to be the surface temperature. 8536 surf_usm_v(l)%pt_surface(m) = ( surf_usm_v(l)%frac( ind_veg_wall,m) * t_surf_wall_v_p(l)%t(m) &8537 + surf_usm_v(l)%frac( ind_wat_win,m) * t_surf_window_v_p(l)%t(m) &8538 + surf_usm_v(l)%frac( ind_pav_green,m) * t_surf_green_v_p(l)%t(m) ) &8537 surf_usm_v(l)%pt_surface(m) = ( surf_usm_v(l)%frac(m,ind_veg_wall) * t_surf_wall_v_p(l)%t(m) & 8538 + surf_usm_v(l)%frac(m,ind_wat_win) * t_surf_window_v_p(l)%t(m) & 8539 + surf_usm_v(l)%frac(m,ind_pav_green) * t_surf_green_v_p(l)%t(m) ) & 8539 8540 / exner(k) 8540 8541 … … 8582 8583 !-- calculate fluxes 8583 8584 !-- prognostic rad_net_l is used just for output! 8584 surf_usm_v(l)%rad_net_l(m) = surf_usm_v(l)%frac( ind_veg_wall,m) * &8585 surf_usm_v(l)%rad_net_l(m) = surf_usm_v(l)%frac(m,ind_veg_wall) * & 8585 8586 ( surf_usm_v(l)%rad_net_l(m) + & 8586 8587 3.0_wp * sigma_sb * & 8587 8588 t_surf_wall_v(l)%t(m)**4 - 4.0_wp * sigma_sb * & 8588 8589 t_surf_wall_v(l)%t(m)**3 * t_surf_wall_v_p(l)%t(m) ) & 8589 + surf_usm_v(l)%frac( ind_wat_win,m) * &8590 + surf_usm_v(l)%frac(m,ind_wat_win) * & 8590 8591 ( surf_usm_v(l)%rad_net_l(m) + & 8591 8592 3.0_wp * sigma_sb * & 8592 8593 t_surf_window_v(l)%t(m)**4 - 4.0_wp * sigma_sb * & 8593 8594 t_surf_window_v(l)%t(m)**3 * t_surf_window_v_p(l)%t(m) ) & 8594 + surf_usm_v(l)%frac( ind_pav_green,m) * &8595 + surf_usm_v(l)%frac(m,ind_pav_green) * & 8595 8596 ( surf_usm_v(l)%rad_net_l(m) + & 8596 8597 3.0_wp * sigma_sb * & … … 8609 8610 surf_usm_v(l)%wshf_eb(m) = & 8610 8611 - f_shf * ( surf_usm_v(l)%pt1(m) - & 8611 t_surf_wall_v_p(l)%t(m) / exner(k) ) * surf_usm_v(l)%frac( ind_veg_wall,m) &8612 t_surf_wall_v_p(l)%t(m) / exner(k) ) * surf_usm_v(l)%frac(m,ind_veg_wall) & 8612 8613 - f_shf_window * ( surf_usm_v(l)%pt1(m) - & 8613 t_surf_window_v_p(l)%t(m) / exner(k) ) * surf_usm_v(l)%frac( ind_wat_win,m)&8614 t_surf_window_v_p(l)%t(m) / exner(k) ) * surf_usm_v(l)%frac(m,ind_wat_win)& 8614 8615 - f_shf_green * ( surf_usm_v(l)%pt1(m) - & 8615 t_surf_green_v_p(l)%t(m) / exner(k) ) * surf_usm_v(l)%frac( ind_pav_green,m)8616 t_surf_green_v_p(l)%t(m) / exner(k) ) * surf_usm_v(l)%frac(m,ind_pav_green) 8616 8617 8617 8618 ! … … 8627 8628 ENDIF 8628 8629 8629 IF ( surf_usm_v(l)%frac( ind_pav_green,m) > 0.0_wp ) THEN8630 IF ( surf_usm_v(l)%frac(m,ind_pav_green) > 0.0_wp ) THEN 8630 8631 8631 8632 … … 8683 8684 !-- values are restored. 8684 8685 IF ( during_spinup ) THEN 8685 surf_usm_v(l)%frac( ind_wat_win,m) = frac_win8686 surf_usm_v(l)%frac( ind_veg_wall,m) = frac_wall8687 surf_usm_v(l)%frac( ind_pav_green,m) = frac_green8686 surf_usm_v(l)%frac(m,ind_wat_win) = frac_win 8687 surf_usm_v(l)%frac(m,ind_veg_wall) = frac_wall 8688 surf_usm_v(l)%frac(m,ind_pav_green) = frac_green 8688 8689 ENDIF 8689 8690
Note: See TracChangeset
for help on using the changeset viewer.