Changeset 2930 for palm


Ignore:
Timestamp:
Mar 23, 2018 4:30:46 PM (7 years ago)
Author:
suehring
Message:

Remove default surfaces from radiation model and add check for this; revise checks for surface_fraction

Location:
palm/trunk/SOURCE
Files:
2 edited

Legend:

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

    r2925 r2930  
    2525! -----------------
    2626! $Id$
     27! Revise checks for surface_fraction.
     28!
     29! 2925 2018-03-23 14:54:11Z suehring
    2730! Check for further inconsistent settings of surface_fractions.
    2831! Some messages slightly rephrased and error numbers renamed.
     
    27852788       INTEGER(iwp) ::  i      !< loop index along x-direction
    27862789       INTEGER(iwp) ::  j      !< loop index along y-direction
     2790       INTEGER(iwp) ::  n_surf !< number of different surface types at given location
    27872791
    27882792       LOGICAL      ::  check_passed !< flag indicating if a check passed
     
    29912995             ENDIF
    29922996!
    2993 !--          Check for consistency of surface fraction.
    2994 !--          Sum of surface fractions must not exceed one.
    2995              IF ( ANY ( surface_fraction_f%frac(:,j,i) ==                      &
    2996                         surface_fraction_f%fill ) )  THEN
    2997                 message_string = 'If more than one natural surface type is ' //&
    2998                               'given at a location, surface_fraction ' //      &
    2999                               'must be provided.'
    3000                 CALL message( 'netcdf_data_input_mod', 'NDI027',               &
     2997!--          Check for consistency of surface fraction. If more than one type
     2998!--          is set, surface fraction need to be given and the sum must not
     2999!--          be larger than 1.
     3000             n_surf = 0
     3001             IF ( vegetation_type_f%var(j,i) /= vegetation_type_f%fill )       &
     3002                n_surf = n_surf + 1
     3003             IF ( water_type_f%var(j,i)      /= water_type_f%fill )            &
     3004                n_surf = n_surf + 1
     3005             IF ( pavement_type_f%var(j,i)   /= pavement_type_f%fill )         &
     3006                n_surf = n_surf + 1
     3007             
     3008             IF ( n_surf > 1 )  THEN
     3009                IF ( ANY ( surface_fraction_f%frac(:,j,i) ==                   &
     3010                     surface_fraction_f%fill ) )  THEN
     3011                   message_string = 'If more than one surface type is ' //     &
     3012                                 'given at a location, surface_fraction ' //   &
     3013                                 'must be provided.'
     3014                   CALL message( 'netcdf_data_input_mod', 'NDI027',            &
    30013015                                  2, 2, 0, 6, 0 )
    3002              ENDIF
    3003              IF ( SUM ( surface_fraction_f%frac(:,j,i) ) > 1.0_wp )  THEN
    3004                 message_string = 'surface_fraction must not exceed 1'
    3005                 CALL message( 'netcdf_data_input_mod', 'NDI028',               &
    3006                                2, 2, 0, 6, 0 )
     3016                ENDIF
     3017                IF ( SUM ( surface_fraction_f%frac(:,j,i) ) > 1.0_wp )  THEN
     3018                   message_string = 'surface_fraction must not exceed 1'
     3019                   CALL message( 'netcdf_data_input_mod', 'NDI028',            &
     3020                                  2, 2, 0, 6, 0 )
     3021                ENDIF
    30073022             ENDIF
    30083023!
    30093024!--          Check for further mismatches, e.g. vegetation_type is set but
    30103025!--          surface vegetation fraction is zero.
    3011              IF ( ( vegetation_type_f%var(j,i) /= vegetation_type_f%fill  .AND.  &
    3012                     surface_fraction_f%frac(0,j,i) == 0.0_wp )  .OR.             &
    3013                   ( pavement_type_f%var(j,i) /= pavement_type_f%fill     .AND.   &
    3014                     surface_fraction_f%frac(1,j,i) == 0.0_wp )  .OR.             &
    3015                   ( water_type_f%var(j,i) /= water_type_f%fill           .AND.   &
    3016                     surface_fraction_f%frac(2,j,i) == 0.0_wp ) )  THEN
    3017                 WRITE( message_string, * ) 'Mismatch in setting of '     //      &
    3018                                'surface_fraction. Vegetation-, pavement-, or '// &
    3019                                'water surface is given at (i,j) = ( ', i, j,     &
    3020                                ' ), but surface fraction is 0 for the given type.'
    3021                 CALL message( 'netcdf_data_input_mod', 'NDI029',                 &
     3026             IF ( ( vegetation_type_f%var(j,i) /= vegetation_type_f%fill  .AND.&
     3027                 ( surface_fraction_f%frac(0,j,i) == 0.0_wp .OR.               &
     3028                   surface_fraction_f%frac(0,j,i) == surface_fraction_f%fill ) &
     3029                  )  .OR.                                                      &
     3030                  ( pavement_type_f%var(j,i) /= pavement_type_f%fill     .AND. &
     3031                 ( surface_fraction_f%frac(1,j,i) == 0.0_wp .OR.               &
     3032                   surface_fraction_f%frac(1,j,i) == surface_fraction_f%fill ) &
     3033                  )  .OR.                                                      &
     3034                  ( water_type_f%var(j,i) /= water_type_f%fill           .AND. &
     3035                 ( surface_fraction_f%frac(2,j,i) == 0.0_wp .OR.               &
     3036                   surface_fraction_f%frac(2,j,i) == surface_fraction_f%fill ) &
     3037                  ) )  THEN
     3038                WRITE( message_string, * ) 'Mismatch in setting of '     //    &
     3039                             'surface_fraction. Vegetation-, pavement-, or '// &
     3040                             'water surface is given at (i,j) = ( ', i, j,     &
     3041                             ' ), but surface fraction is 0 for the given type.'
     3042                CALL message( 'netcdf_data_input_mod', 'NDI029',               &
    30223043                               2, 2, 0, 6, 0 )
    30233044             ENDIF
     
    30253046!--          Check for further mismatches, e.g. vegetation_type is not set       
    30263047!--          surface vegetation fraction is non-zero.
    3027              IF ( ( vegetation_type_f%var(j,i) == vegetation_type_f%fill  .AND.  &
    3028                     surface_fraction_f%frac(0,j,i) /= 0.0_wp )  .OR.             &
    3029                   ( pavement_type_f%var(j,i) == pavement_type_f%fill     .AND.   &
    3030                     surface_fraction_f%frac(1,j,i) /= 0.0_wp )  .OR.             &
    3031                   ( water_type_f%var(j,i) == water_type_f%fill           .AND.   &
    3032                     surface_fraction_f%frac(2,j,i) /= 0.0_wp ) )  THEN
    3033                 WRITE( message_string, * ) 'Mismatch in setting of '     //      &
    3034                                'surface_fraction. Vegetation-, pavement-, or '// &
    3035                                'water surface is not given at (i,j) = ( ', i, j, &
    3036                                ' ), but surface fraction is not 0 for the ' //   &
    3037                                'given type.'
    3038                 CALL message( 'netcdf_data_input_mod', 'NDI030',                 &
     3048             IF ( ( vegetation_type_f%var(j,i) == vegetation_type_f%fill  .AND.&
     3049                 ( surface_fraction_f%frac(0,j,i) /= 0.0_wp .AND.              &
     3050                   surface_fraction_f%frac(0,j,i) /= surface_fraction_f%fill ) &
     3051                  )  .OR.                                                      &
     3052                  ( pavement_type_f%var(j,i) == pavement_type_f%fill     .AND. &
     3053                 ( surface_fraction_f%frac(1,j,i) /= 0.0_wp .AND.              &
     3054                   surface_fraction_f%frac(1,j,i) /= surface_fraction_f%fill ) &
     3055                  )  .OR.                                                      &
     3056                  ( water_type_f%var(j,i) == water_type_f%fill           .AND. &
     3057                 ( surface_fraction_f%frac(2,j,i) /= 0.0_wp .AND.              &
     3058                   surface_fraction_f%frac(2,j,i) /= surface_fraction_f%fill ) &
     3059                  ) )  THEN
     3060                WRITE( message_string, * ) 'Mismatch in setting of '     //    &
     3061                             'surface_fraction. Vegetation-, pavement-, or '// &
     3062                             'water surface is not given at (i,j) = ( ', i, j, &
     3063                             ' ), but surface fraction is not 0 for the ' //   &
     3064                             'given type.'
     3065                CALL message( 'netcdf_data_input_mod', 'NDI030',               &
    30393066                               2, 2, 0, 6, 0 )
    30403067             ENDIF
  • palm/trunk/SOURCE/radiation_model_mod.f90

    r2920 r2930  
    2828! -----------------
    2929! $Id$
     30! Remove default surfaces from radiation model, does not make much sense to
     31! apply radiation model without energy-balance solvers; Further, add check for
     32! this.
     33!
     34! 2920 2018-03-22 11:22:01Z kanani
    3035! - Bugfix: Initialize pcbl array (=-1)
    3136! moh.hefny:
     
    344349    USE surface_mod,                                                           &
    345350        ONLY:  get_topography_top_index, get_topography_top_index_ji,          &
    346                surf_def_h, surf_def_v, surf_lsm_h,                             &
    347                surf_lsm_v, surf_type, surf_usm_h, surf_usm_v
     351               surf_lsm_h, surf_lsm_v, surf_type, surf_usm_h, surf_usm_v
    348352
    349353    IMPLICIT NONE
     
    12191223
    12201224       USE control_parameters,                                                 &
    1221            ONLY: message_string, topography, urban_surface
     1225           ONLY: land_surface, message_string, topography, urban_surface
    12221226
    12231227       USE netcdf_data_input_mod,                                              &
     
    12261230       IMPLICIT NONE
    12271231       
     1232!
     1233!--    In case no urban-surface or land-surface model is applied, usage of
     1234!--    a radiation model make no sense.         
     1235       IF ( .NOT. land_surface  .AND.  .NOT. urban_surface )  THEN
     1236          message_string = 'Usage of radiation module is only allowed if ' //  &
     1237                           'land-surface and/or urban-surface model is applied.'
     1238          CALL message( 'check_parameters', 'PA0486', 1, 2, 0, 6, 0 )
     1239       ENDIF
    12281240
    12291241       IF ( radiation_scheme /= 'constant'   .AND.                             &
     
    13161328!
    13171329!--    Allocate array for storing the surface net radiation
    1318        IF ( .NOT. ALLOCATED ( surf_def_h(0)%rad_net )  .AND.                   &
    1319                   surf_def_h(0)%ns > 0  )  THEN
    1320           ALLOCATE( surf_def_h(0)%rad_net(1:surf_def_h(0)%ns) )
    1321           surf_def_h(0)%rad_net = 0.0_wp
    1322        ENDIF
    13231330       IF ( .NOT. ALLOCATED ( surf_lsm_h%rad_net )  .AND.                      &
    13241331                  surf_lsm_h%ns > 0  )   THEN
     
    13321339       ENDIF
    13331340       DO  l = 0, 3
    1334           IF ( .NOT. ALLOCATED ( surf_def_v(l)%rad_net )  .AND.                &
    1335                      surf_def_v(l)%ns > 0  )  THEN
    1336              ALLOCATE( surf_def_v(l)%rad_net(1:surf_def_v(l)%ns) )
    1337              surf_def_v(l)%rad_net = 0.0_wp
    1338           ENDIF
    13391341          IF ( .NOT. ALLOCATED ( surf_lsm_v(l)%rad_net )  .AND.                &
    13401342                     surf_lsm_v(l)%ns > 0  )  THEN
     
    13521354!
    13531355!--    Allocate array for storing the surface longwave (out) radiation change
    1354        IF ( .NOT. ALLOCATED ( surf_def_h(0)%rad_lw_out_change_0 )  .AND.       &
    1355                   surf_def_h(0)%ns > 0  )  THEN
    1356           ALLOCATE( surf_def_h(0)%rad_lw_out_change_0(1:surf_def_h(0)%ns) )
    1357           surf_def_h(0)%rad_lw_out_change_0 = 0.0_wp
    1358        ENDIF
    13591356       IF ( .NOT. ALLOCATED ( surf_lsm_h%rad_lw_out_change_0 )  .AND.          &
    13601357                  surf_lsm_h%ns > 0  )   THEN
     
    13681365       ENDIF
    13691366       DO  l = 0, 3
    1370           IF ( .NOT. ALLOCATED ( surf_def_v(l)%rad_lw_out_change_0 )  .AND.    &
    1371                      surf_def_v(l)%ns > 0  )  THEN
    1372              ALLOCATE( surf_def_v(l)%rad_lw_out_change_0(1:surf_def_v(l)%ns) )
    1373              surf_def_v(l)%rad_lw_out_change_0 = 0.0_wp
    1374           ENDIF
    13751367          IF ( .NOT. ALLOCATED ( surf_lsm_v(l)%rad_lw_out_change_0 )  .AND.    &
    13761368                     surf_lsm_v(l)%ns > 0  )  THEN
     
    13871379!
    13881380!--    Allocate surface arrays for incoming/outgoing short/longwave radiation
    1389        IF ( .NOT. ALLOCATED ( surf_def_h(0)%rad_sw_in )  .AND.                 &
    1390                   surf_def_h(0)%ns > 0  )  THEN
    1391           ALLOCATE( surf_def_h(0)%rad_sw_in(1:surf_def_h(0)%ns)  )
    1392           ALLOCATE( surf_def_h(0)%rad_sw_out(1:surf_def_h(0)%ns) )
    1393           ALLOCATE( surf_def_h(0)%rad_lw_in(1:surf_def_h(0)%ns)  )
    1394           ALLOCATE( surf_def_h(0)%rad_lw_out(1:surf_def_h(0)%ns) )
    1395           surf_def_h(0)%rad_sw_in  = 0.0_wp
    1396           surf_def_h(0)%rad_sw_out = 0.0_wp
    1397           surf_def_h(0)%rad_lw_in  = 0.0_wp
    1398           surf_def_h(0)%rad_lw_out = 0.0_wp
    1399        ENDIF
    14001381       IF ( .NOT. ALLOCATED ( surf_lsm_h%rad_sw_in )  .AND.                    &
    14011382                  surf_lsm_h%ns > 0  )   THEN
     
    14211402       ENDIF
    14221403       DO  l = 0, 3
    1423           IF ( .NOT. ALLOCATED ( surf_def_v(l)%rad_sw_in )  .AND.              &
    1424                      surf_def_v(l)%ns > 0  )  THEN
    1425              ALLOCATE( surf_def_v(l)%rad_sw_in(1:surf_def_v(l)%ns)  )
    1426              ALLOCATE( surf_def_v(l)%rad_sw_out(1:surf_def_v(l)%ns) )
    1427              ALLOCATE( surf_def_v(l)%rad_lw_in(1:surf_def_v(l)%ns)  )
    1428              ALLOCATE( surf_def_v(l)%rad_lw_out(1:surf_def_v(l)%ns) )
    1429              surf_def_v(l)%rad_sw_in  = 0.0_wp
    1430              surf_def_v(l)%rad_sw_out = 0.0_wp
    1431              surf_def_v(l)%rad_lw_in  = 0.0_wp
    1432              surf_def_v(l)%rad_lw_out = 0.0_wp
    1433           ENDIF
    14341404          IF ( .NOT. ALLOCATED ( surf_lsm_v(l)%rad_sw_in )  .AND.              &
    14351405                     surf_lsm_v(l)%ns > 0  )  THEN
     
    14561426       ENDDO
    14571427!
    1458 !--    If necessary, allocate surface attribute albedo_type.
    1459 !--    Only for default-surfaces, In case urban- or land-surface scheme is
    1460 !--    utilized, this has been already allocated. For default surfaces,
    1461 !--    no tile approach between different surface fractions is considered,
    1462 !--    so first dimension is allocated with zero.
    1463 !--    Initialize them with namelist parameter.
    1464        ALLOCATE ( surf_def_h(0)%albedo_type(0:0,1:surf_def_h(0)%ns) )
    1465        surf_def_h(0)%albedo_type = albedo_type
    1466 
    1467        DO  l = 0, 3
    1468           ALLOCATE ( surf_def_v(l)%albedo_type(0:0,1:surf_def_v(l)%ns) )
    1469           surf_def_v(l)%albedo_type = albedo_type
    1470        ENDDO
    1471 !
    1472 !--    If available, overwrite albedo_type by values read from file.
    1473 !--    Again, only required for default-type surfaces.
    1474        IF ( albedo_type_f%from_file )  THEN
    1475           DO  i = nxl, nxr
    1476              DO  j = nys, nyn
    1477                 IF ( albedo_type_f%var(j,i) /= albedo_type_f%fill )  THEN
    1478 
    1479                    DO  m = surf_def_h(0)%start_index(j,i),                     &
    1480                            surf_def_h(0)%end_index(j,i)
    1481                       surf_def_h(0)%albedo_type(0,m) = albedo_type_f%var(j,i)
    1482                    ENDDO
    1483                    DO  l = 0, 3
    1484                       ioff = surf_def_v(l)%ioff
    1485                       joff = surf_def_v(l)%joff
    1486                       DO  m = surf_def_v(l)%start_index(j,i),                  &
    1487                               surf_def_v(l)%end_index(j,i)
    1488                          surf_def_v(l)%albedo_type(0,m) =                      &
    1489                                                 albedo_type_f%var(j+joff,i+ioff)
    1490                       ENDDO
    1491                    ENDDO
    1492                 ENDIF
    1493              ENDDO
    1494           ENDDO
    1495        ENDIF
    1496 
    1497 !
    1498 !--    If necessary, allocate surface attribute emissivity.
    1499 !--    Only for default-type surfaces. In case urband- or
    1500 !--    land-surface scheme is utilized, this has been already allocated.
    1501 !--    Initialize them with namelist parameter.
    1502        ALLOCATE ( surf_def_h(0)%emissivity(0:0,1:surf_def_h(0)%ns) )
    1503        surf_def_h(0)%emissivity = emissivity
    1504 
    1505        DO  l = 0, 3
    1506           ALLOCATE ( surf_def_v(l)%emissivity(0:0,1:surf_def_v(l)%ns) )
    1507        ENDDO
    1508 
    1509 !
    15101428!--    Fix net radiation in case of radiation_scheme = 'constant'
    15111429       IF ( radiation_scheme == 'constant' )  THEN
    1512           IF ( ALLOCATED( surf_def_h(0)%rad_net ) )                            &
    1513              surf_def_h(0)%rad_net = net_radiation
    15141430          IF ( ALLOCATED( surf_lsm_h%rad_net ) )                               &
    15151431             surf_lsm_h%rad_net    = net_radiation
     
    15191435!--       Todo: weight with inclination angle
    15201436          DO  l = 0, 3
    1521              IF ( ALLOCATED( surf_def_v(l)%rad_net ) )                         &
    1522                 surf_def_v(l)%rad_net = net_radiation
    15231437             IF ( ALLOCATED( surf_lsm_v(l)%rad_net ) )                         &
    15241438                surf_lsm_v(l)%rad_net = net_radiation
     
    15751489!--       Allocate arrays for broadband albedo, and level 1 initialization
    15761490!--       via namelist paramter, unless already allocated.
    1577           IF ( .NOT. ALLOCATED(surf_def_h(0)%albedo) )  THEN
    1578              ALLOCATE( surf_def_h(0)%albedo(0:0,1:surf_def_h(0)%ns) )
    1579              surf_def_h(0)%albedo = albedo
    1580           ENDIF
    15811491          IF ( .NOT. ALLOCATED(surf_lsm_h%albedo) )  THEN
    15821492             ALLOCATE( surf_lsm_h%albedo(0:2,1:surf_lsm_h%ns)     )
     
    15891499
    15901500          DO  l = 0, 3
    1591              IF ( .NOT. ALLOCATED( surf_def_v(l)%albedo ) )  THEN
    1592                 ALLOCATE( surf_def_v(l)%albedo(0:0,1:surf_def_v(l)%ns) )
    1593                 surf_def_v(l)%albedo = albedo
    1594              ENDIF
    15951501             IF ( .NOT. ALLOCATED( surf_lsm_v(l)%albedo ) )  THEN
    15961502                ALLOCATE( surf_lsm_v(l)%albedo(0:2,1:surf_lsm_v(l)%ns) )
     
    16051511!--       Level 2 initialization of broadband albedo via given albedo_type.
    16061512!--       Only if albedo_type is non-zero
    1607           DO  m = 1, surf_def_h(0)%ns
    1608              IF ( surf_def_h(0)%albedo_type(0,m) /= 0 )                        &
    1609                 surf_def_h(0)%albedo(0,m) =                                    &
    1610                                 albedo_pars(2,surf_def_h(0)%albedo_type(0,m))
    1611           ENDDO
    16121513          DO  m = 1, surf_lsm_h%ns
    16131514             IF ( surf_lsm_h%albedo_type(0,m) /= 0 )                           &
     
    16341535
    16351536          DO  l = 0, 3
    1636              DO  m = 1, surf_def_v(l)%ns
    1637                 IF ( surf_def_v(l)%albedo_type(0,m) /= 0 )                     &
    1638                    surf_def_v(l)%albedo(0,m) =                                 &
    1639                                 albedo_pars(2,surf_def_v(l)%albedo_type(0,m))
    1640              ENDDO
    16411537             DO  m = 1, surf_lsm_v(l)%ns
    16421538                IF ( surf_lsm_v(l)%albedo_type(0,m) /= 0 )                     &
     
    16701566!
    16711567!--          Horizontal surfaces
    1672              DO  m = 1, surf_def_h(0)%ns
    1673                 i = surf_def_h(0)%i(m)
    1674                 j = surf_def_h(0)%j(m)
    1675                 IF ( albedo_pars_f%pars_xy(0,j,i) /= albedo_pars_f%fill  .AND. &
    1676                      surf_def_h(0)%albedo_type(0,m) == 0 )  THEN
    1677                    surf_def_h(0)%albedo(0,m) = albedo_pars_f%pars_xy(0,j,i)
    1678                 ENDIF
    1679              ENDDO
    16801568             DO  m = 1, surf_lsm_h%ns
    16811569                i = surf_lsm_h%i(m)
     
    17061594             DO  l = 0, 3
    17071595
    1708                 ioff = surf_def_v(l)%ioff
    1709                 joff = surf_def_v(l)%joff
    1710                 DO  m = 1, surf_def_v(l)%ns
    1711                    i = surf_def_v(l)%i(m) + ioff
    1712                    j = surf_def_v(l)%j(m) + joff
    1713                    IF ( albedo_pars_f%pars_xy(0,j,i) /= albedo_pars_f%fill  .AND. &
    1714                         surf_def_v(l)%albedo_type(0,m) == 0 )  THEN
    1715                       surf_def_v(l)%albedo(0,m) = albedo_pars_f%pars_xy(0,j,i)
    1716                    ENDIF
    1717                 ENDDO
    1718 
    17191596                ioff = surf_lsm_v(l)%ioff
    17201597                joff = surf_lsm_v(l)%joff
     
    17561633!--       Allocate albedos for short/longwave radiation, horizontal surfaces
    17571634!--       for wall/green/window (USM) or vegetation/pavement/water surfaces
    1758 !--       (LSM). Please note, for default-type surfaces no tile approach is
    1759 !--       applied.
    1760           ALLOCATE ( surf_def_h(0)%aldif(0:0,1:surf_def_h(0)%ns) )
    1761           ALLOCATE ( surf_def_h(0)%aldir(0:0,1:surf_def_h(0)%ns) )
    1762           ALLOCATE ( surf_def_h(0)%asdif(0:0,1:surf_def_h(0)%ns) )
    1763           ALLOCATE ( surf_def_h(0)%asdir(0:0,1:surf_def_h(0)%ns) )
    1764           ALLOCATE ( surf_def_h(0)%rrtm_aldif(0:0,1:surf_def_h(0)%ns) )
    1765           ALLOCATE ( surf_def_h(0)%rrtm_aldir(0:0,1:surf_def_h(0)%ns) )
    1766           ALLOCATE ( surf_def_h(0)%rrtm_asdif(0:0,1:surf_def_h(0)%ns) )
    1767           ALLOCATE ( surf_def_h(0)%rrtm_asdir(0:0,1:surf_def_h(0)%ns) )
    1768 
     1635!--       (LSM).
    17691636          ALLOCATE ( surf_lsm_h%aldif(0:2,1:surf_lsm_h%ns)       )
    17701637          ALLOCATE ( surf_lsm_h%aldir(0:2,1:surf_lsm_h%ns)       )
     
    17881655!--       Allocate broadband albedo (temporary for the current radiation
    17891656!--       implementations)
    1790           IF ( .NOT. ALLOCATED(surf_def_h(0)%albedo) )                         &
    1791              ALLOCATE( surf_def_h(0)%albedo(0:0,1:surf_def_h(0)%ns) )
    17921657          IF ( .NOT. ALLOCATED(surf_lsm_h%albedo) )                            &
    17931658             ALLOCATE( surf_lsm_h%albedo(0:2,1:surf_lsm_h%ns)     )
     
    17981663!--       Allocate albedos for short/longwave radiation, vertical surfaces
    17991664          DO  l = 0, 3
    1800              ALLOCATE ( surf_def_v(l)%aldif(0:0,1:surf_def_v(l)%ns)      )
    1801              ALLOCATE ( surf_def_v(l)%aldir(0:0,1:surf_def_v(l)%ns)      )
    1802              ALLOCATE ( surf_def_v(l)%asdif(0:0,1:surf_def_v(l)%ns)      )
    1803              ALLOCATE ( surf_def_v(l)%asdir(0:0,1:surf_def_v(l)%ns)      )
    1804 
    1805              ALLOCATE ( surf_def_v(l)%rrtm_aldif(0:0,1:surf_def_v(l)%ns) )
    1806              ALLOCATE ( surf_def_v(l)%rrtm_aldir(0:0,1:surf_def_v(l)%ns) )
    1807              ALLOCATE ( surf_def_v(l)%rrtm_asdif(0:0,1:surf_def_v(l)%ns) )
    1808              ALLOCATE ( surf_def_v(l)%rrtm_asdir(0:0,1:surf_def_v(l)%ns) )
    18091665
    18101666             ALLOCATE ( surf_lsm_v(l)%aldif(0:2,1:surf_lsm_v(l)%ns)      )
     
    18301686!--          Allocate broadband albedo (temporary for the current radiation
    18311687!--          implementations)
    1832              IF ( .NOT. ALLOCATED( surf_def_v(l)%albedo ) )                    &
    1833                 ALLOCATE( surf_def_v(l)%albedo(0:0,1:surf_def_v(l)%ns) )
    18341688             IF ( .NOT. ALLOCATED( surf_lsm_v(l)%albedo ) )                    &
    18351689                ALLOCATE( surf_lsm_v(l)%albedo(0:2,1:surf_lsm_v(l)%ns) )
     
    18421696!--       paramters. Please note, this case all surface tiles are initialized
    18431697!--       the same.
    1844           IF ( surf_def_h(0)%ns > 0 )  THEN
    1845              surf_def_h(0)%aldif  = albedo_lw_dif
    1846              surf_def_h(0)%aldir  = albedo_lw_dir
    1847              surf_def_h(0)%asdif  = albedo_sw_dif
    1848              surf_def_h(0)%asdir  = albedo_sw_dir
    1849              surf_def_h(0)%albedo = albedo_sw_dif
    1850           ENDIF
    18511698          IF ( surf_lsm_h%ns > 0 )  THEN
    18521699             surf_lsm_h%aldif  = albedo_lw_dif
     
    18651712
    18661713          DO  l = 0, 3
    1867              IF ( surf_def_v(l)%ns > 0 )  THEN
    1868                 surf_def_v(l)%aldif  = albedo_lw_dif
    1869                 surf_def_v(l)%aldir  = albedo_lw_dir
    1870                 surf_def_v(l)%asdif  = albedo_sw_dif
    1871                 surf_def_v(l)%asdir  = albedo_sw_dir
    1872                 surf_def_v(l)%albedo = albedo_sw_dif
    1873              ENDIF
    18741714
    18751715             IF ( surf_lsm_v(l)%ns > 0 )  THEN
     
    18951735!--       is applied so that the resulting albedo is calculated via the weighted
    18961736!--       average of respective surface fractions.
    1897           DO  m = 1, surf_def_h(0)%ns
    1898              IF ( surf_def_h(0)%albedo_type(0,m) /= 0 )  THEN
    1899                 surf_def_h(0)%aldif(0,m) =                                     &
    1900                                 albedo_pars(0,surf_def_h(0)%albedo_type(0,m))
    1901                 surf_def_h(0)%asdif(0,m) =                                     &
    1902                                 albedo_pars(1,surf_def_h(0)%albedo_type(0,m))
    1903                 surf_def_h(0)%aldir(0,m) =                                     &
    1904                                 albedo_pars(0,surf_def_h(0)%albedo_type(0,m))
    1905                 surf_def_h(0)%asdir(0,m) =                                     &
    1906                                 albedo_pars(1,surf_def_h(0)%albedo_type(0,m))
    1907                 surf_def_h(0)%albedo(0,m) =                                    &
    1908                                 albedo_pars(2,surf_def_h(0)%albedo_type(0,m))
    1909              ENDIF
    1910           ENDDO
    1911 
    19121737          DO  m = 1, surf_lsm_h%ns
    19131738!
     
    19511776
    19521777          DO l = 0, 3
    1953 
    1954              DO  m = 1, surf_def_v(l)%ns
    1955                 IF ( surf_def_v(l)%albedo_type(0,m) /= 0 )  THEN
    1956                     surf_def_v(l)%aldif(0,m) =                                 &
    1957                                albedo_pars(0,surf_def_v(l)%albedo_type(0,m))
    1958                     surf_def_v(l)%asdif(0,m) =                                 &
    1959                                albedo_pars(1,surf_def_v(l)%albedo_type(0,m))
    1960                     surf_def_v(l)%aldir(0,m) =                                 &
    1961                                albedo_pars(0,surf_def_v(l)%albedo_type(0,m))
    1962                     surf_def_v(l)%asdir(0,m) =                                 &
    1963                                albedo_pars(1,surf_def_v(l)%albedo_type(0,m))
    1964                     surf_def_v(l)%albedo(0,m) =                                &
    1965                                albedo_pars(2,surf_def_v(l)%albedo_type(0,m))
    1966                 ENDIF
    1967              ENDDO
    19681778
    19691779             DO  m = 1, surf_lsm_v(l)%ns
     
    20121822!
    20131823!--          Horizontal
    2014              DO  m = 1, surf_def_h(0)%ns
    2015                 i = surf_def_h(0)%i(m)
    2016                 j = surf_def_h(0)%j(m)
    2017                 IF ( surf_def_h(0)%albedo_type(0,m) == 0 )  THEN
    2018 
    2019                    IF ( albedo_pars_f%pars_xy(1,j,i) /= albedo_pars_f%fill )   &
    2020                       surf_def_h(0)%albedo(0,m) = albedo_pars_f%pars_xy(1,j,i)
    2021                    IF ( albedo_pars_f%pars_xy(1,j,i) /= albedo_pars_f%fill )   &
    2022                       surf_def_h(0)%aldir(0,m) = albedo_pars_f%pars_xy(1,j,i)
    2023                    IF ( albedo_pars_f%pars_xy(2,j,i) /= albedo_pars_f%fill )   &
    2024                       surf_def_h(0)%aldif(0,m) = albedo_pars_f%pars_xy(2,j,i)
    2025                    IF ( albedo_pars_f%pars_xy(3,j,i) /= albedo_pars_f%fill )   &
    2026                       surf_def_h(0)%asdir(0,m) = albedo_pars_f%pars_xy(3,j,i)
    2027                    IF ( albedo_pars_f%pars_xy(4,j,i) /= albedo_pars_f%fill )   &
    2028                       surf_def_h(0)%asdif(0,m) = albedo_pars_f%pars_xy(4,j,i)
    2029                 ENDIF
    2030              ENDDO
    2031 
    20321824             DO  m = 1, surf_lsm_h%ns
    20331825                i = surf_lsm_h%i(m)
     
    20851877!--          Vertical
    20861878             DO  l = 0, 3
    2087                 ioff = surf_def_v(l)%ioff
    2088                 joff = surf_def_v(l)%joff
    2089 
    2090                 DO  m = 1, surf_def_v(l)%ns
    2091 
    2092                    i = surf_def_v(l)%i(m)
    2093                    j = surf_def_v(l)%j(m)
    2094 
    2095                    IF ( surf_def_v(l)%albedo_type(0,m) == 0 )  THEN
    2096 
    2097                       IF ( albedo_pars_f%pars_xy(1,j+joff,i+ioff) /=           &
    2098                            albedo_pars_f%fill )                                &
    2099                          surf_def_v(l)%albedo(0,m) =                           &
    2100                                           albedo_pars_f%pars_xy(1,j+joff,i+ioff)
    2101                       IF ( albedo_pars_f%pars_xy(1,j+joff,i+ioff) /=           &
    2102                            albedo_pars_f%fill )                                &
    2103                          surf_def_v(l)%aldir(0,m) =                            &
    2104                                           albedo_pars_f%pars_xy(1,j+joff,i+ioff)
    2105                       IF ( albedo_pars_f%pars_xy(2,j+joff,i+ioff) /=           &
    2106                            albedo_pars_f%fill )                                &
    2107                          surf_def_v(l)%aldif(0,m) =                            &
    2108                                           albedo_pars_f%pars_xy(2,j+joff,i+ioff)
    2109                       IF ( albedo_pars_f%pars_xy(3,j+joff,i+ioff) /=           &
    2110                            albedo_pars_f%fill )                                &
    2111                          surf_def_v(l)%asdir(0,m) =                            &
    2112                                           albedo_pars_f%pars_xy(3,j+joff,i+ioff)
    2113                       IF ( albedo_pars_f%pars_xy(4,j+joff,i+ioff) /=           &
    2114                            albedo_pars_f%fill )                                &
    2115                          surf_def_v(l)%asdif(0,m) =                            &
    2116                                           albedo_pars_f%pars_xy(4,j+joff,i+ioff)
    2117                    ENDIF
    2118                 ENDDO
    2119 
    21201879                ioff = surf_lsm_v(l)%ioff
    21211880                joff = surf_lsm_v(l)%joff
     
    21981957          IF ( .NOT. constant_albedo )  THEN
    21991958!
    2200 !--          Horizontally aligned default, natural and urban surfaces
    2201              CALL calc_albedo( surf_def_h(0) )
     1959!--          Horizontally aligned natural and urban surfaces
    22021960             CALL calc_albedo( surf_lsm_h    )
    22031961             CALL calc_albedo( surf_usm_h    )
    22041962!
    2205 !--          Vertically aligned default, natural and urban surfaces
     1963!--          Vertically aligned natural and urban surfaces
    22061964             DO  l = 0, 3
    2207                 CALL calc_albedo( surf_def_v(l) )
    22081965                CALL calc_albedo( surf_lsm_v(l) )
    22091966                CALL calc_albedo( surf_usm_v(l) )
     
    22131970!--          Initialize sun-inclination independent spectral albedos
    22141971!--          Horizontal surfaces
    2215              IF ( surf_def_h(0)%ns > 0 )  THEN
    2216                 surf_def_h(0)%rrtm_aldir = surf_def_h(0)%aldir
    2217                 surf_def_h(0)%rrtm_asdir = surf_def_h(0)%asdir
    2218                 surf_def_h(0)%rrtm_aldif = surf_def_h(0)%aldif
    2219                 surf_def_h(0)%rrtm_asdif = surf_def_h(0)%asdif
    2220              ENDIF
    22211972             IF ( surf_lsm_h%ns > 0 )  THEN
    22221973                surf_lsm_h%rrtm_aldir = surf_lsm_h%aldir
     
    22341985!--          Vertical surfaces
    22351986             DO  l = 0, 3
    2236                 IF ( surf_def_h(0)%ns > 0 )  THEN
    2237                    surf_def_v(l)%rrtm_aldir = surf_def_v(l)%aldir
    2238                    surf_def_v(l)%rrtm_asdir = surf_def_v(l)%asdir
    2239                    surf_def_v(l)%rrtm_aldif = surf_def_v(l)%aldif
    2240                    surf_def_v(l)%rrtm_asdif = surf_def_v(l)%asdif
    2241                 ENDIF
    22421987                IF ( surf_lsm_v(l)%ns > 0 )  THEN
    22431988                   surf_lsm_v(l)%rrtm_aldir = surf_lsm_v(l)%aldir
     
    24642209!--    Call clear-sky calculation for each surface orientation.
    24652210!--    First, horizontal surfaces
    2466        surf => surf_def_h(0)
    2467        CALL radiation_clearsky_surf
    24682211       surf => surf_lsm_h
    24692212       CALL radiation_clearsky_surf
     
    24732216!--    Vertical surfaces
    24742217       DO  l = 0, 3
    2475           surf => surf_def_v(l)
    2476           CALL radiation_clearsky_surf
    24772218          surf => surf_lsm_v(l)
    24782219          CALL radiation_clearsky_surf
     
    25322273!
    25332274!--                Weighted average according to surface fraction.
    2534 !--                In case no surface fraction is given ( default-type )
    2535 !--                no weighted averaging is performed ( only one surface type per
    2536 !--                surface element ).
    25372275!--                ATTENTION: when radiation interactions are switched on the
    25382276!--                calculated fluxes below are not actually used as they are
    25392277!--                overwritten in radiation_interaction.
    2540                    IF ( ALLOCATED( surf%frac ) )  THEN
    2541 
    2542                       surf%rad_sw_out(m) = ( surf%frac(0,m) * surf%albedo(0,m)    &
    2543                                            + surf%frac(1,m) * surf%albedo(1,m)    &
    2544                                            + surf%frac(2,m) * surf%albedo(2,m) )  &
    2545                                            * surf%rad_sw_in(m)
    2546 
    2547                       surf%rad_lw_out(m) = ( surf%frac(0,m) * surf%emissivity(0,m)&
    2548                                            + surf%frac(1,m) * surf%emissivity(1,m)&
    2549                                            + surf%frac(2,m) * surf%emissivity(2,m)&
    2550                                            )                                      &
    2551                                            * sigma_sb                             &
    2552                                            * ( surf%pt_surface(m) * exn )**4
    2553 
    2554                       surf%rad_lw_out_change_0(m) =                               &
    2555                                          ( surf%frac(0,m) * surf%emissivity(0,m)  &
    2556                                          + surf%frac(1,m) * surf%emissivity(1,m)  &
    2557                                          + surf%frac(2,m) * surf%emissivity(2,m)  &
    2558                                          ) * 3.0_wp * sigma_sb                    &
    2559                                          * ( surf%pt_surface(m) * exn )** 3
    2560 
    2561                    ELSE
    2562 
    2563                       surf%rad_sw_out(m) = surf%albedo(0,m) * surf%rad_sw_in(m)
    2564 
    2565                       surf%rad_lw_out(m) = surf%emissivity(0,m)                   &
    2566                                            * sigma_sb                             &
    2567                                            * ( surf%pt_surface(m) * exn )**4
    2568 
    2569                       surf%rad_lw_out_change_0(m) = surf%emissivity(0,m)          &
    2570                                            * 3.0_wp * sigma_sb                    &
    2571                                            * ( surf%pt_surface(m) * exn )** 3
    2572 
    2573                    ENDIF
     2278                   surf%rad_sw_out(m) = ( surf%frac(0,m) * surf%albedo(0,m)    &
     2279                                        + surf%frac(1,m) * surf%albedo(1,m)    &
     2280                                        + surf%frac(2,m) * surf%albedo(2,m) )  &
     2281                                        * surf%rad_sw_in(m)
     2282
     2283                   surf%rad_lw_out(m) = ( surf%frac(0,m) * surf%emissivity(0,m)&
     2284                                        + surf%frac(1,m) * surf%emissivity(1,m)&
     2285                                        + surf%frac(2,m) * surf%emissivity(2,m)&
     2286                                        )                                      &
     2287                                        * sigma_sb                             &
     2288                                        * ( surf%pt_surface(m) * exn )**4
     2289
     2290                   surf%rad_lw_out_change_0(m) =                               &
     2291                                      ( surf%frac(0,m) * surf%emissivity(0,m)  &
     2292                                      + surf%frac(1,m) * surf%emissivity(1,m)  &
     2293                                      + surf%frac(2,m) * surf%emissivity(2,m)  &
     2294                                      ) * 3.0_wp * sigma_sb                    &
     2295                                      * ( surf%pt_surface(m) * exn )** 3
     2296
    25742297
    25752298                   IF ( cloud_physics )  THEN
     
    25802303                   ENDIF
    25812304
    2582                    surf%rad_net(m) = surf%rad_sw_in(m) - surf%rad_sw_out(m)       &
     2305                   surf%rad_net(m) = surf%rad_sw_in(m) - surf%rad_sw_out(m)    &
    25832306                                   + surf%rad_lw_in(m) - surf%rad_lw_out(m)
    25842307
     
    26542377!
    26552378!--    First, horizontal surfaces
    2656        surf => surf_def_h(0)
    2657        CALL radiation_constant_surf
    26582379       surf => surf_lsm_h
    26592380       CALL radiation_constant_surf
     
    26632384!--    Vertical surfaces
    26642385       DO  l = 0, 3
    2665           surf => surf_def_v(l)
    2666           CALL radiation_constant_surf
    26672386          surf => surf_lsm_v(l)
    26682387          CALL radiation_constant_surf
     
    27372456                      surf%rad_lw_in(m)  = 0.8_wp * sigma_sb * (pt1 * exn1)**4
    27382457                   ELSE
    2739                       surf%rad_lw_in(m)  = 0.8_wp * sigma_sb *                    &
     2458                      surf%rad_lw_in(m)  = 0.8_wp * sigma_sb *                 &
    27402459                                             ( pt(k,j,i) * exn1 )**4
    27412460                   ENDIF
     
    27432462!
    27442463!--                Weighted average according to surface fraction.
    2745 !--                In case no surface fraction is given ( default-type )
    2746 !--                no weighted averaging is performed ( only one surface type per
    2747 !--                surface element ).
    2748                    IF ( ALLOCATED( surf%frac ) )  THEN
    2749 
    2750                       surf%rad_lw_out(m) = ( surf%frac(0,m) * surf%emissivity(0,m)&
    2751                                            + surf%frac(1,m) * surf%emissivity(1,m)&
    2752                                            + surf%frac(2,m) * surf%emissivity(2,m)&
    2753                                            )                                      &
    2754                                          * sigma_sb                               &
    2755                                          * ( surf%pt_surface(m) * exn )**4
    2756 
    2757                       surf%rad_sw_in(m) = ( surf%rad_net(m) - surf%rad_lw_in(m)   &
    2758                                           + surf%rad_lw_out(m) )                  &
    2759                                           / ( 1.0_wp -                            &
    2760                                              ( surf%frac(0,m) * surf%albedo(0,m) +&
    2761                                                surf%frac(1,m) * surf%albedo(1,m) +&
    2762                                                surf%frac(1,m) * surf%albedo(1,m) )&
    2763                                             )
    2764 
    2765                       surf%rad_sw_out(m) = ( surf%frac(0,m) * surf%albedo(0,m)    &
    2766                                            + surf%frac(1,m) * surf%albedo(1,m)    &
    2767                                            + surf%frac(2,m) * surf%albedo(2,m) )  &
    2768                                          * surf%rad_sw_in(m)
    2769 
    2770                    ELSE
    2771                       surf%rad_lw_out(m) = surf%emissivity(0,m)                   &
    2772                                          * sigma_sb                               &
    2773                                          * ( surf%pt_surface(m) * exn )**4
    2774 
    2775                       surf%rad_sw_in(m) = ( surf%rad_net(m) - surf%rad_lw_in(m)   &
    2776                                           + surf%rad_lw_out(m) )                  &
    2777                                           / ( 1.0_wp -                            &
    2778                                              ( surf%frac(0,m) * surf%albedo(0,m) )&
    2779                                             )
    2780 
    2781                       surf%rad_sw_out(m) = ( surf%frac(0,m) * surf%albedo(0,m) )  &
    2782                                          * surf%rad_sw_in(m)
    2783                    ENDIF
     2464                   surf%rad_lw_out(m) = ( surf%frac(0,m) * surf%emissivity(0,m)&
     2465                                        + surf%frac(1,m) * surf%emissivity(1,m)&
     2466                                        + surf%frac(2,m) * surf%emissivity(2,m)&
     2467                                        )                                      &
     2468                                      * sigma_sb                               &
     2469                                      * ( surf%pt_surface(m) * exn )**4
     2470
     2471                   surf%rad_sw_in(m) = ( surf%rad_net(m) - surf%rad_lw_in(m)   &
     2472                                       + surf%rad_lw_out(m) )                  &
     2473                                       / ( 1.0_wp -                            &
     2474                                          ( surf%frac(0,m) * surf%albedo(0,m) +&
     2475                                            surf%frac(1,m) * surf%albedo(1,m) +&
     2476                                            surf%frac(1,m) * surf%albedo(1,m) )&
     2477                                         )
     2478
     2479                   surf%rad_sw_out(m) = ( surf%frac(0,m) * surf%albedo(0,m)    &
     2480                                        + surf%frac(1,m) * surf%albedo(1,m)    &
     2481                                        + surf%frac(2,m) * surf%albedo(2,m) )  &
     2482                                      * surf%rad_sw_in(m)
    27842483
    27852484                ENDDO
     
    29702669!
    29712670!--       Horizontally aligned default, natural and urban surfaces
    2972           CALL calc_albedo( surf_def_h(0) )
    29732671          CALL calc_albedo( surf_lsm_h    )
    29742672          CALL calc_albedo( surf_usm_h    )
     
    29762674!--       Vertically aligned default, natural and urban surfaces
    29772675          DO  l = 0, 3
    2978              CALL calc_albedo( surf_def_v(l) )
    29792676             CALL calc_albedo( surf_lsm_v(l) )
    29802677             CALL calc_albedo( surf_usm_v(l) )
     
    31322829!--          onto respective surface elements
    31332830!--          Horizontal surfaces
    3134              IF ( surf_def_h(0)%ns > 0 )  THEN
    3135                 surf_def_h(0)%rad_lw_in           = rrtm_lwdflx(0,nzb)
    3136                 surf_def_h(0)%rad_lw_out          = rrtm_lwuflx(0,nzb)
    3137                 surf_def_h(0)%rad_lw_out_change_0 = rrtm_lwuflx_dt(0,nzb)
    3138              ENDIF
    31392831             IF ( surf_lsm_h%ns > 0 )  THEN
    31402832                surf_lsm_h%rad_lw_in           = rrtm_lwdflx(0,nzb)
     
    31502842!--          Vertical surfaces.
    31512843             DO  l = 0, 3
    3152                 IF ( surf_def_v(l)%ns > 0 )  THEN
    3153                    surf_def_v(l)%rad_lw_in           = rrtm_lwdflx(0,nzb)
    3154                    surf_def_v(l)%rad_lw_out          = rrtm_lwuflx(0,nzb)
    3155                    surf_def_v(l)%rad_lw_out_change_0 = rrtm_lwuflx_dt(0,nzb)
    3156                 ENDIF
    31572844                IF ( surf_lsm_v(l)%ns > 0 )  THEN
    31582845                   surf_lsm_v(l)%rad_lw_in           = rrtm_lwdflx(0,nzb)
     
    32002887!--          Save surface radiative fluxes onto respective surface elements
    32012888!--          Horizontal surfaces
    3202              IF ( surf_def_h(0)%ns > 0 )  THEN
    3203                 surf_def_h(0)%rad_lw_in           = rrtm_swdflx(0,nzb)
    3204                 surf_def_h(0)%rad_lw_out          = rrtm_swuflx(0,nzb)
    3205              ENDIF
    32062889             IF ( surf_lsm_h%ns > 0 )  THEN
    32072890                   surf_lsm_h%rad_sw_in     = rrtm_swdflx(0,nzb)
     
    32162899!--          level of the surface element
    32172900             DO  l = 0, 3
    3218                 IF ( surf_def_v(l)%ns > 0 )  THEN
    3219                       surf_def_v(l)%rad_sw_in  = rrtm_swdflx(0,nzb)
    3220                       surf_def_v(l)%rad_sw_out = rrtm_swuflx(0,nzb)
    3221                 ENDIF
    32222901                IF ( surf_lsm_v(l)%ns > 0 )  THEN
    32232902                      surf_lsm_v(l)%rad_sw_in  = rrtm_swdflx(0,nzb)
     
    33693048!--             To obtain bulk parameters, apply a weighted average for these
    33703049!--             surfaces.
    3371                 DO  m = surf_def_h(0)%start_index(j,i), surf_def_h(0)%end_index(j,i)
    3372                    rrtm_emis = surf_def_h(0)%emissivity(0,m)
    3373                    rrtm_tsfc = pt(surf_def_h(0)%k(m)+surf_def_h(0)%koff,j,i) * &
    3374                                        (surface_pressure / 1000.0_wp )**0.286_wp
    3375                 ENDDO
    33763050                DO  m = surf_lsm_h%start_index(j,i), surf_lsm_h%end_index(j,i)
    33773051                   rrtm_emis = surf_lsm_h%frac(0,m) * surf_lsm_h%emissivity(0,m) +&
     
    34683142!--                onto respective surface elements
    34693143!--                Horizontal surfaces
    3470                    DO  m = surf_def_h(0)%start_index(j,i),                     &
    3471                            surf_def_h(0)%end_index(j,i)
    3472                       surf_def_h(0)%rad_lw_in(m)           = rrtm_lwdflx(0,k_topo)
    3473                       surf_def_h(0)%rad_lw_out(m)          = rrtm_lwuflx(0,k_topo)
    3474                       surf_def_h(0)%rad_lw_out_change_0(m) = rrtm_lwuflx_dt(0,k_topo)
    3475                    ENDDO
    34763144                   DO  m = surf_lsm_h%start_index(j,i),                        &
    34773145                           surf_lsm_h%end_index(j,i)
     
    34903158!--                respective surface element
    34913159                   DO  l = 0, 3
    3492                       DO  m = surf_def_v(l)%start_index(j,i),                  &
    3493                               surf_def_v(l)%end_index(j,i)
    3494                          k                                    = surf_def_v(l)%k(m)
    3495                          surf_def_v(l)%rad_lw_in(m)           = rrtm_lwdflx(0,k)
    3496                          surf_def_v(l)%rad_lw_out(m)          = rrtm_lwuflx(0,k)
    3497                          surf_def_v(l)%rad_lw_out_change_0(m) = rrtm_lwuflx_dt(0,k)
    3498                       ENDDO
    34993160                      DO  m = surf_lsm_v(l)%start_index(j,i),                  &
    35003161                              surf_lsm_v(l)%end_index(j,i)
     
    35233184!--                (Please note, only one loop will entered, controlled by
    35243185!--                start-end index.)
    3525                    DO  m = surf_def_h(0)%start_index(j,i),                     &
    3526                            surf_def_h(0)%end_index(j,i)
    3527                       rrtm_asdir(1)  = surf_def_h(0)%rrtm_asdir(0,m)
    3528                       rrtm_asdif(1)  = surf_def_h(0)%rrtm_asdif(0,m)
    3529                       rrtm_aldir(1)  = surf_def_h(0)%rrtm_aldir(0,m)
    3530                       rrtm_aldif(1)  = surf_def_h(0)%rrtm_aldif(0,m)
    3531                    ENDDO
    35323186                   DO  m = surf_lsm_h%start_index(j,i),                        &
    35333187                           surf_lsm_h%end_index(j,i)
     
    36493303!--                Save surface radiative fluxes onto respective surface elements
    36503304!--                Horizontal surfaces
    3651                    DO  m = surf_def_h(0)%start_index(j,i),                     &
    3652                            surf_def_h(0)%end_index(j,i)
    3653                       surf_def_h(0)%rad_sw_in(m)  = rrtm_swdflx(0,k_topo)
    3654                       surf_def_h(0)%rad_sw_out(m) = rrtm_swuflx(0,k_topo)
    3655                    ENDDO
    36563305                   DO  m = surf_lsm_h%start_index(j,i),                        &
    36573306                           surf_lsm_h%end_index(j,i)
     
    36683317!--                level of the surface element
    36693318                   DO  l = 0, 3
    3670                       DO  m = surf_def_v(l)%start_index(j,i),                  &
    3671                               surf_def_v(l)%end_index(j,i)
    3672                          k                           = surf_def_v(l)%k(m)
    3673                          surf_def_v(l)%rad_sw_in(m)  = rrtm_swdflx(0,k)
    3674                          surf_def_v(l)%rad_sw_out(m) = rrtm_swuflx(0,k)
    3675                       ENDDO
    36763319                      DO  m = surf_lsm_v(l)%start_index(j,i),                  &
    36773320                              surf_lsm_v(l)%end_index(j,i)
     
    36963339!
    36973340!--    Finally, calculate surface net radiation for surface elements.
    3698 !--    First, for horizontal surfaces
    3699        DO  m = 1, surf_def_h(0)%ns
    3700           surf_def_h(0)%rad_net(m) = surf_def_h(0)%rad_sw_in(m)                &
    3701                                    - surf_def_h(0)%rad_sw_out(m)               &
    3702                                    + surf_def_h(0)%rad_lw_in(m)                &
    3703                                    - surf_def_h(0)%rad_lw_out(m)
    3704        ENDDO       
     3341!--    First, for horizontal surfaces   
    37053342       DO  m = 1, surf_lsm_h%ns
    37063343          surf_lsm_h%rad_net(m) = surf_lsm_h%rad_sw_in(m)                      &
     
    37183355!--    Vertical surfaces.
    37193356!--    Todo: weight with azimuth and zenith angle according to their orientation!
    3720        DO  l = 0, 3
    3721           DO  m = 1, surf_def_v(l)%ns
    3722              surf_def_v(l)%rad_net(m) = surf_def_v(l)%rad_sw_in(m)             &
    3723                                       - surf_def_v(l)%rad_sw_out(m)            &
    3724                                       + surf_def_v(l)%rad_lw_in(m)             &
    3725                                       - surf_def_v(l)%rad_lw_out(m)
    3726           ENDDO       
     3357       DO  l = 0, 3     
    37273358          DO  m = 1, surf_lsm_v(l)%ns
    37283359             surf_lsm_v(l)%rad_net(m) = surf_lsm_v(l)%rad_sw_in(m)             &
     
    75357166             DO  i = nxl, nxr
    75367167                DO  j = nys, nyn
    7537                    DO m = surf_def_h(0)%start_index(j,i),                      &
    7538                           surf_def_h(0)%end_index(j,i)
    7539                       rad_net_av(j,i) = rad_net_av(j,i) + surf_def_h(0)%rad_net(m)
    7540                    ENDDO
    75417168                   DO m = surf_lsm_h%start_index(j,i), surf_lsm_h%end_index(j,i)
    75427169                      rad_net_av(j,i) = rad_net_av(j,i) + surf_lsm_h%rad_net(m)
     
    78247451!
    78257452!--                Obtain rad_net from its respective surface type
    7826 !--                Default-type surfaces
    7827                    DO  m = surf_def_h(0)%start_index(j,i),                     &
    7828                            surf_def_h(0)%end_index(j,i)
    7829                       local_pf(i,j,nzb+1) = surf_def_h(0)%rad_net(m)
    7830                    ENDDO
    7831 !
    78327453!--                Natural-type surfaces
    78337454                   DO  m = surf_lsm_h%start_index(j,i),                        &
Note: See TracChangeset for help on using the changeset viewer.