Ignore:
Timestamp:
Jul 27, 2007 9:09:17 AM (14 years ago)
Author:
raasch
Message:

preliminary version for coupled runs

File:
1 edited

Legend:

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

    r77 r102  
    44! Actual revisions:
    55! -----------------
    6 !
     6! Momentumflux at top (vswst) included as boundary condition
    77!
    88! Former revisions:
     
    5252! Call for all grid points
    5353!------------------------------------------------------------------------------!
    54     SUBROUTINE diffusion_v( ddzu, ddzw, km, km_damp_x, tend, u, v, vsws, w )
     54    SUBROUTINE diffusion_v( ddzu, ddzw, km, km_damp_x, tend, u, v, vsws, &
     55                            vswst, w )
    5556
    5657       USE control_parameters
     
    6465       REAL    ::  ddzu(1:nzt+1), ddzw(1:nzt+1), km_damp_x(nxl-1:nxr+1)
    6566       REAL    ::  tend(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1)
    66        REAL, DIMENSION(:,:),   POINTER ::  vsws
     67       REAL, DIMENSION(:,:),   POINTER ::  vsws, vswst
    6768       REAL, DIMENSION(:,:,:), POINTER ::  km, u, v, w
    6869       REAL, DIMENSION(nzb:nzt+1,nys:nyn,nxl:nxr) ::  vsus
     
    153154!--          Compute vertical diffusion. In case of simulating a Prandtl
    154155!--          layer, index k starts at nzb_v_inner+2.
    155              DO  k = nzb_diff_v(j,i), nzt
     156             DO  k = nzb_diff_v(j,i), nzt_diff
    156157!
    157158!--             Interpolate eddy diffusivities on staggered gridpoints
     
    193194                      & + ( kmzp * ( w(k,j,i) - w(k,j-1,i)     ) * ddy       &
    194195                      &   ) * ddzw(k)                                        &
    195                       & + ( kmzp * ( v(k+1,j,i) - v(k,j,i) ) * ddzu(k+1)    &
     196                      & + ( kmzp * ( v(k+1,j,i) - v(k,j,i)     ) * ddzu(k+1) &
    196197                      &   + vsws(j,i)                                        &
     198                      &   ) * ddzw(k)
     199             ENDIF
     200
     201!
     202!--          Vertical diffusion at the first gridpoint below the top boundary,
     203!--          if the momentum flux at the top is prescribed by the user
     204             IF ( use_top_fluxes )  THEN
     205                k = nzt
     206!
     207!--             Interpolate eddy diffusivities on staggered gridpoints
     208                kmzp = 0.25 * &
     209                       ( km(k,j,i)+km(k+1,j,i)+km(k,j-1,i)+km(k+1,j-1,i) )
     210                kmzm = 0.25 * &
     211                       ( km(k,j,i)+km(k-1,j,i)+km(k,j-1,i)+km(k-1,j-1,i) )
     212
     213                tend(k,j,i) = tend(k,j,i)                                    &
     214                      & - ( kmzm *  ( w(k-1,j,i) - w(k-1,j-1,i) ) * ddy      &
     215                      &   ) * ddzw(k)                                        &
     216                      & + ( -vswst(j,i)                                      &
     217                      &   - kmzm * ( v(k,j,i)   - v(k-1,j,i)    ) * ddzu(k)  &
    197218                      &   ) * ddzw(k)
    198219             ENDIF
     
    208229!------------------------------------------------------------------------------!
    209230    SUBROUTINE diffusion_v_ij( i, j, ddzu, ddzw, km, km_damp_x, tend, u, v, &
    210                                vsws, w )
     231                               vsws, vswst, w )
    211232
    212233       USE control_parameters
     
    221242       REAL    ::  tend(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1)
    222243       REAL, DIMENSION(nzb:nzt+1)      ::  vsus
    223        REAL, DIMENSION(:,:),   POINTER ::  vsws
     244       REAL, DIMENSION(:,:),   POINTER ::  vsws, vswst
    224245       REAL, DIMENSION(:,:,:), POINTER ::  km, u, v, w
    225246
     
    302323!--    Compute vertical diffusion. In case of simulating a Prandtl layer,
    303324!--    index k starts at nzb_v_inner+2.
    304        DO  k = nzb_diff_v(j,i), nzt
     325       DO  k = nzb_diff_v(j,i), nzt_diff
    305326!
    306327!--       Interpolate eddy diffusivities on staggered gridpoints
     
    338359                      & + ( kmzp * ( w(k,j,i) - w(k,j-1,i)     ) * ddy       &
    339360                      &   ) * ddzw(k)                                        &
    340                       & + ( kmzp * ( v(k+1,j,i) - v(k,j,i) ) * ddzu(k+1)    &
     361                      & + ( kmzp * ( v(k+1,j,i) - v(k,j,i)     ) * ddzu(k+1) &
    341362                      &   + vsws(j,i)                                        &
    342363                      &   ) * ddzw(k)
    343364       ENDIF
    344365
     366!
     367!--    Vertical diffusion at the first gridpoint below the top boundary,
     368!--    if the momentum flux at the top is prescribed by the user
     369       IF ( use_top_fluxes )  THEN
     370          k = nzt
     371!
     372!--       Interpolate eddy diffusivities on staggered gridpoints
     373          kmzp = 0.25 * &
     374                 ( km(k,j,i)+km(k+1,j,i)+km(k,j-1,i)+km(k+1,j-1,i) )
     375          kmzm = 0.25 * &
     376                 ( km(k,j,i)+km(k-1,j,i)+km(k,j-1,i)+km(k-1,j-1,i) )
     377
     378          tend(k,j,i) = tend(k,j,i)                                          &
     379                      & - ( kmzm *  ( w(k-1,j,i) - w(k-1,j-1,i) ) * ddy      &
     380                      &   ) * ddzw(k)                                        &
     381                      & + ( -vswst(j,i)                                      &
     382                      &   - kmzm * ( v(k,j,i)   - v(k-1,j,i)    ) * ddzu(k)  &
     383                      &   ) * ddzw(k)
     384       ENDIF
     385
    345386    END SUBROUTINE diffusion_v_ij
    346387
Note: See TracChangeset for help on using the changeset viewer.