Changeset 4441 for palm/trunk/SOURCE


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)

Location:
palm/trunk/SOURCE
Files:
10 edited

Legend:

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

    r4403 r4441  
    2222! Current revisions:
    2323! -----------------
    24 !
     24! Change order of dimension in surface array %frac to allow for better
     25! vectorization.
    2526!
    2627! Former revisions:
     
    35333534!
    35343535!--    Get land use for i,j and assign to DEPAC lu
    3535        IF ( surf_lsm_h%frac(ind_veg_wall,m) > 0 )  THEN
     3536       IF ( surf_lsm_h%frac(m,ind_veg_wall) > 0 )  THEN
    35363537          luv_palm = surf_lsm_h%vegetation_type(m)
    35373538          IF ( luv_palm == ind_luv_user )  THEN
     
    35773578       ENDIF
    35783579
    3579        IF ( surf_lsm_h%frac(ind_pav_green,m) > 0 )  THEN
     3580       IF ( surf_lsm_h%frac(m,ind_pav_green) > 0 )  THEN
    35803581          lup_palm = surf_lsm_h%pavement_type(m)
    35813582          IF ( lup_palm == ind_lup_user )  THEN
     
    36153616       ENDIF
    36163617
    3617        IF ( surf_lsm_h%frac(ind_wat_win,m) > 0 )  THEN
     3618       IF ( surf_lsm_h%frac(m,ind_wat_win) > 0 )  THEN
    36183619          luw_palm = surf_lsm_h%water_type(m)     
    36193620          IF ( luw_palm == ind_luw_user )  THEN
     
    36753676!
    36763677!--    Vegetation
    3677        IF ( surf_lsm_h%frac(ind_veg_wall,m) > 0 )  THEN
     3678       IF ( surf_lsm_h%frac(m,ind_veg_wall) > 0 )  THEN
    36783679
    36793680!
     
    38123813!
    38133814!--    Pavement
    3814        IF ( surf_lsm_h%frac(ind_pav_green,m) > 0 )  THEN
     3815       IF ( surf_lsm_h%frac(m,ind_pav_green) > 0 )  THEN
    38153816!
    38163817!--       No vegetation on pavements:
     
    39393940!
    39403941!--    Water
    3941        IF ( surf_lsm_h%frac(ind_wat_win,m) > 0 )  THEN
     3942       IF ( surf_lsm_h%frac(m,ind_wat_win) > 0 )  THEN
    39423943!
    39433944!--       No vegetation on water:
     
    40734074       DO  lsp = 1, nspec
    40744075
    4075           bud(lsp) = surf_lsm_h%frac(ind_veg_wall,m) * bud_luv(lsp) + &
    4076                surf_lsm_h%frac(ind_pav_green,m) * bud_lup(lsp) + &
    4077                surf_lsm_h%frac(ind_wat_win,m) * bud_luw(lsp)
     4076          bud(lsp) = surf_lsm_h%frac(m,ind_veg_wall) * bud_luv(lsp) + &
     4077               surf_lsm_h%frac(m,ind_pav_green) * bud_lup(lsp) + &
     4078               surf_lsm_h%frac(m,ind_wat_win) * bud_luw(lsp)
    40784079!
    40794080!--       Compute new concentration:
     
    41214122!
    41224123!--    Get land use for i,j and assign to DEPAC lu
    4123        IF ( surf_usm_h%frac(ind_pav_green,m) > 0 )  THEN
     4124       IF ( surf_usm_h%frac(m,ind_pav_green) > 0 )  THEN
    41244125!
    41254126!--       For green urban surfaces (e.g. green roofs
     
    41684169       ENDIF
    41694170
    4170        IF ( surf_usm_h%frac(ind_veg_wall,m) > 0 )  THEN
     4171       IF ( surf_usm_h%frac(m,ind_veg_wall) > 0 )  THEN
    41714172!
    41724173!--       For walls in USM assume concrete walls/roofs,
     
    42104211       ENDIF
    42114212
    4212        IF ( surf_usm_h%frac(ind_wat_win,m) > 0 )  THEN
     4213       IF ( surf_usm_h%frac(m,ind_wat_win) > 0 )  THEN
    42134214!
    42144215!--       For windows in USM assume metal as this is
     
    42954296!
    42964297!--    Walls/roofs
    4297        IF ( surf_usm_h%frac(ind_veg_wall,m) > 0 )  THEN
     4298       IF ( surf_usm_h%frac(m,ind_veg_wall) > 0 )  THEN
    42984299!
    42994300!--       No vegetation on non-green walls:
     
    44264427!
    44274428!--    Green usm surfaces
    4428        IF ( surf_usm_h%frac(ind_pav_green,m) > 0 )  THEN
     4429       IF ( surf_usm_h%frac(m,ind_pav_green) > 0 )  THEN
    44294430
    44304431!
     
    45644565!
    45654566!--    Windows
    4566        IF ( surf_usm_h%frac(ind_wat_win,m) > 0 )  THEN
     4567       IF ( surf_usm_h%frac(m,ind_wat_win) > 0 )  THEN
    45674568!
    45684569!--       No vegetation on windows:
     
    46964697
    46974698
    4698           bud(lsp) = surf_usm_h%frac(ind_veg_wall,m) * bud_luu(lsp) + &
    4699                surf_usm_h%frac(ind_pav_green,m) * bud_lug(lsp) + &
    4700                surf_usm_h%frac(ind_wat_win,m) * bud_lud(lsp)
     4699          bud(lsp) = surf_usm_h%frac(m,ind_veg_wall) * bud_luu(lsp) + &
     4700               surf_usm_h%frac(m,ind_pav_green) * bud_lug(lsp) + &
     4701               surf_usm_h%frac(m,ind_wat_win) * bud_lud(lsp)
    47014702!
    47024703!--       Compute new concentration
  • palm/trunk/SOURCE/data_output_2d.f90

    r4360 r4441  
    2020! Current revisions:
    2121! ------------------
    22 !
     22! Change order of dimension in surface array %frac to allow for better
     23! vectorization.
    2324!
    2425! Former revisions:
     
    426427                      i                   = surf_usm_h%i(m)           
    427428                      j                   = surf_usm_h%j(m)
    428                       local_pf(i,j,nzb+1) = surf_usm_h%frac(ind_veg_wall,m)  *  &
     429                      local_pf(i,j,nzb+1) = surf_usm_h%frac(m,ind_veg_wall)  *  &
    429430                                            surf_usm_h%wghf_eb(m)        +      &
    430                                             surf_usm_h%frac(ind_pav_green,m) *  &
     431                                            surf_usm_h%frac(m,ind_pav_green) *  &
    431432                                            surf_usm_h%wghf_eb_green(m)  +      &
    432                                             surf_usm_h%frac(ind_wat_win,m)   *  &
     433                                            surf_usm_h%frac(m,ind_wat_win)   *  &
    433434                                            surf_usm_h%wghf_eb_window(m)
    434435                   ENDDO
     
    755756                      j   = surf_usm_h%j(m)
    756757                      local_pf(i,j,nzb+1) =                                          &
    757                                  ( surf_usm_h%frac(ind_veg_wall,m)  *                &
     758                                 ( surf_usm_h%frac(m,ind_veg_wall)  *                &
    758759                                   surf_usm_h%r_a(m)       +                         &
    759                                    surf_usm_h%frac(ind_pav_green,m) *                &
     760                                   surf_usm_h%frac(m,ind_pav_green) *                &
    760761                                   surf_usm_h%r_a_green(m) +                         &
    761                                    surf_usm_h%frac(ind_wat_win,m)   *                &
     762                                   surf_usm_h%frac(m,ind_wat_win)   *                &
    762763                                   surf_usm_h%r_a_window(m) )
    763764                   ENDDO
  • palm/trunk/SOURCE/flow_statistics.f90

    r4360 r4441  
    2020! Current revisions:
    2121! ------------------
    22 !
     22! Change order of dimension in surface array %frac to allow for better
     23! vectorization.
    2324!
    2425! Former revisions:
     
    10891090                      m = surf_def_h(0)%start_index(j,i)
    10901091                      sums_l(nzb,108,tn)  = sums_l(nzb,108,tn)  +              &
    1091                                    surf_def_h(0)%rrtm_aldif(0,m) * rmask(j,i,sr)
     1092                                   surf_def_h(0)%rrtm_aldif(m,0) * rmask(j,i,sr)
    10921093                      sums_l(nzb,109,tn) = sums_l(nzb,109,tn)  +               &
    1093                                    surf_def_h(0)%rrtm_aldir(0,m) * rmask(j,i,sr)
     1094                                   surf_def_h(0)%rrtm_aldir(m,0) * rmask(j,i,sr)
    10941095                      sums_l(nzb,110,tn) = sums_l(nzb,110,tn)  +               &
    1095                                    surf_def_h(0)%rrtm_asdif(0,m) * rmask(j,i,sr)
     1096                                   surf_def_h(0)%rrtm_asdif(m,0) * rmask(j,i,sr)
    10961097                      sums_l(nzb,111,tn) = sums_l(nzb,111,tn)  +               &
    1097                                    surf_def_h(0)%rrtm_asdir(0,m) * rmask(j,i,sr)
     1098                                   surf_def_h(0)%rrtm_asdir(m,0) * rmask(j,i,sr)
    10981099                   ENDIF
    10991100                   IF ( surf_lsm_h%end_index(j,i) >=                           &
     
    11011102                      m = surf_lsm_h%start_index(j,i)
    11021103                      sums_l(nzb,108,tn)  = sums_l(nzb,108,tn)  +              &
    1103                                SUM( surf_lsm_h%frac(:,m) *                     &
    1104                                     surf_lsm_h%rrtm_aldif(:,m) ) * rmask(j,i,sr)
     1104                               SUM( surf_lsm_h%frac(m,:) *                     &
     1105                                    surf_lsm_h%rrtm_aldif(m,:) ) * rmask(j,i,sr)
    11051106                      sums_l(nzb,109,tn) = sums_l(nzb,109,tn)  +               &
    1106                                SUM( surf_lsm_h%frac(:,m) *                     &
    1107                                     surf_lsm_h%rrtm_aldir(:,m) ) * rmask(j,i,sr)
     1107                               SUM( surf_lsm_h%frac(m,:) *                     &
     1108                                    surf_lsm_h%rrtm_aldir(m,:) ) * rmask(j,i,sr)
    11081109                      sums_l(nzb,110,tn) = sums_l(nzb,110,tn)  +               &
    1109                                SUM( surf_lsm_h%frac(:,m) *                     &
    1110                                     surf_lsm_h%rrtm_asdif(:,m) ) * rmask(j,i,sr)
     1110                               SUM( surf_lsm_h%frac(m,:) *                     &
     1111                                    surf_lsm_h%rrtm_asdif(m,:) ) * rmask(j,i,sr)
    11111112                      sums_l(nzb,111,tn) = sums_l(nzb,111,tn)  +               &
    1112                                SUM( surf_lsm_h%frac(:,m) *                     &
    1113                                     surf_lsm_h%rrtm_asdir(:,m) ) * rmask(j,i,sr)
     1113                               SUM( surf_lsm_h%frac(m,:) *                     &
     1114                                    surf_lsm_h%rrtm_asdir(m,:) ) * rmask(j,i,sr)
    11141115                   ENDIF
    11151116                   IF ( surf_usm_h%end_index(j,i) >=                           &
     
    11171118                      m = surf_usm_h%start_index(j,i)
    11181119                      sums_l(nzb,108,tn)  = sums_l(nzb,108,tn)  +              &
    1119                                SUM( surf_usm_h%frac(:,m) *                     &
    1120                                     surf_usm_h%rrtm_aldif(:,m) ) * rmask(j,i,sr)
     1120                               SUM( surf_usm_h%frac(m,:) *                     &
     1121                                    surf_usm_h%rrtm_aldif(m,:) ) * rmask(j,i,sr)
    11211122                      sums_l(nzb,109,tn) = sums_l(nzb,109,tn)  +               &
    1122                                SUM( surf_usm_h%frac(:,m) *                     &
    1123                                     surf_usm_h%rrtm_aldir(:,m) ) * rmask(j,i,sr)
     1123                               SUM( surf_usm_h%frac(m,:) *                     &
     1124                                    surf_usm_h%rrtm_aldir(m,:) ) * rmask(j,i,sr)
    11241125                      sums_l(nzb,110,tn) = sums_l(nzb,110,tn)  +               &
    1125                                SUM( surf_usm_h%frac(:,m) *                     &
    1126                                     surf_usm_h%rrtm_asdif(:,m) ) * rmask(j,i,sr)
     1126                               SUM( surf_usm_h%frac(m,:) *                     &
     1127                                    surf_usm_h%rrtm_asdif(m,:) ) * rmask(j,i,sr)
    11271128                      sums_l(nzb,111,tn) = sums_l(nzb,111,tn)  +               &
    1128                                SUM( surf_usm_h%frac(:,m) *                     &
    1129                                     surf_usm_h%rrtm_asdir(:,m) ) * rmask(j,i,sr)
     1129                               SUM( surf_usm_h%frac(m,:) *                     &
     1130                                    surf_usm_h%rrtm_asdir(m,:) ) * rmask(j,i,sr)
    11301131                   ENDIF
    11311132
  • palm/trunk/SOURCE/indoor_model_mod.f90

    r4402 r4441  
    2121! Current revisions:
    2222! -----------------
    23 !
     23! Change order of dimension in surface array %frac to allow for better
     24! vectorization.
    2425!
    2526! Former revisions:
     
    12251226                                          ( buildings(nb)%num_facades_per_building_h +              &
    12261227                                            buildings(nb)%num_facades_per_building_v )                !< [m2] area of total facade
    1227              window_area_per_facade       = surf_usm_h%frac(ind_wat_win,m)  * facade_element_area     !< [m2] window area per facade element
     1228             window_area_per_facade       = surf_usm_h%frac(m,ind_wat_win)  * facade_element_area     !< [m2] window area per facade element
    12281229
    12291230             buildings(nb)%net_floor_area = buildings(nb)%vol_tot / ( buildings(nb)%height_storey )
     
    12751276             near_facade_temperature = surf_usm_h%pt_10cm(m)
    12761277             indoor_wall_window_temperature =                                  &
    1277                   surf_usm_h%frac(ind_veg_wall,m) * t_wall_h(nzt_wall,m)       &
    1278                 + surf_usm_h%frac(ind_wat_win,m)  * t_window_h(nzt_wall,m)
     1278                  surf_usm_h%frac(m,ind_veg_wall) * t_wall_h(nzt_wall,m)       &
     1279                + surf_usm_h%frac(m,ind_wat_win)  * t_window_h(nzt_wall,m)
    12791280!
    12801281!--          Solar thermal gains. If net_sw_in larger than sun-protection
     
    14351436                                          ( buildings(nb)%num_facades_per_building_h +              &
    14361437                                            buildings(nb)%num_facades_per_building_v )                !< [m2] area of total facade
    1437              window_area_per_facade       = surf_usm_v(l)%frac(ind_wat_win,m)  * facade_element_area  !< [m2] window area per facade element
     1438             window_area_per_facade       = surf_usm_v(l)%frac(m,ind_wat_win)  * facade_element_area  !< [m2] window area per facade element
    14381439
    14391440             buildings(nb)%net_floor_area = buildings(nb)%vol_tot / ( buildings(nb)%height_storey )
     
    14861487             near_facade_temperature = surf_usm_v(l)%pt_10cm(m)
    14871488             indoor_wall_window_temperature =                                                       &
    1488                   surf_usm_v(l)%frac(ind_veg_wall,m) * t_wall_v(l)%t(nzt_wall,m)                    &
    1489                 + surf_usm_v(l)%frac(ind_wat_win,m)  * t_window_v(l)%t(nzt_wall,m)
     1489                  surf_usm_v(l)%frac(m,ind_veg_wall) * t_wall_v(l)%t(nzt_wall,m)                    &
     1490                + surf_usm_v(l)%frac(m,ind_wat_win)  * t_window_v(l)%t(nzt_wall,m)
    14901491!
    14911492!--          Solar thermal gains. If net_sw_in larger than sun-protection
  • palm/trunk/SOURCE/land_surface_model_mod.f90

    r4429 r4441  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! Change order of dimension in surface arrays %frac, %emissivity and %albedo
     23! to allow for better vectorization in the radiation interactions.
    2324!
    2425! Former revisions:
     
    25022503!--    fraction.
    25032504!--    Set default values at each surface element.
    2504        ALLOCATE ( surf_lsm_h%albedo_type(0:2,1:surf_lsm_h%ns) )
    2505        ALLOCATE ( surf_lsm_h%emissivity(0:2,1:surf_lsm_h%ns) )
     2505       ALLOCATE ( surf_lsm_h%albedo_type(1:surf_lsm_h%ns,0:2) )
     2506       ALLOCATE ( surf_lsm_h%emissivity(1:surf_lsm_h%ns,0:2) )
    25062507!
    25072508!--    Initialize albedo type according to its default type, in order to set values
    25082509!--    independent on default albedo_type in radiation model.
    2509        surf_lsm_h%albedo_type(ind_veg_wall,:)  =                               &
     2510       surf_lsm_h%albedo_type(:,ind_veg_wall)  =                               &
    25102511                             INT( vegetation_pars(ind_v_at,vegetation_type) )
    2511        surf_lsm_h%albedo_type(ind_wat_win,:)   =                               &
     2512       surf_lsm_h%albedo_type(:,ind_wat_win)   =                               &
    25122513                             INT( water_pars(ind_w_at,water_type)           )
    2513        surf_lsm_h%albedo_type(ind_pav_green,:) =                               &
     2514       surf_lsm_h%albedo_type(:,ind_pav_green) =                               &
    25142515                             INT( pavement_pars(ind_p_at,pavement_type)     )
    25152516       surf_lsm_h%emissivity  = emissivity
    25162517       DO  l = 0, 3
    2517           ALLOCATE ( surf_lsm_v(l)%albedo_type(0:2,1:surf_lsm_v(l)%ns) )
    2518           ALLOCATE ( surf_lsm_v(l)%emissivity(0:2,1:surf_lsm_v(l)%ns)  )
     2518          ALLOCATE ( surf_lsm_v(l)%albedo_type(1:surf_lsm_v(l)%ns,0:2) )
     2519          ALLOCATE ( surf_lsm_v(l)%emissivity(1:surf_lsm_v(l)%ns,0:2)  )
    25192520!
    25202521!--       Initialize albedo type according to its default type, in order to
    25212522!--       set values independent on default albedo_type in radiation model.
    2522           surf_lsm_v(l)%albedo_type(ind_veg_wall,:)  =                         &
     2523          surf_lsm_v(l)%albedo_type(:,ind_veg_wall)  =                         &
    25232524                             INT( vegetation_pars(ind_v_at,vegetation_type) )
    2524           surf_lsm_v(l)%albedo_type(ind_wat_win,:)   =                         &
     2525          surf_lsm_v(l)%albedo_type(:,ind_wat_win)   =                         &
    25252526                             INT( water_pars(ind_w_at,water_type)           )
    2526           surf_lsm_v(l)%albedo_type(ind_pav_green,:) =                         &
     2527          surf_lsm_v(l)%albedo_type(:,ind_pav_green) =                         &
    25272528                             INT( pavement_pars(ind_p_at,pavement_type)     )
    25282529          surf_lsm_v(l)%emissivity  = emissivity
     
    25312532!--    Allocate arrays for relative surface fraction.
    25322533!--    0 - vegetation fraction, 2 - water fraction, 1 - pavement fraction
    2533        ALLOCATE( surf_lsm_h%frac(0:2,1:surf_lsm_h%ns) )
     2534       ALLOCATE( surf_lsm_h%frac(1:surf_lsm_h%ns,0:2) )
    25342535       surf_lsm_h%frac = 0.0_wp
    25352536       DO  l = 0, 3
    2536           ALLOCATE( surf_lsm_v(l)%frac(0:2,1:surf_lsm_v(l)%ns) )
     2537          ALLOCATE( surf_lsm_v(l)%frac(1:surf_lsm_v(l)%ns,0:2) )
    25372538          surf_lsm_v(l)%frac = 0.0_wp
    25382539       ENDDO
     
    25882589         
    25892590             surf_lsm_h%vegetation_surface = .TRUE.
    2590              surf_lsm_h%frac(ind_veg_wall,:) = 1.0_wp
     2591             surf_lsm_h%frac(:,ind_veg_wall) = 1.0_wp
    25912592             DO  l = 0, 3
    25922593                surf_lsm_v(l)%vegetation_surface = .TRUE.
    2593                 surf_lsm_v(l)%frac(ind_veg_wall,:) = 1.0_wp
     2594                surf_lsm_v(l)%frac(:,ind_veg_wall) = 1.0_wp
    25942595             ENDDO
    25952596   
     
    25972598             
    25982599             surf_lsm_h%water_surface = .TRUE.
    2599              surf_lsm_h%frac(ind_wat_win,:) = 1.0_wp
     2600             surf_lsm_h%frac(:,ind_wat_win) = 1.0_wp
    26002601!
    26012602!--          Note, vertical water surface does not really make sense.
    26022603             DO  l = 0, 3 
    26032604                surf_lsm_v(l)%water_surface   = .TRUE.
    2604                 surf_lsm_v(l)%frac(ind_wat_win,:) = 1.0_wp
     2605                surf_lsm_v(l)%frac(:,ind_wat_win) = 1.0_wp
    26052606             ENDDO
    26062607
     
    26082609             
    26092610             surf_lsm_h%pavement_surface = .TRUE.
    2610                 surf_lsm_h%frac(ind_pav_green,:) = 1.0_wp
     2611                surf_lsm_h%frac(:,ind_pav_green) = 1.0_wp
    26112612             DO  l = 0, 3
    26122613                surf_lsm_v(l)%pavement_surface   = .TRUE.
    2613                 surf_lsm_v(l)%frac(ind_pav_green,:) = 1.0_wp
     2614                surf_lsm_v(l)%frac(:,ind_pav_green) = 1.0_wp
    26142615             ENDDO
    26152616
     
    27452746             IF ( surface_fraction_f%frac(ind_veg_wall,j,i) /=                 &
    27462747                  surface_fraction_f%fill )  THEN
    2747                 surf_lsm_h%frac(ind_veg_wall,m)  =                             &
     2748                surf_lsm_h%frac(m,ind_veg_wall)  =                             &
    27482749                                    surface_fraction_f%frac(ind_veg_wall,j,i)
    27492750             ENDIF
    27502751             IF ( surface_fraction_f%frac(ind_pav_green,j,i) /=                &
    27512752                  surface_fraction_f%fill )  THEN
    2752                 surf_lsm_h%frac(ind_pav_green,m) =                             &
     2753                surf_lsm_h%frac(m,ind_pav_green) =                             &
    27532754                                    surface_fraction_f%frac(ind_pav_green,j,i)
    27542755             ENDIF
    27552756             IF ( surface_fraction_f%frac(ind_wat_win,j,i) /=                  &
    27562757                  surface_fraction_f%fill )  THEN
    2757                 surf_lsm_h%frac(ind_wat_win,m)   =                             &
     2758                surf_lsm_h%frac(m,ind_wat_win)   =                             &
    27582759                                    surface_fraction_f%frac(ind_wat_win,j,i)
    27592760             ENDIF
     
    27612762!--          Check if sum of relative fractions is zero. This case, give an
    27622763!--          error message.
    2763              IF ( SUM ( surf_lsm_h%frac(:,m) ) == 0.0_wp )  THEN
     2764             IF ( SUM ( surf_lsm_h%frac(m,:) ) == 0.0_wp )  THEN
    27642765                WRITE( message_string, * )                                     &
    27652766                                 'surface fractions at grid point (j,i) = (',  &
     
    27732774!--          fractions to one. Note, at the moment no tile approach is
    27742775!--          implemented, so that relative fractions are either 1 or zero.
    2775              IF ( SUM ( surf_lsm_h%frac(:,m) ) > 1.0_wp  .OR.                  &
    2776                   SUM ( surf_lsm_h%frac(:,m) ) < 1.0_wp  )  THEN
    2777                 surf_lsm_h%frac(:,m) = surf_lsm_h%frac(:,m) /                  &
    2778                                        SUM ( surf_lsm_h%frac(:,m) )
     2776             IF ( SUM ( surf_lsm_h%frac(m,:) ) > 1.0_wp  .OR.                  &
     2777                  SUM ( surf_lsm_h%frac(m,:) ) < 1.0_wp  )  THEN
     2778                surf_lsm_h%frac(m,:) = surf_lsm_h%frac(m,:) /                  &
     2779                                       SUM ( surf_lsm_h%frac(m,:) )
    27792780
    27802781             ENDIF
     
    27912792                IF ( surface_fraction_f%frac(ind_veg_wall,j,i) /=              &
    27922793                     surface_fraction_f%fill )  THEN
    2793                    surf_lsm_v(l)%frac(ind_veg_wall,m)  =                       &
     2794                   surf_lsm_v(l)%frac(m,ind_veg_wall)  =                       &
    27942795                                    surface_fraction_f%frac(ind_veg_wall,j,i)
    27952796                ENDIF
    27962797                IF ( surface_fraction_f%frac(ind_pav_green,j,i) /=             &
    27972798                     surface_fraction_f%fill )  THEN
    2798                    surf_lsm_v(l)%frac(ind_pav_green,m)  =                      &
     2799                   surf_lsm_v(l)%frac(m,ind_pav_green)  =                      &
    27992800                                    surface_fraction_f%frac(ind_pav_green,j,i)
    28002801                ENDIF
    28012802                IF ( surface_fraction_f%frac(ind_wat_win,j,i) /=               &
    28022803                     surface_fraction_f%fill )  THEN
    2803                    surf_lsm_v(l)%frac(ind_wat_win,m)  =                        &
     2804                   surf_lsm_v(l)%frac(m,ind_wat_win)  =                        &
    28042805                                    surface_fraction_f%frac(ind_wat_win,j,i)
    28052806                ENDIF
     
    28072808!--             Check if sum of relative fractions is zero. This case, give an
    28082809!--             error message.
    2809                 IF ( SUM ( surf_lsm_v(l)%frac(:,m) ) == 0.0_wp )  THEN
     2810                IF ( SUM ( surf_lsm_v(l)%frac(m,:) ) == 0.0_wp )  THEN
    28102811                   WRITE( message_string, * )                                  &
    28112812                                 'surface fractions at grid point (j,i) = (',  &
     
    28192820!--             fractions to one. Note, at the moment no tile approach is
    28202821!--             implemented, so that relative fractions are either 1 or zero.
    2821                 IF ( SUM ( surf_lsm_v(l)%frac(:,m) ) > 1.0_wp  .OR.            &
    2822                      SUM ( surf_lsm_v(l)%frac(:,m) ) < 1.0_wp  )  THEN
    2823                    surf_lsm_v(l)%frac(:,m) = surf_lsm_v(l)%frac(:,m) /         &
    2824                                              SUM ( surf_lsm_v(l)%frac(:,m) )
     2822                IF ( SUM ( surf_lsm_v(l)%frac(m,:) ) > 1.0_wp  .OR.            &
     2823                     SUM ( surf_lsm_v(l)%frac(m,:) ) < 1.0_wp  )  THEN
     2824                   surf_lsm_v(l)%frac(m,:) = surf_lsm_v(l)%frac(m,:) /         &
     2825                                             SUM ( surf_lsm_v(l)%frac(m,:) )
    28252826
    28262827                ENDIF
     
    28342835
    28352836             IF ( vegetation_type_f%var(j,i) /= vegetation_type_f%fill )       &       
    2836                 surf_lsm_h%frac(ind_veg_wall,m)  = 1.0_wp
     2837                surf_lsm_h%frac(m,ind_veg_wall)  = 1.0_wp
    28372838             IF ( pavement_type_f%var(j,i)   /= pavement_type_f%fill   )       &       
    2838                 surf_lsm_h%frac(ind_pav_green,m) = 1.0_wp
     2839                surf_lsm_h%frac(m,ind_pav_green) = 1.0_wp
    28392840             IF ( water_type_f%var(j,i)      /= water_type_f%fill      )       &       
    2840                 surf_lsm_h%frac(ind_wat_win,m)   = 1.0_wp       
     2841                surf_lsm_h%frac(m,ind_wat_win)   = 1.0_wp       
    28412842          ENDDO
    28422843          DO  l = 0, 3
     
    28482849     
    28492850                IF ( vegetation_type_f%var(j,i) /= vegetation_type_f%fill )    &       
    2850                    surf_lsm_v(l)%frac(ind_veg_wall,m)  = 1.0_wp
     2851                   surf_lsm_v(l)%frac(m,ind_veg_wall)  = 1.0_wp
    28512852                IF ( pavement_type_f%var(j,i)   /= pavement_type_f%fill   )    &       
    2852                    surf_lsm_v(l)%frac(ind_pav_green,m) = 1.0_wp
     2853                   surf_lsm_v(l)%frac(m,ind_pav_green) = 1.0_wp
    28532854                IF ( water_type_f%var(j,i)      /= water_type_f%fill      )    &       
    2854                    surf_lsm_v(l)%frac(ind_wat_win,m)   = 1.0_wp     
     2855                   surf_lsm_v(l)%frac(m,ind_wat_win)   = 1.0_wp     
    28552856             ENDDO
    28562857          ENDDO
     
    32183219             surf_lsm_h%f_sw_in(m)          = f_shortwave_incoming
    32193220             surf_lsm_h%c_surface(m)        = c_surface
    3220              surf_lsm_h%albedo_type(ind_veg_wall,m) = albedo_type
    3221              surf_lsm_h%emissivity(ind_veg_wall,m)  = emissivity
     3221             surf_lsm_h%albedo_type(m,ind_veg_wall) = albedo_type
     3222             surf_lsm_h%emissivity(m,ind_veg_wall)  = emissivity
    32223223             
    32233224             surf_lsm_h%vegetation_type(m)      = vegetation_type
     
    32473248                surf_lsm_v(l)%f_sw_in(m)          = f_shortwave_incoming
    32483249                surf_lsm_v(l)%c_surface(m)        = c_surface
    3249                 surf_lsm_v(l)%albedo_type(ind_veg_wall,m) = albedo_type
    3250                 surf_lsm_v(l)%emissivity(ind_veg_wall,m)  = emissivity
     3250                surf_lsm_v(l)%albedo_type(m,ind_veg_wall) = albedo_type
     3251                surf_lsm_v(l)%emissivity(m,ind_veg_wall)  = emissivity
    32513252               
    32523253                surf_lsm_v(l)%vegetation_type(m)      = vegetation_type
     
    32853286                surf_lsm_h%f_sw_in(m)          = vegetation_pars(ind_v_f_sw_in,st)
    32863287                surf_lsm_h%c_surface(m)        = vegetation_pars(ind_v_c_surf,st)
    3287                 surf_lsm_h%albedo_type(ind_veg_wall,m) = INT( vegetation_pars(ind_v_at,st) )
    3288                 surf_lsm_h%emissivity(ind_veg_wall,m)  = vegetation_pars(ind_v_emis,st)
     3288                surf_lsm_h%albedo_type(m,ind_veg_wall) = INT( vegetation_pars(ind_v_at,st) )
     3289                surf_lsm_h%emissivity(m,ind_veg_wall)  = vegetation_pars(ind_v_emis,st)
    32893290               
    32903291                surf_lsm_h%vegetation_type(m)      = st
     
    33143315                   surf_lsm_v(l)%f_sw_in(m)          = vegetation_pars(ind_v_f_sw_in,st)
    33153316                   surf_lsm_v(l)%c_surface(m)        = vegetation_pars(ind_v_c_surf,st)
    3316                    surf_lsm_v(l)%albedo_type(ind_veg_wall,m) = INT( vegetation_pars(ind_v_at,st) )
    3317                    surf_lsm_v(l)%emissivity(ind_veg_wall,m)  = vegetation_pars(ind_v_emis,st)
     3317                   surf_lsm_v(l)%albedo_type(m,ind_veg_wall) = INT( vegetation_pars(ind_v_at,st) )
     3318                   surf_lsm_v(l)%emissivity(m,ind_veg_wall)  = vegetation_pars(ind_v_emis,st)
    33183319                   
    33193320                   surf_lsm_v(l)%vegetation_type(m)      = st
     
    33933394                IF ( vegetation_pars_f%pars_xy(ind_v_at,j,i) /=                &
    33943395                     vegetation_pars_f%fill )                                  &
    3395                    surf_lsm_h%albedo_type(ind_veg_wall,m) =                    &
     3396                   surf_lsm_h%albedo_type(m,ind_veg_wall) =                    &
    33963397                                   INT( vegetation_pars_f%pars_xy(ind_v_at,j,i) )
    33973398                IF ( vegetation_pars_f%pars_xy(ind_v_emis,j,i) /=              &
    33983399                     vegetation_pars_f%fill )                                  &
    3399                    surf_lsm_h%emissivity(ind_veg_wall,m)  =                    &
     3400                   surf_lsm_h%emissivity(m,ind_veg_wall)  =                    &
    34003401                                   vegetation_pars_f%pars_xy(ind_v_emis,j,i)
    34013402             ENDIF
     
    34693470                   IF ( vegetation_pars_f%pars_xy(ind_v_at,j,i) /=             &
    34703471                        vegetation_pars_f%fill )                               &
    3471                       surf_lsm_v(l)%albedo_type(ind_veg_wall,m) =              &
     3472                      surf_lsm_v(l)%albedo_type(m,ind_veg_wall) =              &
    34723473                                   INT( vegetation_pars_f%pars_xy(ind_v_at,j,i) )
    34733474                   IF ( vegetation_pars_f%pars_xy(ind_v_emis,j,i) /=           &
    34743475                        vegetation_pars_f%fill )                               &
    3475                       surf_lsm_v(l)%emissivity(ind_veg_wall,m)  =              &
     3476                      surf_lsm_v(l)%emissivity(m,ind_veg_wall)  =              &
    34763477                                   vegetation_pars_f%pars_xy(ind_v_emis,j,i)
    34773478                ENDIF
     
    35233524             surf_lsm_h%lambda_surface_u(m) = 1.0E10_wp               
    35243525             surf_lsm_h%c_surface(m)        = 0.0_wp
    3525              surf_lsm_h%albedo_type(ind_wat_win,m) = albedo_type
    3526              surf_lsm_h%emissivity(ind_wat_win,m)  = emissivity
     3526             surf_lsm_h%albedo_type(m,ind_wat_win) = albedo_type
     3527             surf_lsm_h%emissivity(m,ind_wat_win)  = emissivity
    35273528             
    35283529             surf_lsm_h%water_type(m)      = water_type
     
    35443545                surf_lsm_v(l)%lambda_surface_u(m) = 1.0E10_wp               
    35453546                surf_lsm_v(l)%c_surface(m)        = 0.0_wp
    3546                 surf_lsm_v(l)%albedo_type(ind_wat_win,m) = albedo_type
    3547                 surf_lsm_v(l)%emissivity(ind_wat_win,m)  = emissivity
     3547                surf_lsm_v(l)%albedo_type(m,ind_wat_win) = albedo_type
     3548                surf_lsm_v(l)%emissivity(m,ind_wat_win)  = emissivity
    35483549               
    35493550                surf_lsm_v(l)%water_type(m)      = water_type
     
    35773578                surf_lsm_h%lambda_surface_u(m) = water_pars(ind_w_lambda_u,st)             
    35783579                surf_lsm_h%c_surface(m)        = 0.0_wp
    3579                 surf_lsm_h%albedo_type(ind_wat_win,m) = INT( water_pars(ind_w_at,st) )
    3580                 surf_lsm_h%emissivity(ind_wat_win,m)  = water_pars(ind_w_emis,st)
     3580                surf_lsm_h%albedo_type(m,ind_wat_win) = INT( water_pars(ind_w_at,st) )
     3581                surf_lsm_h%emissivity(m,ind_wat_win)  = water_pars(ind_w_emis,st)
    35813582               
    35823583                surf_lsm_h%water_type(m)      = st
     
    36053606                                                   water_pars(ind_w_lambda_u,st)           
    36063607                   surf_lsm_v(l)%c_surface(m)     = 0.0_wp
    3607                    surf_lsm_v(l)%albedo_type(ind_wat_win,m) =                  &
     3608                   surf_lsm_v(l)%albedo_type(m,ind_wat_win) =                  &
    36083609                                                  INT( water_pars(ind_w_at,st) )
    3609                    surf_lsm_v(l)%emissivity(ind_wat_win,m)  =                  &
     3610                   surf_lsm_v(l)%emissivity(m,ind_wat_win)  =                  &
    36103611                                                  water_pars(ind_w_emis,st)
    36113612                                                 
     
    36643665                IF ( water_pars_f%pars_xy(ind_w_at,j,i) /=                     &
    36653666                     water_pars_f%fill )                                       &
    3666                    surf_lsm_h%albedo_type(ind_wat_win,m) =                     &
     3667                   surf_lsm_h%albedo_type(m,ind_wat_win) =                     &
    36673668                                       INT( water_pars_f%pars_xy(ind_w_at,j,i) )
    36683669
    36693670                IF ( water_pars_f%pars_xy(ind_w_emis,j,i) /=                   &
    36703671                     water_pars_f%fill )                                       &
    3671                    surf_lsm_h%emissivity(ind_wat_win,m) =                      &
     3672                   surf_lsm_h%emissivity(m,ind_wat_win) =                      &
    36723673                                          water_pars_f%pars_xy(ind_w_emis,j,i) 
    36733674             ENDIF
     
    37243725                   IF ( water_pars_f%pars_xy(ind_w_at,j,i) /=                  &
    37253726                        water_pars_f%fill )                                    &
    3726                       surf_lsm_v(l)%albedo_type(ind_wat_win,m) =               &
     3727                      surf_lsm_v(l)%albedo_type(m,ind_wat_win) =               &
    37273728                                      INT( water_pars_f%pars_xy(ind_w_at,j,i) )
    37283729
    37293730                   IF ( water_pars_f%pars_xy(ind_w_emis,j,i) /=                &
    37303731                        water_pars_f%fill )                                    &
    3731                       surf_lsm_v(l)%emissivity(ind_wat_win,m)  =               &
     3732                      surf_lsm_v(l)%emissivity(m,ind_wat_win)  =               &
    37323733                                      water_pars_f%pars_xy(ind_w_emis,j,i) 
    37333734                ENDIF
     
    38103811                                                        * 0.25_wp                                   
    38113812
    3812              surf_lsm_h%albedo_type(ind_pav_green,m) = albedo_type
    3813              surf_lsm_h%emissivity(ind_pav_green,m)  = emissivity     
     3813             surf_lsm_h%albedo_type(m,ind_pav_green) = albedo_type
     3814             surf_lsm_h%emissivity(m,ind_pav_green)  = emissivity     
    38143815             
    38153816             surf_lsm_h%pavement_type(m)      = pavement_type
     
    38483849                                                        * 0.25_wp                                     
    38493850
    3850                 surf_lsm_v(l)%albedo_type(ind_pav_green,m) = albedo_type
    3851                 surf_lsm_v(l)%emissivity(ind_pav_green,m)  = emissivity
     3851                surf_lsm_v(l)%albedo_type(m,ind_pav_green) = albedo_type
     3852                surf_lsm_v(l)%emissivity(m,ind_pav_green)  = emissivity
    38523853               
    38533854                surf_lsm_v(l)%pavement_type(m)      = pavement_type
     
    39083909                                                        * dz_soil(nzb_soil)    &
    39093910                                                        * 0.25_wp                               
    3910                 surf_lsm_h%albedo_type(ind_pav_green,m) = INT( pavement_pars(ind_p_at,st) )
    3911                 surf_lsm_h%emissivity(ind_pav_green,m)  = pavement_pars(ind_p_emis,st) 
     3911                surf_lsm_h%albedo_type(m,ind_pav_green) = INT( pavement_pars(ind_p_at,st) )
     3912                surf_lsm_h%emissivity(m,ind_pav_green)  = pavement_pars(ind_p_emis,st) 
    39123913               
    39133914                surf_lsm_h%pavement_type(m)      = st
     
    39613962                                                        * dz_soil(nzb_soil)    &
    39623963                                                        * 0.25_wp                                   
    3963                    surf_lsm_v(l)%albedo_type(ind_pav_green,m) =                &
     3964                   surf_lsm_v(l)%albedo_type(m,ind_pav_green) =                &
    39643965                                              INT( pavement_pars(ind_p_at,st) )
    3965                    surf_lsm_v(l)%emissivity(ind_pav_green,m)  =                &
     3966                   surf_lsm_v(l)%emissivity(m,ind_pav_green)  =                &
    39663967                                              pavement_pars(ind_p_emis,st) 
    39673968                                             
     
    40304031                IF ( pavement_pars_f%pars_xy(ind_p_at,j,i) /=                  &
    40314032                     pavement_pars_f%fill )                                    &
    4032                    surf_lsm_h%albedo_type(ind_pav_green,m) =                   &
     4033                   surf_lsm_h%albedo_type(m,ind_pav_green) =                   &
    40334034                                   INT( pavement_pars_f%pars_xy(ind_p_at,j,i) )
    40344035                IF ( pavement_pars_f%pars_xy(ind_p_emis,j,i) /=                &
    40354036                     pavement_pars_f%fill )                                    &
    4036                    surf_lsm_h%emissivity(ind_pav_green,m)  =                   &
     4037                   surf_lsm_h%emissivity(m,ind_pav_green)  =                   &
    40374038                                   pavement_pars_f%pars_xy(ind_p_emis,j,i)
    40384039             ENDIF
     
    40904091                   IF ( pavement_pars_f%pars_xy(ind_p_at,j,i) /=               &
    40914092                        pavement_pars_f%fill )                                 &
    4092                       surf_lsm_v(l)%albedo_type(ind_pav_green,m) =             &
     4093                      surf_lsm_v(l)%albedo_type(m,ind_pav_green) =             &
    40934094                                   INT( pavement_pars_f%pars_xy(ind_p_at,j,i) )
    40944095
    40954096                   IF ( pavement_pars_f%pars_xy(ind_p_emis,j,i) /=             &
    40964097                        pavement_pars_f%fill )                                 &
    4097                       surf_lsm_v(l)%emissivity(ind_pav_green,m)  =             &
     4098                      surf_lsm_v(l)%emissivity(m,ind_pav_green)  =             &
    40984099                                   pavement_pars_f%pars_xy(ind_p_emis,j,i) 
    40994100                ENDIF
  • palm/trunk/SOURCE/radiation_model_mod.f90

    r4429 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.
     27! - Minor formatting issues
    2628!
    2729! Former revisions:
     
    18311833!--       via namelist paramter, unless not already allocated.
    18321834          IF ( .NOT. ALLOCATED(surf_lsm_h%albedo) )  THEN
    1833              ALLOCATE( surf_lsm_h%albedo(0:2,1:surf_lsm_h%ns)     )
     1835             ALLOCATE( surf_lsm_h%albedo(1:surf_lsm_h%ns,0:2)     )
    18341836             surf_lsm_h%albedo    = albedo
    18351837          ENDIF
    18361838          IF ( .NOT. ALLOCATED(surf_usm_h%albedo) )  THEN
    1837              ALLOCATE( surf_usm_h%albedo(0:2,1:surf_usm_h%ns)     )
     1839             ALLOCATE( surf_usm_h%albedo(1:surf_usm_h%ns,0:2)     )
    18381840             surf_usm_h%albedo    = albedo
    18391841          ENDIF
     
    18411843          DO  l = 0, 3
    18421844             IF ( .NOT. ALLOCATED( surf_lsm_v(l)%albedo ) )  THEN
    1843                 ALLOCATE( surf_lsm_v(l)%albedo(0:2,1:surf_lsm_v(l)%ns) )
     1845                ALLOCATE( surf_lsm_v(l)%albedo(1:surf_lsm_v(l)%ns,0:2) )
    18441846                surf_lsm_v(l)%albedo = albedo
    18451847             ENDIF
    18461848             IF ( .NOT. ALLOCATED( surf_usm_v(l)%albedo ) )  THEN
    1847                 ALLOCATE( surf_usm_v(l)%albedo(0:2,1:surf_usm_v(l)%ns) )
     1849                ALLOCATE( surf_usm_v(l)%albedo(1:surf_usm_v(l)%ns,0:2) )
    18481850                surf_usm_v(l)%albedo = albedo
    18491851             ENDIF
     
    18551857!--       albedo won't be overwritten.
    18561858          DO  m = 1, surf_lsm_h%ns
    1857              IF ( surf_lsm_h%albedo_type(ind_veg_wall,m) /= 0 )                &
    1858                 surf_lsm_h%albedo(ind_veg_wall,m) =                            &
    1859                            albedo_pars(0,surf_lsm_h%albedo_type(ind_veg_wall,m))
    1860              IF ( surf_lsm_h%albedo_type(ind_pav_green,m) /= 0 )               &
    1861                 surf_lsm_h%albedo(ind_pav_green,m) =                           &
    1862                            albedo_pars(0,surf_lsm_h%albedo_type(ind_pav_green,m))
    1863              IF ( surf_lsm_h%albedo_type(ind_wat_win,m) /= 0 )                 &
    1864                 surf_lsm_h%albedo(ind_wat_win,m) =                             &
    1865                            albedo_pars(0,surf_lsm_h%albedo_type(ind_wat_win,m))
     1859             IF ( surf_lsm_h%albedo_type(m,ind_veg_wall) /= 0 )                &
     1860                surf_lsm_h%albedo(m,ind_veg_wall) =                            &
     1861                           albedo_pars(0,surf_lsm_h%albedo_type(m,ind_veg_wall))
     1862             IF ( surf_lsm_h%albedo_type(m,ind_pav_green) /= 0 )               &
     1863                surf_lsm_h%albedo(m,ind_pav_green) =                           &
     1864                           albedo_pars(0,surf_lsm_h%albedo_type(m,ind_pav_green))
     1865             IF ( surf_lsm_h%albedo_type(m,ind_wat_win) /= 0 )                 &
     1866                surf_lsm_h%albedo(m,ind_wat_win) =                             &
     1867                           albedo_pars(0,surf_lsm_h%albedo_type(m,ind_wat_win))
    18661868          ENDDO
    18671869          DO  m = 1, surf_usm_h%ns
    1868              IF ( surf_usm_h%albedo_type(ind_veg_wall,m) /= 0 )                &
    1869                 surf_usm_h%albedo(ind_veg_wall,m) =                            &
    1870                            albedo_pars(0,surf_usm_h%albedo_type(ind_veg_wall,m))
    1871              IF ( surf_usm_h%albedo_type(ind_pav_green,m) /= 0 )               &
    1872                 surf_usm_h%albedo(ind_pav_green,m) =                           &
    1873                            albedo_pars(0,surf_usm_h%albedo_type(ind_pav_green,m))
    1874              IF ( surf_usm_h%albedo_type(ind_wat_win,m) /= 0 )                 &
    1875                 surf_usm_h%albedo(ind_wat_win,m) =                             &
    1876                            albedo_pars(0,surf_usm_h%albedo_type(ind_wat_win,m))
     1870             IF ( surf_usm_h%albedo_type(m,ind_veg_wall) /= 0 )                &
     1871                surf_usm_h%albedo(m,ind_veg_wall) =                            &
     1872                           albedo_pars(0,surf_usm_h%albedo_type(m,ind_veg_wall))
     1873             IF ( surf_usm_h%albedo_type(m,ind_pav_green) /= 0 )               &
     1874                surf_usm_h%albedo(m,ind_pav_green) =                           &
     1875                           albedo_pars(0,surf_usm_h%albedo_type(m,ind_pav_green))
     1876             IF ( surf_usm_h%albedo_type(m,ind_wat_win) /= 0 )                 &
     1877                surf_usm_h%albedo(m,ind_wat_win) =                             &
     1878                           albedo_pars(0,surf_usm_h%albedo_type(m,ind_wat_win))
    18771879          ENDDO
    18781880
    18791881          DO  l = 0, 3
    18801882             DO  m = 1, surf_lsm_v(l)%ns
    1881                 IF ( surf_lsm_v(l)%albedo_type(ind_veg_wall,m) /= 0 )          &
    1882                    surf_lsm_v(l)%albedo(ind_veg_wall,m) =                      &
    1883                         albedo_pars(0,surf_lsm_v(l)%albedo_type(ind_veg_wall,m))
    1884                 IF ( surf_lsm_v(l)%albedo_type(ind_pav_green,m) /= 0 )         &
    1885                    surf_lsm_v(l)%albedo(ind_pav_green,m) =                     &
    1886                         albedo_pars(0,surf_lsm_v(l)%albedo_type(ind_pav_green,m))
    1887                 IF ( surf_lsm_v(l)%albedo_type(ind_wat_win,m) /= 0 )           &
    1888                    surf_lsm_v(l)%albedo(ind_wat_win,m) =                       &
    1889                         albedo_pars(0,surf_lsm_v(l)%albedo_type(ind_wat_win,m))
     1883                IF ( surf_lsm_v(l)%albedo_type(m,ind_veg_wall) /= 0 )          &
     1884                   surf_lsm_v(l)%albedo(m,ind_veg_wall) =                      &
     1885                        albedo_pars(0,surf_lsm_v(l)%albedo_type(m,ind_veg_wall))
     1886                IF ( surf_lsm_v(l)%albedo_type(m,ind_pav_green) /= 0 )         &
     1887                   surf_lsm_v(l)%albedo(m,ind_pav_green) =                     &
     1888                        albedo_pars(0,surf_lsm_v(l)%albedo_type(m,ind_pav_green))
     1889                IF ( surf_lsm_v(l)%albedo_type(m,ind_wat_win) /= 0 )           &
     1890                   surf_lsm_v(l)%albedo(m,ind_wat_win) =                       &
     1891                        albedo_pars(0,surf_lsm_v(l)%albedo_type(m,ind_wat_win))
    18901892             ENDDO
    18911893             DO  m = 1, surf_usm_v(l)%ns
    1892                 IF ( surf_usm_v(l)%albedo_type(ind_veg_wall,m) /= 0 )          &
    1893                    surf_usm_v(l)%albedo(ind_veg_wall,m) =                      &
    1894                         albedo_pars(0,surf_usm_v(l)%albedo_type(ind_veg_wall,m))
    1895                 IF ( surf_usm_v(l)%albedo_type(ind_pav_green,m) /= 0 )         &
    1896                    surf_usm_v(l)%albedo(ind_pav_green,m) =                     &
    1897                         albedo_pars(0,surf_usm_v(l)%albedo_type(ind_pav_green,m))
    1898                 IF ( surf_usm_v(l)%albedo_type(ind_wat_win,m) /= 0 )           &
    1899                    surf_usm_v(l)%albedo(ind_wat_win,m) =                       &
    1900                         albedo_pars(0,surf_usm_v(l)%albedo_type(ind_wat_win,m))
     1894                IF ( surf_usm_v(l)%albedo_type(m,ind_veg_wall) /= 0 )          &
     1895                   surf_usm_v(l)%albedo(m,ind_veg_wall) =                      &
     1896                        albedo_pars(0,surf_usm_v(l)%albedo_type(m,ind_veg_wall))
     1897                IF ( surf_usm_v(l)%albedo_type(m,ind_pav_green) /= 0 )         &
     1898                   surf_usm_v(l)%albedo(m,ind_pav_green) =                     &
     1899                        albedo_pars(0,surf_usm_v(l)%albedo_type(m,ind_pav_green))
     1900                IF ( surf_usm_v(l)%albedo_type(m,ind_wat_win) /= 0 )           &
     1901                   surf_usm_v(l)%albedo(m,ind_wat_win) =                       &
     1902                        albedo_pars(0,surf_usm_v(l)%albedo_type(m,ind_wat_win))
    19011903             ENDDO
    19021904          ENDDO
     
    19131915                j = surf_lsm_h%j(m)
    19141916                IF ( albedo_pars_f%pars_xy(0,j,i) /= albedo_pars_f%fill )  THEN
    1915                    surf_lsm_h%albedo(ind_veg_wall,m)  = albedo_pars_f%pars_xy(0,j,i)
    1916                    surf_lsm_h%albedo(ind_pav_green,m) = albedo_pars_f%pars_xy(0,j,i)
    1917                    surf_lsm_h%albedo(ind_wat_win,m)   = albedo_pars_f%pars_xy(0,j,i)
     1917                   surf_lsm_h%albedo(m,ind_veg_wall)  = albedo_pars_f%pars_xy(0,j,i)
     1918                   surf_lsm_h%albedo(m,ind_pav_green) = albedo_pars_f%pars_xy(0,j,i)
     1919                   surf_lsm_h%albedo(m,ind_wat_win)   = albedo_pars_f%pars_xy(0,j,i)
    19181920                ENDIF
    19191921             ENDDO
     
    19221924                j = surf_usm_h%j(m)
    19231925                IF ( albedo_pars_f%pars_xy(0,j,i) /= albedo_pars_f%fill )  THEN
    1924                    surf_usm_h%albedo(ind_veg_wall,m)  = albedo_pars_f%pars_xy(0,j,i)
    1925                    surf_usm_h%albedo(ind_pav_green,m) = albedo_pars_f%pars_xy(0,j,i)
    1926                    surf_usm_h%albedo(ind_wat_win,m)   = albedo_pars_f%pars_xy(0,j,i)
     1926                   surf_usm_h%albedo(m,ind_veg_wall)  = albedo_pars_f%pars_xy(0,j,i)
     1927                   surf_usm_h%albedo(m,ind_pav_green) = albedo_pars_f%pars_xy(0,j,i)
     1928                   surf_usm_h%albedo(m,ind_wat_win)   = albedo_pars_f%pars_xy(0,j,i)
    19271929                ENDIF
    19281930             ENDDO
     
    19371939                   j = surf_lsm_v(l)%j(m) + joff
    19381940                   IF ( albedo_pars_f%pars_xy(0,j,i) /= albedo_pars_f%fill )  THEN
    1939                       surf_lsm_v(l)%albedo(ind_veg_wall,m) = albedo_pars_f%pars_xy(0,j,i)
    1940                       surf_lsm_v(l)%albedo(ind_pav_green,m) = albedo_pars_f%pars_xy(0,j,i)
    1941                       surf_lsm_v(l)%albedo(ind_wat_win,m) = albedo_pars_f%pars_xy(0,j,i)
     1941                      surf_lsm_v(l)%albedo(m,ind_veg_wall) = albedo_pars_f%pars_xy(0,j,i)
     1942                      surf_lsm_v(l)%albedo(m,ind_pav_green) = albedo_pars_f%pars_xy(0,j,i)
     1943                      surf_lsm_v(l)%albedo(m,ind_wat_win) = albedo_pars_f%pars_xy(0,j,i)
    19421944                   ENDIF
    19431945                ENDDO
     
    19491951                   j = surf_usm_v(l)%j(m) + joff
    19501952                   IF ( albedo_pars_f%pars_xy(0,j,i) /= albedo_pars_f%fill )  THEN
    1951                       surf_usm_v(l)%albedo(ind_veg_wall,m) = albedo_pars_f%pars_xy(0,j,i)
    1952                       surf_usm_v(l)%albedo(ind_pav_green,m) = albedo_pars_f%pars_xy(0,j,i)
    1953                       surf_usm_v(l)%albedo(ind_wat_win,m) = albedo_pars_f%pars_xy(0,j,i)
     1953                      surf_usm_v(l)%albedo(m,ind_veg_wall) = albedo_pars_f%pars_xy(0,j,i)
     1954                      surf_usm_v(l)%albedo(m,ind_pav_green) = albedo_pars_f%pars_xy(0,j,i)
     1955                      surf_usm_v(l)%albedo(m,ind_wat_win) = albedo_pars_f%pars_xy(0,j,i)
    19541956                   ENDIF
    19551957                ENDDO
     
    19751977                      IF ( building_surface_pars_f%pars(ind_s_alb_b_wall,is) /=      &
    19761978                           building_surface_pars_f%fill )  THEN
    1977                          surf_usm_h%albedo(ind_veg_wall,m) =                         &
     1979                         surf_usm_h%albedo(m,ind_veg_wall) =                         &
    19781980                                  building_surface_pars_f%pars(ind_s_alb_b_wall,is)
    1979                          surf_usm_h%albedo_type(ind_veg_wall,m) = 0
     1981                         surf_usm_h%albedo_type(m,ind_veg_wall) = 0
    19801982                      ENDIF
    19811983
    19821984                      IF ( building_surface_pars_f%pars(ind_s_alb_b_win,is) /=       &
    19831985                           building_surface_pars_f%fill )  THEN
    1984                          surf_usm_h%albedo(ind_wat_win,m) =                          &
     1986                         surf_usm_h%albedo(m,ind_wat_win) =                          &
    19851987                                  building_surface_pars_f%pars(ind_s_alb_b_win,is)
    1986                          surf_usm_h%albedo_type(ind_wat_win,m) = 0
     1988                         surf_usm_h%albedo_type(m,ind_wat_win) = 0
    19871989                      ENDIF
    19881990
    19891991                      IF ( building_surface_pars_f%pars(ind_s_alb_b_green,is) /=     &
    19901992                           building_surface_pars_f%fill )  THEN
    1991                          surf_usm_h%albedo(ind_pav_green,m) =                        &
     1993                         surf_usm_h%albedo(m,ind_pav_green) =                        &
    19921994                                  building_surface_pars_f%pars(ind_s_alb_b_green,is)
    1993                          surf_usm_h%albedo_type(ind_pav_green,m) = 0
     1995                         surf_usm_h%albedo_type(m,ind_pav_green) = 0
    19941996                      ENDIF
    19951997
     
    20142016                         IF ( building_surface_pars_f%pars(ind_s_alb_b_wall,is) /=      &
    20152017                              building_surface_pars_f%fill )  THEN
    2016                             surf_usm_v(l)%albedo(ind_veg_wall,m) =                      &
     2018                            surf_usm_v(l)%albedo(m,ind_veg_wall) =                      &
    20172019                                     building_surface_pars_f%pars(ind_s_alb_b_wall,is)
    2018                             surf_usm_v(l)%albedo_type(ind_veg_wall,m) = 0
     2020                            surf_usm_v(l)%albedo_type(m,ind_veg_wall) = 0
    20192021                         ENDIF
    20202022
    20212023                         IF ( building_surface_pars_f%pars(ind_s_alb_b_win,is) /=       &
    20222024                              building_surface_pars_f%fill )  THEN
    2023                             surf_usm_v(l)%albedo(ind_wat_win,m) =                       &
     2025                            surf_usm_v(l)%albedo(m,ind_wat_win) =                       &
    20242026                                     building_surface_pars_f%pars(ind_s_alb_b_win,is)
    2025                             surf_usm_v(l)%albedo_type(ind_wat_win,m) = 0
     2027                            surf_usm_v(l)%albedo_type(m,ind_wat_win) = 0
    20262028                         ENDIF
    20272029
    20282030                         IF ( building_surface_pars_f%pars(ind_s_alb_b_green,is) /=     &
    20292031                              building_surface_pars_f%fill )  THEN
    2030                             surf_usm_v(l)%albedo(ind_pav_green,m) =                     &
     2032                            surf_usm_v(l)%albedo(m,ind_pav_green) =                     &
    20312033                                     building_surface_pars_f%pars(ind_s_alb_b_green,is)
    2032                             surf_usm_v(l)%albedo_type(ind_pav_green,m) = 0
     2034                            surf_usm_v(l)%albedo_type(m,ind_pav_green) = 0
    20332035                         ENDIF
    20342036
     
    20472049!--       for wall/green/window (USM) or vegetation/pavement/water surfaces
    20482050!--       (LSM).
    2049           ALLOCATE ( surf_lsm_h%aldif(0:2,1:surf_lsm_h%ns)       )
    2050           ALLOCATE ( surf_lsm_h%aldir(0:2,1:surf_lsm_h%ns)       )
    2051           ALLOCATE ( surf_lsm_h%asdif(0:2,1:surf_lsm_h%ns)       )
    2052           ALLOCATE ( surf_lsm_h%asdir(0:2,1:surf_lsm_h%ns)       )
    2053           ALLOCATE ( surf_lsm_h%rrtm_aldif(0:2,1:surf_lsm_h%ns)  )
    2054           ALLOCATE ( surf_lsm_h%rrtm_aldir(0:2,1:surf_lsm_h%ns)  )
    2055           ALLOCATE ( surf_lsm_h%rrtm_asdif(0:2,1:surf_lsm_h%ns)  )
    2056           ALLOCATE ( surf_lsm_h%rrtm_asdir(0:2,1:surf_lsm_h%ns)  )
    2057 
    2058           ALLOCATE ( surf_usm_h%aldif(0:2,1:surf_usm_h%ns)       )
    2059           ALLOCATE ( surf_usm_h%aldir(0:2,1:surf_usm_h%ns)       )
    2060           ALLOCATE ( surf_usm_h%asdif(0:2,1:surf_usm_h%ns)       )
    2061           ALLOCATE ( surf_usm_h%asdir(0:2,1:surf_usm_h%ns)       )
    2062           ALLOCATE ( surf_usm_h%rrtm_aldif(0:2,1:surf_usm_h%ns)  )
    2063           ALLOCATE ( surf_usm_h%rrtm_aldir(0:2,1:surf_usm_h%ns)  )
    2064           ALLOCATE ( surf_usm_h%rrtm_asdif(0:2,1:surf_usm_h%ns)  )
    2065           ALLOCATE ( surf_usm_h%rrtm_asdir(0:2,1:surf_usm_h%ns)  )
     2051          ALLOCATE ( surf_lsm_h%aldif(1:surf_lsm_h%ns,0:2)       )
     2052          ALLOCATE ( surf_lsm_h%aldir(1:surf_lsm_h%ns,0:2)       )
     2053          ALLOCATE ( surf_lsm_h%asdif(1:surf_lsm_h%ns,0:2)       )
     2054          ALLOCATE ( surf_lsm_h%asdir(1:surf_lsm_h%ns,0:2)       )
     2055          ALLOCATE ( surf_lsm_h%rrtm_aldif(1:surf_lsm_h%ns,0:2)  )
     2056          ALLOCATE ( surf_lsm_h%rrtm_aldir(1:surf_lsm_h%ns,0:2)  )
     2057          ALLOCATE ( surf_lsm_h%rrtm_asdif(1:surf_lsm_h%ns,0:2)  )
     2058          ALLOCATE ( surf_lsm_h%rrtm_asdir(1:surf_lsm_h%ns,0:2)  )
     2059
     2060          ALLOCATE ( surf_usm_h%aldif(1:surf_usm_h%ns,0:2)       )
     2061          ALLOCATE ( surf_usm_h%aldir(1:surf_usm_h%ns,0:2)       )
     2062          ALLOCATE ( surf_usm_h%asdif(1:surf_usm_h%ns,0:2)       )
     2063          ALLOCATE ( surf_usm_h%asdir(1:surf_usm_h%ns,0:2)       )
     2064          ALLOCATE ( surf_usm_h%rrtm_aldif(1:surf_usm_h%ns,0:2)  )
     2065          ALLOCATE ( surf_usm_h%rrtm_aldir(1:surf_usm_h%ns,0:2)  )
     2066          ALLOCATE ( surf_usm_h%rrtm_asdif(1:surf_usm_h%ns,0:2)  )
     2067          ALLOCATE ( surf_usm_h%rrtm_asdir(1:surf_usm_h%ns,0:2)  )
    20662068
    20672069!
     
    20692071!--       implementations)
    20702072          IF ( .NOT. ALLOCATED(surf_lsm_h%albedo) )                            &
    2071              ALLOCATE( surf_lsm_h%albedo(0:2,1:surf_lsm_h%ns)     )
     2073             ALLOCATE( surf_lsm_h%albedo(1:surf_lsm_h%ns,0:2)     )
    20722074          IF ( .NOT. ALLOCATED(surf_usm_h%albedo) )                            &
    2073              ALLOCATE( surf_usm_h%albedo(0:2,1:surf_usm_h%ns)     )
     2075             ALLOCATE( surf_usm_h%albedo(1:surf_usm_h%ns,0:2)     )
    20742076
    20752077!
     
    20772079          DO  l = 0, 3
    20782080
    2079              ALLOCATE ( surf_lsm_v(l)%aldif(0:2,1:surf_lsm_v(l)%ns)      )
    2080              ALLOCATE ( surf_lsm_v(l)%aldir(0:2,1:surf_lsm_v(l)%ns)      )
    2081              ALLOCATE ( surf_lsm_v(l)%asdif(0:2,1:surf_lsm_v(l)%ns)      )
    2082              ALLOCATE ( surf_lsm_v(l)%asdir(0:2,1:surf_lsm_v(l)%ns)      )
    2083 
    2084              ALLOCATE ( surf_lsm_v(l)%rrtm_aldif(0:2,1:surf_lsm_v(l)%ns) )
    2085              ALLOCATE ( surf_lsm_v(l)%rrtm_aldir(0:2,1:surf_lsm_v(l)%ns) )
    2086              ALLOCATE ( surf_lsm_v(l)%rrtm_asdif(0:2,1:surf_lsm_v(l)%ns) )
    2087              ALLOCATE ( surf_lsm_v(l)%rrtm_asdir(0:2,1:surf_lsm_v(l)%ns) )
    2088 
    2089              ALLOCATE ( surf_usm_v(l)%aldif(0:2,1:surf_usm_v(l)%ns)      )
    2090              ALLOCATE ( surf_usm_v(l)%aldir(0:2,1:surf_usm_v(l)%ns)      )
    2091              ALLOCATE ( surf_usm_v(l)%asdif(0:2,1:surf_usm_v(l)%ns)      )
    2092              ALLOCATE ( surf_usm_v(l)%asdir(0:2,1:surf_usm_v(l)%ns)      )
    2093 
    2094              ALLOCATE ( surf_usm_v(l)%rrtm_aldif(0:2,1:surf_usm_v(l)%ns) )
    2095              ALLOCATE ( surf_usm_v(l)%rrtm_aldir(0:2,1:surf_usm_v(l)%ns) )
    2096              ALLOCATE ( surf_usm_v(l)%rrtm_asdif(0:2,1:surf_usm_v(l)%ns) )
    2097              ALLOCATE ( surf_usm_v(l)%rrtm_asdir(0:2,1:surf_usm_v(l)%ns) )
     2081             ALLOCATE ( surf_lsm_v(l)%aldif(1:surf_lsm_v(l)%ns,0:2)      )
     2082             ALLOCATE ( surf_lsm_v(l)%aldir(1:surf_lsm_v(l)%ns,0:2)      )
     2083             ALLOCATE ( surf_lsm_v(l)%asdif(1:surf_lsm_v(l)%ns,0:2)      )
     2084             ALLOCATE ( surf_lsm_v(l)%asdir(1:surf_lsm_v(l)%ns,0:2)      )
     2085
     2086             ALLOCATE ( surf_lsm_v(l)%rrtm_aldif(1:surf_lsm_v(l)%ns,0:2) )
     2087             ALLOCATE ( surf_lsm_v(l)%rrtm_aldir(1:surf_lsm_v(l)%ns,0:2) )
     2088             ALLOCATE ( surf_lsm_v(l)%rrtm_asdif(1:surf_lsm_v(l)%ns,0:2) )
     2089             ALLOCATE ( surf_lsm_v(l)%rrtm_asdir(1:surf_lsm_v(l)%ns,0:2) )
     2090
     2091             ALLOCATE ( surf_usm_v(l)%aldif(1:surf_usm_v(l)%ns,0:2)      )
     2092             ALLOCATE ( surf_usm_v(l)%aldir(1:surf_usm_v(l)%ns,0:2)      )
     2093             ALLOCATE ( surf_usm_v(l)%asdif(1:surf_usm_v(l)%ns,0:2)      )
     2094             ALLOCATE ( surf_usm_v(l)%asdir(1:surf_usm_v(l)%ns,0:2)      )
     2095
     2096             ALLOCATE ( surf_usm_v(l)%rrtm_aldif(1:surf_usm_v(l)%ns,0:2) )
     2097             ALLOCATE ( surf_usm_v(l)%rrtm_aldir(1:surf_usm_v(l)%ns,0:2) )
     2098             ALLOCATE ( surf_usm_v(l)%rrtm_asdif(1:surf_usm_v(l)%ns,0:2) )
     2099             ALLOCATE ( surf_usm_v(l)%rrtm_asdir(1:surf_usm_v(l)%ns,0:2) )
    20982100!
    20992101!--          Allocate broadband albedo (temporary for the current radiation
    21002102!--          implementations)
    21012103             IF ( .NOT. ALLOCATED( surf_lsm_v(l)%albedo ) )                    &
    2102                 ALLOCATE( surf_lsm_v(l)%albedo(0:2,1:surf_lsm_v(l)%ns) )
     2104                ALLOCATE( surf_lsm_v(l)%albedo(1:surf_lsm_v(l)%ns,0:2) )
    21032105             IF ( .NOT. ALLOCATED( surf_usm_v(l)%albedo ) )                    &
    2104                 ALLOCATE( surf_usm_v(l)%albedo(0:2,1:surf_usm_v(l)%ns) )
     2106                ALLOCATE( surf_usm_v(l)%albedo(1:surf_usm_v(l)%ns,0:2) )
    21052107
    21062108          ENDDO
     
    21652167!--          Spectral albedos for vegetation/pavement/water surfaces
    21662168             DO  ind_type = 0, 2
    2167                 IF ( surf_lsm_h%albedo_type(ind_type,m) /= 0 )  THEN
    2168                    surf_lsm_h%aldif(ind_type,m) =                              &
    2169                                albedo_pars(1,surf_lsm_h%albedo_type(ind_type,m))
    2170                    surf_lsm_h%asdif(ind_type,m) =                              &
    2171                                albedo_pars(2,surf_lsm_h%albedo_type(ind_type,m))
    2172                    surf_lsm_h%aldir(ind_type,m) =                              &
    2173                                albedo_pars(1,surf_lsm_h%albedo_type(ind_type,m))
    2174                    surf_lsm_h%asdir(ind_type,m) =                              &
    2175                                albedo_pars(2,surf_lsm_h%albedo_type(ind_type,m))
    2176                    surf_lsm_h%albedo(ind_type,m) =                             &
    2177                                albedo_pars(0,surf_lsm_h%albedo_type(ind_type,m))
     2169                IF ( surf_lsm_h%albedo_type(m,ind_type) /= 0 )  THEN
     2170                   surf_lsm_h%aldif(m,ind_type) =                              &
     2171                               albedo_pars(1,surf_lsm_h%albedo_type(m,ind_type))
     2172                   surf_lsm_h%asdif(m,ind_type) =                              &
     2173                               albedo_pars(2,surf_lsm_h%albedo_type(m,ind_type))
     2174                   surf_lsm_h%aldir(m,ind_type) =                              &
     2175                               albedo_pars(1,surf_lsm_h%albedo_type(m,ind_type))
     2176                   surf_lsm_h%asdir(m,ind_type) =                              &
     2177                               albedo_pars(2,surf_lsm_h%albedo_type(m,ind_type))
     2178                   surf_lsm_h%albedo(m,ind_type) =                             &
     2179                               albedo_pars(0,surf_lsm_h%albedo_type(m,ind_type))
    21782180                ENDIF
    21792181             ENDDO
     
    21882190!--             Spectral albedos for wall/green/window surfaces
    21892191                DO  ind_type = 0, 2
    2190                    IF ( surf_usm_h%albedo_type(ind_type,m) /= 0 )  THEN
    2191                       surf_usm_h%aldif(ind_type,m) =                           &
    2192                                albedo_pars(1,surf_usm_h%albedo_type(ind_type,m))
    2193                       surf_usm_h%asdif(ind_type,m) =                           &
    2194                                albedo_pars(2,surf_usm_h%albedo_type(ind_type,m))
    2195                       surf_usm_h%aldir(ind_type,m) =                           &
    2196                                albedo_pars(1,surf_usm_h%albedo_type(ind_type,m))
    2197                       surf_usm_h%asdir(ind_type,m) =                           &
    2198                                albedo_pars(2,surf_usm_h%albedo_type(ind_type,m))
    2199                       surf_usm_h%albedo(ind_type,m) =                          &
    2200                                albedo_pars(0,surf_usm_h%albedo_type(ind_type,m))
     2192                   IF ( surf_usm_h%albedo_type(m,ind_type) /= 0 )  THEN
     2193                      surf_usm_h%aldif(m,ind_type) =                           &
     2194                               albedo_pars(1,surf_usm_h%albedo_type(m,ind_type))
     2195                      surf_usm_h%asdif(m,ind_type) =                           &
     2196                               albedo_pars(2,surf_usm_h%albedo_type(m,ind_type))
     2197                      surf_usm_h%aldir(m,ind_type) =                           &
     2198                               albedo_pars(1,surf_usm_h%albedo_type(m,ind_type))
     2199                      surf_usm_h%asdir(m,ind_type) =                           &
     2200                               albedo_pars(2,surf_usm_h%albedo_type(m,ind_type))
     2201                      surf_usm_h%albedo(m,ind_type) =                          &
     2202                               albedo_pars(0,surf_usm_h%albedo_type(m,ind_type))
    22012203                   ENDIF
    22022204                ENDDO
     
    22112213!--             Spectral albedos for vegetation/pavement/water surfaces
    22122214                DO  ind_type = 0, 2
    2213                    IF ( surf_lsm_v(l)%albedo_type(ind_type,m) /= 0 )  THEN
    2214                       surf_lsm_v(l)%aldif(ind_type,m) =                        &
    2215                             albedo_pars(1,surf_lsm_v(l)%albedo_type(ind_type,m))
    2216                       surf_lsm_v(l)%asdif(ind_type,m) =                        &
    2217                             albedo_pars(2,surf_lsm_v(l)%albedo_type(ind_type,m))
    2218                       surf_lsm_v(l)%aldir(ind_type,m) =                        &
    2219                             albedo_pars(1,surf_lsm_v(l)%albedo_type(ind_type,m))
    2220                       surf_lsm_v(l)%asdir(ind_type,m) =                        &
    2221                             albedo_pars(2,surf_lsm_v(l)%albedo_type(ind_type,m))
    2222                       surf_lsm_v(l)%albedo(ind_type,m) =                       &
    2223                             albedo_pars(0,surf_lsm_v(l)%albedo_type(ind_type,m))
     2215                   IF ( surf_lsm_v(l)%albedo_type(m,ind_type) /= 0 )  THEN
     2216                      surf_lsm_v(l)%aldif(m,ind_type) =                        &
     2217                            albedo_pars(1,surf_lsm_v(l)%albedo_type(m,ind_type))
     2218                      surf_lsm_v(l)%asdif(m,ind_type) =                        &
     2219                            albedo_pars(2,surf_lsm_v(l)%albedo_type(m,ind_type))
     2220                      surf_lsm_v(l)%aldir(m,ind_type) =                        &
     2221                            albedo_pars(1,surf_lsm_v(l)%albedo_type(m,ind_type))
     2222                      surf_lsm_v(l)%asdir(m,ind_type) =                        &
     2223                            albedo_pars(2,surf_lsm_v(l)%albedo_type(m,ind_type))
     2224                      surf_lsm_v(l)%albedo(m,ind_type) =                       &
     2225                            albedo_pars(0,surf_lsm_v(l)%albedo_type(m,ind_type))
    22242226                   ENDIF
    22252227                ENDDO
     
    22332235!--                Spectral albedos for wall/green/window surfaces
    22342236                   DO  ind_type = 0, 2
    2235                       IF ( surf_usm_v(l)%albedo_type(ind_type,m) /= 0 )  THEN
    2236                          surf_usm_v(l)%aldif(ind_type,m) =                     &
    2237                             albedo_pars(1,surf_usm_v(l)%albedo_type(ind_type,m))
    2238                          surf_usm_v(l)%asdif(ind_type,m) =                     &
    2239                             albedo_pars(2,surf_usm_v(l)%albedo_type(ind_type,m))
    2240                          surf_usm_v(l)%aldir(ind_type,m) =                     &
    2241                             albedo_pars(1,surf_usm_v(l)%albedo_type(ind_type,m))
    2242                          surf_usm_v(l)%asdir(ind_type,m) =                     &
    2243                             albedo_pars(2,surf_usm_v(l)%albedo_type(ind_type,m))
    2244                          surf_usm_v(l)%albedo(ind_type,m) =                    &
    2245                             albedo_pars(0,surf_usm_v(l)%albedo_type(ind_type,m))
     2237                      IF ( surf_usm_v(l)%albedo_type(m,ind_type) /= 0 )  THEN
     2238                         surf_usm_v(l)%aldif(m,ind_type) =                     &
     2239                            albedo_pars(1,surf_usm_v(l)%albedo_type(m,ind_type))
     2240                         surf_usm_v(l)%asdif(m,ind_type) =                     &
     2241                            albedo_pars(2,surf_usm_v(l)%albedo_type(m,ind_type))
     2242                         surf_usm_v(l)%aldir(m,ind_type) =                     &
     2243                            albedo_pars(1,surf_usm_v(l)%albedo_type(m,ind_type))
     2244                         surf_usm_v(l)%asdir(m,ind_type) =                     &
     2245                            albedo_pars(2,surf_usm_v(l)%albedo_type(m,ind_type))
     2246                         surf_usm_v(l)%albedo(m,ind_type) =                    &
     2247                            albedo_pars(0,surf_usm_v(l)%albedo_type(m,ind_type))
    22462248                      ENDIF
    22472249                   ENDDO
     
    22632265                DO  ind_type = 0, 2
    22642266                   IF ( albedo_pars_f%pars_xy(0,j,i) /= albedo_pars_f%fill )   &
    2265                       surf_lsm_h%albedo(ind_type,m) =                          &
     2267                      surf_lsm_h%albedo(m,ind_type) =                          &
    22662268                                             albedo_pars_f%pars_xy(0,j,i)     
    22672269                   IF ( albedo_pars_f%pars_xy(1,j,i) /= albedo_pars_f%fill )   &
    2268                       surf_lsm_h%aldir(ind_type,m) =                           &
     2270                      surf_lsm_h%aldir(m,ind_type) =                           &
    22692271                                             albedo_pars_f%pars_xy(1,j,i)     
    22702272                   IF ( albedo_pars_f%pars_xy(1,j,i) /= albedo_pars_f%fill )   &
    2271                       surf_lsm_h%aldif(ind_type,m) =                           &
     2273                      surf_lsm_h%aldif(m,ind_type) =                           &
    22722274                                             albedo_pars_f%pars_xy(1,j,i)     
    22732275                   IF ( albedo_pars_f%pars_xy(2,j,i) /= albedo_pars_f%fill )   &
    2274                       surf_lsm_h%asdir(ind_type,m) =                           &
     2276                      surf_lsm_h%asdir(m,ind_type) =                           &
    22752277                                             albedo_pars_f%pars_xy(2,j,i)     
    22762278                   IF ( albedo_pars_f%pars_xy(2,j,i) /= albedo_pars_f%fill )   &
    2277                       surf_lsm_h%asdif(ind_type,m) =                           &
     2279                      surf_lsm_h%asdif(m,ind_type) =                           &
    22782280                                             albedo_pars_f%pars_xy(2,j,i)
    22792281                ENDDO
     
    22902292                   DO  ind_type = 0, 2
    22912293                      IF ( albedo_pars_f%pars_xy(0,j,i) /= albedo_pars_f%fill )&
    2292                          surf_usm_h%albedo(ind_type,m) =                       &
     2294                         surf_usm_h%albedo(m,ind_type) =                       &
    22932295                                             albedo_pars_f%pars_xy(0,j,i)
    22942296                   ENDDO
     
    22962298!--                Spectral albedos especially for building wall surfaces
    22972299                   IF ( albedo_pars_f%pars_xy(1,j,i) /= albedo_pars_f%fill )  THEN
    2298                       surf_usm_h%aldir(ind_veg_wall,m) =                       &
     2300                      surf_usm_h%aldir(m,ind_veg_wall) =                       &
    22992301                                                albedo_pars_f%pars_xy(1,j,i)
    2300                       surf_usm_h%aldif(ind_veg_wall,m) =                       &
     2302                      surf_usm_h%aldif(m,ind_veg_wall) =                       &
    23012303                                                albedo_pars_f%pars_xy(1,j,i)
    23022304                   ENDIF
    23032305                   IF ( albedo_pars_f%pars_xy(2,j,i) /= albedo_pars_f%fill )  THEN
    2304                       surf_usm_h%asdir(ind_veg_wall,m) =                       &
     2306                      surf_usm_h%asdir(m,ind_veg_wall) =                       &
    23052307                                                albedo_pars_f%pars_xy(2,j,i)
    2306                       surf_usm_h%asdif(ind_veg_wall,m) =                       &
     2308                      surf_usm_h%asdif(m,ind_veg_wall) =                       &
    23072309                                                albedo_pars_f%pars_xy(2,j,i)
    23082310                   ENDIF
     
    23102312!--                Spectral albedos especially for building green surfaces
    23112313                   IF ( albedo_pars_f%pars_xy(3,j,i) /= albedo_pars_f%fill )  THEN
    2312                       surf_usm_h%aldir(ind_pav_green,m) =                      &
     2314                      surf_usm_h%aldir(m,ind_pav_green) =                      &
    23132315                                                albedo_pars_f%pars_xy(3,j,i)
    2314                       surf_usm_h%aldif(ind_pav_green,m) =                      &
     2316                      surf_usm_h%aldif(m,ind_pav_green) =                      &
    23152317                                                albedo_pars_f%pars_xy(3,j,i)
    23162318                   ENDIF
    23172319                   IF ( albedo_pars_f%pars_xy(4,j,i) /= albedo_pars_f%fill )  THEN
    2318                       surf_usm_h%asdir(ind_pav_green,m) =                      &
     2320                      surf_usm_h%asdir(m,ind_pav_green) =                      &
    23192321                                                albedo_pars_f%pars_xy(4,j,i)
    2320                       surf_usm_h%asdif(ind_pav_green,m) =                      &
     2322                      surf_usm_h%asdif(m,ind_pav_green) =                      &
    23212323                                                albedo_pars_f%pars_xy(4,j,i)
    23222324                   ENDIF
     
    23242326!--                Spectral albedos especially for building window surfaces
    23252327                   IF ( albedo_pars_f%pars_xy(5,j,i) /= albedo_pars_f%fill )  THEN
    2326                       surf_usm_h%aldir(ind_wat_win,m) =                        &
     2328                      surf_usm_h%aldir(m,ind_wat_win) =                        &
    23272329                                                albedo_pars_f%pars_xy(5,j,i)
    2328                       surf_usm_h%aldif(ind_wat_win,m) =                        &
     2330                      surf_usm_h%aldif(m,ind_wat_win) =                        &
    23292331                                                albedo_pars_f%pars_xy(5,j,i)
    23302332                   ENDIF
    23312333                   IF ( albedo_pars_f%pars_xy(6,j,i) /= albedo_pars_f%fill )  THEN
    2332                       surf_usm_h%asdir(ind_wat_win,m) =                        &
     2334                      surf_usm_h%asdir(m,ind_wat_win) =                        &
    23332335                                                albedo_pars_f%pars_xy(6,j,i)
    2334                       surf_usm_h%asdif(ind_wat_win,m) =                        &
     2336                      surf_usm_h%asdif(m,ind_wat_win) =                        &
    23352337                                                albedo_pars_f%pars_xy(6,j,i)
    23362338                   ENDIF
     
    23522354                      IF ( albedo_pars_f%pars_xy(0,j+joff,i+ioff) /=           &
    23532355                           albedo_pars_f%fill )                                &
    2354                          surf_lsm_v(l)%albedo(ind_type,m) =                    &
     2356                         surf_lsm_v(l)%albedo(m,ind_type) =                    &
    23552357                                       albedo_pars_f%pars_xy(0,j+joff,i+ioff)
    23562358                      IF ( albedo_pars_f%pars_xy(1,j+joff,i+ioff) /=           &
    23572359                           albedo_pars_f%fill )                                &
    2358                          surf_lsm_v(l)%aldir(ind_type,m) =                     &
     2360                         surf_lsm_v(l)%aldir(m,ind_type) =                     &
    23592361                                       albedo_pars_f%pars_xy(1,j+joff,i+ioff)
    23602362                      IF ( albedo_pars_f%pars_xy(1,j+joff,i+ioff) /=           &
    23612363                           albedo_pars_f%fill )                                &
    2362                          surf_lsm_v(l)%aldif(ind_type,m) =                     &
     2364                         surf_lsm_v(l)%aldif(m,ind_type) =                     &
    23632365                                       albedo_pars_f%pars_xy(1,j+joff,i+ioff)
    23642366                      IF ( albedo_pars_f%pars_xy(2,j+joff,i+ioff) /=           &
    23652367                           albedo_pars_f%fill )                                &
    2366                          surf_lsm_v(l)%asdir(ind_type,m) =                     &
     2368                         surf_lsm_v(l)%asdir(m,ind_type) =                     &
    23672369                                       albedo_pars_f%pars_xy(2,j+joff,i+ioff)
    23682370                      IF ( albedo_pars_f%pars_xy(2,j+joff,i+ioff) /=           &
    23692371                           albedo_pars_f%fill )                                &
    2370                          surf_lsm_v(l)%asdif(ind_type,m) =                     &
     2372                         surf_lsm_v(l)%asdif(m,ind_type) =                     &
    23712373                                       albedo_pars_f%pars_xy(2,j+joff,i+ioff)
    23722374                   ENDDO
     
    23872389                         IF ( albedo_pars_f%pars_xy(0,j+joff,i+ioff) /=        &
    23882390                              albedo_pars_f%fill )                             &
    2389                             surf_usm_v(l)%albedo(ind_type,m) =                 &
     2391                            surf_usm_v(l)%albedo(m,ind_type) =                 &
    23902392                                          albedo_pars_f%pars_xy(0,j+joff,i+ioff)
    23912393                      ENDDO
     
    23942396                      IF ( albedo_pars_f%pars_xy(1,j+joff,i+ioff) /=           &
    23952397                           albedo_pars_f%fill )  THEN
    2396                          surf_usm_v(l)%aldir(ind_veg_wall,m) =                 &
     2398                         surf_usm_v(l)%aldir(m,ind_veg_wall) =                 &
    23972399                                         albedo_pars_f%pars_xy(1,j+joff,i+ioff)
    2398                          surf_usm_v(l)%aldif(ind_veg_wall,m) =                 &
     2400                         surf_usm_v(l)%aldif(m,ind_veg_wall) =                 &
    23992401                                         albedo_pars_f%pars_xy(1,j+joff,i+ioff)
    24002402                      ENDIF
    24012403                      IF ( albedo_pars_f%pars_xy(2,j+joff,i+ioff) /=           &
    24022404                           albedo_pars_f%fill )  THEN
    2403                          surf_usm_v(l)%asdir(ind_veg_wall,m) =                 &
     2405                         surf_usm_v(l)%asdir(m,ind_veg_wall) =                 &
    24042406                                         albedo_pars_f%pars_xy(2,j+joff,i+ioff)
    2405                          surf_usm_v(l)%asdif(ind_veg_wall,m) =                 &
     2407                         surf_usm_v(l)%asdif(m,ind_veg_wall) =                 &
    24062408                                         albedo_pars_f%pars_xy(2,j+joff,i+ioff)
    24072409                      ENDIF
     
    24102412                      IF ( albedo_pars_f%pars_xy(3,j+joff,i+ioff) /=           &
    24112413                           albedo_pars_f%fill )  THEN
    2412                          surf_usm_v(l)%aldir(ind_pav_green,m) =                &
     2414                         surf_usm_v(l)%aldir(m,ind_pav_green) =                &
    24132415                                         albedo_pars_f%pars_xy(3,j+joff,i+ioff)
    2414                          surf_usm_v(l)%aldif(ind_pav_green,m) =                &
     2416                         surf_usm_v(l)%aldif(m,ind_pav_green) =                &
    24152417                                         albedo_pars_f%pars_xy(3,j+joff,i+ioff)
    24162418                      ENDIF
    24172419                      IF ( albedo_pars_f%pars_xy(4,j+joff,i+ioff) /=           &
    24182420                           albedo_pars_f%fill )  THEN
    2419                          surf_usm_v(l)%asdir(ind_pav_green,m) =                &
     2421                         surf_usm_v(l)%asdir(m,ind_pav_green) =                &
    24202422                                         albedo_pars_f%pars_xy(4,j+joff,i+ioff)
    2421                          surf_usm_v(l)%asdif(ind_pav_green,m) =                &
     2423                         surf_usm_v(l)%asdif(m,ind_pav_green) =                &
    24222424                                         albedo_pars_f%pars_xy(4,j+joff,i+ioff)
    24232425                      ENDIF
     
    24262428                      IF ( albedo_pars_f%pars_xy(5,j+joff,i+ioff) /=           &
    24272429                           albedo_pars_f%fill )  THEN
    2428                          surf_usm_v(l)%aldir(ind_wat_win,m) =                  &
     2430                         surf_usm_v(l)%aldir(m,ind_wat_win) =                  &
    24292431                                         albedo_pars_f%pars_xy(5,j+joff,i+ioff)
    2430                          surf_usm_v(l)%aldif(ind_wat_win,m) =                  &
     2432                         surf_usm_v(l)%aldif(m,ind_wat_win) =                  &
    24312433                                         albedo_pars_f%pars_xy(5,j+joff,i+ioff)
    24322434                      ENDIF
    24332435                      IF ( albedo_pars_f%pars_xy(6,j+joff,i+ioff) /=           &
    24342436                           albedo_pars_f%fill )  THEN
    2435                          surf_usm_v(l)%asdir(ind_wat_win,m) =                  &
     2437                         surf_usm_v(l)%asdir(m,ind_wat_win) =                  &
    24362438                                         albedo_pars_f%pars_xy(6,j+joff,i+ioff)
    2437                          surf_usm_v(l)%asdif(ind_wat_win,m) =                  &
     2439                         surf_usm_v(l)%asdif(m,ind_wat_win) =                  &
    24382440                                         albedo_pars_f%pars_xy(6,j+joff,i+ioff)
    24392441                      ENDIF
     
    24612463                      IF ( building_surface_pars_f%pars(ind_s_alb_b_wall,is) /=      &
    24622464                           building_surface_pars_f%fill )  THEN
    2463                          surf_usm_h%albedo(ind_veg_wall,m) =                         &
     2465                         surf_usm_h%albedo(m,ind_veg_wall) =                         &
    24642466                                  building_surface_pars_f%pars(ind_s_alb_b_wall,is)
    2465                          surf_usm_h%albedo_type(ind_veg_wall,m) = 0
     2467                         surf_usm_h%albedo_type(m,ind_veg_wall) = 0
    24662468                      ENDIF
    24672469
    24682470                      IF ( building_surface_pars_f%pars(ind_s_alb_l_wall,is) /=      &
    24692471                           building_surface_pars_f%fill )  THEN
    2470                          surf_usm_h%aldir(ind_veg_wall,m) =                          &
     2472                         surf_usm_h%aldir(m,ind_veg_wall) =                          &
    24712473                                  building_surface_pars_f%pars(ind_s_alb_l_wall,is)
    2472                          surf_usm_h%aldif(ind_veg_wall,m) =                          &
     2474                         surf_usm_h%aldif(m,ind_veg_wall) =                          &
    24732475                                  building_surface_pars_f%pars(ind_s_alb_l_wall,is)
    2474                          surf_usm_h%albedo_type(ind_veg_wall,m) = 0
     2476                         surf_usm_h%albedo_type(m,ind_veg_wall) = 0
    24752477                      ENDIF
    24762478
    24772479                      IF ( building_surface_pars_f%pars(ind_s_alb_s_wall,is) /=      &
    24782480                           building_surface_pars_f%fill )  THEN
    2479                          surf_usm_h%asdir(ind_veg_wall,m) =                          &
     2481                         surf_usm_h%asdir(m,ind_veg_wall) =                          &
    24802482                                  building_surface_pars_f%pars(ind_s_alb_s_wall,is)
    2481                          surf_usm_h%asdif(ind_veg_wall,m) =                          &
     2483                         surf_usm_h%asdif(m,ind_veg_wall) =                          &
    24822484                                  building_surface_pars_f%pars(ind_s_alb_s_wall,is)
    2483                          surf_usm_h%albedo_type(ind_veg_wall,m) = 0
     2485                         surf_usm_h%albedo_type(m,ind_veg_wall) = 0
    24842486                      ENDIF
    24852487
    24862488                      IF ( building_surface_pars_f%pars(ind_s_alb_b_win,is) /=       &
    24872489                           building_surface_pars_f%fill )  THEN
    2488                          surf_usm_h%albedo(ind_wat_win,m) =                          &
     2490                         surf_usm_h%albedo(m,ind_wat_win) =                          &
    24892491                                  building_surface_pars_f%pars(ind_s_alb_b_win,is)
    2490                          surf_usm_h%albedo_type(ind_wat_win,m) = 0
     2492                         surf_usm_h%albedo_type(m,ind_wat_win) = 0
    24912493                      ENDIF
    24922494
    24932495                      IF ( building_surface_pars_f%pars(ind_s_alb_l_win,is) /=       &
    24942496                           building_surface_pars_f%fill )  THEN
    2495                          surf_usm_h%aldir(ind_wat_win,m) =                           &
     2497                         surf_usm_h%aldir(m,ind_wat_win) =                           &
    24962498                                  building_surface_pars_f%pars(ind_s_alb_l_win,is)
    2497                          surf_usm_h%aldif(ind_wat_win,m) =                           &
     2499                         surf_usm_h%aldif(m,ind_wat_win) =                           &
    24982500                                  building_surface_pars_f%pars(ind_s_alb_l_win,is)
    2499                          surf_usm_h%albedo_type(ind_wat_win,m) = 0
     2501                         surf_usm_h%albedo_type(m,ind_wat_win) = 0
    25002502                      ENDIF
    25012503
    25022504                      IF ( building_surface_pars_f%pars(ind_s_alb_s_win,is) /=       &
    25032505                           building_surface_pars_f%fill )  THEN
    2504                          surf_usm_h%asdir(ind_wat_win,m) =                           &
     2506                         surf_usm_h%asdir(m,ind_wat_win) =                           &
    25052507                                  building_surface_pars_f%pars(ind_s_alb_s_win,is)
    2506                          surf_usm_h%asdif(ind_wat_win,m) =                           &
     2508                         surf_usm_h%asdif(m,ind_wat_win) =                           &
    25072509                                  building_surface_pars_f%pars(ind_s_alb_s_win,is)
    2508                          surf_usm_h%albedo_type(ind_wat_win,m) = 0
     2510                         surf_usm_h%albedo_type(m,ind_wat_win) = 0
    25092511                      ENDIF
    25102512
    25112513                      IF ( building_surface_pars_f%pars(ind_s_alb_b_green,is) /=     &
    25122514                           building_surface_pars_f%fill )  THEN
    2513                          surf_usm_h%albedo(ind_pav_green,m) =                        &
     2515                         surf_usm_h%albedo(m,ind_pav_green) =                        &
    25142516                                  building_surface_pars_f%pars(ind_s_alb_b_green,is)
    2515                          surf_usm_h%albedo_type(ind_pav_green,m) = 0
     2517                         surf_usm_h%albedo_type(m,ind_pav_green) = 0
    25162518                      ENDIF
    25172519
    25182520                      IF ( building_surface_pars_f%pars(ind_s_alb_l_green,is) /=     &
    25192521                           building_surface_pars_f%fill )  THEN
    2520                          surf_usm_h%aldir(ind_pav_green,m) =                         &
     2522                         surf_usm_h%aldir(m,ind_pav_green) =                         &
    25212523                                  building_surface_pars_f%pars(ind_s_alb_l_green,is)
    2522                          surf_usm_h%aldif(ind_pav_green,m) =                         &
     2524                         surf_usm_h%aldif(m,ind_pav_green) =                         &
    25232525                                  building_surface_pars_f%pars(ind_s_alb_l_green,is)
    2524                          surf_usm_h%albedo_type(ind_pav_green,m) = 0
     2526                         surf_usm_h%albedo_type(m,ind_pav_green) = 0
    25252527                      ENDIF
    25262528
    25272529                      IF ( building_surface_pars_f%pars(ind_s_alb_s_green,is) /=     &
    25282530                           building_surface_pars_f%fill )  THEN
    2529                          surf_usm_h%asdir(ind_pav_green,m) =                         &
     2531                         surf_usm_h%asdir(m,ind_pav_green) =                         &
    25302532                                  building_surface_pars_f%pars(ind_s_alb_s_green,is)
    2531                          surf_usm_h%asdif(ind_pav_green,m) =                         &
     2533                         surf_usm_h%asdif(m,ind_pav_green) =                         &
    25322534                                  building_surface_pars_f%pars(ind_s_alb_s_green,is)
    2533                          surf_usm_h%albedo_type(ind_pav_green,m) = 0
     2535                         surf_usm_h%albedo_type(m,ind_pav_green) = 0
    25342536                      ENDIF
    25352537
     
    25542556                         IF ( building_surface_pars_f%pars(ind_s_alb_b_wall,is) /=      &
    25552557                              building_surface_pars_f%fill )  THEN
    2556                             surf_usm_v(l)%albedo(ind_veg_wall,m) =                      &
     2558                            surf_usm_v(l)%albedo(m,ind_veg_wall) =                      &
    25572559                                     building_surface_pars_f%pars(ind_s_alb_b_wall,is)
    2558                             surf_usm_v(l)%albedo_type(ind_veg_wall,m) = 0
     2560                            surf_usm_v(l)%albedo_type(m,ind_veg_wall) = 0
    25592561                         ENDIF
    25602562
    25612563                         IF ( building_surface_pars_f%pars(ind_s_alb_l_wall,is) /=      &
    25622564                              building_surface_pars_f%fill )  THEN
    2563                             surf_usm_v(l)%aldir(ind_veg_wall,m) =                       &
     2565                            surf_usm_v(l)%aldir(m,ind_veg_wall) =                       &
    25642566                                     building_surface_pars_f%pars(ind_s_alb_l_wall,is)
    2565                             surf_usm_v(l)%aldif(ind_veg_wall,m) =                       &
     2567                            surf_usm_v(l)%aldif(m,ind_veg_wall) =                       &
    25662568                                     building_surface_pars_f%pars(ind_s_alb_l_wall,is)
    2567                             surf_usm_v(l)%albedo_type(ind_veg_wall,m) = 0
     2569                            surf_usm_v(l)%albedo_type(m,ind_veg_wall) = 0
    25682570                         ENDIF
    25692571
    25702572                         IF ( building_surface_pars_f%pars(ind_s_alb_s_wall,is) /=      &
    25712573                              building_surface_pars_f%fill )  THEN
    2572                             surf_usm_v(l)%asdir(ind_veg_wall,m) =                       &
     2574                            surf_usm_v(l)%asdir(m,ind_veg_wall) =                       &
    25732575                                     building_surface_pars_f%pars(ind_s_alb_s_wall,is)
    2574                             surf_usm_v(l)%asdif(ind_veg_wall,m) =                       &
     2576                            surf_usm_v(l)%asdif(m,ind_veg_wall) =                       &
    25752577                                     building_surface_pars_f%pars(ind_s_alb_s_wall,is)
    2576                             surf_usm_v(l)%albedo_type(ind_veg_wall,m) = 0
     2578                            surf_usm_v(l)%albedo_type(m,ind_veg_wall) = 0
    25772579                         ENDIF
    25782580
    25792581                         IF ( building_surface_pars_f%pars(ind_s_alb_b_win,is) /=       &
    25802582                              building_surface_pars_f%fill )  THEN
    2581                             surf_usm_v(l)%albedo(ind_wat_win,m) =                       &
     2583                            surf_usm_v(l)%albedo(m,ind_wat_win) =                       &
    25822584                                     building_surface_pars_f%pars(ind_s_alb_b_win,is)
    2583                             surf_usm_v(l)%albedo_type(ind_wat_win,m) = 0
     2585                            surf_usm_v(l)%albedo_type(m,ind_wat_win) = 0
    25842586                         ENDIF
    25852587
    25862588                         IF ( building_surface_pars_f%pars(ind_s_alb_l_win,is) /=       &
    25872589                              building_surface_pars_f%fill )  THEN
    2588                             surf_usm_v(l)%aldir(ind_wat_win,m) =                        &
     2590                            surf_usm_v(l)%aldir(m,ind_wat_win) =                        &
    25892591                                     building_surface_pars_f%pars(ind_s_alb_l_win,is)
    2590                             surf_usm_v(l)%aldif(ind_wat_win,m) =                        &
     2592                            surf_usm_v(l)%aldif(m,ind_wat_win) =                        &
    25912593                                     building_surface_pars_f%pars(ind_s_alb_l_win,is)
    2592                             surf_usm_v(l)%albedo_type(ind_wat_win,m) = 0
     2594                            surf_usm_v(l)%albedo_type(m,ind_wat_win) = 0
    25932595                         ENDIF
    25942596
    25952597                         IF ( building_surface_pars_f%pars(ind_s_alb_s_win,is) /=       &
    25962598                              building_surface_pars_f%fill )  THEN
    2597                             surf_usm_v(l)%asdir(ind_wat_win,m) =                        &
     2599                            surf_usm_v(l)%asdir(m,ind_wat_win) =                        &
    25982600                                     building_surface_pars_f%pars(ind_s_alb_s_win,is)
    2599                             surf_usm_v(l)%asdif(ind_wat_win,m) =                        &
     2601                            surf_usm_v(l)%asdif(m,ind_wat_win) =                        &
    26002602                                     building_surface_pars_f%pars(ind_s_alb_s_win,is)
    2601                             surf_usm_v(l)%albedo_type(ind_wat_win,m) = 0
     2603                            surf_usm_v(l)%albedo_type(m,ind_wat_win) = 0
    26022604                         ENDIF
    26032605
    26042606                         IF ( building_surface_pars_f%pars(ind_s_alb_b_green,is) /=     &
    26052607                              building_surface_pars_f%fill )  THEN
    2606                             surf_usm_v(l)%albedo(ind_pav_green,m) =                     &
     2608                            surf_usm_v(l)%albedo(m,ind_pav_green) =                     &
    26072609                                     building_surface_pars_f%pars(ind_s_alb_b_green,is)
    2608                             surf_usm_v(l)%albedo_type(ind_pav_green,m) = 0
     2610                            surf_usm_v(l)%albedo_type(m,ind_pav_green) = 0
    26092611                         ENDIF
    26102612
    26112613                         IF ( building_surface_pars_f%pars(ind_s_alb_l_green,is) /=     &
    26122614                              building_surface_pars_f%fill )  THEN
    2613                             surf_usm_v(l)%aldir(ind_pav_green,m) =                      &
     2615                            surf_usm_v(l)%aldir(m,ind_pav_green) =                      &
    26142616                                     building_surface_pars_f%pars(ind_s_alb_l_green,is)
    2615                             surf_usm_v(l)%aldif(ind_pav_green,m) =                      &
     2617                            surf_usm_v(l)%aldif(m,ind_pav_green) =                      &
    26162618                                     building_surface_pars_f%pars(ind_s_alb_l_green,is)
    2617                             surf_usm_v(l)%albedo_type(ind_pav_green,m) = 0
     2619                            surf_usm_v(l)%albedo_type(m,ind_pav_green) = 0
    26182620                         ENDIF
    26192621
    26202622                         IF ( building_surface_pars_f%pars(ind_s_alb_s_green,is) /=     &
    26212623                              building_surface_pars_f%fill )  THEN
    2622                             surf_usm_v(l)%asdir(ind_pav_green,m) =                      &
     2624                            surf_usm_v(l)%asdir(m,ind_pav_green) =                      &
    26232625                                     building_surface_pars_f%pars(ind_s_alb_s_green,is)
    2624                             surf_usm_v(l)%asdif(ind_pav_green,m) =                      &
     2626                            surf_usm_v(l)%asdif(m,ind_pav_green) =                      &
    26252627                                     building_surface_pars_f%pars(ind_s_alb_s_green,is)
    2626                             surf_usm_v(l)%albedo_type(ind_pav_green,m) = 0
     2628                            surf_usm_v(l)%albedo_type(m,ind_pav_green) = 0
    26272629                         ENDIF
    26282630
     
    32723274                   DO  m = 1, surf%ns
    32733275                      k = surf%k(m)
    3274                       surf%rad_sw_out(m) = ( surf%frac(ind_veg_wall,m)  *      &
    3275                                              surf%albedo(ind_veg_wall,m)       &
    3276                                            + surf%frac(ind_pav_green,m) *      &
    3277                                              surf%albedo(ind_pav_green,m)      &
    3278                                            + surf%frac(ind_wat_win,m)   *      &
    3279                                              surf%albedo(ind_wat_win,m) )      &
     3276                      surf%rad_sw_out(m) = ( surf%frac(m,ind_veg_wall)  *      &
     3277                                             surf%albedo(m,ind_veg_wall)       &
     3278                                           + surf%frac(m,ind_pav_green) *      &
     3279                                             surf%albedo(m,ind_pav_green)      &
     3280                                           + surf%frac(m,ind_wat_win)   *      &
     3281                                             surf%albedo(m,ind_wat_win) )      &
    32803282                                           * surf%rad_sw_in(m)
    32813283                   
    3282                       surf%rad_lw_out(m) = ( surf%frac(ind_veg_wall,m)  *      &
    3283                                              surf%emissivity(ind_veg_wall,m)   &
    3284                                            + surf%frac(ind_pav_green,m) *      &
    3285                                              surf%emissivity(ind_pav_green,m)  &
    3286                                            + surf%frac(ind_wat_win,m)   *      &
    3287                                              surf%emissivity(ind_wat_win,m)    &
     3284                      surf%rad_lw_out(m) = ( surf%frac(m,ind_veg_wall)  *      &
     3285                                             surf%emissivity(m,ind_veg_wall)   &
     3286                                           + surf%frac(m,ind_pav_green) *      &
     3287                                             surf%emissivity(m,ind_pav_green)  &
     3288                                           + surf%frac(m,ind_wat_win)   *      &
     3289                                             surf%emissivity(m,ind_wat_win)    &
    32883290                                           )                                   &
    32893291                                           * sigma_sb                          &
     
    32913293                   
    32923294                      surf%rad_lw_out_change_0(m) =                            &
    3293                                          ( surf%frac(ind_veg_wall,m)  *        &
    3294                                            surf%emissivity(ind_veg_wall,m)     &
    3295                                          + surf%frac(ind_pav_green,m) *        &
    3296                                            surf%emissivity(ind_pav_green,m)    &
    3297                                          + surf%frac(ind_wat_win,m)   *        &
    3298                                            surf%emissivity(ind_wat_win,m)      &
     3295                                         ( surf%frac(m,ind_veg_wall)  *        &
     3296                                           surf%emissivity(m,ind_veg_wall)     &
     3297                                         + surf%frac(m,ind_pav_green) *        &
     3298                                           surf%emissivity(im,ind_pav_green)    &
     3299                                         + surf%frac(m,ind_wat_win)   *        &
     3300                                           surf%emissivity(m,ind_wat_win)      &
    32993301                                         ) * 4.0_wp * sigma_sb                 &
    33003302                                         * ( surf%pt_surface(m) * exner(k) )**3
     
    33403342!
    33413343!--                Weighted average according to surface fraction.
    3342                    surf%rad_sw_out(m) = ( surf%frac(ind_veg_wall,m)  *         &
    3343                                           surf%albedo(ind_veg_wall,m)          &
    3344                                         + surf%frac(ind_pav_green,m) *         &
    3345                                           surf%albedo(ind_pav_green,m)         &
    3346                                         + surf%frac(ind_wat_win,m)   *         &
    3347                                           surf%albedo(ind_wat_win,m) )         &
     3344                   surf%rad_sw_out(m) = ( surf%frac(m,ind_veg_wall)  *         &
     3345                                          surf%albedo(m,ind_veg_wall)          &
     3346                                        + surf%frac(m,ind_pav_green) *         &
     3347                                          surf%albedo(m,ind_pav_green)         &
     3348                                        + surf%frac(m,ind_wat_win)   *         &
     3349                                          surf%albedo(m,ind_wat_win) )         &
    33483350                                        * surf%rad_sw_in(m)
    33493351
    3350                    surf%rad_lw_out(m) = ( surf%frac(ind_veg_wall,m)  *         &
    3351                                           surf%emissivity(ind_veg_wall,m)      &
    3352                                         + surf%frac(ind_pav_green,m) *         &
    3353                                           surf%emissivity(ind_pav_green,m)     &
    3354                                         + surf%frac(ind_wat_win,m)   *         &
    3355                                           surf%emissivity(ind_wat_win,m)       &
     3352                   surf%rad_lw_out(m) = ( surf%frac(m,ind_veg_wall)  *         &
     3353                                          surf%emissivity(m,ind_veg_wall)      &
     3354                                        + surf%frac(m,ind_pav_green) *         &
     3355                                          surf%emissivity(m,ind_pav_green)     &
     3356                                        + surf%frac(m,ind_wat_win)   *         &
     3357                                          surf%emissivity(m,ind_wat_win)       &
    33563358                                        )                                      &
    33573359                                        * sigma_sb                             &
     
    33593361
    33603362                   surf%rad_lw_out_change_0(m) =                               &
    3361                                       ( surf%frac(ind_veg_wall,m)  *           &
    3362                                         surf%emissivity(ind_veg_wall,m)        &
    3363                                       + surf%frac(ind_pav_green,m) *           &
    3364                                         surf%emissivity(ind_pav_green,m)       &
    3365                                       + surf%frac(ind_wat_win,m)   *           &
    3366                                         surf%emissivity(ind_wat_win,m)         &
     3363                                      ( surf%frac(m,ind_veg_wall)  *           &
     3364                                        surf%emissivity(m,ind_veg_wall)        &
     3365                                      + surf%frac(m,ind_pav_green) *           &
     3366                                        surf%emissivity(m,ind_pav_green)       &
     3367                                      + surf%frac(m,ind_wat_win)   *           &
     3368                                        surf%emissivity(m,ind_wat_win)         &
    33673369                                      ) * 4.0_wp * sigma_sb                    &
    33683370                                      * ( surf%pt_surface(m) * exner(k) )**3
     
    35503552!--                calculated fluxes below are not actually used as they are
    35513553!--                overwritten in radiation_interaction.
    3552                    surf%rad_sw_out(m) = ( surf%frac(ind_veg_wall,m)  *         &
    3553                                           surf%albedo(ind_veg_wall,m)          &
    3554                                         + surf%frac(ind_pav_green,m) *         &
    3555                                           surf%albedo(ind_pav_green,m)         &
    3556                                         + surf%frac(ind_wat_win,m)   *         &
    3557                                           surf%albedo(ind_wat_win,m) )         &
     3554                   surf%rad_sw_out(m) = ( surf%frac(m,ind_veg_wall)  *         &
     3555                                          surf%albedo(m,ind_veg_wall)          &
     3556                                        + surf%frac(m,ind_pav_green) *         &
     3557                                          surf%albedo(m,ind_pav_green)         &
     3558                                        + surf%frac(m,ind_wat_win)   *         &
     3559                                          surf%albedo(m,ind_wat_win) )         &
    35583560                                        * surf%rad_sw_in(m)
    35593561
    3560                    surf%rad_lw_out(m) = ( surf%frac(ind_veg_wall,m)  *         &
    3561                                           surf%emissivity(ind_veg_wall,m)      &
    3562                                         + surf%frac(ind_pav_green,m) *         &
    3563                                           surf%emissivity(ind_pav_green,m)     &
    3564                                         + surf%frac(ind_wat_win,m)   *         &
    3565                                           surf%emissivity(ind_wat_win,m)       &
     3562                   surf%rad_lw_out(m) = ( surf%frac(m,ind_veg_wall)  *         &
     3563                                          surf%emissivity(m,ind_veg_wall)      &
     3564                                        + surf%frac(m,ind_pav_green) *         &
     3565                                          surf%emissivity(m,ind_pav_green)     &
     3566                                        + surf%frac(m,ind_wat_win)   *         &
     3567                                          surf%emissivity(m,ind_wat_win)       &
    35663568                                        )                                      &
    35673569                                        * sigma_sb                             &
     
    35693571
    35703572                   surf%rad_lw_out_change_0(m) =                               &
    3571                                       ( surf%frac(ind_veg_wall,m)  *           &
    3572                                         surf%emissivity(ind_veg_wall,m)        &
    3573                                       + surf%frac(ind_pav_green,m) *           &
    3574                                         surf%emissivity(ind_pav_green,m)       &
    3575                                       + surf%frac(ind_wat_win,m)   *           &
    3576                                         surf%emissivity(ind_wat_win,m)         &
     3573                                      ( surf%frac(m,ind_veg_wall)  *           &
     3574                                        surf%emissivity(m,ind_veg_wall)        &
     3575                                      + surf%frac(m,ind_pav_green) *           &
     3576                                        surf%emissivity(m,ind_pav_green)       &
     3577                                      + surf%frac(m,ind_wat_win)   *           &
     3578                                        surf%emissivity(m,ind_wat_win)         &
    35773579                                      ) * 4.0_wp * sigma_sb                    &
    35783580                                      * ( surf%pt_surface(m) * exner(nzb) )** 3
     
    37493751!
    37503752!--                Weighted average according to surface fraction.
    3751                    surf%rad_lw_out(m) = ( surf%frac(ind_veg_wall,m)  *         &
    3752                                           surf%emissivity(ind_veg_wall,m)      &
    3753                                         + surf%frac(ind_pav_green,m) *         &
    3754                                           surf%emissivity(ind_pav_green,m)     &
    3755                                         + surf%frac(ind_wat_win,m)   *         &
    3756                                           surf%emissivity(ind_wat_win,m)       &
     3753                   surf%rad_lw_out(m) = ( surf%frac(m,ind_veg_wall)  *         &
     3754                                          surf%emissivity(m,ind_veg_wall)      &
     3755                                        + surf%frac(m,ind_pav_green) *         &
     3756                                          surf%emissivity(m,ind_pav_green)     &
     3757                                        + surf%frac(m,ind_wat_win)   *         &
     3758                                          surf%emissivity(m,ind_wat_win)       &
    37573759                                        )                                      &
    37583760                                      * sigma_sb                               &
     
    37623764                                       + surf%rad_lw_out(m) )                  &
    37633765                                       / ( 1.0_wp -                            &
    3764                                           ( surf%frac(ind_veg_wall,m)  *       &
    3765                                             surf%albedo(ind_veg_wall,m)        &
    3766                                          +  surf%frac(ind_pav_green,m) *       &
    3767                                             surf%albedo(ind_pav_green,m)       &
    3768                                          +  surf%frac(ind_wat_win,m)   *       &
    3769                                             surf%albedo(ind_wat_win,m) )       &
     3766                                          ( surf%frac(m,ind_veg_wall)  *       &
     3767                                            surf%albedo(m,ind_veg_wall)        &
     3768                                         +  surf%frac(m,ind_pav_green) *       &
     3769                                            surf%albedo(m,ind_pav_green)       &
     3770                                         +  surf%frac(m,ind_wat_win)   *       &
     3771                                            surf%albedo(m,ind_wat_win) )       &
    37703772                                         )
    37713773
    3772                    surf%rad_sw_out(m) = ( surf%frac(ind_veg_wall,m)  *         &
    3773                                           surf%albedo(ind_veg_wall,m)          &
    3774                                         + surf%frac(ind_pav_green,m) *         &
    3775                                           surf%albedo(ind_pav_green,m)         &
    3776                                         + surf%frac(ind_wat_win,m)   *         &
    3777                                           surf%albedo(ind_wat_win,m) )         &
     3774                   surf%rad_sw_out(m) = ( surf%frac(m,ind_veg_wall)  *         &
     3775                                          surf%albedo(m,ind_veg_wall)          &
     3776                                        + surf%frac(m,ind_pav_green) *         &
     3777                                          surf%albedo(m,ind_pav_green)         &
     3778                                        + surf%frac(m,ind_wat_win)   *         &
     3779                                          surf%albedo(m,ind_wat_win) )         &
    37783780                                      * surf%rad_sw_in(m)
    37793781
     
    45314533!--             surfaces.
    45324534                DO  m = surf_lsm_h%start_index(j,i), surf_lsm_h%end_index(j,i)
    4533                    rrtm_emis = surf_lsm_h%frac(ind_veg_wall,m)  *              &
    4534                                surf_lsm_h%emissivity(ind_veg_wall,m)  +        &
    4535                                surf_lsm_h%frac(ind_pav_green,m) *              &
    4536                                surf_lsm_h%emissivity(ind_pav_green,m) +        &
    4537                                surf_lsm_h%frac(ind_wat_win,m)   *              &
    4538                                surf_lsm_h%emissivity(ind_wat_win,m)
     4535                   rrtm_emis = surf_lsm_h%frac(m,ind_veg_wall)  *              &
     4536                               surf_lsm_h%emissivity(m,ind_veg_wall)  +        &
     4537                               surf_lsm_h%frac(m,ind_pav_green) *              &
     4538                               surf_lsm_h%emissivity(m,ind_pav_green) +        &
     4539                               surf_lsm_h%frac(m,ind_wat_win)   *              &
     4540                               surf_lsm_h%emissivity(m,ind_wat_win)
    45394541                   rrtm_tsfc = surf_lsm_h%pt_surface(m) * exner(nzb)
    45404542                ENDDO             
    45414543                DO  m = surf_usm_h%start_index(j,i), surf_usm_h%end_index(j,i)
    4542                    rrtm_emis = surf_usm_h%frac(ind_veg_wall,m)  *              &
    4543                                surf_usm_h%emissivity(ind_veg_wall,m)  +        &
    4544                                surf_usm_h%frac(ind_pav_green,m) *              &
    4545                                surf_usm_h%emissivity(ind_pav_green,m) +        &
    4546                                surf_usm_h%frac(ind_wat_win,m)   *              &
    4547                                surf_usm_h%emissivity(ind_wat_win,m)
     4544                   rrtm_emis = surf_usm_h%frac(m,ind_veg_wall)  *              &
     4545                               surf_usm_h%emissivity(m,ind_veg_wall)  +        &
     4546                               surf_usm_h%frac(m,ind_pav_green) *              &
     4547                               surf_usm_h%emissivity(m,ind_pav_green) +        &
     4548                               surf_usm_h%frac(m,ind_wat_win)   *              &
     4549                               surf_usm_h%emissivity(m,ind_wat_win)
    45484550                   rrtm_tsfc = surf_usm_h%pt_surface(m) * exner(nzb)
    45494551                ENDDO
     
    46724674                   DO  m = surf_lsm_h%start_index(j,i),                        &
    46734675                           surf_lsm_h%end_index(j,i)
    4674                       rrtm_asdir(1)  = SUM( surf_lsm_h%frac(:,m) *             &
     4676                      rrtm_asdir(1)  = SUM( surf_lsm_h%frac(m,:) *             &
    46754677                                            surf_lsm_h%rrtm_asdir(:,m) )
    4676                       rrtm_asdif(1)  = SUM( surf_lsm_h%frac(:,m) *             &
     4678                      rrtm_asdif(1)  = SUM( surf_lsm_h%frac(m,:) *             &
    46774679                                            surf_lsm_h%rrtm_asdif(:,m) )
    4678                       rrtm_aldir(1)  = SUM( surf_lsm_h%frac(:,m) *             &
     4680                      rrtm_aldir(1)  = SUM( surf_lsm_h%frac(m,:) *             &
    46794681                                            surf_lsm_h%rrtm_aldir(:,m) )
    4680                       rrtm_aldif(1)  = SUM( surf_lsm_h%frac(:,m) *             &
     4682                      rrtm_aldif(1)  = SUM( surf_lsm_h%frac(m,:) *             &
    46814683                                            surf_lsm_h%rrtm_aldif(:,m) )
    46824684                   ENDDO             
    46834685                   DO  m = surf_usm_h%start_index(j,i),                        &
    46844686                           surf_usm_h%end_index(j,i)
    4685                       rrtm_asdir(1)  = SUM( surf_usm_h%frac(:,m) *             &
     4687                      rrtm_asdir(1)  = SUM( surf_usm_h%frac(m,:) *             &
    46864688                                            surf_usm_h%rrtm_asdir(:,m) )
    4687                       rrtm_asdif(1)  = SUM( surf_usm_h%frac(:,m) *             &
     4689                      rrtm_asdif(1)  = SUM( surf_usm_h%frac(m,:) *             &
    46884690                                            surf_usm_h%rrtm_asdif(:,m) )
    4689                       rrtm_aldir(1)  = SUM( surf_usm_h%frac(:,m) *             &
     4691                      rrtm_aldir(1)  = SUM( surf_usm_h%frac(m,:) *             &
    46904692                                            surf_usm_h%rrtm_aldir(:,m) )
    4691                       rrtm_aldif(1)  = SUM( surf_usm_h%frac(:,m) *             &
     4693                      rrtm_aldif(1)  = SUM( surf_usm_h%frac(m,:) *             &
    46924694                                            surf_usm_h%rrtm_aldif(:,m) )
    46934695                   ENDDO
     
    49894991!
    49904992!--              Ocean
    4991                  IF ( surf%albedo_type(ind_type,m) == 1 )  THEN
    4992                     surf%rrtm_aldir(ind_type,m) = 0.026_wp /                    &
     4993                 IF ( surf%albedo_type(m,ind_type) == 1 )  THEN
     4994                    surf%rrtm_aldir(m,ind_type) = 0.026_wp /                    &
    49934995                                                ( cos_zenith**1.7_wp + 0.065_wp )&
    49944996                                     + 0.15_wp * ( cos_zenith - 0.1_wp )         &
    49954997                                               * ( cos_zenith - 0.5_wp )         &
    49964998                                               * ( cos_zenith - 1.0_wp )
    4997                     surf%rrtm_asdir(ind_type,m) = surf%rrtm_aldir(ind_type,m)
     4999                    surf%rrtm_asdir(m,ind_type) = surf%rrtm_aldir(m,ind_type)
    49985000!
    49995001!--              Snow
    5000                  ELSEIF ( surf%albedo_type(ind_type,m) == 16 )  THEN
     5002                 ELSEIF ( surf%albedo_type(m,ind_type) == 16 )  THEN
    50015003                    IF ( cos_zenith < 0.5_wp )  THEN
    5002                        surf%rrtm_aldir(ind_type,m) =                           &
    5003                                  0.5_wp * ( 1.0_wp - surf%aldif(ind_type,m) )  &
     5004                       surf%rrtm_aldir(m,ind_type) =                           &
     5005                                 0.5_wp * ( 1.0_wp - surf%aldif(im,ind_type) )  &
    50045006                                        * ( ( 3.0_wp / ( 1.0_wp + 4.0_wp       &
    50055007                                        * cos_zenith ) ) - 1.0_wp )
    5006                        surf%rrtm_asdir(ind_type,m) =                           &
    5007                                  0.5_wp * ( 1.0_wp - surf%asdif(ind_type,m) )  &
     5008                       surf%rrtm_asdir(m,ind_type) =                           &
     5009                                 0.5_wp * ( 1.0_wp - surf%asdif(m,ind_type) )  &
    50085010                                        * ( ( 3.0_wp / ( 1.0_wp + 4.0_wp       &
    50095011                                        * cos_zenith ) ) - 1.0_wp )
    50105012
    5011                        surf%rrtm_aldir(ind_type,m) =                           &
    5012                                        MIN(0.98_wp, surf%rrtm_aldir(ind_type,m))
    5013                        surf%rrtm_asdir(ind_type,m) =                           &
    5014                                        MIN(0.98_wp, surf%rrtm_asdir(ind_type,m))
     5013                       surf%rrtm_aldir(m,ind_type) =                           &
     5014                                       MIN(0.98_wp, surf%rrtm_aldir(m,ind_type))
     5015                       surf%rrtm_asdir(m,ind_type) =                           &
     5016                                       MIN(0.98_wp, surf%rrtm_asdir(m,ind_type))
    50155017                    ELSE
    5016                        surf%rrtm_aldir(ind_type,m) = surf%aldif(ind_type,m)
    5017                        surf%rrtm_asdir(ind_type,m) = surf%asdif(ind_type,m)
     5018                       surf%rrtm_aldir(m,ind_type) = surf%aldif(m,ind_type)
     5019                       surf%rrtm_asdir(m,ind_type) = surf%asdif(m,ind_type)
    50185020                    ENDIF
    50195021!
    50205022!--              Sea ice
    5021                  ELSEIF ( surf%albedo_type(ind_type,m) == 15 )  THEN
    5022                     surf%rrtm_aldir(ind_type,m) = surf%aldif(ind_type,m)
    5023                     surf%rrtm_asdir(ind_type,m) = surf%asdif(ind_type,m)
     5023                 ELSEIF ( surf%albedo_type(m,ind_type) == 15 )  THEN
     5024                    surf%rrtm_aldir(m,ind_type) = surf%aldif(m,ind_type)
     5025                    surf%rrtm_asdir(m,ind_type) = surf%asdif(m,ind_type)
    50245026
    50255027!
    50265028!--              Asphalt
    5027                  ELSEIF ( surf%albedo_type(ind_type,m) == 17 )  THEN
    5028                     surf%rrtm_aldir(ind_type,m) = surf%aldif(ind_type,m)
    5029                     surf%rrtm_asdir(ind_type,m) = surf%asdif(ind_type,m)
     5029                 ELSEIF ( surf%albedo_type(m,ind_type) == 17 )  THEN
     5030                    surf%rrtm_aldir(m,ind_type) = surf%aldif(m,ind_type)
     5031                    surf%rrtm_asdir(m,ind_type) = surf%asdif(m,ind_type)
    50305032
    50315033
    50325034!
    50335035!--              Bare soil
    5034                  ELSEIF ( surf%albedo_type(ind_type,m) == 18 )  THEN
    5035                     surf%rrtm_aldir(ind_type,m) = surf%aldif(ind_type,m)
    5036                     surf%rrtm_asdir(ind_type,m) = surf%asdif(ind_type,m)
     5036                 ELSEIF ( surf%albedo_type(m,ind_type) == 18 )  THEN
     5037                    surf%rrtm_aldir(m,ind_type) = surf%aldif(m,ind_type)
     5038                    surf%rrtm_asdir(m,ind_type) = surf%asdif(m,ind_type)
    50375039
    50385040!
    50395041!--              Land surfaces
    50405042                 ELSE
    5041                     SELECT CASE ( surf%albedo_type(ind_type,m) )
     5043                    SELECT CASE ( surf%albedo_type(m,ind_type) )
    50425044
    50435045!
    50445046!--                    Surface types with strong zenith dependence
    50455047                       CASE ( 1, 2, 3, 4, 11, 12, 13 )
    5046                           surf%rrtm_aldir(ind_type,m) =                        &
    5047                                 surf%aldif(ind_type,m) * 1.4_wp /              &
     5048                          surf%rrtm_aldir(m,ind_type) =                        &
     5049                                surf%aldif(m,ind_type) * 1.4_wp /              &
    50485050                                           ( 1.0_wp + 0.8_wp * cos_zenith )
    5049                           surf%rrtm_asdir(ind_type,m) =                        &
    5050                                 surf%asdif(ind_type,m) * 1.4_wp /              &
     5051                          surf%rrtm_asdir(m,ind_type) =                        &
     5052                                surf%asdif(m,ind_type) * 1.4_wp /              &
    50515053                                           ( 1.0_wp + 0.8_wp * cos_zenith )
    50525054!
    50535055!--                    Surface types with weak zenith dependence
    50545056                       CASE ( 5, 6, 7, 8, 9, 10, 14 )
    5055                           surf%rrtm_aldir(ind_type,m) =                        &
    5056                                 surf%aldif(ind_type,m) * 1.1_wp /              &
     5057                          surf%rrtm_aldir(m,ind_type) =                        &
     5058                                surf%aldif(m,ind_type) * 1.1_wp /              &
    50575059                                           ( 1.0_wp + 0.2_wp * cos_zenith )
    5058                           surf%rrtm_asdir(ind_type,m) =                        &
    5059                                 surf%asdif(ind_type,m) * 1.1_wp /              &
     5060                          surf%rrtm_asdir(m,ind_type) =                        &
     5061                                surf%asdif(m,ind_type) * 1.1_wp /              &
    50605062                                           ( 1.0_wp + 0.2_wp * cos_zenith )
    50615063
     
    50665068!
    50675069!--              Diffusive albedo is taken from Table 2
    5068                  surf%rrtm_aldif(ind_type,m) = surf%aldif(ind_type,m)
    5069                  surf%rrtm_asdif(ind_type,m) = surf%asdif(ind_type,m)
     5070                 surf%rrtm_aldif(m,ind_type) = surf%aldif(m,ind_type)
     5071                 surf%rrtm_asdif(m,ind_type) = surf%asdif(m,ind_type)
    50705072              ENDDO
    50715073           ENDDO
     
    58835885     DO  i = nxl, nxr
    58845886        DO  j = nys, nyn
    5885 !--           urban
     5887!
     5888!--        urban
    58865889           DO  m = surf_usm_h%start_index(j,i), surf_usm_h%end_index(j,i)
    5887               surfoutll(mm) = SUM ( surf_usm_h%frac(:,m) *                  &
    5888                                     surf_usm_h%emissivity(:,m) )            &
     5890              surfoutll(mm) = SUM ( surf_usm_h%frac(m,:) *                  &
     5891                                    surf_usm_h%emissivity(m,:) )            &
    58895892                                  * sigma_sb                                &
    58905893                                  * surf_usm_h%pt_surface(m)**4
    5891               albedo_surf(mm) = SUM ( surf_usm_h%frac(:,m) *                &
    5892                                       surf_usm_h%albedo(:,m) )
    5893               emiss_surf(mm)  = SUM ( surf_usm_h%frac(:,m) *                &
    5894                                       surf_usm_h%emissivity(:,m) )
     5894              albedo_surf(mm) = SUM ( surf_usm_h%frac(m,:) *                &
     5895                                      surf_usm_h%albedo(m,:) )
     5896              emiss_surf(mm)  = SUM ( surf_usm_h%frac(m,:) *                &
     5897                                      surf_usm_h%emissivity(m,:) )
    58955898              mm = mm + 1
    58965899           ENDDO
    5897 !--           land
     5900!
     5901!--        land
    58985902           DO  m = surf_lsm_h%start_index(j,i), surf_lsm_h%end_index(j,i)
    5899               surfoutll(mm) = SUM ( surf_lsm_h%frac(:,m) *                  &
    5900                                     surf_lsm_h%emissivity(:,m) )            &
     5903              surfoutll(mm) = SUM ( surf_lsm_h%frac(m,:) *                  &
     5904                                    surf_lsm_h%emissivity(m,:) )            &
    59015905                                  * sigma_sb                                &
    59025906                                  * surf_lsm_h%pt_surface(m)**4
    5903               albedo_surf(mm) = SUM ( surf_lsm_h%frac(:,m) *                &
    5904                                       surf_lsm_h%albedo(:,m) )
    5905               emiss_surf(mm)  = SUM ( surf_lsm_h%frac(:,m) *                &
    5906                                       surf_lsm_h%emissivity(:,m) )
     5907              albedo_surf(mm) = SUM ( surf_lsm_h%frac(m,:) *                &
     5908                                      surf_lsm_h%albedo(m,:) )
     5909              emiss_surf(mm)  = SUM ( surf_lsm_h%frac(m,:) *                &
     5910                                      surf_lsm_h%emissivity(m,:) )
    59075911              mm = mm + 1
    59085912           ENDDO
     
    59105914     ENDDO
    59115915!
    5912 !--     Vertical walls
     5916!--  Vertical walls
    59135917     DO  i = nxl, nxr
    59145918        DO  j = nys, nyn
    59155919           DO  ll = 0, 3
    59165920              l = reorder(ll)
    5917 !--              urban
     5921!
     5922!--           urban
    59185923              DO  m = surf_usm_v(l)%start_index(j,i),                       &
    59195924                      surf_usm_v(l)%end_index(j,i)
    5920                  surfoutll(mm) = SUM ( surf_usm_v(l)%frac(:,m) *            &
    5921                                        surf_usm_v(l)%emissivity(:,m) )      &
     5925                 surfoutll(mm) = SUM ( surf_usm_v(l)%frac(m,:) *            &
     5926                                       surf_usm_v(l)%emissivity(m,:) )      &
    59225927                                  * sigma_sb                                &
    59235928                                  * surf_usm_v(l)%pt_surface(m)**4
    5924                  albedo_surf(mm) = SUM ( surf_usm_v(l)%frac(:,m) *          &
    5925                                          surf_usm_v(l)%albedo(:,m) )
    5926                  emiss_surf(mm)  = SUM ( surf_usm_v(l)%frac(:,m) *          &
    5927                                          surf_usm_v(l)%emissivity(:,m) )
     5929                 albedo_surf(mm) = SUM ( surf_usm_v(l)%frac(m,:) *          &
     5930                                         surf_usm_v(l)%albedo(m,:) )
     5931                 emiss_surf(mm)  = SUM ( surf_usm_v(l)%frac(m,:) *          &
     5932                                         surf_usm_v(l)%emissivity(m,:) )
    59285933                 mm = mm + 1
    59295934              ENDDO
    5930 !--              land
     5935!
     5936!--           land
    59315937              DO  m = surf_lsm_v(l)%start_index(j,i),                       &
    59325938                      surf_lsm_v(l)%end_index(j,i)
    5933                  surfoutll(mm) = SUM ( surf_lsm_v(l)%frac(:,m) *            &
    5934                                        surf_lsm_v(l)%emissivity(:,m) )      &
     5939                 surfoutll(mm) = SUM ( surf_lsm_v(l)%frac(m,:) *            &
     5940                                       surf_lsm_v(l)%emissivity(m,:) )      &
    59355941                                  * sigma_sb                                &
    59365942                                  * surf_lsm_v(l)%pt_surface(m)**4
    5937                  albedo_surf(mm) = SUM ( surf_lsm_v(l)%frac(:,m) *          &
    5938                                          surf_lsm_v(l)%albedo(:,m) )
    5939                  emiss_surf(mm)  = SUM ( surf_lsm_v(l)%frac(:,m) *          &
    5940                                          surf_lsm_v(l)%emissivity(:,m) )
     5943                 albedo_surf(mm) = SUM ( surf_lsm_v(l)%frac(m,:) *          &
     5944                                         surf_lsm_v(l)%albedo(m,:) )
     5945                 emiss_surf(mm)  = SUM ( surf_lsm_v(l)%frac(m,:) *          &
     5946                                         surf_lsm_v(l)%emissivity(m,:) )
    59415947                 mm = mm + 1
    59425948              ENDDO
     
    59455951     ENDDO
    59465952
    5947      IF ( trace_fluxes_above >= 0._wp )  THEN
     5953     IF ( trace_fluxes_above >= 0.0_wp )  THEN
    59485954        CALL radiation_print_debug_surf( 'surfoutll before initial pass', surfoutll )
    59495955        CALL radiation_print_debug_horz( 'rad_lw_in_diff before initial pass', rad_lw_in_diff )
     
    60086014        j = FLOOR(ACOS(cos_zenith) / pi * raytrace_discrete_elevs)
    60096015        i = MODULO(NINT(ATAN2(sun_dir_lon, sun_dir_lat)               &
    6010                         / (2._wp*pi) * raytrace_discrete_azims-.5_wp, iwp), &
     6016                        / (2.0_wp*pi) * raytrace_discrete_azims-0.5_wp, iwp), &
    60116017                   raytrace_discrete_azims)
    60126018        isd = dsidir_rev(j, i)
     
    60246030           i = mrtbl(ix, imrt)
    60256031           mrtinsw(imrt) = mrtinsw(imrt) + mrtdsit(imrt, isd) * rad_sw_in_dir(j,i) &
    6026                                      / cos_zenith / 4._wp ! normal to sphere
     6032                                     / cos_zenith / 4.0_wp ! normal to sphere
    60276033        ENDDO
    60286034     ENDIF
     
    60396045     IF ( npcbl > 0 )  THEN
    60406046
    6041          pcbinswdir(:) = 0._wp
    6042          pcbinswdif(:) = 0._wp
    6043          pcbinlw(:) = 0._wp
     6047         pcbinswdir(:) = 0.0_wp
     6048         pcbinswdif(:) = 0.0_wp
     6049         pcbinlw(:) = 0.0_wp
    60446050
    60456051         DO icsf = 1, ncsfl
     
    60656071                IF ( cos_zenith > 0 )  THEN
    60666072!--                Estimate directed box absorption
    6067                    pc_abs_frac = 1._wp - exp(pc_abs_eff * lad_s(k,j,i))
     6073                   pc_abs_frac = 1.0_wp - exp(pc_abs_eff * lad_s(k,j,i))
    60686074!
    60696075!--                isd has already been established, see 1)
     
    60916097     ENDIF
    60926098
    6093      IF ( trace_fluxes_above >= 0._wp )  THEN
     6099     IF ( trace_fluxes_above >= 0.0_wp )  THEN
    60946100        CALL radiation_print_debug_surf( 'surfinl after initial pass', surfinl )
    60956101        CALL radiation_print_debug_surf( 'surfinlwdif after initial pass', surfinlwdif )
     
    61186124     ENDIF
    61196125
    6120      IF ( trace_fluxes_above >= 0._wp )  THEN
     6126     IF ( trace_fluxes_above >= 0.0_wp )  THEN
    61216127        CALL radiation_print_debug_surf( 'surfinl after PC emiss', surfinl )
    61226128     ENDIF
     
    61356141        nrefsteps = 0
    61366142        surfoutsl = albedo_surf * surfins
    6137         surfoutll = (1._wp - emiss_surf) * surfinl
     6143        surfoutll = (1.0_wp - emiss_surf) * surfinl
    61386144        surfoutsw = surfoutsw + surfoutsl
    61396145        surfoutlw = surfoutlw + surfoutll
     
    61486154!
    61496155!--      for non-transparent surfaces, longwave albedo is 1 - emissivity
    6150          surfoutll = (1._wp - emiss_surf) * surfinl
    6151 
    6152          IF ( trace_fluxes_above >= 0._wp )  THEN
     6156         surfoutll = (1.0_wp - emiss_surf) * surfinl
     6157
     6158         IF ( trace_fluxes_above >= 0.0_wp )  THEN
    61536159            CALL radiation_print_debug_surf( 'surfoutll before reflective pass', surfoutll, refstep )
    61546160            CALL radiation_print_debug_surf( 'surfoutsl before reflective pass', surfoutsl, refstep )
     
    61786184!
    61796185!--      Reset for the input from next reflective pass
    6180          surfins = 0._wp
    6181          surfinl = 0._wp
     6186         surfins = 0.0_wp
     6187         surfinl = 0.00_wp
    61826188!
    61836189!--      Reflected radiation
     
    62226228         ENDDO
    62236229
    6224          IF ( trace_fluxes_above >= 0._wp )  THEN
     6230         IF ( trace_fluxes_above >= 0.0_wp )  THEN
    62256231            CALL radiation_print_debug_surf( 'surfinl after reflected pass', surfinl, refstep )
    62266232            CALL radiation_print_debug_surf( 'surfins after reflected pass', surfins, refstep )
     
    62686274     IF ( nmrtbl > 0 )  THEN
    62696275        IF ( mrt_include_sw )  THEN
    6270            mrt(:) = ((mrtinsw(:) + mrtinlw(:)) / sigma_sb) ** .25_wp
     6276           mrt(:) = ((mrtinsw(:) + mrtinlw(:)) / sigma_sb) ** 0.25_wp
    62716277        ELSE
    6272            mrt(:) = (mrtinlw(:) / sigma_sb) ** .25_wp
     6278           mrt(:) = (mrtinlw(:) / sigma_sb) ** 0.25_wp
    62736279        ENDIF
    62746280     ENDIF
  • palm/trunk/SOURCE/salsa_mod.f90

    r4417 r4441  
    2121! Current revisions:
    2222! -----------------
    23 !
     23! Change order of dimension in surface array %frac to allow for better
     24! vectorization.
    2425!
    2526! Former revisions:
     
    27122713!
    27132714!--       Vegetation (LSM):
    2714           IF ( surf%frac(ind_veg_wall,m) > 0 )  THEN
     2715          IF ( surf%frac(m,ind_veg_wall) > 0 )  THEN
    27152716             veg_type_palm = surf%vegetation_type(m)
    27162717             SELECT CASE ( veg_type_palm )
     
    27582759!
    27592760!--       Pavement (LSM):
    2760           IF ( surf%frac(ind_pav_green,m) > 0 )  THEN
     2761          IF ( surf%frac(m,ind_pav_green) > 0 )  THEN
    27612762             pav_type_palm = surf%pavement_type(m)
    27622763             IF ( pav_type_palm == 0 )  THEN  ! error
     
    27692770!
    27702771!--       Water (LSM):
    2771           IF ( surf%frac(ind_wat_win,m) > 0 )  THEN
     2772          IF ( surf%frac(m,ind_wat_win) > 0 )  THEN
    27722773             wat_type_palm = surf%water_type(m)
    27732774             IF ( wat_type_palm == 0 )  THEN  ! error
     
    27842785!
    27852786!--       Wall surfaces (USM):
    2786           IF ( surf%frac(ind_veg_wall,m) > 0 )  THEN
     2787          IF ( surf%frac(m,ind_veg_wall) > 0 )  THEN
    27872788             match_veg_wall(m) = 15  ! urban in Z01
    27882789          ENDIF
    27892790!
    27902791!--       Green walls and roofs (USM):
    2791           IF ( surf%frac(ind_pav_green,m) > 0 )  THEN
     2792          IF ( surf%frac(m,ind_pav_green) > 0 )  THEN
    27922793             match_pav_green(m) =  6 ! (short) grass in Z01
    27932794          ENDIF
    27942795!
    27952796!--       Windows (USM):
    2796           IF ( surf%frac(ind_wat_win,m) > 0 )  THEN
     2797          IF ( surf%frac(m,ind_wat_win) > 0 )  THEN
    27972798             match_wat_win(m) = 15  ! urban in Z01
    27982799          ENDIF
     
    43864387                END SELECT
    43874388             ENDDO
    4388              depo_sum = depo_sum + surf%frac(ind_pav_green,m) * depo
     4389             depo_sum = depo_sum + surf%frac(m,ind_pav_green) * depo
    43894390          ENDIF
    43904391
     
    44174418                END SELECT
    44184419             ENDDO
    4419              depo_sum = depo_sum + surf%frac(ind_veg_wall,m) * depo
     4420             depo_sum = depo_sum + surf%frac(m,ind_veg_wall) * depo
    44204421          ENDIF
    44214422
     
    44484449                END SELECT
    44494450             ENDDO
    4450              depo_sum = depo_sum + surf%frac(ind_wat_win,m) * depo
     4451             depo_sum = depo_sum + surf%frac(m,ind_wat_win) * depo
    44514452          ENDIF
    44524453
  • palm/trunk/SOURCE/sum_up_3d_data.f90

    r4360 r4441  
    2020! Current revisions:
    2121! ------------------
    22 !
     22! Change order of dimension in surface array %frac to allow for better
     23! vectorization.
    2324!
    2425! Former revisions:
     
    371372                         m = surf_usm_h%end_index(j,i)
    372373                         ghf_av(j,i) = ghf_av(j,i) +                           &
    373                                          surf_usm_h%frac(ind_veg_wall,m)  *    &
     374                                         surf_usm_h%frac(m,ind_veg_wall)  *    &
    374375                                         surf_usm_h%wghf_eb(m)        +        &
    375                                          surf_usm_h%frac(ind_pav_green,m) *    &
     376                                         surf_usm_h%frac(m,ind_pav_green) *    &
    376377                                         surf_usm_h%wghf_eb_green(m)  +        &
    377                                          surf_usm_h%frac(ind_wat_win,m)   *    &
     378                                         surf_usm_h%frac(m,ind_wat_win)   *    &
    378379                                         surf_usm_h%wghf_eb_window(m)
    379380                      ENDIF
     
    644645                         m = surf_usm_h%end_index(j,i)
    645646                         r_a_av(j,i) = r_a_av(j,i) +                           &
    646                                          surf_usm_h%frac(ind_veg_wall,m)  *    &
     647                                         surf_usm_h%frac(m,ind_veg_wall)  *    &
    647648                                         surf_usm_h%r_a(m)       +             &
    648                                          surf_usm_h%frac(ind_pav_green,m) *    &
     649                                         surf_usm_h%frac(m,ind_pav_green) *    &
    649650                                         surf_usm_h%r_a_green(m) +             &
    650                                          surf_usm_h%frac(ind_wat_win,m)   *    &
     651                                         surf_usm_h%frac(m,ind_wat_win)   *    &
    651652                                         surf_usm_h%r_a_window(m)
    652653                      ENDIF
  • palm/trunk/SOURCE/synthetic_turbulence_generator_mod.f90

    r4440 r4441  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! Set back turbulent length scale to 8 x grid spacing in the parametrized mode
     23! (was accidantly changed).
    2324!
    2425! Former revisions:
     
    811812!--    Define length scale for the imposed turbulence, which is defined as
    812813!--    8 times the minimum grid spacing
    813        length_scale = 30.0_wp * MIN( dx, dy, MINVAL( dzw ) ) !8.0_wp * MIN( dx, dy, MINVAL( dzw ) )
     814       length_scale = 8.0_wp * MIN( dx, dy, MINVAL( dzw ) )
    814815!
    815816!--    Define constant to gradually decrease length scales and Reynolds stress
  • 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.