Ignore:
Timestamp:
May 30, 2017 5:47:52 PM (7 years ago)
Author:
suehring
Message:

Adjustments according new topography and surface-modelling concept implemented

File:
1 edited

Legend:

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

    r2230 r2232  
    2121! Current revisions:
    2222! ------------------
    23 !
     23! Adjustments to new topography concept
    2424!
    2525! Former revisions:
     
    139139    USE arrays_3d,                                                             &
    140140        ONLY:  dzu, dzw, e, e_p, nr, pt, pt_p, q, q_p, qr, u, u_p, v, v_p,     &
    141                w, w_p, zu, zw, z0
     141               w, w_p, zu, zw
    142142#else
    143143   USE arrays_3d,                                                              &
    144144        ONLY:  dzu, dzw, e, e_p, e_1, e_2, nr, nr_2, nr_p, pt, pt_p, pt_1,     &
    145145               pt_2, q, q_p, q_1, q_2, qr, qr_2, s, s_2, u, u_p, u_1, u_2, v,  &
    146                v_p, v_1, v_2, w, w_p, w_1, w_2, zu, zw, z0
     146               v_p, v_1, v_2, w, w_p, w_1, w_2, zu, zw
    147147#endif
    148148
     
    151151               message_string, microphysics_seifert, nest_bound_l, nest_bound_r,&
    152152               nest_bound_s, nest_bound_n, nest_domain, neutral, passive_scalar,&
    153                simulated_time, topography, volume_flow
     153               roughness_length, simulated_time, topography, volume_flow
    154154
    155155    USE cpulog,                                                                 &
     
    161161    USE indices,                                                                &
    162162        ONLY:  nbgp, nx, nxl, nxlg, nxlu, nxr, nxrg, ny, nyn, nyng, nys, nysg,  &
    163                nysv, nz, nzb, nzb_s_inner, nzb_u_inner, nzb_u_outer,            &
    164                nzb_v_inner, nzb_v_outer, nzb_w_inner, nzb_w_outer, nzt
     163               nysv, nz, nzb, nzb_max, nzt, wall_flags_0
    165164
    166165    USE kinds
     
    201200
    202201#endif
     202
     203    USE surface_mod,                                                            &
     204        ONLY:  surf_def_h, surf_lsm_h, surf_usm_h
    203205
    204206    IMPLICIT NONE
     
    13101312
    13111313       INTEGER(iwp) ::  direction    !:  Wall normal index: 1=k, 2=j, 3=i.
     1314       INTEGER(iwp) ::  end_index    !:  End index of present surface data type
    13121315       INTEGER(iwp) ::  i            !:
    13131316       INTEGER(iwp) ::  icorr        !:
     
    13191322       INTEGER(iwp) ::  jw           !:
    13201323       INTEGER(iwp) ::  k            !:
     1324       INTEGER(iwp) ::  k_wall_u_ji    !:
     1325       INTEGER(iwp) ::  k_wall_u_ji_p  !:
     1326       INTEGER(iwp) ::  k_wall_u_ji_m  !:
     1327       INTEGER(iwp) ::  k_wall_v_ji    !:
     1328       INTEGER(iwp) ::  k_wall_v_ji_p  !:
     1329       INTEGER(iwp) ::  k_wall_v_ji_m  !:
     1330       INTEGER(iwp) ::  k_wall_w_ji    !:
     1331       INTEGER(iwp) ::  k_wall_w_ji_p  !:
     1332       INTEGER(iwp) ::  k_wall_w_ji_m  !:
    13211333       INTEGER(iwp) ::  kb           !:
    13221334       INTEGER(iwp) ::  kcorr        !:
    13231335       INTEGER(iwp) ::  lc           !:
     1336       INTEGER(iwp) ::  m            !: Running index for surface data type
    13241337       INTEGER(iwp) ::  ni           !:
    13251338       INTEGER(iwp) ::  nj           !:
    13261339       INTEGER(iwp) ::  nk           !:
    13271340       INTEGER(iwp) ::  nzt_topo_max !:
     1341       INTEGER(iwp) ::  start_index  !:  Start index of present surface data type
    13281342       INTEGER(iwp) ::  wall_index   !:  Index of the wall-node coordinate
    13291343
     1344       REAL(wp)     ::  z0_topo      !:  roughness at vertical walls
    13301345       REAL(wp), ALLOCATABLE, DIMENSION(:) ::  lcr   !:
    13311346
     
    13391354          DO  i = nxl-1, nxl
    13401355             DO  j = nys, nyn
    1341                 nzt_topo_nestbc_l = MAX( nzt_topo_nestbc_l, nzb_u_inner(j,i),   &
    1342                                          nzb_v_inner(j,i), nzb_w_inner(j,i) )
     1356!
     1357!--             Concept need to be reconsidered for 3D-topography
     1358!--             Determine largest topography index on scalar grid
     1359                nzt_topo_nestbc_l = MAX( nzt_topo_nestbc_l,                    &
     1360                  MAXLOC(                                                      &
     1361                          MERGE( 1, 0,                                         &
     1362                                 BTEST( wall_flags_0(nzb:nzb_max,j,i), 12 )    &
     1363                               ), DIM = 1                                      &
     1364                        ) - 1          )
     1365!
     1366!--             Determine largest topography index on u grid
     1367                nzt_topo_nestbc_l = MAX( nzt_topo_nestbc_l,                    &
     1368                  MAXLOC(                                                      &
     1369                          MERGE( 1, 0,                                         &
     1370                                 BTEST( wall_flags_0(nzb:nzb_max,j,i), 14 )  &
     1371                               ), DIM = 1                                      &
     1372                        ) - 1          )
     1373!
     1374!--             Determine largest topography index on v grid
     1375                nzt_topo_nestbc_l = MAX( nzt_topo_nestbc_l,                    &
     1376                  MAXLOC(                                                      &
     1377                          MERGE( 1, 0,                                         &
     1378                                 BTEST( wall_flags_0(nzb:nzb_max,j,i), 16 )  &
     1379                               ), DIM = 1                                      &
     1380                        ) - 1          )
     1381!
     1382!--             Determine largest topography index on w grid
     1383                nzt_topo_nestbc_l = MAX( nzt_topo_nestbc_l,                    &
     1384                  MAXLOC(                                                      &
     1385                          MERGE( 1, 0,                                         &
     1386                                 BTEST( wall_flags_0(nzb:nzb_max,j,i), 18 )  &
     1387                               ), DIM = 1                                      &
     1388                        ) - 1          )
    13431389             ENDDO
    13441390          ENDDO
     
    13501396          i = nxr + 1
    13511397          DO  j = nys, nyn
    1352              nzt_topo_nestbc_r = MAX( nzt_topo_nestbc_r, nzb_u_inner(j,i),      &
    1353                                       nzb_v_inner(j,i), nzb_w_inner(j,i) )
     1398!
     1399!--             Concept need to be reconsidered for 3D-topography
     1400!--             Determine largest topography index on scalar grid
     1401                nzt_topo_nestbc_r = MAX( nzt_topo_nestbc_r,                    &
     1402                  MAXLOC(                                                      &
     1403                          MERGE( 1, 0,                                         &
     1404                                 BTEST( wall_flags_0(nzb:nzb_max,j,i), 12 )  &
     1405                               ), DIM = 1                                      &
     1406                        ) - 1          )
     1407!
     1408!--             Determine largest topography index on u grid
     1409                nzt_topo_nestbc_r = MAX( nzt_topo_nestbc_r,                    &
     1410                  MAXLOC(                                                      &
     1411                          MERGE( 1, 0,                                         &
     1412                                 BTEST( wall_flags_0(nzb:nzb_max,j,i), 14 )  &
     1413                               ), DIM = 1                                      &
     1414                        ) - 1          )
     1415!
     1416!--             Determine largest topography index on v grid
     1417                nzt_topo_nestbc_r = MAX( nzt_topo_nestbc_r,                    &
     1418                  MAXLOC(                                                      &
     1419                          MERGE( 1, 0,                                         &
     1420                                 BTEST( wall_flags_0(nzb:nzb_max,j,i), 16 )  &
     1421                               ), DIM = 1                                      &
     1422                        ) - 1          )
     1423!
     1424!--             Determine largest topography index on w grid
     1425                nzt_topo_nestbc_r = MAX( nzt_topo_nestbc_r,                    &
     1426                  MAXLOC(                                                      &
     1427                          MERGE( 1, 0,                                         &
     1428                                 BTEST( wall_flags_0(nzb:nzb_max,j,i), 18 )  &
     1429                               ), DIM = 1                                      &
     1430                        ) - 1          )
    13541431          ENDDO
    13551432          nzt_topo_nestbc_r = nzt_topo_nestbc_r + 1
     
    13601437          DO  j = nys-1, nys
    13611438             DO  i = nxl, nxr
    1362                 nzt_topo_nestbc_s = MAX( nzt_topo_nestbc_s, nzb_u_inner(j,i),   &
    1363                                          nzb_v_inner(j,i), nzb_w_inner(j,i) )
     1439!
     1440!--             Concept need to be reconsidered for 3D-topography
     1441!--             Determine largest topography index on scalar grid
     1442                nzt_topo_nestbc_s = MAX( nzt_topo_nestbc_s,                    &
     1443                  MAXLOC(                                                      &
     1444                          MERGE( 1, 0,                                         &
     1445                                 BTEST( wall_flags_0(nzb:nzb_max,j,i), 12 )  &
     1446                               ), DIM = 1                                      &
     1447                        ) - 1          )
     1448!
     1449!--             Determine largest topography index on u grid
     1450                nzt_topo_nestbc_s = MAX( nzt_topo_nestbc_s,                    &
     1451                  MAXLOC(                                                      &
     1452                          MERGE( 1, 0,                                         &
     1453                                 BTEST( wall_flags_0(nzb:nzb_max,j,i), 14 )  &
     1454                               ), DIM = 1                                      &
     1455                        ) - 1          )
     1456!
     1457!--             Determine largest topography index on v grid
     1458                nzt_topo_nestbc_s = MAX( nzt_topo_nestbc_s,                    &
     1459                  MAXLOC(                                                      &
     1460                          MERGE( 1, 0,                                         &
     1461                                 BTEST( wall_flags_0(nzb:nzb_max,j,i), 16 )  &
     1462                               ), DIM = 1                                      &
     1463                        ) - 1          )
     1464!
     1465!--             Determine largest topography index on w grid
     1466                nzt_topo_nestbc_s = MAX( nzt_topo_nestbc_s,                    &
     1467                  MAXLOC(                                                      &
     1468                          MERGE( 1, 0,                                         &
     1469                                 BTEST( wall_flags_0(nzb:nzb_max,j,i), 18 )  &
     1470                               ), DIM = 1                                      &
     1471                        ) - 1          )
    13641472             ENDDO
    13651473          ENDDO
     
    13711479          j = nyn + 1
    13721480          DO  i = nxl, nxr
    1373              nzt_topo_nestbc_n = MAX( nzt_topo_nestbc_n, nzb_u_inner(j,i),      &
    1374                                       nzb_v_inner(j,i), nzb_w_inner(j,i) )
     1481!
     1482!--             Concept need to be reconsidered for 3D-topography
     1483!--             Determine largest topography index on scalar grid
     1484                nzt_topo_nestbc_n = MAX( nzt_topo_nestbc_n,                    &
     1485                  MAXLOC(                                                      &
     1486                          MERGE( 1, 0,                                         &
     1487                                 BTEST( wall_flags_0(nzb:nzb_max,j,i), 12 )  &
     1488                               ), DIM = 1                                      &
     1489                        ) - 1          )
     1490!
     1491!--             Determine largest topography index on u grid
     1492                nzt_topo_nestbc_n = MAX( nzt_topo_nestbc_n,                    &
     1493                  MAXLOC(                                                      &
     1494                          MERGE( 1, 0,                                         &
     1495                                 BTEST( wall_flags_0(nzb:nzb_max,j,i), 14 )  &
     1496                               ), DIM = 1                                      &
     1497                        ) - 1          )
     1498!
     1499!--             Determine largest topography index on v grid
     1500                nzt_topo_nestbc_n = MAX( nzt_topo_nestbc_n,                    &
     1501                  MAXLOC(                                                      &
     1502                          MERGE( 1, 0,                                         &
     1503                                 BTEST( wall_flags_0(nzb:nzb_max,j,i), 16 )  &
     1504                               ), DIM = 1                                      &
     1505                        ) - 1          )
     1506!
     1507!--             Determine largest topography index on w grid
     1508                nzt_topo_nestbc_n = MAX( nzt_topo_nestbc_n,                    &
     1509                  MAXLOC(                                                      &
     1510                          MERGE( 1, 0,                                         &
     1511                                 BTEST( wall_flags_0(nzb:nzb_max,j,i), 18 )  &
     1512                               ), DIM = 1                                      &
     1513                        ) - 1          )
    13751514          ENDDO
    13761515          nzt_topo_nestbc_n = nzt_topo_nestbc_n + 1
     
    14221561!--          Left boundary for u
    14231562             i   = 0
    1424              kb  = nzb_u_inner(j,i)
    1425              k   = kb + 1
    1426              wall_index = kb
    1427              CALL pmci_define_loglaw_correction_parameters( lc, lcr, k, j,      &
    1428                                 inc, wall_index, z0(j,i), kb, direction, ncorr )
     1563!
     1564!--          For loglaw correction the roughness z0 is required. z0, however,
     1565!--          is part of the surfacetypes now, so call subroutine according
     1566!--          to the present surface tpye.
     1567!--          Default surface type
     1568             IF ( surf_def_h(0)%start_index(j,i) <=                            &
     1569                  surf_def_h(0)%end_index(j,i) )  THEN
     1570                start_index = surf_def_h(0)%start_index(j,i)
     1571                end_index   = surf_def_h(0)%end_index(j,i)
     1572                DO  m = start_index, end_index
     1573                   k          = surf_def_h(0)%k(m)
     1574                   wall_index = k - 1
     1575                   kb         = k - 1
     1576                   CALL pmci_define_loglaw_correction_parameters( lc, lcr, k,  &
     1577                            j, inc, wall_index, surf_def_h(0)%z0(m), &
     1578                            kb, direction, ncorr )
     1579                ENDDO
     1580!
     1581!--          Natural surface type
     1582             ELSEIF ( surf_lsm_h%start_index(j,i) <=                           &
     1583                      surf_lsm_h%end_index(j,i) )  THEN
     1584                start_index = surf_lsm_h%start_index(j,i)
     1585                end_index   = surf_lsm_h%end_index(j,i)
     1586                DO  m = start_index, end_index
     1587                   k          = surf_lsm_h%k(m)
     1588                   wall_index = k - 1
     1589                   kb         = k - 1
     1590                   CALL pmci_define_loglaw_correction_parameters( lc, lcr, k,  &
     1591                            j, inc, wall_index, surf_lsm_h%z0(m),    &
     1592                            kb, direction, ncorr )
     1593                ENDDO
     1594!
     1595!--          Urban surface type
     1596             ELSEIF ( surf_usm_h%start_index(j,i) <=                           &
     1597                      surf_usm_h%end_index(j,i) )  THEN
     1598                start_index = surf_usm_h%start_index(j,i)
     1599                end_index = surf_usm_h%end_index(j,i)
     1600                DO  m = start_index, end_index
     1601                   k          = surf_usm_h%k(m)
     1602                   wall_index = k - 1
     1603                   kb         = k - 1
     1604                   CALL pmci_define_loglaw_correction_parameters( lc, lcr, k,  &
     1605                            j, inc, wall_index, surf_usm_h%z0(m),    &
     1606                            kb, direction, ncorr )
     1607                ENDDO
     1608             ENDIF
    14291609             logc_u_l(1,k,j) = lc
    14301610             logc_ratio_u_l(1,0:ncorr-1,k,j) = lcr(0:ncorr-1)
     
    14331613!--          Left boundary for v
    14341614             i   = -1
    1435              kb  =  nzb_v_inner(j,i)
    1436              k   =  kb + 1
    1437              wall_index = kb
    1438              CALL pmci_define_loglaw_correction_parameters( lc, lcr, k, j,      &
    1439                                 inc, wall_index, z0(j,i), kb, direction, ncorr )
     1615!
     1616!--          For loglaw correction the roughness z0 is required. z0, however,
     1617!--          is part of the surfacetypes now, so call subroutine according
     1618!--          to the present surface tpye.
     1619!--          Default surface type
     1620             IF ( surf_def_h(0)%start_index(j,i) <=                            &
     1621                  surf_def_h(0)%end_index(j,i) )  THEN
     1622                start_index = surf_def_h(0)%start_index(j,i)
     1623                end_index   = surf_def_h(0)%end_index(j,i)
     1624                DO  m = start_index, end_index
     1625                   k          = surf_def_h(0)%k(m)
     1626                   wall_index = k - 1
     1627                   kb         = k - 1
     1628                   CALL pmci_define_loglaw_correction_parameters( lc, lcr, k,  &
     1629                            j, inc, wall_index, surf_def_h(0)%z0(m), &
     1630                            kb, direction, ncorr )
     1631                ENDDO
     1632!
     1633!--          Natural surface type
     1634             ELSEIF ( surf_lsm_h%start_index(j,i) <=                           &
     1635                      surf_lsm_h%end_index(j,i) )  THEN
     1636                start_index = surf_lsm_h%start_index(j,i)
     1637                end_index   = surf_lsm_h%end_index(j,i)
     1638                DO  m = start_index, end_index
     1639                   k          = surf_lsm_h%k(m)
     1640                   wall_index = k - 1
     1641                   kb         = k - 1
     1642                   CALL pmci_define_loglaw_correction_parameters( lc, lcr, k,  &
     1643                            j, inc, wall_index, surf_lsm_h%z0(m),    &
     1644                            kb, direction, ncorr )
     1645                ENDDO
     1646!
     1647!--          Urban surface type
     1648             ELSEIF ( surf_usm_h%start_index(j,i) <=                           &
     1649                      surf_usm_h%end_index(j,i) )  THEN
     1650                start_index = surf_usm_h%start_index(j,i)
     1651                end_index = surf_usm_h%end_index(j,i)
     1652                DO  m = start_index, end_index
     1653                   k          = surf_usm_h%k(m)
     1654                   wall_index = k - 1
     1655                   kb         = k - 1
     1656                   CALL pmci_define_loglaw_correction_parameters( lc, lcr, k,  &
     1657                            j, inc, wall_index, surf_usm_h%z0(m),    &
     1658                            kb, direction, ncorr )
     1659                ENDDO
     1660             ENDIF
    14401661             logc_v_l(1,k,j) = lc
    14411662             logc_ratio_v_l(1,0:ncorr-1,k,j) = lcr(0:ncorr-1)
     
    14691690!--          Right boundary for u
    14701691             i   = nxr + 1
    1471              kb  = nzb_u_inner(j,i)
    1472              k   = kb + 1
    1473              wall_index = kb
    1474              CALL pmci_define_loglaw_correction_parameters( lc, lcr, k, j,      &
    1475                                 inc, wall_index, z0(j,i), kb, direction, ncorr )
     1692!
     1693!--          For loglaw correction the roughness z0 is required. z0, however,
     1694!--          is part of the surfacetypes now, so call subroutine according
     1695!--          to the present surface tpye.
     1696!--          Default surface type
     1697             IF ( surf_def_h(0)%start_index(j,i) <=                            &
     1698                  surf_def_h(0)%end_index(j,i) )  THEN
     1699                start_index = surf_def_h(0)%start_index(j,i)
     1700                end_index   = surf_def_h(0)%end_index(j,i)
     1701                DO  m = start_index, end_index
     1702                   k          = surf_def_h(0)%k(m)
     1703                   wall_index = k - 1
     1704                   kb         = k - 1
     1705                   CALL pmci_define_loglaw_correction_parameters( lc, lcr, k,  &
     1706                            j, inc, wall_index, surf_def_h(0)%z0(m), &
     1707                            kb, direction, ncorr )
     1708                ENDDO
     1709!
     1710!--          Natural surface type
     1711             ELSEIF ( surf_lsm_h%start_index(j,i) <=                           &
     1712                      surf_lsm_h%end_index(j,i) )  THEN
     1713                start_index = surf_lsm_h%start_index(j,i)
     1714                end_index   = surf_lsm_h%end_index(j,i)
     1715                DO  m = start_index, end_index
     1716                   k          = surf_lsm_h%k(m)
     1717                   wall_index = k - 1
     1718                   kb         = k - 1
     1719                   CALL pmci_define_loglaw_correction_parameters( lc, lcr, k,  &
     1720                            j, inc, wall_index, surf_lsm_h%z0(m),    &
     1721                            kb, direction, ncorr )
     1722                ENDDO
     1723!
     1724!--          Urban surface type
     1725             ELSEIF ( surf_usm_h%start_index(j,i) <=                           &
     1726                      surf_usm_h%end_index(j,i) )  THEN
     1727                start_index = surf_usm_h%start_index(j,i)
     1728                end_index = surf_usm_h%end_index(j,i)
     1729                DO  m = start_index, end_index
     1730                   k          = surf_usm_h%k(m)
     1731                   wall_index = k - 1
     1732                   kb         = k - 1
     1733                   CALL pmci_define_loglaw_correction_parameters( lc, lcr, k,  &
     1734                            j, inc, wall_index, surf_usm_h%z0(m),    &
     1735                            kb, direction, ncorr )
     1736                ENDDO
     1737             ENDIF
     1738
    14761739             logc_u_r(1,k,j) = lc
    14771740             logc_ratio_u_r(1,0:ncorr-1,k,j) = lcr(0:ncorr-1)
     
    14801743!--          Right boundary for v
    14811744             i   = nxr + 1
    1482              kb  = nzb_v_inner(j,i)
    1483              k   = kb + 1
    1484              wall_index = kb
    1485              CALL pmci_define_loglaw_correction_parameters( lc, lcr, k, j,      &
    1486                                 inc, wall_index, z0(j,i), kb, direction, ncorr )
     1745!
     1746!--          For loglaw correction the roughness z0 is required. z0, however,
     1747!--          is part of the surfacetypes now, so call subroutine according
     1748!--          to the present surface tpye.
     1749!--          Default surface type
     1750             IF ( surf_def_h(0)%start_index(j,i) <=                            &
     1751                  surf_def_h(0)%end_index(j,i) )  THEN
     1752                start_index = surf_def_h(0)%start_index(j,i)
     1753                end_index   = surf_def_h(0)%end_index(j,i)
     1754                DO  m = start_index, end_index
     1755                   k          = surf_def_h(0)%k(m)
     1756                   wall_index = k - 1
     1757                   kb         = k - 1
     1758                   CALL pmci_define_loglaw_correction_parameters( lc, lcr, k,  &
     1759                            j, inc, wall_index, surf_def_h(0)%z0(m), &
     1760                            kb, direction, ncorr )
     1761                ENDDO
     1762!
     1763!--          Natural surface type
     1764             ELSEIF ( surf_lsm_h%start_index(j,i) <=                           &
     1765                      surf_lsm_h%end_index(j,i) )  THEN
     1766                start_index = surf_lsm_h%start_index(j,i)
     1767                end_index   = surf_lsm_h%end_index(j,i)
     1768                DO  m = start_index, end_index
     1769                   k          = surf_lsm_h%k(m)
     1770                   wall_index = k - 1
     1771                   kb         = k - 1
     1772                   CALL pmci_define_loglaw_correction_parameters( lc, lcr, k,  &
     1773                            j, inc, wall_index, surf_lsm_h%z0(m),    &
     1774                            kb, direction, ncorr )
     1775                ENDDO
     1776!
     1777!--          Urban surface type
     1778             ELSEIF ( surf_usm_h%start_index(j,i) <=                           &
     1779                      surf_usm_h%end_index(j,i) )  THEN
     1780                start_index = surf_usm_h%start_index(j,i)
     1781                end_index = surf_usm_h%end_index(j,i)
     1782                DO  m = start_index, end_index
     1783                   k          = surf_usm_h%k(m)
     1784                   wall_index = k - 1
     1785                   kb         = k - 1
     1786                   CALL pmci_define_loglaw_correction_parameters( lc, lcr, k,  &
     1787                            j, inc, wall_index, surf_usm_h%z0(m),    &
     1788                            kb, direction, ncorr )
     1789                ENDDO
     1790             ENDIF
    14871791             logc_v_r(1,k,j) = lc
    14881792             logc_ratio_v_r(1,0:ncorr-1,k,j) = lcr(0:ncorr-1)
     
    15161820!--          South boundary for u
    15171821             j   = -1
    1518              kb  =  nzb_u_inner(j,i)
    1519              k   =  kb + 1
    1520              wall_index = kb
    1521              CALL pmci_define_loglaw_correction_parameters( lc, lcr, k, j,      &
    1522                                 inc, wall_index, z0(j,i), kb, direction, ncorr )
     1822!
     1823!--          For loglaw correction the roughness z0 is required. z0, however,
     1824!--          is part of the surfacetypes now, so call subroutine according
     1825!--          to the present surface tpye.
     1826!--          Default surface type
     1827             IF ( surf_def_h(0)%start_index(j,i) <=                            &
     1828                  surf_def_h(0)%end_index(j,i) )  THEN
     1829                start_index = surf_def_h(0)%start_index(j,i)
     1830                end_index   = surf_def_h(0)%end_index(j,i)
     1831                DO  m = start_index, end_index
     1832                   k          = surf_def_h(0)%k(m)
     1833                   wall_index = k - 1
     1834                   kb         = k - 1
     1835                   CALL pmci_define_loglaw_correction_parameters( lc, lcr, k,  &
     1836                            j, inc, wall_index, surf_def_h(0)%z0(m), &
     1837                            kb, direction, ncorr )
     1838                ENDDO
     1839!
     1840!--          Natural surface type
     1841             ELSEIF ( surf_lsm_h%start_index(j,i) <=                           &
     1842                      surf_lsm_h%end_index(j,i) )  THEN
     1843                start_index = surf_lsm_h%start_index(j,i)
     1844                end_index   = surf_lsm_h%end_index(j,i)
     1845                DO  m = start_index, end_index
     1846                   k          = surf_lsm_h%k(m)
     1847                   wall_index = k - 1
     1848                   kb         = k - 1
     1849                   CALL pmci_define_loglaw_correction_parameters( lc, lcr, k,  &
     1850                            j, inc, wall_index, surf_lsm_h%z0(m),    &
     1851                            kb, direction, ncorr )
     1852                ENDDO
     1853!
     1854!--          Urban surface type
     1855             ELSEIF ( surf_usm_h%start_index(j,i) <=                           &
     1856                      surf_usm_h%end_index(j,i) )  THEN
     1857                start_index = surf_usm_h%start_index(j,i)
     1858                end_index = surf_usm_h%end_index(j,i)
     1859                DO  m = start_index, end_index
     1860                   k          = surf_usm_h%k(m)
     1861                   wall_index = k - 1
     1862                   kb         = k - 1
     1863                   CALL pmci_define_loglaw_correction_parameters( lc, lcr, k,  &
     1864                            j, inc, wall_index, surf_usm_h%z0(m),    &
     1865                            kb, direction, ncorr )
     1866                ENDDO
     1867             ENDIF
    15231868             logc_u_s(1,k,i) = lc
    15241869             logc_ratio_u_s(1,0:ncorr-1,k,i) = lcr(0:ncorr-1)
     
    15271872!--          South boundary for v
    15281873             j   = 0
    1529              kb  = nzb_v_inner(j,i)
    1530              k   = kb + 1
    1531              wall_index = kb
    1532              CALL pmci_define_loglaw_correction_parameters( lc, lcr, k, j,      &
    1533                                 inc, wall_index, z0(j,i), kb, direction, ncorr )
     1874!
     1875!--          For loglaw correction the roughness z0 is required. z0, however,
     1876!--          is part of the surfacetypes now, so call subroutine according
     1877!--          to the present surface tpye.
     1878!--          Default surface type
     1879             IF ( surf_def_h(0)%start_index(j,i) <=                            &
     1880                  surf_def_h(0)%end_index(j,i) )  THEN
     1881                start_index = surf_def_h(0)%start_index(j,i)
     1882                end_index   = surf_def_h(0)%end_index(j,i)
     1883                DO  m = start_index, end_index
     1884                   k          = surf_def_h(0)%k(m)
     1885                   wall_index = k - 1
     1886                   kb         = k - 1
     1887                   CALL pmci_define_loglaw_correction_parameters( lc, lcr, k,  &
     1888                            j, inc, wall_index, surf_def_h(0)%z0(m), &
     1889                            kb, direction, ncorr )
     1890                ENDDO
     1891!
     1892!--          Natural surface type
     1893             ELSEIF ( surf_lsm_h%start_index(j,i) <=                           &
     1894                      surf_lsm_h%end_index(j,i) )  THEN
     1895                start_index = surf_lsm_h%start_index(j,i)
     1896                end_index   = surf_lsm_h%end_index(j,i)
     1897                DO  m = start_index, end_index
     1898                   k          = surf_lsm_h%k(m)
     1899                   wall_index = k - 1
     1900                   kb         = k - 1
     1901                   CALL pmci_define_loglaw_correction_parameters( lc, lcr, k,  &
     1902                            j, inc, wall_index, surf_lsm_h%z0(m),    &
     1903                            kb, direction, ncorr )
     1904                ENDDO
     1905!
     1906!--          Urban surface type
     1907             ELSEIF ( surf_usm_h%start_index(j,i) <=                           &
     1908                      surf_usm_h%end_index(j,i) )  THEN
     1909                start_index = surf_usm_h%start_index(j,i)
     1910                end_index = surf_usm_h%end_index(j,i)
     1911                DO  m = start_index, end_index
     1912                   k          = surf_usm_h%k(m)
     1913                   wall_index = k - 1
     1914                   kb         = k - 1
     1915                   CALL pmci_define_loglaw_correction_parameters( lc, lcr, k,  &
     1916                            j, inc, wall_index, surf_usm_h%z0(m),    &
     1917                            kb, direction, ncorr )
     1918                ENDDO
     1919             ENDIF
    15341920             logc_v_s(1,k,i) = lc
    15351921             logc_ratio_v_s(1,0:ncorr-1,k,i) = lcr(0:ncorr-1)
     
    15631949!--          North boundary for u
    15641950             j   = nyn + 1
    1565              kb  = nzb_u_inner(j,i)
    1566              k   = kb + 1
    1567              wall_index = kb
    1568              CALL pmci_define_loglaw_correction_parameters( lc, lcr, k, j,      &
    1569                                 inc, wall_index, z0(j,i), kb, direction, ncorr )
     1951!
     1952!--          For loglaw correction the roughness z0 is required. z0, however,
     1953!--          is part of the surfacetypes now, so call subroutine according
     1954!--          to the present surface tpye.
     1955!--          Default surface type
     1956             IF ( surf_def_h(0)%start_index(j,i) <=                            &
     1957                  surf_def_h(0)%end_index(j,i) )  THEN
     1958                start_index = surf_def_h(0)%start_index(j,i)
     1959                end_index   = surf_def_h(0)%end_index(j,i)
     1960                DO  m = start_index, end_index
     1961                   k          = surf_def_h(0)%k(m)
     1962                   wall_index = k - 1
     1963                   kb         = k - 1
     1964                   CALL pmci_define_loglaw_correction_parameters( lc, lcr, k,  &
     1965                            j, inc, wall_index, surf_def_h(0)%z0(m), &
     1966                            kb, direction, ncorr )
     1967                ENDDO
     1968!
     1969!--          Natural surface type
     1970             ELSEIF ( surf_lsm_h%start_index(j,i) <=                           &
     1971                      surf_lsm_h%end_index(j,i) )  THEN
     1972                start_index = surf_lsm_h%start_index(j,i)
     1973                end_index   = surf_lsm_h%end_index(j,i)
     1974                DO  m = start_index, end_index
     1975                   k          = surf_lsm_h%k(m)
     1976                   wall_index = k - 1
     1977                   kb         = k - 1
     1978                   CALL pmci_define_loglaw_correction_parameters( lc, lcr, k,  &
     1979                            j, inc, wall_index, surf_lsm_h%z0(m),    &
     1980                            kb, direction, ncorr )
     1981                ENDDO
     1982!
     1983!--          Urban surface type
     1984             ELSEIF ( surf_usm_h%start_index(j,i) <=                           &
     1985                      surf_usm_h%end_index(j,i) )  THEN
     1986                start_index = surf_usm_h%start_index(j,i)
     1987                end_index = surf_usm_h%end_index(j,i)
     1988                DO  m = start_index, end_index
     1989                   k          = surf_usm_h%k(m)
     1990                   wall_index = k - 1
     1991                   kb         = k - 1
     1992                   CALL pmci_define_loglaw_correction_parameters( lc, lcr, k,  &
     1993                            j, inc, wall_index, surf_usm_h%z0(m),    &
     1994                            kb, direction, ncorr )
     1995                ENDDO
     1996             ENDIF
    15701997             logc_u_n(1,k,i) = lc
    15711998             logc_ratio_u_n(1,0:ncorr-1,k,i) = lcr(0:ncorr-1)
     
    15742001!--          North boundary for v
    15752002             j   = nyn + 1
    1576              kb  = nzb_v_inner(j,i)
    1577              k   = kb + 1
    1578              wall_index = kb
    1579              CALL pmci_define_loglaw_correction_parameters( lc, lcr, k, j,      &
    1580                                 inc, wall_index, z0(j,i), kb, direction, ncorr )
     2003!
     2004!--          For loglaw correction the roughness z0 is required. z0, however,
     2005!--          is part of the surfacetypes now, so call subroutine according
     2006!--          to the present surface tpye.
     2007!--          Default surface type
     2008             IF ( surf_def_h(0)%start_index(j,i) <=                            &
     2009                  surf_def_h(0)%end_index(j,i) )  THEN
     2010                start_index = surf_def_h(0)%start_index(j,i)
     2011                end_index   = surf_def_h(0)%end_index(j,i)
     2012                DO  m = start_index, end_index
     2013                   k          = surf_def_h(0)%k(m)
     2014                   wall_index = k - 1
     2015                   kb         = k - 1
     2016                   CALL pmci_define_loglaw_correction_parameters( lc, lcr, k,  &
     2017                            j, inc, wall_index, surf_def_h(0)%z0(m), &
     2018                            kb, direction, ncorr )
     2019                ENDDO
     2020!
     2021!--          Natural surface type
     2022             ELSEIF ( surf_lsm_h%start_index(j,i) <=                           &
     2023                      surf_lsm_h%end_index(j,i) )  THEN
     2024                start_index = surf_lsm_h%start_index(j,i)
     2025                end_index   = surf_lsm_h%end_index(j,i)
     2026                DO  m = start_index, end_index
     2027                   k          = surf_lsm_h%k(m)
     2028                   wall_index = k - 1
     2029                   kb         = k - 1
     2030                   CALL pmci_define_loglaw_correction_parameters( lc, lcr, k,  &
     2031                            j, inc, wall_index, surf_lsm_h%z0(m),    &
     2032                            kb, direction, ncorr )
     2033                ENDDO
     2034!
     2035!--          Urban surface type
     2036             ELSEIF ( surf_usm_h%start_index(j,i) <=                           &
     2037                      surf_usm_h%end_index(j,i) )  THEN
     2038                start_index = surf_usm_h%start_index(j,i)
     2039                end_index = surf_usm_h%end_index(j,i)
     2040                DO  m = start_index, end_index
     2041                   k          = surf_usm_h%k(m)
     2042                   wall_index = k - 1
     2043                   kb         = k - 1
     2044                   CALL pmci_define_loglaw_correction_parameters( lc, lcr, k,  &
     2045                            j, inc, wall_index, surf_usm_h%z0(m),    &
     2046                            kb, direction, ncorr )
     2047                ENDDO
     2048             ENDIF
    15812049             logc_v_n(1,k,i) = lc
    15822050             logc_ratio_v_n(1,0:ncorr-1,k,i) = lcr(0:ncorr-1)
     
    15902058!--    Then vertical walls and corners if necessary
    15912059       IF ( topography /= 'flat' )  THEN
     2060!
     2061!--       Workaround, set z0 at vertical surfaces simply to the given roughness
     2062!--       lenth, which is required to determine the logarithmic correction
     2063!--       factors at the child boundaries, which are at the ghost-points.
     2064!--       The surface data type for vertical surfaces, however, is not defined
     2065!--       at ghost-points, so that no z0 can be retrieved at this point.
     2066!--       Maybe, revise this later and define vertical surface datattype also
     2067!--       at ghost-points.
     2068          z0_topo = roughness_length
    15922069
    15932070          kb = 0       ! kb is not used when direction > 1
    15942071!       
    15952072!--       Left boundary
     2073
     2074!
     2075!--       Are loglaw-correction parameters also calculated inside topo?
    15962076          IF ( nest_bound_l )  THEN
    15972077
     
    15992079
    16002080             DO  j = nys, nyn
     2081                k_wall_u_ji   = MAXLOC(                                        &
     2082                            MERGE( 1, 0,                                       &
     2083                          BTEST( wall_flags_0(nzb:nzt_topo_nestbc_l,j,0), 26 ) &
     2084                                 ), DIM = 1                                    &
     2085                                      ) - 1
     2086                k_wall_u_ji_p = MAXLOC(                                        &
     2087                            MERGE( 1, 0,                                       &
     2088                          BTEST( wall_flags_0(nzb:nzt_topo_nestbc_l,j+1,0), 26 )&
     2089                                 ), DIM = 1                                    &
     2090                                      ) - 1
     2091                k_wall_u_ji_m = MAXLOC(                                        &
     2092                            MERGE( 1, 0,                                       &
     2093                          BTEST( wall_flags_0(nzb:nzt_topo_nestbc_l,j-1,0), 26 )&
     2094                                 ), DIM = 1                                    &
     2095                                      ) - 1
     2096
     2097                k_wall_w_ji   = MAXLOC(                                        &
     2098                            MERGE( 1, 0,                                       &
     2099                          BTEST( wall_flags_0(nzb:nzt_topo_nestbc_l,j,-1), 28 )&
     2100                                 ), DIM = 1                                    &
     2101                                      ) - 1
     2102                k_wall_w_ji_p = MAXLOC(                                        &
     2103                            MERGE( 1, 0,                                       &
     2104                          BTEST( wall_flags_0(nzb:nzt_topo_nestbc_l,j+1,-1), 28 )&
     2105                                 ), DIM = 1                                    &
     2106                                      ) - 1
     2107                k_wall_w_ji_m = MAXLOC(                                        &
     2108                            MERGE( 1, 0,                                       &
     2109                          BTEST( wall_flags_0(nzb:nzt_topo_nestbc_l,j-1,-1), 28 )&
     2110                                 ), DIM = 1                                    &
     2111                                      ) - 1
     2112
    16012113                DO  k = nzb, nzt_topo_nestbc_l
     2114
     2115                   i            = 0
    16022116!
    16032117!--                Wall for u on the south side, but not on the north side
    1604                    i  = 0
    1605                    IF ( ( nzb_u_outer(j,i) > nzb_u_outer(j+1,i) ) .AND.         &
    1606                         ( nzb_u_outer(j,i) == nzb_u_outer(j-1,i) ) )            &
     2118                   IF ( ( k_wall_u_ji > k_wall_u_ji_p ) .AND.                  &
     2119                        ( k_wall_u_ji == k_wall_u_ji_m ) )                     &
    16072120                   THEN
    16082121                      inc        =  1
    16092122                      wall_index =  j
    1610                       CALL pmci_define_loglaw_correction_parameters( lc, lcr,   &
    1611                           k, j, inc, wall_index, z0(j,i), kb, direction, ncorr )
     2123                      CALL pmci_define_loglaw_correction_parameters( lc, lcr,  &
     2124                          k, j, inc, wall_index, z0_topo, kb, direction, ncorr )
    16122125!
    16132126!--                   The direction of the wall-normal index is stored as the
     
    16202133!
    16212134!--                Wall for u on the north side, but not on the south side
    1622                    i  = 0
    1623                    IF ( ( nzb_u_outer(j,i) > nzb_u_outer(j-1,i) ) .AND.         &
    1624                         ( nzb_u_outer(j,i) == nzb_u_outer(j+1,i) ) )  THEN
     2135                   IF ( ( k_wall_u_ji > k_wall_u_ji_m ) .AND.                  &
     2136                        ( k_wall_u_ji == k_wall_u_ji_p ) )  THEN
    16252137                      inc        = -1
    16262138                      wall_index =  j + 1
    1627                       CALL pmci_define_loglaw_correction_parameters( lc, lcr,   &
    1628                           k, j, inc, wall_index, z0(j,i), kb, direction, ncorr )
     2139                      CALL pmci_define_loglaw_correction_parameters( lc, lcr,  &
     2140                          k, j, inc, wall_index, z0_topo, kb, direction, ncorr )
    16292141!
    16302142!--                   The direction of the wall-normal index is stored as the
     
    16352147                   ENDIF
    16362148
     2149                   i  = -1
    16372150!
    16382151!--                Wall for w on the south side, but not on the north side.
    1639                    i  = -1
    1640                    IF ( ( nzb_w_outer(j,i) > nzb_w_outer(j+1,i) )  .AND.        &
    1641                         ( nzb_w_outer(j,i) == nzb_w_outer(j-1,i) ) )  THEN
     2152
     2153                   IF ( ( k_wall_w_ji > k_wall_w_ji_p )  .AND.                 &
     2154                        ( k_wall_w_ji == k_wall_w_ji_m ) )  THEN   
    16422155                      inc        =  1
    16432156                      wall_index =  j
    1644                       CALL pmci_define_loglaw_correction_parameters( lc, lcr,   &
    1645                           k, j, inc, wall_index, z0(j,i), kb, direction, ncorr )
     2157                      CALL pmci_define_loglaw_correction_parameters( lc, lcr,  &
     2158                          k, j, inc, wall_index, z0_topo, kb, direction, ncorr )
    16462159!
    16472160!--                   The direction of the wall-normal index is stored as the
     
    16542167!
    16552168!--                Wall for w on the north side, but not on the south side.
    1656                    i  = -1
    1657                    IF ( ( nzb_w_outer(j,i) > nzb_w_outer(j-1,i) )  .AND.        &
    1658                         ( nzb_w_outer(j,i) == nzb_w_outer(j+1,i) ) )  THEN
     2169                   IF ( ( k_wall_w_ji > k_wall_w_ji_m )  .AND.                 &
     2170                        ( k_wall_w_ji == k_wall_w_ji_p ) )  THEN
    16592171                      inc        = -1
    16602172                      wall_index =  j+1
    1661                       CALL pmci_define_loglaw_correction_parameters( lc, lcr,   &
    1662                           k, j, inc, wall_index, z0(j,i), kb, direction, ncorr )
     2173                      CALL pmci_define_loglaw_correction_parameters( lc, lcr,  &
     2174                          k, j, inc, wall_index, z0_topo, kb, direction, ncorr )
    16632175!
    16642176!--                   The direction of the wall-normal index is stored as the
     
    16822194
    16832195             DO  j = nys, nyn
     2196
     2197                k_wall_u_ji    = MAXLOC(                                       &
     2198                            MERGE( 1, 0,                                       &
     2199                          BTEST( wall_flags_0(nzb:nzt_topo_nestbc_r,j,i), 26 ) &
     2200                                 ), DIM = 1                                    &
     2201                                     ) - 1
     2202                k_wall_u_ji_p  = MAXLOC(                                       &
     2203                            MERGE( 1, 0,                                       &
     2204                          BTEST( wall_flags_0(nzb:nzt_topo_nestbc_r,j+1,i), 26 )&
     2205                                 ), DIM = 1                                    &
     2206                                     ) - 1
     2207                k_wall_u_ji_m  = MAXLOC(                                       &
     2208                            MERGE( 1, 0,                                       &
     2209                          BTEST( wall_flags_0(nzb:nzt_topo_nestbc_r,j-1,i), 26 )&
     2210                                     ), DIM = 1                                &
     2211                                        ) - 1
     2212
     2213                k_wall_w_ji    = MAXLOC(                                       &
     2214                            MERGE( 1, 0,                                       &
     2215                          BTEST( wall_flags_0(nzb:nzt_topo_nestbc_r,j,i), 28 ) &
     2216                                 ), DIM = 1                                    &
     2217                                     ) - 1
     2218                k_wall_w_ji_p  = MAXLOC(                                       &
     2219                            MERGE( 1, 0,                                       &
     2220                          BTEST( wall_flags_0(nzb:nzt_topo_nestbc_r,j+1,i), 28 )&
     2221                                 ), DIM = 1                                    &
     2222                                     ) - 1
     2223                k_wall_w_ji_m  = MAXLOC(                                       &
     2224                            MERGE( 1, 0,                                       &
     2225                          BTEST( wall_flags_0(nzb:nzt_topo_nestbc_r,j-1,i), 28 )&
     2226                                     ), DIM = 1                                &
     2227                                        ) - 1
    16842228                DO  k = nzb, nzt_topo_nestbc_r
    16852229!
    16862230!--                Wall for u on the south side, but not on the north side
    1687                    IF ( ( nzb_u_outer(j,i) > nzb_u_outer(j+1,i) )  .AND.        &
    1688                         ( nzb_u_outer(j,i) == nzb_u_outer(j-1,i) ) )  THEN
     2231                   IF ( ( k_wall_u_ji > k_wall_u_ji_p )  .AND.                 &
     2232                        ( k_wall_u_ji == k_wall_u_ji_m ) )  THEN
    16892233                      inc        = 1
    16902234                      wall_index = j
    16912235                      CALL pmci_define_loglaw_correction_parameters( lc, lcr,   &
    1692                           k, j, inc, wall_index, z0(j,i), kb, direction, ncorr )
     2236                          k, j, inc, wall_index, z0_topo, kb, direction, ncorr )
    16932237!
    16942238!--                   The direction of the wall-normal index is stored as the
     
    17012245!
    17022246!--                Wall for u on the north side, but not on the south side
    1703                    IF ( ( nzb_u_outer(j,i) > nzb_u_outer(j-1,i) )  .AND.        &
    1704                         ( nzb_u_outer(j,i) == nzb_u_outer(j+1,i) ) )  THEN
     2247                   IF ( ( k_wall_u_ji > k_wall_u_ji_m )  .AND.                  &
     2248                        ( k_wall_u_ji == k_wall_u_ji_p ) )  THEN
    17052249                      inc        = -1
    17062250                      wall_index =  j+1
    17072251                      CALL pmci_define_loglaw_correction_parameters( lc, lcr,   &
    1708                           k, j, inc, wall_index, z0(j,i), kb, direction, ncorr )
     2252                          k, j, inc, wall_index, z0_topo, kb, direction, ncorr )
    17092253!
    17102254!--                   The direction of the wall-normal index is stored as the
     
    17172261!
    17182262!--                Wall for w on the south side, but not on the north side
    1719                    IF ( ( nzb_w_outer(j,i) > nzb_w_outer(j+1,i) )  .AND.        &
    1720                         ( nzb_w_outer(j,i) == nzb_w_outer(j-1,i) ) )  THEN
     2263                   IF ( ( k_wall_w_ji > k_wall_w_ji_p )  .AND.                 &
     2264                        ( k_wall_w_ji == k_wall_w_ji_m ) )  THEN
    17212265                      inc        =  1
    17222266                      wall_index =  j
    1723                       CALL pmci_define_loglaw_correction_parameters( lc, lcr,   &
    1724                           k, j, inc, wall_index, z0(j,i), kb, direction, ncorr )
     2267                      CALL pmci_define_loglaw_correction_parameters( lc, lcr,  &
     2268                          k, j, inc, wall_index, z0_topo, kb, direction, ncorr )
    17252269!
    17262270!--                   The direction of the wall-normal index is stored as the
     
    17332277!
    17342278!--                Wall for w on the north side, but not on the south side
    1735                    IF ( ( nzb_w_outer(j,i) > nzb_w_outer(j-1,i) )  .AND.        &
    1736                         ( nzb_w_outer(j,i) == nzb_w_outer(j+1,i) ) )  THEN
     2279                   IF ( ( k_wall_w_ji > k_wall_w_ji_m )  .AND.                 &
     2280                        ( k_wall_w_ji == k_wall_w_ji_p ) )  THEN
    17372281                      inc        = -1
    17382282                      wall_index =  j+1
    1739                       CALL pmci_define_loglaw_correction_parameters( lc, lcr,   &
    1740                           k, j, inc, wall_index, z0(j,i), kb, direction, ncorr )
     2283                      CALL pmci_define_loglaw_correction_parameters( lc, lcr,  &
     2284                          k, j, inc, wall_index, z0_topo, kb, direction, ncorr )
    17412285
    17422286!
     
    17602304
    17612305             DO  i = nxl, nxr
     2306
     2307                k_wall_v_ji    = MAXLOC(                                       &
     2308                            MERGE( 1, 0,                                       &
     2309                          BTEST( wall_flags_0(nzb:nzt_topo_nestbc_s,0,i), 27 ) &
     2310                                 ), DIM = 1                                    &
     2311                                     ) - 1
     2312                k_wall_v_ji_p  = MAXLOC(                                       &
     2313                            MERGE( 1, 0,                                       &
     2314                          BTEST( wall_flags_0(nzb:nzt_topo_nestbc_s,0,i+1), 27 )&
     2315                                 ), DIM = 1                                    &
     2316                                     ) - 1
     2317                k_wall_v_ji_m  = MAXLOC(                                       &
     2318                            MERGE( 1, 0,                                       &
     2319                          BTEST( wall_flags_0(nzb:nzt_topo_nestbc_s,0,i-1), 27 )&
     2320                                     ), DIM = 1                                &
     2321                                        ) - 1
     2322
     2323                k_wall_w_ji    = MAXLOC(                                       &
     2324                            MERGE( 1, 0,                                       &
     2325                          BTEST( wall_flags_0(nzb:nzt_topo_nestbc_s,-1,i), 28 )&
     2326                                 ), DIM = 1                                    &
     2327                                     ) - 1
     2328                k_wall_w_ji_p  = MAXLOC(                                       &
     2329                            MERGE( 1, 0,                                       &
     2330                          BTEST( wall_flags_0(nzb:nzt_topo_nestbc_s,-1,i+1), 28 )&
     2331                                 ), DIM = 1                                    &
     2332                                     ) - 1
     2333                k_wall_w_ji_m  = MAXLOC(                                       &
     2334                            MERGE( 1, 0,                                       &
     2335                          BTEST( wall_flags_0(nzb:nzt_topo_nestbc_s,-1,i-1), 28 )&
     2336                                     ), DIM = 1                                &
     2337                                        ) - 1
    17622338                DO  k = nzb, nzt_topo_nestbc_s
    17632339!
    17642340!--                Wall for v on the left side, but not on the right side
    17652341                   j  = 0
    1766                    IF ( ( nzb_v_outer(j,i) > nzb_v_outer(j,i+1) )  .AND.        &
    1767                         ( nzb_v_outer(j,i) == nzb_v_outer(j,i-1) ) )  THEN
     2342                   IF ( ( k_wall_v_ji > k_wall_v_ji_p )  .AND.                 &
     2343                        ( k_wall_v_ji == k_wall_v_ji_m ) )  THEN
    17682344                      inc        =  1
    17692345                      wall_index =  i
    1770                       CALL pmci_define_loglaw_correction_parameters( lc, lcr,   &
    1771                           k, i, inc, wall_index, z0(j,i), kb, direction, ncorr )
     2346                      CALL pmci_define_loglaw_correction_parameters( lc, lcr,  &
     2347                          k, i, inc, wall_index, z0_topo, kb, direction, ncorr )
    17722348!
    17732349!--                   The direction of the wall-normal index is stored as the
     
    17812357!--                Wall for v on the right side, but not on the left side
    17822358                   j  = 0
    1783                    IF ( ( nzb_v_outer(j,i) > nzb_v_outer(j,i-1) )  .AND.        &
    1784                         ( nzb_v_outer(j,i) == nzb_v_outer(j,i+1) ) )  THEN
     2359                   IF ( ( k_wall_v_ji > k_wall_v_ji_m )  .AND.                 &
     2360                        ( k_wall_v_ji == k_wall_v_ji_p ) )  THEN
    17852361                      inc        = -1
    17862362                      wall_index =  i+1
    1787                       CALL pmci_define_loglaw_correction_parameters( lc, lcr,   &
    1788                           k, i, inc, wall_index, z0(j,i), kb, direction, ncorr )
     2363                      CALL pmci_define_loglaw_correction_parameters( lc, lcr,  &
     2364                          k, i, inc, wall_index, z0_topo, kb, direction, ncorr )
    17892365!
    17902366!--                   The direction of the wall-normal index is stored as the
     
    17982374!--                Wall for w on the left side, but not on the right side
    17992375                   j  = -1
    1800                    IF ( ( nzb_w_outer(j,i) > nzb_w_outer(j,i+1) )  .AND.        &
    1801                         ( nzb_w_outer(j,i) == nzb_w_outer(j,i-1) ) )  THEN
     2376                   IF ( ( k_wall_w_ji > k_wall_w_ji_p )  .AND.                 &
     2377                        ( k_wall_w_ji == k_wall_w_ji_m ) )  THEN
    18022378                      inc        =  1
    18032379                      wall_index =  i
    1804                       CALL pmci_define_loglaw_correction_parameters( lc, lcr,   &
    1805                           k, i, inc, wall_index, z0(j,i), kb, direction, ncorr )
     2380                      CALL pmci_define_loglaw_correction_parameters( lc, lcr,  &
     2381                          k, i, inc, wall_index, z0_topo, kb, direction, ncorr )
    18062382!
    18072383!--                   The direction of the wall-normal index is stored as the
     
    18152391!--                Wall for w on the right side, but not on the left side
    18162392                   j  = -1
    1817                    IF ( ( nzb_w_outer(j,i) > nzb_w_outer(j,i-1) )  .AND.        &
    1818                         ( nzb_w_outer(j,i) == nzb_w_outer(j,i+1) ) )  THEN
     2393                   IF ( ( k_wall_w_ji > k_wall_w_ji_m )  .AND.                 &
     2394                        ( k_wall_w_ji == k_wall_w_ji_p ) )  THEN
    18192395                      inc        = -1
    18202396                      wall_index =  i+1
    1821                       CALL pmci_define_loglaw_correction_parameters( lc, lcr,   &
    1822                           k, i, inc, wall_index, z0(j,i), kb, direction, ncorr )
     2397                      CALL pmci_define_loglaw_correction_parameters( lc, lcr,  &
     2398                          k, i, inc, wall_index, z0_topo, kb, direction, ncorr )
    18232399!
    18242400!--                   The direction of the wall-normal index is stored as the
     
    18422418
    18432419             DO  i = nxl, nxr
     2420                k_wall_v_ji    = MAXLOC(                                       &
     2421                            MERGE( 1, 0,                                       &
     2422                          BTEST( wall_flags_0(nzb:nzt_topo_nestbc_n,j,i), 27 ) &
     2423                                 ), DIM = 1                                    &
     2424                                       ) - 1
     2425
     2426                k_wall_v_ji_p  = MAXLOC(                                       &
     2427                            MERGE( 1, 0,                                       &
     2428                          BTEST( wall_flags_0(nzb:nzt_topo_nestbc_n,j,i+1), 27 )&
     2429                                 ), DIM = 1                                    &
     2430                                       ) - 1
     2431                k_wall_v_ji_m  = MAXLOC(                                       &
     2432                            MERGE( 1, 0,                                       &
     2433                          BTEST( wall_flags_0(nzb:nzt_topo_nestbc_n,j,i-1), 27 )&
     2434                                     ), DIM = 1                                &
     2435                                       ) - 1
     2436
     2437                k_wall_w_ji    = MAXLOC(                                       &
     2438                            MERGE( 1, 0,                                       &
     2439                          BTEST( wall_flags_0(nzb:nzt_topo_nestbc_n,j,i), 28 )  &
     2440                                 ), DIM = 1                                    &
     2441                                       ) - 1
     2442                k_wall_w_ji_p  = MAXLOC(                                       &
     2443                            MERGE( 1, 0,                                       &
     2444                          BTEST( wall_flags_0(nzb:nzt_topo_nestbc_n,j,i+1), 28 )&
     2445                                 ), DIM = 1                                    &
     2446                                       ) - 1
     2447                k_wall_w_ji_m  = MAXLOC(                                       &
     2448                            MERGE( 1, 0,                                       &
     2449                          BTEST( wall_flags_0(nzb:nzt_topo_nestbc_n,j,i-1), 28 )&
     2450                                     ), DIM = 1                                &
     2451                                       ) - 1
    18442452                DO  k = nzb, nzt_topo_nestbc_n
    18452453!
    18462454!--                Wall for v on the left side, but not on the right side
    1847                    IF ( ( nzb_v_outer(j,i) > nzb_v_outer(j,i+1) )  .AND.        &
    1848                         ( nzb_v_outer(j,i) == nzb_v_outer(j,i-1) ) )  THEN
     2455                   IF ( ( k_wall_v_ji > k_wall_v_ji_p )  .AND.                 &
     2456                        ( k_wall_v_ji == k_wall_v_ji_m ) )  THEN
    18492457                      inc        = 1
    18502458                      wall_index = i
    1851                       CALL pmci_define_loglaw_correction_parameters( lc, lcr,   &
    1852                           k, i, inc, wall_index, z0(j,i), kb, direction, ncorr )
     2459                      CALL pmci_define_loglaw_correction_parameters( lc, lcr,  &
     2460                          k, i, inc, wall_index, z0_topo, kb, direction, ncorr )
    18532461!
    18542462!--                   The direction of the wall-normal index is stored as the
     
    18612469!
    18622470!--                Wall for v on the right side, but not on the left side
    1863                    IF ( ( nzb_v_outer(j,i) > nzb_v_outer(j,i-1) )  .AND.        &
    1864                         ( nzb_v_outer(j,i) == nzb_v_outer(j,i+1) ) )  THEN
     2471                   IF ( ( k_wall_v_ji > k_wall_v_ji_m )  .AND.                 &
     2472                        ( k_wall_v_ji == k_wall_v_ji_p ) )  THEN
    18652473                      inc        = -1
    18662474                      wall_index =  i + 1
    1867                       CALL pmci_define_loglaw_correction_parameters( lc, lcr,   &
    1868                           k, i, inc, wall_index, z0(j,i), kb, direction, ncorr )
     2475                      CALL pmci_define_loglaw_correction_parameters( lc, lcr,  &
     2476                          k, i, inc, wall_index, z0_topo, kb, direction, ncorr )
    18692477!
    18702478!--                   The direction of the wall-normal index is stored as the
     
    18772485!
    18782486!--                Wall for w on the left side, but not on the right side
    1879                    IF ( ( nzb_w_outer(j,i) > nzb_w_outer(j,i+1) )  .AND.        &
    1880                         ( nzb_w_outer(j,i) == nzb_w_outer(j,i-1) ) )  THEN
     2487                   IF ( ( k_wall_v_ji > k_wall_v_ji_p )  .AND.                 &
     2488                        ( k_wall_v_ji == k_wall_v_ji_m ) )  THEN
    18812489                      inc        = 1
    18822490                      wall_index = i
    1883                       CALL pmci_define_loglaw_correction_parameters( lc, lcr,   &
    1884                           k, i, inc, wall_index, z0(j,i), kb, direction, ncorr )
     2491                      CALL pmci_define_loglaw_correction_parameters( lc, lcr,  &
     2492                          k, i, inc, wall_index, z0_topo, kb, direction, ncorr )
    18852493!
    18862494!--                   The direction of the wall-normal index is stored as the
     
    18932501!
    18942502!--                Wall for w on the right side, but not on the left side
    1895                    IF ( ( nzb_w_outer(j,i) > nzb_w_outer(j,i-1) )  .AND.        &
    1896                         ( nzb_w_outer(j,i) == nzb_w_outer(j,i+1) ) )  THEN
     2503                   IF ( ( k_wall_v_ji > k_wall_v_ji_m )  .AND.                 &
     2504                        ( k_wall_v_ji == k_wall_v_ji_p ) )  THEN
    18972505                      inc        = -1
    18982506                      wall_index =  i+1
    18992507                      CALL pmci_define_loglaw_correction_parameters( lc, lcr,   &
    1900                           k, i, inc, wall_index, z0(j,i), kb, direction, ncorr )
     2508                          k, i, inc, wall_index, z0_topo, kb, direction, ncorr )
    19012509!
    19022510!--                   The direction of the wall-normal index is stored as the
     
    24163024
    24173025
    2418     SUBROUTINE pmci_init_tkefactor
     3026SUBROUTINE pmci_init_tkefactor
    24193027
    24203028!
     
    24263034
    24273035       IMPLICIT NONE
     3036
     3037       INTEGER(iwp)        ::  k                     !: index variable along z
     3038       INTEGER(iwp)        ::  k_wall                !: topography-top index along z
     3039       INTEGER(iwp)        ::  kc                    !:
     3040
    24283041       REAL(wp), PARAMETER ::  cfw = 0.2_wp          !:
    24293042       REAL(wp), PARAMETER ::  c_tkef = 0.6_wp       !:
     
    24343047       REAL(wp)            ::  height                !:
    24353048       REAL(wp), PARAMETER ::  p13 = 1.0_wp/3.0_wp   !:
    2436        REAL(wp), PARAMETER ::  p23 = 2.0_wp/3.0_wp   !:
    2437        INTEGER(iwp)        ::  k                     !:
    2438        INTEGER(iwp)        ::  kc                    !:
    2439        
     3049       REAL(wp), PARAMETER ::  p23 = 2.0_wp/3.0_wp   !:       
    24403050
    24413051       IF ( nest_bound_l )  THEN
     
    24443054          i = nxl - 1
    24453055          DO  j = nysg, nyng
    2446              DO  k = nzb_s_inner(j,i) + 1, nzt
     3056             k_wall = MAXLOC(                                                  &
     3057                          MERGE( 1, 0,                                         &
     3058                                 BTEST( wall_flags_0(nzb:nzb_max,j,i), 12 )    &
     3059                               ), DIM = 1                                      &
     3060                            ) - 1
     3061
     3062             DO  k = k_wall + 1, nzt
     3063
    24473064                kc     = kco(k+1)
    24483065                glsf   = ( dx * dy * dzu(k) )**p13
    24493066                glsc   = ( cg%dx * cg%dy *cg%dzu(kc) )**p13
    2450                 height = zu(k) - zu(nzb_s_inner(j,i))
     3067                height = zu(k) - zu(k_wall)
    24513068                fw     = EXP( -cfw * height / glsf )
    24523069                tkefactor_l(k,j) = c_tkef * ( fw0 * fw + ( 1.0_wp - fw ) *      &
    24533070                                              ( glsf / glsc )**p23 )
    24543071             ENDDO
    2455              tkefactor_l(nzb_s_inner(j,i),j) = c_tkef * fw0
     3072             tkefactor_l(k_wall,j) = c_tkef * fw0
    24563073          ENDDO
    24573074       ENDIF
     
    24623079          i = nxr + 1
    24633080          DO  j = nysg, nyng
    2464              DO  k = nzb_s_inner(j,i) + 1, nzt
     3081             k_wall = MAXLOC(                                                  &
     3082                          MERGE( 1, 0,                                         &
     3083                                 BTEST( wall_flags_0(nzb:nzb_max,j,i), 12 )    &
     3084                               ), DIM = 1                                      &
     3085                            ) - 1
     3086
     3087             DO  k = k_wall + 1, nzt
     3088
    24653089                kc     = kco(k+1)
    24663090                glsf   = ( dx * dy * dzu(k) )**p13
    24673091                glsc   = ( cg%dx * cg%dy * cg%dzu(kc) )**p13
    2468                 height = zu(k) - zu(nzb_s_inner(j,i))
     3092                height = zu(k) - zu(k_wall)
    24693093                fw     = EXP( -cfw * height / glsf )
    24703094                tkefactor_r(k,j) = c_tkef * ( fw0 * fw + ( 1.0_wp - fw ) *      &
    24713095                                              ( glsf / glsc )**p23 )
    24723096             ENDDO
    2473              tkefactor_r(nzb_s_inner(j,i),j) = c_tkef * fw0
     3097             tkefactor_r(k_wall,j) = c_tkef * fw0
    24743098          ENDDO
    24753099       ENDIF
     
    24803104          j = nys - 1
    24813105          DO  i = nxlg, nxrg
    2482              DO  k = nzb_s_inner(j,i) + 1, nzt
     3106             k_wall = MAXLOC(                                                  &
     3107                          MERGE( 1, 0,                                         &
     3108                                 BTEST( wall_flags_0(nzb:nzb_max,j,i), 12 )    &
     3109                               ), DIM = 1                                      &
     3110                            ) - 1
     3111
     3112             DO  k = k_wall + 1, nzt
     3113
    24833114                kc     = kco(k+1)
    24843115                glsf   = ( dx * dy * dzu(k) )**p13
    24853116                glsc   = ( cg%dx * cg%dy * cg%dzu(kc) ) ** p13
    2486                 height = zu(k) - zu(nzb_s_inner(j,i))
     3117                height = zu(k) - zu(k_wall)
    24873118                fw     = EXP( -cfw*height / glsf )
    24883119                tkefactor_s(k,i) = c_tkef * ( fw0 * fw + ( 1.0_wp - fw ) *      &
    24893120                                              ( glsf / glsc )**p23 )
    24903121             ENDDO
    2491              tkefactor_s(nzb_s_inner(j,i),i) = c_tkef * fw0
     3122             tkefactor_s(k_wall,i) = c_tkef * fw0
    24923123          ENDDO
    24933124       ENDIF
     
    24983129          j = nyn + 1
    24993130          DO  i = nxlg, nxrg
    2500              DO  k = nzb_s_inner(j,i)+1, nzt
     3131             k_wall = MAXLOC(                                                  &
     3132                          MERGE( 1, 0,                                         &
     3133                                 BTEST( wall_flags_0(nzb:nzb_max,j,i), 12 )    &
     3134                               ), DIM = 1                                      &
     3135                            ) - 1
     3136             DO  k = k_wall + 1, nzt
     3137
    25013138                kc     = kco(k+1)
    25023139                glsf   = ( dx * dy * dzu(k) )**p13
    25033140                glsc   = ( cg%dx * cg%dy * cg%dzu(kc) )**p13
    2504                 height = zu(k) - zu(nzb_s_inner(j,i))
     3141                height = zu(k) - zu(k_wall)
    25053142                fw     = EXP( -cfw * height / glsf )
    2506                 tkefactor_n(k,i) = c_tkef * ( fw0 * fw + ( 1.0_wp - fw ) *      &
     3143                tkefactor_n(k,i) = c_tkef * ( fw0 * fw + ( 1.0_wp - fw ) *     &
    25073144                                              ( glsf / glsc )**p23 )
    25083145             ENDDO
    2509              tkefactor_n(nzb_s_inner(j,i),i) = c_tkef * fw0
     3146             tkefactor_n(k_wall,i) = c_tkef * fw0
    25103147          ENDDO
    25113148       ENDIF
     
    25133150       ALLOCATE( tkefactor_t(nysg:nyng,nxlg:nxrg) )
    25143151       k = nzt
     3152
    25153153       DO  i = nxlg, nxrg
    25163154          DO  j = nysg, nyng
     3155!
     3156!--          Determine vertical index for local topography top
     3157             k_wall = MAXLOC(                                                  &
     3158                        MERGE( 1, 0,                                           &
     3159                               BTEST( wall_flags_0(nzb:nzb_max,j,i), 12 )      &
     3160                             ), DIM = 1                                        &
     3161                            ) - 1
     3162
    25173163             kc     = kco(k+1)
    25183164             glsf   = ( dx * dy * dzu(k) )**p13
    25193165             glsc   = ( cg%dx * cg%dy * cg%dzu(kc) )**p13
    2520              height = zu(k) - zu(nzb_s_inner(j,i))
     3166             height = zu(k) - zu(k_wall)
    25213167             fw     = EXP( -cfw * height / glsf )
    2522              tkefactor_t(j,i) = c_tkef * ( fw0 * fw + ( 1.0_wp - fw ) *         &
     3168             tkefactor_t(j,i) = c_tkef * ( fw0 * fw + ( 1.0_wp - fw ) *        &
    25233169                                           ( glsf / glsc )**p23 )
    25243170          ENDDO
     
    27833429    INTEGER(iwp) ::  jcn        !:
    27843430    INTEGER(iwp) ::  jcs        !:
     3431    INTEGER(iwp) ::  k          !:
    27853432
    27863433    REAL(wp) ::  waittime       !:
     
    28043451!--    The interpolation.
    28053452       CALL pmci_interp_tril_all ( u,  uc,  icu, jco, kco, r1xu, r2xu, r1yo,    &
    2806                                    r2yo, r1zo, r2zo, nzb_u_inner, 'u' )
     3453                                   r2yo, r1zo, r2zo, 'u' )
    28073454       CALL pmci_interp_tril_all ( v,  vc,  ico, jcv, kco, r1xo, r2xo, r1yv,    &
    2808                                    r2yv, r1zo, r2zo, nzb_v_inner, 'v' )
     3455                                   r2yv, r1zo, r2zo, 'v' )
    28093456       CALL pmci_interp_tril_all ( w,  wc,  ico, jco, kcw, r1xo, r2xo, r1yo,    &
    2810                                    r2yo, r1zw, r2zw, nzb_w_inner, 'w' )
     3457                                   r2yo, r1zw, r2zw, 'w' )
    28113458       CALL pmci_interp_tril_all ( e,  ec,  ico, jco, kco, r1xo, r2xo, r1yo,    &
    2812                                    r2yo, r1zo, r2zo, nzb_s_inner, 'e' )
     3459                                   r2yo, r1zo, r2zo, 'e' )
    28133460
    28143461       IF ( .NOT. neutral )  THEN
    28153462          CALL pmci_interp_tril_all ( pt, ptc, ico, jco, kco, r1xo, r2xo,       &
    2816                                       r1yo, r2yo, r1zo, r2zo, nzb_s_inner, 's' )
     3463                                      r1yo, r2yo, r1zo, r2zo, 's' )
    28173464       ENDIF
    28183465
     
    28203467
    28213468          CALL pmci_interp_tril_all ( q, q_c, ico, jco, kco, r1xo, r2xo, r1yo,   &
    2822                                       r2yo, r1zo, r2zo, nzb_s_inner, 's' )
     3469                                      r2yo, r1zo, r2zo, 's' )
    28233470
    28243471          IF ( cloud_physics  .AND.  microphysics_seifert )  THEN
    28253472!              CALL pmci_interp_tril_all ( qc, qcc, ico, jco, kco, r1xo, r2xo,    &
    2826 !                                          r1yo, r2yo, r1zo, r2zo, nzb_s_inner,   &
    2827 !                                          's' )
     3473!                                          r1yo, r2yo, r1zo, r2zo, 's' )
    28283474             CALL pmci_interp_tril_all ( qr, qrc, ico, jco, kco, r1xo, r2xo,    &
    2829                                          r1yo, r2yo, r1zo, r2zo, nzb_s_inner,   &
    2830                                          's' )
     3475                                         r1yo, r2yo, r1zo, r2zo, 's' )
    28313476!             CALL pmci_interp_tril_all ( nc, ncc, ico, jco, kco, r1xo, r2xo,    &
    2832 !                                         r1yo, r2yo, r1zo, r2zo, nzb_s_inner,   &
    2833 !                                         's' )   
     3477!                                         r1yo, r2yo, r1zo, r2zo, 's' )   
    28343478             CALL pmci_interp_tril_all ( nr, nrc, ico, jco, kco, r1xo, r2xo,    &
    2835                                          r1yo, r2yo, r1zo, r2zo, nzb_s_inner,   &
    2836                                          's' )
     3479                                         r1yo, r2yo, r1zo, r2zo, 's' )
    28373480          ENDIF
    28383481
     
    28413484       IF ( passive_scalar )  THEN
    28423485          CALL pmci_interp_tril_all ( s, sc, ico, jco, kco, r1xo, r2xo, r1yo,   &
    2843                                       r2yo, r1zo, r2zo, nzb_s_inner, 's' )
     3486                                      r2yo, r1zo, r2zo, 's' )
    28443487       ENDIF
    28453488
     
    28513494          DO   i = nxlg, nxrg
    28523495             DO   j = nysg, nyng
    2853                 u(nzb:nzb_u_inner(j,i),j,i)   = 0.0_wp
    2854                 v(nzb:nzb_v_inner(j,i),j,i)   = 0.0_wp
    2855                 w(nzb:nzb_w_inner(j,i),j,i)   = 0.0_wp
    2856                 e(nzb:nzb_s_inner(j,i),j,i)   = 0.0_wp
    2857                 u_p(nzb:nzb_u_inner(j,i),j,i) = 0.0_wp
    2858                 v_p(nzb:nzb_v_inner(j,i),j,i) = 0.0_wp
    2859                 w_p(nzb:nzb_w_inner(j,i),j,i) = 0.0_wp
    2860                 e_p(nzb:nzb_s_inner(j,i),j,i) = 0.0_wp
     3496                DO  k = nzb, nzt
     3497                   u(k,j,i)   = MERGE( u(k,j,i), 0.0_wp,                       &
     3498                                       BTEST( wall_flags_0(k,j,i), 1 ) )
     3499                   v(k,j,i)   = MERGE( v(k,j,i), 0.0_wp,                       &
     3500                                       BTEST( wall_flags_0(k,j,i), 2 ) )
     3501                   w(k,j,i)   = MERGE( w(k,j,i), 0.0_wp,                       &
     3502                                       BTEST( wall_flags_0(k,j,i), 3 ) )
     3503                   e(k,j,i)   = MERGE( e(k,j,i), 0.0_wp,                       &
     3504                                       BTEST( wall_flags_0(k,j,i), 0 ) )
     3505                   u_p(k,j,i) = MERGE( u_p(k,j,i), 0.0_wp,                     &
     3506                                       BTEST( wall_flags_0(k,j,i), 1 ) )
     3507                   v_p(k,j,i) = MERGE( v_p(k,j,i), 0.0_wp,                     &
     3508                                       BTEST( wall_flags_0(k,j,i), 2 ) )
     3509                   w_p(k,j,i) = MERGE( w_p(k,j,i), 0.0_wp,                     &
     3510                                       BTEST( wall_flags_0(k,j,i), 3 ) )
     3511                   e_p(k,j,i) = MERGE( e_p(k,j,i), 0.0_wp,                     &
     3512                                       BTEST( wall_flags_0(k,j,i), 0 ) )
     3513                ENDDO
    28613514             ENDDO
    28623515          ENDDO
     
    28693522
    28703523    SUBROUTINE pmci_interp_tril_all( f, fc, ic, jc, kc, r1x, r2x, r1y, r2y,     &
    2871                                      r1z, r2z, kb, var )
     3524                                     r1z, r2z, var )
    28723525!
    28733526!--    Interpolation of the internal values for the child-domain initialization
     
    28813534       INTEGER(iwp), DIMENSION(nysg:nyng), INTENT(IN)           ::  jc    !:
    28823535       INTEGER(iwp), DIMENSION(nzb:nzt+1), INTENT(IN)           ::  kc    !:
    2883        INTEGER(iwp), DIMENSION(nysg:nyng,nxlg:nxrg), INTENT(IN) ::  kb    !:
    2884 
    2885        INTEGER(iwp) ::  i      !:
    2886        INTEGER(iwp) ::  ib     !:
    2887        INTEGER(iwp) ::  ie     !:
    2888        INTEGER(iwp) ::  j      !:
    2889        INTEGER(iwp) ::  jb     !:
    2890        INTEGER(iwp) ::  je     !:
    2891        INTEGER(iwp) ::  k      !:
    2892        INTEGER(iwp) ::  k1     !:
    2893        INTEGER(iwp) ::  kbc    !:
    2894        INTEGER(iwp) ::  l      !:
    2895        INTEGER(iwp) ::  m      !:
    2896        INTEGER(iwp) ::  n      !:
     3536
     3537       INTEGER(iwp) ::  flag_nr  !: Number of flag array to mask topography on respective u/v/w or s grid
     3538       INTEGER(iwp) ::  flag_nr2 !: Number of flag array to indicate vertical index of topography top on respective u/v/w or s grid
     3539       INTEGER(iwp) ::  i        !:
     3540       INTEGER(iwp) ::  ib       !:
     3541       INTEGER(iwp) ::  ie       !:
     3542       INTEGER(iwp) ::  j        !:
     3543       INTEGER(iwp) ::  jb       !:
     3544       INTEGER(iwp) ::  je       !:
     3545       INTEGER(iwp) ::  k        !:
     3546       INTEGER(iwp) ::  k_wall   !:
     3547       INTEGER(iwp) ::  k1       !:
     3548       INTEGER(iwp) ::  kbc      !:
     3549       INTEGER(iwp) ::  l        !:
     3550       INTEGER(iwp) ::  m        !:
     3551       INTEGER(iwp) ::  n        !:
    28973552
    28983553       REAL(wp), DIMENSION(nzb:nzt+1,nysg:nyng,nxlg:nxrg), INTENT(INOUT) :: f !:
     
    29143569       REAL(wp) ::  logzuc1    !:
    29153570       REAL(wp) ::  zuc1       !:
     3571       REAL(wp) ::  z0_topo    !:  roughness at vertical walls
    29163572
    29173573
     
    29453601       ENDIF
    29463602!
     3603!--    Determine number of flag array to be used to mask topography
     3604       IF ( var == 'u' )  THEN
     3605          flag_nr  = 1
     3606          flag_nr2 = 14
     3607       ELSEIF ( var == 'v' )  THEN
     3608          flag_nr  = 2
     3609          flag_nr2 = 16
     3610       ELSEIF ( var == 'w' )  THEN
     3611          flag_nr  = 3
     3612          flag_nr2 = 18
     3613       ELSE
     3614          flag_nr  = 0
     3615          flag_nr2 = 12
     3616       ENDIF
     3617!
    29473618!--    Trilinear interpolation.
    29483619       DO  i = ib, ie
    29493620          DO  j = jb, je
    2950              DO  k = kb(j,i), nzt + 1
     3621             DO  k = nzb, nzt + 1
    29513622                l = ic(i)
    29523623                m = jc(j)
     
    29703641!--    too.
    29713642       IF ( var == 'u' .OR. var == 'v' )  THEN
     3643          z0_topo = roughness_length
    29723644          DO  i = ib, nxr
    29733645             DO  j = jb, nyn
     3646!
     3647!--             Determine vertical index of topography top at grid point (j,i)
     3648                k_wall = MAXLOC(                                               &
     3649                      MERGE( 1, 0,                                             &
     3650                             BTEST( wall_flags_0(nzb:nzb_max,j,i), flag_nr2 )  &
     3651                           ), DIM = 1                                          &
     3652                               ) - 1
     3653!
     3654!--             kbc is the first coarse-grid point above the surface
    29743655                kbc = 1
    2975 !
    2976 !--             kbc is the first coarse-grid point above the surface
    2977                 DO  WHILE ( cg%zu(kbc) < zu(kb(j,i)) )
     3656                DO  WHILE ( cg%zu(kbc) < zu(k_wall) )
    29783657                   kbc = kbc + 1
    29793658                ENDDO
    29803659                zuc1 = cg%zu(kbc)
    2981                 k1   = kb(j,i) + 1
     3660                k1   = k_wall + 1
    29823661                DO  WHILE ( zu(k1) < zuc1 )
    29833662                   k1 = k1 + 1
    29843663                ENDDO
    2985                 logzuc1 = LOG( ( zu(k1) - zu(kb(j,i)) ) / z0(j,i) )
    2986 
    2987                 k = kb(j,i) + 1
     3664                logzuc1 = LOG( ( zu(k1) - zu(k_wall) ) / z0_topo )
     3665
     3666                k = k_wall + 1
    29883667                DO  WHILE ( zu(k) < zuc1 )
    2989                    logratio = ( LOG( ( zu(k) - zu(kb(j,i)) ) / z0(j,i)) ) /     &
     3668                   logratio = ( LOG( ( zu(k) - zu(k_wall) ) / z0_topo ) ) /     &
    29903669                                logzuc1
    29913670                   f(k,j,i) = logratio * f(k1,j,i)
    29923671                   k  = k + 1
    29933672                ENDDO
    2994                 f(kb(j,i),j,i) = 0.0_wp
     3673                f(k_wall,j,i) = 0.0_wp
    29953674             ENDDO
    29963675          ENDDO
     
    30003679          DO  i = ib, nxr
    30013680              DO  j = jb, nyn
    3002                 f(kb(j,i),j,i) = 0.0_wp
    3003              ENDDO
    3004           ENDDO
     3681!
     3682!--              Determine vertical index of topography top at grid point (j,i)
     3683                 k_wall = MAXLOC(                                              &
     3684                      MERGE( 1, 0,                                             &
     3685                             BTEST( wall_flags_0(nzb:nzb_max,j,i), flag_nr2 )  &
     3686                           ), DIM = 1                                          &
     3687                                ) - 1
     3688
     3689                 f(k_wall,j,i) = 0.0_wp
     3690              ENDDO
     3691           ENDDO
    30053692
    30063693       ENDIF
     
    31373824       innor = dy
    31383825       DO   j = nys, nyn
    3139           DO   k = nzb_u_inner(j,i)+1, nzt
    3140              volume_flow_l(1) = volume_flow_l(1) + innor * u(k,j,i) * dzw(k)
     3826          DO   k = nzb+1, nzt
     3827             volume_flow_l(1) = volume_flow_l(1) + innor * u(k,j,i) * dzw(k)   &
     3828                                     * MERGE( 1.0_wp, 0.0_wp,                  &
     3829                                              BTEST( wall_flags_0(k,j,i), 1 ) )
    31413830          ENDDO
    31423831       ENDDO
     
    31473836       innor = -dy
    31483837       DO   j = nys, nyn
    3149           DO   k = nzb_u_inner(j,i)+1, nzt
    3150              volume_flow_l(1) = volume_flow_l(1) + innor * u(k,j,i) * dzw(k)
     3838          DO   k = nzb+1, nzt
     3839             volume_flow_l(1) = volume_flow_l(1) + innor * u(k,j,i) * dzw(k)   &
     3840                                     * MERGE( 1.0_wp, 0.0_wp,                  &
     3841                                              BTEST( wall_flags_0(k,j,i), 1 ) )
    31513842          ENDDO
    31523843       ENDDO
     
    31703861       innor = dx
    31713862       DO   i = nxl, nxr
    3172           DO   k = nzb_v_inner(j,i)+1, nzt
    3173              volume_flow_l(2) = volume_flow_l(2) + innor * v(k,j,i) * dzw(k)
     3863          DO   k = nzb+1, nzt
     3864             volume_flow_l(2) = volume_flow_l(2) + innor * v(k,j,i) * dzw(k)   &
     3865                                     * MERGE( 1.0_wp, 0.0_wp,                  &
     3866                                              BTEST( wall_flags_0(k,j,i), 2 ) )
    31743867          ENDDO
    31753868       ENDDO
     
    31803873       innor = -dx
    31813874       DO   i = nxl, nxr
    3182           DO   k = nzb_v_inner(j,i)+1, nzt
    3183              volume_flow_l(2) = volume_flow_l(2) + innor * v(k,j,i) * dzw(k)
     3875          DO   k = nzb+1, nzt
     3876             volume_flow_l(2) = volume_flow_l(2) + innor * v(k,j,i) * dzw(k)   &
     3877                                     * MERGE( 1.0_wp, 0.0_wp,                  &
     3878                                              BTEST( wall_flags_0(k,j,i), 2 ) )
    31843879          ENDDO
    31853880       ENDDO
     
    33404035    INTEGER(iwp) ::  child_id    !:
    33414036    INTEGER(iwp) ::  i           !:
     4037    INTEGER(iwp) ::  ierr        !:
    33424038    INTEGER(iwp) ::  j           !:
    3343     INTEGER(iwp) ::  ierr        !:
     4039    INTEGER(iwp) ::  k           !:
    33444040    INTEGER(iwp) ::  m           !:
    33454041
     
    33744070             DO   i = nxlg, nxrg
    33754071                DO   j = nysg, nyng
    3376                    u(nzb:nzb_u_inner(j,i),j,i)  = 0.0_wp
    3377                    v(nzb:nzb_v_inner(j,i),j,i)  = 0.0_wp
    3378                    w(nzb:nzb_w_inner(j,i),j,i)  = 0.0_wp
    3379                    e(nzb:nzb_s_inner(j,i),j,i)  = 0.0_wp
     4072                   DO  k = nzb, nzt+1
     4073                      u(k,j,i)  = MERGE( u(k,j,i), 0.0_wp,                     &
     4074                                         BTEST( wall_flags_0(k,j,i), 1 ) )
     4075                      v(k,j,i)  = MERGE( v(k,j,i), 0.0_wp,                     &
     4076                                         BTEST( wall_flags_0(k,j,i), 2 ) )
     4077                      w(k,j,i)  = MERGE( w(k,j,i), 0.0_wp,                     &
     4078                                         BTEST( wall_flags_0(k,j,i), 3 ) )
     4079                      e(k,j,i)  = MERGE( e(k,j,i), 0.0_wp,                     &
     4080                                         BTEST( wall_flags_0(k,j,i), 0 ) )
    33804081!
    33814082!--                TO_DO: zero setting of temperature within topography creates
     
    33854086!                      q(nzb:nzb_s_inner(j,i),j,i) = 0.0_wp
    33864087!                   ENDIF
     4088                   ENDDO
    33874089                ENDDO
    33884090             ENDDO
     
    34634165          IF ( nest_bound_l )  THEN
    34644166             CALL pmci_interp_tril_lr( u,  uc,  icu, jco, kco, r1xu, r2xu,      &
    3465                                        r1yo, r2yo, r1zo, r2zo, nzb_u_inner,     &
     4167                                       r1yo, r2yo, r1zo, r2zo,                  &
    34664168                                       logc_u_l, logc_ratio_u_l,                &
    34674169                                       nzt_topo_nestbc_l, 'l', 'u' )
    34684170
    34694171             CALL pmci_interp_tril_lr( v,  vc,  ico, jcv, kco, r1xo, r2xo,      &
    3470                                        r1yv, r2yv, r1zo, r2zo, nzb_v_inner,     &
     4172                                       r1yv, r2yv, r1zo, r2zo,                  &
    34714173                                       logc_v_l, logc_ratio_v_l,                &
    34724174                                       nzt_topo_nestbc_l, 'l', 'v' )
    34734175
    34744176             CALL pmci_interp_tril_lr( w,  wc,  ico, jco, kcw, r1xo, r2xo,      &
    3475                                        r1yo, r2yo, r1zw, r2zw, nzb_w_inner,     &
     4177                                       r1yo, r2yo, r1zw, r2zw,                  &
    34764178                                       logc_w_l, logc_ratio_w_l,                &
    34774179                                       nzt_topo_nestbc_l, 'l', 'w' )
    34784180
    34794181             CALL pmci_interp_tril_lr( e,  ec,  ico, jco, kco, r1xo, r2xo,      &
    3480                                        r1yo, r2yo, r1zo, r2zo, nzb_s_inner,     &
     4182                                       r1yo, r2yo, r1zo, r2zo,                  &
    34814183                                       logc_u_l, logc_ratio_u_l,                &
    34824184                                       nzt_topo_nestbc_l, 'l', 'e' )
     
    34844186             IF ( .NOT. neutral )  THEN
    34854187                CALL pmci_interp_tril_lr( pt, ptc, ico, jco, kco, r1xo, r2xo,   &
    3486                                           r1yo, r2yo, r1zo, r2zo, nzb_s_inner,  &
     4188                                          r1yo, r2yo, r1zo, r2zo,               &
    34874189                                          logc_u_l, logc_ratio_u_l,             &
    34884190                                          nzt_topo_nestbc_l, 'l', 's' )
     
    34924194
    34934195                CALL pmci_interp_tril_lr( q, q_c, ico, jco, kco, r1xo, r2xo,    &
    3494                                           r1yo, r2yo, r1zo, r2zo, nzb_s_inner,  &
     4196                                          r1yo, r2yo, r1zo, r2zo,               &
    34954197                                          logc_u_l, logc_ratio_u_l,             &
    34964198                                          nzt_topo_nestbc_l, 'l', 's' )
     
    35004202!                    CALL pmci_interp_tril_lr( qc, qcc, ico, jco, kco, r1xo, r2xo,&
    35014203!                                              r1yo, r2yo, r1zo, r2zo,            &
    3502 !                                              nzb_s_inner, logc_u_l,             &
     4204!                                              logc_u_l,                          &
    35034205!                                              logc_ratio_u_l, nzt_topo_nestbc_l, &
    35044206!                                              'l', 's' ) 
     
    35064208                   CALL pmci_interp_tril_lr( qr, qrc, ico, jco, kco, r1xo, r2xo,&
    35074209                                             r1yo, r2yo, r1zo, r2zo,            &
    3508                                              nzb_s_inner, logc_u_l,             &
     4210                                             logc_u_l,                          &
    35094211                                             logc_ratio_u_l, nzt_topo_nestbc_l, &
    35104212                                             'l', 's' )
     
    35124214!                    CALL pmci_interp_tril_lr( nc, ncc, ico, jco, kco, r1xo, r2xo,&
    35134215!                                              r1yo, r2yo, r1zo, r2zo,            &
    3514 !                                              nzb_s_inner, logc_u_l,             &
     4216!                                              logc_u_l,                          &
    35154217!                                              logc_ratio_u_l, nzt_topo_nestbc_l, &
    35164218!                                              'l', 's' )
     
    35184220                   CALL pmci_interp_tril_lr( nr, nrc, ico, jco, kco, r1xo, r2xo,&
    35194221                                             r1yo, r2yo, r1zo, r2zo,            &
    3520                                              nzb_s_inner, logc_u_l,             &
     4222                                             logc_u_l,                          &
    35214223                                             logc_ratio_u_l, nzt_topo_nestbc_l, &
    35224224                                             'l', 's' )             
     
    35274229             IF ( passive_scalar )  THEN
    35284230                CALL pmci_interp_tril_lr( s, sc, ico, jco, kco, r1xo, r2xo,     &
    3529                                           r1yo, r2yo, r1zo, r2zo, nzb_s_inner,  &
     4231                                          r1yo, r2yo, r1zo, r2zo,               &
    35304232                                          logc_u_l, logc_ratio_u_l,             &
    35314233                                          nzt_topo_nestbc_l, 'l', 's' )
     
    35334235
    35344236             IF ( TRIM( nesting_mode ) == 'one-way' )  THEN
    3535 
    3536                 CALL pmci_extrap_ifoutflow_lr( u, nzb_u_inner, 'l', 'u' )
    3537                 CALL pmci_extrap_ifoutflow_lr( v, nzb_v_inner, 'l', 'v' )
    3538                 CALL pmci_extrap_ifoutflow_lr( w, nzb_w_inner, 'l', 'w' )
    3539                 CALL pmci_extrap_ifoutflow_lr( e, nzb_s_inner, 'l', 'e' )
     4237                CALL pmci_extrap_ifoutflow_lr( u, 'l', 'u' )
     4238                CALL pmci_extrap_ifoutflow_lr( v, 'l', 'v' )
     4239                CALL pmci_extrap_ifoutflow_lr( w, 'l', 'w' )
     4240                CALL pmci_extrap_ifoutflow_lr( e, 'l', 'e' )
    35404241
    35414242                IF ( .NOT. neutral )  THEN
    3542                    CALL pmci_extrap_ifoutflow_lr( pt,nzb_s_inner, 'l', 's' )
     4243                   CALL pmci_extrap_ifoutflow_lr( pt, 'l', 's' )
    35434244                ENDIF
    35444245
    35454246                IF ( humidity )  THEN
    3546 
    3547                    CALL pmci_extrap_ifoutflow_lr( q, nzb_s_inner, 'l', 's' )
     4247                   CALL pmci_extrap_ifoutflow_lr( q, 'l', 's' )
    35484248
    35494249                   IF ( cloud_physics  .AND.  microphysics_seifert )  THEN
    35504250
    3551 !                       CALL pmci_extrap_ifoutflow_lr( qc, nzb_s_inner, 'l', 's' )
    3552                       CALL pmci_extrap_ifoutflow_lr( qr, nzb_s_inner, 'l', 's' )
    3553 !                      CALL pmci_extrap_ifoutflow_lr( nc, nzb_s_inner, 'l', 's' )
    3554                       CALL pmci_extrap_ifoutflow_lr( nr, nzb_s_inner, 'l', 's' )
     4251!                       CALL pmci_extrap_ifoutflow_lr( qc, 'l', 's' )
     4252                      CALL pmci_extrap_ifoutflow_lr( qr, 'l', 's' )
     4253!                      CALL pmci_extrap_ifoutflow_lr( nc, 'l', 's' )
     4254                      CALL pmci_extrap_ifoutflow_lr( nr, 'l', 's' )
    35554255
    35564256                   ENDIF
     
    35594259
    35604260                IF ( passive_scalar )  THEN
    3561                    CALL pmci_extrap_ifoutflow_lr( s, nzb_s_inner, 'l', 's' )
     4261                   CALL pmci_extrap_ifoutflow_lr( s, 'l', 's' )
    35624262                ENDIF
    35634263
     
    35694269   !--    Right border pe
    35704270          IF ( nest_bound_r )  THEN
    3571 
    3572              CALL pmci_interp_tril_lr( u,  uc,  icu, jco, kco, r1xu, r2xu,     &
    3573                                        r1yo, r2yo, r1zo, r2zo, nzb_u_inner,    &
    3574                                        logc_u_r, logc_ratio_u_r,               &
     4271             CALL pmci_interp_tril_lr( u,  uc,  icu, jco, kco, r1xu, r2xu,      &
     4272                                       r1yo, r2yo, r1zo, r2zo,                  &
     4273                                       logc_u_r, logc_ratio_u_r,                &
    35754274                                       nzt_topo_nestbc_r, 'r', 'u' )
    35764275
    3577              CALL pmci_interp_tril_lr( v,  vc,  ico, jcv, kco, r1xo, r2xo,     &
    3578                                        r1yv, r2yv, r1zo, r2zo, nzb_v_inner,    &
    3579                                        logc_v_r, logc_ratio_v_r,               &
     4276             CALL pmci_interp_tril_lr( v,  vc,  ico, jcv, kco, r1xo, r2xo,      &
     4277                                       r1yv, r2yv, r1zo, r2zo,                  &
     4278                                       logc_v_r, logc_ratio_v_r,                &
    35804279                                       nzt_topo_nestbc_r, 'r', 'v' )
    35814280
    3582              CALL pmci_interp_tril_lr( w,  wc,  ico, jco, kcw, r1xo, r2xo,     &
    3583                                        r1yo, r2yo, r1zw, r2zw, nzb_w_inner,    &
    3584                                        logc_w_r, logc_ratio_w_r,               &
     4281             CALL pmci_interp_tril_lr( w,  wc,  ico, jco, kcw, r1xo, r2xo,      &
     4282                                       r1yo, r2yo, r1zw, r2zw,                  &
     4283                                       logc_w_r, logc_ratio_w_r,                &
    35854284                                       nzt_topo_nestbc_r, 'r', 'w' )
    35864285
    3587              CALL pmci_interp_tril_lr( e,  ec,  ico, jco, kco, r1xo, r2xo,     &
    3588                                        r1yo,r2yo, r1zo, r2zo, nzb_s_inner,     &
    3589                                        logc_u_r, logc_ratio_u_r,               &
     4286             CALL pmci_interp_tril_lr( e,  ec,  ico, jco, kco, r1xo, r2xo,      &
     4287                                       r1yo,r2yo, r1zo, r2zo,                   &
     4288                                       logc_u_r, logc_ratio_u_r,                &
    35904289                                       nzt_topo_nestbc_r, 'r', 'e' )
    35914290
     4291
    35924292             IF ( .NOT. neutral )  THEN
    3593                 CALL pmci_interp_tril_lr( pt, ptc, ico, jco, kco, r1xo, r2xo,  &
    3594                                           r1yo, r2yo, r1zo, r2zo, nzb_s_inner, &
    3595                                           logc_u_r, logc_ratio_u_r,            &
     4293                CALL pmci_interp_tril_lr( pt, ptc, ico, jco, kco, r1xo, r2xo,   &
     4294                                          r1yo, r2yo, r1zo, r2zo,               &
     4295                                          logc_u_r, logc_ratio_u_r,             &
    35964296                                          nzt_topo_nestbc_r, 'r', 's' )
     4297
    35974298             ENDIF
    35984299
    35994300             IF ( humidity )  THEN
    3600 
    3601                 CALL pmci_interp_tril_lr( q, q_c, ico, jco, kco, r1xo, r2xo,   &
    3602                                           r1yo, r2yo, r1zo, r2zo, nzb_s_inner, &
    3603                                           logc_u_r, logc_ratio_u_r,            &
     4301                CALL pmci_interp_tril_lr( q, q_c, ico, jco, kco, r1xo, r2xo,    &
     4302                                          r1yo, r2yo, r1zo, r2zo,               &
     4303                                          logc_u_r, logc_ratio_u_r,             &
    36044304                                          nzt_topo_nestbc_r, 'r', 's' )
     4305
    36054306
    36064307                IF ( cloud_physics  .AND.  microphysics_seifert )  THEN
     
    36084309!                    CALL pmci_interp_tril_lr( qc, qcc, ico, jco, kco, r1xo,     &
    36094310!                                              r2xo, r1yo, r2yo, r1zo, r2zo,     &
    3610 !                                              nzb_s_inner, logc_u_r,            &
     4311!                                              logc_u_r,                         &
    36114312!                                              logc_ratio_u_r, nzt_topo_nestbc_r,&
    36124313!                                              'r', 's' )
     
    36144315                   CALL pmci_interp_tril_lr( qr, qrc, ico, jco, kco, r1xo,     &
    36154316                                             r2xo, r1yo, r2yo, r1zo, r2zo,     &
    3616                                              nzb_s_inner, logc_u_r,            &
     4317                                             logc_u_r,                         &
    36174318                                             logc_ratio_u_r, nzt_topo_nestbc_r,&
    36184319                                             'r', 's' )
     
    36204321!                    CALL pmci_interp_tril_lr( nc, ncc, ico, jco, kco, r1xo,     &
    36214322!                                              r2xo, r1yo, r2yo, r1zo, r2zo,     &
    3622 !                                              nzb_s_inner, logc_u_r,            &
     4323!                                              logc_u_r,                         &
    36234324!                                              logc_ratio_u_r, nzt_topo_nestbc_r,&
    36244325!                                              'r', 's' )
     
    36264327                   CALL pmci_interp_tril_lr( nr, nrc, ico, jco, kco, r1xo,     &
    36274328                                             r2xo, r1yo, r2yo, r1zo, r2zo,     &
    3628                                              nzb_s_inner, logc_u_r,            &
     4329                                             logc_u_r,                         &
    36294330                                             logc_ratio_u_r, nzt_topo_nestbc_r,&
    36304331                                             'r', 's' )
     
    36364337             IF ( passive_scalar )  THEN
    36374338                CALL pmci_interp_tril_lr( s, sc, ico, jco, kco, r1xo, r2xo,    &
    3638                                           r1yo, r2yo, r1zo, r2zo, nzb_s_inner, &
     4339                                          r1yo, r2yo, r1zo, r2zo,             &
    36394340                                          logc_u_r, logc_ratio_u_r,            &
    36404341                                          nzt_topo_nestbc_r, 'r', 's' )
     4342
    36414343             ENDIF
    36424344
    36434345             IF ( TRIM( nesting_mode ) == 'one-way' )  THEN
    3644 
    3645                 CALL pmci_extrap_ifoutflow_lr( u, nzb_u_inner, 'r', 'u' )
    3646                 CALL pmci_extrap_ifoutflow_lr( v, nzb_v_inner, 'r', 'v' )
    3647                 CALL pmci_extrap_ifoutflow_lr( w, nzb_w_inner, 'r', 'w' )
    3648                 CALL pmci_extrap_ifoutflow_lr( e, nzb_s_inner, 'r', 'e' )
     4346                CALL pmci_extrap_ifoutflow_lr( u, 'r', 'u' )
     4347                CALL pmci_extrap_ifoutflow_lr( v, 'r', 'v' )
     4348                CALL pmci_extrap_ifoutflow_lr( w, 'r', 'w' )
     4349                CALL pmci_extrap_ifoutflow_lr( e, 'r', 'e' )
    36494350
    36504351                IF ( .NOT. neutral )  THEN
    3651                    CALL pmci_extrap_ifoutflow_lr( pt,nzb_s_inner, 'r', 's' )
     4352                   CALL pmci_extrap_ifoutflow_lr( pt, 'r', 's' )
    36524353                ENDIF
    36534354
    36544355                IF ( humidity )  THEN
    3655 
    3656                    CALL pmci_extrap_ifoutflow_lr( q, nzb_s_inner, 'r', 's' )
     4356                   CALL pmci_extrap_ifoutflow_lr( q, 'r', 's' )
    36574357
    36584358                   IF ( cloud_physics  .AND.  microphysics_seifert )  THEN
    3659 !                       CALL pmci_extrap_ifoutflow_lr( qc, nzb_s_inner, 'r', 's' )
    3660                       CALL pmci_extrap_ifoutflow_lr( qr, nzb_s_inner, 'r', 's' )
    3661 !                      CALL pmci_extrap_ifoutflow_lr( nc, nzb_s_inner, 'r', 's' ) 
    3662                       CALL pmci_extrap_ifoutflow_lr( nr, nzb_s_inner, 'r', 's' )
     4359!                       CALL pmci_extrap_ifoutflow_lr( qc, 'r', 's' )
     4360                      CALL pmci_extrap_ifoutflow_lr( qr, 'r', 's' )
     4361!                      CALL pmci_extrap_ifoutflow_lr( nc, 'r', 's' ) 
     4362                      CALL pmci_extrap_ifoutflow_lr( nr, 'r', 's' )
    36634363                   ENDIF
    36644364
     
    36664366
    36674367                IF ( passive_scalar )  THEN
    3668                    CALL pmci_extrap_ifoutflow_lr( s, nzb_s_inner, 'r', 's' )
     4368                   CALL pmci_extrap_ifoutflow_lr( s, 'r', 's' )
    36694369                ENDIF
    36704370             ENDIF
     
    36754375   !--    South border pe
    36764376          IF ( nest_bound_s )  THEN
    3677              CALL pmci_interp_tril_sn( u,  uc,  icu, jco, kco, r1xu, r2xu,     &
    3678                                        r1yo, r2yo, r1zo, r2zo, nzb_u_inner,    &
    3679                                        logc_u_s, logc_ratio_u_s,               &
     4377             CALL pmci_interp_tril_sn( u,  uc,  icu, jco, kco, r1xu, r2xu,      &
     4378                                       r1yo, r2yo, r1zo, r2zo,                  &
     4379                                       logc_u_s, logc_ratio_u_s,                &
    36804380                                       nzt_topo_nestbc_s, 's', 'u' )
    3681 
    3682              CALL pmci_interp_tril_sn( v,  vc,  ico, jcv, kco, r1xo, r2xo,     &
    3683                                        r1yv, r2yv, r1zo, r2zo, nzb_v_inner,    &
    3684                                        logc_v_s, logc_ratio_v_s,               &
     4381             CALL pmci_interp_tril_sn( v,  vc,  ico, jcv, kco, r1xo, r2xo,      &
     4382                                       r1yv, r2yv, r1zo, r2zo,                  &
     4383                                       logc_v_s, logc_ratio_v_s,                &
    36854384                                       nzt_topo_nestbc_s, 's', 'v' )
    3686 
    3687              CALL pmci_interp_tril_sn( w,  wc,  ico, jco, kcw, r1xo, r2xo,     &
    3688                                        r1yo, r2yo, r1zw, r2zw, nzb_w_inner,    &
    3689                                        logc_w_s, logc_ratio_w_s,               &
     4385             CALL pmci_interp_tril_sn( w,  wc,  ico, jco, kcw, r1xo, r2xo,      &
     4386                                       r1yo, r2yo, r1zw, r2zw,                  &
     4387                                       logc_w_s, logc_ratio_w_s,                &
    36904388                                       nzt_topo_nestbc_s, 's','w' )
    3691 
    3692              CALL pmci_interp_tril_sn( e,  ec,  ico, jco, kco, r1xo, r2xo,     &
    3693                                        r1yo, r2yo, r1zo, r2zo, nzb_s_inner,    &
    3694                                        logc_u_s, logc_ratio_u_s,               &
     4389             CALL pmci_interp_tril_sn( e,  ec,  ico, jco, kco, r1xo, r2xo,      &
     4390                                       r1yo, r2yo, r1zo, r2zo,                  &
     4391                                       logc_u_s, logc_ratio_u_s,                &
    36954392                                       nzt_topo_nestbc_s, 's', 'e' )
    36964393
    36974394             IF ( .NOT. neutral )  THEN
    3698                 CALL pmci_interp_tril_sn( pt, ptc, ico, jco, kco, r1xo, r2xo,  &
    3699                                           r1yo, r2yo, r1zo, r2zo, nzb_s_inner, &
    3700                                           logc_u_s, logc_ratio_u_s,            &
     4395                CALL pmci_interp_tril_sn( pt, ptc, ico, jco, kco, r1xo, r2xo,   &
     4396                                          r1yo, r2yo, r1zo, r2zo,               &
     4397                                          logc_u_s, logc_ratio_u_s,             &
    37014398                                          nzt_topo_nestbc_s, 's', 's' )
    37024399             ENDIF
    37034400
    37044401             IF ( humidity )  THEN
    3705 
    3706                 CALL pmci_interp_tril_sn( q, q_c, ico, jco, kco, r1xo, r2xo,   &
    3707                                           r1yo,r2yo, r1zo, r2zo, nzb_s_inner,  &
    3708                                           logc_u_s, logc_ratio_u_s,            &
     4402                CALL pmci_interp_tril_sn( q, q_c, ico, jco, kco, r1xo, r2xo,    &
     4403                                          r1yo,r2yo, r1zo, r2zo,                &
     4404                                          logc_u_s, logc_ratio_u_s,             &
    37094405                                          nzt_topo_nestbc_s, 's', 's' )
    37104406
     
    37134409!                    CALL pmci_interp_tril_sn( qc, qcc, ico, jco, kco, r1xo,     &
    37144410!                                              r2xo, r1yo,r2yo, r1zo, r2zo,      &
    3715 !                                              nzb_s_inner, logc_u_s,            &
     4411!                                              logc_u_s,                         &
    37164412!                                              logc_ratio_u_s, nzt_topo_nestbc_s,&
    37174413!                                              's', 's' )
     
    37194415                   CALL pmci_interp_tril_sn( qr, qrc, ico, jco, kco, r1xo,     &
    37204416                                             r2xo, r1yo,r2yo, r1zo, r2zo,      &
    3721                                              nzb_s_inner, logc_u_s,            &
     4417                                             logc_u_s,                         &
    37224418                                             logc_ratio_u_s, nzt_topo_nestbc_s,&
    37234419                                             's', 's' )
     
    37254421!                    CALL pmci_interp_tril_sn( nc, ncc, ico, jco, kco, r1xo,     &
    37264422!                                              r2xo, r1yo,r2yo, r1zo, r2zo,      &
    3727 !                                              nzb_s_inner, logc_u_s,            &
     4423!                                              logc_u_s,                         &
    37284424!                                              logc_ratio_u_s, nzt_topo_nestbc_s,&
    37294425!                                              's', 's' )
     
    37314427                   CALL pmci_interp_tril_sn( nr, nrc, ico, jco, kco, r1xo,     &
    37324428                                             r2xo, r1yo,r2yo, r1zo, r2zo,      &
    3733                                              nzb_s_inner, logc_u_s,            &
     4429                                             logc_u_s,                         &
    37344430                                             logc_ratio_u_s, nzt_topo_nestbc_s,&
    37354431                                             's', 's' )
     
    37404436
    37414437             IF ( passive_scalar )  THEN
    3742                 CALL pmci_interp_tril_sn( s, sc, ico, jco, kco, r1xo, r2xo,    &
    3743                                           r1yo,r2yo, r1zo, r2zo, nzb_s_inner,  &
    3744                                           logc_u_s, logc_ratio_u_s,            &
     4438                CALL pmci_interp_tril_sn( s, sc, ico, jco, kco, r1xo, r2xo,     &
     4439                                          r1yo,r2yo, r1zo, r2zo,                &
     4440                                          logc_u_s, logc_ratio_u_s,             &
    37454441                                          nzt_topo_nestbc_s, 's', 's' )
    37464442             ENDIF
    37474443
    37484444             IF ( TRIM( nesting_mode ) == 'one-way' )  THEN
    3749 
    3750                 CALL pmci_extrap_ifoutflow_sn( u, nzb_u_inner, 's', 'u' )
    3751                 CALL pmci_extrap_ifoutflow_sn( v, nzb_v_inner, 's', 'v' )
    3752                 CALL pmci_extrap_ifoutflow_sn( w, nzb_w_inner, 's', 'w' )
    3753                 CALL pmci_extrap_ifoutflow_sn( e, nzb_s_inner, 's', 'e' )
     4445                CALL pmci_extrap_ifoutflow_sn( u, 's', 'u' )
     4446                CALL pmci_extrap_ifoutflow_sn( v, 's', 'v' )
     4447                CALL pmci_extrap_ifoutflow_sn( w, 's', 'w' )
     4448                CALL pmci_extrap_ifoutflow_sn( e, 's', 'e' )
    37544449
    37554450                IF ( .NOT. neutral )  THEN
    3756                    CALL pmci_extrap_ifoutflow_sn( pt,nzb_s_inner, 's', 's' )
     4451                   CALL pmci_extrap_ifoutflow_sn( pt, 's', 's' )
    37574452                ENDIF
    37584453
    37594454                IF ( humidity )  THEN
    3760 
    3761                    CALL pmci_extrap_ifoutflow_sn( q, nzb_s_inner, 's', 's' )
     4455                   CALL pmci_extrap_ifoutflow_sn( q,  's', 's' )
    37624456
    37634457                   IF ( cloud_physics  .AND.  microphysics_seifert )  THEN
    3764 !                       CALL pmci_extrap_ifoutflow_sn( qc, nzb_s_inner, 's', 's' )
    3765                       CALL pmci_extrap_ifoutflow_sn( qr, nzb_s_inner, 's', 's' )     
    3766 !                       CALL pmci_extrap_ifoutflow_sn( nc, nzb_s_inner, 's', 's' )
    3767                       CALL pmci_extrap_ifoutflow_sn( nr, nzb_s_inner, 's', 's' )
     4458!                       CALL pmci_extrap_ifoutflow_sn( qc, 's', 's' )
     4459                      CALL pmci_extrap_ifoutflow_sn( qr, 's', 's' )     
     4460!                       CALL pmci_extrap_ifoutflow_sn( nc, 's', 's' )
     4461                      CALL pmci_extrap_ifoutflow_sn( nr, 's', 's' )
    37684462
    37694463                   ENDIF
     
    37724466
    37734467                IF ( passive_scalar )  THEN
    3774                    CALL pmci_extrap_ifoutflow_sn( s, nzb_s_inner, 's', 's' )
     4468                   CALL pmci_extrap_ifoutflow_sn( s, 's', 's' )
    37754469                ENDIF
    37764470
     
    37824476   !--    North border pe
    37834477          IF ( nest_bound_n )  THEN
    3784 
    3785              CALL pmci_interp_tril_sn( u,  uc,  icu, jco, kco, r1xu, r2xu,     &
    3786                                        r1yo, r2yo, r1zo, r2zo, nzb_u_inner,    &
    3787                                        logc_u_n, logc_ratio_u_n,               &
     4478             CALL pmci_interp_tril_sn( u,  uc,  icu, jco, kco, r1xu, r2xu,      &
     4479                                       r1yo, r2yo, r1zo, r2zo,                  &
     4480                                       logc_u_n, logc_ratio_u_n,                &
    37884481                                       nzt_topo_nestbc_n, 'n', 'u' )
    3789              CALL pmci_interp_tril_sn( v,  vc,  ico, jcv, kco, r1xo, r2xo,     &
    3790                                        r1yv, r2yv, r1zo, r2zo, nzb_v_inner,    &
    3791                                        logc_v_n, logc_ratio_v_n,               &
     4482
     4483             CALL pmci_interp_tril_sn( v,  vc,  ico, jcv, kco, r1xo, r2xo,      &
     4484                                       r1yv, r2yv, r1zo, r2zo,                  &
     4485                                       logc_v_n, logc_ratio_v_n,                &
    37924486                                       nzt_topo_nestbc_n, 'n', 'v' )
    3793              CALL pmci_interp_tril_sn( w,  wc,  ico, jco, kcw, r1xo, r2xo,     &
    3794                                        r1yo, r2yo, r1zw, r2zw, nzb_w_inner,    &
    3795                                        logc_w_n, logc_ratio_w_n,               &
     4487
     4488             CALL pmci_interp_tril_sn( w,  wc,  ico, jco, kcw, r1xo, r2xo,      &
     4489                                       r1yo, r2yo, r1zw, r2zw,                  &
     4490                                       logc_w_n, logc_ratio_w_n,                &
    37964491                                       nzt_topo_nestbc_n, 'n', 'w' )
    3797              CALL pmci_interp_tril_sn( e,  ec,  ico, jco, kco, r1xo, r2xo,     &
    3798                                        r1yo, r2yo, r1zo, r2zo, nzb_s_inner,    &
    3799                                        logc_u_n, logc_ratio_u_n,               &
     4492
     4493             CALL pmci_interp_tril_sn( e,  ec,  ico, jco, kco, r1xo, r2xo,      &
     4494                                       r1yo, r2yo, r1zo, r2zo,                  &
     4495                                       logc_u_n, logc_ratio_u_n,                &
    38004496                                       nzt_topo_nestbc_n, 'n', 'e' )
    38014497
    38024498             IF ( .NOT. neutral )  THEN
    3803                 CALL pmci_interp_tril_sn( pt, ptc, ico, jco, kco, r1xo, r2xo,  &
    3804                                           r1yo, r2yo, r1zo, r2zo, nzb_s_inner, &
    3805                                           logc_u_n, logc_ratio_u_n,            &
     4499                CALL pmci_interp_tril_sn( pt, ptc, ico, jco, kco, r1xo, r2xo,   &
     4500                                          r1yo, r2yo, r1zo, r2zo,               &
     4501                                          logc_u_n, logc_ratio_u_n,             &
    38064502                                          nzt_topo_nestbc_n, 'n', 's' )
    38074503             ENDIF
    38084504
    38094505             IF ( humidity )  THEN
    3810 
    3811                 CALL pmci_interp_tril_sn( q, q_c, ico, jco, kco, r1xo, r2xo,   &
    3812                                           r1yo, r2yo, r1zo, r2zo, nzb_s_inner, &
    3813                                           logc_u_n, logc_ratio_u_n,            &
     4506                CALL pmci_interp_tril_sn( q, q_c, ico, jco, kco, r1xo, r2xo,    &
     4507                                          r1yo, r2yo, r1zo, r2zo,               &
     4508                                          logc_u_n, logc_ratio_u_n,             &
    38144509                                          nzt_topo_nestbc_n, 'n', 's' )
    38154510
     
    38184513!                    CALL pmci_interp_tril_sn( qc, qcc, ico, jco, kco, r1xo,     &
    38194514!                                              r2xo, r1yo, r2yo, r1zo, r2zo,     &
    3820 !                                              nzb_s_inner, logc_u_n,            &
     4515!                                              logc_u_n,                         &
    38214516!                                              logc_ratio_u_n, nzt_topo_nestbc_n,&
    38224517!                                              'n', 's' )
     
    38244519                   CALL pmci_interp_tril_sn( qr, qrc, ico, jco, kco, r1xo,     &
    38254520                                             r2xo, r1yo, r2yo, r1zo, r2zo,     &
    3826                                              nzb_s_inner, logc_u_n,            &
     4521                                             logc_u_n,                         &
    38274522                                             logc_ratio_u_n, nzt_topo_nestbc_n,&
    38284523                                             'n', 's' )
     
    38304525!                    CALL pmci_interp_tril_sn( nc, ncc, ico, jco, kco, r1xo,     &
    38314526!                                              r2xo, r1yo, r2yo, r1zo, r2zo,     &
    3832 !                                              nzb_s_inner, logc_u_n,            &
     4527!                                              logc_u_n,                         &
    38334528!                                              logc_ratio_u_n, nzt_topo_nestbc_n,&
    38344529!                                              'n', 's' )
     
    38364531                   CALL pmci_interp_tril_sn( nr, nrc, ico, jco, kco, r1xo,     &
    38374532                                             r2xo, r1yo, r2yo, r1zo, r2zo,     &
    3838                                              nzb_s_inner, logc_u_n,            &
     4533                                             logc_u_n,                         &
    38394534                                             logc_ratio_u_n, nzt_topo_nestbc_n,&
    38404535                                             'n', 's' )
     
    38454540
    38464541             IF ( passive_scalar )  THEN
    3847                 CALL pmci_interp_tril_sn( s, sc, ico, jco, kco, r1xo, r2xo,    &
    3848                                           r1yo, r2yo, r1zo, r2zo, nzb_s_inner, &
    3849                                           logc_u_n, logc_ratio_u_n,            &
     4542                CALL pmci_interp_tril_sn( s, sc, ico, jco, kco, r1xo, r2xo,     &
     4543                                          r1yo, r2yo, r1zo, r2zo,               &
     4544                                          logc_u_n, logc_ratio_u_n,             &
    38504545                                          nzt_topo_nestbc_n, 'n', 's' )
    38514546             ENDIF
    38524547
    38534548             IF ( TRIM( nesting_mode ) == 'one-way' )  THEN
    3854 
    3855                 CALL pmci_extrap_ifoutflow_sn( u, nzb_u_inner, 'n', 'u' )
    3856                 CALL pmci_extrap_ifoutflow_sn( v, nzb_v_inner, 'n', 'v' )
    3857                 CALL pmci_extrap_ifoutflow_sn( w, nzb_w_inner, 'n', 'w' )
    3858                 CALL pmci_extrap_ifoutflow_sn( e, nzb_s_inner, 'n', 'e' )
     4549                CALL pmci_extrap_ifoutflow_sn( u, 'n', 'u' )
     4550                CALL pmci_extrap_ifoutflow_sn( v, 'n', 'v' )
     4551                CALL pmci_extrap_ifoutflow_sn( w, 'n', 'w' )
     4552                CALL pmci_extrap_ifoutflow_sn( e, 'n', 'e' )
    38594553
    38604554                IF ( .NOT. neutral )  THEN
    3861                    CALL pmci_extrap_ifoutflow_sn( pt,nzb_s_inner, 'n', 's' )
     4555                   CALL pmci_extrap_ifoutflow_sn( pt, 'n', 's' )
    38624556                ENDIF
    38634557
    38644558                IF ( humidity )  THEN
    3865 
    3866                    CALL pmci_extrap_ifoutflow_sn( q, nzb_s_inner, 'n', 's' )
     4559                   CALL pmci_extrap_ifoutflow_sn( q,  'n', 's' )
    38674560
    38684561                   IF ( cloud_physics  .AND.  microphysics_seifert )  THEN
    3869 !                       CALL pmci_extrap_ifoutflow_sn( qc, nzb_s_inner, 'n', 's' )
    3870                       CALL pmci_extrap_ifoutflow_sn( qr, nzb_s_inner, 'n', 's' )
    3871 !                       CALL pmci_extrap_ifoutflow_sn( nc, nzb_s_inner, 'n', 's' )
    3872                       CALL pmci_extrap_ifoutflow_sn( nr, nzb_s_inner, 'n', 's' )
     4562!                       CALL pmci_extrap_ifoutflow_sn( qc, 'n', 's' )
     4563                      CALL pmci_extrap_ifoutflow_sn( qr, 'n', 's' )
     4564!                       CALL pmci_extrap_ifoutflow_sn( nc, 'n', 's' )
     4565                      CALL pmci_extrap_ifoutflow_sn( nr, 'n', 's' )
    38734566                   ENDIF
    38744567
     
    38764569
    38774570                IF ( passive_scalar )  THEN
    3878                    CALL pmci_extrap_ifoutflow_sn( s, nzb_s_inner, 'n', 's' )
     4571                   CALL pmci_extrap_ifoutflow_sn( s, 'n', 's' )
    38794572                ENDIF
    38804573
     
    38834576          ENDIF
    38844577
    3885        ENDIF       !: IF ( nesting_mode /= 'vertical' )
     4578       ENDIF       ! IF ( nesting_mode /= 'vertical' )
    38864579
    38874580!
     
    40164709
    40174710   SUBROUTINE pmci_interp_tril_lr( f, fc, ic, jc, kc, r1x, r2x, r1y, r2y, r1z,  &
    4018                                    r2z, kb, logc, logc_ratio, nzt_topo_nestbc,  &
     4711                                   r2z, logc, logc_ratio, nzt_topo_nestbc,      &
    40194712                                   edge, var )
    40204713!
     
    40404733      INTEGER(iwp), DIMENSION(nxlg:nxrg), INTENT(IN)           ::  ic     !:
    40414734      INTEGER(iwp), DIMENSION(nysg:nyng), INTENT(IN)           ::  jc     !:
    4042       INTEGER(iwp), DIMENSION(nysg:nyng,nxlg:nxrg), INTENT(IN) ::  kb     !:
    40434735      INTEGER(iwp), DIMENSION(nzb:nzt+1), INTENT(IN)           ::  kc     !:
    40444736      INTEGER(iwp), DIMENSION(1:2,nzb:nzt_topo_nestbc,nys:nyn),                 &
     
    40494741      CHARACTER(LEN=1), INTENT(IN) ::  var    !:
    40504742
    4051       INTEGER(iwp) ::  i       !:
    4052       INTEGER(iwp) ::  ib      !:
    4053       INTEGER(iwp) ::  ibgp    !:
    4054       INTEGER(iwp) ::  iw      !:
    4055       INTEGER(iwp) ::  j       !:
    4056       INTEGER(iwp) ::  jco     !:
    4057       INTEGER(iwp) ::  jcorr   !:
    4058       INTEGER(iwp) ::  jinc    !:
    4059       INTEGER(iwp) ::  jw      !:
    4060       INTEGER(iwp) ::  j1      !:
    4061       INTEGER(iwp) ::  k       !:
    4062       INTEGER(iwp) ::  kco     !:
    4063       INTEGER(iwp) ::  kcorr   !:
    4064       INTEGER(iwp) ::  k1      !:
    4065       INTEGER(iwp) ::  l       !:
    4066       INTEGER(iwp) ::  m       !:
    4067       INTEGER(iwp) ::  n       !:
    4068       INTEGER(iwp) ::  kbc     !:
     4743      INTEGER(iwp) ::  flag_nr  !: Number of flag array to mask topography on respective u/v/w or s grid
     4744      INTEGER(iwp) ::  flag_nr2 !: Number of flag array to indicate vertical index of topography top on respective u/v/w or s grid
     4745      INTEGER(iwp) ::  i        !:
     4746      INTEGER(iwp) ::  ib       !:
     4747      INTEGER(iwp) ::  ibgp     !:
     4748      INTEGER(iwp) ::  iw       !:
     4749      INTEGER(iwp) ::  j        !:
     4750      INTEGER(iwp) ::  jco      !:
     4751      INTEGER(iwp) ::  jcorr    !:
     4752      INTEGER(iwp) ::  jinc     !:
     4753      INTEGER(iwp) ::  jw       !:
     4754      INTEGER(iwp) ::  j1       !:
     4755      INTEGER(iwp) ::  k        !:
     4756      INTEGER(iwp) ::  k_wall   !: vertical index of topography top
     4757      INTEGER(iwp) ::  kco      !:
     4758      INTEGER(iwp) ::  kcorr    !:
     4759      INTEGER(iwp) ::  k1       !:
     4760      INTEGER(iwp) ::  l        !:
     4761      INTEGER(iwp) ::  m        !:
     4762      INTEGER(iwp) ::  n        !:
     4763      INTEGER(iwp) ::  kbc      !:
    40694764     
    40704765      REAL(wp) ::  coarse_dx   !:
     
    40944789         ib = nxr + 2
    40954790      ENDIF
     4791!
     4792!--    Determine number of flag array to be used to mask topography
     4793       IF ( var == 'u' )  THEN
     4794          flag_nr  = 1
     4795          flag_nr2 = 14
     4796       ELSEIF ( var == 'v' )  THEN
     4797          flag_nr  = 2
     4798          flag_nr2 = 16
     4799       ELSEIF ( var == 'w' )  THEN
     4800          flag_nr  = 3
     4801          flag_nr2 = 18
     4802       ELSE
     4803          flag_nr  = 0
     4804          flag_nr2 = 12
     4805       ENDIF
    40964806     
    40974807      DO  j = nys, nyn+1
    4098          DO  k = kb(j,i), nzt+1
     4808         DO  k = nzb, nzt+1
    40994809            l = ic(i)
    41004810            m = jc(j)
     
    41194829      IF ( var == 'u' .OR. var == 'v' )  THEN           
    41204830         DO  j = nys, nyn
    4121             k = kb(j,i)+1
     4831!
     4832!--         Determine vertical index of topography top at grid point (j,i)
     4833            k_wall = MAXLOC(                                                   &
     4834                        MERGE( 1, 0,                                           &
     4835                               BTEST( wall_flags_0(nzb:nzb_max,j,i), flag_nr2 )&
     4836                             ), DIM = 1                                        &
     4837                           ) - 1
     4838
     4839            k = k_wall+1
    41224840            IF ( ( logc(1,k,j) /= 0 )  .AND.  ( logc(2,k,j) == 0 ) )  THEN
    41234841               k1 = logc(1,k,j)
     
    41414859!--         Solid surface only on south/north side of the node                   
    41424860            DO  j = nys, nyn
    4143                DO  k = kb(j,i)+1, nzt_topo_nestbc
     4861!
     4862!--            Determine vertical index of topography top at grid point (j,i)
     4863               k_wall = MAXLOC(                                                &
     4864                     MERGE( 1, 0,                                              &
     4865                            BTEST( wall_flags_0(nzb:nzb_max,j,i), flag_nr2 )   &
     4866                          ), DIM = 1                                           &
     4867                              ) - 1
     4868               DO  k = k_wall+1, nzt_topo_nestbc
    41444869                  IF ( ( logc(2,k,j) /= 0 )  .AND.  ( logc(1,k,j) == 0 ) )  THEN
    41454870!
     
    41624887         IF ( var == 'u' )  THEN
    41634888            DO  j = nys, nyn
    4164                k = kb(j,i) + 1
     4889!
     4890!--            Determine vertical index of topography top at grid point (j,i)
     4891               k_wall = MAXLOC(                                                &
     4892                     MERGE( 1, 0,                                              &
     4893                            BTEST( wall_flags_0(nzb:nzb_max,j,i), flag_nr2 )   &
     4894                          ), DIM = 1                                           &
     4895                              ) - 1
     4896               k = k_wall + 1
    41654897               IF ( ( logc(2,k,j) /= 0 )  .AND.  ( logc(1,k,j) /= 0 ) )  THEN
    41664898                  k1   = logc(1,k,j)                 
     
    41904922         IF ( edge == 'l' )  THEN
    41914923            DO  j = nys, nyn + 1
    4192                DO  k = kb(j,i), nzt + 1
     4924!
     4925!--            Determine vertical index of topography top at grid point (j,i)
     4926               k_wall = MAXLOC(                                                &
     4927                     MERGE( 1, 0,                                              &
     4928                            BTEST( wall_flags_0(nzb:nzb_max,j,i), flag_nr2 )   &
     4929                          ), DIM = 1                                           &
     4930                              ) - 1
     4931               DO  k = k_wall, nzt + 1
    41934932                  f(k,j,i) = tkefactor_l(k,j) * f(k,j,i)
    41944933               ENDDO
     
    41964935         ELSEIF ( edge == 'r' )  THEN           
    41974936            DO  j = nys, nyn+1
    4198                DO  k = kb(j,i), nzt+1
     4937!
     4938!--            Determine vertical index of topography top at grid point (j,i)
     4939               k_wall = MAXLOC(                                                &
     4940                     MERGE( 1, 0,                                              &
     4941                            BTEST( wall_flags_0(nzb:nzb_max,j,i), flag_nr2 )   &
     4942                          ), DIM = 1                                           &
     4943                              ) - 1
     4944               DO  k = k_wall, nzt+1
    41994945                  f(k,j,i) = tkefactor_r(k,j) * f(k,j,i)
    42004946               ENDDO
     
    42204966
    42214967   SUBROUTINE pmci_interp_tril_sn( f, fc, ic, jc, kc, r1x, r2x, r1y, r2y, r1z,  &
    4222                                    r2z, kb, logc, logc_ratio,                   &
     4968                                   r2z, logc, logc_ratio,                   &
    42234969                                   nzt_topo_nestbc, edge, var )
    42244970
     
    42454991      INTEGER(iwp), DIMENSION(nxlg:nxrg), INTENT(IN)           ::  ic    !:
    42464992      INTEGER(iwp), DIMENSION(nysg:nyng), INTENT(IN)           ::  jc    !:
    4247       INTEGER(iwp), DIMENSION(nysg:nyng,nxlg:nxrg), INTENT(IN) ::  kb    !:
    42484993      INTEGER(iwp), DIMENSION(nzb:nzt+1), INTENT(IN)           ::  kc    !:
    42494994      INTEGER(iwp), DIMENSION(1:2,nzb:nzt_topo_nestbc,nxl:nxr),                 &
     
    42544999      CHARACTER(LEN=1), INTENT(IN) ::  var    !:
    42555000     
     5001      INTEGER(iwp) ::  flag_nr  !: Number of flag array to mask topography on respective u/v/w or s grid
     5002      INTEGER(iwp) ::  flag_nr2 !: Number of flag array to indicate vertical index of topography top on respective u/v/w or s grid
    42565003      INTEGER(iwp) ::  i       !:
    42575004      INTEGER(iwp) ::  iinc    !:
     
    42635010      INTEGER(iwp) ::  jbgp    !:
    42645011      INTEGER(iwp) ::  k       !:
     5012      INTEGER(iwp) ::  k_wall   !: vertical index of topography top
    42655013      INTEGER(iwp) ::  kcorr   !:
    42665014      INTEGER(iwp) ::  kco     !:
     
    42975045      ENDIF
    42985046
     5047!
     5048!--    Determine number of flag array to be used to mask topography
     5049       IF ( var == 'u' )  THEN
     5050          flag_nr  = 1
     5051          flag_nr2 = 14
     5052       ELSEIF ( var == 'v' )  THEN
     5053          flag_nr  = 2
     5054          flag_nr2 = 16
     5055       ELSEIF ( var == 'w' )  THEN
     5056          flag_nr  = 3
     5057          flag_nr2 = 18
     5058       ELSE
     5059          flag_nr  = 0
     5060          flag_nr2 = 12
     5061       ENDIF
     5062
    42995063      DO  i = nxl, nxr+1
    4300          DO  k = kb(j,i), nzt+1
     5064!
     5065!--      Determine vertical index of topography top at grid point (j,i)
     5066         k_wall = MAXLOC(                                                      &
     5067                        MERGE( 1, 0,                                           &
     5068                               BTEST( wall_flags_0(nzb:nzb_max,j,i), flag_nr2 )&
     5069                             ), DIM = 1                                        &
     5070                           ) - 1
     5071         DO  k = k_wall, nzt+1
    43015072            l = ic(i)
    43025073            m = jc(j)
     
    43215092      IF ( var == 'u'  .OR.  var == 'v' )  THEN           
    43225093         DO  i = nxl, nxr
    4323             k = kb(j,i) + 1
     5094!
     5095!--         Determine vertical index of topography top at grid point (j,i)
     5096            k_wall = MAXLOC(                                                   &
     5097                        MERGE( 1, 0,                                           &
     5098                               BTEST( wall_flags_0(nzb:nzb_max,j,i), flag_nr2 )&
     5099                             ), DIM = 1                                        &
     5100                           ) - 1
     5101
     5102            k = k_wall + 1
    43245103            IF ( ( logc(1,k,i) /= 0 )  .AND.  ( logc(2,k,i) == 0 ) )  THEN
    43255104               k1 = logc(1,k,i)
     
    43425121         IF ( var == 'v' .OR. var == 'w' )  THEN
    43435122            DO  i = nxl, nxr
    4344                DO  k = kb(j,i), nzt_topo_nestbc
     5123!
     5124!--            Determine vertical index of topography top at grid point (j,i)
     5125               k_wall = MAXLOC(                                                &
     5126                     MERGE( 1, 0,                                              &
     5127                            BTEST( wall_flags_0(nzb:nzb_max,j,i), flag_nr2 )   &
     5128                          ), DIM = 1                                           &
     5129                              ) - 1
     5130               DO  k = k_wall, nzt_topo_nestbc
    43455131!
    43465132!--               Solid surface only on left/right side of the node           
     
    43655151         IF ( var == 'v' )  THEN
    43665152            DO  i = nxl, nxr
    4367                k = kb(j,i) + 1
     5153!
     5154!--            Determine vertical index of topography top at grid point (j,i)
     5155               k_wall = MAXLOC(                                                &
     5156                     MERGE( 1, 0,                                              &
     5157                            BTEST( wall_flags_0(nzb:nzb_max,j,i), flag_nr2 )   &
     5158                          ), DIM = 1                                           &
     5159                              ) - 1
     5160               k = k_wall + 1
    43685161               IF ( ( logc(2,k,i) /= 0 )  .AND.  ( logc(1,k,i) /= 0 ) )  THEN
    43695162                  k1   = logc(1,k,i)         
     
    43935186         IF ( edge == 's' )  THEN
    43945187            DO  i = nxl, nxr + 1
    4395                DO  k = kb(j,i), nzt+1
     5188!
     5189!--            Determine vertical index of topography top at grid point (j,i)
     5190               k_wall = MAXLOC(                                                &
     5191                     MERGE( 1, 0,                                              &
     5192                            BTEST( wall_flags_0(nzb:nzb_max,j,i), flag_nr2 )   &
     5193                          ), DIM = 1                                           &
     5194                              ) - 1
     5195               DO  k = k_wall, nzt+1
    43965196                  f(k,j,i) = tkefactor_s(k,i) * f(k,j,i)
    43975197               ENDDO
     
    43995199         ELSEIF ( edge == 'n' )  THEN
    44005200            DO  i = nxl, nxr + 1
    4401                DO  k = kb(j,i), nzt+1
     5201!
     5202!--            Determine vertical index of topography top at grid point (j,i)
     5203               k_wall = MAXLOC(                                                &
     5204                     MERGE( 1, 0,                                              &
     5205                            BTEST( wall_flags_0(nzb:nzb_max,j,i), flag_nr2 )   &
     5206                          ), DIM = 1                                           &
     5207                              ) - 1
     5208               DO  k = k_wall, nzt+1
    44025209                  f(k,j,i) = tkefactor_n(k,i) * f(k,j,i)
    44035210               ENDDO
     
    45105317
    45115318
    4512     SUBROUTINE pmci_extrap_ifoutflow_lr( f, kb, edge, var )
     5319    SUBROUTINE pmci_extrap_ifoutflow_lr( f, edge, var )
    45135320!
    45145321!--    After the interpolation of ghost-node values for the child-domain
     
    45245331       CHARACTER(LEN=1), INTENT(IN) ::  var    !:
    45255332
    4526        INTEGER(iwp) ::  i     !:
    4527        INTEGER(iwp) ::  ib    !:
    4528        INTEGER(iwp) ::  ibgp  !:
    4529        INTEGER(iwp) ::  ied   !:
    4530        INTEGER(iwp) ::  j     !:
    4531        INTEGER(iwp) ::  k     !:
    4532      
    4533        INTEGER(iwp), DIMENSION(nysg:nyng,nxlg:nxrg), INTENT(IN) ::  kb   !:
     5333       INTEGER(iwp) ::  flag_nr !: Number of flag array to mask topography on respective u/v/w or s grid
     5334       INTEGER(iwp) ::  i       !:
     5335       INTEGER(iwp) ::  ib      !:
     5336       INTEGER(iwp) ::  ibgp    !:
     5337       INTEGER(iwp) ::  ied     !:
     5338       INTEGER(iwp) ::       !:
     5339       INTEGER(iwp) ::  k       !:
     5340       INTEGER(iwp) ::  k_wall  !:
    45345341
    45355342       REAL(wp) ::  outnor    !:
     
    45575364          outnor = 1.0_wp
    45585365       ENDIF
     5366!
     5367!--    Determine number of flag array to be used to mask topography
     5368       IF ( var == 'u' )  THEN
     5369          flag_nr  = 14
     5370       ELSEIF ( var == 'v' )  THEN
     5371          flag_nr  = 16
     5372       ELSEIF ( var == 'w' )  THEN
     5373          flag_nr  = 18
     5374       ELSE
     5375          flag_nr  = 12
     5376       ENDIF
    45595377
    45605378       DO  j = nys, nyn+1
    4561           DO  k = kb(j,i), nzt+1
     5379!
     5380!--       Determine vertical index of topography top at grid point (j,i)
     5381          k_wall = MAXLOC(                                                     &
     5382                     MERGE( 1, 0,                                              &
     5383                            BTEST( wall_flags_0(nzb:nzb_max,j,i), flag_nr )    &
     5384                          ), DIM = 1                                           &
     5385                         ) - 1
     5386          DO  k = k_wall, nzt+1
    45625387             vdotnor = outnor * u(k,j,ied)
    45635388!
     
    45685393          ENDDO
    45695394          IF ( (var == 'u' )  .OR.  (var == 'v' )  .OR.  (var == 'w') )  THEN
    4570              f(kb(j,i),j,i) = 0.0_wp
     5395             f(k_wall,j,i) = 0.0_wp
    45715396          ENDIF
    45725397       ENDDO
     
    45885413
    45895414
    4590     SUBROUTINE pmci_extrap_ifoutflow_sn( f, kb, edge, var )
     5415    SUBROUTINE pmci_extrap_ifoutflow_sn( f, edge, var )
    45915416!
    45925417!--    After  the interpolation of ghost-node values for the child-domain
     
    46015426       CHARACTER(LEN=1), INTENT(IN) ::  var    !:
    46025427     
     5428       INTEGER(iwp) ::  flag_nr   !: Number of flag array to mask topography on respective u/v/w or s grid
    46035429       INTEGER(iwp) ::  i         !:
    46045430       INTEGER(iwp) ::  j         !:
     
    46075433       INTEGER(iwp) ::  jed       !:
    46085434       INTEGER(iwp) ::  k         !:
    4609 
    4610        INTEGER(iwp), DIMENSION(nysg:nyng,nxlg:nxrg), INTENT(IN) ::  kb   !:
     5435       INTEGER(iwp) ::  k_wall    !:
    46115436
    46125437       REAL(wp)     ::  outnor    !:
     
    46355460       ENDIF
    46365461
     5462!
     5463!--    Determine number of flag array to be used to mask topography
     5464       IF ( var == 'u' )  THEN
     5465          flag_nr  = 14
     5466       ELSEIF ( var == 'v' )  THEN
     5467          flag_nr  = 16
     5468       ELSEIF ( var == 'w' )  THEN
     5469          flag_nr  = 18
     5470       ELSE
     5471          flag_nr  = 12
     5472       ENDIF
     5473
    46375474       DO  i = nxl, nxr+1
    4638           DO  k = kb(j,i), nzt+1
     5475!
     5476!--       Determine vertical index of topography top at grid point (j,i)
     5477          k_wall = MAXLOC(                                                     &
     5478                     MERGE( 1, 0,                                              &
     5479                            BTEST( wall_flags_0(nzb:nzb_max,j,i), flag_nr )    &
     5480                          ), DIM = 1                                           &
     5481                         ) - 1
     5482          DO  k = k_wall, nzt+1
    46395483             vdotnor = outnor * v(k,jed,i)
    46405484!
     
    46455489          ENDDO
    46465490          IF ( (var == 'u' )  .OR.  (var == 'v' )  .OR.  (var == 'w') )  THEN
    4647              f(kb(j,i),j,i) = 0.0_wp
     5491             f(k_wall,j,i) = 0.0_wp
    46485492          ENDIF
    46495493       ENDDO
Note: See TracChangeset for help on using the changeset viewer.