Ignore:
Timestamp:
Sep 9, 2020 8:27:58 PM (4 years ago)
Author:
pavelkrc
Message:

Radiative transfer model RTM version 4.1

File:
1 edited

Legend:

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

    r4625 r4671  
    2525! -----------------
    2626! $Id$
     27! Implementation of downward facing USM and LSM surfaces
     28!
     29! 4625 2020-07-24 12:13:16Z oliver.maas
    2730! for turbulence_closure = '1.5-order-dai': copy value of distance_to_wall to
    2831! ghostpoints at dirichlet/radiation boundaries
     
    268271               surf_lsm_v,                                                                         &
    269272               surf_usm_h,                                                                         &
    270                surf_usm_v
     273               surf_usm_v,                                                                         &
     274               surf_type
    271275
    272276    IMPLICIT NONE
     
    475479!
    476480!--       Natural surfaces
    477           DO  m = 1, surf_lsm_h%ns
    478              i = surf_lsm_h%i(m)
    479              j = surf_lsm_h%j(m)
    480              k = surf_lsm_h%k(m)
    481              e_p(k,j,i) = ( surf_lsm_h%us(m) / c_0 )**2
     481          DO  m = 1, surf_lsm_h(0)%ns
     482             i = surf_lsm_h(0)%i(m)
     483             j = surf_lsm_h(0)%j(m)
     484             k = surf_lsm_h(0)%k(m)
     485             e_p(k,j,i) = ( surf_lsm_h(0)%us(m) / c_0 )**2
    482486          ENDDO
    483487!
    484488!--       Urban surfaces
    485           DO  m = 1, surf_usm_h%ns
    486              i = surf_usm_h%i(m)
    487              j = surf_usm_h%j(m)
    488              k = surf_usm_h%k(m)
    489              e_p(k,j,i) = ( surf_usm_h%us(m) / c_0 )**2
     489          DO  m = 1, surf_usm_h(0)%ns
     490             i = surf_usm_h(0)%i(m)
     491             j = surf_usm_h(0)%j(m)
     492             k = surf_usm_h(0)%k(m)
     493             e_p(k,j,i) = ( surf_usm_h(0)%us(m) / c_0 )**2
    490494          ENDDO
    491495!
     
    579583!
    580584!--    Natural surfaces
    581        DO  m = 1, surf_lsm_h%ns
    582           i = surf_lsm_h%i(m)
    583           j = surf_lsm_h%j(m)
    584           k = surf_lsm_h%k(m)
    585           diss_p(k,j,i) = surf_lsm_h%us(m)**3 / ( kappa * surf_lsm_h%z_mo(m) )
     585       DO  m = 1, surf_lsm_h(0)%ns
     586          i = surf_lsm_h(0)%i(m)
     587          j = surf_lsm_h(0)%j(m)
     588          k = surf_lsm_h(0)%k(m)
     589          diss_p(k,j,i) = surf_lsm_h(0)%us(m)**3 / ( kappa * surf_lsm_h(0)%z_mo(m) )
    586590       ENDDO
    587591!
    588592!--    Urban surfaces
    589        DO  m = 1, surf_usm_h%ns
    590           i = surf_usm_h%i(m)
    591           j = surf_usm_h%j(m)
    592           k = surf_usm_h%k(m)
    593           diss_p(k,j,i) = surf_usm_h%us(m)**3 / ( kappa * surf_usm_h%z_mo(m) )
     593       DO  m = 1, surf_usm_h(0)%ns
     594          i = surf_usm_h(0)%i(m)
     595          j = surf_usm_h(0)%j(m)
     596          k = surf_usm_h(0)%k(m)
     597          diss_p(k,j,i) = surf_usm_h(0)%us(m)**3 / ( kappa * surf_usm_h(0)%z_mo(m) )
    594598       ENDDO
    595599!
     
    21502154       ENDDO
    21512155!
    2152 !--    Natural surfaces, upward-facing
     2156!--    Natural surfaces, upward- and downward facing
    21532157       !$OMP PARALLEL DO PRIVATE(i,j,k,m)
    21542158       !$ACC PARALLEL LOOP PRIVATE(i, j, k, m, km_sfc) &
    2155        !$ACC PRESENT(surf_lsm_h, u, v, drho_air_zw, zu)
    2156        DO  m = 1, surf_lsm_h%ns
    2157 
    2158           i = surf_lsm_h%i(m)
    2159           j = surf_lsm_h%j(m)
    2160           k = surf_lsm_h%k(m)
     2159       !$ACC PRESENT(surf_lsm_h(0), u, v, drho_air_zw, zu)
     2160       DO  m = 1, surf_lsm_h(0)%ns
     2161
     2162          i = surf_lsm_h(0)%i(m)
     2163          j = surf_lsm_h(0)%j(m)
     2164          k = surf_lsm_h(0)%k(m)
    21612165!
    21622166!--       Note, calculation of u_0 and v_0 is not fully accurate, as u/v and km are not on the same
    21632167!--       grid. Actually, a further interpolation of km onto the u/v-grid is necessary. However, the
    21642168!--       effect of this error is negligible.
    2165           km_sfc = kappa * surf_lsm_h%us(m) * surf_lsm_h%z_mo(m) /                                 &
    2166                    phi_m( surf_lsm_h%z_mo(m) / surf_lsm_h%ol(m) )
    2167 
    2168           surf_lsm_h%u_0(m) = u(k+1,j,i) + surf_lsm_h%usws(m) * drho_air_zw(k-1) *                 &
     2169          km_sfc = kappa * surf_lsm_h(0)%us(m) * surf_lsm_h(0)%z_mo(m) /                                 &
     2170                   phi_m( surf_lsm_h(0)%z_mo(m) / surf_lsm_h(0)%ol(m) )
     2171
     2172          surf_lsm_h(0)%u_0(m) = u(k+1,j,i) + surf_lsm_h(0)%usws(m) * drho_air_zw(k-1) *                 &
    21692173                              ( zu(k+1) - zu(k-1) ) / ( km_sfc  + 1.0E-20_wp )
    2170           surf_lsm_h%v_0(m) = v(k+1,j,i) + surf_lsm_h%vsws(m) * drho_air_zw(k-1) *                 &
     2174          surf_lsm_h(0)%v_0(m) = v(k+1,j,i) + surf_lsm_h(0)%vsws(m) * drho_air_zw(k-1) *                 &
    21712175                                        ( zu(k+1) - zu(k-1)) / ( km_sfc  + 1.0E-20_wp )
    21722176
    2173           IF ( ABS( u(k+1,j,i) - surf_lsm_h%u_0(m) ) > ABS( u(k+1,j,i) - u(k-1,j,i) ) )            &
    2174              surf_lsm_h%u_0(m) = u(k-1,j,i)
    2175 
    2176           IF ( ABS( v(k+1,j,i) - surf_lsm_h%v_0(m) ) > ABS( v(k+1,j,i) - v(k-1,j,i) ) )            &
    2177              surf_lsm_h%v_0(m) = v(k-1,j,i)
     2177          IF ( ABS( u(k+1,j,i) - surf_lsm_h(0)%u_0(m) ) > ABS( u(k+1,j,i) - u(k-1,j,i) ) )            &
     2178             surf_lsm_h(0)%u_0(m) = u(k-1,j,i)
     2179
     2180          IF ( ABS( v(k+1,j,i) - surf_lsm_h(0)%v_0(m) ) > ABS( v(k+1,j,i) - v(k-1,j,i) ) )            &
     2181             surf_lsm_h(0)%v_0(m) = v(k-1,j,i)
     2182
     2183       ENDDO
     2184!
     2185!--    Natural surfaces, downward-facing surfaces
     2186       !$OMP PARALLEL DO PRIVATE(i,j,k,m)
     2187       !$ACC PARALLEL LOOP PRIVATE(i, j, k, m, km_sfc) &
     2188       !$ACC PRESENT(surf_lsm_h(1), u, v, drho_air_zw, zu, km)
     2189       DO  m = 1, surf_lsm_h(1)%ns
     2190
     2191          i = surf_lsm_h(1)%i(m)
     2192          j = surf_lsm_h(1)%j(m)
     2193          k = surf_lsm_h(1)%k(m)
     2194!
     2195!--       Note, calculation of u_0 and v_0 is not fully accurate, as u/v and km are not on the same
     2196!--       grid. Actually, a further interpolation of km onto the u/v-grid is necessary. However, the
     2197!--       effect of this error is negligible.
     2198          surf_lsm_h(1)%u_0(m) = u(k-1,j,i) - surf_lsm_h(1)%usws(m) * drho_air_zw(k-1) *           &
     2199                                     ( zu(k+1) - zu(k-1) ) / ( km(k,j,i) + 1.0E-20_wp )
     2200          surf_lsm_h(1)%v_0(m) = v(k-1,j,i) - surf_lsm_h(1)%vsws(m) * drho_air_zw(k-1) *           &
     2201                                     ( zu(k+1) - zu(k-1) ) / (km(k,j,i) + 1.0E-20_wp )
     2202
     2203          IF ( ABS( surf_lsm_h(1)%u_0(m) - u(k-1,j,i) ) > ABS( u(k+1,j,i) - u(k-1,j,i) ) )         &
     2204             surf_lsm_h(1)%u_0(m) = u(k+1,j,i)
     2205
     2206          IF ( ABS( surf_lsm_h(1)%v_0(m) - v(k-1,j,i) ) > ABS( v(k+1,j,i) - v(k-1,j,i) ) )         &
     2207             surf_lsm_h(1)%v_0(m) = v(k+1,j,i)
    21782208
    21792209       ENDDO
     
    21822212       !$OMP PARALLEL DO PRIVATE(i,j,k,m)
    21832213       !$ACC PARALLEL LOOP PRIVATE(i, j, k, m, km_sfc) &
    2184        !$ACC PRESENT(surf_usm_h, u, v, drho_air_zw, zu)
    2185        DO  m = 1, surf_usm_h%ns
    2186 
    2187           i = surf_usm_h%i(m)
    2188           j = surf_usm_h%j(m)
    2189           k = surf_usm_h%k(m)
     2214       !$ACC PRESENT(surf_usm_h(0), u, v, drho_air_zw, zu)
     2215       DO  m = 1, surf_usm_h(0)%ns
     2216
     2217          i = surf_usm_h(0)%i(m)
     2218          j = surf_usm_h(0)%j(m)
     2219          k = surf_usm_h(0)%k(m)
    21902220!
    21912221!--       Note, calculation of u_0 and v_0 is not fully accurate, as u/v and km are not on the same
    21922222!--       grid. Actually, a further interpolation of km onto the u/v-grid is necessary. However, the
    21932223!--       effect of this error is negligible.
    2194           km_sfc = kappa * surf_usm_h%us(m) * surf_usm_h%z_mo(m) /                                 &
    2195                    phi_m( surf_usm_h%z_mo(m) / surf_usm_h%ol(m) )
    2196 
    2197           surf_usm_h%u_0(m) = u(k+1,j,i) + surf_usm_h%usws(m) * drho_air_zw(k-1) *                 &
     2224          km_sfc = kappa * surf_usm_h(0)%us(m) * surf_usm_h(0)%z_mo(m) /                                 &
     2225                   phi_m( surf_usm_h(0)%z_mo(m) / surf_usm_h(0)%ol(m) )
     2226
     2227          surf_usm_h(0)%u_0(m) = u(k+1,j,i) + surf_usm_h(0)%usws(m) * drho_air_zw(k-1) *                 &
    21982228                                        ( zu(k+1) - zu(k-1) ) / ( km_sfc  + 1.0E-20_wp )
    2199           surf_usm_h%v_0(m) = v(k+1,j,i) + surf_usm_h%vsws(m) * drho_air_zw(k-1) *                 &
     2229          surf_usm_h(0)%v_0(m) = v(k+1,j,i) + surf_usm_h(0)%vsws(m) * drho_air_zw(k-1) *                 &
    22002230                                        ( zu(k+1) - zu(k-1) ) / ( km_sfc  + 1.0E-20_wp )
    22012231
    2202           IF ( ABS( u(k+1,j,i) - surf_usm_h%u_0(m) ) > ABS( u(k+1,j,i) - u(k-1,j,i) ) )            &
    2203              surf_usm_h%u_0(m) = u(k-1,j,i)
    2204 
    2205           IF ( ABS( v(k+1,j,i) - surf_usm_h%v_0(m) ) > ABS( v(k+1,j,i) - v(k-1,j,i) ) )            &
    2206              surf_usm_h%v_0(m) = v(k-1,j,i)
     2232          IF ( ABS( u(k+1,j,i) - surf_usm_h(0)%u_0(m) ) > ABS( u(k+1,j,i) - u(k-1,j,i) ) )            &
     2233             surf_usm_h(0)%u_0(m) = u(k-1,j,i)
     2234
     2235          IF ( ABS( v(k+1,j,i) - surf_usm_h(0)%v_0(m) ) > ABS( v(k+1,j,i) - v(k-1,j,i) ) )            &
     2236             surf_usm_h(0)%v_0(m) = v(k-1,j,i)
     2237
     2238       ENDDO
     2239!
     2240!--    Urban surfaces, downward-facing surfaces
     2241       !$OMP PARALLEL DO PRIVATE(i,j,k,m)
     2242       !$ACC PARALLEL LOOP PRIVATE(i, j, k, m, km_sfc) &
     2243       !$ACC PRESENT(surf_usm_h(1), u, v, drho_air_zw, zu, km)
     2244       DO  m = 1, surf_usm_h(1)%ns
     2245
     2246          i = surf_usm_h(1)%i(m)
     2247          j = surf_usm_h(1)%j(m)
     2248          k = surf_usm_h(1)%k(m)
     2249!
     2250!--       Note, calculation of u_0 and v_0 is not fully accurate, as u/v and km are not on the same
     2251!--       grid. Actually, a further interpolation of km onto the u/v-grid is necessary. However, the
     2252!--       effect of this error is negligible.
     2253          surf_usm_h(1)%u_0(m) = u(k-1,j,i) - surf_usm_h(1)%usws(m) * drho_air_zw(k-1) *           &
     2254                                     ( zu(k+1) - zu(k-1) ) / ( km(k,j,i) + 1.0E-20_wp )
     2255          surf_usm_h(1)%v_0(m) = v(k-1,j,i) - surf_usm_h(1)%vsws(m) * drho_air_zw(k-1) *           &
     2256                                     ( zu(k+1) - zu(k-1) ) / (km(k,j,i) + 1.0E-20_wp )
     2257
     2258          IF ( ABS( surf_usm_h(1)%u_0(m) - u(k-1,j,i) ) > ABS( u(k+1,j,i) - u(k-1,j,i) ) )         &
     2259             surf_usm_h(1)%u_0(m) = u(k+1,j,i)
     2260
     2261          IF ( ABS( surf_usm_h(1)%v_0(m) - v(k-1,j,i) ) > ABS( v(k+1,j,i) - v(k-1,j,i) ) )         &
     2262             surf_usm_h(1)%v_0(m) = v(k+1,j,i)
    22072263
    22082264       ENDDO
     
    29633019!
    29643020!--          Natural surfaces
    2965              surf_s = surf_lsm_h%start_index(j,i)
    2966              surf_e = surf_lsm_h%end_index(j,i)
     3021             surf_s = surf_lsm_h(0)%start_index(j,i)
     3022             surf_e = surf_lsm_h(0)%end_index(j,i)
    29673023             !$ACC LOOP PRIVATE(m, k)
    29683024             DO  m = surf_s, surf_e
    2969                 k = surf_lsm_h%k(m)
    2970 
    2971                 dudz(k) = ( u(k+1,j,i) - surf_lsm_h%u_0(m) ) * dd2zu(k)
    2972                 dvdz(k) = ( v(k+1,j,i) - surf_lsm_h%v_0(m) ) * dd2zu(k)
     3025                k = surf_lsm_h(0)%k(m)
     3026
     3027                dudz(k) = ( u(k+1,j,i) - surf_lsm_h(0)%u_0(m) ) * dd2zu(k)
     3028                dvdz(k) = ( v(k+1,j,i) - surf_lsm_h(0)%v_0(m) ) * dd2zu(k)
    29733029
    29743030             ENDDO
    29753031!
    29763032!--          Urban surfaces
    2977              surf_s = surf_usm_h%start_index(j,i)
    2978              surf_e = surf_usm_h%end_index(j,i)
     3033             surf_s = surf_usm_h(0)%start_index(j,i)
     3034             surf_e = surf_usm_h(0)%end_index(j,i)
    29793035             !$ACC LOOP PRIVATE(m, k)
    29803036             DO  m = surf_s, surf_e
    2981                 k = surf_usm_h%k(m)
    2982 
    2983                 dudz(k) = ( u(k+1,j,i) - surf_usm_h%u_0(m) ) * dd2zu(k)
    2984                 dvdz(k) = ( v(k+1,j,i) - surf_usm_h%v_0(m) ) * dd2zu(k)
    2985 
    2986              ENDDO
    2987 !
    2988 !--          Compute gradients at downward-facing walls, only for non-natural default surfaces
     3037                k = surf_usm_h(0)%k(m)
     3038
     3039                dudz(k) = ( u(k+1,j,i) - surf_usm_h(0)%u_0(m) ) * dd2zu(k)
     3040                dvdz(k) = ( v(k+1,j,i) - surf_usm_h(0)%v_0(m) ) * dd2zu(k)
     3041
     3042             ENDDO
     3043!
     3044!--          Compute gradients at downward-facing surfaces, default surfaces
    29893045             surf_s = surf_def_h(1)%start_index(j,i)
    29903046             surf_e = surf_def_h(1)%end_index(j,i)
     
    29953051                dudz(k) = ( surf_def_h(1)%u_0(m) - u(k-1,j,i) ) * dd2zu(k)
    29963052                dvdz(k) = ( surf_def_h(1)%v_0(m) - v(k-1,j,i) ) * dd2zu(k)
     3053
     3054             ENDDO
     3055!
     3056!--          Compute gradients at downward-facing surfaces, natural surfaces
     3057             surf_s = surf_lsm_h(1)%start_index(j,i)
     3058             surf_e = surf_lsm_h(1)%end_index(j,i)
     3059             !$ACC LOOP PRIVATE(m, k)
     3060             DO  m = surf_s, surf_e
     3061                k = surf_lsm_h(1)%k(m)
     3062
     3063                dudz(k) = ( surf_lsm_h(1)%u_0(m) - u(k-1,j,i) ) * dd2zu(k)
     3064                dvdz(k) = ( surf_lsm_h(1)%v_0(m) - v(k-1,j,i) ) * dd2zu(k)
     3065
     3066             ENDDO
     3067!
     3068!--          Compute gradients at downward-facing surfaces, urban surfaces
     3069             surf_s = surf_usm_h(1)%start_index(j,i)
     3070             surf_e = surf_usm_h(1)%end_index(j,i)
     3071             !$ACC LOOP PRIVATE(m, k)
     3072             DO  m = surf_s, surf_e
     3073                k = surf_usm_h(1)%k(m)
     3074
     3075                dudz(k) = ( surf_usm_h(1)%u_0(m) - u(k-1,j,i) ) * dd2zu(k)
     3076                dvdz(k) = ( surf_usm_h(1)%v_0(m) - v(k-1,j,i) ) * dd2zu(k)
    29973077
    29983078             ENDDO
     
    31253205                            tmp_flux(k) = drho_air_zw(k-1) * surf_def_h(l)%shf(m)
    31263206                         ENDDO
    3127                       ENDDO
    3128 !
    3129 !--                   Natural surfaces
    3130                       surf_s = surf_lsm_h%start_index(j,i)
    3131                       surf_e = surf_lsm_h%end_index(j,i)
    3132                       !$ACC LOOP PRIVATE(m, k)
    3133                       DO  m = surf_s, surf_e
    3134                          k = surf_lsm_h%k(m)
    3135                          tmp_flux(k) = drho_air_zw(k-1) * surf_lsm_h%shf(m)
    3136                       ENDDO
    3137 !
    3138 !--                   Urban surfaces
    3139                       surf_s = surf_usm_h%start_index(j,i)
    3140                       surf_e = surf_usm_h%end_index(j,i)
    3141                       !$ACC LOOP PRIVATE(m, k)
    3142                       DO  m = surf_s, surf_e
    3143                          k = surf_usm_h%k(m)
    3144                          tmp_flux(k) = drho_air_zw(k-1) * surf_usm_h%shf(m)
     3207!
     3208!--                      Natural surfaces
     3209                         surf_s = surf_lsm_h(l)%start_index(j,i)
     3210                         surf_e = surf_lsm_h(l)%end_index(j,i)
     3211                         !$ACC LOOP PRIVATE(m, k)
     3212                         DO  m = surf_s, surf_e
     3213                            k = surf_lsm_h(l)%k(m)
     3214                            tmp_flux(k) = drho_air_zw(k-1) * surf_lsm_h(l)%shf(m)
     3215                         ENDDO
     3216!
     3217!--                      Urban surfaces
     3218                         surf_s = surf_usm_h(l)%start_index(j,i)
     3219                         surf_e = surf_usm_h(l)%end_index(j,i)
     3220                         !$ACC LOOP PRIVATE(m, k)
     3221                         DO  m = surf_s, surf_e
     3222                            k = surf_usm_h(l)%k(m)
     3223                            tmp_flux(k) = drho_air_zw(k-1) * surf_usm_h(l)%shf(m)
     3224                         ENDDO
    31453225                      ENDDO
    31463226                   ENDIF
     
    32613341!
    32623342!--                Treat horizontal natural surfaces
    3263                    surf_s = surf_lsm_h%start_index(j,i)
    3264                    surf_e = surf_lsm_h%end_index(j,i)
    3265                    DO  m = surf_s, surf_e
    3266                       k = surf_lsm_h%k(m)
    3267 
    3268                       IF (  .NOT.  bulk_cloud_model  .AND.  .NOT.  cloud_droplets )  THEN
    3269                          k1 = 1.0_wp + 0.61_wp * q(k,j,i)
    3270                          k2 = 0.61_wp * pt(k,j,i)
    3271                       ELSE IF ( bulk_cloud_model )  THEN
    3272                          IF ( ql(k,j,i) == 0.0_wp )  THEN
     3343                   DO  l = 0, 1
     3344                      surf_s = surf_lsm_h(l)%start_index(j,i)
     3345                      surf_e = surf_lsm_h(l)%end_index(j,i)
     3346                      DO  m = surf_s, surf_e
     3347                         k = surf_lsm_h(l)%k(m)
     3348
     3349                         IF (  .NOT.  bulk_cloud_model  .AND.  .NOT.  cloud_droplets )  THEN
    32733350                            k1 = 1.0_wp + 0.61_wp * q(k,j,i)
    32743351                            k2 = 0.61_wp * pt(k,j,i)
    3275                          ELSE
    3276                             theta = pt(k,j,i) + d_exner(k) * lv_d_cp * ql(k,j,i)
    3277                             temp  = theta * exner(k)
    3278                             k1 = ( 1.0_wp - q(k,j,i) + 1.61_wp * ( q(k,j,i) - ql(k,j,i) ) *        &
    3279                                  ( 1.0_wp + rd_d_rv * lv_d_rd / temp ) ) /                         &
    3280                                  ( 1.0_wp + rd_d_rv * lv_d_rd * lv_d_cp *                          &
    3281                                  ( q(k,j,i) - ql(k,j,i) ) / ( temp * temp ) )
    3282                             k2 = theta * ( lv_d_cp / temp * k1 - 1.0_wp )
     3352                         ELSE IF ( bulk_cloud_model )  THEN
     3353                            IF ( ql(k,j,i) == 0.0_wp )  THEN
     3354                               k1 = 1.0_wp + 0.61_wp * q(k,j,i)
     3355                               k2 = 0.61_wp * pt(k,j,i)
     3356                            ELSE
     3357                               theta = pt(k,j,i) + d_exner(k) * lv_d_cp * ql(k,j,i)
     3358                               temp  = theta * exner(k)
     3359                               k1 = ( 1.0_wp - q(k,j,i) + 1.61_wp * ( q(k,j,i) - ql(k,j,i) ) *        &
     3360                                    ( 1.0_wp + rd_d_rv * lv_d_rd / temp ) ) /                         &
     3361                                    ( 1.0_wp + rd_d_rv * lv_d_rd * lv_d_cp *                          &
     3362                                    ( q(k,j,i) - ql(k,j,i) ) / ( temp * temp ) )
     3363                               k2 = theta * ( lv_d_cp / temp * k1 - 1.0_wp )
     3364                            ENDIF
     3365                         ELSE IF ( cloud_droplets )  THEN
     3366                            k1 = 1.0_wp + 0.61_wp * q(k,j,i) - ql(k,j,i)
     3367                            k2 = 0.61_wp * pt(k,j,i)
    32833368                         ENDIF
    3284                       ELSE IF ( cloud_droplets )  THEN
    3285                          k1 = 1.0_wp + 0.61_wp * q(k,j,i) - ql(k,j,i)
    3286                          k2 = 0.61_wp * pt(k,j,i)
    3287                       ENDIF
    3288 
    3289                       tmp_flux(k) = ( k1 * surf_lsm_h%shf(m) + k2 * surf_lsm_h%qsws(m) )           &
    3290                                     * drho_air_zw(k-1)
     3369
     3370                         tmp_flux(k) = ( k1 * surf_lsm_h(l)%shf(m) + k2 * surf_lsm_h(l)%qsws(m) )     &
     3371                                       * drho_air_zw(k-1)
     3372                      ENDDO
    32913373                   ENDDO
    32923374!
    32933375!--                Treat horizontal urban surfaces
    3294                    surf_s = surf_usm_h%start_index(j,i)
    3295                    surf_e = surf_usm_h%end_index(j,i)
    3296                    DO  m = surf_s, surf_e
    3297                       k = surf_usm_h%k(m)
    3298 
    3299                       IF ( .NOT. bulk_cloud_model  .AND.  .NOT. cloud_droplets )  THEN
    3300                          k1 = 1.0_wp + 0.61_wp * q(k,j,i)
    3301                          k2 = 0.61_wp * pt(k,j,i)
    3302                       ELSE IF ( bulk_cloud_model )  THEN
    3303                          IF ( ql(k,j,i) == 0.0_wp )  THEN
     3376                   DO  l = 0, 1
     3377                      surf_s = surf_usm_h(l)%start_index(j,i)
     3378                      surf_e = surf_usm_h(l)%end_index(j,i)
     3379                      DO  m = surf_s, surf_e
     3380                         k = surf_usm_h(l)%k(m)
     3381
     3382                         IF ( .NOT. bulk_cloud_model  .AND.  .NOT. cloud_droplets )  THEN
    33043383                            k1 = 1.0_wp + 0.61_wp * q(k,j,i)
    33053384                            k2 = 0.61_wp * pt(k,j,i)
    3306                          ELSE
    3307                             theta = pt(k,j,i) + d_exner(k) * lv_d_cp * ql(k,j,i)
    3308                             temp  = theta * exner(k)
    3309                             k1 = ( 1.0_wp - q(k,j,i) + 1.61_wp * ( q(k,j,i) - ql(k,j,i) ) *        &
    3310                                  ( 1.0_wp + rd_d_rv * lv_d_rd / temp ) ) /                         &
    3311                                  ( 1.0_wp + rd_d_rv * lv_d_rd * lv_d_cp *                          &
    3312                                  ( q(k,j,i) - ql(k,j,i) ) / ( temp * temp ) )
    3313                             k2 = theta * ( lv_d_cp / temp * k1 - 1.0_wp )
     3385                         ELSE IF ( bulk_cloud_model )  THEN
     3386                            IF ( ql(k,j,i) == 0.0_wp )  THEN
     3387                               k1 = 1.0_wp + 0.61_wp * q(k,j,i)
     3388                               k2 = 0.61_wp * pt(k,j,i)
     3389                            ELSE
     3390                               theta = pt(k,j,i) + d_exner(k) * lv_d_cp * ql(k,j,i)
     3391                               temp  = theta * exner(k)
     3392                               k1 = ( 1.0_wp - q(k,j,i) + 1.61_wp * ( q(k,j,i) - ql(k,j,i) ) *        &
     3393                                    ( 1.0_wp + rd_d_rv * lv_d_rd / temp ) ) /                         &
     3394                                    ( 1.0_wp + rd_d_rv * lv_d_rd * lv_d_cp *                          &
     3395                                    ( q(k,j,i) - ql(k,j,i) ) / ( temp * temp ) )
     3396                               k2 = theta * ( lv_d_cp / temp * k1 - 1.0_wp )
     3397                            ENDIF
     3398                         ELSE IF ( cloud_droplets )  THEN
     3399                            k1 = 1.0_wp + 0.61_wp * q(k,j,i) - ql(k,j,i)
     3400                            k2 = 0.61_wp * pt(k,j,i)
    33143401                         ENDIF
    3315                       ELSE IF ( cloud_droplets )  THEN
    3316                          k1 = 1.0_wp + 0.61_wp * q(k,j,i) - ql(k,j,i)
    3317                          k2 = 0.61_wp * pt(k,j,i)
    3318                       ENDIF
    3319 
    3320                       tmp_flux(k) = ( k1 * surf_usm_h%shf(m) + k2 * surf_usm_h%qsws(m) )           &
    3321                                     * drho_air_zw(k-1)
     3402
     3403                         tmp_flux(k) = ( k1 * surf_usm_h(l)%shf(m) + k2 * surf_usm_h(l)%qsws(m) )     &
     3404                                       * drho_air_zw(k-1)
     3405                      ENDDO
    33223406                   ENDDO
    33233407
     
    36133697!
    36143698!--    Natural surfaces
    3615        surf_s = surf_lsm_h%start_index(j,i)
    3616        surf_e = surf_lsm_h%end_index(j,i)
     3699       surf_s = surf_lsm_h(0)%start_index(j,i)
     3700       surf_e = surf_lsm_h(0)%end_index(j,i)
    36173701       DO  m = surf_s, surf_e
    3618           k = surf_lsm_h%k(m)
    3619 
    3620           dudz(k) = ( u(k+1,j,i) - surf_lsm_h%u_0(m) ) * dd2zu(k)
    3621           dvdz(k) = ( v(k+1,j,i) - surf_lsm_h%v_0(m) ) * dd2zu(k)
     3702          k = surf_lsm_h(0)%k(m)
     3703
     3704          dudz(k) = ( u(k+1,j,i) - surf_lsm_h(0)%u_0(m) ) * dd2zu(k)
     3705          dvdz(k) = ( v(k+1,j,i) - surf_lsm_h(0)%v_0(m) ) * dd2zu(k)
    36223706
    36233707       ENDDO
    36243708!
    36253709!--    Urban surfaces
    3626        surf_s = surf_usm_h%start_index(j,i)
    3627        surf_e = surf_usm_h%end_index(j,i)
     3710       surf_s = surf_usm_h(0)%start_index(j,i)
     3711       surf_e = surf_usm_h(0)%end_index(j,i)
    36283712       DO  m = surf_s, surf_e
    3629           k = surf_usm_h%k(m)
    3630 
    3631           dudz(k) = ( u(k+1,j,i) - surf_usm_h%u_0(m) ) * dd2zu(k)
    3632           dvdz(k) = ( v(k+1,j,i) - surf_usm_h%v_0(m) ) * dd2zu(k)
     3713          k = surf_usm_h(0)%k(m)
     3714
     3715          dudz(k) = ( u(k+1,j,i) - surf_usm_h(0)%u_0(m) ) * dd2zu(k)
     3716          dvdz(k) = ( v(k+1,j,i) - surf_usm_h(0)%v_0(m) ) * dd2zu(k)
    36333717
    36343718       ENDDO
    36353719!
    3636 !--    Compute gradients at downward-facing walls, only for non-natural default surfaces
     3720!--    Compute gradients at downward-facing surfaces, default surfaces
    36373721       surf_s = surf_def_h(1)%start_index(j,i)
    36383722       surf_e = surf_def_h(1)%end_index(j,i)
    36393723       DO  m = surf_s, surf_e
    36403724          k = surf_def_h(1)%k(m)
    3641 
    36423725          dudz(k) = ( surf_def_h(1)%u_0(m) - u(k-1,j,i) ) * dd2zu(k)
    36433726          dvdz(k) = ( surf_def_h(1)%v_0(m) - v(k-1,j,i) ) * dd2zu(k)
    3644 
     3727       ENDDO
     3728!
     3729!--    Compute gradients at downward-facing surfaces, natural surfaces
     3730       surf_s = surf_lsm_h(1)%start_index(j,i)
     3731       surf_e = surf_lsm_h(1)%end_index(j,i)
     3732       DO  m = surf_s, surf_e
     3733          k = surf_lsm_h(1)%k(m)
     3734          dudz(k) = ( surf_lsm_h(1)%u_0(m) - u(k-1,j,i) ) * dd2zu(k)
     3735          dvdz(k) = ( surf_lsm_h(1)%v_0(m) - v(k-1,j,i) ) * dd2zu(k)
     3736       ENDDO
     3737!
     3738!--    Compute gradients at downward-facing surfaces, urban surfaces
     3739       surf_s = surf_usm_h(1)%start_index(j,i)
     3740       surf_e = surf_usm_h(1)%end_index(j,i)
     3741       DO  m = surf_s, surf_e
     3742          k = surf_usm_h(1)%k(m)
     3743          dudz(k) = ( surf_usm_h(1)%u_0(m) - u(k-1,j,i) ) * dd2zu(k)
     3744          dvdz(k) = ( surf_usm_h(1)%v_0(m) - v(k-1,j,i) ) * dd2zu(k)
    36453745       ENDDO
    36463746
     
    37473847                      tmp_flux(k) = drho_air_zw(k-1) * surf_def_h(l)%shf(m)
    37483848                   ENDDO
    3749                 ENDDO
    3750 !
    3751 !--             Natural surfaces
    3752                 surf_s = surf_lsm_h%start_index(j,i)
    3753                 surf_e = surf_lsm_h%end_index(j,i)
    3754                 DO  m = surf_s, surf_e
    3755                    k = surf_lsm_h%k(m)
    3756                    tmp_flux(k) = drho_air_zw(k-1) * surf_lsm_h%shf(m)
    3757                 ENDDO
    3758 !
    3759 !--             Urban surfaces
    3760                 surf_s = surf_usm_h%start_index(j,i)
    3761                 surf_e = surf_usm_h%end_index(j,i)
    3762                 DO  m = surf_s, surf_e
    3763                    k = surf_usm_h%k(m)
    3764                    tmp_flux(k) = drho_air_zw(k-1) * surf_usm_h%shf(m)
     3849!
     3850!--                Natural surfaces
     3851                   surf_s = surf_lsm_h(l)%start_index(j,i)
     3852                   surf_e = surf_lsm_h(l)%end_index(j,i)
     3853                   DO  m = surf_s, surf_e
     3854                      k = surf_lsm_h(l)%k(m)
     3855                      tmp_flux(k) = drho_air_zw(k-1) * surf_lsm_h(l)%shf(m)
     3856                   ENDDO
     3857!
     3858!--                Urban surfaces
     3859                   surf_s = surf_usm_h(l)%start_index(j,i)
     3860                   surf_e = surf_usm_h(l)%end_index(j,i)
     3861                   DO  m = surf_s, surf_e
     3862                      k = surf_usm_h(l)%k(m)
     3863                      tmp_flux(k) = drho_air_zw(k-1) * surf_usm_h(l)%shf(m)
     3864                   ENDDO
    37653865                ENDDO
    37663866             ENDIF
     
    38363936          IF ( use_surface_fluxes )  THEN
    38373937!
    3838 !--          Treat horizontal default surfaces
     3938!--          Treat horizontal surfaces
    38393939             DO  l = 0, 1
     3940!--             Default surfaces
    38403941                surf_s = surf_def_h(l)%start_index(j,i)
    38413942                surf_e = surf_def_h(l)%end_index(j,i)
     
    38673968                                 drho_air_zw(k-1)
    38683969                ENDDO
    3869              ENDDO
    3870 !
    3871 !--          Treat horizontal natural surfaces
    3872              surf_s = surf_lsm_h%start_index(j,i)
    3873              surf_e = surf_lsm_h%end_index(j,i)
    3874              DO  m = surf_s, surf_e
    3875                 k = surf_lsm_h%k(m)
    3876 
    3877                 IF ( .NOT. bulk_cloud_model  .AND.  .NOT. cloud_droplets )  THEN
    3878                    k1 = 1.0_wp + 0.61_wp * q(k,j,i)
    3879                    k2 = 0.61_wp * pt(k,j,i)
    3880                 ELSE IF ( bulk_cloud_model )  THEN
    3881                    IF ( ql(k,j,i) == 0.0_wp )  THEN
     3970!
     3971!--             natural surfaces
     3972                surf_s = surf_lsm_h(l)%start_index(j,i)
     3973                surf_e = surf_lsm_h(l)%end_index(j,i)
     3974                DO  m = surf_s, surf_e
     3975                   k = surf_lsm_h(l)%k(m)
     3976
     3977                   IF ( .NOT. bulk_cloud_model  .AND.  .NOT. cloud_droplets )  THEN
    38823978                      k1 = 1.0_wp + 0.61_wp * q(k,j,i)
    38833979                      k2 = 0.61_wp * pt(k,j,i)
    3884                    ELSE
    3885                       theta = pt(k,j,i) + d_exner(k) * lv_d_cp * ql(k,j,i)
    3886                       temp  = theta * exner(k)
    3887                       k1 = ( 1.0_wp - q(k,j,i) + 1.61_wp * ( q(k,j,i) - ql(k,j,i) ) *              &
    3888                            ( 1.0_wp + rd_d_rv * lv_d_rd / temp ) ) /                               &
    3889                            ( 1.0_wp + rd_d_rv * lv_d_rd * lv_d_cp *                                &
    3890                            ( q(k,j,i) - ql(k,j,i) ) / ( temp * temp ) )
    3891                       k2 = theta * ( lv_d_cp / temp * k1 - 1.0_wp )
     3980                   ELSE IF ( bulk_cloud_model )  THEN
     3981                      IF ( ql(k,j,i) == 0.0_wp )  THEN
     3982                         k1 = 1.0_wp + 0.61_wp * q(k,j,i)
     3983                         k2 = 0.61_wp * pt(k,j,i)
     3984                      ELSE
     3985                         theta = pt(k,j,i) + d_exner(k) * lv_d_cp * ql(k,j,i)
     3986                         temp  = theta * exner(k)
     3987                         k1 = ( 1.0_wp - q(k,j,i) + 1.61_wp * ( q(k,j,i) - ql(k,j,i) ) *              &
     3988                              ( 1.0_wp + rd_d_rv * lv_d_rd / temp ) ) /                               &
     3989                              ( 1.0_wp + rd_d_rv * lv_d_rd * lv_d_cp *                                &
     3990                              ( q(k,j,i) - ql(k,j,i) ) / ( temp * temp ) )
     3991                         k2 = theta * ( lv_d_cp / temp * k1 - 1.0_wp )
     3992                      ENDIF
     3993                   ELSE IF ( cloud_droplets )  THEN
     3994                      k1 = 1.0_wp + 0.61_wp * q(k,j,i) - ql(k,j,i)
     3995                      k2 = 0.61_wp * pt(k,j,i)
    38923996                   ENDIF
    3893                 ELSE IF ( cloud_droplets )  THEN
    3894                    k1 = 1.0_wp + 0.61_wp * q(k,j,i) - ql(k,j,i)
    3895                    k2 = 0.61_wp * pt(k,j,i)
    3896                 ENDIF
    3897 
    3898                 tmp_flux(k) = ( k1 * surf_lsm_h%shf(m) + k2 * surf_lsm_h%qsws(m) ) *               &
    3899                               drho_air_zw(k-1)
    3900              ENDDO
    3901 !
    3902 !--          Treat horizontal urban surfaces
    3903              surf_s = surf_usm_h%start_index(j,i)
    3904              surf_e = surf_usm_h%end_index(j,i)
    3905              DO  m = surf_s, surf_e
    3906                 k = surf_usm_h%k(m)
    3907 
    3908                 IF ( .NOT. bulk_cloud_model  .AND.  .NOT. cloud_droplets )  THEN
    3909                    k1 = 1.0_wp + 0.61_wp * q(k,j,i)
    3910                    k2 = 0.61_wp * pt(k,j,i)
    3911                 ELSE IF ( bulk_cloud_model )  THEN
    3912                    IF ( ql(k,j,i) == 0.0_wp )  THEN
     3997
     3998                   tmp_flux(k) = ( k1 * surf_lsm_h(l)%shf(m) + k2 * surf_lsm_h(l)%qsws(m) ) *         &
     3999                                 drho_air_zw(k-1)
     4000                ENDDO
     4001!
     4002!--             urban surfaces
     4003                surf_s = surf_usm_h(l)%start_index(j,i)
     4004                surf_e = surf_usm_h(l)%end_index(j,i)
     4005                DO  m = surf_s, surf_e
     4006                   k = surf_usm_h(l)%k(m)
     4007
     4008                   IF ( .NOT. bulk_cloud_model  .AND.  .NOT. cloud_droplets )  THEN
    39134009                      k1 = 1.0_wp + 0.61_wp * q(k,j,i)
    39144010                      k2 = 0.61_wp * pt(k,j,i)
    3915                    ELSE
    3916                       theta = pt(k,j,i) + d_exner(k) * lv_d_cp * ql(k,j,i)
    3917                       temp  = theta * exner(k)
    3918                       k1 = ( 1.0_wp - q(k,j,i) + 1.61_wp * ( q(k,j,i) - ql(k,j,i) ) *              &
    3919                            ( 1.0_wp + rd_d_rv * lv_d_rd / temp ) ) /                               &
    3920                            ( 1.0_wp + rd_d_rv * lv_d_rd * lv_d_cp *                                &
    3921                            ( q(k,j,i) - ql(k,j,i) ) / ( temp * temp ) )
    3922                       k2 = theta * ( lv_d_cp / temp * k1 - 1.0_wp )
     4011                   ELSE IF ( bulk_cloud_model )  THEN
     4012                      IF ( ql(k,j,i) == 0.0_wp )  THEN
     4013                         k1 = 1.0_wp + 0.61_wp * q(k,j,i)
     4014                         k2 = 0.61_wp * pt(k,j,i)
     4015                      ELSE
     4016                         theta = pt(k,j,i) + d_exner(k) * lv_d_cp * ql(k,j,i)
     4017                         temp  = theta * exner(k)
     4018                         k1 = ( 1.0_wp - q(k,j,i) + 1.61_wp * ( q(k,j,i) - ql(k,j,i) ) *              &
     4019                              ( 1.0_wp + rd_d_rv * lv_d_rd / temp ) ) /                               &
     4020                              ( 1.0_wp + rd_d_rv * lv_d_rd * lv_d_cp *                                &
     4021                              ( q(k,j,i) - ql(k,j,i) ) / ( temp * temp ) )
     4022                         k2 = theta * ( lv_d_cp / temp * k1 - 1.0_wp )
     4023                      ENDIF
     4024                   ELSE IF ( cloud_droplets )  THEN
     4025                      k1 = 1.0_wp + 0.61_wp * q(k,j,i) - ql(k,j,i)
     4026                      k2 = 0.61_wp * pt(k,j,i)
    39234027                   ENDIF
    3924                 ELSE IF ( cloud_droplets )  THEN
    3925                    k1 = 1.0_wp + 0.61_wp * q(k,j,i) - ql(k,j,i)
    3926                    k2 = 0.61_wp * pt(k,j,i)
    3927                 ENDIF
    3928 
    3929                 tmp_flux(k) = ( k1 * surf_usm_h%shf(m) + k2 * surf_usm_h%qsws(m) ) *               &
    3930                               drho_air_zw(k-1)
     4028
     4029                   tmp_flux(k) = ( k1 * surf_usm_h(l)%shf(m) + k2 * surf_usm_h(l)%qsws(m) ) *         &
     4030                                 drho_air_zw(k-1)
     4031                ENDDO
    39314032             ENDDO
    39324033
     
    46104711    INTEGER(iwp) ::  j  !< loop index
    46114712    INTEGER(iwp) ::  k  !< loop index
     4713    INTEGER(iwp) ::  l  !< loop index
    46124714    INTEGER(iwp) ::  m  !< loop index
    4613     INTEGER(iwp) ::  n  !< loop index
    46144715
    46154716    REAL(wp) ::  var_reference  !< reference temperature
     
    46474748!--    Upward facing surfaces
    46484749!--    Default surfaces
    4649        n = 0
    4650        !$OMP PARALLEL DO PRIVATE(i,j,k,m)
    4651        DO  m = 1, surf_def_h(0)%ns
    4652           i = surf_def_h(0)%i(m)
    4653           j = surf_def_h(0)%j(m)
    4654           k = surf_def_h(0)%k(m)
    4655           km(k,j,i) = kappa * surf_def_h(0)%us(m) * surf_def_h(0)%z_mo(m) /                        &
    4656                       phi_m( surf_def_h(0)%z_mo(m) / surf_def_h(0)%ol(m) )
    4657           kh(k,j,i) = 1.35_wp * km(k,j,i)
     4750       DO l = 0, 1
     4751          !$OMP PARALLEL DO PRIVATE(i,j,k,m)
     4752          DO  m = 1, surf_def_h(l)%ns
     4753             i = surf_def_h(l)%i(m)
     4754             j = surf_def_h(l)%j(m)
     4755             k = surf_def_h(l)%k(m)
     4756             km(k,j,i) = kappa * surf_def_h(l)%us(m) * surf_def_h(l)%z_mo(m) /                        &
     4757                         phi_m( surf_def_h(l)%z_mo(m) / surf_def_h(l)%ol(m) )
     4758             kh(k,j,i) = 1.35_wp * km(k,j,i)
     4759          ENDDO
     4760!
     4761!--       Natural surfaces
     4762          !$OMP PARALLEL DO PRIVATE(i,j,k,m)
     4763          DO  m = 1, surf_lsm_h(l)%ns
     4764             i = surf_lsm_h(l)%i(m)
     4765             j = surf_lsm_h(l)%j(m)
     4766             k = surf_lsm_h(l)%k(m)
     4767             km(k,j,i) = kappa * surf_lsm_h(l)%us(m) * surf_lsm_h(l)%z_mo(m) /                              &
     4768                         phi_m( surf_lsm_h(l)%z_mo(m) / surf_lsm_h(l)%ol(m) )
     4769             kh(k,j,i) = 1.35_wp * km(k,j,i)
     4770          ENDDO
     4771!
     4772!--       Urban surfaces
     4773          !$OMP PARALLEL DO PRIVATE(i,j,k,m)
     4774          DO  m = 1, surf_usm_h(l)%ns
     4775             i = surf_usm_h(l)%i(m)
     4776             j = surf_usm_h(l)%j(m)
     4777             k = surf_usm_h(l)%k(m)
     4778             km(k,j,i) = kappa * surf_usm_h(l)%us(m) * surf_usm_h(l)%z_mo(m) /                              &
     4779                         phi_m( surf_usm_h(l)%z_mo(m) / surf_usm_h(l)%ol(m) )
     4780             kh(k,j,i) = 1.35_wp * km(k,j,i)
     4781          ENDDO
    46584782       ENDDO
    4659 !
    4660 !--    Natural surfaces
    4661        !$OMP PARALLEL DO PRIVATE(i,j,k,m)
    4662        DO  m = 1, surf_lsm_h%ns
    4663           i = surf_lsm_h%i(m)
    4664           j = surf_lsm_h%j(m)
    4665           k = surf_lsm_h%k(m)
    4666           km(k,j,i) = kappa * surf_lsm_h%us(m) * surf_lsm_h%z_mo(m) /                              &
    4667                       phi_m( surf_lsm_h%z_mo(m) / surf_lsm_h%ol(m) )
    4668           kh(k,j,i) = 1.35_wp * km(k,j,i)
    4669        ENDDO
    4670 !
    4671 !--    Urban surfaces
    4672        !$OMP PARALLEL DO PRIVATE(i,j,k,m)
    4673        DO  m = 1, surf_usm_h%ns
    4674           i = surf_usm_h%i(m)
    4675           j = surf_usm_h%j(m)
    4676           k = surf_usm_h%k(m)
    4677           km(k,j,i) = kappa * surf_usm_h%us(m) * surf_usm_h%z_mo(m) /                              &
    4678                       phi_m( surf_usm_h%z_mo(m) / surf_usm_h%ol(m) )
    4679           kh(k,j,i) = 1.35_wp * km(k,j,i)
    4680        ENDDO
    4681 
    46824783!
    46834784!--    North-, south-, west and eastward facing surfaces
    46844785!--    Do not consider stratification at these surfaces.
    4685        DO  n = 0, 3
     4786       DO  l = 0, 3
    46864787!
    46874788!--       Default surfaces
    46884789          !$OMP PARALLEL DO PRIVATE(i,j,k,m)
    4689           DO  m = 1, surf_def_v(n)%ns
    4690              i = surf_def_v(n)%i(m)
    4691              j = surf_def_v(n)%j(m)
    4692              k = surf_def_v(n)%k(m)
    4693              km(k,j,i) = kappa * surf_def_v(n)%us(m) * surf_def_v(n)%z_mo(m)
     4790          DO  m = 1, surf_def_v(l)%ns
     4791             i = surf_def_v(l)%i(m)
     4792             j = surf_def_v(l)%j(m)
     4793             k = surf_def_v(l)%k(m)
     4794             km(k,j,i) = kappa * surf_def_v(l)%us(m) * surf_def_v(l)%z_mo(m)
    46944795             kh(k,j,i) = 1.35_wp * km(k,j,i)
    46954796          ENDDO
     
    46974798!--       Natural surfaces
    46984799          !$OMP PARALLEL DO PRIVATE(i,j,k,m)
    4699           DO  m = 1, surf_lsm_v(n)%ns
    4700              i = surf_lsm_v(n)%i(m)
    4701              j = surf_lsm_v(n)%j(m)
    4702              k = surf_lsm_v(n)%k(m)
    4703              km(k,j,i) = kappa * surf_lsm_v(n)%us(m) * surf_lsm_v(n)%z_mo(m)
     4800          DO  m = 1, surf_lsm_v(l)%ns
     4801             i = surf_lsm_v(l)%i(m)
     4802             j = surf_lsm_v(l)%j(m)
     4803             k = surf_lsm_v(l)%k(m)
     4804             km(k,j,i) = kappa * surf_lsm_v(l)%us(m) * surf_lsm_v(l)%z_mo(m)
    47044805             kh(k,j,i) = 1.35_wp * km(k,j,i)
    47054806          ENDDO
     
    47074808!--       Urban surfaces
    47084809          !$OMP PARALLEL DO PRIVATE(i,j,k,m)
    4709           DO  m = 1, surf_usm_v(n)%ns
    4710              i = surf_usm_v(n)%i(m)
    4711              j = surf_usm_v(n)%j(m)
    4712              k = surf_usm_v(n)%k(m)
    4713              km(k,j,i) = kappa * surf_usm_v(n)%us(m) * surf_usm_v(n)%z_mo(m)
     4810          DO  m = 1, surf_usm_v(l)%ns
     4811             i = surf_usm_v(l)%i(m)
     4812             j = surf_usm_v(l)%j(m)
     4813             k = surf_usm_v(l)%k(m)
     4814             km(k,j,i) = kappa * surf_usm_v(l)%us(m) * surf_usm_v(l)%z_mo(m)
    47144815             kh(k,j,i) = 1.35_wp * km(k,j,i)
    47154816          ENDDO
Note: See TracChangeset for help on using the changeset viewer.