Changeset 1580 for palm/trunk/SOURCE


Ignore:
Timestamp:
Apr 10, 2015 1:43:49 PM (10 years ago)
Author:
suehring
Message:

Bugfix: setting flags for 5th-order advection scheme, and stastical evaluation of scalar fluxes in 5th-order scheme in case of monotonic limiter.

Location:
palm/trunk/SOURCE
Files:
2 edited

Legend:

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

    r1572 r1580  
    2020! Current revisions:
    2121! ------------------
    22 !
     22! Bugfix: statistical evaluation of scalar fluxes in case of monotonic limiter.
    2323!
    2424! Former revisions:
     
    11211121
    11221122!
    1123 !--    Evaluation of statistics. Please note, in case of using monotone limiter
    1124 !--    vertical fluxes will be not calculated by the advective fluxes.
    1125        IF ( .NOT. monotonic_adjustment )  THEN
    1126 
    1127           SELECT CASE ( sk_char )
    1128 
    1129              CASE ( 'pt' )
    1130 
    1131                 DO  k = nzb, nzt
    1132                    sums_wspts_ws_l(k,tn) = sums_wspts_ws_l(k,tn) +            &
    1133                                           ( flux_t(k) + diss_t(k) )           &
    1134                                   * weight_substep(intermediate_timestep_count)
    1135                 ENDDO
    1136              
    1137              CASE ( 'sa' )
    1138 
    1139                 DO  k = nzb, nzt
    1140                    sums_wssas_ws_l(k,tn) = sums_wssas_ws_l(k,tn) +            &
    1141                                           ( flux_t(k) + diss_t(k) )           &
    1142                                   * weight_substep(intermediate_timestep_count)
    1143                 ENDDO
    1144              
    1145              CASE ( 'q' )
    1146 
    1147                 DO  k = nzb, nzt
    1148                    sums_wsqs_ws_l(k,tn)  = sums_wsqs_ws_l(k,tn) +             &
    1149                                          ( flux_t(k) + diss_t(k) )            &
    1150                                   * weight_substep(intermediate_timestep_count)
    1151                 ENDDO
    1152 
    1153              CASE ( 'qr' )
    1154 
    1155                 DO  k = nzb, nzt
    1156                    sums_wsqrs_ws_l(k,tn)  = sums_wsqrs_ws_l(k,tn) +           &
    1157                                          ( flux_t(k) + diss_t(k) )            &
    1158                                   * weight_substep(intermediate_timestep_count)
    1159                 ENDDO
    1160 
    1161              CASE ( 'nr' )
    1162 
    1163                 DO  k = nzb, nzt
    1164                    sums_wsnrs_ws_l(k,tn)  = sums_wsnrs_ws_l(k,tn) +           &
    1165                                          ( flux_t(k) + diss_t(k) )            &
    1166                                   * weight_substep(intermediate_timestep_count)
    1167                 ENDDO
    1168 
    1169             END SELECT
    1170          ENDIF
    1171 
     1123!--    Evaluation of statistics.
     1124       SELECT CASE ( sk_char )
     1125
     1126          CASE ( 'pt' )
     1127
     1128             DO  k = nzb, nzt
     1129                sums_wspts_ws_l(k,tn) = sums_wspts_ws_l(k,tn) +               &
     1130                                       ( flux_t(k) + diss_t(k) )              &
     1131                               * weight_substep(intermediate_timestep_count)
     1132             ENDDO
     1133           
     1134          CASE ( 'sa' )
     1135
     1136             DO  k = nzb, nzt
     1137                sums_wssas_ws_l(k,tn) = sums_wssas_ws_l(k,tn) +               &
     1138                                       ( flux_t(k) + diss_t(k) )              &
     1139                               * weight_substep(intermediate_timestep_count)
     1140             ENDDO
     1141           
     1142          CASE ( 'q' )
     1143
     1144             DO  k = nzb, nzt
     1145                sums_wsqs_ws_l(k,tn)  = sums_wsqs_ws_l(k,tn) +                &
     1146                                      ( flux_t(k) + diss_t(k) )               &
     1147                               * weight_substep(intermediate_timestep_count)
     1148             ENDDO
     1149
     1150          CASE ( 'qr' )
     1151
     1152             DO  k = nzb, nzt
     1153                sums_wsqrs_ws_l(k,tn)  = sums_wsqrs_ws_l(k,tn) +              &
     1154                                      ( flux_t(k) + diss_t(k) )               &
     1155                               * weight_substep(intermediate_timestep_count)
     1156             ENDDO
     1157
     1158          CASE ( 'nr' )
     1159
     1160             DO  k = nzb, nzt
     1161                sums_wsnrs_ws_l(k,tn)  = sums_wsnrs_ws_l(k,tn) +              &
     1162                                      ( flux_t(k) + diss_t(k) )               &
     1163                               * weight_substep(intermediate_timestep_count)
     1164             ENDDO
     1165
     1166         END SELECT
     1167         
    11721168    END SUBROUTINE advec_s_ws_ij
    11731169
     
    32513247             ENDDO
    32523248!
    3253 !--          Evaluation of statistics. Please note, in case of using monotone
    3254 !--          limiter vertical fluxes will be not calculated by the advective
    3255 !--          fluxes.
    3256              IF ( .NOT. monotonic_adjustment )  THEN
    3257 
    3258                 SELECT CASE ( sk_char )
    3259 
    3260                     CASE ( 'pt' )
    3261                        DO  k = nzb, nzt
    3262                           sums_wspts_ws_l(k,tn) = sums_wspts_ws_l(k,tn)       &
    3263                            + ( flux_t(k) + diss_t(k) )                        &
    3264                            *   weight_substep(intermediate_timestep_count)
    3265                        ENDDO
    3266                     CASE ( 'sa' )
    3267                        DO  k = nzb, nzt
    3268                           sums_wssas_ws_l(k,tn) = sums_wssas_ws_l(k,tn)       &
    3269                            + ( flux_t(k) + diss_t(k) )                        &
    3270                            *   weight_substep(intermediate_timestep_count)
    3271                        ENDDO
    3272                     CASE ( 'q' )
    3273                        DO  k = nzb, nzt
    3274                           sums_wsqs_ws_l(k,tn) = sums_wsqs_ws_l(k,tn)         &
    3275                            + ( flux_t(k) + diss_t(k) )                        &
    3276                            *   weight_substep(intermediate_timestep_count)
    3277                        ENDDO
    3278                     CASE ( 'qr' )
    3279                        DO  k = nzb, nzt
    3280                           sums_wsqrs_ws_l(k,tn) = sums_wsqrs_ws_l(k,tn)       &
    3281                            + ( flux_t(k) + diss_t(k) )                        &
    3282                            *   weight_substep(intermediate_timestep_count)
    3283                        ENDDO
    3284                     CASE ( 'nr' )
    3285                        DO  k = nzb, nzt
    3286                           sums_wsnrs_ws_l(k,tn) = sums_wsnrs_ws_l(k,tn)       &
    3287                            + ( flux_t(k) + diss_t(k) )                        &
    3288                            *   weight_substep(intermediate_timestep_count)
    3289                        ENDDO
    3290 
    3291                  END SELECT
    3292 
    3293               ENDIF
     3249!--          Evaluation of statistics.
     3250             SELECT CASE ( sk_char )
     3251
     3252                 CASE ( 'pt' )
     3253                    DO  k = nzb, nzt
     3254                       sums_wspts_ws_l(k,tn) = sums_wspts_ws_l(k,tn)          &
     3255                        + ( flux_t(k) + diss_t(k) )                           &
     3256                        *   weight_substep(intermediate_timestep_count)
     3257                    ENDDO
     3258                 CASE ( 'sa' )
     3259                    DO  k = nzb, nzt
     3260                       sums_wssas_ws_l(k,tn) = sums_wssas_ws_l(k,tn)          &
     3261                        + ( flux_t(k) + diss_t(k) )                           &
     3262                        *   weight_substep(intermediate_timestep_count)
     3263                    ENDDO
     3264                 CASE ( 'q' )
     3265                    DO  k = nzb, nzt
     3266                       sums_wsqs_ws_l(k,tn) = sums_wsqs_ws_l(k,tn)            &
     3267                        + ( flux_t(k) + diss_t(k) )                           &
     3268                        *   weight_substep(intermediate_timestep_count)
     3269                    ENDDO
     3270                 CASE ( 'qr' )
     3271                    DO  k = nzb, nzt
     3272                       sums_wsqrs_ws_l(k,tn) = sums_wsqrs_ws_l(k,tn)          &
     3273                        + ( flux_t(k) + diss_t(k) )                           &
     3274                        *   weight_substep(intermediate_timestep_count)
     3275                    ENDDO
     3276                 CASE ( 'nr' )
     3277                    DO  k = nzb, nzt
     3278                       sums_wsnrs_ws_l(k,tn) = sums_wsnrs_ws_l(k,tn)          &
     3279                        + ( flux_t(k) + diss_t(k) )                           &
     3280                        *   weight_substep(intermediate_timestep_count)
     3281                    ENDDO
     3282
     3283              END SELECT
    32943284
    32953285         ENDDO
  • palm/trunk/SOURCE/init_grid.f90

    r1576 r1580  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! Bugfix: setting flags for 5th order scheme near buildings.
    2323!
    2424! Former revisions:
     
    12431243       DO  i = nxl, nxr
    12441244          DO  j = nys, nyn
    1245              DO  k = nzb_u_inner(j,i)+1, nzt
     1245             DO  k = nzb+1, nzt
     1246!
     1247!--             At first, set flags to WS1.
     1248!--             Since fluxes are swapped in advec_ws.f90, this is necessary to
     1249!--             in order to handle the left/south flux.
     1250!--             near vertical walls.
     1251                wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 9 )
     1252                wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 12 )
    12461253!
    12471254!--             u component - x-direction
     
    12511258                     .OR. ( ( inflow_r .OR. outflow_r ) .AND. i == nxr  )     &
    12521259                   )  THEN
    1253                    wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 9 )
     1260                    wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 9 )
    12541261                ELSEIF ( k <= nzb_u_inner(j,i+2) .OR. k <= nzb_u_inner(j,i-1) &
    12551262                         .OR. ( ( inflow_r .OR. outflow_r ) .AND. i == nxr-1 )&
     
    12571264                       )  THEN
    12581265                   wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 10 )
     1266!
     1267!--                Clear flag for WS1
     1268                   wall_flags_0(k,j,i) = IBCLR( wall_flags_0(k,j,i), 9 )
    12591269                ELSE
    12601270                   wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 11 )
     1271!
     1272!--                Clear flag for WS1
     1273                   wall_flags_0(k,j,i) = IBCLR( wall_flags_0(k,j,i), 9 )
    12611274                ENDIF
    1262 
    12631275!
    12641276!--             u component - y-direction
     
    12671279                     .AND. j == nys ) .OR. ( ( inflow_n .OR. outflow_n )       &
    12681280                     .AND. j == nyn ) )  THEN
    1269                    wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 12 )
     1281                    wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 12 )
    12701282                ELSEIF ( k <= nzb_u_inner(j+2,i) .OR. k <= nzb_u_inner(j-1,i)  &
    12711283                         .OR. ( ( inflow_s .OR. outflow_s ) .AND. j == nysv  ) &
     
    12731285                       )  THEN
    12741286                   wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 13 )
     1287!
     1288!--                Clear flag for WS1
     1289                   wall_flags_0(k,j,i) = IBCLR( wall_flags_0(k,j,i), 12 )
    12751290                ELSE
    12761291                   wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 14 )
     1292!
     1293!--                Clear flag for WS1
     1294                   wall_flags_0(k,j,i) = IBCLR( wall_flags_0(k,j,i), 12 )
    12771295                ENDIF
    12781296!
     
    12961314       DO  i = nxl, nxr
    12971315          DO  j = nys, nyn
    1298              DO  k = nzb_v_inner(j,i)+1, nzt
     1316             DO  k = nzb+1, nzt
     1317!
     1318!--             At first, set flags to WS1.
     1319!--             Since fluxes are swapped in advec_ws.f90, this is necessary to
     1320!--             in order to handle the left/south flux.
     1321                wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 18 )
     1322                wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 21 )
    12991323!
    13001324!--             v component - x-direction
     
    13031327                     .AND. i == nxl ) .OR. (( inflow_r .OR. outflow_r )        &
    13041328                     .AND. i == nxr ) )  THEN
    1305                    wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 18 )
     1329                     wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 18 )
    13061330!--             WS3
    13071331                ELSEIF ( k <= nzb_v_inner(j,i+2) .OR. k <= nzb_v_inner(j,i-1)  &
     
    13101334                       )  THEN
    13111335                   wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 19 )
     1336!
     1337!--                Clear flag for WS1
     1338                   wall_flags_0(k,j,i) = IBCLR( wall_flags_0(k,j,i), 18 )
    13121339                ELSE
    13131340                   wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 20 )
     1341!
     1342!--                Clear flag for WS1
     1343                   wall_flags_0(k,j,i) = IBCLR( wall_flags_0(k,j,i), 18 )
    13141344                ENDIF
    13151345!
     
    13201350                     .OR. ( ( inflow_n .OR. outflow_n ) .AND. j == nyn  )      &
    13211351                   )  THEN
    1322                    wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 21 )
     1352                    wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 21 )
    13231353                ELSEIF ( k <= nzb_v_inner(j+2,i) .OR. k <= nzb_v_inner(j-1,i)  &
    13241354                         .OR. ( ( inflow_s .OR. outflow_s ) .AND. j == nysv+1 )&
     
    13261356                       )  THEN
    13271357                   wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 22 )
     1358!
     1359!--                Clear flag for WS1
     1360                   wall_flags_0(k,j,i) = IBCLR( wall_flags_0(k,j,i), 21 )
    13281361                ELSE
    13291362                   wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 23 )
     1363!
     1364!--                Clear flag for WS1
     1365                   wall_flags_0(k,j,i) = IBCLR( wall_flags_0(k,j,i), 21 )
    13301366                ENDIF
    13311367!
     
    13481384       DO  i = nxl, nxr
    13491385          DO  j = nys, nyn
    1350              DO  k = nzb_w_inner(j,i), nzt
     1386             DO  k = nzb+1, nzt
     1387!
     1388!--             At first, set flags to WS1.
     1389!--             Since fluxes are swapped in advec_ws.f90, this is necessary to
     1390!--             in order to handle the left/south flux.
     1391                wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 27 )
     1392                wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 30 )
    13511393!
    13521394!--             w component - x-direction
     
    13551397                     .AND. i == nxl ) .OR. ( ( inflow_r .OR. outflow_r )       &
    13561398                     .AND. i == nxr ) )  THEN
    1357                    wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 27 )
     1399                    wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 27 )
    13581400                ELSEIF ( k <= nzb_w_inner(j,i+2) .OR. k <= nzb_w_inner(j,i-1)  &
    13591401                         .OR. ( ( inflow_r .OR. outflow_r ) .AND. i == nxr-1 ) &
     
    13611403                       )  THEN
    13621404                   wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 28 )
     1405!
     1406!--                Clear flag for WS1
     1407                   wall_flags_0(k,j,i) = IBCLR( wall_flags_0(k,j,i), 27 )
    13631408                ELSE
    13641409                   wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i),29 )
     1410!
     1411!--                Clear flag for WS1
     1412                   wall_flags_0(k,j,i) = IBCLR( wall_flags_0(k,j,i), 27 )
    13651413                ENDIF
    13661414!
     
    13701418                     .AND. j == nys ) .OR. ( ( inflow_n .OR. outflow_n )       &
    13711419                     .AND. j == nyn ) )  THEN
    1372                    wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 30 )
     1420                    wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 30 )
    13731421                ELSEIF ( k <= nzb_w_inner(j+2,i) .OR. k <= nzb_w_inner(j-1,i)  &
    13741422                         .OR. ( ( inflow_s .OR. outflow_s ) .AND. j == nysv  ) &
     
    13761424                       )  THEN
    13771425                   wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 31 )
     1426!
     1427!--                Clear flag for WS1
     1428                   wall_flags_0(k,j,i) = IBCLR( wall_flags_0(k,j,i), 30 )
    13781429                ELSE
    13791430                   wall_flags_00(k,j,i) = IBSET( wall_flags_00(k,j,i), 0 )
     1431!
     1432!--                Clear flag for WS1
     1433                   wall_flags_0(k,j,i) = IBCLR( wall_flags_0(k,j,i), 30 )
    13801434                ENDIF
    13811435!
Note: See TracChangeset for help on using the changeset viewer.