Ignore:
Timestamp:
Dec 7, 2018 11:56:58 AM (5 years ago)
Author:
suehring
Message:

Output of radiation-related quantities migrated from urban_surface_model_mod to radiation_model_mod

File:
1 edited

Legend:

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

    r3589 r3607  
    2828! -----------------
    2929! $Id$
     30! Output of radiation-related quantities migrated to radiation_model_mod.
     31!
     32! 3589 2018-11-30 15:09:51Z suehring
    3033! Remove erroneous UTF encoding
    3134!
     
    545548               message_string, plant_canopy, pt_surface,                       &
    546549               rho_surface, simulated_time, spinup_time, surface_pressure,     &
    547                time_since_reference_point, urban_surface
     550               time_since_reference_point, urban_surface, varnamelength
    548551
    549552    USE cpulog,                                                                &
     
    899902    INTEGER(iwp)                                   ::  nwalls           !< number of wall surfaces in local processor
    900903
     904!-- indices needed for RTM netcdf output subroutines
     905    INTEGER(iwp), PARAMETER                        :: nd = 5
     906    CHARACTER(LEN=6), DIMENSION(0:nd-1), PARAMETER :: dirname = (/ '_roof ', '_south', '_north', '_west ', '_east ' /)
     907    INTEGER(iwp), DIMENSION(0:nd-1), PARAMETER     :: dirint_u = (/ iup_u, isouth_u, inorth_u, iwest_u, ieast_u /)
     908    INTEGER(iwp), DIMENSION(0:nd-1), PARAMETER     :: dirint_l = (/ iup_l, isouth_l, inorth_l, iwest_l, ieast_l /)
     909    INTEGER(iwp), DIMENSION(0:nd-1)                :: dirstart
     910    INTEGER(iwp), DIMENSION(0:nd-1)                :: dirend
     911
    901912!-- indices and sizes of urban and land surface models
    902913    INTEGER(iwp), DIMENSION(:), ALLOCATABLE,TARGET ::  surfl_l          !< coordinates of i-th local surface in local grid - surfl[:,k] = [d, z, y, x]
     
    10651076    REAL(wp), DIMENSION(:), ALLOCATABLE            ::  rt2_dist
    10661077
     1078!-- arrays for time averages
     1079    REAL(wp), DIMENSION(:), ALLOCATABLE            ::  surfradnet_av    !< average of net radiation to local surface including radiation from reflections
     1080    REAL(wp), DIMENSION(:), ALLOCATABLE            ::  surfinsw_av      !< average of sw radiation falling to local surface including radiation from reflections
     1081    REAL(wp), DIMENSION(:), ALLOCATABLE            ::  surfinlw_av      !< average of lw radiation falling to local surface including radiation from reflections
     1082    REAL(wp), DIMENSION(:), ALLOCATABLE            ::  surfinswdir_av   !< average of direct sw radiation falling to local surface
     1083    REAL(wp), DIMENSION(:), ALLOCATABLE            ::  surfinswdif_av   !< average of diffuse sw radiation from sky and model boundary falling to local surface
     1084    REAL(wp), DIMENSION(:), ALLOCATABLE            ::  surfinlwdif_av   !< average of diffuse lw radiation from sky and model boundary falling to local surface
     1085    REAL(wp), DIMENSION(:), ALLOCATABLE            ::  surfinswref_av   !< average of sw radiation falling to surface from reflections
     1086    REAL(wp), DIMENSION(:), ALLOCATABLE            ::  surfinlwref_av   !< average of lw radiation falling to surface from reflections
     1087    REAL(wp), DIMENSION(:), ALLOCATABLE            ::  surfoutsw_av     !< average of total sw radiation outgoing from nonvirtual surfaces surfaces after all reflection
     1088    REAL(wp), DIMENSION(:), ALLOCATABLE            ::  surfoutlw_av     !< average of total lw radiation outgoing from nonvirtual surfaces surfaces after all reflection
     1089    REAL(wp), DIMENSION(:), ALLOCATABLE            ::  surfins_av       !< average of array of residua of sw radiation absorbed in surface after last reflection
     1090    REAL(wp), DIMENSION(:), ALLOCATABLE            ::  surfinl_av       !< average of array of residua of lw radiation absorbed in surface after last reflection
     1091    REAL(wp), DIMENSION(:), ALLOCATABLE            ::  pcbinlw_av       !< Average of pcbinlw
     1092    REAL(wp), DIMENSION(:), ALLOCATABLE            ::  pcbinsw_av       !< Average of pcbinsw
     1093    REAL(wp), DIMENSION(:), ALLOCATABLE            ::  pcbinswdir_av    !< Average of pcbinswdir
     1094    REAL(wp), DIMENSION(:), ALLOCATABLE            ::  pcbinswdif_av    !< Average of pcbinswdif
     1095    REAL(wp), DIMENSION(:), ALLOCATABLE            ::  pcbinswref_av    !< Average of pcbinswref
    10671096
    10681097
     
    12081237           skip_time_do_radiation, time_radiation, unscheduled_radiation_calls,&
    12091238           zenith, calc_zenith, sun_direction, sun_dir_lat, sun_dir_lon,       &
    1210            nrefsteps, nsvfl, svf,                                              &
    1211            svfsurf, surfinsw, surfinlw, surfins, surfinl, surfinswdir,         &
    1212            surfinswdif, surfoutsw, surfoutlw, surfinlwdif, rad_sw_in_dir,      &
    1213            rad_sw_in_diff, rad_lw_in_diff, surfouts, surfoutl, surfoutsl,      &
    1214            surfoutll, idir, jdir, kdir, id, iz, iy, ix,                        &
    1215            surf, surfl, nsurfl, pcbinswdir, pcbinswdif, pcbinsw, pcbinlw,      &
     1239           idir, jdir, kdir, id, iz, iy, ix,                                   &
    12161240           iup_u, inorth_u, isouth_u, ieast_u, iwest_u,                        &
    12171241           iup_l, inorth_l, isouth_l, ieast_l, iwest_l,                        &
     
    12191243           idsvf, ndsvf, idcsf, ndcsf, kdcsf, pct,                             &
    12201244           radiation_interactions, startwall, startland, endland, endwall,     &
    1221            skyvf, skyvft, radiation_interactions_on, average_radiation, npcbl, &
    1222            pcbl
     1245           skyvf, skyvft, radiation_interactions_on, average_radiation
     1246
    12231247
    12241248#if defined ( __rrtmg )
     
    12631287!> Check data output for radiation model
    12641288!------------------------------------------------------------------------------!
    1265     SUBROUTINE radiation_check_data_output( var, unit, i, ilen, k )
     1289    SUBROUTINE radiation_check_data_output( variable, unit, i, ilen, k )
    12661290 
    12671291 
     
    12711295       IMPLICIT NONE
    12721296
    1273        CHARACTER (LEN=*) ::  unit     !<
    1274        CHARACTER (LEN=*) ::  var      !<
    1275 
    1276        INTEGER(iwp) :: i
     1297       CHARACTER (LEN=*) ::  unit          !<
     1298       CHARACTER (LEN=*) ::  variable      !<
     1299
     1300       INTEGER(iwp) :: i, j, k, l
    12771301       INTEGER(iwp) :: ilen
    1278        INTEGER(iwp) :: k
    1279 
    1280        SELECT CASE ( TRIM( var ) )
    1281 
    1282           CASE ( 'rad_lw_cs_hr', 'rad_lw_hr', 'rad_lw_in', 'rad_lw_out', &
    1283                  'rad_sw_cs_hr', 'rad_sw_hr', 'rad_sw_in', 'rad_sw_out'  )
    1284              IF (  .NOT.  radiation  .OR.  radiation_scheme /= 'rrtmg' )  THEN
    1285                 message_string = '"output of "' // TRIM( var ) // '" requi' // &
    1286                                  'res radiation = .TRUE. and ' //              &
    1287                                  'radiation_scheme = "rrtmg"'
    1288                 CALL message( 'check_parameters', 'PA0406', 1, 2, 0, 6, 0 )
    1289              ENDIF
    1290              unit = 'K/h'     
    1291 
    1292           CASE ( 'rad_net*', 'rrtm_aldif*', 'rrtm_aldir*', 'rrtm_asdif*',      &
    1293                  'rrtm_asdir*', 'rad_lw_in*', 'rad_lw_out*', 'rad_sw_in*',     &
    1294                  'rad_sw_out*')
    1295              IF ( i == 0 .AND. ilen == 0 .AND. k == 0)  THEN
    1296                 ! Workaround for masked output (calls with i=ilen=k=0)
    1297                 unit = 'illegal'
    1298                 RETURN
    1299              ENDIF
    1300              IF ( k == 0  .OR.  data_output(i)(ilen-2:ilen) /= '_xy' )  THEN
    1301                 message_string = 'illegal value for data_output: "' //         &
    1302                                  TRIM( var ) // '" & only 2d-horizontal ' //   &
    1303                                  'cross sections are allowed for this value'
    1304                 CALL message( 'check_parameters', 'PA0111', 1, 2, 0, 6, 0 )
    1305              ENDIF
    1306              IF (  .NOT.  radiation  .OR.  radiation_scheme /= "rrtmg" )  THEN
    1307                 IF ( TRIM( var ) == 'rrtm_aldif*'  .OR.                        &
    1308                      TRIM( var ) == 'rrtm_aldir*'  .OR.                        &
    1309                      TRIM( var ) == 'rrtm_asdif*'  .OR.                        &
    1310                      TRIM( var ) == 'rrtm_asdir*'      )                       &
    1311                 THEN
    1312                    message_string = 'output of "' // TRIM( var ) // '" require'&
    1313                                     // 's radiation = .TRUE. and radiation_sch'&
    1314                                     // 'eme = "rrtmg"'
    1315                    CALL message( 'check_parameters', 'PA0409', 1, 2, 0, 6, 0 )
    1316                 ENDIF
    1317              ENDIF
    1318 
    1319              IF ( TRIM( var ) == 'rad_net*'      ) unit = 'W/m2'   
    1320              IF ( TRIM( var ) == 'rad_lw_in*'    ) unit = 'W/m2'
    1321              IF ( TRIM( var ) == 'rad_lw_out*'   ) unit = 'W/m2'
    1322              IF ( TRIM( var ) == 'rad_sw_in*'    ) unit = 'W/m2'
    1323              IF ( TRIM( var ) == 'rad_sw_out*'   ) unit = 'W/m2'
    1324              IF ( TRIM( var ) == 'rad_sw_in'     ) unit = 'W/m2'
    1325              IF ( TRIM( var ) == 'rrtm_aldif*'   ) unit = ''   
    1326              IF ( TRIM( var ) == 'rrtm_aldir*'   ) unit = ''
    1327              IF ( TRIM( var ) == 'rrtm_asdif*'   ) unit = ''
    1328              IF ( TRIM( var ) == 'rrtm_asdir*'   ) unit = ''
    1329 
    1330           CASE ( 'rad_mrt', 'rad_mrt_sw', 'rad_mrt_lw'  )
    1331 
    1332              IF ( i == 0 .AND. ilen == 0 .AND. k == 0)  THEN
    1333                 ! Workaround for masked output (calls with i=ilen=k=0)
    1334                 unit = 'illegal'
    1335                 RETURN
    1336              ENDIF
    1337 
    1338              IF ( .NOT.  radiation ) THEN
     1302       CHARACTER(LEN=varnamelength) :: var          !< TRIM(variable)
     1303
     1304       var = TRIM(variable)
     1305
     1306!--    first process diractional variables
     1307       IF ( var(1:12) == 'rtm_rad_net_'  .OR.  var(1:13) == 'rtm_rad_insw_'  .OR.        &
     1308            var(1:13) == 'rtm_rad_inlw_'  .OR.  var(1:16) == 'rtm_rad_inswdir_'  .OR.    &
     1309            var(1:16) == 'rtm_rad_inswdif_'  .OR.  var(1:16) == 'rtm_rad_inswref_'  .OR. &
     1310            var(1:16) == 'rtm_rad_inlwdif_'  .OR.  var(1:16) == 'rtm_rad_inlwref_'  .OR. &
     1311            var(1:14) == 'rtm_rad_outsw_'  .OR.  var(1:14) == 'rtm_rad_outlw_'  .OR.     &
     1312            var(1:14) == 'rtm_rad_ressw_'  .OR.  var(1:14) == 'rtm_rad_reslw_'  ) THEN
     1313          IF ( .NOT.  radiation ) THEN
    13391314                message_string = 'output of "' // TRIM( var ) // '" require'&
    13401315                                 // 's radiation = .TRUE.'
    13411316                CALL message( 'check_parameters', 'PA0509', 1, 2, 0, 6, 0 )
    1342              ENDIF
    1343              IF ( mrt_nlevels == 0 ) THEN
     1317          ENDIF
     1318          unit = 'W/m2'
     1319       ELSE IF ( var(1:7) == 'rtm_svf'  .OR.  var(1:7) == 'rtm_dif'  .OR.                &
     1320                 var(1:9) == 'rtm_skyvf' .OR. var(1:9) == 'rtm_skyvft' )  THEN
     1321          IF ( .NOT.  radiation ) THEN
    13441322                message_string = 'output of "' // TRIM( var ) // '" require'&
    1345                                  // 's mrt_nlevels > 0'
    1346                 CALL message( 'check_parameters', 'PA0510', 1, 2, 0, 6, 0 )
    1347              ENDIF
    1348              IF ( TRIM( var ) == 'rad_mrt_sw'  .AND.  .NOT. mrt_include_sw ) THEN
    1349                 message_string = 'output of "' // TRIM( var ) // '" require'&
    1350                                  // 's rad_mrt_sw = .TRUE.'
    1351                 CALL message( 'check_parameters', 'PA0511', 1, 2, 0, 6, 0 )
    1352              ENDIF
    1353              IF ( TRIM( var ) == 'rad_mrt' ) THEN
    1354                 unit = 'K'
    1355              ELSE
    1356                 unit = 'W m-2'
    1357              ENDIF
    1358 
    1359           CASE DEFAULT
    1360              unit = 'illegal'
    1361 
    1362        END SELECT
    1363 
     1323                                 // 's radiation = .TRUE.'
     1324                CALL message( 'check_parameters', 'PA0509', 1, 2, 0, 6, 0 )
     1325          ENDIF
     1326          unit = '1'
     1327       ELSE
     1328!--       non-directional variables
     1329          SELECT CASE ( TRIM( var ) )
     1330             CASE ( 'rad_lw_cs_hr', 'rad_lw_hr', 'rad_lw_in', 'rad_lw_out', &
     1331                    'rad_sw_cs_hr', 'rad_sw_hr', 'rad_sw_in', 'rad_sw_out'  )
     1332                IF (  .NOT.  radiation  .OR.  radiation_scheme /= 'rrtmg' )  THEN
     1333                   message_string = '"output of "' // TRIM( var ) // '" requi' // &
     1334                                    'res radiation = .TRUE. and ' //              &
     1335                                    'radiation_scheme = "rrtmg"'
     1336                   CALL message( 'check_parameters', 'PA0406', 1, 2, 0, 6, 0 )
     1337                ENDIF
     1338                unit = 'K/h'
     1339
     1340             CASE ( 'rad_net*', 'rrtm_aldif*', 'rrtm_aldir*', 'rrtm_asdif*',      &
     1341                    'rrtm_asdir*', 'rad_lw_in*', 'rad_lw_out*', 'rad_sw_in*',     &
     1342                    'rad_sw_out*')
     1343                IF ( i == 0 .AND. ilen == 0 .AND. k == 0)  THEN
     1344                   ! Workaround for masked output (calls with i=ilen=k=0)
     1345                   unit = 'illegal'
     1346                   RETURN
     1347                ENDIF
     1348                IF ( k == 0  .OR.  data_output(i)(ilen-2:ilen) /= '_xy' )  THEN
     1349                   message_string = 'illegal value for data_output: "' //         &
     1350                                    TRIM( var ) // '" & only 2d-horizontal ' //   &
     1351                                    'cross sections are allowed for this value'
     1352                   CALL message( 'check_parameters', 'PA0111', 1, 2, 0, 6, 0 )
     1353                ENDIF
     1354                IF (  .NOT.  radiation  .OR.  radiation_scheme /= "rrtmg" )  THEN
     1355                   IF ( TRIM( var ) == 'rrtm_aldif*'  .OR.                        &
     1356                        TRIM( var ) == 'rrtm_aldir*'  .OR.                        &
     1357                        TRIM( var ) == 'rrtm_asdif*'  .OR.                        &
     1358                        TRIM( var ) == 'rrtm_asdir*'      )                       &
     1359                   THEN
     1360                      message_string = 'output of "' // TRIM( var ) // '" require'&
     1361                                       // 's radiation = .TRUE. and radiation_sch'&
     1362                                       // 'eme = "rrtmg"'
     1363                      CALL message( 'check_parameters', 'PA0409', 1, 2, 0, 6, 0 )
     1364                   ENDIF
     1365                ENDIF
     1366
     1367                IF ( TRIM( var ) == 'rad_net*'      ) unit = 'W/m2'
     1368                IF ( TRIM( var ) == 'rad_lw_in*'    ) unit = 'W/m2'
     1369                IF ( TRIM( var ) == 'rad_lw_out*'   ) unit = 'W/m2'
     1370                IF ( TRIM( var ) == 'rad_sw_in*'    ) unit = 'W/m2'
     1371                IF ( TRIM( var ) == 'rad_sw_out*'   ) unit = 'W/m2'
     1372                IF ( TRIM( var ) == 'rad_sw_in'     ) unit = 'W/m2'
     1373                IF ( TRIM( var ) == 'rrtm_aldif*'   ) unit = ''
     1374                IF ( TRIM( var ) == 'rrtm_aldir*'   ) unit = ''
     1375                IF ( TRIM( var ) == 'rrtm_asdif*'   ) unit = ''
     1376                IF ( TRIM( var ) == 'rrtm_asdir*'   ) unit = ''
     1377
     1378             CASE ( 'rtm_rad_pc_inlw', 'rtm_rad_pc_insw', 'rtm_rad_pc_inswdir', &
     1379                    'rtm_rad_pc_inswdif', 'rtm_rad_pc_inswref')
     1380                IF ( .NOT.  radiation ) THEN
     1381                   message_string = 'output of "' // TRIM( var ) // '" require'&
     1382                                    // 's radiation = .TRUE.'
     1383                   CALL message( 'check_parameters', 'PA0509', 1, 2, 0, 6, 0 )
     1384                ENDIF
     1385                unit = 'W'
     1386
     1387             CASE ( 'rtm_mrt', 'rtm_mrt_sw', 'rtm_mrt_lw'  )
     1388                IF ( i == 0 .AND. ilen == 0 .AND. k == 0)  THEN
     1389                   ! Workaround for masked output (calls with i=ilen=k=0)
     1390                   unit = 'illegal'
     1391                   RETURN
     1392                ENDIF
     1393
     1394                IF ( .NOT.  radiation ) THEN
     1395                   message_string = 'output of "' // TRIM( var ) // '" require'&
     1396                                    // 's radiation = .TRUE.'
     1397                   CALL message( 'check_parameters', 'PA0509', 1, 2, 0, 6, 0 )
     1398                ENDIF
     1399                IF ( mrt_nlevels == 0 ) THEN
     1400                   message_string = 'output of "' // TRIM( var ) // '" require'&
     1401                                    // 's mrt_nlevels > 0'
     1402                   CALL message( 'check_parameters', 'PA0510', 1, 2, 0, 6, 0 )
     1403                ENDIF
     1404                IF ( TRIM( var ) == 'rtm_mrt_sw'  .AND.  .NOT. mrt_include_sw ) THEN
     1405                   message_string = 'output of "' // TRIM( var ) // '" require'&
     1406                                    // 's rtm_mrt_sw = .TRUE.'
     1407                   CALL message( 'check_parameters', 'PA0511', 1, 2, 0, 6, 0 )
     1408                ENDIF
     1409                IF ( TRIM( var ) == 'rtm_mrt' ) THEN
     1410                   unit = 'K'
     1411                ELSE
     1412                   unit = 'W m-2'
     1413                ENDIF
     1414
     1415             CASE DEFAULT
     1416                unit = 'illegal'
     1417
     1418          END SELECT
     1419       ENDIF
    13641420
    13651421    END SUBROUTINE radiation_check_data_output
     
    58265882       endwall = nsurfl
    58275883       nwalls  = endwall - startwall + 1
     5884       dirstart = (/ startland, startwall, startwall, startwall, startwall /)
     5885       dirend = (/ endland, endwall, endwall, endwall, endwall /)
    58285886
    58295887!--    fill gridpcbl and pcbl
     
    86568714    INTEGER(iwp) ::  l, m !< index of current surface element
    86578715
     8716    INTEGER(iwp)                                       :: ids, idsint_u, idsint_l, isurf
     8717    CHARACTER(LEN=varnamelength)                       :: var
     8718
     8719!-- find the real name of the variable
     8720    ids = -1
     8721    l = -1
     8722    var = TRIM(variable)
     8723    DO i = 0, nd-1
     8724        k = len(TRIM(var))
     8725        j = len(TRIM(dirname(i)))
     8726        IF ( TRIM(var(k-j+1:k)) == TRIM(dirname(i)) )  THEN
     8727            ids = i
     8728            idsint_u = dirint_u(ids)
     8729            idsint_l = dirint_l(ids)
     8730            var = var(:k-j)
     8731            EXIT
     8732        ENDIF
     8733    ENDDO
     8734    IF ( ids == -1 )  THEN
     8735        var = TRIM(variable)
     8736    ENDIF
     8737
    86588738    IF ( mode == 'allocate' )  THEN
    86598739
    8660        SELECT CASE ( TRIM( variable ) )
    8661 
     8740       SELECT CASE ( TRIM( var ) )
     8741!--          block of large scale (e.g. RRTMG) radiation output variables
    86628742             CASE ( 'rad_net*' )
    86638743                IF ( .NOT. ALLOCATED( rad_net_av ) )  THEN
     
    87388818                rad_sw_hr_av = 0.0_wp
    87398819
    8740              CASE ( 'rad_mrt_sw' )
     8820!--          block of RTM output variables
     8821             CASE ( 'rtm_rad_net' )
     8822!--              array of complete radiation balance
     8823                 IF ( .NOT.  ALLOCATED(surfradnet_av) )  THEN
     8824                     ALLOCATE( surfradnet_av(nsurfl) )
     8825                     surfradnet_av = 0.0_wp
     8826                 ENDIF
     8827
     8828             CASE ( 'rtm_rad_insw' )
     8829!--                 array of sw radiation falling to surface after i-th reflection
     8830                 IF ( .NOT.  ALLOCATED(surfinsw_av) )  THEN
     8831                     ALLOCATE( surfinsw_av(nsurfl) )
     8832                     surfinsw_av = 0.0_wp
     8833                 ENDIF
     8834
     8835             CASE ( 'rtm_rad_inlw' )
     8836!--                 array of lw radiation falling to surface after i-th reflection
     8837                 IF ( .NOT.  ALLOCATED(surfinlw_av) )  THEN
     8838                     ALLOCATE( surfinlw_av(nsurfl) )
     8839                     surfinlw_av = 0.0_wp
     8840                 ENDIF
     8841
     8842             CASE ( 'rtm_rad_inswdir' )
     8843!--                 array of direct sw radiation falling to surface from sun
     8844                 IF ( .NOT.  ALLOCATED(surfinswdir_av) )  THEN
     8845                     ALLOCATE( surfinswdir_av(nsurfl) )
     8846                     surfinswdir_av = 0.0_wp
     8847                 ENDIF
     8848
     8849             CASE ( 'rtm_rad_inswdif' )
     8850!--                 array of difusion sw radiation falling to surface from sky and borders of the domain
     8851                 IF ( .NOT.  ALLOCATED(surfinswdif_av) )  THEN
     8852                     ALLOCATE( surfinswdif_av(nsurfl) )
     8853                     surfinswdif_av = 0.0_wp
     8854                 ENDIF
     8855
     8856             CASE ( 'rtm_rad_inswref' )
     8857!--                 array of sw radiation falling to surface from reflections
     8858                 IF ( .NOT.  ALLOCATED(surfinswref_av) )  THEN
     8859                     ALLOCATE( surfinswref_av(nsurfl) )
     8860                     surfinswref_av = 0.0_wp
     8861                 ENDIF
     8862
     8863             CASE ( 'rtm_rad_inlwdif' )
     8864!--                 array of sw radiation falling to surface after i-th reflection
     8865                IF ( .NOT.  ALLOCATED(surfinlwdif_av) )  THEN
     8866                     ALLOCATE( surfinlwdif_av(nsurfl) )
     8867                     surfinlwdif_av = 0.0_wp
     8868                 ENDIF
     8869
     8870             CASE ( 'rtm_rad_inlwref' )
     8871!--                 array of lw radiation falling to surface from reflections
     8872                 IF ( .NOT.  ALLOCATED(surfinlwref_av) )  THEN
     8873                     ALLOCATE( surfinlwref_av(nsurfl) )
     8874                     surfinlwref_av = 0.0_wp
     8875                 ENDIF
     8876
     8877             CASE ( 'rtm_rad_outsw' )
     8878!--                 array of sw radiation emitted from surface after i-th reflection
     8879                 IF ( .NOT.  ALLOCATED(surfoutsw_av) )  THEN
     8880                     ALLOCATE( surfoutsw_av(nsurfl) )
     8881                     surfoutsw_av = 0.0_wp
     8882                 ENDIF
     8883
     8884             CASE ( 'rtm_rad_outlw' )
     8885!--                 array of lw radiation emitted from surface after i-th reflection
     8886                 IF ( .NOT.  ALLOCATED(surfoutlw_av) )  THEN
     8887                     ALLOCATE( surfoutlw_av(nsurfl) )
     8888                     surfoutlw_av = 0.0_wp
     8889                 ENDIF
     8890             CASE ( 'rtm_rad_ressw' )
     8891!--                 array of residua of sw radiation absorbed in surface after last reflection
     8892                 IF ( .NOT.  ALLOCATED(surfins_av) )  THEN
     8893                     ALLOCATE( surfins_av(nsurfl) )
     8894                     surfins_av = 0.0_wp
     8895                 ENDIF
     8896
     8897             CASE ( 'rtm_rad_reslw' )
     8898!--                 array of residua of lw radiation absorbed in surface after last reflection
     8899                 IF ( .NOT.  ALLOCATED(surfinl_av) )  THEN
     8900                     ALLOCATE( surfinl_av(nsurfl) )
     8901                     surfinl_av = 0.0_wp
     8902                 ENDIF
     8903
     8904             CASE ( 'rtm_rad_pc_inlw' )
     8905!--                 array of of lw radiation absorbed in plant canopy
     8906                 IF ( .NOT.  ALLOCATED(pcbinlw_av) )  THEN
     8907                     ALLOCATE( pcbinlw_av(1:npcbl) )
     8908                     pcbinlw_av = 0.0_wp
     8909                 ENDIF
     8910
     8911             CASE ( 'rtm_rad_pc_insw' )
     8912!--                 array of of sw radiation absorbed in plant canopy
     8913                 IF ( .NOT.  ALLOCATED(pcbinsw_av) )  THEN
     8914                     ALLOCATE( pcbinsw_av(1:npcbl) )
     8915                     pcbinsw_av = 0.0_wp
     8916                 ENDIF
     8917
     8918             CASE ( 'rtm_rad_pc_inswdir' )
     8919!--                 array of of direct sw radiation absorbed in plant canopy
     8920                 IF ( .NOT.  ALLOCATED(pcbinswdir_av) )  THEN
     8921                     ALLOCATE( pcbinswdir_av(1:npcbl) )
     8922                     pcbinswdir_av = 0.0_wp
     8923                 ENDIF
     8924
     8925             CASE ( 'rtm_rad_pc_inswdif' )
     8926!--                 array of of diffuse sw radiation absorbed in plant canopy
     8927                 IF ( .NOT.  ALLOCATED(pcbinswdif_av) )  THEN
     8928                     ALLOCATE( pcbinswdif_av(1:npcbl) )
     8929                     pcbinswdif_av = 0.0_wp
     8930                 ENDIF
     8931
     8932             CASE ( 'rtm_rad_pc_inswref' )
     8933!--                 array of of reflected sw radiation absorbed in plant canopy
     8934                 IF ( .NOT.  ALLOCATED(pcbinswref_av) )  THEN
     8935                     ALLOCATE( pcbinswref_av(1:npcbl) )
     8936                     pcbinswref_av = 0.0_wp
     8937                 ENDIF
     8938
     8939             CASE ( 'rtm_mrt_sw' )
    87418940                IF ( .NOT. ALLOCATED( mrtinsw_av ) )  THEN
    87428941                   ALLOCATE( mrtinsw_av(nmrtbl) )
     
    87448943                mrtinsw_av = 0.0_wp
    87458944
    8746              CASE ( 'rad_mrt_lw' )
     8945             CASE ( 'rtm_mrt_lw' )
    87478946                IF ( .NOT. ALLOCATED( mrtinlw_av ) )  THEN
    87488947                   ALLOCATE( mrtinlw_av(nmrtbl) )
     
    87508949                mrtinlw_av = 0.0_wp
    87518950
    8752              CASE ( 'rad_mrt' )
     8951             CASE ( 'rtm_mrt' )
    87538952                IF ( .NOT. ALLOCATED( mrt_av ) )  THEN
    87548953                   ALLOCATE( mrt_av(nmrtbl) )
     
    87638962    ELSEIF ( mode == 'sum' )  THEN
    87648963
    8765        SELECT CASE ( TRIM( variable ) )
    8766 
     8964       SELECT CASE ( TRIM( var ) )
     8965!--       block of large scale (e.g. RRTMG) radiation output variables
    87678966          CASE ( 'rad_net*' )
    87688967             IF ( ALLOCATED( rad_net_av ) ) THEN
     
    89719170             ENDIF
    89729171
     9172!--       block of RTM output variables
     9173          CASE ( 'rtm_rad_net' )
     9174!--           array of complete radiation balance
     9175              DO isurf = dirstart(ids), dirend(ids)
     9176                 IF ( surfl(id,isurf) == idsint_u  .OR.  surfl(id,isurf) == idsint_l )  THEN
     9177                    surfradnet_av(isurf) = surfinsw(isurf) - surfoutsw(isurf) +  surfinlw(isurf) - surfoutlw(isurf)
     9178                 ENDIF
     9179              ENDDO
     9180
     9181          CASE ( 'rtm_rad_insw' )
     9182!--           array of sw radiation falling to surface after i-th reflection
     9183              DO isurf = dirstart(ids), dirend(ids)
     9184                  IF ( surfl(id,isurf) == idsint_u  .OR.  surfl(id,isurf) == idsint_l )  THEN
     9185                      surfinsw_av(isurf) = surfinsw_av(isurf) + surfinsw(isurf)
     9186                  ENDIF
     9187              ENDDO
     9188
     9189          CASE ( 'rtm_rad_inlw' )
     9190!--           array of lw radiation falling to surface after i-th reflection
     9191              DO isurf = dirstart(ids), dirend(ids)
     9192                  IF ( surfl(id,isurf) == idsint_u  .OR.  surfl(id,isurf) == idsint_l )  THEN
     9193                      surfinlw_av(isurf) = surfinlw_av(isurf) + surfinlw(isurf)
     9194                  ENDIF
     9195              ENDDO
     9196
     9197          CASE ( 'rtm_rad_inswdir' )
     9198!--           array of direct sw radiation falling to surface from sun
     9199              DO isurf = dirstart(ids), dirend(ids)
     9200                  IF ( surfl(id,isurf) == idsint_u  .OR.  surfl(id,isurf) == idsint_l )  THEN
     9201                      surfinswdir_av(isurf) = surfinswdir_av(isurf) + surfinswdir(isurf)
     9202                  ENDIF
     9203              ENDDO
     9204
     9205          CASE ( 'rtm_rad_inswdif' )
     9206!--           array of difusion sw radiation falling to surface from sky and borders of the domain
     9207              DO isurf = dirstart(ids), dirend(ids)
     9208                  IF ( surfl(id,isurf) == idsint_u  .OR.  surfl(id,isurf) == idsint_l )  THEN
     9209                      surfinswdif_av(isurf) = surfinswdif_av(isurf) + surfinswdif(isurf)
     9210                  ENDIF
     9211              ENDDO
     9212
     9213          CASE ( 'rtm_rad_inswref' )
     9214!--           array of sw radiation falling to surface from reflections
     9215              DO isurf = dirstart(ids), dirend(ids)
     9216                  IF ( surfl(id,isurf) == idsint_u  .OR.  surfl(id,isurf) == idsint_l )  THEN
     9217                      surfinswref_av(isurf) = surfinswref_av(isurf) + surfinsw(isurf) - &
     9218                                          surfinswdir(isurf) - surfinswdif(isurf)
     9219                  ENDIF
     9220              ENDDO
     9221
     9222
     9223          CASE ( 'rtm_rad_inlwdif' )
     9224!--           array of sw radiation falling to surface after i-th reflection
     9225              DO isurf = dirstart(ids), dirend(ids)
     9226                  IF ( surfl(id,isurf) == idsint_u  .OR.  surfl(id,isurf) == idsint_l )  THEN
     9227                      surfinlwdif_av(isurf) = surfinlwdif_av(isurf) + surfinlwdif(isurf)
     9228                  ENDIF
     9229              ENDDO
     9230!
     9231          CASE ( 'rtm_rad_inlwref' )
     9232!--           array of lw radiation falling to surface from reflections
     9233              DO isurf = dirstart(ids), dirend(ids)
     9234                  IF ( surfl(id,isurf) == idsint_u  .OR.  surfl(id,isurf) == idsint_l )  THEN
     9235                      surfinlwref_av(isurf) = surfinlwref_av(isurf) + &
     9236                                          surfinlw(isurf) - surfinlwdif(isurf)
     9237                  ENDIF
     9238              ENDDO
     9239
     9240          CASE ( 'rtm_rad_outsw' )
     9241!--           array of sw radiation emitted from surface after i-th reflection
     9242              DO isurf = dirstart(ids), dirend(ids)
     9243                  IF ( surfl(id,isurf) == idsint_u  .OR.  surfl(id,isurf) == idsint_l )  THEN
     9244                      surfoutsw_av(isurf) = surfoutsw_av(isurf) + surfoutsw(isurf)
     9245                  ENDIF
     9246              ENDDO
     9247
     9248          CASE ( 'rtm_rad_outlw' )
     9249!--           array of lw radiation emitted from surface after i-th reflection
     9250              DO isurf = dirstart(ids), dirend(ids)
     9251                  IF ( surfl(id,isurf) == idsint_u  .OR.  surfl(id,isurf) == idsint_l )  THEN
     9252                      surfoutlw_av(isurf) = surfoutlw_av(isurf) + surfoutlw(isurf)
     9253                  ENDIF
     9254              ENDDO
     9255
     9256          CASE ( 'rtm_rad_ressw' )
     9257!--           array of residua of sw radiation absorbed in surface after last reflection
     9258              DO isurf = dirstart(ids), dirend(ids)
     9259                  IF ( surfl(id,isurf) == idsint_u  .OR.  surfl(id,isurf) == idsint_l )  THEN
     9260                      surfins_av(isurf) = surfins_av(isurf) + surfins(isurf)
     9261                  ENDIF
     9262              ENDDO
     9263
     9264          CASE ( 'rtm_rad_reslw' )
     9265!--           array of residua of lw radiation absorbed in surface after last reflection
     9266              DO isurf = dirstart(ids), dirend(ids)
     9267                  IF ( surfl(id,isurf) == idsint_u  .OR.  surfl(id,isurf) == idsint_l )  THEN
     9268                      surfinl_av(isurf) = surfinl_av(isurf) + surfinl(isurf)
     9269                  ENDIF
     9270              ENDDO
     9271
     9272          CASE ( 'rtm_rad_pc_inlw' )
     9273              DO l = 1, npcbl
     9274                 pcbinlw_av(l) = pcbinlw_av(l) + pcbinlw(l)
     9275              ENDDO
     9276
     9277          CASE ( 'rtm_rad_pc_insw' )
     9278              DO l = 1, npcbl
     9279                 pcbinsw_av(l) = pcbinsw_av(l) + pcbinsw(l)
     9280              ENDDO
     9281
     9282          CASE ( 'rtm_rad_pc_inswdir' )
     9283              DO l = 1, npcbl
     9284                 pcbinswdir_av(l) = pcbinswdir_av(l) + pcbinswdir(l)
     9285              ENDDO
     9286
     9287          CASE ( 'rtm_rad_pc_inswdif' )
     9288              DO l = 1, npcbl
     9289                 pcbinswdif_av(l) = pcbinswdif_av(l) + pcbinswdif(l)
     9290              ENDDO
     9291
     9292          CASE ( 'rtm_rad_pc_inswref' )
     9293              DO l = 1, npcbl
     9294                 pcbinswref_av(l) = pcbinswref_av(l) + pcbinsw(l) - pcbinswdir(l) - pcbinswdif(l)
     9295              ENDDO
     9296
    89739297          CASE ( 'rad_mrt_sw' )
    89749298             IF ( ALLOCATED( mrtinsw_av ) )  THEN
     
    89939317    ELSEIF ( mode == 'average' )  THEN
    89949318
    8995        SELECT CASE ( TRIM( variable ) )
    8996 
     9319       SELECT CASE ( TRIM( var ) )
     9320!--       block of large scale (e.g. RRTMG) radiation output variables
    89979321          CASE ( 'rad_net*' )
    89989322             IF ( ALLOCATED( rad_net_av ) ) THEN
     
    91419465             ENDIF
    91429466
    9143           CASE ( 'rad_mrt_sw' )
    9144              IF ( ALLOCATED( mrtinsw_av ) )  THEN
    9145                 mrtinsw_av(:) = mrtinsw_av(:)  / REAL( average_count_3d, KIND=wp )
    9146              ENDIF
     9467!--       block of RTM output variables
     9468          CASE ( 'rtm_rad_net' )
     9469!--           array of complete radiation balance
     9470              DO isurf = dirstart(ids), dirend(ids)
     9471                  IF ( surfl(id,isurf) == idsint_u  .OR.  surfl(id,isurf) == idsint_l )  THEN
     9472                      surfradnet_av(isurf) = surfinsw_av(isurf) / REAL( average_count_3d, kind=wp )
     9473                  ENDIF
     9474              ENDDO
     9475
     9476          CASE ( 'rtm_rad_insw' )
     9477!--           array of sw radiation falling to surface after i-th reflection
     9478              DO isurf = dirstart(ids), dirend(ids)
     9479                  IF ( surfl(id,isurf) == idsint_u  .OR.  surfl(id,isurf) == idsint_l )  THEN
     9480                      surfinsw_av(isurf) = surfinsw_av(isurf) / REAL( average_count_3d, kind=wp )
     9481                  ENDIF
     9482              ENDDO
     9483
     9484          CASE ( 'rtm_rad_inlw' )
     9485!--           array of lw radiation falling to surface after i-th reflection
     9486              DO isurf = dirstart(ids), dirend(ids)
     9487                  IF ( surfl(id,isurf) == idsint_u  .OR.  surfl(id,isurf) == idsint_l )  THEN
     9488                      surfinlw_av(isurf) = surfinlw_av(isurf) / REAL( average_count_3d, kind=wp )
     9489                  ENDIF
     9490              ENDDO
     9491
     9492          CASE ( 'rtm_rad_inswdir' )
     9493!--           array of direct sw radiation falling to surface from sun
     9494              DO isurf = dirstart(ids), dirend(ids)
     9495                  IF ( surfl(id,isurf) == idsint_u  .OR.  surfl(id,isurf) == idsint_l )  THEN
     9496                      surfinswdir_av(isurf) = surfinswdir_av(isurf) / REAL( average_count_3d, kind=wp )
     9497                  ENDIF
     9498              ENDDO
     9499
     9500          CASE ( 'rtm_rad_inswdif' )
     9501!--           array of difusion sw radiation falling to surface from sky and borders of the domain
     9502              DO isurf = dirstart(ids), dirend(ids)
     9503                  IF ( surfl(id,isurf) == idsint_u  .OR.  surfl(id,isurf) == idsint_l )  THEN
     9504                      surfinswdif_av(isurf) = surfinswdif_av(isurf) / REAL( average_count_3d, kind=wp )
     9505                  ENDIF
     9506              ENDDO
     9507
     9508          CASE ( 'rtm_rad_inswref' )
     9509!--           array of sw radiation falling to surface from reflections
     9510              DO isurf = dirstart(ids), dirend(ids)
     9511                  IF ( surfl(id,isurf) == idsint_u  .OR.  surfl(id,isurf) == idsint_l )  THEN
     9512                      surfinswref_av(isurf) = surfinswref_av(isurf) / REAL( average_count_3d, kind=wp )
     9513                  ENDIF
     9514              ENDDO
     9515
     9516          CASE ( 'rtm_rad_inlwdif' )
     9517!--           array of sw radiation falling to surface after i-th reflection
     9518              DO isurf = dirstart(ids), dirend(ids)
     9519                  IF ( surfl(id,isurf) == idsint_u  .OR.  surfl(id,isurf) == idsint_l )  THEN
     9520                      surfinlwdif_av(isurf) = surfinlwdif_av(isurf) / REAL( average_count_3d, kind=wp )
     9521                  ENDIF
     9522              ENDDO
     9523
     9524          CASE ( 'rtm_rad_inlwref' )
     9525!--           array of lw radiation falling to surface from reflections
     9526              DO isurf = dirstart(ids), dirend(ids)
     9527                  IF ( surfl(id,isurf) == idsint_u  .OR.  surfl(id,isurf) == idsint_l )  THEN
     9528                      surfinlwref_av(isurf) = surfinlwref_av(isurf) / REAL( average_count_3d, kind=wp )
     9529                  ENDIF
     9530              ENDDO
     9531
     9532          CASE ( 'rtm_rad_outsw' )
     9533!--           array of sw radiation emitted from surface after i-th reflection
     9534              DO isurf = dirstart(ids), dirend(ids)
     9535                  IF ( surfl(id,isurf) == idsint_u  .OR.  surfl(id,isurf) == idsint_l )  THEN
     9536                      surfoutsw_av(isurf) = surfoutsw_av(isurf) / REAL( average_count_3d, kind=wp )
     9537                  ENDIF
     9538              ENDDO
     9539
     9540          CASE ( 'rtm_rad_outlw' )
     9541!--           array of lw radiation emitted from surface after i-th reflection
     9542              DO isurf = dirstart(ids), dirend(ids)
     9543                  IF ( surfl(id,isurf) == idsint_u  .OR.  surfl(id,isurf) == idsint_l )  THEN
     9544                      surfoutlw_av(isurf) = surfoutlw_av(isurf) / REAL( average_count_3d, kind=wp )
     9545                  ENDIF
     9546              ENDDO
     9547
     9548          CASE ( 'rtm_rad_ressw' )
     9549!--           array of residua of sw radiation absorbed in surface after last reflection
     9550              DO isurf = dirstart(ids), dirend(ids)
     9551                  IF ( surfl(id,isurf) == idsint_u  .OR.  surfl(id,isurf) == idsint_l )  THEN
     9552                      surfins_av(isurf) = surfins_av(isurf) / REAL( average_count_3d, kind=wp )
     9553                  ENDIF
     9554              ENDDO
     9555
     9556          CASE ( 'rtm_rad_reslw' )
     9557!--           array of residua of lw radiation absorbed in surface after last reflection
     9558              DO isurf = dirstart(ids), dirend(ids)
     9559                  IF ( surfl(id,isurf) == idsint_u  .OR.  surfl(id,isurf) == idsint_l )  THEN
     9560                      surfinl_av(isurf) = surfinl_av(isurf) / REAL( average_count_3d, kind=wp )
     9561                  ENDIF
     9562              ENDDO
     9563
     9564          CASE ( 'rtm_rad_pc_inlw' )
     9565              DO l = 1, npcbl
     9566                 pcbinlw_av(:) = pcbinlw_av(:) / REAL( average_count_3d, kind=wp )
     9567              ENDDO
     9568
     9569          CASE ( 'rtm_rad_pc_insw' )
     9570              DO l = 1, npcbl
     9571                 pcbinsw_av(:) = pcbinsw_av(:) / REAL( average_count_3d, kind=wp )
     9572              ENDDO
     9573
     9574          CASE ( 'rtm_rad_pc_inswdir' )
     9575              DO l = 1, npcbl
     9576                 pcbinswdir_av(:) = pcbinswdir_av(:) / REAL( average_count_3d, kind=wp )
     9577              ENDDO
     9578
     9579          CASE ( 'rtm_rad_pc_inswdif' )
     9580              DO l = 1, npcbl
     9581                 pcbinswdif_av(:) = pcbinswdif_av(:) / REAL( average_count_3d, kind=wp )
     9582              ENDDO
     9583
     9584          CASE ( 'rtm_rad_pc_inswref' )
     9585              DO l = 1, npcbl
     9586                 pcbinswref_av(:) = pcbinswref_av(:) / REAL( average_count_3d, kind=wp )
     9587              ENDDO
    91479588
    91489589          CASE ( 'rad_mrt_lw' )
     
    91709611!> It is called out from subroutine netcdf.
    91719612!------------------------------------------------------------------------------!
    9172 SUBROUTINE radiation_define_netcdf_grid( var, found, grid_x, grid_y, grid_z )
     9613SUBROUTINE radiation_define_netcdf_grid( variable, found, grid_x, grid_y, grid_z )
    91739614   
    91749615    IMPLICIT NONE
    91759616
    9176     CHARACTER (LEN=*), INTENT(IN)  ::  var         !<
     9617    CHARACTER (LEN=*), INTENT(IN)  ::  variable    !<
    91779618    LOGICAL, INTENT(OUT)           ::  found       !<
    91789619    CHARACTER (LEN=*), INTENT(OUT) ::  grid_x      !<
     
    91809621    CHARACTER (LEN=*), INTENT(OUT) ::  grid_z      !<
    91819622
     9623    CHARACTER (len=varnamelength)  :: var
     9624
    91829625    found  = .TRUE.
    91839626
    91849627!
    91859628!-- Check for the grid
    9186     SELECT CASE ( TRIM( var ) )
    9187 
    9188        CASE ( 'rad_lw_cs_hr', 'rad_lw_hr', 'rad_sw_cs_hr', 'rad_sw_hr',        &
    9189               'rad_lw_cs_hr_xy', 'rad_lw_hr_xy', 'rad_sw_cs_hr_xy',            &
    9190               'rad_sw_hr_xy', 'rad_lw_cs_hr_xz', 'rad_lw_hr_xz',               &
    9191               'rad_sw_cs_hr_xz', 'rad_sw_hr_xz', 'rad_lw_cs_hr_yz',            &
    9192               'rad_lw_hr_yz', 'rad_sw_cs_hr_yz', 'rad_sw_hr_yz',               &
    9193               'rad_mrt', 'rad_mrt_sw', 'rad_mrt_lw' )
    9194           grid_x = 'x'
    9195           grid_y = 'y'
    9196           grid_z = 'zu'
    9197 
    9198        CASE ( 'rad_lw_in', 'rad_lw_out', 'rad_sw_in', 'rad_sw_out',            &
    9199               'rad_lw_in_xy', 'rad_lw_out_xy', 'rad_sw_in_xy','rad_sw_out_xy', &
    9200               'rad_lw_in_xz', 'rad_lw_out_xz', 'rad_sw_in_xz','rad_sw_out_xz', &
    9201               'rad_lw_in_yz', 'rad_lw_out_yz', 'rad_sw_in_yz','rad_sw_out_yz' )
    9202           grid_x = 'x'
    9203           grid_y = 'y'
    9204           grid_z = 'zw'
    9205 
    9206 
    9207        CASE DEFAULT
    9208           found  = .FALSE.
    9209           grid_x = 'none'
    9210           grid_y = 'none'
    9211           grid_z = 'none'
    9212 
    9213         END SELECT
     9629    var = TRIM(variable)
     9630!-- RTM directional variables
     9631    IF ( var(1:12) == 'rtm_rad_net_'  .OR.  var(1:13) == 'rtm_rad_insw_'  .OR.          &
     9632         var(1:13) == 'rtm_rad_inlw_'  .OR.  var(1:16) == 'rtm_rad_inswdir_'  .OR.      &
     9633         var(1:16) == 'rtm_rad_inswdif_'  .OR.  var(1:16) == 'rtm_rad_inswref_'  .OR.   &
     9634         var(1:16) == 'rtm_rad_inlwdif_'  .OR.  var(1:16) == 'rtm_rad_inlwref_'  .OR.   &
     9635         var(1:14) == 'rtm_rad_outsw_'  .OR.  var(1:14) == 'rtm_rad_outlw_'  .OR.       &
     9636         var(1:14) == 'rtm_rad_ressw_'  .OR.  var(1:14) == 'rtm_rad_reslw_'  .OR.       &
     9637         var == 'rtm_rad_pc_inlw'  .OR.                                                 &
     9638         var == 'rtm_rad_pc_insw'  .OR.  var == 'rtm_rad_pc_inswdir'  .OR.              &
     9639         var == 'rtm_rad_pc_inswdif'  .OR.  var == 'rtm_rad_pc_inswref'  .OR.           &
     9640         var(1:7) == 'rtm_svf'  .OR.  var(1:7) == 'rtm_dif'  .OR.                       &
     9641         var(1:9) == 'rtm_skyvf' .OR. var(1:10) == 'rtm_skyvft'  .OR.                   &
     9642         var == 'rtm_mrt'  .OR.  var ==  'rtm_mrt_sw'  .OR.  var == 'rtm_mrt_lw' )  THEN
     9643
     9644         found = .TRUE.
     9645         grid_x = 'x'
     9646         grid_y = 'y'
     9647         grid_z = 'zu'
     9648    ELSE
     9649
     9650       SELECT CASE ( TRIM( var ) )
     9651
     9652          CASE ( 'rad_lw_cs_hr', 'rad_lw_hr', 'rad_sw_cs_hr', 'rad_sw_hr',        &
     9653                 'rad_lw_cs_hr_xy', 'rad_lw_hr_xy', 'rad_sw_cs_hr_xy',            &
     9654                 'rad_sw_hr_xy', 'rad_lw_cs_hr_xz', 'rad_lw_hr_xz',               &
     9655                 'rad_sw_cs_hr_xz', 'rad_sw_hr_xz', 'rad_lw_cs_hr_yz',            &
     9656                 'rad_lw_hr_yz', 'rad_sw_cs_hr_yz', 'rad_sw_hr_yz',               &
     9657                 'rad_mrt', 'rad_mrt_sw', 'rad_mrt_lw' )
     9658             grid_x = 'x'
     9659             grid_y = 'y'
     9660             grid_z = 'zu'
     9661
     9662          CASE ( 'rad_lw_in', 'rad_lw_out', 'rad_sw_in', 'rad_sw_out',            &
     9663                 'rad_lw_in_xy', 'rad_lw_out_xy', 'rad_sw_in_xy','rad_sw_out_xy', &
     9664                 'rad_lw_in_xz', 'rad_lw_out_xz', 'rad_sw_in_xz','rad_sw_out_xz', &
     9665                 'rad_lw_in_yz', 'rad_lw_out_yz', 'rad_sw_in_yz','rad_sw_out_yz' )
     9666             grid_x = 'x'
     9667             grid_y = 'y'
     9668             grid_z = 'zw'
     9669
     9670
     9671          CASE DEFAULT
     9672             found  = .FALSE.
     9673             grid_x = 'none'
     9674             grid_y = 'none'
     9675             grid_z = 'none'
     9676
     9677           END SELECT
     9678       ENDIF
    92149679
    92159680    END SUBROUTINE radiation_define_netcdf_grid
     
    964910114    REAL(sp), DIMENSION(nxl:nxr,nys:nyn,nzb_do:nzt_do) ::  local_pf !<
    965010115
     10116    CHARACTER (len=varnamelength)                   :: var, surfid
     10117    INTEGER(iwp)                                    :: ids,idsint_u,idsint_l,isurf,isvf,isurfs,isurflt,ipcgb
     10118    INTEGER(iwp)                                    :: is, js, ks, istat
     10119
    965110120    found = .TRUE.
    965210121
    9653 
    9654     SELECT CASE ( TRIM( variable ) )
    9655 
     10122    ids = -1
     10123    var = TRIM(variable)
     10124    DO i = 0, nd-1
     10125        k = len(TRIM(var))
     10126        j = len(TRIM(dirname(i)))
     10127        IF ( TRIM(var(k-j+1:k)) == TRIM(dirname(i)) )  THEN
     10128            ids = i
     10129            idsint_u = dirint_u(ids)
     10130            idsint_l = dirint_l(ids)
     10131            var = var(:k-j)
     10132            EXIT
     10133        ENDIF
     10134    ENDDO
     10135    IF ( ids == -1 )  THEN
     10136        var = TRIM(variable)
     10137    ENDIF
     10138
     10139    IF ( (var(1:8) == 'rtm_svf_'  .OR.  var(1:8) == 'rtm_dif_')  .AND.  len(TRIM(var)) >= 13 )  THEN
     10140!--     svf values to particular surface
     10141        surfid = var(9:)
     10142        i = index(surfid,'_')
     10143        j = index(surfid(i+1:),'_')
     10144        READ(surfid(1:i-1),*, iostat=istat ) is
     10145        IF ( istat == 0 )  THEN
     10146            READ(surfid(i+1:i+j-1),*, iostat=istat ) js
     10147        ENDIF
     10148        IF ( istat == 0 )  THEN
     10149            READ(surfid(i+j+1:),*, iostat=istat ) ks
     10150        ENDIF
     10151        IF ( istat == 0 )  THEN
     10152            var = var(1:7)
     10153        ENDIF
     10154    ENDIF
     10155
     10156    local_pf = fill_value
     10157
     10158    SELECT CASE ( TRIM( var ) )
     10159!--   block of large scale radiation model (e.g. RRTMG) output variables
    965610160      CASE ( 'rad_sw_in' )
    965710161         IF ( av == 0 )  THEN
     
    983810342         ENDIF
    983910343
    9840       CASE ( 'rad_mrt_sw' )
     10344!--   block of RTM output variables
     10345!--   variables are intended mainly for debugging and detailed analyse purposes
     10346      CASE ( 'rtm_skyvf' )
     10347!--        sky view factor
     10348         DO isurf = dirstart(ids), dirend(ids)
     10349            IF ( surfl(id,isurf) == idsint_u  .OR.  surfl(id,isurf) == idsint_l )  THEN
     10350               local_pf(surfl(ix,isurf),surfl(iy,isurf),surfl(iz,isurf)) = skyvf(isurf)
     10351            ENDIF
     10352         ENDDO
     10353
     10354      CASE ( 'rtm_skyvft' )
     10355!--      sky view factor
     10356         DO isurf = dirstart(ids), dirend(ids)
     10357            IF ( surfl(id,isurf) == ids )  THEN
     10358               local_pf(surfl(ix,isurf),surfl(iy,isurf),surfl(iz,isurf)) = skyvft(isurf)
     10359            ENDIF
     10360         ENDDO
     10361
     10362      CASE ( 'rtm_svf', 'rtm_dif' )
     10363!--      shape view factors or iradiance factors to selected surface
     10364         IF ( TRIM(var)=='rtm_svf' )  THEN
     10365             k = 1
     10366         ELSE
     10367             k = 2
     10368         ENDIF
     10369         DO isvf = 1, nsvfl
     10370            isurflt = svfsurf(1, isvf)
     10371            isurfs = svfsurf(2, isvf)
     10372
     10373            IF ( surf(ix,isurfs) == is  .AND.  surf(iy,isurfs) == js  .AND. surf(iz,isurfs) == ks  .AND. &
     10374                 (surf(id,isurfs) == idsint_u .OR. surfl(id,isurf) == idsint_l ) ) THEN
     10375!--            correct source surface
     10376               local_pf(surfl(ix,isurflt),surfl(iy,isurflt),surfl(iz,isurflt)) = svf(k,isvf)
     10377            ENDIF
     10378         ENDDO
     10379
     10380      CASE ( 'rtm_rad_net' )
     10381!--     array of complete radiation balance
     10382         DO isurf = dirstart(ids), dirend(ids)
     10383            IF ( surfl(id,isurf) == idsint_u  .OR.  surfl(id,isurf) == idsint_l )  THEN
     10384               IF ( av == 0 )  THEN
     10385                  local_pf(surfl(ix,isurf),surfl(iy,isurf),surfl(iz,isurf)) = &
     10386                         surfinsw(isurf) - surfoutsw(isurf) +  surfinlw(isurf) - surfoutlw(isurf)
     10387               ELSE
     10388                  local_pf(surfl(ix,isurf),surfl(iy,isurf),surfl(iz,isurf)) = surfradnet_av(isurf)
     10389               ENDIF
     10390            ENDIF
     10391         ENDDO
     10392
     10393      CASE ( 'rtm_rad_insw' )
     10394!--      array of sw radiation falling to surface after i-th reflection
     10395         DO isurf = dirstart(ids), dirend(ids)
     10396            IF ( surfl(id,isurf) == idsint_u  .OR.  surfl(id,isurf) == idsint_l )  THEN
     10397               IF ( av == 0 )  THEN
     10398                 local_pf(surfl(ix,isurf),surfl(iy,isurf),surfl(iz,isurf)) = surfinsw(isurf)
     10399               ELSE
     10400                 local_pf(surfl(ix,isurf),surfl(iy,isurf),surfl(iz,isurf)) = surfinsw_av(isurf)
     10401               ENDIF
     10402            ENDIF
     10403         ENDDO
     10404
     10405      CASE ( 'rtm_rad_inlw' )
     10406!--      array of lw radiation falling to surface after i-th reflection
     10407         DO isurf = dirstart(ids), dirend(ids)
     10408            IF ( surfl(id,isurf) == idsint_u  .OR.  surfl(id,isurf) == idsint_l )  THEN
     10409               IF ( av == 0 )  THEN
     10410                  local_pf(surfl(ix,isurf),surfl(iy,isurf),surfl(iz,isurf)) = surfinlw(isurf)
     10411               ELSE
     10412                  local_pf(surfl(ix,isurf),surfl(iy,isurf),surfl(iz,isurf)) = surfinlw_av(isurf)
     10413               ENDIF
     10414             ENDIF
     10415         ENDDO
     10416
     10417      CASE ( 'rtm_rad_inswdir' )
     10418!--      array of direct sw radiation falling to surface from sun
     10419         DO isurf = dirstart(ids), dirend(ids)
     10420            IF ( surfl(id,isurf) == idsint_u  .OR.  surfl(id,isurf) == idsint_l )  THEN
     10421               IF ( av == 0 )  THEN
     10422                  local_pf(surfl(ix,isurf),surfl(iy,isurf),surfl(iz,isurf)) = surfinswdir(isurf)
     10423               ELSE
     10424                  local_pf(surfl(ix,isurf),surfl(iy,isurf),surfl(iz,isurf)) = surfinswdir_av(isurf)
     10425               ENDIF
     10426            ENDIF
     10427         ENDDO
     10428
     10429      CASE ( 'rtm_rad_inswdif' )
     10430!--      array of difusion sw radiation falling to surface from sky and borders of the domain
     10431         DO isurf = dirstart(ids), dirend(ids)
     10432            IF ( surfl(id,isurf) == idsint_u  .OR.  surfl(id,isurf) == idsint_l )  THEN
     10433               IF ( av == 0 )  THEN
     10434                  local_pf(surfl(ix,isurf),surfl(iy,isurf),surfl(iz,isurf)) = surfinswdif(isurf)
     10435               ELSE
     10436                  local_pf(surfl(ix,isurf),surfl(iy,isurf),surfl(iz,isurf)) = surfinswdif_av(isurf)
     10437               ENDIF
     10438            ENDIF
     10439         ENDDO
     10440
     10441      CASE ( 'rtm_rad_inswref' )
     10442!--      array of sw radiation falling to surface from reflections
     10443         DO isurf = dirstart(ids), dirend(ids)
     10444            IF ( surfl(id,isurf) == idsint_u  .OR.  surfl(id,isurf) == idsint_l )  THEN
     10445               IF ( av == 0 )  THEN
     10446                  local_pf(surfl(ix,isurf),surfl(iy,isurf),surfl(iz,isurf)) = &
     10447                    surfinsw(isurf) - surfinswdir(isurf) - surfinswdif(isurf)
     10448               ELSE
     10449                  local_pf(surfl(ix,isurf),surfl(iy,isurf),surfl(iz,isurf)) = surfinswref_av(isurf)
     10450               ENDIF
     10451            ENDIF
     10452         ENDDO
     10453
     10454      CASE ( 'rtm_rad_inlwdif' )
     10455!--      array of difusion lw radiation falling to surface from sky and borders of the domain
     10456         DO isurf = dirstart(ids), dirend(ids)
     10457            IF ( surfl(id,isurf) == idsint_u  .OR.  surfl(id,isurf) == idsint_l )  THEN
     10458               IF ( av == 0 )  THEN
     10459                  local_pf(surfl(ix,isurf),surfl(iy,isurf),surfl(iz,isurf)) = surfinlwdif(isurf)
     10460               ELSE
     10461                  local_pf(surfl(ix,isurf),surfl(iy,isurf),surfl(iz,isurf)) = surfinlwdif_av(isurf)
     10462               ENDIF
     10463            ENDIF
     10464         ENDDO
     10465
     10466      CASE ( 'rtm_rad_inlwref' )
     10467!--      array of lw radiation falling to surface from reflections
     10468         DO isurf = dirstart(ids), dirend(ids)
     10469            IF ( surfl(id,isurf) == idsint_u  .OR.  surfl(id,isurf) == idsint_l )  THEN
     10470               IF ( av == 0 )  THEN
     10471                  local_pf(surfl(ix,isurf),surfl(iy,isurf),surfl(iz,isurf)) = surfinlw(isurf) - surfinlwdif(isurf)
     10472               ELSE
     10473                  local_pf(surfl(ix,isurf),surfl(iy,isurf),surfl(iz,isurf)) = surfinlwref_av(isurf)
     10474               ENDIF
     10475            ENDIF
     10476         ENDDO
     10477
     10478      CASE ( 'rtm_rad_outsw' )
     10479!--      array of sw radiation emitted from surface after i-th reflection
     10480         DO isurf = dirstart(ids), dirend(ids)
     10481            IF ( surfl(id,isurf) == idsint_u  .OR.  surfl(id,isurf) == idsint_l )  THEN
     10482               IF ( av == 0 )  THEN
     10483                  local_pf(surfl(ix,isurf),surfl(iy,isurf),surfl(iz,isurf)) = surfoutsw(isurf)
     10484               ELSE
     10485                  local_pf(surfl(ix,isurf),surfl(iy,isurf),surfl(iz,isurf)) = surfoutsw_av(isurf)
     10486               ENDIF
     10487            ENDIF
     10488         ENDDO
     10489
     10490      CASE ( 'rtm_rad_outlw' )
     10491!--      array of lw radiation emitted from surface after i-th reflection
     10492         DO isurf = dirstart(ids), dirend(ids)
     10493            IF ( surfl(id,isurf) == idsint_u  .OR.  surfl(id,isurf) == idsint_l )  THEN
     10494               IF ( av == 0 )  THEN
     10495                  local_pf(surfl(ix,isurf),surfl(iy,isurf),surfl(iz,isurf)) = surfoutlw(isurf)
     10496               ELSE
     10497                  local_pf(surfl(ix,isurf),surfl(iy,isurf),surfl(iz,isurf)) = surfoutlw_av(isurf)
     10498               ENDIF
     10499            ENDIF
     10500         ENDDO
     10501
     10502      CASE ( 'rtm_rad_ressw' )
     10503!--      average of array of residua of sw radiation absorbed in surface after last reflection
     10504         DO isurf = dirstart(ids), dirend(ids)
     10505            IF ( surfl(id,isurf) == idsint_u  .OR.  surfl(id,isurf) == idsint_l )  THEN
     10506               IF ( av == 0 )  THEN
     10507                  local_pf(surfl(ix,isurf),surfl(iy,isurf),surfl(iz,isurf)) = surfins(isurf)
     10508               ELSE
     10509                  local_pf(surfl(ix,isurf),surfl(iy,isurf),surfl(iz,isurf)) = surfins_av(isurf)
     10510               ENDIF
     10511            ENDIF
     10512         ENDDO
     10513
     10514      CASE ( 'rtm_rad_reslw' )
     10515!--      average of array of residua of lw radiation absorbed in surface after last reflection
     10516         DO isurf = dirstart(ids), dirend(ids)
     10517            IF ( surfl(id,isurf) == idsint_u  .OR.  surfl(id,isurf) == idsint_l )  THEN
     10518               IF ( av == 0 )  THEN
     10519                  local_pf(surfl(ix,isurf),surfl(iy,isurf),surfl(iz,isurf)) = surfinl(isurf)
     10520               ELSE
     10521                  local_pf(surfl(ix,isurf),surfl(iy,isurf),surfl(iz,isurf)) = surfinl_av(isurf)
     10522               ENDIF
     10523            ENDIF
     10524         ENDDO
     10525
     10526      CASE ( 'rtm_rad_pc_inlw' )
     10527!--      array of lw radiation absorbed by plant canopy
     10528         DO ipcgb = 1, npcbl
     10529            IF ( av == 0 )  THEN
     10530               local_pf(pcbl(ix,ipcgb),pcbl(iy,ipcgb),pcbl(iz,ipcgb)) = pcbinlw(ipcgb)
     10531            ELSE
     10532               local_pf(pcbl(ix,ipcgb),pcbl(iy,ipcgb),pcbl(iz,ipcgb)) = pcbinlw_av(ipcgb)
     10533            ENDIF
     10534         ENDDO
     10535
     10536      CASE ( 'rtm_rad_pc_insw' )
     10537!--      array of sw radiation absorbed by plant canopy
     10538         DO ipcgb = 1, npcbl
     10539            IF ( av == 0 )  THEN
     10540              local_pf(pcbl(ix,ipcgb),pcbl(iy,ipcgb),pcbl(iz,ipcgb)) = pcbinsw(ipcgb)
     10541            ELSE
     10542              local_pf(pcbl(ix,ipcgb),pcbl(iy,ipcgb),pcbl(iz,ipcgb)) = pcbinsw_av(ipcgb)
     10543            ENDIF
     10544         ENDDO
     10545
     10546      CASE ( 'rtm_rad_pc_inswdir' )
     10547!--      array of direct sw radiation absorbed by plant canopy
     10548         DO ipcgb = 1, npcbl
     10549            IF ( av == 0 )  THEN
     10550               local_pf(pcbl(ix,ipcgb),pcbl(iy,ipcgb),pcbl(iz,ipcgb)) = pcbinswdir(ipcgb)
     10551            ELSE
     10552               local_pf(pcbl(ix,ipcgb),pcbl(iy,ipcgb),pcbl(iz,ipcgb)) = pcbinswdir_av(ipcgb)
     10553            ENDIF
     10554         ENDDO
     10555
     10556      CASE ( 'rtm_rad_pc_inswdif' )
     10557!--      array of diffuse sw radiation absorbed by plant canopy
     10558         DO ipcgb = 1, npcbl
     10559            IF ( av == 0 )  THEN
     10560               local_pf(pcbl(ix,ipcgb),pcbl(iy,ipcgb),pcbl(iz,ipcgb)) = pcbinswdif(ipcgb)
     10561            ELSE
     10562               local_pf(pcbl(ix,ipcgb),pcbl(iy,ipcgb),pcbl(iz,ipcgb)) = pcbinswdif_av(ipcgb)
     10563            ENDIF
     10564         ENDDO
     10565
     10566      CASE ( 'rtm_rad_pc_inswref' )
     10567!--      array of reflected sw radiation absorbed by plant canopy
     10568         DO ipcgb = 1, npcbl
     10569            IF ( av == 0 )  THEN
     10570               local_pf(pcbl(ix,ipcgb),pcbl(iy,ipcgb),pcbl(iz,ipcgb)) = &
     10571                                    pcbinsw(ipcgb) - pcbinswdir(ipcgb) - pcbinswdif(ipcgb)
     10572            ELSE
     10573               local_pf(pcbl(ix,ipcgb),pcbl(iy,ipcgb),pcbl(iz,ipcgb)) = pcbinswref_av(ipcgb)
     10574            ENDIF
     10575         ENDDO
     10576
     10577      CASE ( 'rtm_mrt_sw' )
    984110578         local_pf = REAL( fill_value, KIND = wp )
    984210579         IF ( av == 0 )  THEN
    984310580            DO  l = 1, nmrtbl
    9844                i = mrtbl(ix,l)
    9845                j = mrtbl(iy,l)
    9846                k = mrtbl(iz,l)
    9847                local_pf(i,j,k) = mrtinsw(l)
     10581               local_pf(mrtbl(ix,l),mrtbl(iy,l),mrtbl(iz,l)) = mrtinsw(l)
    984810582            ENDDO
    984910583         ELSE
    985010584            IF ( ALLOCATED( mrtinsw_av ) ) THEN
    985110585               DO  l = 1, nmrtbl
    9852                   i = mrtbl(ix,l)
    9853                   j = mrtbl(iy,l)
    9854                   k = mrtbl(iz,l)
    9855                   local_pf(i,j,k) = mrtinsw_av(l)
     10586                  local_pf(mrtbl(ix,l),mrtbl(iy,l),mrtbl(iz,l)) = mrtinsw_av(l)
    985610587               ENDDO
    985710588            ENDIF
    985810589         ENDIF
    985910590
    9860       CASE ( 'rad_mrt_lw' )
     10591      CASE ( 'rtm_mrt_lw' )
    986110592         local_pf = REAL( fill_value, KIND = wp )
    986210593         IF ( av == 0 )  THEN
    986310594            DO  l = 1, nmrtbl
    9864                i = mrtbl(ix,l)
    9865                j = mrtbl(iy,l)
    9866                k = mrtbl(iz,l)
    9867                local_pf(i,j,k) = mrtinlw(l)
     10595               local_pf(mrtbl(ix,l),mrtbl(iy,l),mrtbl(iz,l)) = mrtinlw(l)
    986810596            ENDDO
    986910597         ELSE
    987010598            IF ( ALLOCATED( mrtinlw_av ) ) THEN
    987110599               DO  l = 1, nmrtbl
    9872                   i = mrtbl(ix,l)
    9873                   j = mrtbl(iy,l)
    9874                   k = mrtbl(iz,l)
    9875                   local_pf(i,j,k) = mrtinlw_av(l)
     10600                  local_pf(mrtbl(ix,l),mrtbl(iy,l),mrtbl(iz,l)) = mrtinlw_av(l)
    987610601               ENDDO
    987710602            ENDIF
    987810603         ENDIF
    987910604
    9880       CASE ( 'rad_mrt' )
     10605      CASE ( 'rtm_mrt' )
    988110606         local_pf = REAL( fill_value, KIND = wp )
    988210607         IF ( av == 0 )  THEN
    988310608            DO  l = 1, nmrtbl
    9884                i = mrtbl(ix,l)
    9885                j = mrtbl(iy,l)
    9886                k = mrtbl(iz,l)
    9887                local_pf(i,j,k) = mrt(l)
     10609               local_pf(mrtbl(ix,l),mrtbl(iy,l),mrtbl(iz,l)) = mrt(l)
    988810610            ENDDO
    988910611         ELSE
    989010612            IF ( ALLOCATED( mrt_av ) ) THEN
    989110613               DO  l = 1, nmrtbl
    9892                   i = mrtbl(ix,l)
    9893                   j = mrtbl(iy,l)
    9894                   k = mrtbl(iz,l)
    9895                   local_pf(i,j,k) = mrt_av(l)
     10614                  local_pf(mrtbl(ix,l),mrtbl(iy,l),mrtbl(iz,l)) = mrt_av(l)
    989610615               ENDDO
    989710616            ENDIF
Note: See TracChangeset for help on using the changeset viewer.