Ignore:
Timestamp:
Jun 14, 2016 12:18:18 PM (8 years ago)
Author:
suehring
Message:

filter topography by filling holes resolved by only one grid point ;initialization of wall_flags_0 and wall_flags_00 moved to advec_ws

File:
1 edited

Legend:

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

    r1877 r1942  
    1919! Current revisions:
    2020! ------------------
    21 !
     21! Initialization of flags for ws-scheme moved from init_grid.
    2222!
    2323! Former revisions:
     
    167167    PUBLIC   advec_s_ws, advec_s_ws_acc, advec_u_ws, advec_u_ws_acc,          &
    168168             advec_v_ws, advec_v_ws_acc, advec_w_ws, advec_w_ws_acc,          &
    169              ws_init, ws_statistics
     169             ws_init, ws_init_flags, ws_statistics
    170170
    171171    INTERFACE ws_init
    172172       MODULE PROCEDURE ws_init
    173173    END INTERFACE ws_init
     174
     175    INTERFACE ws_init_flags
     176       MODULE PROCEDURE ws_init_flags
     177    END INTERFACE ws_init_flags
    174178
    175179    INTERFACE ws_statistics
     
    364368
    365369    END SUBROUTINE ws_init
     370
     371!------------------------------------------------------------------------------!
     372! Description:
     373! ------------
     374!> Initialization of flags for WS-scheme used to degrade the order of the scheme
     375!> near walls.
     376!------------------------------------------------------------------------------!
     377    SUBROUTINE ws_init_flags
     378
     379       USE control_parameters,                                                 &
     380           ONLY:  inflow_l, inflow_n, inflow_r, inflow_s, momentum_advec,      &
     381                  nest_bound_l, nest_bound_n, nest_bound_r, nest_bound_s,      &
     382                  outflow_l, outflow_n, outflow_r, outflow_s, scalar_advec
     383
     384       USE indices,                                                            &
     385           ONLY:  nbgp, nxl, nxlu, nxr, nyn, nys, nysv, nzb, nzb_s_inner,      &
     386                  nzb_u_inner, nzb_v_inner, nzb_w_inner, nzt, wall_flags_0,    &
     387                  wall_flags_00
     388
     389       USE kinds
     390
     391       IMPLICIT NONE
     392
     393       INTEGER(iwp) ::  i  !< index variable along x
     394       INTEGER(iwp) ::  j  !< index variable along y
     395       INTEGER(iwp) ::  k  !< index variable along z
     396
     397       LOGICAL      ::  flag_set !< steering variable for advection flags
     398   
     399
     400       IF ( scalar_advec == 'ws-scheme' .OR.                                   &
     401            scalar_advec == 'ws-scheme-mono' )  THEN
     402!
     403!--       Set flags to steer the degradation of the advection scheme in advec_ws
     404!--       near topography, inflow- and outflow boundaries as well as bottom and
     405!--       top of model domain. wall_flags_0 remains zero for all non-prognostic
     406!--       grid points.
     407          DO  i = nxl, nxr
     408             DO  j = nys, nyn
     409                DO  k = nzb_s_inner(j,i)+1, nzt
     410!
     411!--                scalar - x-direction
     412!--                WS1 (0), WS3 (1), WS5 (2)
     413                   IF ( ( k <= nzb_s_inner(j,i+1) .OR. k <= nzb_s_inner(j,i+2) &   
     414                     .OR. k <= nzb_s_inner(j,i-1) )                            &
     415                       .OR. ( ( inflow_l .OR. outflow_l .OR. nest_bound_l )    &
     416                              .AND. i == nxl   )    .OR.                       &
     417                            ( ( inflow_r .OR. outflow_r .OR. nest_bound_r )    &
     418                              .AND. i == nxr   ) )                             &
     419                   THEN
     420                      wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 0 )
     421                   ELSEIF ( ( k <= nzb_s_inner(j,i+3) .AND. k > nzb_s_inner(j,i+1)&
     422                                                      .AND. k > nzb_s_inner(j,i+2)&
     423                                                      .AND. k > nzb_s_inner(j,i-1)&
     424                            )                       .OR.                          &
     425                            ( k <= nzb_s_inner(j,i-2) .AND. k > nzb_s_inner(j,i+1)&
     426                                                      .AND. k > nzb_s_inner(j,i+2)&
     427                                                      .AND. k > nzb_s_inner(j,i-1)&
     428                            )                                                     &
     429                                                    .OR.                          &
     430                            ( ( inflow_r .OR. outflow_r .OR. nest_bound_r )       &
     431                              .AND. i == nxr-1 )    .OR.                          &
     432                            ( ( inflow_l .OR. outflow_l .OR. nest_bound_l )       &
     433                              .AND. i == nxlu  ) )                                &
     434                   THEN
     435                      wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 1 )
     436                   ELSEIF ( k > nzb_s_inner(j,i+1) .AND. k > nzb_s_inner(j,i+2)&
     437                      .AND. k > nzb_s_inner(j,i+3) .AND. k > nzb_s_inner(j,i-1)&
     438                      .AND. k > nzb_s_inner(j,i-2) )                           &
     439                   THEN
     440                      wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 2 )
     441                   ENDIF
     442!
     443!--                scalar - y-direction
     444!--                WS1 (3), WS3 (4), WS5 (5)
     445                   IF ( ( k <= nzb_s_inner(j+1,i)  .OR. k <= nzb_s_inner(j+2,i)   &   
     446                                                   .OR. k <= nzb_s_inner(j-1,i) ) &
     447                                                    .OR.                          &
     448                            ( ( inflow_s .OR. outflow_s .OR. nest_bound_s )       &
     449                              .AND. j == nys   )    .OR.                          &
     450                            ( ( inflow_n .OR. outflow_n .OR. nest_bound_n )       &
     451                              .AND. j == nyn   ) )                                &
     452                   THEN
     453                      wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 3 )
     454!
     455!--                WS3
     456                   ELSEIF ( ( k <= nzb_s_inner(j+3,i) .AND. k > nzb_s_inner(j+1,i)&
     457                                                      .AND. k > nzb_s_inner(j+2,i)&
     458                                                      .AND. k > nzb_s_inner(j-1,i)&
     459                            )                           .OR.                      &
     460                            ( k <= nzb_s_inner(j-2,i) .AND. k > nzb_s_inner(j+1,i)&
     461                                                      .AND. k > nzb_s_inner(j+2,i)&
     462                                                      .AND. k > nzb_s_inner(j-1,i)&
     463                            )                                                     &
     464                                                        .OR.                      &
     465                            ( ( inflow_s .OR. outflow_s .OR. nest_bound_s )       &
     466                              .AND. j == nysv  )    .OR.                          &
     467                            ( ( inflow_n .OR. outflow_n .OR. nest_bound_n )       &
     468                              .AND. j == nyn-1 ) )                                &
     469                   THEN
     470                      wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 4 )
     471!
     472!--                WS5
     473                   ELSEIF ( k > nzb_s_inner(j+1,i) .AND. k > nzb_s_inner(j+2,i)&
     474                      .AND. k > nzb_s_inner(j+3,i) .AND. k > nzb_s_inner(j-1,i)&
     475                      .AND. k > nzb_s_inner(j-2,i) )                           &
     476                   THEN
     477                      wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 5 )
     478                   ENDIF
     479!
     480!--                scalar - z-direction
     481!--                WS1 (6), WS3 (7), WS5 (8)
     482                   flag_set = .FALSE.
     483                   IF ( k == nzb_s_inner(j,i) + 1 .OR. k == nzt )  THEN
     484                      wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 6 )
     485                      flag_set = .TRUE.
     486                   ELSEIF ( k == nzb_s_inner(j,i) + 2 .OR. k == nzt - 1 )  THEN
     487                      wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 7 )
     488                      flag_set = .TRUE.
     489                   ELSEIF ( k > nzb_s_inner(j,i) .AND. .NOT. flag_set )  THEN
     490                      wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 8 )
     491                   ENDIF
     492
     493                ENDDO
     494             ENDDO
     495          ENDDO
     496       ENDIF
     497
     498       IF ( momentum_advec == 'ws-scheme' )  THEN
     499!
     500!--       Set wall_flags_0 to steer the degradation of the advection scheme in advec_ws
     501!--       near topography, inflow- and outflow boundaries as well as bottom and
     502!--       top of model domain. wall_flags_0 remains zero for all non-prognostic
     503!--       grid points.
     504          DO  i = nxl, nxr
     505             DO  j = nys, nyn
     506                DO  k = nzb+1, nzt
     507
     508!--                At first, set flags to WS1.
     509!--                Since fluxes are swapped in advec_ws.f90, this is necessary to
     510!--                in order to handle the left/south flux.
     511!--                near vertical walls.
     512                   wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 9 )
     513                   wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 12 )
     514!
     515!--                u component - x-direction
     516!--                WS1 (9), WS3 (10), WS5 (11)
     517                   IF ( k <= nzb_u_inner(j,i+1)     .OR.                       &
     518                            ( ( inflow_l .OR. outflow_l .OR. nest_bound_l )    &
     519                              .AND. i <= nxlu  )    .OR.                       &
     520                            ( ( inflow_r .OR. outflow_r .OR. nest_bound_r )    &
     521                              .AND. i == nxr   ) )                             &
     522                   THEN
     523                       wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 9 )
     524                   ELSEIF ( ( k <= nzb_u_inner(j,i+2) .AND.                    &
     525                              k >  nzb_u_inner(j,i+1) ) .OR.                   &
     526                              k <= nzb_u_inner(j,i-1)                          &
     527                                                        .OR.                   &
     528                            ( ( inflow_r .OR. outflow_r .OR. nest_bound_r )    &
     529                              .AND. i == nxr-1 )    .OR.                       &
     530                            ( ( inflow_l .OR. outflow_l .OR. nest_bound_l )    &
     531                              .AND. i == nxlu+1) )                             &
     532                   THEN
     533                      wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 10 )
     534!
     535!--                   Clear flag for WS1
     536                      wall_flags_0(k,j,i) = IBCLR( wall_flags_0(k,j,i), 9 )
     537                   ELSEIF ( k > nzb_u_inner(j,i+1) .AND. k > nzb_u_inner(j,i+2)   &
     538                                                   .AND. k > nzb_u_inner(j,i-1) ) &
     539                   THEN   
     540                      wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 11 )
     541!
     542!--                   Clear flag for WS1
     543                      wall_flags_0(k,j,i) = IBCLR( wall_flags_0(k,j,i), 9 )
     544                   ENDIF
     545!
     546!--                u component - y-direction
     547!--                WS1 (12), WS3 (13), WS5 (14)
     548                   IF ( k <= nzb_u_inner(j+1,i) .OR.                           &
     549                            ( ( inflow_s .OR. outflow_s .OR. nest_bound_s )    &
     550                              .AND. j == nys   )    .OR.                       &
     551                            ( ( inflow_n .OR. outflow_n .OR. nest_bound_n )    &
     552                              .AND. j == nyn   ) )                             &
     553                   THEN
     554                      wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 12 )
     555                   ELSEIF ( ( k <= nzb_u_inner(j+2,i) .AND.                    &
     556                              k >  nzb_u_inner(j+1,i) ) .OR.                   &
     557                              k <= nzb_u_inner(j-1,i)                          &
     558                                                        .OR.                   &
     559                            ( ( inflow_s .OR. outflow_s .OR. nest_bound_s )    &
     560                              .AND. j == nysv  )    .OR.                       &
     561                            ( ( inflow_n .OR. outflow_n .OR. nest_bound_n )    &
     562                              .AND. j == nyn-1 ) )                             &
     563                   THEN
     564                      wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 13 )
     565!
     566!--                   Clear flag for WS1
     567                      wall_flags_0(k,j,i) = IBCLR( wall_flags_0(k,j,i), 12 )
     568                   ELSEIF ( k > nzb_u_inner(j+1,i) .AND. k > nzb_u_inner(j+2,i)   &
     569                                                   .AND. k > nzb_u_inner(j-1,i) ) &
     570                   THEN
     571                      wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 14 )
     572!
     573!--                   Clear flag for WS1
     574                      wall_flags_0(k,j,i) = IBCLR( wall_flags_0(k,j,i), 12 )
     575                   ENDIF
     576!
     577!--                u component - z-direction
     578!--                WS1 (15), WS3 (16), WS5 (17)
     579                   flag_set = .FALSE.
     580                   IF ( k == nzb_u_inner(j,i) + 1 .OR. k == nzt )  THEN
     581                      wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 15 )
     582                      flag_set = .TRUE.
     583                   ELSEIF ( k == nzb_u_inner(j,i) + 2 .OR. k == nzt - 1 )  THEN
     584                      wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 16 )
     585                      flag_set = .TRUE.
     586                   ELSEIF ( k > nzb_u_inner(j,i) .AND. .NOT. flag_set )  THEN
     587                      wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 17 )
     588                   ENDIF
     589
     590                ENDDO
     591             ENDDO
     592          ENDDO
     593
     594          DO  i = nxl, nxr
     595             DO  j = nys, nyn
     596                DO  k = nzb+1, nzt
     597!
     598!--                At first, set flags to WS1.
     599!--                Since fluxes are swapped in advec_ws.f90, this is necessary to
     600!--                in order to handle the left/south flux.
     601                   wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 18 )
     602                   wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 21 )
     603!
     604!--                v component - x-direction
     605!--                WS1 (18), WS3 (19), WS5 (20)
     606                   IF ( k <= nzb_v_inner(j,i+1) .OR.                           &
     607                            ( ( inflow_l .OR. outflow_l .OR. nest_bound_l )    &
     608                              .AND. i == nxl   )    .OR.                       &
     609                            ( ( inflow_r .OR. outflow_r .OR. nest_bound_r )    &
     610                              .AND. i == nxr   ) )                             &
     611                  THEN
     612                      wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 18 )
     613!
     614!--                WS3
     615                   ELSEIF ( ( k <= nzb_v_inner(j,i+2) .AND.                    &
     616                              k >  nzb_v_inner(j,i+1) ) .OR.                   &
     617                              k <= nzb_v_inner(j,i-1)                          &
     618                                                    .OR.                       &
     619                            ( ( inflow_r .OR. outflow_r .OR. nest_bound_r )    &
     620                              .AND. i == nxr-1 )    .OR.                       &
     621                            ( ( inflow_l .OR. outflow_l .OR. nest_bound_l )    &
     622                              .AND. i == nxlu  ) )                             &
     623                   THEN
     624                      wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 19 )
     625!
     626!--                   Clear flag for WS1
     627                      wall_flags_0(k,j,i) = IBCLR( wall_flags_0(k,j,i), 18 )
     628                   ELSEIF ( k > nzb_v_inner(j,i+1) .AND. k > nzb_v_inner(j,i+2)   &
     629                                                   .AND. k > nzb_v_inner(j,i-1) ) &
     630                   THEN
     631                      wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 20 )
     632!
     633!--                   Clear flag for WS1
     634                      wall_flags_0(k,j,i) = IBCLR( wall_flags_0(k,j,i), 18 )
     635                   ENDIF
     636!
     637!--                v component - y-direction
     638!--                WS1 (21), WS3 (22), WS5 (23)
     639                   IF ( k <= nzb_v_inner(j+1,i) .OR.                           &
     640                            ( ( inflow_s .OR. outflow_s .OR. nest_bound_s )    &
     641                              .AND. j <= nysv  )    .OR.                       &
     642                            ( ( inflow_n .OR. outflow_n .OR. nest_bound_n )    &
     643                              .AND. j == nyn   ) )                             &
     644                   THEN
     645                      wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 21 )
     646                   ELSEIF ( ( k <= nzb_v_inner(j+2,i) .AND.                    &
     647                              k >  nzb_v_inner(j+1,i) ) .OR.                   &
     648                              k <= nzb_v_inner(j-1,i)                          &
     649                                                        .OR.                   &
     650                            ( ( inflow_s .OR. outflow_s .OR. nest_bound_s )    &
     651                              .AND. j == nysv+1)    .OR.                       &
     652                            ( ( inflow_n .OR. outflow_n .OR. nest_bound_n )    &
     653                              .AND. j == nyn-1 ) )                             &
     654                   THEN
     655                      wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 22 )
     656!
     657!--                   Clear flag for WS1
     658                      wall_flags_0(k,j,i) = IBCLR( wall_flags_0(k,j,i), 21 )
     659                   ELSEIF ( k > nzb_v_inner(j+1,i) .AND. k > nzb_v_inner(j+2,i)   &
     660                                                   .AND. k > nzb_v_inner(j-1,i) ) &
     661                   THEN
     662                      wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 23 )
     663!
     664!--                   Clear flag for WS1
     665                      wall_flags_0(k,j,i) = IBCLR( wall_flags_0(k,j,i), 21 )
     666                   ENDIF
     667!
     668!--                v component - z-direction
     669!--                WS1 (24), WS3 (25), WS5 (26)
     670                   flag_set = .FALSE.
     671                   IF ( k == nzb_v_inner(j,i) + 1 .OR. k == nzt )  THEN
     672                      wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 24 )
     673                      flag_set = .TRUE.
     674                   ELSEIF ( k == nzb_v_inner(j,i) + 2 .OR. k == nzt - 1 )  THEN
     675                      wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 25 )
     676                      flag_set = .TRUE.
     677                   ELSEIF ( k > nzb_v_inner(j,i) .AND. .NOT. flag_set )  THEN
     678                      wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 26 )
     679                   ENDIF
     680
     681                ENDDO
     682             ENDDO
     683          ENDDO
     684          DO  i = nxl, nxr
     685             DO  j = nys, nyn
     686                DO  k = nzb+1, nzt
     687!
     688!--                At first, set flags to WS1.
     689!--                Since fluxes are swapped in advec_ws.f90, this is necessary to
     690!--                in order to handle the left/south flux.
     691                   wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 27 )
     692                   wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 30 )
     693!
     694!--                w component - x-direction
     695!--                WS1 (27), WS3 (28), WS5 (29)
     696                   IF ( k <= nzb_w_inner(j,i+1) .OR.                           &
     697                            ( ( inflow_l .OR. outflow_l .OR. nest_bound_l )    &
     698                              .AND. i == nxl   )    .OR.                       &
     699                            ( ( inflow_r .OR. outflow_r .OR. nest_bound_r )    &
     700                              .AND. i == nxr   ) )                             &
     701                   THEN
     702                      wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 27 )
     703                   ELSEIF ( ( k <= nzb_w_inner(j,i+2) .AND.                    &
     704                              k >  nzb_w_inner(j,i+1) ) .OR.                   &
     705                              k <= nzb_w_inner(j,i-1)                          &
     706                                                        .OR.                   &
     707                            ( ( inflow_r .OR. outflow_r .OR. nest_bound_r )    &
     708                              .AND. i == nxr-1 )    .OR.                       &
     709                            ( ( inflow_l .OR. outflow_l .OR. nest_bound_l )    &
     710                              .AND. i == nxlu  ) )                             &
     711                   THEN
     712                      wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 28 )
     713!   
     714!--                   Clear flag for WS1
     715                      wall_flags_0(k,j,i) = IBCLR( wall_flags_0(k,j,i), 27 )
     716                   ELSEIF ( k > nzb_w_inner(j,i+1) .AND. k > nzb_w_inner(j,i+2)   &
     717                                                   .AND. k > nzb_w_inner(j,i-1) ) &
     718                   THEN
     719                      wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i),29 )
     720!   
     721!--                   Clear flag for WS1
     722                      wall_flags_0(k,j,i) = IBCLR( wall_flags_0(k,j,i), 27 )
     723                   ENDIF
     724!
     725!--                w component - y-direction
     726!--                WS1 (30), WS3 (31), WS5 (32)
     727                   IF ( k <= nzb_w_inner(j+1,i) .OR.                           &
     728                            ( ( inflow_s .OR. outflow_s .OR. nest_bound_s )    &
     729                              .AND. j == nys   )    .OR.                       &
     730                            ( ( inflow_n .OR. outflow_n .OR. nest_bound_n )    &
     731                              .AND. j == nyn   ) )                             &
     732                   THEN
     733                      wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 30 )
     734                   ELSEIF ( ( k <= nzb_w_inner(j+2,i) .AND.                    &
     735                              k >  nzb_w_inner(j+1,i) ) .OR.                   &
     736                               k <= nzb_w_inner(j-1,i)                         &
     737                                                        .OR.                   &
     738                            ( ( inflow_s .OR. outflow_s .OR. nest_bound_s )    &
     739                              .AND. j == nysv  )    .OR.                       &
     740                            ( ( inflow_n .OR. outflow_n .OR. nest_bound_n )    &
     741                              .AND. j == nyn-1 ) )                             &
     742                   THEN
     743                      wall_flags_0(k,j,i) = IBSET( wall_flags_0(k,j,i), 31 )
     744!
     745!--                   Clear flag for WS1
     746                      wall_flags_0(k,j,i) = IBCLR( wall_flags_0(k,j,i), 30 )
     747                   ELSEIF ( k > nzb_w_inner(j+1,i) .AND. k > nzb_w_inner(j+2,i)   &
     748                                                   .AND. k > nzb_w_inner(j-1,i) ) &
     749                   THEN
     750                      wall_flags_00(k,j,i) = IBSET( wall_flags_00(k,j,i), 0 )
     751!
     752!--                   Clear flag for WS1
     753                      wall_flags_0(k,j,i) = IBCLR( wall_flags_0(k,j,i), 30 )
     754                   ENDIF
     755!
     756!--                w component - z-direction
     757!--                WS1 (33), WS3 (34), WS5 (35)
     758                   flag_set = .FALSE.
     759                   IF ( k == nzb_w_inner(j,i) .OR. k == nzb_w_inner(j,i) + 1   &
     760                                              .OR. k == nzt )  THEN
     761!
     762!--                   Please note, at k == nzb_w_inner(j,i) a flag is explictely
     763!--                   set, although this is not a prognostic level. However,
     764!--                   contrary to the advection of u,v and s this is necessary
     765!--                   because flux_t(nzb_w_inner(j,i)) is used for the tendency
     766!--                   at k == nzb_w_inner(j,i)+1.
     767                      wall_flags_00(k,j,i) = IBSET( wall_flags_00(k,j,i), 1 )
     768                      flag_set = .TRUE.
     769                   ELSEIF ( k == nzb_w_inner(j,i) + 2 .OR. k == nzt - 1 )  THEN
     770                      wall_flags_00(k,j,i) = IBSET( wall_flags_00(k,j,i), 2 )
     771                      flag_set = .TRUE.
     772                   ELSEIF ( k > nzb_w_inner(j,i) .AND. .NOT. flag_set )  THEN
     773                      wall_flags_00(k,j,i) = IBSET( wall_flags_00(k,j,i), 3 )
     774                   ENDIF
     775
     776                ENDDO
     777             ENDDO
     778          ENDDO
     779
     780       ENDIF
     781
     782
     783!
     784!--    Exchange 3D integer wall_flags.
     785       IF ( momentum_advec == 'ws-scheme' .OR. scalar_advec == 'ws-scheme'  &
     786       .OR. scalar_advec == 'ws-scheme-mono' )  THEN 
     787!
     788!--       Exchange ghost points for advection flags
     789          CALL exchange_horiz_int( wall_flags_0,  nbgp )
     790          CALL exchange_horiz_int( wall_flags_00, nbgp )
     791!
     792!--       Set boundary flags at inflow and outflow boundary in case of
     793!--       non-cyclic boundary conditions.
     794         IF ( inflow_l .OR. outflow_l .OR. nest_bound_l )  THEN
     795             wall_flags_0(:,:,nxl-1)  = wall_flags_0(:,:,nxl)
     796             wall_flags_00(:,:,nxl-1) = wall_flags_00(:,:,nxl)
     797         ENDIF
     798
     799         IF ( inflow_r .OR. outflow_r .OR. nest_bound_r )  THEN
     800            wall_flags_0(:,:,nxr+1)  = wall_flags_0(:,:,nxr)
     801            wall_flags_00(:,:,nxr+1) = wall_flags_00(:,:,nxr)
     802          ENDIF
     803
     804          IF ( inflow_n .OR. outflow_n .OR. nest_bound_n )  THEN
     805             wall_flags_0(:,nyn+1,:)  = wall_flags_0(:,nyn,:)
     806             wall_flags_00(:,nyn+1,:) = wall_flags_00(:,nyn,:)
     807          ENDIF
     808
     809          IF ( inflow_s .OR. outflow_s  .OR. nest_bound_s )  THEN
     810             wall_flags_0(:,nys-1,:)  = wall_flags_0(:,nys,:)
     811             wall_flags_00(:,nys-1,:) = wall_flags_00(:,nys,:)
     812          ENDIF
     813 
     814       ENDIF
     815
     816
     817    END SUBROUTINE ws_init_flags
    366818
    367819
Note: See TracChangeset for help on using the changeset viewer.