Ignore:
Timestamp:
Dec 4, 2018 8:40:18 AM (6 years ago)
Author:
maronga
Message:

revised calculation of near surface air potential temperature

File:
1 edited

Legend:

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

    r3486 r3597  
    2525! -----------------
    2626! $Id$
     27! Added pt_2m / theta_2m. Removed unncessary _eb strings.
     28!
     29! 3486 2018-11-05 06:20:18Z maronga
    2730! Bugfix for liquid water treatment on pavements
    2831!
     
    490493
    491494    USE basic_constants_and_equations_mod,                                     &
    492         ONLY:  c_p, g, lv_d_cp, l_v, magnus, rho_l, r_d, r_v, rd_d_rv
     495        ONLY:  c_p, g, lv_d_cp, l_v, kappa, magnus, rho_l, r_d, r_v, rd_d_rv
    493496
    494497    USE calc_mean_profile_mod,                                                 &
     
    530533
    531534    USE surface_mod,                                                           &
    532         ONLY :  ind_pav_green, ind_veg_wall, ind_wat_win, surf_lsm_h,          &
    533                 surf_lsm_v, surf_type, surface_restore_elements
     535        ONLY :  ind_pav_green, ind_veg_wall, ind_wat_win,                      &
     536                surf_lsm_h, surf_lsm_v, surf_type, surface_restore_elements
    534537
    535538    IMPLICIT NONE
     
    750753              c_soil_av,        & !< average of c_soil
    751754              c_veg_av,         & !< average of c_veg
    752               lai_av,           & !< average of lai
     755              lai_av,           & !< average of lai       
    753756              qsws_liq_av,      & !< average of qsws_liq
    754757              qsws_soil_av,     & !< average of qsws_soil
    755758              qsws_veg_av,      & !< average of qsws_veg
    756759              r_s_av              !< average of r_s
    757                    
    758 
     760 
    759761!
    760762!-- Predefined Land surface classes (vegetation_type)
     
    10001002!-- Public functions
    10011003    PUBLIC lsm_boundary_condition, lsm_check_data_output,                      &
    1002            lsm_check_data_output_pr,                                           &
     1004           lsm_check_data_output_pr, lsm_calc_pt_near_surface,                 &
    10031005           lsm_check_parameters, lsm_define_netcdf_grid, lsm_3d_data_averaging,&
    10041006           lsm_data_output_2d, lsm_data_output_3d, lsm_energy_balance,         &
     
    10211023    END INTERFACE lsm_boundary_condition
    10221024
     1025    INTERFACE lsm_calc_pt_near_surface
     1026       MODULE PROCEDURE lsm_calc_pt_near_surface
     1027    END INTERFACE lsm_calc_pt_near_surface
     1028   
    10231029    INTERFACE lsm_check_data_output
    10241030       MODULE PROCEDURE lsm_check_data_output
     
    23402346    IF ( horizontal  .AND.  .NOT. constant_roughness )  CALL calc_z0_water_surface
    23412347   
     2348   
    23422349    CONTAINS
    23432350!------------------------------------------------------------------------------!
     
    23912398                     
    23922399       ENDDO
    2393 
     2400 
    23942401    END SUBROUTINE calc_q_surface
    2395 
    2396 
    2397 
     2402       
    23982403 END SUBROUTINE lsm_energy_balance
    2399 
     2404   
     2405   
    24002406
    24012407!------------------------------------------------------------------------------!
     
    49234929       ALLOCATE ( surf_lsm_h%r_s(1:surf_lsm_h%ns)                 )
    49244930       ALLOCATE ( surf_lsm_h%r_canopy_min(1:surf_lsm_h%ns)        )
     4931       ALLOCATE ( surf_lsm_h%pt_2m(1:surf_lsm_h%ns)               )
    49254932       ALLOCATE ( surf_lsm_h%vegetation_surface(1:surf_lsm_h%ns)  )
    49264933       ALLOCATE ( surf_lsm_h%water_surface(1:surf_lsm_h%ns)       )
     
    57425749                ENDDO
    57435750             ENDIF
    5744 
     5751             
    57455752          CASE DEFAULT
    57465753             CONTINUE
     
    60906097
    60916098          IF ( mode == 'xy' ) grid = 'zs'
    6092 
     6099         
    60936100       CASE ( 'qsws_liq*_xy' )        ! 2d-array
    60946101          IF ( av == 0 ) THEN
     
    62086215          IF ( mode == 'xy' )  grid = 'zs'
    62096216
     6217
    62106218       CASE DEFAULT
    62116219          found = .FALSE.
     
    63776385       WRITE ( 14 )  qsws_veg_av
    63786386    ENDIF
    6379 
     6387   
    63806388    IF ( ALLOCATED( t_soil_av ) )  THEN
    63816389       CALL wrd_write_string( 't_soil_av' )
     
    66766684              t_soil_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) =           &
    66776685                 tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
    6678 
     6686                 
    66796687           CASE ( 'lsm_start_index_h', 'lsm_start_index_v'  )   
    66806688                IF ( k == 1 )  THEN
     
    71967204    END SUBROUTINE calc_z0_water_surface
    71977205
    7198 
    7199 
     7206   
     7207!------------------------------------------------------------------------------!
     7208! Description:
     7209! ------------
     7210!> Calculates 2m temperature for data output at coarse resolution
     7211!------------------------------------------------------------------------------!
     7212    SUBROUTINE lsm_calc_pt_near_surface
     7213
     7214       IMPLICIT NONE
     7215
     7216       INTEGER(iwp)                          :: i, j, k, l, m   !< running indices
     7217
     7218
     7219       DO  m = 1, surf_lsm_h%ns
     7220
     7221          i = surf_lsm_h%i(m)
     7222          j = surf_lsm_h%j(m)
     7223          k = surf_lsm_h%k(m)
     7224
     7225          surf_lsm_h%pt_2m(m) = surf_lsm_h%pt_surface(m) + surf_lsm_h%ts(m) / kappa &
     7226                             * ( log( 2.0_wp /  surf_lsm_h%z0h(m) )                 &
     7227                               - psi_h( 2.0_wp / surf_lsm_h%ol(m) )                 &
     7228                               + psi_h( surf_lsm_h%z0h(m) / surf_lsm_h%ol(m) ) )
     7229
     7230       ENDDO
     7231
     7232    END SUBROUTINE lsm_calc_pt_near_surface
     7233
     7234   
     7235   
     7236!
     7237!-- Integrated stability function for heat and moisture
     7238    FUNCTION psi_h( zeta )
     7239
     7240           USE kinds
     7241
     7242       IMPLICIT NONE
     7243
     7244       REAL(wp)            :: psi_h !< Integrated similarity function result
     7245       REAL(wp)            :: zeta  !< Stability parameter z/L
     7246       REAL(wp)            :: x     !< dummy variable
     7247
     7248       REAL(wp), PARAMETER :: a = 1.0_wp            !< constant
     7249       REAL(wp), PARAMETER :: b = 0.66666666666_wp  !< constant
     7250       REAL(wp), PARAMETER :: c = 5.0_wp            !< constant
     7251       REAL(wp), PARAMETER :: d = 0.35_wp           !< constant
     7252       REAL(wp), PARAMETER :: c_d_d = c / d         !< constant
     7253       REAL(wp), PARAMETER :: bc_d_d = b * c / d    !< constant
     7254
     7255
     7256      IF ( zeta < 0.0_wp )  THEN
     7257         x = SQRT( 1.0_wp  - 16.0_wp * zeta )
     7258         psi_h = 2.0_wp * LOG( (1.0_wp + x ) / 2.0_wp )
     7259      ELSE
     7260         psi_h = - b * ( zeta - c_d_d ) * EXP( -d * zeta ) - (1.0_wp          &
     7261                 + 0.66666666666_wp * a * zeta )**1.5_wp - bc_d_d             &
     7262                 + 1.0_wp
     7263!
     7264!--       Old version for stable conditions (only valid for z/L < 0.5)
     7265!--       psi_h = - 5.0_wp * zeta
     7266       ENDIF
     7267
     7268   END FUNCTION psi_h
     7269   
    72007270 END MODULE land_surface_model_mod
Note: See TracChangeset for help on using the changeset viewer.