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_u.f90

    r77 r102  
    44! Actual revisions:
    55! -----------------
    6 !
     6! Momentumflux at top (uswst) included as boundary condition
    77!
    88! Former revisions:
     
    5454! Call for all grid points
    5555!------------------------------------------------------------------------------!
    56     SUBROUTINE diffusion_u( ddzu, ddzw, km, km_damp_y, tend, u, usws, v, w )
     56    SUBROUTINE diffusion_u( ddzu, ddzw, km, km_damp_y, tend, u, usws, uswst, &
     57                            v, w )
    5758
    5859       USE control_parameters
     
    6667       REAL    ::  ddzu(1:nzt+1), ddzw(1:nzt+1), km_damp_y(nys-1:nyn+1)
    6768       REAL    ::  tend(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1)
    68        REAL, DIMENSION(:,:),   POINTER ::  usws
     69       REAL, DIMENSION(:,:),   POINTER ::  usws, uswst
    6970       REAL, DIMENSION(:,:,:), POINTER ::  km, u, v, w
    7071       REAL, DIMENSION(nzb:nzt+1,nys:nyn,nxl:nxr) ::  usvs
     
    155156!--          Compute vertical diffusion. In case of simulating a Prandtl layer,
    156157!--          index k starts at nzb_u_inner+2.
    157              DO  k = nzb_diff_u(j,i), nzt
     158             DO  k = nzb_diff_u(j,i), nzt_diff
    158159!
    159160!--             Interpolate eddy diffusivities on staggered gridpoints
     
    195196                      & + ( kmzp * ( w(k,j,i)   - w(k,j,i-1)   ) * ddx       &
    196197                      &   ) * ddzw(k)                                        &
    197                       & + ( kmzp * ( u(k+1,j,i) - u(k,j,i)   ) * ddzu(k+1)  &
     198                      & + ( kmzp * ( u(k+1,j,i) - u(k,j,i)     ) * ddzu(k+1) &
    198199                      &   + usws(j,i)                                        &
     200                      &   ) * ddzw(k)
     201             ENDIF
     202
     203!
     204!--          Vertical diffusion at the first gridpoint below the top boundary,
     205!--          if the momentum flux at the top is prescribed by the user
     206             IF ( use_top_fluxes )  THEN
     207                k = nzt
     208!
     209!--             Interpolate eddy diffusivities on staggered gridpoints
     210                kmzp = 0.25 * &
     211                       ( km(k,j,i)+km(k+1,j,i)+km(k,j,i-1)+km(k+1,j,i-1) )
     212                kmzm = 0.25 * &
     213                       ( km(k,j,i)+km(k-1,j,i)+km(k,j,i-1)+km(k-1,j,i-1) )
     214
     215                tend(k,j,i) = tend(k,j,i)                                    &
     216                      & - ( kmzm * ( w(k-1,j,i) - w(k-1,j,i-1) ) * ddx       &
     217                      &   ) * ddzw(k)                                        &
     218                      & + ( -uswst(j,i)                                      &
     219                      &   - kmzm * ( u(k,j,i)   - u(k-1,j,i)   ) * ddzu(k)   &
    199220                      &   ) * ddzw(k)
    200221             ENDIF
     
    210231!------------------------------------------------------------------------------!
    211232    SUBROUTINE diffusion_u_ij( i, j, ddzu, ddzw, km, km_damp_y, tend, u, usws, &
    212                                v, w )
     233                               uswst, v, w )
    213234
    214235       USE control_parameters
     
    223244       REAL    ::  tend(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1)
    224245       REAL, DIMENSION(nzb:nzt+1)      ::  usvs
    225        REAL, DIMENSION(:,:),   POINTER ::  usws
     246       REAL, DIMENSION(:,:),   POINTER ::  usws, uswst
    226247       REAL, DIMENSION(:,:,:), POINTER ::  km, u, v, w
    227248
     
    303324!--    Compute vertical diffusion. In case of simulating a Prandtl layer,
    304325!--    index k starts at nzb_u_inner+2.
    305        DO  k = nzb_diff_u(j,i), nzt
     326       DO  k = nzb_diff_u(j,i), nzt_diff
    306327!
    307328!--       Interpolate eddy diffusivities on staggered gridpoints
     
    339360                      & + ( kmzp * ( w(k,j,i)   - w(k,j,i-1)   ) * ddx       &
    340361                      &   ) * ddzw(k)                                        &
    341                       & + ( kmzp * ( u(k+1,j,i) - u(k,j,i)   ) * ddzu(k+1)  &
     362                      & + ( kmzp * ( u(k+1,j,i) - u(k,j,i)     ) * ddzu(k+1) &
    342363                      &   + usws(j,i)                                        &
    343364                      &   ) * ddzw(k)
    344365       ENDIF
    345366
     367!
     368!--    Vertical diffusion at the first gridpoint below the top boundary,
     369!--    if the momentum flux at the top is prescribed by the user
     370       IF ( use_top_fluxes )  THEN
     371          k = nzt
     372!
     373!--       Interpolate eddy diffusivities on staggered gridpoints
     374          kmzp = 0.25 * &
     375                 ( km(k,j,i)+km(k+1,j,i)+km(k,j,i-1)+km(k+1,j,i-1) )
     376          kmzm = 0.25 * &
     377                 ( km(k,j,i)+km(k-1,j,i)+km(k,j,i-1)+km(k-1,j,i-1) )
     378
     379          tend(k,j,i) = tend(k,j,i)                                          &
     380                      & - ( kmzm * ( w(k-1,j,i) - w(k-1,j,i-1) ) * ddx       &
     381                      &   ) * ddzw(k)                                        &
     382                      & + ( -uswst(j,i)                                      &
     383                      &   - kmzm * ( u(k,j,i)   - u(k-1,j,i)   ) * ddzu(k)   &
     384                      &   ) * ddzw(k)
     385       ENDIF
     386
    346387    END SUBROUTINE diffusion_u_ij
    347388
Note: See TracChangeset for help on using the changeset viewer.