Changeset 2759


Ignore:
Timestamp:
Jan 17, 2018 4:24:59 PM (6 years ago)
Author:
suehring
Message:

Major bugfix in horizontal diffusion of all scalar quantities at vertical surfaces; further bugfix: density is considered for vertical fluxes of passive scalar and salinity

Location:
palm/trunk/SOURCE
Files:
2 edited

Legend:

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

    r2718 r2759  
    2525! -----------------
    2626! $Id$
     27! Major bugfix, horizontal diffusion at vertical surfaces corrected.
     28!
     29! 2718 2018-01-02 08:49:38Z maronga
    2730! Corrected "Former revisions" section
    2831!
     
    136139       
    137140       USE grid_variables,                                                     &
    138            ONLY:  ddx2, ddy2
     141           ONLY:  ddx, ddx2, ddy, ddy2
    139142       
    140143       USE indices,                                                            &
     
    231234             DO  m = surf_s, surf_e
    232235                k           = surf_def_v(0)%k(m)
    233                 tend(k,j,i) = tend(k,j,i) + s_flux_def_v_north(m) * ddy2
     236                tend(k,j,i) = tend(k,j,i) + s_flux_def_v_north(m) * ddy
    234237             ENDDO
    235238!
     
    239242             DO  m = surf_s, surf_e
    240243                k           = surf_def_v(1)%k(m)
    241                 tend(k,j,i) = tend(k,j,i) + s_flux_def_v_south(m) * ddy2
     244                tend(k,j,i) = tend(k,j,i) + s_flux_def_v_south(m) * ddy
    242245             ENDDO
    243246!
     
    247250             DO  m = surf_s, surf_e
    248251                k           = surf_def_v(2)%k(m)
    249                 tend(k,j,i) = tend(k,j,i) + s_flux_def_v_east(m) * ddx2
     252                tend(k,j,i) = tend(k,j,i) + s_flux_def_v_east(m) * ddx
    250253             ENDDO
    251254!
     
    255258             DO  m = surf_s, surf_e
    256259                k           = surf_def_v(3)%k(m)
    257                 tend(k,j,i) = tend(k,j,i) + s_flux_def_v_west(m) * ddx2
     260                tend(k,j,i) = tend(k,j,i) + s_flux_def_v_west(m) * ddx
    258261             ENDDO
    259262!
     
    264267             DO  m = surf_s, surf_e
    265268                k           = surf_lsm_v(0)%k(m)
    266                 tend(k,j,i) = tend(k,j,i) + s_flux_lsm_v_north(m) * ddy2
     269                tend(k,j,i) = tend(k,j,i) + s_flux_lsm_v_north(m) * ddy
    267270             ENDDO
    268271!
     
    272275             DO  m = surf_s, surf_e
    273276                k           = surf_lsm_v(1)%k(m)
    274                 tend(k,j,i) = tend(k,j,i) + s_flux_lsm_v_south(m) * ddy2
     277                tend(k,j,i) = tend(k,j,i) + s_flux_lsm_v_south(m) * ddy
    275278             ENDDO
    276279!
     
    280283             DO  m = surf_s, surf_e
    281284                k           = surf_lsm_v(2)%k(m)
    282                 tend(k,j,i) = tend(k,j,i) + s_flux_lsm_v_east(m) * ddx2
     285                tend(k,j,i) = tend(k,j,i) + s_flux_lsm_v_east(m) * ddx
    283286             ENDDO
    284287!
     
    288291             DO  m = surf_s, surf_e
    289292                k           = surf_lsm_v(3)%k(m)
    290                 tend(k,j,i) = tend(k,j,i) + s_flux_lsm_v_west(m) * ddx2
     293                tend(k,j,i) = tend(k,j,i) + s_flux_lsm_v_west(m) * ddx
    291294             ENDDO
    292295!
     
    297300             DO  m = surf_s, surf_e
    298301                k           = surf_usm_v(0)%k(m)
    299                 tend(k,j,i) = tend(k,j,i) + s_flux_usm_v_north(m) * ddy2
     302                tend(k,j,i) = tend(k,j,i) + s_flux_usm_v_north(m) * ddy
    300303             ENDDO
    301304!
     
    305308             DO  m = surf_s, surf_e
    306309                k           = surf_usm_v(1)%k(m)
    307                 tend(k,j,i) = tend(k,j,i) + s_flux_usm_v_south(m) * ddy2
     310                tend(k,j,i) = tend(k,j,i) + s_flux_usm_v_south(m) * ddy
    308311             ENDDO
    309312!
     
    313316             DO  m = surf_s, surf_e
    314317                k           = surf_usm_v(2)%k(m)
    315                 tend(k,j,i) = tend(k,j,i) + s_flux_usm_v_east(m) * ddx2
     318                tend(k,j,i) = tend(k,j,i) + s_flux_usm_v_east(m) * ddx
    316319             ENDDO
    317320!
     
    321324             DO  m = surf_s, surf_e
    322325                k           = surf_usm_v(3)%k(m)
    323                 tend(k,j,i) = tend(k,j,i) + s_flux_usm_v_west(m) * ddx2
     326                tend(k,j,i) = tend(k,j,i) + s_flux_usm_v_west(m) * ddx
    324327             ENDDO
    325328
     
    448451       
    449452       USE grid_variables,                                                     &
    450            ONLY:  ddx2, ddy2
     453           ONLY:  ddx, ddx2, ddy, ddy2
    451454       
    452455       USE indices,                                                            &
     
    543546       DO  m = surf_s, surf_e
    544547          k           = surf_def_v(0)%k(m)
    545           tend(k,j,i) = tend(k,j,i) + s_flux_def_v_north(m) * ddy2
     548          tend(k,j,i) = tend(k,j,i) + s_flux_def_v_north(m) * ddy
    546549       ENDDO
    547550!
     
    551554       DO  m = surf_s, surf_e
    552555          k           = surf_def_v(1)%k(m)
    553           tend(k,j,i) = tend(k,j,i) + s_flux_def_v_south(m) * ddy2
     556          tend(k,j,i) = tend(k,j,i) + s_flux_def_v_south(m) * ddy
    554557       ENDDO
    555558!
     
    559562       DO  m = surf_s, surf_e
    560563          k           = surf_def_v(2)%k(m)
    561           tend(k,j,i) = tend(k,j,i) + s_flux_def_v_east(m) * ddx2
     564          tend(k,j,i) = tend(k,j,i) + s_flux_def_v_east(m) * ddx
    562565       ENDDO
    563566!
     
    567570       DO  m = surf_s, surf_e
    568571          k           = surf_def_v(3)%k(m)
    569           tend(k,j,i) = tend(k,j,i) + s_flux_def_v_west(m) * ddx2
     572          tend(k,j,i) = tend(k,j,i) + s_flux_def_v_west(m) * ddx
    570573       ENDDO
    571574!
     
    576579       DO  m = surf_s, surf_e
    577580          k           = surf_lsm_v(0)%k(m)
    578           tend(k,j,i) = tend(k,j,i) + s_flux_lsm_v_north(m) * ddy2
     581          tend(k,j,i) = tend(k,j,i) + s_flux_lsm_v_north(m) * ddy
    579582       ENDDO
    580583!
     
    584587       DO  m = surf_s, surf_e
    585588          k           = surf_lsm_v(1)%k(m)
    586           tend(k,j,i) = tend(k,j,i) + s_flux_lsm_v_south(m) * ddy2
     589          tend(k,j,i) = tend(k,j,i) + s_flux_lsm_v_south(m) * ddy
    587590       ENDDO
    588591!
     
    592595       DO  m = surf_s, surf_e
    593596          k           = surf_lsm_v(2)%k(m)
    594           tend(k,j,i) = tend(k,j,i) + s_flux_lsm_v_east(m) * ddx2
     597          tend(k,j,i) = tend(k,j,i) + s_flux_lsm_v_east(m) * ddx
    595598       ENDDO
    596599!
     
    600603       DO  m = surf_s, surf_e
    601604          k           = surf_lsm_v(3)%k(m)
    602           tend(k,j,i) = tend(k,j,i) + s_flux_lsm_v_west(m) * ddx2
     605          tend(k,j,i) = tend(k,j,i) + s_flux_lsm_v_west(m) * ddx
    603606       ENDDO
    604607!
     
    609612       DO  m = surf_s, surf_e
    610613          k           = surf_usm_v(0)%k(m)
    611           tend(k,j,i) = tend(k,j,i) + s_flux_usm_v_north(m) * ddy2
     614          tend(k,j,i) = tend(k,j,i) + s_flux_usm_v_north(m) * ddy
    612615       ENDDO
    613616!
     
    617620       DO  m = surf_s, surf_e
    618621          k           = surf_usm_v(1)%k(m)
    619           tend(k,j,i) = tend(k,j,i) + s_flux_usm_v_south(m) * ddy2
     622          tend(k,j,i) = tend(k,j,i) + s_flux_usm_v_south(m) * ddy
    620623       ENDDO
    621624!
     
    625628       DO  m = surf_s, surf_e
    626629          k           = surf_usm_v(2)%k(m)
    627           tend(k,j,i) = tend(k,j,i) + s_flux_usm_v_east(m) * ddx2
     630          tend(k,j,i) = tend(k,j,i) + s_flux_usm_v_east(m) * ddx
    628631       ENDDO
    629632!
     
    633636       DO  m = surf_s, surf_e
    634637          k           = surf_usm_v(3)%k(m)
    635           tend(k,j,i) = tend(k,j,i) + s_flux_usm_v_west(m) * ddx2
     638          tend(k,j,i) = tend(k,j,i) + s_flux_usm_v_west(m) * ddx
    636639       ENDDO
    637640
  • palm/trunk/SOURCE/surface_mod.f90

    r2753 r2759  
    2626! -----------------
    2727! $Id$
     28! Bugfix, consider density in vertical fluxes of passive scalar as well as
     29! chemical species.
     30!
     31! 2753 2018-01-16 14:16:49Z suehring
    2832! +r_a_green, r_a_window
    2933!
     
    116120
    117121    USE arrays_3d,                                                             &
    118         ONLY:  zu, zw, heatflux_input_conversion, waterflux_input_conversion,  &
    119                momentumflux_input_conversion
     122        ONLY:  heatflux_input_conversion, momentumflux_input_conversion,       &
     123               rho_air, rho_air_zw, zu, zw, waterflux_input_conversion
    120124
    121125#if defined( __chem )
     
    17531757                      IF ( .NOT. random_heatflux )  THEN
    17541758                         surf%shf(num_h) = surface_heatflux *                  &
    1755                                                  heatflux_input_conversion(nzb)
     1759                                                 heatflux_input_conversion(k-1)
    17561760!
    17571761!--                      Check if surface heat flux might be replaced by
     
    17841788                      IF ( constant_waterflux )  THEN
    17851789                         surf%qsws(num_h) = surface_waterflux *                &
    1786                                                  waterflux_input_conversion(nzb)
     1790                                                 waterflux_input_conversion(k-1)
    17871791                         IF ( k-1 /= 0 )  THEN
    17881792                            surf%qsws(num_h) = wall_humidityflux(0) *          &
     
    18011805                   IF ( upward_facing )  THEN
    18021806                      IF ( constant_scalarflux )  THEN
    1803                          surf%ssws(num_h) = surface_scalarflux
     1807                         surf%ssws(num_h) = surface_scalarflux * rho_air_zw(k-1)
    18041808
    18051809                         IF ( k-1 /= 0 )                                       &
    1806                             surf%ssws(num_h) = wall_scalarflux(0)
     1810                            surf%ssws(num_h) = wall_scalarflux(0) *            &
     1811                                               rho_air_zw(k-1)
    18071812
    18081813                      ELSE
     
    18101815                      ENDIF
    18111816                   ELSE
    1812                       surf%ssws(num_h) = wall_scalarflux(5)
     1817                      surf%ssws(num_h) = wall_scalarflux(5) * rho_air_zw(k)
    18131818                   ENDIF
    18141819                ENDIF
     
    18241829                            IF ( upward_facing )  THEN
    18251830                               IF ( constant_csflux(lsp_pr) )  THEN
    1826                                   surf%cssws(lsp,num_h) = surface_csflux(lsp_pr)
    1827 
    1828                                   IF ( k-1 /= 0 )                                    &
    1829                                      surf%cssws(lsp,num_h) = wall_csflux(lsp,0)
     1831                                  surf%cssws(lsp,num_h) =                      &
     1832                                                       surface_csflux(lsp_pr) *&
     1833                                                       rho_air_zw(k-1)
     1834
     1835                                  IF ( k-1 /= 0 )                              &
     1836                                     surf%cssws(lsp,num_h) =                   &
     1837                                                       wall_csflux(lsp,0) *    &
     1838                                                       rho_air_zw(k-1)
    18301839                               ELSE
    18311840                                  surf%cssws(lsp,num_h) = 0.0_wp
    18321841                               ENDIF
    18331842                            ELSE
    1834                                surf%cssws(lsp,num_h) = wall_csflux(lsp,5)
     1843                               surf%cssws(lsp,num_h) = wall_csflux(lsp,5) *    &
     1844                                                       rho_air_zw(k)
    18351845                            ENDIF
    18361846                         ENDIF
     
    18431853                IF ( ocean )  THEN
    18441854                   IF ( upward_facing )  THEN
    1845                       surf%sasws(num_h) = bottom_salinityflux
     1855                      surf%sasws(num_h) = bottom_salinityflux * rho_air_zw(k-1)
    18461856                   ELSE
    18471857                      surf%sasws(num_h) = 0.0_wp
     
    19071917!--          Prescribe top scalar flux
    19081918             IF ( passive_scalar .AND. constant_top_scalarflux )               &
    1909                 surf%ssws(num_h) = top_scalarflux
     1919                surf%ssws(num_h) = top_scalarflux * rho_air_zw(nzt+1)
    19101920!
    19111921!--          Prescribe top chemical species' flux
     
    19131923             DO  lsp = 1, nvar
    19141924                IF ( air_chemistry  .AND.  constant_top_csflux(lsp) )  THEN
    1915                    surf%cssws(lsp,num_h) = top_csflux(lsp)
     1925                   surf%cssws(lsp,num_h) = top_csflux(lsp) * rho_air_zw(nzt+1)
    19161926                ENDIF
    19171927             ENDDO
     
    19201930!--          Prescribe top salinity flux
    19211931             IF ( ocean .AND. constant_top_salinityflux)                       &
    1922                 surf%sasws(num_h) = top_salinityflux
     1932                surf%sasws(num_h) = top_salinityflux * rho_air_zw(nzt+1)
    19231933!
    19241934!--          Top momentum fluxes
Note: See TracChangeset for help on using the changeset viewer.