Ignore:
Timestamp:
Feb 23, 2007 4:53:48 AM (17 years ago)
Author:
raasch
Message:

preliminary version of modified boundary conditions at top

File:
1 edited

Legend:

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

    r4 r19  
    44! Actual revisions:
    55! -----------------
    6 !
     6! Calculation extended for gridpoint nzt, fluxes can be given at top,
     7! +s_flux_t in parameter list, s_flux renamed s_flux_b
    78!
    89! Former revisions:
     
    3940! Call for all grid points
    4041!------------------------------------------------------------------------------!
    41     SUBROUTINE diffusion_s( ddzu, ddzw, kh, s, s_flux, tend )
     42    SUBROUTINE diffusion_s( ddzu, ddzw, kh, s, s_flux_b, s_flux_t, tend )
    4243
    4344       USE control_parameters
     
    5152       REAL    ::  ddzu(1:nzt+1), ddzw(1:nzt)
    5253       REAL    ::  tend(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1)
    53        REAL, DIMENSION(:,:),   POINTER ::  s_flux
     54       REAL, DIMENSION(:,:),   POINTER ::  s_flux_b, s_flux_t
    5455       REAL, DIMENSION(:,:,:), POINTER ::  kh, s
    5556
     
    5859!
    5960!--          Compute horizontal diffusion
    60              DO  k = nzb_s_outer(j,i)+1, nzt-1
     61             DO  k = nzb_s_outer(j,i)+1, nzt
    6162
    6263                tend(k,j,i) = tend(k,j,i)                                     &
     
    9798!
    9899!--          Compute vertical diffusion. In case that surface fluxes have been
    99 !--          presribed or computed, index k starts at nzb+2.
    100              DO  k = nzb_diff_s_inner(j,i), nzt-1
     100!--          prescribed or computed at bottom and/or top, index k starts/ends at
     101!--          nzb+2 or nzt-1, respectively.
     102             DO  k = nzb_diff_s_inner(j,i), nzt_diff
    101103
    102104                tend(k,j,i) = tend(k,j,i)                                     &
     
    108110
    109111!
    110 !--          Vertical diffusion at the first computational gridpoint in &
     112!--          Vertical diffusion at the first computational gridpoint along
    111113!--          z-direction
    112114             IF ( use_surface_fluxes )  THEN
     
    118120                                               * ( s(k+1,j,i)-s(k,j,i) )      &
    119121                                               * ddzu(k+1)                    &
    120                                            + s_flux(j,i)                      &
     122                                           + s_flux_b(j,i)                    &
     123                                         ) * ddzw(k)
     124
     125             ENDIF
     126
     127!
     128!--          Vertical diffusion at the last computational gridpoint along
     129!--          z-direction
     130             IF ( use_top_fluxes )  THEN
     131
     132                k = nzt
     133
     134                tend(k,j,i) = tend(k,j,i)                                     &
     135                                       + ( - s_flux_t(j,i)                    &
     136                                         - 0.5 * ( kh(k-1,j,i)+kh(k,j,i) )    &
     137                                               * ( s(k,j,i)-s(k-1,j,i) )      &
     138                                               * ddzu(k)                      &
    121139                                         ) * ddzw(k)
    122140
     
    132150! Call for grid point i,j
    133151!------------------------------------------------------------------------------!
    134     SUBROUTINE diffusion_s_ij( i, j, ddzu, ddzw, kh, s, s_flux, tend )
     152    SUBROUTINE diffusion_s_ij( i, j, ddzu, ddzw, kh, s, s_flux_b, s_flux_t, &
     153                               tend )
    135154
    136155       USE control_parameters
     
    144163       REAL    ::  ddzu(1:nzt+1), ddzw(1:nzt)
    145164       REAL    ::  tend(nzb:nzt+1,nys-1:nyn+1,nxl-1:nxr+1)
    146        REAL, DIMENSION(:,:),   POINTER ::  s_flux
     165       REAL, DIMENSION(:,:),   POINTER ::  s_flux_b, s_flux_t
    147166       REAL, DIMENSION(:,:,:), POINTER ::  kh, s
    148167
    149168!
    150169!--    Compute horizontal diffusion
    151        DO  k = nzb_s_outer(j,i)+1, nzt-1
     170       DO  k = nzb_s_outer(j,i)+1, nzt
    152171
    153172          tend(k,j,i) = tend(k,j,i)                                           &
     
    188207!
    189208!--    Compute vertical diffusion. In case that surface fluxes have been
    190 !--    presribed or computed, index k starts at nzb+2.
    191        DO  k = nzb_diff_s_inner(j,i), nzt-1
     209!--    prescribed or computed at bottom and/or top, index k starts/ends at
     210!--    nzb+2 or nzt-1, respectively.
     211       DO  k = nzb_diff_s_inner(j,i), nzt_diff
    192212
    193213          tend(k,j,i) = tend(k,j,i)                                           &
     
    199219
    200220!
    201 !--    Vertical diffusion at the first computational gridpoint in z-direction
     221!--    Vertical diffusion at the first computational gridpoint along z-direction
    202222       IF ( use_surface_fluxes )  THEN
    203223
    204224          k = nzb_s_inner(j,i)+1
    205225
    206           tend(k,j,i) = tend(k,j,i)                                           &
    207                                        + ( 0.5 * ( kh(k,j,i)+kh(k+1,j,i) )    &
    208                                                * ( s(k+1,j,i)-s(k,j,i) )      &
    209                                                * ddzu(k+1)                    &
    210                                            + s_flux(j,i)                      &
    211                                          ) * ddzw(k)
     226          tend(k,j,i) = tend(k,j,i) + ( 0.5 * ( kh(k,j,i)+kh(k+1,j,i) )  &
     227                                            * ( s(k+1,j,i)-s(k,j,i) )    &
     228                                            * ddzu(k+1)                  &
     229                                        + s_flux_b(j,i)                  &
     230                                      ) * ddzw(k)
    212231
    213232       ENDIF
    214233
     234!
     235!--    Vertical diffusion at the last computational gridpoint along z-direction
     236       IF ( use_top_fluxes )  THEN
     237
     238          k = nzt
     239
     240          tend(k,j,i) = tend(k,j,i) + ( - s_flux_t(j,i)                  &
     241                                      - 0.5 * ( kh(k-1,j,i)+kh(k,j,i) )  &
     242                                            * ( s(k,j,i)-s(k-1,j,i) )    &
     243                                            * ddzu(k)                    &
     244                                      ) * ddzw(k)
     245
     246       ENDIF
     247
    215248    END SUBROUTINE diffusion_s_ij
    216249
Note: See TracChangeset for help on using the changeset viewer.