Ignore:
Timestamp:
Mar 7, 2007 8:38:00 AM (15 years ago)
Author:
raasch
Message:

preliminary version, several changes to be explained later

File:
1 edited

Legend:

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

    r39 r51  
    44! Actual revisions:
    55! -----------------
    6 !
     6! wall functions now include diabatic conditions, call of routine wall_fluxes
    77!
    88! Former revisions:
     
    5454       INTEGER ::  i, j, k
    5555       REAL    ::  kmxm_x, kmxm_z, kmxp_x, kmxp_z, kmym_y, kmym_z, kmyp_y, &
    56                    kmyp_z, wsus, wsvs
     56                   kmyp_z
    5757       REAL    ::  ddzu(1:nzt+1), ddzw(1:nzt+1), km_damp_x(nxl-1:nxr+1), &
    5858                   km_damp_y(nys-1:nyn+1)
    5959       REAL    ::  z0(nys-1:nyn+1,nxl-1:nxr+1)
    6060       REAL    ::  tend(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1)
     61       REAL, DIMENSION(nzb:nzt+1)      ::  wsus, wsvs
    6162       REAL, DIMENSION(:,:,:), POINTER ::  km, u, v, w
    6263
     
    113114!--          Wall functions at all vertical walls, where necessary
    114115             IF ( wall_w_x(j,i) /= 0.0  .OR.  wall_w_y(j,i) /= 0.0 )  THEN
     116
     117!
     118!--             Calculate the horizontal momentum fluxes w'u' and/or w'v'
     119                IF ( wall_w_x(j,i) /= 0.0 )  THEN
     120                   CALL wall_fluxes( i, j, nzb_w_inner(j,i)+1,              &
     121                                     nzb_w_outer(j,i), wsus, 0.0, 0.0, 0.0, &
     122                                     1.0 )
     123                ELSE
     124                   wsus = 0.0
     125                ENDIF
     126
     127                IF ( wall_w_y(j,i) /= 0.0 )  THEN
     128                   CALL wall_fluxes( i, j, nzb_w_inner(j,i)+1,              &
     129                                     nzb_w_outer(j,i), wsvs, 0.0, 0.0, 1.0, &
     130                                     0.0 )
     131                ELSE
     132                   wsvs = 0.0
     133                ENDIF
     134
    115135                DO  k = nzb_w_inner(j,i)+1, nzb_w_outer(j,i)
    116                    IF ( wall_w_x(j,i) /= 0.0 )  THEN
    117                       wsus = kappa * w(k,j,i) / LOG( 0.5 * dx / z0(j,i))
    118                       wsus = -wsus * ABS( wsus )
    119                    ELSE
    120                       wsus = 0.0
    121                    ENDIF
    122                    IF ( wall_w_y(j,i) /= 0.0 )  THEN
    123                       wsvs = kappa * w(k,j,i) / LOG( 0.5 * dy / z0(j,i))
    124                       wsvs = -wsvs * ABS( wsvs )
    125                    ELSE
    126                       wsvs = 0.0
    127                    ENDIF
    128136!
    129137!--                Interpolate eddy diffusivities on staggered gridpoints
     
    163171                          + kmxm_z * ( u(k+1,j,i)   - u(k,j,i)   ) * ddzu(k+1) &
    164172                                                   )                           &
    165                                      + wall_w_x(j,i) * wsus                    &
     173                                     + wall_w_x(j,i) * wsus(k)                 &
    166174                                   ) * ddx                                     &
    167175                                 + (   fwyp(j,i) * (                           &
     
    173181                          + kmym_z * ( v(k+1,j,i)   - v(k,j,i)   ) * ddzu(k+1) &
    174182                                                   )                           &
    175                                      + wall_w_y(j,i) * wsvs                    &
     183                                     + wall_w_y(j,i) * wsvs(k)                 &
    176184                                   ) * ddy                                     &
    177185                                 + 2.0 * (                                     &
     
    202210       INTEGER ::  i, j, k
    203211       REAL    ::  kmxm_x, kmxm_z, kmxp_x, kmxp_z, kmym_y, kmym_z, kmyp_y, &
    204                    kmyp_z, wsus, wsvs
     212                   kmyp_z
    205213       REAL    ::  ddzu(1:nzt+1), ddzw(1:nzt+1), km_damp_x(nxl-1:nxr+1), &
    206214                   km_damp_y(nys-1:nyn+1)
    207215       REAL    ::  z0(nys-1:nyn+1,nxl-1:nxr+1)
    208216       REAL    ::  tend(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1)
     217       REAL, DIMENSION(nzb:nzt+1)      ::  wsus, wsvs
    209218       REAL, DIMENSION(:,:,:), POINTER ::  km, u, v, w
    210219
     
    255264!--    Wall functions at all vertical walls, where necessary
    256265       IF ( wall_w_x(j,i) /= 0.0  .OR.  wall_w_y(j,i) /= 0.0 )  THEN
     266
     267!
     268!--       Calculate the horizontal momentum fluxes w'u' and/or w'v'
     269          IF ( wall_w_x(j,i) /= 0.0 )  THEN
     270             CALL wall_fluxes( i, j, nzb_w_inner(j,i)+1, nzb_w_outer(j,i), &
     271                               wsus, 0.0, 0.0, 0.0, 1.0 )
     272          ELSE
     273             wsus = 0.0
     274          ENDIF
     275
     276          IF ( wall_w_y(j,i) /= 0.0 )  THEN
     277             CALL wall_fluxes( i, j, nzb_w_inner(j,i)+1, nzb_w_outer(j,i),  &
     278                               wsvs, 0.0, 0.0, 1.0, 0.0 )
     279          ELSE
     280             wsvs = 0.0
     281          ENDIF
     282
    257283          DO  k = nzb_w_inner(j,i)+1, nzb_w_outer(j,i)
    258              IF ( wall_w_x(j,i) /= 0.0 )  THEN
    259                 wsus = kappa * w(k,j,i) / LOG( 0.5 * dx / z0(j,i))
    260                 wsus = -wsus * ABS( wsus )
    261              ELSE
    262                 wsus = 0.0
    263              ENDIF
    264              IF ( wall_w_y(j,i) /= 0.0 )  THEN
    265                 wsvs = kappa * w(k,j,i) / LOG( 0.5 * dy / z0(j,i))
    266                 wsvs = -wsvs * ABS( wsvs )
    267              ELSE
    268                 wsvs = 0.0
    269              ENDIF
    270284!
    271285!--          Interpolate eddy diffusivities on staggered gridpoints
     
    301315                          + kmxm_z * ( u(k+1,j,i)   - u(k,j,i)   ) * ddzu(k+1) &
    302316                                                   )                           &
    303                                      + wall_w_x(j,i) * wsus                    &
     317                                     + wall_w_x(j,i) * wsus(k)                 &
    304318                                   ) * ddx                                     &
    305319                                 + (   fwyp(j,i) * (                           &
     
    311325                          + kmym_z * ( v(k+1,j,i)   - v(k,j,i)   ) * ddzu(k+1) &
    312326                                                   )                           &
    313                                      + wall_w_y(j,i) * wsvs                    &
     327                                     + wall_w_y(j,i) * wsvs(k)                 &
    314328                                   ) * ddy                                     &
    315329                                 + 2.0 * (                                     &
Note: See TracChangeset for help on using the changeset viewer.