Ignore:
Timestamp:
Mar 4, 2020 7:20:35 PM (4 years ago)
Author:
suehring
Message:

Change order of dimension in surface arrays %frac, %emissivity and %albedo to allow for better vectorization in the radiation interactions; Set back turbulent length scale to 8 x grid spacing in the parametrized mode for the synthetic turbulence generator (was accidentally changed in last commit)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • palm/trunk/SOURCE/urban_surface_mod.f90

    r4392 r4441  
    2323! Current revisions:
    2424! ------------------
    25 !
     25! Change order of dimension in surface arrays %frac, %emissivity and %albedo
     26! to allow for better vectorization in the radiation interactions.
    2627!
    2728! Former revisions:
     
    800801!--     Allocate albedo_type and albedo. Each surface element
    801802!--     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)      )
    804805        surf_usm_h%albedo_type = albedo_type
    805806        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)      )
    808809           surf_usm_v(l)%albedo_type = albedo_type
    809810        ENDDO       
     
    837838!--      Allocate arrays for relative surface fraction.
    838839!--      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) )
    840841         surf_usm_h%frac = 0.0_wp
    841842         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) )
    843844            surf_usm_v(l)%frac = 0.0_wp
    844845         ENDDO
     
    855856        ALLOCATE ( surf_usm_h%transmissivity(1:surf_usm_h%ns)     )
    856857        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)     )
    858859        ALLOCATE ( surf_usm_h%r_a(1:surf_usm_h%ns)                )
    859860        ALLOCATE ( surf_usm_h%r_a_green(1:surf_usm_h%ns)          )
     
    873874           ALLOCATE ( surf_usm_v(l)%transmissivity(1:surf_usm_v(l)%ns)     )
    874875           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)     )
    876877           ALLOCATE ( surf_usm_v(l)%r_a(1:surf_usm_v(l)%ns)                )
    877878           ALLOCATE ( surf_usm_v(l)%r_a_green(1:surf_usm_v(l)%ns)          )
     
    36163617!
    36173618!--        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) 
    36213622           surf_usm_h%lai(m)                = building_pars(ind_lai_r,building_type) 
    36223623
     
    36503651!
    36513652!--        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)
    36553656
    36563657           surf_usm_h%transmissivity(m)      = building_pars(ind_trans_r,building_type)
     
    36613662!
    36623663!--        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)   )
    36663667
    36673668           surf_usm_h%zw(nzb_wall,m)         = building_pars(ind_thick_1_wall_r,building_type)
     
    37743775!
    37753776!--           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) 
    37793780              surf_usm_v(l)%lai(m)                 = building_pars(ind_lai_w,building_type) 
    37803781
     
    38133814!
    38143815!--           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)
    38183819
    38193820              surf_usm_v(l)%transmissivity(m)      = building_pars(ind_trans,building_type)
     
    38233824              surf_usm_v(l)%z0q(m)                 = building_pars(ind_z0qh,building_type)
    38243825
    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) )
    38283829
    38293830              surf_usm_v(l)%zw(nzb_wall,m)         = building_pars(ind_thick_1,building_type)
     
    38803881!
    38813882!--              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) 
    38853886                 surf_usm_h%lai(m)                = building_pars(ind_lai_r,st) 
    38863887
     
    39163917!
    39173918!--              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)
    39213922
    39223923                 surf_usm_h%transmissivity(m)      = building_pars(ind_trans_r,st)
     
    39273928!
    39283929!--              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) )
    39323933
    39333934                 surf_usm_h%zw(nzb_wall,m)         = building_pars(ind_thick_1_wall_r,st)
     
    40474048!
    40484049!--                 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)   
    40524053                    surf_usm_v(l)%lai(m)                = building_pars(ind_lai_w,st) 
    40534054
     
    40864087!
    40874088!--                 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)
    40914092
    40924093                    surf_usm_v(l)%transmissivity(m)      = building_pars(ind_trans,st)
     
    40964097                    surf_usm_v(l)%z0q(m)                 = building_pars(ind_z0qh,st)
    40974098
    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) )
    41014102
    41024103                    surf_usm_v(l)%zw(nzb_wall,m)         = building_pars(ind_thick_1,st)
     
    41934194              IF ( building_pars_f%pars_xy(ind_wall_frac,j,i) /=               &
    41944195                   building_pars_f%fill )                                      &
    4195                  surf_usm_h%frac(ind_veg_wall,m)  =                            &
     4196                 surf_usm_h%frac(m,ind_veg_wall)  =                            &
    41964197                                    building_pars_f%pars_xy(ind_wall_frac,j,i)   
    41974198                 
    41984199              IF ( building_pars_f%pars_xy(ind_green_frac_r,j,i) /=            &         
    41994200                   building_pars_f%fill )                                      &
    4200                  surf_usm_h%frac(ind_pav_green,m) =                            &
     4201                 surf_usm_h%frac(m,ind_pav_green) =                            &
    42014202                                    building_pars_f%pars_xy(ind_green_frac_r,j,i)
    42024203                 
    42034204              IF ( building_pars_f%pars_xy(ind_win_frac,j,i) /=                &
    42044205                   building_pars_f%fill )                                      &
    4205                  surf_usm_h%frac(ind_wat_win,m)   =                            &
     4206                 surf_usm_h%frac(m,ind_wat_win)   =                            &
    42064207                                    building_pars_f%pars_xy(ind_win_frac,j,i)
    42074208 
     
    43254326              IF ( building_pars_f%pars_xy(ind_emis_wall,j,i) /=               &   
    43264327                   building_pars_f%fill )                                      &
    4327                  surf_usm_h%emissivity(ind_veg_wall,m)  =                      &
     4328                 surf_usm_h%emissivity(m,ind_veg_wall)  =                      &
    43284329                                    building_pars_f%pars_xy(ind_emis_wall,j,i)
    43294330                 
    43304331              IF ( building_pars_f%pars_xy(ind_emis_green,j,i) /=              &           
    43314332                   building_pars_f%fill )                                      &
    4332                  surf_usm_h%emissivity(ind_pav_green,m) =                      &
     4333                 surf_usm_h%emissivity(m,ind_pav_green) =                      &
    43334334                                     building_pars_f%pars_xy(ind_emis_green,j,i)
    43344335                 
    43354336              IF ( building_pars_f%pars_xy(ind_emis_win,j,i) /=                &
    43364337                   building_pars_f%fill )                                      &
    4337                  surf_usm_h%emissivity(ind_wat_win,m)   =                      &
     4338                 surf_usm_h%emissivity(m,ind_wat_win)   =                      &
    43384339                                     building_pars_f%pars_xy(ind_emis_win,j,i)
    43394340                 
     
    43564357              IF ( building_pars_f%pars_xy(ind_alb_wall_agfl,j,i) /=           &         
    43574358                   building_pars_f%fill )                                      &
    4358                  surf_usm_h%albedo_type(ind_veg_wall,m)  =                     &
     4359                 surf_usm_h%albedo_type(m,ind_veg_wall)  =                     &
    43594360                                 building_pars_f%pars_xy(ind_alb_wall_agfl,j,i)
    43604361                 
    43614362              IF ( building_pars_f%pars_xy(ind_alb_green_agfl,j,i) /=          &           
    43624363                   building_pars_f%fill )                                      &
    4363                  surf_usm_h%albedo_type(ind_pav_green,m) =                     &
     4364                 surf_usm_h%albedo_type(m,ind_pav_green) =                     &
    43644365                                building_pars_f%pars_xy(ind_alb_green_agfl,j,i)
    43654366              IF ( building_pars_f%pars_xy(ind_alb_win_agfl,j,i) /=            &         
    43664367                   building_pars_f%fill )                                      &
    4367                  surf_usm_h%albedo_type(ind_wat_win,m)   =                     &
     4368                 surf_usm_h%albedo_type(m,ind_wat_win)   =                     &
    43684369                                   building_pars_f%pars_xy(ind_alb_win_agfl,j,i)
    43694370
     
    44814482                    IF ( building_pars_f%pars_xy(ind_wall_frac,j,i) /=         &
    44824483                         building_pars_f%fill )                                &
    4483                        surf_usm_v(l)%frac(ind_veg_wall,m)  =                   &
     4484                       surf_usm_v(l)%frac(m,ind_veg_wall)  =                   &
    44844485                                          building_pars_f%pars_xy(ind_wall_frac,j,i)   
    44854486                       
    44864487                    IF ( building_pars_f%pars_xy(ind_green_frac_w,j,i) /=      &         
    44874488                         building_pars_f%fill )                                &
    4488                        surf_usm_v(l)%frac(ind_pav_green,m) =                   &
     4489                       surf_usm_v(l)%frac(m,ind_pav_green) =                   &
    44894490                                  building_pars_f%pars_xy(ind_green_frac_w,j,i)
    44904491                       
    44914492                    IF ( building_pars_f%pars_xy(ind_win_frac,j,i) /=          &
    44924493                         building_pars_f%fill )                                &
    4493                        surf_usm_v(l)%frac(ind_wat_win,m)   =                   &
     4494                       surf_usm_v(l)%frac(m,ind_wat_win)   =                   &
    44944495                                       building_pars_f%pars_xy(ind_win_frac,j,i)
    44954496                   
     
    46144615                    IF ( building_pars_f%pars_xy(ind_emis_wall,j,i) /=         &   
    46154616                         building_pars_f%fill )                                &
    4616                        surf_usm_v(l)%emissivity(ind_veg_wall,m)  =             &
     4617                       surf_usm_v(l)%emissivity(m,ind_veg_wall)  =             &
    46174618                                      building_pars_f%pars_xy(ind_emis_wall,j,i)
    46184619                       
    46194620                    IF ( building_pars_f%pars_xy(ind_emis_green,j,i) /=        &           
    46204621                         building_pars_f%fill )                                &
    4621                        surf_usm_v(l)%emissivity(ind_pav_green,m) =             &
     4622                       surf_usm_v(l)%emissivity(m,ind_pav_green) =             &
    46224623                                      building_pars_f%pars_xy(ind_emis_green,j,i)
    46234624                       
    46244625                    IF ( building_pars_f%pars_xy(ind_emis_win,j,i) /=          &
    46254626                         building_pars_f%fill )                                &
    4626                        surf_usm_v(l)%emissivity(ind_wat_win,m)   =             &
     4627                       surf_usm_v(l)%emissivity(m,ind_wat_win)   =             &
    46274628                                      building_pars_f%pars_xy(ind_emis_win,j,i)
    46284629                       
     
    46474648                    IF ( building_pars_f%pars_xy(ind_alb_wall_agfl,j,i) /=     &         
    46484649                         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)  =            &
    46504651                                 building_pars_f%pars_xy(ind_alb_wall_agfl,j,i)
    46514652                       
    46524653                    IF ( building_pars_f%pars_xy(ind_alb_green_agfl,j,i) /=    &           
    46534654                         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) =            &
    46554656                                 building_pars_f%pars_xy(ind_alb_green_agfl,j,i)
    46564657                    IF ( building_pars_f%pars_xy(ind_alb_win_agfl,j,i) /=      &         
    46574658                         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)   =            &
    46594660                                   building_pars_f%pars_xy(ind_alb_win_agfl,j,i)
    46604661                   
     
    47304731                    IF ( building_surface_pars_f%pars(ind_s_wall_frac,is) /=                     &
    47314732                         building_surface_pars_f%fill )                                          &
    4732                        surf_usm_h%frac(ind_veg_wall,m) =                                         &
     4733                       surf_usm_h%frac(m,ind_veg_wall) =                                         &
    47334734                                building_surface_pars_f%pars(ind_s_wall_frac,is)
    47344735
    47354736                    IF ( building_surface_pars_f%pars(ind_s_green_frac_w,is) /=                  &
    47364737                         building_surface_pars_f%fill )                                          &
    4737                        surf_usm_h%frac(ind_pav_green,m) =                                        &
     4738                       surf_usm_h%frac(m,ind_pav_green) =                                        &
    47384739                                building_surface_pars_f%pars(ind_s_green_frac_w,is)
    47394740
    47404741                    IF ( building_surface_pars_f%pars(ind_s_green_frac_r,is) /=                  &
    47414742                         building_surface_pars_f%fill )                                          &
    4742                        surf_usm_h%frac(ind_pav_green,m) =                                        &
     4743                       surf_usm_h%frac(m,ind_pav_green) =                                        &
    47434744                                building_surface_pars_f%pars(ind_s_green_frac_r,is)
    47444745                                !TODO clarify: why should _w and _r be on the same surface?
     
    47464747                    IF ( building_surface_pars_f%pars(ind_s_win_frac,is) /=                      &
    47474748                         building_surface_pars_f%fill )                                          &
    4748                        surf_usm_h%frac(ind_wat_win,m) =                                          &
     4749                       surf_usm_h%frac(m,ind_wat_win) =                                          &
    47494750                                building_surface_pars_f%pars(ind_s_win_frac,is)
    47504751
     
    48264827                    IF ( building_surface_pars_f%pars(ind_s_emis_wall,is) /=                     &
    48274828                         building_surface_pars_f%fill )                                          &
    4828                        surf_usm_h%emissivity(ind_veg_wall,m) =                                   &
     4829                       surf_usm_h%emissivity(m,ind_veg_wall) =                                   &
    48294830                                building_surface_pars_f%pars(ind_s_emis_wall,is)
    48304831
    48314832                    IF ( building_surface_pars_f%pars(ind_s_emis_green,is) /=                    &
    48324833                         building_surface_pars_f%fill )                                          &
    4833                        surf_usm_h%emissivity(ind_pav_green,m) =                                  &
     4834                       surf_usm_h%emissivity(m,ind_pav_green) =                                  &
    48344835                                building_surface_pars_f%pars(ind_s_emis_green,is)
    48354836
    48364837                    IF ( building_surface_pars_f%pars(ind_s_emis_win,is) /=                      &
    48374838                         building_surface_pars_f%fill )                                          &
    4838                        surf_usm_h%emissivity(ind_wat_win,m) =                                    &
     4839                       surf_usm_h%emissivity(m,ind_wat_win) =                                    &
    48394840                                building_surface_pars_f%pars(ind_s_emis_win,is)
    48404841
     
    48774878                       IF ( building_surface_pars_f%pars(ind_s_wall_frac,is) /=                &
    48784879                            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) =                                 &
    48804881                                   building_surface_pars_f%pars(ind_s_wall_frac,is)
    48814882
    48824883                       IF ( building_surface_pars_f%pars(ind_s_green_frac_w,is) /=             &
    48834884                            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) =                                &
    48854886                                   building_surface_pars_f%pars(ind_s_green_frac_w,is)
    48864887
    48874888                       IF ( building_surface_pars_f%pars(ind_s_green_frac_r,is) /=             &
    48884889                            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) =                                &
    48904891                                   building_surface_pars_f%pars(ind_s_green_frac_r,is)
    48914892                                   !TODO clarify: why should _w and _r be on the same surface?
     
    48934894                       IF ( building_surface_pars_f%pars(ind_s_win_frac,is) /=                 &
    48944895                            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) =                                  &
    48964897                                   building_surface_pars_f%pars(ind_s_win_frac,is)
    48974898
     
    49734974                       IF ( building_surface_pars_f%pars(ind_s_emis_wall,is) /=      &
    49744975                            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) =                 &
    49764977                                   building_surface_pars_f%pars(ind_s_emis_wall,is)
    49774978
    49784979                       IF ( building_surface_pars_f%pars(ind_s_emis_green,is) /=     &
    49794980                            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) =                &
    49814982                                   building_surface_pars_f%pars(ind_s_emis_green,is)
    49824983
    49834984                       IF ( building_surface_pars_f%pars(ind_s_emis_win,is) /=       &
    49844985                            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) =                  &
    49864987                                   building_surface_pars_f%pars(ind_s_emis_win,is)
    49874988
     
    50155016        relative_fractions_corrected = .FALSE.
    50165017        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,:) )
    50185019           IF ( sum_frac /= 1.0_wp )  THEN
    50195020              relative_fractions_corrected = .TRUE.
     
    50235024!--           driver creation.
    50245025              IF ( sum_frac /= 0.0_wp )  THEN
    5025                  surf_usm_h%frac(:,m) = surf_usm_h%frac(:,m) / sum_frac
     5026                 surf_usm_h%frac(m,:) = surf_usm_h%frac(m,:) / sum_frac
    50265027!
    50275028!--           In case all relative fractions are erroneously set to zero,
    50285029!--           set wall fraction to 1.
    50295030              ELSE
    5030                  surf_usm_h%frac(ind_veg_wall,m)  = 1.0_wp
    5031                  surf_usm_h%frac(ind_wat_win,m)   = 0.0_wp
    5032                  surf_usm_h%frac(ind_pav_green,m) = 0.0_wp
     5031                 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
    50335034              ENDIF
    50345035           ENDIF
     
    50515052        DO  l = 0, 3
    50525053           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,:) )
    50545055              IF ( sum_frac /= 1.0_wp )  THEN
    50555056                 relative_fractions_corrected = .TRUE.
     
    50575058!--              Normalize relative fractions to 1.
    50585059                 IF ( sum_frac /= 0.0_wp )  THEN
    5059                     surf_usm_v(l)%frac(:,m) = surf_usm_v(l)%frac(:,m) / sum_frac
     5060                    surf_usm_v(l)%frac(m,:) = surf_usm_v(l)%frac(m,:) / sum_frac
    50605061!
    50615062!--              In case all relative fractions are erroneously set to zero,
    50625063!--              set wall fraction to 1.
    50635064                 ELSE
    5064                     surf_usm_v(l)%frac(ind_veg_wall,m)  = 1.0_wp
    5065                     surf_usm_v(l)%frac(ind_wat_win,m)   = 0.0_wp
    5066                     surf_usm_v(l)%frac(ind_pav_green,m) = 0.0_wp
     5065                    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
    50675068                 ENDIF
    50685069              ENDIF
     
    53675368                                         - t_wall_h(nzb_wall,m) ) *                &
    53685369                                         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) )    &
    53725373                                         * 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) )   &
    53765377                                         * ( surf_usm_h%lambda_h_green(nzt_wall,m)* wall_mod(nzt_wall) &
    53775378                                           * surf_usm_h%ddz_green(nzt_wall,m)      &
     
    55505551                                        - t_wall_v(l)%t(nzb_wall,m) ) *              &
    55515552                                        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) )    &
    55555556                                        * 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) )    &
    55595560                                        * ( surf_usm_v(l)%lambda_h_green(nzt_wall,m)* wall_mod(nzt_wall) &
    55605561                                          * surf_usm_v(l)%ddz_green(nzt_wall,m)      &
     
    57685769        !$OMP DO SCHEDULE (STATIC)
    57695770        DO  m = 1, surf_usm_h%ns
    5770            IF (surf_usm_h%frac(ind_pav_green,m) > 0.0_wp) THEN
     5771           IF (surf_usm_h%frac(m,ind_pav_green) > 0.0_wp) THEN
    57715772!
    57725773!--           Obtain indices
     
    60206021           DO  m = 1, surf_usm_v(l)%ns
    60216022
    6022               IF (surf_usm_v(l)%frac(ind_pav_green,m) > 0.0_wp) THEN
     6023              IF (surf_usm_v(l)%frac(m,ind_pav_green) > 0.0_wp) THEN
    60236024!
    60246025!-- no substrate layer for green walls / only groundbase green walls (ivy i.e.) -> green layers get same
     
    72717272              ENDIF
    72727273
    7273               surf_usm_h%albedo(:,m)    = -1.0_wp
     7274              surf_usm_h%albedo(m,:)    = -1.0_wp
    72747275              surf_usm_h%thickness_wall(m) = -1.0_wp
    72757276              surf_usm_h%thickness_green(m) = -1.0_wp
     
    72887289              ENDIF
    72897290              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)
    72917292              surf_usm_h%transmissivity(m)    = 0.0_wp
    72927293           ENDIF
     
    73287329!
    73297330!--        Albedo
    7330            IF ( surf_usm_h%albedo(ind_veg_wall,m) < 0.0_wp )  THEN
    7331               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)
    73327333           ENDIF
    73337334!
    73347335!--        Albedo type is 0 (custom), others are replaced later
    7335            surf_usm_h%albedo_type(:,m) = 0
     7336           surf_usm_h%albedo_type(m,:) = 0
    73367337!
    73377338!--        Transmissivity
     
    73417342!
    73427343!--        emissivity of the wall
    7343            surf_usm_h%emissivity(:,m) = surface_params(iemiss,ip)
     7344           surf_usm_h%emissivity(m,:) = surface_params(iemiss,ip)
    73447345!           
    73457346!--        heat conductivity λS between air and wall ( W m−2 K−1 )
     
    74257426                     surf_usm_v(l)%surface_types(m) = roof_category   !< default category for wall surface in roof zone
    74267427                 END IF
    7427                  surf_usm_v(l)%albedo(:,m)         = -1.0_wp
     7428                 surf_usm_v(l)%albedo(m,:)         = -1.0_wp
    74287429                 surf_usm_v(l)%thickness_wall(m)   = -1.0_wp
    74297430                 surf_usm_v(l)%thickness_window(m) = -1.0_wp
     
    74367437                     surf_usm_v(l)%surface_types(m)  = pedestrian_category   !< default category for wall surface in
    74377438                                                                             !<pedestrian zone
    7438                      surf_usm_v(l)%albedo(:,m)         = -1.0_wp
     7439                     surf_usm_v(l)%albedo(m,:)         = -1.0_wp
    74397440                     surf_usm_v(l)%thickness_wall(m)   = -1.0_wp
    74407441                     surf_usm_v(l)%thickness_window(m) = -1.0_wp
     
    74437444                 ELSE
    74447445                     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)
    74467447                     surf_usm_v(l)%thickness_wall(m)   = usm_val(ij+1,jw,iw)
    74477448                     surf_usm_v(l)%thickness_window(m) = usm_val(ij+1,jw,iw)
     
    74547455                 IF ( usm_par(ii+3,jw,iw) == 0 )  THEN
    74557456                     surf_usm_v(l)%surface_types(m)    = wall_category         !< default category for wall surface
    7456                      surf_usm_v(l)%albedo(:,m)         = -1.0_wp
     7457                     surf_usm_v(l)%albedo(m,:)         = -1.0_wp
    74577458                     surf_usm_v(l)%thickness_wall(m)   = -1.0_wp
    74587459                     surf_usm_v(l)%thickness_window(m) = -1.0_wp
     
    74617462                 ELSE
    74627463                     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)
    74647465                     surf_usm_v(l)%thickness_wall(m)   = usm_val(ij+3,jw,iw)
    74657466                     surf_usm_v(l)%thickness_window(m) = usm_val(ij+3,jw,iw)
     
    74727473                 IF ( usm_par(ii+5,jw,iw) == 0 )  THEN
    74737474                     surf_usm_v(l)%surface_types(m)    = roof_category         !< default category for roof surface
    7474                      surf_usm_v(l)%albedo(:,m)         = -1.0_wp
     7475                     surf_usm_v(l)%albedo(m,:)         = -1.0_wp
    74757476                     surf_usm_v(l)%thickness_wall(m)   = -1.0_wp
    74767477                     surf_usm_v(l)%thickness_window(m) = -1.0_wp
     
    74797480                 ELSE
    74807481                     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)
    74827483                     surf_usm_v(l)%thickness_wall(m)   = usm_val(ij+5,jw,iw)
    74837484                     surf_usm_v(l)%thickness_window(m) = usm_val(ij+5,jw,iw)
     
    75017502                     surf_usm_v(l)%surface_types(m) = roof_category   !< default category for wall surface in roof zone
    75027503                 END IF
    7503                  surf_usm_v(l)%albedo(:,m)         = -1.0_wp
     7504                 surf_usm_v(l)%albedo(m,:)         = -1.0_wp
    75047505                 surf_usm_v(l)%thickness_wall(m)   = -1.0_wp
    75057506                 surf_usm_v(l)%thickness_window(m) = -1.0_wp
     
    75417542!
    75427543!--           Albedo
    7543               IF ( surf_usm_v(l)%albedo(ind_veg_wall,m) < 0.0_wp )  THEN
    7544                  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)
    75457546              ENDIF
    75467547!--           Albedo type is 0 (custom), others are replaced later
    7547               surf_usm_v(l)%albedo_type(:,m) = 0
     7548              surf_usm_v(l)%albedo_type(m,:) = 0
    75487549!--           Transmissivity of the windows
    75497550              IF ( surf_usm_v(l)%transmissivity(m) < 0.0_wp )  THEN
     
    78337834!--       Note, this is a temporary fix and need to be removed later. 
    78347835           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_wp
    7839               surf_usm_h%frac(ind_veg_wall,m)  = 1.0_wp
    7840               surf_usm_h%frac(ind_pav_green,m) = 0.0_wp
     7836              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
    78417842           ENDIF
    78427843!
     
    78697870           rho_cp  = c_p * hyp(k) / ( r_d * surf_usm_h%pt1(m) * exner(k) )
    78707871
    7871            IF ( surf_usm_h%frac(ind_pav_green,m) > 0.0_wp )  THEN
     7872           IF ( surf_usm_h%frac(m,ind_pav_green) > 0.0_wp )  THEN
    78727873!
    78737874!--           Calculate frequently used parameters
     
    79217922       
    79227923
    7923            IF ( surf_usm_h%frac(ind_pav_green,m) > 0.0_wp ) THEN
     7924           IF ( surf_usm_h%frac(m,ind_pav_green) > 0.0_wp ) THEN
    79247925!--           Adapted from LSM:
    79257926!--           Second step: calculate canopy resistance r_canopy
     
    80218022!--     is used
    80228023           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) * &
    80248025                                       sigma_sb * t_surf_wall_h(m) ** 4 +      & 
    80258026                                       f_shf * surf_usm_h%pt1(m) +             &
    80268027                                       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 ) ) THEN
     8028           IF ( ( .NOT. during_spinup ) .AND. (surf_usm_h%frac(m,ind_wat_win) > 0.0_wp ) ) THEN
    80288029              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)  &
    80308031                                          * sigma_sb * t_surf_window_h(m) ** 4 +  & 
    80318032                                          f_shf_window * surf_usm_h%pt1(m) +      &
    80328033                                          lambda_surface_window * t_window_h(nzb_wall,m)
    80338034           ENDIF                 
    8034            IF ( ( humidity ) .AND. ( surf_usm_h%frac(ind_pav_green,m) > 0.0_wp ) )  THEN
     8035           IF ( ( humidity ) .AND. ( surf_usm_h%frac(m,ind_pav_green) > 0.0_wp ) )  THEN
    80358036                    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 * &
    80378038                                       t_surf_green_h(m) ** 4 +                  & 
    80388039                                          f_shf_green * surf_usm_h%pt1(m) + f_qsws * ( qv1 - q_s    &
     
    80418042           ELSE
    80428043           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) *&
    80448045                                       sigma_sb * t_surf_green_h(m) ** 4 +     & 
    80458046                                       f_shf_green * surf_usm_h%pt1(m) +       &
     
    80488049!
    80498050!--        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) *           &
    80518052                             sigma_sb * t_surf_wall_h(m) ** 3                  &
    80528053                           + lambda_surface + f_shf / exner(k)
    8053            IF ( ( .NOT. during_spinup ) .AND. ( surf_usm_h%frac(ind_wat_win,m) > 0.0_wp ) ) THEN
    8054               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) *     &
    80558056                                sigma_sb * t_surf_window_h(m) ** 3                &
    80568057                              + lambda_surface_window + f_shf_window / exner(k)
    80578058           ENDIF
    8058            IF ( ( humidity ) .AND. ( surf_usm_h%frac(ind_pav_green,m) > 0.0_wp ) )  THEN
    8059               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 *    &
    80608061                                t_surf_green_h(m) ** 3 + f_qsws * dq_s_dt                    &
    80618062                              + lambda_surface_green + f_shf_green / exner(k)
    80628063           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 *    &
    80648065                             t_surf_green_h(m) ** 3                                       &
    80658066                           + lambda_surface_green + f_shf_green / exner(k)
     
    80718072                             surf_usm_h%c_surface(m) * t_surf_wall_h(m) ) /        &
    80728073                           ( 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)) THEN
     8074           IF (( .NOT. during_spinup ) .AND. (surf_usm_h%frac(m,ind_wat_win) > 0.0_wp)) THEN
    80748075              t_surf_window_h_p(m) = ( coef_window_1 * dt_3d * tsc(2) +                        &
    80758076                                surf_usm_h%c_surface_window(m) * t_surf_window_h(m) ) /        &
     
    80938094!--        store also vpt_surface, which is, due to the lack of moisture on roofs simply
    80948095!--        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) )      &
    80988099                               / exner(k)
    80998100                               
     
    81388139!--        rad_net_l is never used!
    81398140           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) *  &
    81428143                                     ( 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) *   &
    81458146                                     ( 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) * &
    81488149                                     ( t_surf_green_h_p(m)**4 - t_surf_green_h(m)**4 )
    81498150
     
    81588159!--        ground/wall/roof surface heat flux
    81598160           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)         &
    81618162                                     - 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)          &
    81638164                                     - 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)
    81658166!           
    81668167!--        store kinematic surface heat fluxes for utilization in other processes
     
    81758176     
    81768177
    8177            IF (surf_usm_h%frac(ind_pav_green,m) > 0.0_wp) THEN
     8178           IF (surf_usm_h%frac(m,ind_pav_green) > 0.0_wp) THEN
    81788179             
    81798180           
     
    82218222                    IF ( m_liq_usm_h%var_usm_1d(m) /= m_liq_max )  THEN
    82228223                       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)&
    82248225                                        * hyrho(k+k_off)                              &
    82258226                                        * 0.001_wp * rho_l * l_v
     
    82868287!--        values are restored.
    82878288           IF ( during_spinup )  THEN
    8288               surf_usm_h%frac(ind_wat_win,m)   = frac_win
    8289               surf_usm_h%frac(ind_veg_wall,m)  = frac_wall
    8290               surf_usm_h%frac(ind_pav_green,m) = frac_green
     8289              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
    82918292           ENDIF
    82928293 
     
    83028303!--           Note, this is a temporary fix and need to be removed later.
    83038304              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_wp
    8308                  surf_usm_v(l)%frac(ind_veg_wall,m)  = 1.0_wp
    8309                  surf_usm_v(l)%frac(ind_pav_green,m) = 0.0_wp
     8305                 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
    83108311              ENDIF
    83118312!
     
    83318332              ENDIF
    83328333!
    8333 !--          calculate rho * c_p coefficient at wall layer
     8334!--           calculate rho * c_p coefficient at wall layer
    83348335              rho_cp  = c_p * hyp(k) / ( r_d * surf_usm_v(l)%pt1(m) * exner(k) )
    83358336             
    8336               IF (surf_usm_v(l)%frac(1,m) > 0.0_wp )  THEN
    8337 !
    8338 !--            Calculate frequently used parameters
     8337              IF (surf_usm_v(l)%frac(m,ind_pav_green) > 0.0_wp )  THEN
     8338!
     8339!--              Calculate frequently used parameters
    83398340                 rho_lv    = rho_cp / c_p * l_v
    83408341                 drho_l_lv = 1.0_wp / (rho_l * l_v)
     
    83828383 
    83838384
    8384               IF ( surf_usm_v(l)%frac(ind_pav_green,m) > 0.0_wp ) THEN
     8385              IF ( surf_usm_v(l)%frac(m,ind_pav_green) > 0.0_wp ) THEN
    83858386!
    83868387!--             Adapted from LSM:
     
    84608461              coef_1 = surf_usm_v(l)%rad_net_l(m) +                             & ! coef +1 corresponds to -lwout
    84618462                                                                                  ! 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) *  &
    84638464                                      sigma_sb *  t_surf_wall_v(l)%t(m) ** 4 +  & 
    84648465                                      f_shf * surf_usm_v(l)%pt1(m) +            &
    84658466                                      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 ) ) THEN
     8467              IF ( ( .NOT. during_spinup ) .AND. ( surf_usm_v(l)%frac(m,ind_wat_win) > 0.0_wp ) ) THEN
    84678468                 coef_window_1 = surf_usm_v(l)%rad_net_l(m) +                   & ! coef +1 corresponds to -lwout
    84688469                                                                                  ! 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) * &
    84708471                                      sigma_sb * t_surf_window_v(l)%t(m) ** 4 + & 
    84718472                                      f_shf * surf_usm_v(l)%pt1(m) +            &
    84728473                                      lambda_surface_window * t_window_v(l)%t(nzb_wall,m)
    84738474              ENDIF
    8474               IF ( ( humidity ) .AND. ( surf_usm_v(l)%frac(ind_pav_green,m) > 0.0_wp ) )  THEN
     8475              IF ( ( humidity ) .AND. ( surf_usm_v(l)%frac(m,ind_pav_green) > 0.0_wp ) )  THEN
    84758476                 coef_green_1 = surf_usm_v(l)%rad_net_l(m) +                      & ! coef +1 corresponds to -lwout
    84768477                                                                                    ! 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 *  &
    84788479                                      t_surf_green_v(l)%t(m) ** 4 +               & 
    84798480                                      f_shf * surf_usm_v(l)%pt1(m) +     f_qsws * ( qv1 - q_s  &
     
    84838484                coef_green_1 = surf_usm_v(l)%rad_net_l(m) +                       & ! coef +1 corresponds to -lwout included
    84848485                                                                                    ! 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 *  &
    84868487                                      t_surf_green_v(l)%t(m) ** 4 +               & 
    84878488                                      f_shf * surf_usm_v(l)%pt1(m) +              &
     
    84918492!
    84928493!--           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 *   &
    84948495                                 t_surf_wall_v(l)%t(m) ** 3                             &
    84958496                               + lambda_surface + f_shf / exner(k) 
    8496               IF ( ( .NOT. during_spinup ) .AND. ( surf_usm_v(l)%frac(ind_wat_win,m) > 0.0_wp ) ) THEN             
    8497                  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 *       &
    84988499                                   t_surf_window_v(l)%t(m) ** 3                         &
    84998500                                 + lambda_surface_window + f_shf / exner(k)
    85008501              ENDIF
    8501               IF ( ( humidity ) .AND. ( surf_usm_v(l)%frac(ind_pav_green,m) > 0.0_wp ) )  THEN
    8502                   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 *     &
    85038504                                   t_surf_green_v(l)%t(m) ** 3  + f_qsws * dq_s_dt      &
    85048505                                 + lambda_surface_green + f_shf / exner(k)
    85058506              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 *      &
    85078508                                   t_surf_green_v(l)%t(m) ** 3                          &
    85088509                                 + lambda_surface_green + f_shf / exner(k)
     
    85148515                             surf_usm_v(l)%c_surface(m) * t_surf_wall_v(l)%t(m) ) / &
    85158516                             ( 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 ) ) THEN
     8517              IF ( ( .NOT. during_spinup ) .AND. ( surf_usm_v(l)%frac(m,ind_wat_win) > 0.0_wp ) ) THEN
    85178518                 t_surf_window_v_p(l)%t(m) = ( coef_window_1 * dt_3d * tsc(2) +                 &
    85188519                                surf_usm_v(l)%c_surface_window(m) * t_surf_window_v(l)%t(m) ) / &
     
    85348535!--           store also vpt_surface, which is, due to the lack of moisture on roofs simply
    85358536!--           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) )     &
    85398540                                      / exner(k)
    85408541                                       
     
    85828583!--           calculate fluxes
    85838584!--           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) *                      &
    85858586                                           ( surf_usm_v(l)%rad_net_l(m) +                            &
    85868587                                           3.0_wp * sigma_sb *                                       &
    85878588                                           t_surf_wall_v(l)%t(m)**4 - 4.0_wp * sigma_sb *            &
    85888589                                           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) *                       &
    85908591                                           ( surf_usm_v(l)%rad_net_l(m) +                            &
    85918592                                           3.0_wp * sigma_sb *                                       &
    85928593                                           t_surf_window_v(l)%t(m)**4 - 4.0_wp * sigma_sb *          &
    85938594                                           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) *                     &
    85958596                                           ( surf_usm_v(l)%rad_net_l(m) +                            &
    85968597                                           3.0_wp * sigma_sb *                                       &
     
    86098610              surf_usm_v(l)%wshf_eb(m)   =                                     &
    86108611                 - 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)       &
    86128613                 - 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)&
    86148615                 - 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)
    86168617
    86178618!           
     
    86278628              ENDIF             
    86288629
    8629               IF ( surf_usm_v(l)%frac(ind_pav_green,m) > 0.0_wp ) THEN
     8630              IF ( surf_usm_v(l)%frac(m,ind_pav_green) > 0.0_wp ) THEN
    86308631 
    86318632
     
    86838684!--           values are restored.
    86848685              IF ( during_spinup )  THEN
    8685                  surf_usm_v(l)%frac(ind_wat_win,m)   = frac_win
    8686                  surf_usm_v(l)%frac(ind_veg_wall,m)  = frac_wall
    8687                  surf_usm_v(l)%frac(ind_pav_green,m) = frac_green
     8686                 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
    86888689              ENDIF
    86898690
Note: See TracChangeset for help on using the changeset viewer.