Ignore:
Timestamp:
Apr 28, 2014 12:40:45 PM (10 years ago)
Author:
heinze
Message:

Upper boundary conditions for pt and q in case of nudging adjusted

File:
1 edited

Legend:

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

    r1366 r1380  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! Shifting only necessary in case of scalar Rayleigh damping
    2323!
    2424! Former revisions:
     
    150150
    151151       USE control_parameters,                                                 &
    152            ONLY:  dt_3d, intermediate_timestep_count, large_scale_forcing
     152           ONLY:  dt_3d, intermediate_timestep_count, large_scale_forcing,     &
     153                  scalar_rayleigh_damping
    153154
    154155       USE indices,                                                            &
     
    204205!--    Shifting of the initial profile is especially necessary with Rayleigh
    205206!--    damping switched on
    206 
    207        DO  k = nzb, nzt
    208           IF ( w_subs(k) < 0.0_wp )  THEN      ! large-scale subsidence
    209              var_mod(k) = var_init(k) - dt_3d * w_subs(k) *  &
    210                                ( var_init(k+1) - var_init(k) ) * ddzu(k+1)
    211           ENDIF
    212        ENDDO
    213 !
    214 !--   At the upper boundary, the initial profile is shifted with aid of
    215 !--   the gradient tmp_grad. (This is ok if the gradients are linear.)
    216       IF ( w_subs(nzt) < 0.0_wp )  THEN
    217          tmp_grad = ( var_init(nzt+1) - var_init(nzt) ) * ddzu(nzt+1)
    218          var_mod(nzt+1) = var_init(nzt+1) -  &
    219                               dt_3d * w_subs(nzt+1) * tmp_grad
     207       IF ( scalar_rayleigh_damping ) THEN
     208          DO  k = nzb, nzt
     209             IF ( w_subs(k) < 0.0_wp )  THEN      ! large-scale subsidence
     210                var_mod(k) = var_init(k) - dt_3d * w_subs(k) *  &
     211                                  ( var_init(k+1) - var_init(k) ) * ddzu(k+1)
     212             ENDIF
     213          ENDDO
     214!
     215!--      At the upper boundary, the initial profile is shifted with aid of
     216!--      the gradient tmp_grad. (This is ok if the gradients are linear.)
     217         IF ( w_subs(nzt) < 0.0_wp )  THEN
     218            tmp_grad = ( var_init(nzt+1) - var_init(nzt) ) * ddzu(nzt+1)
     219            var_mod(nzt+1) = var_init(nzt+1) -  &
     220                                 dt_3d * w_subs(nzt+1) * tmp_grad
     221         ENDIF
     222       
     223
     224         DO  k = nzt+1, nzb+1, -1
     225            IF ( w_subs(k) >= 0.0_wp )  THEN  ! large-scale ascent
     226               var_mod(k) = var_init(k) - dt_3d * w_subs(k) *  &
     227                                  ( var_init(k) - var_init(k-1) ) * ddzu(k)
     228            ENDIF
     229         ENDDO
     230!
     231!--      At the lower boundary shifting is not necessary because the
     232!--      subsidence velocity w_subs(nzb) vanishes.
     233         IF ( w_subs(nzb+1) >= 0.0_wp )  THEN
     234            var_mod(nzb) = var_init(nzb)
     235         ENDIF
     236
     237         var_init = var_mod
    220238      ENDIF
    221        
    222 
    223       DO  k = nzt+1, nzb+1, -1
    224          IF ( w_subs(k) >= 0.0_wp )  THEN  ! large-scale ascent
    225             var_mod(k) = var_init(k) - dt_3d * w_subs(k) *  &
    226                                ( var_init(k) - var_init(k-1) ) * ddzu(k)
    227          ENDIF
    228       ENDDO
    229 !
    230 !--   At the lower boundary shifting is not necessary because the
    231 !--   subsidence velocity w_subs(nzb) vanishes.
    232       IF ( w_subs(nzb+1) >= 0.0_wp )  THEN
    233          var_mod(nzb) = var_init(nzb)
    234       ENDIF
    235 
    236       var_init = var_mod
    237239
    238240
     
    245247
    246248       USE control_parameters,                                                 &
    247            ONLY:  dt_3d, intermediate_timestep_count, large_scale_forcing
     249           ONLY:  dt_3d, intermediate_timestep_count, large_scale_forcing,     &
     250                  scalar_rayleigh_damping
    248251
    249252       USE indices,                                                            &
     
    293296!--    Shifting of the initial profile is especially necessary with Rayleigh
    294297!--    damping switched on
    295        IF ( i == nxl .AND. j == nys )  THEN ! shifting only once per PE
    296 
    297           DO  k = nzb, nzt
    298              IF ( w_subs(k) < 0.0_wp )  THEN      ! large-scale subsidence
    299                 var_mod(k) = var_init(k) - dt_3d * w_subs(k) *  &
    300                                   ( var_init(k+1) - var_init(k) ) * ddzu(k+1)
     298       IF ( scalar_rayleigh_damping ) THEN
     299          IF ( i == nxl .AND. j == nys )  THEN ! shifting only once per PE
     300
     301             DO  k = nzb, nzt
     302                IF ( w_subs(k) < 0.0_wp )  THEN      ! large-scale subsidence
     303                   var_mod(k) = var_init(k) - dt_3d * w_subs(k) *  &
     304                                     ( var_init(k+1) - var_init(k) ) * ddzu(k+1)
     305                ENDIF
     306             ENDDO
     307!
     308!--          At the upper boundary, the initial profile is shifted with aid of
     309!--          the gradient tmp_grad. (This is ok if the gradients are linear.)
     310             IF ( w_subs(nzt) < 0.0_wp )  THEN
     311                tmp_grad = ( var_init(nzt+1) - var_init(nzt) ) * ddzu(nzt+1)
     312                var_mod(nzt+1) = var_init(nzt+1) -  &
     313                                     dt_3d * w_subs(nzt+1) * tmp_grad
    301314             ENDIF
    302           ENDDO
    303 !
    304 !--       At the upper boundary, the initial profile is shifted with aid of
    305 !--       the gradient tmp_grad. (This is ok if the gradients are linear.)
    306           IF ( w_subs(nzt) < 0.0_wp )  THEN
    307              tmp_grad = ( var_init(nzt+1) - var_init(nzt) ) * ddzu(nzt+1)
    308              var_mod(nzt+1) = var_init(nzt+1) -  &
    309                                   dt_3d * w_subs(nzt+1) * tmp_grad
     315       
     316
     317             DO  k = nzt+1, nzb+1, -1
     318                IF ( w_subs(k) >= 0.0_wp )  THEN  ! large-scale ascent
     319                   var_mod(k) = var_init(k) - dt_3d * w_subs(k) *  &
     320                                      ( var_init(k) - var_init(k-1) ) * ddzu(k)
     321                ENDIF
     322             ENDDO
     323!
     324!--          At the lower boundary shifting is not necessary because the
     325!--          subsidence velocity w_subs(nzb) vanishes.
     326             IF ( w_subs(nzb+1) >= 0.0_wp )  THEN
     327                var_mod(nzb) = var_init(nzb)
     328             ENDIF
     329
     330             var_init = var_mod
     331
    310332          ENDIF
    311        
    312 
    313           DO  k = nzt+1, nzb+1, -1
    314              IF ( w_subs(k) >= 0.0_wp )  THEN  ! large-scale ascent
    315                 var_mod(k) = var_init(k) - dt_3d * w_subs(k) *  &
    316                                    ( var_init(k) - var_init(k-1) ) * ddzu(k)
    317              ENDIF
    318           ENDDO
    319 !
    320 !--       At the lower boundary shifting is not necessary because the
    321 !--       subsidence velocity w_subs(nzb) vanishes.
    322           IF ( w_subs(nzb+1) >= 0.0_wp )  THEN
    323              var_mod(nzb) = var_init(nzb)
    324           ENDIF
    325 
    326           var_init = var_mod
    327 
    328333       ENDIF
    329334
Note: See TracChangeset for help on using the changeset viewer.