Ignore:
Timestamp:
Nov 20, 2007 9:46:11 AM (16 years ago)
Author:
letzel
Message:

Vertical profiles now based on nzb_s_inner; they are divided by
ngp_2dh_s_inner (scalars, procucts of scalars and velocity components) and
ngp_2dh (staggered velocity components and their products), respectively.

Allow new case bc_uv_t = 'dirichlet_0' for channel flow.

File:
1 edited

Legend:

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

    r110 r132  
    77! Actual revisions:
    88! -----------------
    9 !
     9! New counter ngp_2dh_s_inner.
     10! Allow new case bc_uv_t = 'dirichlet_0' for channel flow.
     11! Corrected calculation of initial volume flow for 'set_1d-model_profiles' and
     12! 'set_constant_profiles' in case of buildings in the reference cross-sections.
    1013!
    1114! Former revisions:
     
    8083    INTEGER, DIMENSION(:), ALLOCATABLE ::  ngp_2dh_l, ngp_3d_inner_l
    8184
    82     INTEGER, DIMENSION(:,:), ALLOCATABLE ::  ngp_2dh_outer_l
     85    INTEGER, DIMENSION(:,:), ALLOCATABLE ::  ngp_2dh_outer_l,  &
     86         ngp_2dh_s_inner_l
    8387
    8488    REAL, DIMENSION(1:2) ::  volume_flow_area_l, volume_flow_initial_l
     
    97101              ngp_2dh_outer(nzb:nzt+1,0:statistic_regions),                 &
    98102              ngp_2dh_outer_l(nzb:nzt+1,0:statistic_regions),               &
     103              ngp_2dh_s_inner(nzb:nzt+1,0:statistic_regions),               &
     104              ngp_2dh_s_inner_l(nzb:nzt+1,0:statistic_regions),             &
    99105              rmask(nys-1:nyn+1,nxl-1:nxr+1,0:statistic_regions),           &
    100106              sums(nzb:nzt+1,pr_palm+max_pr_user),                          &
     
    426432                ENDDO
    427433             ENDDO
     434             IF ( conserve_volume_flow )  THEN
     435                IF ( nxr == nx )  THEN
     436                   DO  j = nys, nyn
     437                      DO  k = nzb + 1, nzb_u_inner(j,nx)
     438                         u_nzb_p1_for_vfc(j) = u1d(k) * dzu(k)
     439                      ENDDO
     440                   ENDDO
     441                ENDIF
     442                IF ( nyn == ny )  THEN
     443                   DO  i = nxl, nxr
     444                      DO  k = nzb + 1, nzb_v_inner(ny,i)
     445                         v_nzb_p1_for_vfc(i) = v1d(k) * dzu(k)
     446                      ENDDO
     447                   ENDDO
     448                ENDIF
     449             ENDIF
    428450!
    429451!--          WARNING: The extra boundary conditions set after running the
     
    486508             IF ( nxr == nx )  THEN
    487509                DO  j = nys, nyn
    488                    k = nzb_u_inner(j,nx) + 1
    489                    u_nzb_p1_for_vfc(j) = u_init(k) * dzu(k)
     510                   DO  k = nzb + 1, nzb_u_inner(j,nx) + 1
     511                      u_nzb_p1_for_vfc(j) = u_init(k) * dzu(k)
     512                   ENDDO
    490513                ENDDO
    491514             ENDIF
    492515             IF ( nyn == ny )  THEN
    493516                DO  i = nxl, nxr
    494                    k = nzb_v_inner(ny,i) + 1
    495                    v_nzb_p1_for_vfc(i) = v_init(k) * dzu(k)
     517                   DO  k = nzb + 1, nzb_v_inner(ny,i) + 1
     518                      v_nzb_p1_for_vfc(i) = v_init(k) * dzu(k)
     519                   ENDDO
    496520                ENDDO
    497521             ENDIF
     
    561585
    562586!
     587!--    apply channel flow boundary condition
     588       IF ( TRIM( bc_uv_t ) == 'dirichlet_0' )  THEN
     589
     590          u(nzt+1,:,:) = 0.0
     591          v(nzt+1,:,:) = 0.0
     592
     593!--       for the Dirichlet condition to be correctly applied at the top, set
     594!--       ug and vg to zero there
     595          ug(nzt+1)    = 0.0
     596          vg(nzt+1)    = 0.0
     597
     598       ENDIF
     599
     600!
    563601!--    Calculate virtual potential temperature
    564602       IF ( humidity ) vpt = pt * ( 1.0 + 0.61 * q )
     
    10361074!--          total domain
    10371075!-- ngp_3d:  number of grid points of the total domain
    1038 !-- Note: The lower vertical index nzb_s_outer imposes a small error on the 2D
    1039 !-- ----  averages of staggered variables such as u and v due to the topography
    1040 !--       arrangement on the staggered grid. Maybe revise later.
    1041     ngp_2dh_outer_l = 0
    1042     ngp_2dh_outer   = 0
    1043     ngp_2dh_l       = 0
    1044     ngp_2dh         = 0
    1045     ngp_3d_inner_l  = 0
    1046     ngp_3d_inner    = 0
    1047     ngp_3d          = 0
    1048     ngp_sums        = ( nz + 2 ) * ( pr_palm + max_pr_user )
     1076    ngp_2dh_outer_l   = 0
     1077    ngp_2dh_outer     = 0
     1078    ngp_2dh_s_inner_l = 0
     1079    ngp_2dh_s_inner   = 0
     1080    ngp_2dh_l         = 0
     1081    ngp_2dh           = 0
     1082    ngp_3d_inner_l    = 0
     1083    ngp_3d_inner      = 0
     1084    ngp_3d            = 0
     1085    ngp_sums          = ( nz + 2 ) * ( pr_palm + max_pr_user )
    10491086
    10501087    DO  sr = 0, statistic_regions
     
    10591096                DO  k = nzb_s_outer(j,i), nz + 1
    10601097                   ngp_2dh_outer_l(k,sr) = ngp_2dh_outer_l(k,sr) + 1
     1098                ENDDO
     1099                DO  k = nzb_s_inner(j,i), nz + 1
     1100                   ngp_2dh_s_inner_l(k,sr) = ngp_2dh_s_inner_l(k,sr) + 1
    10611101                ENDDO
    10621102!
     
    10751115    CALL MPI_ALLREDUCE( ngp_2dh_outer_l(0,0), ngp_2dh_outer(0,0), (nz+2)*sr, &
    10761116                        MPI_INTEGER, MPI_SUM, comm2d, ierr )
     1117    CALL MPI_ALLREDUCE( ngp_2dh_s_inner_l(0,0), ngp_2dh_s_inner(0,0),        &
     1118                        (nz+2)*sr, MPI_INTEGER, MPI_SUM, comm2d, ierr )
    10771119    CALL MPI_ALLREDUCE( ngp_3d_inner_l(0), ngp_3d_inner(0), sr, MPI_INTEGER, &
    10781120                        MPI_SUM, comm2d, ierr )
    10791121#else
    1080     ngp_2dh       = ngp_2dh_l
    1081     ngp_2dh_outer = ngp_2dh_outer_l
    1082     ngp_3d_inner  = ngp_3d_inner_l
     1122    ngp_2dh         = ngp_2dh_l
     1123    ngp_2dh_outer   = ngp_2dh_outer_l
     1124    ngp_2dh_s_inner = ngp_2dh_s_inner_l
     1125    ngp_3d_inner    = ngp_3d_inner_l
    10831126#endif
    10841127
Note: See TracChangeset for help on using the changeset viewer.