Ignore:
Timestamp:
Jul 22, 2019 5:00:34 PM (5 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/bulk_cloud_model_mod.f90

    r4027 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:
     
    249250
    250251    USE control_parameters,                                                    &
    251         ONLY:  debug_output,                                                   &
     252        ONLY:  bc_dirichlet_l,                                                 &
     253               bc_dirichlet_n,                                                 &
     254               bc_dirichlet_r,                                                 &
     255               bc_dirichlet_s,                                                 &
     256               bc_radiation_l,                                                 &
     257               bc_radiation_n,                                                 &
     258               bc_radiation_r,                                                 &
     259               bc_radiation_s,                                                 &                                                               
     260               debug_output,                                                   &
    252261               dt_3d, dt_do2d_xy, intermediate_timestep_count,                 &
    253262               intermediate_timestep_count_max, large_scale_forcing,           &
     
    266275
    267276    USE indices,                                                               &
    268         ONLY:  nbgp, nxl, nxlg, nxr, nxrg, nys, nysg, nyn, nyng, nzb, nzt,     &
     277        ONLY:  advc_flags_s,                                                   &
     278               nbgp, nxl, nxlg, nxr, nxrg, nys, nysg, nyn, nyng, nzb, nzt,     &
    269279               wall_flags_0
    270280
     
    14831493             IF ( timestep_scheme(1:5) == 'runge' )  THEN
    14841494                IF ( ws_scheme_sca )  THEN
    1485                    CALL advec_s_ws( qc, 'qc' )
     1495                   CALL advec_s_ws( advc_flags_s, qc, 'qc',                    &
     1496                                    bc_dirichlet_l  .OR.  bc_radiation_l,      &
     1497                                    bc_dirichlet_n  .OR.  bc_radiation_n,      &
     1498                                    bc_dirichlet_r  .OR.  bc_radiation_r,      &
     1499                                    bc_dirichlet_s  .OR.  bc_radiation_s )
    14861500                ELSE
    14871501                   CALL advec_s_pw( qc )
     
    15691583             IF ( timestep_scheme(1:5) == 'runge' )  THEN
    15701584                IF ( ws_scheme_sca )  THEN
    1571                    CALL advec_s_ws( nc, 'nc' )
     1585                   CALL advec_s_ws( advc_flags_s, nc, 'nc',                    &
     1586                                    bc_dirichlet_l  .OR.  bc_radiation_l,      &
     1587                                    bc_dirichlet_n  .OR.  bc_radiation_n,      &
     1588                                    bc_dirichlet_r  .OR.  bc_radiation_r,      &
     1589                                    bc_dirichlet_s  .OR.  bc_radiation_s )
    15721590                ELSE
    15731591                   CALL advec_s_pw( nc )
     
    16621680             IF ( timestep_scheme(1:5) == 'runge' )  THEN
    16631681                IF ( ws_scheme_sca )  THEN
    1664                    CALL advec_s_ws( qr, 'qr' )
     1682                   CALL advec_s_ws( advc_flags_s, qr, 'qr',                    &
     1683                                    bc_dirichlet_l  .OR.  bc_radiation_l,      &
     1684                                    bc_dirichlet_n  .OR.  bc_radiation_n,      &
     1685                                    bc_dirichlet_r  .OR.  bc_radiation_r,      &
     1686                                    bc_dirichlet_s  .OR.  bc_radiation_s )
    16651687                ELSE
    16661688                   CALL advec_s_pw( qr )
     
    17481770             IF ( timestep_scheme(1:5) == 'runge' )  THEN
    17491771                IF ( ws_scheme_sca )  THEN
    1750                    CALL advec_s_ws( nr, 'nr' )
     1772                   CALL advec_s_ws( advc_flags_s, nr, 'nr',                    &
     1773                                    bc_dirichlet_l  .OR.  bc_radiation_l,      &
     1774                                    bc_dirichlet_n  .OR.  bc_radiation_n,      &
     1775                                    bc_dirichlet_r  .OR.  bc_radiation_r,      &
     1776                                    bc_dirichlet_s  .OR.  bc_radiation_s )
    17511777                ELSE
    17521778                   CALL advec_s_pw( nr )
     
    18421868          THEN
    18431869             IF ( ws_scheme_sca )  THEN
    1844                 CALL advec_s_ws( i, j, qc, 'qc', flux_s_qc,       &
    1845                                  diss_s_qc, flux_l_qc, diss_l_qc, &
    1846                                  i_omp_start, tn )
     1870                CALL advec_s_ws( advc_flags_s, i, j, qc, 'qc', flux_s_qc,      &
     1871                                 diss_s_qc, flux_l_qc, diss_l_qc,              &
     1872                                 i_omp_start, tn,                              &
     1873                                 bc_dirichlet_l  .OR.  bc_radiation_l,         &
     1874                                 bc_dirichlet_n  .OR.  bc_radiation_n,         &
     1875                                 bc_dirichlet_r  .OR.  bc_radiation_r,         &
     1876                                 bc_dirichlet_s  .OR.  bc_radiation_s )
    18471877             ELSE
    18481878                CALL advec_s_pw( i, j, qc )
     
    18971927          IF ( timestep_scheme(1:5) == 'runge' )  THEN
    18981928             IF ( ws_scheme_sca )  THEN
    1899                 CALL advec_s_ws( i, j, nc, 'nc', flux_s_nc,    &
    1900                               diss_s_nc, flux_l_nc, diss_l_nc, &
    1901                               i_omp_start, tn )
     1929                CALL advec_s_ws( advc_flags_s, i, j, nc, 'nc', flux_s_nc,      &
     1930                                 diss_s_nc, flux_l_nc, diss_l_nc,              &
     1931                                 i_omp_start, tn,                              &
     1932                                 bc_dirichlet_l  .OR.  bc_radiation_l,         &
     1933                                 bc_dirichlet_n  .OR.  bc_radiation_n,         &
     1934                                 bc_dirichlet_r  .OR.  bc_radiation_r,         &
     1935                                 bc_dirichlet_s  .OR.  bc_radiation_s )
    19021936             ELSE
    19031937                CALL advec_s_pw( i, j, nc )
     
    19581992          THEN
    19591993             IF ( ws_scheme_sca )  THEN
    1960                 CALL advec_s_ws( i, j, qr, 'qr', flux_s_qr,       &
    1961                                  diss_s_qr, flux_l_qr, diss_l_qr, &
    1962                                  i_omp_start, tn )
     1994                CALL advec_s_ws( advc_flags_s, i, j, qr, 'qr', flux_s_qr,      &
     1995                                 diss_s_qr, flux_l_qr, diss_l_qr,              &
     1996                                 i_omp_start, tn,                              &
     1997                                 bc_dirichlet_l  .OR.  bc_radiation_l,         &
     1998                                 bc_dirichlet_n  .OR.  bc_radiation_n,         &
     1999                                 bc_dirichlet_r  .OR.  bc_radiation_r,         &
     2000                                 bc_dirichlet_s  .OR.  bc_radiation_s )
    19632001             ELSE
    19642002                CALL advec_s_pw( i, j, qr )
     
    20132051          IF ( timestep_scheme(1:5) == 'runge' )  THEN
    20142052             IF ( ws_scheme_sca )  THEN
    2015                 CALL advec_s_ws( i, j, nr, 'nr', flux_s_nr,    &
    2016                               diss_s_nr, flux_l_nr, diss_l_nr, &
    2017                               i_omp_start, tn )
     2053                CALL advec_s_ws( advc_flags_s, i, j, nr, 'nr', flux_s_nr,      &
     2054                                 diss_s_nr, flux_l_nr, diss_l_nr,              &
     2055                                 i_omp_start, tn,                              &
     2056                                 bc_dirichlet_l  .OR.  bc_radiation_l,         &
     2057                                 bc_dirichlet_n  .OR.  bc_radiation_n,         &
     2058                                 bc_dirichlet_r  .OR.  bc_radiation_r,         &
     2059                                 bc_dirichlet_s  .OR.  bc_radiation_s )
    20182060             ELSE
    20192061                CALL advec_s_pw( i, j, nr )
Note: See TracChangeset for help on using the changeset viewer.