Ignore:
Timestamp:
Dec 18, 2019 11:55:56 AM (23 months ago)
Author:
motisi
Message:

Introduction of wall_flags_total_0, which currently sets bits based on static topography information used in wall_flags_static_0

File:
1 edited

Legend:

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

    r4329 r4346  
    2525! -----------------
    2626! $Id$
     27! Introduction of wall_flags_total_0, which currently sets bits based on static
     28! topography information used in wall_flags_static_0
     29!
     30! 4329 2019-12-10 15:46:36Z motisi
    2731! Renamed wall_flags_0 to wall_flags_static_0
    2832!
     
    140144               nbgp, nxl, nxlg, nxr, nxrg, nyn, nyng, nys, nysg, nzb, nzt,    &
    141145               topo_top_ind,                                                  &
    142                wall_flags_static_0
     146               wall_flags_total_0
    143147
    144148    USE kinds
     
    925929             DO  k = nzb_do, nzt_do
    926930                local_pf(i,j,k) = MERGE( to_be_resorted(k,j,i),                &
    927                                          REAL( fill_value, KIND = wp ),        &
    928                                          BTEST( wall_flags_static_0(k,j,i), flag_nr ) )
     931                                  REAL( fill_value, KIND = wp ),               &
     932                                  BTEST( wall_flags_total_0(k,j,i), flag_nr ) )
    929933             ENDDO
    930934          ENDDO
     
    10221026                                   to_be_resorted(k,j,i),                &
    10231027                                   REAL( fill_value, KIND = wp ),        &
    1024                                    BTEST( wall_flags_static_0(k,j,i), flag_nr ) )
     1028                                   BTEST( wall_flags_total_0(k,j,i), flag_nr ) )
    10251029             ENDDO
    10261030          ENDDO
     
    13111315                DO  k = nzb, nzt
    13121316                   e(k,j,i)     = MERGE( e(k,j,i), 0.0_wp,                     &
    1313                                          BTEST( wall_flags_static_0(k,j,i), 0 ) )
     1317                                         BTEST( wall_flags_total_0(k,j,i), 0 ) )
    13141318                ENDDO
    13151319             ENDDO
     
    13211325                   DO  k = nzb, nzt
    13221326                      diss(k,j,i)    = MERGE( diss(k,j,i), 0.0_wp,             &
    1323                                               BTEST( wall_flags_static_0(k,j,i), 0 ) )
     1327                                         BTEST( wall_flags_total_0(k,j,i), 0 ) )
    13241328                   ENDDO
    13251329                ENDDO
     
    13671371    USE indices,                                                               &
    13681372        ONLY:  nbgp, nx, nxl, nxlg, nxr, nxrg, ny, nyn, nyng, nys, nysg, nzb,  &
    1369                nzt, wall_flags_static_0
     1373               nzt, wall_flags_total_0
    13701374
    13711375    USE kinds
     
    14411445!
    14421446!--                Check if current gridpoint belongs to the atmosphere
    1443                    IF ( BTEST( wall_flags_static_0(k,j,i), 0 ) )  THEN
     1447                   IF ( BTEST( wall_flags_total_0(k,j,i), 0 ) )  THEN
    14441448!
    14451449!--                   Check for neighbouring grid-points.
    14461450!--                   Vertical distance, down
    1447                       IF ( .NOT. BTEST( wall_flags_static_0(k-1,j,i), 0 ) )             &
     1451                      IF ( .NOT. BTEST( wall_flags_total_0(k-1,j,i), 0 ) )             &
    14481452                         l_wall(k,j,i) = MIN( l_grid(k), zu(k) - zw(k-1) )
    14491453!
    14501454!--                   Vertical distance, up
    1451                       IF ( .NOT. BTEST( wall_flags_static_0(k+1,j,i), 0 ) )             &
     1455                      IF ( .NOT. BTEST( wall_flags_total_0(k+1,j,i), 0 ) )             &
    14521456                         l_wall(k,j,i) = MIN( l_wall(k,j,i), l_grid(k), zw(k) - zu(k) )
    14531457!
    14541458!--                   y-distance
    1455                       IF ( .NOT. BTEST( wall_flags_static_0(k,j-1,i), 0 )  .OR.         &
    1456                            .NOT. BTEST( wall_flags_static_0(k,j+1,i), 0 ) )             &
     1459                      IF ( .NOT. BTEST( wall_flags_total_0(k,j-1,i), 0 )  .OR.         &
     1460                           .NOT. BTEST( wall_flags_total_0(k,j+1,i), 0 ) )             &
    14571461                         l_wall(k,j,i) = MIN( l_wall(k,j,i), l_grid(k), 0.5_wp * dy )
    14581462!
    14591463!--                   x-distance
    1460                       IF ( .NOT. BTEST( wall_flags_static_0(k,j,i-1), 0 )  .OR.         &
    1461                            .NOT. BTEST( wall_flags_static_0(k,j,i+1), 0 ) )             &
     1464                      IF ( .NOT. BTEST( wall_flags_total_0(k,j,i-1), 0 )  .OR.         &
     1465                           .NOT. BTEST( wall_flags_total_0(k,j,i+1), 0 ) )             &
    14621466                         l_wall(k,j,i) = MIN( l_wall(k,j,i), l_grid(k), 0.5_wp * dx )
    14631467!
    14641468!--                   yz-distance (vertical edges, down)
    1465                       IF ( .NOT. BTEST( wall_flags_static_0(k-1,j-1,i), 0 )  .OR.       &
    1466                            .NOT. BTEST( wall_flags_static_0(k-1,j+1,i), 0 )  )          &
    1467                          l_wall(k,j,i) = MIN( l_wall(k,j,i), l_grid(k),          &
    1468                                               SQRT( 0.25_wp * dy**2 +            &
     1469                      IF ( .NOT. BTEST( wall_flags_total_0(k-1,j-1,i), 0 )  .OR.       &
     1470                           .NOT. BTEST( wall_flags_total_0(k-1,j+1,i), 0 )  )          &
     1471                         l_wall(k,j,i) = MIN( l_wall(k,j,i), l_grid(k),                &
     1472                                              SQRT( 0.25_wp * dy**2 +                  &
    14691473                                             ( zu(k) - zw(k-1) )**2 ) )
    14701474!
    14711475!--                   yz-distance (vertical edges, up)
    1472                       IF ( .NOT. BTEST( wall_flags_static_0(k+1,j-1,i), 0 )  .OR.       &
    1473                            .NOT. BTEST( wall_flags_static_0(k+1,j+1,i), 0 )  )          &
    1474                          l_wall(k,j,i) = MIN( l_wall(k,j,i), l_grid(k),          &
    1475                                               SQRT( 0.25_wp * dy**2 +            &
     1476                      IF ( .NOT. BTEST( wall_flags_total_0(k+1,j-1,i), 0 )  .OR.       &
     1477                           .NOT. BTEST( wall_flags_total_0(k+1,j+1,i), 0 )  )          &
     1478                         l_wall(k,j,i) = MIN( l_wall(k,j,i), l_grid(k),                &
     1479                                              SQRT( 0.25_wp * dy**2 +                  &
    14761480                                             ( zw(k) - zu(k) )**2 ) )
    14771481!
    14781482!--                   xz-distance (vertical edges, down)
    1479                       IF ( .NOT. BTEST( wall_flags_static_0(k-1,j,i-1), 0 )  .OR.       &
    1480                            .NOT. BTEST( wall_flags_static_0(k-1,j,i+1), 0 )  )          &
    1481                          l_wall(k,j,i) = MIN( l_wall(k,j,i), l_grid(k),          &
    1482                                               SQRT( 0.25_wp * dx**2 +            &
     1483                      IF ( .NOT. BTEST( wall_flags_total_0(k-1,j,i-1), 0 )  .OR.       &
     1484                           .NOT. BTEST( wall_flags_total_0(k-1,j,i+1), 0 )  )          &
     1485                         l_wall(k,j,i) = MIN( l_wall(k,j,i), l_grid(k),                &
     1486                                              SQRT( 0.25_wp * dx**2 +                  &
    14831487                                             ( zu(k) - zw(k-1) )**2 ) )
    14841488!
    14851489!--                   xz-distance (vertical edges, up)
    1486                       IF ( .NOT. BTEST( wall_flags_static_0(k+1,j,i-1), 0 )  .OR.       &
    1487                            .NOT. BTEST( wall_flags_static_0(k+1,j,i+1), 0 )  )          &
    1488                          l_wall(k,j,i) = MIN( l_wall(k,j,i), l_grid(k),          &
    1489                                               SQRT( 0.25_wp * dx**2 +            &
    1490                                              ( zw(k) - zu(k) )**2 ) )
     1490                      IF ( .NOT. BTEST( wall_flags_total_0(k+1,j,i-1), 0 )  .OR.       &
     1491                           .NOT. BTEST( wall_flags_total_0(k+1,j,i+1), 0 )  )          &
     1492                         l_wall(k,j,i) = MIN( l_wall(k,j,i), l_grid(k),                &
     1493                                              SQRT( 0.25_wp * dx**2 +                  &
     1494                                             ( zw(k) - zu(k) )**2 ) )                 
    14911495!
    14921496!--                   xy-distance (horizontal edges)
    1493                       IF ( .NOT. BTEST( wall_flags_static_0(k,j-1,i-1), 0 )  .OR.        &
    1494                            .NOT. BTEST( wall_flags_static_0(k,j+1,i-1), 0 )  .OR.        &
    1495                            .NOT. BTEST( wall_flags_static_0(k,j-1,i+1), 0 )  .OR.        &
    1496                            .NOT. BTEST( wall_flags_static_0(k,j+1,i+1), 0 ) )            &
    1497                          l_wall(k,j,i) = MIN( l_wall(k,j,i), l_grid(k),           &
     1497                      IF ( .NOT. BTEST( wall_flags_total_0(k,j-1,i-1), 0 )  .OR.        &
     1498                           .NOT. BTEST( wall_flags_total_0(k,j+1,i-1), 0 )  .OR.        &
     1499                           .NOT. BTEST( wall_flags_total_0(k,j-1,i+1), 0 )  .OR.        &
     1500                           .NOT. BTEST( wall_flags_total_0(k,j+1,i+1), 0 ) )            &
     1501                         l_wall(k,j,i) = MIN( l_wall(k,j,i), l_grid(k),                 &
    14981502                                              SQRT( 0.25_wp * ( dx**2 + dy**2 ) ) )
    14991503!
    15001504!--                   xyz distance (vertical and horizontal edges, down)
    1501                       IF ( .NOT. BTEST( wall_flags_static_0(k-1,j-1,i-1), 0 )  .OR.      &
    1502                            .NOT. BTEST( wall_flags_static_0(k-1,j+1,i-1), 0 )  .OR.      &
    1503                            .NOT. BTEST( wall_flags_static_0(k-1,j-1,i+1), 0 )  .OR.      &
    1504                            .NOT. BTEST( wall_flags_static_0(k-1,j+1,i+1), 0 ) )          &
    1505                          l_wall(k,j,i) = MIN( l_wall(k,j,i), l_grid(k),           &
    1506                                               SQRT( 0.25_wp * ( dx**2 + dy**2 )   &
     1505                      IF ( .NOT. BTEST( wall_flags_total_0(k-1,j-1,i-1), 0 )  .OR.      &
     1506                           .NOT. BTEST( wall_flags_total_0(k-1,j+1,i-1), 0 )  .OR.      &
     1507                           .NOT. BTEST( wall_flags_total_0(k-1,j-1,i+1), 0 )  .OR.      &
     1508                           .NOT. BTEST( wall_flags_total_0(k-1,j+1,i+1), 0 ) )          &
     1509                         l_wall(k,j,i) = MIN( l_wall(k,j,i), l_grid(k),                 &
     1510                                              SQRT( 0.25_wp * ( dx**2 + dy**2 )         &
    15071511                                                    +  ( zu(k) - zw(k-1) )**2  ) )
    15081512!
    15091513!--                   xyz distance (vertical and horizontal edges, up)
    1510                       IF ( .NOT. BTEST( wall_flags_static_0(k+1,j-1,i-1), 0 )  .OR.      &
    1511                            .NOT. BTEST( wall_flags_static_0(k+1,j+1,i-1), 0 )  .OR.      &
    1512                            .NOT. BTEST( wall_flags_static_0(k+1,j-1,i+1), 0 )  .OR.      &
    1513                            .NOT. BTEST( wall_flags_static_0(k+1,j+1,i+1), 0 ) )          &
    1514                          l_wall(k,j,i) = MIN( l_wall(k,j,i), l_grid(k),           &
    1515                                               SQRT( 0.25_wp * ( dx**2 + dy**2 )   &
     1514                      IF ( .NOT. BTEST( wall_flags_total_0(k+1,j-1,i-1), 0 )  .OR.      &
     1515                           .NOT. BTEST( wall_flags_total_0(k+1,j+1,i-1), 0 )  .OR.      &
     1516                           .NOT. BTEST( wall_flags_total_0(k+1,j-1,i+1), 0 )  .OR.      &
     1517                           .NOT. BTEST( wall_flags_total_0(k+1,j+1,i+1), 0 ) )          &
     1518                         l_wall(k,j,i) = MIN( l_wall(k,j,i), l_grid(k),                 &
     1519                                              SQRT( 0.25_wp * ( dx**2 + dy**2 )         &
    15161520                                                    +  ( zw(k) - zu(k) )**2  ) )
    15171521
     
    15531557          DO  j = nysg, nyng
    15541558             DO  k = nzb+1, nzt-1
    1555                 IF ( .NOT. BTEST( wall_flags_static_0(k,j,i), 0 ) .AND.  &
     1559                IF ( .NOT. BTEST( wall_flags_total_0(k,j,i), 0 ) .AND.  &
    15561560                     k > k_max_topo )  &
    15571561                   k_max_topo = k
     
    16191623!
    16201624!--                Start search only if (i/j/k) belongs to atmosphere
    1621                    IF ( BTEST( wall_flags_static_0(k,j,i), 0 )  )  THEN
     1625                   IF ( BTEST( wall_flags_total_0(k,j,i), 0 )  )  THEN
    16221626!
    16231627!--                   Reset topography within vicinity
     
    18391843! ------------
    18401844!> Copy a subarray of size (kb:kt,js:jn,il:ir) centered around grid point
    1841 !> (kp,jp,ip) containing the first bit of wall_flags_static_0 into the array
     1845!> (kp,jp,ip) containing the first bit of wall_flags_total_0 into the array
    18421846!> 'vicinity'. Only copy first bit as this indicates the presence of topography.
    18431847!------------------------------------------------------------------------------!
     
    18641868             DO  k = kb, kt
    18651869                vicinity(k,j,i) = MERGE( 0, 1,               &
    1866                        BTEST( wall_flags_static_0(kp+k,jp+j,ip+i), 0 ) )
     1870                       BTEST( wall_flags_total_0(kp+k,jp+j,ip+i), 0 ) )
    18671871             ENDDO
    18681872          ENDDO
     
    22632267!--    value is reduced by 90%.
    22642268       !$ACC PARALLEL LOOP COLLAPSE(3) PRIVATE(i, j, k) &
    2265        !$ACC PRESENT(e, tend, te_m, wall_flags_static_0) &
     2269       !$ACC PRESENT(e, tend, te_m, wall_flags_total_0) &
    22662270       !$ACC PRESENT(tsc(3:3)) &
    22672271       !$ACC PRESENT(e_p)
     
    22732277                                        )                                      &
    22742278                                   * MERGE( 1.0_wp, 0.0_wp,                    &
    2275                                              BTEST( wall_flags_static_0(k,j,i), 0 )   &
     2279                                       BTEST( wall_flags_total_0(k,j,i), 0 )   &
    22762280                                          )
    22772281                IF ( e_p(k,j,i) < 0.0_wp )  e_p(k,j,i) = 0.1_wp * e(k,j,i)
     
    23802384                                        )                                      &
    23812385                                   * MERGE( 1.0_wp, 0.0_wp,                    &
    2382                                              BTEST( wall_flags_static_0(k,j,i), 0 )   &
     2386                                       BTEST( wall_flags_total_0(k,j,i), 0 )   &
    23832387                                          )
    23842388                IF ( diss_p(k,j,i) < 0.0_wp )                                  &
     
    24952499                                  )                                            &
    24962500                                 * MERGE( 1.0_wp, 0.0_wp,                      &
    2497                                           BTEST( wall_flags_static_0(k,j,i), 0 )      &
     2501                                    BTEST( wall_flags_total_0(k,j,i), 0 )      &
    24982502                                        )
    24992503          IF ( e_p(k,j,i) <= 0.0_wp )  e_p(k,j,i) = 0.1_wp * e(k,j,i)
     
    25622566                                        )                                      &
    25632567                                        * MERGE( 1.0_wp, 0.0_wp,               &
    2564                                                 BTEST( wall_flags_static_0(k,j,i), 0 )&
     2568                                          BTEST( wall_flags_total_0(k,j,i), 0 )&
    25652569                                               )
    25662570       ENDDO
     
    26572661    !$ACC PRIVATE(surf_s, surf_e) &
    26582662    !$ACC PRIVATE(dudx(:), dudy(:), dudz(:), dvdx(:), dvdy(:), dvdz(:), dwdx(:), dwdy(:), dwdz(:)) &
    2659     !$ACC PRESENT(e, u, v, w, diss, dd2zu, ddzw, km, wall_flags_static_0) &
     2663    !$ACC PRESENT(e, u, v, w, diss, dd2zu, ddzw, km, wall_flags_total_0) &
    26602664    !$ACC PRESENT(tend) &
    26612665    !$ACC PRESENT(surf_def_h(0:1), surf_def_v(0:3)) &
     
    27172721!--                -1.0 for right-facing wall, 1.0 for left-facing wall
    27182722                   sign_dir = MERGE( 1.0_wp, -1.0_wp,                          &
    2719                                      BTEST( wall_flags_static_0(k,j-1,i), flag_nr ) )
     2723                              BTEST( wall_flags_total_0(k,j-1,i), flag_nr ) )
    27202724                   dudy(k) = sign_dir * usvs / ( km_neutral + 1E-10_wp )
    27212725                   dwdy(k) = sign_dir * wsvs / ( km_neutral + 1E-10_wp )
     
    27362740!--                -1.0 for right-facing wall, 1.0 for left-facing wall
    27372741                   sign_dir = MERGE( 1.0_wp, -1.0_wp,                          &
    2738                                      BTEST( wall_flags_static_0(k,j-1,i), flag_nr ) )
     2742                              BTEST( wall_flags_total_0(k,j-1,i), flag_nr ) )
    27392743                   dudy(k) = sign_dir * usvs / ( km_neutral + 1E-10_wp )
    27402744                   dwdy(k) = sign_dir * wsvs / ( km_neutral + 1E-10_wp )
     
    27552759!--                -1.0 for right-facing wall, 1.0 for left-facing wall
    27562760                   sign_dir = MERGE( 1.0_wp, -1.0_wp,                          &
    2757                                      BTEST( wall_flags_static_0(k,j-1,i), flag_nr ) )
     2761                              BTEST( wall_flags_total_0(k,j-1,i), flag_nr ) )
    27582762                   dudy(k) = sign_dir * usvs / ( km_neutral + 1E-10_wp )
    27592763                   dwdy(k) = sign_dir * wsvs / ( km_neutral + 1E-10_wp )
     
    27762780!--                -1.0 for right-facing wall, 1.0 for left-facing wall
    27772781                   sign_dir = MERGE( 1.0_wp, -1.0_wp,                          &
    2778                                      BTEST( wall_flags_static_0(k,j,i-1), flag_nr ) )
     2782                              BTEST( wall_flags_total_0(k,j,i-1), flag_nr ) )
    27792783                   dvdx(k) = sign_dir * vsus / ( km_neutral + 1E-10_wp )
    27802784                   dwdx(k) = sign_dir * wsus / ( km_neutral + 1E-10_wp )
     
    27952799!--                -1.0 for right-facing wall, 1.0 for left-facing wall
    27962800                   sign_dir = MERGE( 1.0_wp, -1.0_wp,                          &
    2797                                      BTEST( wall_flags_static_0(k,j,i-1), flag_nr ) )
     2801                              BTEST( wall_flags_total_0(k,j,i-1), flag_nr ) )
    27982802                   dvdx(k) = sign_dir * vsus / ( km_neutral + 1E-10_wp )
    27992803                   dwdx(k) = sign_dir * wsus / ( km_neutral + 1E-10_wp )
     
    28142818!--                -1.0 for right-facing wall, 1.0 for left-facing wall
    28152819                   sign_dir = MERGE( 1.0_wp, -1.0_wp,                          &
    2816                                      BTEST( wall_flags_static_0(k,j,i-1), flag_nr ) )
     2820                              BTEST( wall_flags_total_0(k,j,i-1), flag_nr ) )
    28172821                   dvdx(k) = sign_dir * vsus / ( km_neutral + 1E-10_wp )
    28182822                   dwdx(k) = sign_dir * wsus / ( km_neutral + 1E-10_wp )
     
    28892893             IF ( def < 0.0_wp )  def = 0.0_wp
    28902894
    2891              flag = MERGE( 1.0_wp, 0.0_wp, BTEST(wall_flags_static_0(k,j,i),flag_nr) )
     2895             flag = MERGE( 1.0_wp, 0.0_wp, BTEST(wall_flags_total_0(k,j,i),flag_nr) )
    28922896
    28932897             IF ( .NOT. diss_production )  THEN
     
    29532957!--                   Compute tendency for TKE-production from shear
    29542958                      DO  k = nzb+1, nzt
    2955                          flag = MERGE( 1.0_wp, 0.0_wp, BTEST(wall_flags_static_0(k,j,i),0) )
     2959                         flag = MERGE( 1.0_wp, 0.0_wp, BTEST(wall_flags_total_0(k,j,i),0) )
    29562960                         tend(k,j,i) = tend(k,j,i) + flag * tmp_flux(k) * ( g / &
    29572961                                       MERGE( rho_reference, prho(k,j,i),       &
     
    29632967!--                   RANS mode: Compute tendency for dissipation-rate-production from shear
    29642968                      DO  k = nzb+1, nzt
    2965                          flag = MERGE( 1.0_wp, 0.0_wp, BTEST(wall_flags_static_0(k,j,i),0) )
     2969                         flag = MERGE( 1.0_wp, 0.0_wp, BTEST(wall_flags_total_0(k,j,i),0) )
    29662970                         tend(k,j,i) = tend(k,j,i) + flag * tmp_flux(k) * ( g / &
    29672971                                       MERGE( rho_reference, prho(k,j,i),       &
     
    29812985             !$ACC PRIVATE(surf_s, surf_e) &
    29822986             !$ACC PRIVATE(tmp_flux(nzb+1:nzt)) &
    2983              !$ACC PRESENT(e, diss, kh, pt, dd2zu, drho_air_zw, wall_flags_static_0) &
     2987             !$ACC PRESENT(e, diss, kh, pt, dd2zu, drho_air_zw, wall_flags_total_0) &
    29842988             !$ACC PRESENT(tend) &
    29852989             !$ACC PRESENT(surf_def_h(0:2)) &
     
    30413045                     !$ACC LOOP PRIVATE(k, flag)
    30423046                      DO  k = nzb+1, nzt
    3043                          flag = MERGE( 1.0_wp, 0.0_wp, BTEST(wall_flags_static_0(k,j,i),0) )
     3047                         flag = MERGE( 1.0_wp, 0.0_wp, BTEST(wall_flags_total_0(k,j,i),0) )
    30443048                         tend(k,j,i) = tend(k,j,i) + flag * tmp_flux(k) * ( g / &
    30453049                                       MERGE( pt_reference, pt(k,j,i),          &
     
    30513055!--                   RANS mode: Compute tendency for dissipation-rate-production from shear
    30523056                      DO  k = nzb+1, nzt
    3053                          flag = MERGE( 1.0_wp, 0.0_wp, BTEST(wall_flags_static_0(k,j,i),0) )
     3057                         flag = MERGE( 1.0_wp, 0.0_wp, BTEST(wall_flags_total_0(k,j,i),0) )
    30543058                         tend(k,j,i) = tend(k,j,i) + flag * tmp_flux(k) * ( g / &
    30553059                                       MERGE( pt_reference, pt(k,j,i),          &
     
    32563260!--                Compute tendency for TKE-production from shear
    32573261                   DO  k = nzb+1, nzt
    3258                       flag = MERGE( 1.0_wp, 0.0_wp, BTEST(wall_flags_static_0(k,j,i),0) )
     3262                      flag = MERGE( 1.0_wp, 0.0_wp, BTEST(wall_flags_total_0(k,j,i),0) )
    32593263                      tend(k,j,i) = tend(k,j,i) + flag * tmp_flux(k) * ( g / &
    32603264                                    MERGE( vpt_reference, vpt(k,j,i),          &
     
    32663270!--                RANS mode: Compute tendency for dissipation-rate-production from shear
    32673271                   DO  k = nzb+1, nzt
    3268                       flag = MERGE( 1.0_wp, 0.0_wp, BTEST(wall_flags_static_0(k,j,i),0) )
     3272                      flag = MERGE( 1.0_wp, 0.0_wp, BTEST(wall_flags_total_0(k,j,i),0) )
    32693273                      tend(k,j,i) = tend(k,j,i) + flag * tmp_flux(k) * ( g /   &
    32703274                                    MERGE( vpt_reference, vpt(k,j,i),          &
     
    34013405!--          -1.0 for right-facing wall, 1.0 for left-facing wall
    34023406             sign_dir = MERGE( 1.0_wp, -1.0_wp,                          &
    3403                                BTEST( wall_flags_static_0(k,j-1,i), flag_nr ) )
     3407                        BTEST( wall_flags_total_0(k,j-1,i), flag_nr ) )
    34043408             dudy(k) = sign_dir * usvs / ( km_neutral + 1E-10_wp )
    34053409             dwdy(k) = sign_dir * wsvs / ( km_neutral + 1E-10_wp )
     
    34193423!--          -1.0 for right-facing wall, 1.0 for left-facing wall
    34203424             sign_dir = MERGE( 1.0_wp, -1.0_wp,                          &
    3421                                BTEST( wall_flags_static_0(k,j-1,i), flag_nr ) )
     3425                        BTEST( wall_flags_total_0(k,j-1,i), flag_nr ) )
    34223426             dudy(k) = sign_dir * usvs / ( km_neutral + 1E-10_wp )
    34233427             dwdy(k) = sign_dir * wsvs / ( km_neutral + 1E-10_wp )
     
    34373441!--          -1.0 for right-facing wall, 1.0 for left-facing wall
    34383442             sign_dir = MERGE( 1.0_wp, -1.0_wp,                          &
    3439                                BTEST( wall_flags_static_0(k,j-1,i), flag_nr ) )
     3443                        BTEST( wall_flags_total_0(k,j-1,i), flag_nr ) )
    34403444             dudy(k) = sign_dir * usvs / ( km_neutral + 1E-10_wp )
    34413445             dwdy(k) = sign_dir * wsvs / ( km_neutral + 1E-10_wp )
     
    34573461!--          -1.0 for right-facing wall, 1.0 for left-facing wall
    34583462             sign_dir = MERGE( 1.0_wp, -1.0_wp,                          &
    3459                                BTEST( wall_flags_static_0(k,j,i-1), flag_nr ) )
     3463                        BTEST( wall_flags_total_0(k,j,i-1), flag_nr ) )
    34603464             dvdx(k) = sign_dir * vsus / ( km_neutral + 1E-10_wp )
    34613465             dwdx(k) = sign_dir * wsus / ( km_neutral + 1E-10_wp )
     
    34753479!--          -1.0 for right-facing wall, 1.0 for left-facing wall
    34763480             sign_dir = MERGE( 1.0_wp, -1.0_wp,                          &
    3477                                BTEST( wall_flags_static_0(k,j,i-1), flag_nr ) )
     3481                        BTEST( wall_flags_total_0(k,j,i-1), flag_nr ) )
    34783482             dvdx(k) = sign_dir * vsus / ( km_neutral + 1E-10_wp )
    34793483             dwdx(k) = sign_dir * wsus / ( km_neutral + 1E-10_wp )
     
    34933497!--          -1.0 for right-facing wall, 1.0 for left-facing wall
    34943498             sign_dir = MERGE( 1.0_wp, -1.0_wp,                          &
    3495                                BTEST( wall_flags_static_0(k,j,i-1), flag_nr ) )
     3499                        BTEST( wall_flags_total_0(k,j,i-1), flag_nr ) )
    34963500             dvdx(k) = sign_dir * vsus / ( km_neutral + 1E-10_wp )
    34973501             dwdx(k) = sign_dir * wsus / ( km_neutral + 1E-10_wp )
     
    35613565       IF ( def < 0.0_wp )  def = 0.0_wp
    35623566
    3563        flag = MERGE( 1.0_wp, 0.0_wp, BTEST(wall_flags_static_0(k,j,i),flag_nr) )
     3567       flag = MERGE( 1.0_wp, 0.0_wp, BTEST(wall_flags_total_0(k,j,i),flag_nr) )
    35643568
    35653569       IF ( .NOT. diss_production )  THEN
     
    36183622!--             Compute tendency for TKE-production from shear
    36193623                DO  k = nzb+1, nzt
    3620                    flag = MERGE( 1.0_wp, 0.0_wp, BTEST(wall_flags_static_0(k,j,i),0) )
     3624                   flag = MERGE( 1.0_wp, 0.0_wp, BTEST(wall_flags_total_0(k,j,i),0) )
    36213625                   tend(k,j,i) = tend(k,j,i) + flag * tmp_flux(k) * ( g / &
    36223626                                 MERGE( rho_reference, prho(k,j,i),       &
     
    36283632!--             RANS mode: Compute tendency for dissipation-rate-production from shear
    36293633                DO  k = nzb+1, nzt
    3630                    flag = MERGE( 1.0_wp, 0.0_wp, BTEST(wall_flags_static_0(k,j,i),0) )
     3634                   flag = MERGE( 1.0_wp, 0.0_wp, BTEST(wall_flags_total_0(k,j,i),0) )
    36313635                   tend(k,j,i) = tend(k,j,i) + flag * tmp_flux(k) * ( g / &
    36323636                                 MERGE( rho_reference, prho(k,j,i),       &
     
    36873691!--             Compute tendency for TKE-production from shear
    36883692                DO  k = nzb+1, nzt
    3689                    flag = MERGE( 1.0_wp, 0.0_wp, BTEST(wall_flags_static_0(k,j,i),0) )
     3693                   flag = MERGE( 1.0_wp, 0.0_wp, BTEST(wall_flags_total_0(k,j,i),0) )
    36903694                   tend(k,j,i) = tend(k,j,i) + flag * tmp_flux(k) * ( g / &
    36913695                                 MERGE( pt_reference, pt(k,j,i),          &
     
    36973701!--             RANS mode: Compute tendency for dissipation-rate-production from shear
    36983702                DO  k = nzb+1, nzt
    3699                    flag = MERGE( 1.0_wp, 0.0_wp, BTEST(wall_flags_static_0(k,j,i),0) )
     3703                   flag = MERGE( 1.0_wp, 0.0_wp, BTEST(wall_flags_total_0(k,j,i),0) )
    37003704                   tend(k,j,i) = tend(k,j,i) + flag * tmp_flux(k) * ( g / &
    37013705                                 MERGE( pt_reference, pt(k,j,i),          &
     
    38963900!--          Compute tendency for TKE-production from shear
    38973901             DO  k = nzb+1, nzt
    3898                 flag = MERGE( 1.0_wp, 0.0_wp, BTEST(wall_flags_static_0(k,j,i),0) )
     3902                flag = MERGE( 1.0_wp, 0.0_wp, BTEST(wall_flags_total_0(k,j,i),0) )
    38993903                tend(k,j,i) = tend(k,j,i) + flag * tmp_flux(k) * ( g / &
    39003904                              MERGE( vpt_reference, vpt(k,j,i),          &
     
    39063910!--          RANS mode: Compute tendency for dissipation-rate-production from shear
    39073911             DO  k = nzb+1, nzt
    3908                 flag = MERGE( 1.0_wp, 0.0_wp, BTEST(wall_flags_static_0(k,j,i),0) )
     3912                flag = MERGE( 1.0_wp, 0.0_wp, BTEST(wall_flags_total_0(k,j,i),0) )
    39093913                tend(k,j,i) = tend(k,j,i) + flag * tmp_flux(k) * ( g /   &
    39103914                              MERGE( vpt_reference, vpt(k,j,i),          &
     
    39723976       !$ACC PARALLEL LOOP COLLAPSE(2) PRIVATE(i, j) &
    39733977       !$ACC PRIVATE(l, l_stable, dvar_dz) &
    3974        !$ACC PRESENT(diss, e, var, wall_flags_static_0) &
     3978       !$ACC PRESENT(diss, e, var, wall_flags_total_0) &
    39753979       !$ACC PRESENT(dd2zu, l_grid, l_wall)
    39763980       DO  i = nxl, nxr
     
    40024006                diss(k,j,i) = ( 0.19_wp + 0.74_wp * l / l_wall(k,j,i) )                &
    40034007                              * e(k,j,i) * SQRT( e(k,j,i) ) / l                        &
    4004                               * MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_static_0(k,j,i), 0 ) )
     4008                              * MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 0 ) )
    40054009
    40064010             ENDDO
     
    40134017      !$ACC PARALLEL LOOP COLLAPSE(2) PRIVATE(i, j) &
    40144018      !$ACC PRIVATE(l_stable, duv2_dz2, rif, dvar_dz) &
    4015       !$ACC PRESENT(diss, e, u, v, var, wall_flags_static_0) &
     4019      !$ACC PRESENT(diss, e, u, v, var, wall_flags_total_0) &
    40164020      !$ACC PRESENT(dd2zu, l_black, l_wall)
    40174021       DO  i = nxl, nxr
     
    40604064
    40614065                diss(k,j,i) = c_0**3 * e(k,j,i) * SQRT( e(k,j,i) ) / l_stable(k)     &
    4062                             * MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_static_0(k,j,i), 0 ) )
     4066                            * MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 0 ) )
    40634067
    40644068             ENDDO
     
    40724076
    40734077    !$ACC PARALLEL LOOP COLLAPSE(3) PRIVATE(i, j, k) &
    4074     !$ACC PRESENT(diss, e, km, tend, wall_flags_static_0) &
     4078    !$ACC PRESENT(diss, e, km, tend, wall_flags_total_0) &
    40754079    !$ACC PRESENT(ddzu, ddzw, rho_air_zw, drho_air)
    40764080    DO  i = nxl, nxr
     
    40954099                                         ) * dsig_e                                   &
    40964100                                           * MERGE( 1.0_wp, 0.0_wp,                   &
    4097                                                     BTEST( wall_flags_static_0(k,j,i), 0 ) ) &
     4101                                             BTEST( wall_flags_total_0(k,j,i), 0 ) ) &
    40984102                          - diss(k,j,i)
    40994103
     
    42014205          diss(k,j,i) = ( 0.19_wp + 0.74_wp * l / l_wall(k,j,i) )              &
    42024206                        * e(k,j,i) * SQRT( e(k,j,i) ) / l                      &
    4203                         * MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_static_0(k,j,i), 0 ) )
     4207                        * MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 0 ) )
    42044208       ENDDO
    42054209
     
    42454249       DO  k = nzb+1, nzt
    42464250          diss(k,j,i) = c_0**3 * e(k,j,i) * SQRT( e(k,j,i) ) / l_stable(k)     &
    4247                       * MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_static_0(k,j,i), 0 ) )
     4251                      * MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 0 ) )
    42484252       ENDDO
    42494253
     
    42744278                                   ) * dsig_e                                  &
    42754279                                     * MERGE( 1.0_wp, 0.0_wp,                  &
    4276                                               BTEST( wall_flags_static_0(k,j,i), 0 ) )&
     4280                                        BTEST( wall_flags_total_0(k,j,i), 0 ) )&
    42774281                                 - diss(k,j,i)
    42784282
     
    43374341!
    43384342!--          Predetermine flag to mask topography
    4339              flag = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_static_0(k,j,i), 0 ) )
     4343             flag = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 0 ) )
    43404344
    43414345             tend(k,j,i) = tend(k,j,i) +                                       &
     
    43934397!
    43944398!--    Predetermine flag to mask topography
    4395        flag = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_static_0(k,j,i), 0 ) )
     4399       flag = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 0 ) )
    43964400
    43974401!
     
    44544458             DO  k = nzb+1, nzt
    44554459                e(k,j,i) = MAX( e(k,j,i), e_min ) *                            &
    4456                         MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_static_0(k,j,i), 0 ) )
     4460                        MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 0 ) )
    44574461             ENDDO
    44584462          ENDDO
     
    46654669       !$ACC PARALLEL LOOP COLLAPSE(2) PRIVATE(i, j) &
    46664670       !$ACC PRIVATE(dvar_dz, l, l_stable, l_v) &
    4667        !$ACC PRESENT(wall_flags_static_0, var, dd2zu, e, l_wall, l_grid, rmask) &
     4671       !$ACC PRESENT(wall_flags_total_0, var, dd2zu, e, l_wall, l_grid, rmask) &
    46684672       !$ACC PRESENT(kh, km, sums_l_l)
    46694673       DO  i = nxlg, nxrg
     
    46974701
    46984702                l_v(k) = MIN( l_wall(k,j,i), l_stable(k) )                      &
    4699                        * MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_static_0(k,j,i), 0 ) )
     4703                       * MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 0 ) )
    47004704                l = l_v(k)
    47014705!
     
    47224726       !$ACC PARALLEL LOOP COLLAPSE(2) PRIVATE(i, j) &
    47234727       !$ACC PRIVATE(dvar_dz, duv2_dz2, l_stable, l_v, rif) &
    4724        !$ACC PRESENT(wall_flags_static_0, var, dd2zu, e, u, v, l_wall, l_black, rmask) &
     4728       !$ACC PRESENT(wall_flags_total_0, var, dd2zu, e, u, v, l_wall, l_black, rmask) &
    47254729       !$ACC PRESENT(kh, km, sums_l_l)
    47264730       DO  i = nxlg, nxrg
     
    47704774             !DIR$ IVDEP
    47714775             DO  k = nzb+1, nzt
    4772                 l_v(k)    = l_stable(k) * MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_static_0(k,j,i), 0 ) )
     4776                l_v(k)    = l_stable(k) * MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 0 ) )
    47734777                km(k,j,i) = c_0 * l_v(k) * SQRT( e(k,j,i) )
    47744778                kh(k,j,i) = km(k,j,i) / prandtl_number
     
    47914795       !$ACC PARALLEL LOOP COLLAPSE(2) PRIVATE(i, j) &
    47924796       !$ACC PRIVATE(l_v) &
    4793        !$ACC PRESENT(wall_flags_static_0, e, diss, rmask) &
     4797       !$ACC PRESENT(wall_flags_total_0, e, diss, rmask) &
    47944798       !$ACC PRESENT(kh, km, sums_l_l)
    47954799       DO  i = nxlg, nxrg
     
    48024806
    48034807                l_v(k) = c_0**3 * e(k,j,i) * SQRT(e(k,j,i)) / ( diss(k,j,i) + 1.0E-30_wp ) &
    4804                        * MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_static_0(k,j,i), 0 ) )
     4808                       * MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 0 ) )
    48054809
    48064810                km(k,j,i) = c_0 * SQRT( e(k,j,i) ) * l_v(k)
     
    49394943          DO  k = nzb+1, nzt
    49404944
    4941              flag = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_static_0(k,j,i), 0 ) )
     4945             flag = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 0 ) )
    49424946
    49434947!
Note: See TracChangeset for help on using the changeset viewer.