Ignore:
Timestamp:
Nov 5, 2018 6:20:18 AM (6 years ago)
Author:
maronga
Message:

bugfix in land surface model for the case case of excessive precipitation/dew formation

File:
1 edited

Legend:

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

    r3361 r3486  
    2525! -----------------
    2626! $Id$
     27! Bugfix for liquid water treatment on pavements
     28!
     29! 3361 2018-10-16 20:39:37Z knoop
    2730! Bugfix in initialization of soil properties from dynamic input file
    2831!
     
    479482!>       more levels are used this may cause an potential bug
    480483!> @todo Routine calc_q_surface required?
     484!> @todo Allow for precipitation water to enter pavements that are semi-pervious
    481485!------------------------------------------------------------------------------!
    482486 MODULE land_surface_model_mod
     
    20572061          f_qsws_soil = 0.0_wp
    20582062          f_qsws_liq  = rho_lv / surf%r_a(m)
    2059        ELSEIF ( surf%pavement_surface (m) )  THEN
     2063       ELSEIF ( surf%pavement_surface(m) )  THEN
    20602064          f_qsws_veg  = 0.0_wp
    20612065          f_qsws_soil = 0.0_wp
     
    22222226!--          Add precipitation to liquid water reservoir, if possible.
    22232227!--          Otherwise, add the water to soil. In case of
    2224 !--          pavements, the exceeding water amount is implicitely removed
    2225 !--          as runoff as qsws_soil is then not used in the soil model
    2226              IF ( surf_m_liq%var_1d(m) /= m_liq_max )  THEN
    2227                 surf%qsws_liq(m) = surf%qsws_liq(m)                            &
     2228!--          pavements, the exceeding water amount is explicitly removed
     2229!--          (as fictive runoff by drainage systems)
     2230             IF ( surf%pavement_surface(m) )  THEN
     2231                IF ( surf_m_liq%var_1d(m) < m_liq_max )  THEN
     2232                   surf%qsws_liq(m) = surf%qsws_liq(m)                         &
     2233                                 + prr(k+k_off,j+j_off,i+i_off)                &
     2234                                 * hyrho(k+k_off)                              &
     2235                                 * 0.001_wp * rho_l * l_v
     2236                ENDIF         
     2237             ELSE
     2238                IF ( surf_m_liq%var_1d(m) < m_liq_max )  THEN
     2239                   surf%qsws_liq(m) = surf%qsws_liq(m)                         &
    22282240                                 + surf%c_veg(m) * prr(k+k_off,j+j_off,i+i_off)&
    22292241                                 * hyrho(k+k_off)                              &
    22302242                                 * 0.001_wp * rho_l * l_v
    2231              ELSE
    2232                 surf%qsws_soil(m) = surf%qsws_soil(m)                          &
     2243                   surf%qsws_soil(m) = surf%qsws_soil(m) + ( 1.0_wp -          &
     2244                                 surf%c_veg(m) ) * prr(k+k_off,j+j_off,i+i_off)&
     2245                                 * hyrho(k+k_off)                              &
     2246                                 * 0.001_wp * rho_l * l_v                                 
     2247                ELSE
     2248
     2249!--                Add precipitation to bare soil according to the bare soil
     2250!--                coverage.
     2251                   surf%qsws_soil(m) = surf%qsws_soil(m)                       &
    22332252                                 + surf%c_veg(m) * prr(k+k_off,j+j_off,i+i_off)&
    22342253                                 * hyrho(k+k_off)                              &
    22352254                                 * 0.001_wp * rho_l * l_v
     2255
     2256                ENDIF
    22362257             ENDIF
    22372258
    2238 !--          Add precipitation to bare soil according to the bare soil
    2239 !--          coverage.
    2240              surf%qsws_soil(m) = surf%qsws_soil(m) + ( 1.0_wp                  &
    2241                                - surf%c_veg(m) ) * prr(k+k_off,j+j_off,i+i_off)&
    2242                                * hyrho(k+k_off)                                &
    2243                                * 0.001_wp * rho_l * l_v
    22442259          ENDIF
    22452260
     
    22492264!
    22502265!--          Check if reservoir is full (avoid values > m_liq_max)
    2251 !--          In that case, qsws_liq goes to qsws_soil. In this
    2252 !--          case qsws_veg is zero anyway (because c_liq = 1),       
     2266!--          In that case, qsws_liq goes to qsws_soil for pervious surfaces. In
     2267!--          this case qsws_veg is zero anyway (because c_liq = 1),       
    22532268!--          so that tend is zero and no further check is needed
    22542269             IF ( surf_m_liq%var_1d(m) == m_liq_max )  THEN
    2255                 surf%qsws_soil(m) = surf%qsws_soil(m) + surf%qsws_liq(m)
    2256 
     2270                IF ( .NOT. surf%pavement_surface(m))  THEN
     2271                   surf%qsws_soil(m) = surf%qsws_soil(m) + surf%qsws_liq(m)
     2272                ENDIF
    22572273                surf%qsws_liq(m)  = 0.0_wp
    22582274             ENDIF
     
    54005416   
    54015417!
    5402 !--                Account for dry soils (find a better solution here!)
     5418!--                Account for dry and wet soils to keep solution stable
     5419!--                (mass conservation is violated here)
    54035420                   DO  k = nzb_soil, nzt_soil
    5404                       IF ( surf_m_soil_p%var_2d(k,m) < 0.0_wp )  surf_m_soil_p%var_2d(k,m) = 0.0_wp
     5421                      surf_m_soil_p%var_2d(k,m) = MIN( surf_m_soil_p%var_2d(k,m), surf_m_soil_p%var_2d(k,m) )
     5422                      surf_m_soil_p%var_2d(k,m) = MAX( surf_m_soil_p%var_2d(k,m), 0.0_wp )                     
    54055423                   ENDDO
    54065424 
Note: See TracChangeset for help on using the changeset viewer.