Ignore:
Timestamp:
Dec 18, 2019 11:55:56 AM (4 years 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/lagrangian_particle_model_mod.f90

    r4336 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! 4336 2019-12-13 10:12:05Z raasch
    2731! bugfix: wrong header output of particle group features (density ratio) in case
    2832! of restarts corrected
     
    152156               nzb_max, nzt,nbgp, ngp_2dh_outer,                               &
    153157               topo_top_ind,                                                   &
    154                wall_flags_static_0
     158               wall_flags_total_0
    155159
    156160    USE kinds
     
    13541358!--                               of overhanging structures.
    13551359                                  IF ( kp > nzt  .OR.                          &
    1356                                  .NOT. BTEST( wall_flags_static_0(kp,jp,ip), 0 ) )  THEN
     1360                                 .NOT. BTEST( wall_flags_total_0(kp,jp,ip), 0 ) )  THEN
    13571361                                     pos_x = pos_x + pdx(i)
    13581362                                     CYCLE xloop
     
    13641368                               ELSEIF ( .NOT. seed_follows_topography .AND.    &
    13651369                                         tmp_particle%z <= zw(k_surf)  .OR.    &
    1366                                         .NOT. BTEST( wall_flags_static_0(kp,jp,ip), 0 ) )&
     1370                                        .NOT. BTEST( wall_flags_total_0(kp,jp,ip), 0 ) )&
    13671371                               THEN
    13681372                                  pos_x = pos_x + pdx(i)
     
    15201524!
    15211525!--                Check if particle is within topography
    1522                    IF ( .NOT. BTEST( wall_flags_static_0(k,j,i), 0 ) )  THEN
     1526                   IF ( .NOT. BTEST( wall_flags_total_0(k,j,i), 0 ) )  THEN
    15231527                      particles(n)%particle_mask = .FALSE.
    15241528                      deleted_particles = deleted_particles + 1
     
    17631767          DO  k = nzb, nzt+1
    17641768
    1765              IF ( .NOT. BTEST( wall_flags_static_0(k,j,i-1), 0 )  .AND.               &
    1766                         BTEST( wall_flags_static_0(k,j,i), 0   )  .AND.               &
    1767                         BTEST( wall_flags_static_0(k,j,i+1), 0 ) )                    &
     1769             IF ( .NOT. BTEST( wall_flags_total_0(k,j,i-1), 0 )  .AND.         &
     1770                        BTEST( wall_flags_total_0(k,j,i), 0   )  .AND.         &
     1771                        BTEST( wall_flags_total_0(k,j,i+1), 0 ) )              &
    17681772             THEN
    17691773                de_dx(k,j,i) = 2.0_wp * sgs_wf_part *                          &
    17701774                               ( e(k,j,i+1) - e(k,j,i) ) * ddx
    1771              ELSEIF ( BTEST( wall_flags_static_0(k,j,i-1), 0 )  .AND.                 &
    1772                       BTEST( wall_flags_static_0(k,j,i), 0   )  .AND.                 &
    1773                 .NOT. BTEST( wall_flags_static_0(k,j,i+1), 0 ) )                      &
     1775             ELSEIF ( BTEST( wall_flags_total_0(k,j,i-1), 0 )  .AND.           &
     1776                      BTEST( wall_flags_total_0(k,j,i), 0   )  .AND.           &
     1777                .NOT. BTEST( wall_flags_total_0(k,j,i+1), 0 ) )                &
    17741778             THEN
    17751779                de_dx(k,j,i) = 2.0_wp * sgs_wf_part *                          &
    17761780                               ( e(k,j,i) - e(k,j,i-1) ) * ddx
    1777              ELSEIF ( .NOT. BTEST( wall_flags_static_0(k,j,i), 22   )  .AND.          &
    1778                       .NOT. BTEST( wall_flags_static_0(k,j,i+1), 22 ) )               &   
     1781             ELSEIF ( .NOT. BTEST( wall_flags_total_0(k,j,i), 22   )  .AND.    &
     1782                      .NOT. BTEST( wall_flags_total_0(k,j,i+1), 22 ) )         &   
    17791783             THEN
    17801784                de_dx(k,j,i) = 0.0_wp
    1781              ELSEIF ( .NOT. BTEST( wall_flags_static_0(k,j,i-1), 22 )  .AND.          &
    1782                       .NOT. BTEST( wall_flags_static_0(k,j,i), 22   ) )               &
     1785             ELSEIF ( .NOT. BTEST( wall_flags_total_0(k,j,i-1), 22 )  .AND.    &
     1786                      .NOT. BTEST( wall_flags_total_0(k,j,i), 22   ) )         &
    17831787             THEN
    17841788                de_dx(k,j,i) = 0.0_wp
     
    17871791             ENDIF
    17881792
    1789              IF ( .NOT. BTEST( wall_flags_static_0(k,j-1,i), 0 )  .AND.               &
    1790                         BTEST( wall_flags_static_0(k,j,i), 0   )  .AND.               &
    1791                         BTEST( wall_flags_static_0(k,j+1,i), 0 ) )                    &
     1793             IF ( .NOT. BTEST( wall_flags_total_0(k,j-1,i), 0 )  .AND.         &
     1794                        BTEST( wall_flags_total_0(k,j,i), 0   )  .AND.         &
     1795                        BTEST( wall_flags_total_0(k,j+1,i), 0 ) )              &
    17921796             THEN
    17931797                de_dy(k,j,i) = 2.0_wp * sgs_wf_part *                          &
    17941798                               ( e(k,j+1,i) - e(k,j,i) ) * ddy
    1795              ELSEIF ( BTEST( wall_flags_static_0(k,j-1,i), 0 )  .AND.                 &
    1796                       BTEST( wall_flags_static_0(k,j,i), 0   )  .AND.                 &
    1797                 .NOT. BTEST( wall_flags_static_0(k,j+1,i), 0 ) )                      &
     1799             ELSEIF ( BTEST( wall_flags_total_0(k,j-1,i), 0 )  .AND.           &
     1800                      BTEST( wall_flags_total_0(k,j,i), 0   )  .AND.           &
     1801                .NOT. BTEST( wall_flags_total_0(k,j+1,i), 0 ) )                &
    17981802             THEN
    17991803                de_dy(k,j,i) = 2.0_wp * sgs_wf_part *                          &
    18001804                               ( e(k,j,i) - e(k,j-1,i) ) * ddy
    1801              ELSEIF ( .NOT. BTEST( wall_flags_static_0(k,j,i), 22   )  .AND.          &
    1802                       .NOT. BTEST( wall_flags_static_0(k,j+1,i), 22 ) )               &   
     1805             ELSEIF ( .NOT. BTEST( wall_flags_total_0(k,j,i), 22   )  .AND.    &
     1806                      .NOT. BTEST( wall_flags_total_0(k,j+1,i), 22 ) )         &   
    18031807             THEN
    18041808                de_dy(k,j,i) = 0.0_wp
    1805              ELSEIF ( .NOT. BTEST( wall_flags_static_0(k,j-1,i), 22 )  .AND.          &
    1806                       .NOT. BTEST( wall_flags_static_0(k,j,i), 22   ) )               &
     1809             ELSEIF ( .NOT. BTEST( wall_flags_total_0(k,j-1,i), 22 )  .AND.    &
     1810                      .NOT. BTEST( wall_flags_total_0(k,j,i), 22   ) )         &
    18071811             THEN
    18081812                de_dy(k,j,i) = 0.0_wp
     
    18221826!
    18231827!--          Flag to mask topography
    1824              flag1 = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_static_0(k,j,i), 0  ) )
     1828             flag1 = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 0  ) )
    18251829
    18261830             de_dz(k,j,i) = 2.0_wp * sgs_wf_part *                             &
     
    18971901!
    18981902!--             Flag indicating vicinity of wall
    1899                 flag1 = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_static_0(k,j,i), 24 ) )
     1903                flag1 = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 24 ) )
    19001904
    19011905                sums_l(k,1,0)  = sums_l(k,1,0)  + u(k,j,i) * flag1
     
    19371941!
    19381942!--             Flag indicating vicinity of wall
    1939                 flag1 = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_static_0(k,j,i), 24 ) )
     1943                flag1 = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 24 ) )
    19401944
    19411945                sums_l(k,8,0)  = sums_l(k,8,0)  + e(k,j,i)                       * flag1
     
    36453649                               ( gg-dd ) * w(k+1,j+1,i+1) &
    36463650                             ) / ( 3.0_wp * gg )
    3647                    w_int(n) = w_int_l + ( zv(n) - zw(k) ) / dzw(k+1) *               &
     3651                   w_int(n) = w_int_l + ( zv(n) - zw(k) ) / dzw(k+1) *            &
    36483652                              ( w_int_u - w_int_l )
    36493653                ENDIF
     
    36683672             j = jp + MERGE( -1_iwp , 1_iwp, BTEST( nb, 1 ) )
    36693673             k = kp + MERGE( -1_iwp , 1_iwp, BTEST( nb, 0 ) )
    3670              IF ( .NOT. BTEST(wall_flags_static_0(k,  jp, ip), 0) .OR.                &
    3671                   .NOT. BTEST(wall_flags_static_0(kp, j,  ip), 0) .OR.                &
    3672                   .NOT. BTEST(wall_flags_static_0(kp, jp, i ), 0) )                   &
     3674             IF ( .NOT. BTEST(wall_flags_total_0(k,  jp, ip), 0) .OR.             &
     3675                  .NOT. BTEST(wall_flags_total_0(kp, j,  ip), 0) .OR.             &
     3676                  .NOT. BTEST(wall_flags_total_0(kp, jp, i ), 0) )                &
    36733677             THEN
    36743678                subbox_at_wall = .TRUE.
     
    47654769                IF ( reach_x(t_index)                      .AND.               &
    47664770                     ABS( pos_x - xwall ) < eps            .AND.               &
    4767                      .NOT. BTEST(wall_flags_static_0(k3,j3,i3),0) .AND.               &
     4771                     .NOT. BTEST(wall_flags_total_0(k3,j3,i3),0) .AND.         &
    47684772                     .NOT. reflect_x )  THEN
    47694773!
     
    48054809                IF ( reach_y(t_index)                      .AND.               &
    48064810                     ABS( pos_y - ywall ) < eps            .AND.               &
    4807                      .NOT. BTEST(wall_flags_static_0(k3,j3,i3),0) .AND.               &
     4811                     .NOT. BTEST(wall_flags_total_0(k3,j3,i3),0) .AND.         &
    48084812                     .NOT. reflect_y )  THEN
    48094813!
     
    48454849                IF ( reach_z(t_index)                      .AND.               &
    48464850                     ABS( pos_z - zwall ) < eps            .AND.               &
    4847                      .NOT. BTEST(wall_flags_static_0(k3,j3,i3),0) .AND.               &
     4851                     .NOT. BTEST(wall_flags_total_0(k3,j3,i3),0) .AND.         &
    48484852                     .NOT. reflect_z )  THEN
    48494853!
     
    52035207!
    52045208!--          Predetermine flag to mask topography
    5205              flag = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_static_0(k,j,i), 0 ) )
     5209             flag = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 0 ) )
    52065210
    52075211             q(k,j,i)  = q_p(k,j,i)  - ql_c(k,j,i) * flag
     
    52335237!
    52345238!--    Predetermine flag to mask topography
    5235        flag = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_static_0(k,j,i), 0 ) )
     5239       flag = MERGE( 1.0_wp, 0.0_wp, BTEST( wall_flags_total_0(k,j,i), 0 ) )
    52365240
    52375241       q(k,j,i)  = q(k,j,i)  - ql_c(k,j,i) * flag
Note: See TracChangeset for help on using the changeset viewer.