Ignore:
Timestamp:
May 2, 2019 9:50:41 AM (2 years ago)
Author:
maronga
Message:

bugfixes in urban surface model; output of greenz roof transpiration added/corrected; minor formatting improvements

File:
1 edited

Legend:

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

    r3933 r3943  
    2828! -----------------
    2929! $Id$
     30! Removed qsws_eb. Bugfix in calculation of qsws.
     31!
     32! 3933 2019-04-25 12:33:20Z kanani
    3033! Remove allocation of pt_2m, this is done in surface_mod now (surfaces%pt_2m)
    3134!
     
    11611164        ALLOCATE ( surf_usm_h%r_canopy(1:surf_usm_h%ns)         )
    11621165        ALLOCATE ( surf_usm_h%r_canopy_min(1:surf_usm_h%ns)     )
    1163         ALLOCATE ( surf_usm_h%qsws_eb(1:surf_usm_h%ns)          )
    11641166        ALLOCATE ( surf_usm_h%pt_10cm(1:surf_usm_h%ns)          )
    11651167
     
    11711173          ALLOCATE ( surf_usm_v(l)%qsws_liq(1:surf_usm_v(l)%ns)         )
    11721174          ALLOCATE ( surf_usm_v(l)%qsws_veg(1:surf_usm_v(l)%ns)         )
    1173           ALLOCATE ( surf_usm_v(l)%qsws_eb(1:surf_usm_v(l)%ns)          )
    11741175          ALLOCATE ( surf_usm_v(l)%r_canopy(1:surf_usm_v(l)%ns)         )
    11751176          ALLOCATE ( surf_usm_v(l)%r_canopy_min(1:surf_usm_v(l)%ns)     )
     
    15321533!--                 array of latent heat flux from surfaces
    15331534!--                 land surfaces
    1534                     IF ( l == -1 .AND. .NOT.  ALLOCATED(surf_usm_h%qsws_eb_av) )  THEN
    1535                         ALLOCATE ( surf_usm_h%qsws_eb_av(1:surf_usm_h%ns) )
    1536                         surf_usm_h%qsws_eb_av = 0.0_wp
     1535                    IF ( l == -1 .AND. .NOT.  ALLOCATED(surf_usm_h%qsws_av) )  THEN
     1536                        ALLOCATE ( surf_usm_h%qsws_av(1:surf_usm_h%ns) )
     1537                        surf_usm_h%qsws_av = 0.0_wp
    15371538                    ELSE
    1538                        IF ( .NOT.  ALLOCATED(surf_usm_v(l)%qsws_eb_av) )  THEN
    1539                            ALLOCATE ( surf_usm_v(l)%qsws_eb_av(1:surf_usm_v(l)%ns) )
    1540                            surf_usm_v(l)%qsws_eb_av = 0.0_wp
     1539                       IF ( .NOT.  ALLOCATED(surf_usm_v(l)%qsws_av) )  THEN
     1540                           ALLOCATE ( surf_usm_v(l)%qsws_av(1:surf_usm_v(l)%ns) )
     1541                           surf_usm_v(l)%qsws_av = 0.0_wp
    15411542                       ENDIF
    15421543                    ENDIF
     
    17971798                    IF ( l == -1 ) THEN
    17981799                    DO  m = 1, surf_usm_h%ns
    1799                        surf_usm_h%qsws_eb_av(m) =                              &
    1800                                           surf_usm_h%qsws_eb_av(m) +           &
    1801                                           surf_usm_h%qsws_eb(m)
     1800                       surf_usm_h%qsws_av(m) =                              &
     1801                                          surf_usm_h%qsws_av(m) +           &
     1802                                          surf_usm_h%qsws(m) * l_v
    18021803                    ENDDO
    18031804                    ELSE
    18041805                       DO  m = 1, surf_usm_v(l)%ns
    1805                           surf_usm_v(l)%qsws_eb_av(m) =                        &
    1806                                           surf_usm_v(l)%qsws_eb_av(m) +        &
    1807                                           surf_usm_v(l)%qsws_eb(m)
     1806                          surf_usm_v(l)%qsws_av(m) =                        &
     1807                                          surf_usm_v(l)%qsws_av(m) +        &
     1808                                          surf_usm_v(l)%qsws(m) * l_v
    18081809                       ENDDO
    18091810                    ENDIF
     
    20952096                    IF ( l == -1 ) THEN
    20962097                    DO  m = 1, surf_usm_h%ns
    2097                        surf_usm_h%qsws_eb_av(m) =                              &
    2098                                           surf_usm_h%qsws_eb_av(m) /           &
     2098                       surf_usm_h%qsws_av(m) =                              &
     2099                                          surf_usm_h%qsws_av(m) /           &
    20992100                                          REAL( average_count_3d, kind=wp )
    21002101                    ENDDO
    21012102                    ELSE
    21022103                       DO  m = 1, surf_usm_v(l)%ns
    2103                           surf_usm_v(l)%qsws_eb_av(m) =                        &
    2104                                           surf_usm_v(l)%qsws_eb_av(m) /        &
     2104                          surf_usm_v(l)%qsws_av(m) =                        &
     2105                                          surf_usm_v(l)%qsws_av(m) /        &
    21052106                                          REAL( average_count_3d, kind=wp )
    21062107                       ENDDO
     
    24322433        CHARACTER(LEN=2)                              :: ls
    24332434        CHARACTER(LEN=varnamelength)                  :: var           !< TRIM(variable)
    2434         INTEGER(iwp), PARAMETER                       :: nl1 = 14      !< number of directional usm variables
     2435        INTEGER(iwp), PARAMETER                       :: nl1 = 15      !< number of directional usm variables
    24352436        CHARACTER(LEN=varnamelength), DIMENSION(nl1)  :: varlist1 = &  !< list of directional usm variables
    24362437                  (/'usm_wshf                      ', &
     
    24472448                    'usm_t_surf_green              ', &
    24482449                    'usm_t_green                   ', &
     2450                    'usm_qsws                      ', &
    24492451                    'usm_theta_10cm                '/)
    24502452
     
    28012803                       j = surf_usm_h%j(m)
    28022804                       k = surf_usm_h%k(m)
    2803                        temp_pf(k,j,i) = surf_usm_h%qsws_eb(m)
     2805                       temp_pf(k,j,i) = surf_usm_h%qsws(m) * l_v
    28042806                    ENDDO
    28052807                 ELSE
     
    28092811                       j = surf_usm_v(l)%j(m)
    28102812                       k = surf_usm_v(l)%k(m)
    2811                        temp_pf(k,j,i) = surf_usm_v(l)%qsws_eb(m)
     2813                       temp_pf(k,j,i) = surf_usm_v(l)%qsws(m) * l_v
    28122814                    ENDDO
    28132815                 ENDIF
     
    28182820                       j = surf_usm_h%j(m)
    28192821                       k = surf_usm_h%k(m)
    2820                        temp_pf(k,j,i) = surf_usm_h%qsws_eb_av(m)
     2822                       temp_pf(k,j,i) = surf_usm_h%qsws_av(m)
    28212823                    ENDDO
    28222824                 ELSE
     
    28262828                       j = surf_usm_v(l)%j(m)
    28272829                       k = surf_usm_v(l)%k(m)
    2828                        temp_pf(k,j,i) = surf_usm_v(l)%qsws_eb_av(m)
     2830                       temp_pf(k,j,i) = surf_usm_v(l)%qsws_av(m)
    28292831                    ENDDO
    28302832                 ENDIF
     
    80738075
    80748076           IF (surf_usm_h%frac(ind_pav_green,m) > 0.0_wp) THEN
    8075 
     8077             
     8078           
    80768079              IF ( humidity )  THEN
    8077                  surf_usm_h%qsws_eb(m)  = - f_qsws * ( qv1 - q_s + dq_s_dt                  &
     8080                 surf_usm_h%qsws(m)  = - f_qsws * ( qv1 - q_s + dq_s_dt                     &
    80788081                                 * t_surf_green_h(m) - dq_s_dt *               &
    80798082                                   t_surf_green_h_p(m) )
    8080        
    8081                  surf_usm_h%qsws(m) = surf_usm_h%qsws_eb(m) / rho_lv
    80828083       
    80838084                 surf_usm_h%qsws_veg(m)  = - f_qsws_veg  * ( qv1 - q_s                      &
     
    80888089                                     + dq_s_dt * t_surf_green_h(m) - dq_s_dt   &
    80898090                                     * t_surf_green_h_p(m) )
     8091                                     
    80908092              ENDIF
    80918093 
     
    85288530
    85298531                 IF ( humidity )  THEN
    8530                     surf_usm_v(l)%qsws_eb(m)  = - f_qsws * ( qv1 - q_s + dq_s_dt       &
     8532                    surf_usm_v(l)%qsws(m)  = - f_qsws * ( qv1 - q_s + dq_s_dt          &
    85318533                                    * t_surf_green_v(l)%t(m) - dq_s_dt *               &
    85328534                                      t_surf_green_v_p(l)%t(m) )
    85338535         
    8534                     surf_usm_v(l)%qsws(m) = surf_usm_v(l)%qsws_eb(m) / rho_lv
     8536                    surf_usm_v(l)%qsws(m) = surf_usm_v(l)%qsws(m) / l_v
    85358537         
    85368538                    surf_usm_v(l)%qsws_veg(m)  = - f_qsws_veg  * ( qv1 - q_s           &
Note: See TracChangeset for help on using the changeset viewer.