Changeset 4317


Ignore:
Timestamp:
Dec 3, 2019 12:43:22 PM (5 years ago)
Author:
Giersch
Message:

Comments revised/added, formatting improved, fluxes for u,v, and scalars are explicitly set to zero at nzt+1, fluxes of w-component are now calculated only until nzt-1 (Prognostic equation for w-velocity component ends at nzt-1)

Location:
palm/trunk
Files:
9 edited

Legend:

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

    r4204 r4317  
    2525! -----------------
    2626! $Id$
     27! Comments revised/added, formatting improved, fluxes for u,v, and scalars are
     28! explicitly set to zero at nzt+1, fluxes of w-component are now calculated only
     29! until nzt-1 (Prognostic equation for w-velocity component ends at nzt-1)
     30!
     31! 4204 2019-08-30 12:30:17Z knoop
    2732! Bugfix: Changed sk_num initialization default to avoid implicit SAVE-Attribut
    2833!
     
    450455                ENDIF                                                         
    451456!                                                                             
    452 !--             u component - z-direction                                     
     457!--             u component - z-direction. Fluxes are calculated on w-grid level                                     
    453458!--             WS1 (6), WS3 (7), WS5 (8)                                     
    454459                IF ( k == nzb+1 )  THEN                                       
     
    479484                ELSEIF ( ( .NOT. BTEST(wall_flags_0(k_mm,j,i),1)    .OR.       &
    480485                           .NOT. BTEST(wall_flags_0(k_ppp,j,i),1) ) .AND.      &
    481                                BTEST(wall_flags_0(k-1,j,i),1)  .AND.           &
    482                                BTEST(wall_flags_0(k,j,i),1)    .AND.           &
    483                                BTEST(wall_flags_0(k+1,j,i),1)  .AND.           &
    484                                BTEST(wall_flags_0(k_pp,j,i),1) .OR.            &
    485                                k == nzt - 1 )                                  &
     486                                 BTEST(wall_flags_0(k-1,j,i),1)     .AND.      &
     487                                 BTEST(wall_flags_0(k,j,i),1)       .AND.      &
     488                                 BTEST(wall_flags_0(k+1,j,i),1)     .AND.      &
     489                                 BTEST(wall_flags_0(k_pp,j,i),1)    .OR.       &
     490                         k == nzt - 1 )                                        &
    486491                THEN                                                           
    487492                   advc_flags_m(k,j,i) = IBSET( advc_flags_m(k,j,i), 7 )       
     
    579584                ENDIF
    580585!
    581 !--             v component - z-direction
     586!--             v component - z-direction. Fluxes are calculated on w-grid level
    582587!--             WS1 (15), WS3 (16), WS5 (17)
    583588                IF ( k == nzb+1 )  THEN
     
    608613                ELSEIF ( ( .NOT. BTEST(wall_flags_0(k_mm,j,i),2)    .OR.       &
    609614                           .NOT. BTEST(wall_flags_0(k_ppp,j,i),2) ) .AND.      &
    610                                BTEST(wall_flags_0(k-1,j,i),2)  .AND.           &
    611                                BTEST(wall_flags_0(k,j,i),2)    .AND.           &
    612                                BTEST(wall_flags_0(k+1,j,i),2)  .AND.           &
    613                                BTEST(wall_flags_0(k_pp,j,i),2)  .OR.           &
    614                                k == nzt - 1 )                                  &
     615                                 BTEST(wall_flags_0(k-1,j,i),2)     .AND.      &
     616                                 BTEST(wall_flags_0(k,j,i),2)       .AND.      &
     617                                 BTEST(wall_flags_0(k+1,j,i),2)     .AND.      &
     618                                 BTEST(wall_flags_0(k_pp,j,i),2)    .OR.       &
     619                         k == nzt - 1 )                                        &
    615620                THEN                                                           
    616621                   advc_flags_m(k,j,i) = IBSET( advc_flags_m(k,j,i), 16 )     
     
    706711                ENDIF
    707712!
    708 !--             w component - z-direction
    709 !--             WS1 (24), WS3 (25), WS5 (26)
    710                 flag_set = .FALSE.
     713!--             w component - z-direction. Fluxes are calculated on scalar grid
     714!--             level. WS1 (24), WS3 (25), WS5 (26)
    711715                IF ( k == nzb+1 )  THEN
    712716                   k_mm = nzb
     
    725729                ENDIF 
    726730               
    727                 IF ( ( .NOT. BTEST(wall_flags_0(k-1,j,i),3)  .AND.             &
    728                        .NOT. BTEST(wall_flags_0(k,j,i),3)    .AND.             &
    729                              BTEST(wall_flags_0(k+1,j,i),3) )  .OR.            &
    730                      ( .NOT. BTEST(wall_flags_0(k-1,j,i),3)  .AND.             &
    731                              BTEST(wall_flags_0(k,j,i),3) )  .OR.              &
    732                      ( .NOT. BTEST(wall_flags_0(k+1,j,i),3)  .AND.             &
    733                              BTEST(wall_flags_0(k,j,i),3) )  .OR.              &       
     731                flag_set = .FALSE.
     732                IF ( ( .NOT. BTEST(wall_flags_0(k-1,j,i),3)   .AND.            &
     733                       .NOT. BTEST(wall_flags_0(k,j,i),3)     .AND.            &
     734                             BTEST(wall_flags_0(k+1,j,i),3) ) .OR.             &
     735                     ( .NOT. BTEST(wall_flags_0(k-1,j,i),3)   .AND.            &
     736                             BTEST(wall_flags_0(k,j,i),3) )   .OR.             &
     737                     ( .NOT. BTEST(wall_flags_0(k+1,j,i),3)   .AND.            &
     738                             BTEST(wall_flags_0(k,j,i),3) )   .OR.             &       
    734739                     k == nzt )                                                &
    735740                THEN
    736741!
    737 !--                Please note, at k == nzb_w_inner(j,i) a flag is explictely
     742!--                Please note, at k == nzb_w_inner(j,i) a flag is explicitly
    738743!--                set, although this is not a prognostic level. However,
    739744!--                contrary to the advection of u,v and s this is necessary
     
    742747                   advc_flags_m(k,j,i) = IBSET( advc_flags_m(k,j,i), 24 )
    743748                   flag_set = .TRUE.
    744                 ELSEIF ( ( .NOT. BTEST(wall_flags_0(k_mm,j,i),3)     .OR.      &
     749                ELSEIF ( ( .NOT. BTEST(wall_flags_0(k_mm,j,i),3)    .OR.       &
    745750                           .NOT. BTEST(wall_flags_0(k_ppp,j,i),3) ) .AND.      &
    746                                  BTEST(wall_flags_0(k-1,j,i),3)  .AND.         &
    747                                  BTEST(wall_flags_0(k,j,i),3)    .AND.         &
    748                                  BTEST(wall_flags_0(k+1,j,i),3)  .OR.          &
     751                                 BTEST(wall_flags_0(k-1,j,i),3)     .AND.      &
     752                                 BTEST(wall_flags_0(k,j,i),3)       .AND.      &
     753                                 BTEST(wall_flags_0(k+1,j,i),3)     .OR.       &
    749754                         k == nzt - 1 )                                        &
    750755                THEN                                                           
     
    10271032               
    10281033!                                                                             
    1029 !--             scalar - z-direction                                           
     1034!--             scalar - z-direction. Fluxes are calculated on w-grid level                                           
    10301035!--             WS1 (6), WS3 (7), WS5 (8)                                     
    10311036                IF ( k == nzb+1 )  THEN                                       
     
    10561061                ELSEIF ( ( .NOT. BTEST(wall_flags_0(k_mm,j,i),0)    .OR.       &
    10571062                           .NOT. BTEST(wall_flags_0(k_ppp,j,i),0) ) .AND.      &
    1058                                BTEST(wall_flags_0(k-1,j,i),0)  .AND.           &
    1059                                BTEST(wall_flags_0(k,j,i),0)    .AND.           &
    1060                                BTEST(wall_flags_0(k+1,j,i),0)  .AND.           &
    1061                                BTEST(wall_flags_0(k_pp,j,i),0) .OR.            &   
     1063                                 BTEST(wall_flags_0(k-1,j,i),0)     .AND.      &
     1064                                 BTEST(wall_flags_0(k,j,i),0)       .AND.      &
     1065                                 BTEST(wall_flags_0(k+1,j,i),0)     .AND.      &
     1066                                 BTEST(wall_flags_0(k_pp,j,i),0)    .OR.       &   
    10621067                         k == nzt - 1 )                                        &
    10631068                THEN                                                           
    10641069                   advc_flag(k,j,i) = IBSET( advc_flag(k,j,i), 7 )             
    10651070                   flag_set = .TRUE.                                           
    1066                 ELSEIF ( BTEST(wall_flags_0(k_mm,j,i),0)                       &
    1067                   .AND.  BTEST(wall_flags_0(k-1,j,i),0)                        &
    1068                   .AND.  BTEST(wall_flags_0(k,j,i),0)                          &
    1069                   .AND.  BTEST(wall_flags_0(k+1,j,i),0)                        &
    1070                   .AND.  BTEST(wall_flags_0(k_pp,j,i),0)                       &
    1071                   .AND.  BTEST(wall_flags_0(k_ppp,j,i),0)                      &
    1072                   .AND. .NOT. flag_set )                                       &
     1071                ELSEIF ( BTEST(wall_flags_0(k_mm,j,i),0)  .AND.                &
     1072                         BTEST(wall_flags_0(k-1,j,i),0)   .AND.                &
     1073                         BTEST(wall_flags_0(k,j,i),0)     .AND.                &
     1074                         BTEST(wall_flags_0(k+1,j,i),0)   .AND.                &
     1075                         BTEST(wall_flags_0(k_pp,j,i),0)  .AND.                &
     1076                         BTEST(wall_flags_0(k_ppp,j,i),0) .AND.                &
     1077                        .NOT. flag_set )                                       &
    10731078                THEN
    10741079                   advc_flag(k,j,i) = IBSET( advc_flag(k,j,i), 8 )
     
    14801485       flux_t(nzb) = 0.0_wp
    14811486       diss_t(nzb) = 0.0_wp
     1487       
    14821488       DO  k = nzb+1, nzb+2
    14831489          ibit8 = REAL( IBITS(advc_flag(k,j,i),8,1), KIND = wp )
     
    15981604                                                         )
    15991605       ENDDO
    1600 
     1606       
     1607!
     1608!--    Set resolved/turbulent flux at model top to zero (w-level)
     1609       flux_t(nzt+1) = 0.0_wp
     1610       diss_t(nzt+1) = 0.0_wp
     1611       
    16011612       IF ( limiter )  THEN
    16021613!
     
    21912202!--    indirect indexing. This allows better vectorization for the main loop.
    21922203!--    First, compute the flux at model surface, which need has to be
    2193 !--    calculated explicetely for the tendency at
     2204!--    calculated explicitly for the tendency at
    21942205!--    the first w-level. For topography wall this is done implicitely by
    21952206!--    advc_flags_m.
     
    21972208       diss_t(nzb) = 0.0_wp
    21982209       w_comp(nzb) = 0.0_wp
     2210       
    21992211       DO  k = nzb+1, nzb+2
    22002212!
     
    23222334                                                           )
    23232335       ENDDO
     2336       
     2337!
     2338!--    Set resolved/turbulent flux at model top to zero (w-level)
     2339       flux_t(nzt+1) = 0.0_wp
     2340       diss_t(nzt+1) = 0.0_wp
     2341       w_comp(nzt+1) = 0.0_wp
    23242342       
    23252343       DO  k = nzb+1, nzb_max_l
     
    27482766!--    indirect indexing. This allows better vectorization for the main loop.
    27492767!--    First, compute the flux at model surface, which need has to be
    2750 !--    calculated explicetely for the tendency at
     2768!--    calculated explicitly for the tendency at
    27512769!--    the first w-level. For topography wall this is done implicitely by
    27522770!--    advc_flags_m.
     
    28802898                                                           )
    28812899       ENDDO
     2900       
     2901!
     2902!--    Set resolved/turbulent flux at model top to zero (w-level)
     2903       flux_t(nzt+1) = 0.0_wp
     2904       diss_t(nzt+1) = 0.0_wp
     2905       w_comp(nzt+1) = 0.0_wp
    28822906       
    28832907       DO  k = nzb+1, nzb_max_l
     
    31253149          ENDDO
    31263150
    3127           DO  k = nzb_max_l+1, nzt
     3151          DO  k = nzb_max_l+1, nzt-1
    31283152
    31293153             v_comp(k)      = v(k+1,j,i) + v(k,j,i) - gv
     
    31833207          ENDDO
    31843208
    3185           DO  k = nzb_max_l+1, nzt
     3209          DO  k = nzb_max_l+1, nzt-1
    31863210
    31873211             u_comp(k)        = u(k+1,j,i) + u(k,j,i) - gu
     
    32743298       ENDDO
    32753299
    3276        DO  k = nzb_max_l+1, nzt
     3300       DO  k = nzb_max_l+1, nzt-1
    32773301
    32783302          u_comp(k) = u(k+1,j,i+1) + u(k,j,i+1) - gu
     
    33053329!--    indirect indexing. This allows better vectorization for the main loop.
    33063330!--    First, compute the flux at model surface, which need has to be
    3307 !--    calculated explicetely for the tendency at
     3331!--    calculated explicitly for the tendency at
    33083332!--    the first w-level. For topography wall this is done implicitely by
    33093333!--    advc_flags_m.
     
    33953419       ENDDO
    33963420       
    3397        DO  k = nzt-1, nzt
     3421       DO  k = nzt-1, nzt-1
    33983422!
    33993423!--       k index has to be modified near bottom and top, else array
     
    35133537       ENDDO
    35143538       
    3515        DO  k = nzb_max_l+1, nzt
     3539       DO  k = nzb_max_l+1, nzt-1
    35163540
    35173541          flux_d    = flux_t(k-1)
     
    58705894          ENDDO
    58715895
    5872           DO  k = nzb_max_l+1, nzt
     5896          DO  k = nzb_max_l+1, nzt-1
    58735897
    58745898             u_comp                   = u(k+1,j,i) + u(k,j,i) - gu
     
    59475971          ENDDO
    59485972
    5949           DO  k = nzb_max_l+1, nzt
     5973          DO  k = nzb_max_l+1, nzt-1
    59505974
    59515975             v_comp                 = v(k+1,j,i) + v(k,j,i) - gv
     
    59655989
    59665990!
    5967 !--          The lower flux has to be calculated explicetely for the tendency
     5991!--          The lower flux has to be calculated explicitly for the tendency
    59685992!--          at the first w-level. For topography wall this is done implicitely
    59695993!--          by advc_flags_m.
     
    62336257             ENDDO
    62346258
    6235              DO  k = nzb_max_l+1, nzt
     6259             DO  k = nzb_max_l+1, nzt-1
    62366260
    62376261                u_comp = u(k+1,j,i+1) + u(k,j,i+1) - gu
Note: See TracChangeset for help on using the changeset viewer.