Changeset 2575


Ignore:
Timestamp:
Oct 24, 2017 9:57:58 AM (4 years ago)
Author:
maronga
Message:

bugfix in radiation model and improvements in land surface scheme

Location:
palm/trunk
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • palm/trunk/INSTALL/test_oceanml_p3d

    r2492 r2575  
    88        initializing_actions = 'set_constant_profiles',
    99 
    10         phi = 55.6,
     10        latitude = 55.6,
    1111           
    1212        momentum_advec = 'pw-scheme',
  • palm/trunk/SOURCE/check_parameters.f90

    r2564 r2575  
    2525! -----------------
    2626! $Id$
     27! Renamed phi --> latitude
     28!
     29! 2564 2017-10-19 15:56:56Z Giersch
    2730! Variable wind_turbine was added to control_parameters.
    2831!
     
    15961599!
    15971600!-- Compute Coriolis parameter
    1598     f  = 2.0_wp * omega * SIN( phi / 180.0_wp * pi )
    1599     fs = 2.0_wp * omega * COS( phi / 180.0_wp * pi )
     1601    f  = 2.0_wp * omega * SIN( latitude / 180.0_wp * pi )
     1602    fs = 2.0_wp * omega * COS( latitude / 180.0_wp * pi )
    16001603
    16011604!
  • palm/trunk/SOURCE/header.f90

    r2550 r2575  
    17641764!
    17651765!-- Geostrophic parameters
    1766     WRITE ( io, 410 )  phi, omega, f, fs
     1766    WRITE ( io, 410 )  latitude, longitude, omega, f, fs
    17671767
    17681768 !
     
    22002200400 FORMAT (//' Physical quantities:'/ &
    22012201              ' -------------------'/)
    2202 410 FORMAT ('    Geograph. latitude  :   phi    = ',F4.1,' degr'/   &
     2202410 FORMAT ('    Geograph. latitude  :   latitude  = ',F4.1,' degr'/   &
     2203            '    Geograph. longitude :   longitude = ',F4.1,' degr'/   &
    22032204            '    Angular velocity    :   omega  =',E10.3,' rad/s'/  &
    22042205            '    Coriolis parameter  :   f      = ',F9.6,' 1/s'/    &
     
    22152216            '    Specific heat cap. :   c_p   = ',F6.1,' J/(kg K)'/ &
    22162217            '    Vapourization heat :   L_v   =',E9.2,' J/kg')
    2217 417 FORMAT ('    Geograph. longitude :   lambda = ',F4.1,' degr')
    22182218418 FORMAT (/'    Day of the year at model start :   day_init      =     ',I3 &
    22192219            /'    UTC time at model start        :   time_utc_init = ',F7.1' s')
  • palm/trunk/SOURCE/land_surface_model_mod.f90

    r2573 r2575  
    2525! -----------------
    2626! $Id$
     27! Pavement parameterization revised
     28!
     29! 2573 2017-10-20 15:57:49Z scharf
    2730! bugfixes in last_actions
    2831!
     
    269272!> @todo Implement surface runoff model (required when performing long-term LES
    270273!>       with considerable precipitation.
    271 !> @todo Fix crashes with radiation_scheme == 'constant'
    272274!> @todo Revise calculation of f2 when wilting point is non-constant in the
    273275!>       soil
    274 !> @todo Solve problems with soil heat flux paramterization
    275 !> @todo Make pavement_depth variable for each surface element
    276276!> @todo Allow for zero soil moisture (currently, it is set to wilting point)
    277277!> @note No time step criterion is required as long as the soil layers do not
     
    336336    REAL(wp), DIMENSION(0:7), PARAMETER  :: dz_soil_default =                  & ! default soil layer configuration
    337337                                            (/ 0.01_wp, 0.02_wp, 0.04_wp,      &
    338                                                0.07_wp, 0.15_wp, 0.21_wp,      &
    339                                                0.72_wp, 1.89_wp/)
     338                                               0.06_wp, 0.14_wp, 0.26_wp,      &
     339                                               0.54_wp, 1.86_wp/)
    340340
    341341    REAL(wp), DIMENSION(0:3), PARAMETER  :: dz_soil_ref =                      & ! reference four layer soil configuration used for estimating the root fractions
     
    356356
    357357
    358     INTEGER(iwp) :: nzb_soil = 0,        & !< bottom of the soil model (Earth's surface)
    359                     nzt_soil = 7,        & !< top of the soil model
    360                     nzs = 8,             & !< number of soil layers
    361                     pavement_type = 1,   & !< default NAMELIST pavement_type                 
    362                     soil_type = 3,       & !< default NAMELIST soil_type
    363                     vegetation_type = 2, & !< default NAMELIST vegetation_type
    364                     water_type = 1         !< default NAMELISt water_type
     358    INTEGER(iwp) :: nzb_soil = 0,             & !< bottom of the soil model (Earth's surface)
     359                    nzt_soil = 7,             & !< top of the soil model
     360                    nzt_pavement = 0,         & !< top of the pavement within the soil
     361                    nzs = 8,                  & !< number of soil layers
     362                    pavement_depth_level = 0, & !< default NAMELIST nzt_pavement
     363                    pavement_type = 1,        & !< default NAMELIST pavement_type                 
     364                    soil_type = 3,            & !< default NAMELIST soil_type
     365                    vegetation_type = 2,      & !< default NAMELIST vegetation_type
     366                    water_type = 1              !< default NAMELISt water_type
    365367                   
    366368   
     
    392394                m_total = 0.0_wp,                       & !< weighted total water content of the soil (m3/m3)
    393395                n_vangenuchten = 9999999.9_wp,          & !< NAMELIST n_vg
    394                 pavement_depth = 9999999.9_wp,          & !< depth of the pavement
    395396                pavement_heat_capacity = 9999999.9_wp,  & !< volumetric heat capacity of pavement (e.g. roads) (J/m3/K)
    396397                pavement_heat_conduct  = 9999999.9_wp,  & !< heat conductivity for pavements (e.g. roads) (W/m/K)
     
    679680!
    680681!-- TO BE FILLED
    681 !-- Pavement parameters  depth,        z0,       z0h, lambda_h,      rho_c, albedo_type, emissivity 
    682     REAL(wp), DIMENSION(0:6,1:15), PARAMETER :: pavement_pars = RESHAPE( (/ &
    683                       0.050_wp, 1.0E-4_wp, 1.0E-5_wp,  1.00_wp,  1.94E6_wp, 18.0_wp, 0.97_wp,  & !  1
    684                       0.050_wp, 1.0E-4_wp, 1.0E-5_wp,  1.00_wp,  1.94E6_wp, 19.0_wp, 0.94_wp,  & !  2
    685                       0.050_wp, 1.0E-4_wp, 1.0E-5_wp,  1.00_wp,  1.94E6_wp, 20.0_wp, 0.98_wp,  & !  3                                 
    686                       0.050_wp, 1.0E-4_wp, 1.0E-5_wp,  1.00_wp,  1.94E6_wp, 21.0_wp, 0.93_wp,  & !  4
    687                       0.050_wp, 1.0E-4_wp, 1.0E-5_wp,  1.00_wp,  1.94E6_wp, 22.0_wp, 0.97_wp,  & !  5
    688                       0.050_wp, 1.0E-4_wp, 1.0E-5_wp,  1.00_wp,  1.94E6_wp, 23.0_wp, 0.97_wp,  & !  6
    689                       0.050_wp, 1.0E-4_wp, 1.0E-5_wp,  1.00_wp,  1.94E6_wp, 24.0_wp, 0.97_wp,  & !  7
    690                       0.050_wp, 1.0E-4_wp, 1.0E-5_wp,  1.00_wp,  1.94E6_wp, 25.0_wp, 0.94_wp,  & !  8
    691                       0.050_wp, 1.0E-4_wp, 1.0E-5_wp,  1.00_wp,  1.94E6_wp, 26.0_wp, 0.98_wp,  & !  9                                 
    692                       0.050_wp, 1.0E-4_wp, 1.0E-5_wp,  1.00_wp,  1.94E6_wp, 27.0_wp, 0.93_wp,  & ! 10
    693                       0.050_wp, 1.0E-4_wp, 1.0E-5_wp,  1.00_wp,  1.94E6_wp, 28.0_wp, 0.97_wp,  & ! 11
    694                       0.050_wp, 1.0E-4_wp, 1.0E-5_wp,  1.00_wp,  1.94E6_wp, 29.0_wp, 0.97_wp,  & ! 12
    695                       0.050_wp, 1.0E-4_wp, 1.0E-5_wp,  1.00_wp,  1.94E6_wp, 30.0_wp, 0.97_wp,  & ! 13
    696                       0.050_wp, 1.0E-4_wp, 1.0E-5_wp,  1.00_wp,  1.94E6_wp, 31.0_wp, 0.94_wp,  & ! 14
    697                       0.050_wp, 1.0E-4_wp, 1.0E-5_wp,  1.00_wp,  1.94E6_wp, 32.0_wp, 0.98_wp   & ! 15
    698                                                                  /), (/ 7, 15 /) )                             
    699 
     682!-- Pavement parameters      z0,       z0h, albedo_type, emissivity 
     683    REAL(wp), DIMENSION(0:3,1:15), PARAMETER :: pavement_pars = RESHAPE( (/ &
     684                      1.0E-4_wp, 1.0E-5_wp,     18.0_wp,    0.97_wp,  & !  1
     685                      1.0E-4_wp, 1.0E-5_wp,     19.0_wp,    0.94_wp,  & !  2
     686                      1.0E-4_wp, 1.0E-5_wp,     20.0_wp,    0.98_wp,  & !  3                                 
     687                      1.0E-4_wp, 1.0E-5_wp,     21.0_wp,    0.93_wp,  & !  4
     688                      1.0E-4_wp, 1.0E-5_wp,     22.0_wp,    0.97_wp,  & !  5
     689                      1.0E-4_wp, 1.0E-5_wp,     23.0_wp,    0.97_wp,  & !  6
     690                      1.0E-4_wp, 1.0E-5_wp,     24.0_wp,    0.97_wp,  & !  7
     691                      1.0E-4_wp, 1.0E-5_wp,     25.0_wp,    0.94_wp,  & !  8
     692                      1.0E-4_wp, 1.0E-5_wp,     26.0_wp,    0.98_wp,  & !  9                                 
     693                      1.0E-4_wp, 1.0E-5_wp,     27.0_wp,    0.93_wp,  & ! 10
     694                      1.0E-4_wp, 1.0E-5_wp,     28.0_wp,    0.97_wp,  & ! 11
     695                      1.0E-4_wp, 1.0E-5_wp,     29.0_wp,    0.97_wp,  & ! 12
     696                      1.0E-4_wp, 1.0E-5_wp,     30.0_wp,    0.97_wp,  & ! 13
     697                      1.0E-4_wp, 1.0E-5_wp,     31.0_wp,    0.94_wp,  & ! 14
     698                      1.0E-4_wp, 1.0E-5_wp,     32.0_wp,    0.98_wp   & ! 15
     699                      /), (/ 4, 15 /) )                             
     700!
     701!-- Pavement subsurface parameters part 1: thermal conductivity (W/m/K)
     702!--   0.0-0.01, 0.01-0.03, 0.03-0.07, 0.07-0.15, 0.15-0.30, 0.30-0.50,    0.50-1.25,    1.25-3.00
     703    REAL(wp), DIMENSION(0:7,1:15), PARAMETER :: pavement_subsurface_pars_1 = RESHAPE( (/ &
     704       1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp, 9999999.9_wp, 9999999.9_wp, & !  1
     705       1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp, 9999999.9_wp, 9999999.9_wp, & !  2
     706       1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp, 9999999.9_wp, 9999999.9_wp, & !  3
     707       1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp, 9999999.9_wp, 9999999.9_wp, & !  4
     708       1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp, 9999999.9_wp, 9999999.9_wp, & !  5
     709       1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp, 9999999.9_wp, 9999999.9_wp, & !  6
     710       1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp, 9999999.9_wp, 9999999.9_wp, & !  7
     711       1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp, 9999999.9_wp, 9999999.9_wp, & !  8
     712       1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp, 9999999.9_wp, 9999999.9_wp, & !  9
     713       1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp, 9999999.9_wp, 9999999.9_wp, & ! 10
     714       1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp, 9999999.9_wp, 9999999.9_wp, & ! 11
     715       1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp, 9999999.9_wp, 9999999.9_wp, & ! 12
     716       1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp, 9999999.9_wp, 9999999.9_wp, & ! 13
     717       1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp, 9999999.9_wp, 9999999.9_wp, & ! 14
     718       1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp,   1.00_wp, 9999999.9_wp, 9999999.9_wp  & ! 15
     719       /), (/ 8, 15 /) )
     720
     721!
     722!-- Pavement subsurface parameters part 2: volumetric heat capacity (J/m3/K)
     723!--     0.0-0.01, 0.01-0.03, 0.03-0.07, 0.07-0.15, 0.15-0.30, 0.30-0.50,    0.50-1.25,    1.25-3.00
     724    REAL(wp), DIMENSION(0:7,1:15), PARAMETER :: pavement_subsurface_pars_2 = RESHAPE( (/ &
     725       1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 9999999.9_wp, 9999999.9_wp, & !  1
     726       1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 9999999.9_wp, 9999999.9_wp, & !  2
     727       1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 9999999.9_wp, 9999999.9_wp, & !  3
     728       1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 9999999.9_wp, 9999999.9_wp, & !  4
     729       1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 9999999.9_wp, 9999999.9_wp, & !  5
     730       1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 9999999.9_wp, 9999999.9_wp, & !  6
     731       1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 9999999.9_wp, 9999999.9_wp, & !  7
     732       1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 9999999.9_wp, 9999999.9_wp, & !  8
     733       1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 9999999.9_wp, 9999999.9_wp, & !  9
     734       1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 9999999.9_wp, 9999999.9_wp, & ! 10
     735       1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 9999999.9_wp, 9999999.9_wp, & ! 11
     736       1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 9999999.9_wp, 9999999.9_wp, & ! 12
     737       1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 9999999.9_wp, 9999999.9_wp, & ! 13
     738       1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 9999999.9_wp, 9999999.9_wp, & ! 14
     739       1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 1.94E6_wp, 9999999.9_wp, 9999999.9_wp  & ! 15
     740                           /), (/ 8, 15 /) )
     741 
    700742!
    701743!-- TO BE FILLED
     
    11211163          IF ( vegetation_coverage /= 9999999.9_wp  .AND.  vegetation_coverage &
    11221164               /= 0.0_wp )  THEN
    1123                message_string = 'vegetation_type = 1 (bare soil)'//            &
     1165             message_string = 'vegetation_type = 1 (bare soil)'//              &
    11241166                              ' requires vegetation_coverage = 0'
    11251167             CALL message( 'check_parameters', 'PA0471', 1, 2, 0, 6, 0 )
     
    11671209    IF ( TRIM( surface_type ) == 'pavement' )  THEN
    11681210
     1211       IF ( ANY( dz_soil /= 9999999.9_wp )  .AND.  pavement_type /= 0 )  THEN
     1212          message_string = 'non-default setting of dz_soil '//                  &
     1213                           'does not allow to use pavement_type /= 0)'
     1214             CALL message( 'check_parameters', 'PA0341', 1, 2, 0, 6, 0 )
     1215          ENDIF
     1216
    11691217       IF ( pavement_type == 0 )  THEN 
    11701218       
     
    11821230             CALL message( 'check_parameters', 'PA0353', 1, 2, 0, 6, 0 )
    11831231          ENDIF
    1184 
    1185            IF ( pavement_depth == 9999999.9_wp )  THEN
    1186              message_string = 'pavement_type = 0 (user_defined)'//             &
    1187                               'requires setting of pavement_depth'//           &
    1188                               '/= 9999999.9'
    1189              CALL message( 'check_parameters', 'PA0341', 1, 2, 0, 6, 0 )
    1190           ENDIF         
    11911232         
    1192            IF ( pavement_heat_conduct == 9999999.9_wp )  THEN
     1233          IF ( pavement_heat_conduct == 9999999.9_wp )  THEN
    11931234             message_string = 'pavement_type = 0 (user_defined)'//             &
    11941235                              'requires setting of pavement_heat_conduct'//    &
     
    12021243                              '/= 9999999.9'
    12031244             CALL message( 'check_parameters', 'PA0139', 1, 2, 0, 6, 0 )
     1245          ENDIF
     1246
     1247          IF ( pavement_depth_level == 0 )  THEN
     1248             message_string = 'pavement_type = 0 (user_defined)'//             &
     1249                              'requires setting of pavement_depth_level'//     &
     1250                              '/= 0'
     1251             CALL message( 'check_parameters', 'PA0474', 1, 2, 0, 6, 0 )
    12041252          ENDIF
    12051253
     
    21592207       ALLOCATE ( surf_lsm_h%gamma_w_sat(nzb_soil:nzt_soil,1:surf_lsm_h%ns) )
    21602208       ALLOCATE ( surf_lsm_h%lambda_h(nzb_soil:nzt_soil,1:surf_lsm_h%ns)    )
     2209       ALLOCATE ( surf_lsm_h%lambda_h_def(nzb_soil:nzt_soil,1:surf_lsm_h%ns))
    21612210       ALLOCATE ( surf_lsm_h%l_vg(nzb_soil:nzt_soil,1:surf_lsm_h%ns)        )
    21622211       ALLOCATE ( surf_lsm_h%m_fc(nzb_soil:nzt_soil,1:surf_lsm_h%ns)        )
     
    21662215       ALLOCATE ( surf_lsm_h%n_vg(nzb_soil:nzt_soil,1:surf_lsm_h%ns)        )
    21672216       ALLOCATE ( surf_lsm_h%rho_c_total(nzb_soil:nzt_soil,1:surf_lsm_h%ns) )
     2217       ALLOCATE ( surf_lsm_h%rho_c_total_def(nzb_soil:nzt_soil,1:surf_lsm_h%ns) )
    21682218       ALLOCATE ( surf_lsm_h%root_fr(nzb_soil:nzt_soil,1:surf_lsm_h%ns)     )
    21692219   
     
    21832233          ALLOCATE ( surf_lsm_v(l)%gamma_w_sat(nzb_soil:nzt_soil,1:surf_lsm_v(l)%ns) )
    21842234          ALLOCATE ( surf_lsm_v(l)%lambda_h(nzb_soil:nzt_soil,1:surf_lsm_v(l)%ns)    )
     2235          ALLOCATE ( surf_lsm_v(l)%lambda_h_def(nzb_soil:nzt_soil,1:surf_lsm_v(l)%ns))
    21852236          ALLOCATE ( surf_lsm_v(l)%l_vg(nzb_soil:nzt_soil,1:surf_lsm_v(l)%ns)        )
    21862237          ALLOCATE ( surf_lsm_v(l)%m_fc(nzb_soil:nzt_soil,1:surf_lsm_v(l)%ns)        )
     
    21902241          ALLOCATE ( surf_lsm_v(l)%n_vg(nzb_soil:nzt_soil,1:surf_lsm_v(l)%ns)        )
    21912242          ALLOCATE ( surf_lsm_v(l)%rho_c_total(nzb_soil:nzt_soil,1:surf_lsm_v(l)%ns) ) 
     2243          ALLOCATE ( surf_lsm_v(l)%rho_c_total_def(nzb_soil:nzt_soil,1:surf_lsm_v(l)%ns) ) 
    21922244          ALLOCATE ( surf_lsm_v(l)%root_fr(nzb_soil:nzt_soil,1:surf_lsm_v(l)%ns)     )
    21932245
     
    23652417       IF ( pavement_type /= 0 )  THEN 
    23662418
    2367           IF ( pavement_depth == 9999999.9_wp )  THEN
    2368              pavement_depth = pavement_pars(0,pavement_type)
    2369           ELSE
    2370              pavement_depth = MAX( 0.5_wp * dz_soil(nzb_soil), pavement_depth )
    2371           ENDIF
     2419!
     2420!--       When a pavement_type is used, overwrite a possible setting of
     2421!--       the pavement depth as it is already defined by the pavement type
     2422          pavement_depth_level = 0
    23722423
    23732424          IF ( z0_pavement == 9999999.9_wp )  THEN
    2374              z0_pavement  = pavement_pars(1,pavement_type)
     2425             z0_pavement  = pavement_pars(0,pavement_type)
    23752426          ENDIF
    23762427
    23772428          IF ( z0h_pavement == 9999999.9_wp )  THEN
    2378              z0h_pavement = pavement_pars(2,pavement_type)
     2429             z0h_pavement = pavement_pars(1,pavement_type)
    23792430          ENDIF
    23802431
    23812432          IF ( pavement_heat_conduct == 9999999.9_wp )  THEN
    2382              pavement_heat_conduct = pavement_pars(3,pavement_type)
     2433             pavement_heat_conduct = pavement_subsurface_pars_1(0,pavement_type)
    23832434          ENDIF
    23842435
    23852436          IF ( pavement_heat_capacity == 9999999.9_wp )  THEN
    2386              pavement_heat_capacity = pavement_pars(4,pavement_type)
     2437             pavement_heat_capacity = pavement_subsurface_pars_2(0,pavement_type)
    23872438          ENDIF   
    23882439   
    23892440          IF ( albedo_type == 9999999  .AND.  albedo == 9999999.9_wp )  THEN
    2390              albedo_type = INT(pavement_pars(5,pavement_type))       
     2441             albedo_type = INT(pavement_pars(2,pavement_type))       
    23912442          ENDIF
    23922443   
    23932444          IF ( emissivity == 9999999.9_wp )  THEN
    2394              emissivity = pavement_pars(6,pavement_type)       
     2445             emissivity = pavement_pars(3,pavement_type)       
     2446          ENDIF
     2447
     2448!
     2449!--       If the depth level of the pavement is not set, determine it from
     2450!--       lookup table.
     2451          IF ( pavement_depth_level == 0 )  THEN
     2452             DO  k = nzb_soil, nzt_soil 
     2453                IF ( pavement_subsurface_pars_1(k,pavement_type) == 9999999.9_wp &
     2454                   .OR. pavement_subsurface_pars_2(k,pavement_type)              &
     2455                   == 9999999.9_wp)  THEN
     2456                   nzt_pavement = k-1
     2457                   EXIT
     2458                ENDIF
     2459             ENDDO
     2460          ELSE
     2461             nzt_pavement = pavement_depth_level
    23952462          ENDIF
    23962463
     
    24662533                                                 * dz_soil(nzb_soil)           &
    24672534                                                 * 0.25_wp
    2468                 surf_lsm_h%lambda_h_def(m)    = pavement_heat_conduct                                     
    2469                 surf_lsm_h%rho_c_def(m)       = pavement_heat_capacity                                               
     2535
     2536                IF ( pavement_type /= 0 )  THEN
     2537                   DO  k = nzb_soil, nzt_soil 
     2538                      surf_lsm_h%lambda_h_def(k,m)      =  pavement_subsurface_pars_1(k,pavement_type)                       
     2539                      surf_lsm_h%rho_c_total_def(k,m)   =  pavement_subsurface_pars_2(k,pavement_type)
     2540                   ENDDO
     2541                ELSE
     2542                    surf_lsm_h%lambda_h_def(:,m)     = pavement_heat_conduct
     2543                    surf_lsm_h%rho_c_total_def(:,m)  = pavement_heat_capacity
     2544                ENDIF
    24702545
    24712546             ELSEIF ( surf_lsm_h%vegetation_surface(m) )  THEN
     
    25562631                                                * dz_soil(nzb_soil)            &
    25572632                                                * 0.25_wp
    2558                    surf_lsm_v(l)%lambda_h_def(m)   = pavement_heat_conduct                                     
    2559                    surf_lsm_v(l)%rho_c_def(m)      = pavement_heat_capacity                           
     2633                IF ( pavement_type /= 0 )  THEN
     2634                   DO  k = nzb_soil, nzt_soil 
     2635                      surf_lsm_v(l)%lambda_h_def(k,m)    =  pavement_subsurface_pars_1(k,pavement_type)                       
     2636                      surf_lsm_v(l)%rho_c_total_def(k,m) =  pavement_subsurface_pars_2(k,pavement_type) 
     2637                   ENDDO
     2638                ELSE
     2639                    surf_lsm_v(l)%lambda_h_def(:,m)     = pavement_heat_conduct
     2640                    surf_lsm_v(l)%rho_c_total_def(:,m)  = pavement_heat_capacity
     2641                ENDIF
     2642                       
    25602643                   
    25612644                ELSEIF ( surf_lsm_v(l)%vegetation_surface(m) )  THEN
     
    27342817             j   = surf_lsm_h%j(m)
    27352818             DO  k = nzb_soil, nzt_soil
    2736                 IF ( surf_lsm_h%pavement_surface(m)  .AND.  zs(k) <= pavement_depth )  THEN
     2819                IF ( surf_lsm_h%pavement_surface(m)  .AND.                     &
     2820                     k <= nzt_pavement )  THEN
    27372821                   surf_lsm_h%root_fr(k,m) = 0.0_wp
    27382822                ELSE
     
    27422826
    27432827!
    2744 !--          Normalize so that the sum = 1. Only relevant when the root distribution was
    2745 !--          set to zero due to pavement at some layers.
     2828!--          Normalize so that the sum = 1. Only relevant when the root        
     2829!--          distribution was set to zero due to pavement at some layers.
    27462830             IF ( SUM( surf_lsm_h%root_fr(:,m) ) > 0.0_wp )  THEN
    27472831                DO k = nzb_soil, nzt_soil
    2748                    surf_lsm_h%root_fr(k,m) = surf_lsm_h%root_fr(k,m) / SUM( surf_lsm_h%root_fr(:,m) )
     2832                   surf_lsm_h%root_fr(k,m) = surf_lsm_h%root_fr(k,m)           &
     2833                   / SUM( surf_lsm_h%root_fr(:,m) )
    27492834                ENDDO
    27502835             ENDIF
     
    27572842
    27582843                DO  k = nzb_soil, nzt_soil
    2759                    IF ( surf_lsm_v(l)%pavement_surface(m)  .AND.  zs(k) <= pavement_depth )  THEN
     2844                   IF ( surf_lsm_v(l)%pavement_surface(m)  .AND.               &
     2845                        k <= nzt_pavement )  THEN
    27602846                      surf_lsm_v(l)%root_fr(k,m) = 0.0_wp
    27612847                   ELSE
     
    27642850                ENDDO
    27652851!
    2766 !--             Normalize so that the sum = 1. Only relevant when the root distribution was
    2767 !--             sset to zero due to pavement at some layers.
     2852!--             Normalize so that the sum = 1. Only relevant when the root      
     2853!--             distribution was set to zero due to pavement at some layers.
    27682854                IF ( SUM( surf_lsm_v(l)%root_fr(:,m) ) > 0.0_wp )  THEN
    27692855                   DO  k = nzb_soil, nzt_soil 
    2770                       surf_lsm_v(l)%root_fr(k,m) = surf_lsm_v(l)%root_fr(k,m) / SUM( surf_lsm_v(l)%root_fr(:,m) )
     2856                      surf_lsm_v(l)%root_fr(k,m) = surf_lsm_v(l)%root_fr(k,m)  &
     2857                      / SUM( surf_lsm_v(l)%root_fr(:,m) )
    27712858                   ENDDO
    27722859                ENDIF
     
    29293016       ALLOCATE ( surf_lsm_h%g_d(1:surf_lsm_h%ns)              )
    29303017       ALLOCATE ( surf_lsm_h%lai(1:surf_lsm_h%ns)              )
    2931        ALLOCATE ( surf_lsm_h%lambda_h_def(1:surf_lsm_h%ns)     )
    29323018       ALLOCATE ( surf_lsm_h%lambda_surface_u(1:surf_lsm_h%ns) )
    29333019       ALLOCATE ( surf_lsm_h%lambda_surface_s(1:surf_lsm_h%ns) )
     
    29373023       ALLOCATE ( surf_lsm_h%qsws_liq(1:surf_lsm_h%ns)         )
    29383024       ALLOCATE ( surf_lsm_h%qsws_veg(1:surf_lsm_h%ns)         )
    2939        ALLOCATE ( surf_lsm_h%rad_net_l(1:surf_lsm_h%ns)        )
    2940        ALLOCATE ( surf_lsm_h%rho_c_def(1:surf_lsm_h%ns)        ) 
     3025       ALLOCATE ( surf_lsm_h%rad_net_l(1:surf_lsm_h%ns)        )
    29413026       ALLOCATE ( surf_lsm_h%r_a(1:surf_lsm_h%ns)              )
    29423027       ALLOCATE ( surf_lsm_h%r_canopy(1:surf_lsm_h%ns)         )
     
    29613046          ALLOCATE ( surf_lsm_v(l)%g_d(1:surf_lsm_v(l)%ns)              )
    29623047          ALLOCATE ( surf_lsm_v(l)%lai(1:surf_lsm_v(l)%ns)              )
    2963           ALLOCATE ( surf_lsm_v(l)%lambda_h_def(1:surf_lsm_v(l)%ns)     )
    29643048          ALLOCATE ( surf_lsm_v(l)%lambda_surface_u(1:surf_lsm_v(l)%ns) )
    29653049          ALLOCATE ( surf_lsm_v(l)%lambda_surface_s(1:surf_lsm_v(l)%ns) )
     
    29703054          ALLOCATE ( surf_lsm_v(l)%qsws_veg(1:surf_lsm_v(l)%ns)         )
    29713055          ALLOCATE ( surf_lsm_v(l)%rad_net_l(1:surf_lsm_v(l)%ns)        )
    2972           ALLOCATE ( surf_lsm_v(l)%rho_c_def(1:surf_lsm_h%ns)           ) 
    29733056          ALLOCATE ( surf_lsm_v(l)%r_a(1:surf_lsm_v(l)%ns)              )
    29743057          ALLOCATE ( surf_lsm_v(l)%r_canopy(1:surf_lsm_v(l)%ns)         )
     
    30283111                                  l_vangenuchten, min_canopy_resistance,       &
    30293112                                  min_soil_resistance, n_vangenuchten,         &
    3030                                   pavement_depth, pavement_heat_capacity,      &
     3113                                  pavement_depth_level,                        &
     3114                                  pavement_heat_capacity,                      &
    30313115                                  pavement_heat_conduct, pavement_type,        &
    30323116                                  residual_moisture, root_fraction,            &
     
    31353219             DO  k = nzb_soil, nzt_soil
    31363220
    3137                 IF ( surf%pavement_surface(m)  .AND.  zs(k) <= pavement_depth )  THEN
     3221                IF ( surf%pavement_surface(m)  .AND.  k <= nzt_pavement )  THEN
    31383222                   
    3139                    surf%rho_c_total(k,m) = surf%rho_c_def(m)
    3140                    lambda_temp(k)   = surf%lambda_h_def(m)
     3223                   surf%rho_c_total(k,m) = surf%rho_c_total_def(k,m)
     3224                   lambda_temp(k)        = surf%lambda_h_def(k,m)
    31413225
    31423226                ELSE           
     
    31673251!--          true pavement depth is considered
    31683252             DO  k = nzb_soil, nzt_soil-1
    3169                 IF ( surf%pavement_surface(m)  .AND.  zs(k) < pavement_depth   &
    3170                      .AND.  zs(k+1) > pavement_depth )                         &
    3171                 THEN
    3172                    surf%lambda_h(k,m) = ( pavement_depth - zs(k) )             &
    3173                                       * ddz_soil_center(k+1) * lambda_temp(k)  &
    3174                                       + ( zs(k+1) - pavement_depth )           &
    3175                                       * ddz_soil_center(k+1) * lambda_temp(k+1)
    3176                 ELSE
    31773253                   surf%lambda_h(k,m) = ( lambda_temp(k+1) + lambda_temp(k) )  &
    31783254                                        * 0.5_wp
    3179                 ENDIF
    3180 
    31813255             ENDDO
    31823256             surf%lambda_h(nzt_soil,m) = lambda_temp(nzt_soil)
     
    32323306!--             In order to prevent water tranport through paved surfaces,
    32333307!--             conductivity and diffusivity are set to zero
    3234                 IF ( surf%pavement_surface(m)  .AND.  zs(k) <= pavement_depth )  THEN
     3308                IF ( surf%pavement_surface(m)  .AND.  k <= nzt_pavement )  THEN
    32353309
    32363310                   lambda_temp(k) = 0.0_wp
     
    32883362!--             ECMWF-IFS Eq. 8.81
    32893363                DO  k = nzb_soil, nzt_soil-1
    3290                    IF ( surf%pavement_surface(m)  .AND.  zs(k) < pavement_depth&
    3291                         .AND.  zs(k+1) > pavement_depth )                      &
    3292                    THEN
    3293                       surf%lambda_w(k,m) = ( pavement_depth - zs(k) )          &
    3294                                       * ddz_soil_center(k+1) * lambda_temp(k)  &
    3295                                       + ( zs(k+1) - pavement_depth )           &
    3296                                       * ddz_soil_center(k+1) * lambda_temp(k+1)
    3297 
    3298                       surf%gamma_w(k,m) = ( pavement_depth - zs(k) )          &
    3299                                       * ddz_soil_center(k+1) * gamma_temp(k)  &
    3300                                       + ( zs(k+1) - pavement_depth )           &
    3301                                       * ddz_soil_center(k+1) * gamma_temp(k+1)
    3302                    ELSE
    3303                       surf%lambda_w(k,m) = ( lambda_temp(k+1) +                &
    3304                                                    lambda_temp(k) ) * 0.5_wp
    3305                       surf%gamma_w(k,m)  = ( gamma_temp(k+1)  +                &
    3306                                                    gamma_temp(k) )  * 0.5_wp
    3307                    ENDIF
     3364                   surf%lambda_w(k,m) = ( lambda_temp(k+1) + lambda_temp(k) )  &
     3365                                        * 0.5_wp
     3366                   surf%gamma_w(k,m)  = ( gamma_temp(k+1)  +  gamma_temp(k) )  &
     3367                                        * 0.5_wp
    33083368                ENDDO
    3309 
    33103369!
    33113370!
  • palm/trunk/SOURCE/modules.f90

    r2563 r2575  
    2525! -----------------
    2626! $Id$
     27! Renamed phi -> latitude, moved longitude from radiation model to modules
     28!
     29! 2563 2017-10-19 15:36:10Z Giersch
    2730! Variable wind_turbine was added to control_parameters
    2831!
     
    13201323    REAL(wp) ::  kappa = 0.4_wp                                !< von Karman constant
    13211324    REAL(wp) ::  km_constant = -1.0_wp                         !< namelist parameter
     1325    REAL(wp) ::  latitude = 55.0_wp                            !< namelist parameter
     1326    REAL(wp) ::  longitude = 0.0_wp                            !< namelist parameter
    13221327    REAL(wp) ::  mask_scale_x = 1.0_wp                         !< namelist parameter
    13231328    REAL(wp) ::  mask_scale_y = 1.0_wp                         !< namelist parameter
     
    13301335    REAL(wp) ::  outflow_source_plane = -9999999.9_wp          !< namelist parameter
    13311336    REAL(wp) ::  particle_maximum_age = 9999999.9_wp           !< namelist parameter
    1332     REAL(wp) ::  phi = 55.0_wp                                 !< namelist parameter
    13331337    REAL(wp) ::  prandtl_number = 1.0_wp                       !< namelist parameter
    13341338    REAL(wp) ::  precipitation_amount_interval = 9999999.9_wp  !< namelist parameter
  • palm/trunk/SOURCE/parin.f90

    r2563 r2575  
    2525! -----------------
    2626! $Id$
     27! Renamed phi -> latitude, added longitude
     28!
     29! 2563 2017-10-19 15:36:10Z Giersch
    2730! Changed position where restart files are closed.
    2831!
     
    417420             inflow_disturbance_begin, inflow_disturbance_end,                 &
    418421             initializing_actions, km_constant,                                &
    419              large_scale_forcing, large_scale_subsidence,                      &
    420              limiter_sedimentation,                                            &
     422             large_scale_forcing, large_scale_subsidence, latitude,            &
     423             limiter_sedimentation, longitude,                                 &
    421424             loop_optimization, lsf_exception, masking_method, mg_cycles,      &
    422425             mg_switch_to_pe0_level, mixing_length_1d, momentum_advec,         &
    423426             most_method, na_init, nc_const, netcdf_precision, neutral, ngsrb, &
    424427             nsor, nsor_ini, nudging, nx, ny, nz, ocean, omega, omega_sor,     &
    425              outflow_source_plane, passive_scalar, phi,                        &
     428             outflow_source_plane, passive_scalar,                             &
    426429             prandtl_number, precipitation, psolver, pt_damping_factor,        &
    427430             pt_damping_width, pt_reference, pt_surface,                       &
  • palm/trunk/SOURCE/radiation_model_mod.f90

    r2547 r2575  
    2525! -----------------
    2626! $Id$
     27! Bugfix: calculation of shortwave and longwave albedos for RRTMG swapped
     28!
     29! 2547 2017-10-16 12:41:56Z schwenkel
    2730! extended by cloud_droplets option, minor bugfix and correct calculation of
    2831! cloud droplet number concentration
     
    187190    USE control_parameters,                                                    &
    188191        ONLY:  cloud_droplets, cloud_physics, g, initializing_actions,         &
    189                large_scale_forcing, lsf_surf, microphysics_morrison, phi,      &
    190                pt_surface, rho_surface, surface_pressure,                      &
    191                time_since_reference_point
     192               latitude, longitude, large_scale_forcing, lsf_surf,             &
     193               microphysics_morrison, pt_surface, rho_surface,                 &
     194               surface_pressure, time_since_reference_point
    192195
    193196    USE date_and_time_mod,                                                     &
     
    299302                dt_radiation = 0.0_wp,           & !< radiation model timestep
    300303                emissivity = 9999999.9_wp,       & !< NAMELIST surface emissivity
    301                 lambda = 0.0_wp,                 & !< longitude in degrees
    302304                lon = 0.0_wp,                    & !< longitude in radians
    303305                lat = 0.0_wp,                    & !< latitude in radians
     
    972974          decl_2 = 2.0_wp * pi / 365.0_wp
    973975          decl_3 = decl_2 * 81.0_wp
    974           lat    = phi * pi / 180.0_wp
    975           lon    = lambda * pi / 180.0_wp
     976          lat    = latitude * pi / 180.0_wp
     977          lon    = longitude * pi / 180.0_wp
    976978       ENDIF
    977979
     
    10391041
    10401042          IF ( albedo_type /= 0 )  THEN
     1043             IF ( albedo_sw_dif == 9999999.9_wp )  THEN
     1044                albedo_sw_dif = albedo_pars(0,albedo_type)
     1045                albedo_sw_dir = albedo_sw_dif
     1046             ENDIF
    10411047             IF ( albedo_lw_dif == 9999999.9_wp )  THEN
    1042                 albedo_lw_dif = albedo_pars(0,albedo_type)
     1048                albedo_lw_dif = albedo_pars(1,albedo_type)
    10431049                albedo_lw_dir = albedo_lw_dif
    1044              ENDIF
    1045              IF ( albedo_sw_dif == 9999999.9_wp )  THEN
    1046                 albedo_sw_dif = albedo_pars(1,albedo_type)
    1047                 albedo_sw_dir = albedo_sw_dif
    10481050             ENDIF
    10491051          ENDIF
     
    13651367       ENDIF
    13661368       
    1367        IF ( radiation .AND. radiation_scheme /= 'constant' )  THEN
    1368           WRITE ( io, 1 )  lambda
    1369        ENDIF
    1370 
    13711369       WRITE( io, 12 ) dt_radiation
    13721370 
    13731371
    1374  1 FORMAT ('    Geograph. longitude            :   lambda = ',F4.1,' degr')
    13751372 3 FORMAT (//' Radiation model information:'/                                  &
    13761373              ' ----------------------------'/)
     
    14061403                                  albedo_lw_dif, albedo_sw_dir, albedo_sw_dif, &
    14071404                                  constant_albedo, dt_radiation,               &
    1408                                   lambda, lw_radiation, net_radiation,         &
     1405                                  lw_radiation, net_radiation,                 &
    14091406                                  radiation_scheme, skip_time_do_radiation,    &
    14101407                                  sw_radiation, unscheduled_radiation_calls
  • palm/trunk/SOURCE/read_var_list.f90

    r2563 r2575  
    2525! -----------------
    2626! $Id$
     27! Renamed phi -> latitude, added longitude
     28!
     29! 2563 2017-10-19 15:36:10Z Giersch
    2730! CALL stg_read_restart_data moved to synthetic_turbulence_generator_mod and
    2831! CALL flight_read_restart_data moved to virtual_flights_mod. Furthermore
     
    580583          CASE ( 'passive_scalar' )
    581584             READ ( 13 )  passive_scalar
    582           CASE ( 'phi' )
    583              READ ( 13 )  phi
     585          CASE ( 'latitude' )
     586             READ ( 13 )  latitude
     587          CASE ( 'longitude' )
     588             READ ( 13 )  longitude
    584589          CASE ( 'prandtl_number' )
    585590             READ ( 13 )  prandtl_number
  • palm/trunk/SOURCE/surface_mod.f90

    r2547 r2575  
    2525! -----------------
    2626! $Id$
     27! Pavement parameterization revised
     28!
     29! 2547 2017-10-16 12:41:56Z schwenkel
    2730! extended by cloud_droplets option
    2831!
     
    170173       REAL(wp), DIMENSION(:), ALLOCATABLE   ::  rad_net_l         !< net radiation
    171174       REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  lambda_h          !< heat conductivity of soil (W/m/K)
    172        REAL(wp), DIMENSION(:), ALLOCATABLE  ::  lambda_h_def      !< default heat conductivity of soil (W/m/K)   
     175       REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  lambda_h_def      !< default heat conductivity of soil (W/m/K)   
    173176       
    174177       LOGICAL, DIMENSION(:), ALLOCATABLE  ::  building_surface    !< flag parameter indicating that the surface element is covered by buildings (no LSM actions, not implemented yet)
     
    205208       REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  m_wilt            !< soil moisture at permanent wilting point (m3/m3)
    206209       REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  n_vg              !< coef. Van Genuchten 
    207        REAL(wp), DIMENSION(:),   ALLOCATABLE ::  rho_c_def         !< default volumetric heat capacity of the (soil) layer (J/m3/K)
     210       REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  rho_c_total_def   !< default volumetric heat capacity of the (soil) layer (J/m3/K)
    208211       REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  rho_c_total       !< volumetric heat capacity of the actual soil matrix (J/m3/K)
    209212       REAL(wp), DIMENSION(:,:), ALLOCATABLE ::  root_fr           !< root fraction within the soil layers
  • palm/trunk/SOURCE/write_var_list.f90

    r2574 r2575  
    2525! -----------------
    2626! $Id$
     27! Renamed phi -> latitude, added longitude
     28!
     29! 2574 2017-10-23 09:02:53Z Giersch
    2730! Bugfix: Increased length of the character string *** end ***
    2831!
     
    249252
    250253
    251     binary_version = '4.3'
     254    binary_version = '4.4'
    252255
    253256    WRITE ( 14 )  binary_version
     
    492495    WRITE ( 14 )  'passive_scalar                '
    493496    WRITE ( 14 )  passive_scalar
    494     WRITE ( 14 )  'phi                           '
    495     WRITE ( 14 )  phi
     497    WRITE ( 14 )  'latitude                      '
     498    WRITE ( 14 )  latitude
     499    WRITE ( 14 )  'longitude                     '
     500    WRITE ( 14 )  longitude
    496501    WRITE ( 14 )  'prandtl_number                '
    497502    WRITE ( 14 )  prandtl_number
Note: See TracChangeset for help on using the changeset viewer.