Ignore:
Timestamp:
Jul 22, 2019 5:00:34 PM (2 years ago)
Author:
suehring
Message:

Control discretization of advection term: separate initialization of WS advection flags for momentum and scalars. In this context, resort the bits and do some minor formatting; Make initialization of scalar-advection flags more flexible, i.e. introduce an arguemnt list to indicate non-cyclic boundaries (required for decycled scalars such as chemical species or aerosols); Introduce extended 'degradation zones', where horizontal advection of passive scalars is discretized by first-order scheme at all grid points that in the vicinity of buildings (<= 3 grid points). Even though no building is within the numerical stencil, first-order scheme is used. At fourth and fifth grid point the order of the horizontal advection scheme is successively upgraded. These extended degradation zones are used to avoid stationary numerical oscillations, which are responsible for high concentration maxima that may appear under shear-free stable conditions. Therefore, an additional 3D interger array used to store control flags is introduced; Change interface for scalar advection routine; Bugfix, avoid uninitialized value sk_num in vector version of WS scalar advection; Chemistry: Decycling boundary conditions are only set at the ghost points not on the prognostic grid points; Land-surface model: Relax checks for non-consistent initialization in case static or dynamic input is provided. For example, soil_temperature or deep_soil_temperature is not mandatory any more if dynamic input is available. Also, improper settings of x_type in namelist are only checked if no static file is available.

File:
1 edited

Legend:

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

    r4105 r4109  
    2020! Current revisions:
    2121! -----------------
    22 !
     22! pass integer flag array as well as boundary flags to WS scalar advection
     23! routine
    2324!
    2425! Former revisions:
     
    248249
    249250    USE indices,                                                              &
    250         ONLY:  nbgp, nxl, nxlg, nxr, nxrg, nyn, nyng, nys, nysg, nzb, nzt,    &
     251        ONLY:  advc_flags_s,                                                  &
     252               nbgp, nxl, nxlg, nxr, nxrg, nyn, nyng, nys, nysg, nzb, nzt,    &
    251253               wall_flags_0
    252254
     
    23292331             IF ( timestep_scheme(1:5) == 'runge' )  THEN
    23302332                IF ( ws_scheme_sca )  THEN
    2331                    CALL advec_s_ws( e, 'e' )
     2333                   CALL advec_s_ws( advc_flags_s, e, 'e',                      &
     2334                                    bc_dirichlet_l  .OR.  bc_radiation_l,      &
     2335                                    bc_dirichlet_n  .OR.  bc_radiation_n,      &
     2336                                    bc_dirichlet_r  .OR.  bc_radiation_r,      &
     2337                                    bc_dirichlet_s  .OR.  bc_radiation_s )
    23322338                ELSE
    23332339                   CALL advec_s_pw( e )
     
    24432449             IF ( timestep_scheme(1:5) == 'runge' )  THEN
    24442450                IF ( ws_scheme_sca )  THEN
    2445                    CALL advec_s_ws( diss, 'diss' )
     2451                   CALL advec_s_ws( advc_flags_s, diss, 'diss',                &
     2452                                    bc_dirichlet_l  .OR.  bc_radiation_l,      &
     2453                                    bc_dirichlet_n  .OR.  bc_radiation_n,      &
     2454                                    bc_dirichlet_r  .OR.  bc_radiation_r,      &
     2455                                    bc_dirichlet_s  .OR.  bc_radiation_s )
    24462456                ELSE
    24472457                   CALL advec_s_pw( diss )
     
    25492559           .AND.  .NOT. use_upstream_for_tke )  THEN
    25502560           IF ( ws_scheme_sca )  THEN
    2551                CALL advec_s_ws( i, j, e, 'e', flux_s_e, diss_s_e, &
    2552                                 flux_l_e, diss_l_e , i_omp, tn )
     2561               CALL advec_s_ws( advc_flags_s,                                  &
     2562                                i, j, e, 'e', flux_s_e, diss_s_e,              &
     2563                                flux_l_e, diss_l_e , i_omp, tn,                &
     2564                                bc_dirichlet_l  .OR.  bc_radiation_l,          &
     2565                                bc_dirichlet_n  .OR.  bc_radiation_n,          &
     2566                                bc_dirichlet_r  .OR.  bc_radiation_r,          &
     2567                                bc_dirichlet_s  .OR.  bc_radiation_s )
    25532568           ELSE
    25542569               CALL advec_s_pw( i, j, e )
     
    26182633           .AND.  .NOT. use_upstream_for_tke )  THEN
    26192634           IF ( ws_scheme_sca )  THEN
    2620                CALL advec_s_ws( i, j, diss, 'diss', flux_s_diss, diss_s_diss,  &
    2621                                 flux_l_diss, diss_l_diss, i_omp, tn )
     2635               CALL advec_s_ws( advc_flags_s,                                  &
     2636                                i, j, diss, 'diss', flux_s_diss, diss_s_diss,  &
     2637                                flux_l_diss, diss_l_diss, i_omp, tn,           &
     2638                                bc_dirichlet_l  .OR.  bc_radiation_l,          &
     2639                                bc_dirichlet_n  .OR.  bc_radiation_n,          &
     2640                                bc_dirichlet_r  .OR.  bc_radiation_r,          &
     2641                                bc_dirichlet_s  .OR.  bc_radiation_s )
    26222642           ELSE
    26232643               CALL advec_s_pw( i, j, diss )
     
    34513471       dvdy(k) =           ( v(k,j+1,i) - v(k,j,i)     ) * ddy
    34523472       dvdz(k) = 0.5_wp  * ( v(k+1,j,i) + v(k+1,j+1,i) -                 &
    3453                                v(k-1,j,i) - v(k-1,j+1,i) ) * dd2zu(k)
     3473                             v(k-1,j,i) - v(k-1,j+1,i) ) * dd2zu(k)
    34543474
    34553475       dwdx(k) = 0.25_wp * ( w(k,j,i+1) + w(k-1,j,i+1) -                 &
Note: See TracChangeset for help on using the changeset viewer.