Ignore:
Timestamp:
Jul 27, 2016 1:28:04 PM (8 years ago)
Author:
maronga
Message:

further modularization of land surface model (2D/3D output and restart data). Bugfix for restart runs without land surface model

File:
1 edited

Legend:

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

    r1857 r1976  
    1919! Current revisions:
    2020! -----------------
    21 !
     21! Output of 2D/3D/masked data is now directly done within this module. The
     22! radiation schemes have been simplified for better usability so that
     23! rad_lw_in, rad_lw_out, rad_sw_in, and rad_sw_out are available independent of
     24! the radiation code used.
    2225!
    2326! Former revisions:
     
    130133
    131134#if defined ( __rrtmg )
    132 
    133135    USE parrrsw,                                                               &
    134136        ONLY:  naerec, nbndsw
     
    276278!
    277279!-- Flag parameters for RRTMGS (should not be changed)
    278     INTEGER(iwp), PARAMETER :: rrtm_inflglw  = 2, & !< flag for lw cloud optical properties (0,1,2)
     280    INTEGER(iwp), PARAMETER :: rrtm_idrv     = 1, & !< flag for longwave upward flux calculation option (0,1)
     281                               rrtm_inflglw  = 2, & !< flag for lw cloud optical properties (0,1,2)
    279282                               rrtm_iceflglw = 0, & !< flag for lw ice particle specifications (0,1,2,3)
    280283                               rrtm_liqflglw = 1, & !< flag for lw liquid droplet specifications
     
    289292    INTEGER(iwp) :: nzt_rad,           & !< upper vertical limit for radiation calculations
    290293                    rrtm_icld = 0,     & !< cloud flag (0: clear sky column, 1: cloudy column)
    291                     rrtm_iaer = 0,     & !< aerosol option flag (0: no aerosol layers, for lw only: 6 (requires setting of rrtm_sw_ecaer), 10: one or more aerosol layers (not implemented)
    292                     rrtm_idrv = 1        !< longwave upward flux calculation option (0,1)
     294                    rrtm_iaer = 0        !< aerosol option flag (0: no aerosol layers, for lw only: 6 (requires setting of rrtm_sw_ecaer), 10: one or more aerosol layers (not implemented)
    293295
    294296    INTEGER(iwp) :: nc_stat !< local variable for storin the result of netCDF calls for error message handling
     
    385387    END INTERFACE radiation_constant
    386388 
     389    INTERFACE radiation_control
     390       MODULE PROCEDURE radiation_control
     391    END INTERFACE radiation_control
     392
     393    INTERFACE radiation_3d_data_averaging
     394       MODULE PROCEDURE radiation_3d_data_averaging
     395    END INTERFACE radiation_3d_data_averaging
     396
     397    INTERFACE radiation_data_output_2d
     398       MODULE PROCEDURE radiation_data_output_2d
     399    END INTERFACE radiation_data_output_2d
     400
     401    INTERFACE radiation_data_output_3d
     402       MODULE PROCEDURE radiation_data_output_3d
     403    END INTERFACE radiation_data_output_3d
     404
     405    INTERFACE radiation_data_output_mask
     406       MODULE PROCEDURE radiation_data_output_mask
     407    END INTERFACE radiation_data_output_mask
     408
     409    INTERFACE radiation_define_netcdf_grid
     410       MODULE PROCEDURE radiation_define_netcdf_grid
     411    END INTERFACE radiation_define_netcdf_grid
     412
    387413    INTERFACE radiation_header
    388414       MODULE PROCEDURE radiation_header
     
    406432    END INTERFACE radiation_tendency
    407433
     434    INTERFACE radiation_read_restart_data
     435       MODULE PROCEDURE radiation_read_restart_data
     436    END INTERFACE radiation_read_restart_data
     437
     438    INTERFACE radiation_last_actions
     439       MODULE PROCEDURE radiation_last_actions
     440    END INTERFACE radiation_last_actions
     441
    408442    SAVE
    409443
     
    411445
    412446!
    413 !-- Public functions
     447!-- Public functions / NEEDS SORTING
    414448    PUBLIC radiation_check_data_output, radiation_check_data_output_pr,        &
    415            radiation_check_parameters, radiation_clearsky, radiation_constant, &
    416            radiation_header, radiation_init, radiation_parin, radiation_rrtmg, &
    417            radiation_tendency
     449           radiation_check_parameters, radiation_control,                      &
     450           radiation_header, radiation_init, radiation_parin,                  &
     451           radiation_3d_data_averaging, radiation_tendency,                    &
     452           radiation_data_output_2d, radiation_data_output_3d,                 &
     453           radiation_define_netcdf_grid, radiation_last_actions,               &
     454           radiation_read_restart_data, radiation_data_output_mask
    418455   
    419456!
    420 !-- Public variables and constants
     457!-- Public variables and constants / NEEDS SORTING
    421458    PUBLIC dots_rad, dt_radiation, force_radiation_call,                       &
    422459           rad_net, rad_net_av, radiation, radiation_scheme, rad_lw_in,        &
     
    424461           rad_lw_cs_hr, rad_lw_cs_hr_av, rad_lw_hr, rad_lw_hr_av, rad_sw_in,  &
    425462           rad_sw_in_av, rad_sw_out, rad_sw_out_av, rad_sw_cs_hr,              &
    426            rad_sw_cs_hr_av, rad_sw_hr, rad_sw_hr_av, sigma_sb,                 &
     463           rad_sw_cs_hr_av, rad_sw_hr, rad_sw_hr_av,                           &
    427464           skip_time_do_radiation, time_radiation, unscheduled_radiation_calls
    428465
    429466
    430467#if defined ( __rrtmg )
    431     PUBLIC rrtm_aldif, rrtm_aldir, rrtm_asdif, rrtm_asdir, rrtm_idrv
     468    PUBLIC rrtm_aldif, rrtm_aldir, rrtm_asdif, rrtm_asdir
    432469#endif
    433470
    434471 CONTAINS
     472
     473
     474!------------------------------------------------------------------------------!
     475! Description:
     476! ------------
     477!> This subroutine controls the calls of the radiation schemes
     478!------------------------------------------------------------------------------!
     479    SUBROUTINE radiation_control
     480 
     481 
     482       IMPLICIT NONE
     483
     484
     485       SELECT CASE ( TRIM( radiation_scheme ) )
     486
     487          CASE ( 'constant' )
     488             CALL radiation_constant
     489         
     490          CASE ( 'clear-sky' )
     491             CALL radiation_clearsky
     492       
     493          CASE ( 'rrtmg' )
     494             CALL radiation_rrtmg
     495
     496          CASE DEFAULT
     497
     498       END SELECT
     499
     500
     501    END SUBROUTINE radiation_control
    435502
    436503!------------------------------------------------------------------------------!
     
    456523       SELECT CASE ( TRIM( var ) )
    457524
    458          CASE ( 'rad_lw_in', 'rad_lw_out', 'rad_lw_cs_hr', 'rad_lw_hr',       &
    459                  'rad_sw_in', 'rad_sw_out', 'rad_sw_cs_hr', 'rad_sw_hr' )
     525         CASE ( 'rad_lw_cs_hr', 'rad_lw_hr', 'rad_sw_cs_hr', 'rad_sw_hr' )
    460526             IF (  .NOT.  radiation  .OR.  radiation_scheme /= 'rrtmg' )  THEN
    461527                message_string = '"output of "' // TRIM( var ) // '" requi' // &
     
    779845       ENDIF
    780846
    781 
    782        IF ( radiation_scheme == 'constant' )  THEN
    783 
    784           IF ( .NOT. ALLOCATED ( rad_lw_out ) )  THEN
    785              ALLOCATE ( rad_lw_out(0:0,nysg:nyng,nxlg:nxrg) )
    786           ENDIF
    787 
    788        ENDIF
    789 
    790        IF ( radiation_scheme == 'clear-sky' )  THEN
     847       IF ( radiation_scheme == 'clear-sky'  .OR.                              &
     848            radiation_scheme == 'constant')  THEN
    791849
    792850          ALLOCATE ( alpha(nysg:nyng,nxlg:nxrg) )
     
    10751133                            + rad_lw_in(0,j,i) - rad_lw_out(0,j,i)
    10761134
     1135
     1136             rad_lw_out_change_0(j,i) = 3.0_wp * sigma_sb * emissivity         &
     1137                                        * (pt(k,j,i) * exn) ** 3
     1138
    10771139          ENDDO
    10781140       ENDDO
     
    10931155       INTEGER(iwp) :: i, j, k   !< loop indices
    10941156       REAL(wp)     :: exn,   &  !< Exner functions at surface
     1157                       exn1,  &  !< Exner functions at first grid level
    10951158                       pt1       !< potential temperature at first grid level
    10961159
     
    10991162       exn = (surface_pressure / 1000.0_wp )**0.286_wp
    11001163!
    1101 !--    Prescribe net radiation and estimate a longwave outgoing radiative
    1102 !--    flux (needed in land surface model)
     1164!--    Prescribe net radiation and estimate the remaining radiative fluxes
    11031165       DO i = nxlg, nxrg
    11041166          DO j = nysg, nyng
     
    11061168
    11071169             rad_net(j,i)      = net_radiation
     1170
     1171             exn1 = (hyp(k+1) / 100000.0_wp )**0.286_wp
     1172
     1173             IF ( cloud_physics )  THEN
     1174                pt1 = pt(k+1,j,i) + l_d_cp / exn1 * ql(k+1,j,i)
     1175                rad_lw_in(0,j,i)  = 0.8_wp * sigma_sb * (pt1 * exn1)**4
     1176             ELSE
     1177                rad_lw_in(0,j,i)  = 0.8_wp * sigma_sb * (pt(k+1,j,i) * exn1)**4
     1178             ENDIF
     1179
    11081180             rad_lw_out(0,j,i) = emissivity * sigma_sb * (pt(k,j,i) * exn)**4
     1181
     1182             rad_sw_in(0,j,i) = ( rad_net(j,i) - rad_lw_in(0,j,i)              &
     1183                                  + rad_lw_out(0,j,i) )                        &
     1184                                  / ( 1.0_wp - alpha(j,i) )
    11091185
    11101186          ENDDO
     
    21472223!> Cache-optimized version.
    21482224!------------------------------------------------------------------------------!
    2149     SUBROUTINE radiation_tendency_ij ( i, j, tend )
    2150 
    2151        USE cloud_parameters,                                                   &
    2152            ONLY:  pt_d_t
    2153 
    2154        IMPLICIT NONE
    2155 
    2156        INTEGER(iwp) :: i, j, k !< loop indices
    2157 
    2158        REAL(wp), DIMENSION(nzb:nzt+1,nysg:nyng,nxlg:nxrg) :: tend !< pt tendency term
    2159 
    2160 #if defined ( __rrtmg )
     2225 SUBROUTINE radiation_tendency_ij ( i, j, tend )
     2226
     2227    USE cloud_parameters,                                                      &
     2228        ONLY:  pt_d_t
     2229
     2230    IMPLICIT NONE
     2231
     2232    INTEGER(iwp) :: i, j, k !< loop indices
     2233
     2234    REAL(wp), DIMENSION(nzb:nzt+1,nysg:nyng,nxlg:nxrg) :: tend !< pt tendency term
     2235
     2236    IF ( radiation_scheme == 'rrtmg' )  THEN
     2237#if defined  ( __rrtmg )
    21612238!
    21622239!--    Calculate tendency based on heating rate
    21632240       DO k = nzb+1, nzt+1
    21642241          tend(k,j,i) = tend(k,j,i) + (rad_lw_hr(k,j,i) + rad_sw_hr(k,j,i))    &
    2165                                       * pt_d_t(k) * d_seconds_hour
     2242                                         * pt_d_t(k) * d_seconds_hour
    21662243       ENDDO
    2167 
    21682244#endif
     2245    ENDIF
    21692246
    21702247    END SUBROUTINE radiation_tendency_ij
     
    21772254!> Vector-optimized version
    21782255!------------------------------------------------------------------------------!
    2179     SUBROUTINE radiation_tendency ( tend )
    2180 
    2181        USE cloud_parameters,                                                   &
    2182            ONLY:  pt_d_t
    2183 
    2184        USE indices,                                                            &
    2185            ONLY:  nxl, nxr, nyn, nys
    2186 
    2187        IMPLICIT NONE
    2188 
    2189        INTEGER(iwp) :: i, j, k !< loop indices
    2190 
    2191        REAL(wp), DIMENSION(nzb:nzt+1,nysg:nyng,nxlg:nxrg) :: tend !< pt tendency term
    2192 
    2193 #if defined ( __rrtmg )
     2256 SUBROUTINE radiation_tendency ( tend )
     2257
     2258    USE cloud_parameters,                                                      &
     2259        ONLY:  pt_d_t
     2260
     2261    USE indices,                                                               &
     2262        ONLY:  nxl, nxr, nyn, nys
     2263
     2264    IMPLICIT NONE
     2265
     2266    INTEGER(iwp) :: i, j, k !< loop indices
     2267
     2268    REAL(wp), DIMENSION(nzb:nzt+1,nysg:nyng,nxlg:nxrg) :: tend !< pt tendency term
     2269
     2270    IF ( radiation_scheme == 'rrtmg' )  THEN
     2271#if defined  ( __rrtmg )
    21942272!
    21952273!--    Calculate tendency based on heating rate
     
    21982276             DO k = nzb+1, nzt+1
    21992277                tend(k,j,i) = tend(k,j,i) + ( rad_lw_hr(k,j,i)                 &
    2200                                             +  rad_sw_hr(k,j,i) ) * pt_d_t(k)  &
    2201                                             * d_seconds_hour
    2202              ENDDO
    2203          ENDDO
     2278                                          +  rad_sw_hr(k,j,i) ) * pt_d_t(k)    &
     2279                                          * d_seconds_hour
     2280             ENDDO
     2281          ENDDO
    22042282       ENDDO
    22052283#endif
    2206 
    2207     END SUBROUTINE radiation_tendency
     2284    ENDIF
     2285
     2286
     2287 END SUBROUTINE radiation_tendency
     2288
     2289!------------------------------------------------------------------------------!
     2290!
     2291! Description:
     2292! ------------
     2293!> Subroutine for averaging 3D data
     2294!------------------------------------------------------------------------------!
     2295SUBROUTINE radiation_3d_data_averaging( mode, variable )
     2296 
     2297
     2298    USE control_parameters
     2299
     2300    USE indices
     2301
     2302    USE kinds
     2303
     2304    IMPLICIT NONE
     2305
     2306    CHARACTER (LEN=*) ::  mode    !<
     2307    CHARACTER (LEN=*) :: variable !<
     2308
     2309    INTEGER(iwp) ::  i !<
     2310    INTEGER(iwp) ::  j !<
     2311    INTEGER(iwp) ::  k !<
     2312
     2313    IF ( mode == 'allocate' )  THEN
     2314
     2315       SELECT CASE ( TRIM( variable ) )
     2316
     2317             CASE ( 'rad_net*' )
     2318                IF ( .NOT. ALLOCATED( rad_net_av ) )  THEN
     2319                   ALLOCATE( rad_net_av(nysg:nyng,nxlg:nxrg) )
     2320                ENDIF
     2321                rad_net_av = 0.0_wp
     2322
     2323             CASE ( 'rad_lw_in' )
     2324                IF ( .NOT. ALLOCATED( rad_lw_in_av ) )  THEN
     2325                   ALLOCATE( rad_lw_in_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2326                ENDIF
     2327                rad_lw_in_av = 0.0_wp
     2328
     2329             CASE ( 'rad_lw_out' )
     2330                IF ( .NOT. ALLOCATED( rad_lw_out_av ) )  THEN
     2331                   ALLOCATE( rad_lw_in_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2332                ENDIF
     2333                rad_lw_out_av = 0.0_wp
     2334
     2335             CASE ( 'rad_lw_cs_hr' )
     2336                IF ( .NOT. ALLOCATED( rad_lw_cs_hr_av ) )  THEN
     2337                   ALLOCATE( rad_lw_cs_hr_av(nzb+1:nzt+1,nysg:nyng,nxlg:nxrg) )
     2338                ENDIF
     2339                rad_lw_cs_hr_av = 0.0_wp
     2340
     2341             CASE ( 'rad_lw_hr' )
     2342                IF ( .NOT. ALLOCATED( rad_lw_hr_av ) )  THEN
     2343                   ALLOCATE( rad_lw_hr_av(nzb+1:nzt+1,nysg:nyng,nxlg:nxrg) )
     2344                ENDIF
     2345                rad_lw_hr_av = 0.0_wp
     2346
     2347             CASE ( 'rad_sw_in' )
     2348                IF ( .NOT. ALLOCATED( rad_sw_in_av ) )  THEN
     2349                   ALLOCATE( rad_sw_in_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2350                ENDIF
     2351                rad_sw_in_av = 0.0_wp
     2352
     2353             CASE ( 'rad_sw_out' )
     2354                IF ( .NOT. ALLOCATED( rad_sw_out_av ) )  THEN
     2355                   ALLOCATE( rad_sw_out_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     2356                ENDIF
     2357                rad_sw_out_av = 0.0_wp
     2358
     2359             CASE ( 'rad_sw_cs_hr' )
     2360                IF ( .NOT. ALLOCATED( rad_sw_cs_hr_av ) )  THEN
     2361                   ALLOCATE( rad_sw_cs_hr_av(nzb+1:nzt+1,nysg:nyng,nxlg:nxrg) )
     2362                ENDIF
     2363                rad_sw_cs_hr_av = 0.0_wp
     2364
     2365             CASE ( 'rad_sw_hr' )
     2366                IF ( .NOT. ALLOCATED( rad_sw_hr_av ) )  THEN
     2367                   ALLOCATE( rad_sw_hr_av(nzb+1:nzt+1,nysg:nyng,nxlg:nxrg) )
     2368                ENDIF
     2369                rad_sw_hr_av = 0.0_wp
     2370
     2371          CASE DEFAULT
     2372             CONTINUE
     2373
     2374       END SELECT
     2375
     2376    ELSEIF ( mode == 'sum' )  THEN
     2377
     2378       SELECT CASE ( TRIM( variable ) )
     2379
     2380          CASE ( 'rad_net*' )
     2381             DO  i = nxlg, nxrg
     2382                DO  j = nysg, nyng
     2383                   rad_net_av(j,i) = rad_net_av(j,i) + rad_net(j,i)
     2384                ENDDO
     2385             ENDDO
     2386
     2387          CASE ( 'rad_lw_in' )
     2388             DO  i = nxlg, nxrg
     2389                DO  j = nysg, nyng
     2390                   DO  k = nzb, nzt+1
     2391                      rad_lw_in_av(k,j,i) = rad_lw_in_av(k,j,i) + rad_lw_in(k,j,i)
     2392                   ENDDO
     2393                ENDDO
     2394             ENDDO
     2395
     2396          CASE ( 'rad_lw_out' )
     2397             DO  i = nxlg, nxrg
     2398                DO  j = nysg, nyng
     2399                   DO  k = nzb, nzt+1
     2400                      rad_lw_out_av(k,j,i) = rad_lw_out_av(k,j,i) + rad_lw_out(k,j,i)
     2401                   ENDDO
     2402                ENDDO
     2403             ENDDO
     2404
     2405          CASE ( 'rad_lw_cs_hr' )
     2406             DO  i = nxlg, nxrg
     2407                DO  j = nysg, nyng
     2408                   DO  k = nzb, nzt+1
     2409                      rad_lw_cs_hr_av(k,j,i) = rad_lw_cs_hr_av(k,j,i) + rad_lw_cs_hr(k,j,i)
     2410                   ENDDO
     2411                ENDDO
     2412             ENDDO
     2413
     2414          CASE ( 'rad_lw_hr' )
     2415             DO  i = nxlg, nxrg
     2416                DO  j = nysg, nyng
     2417                   DO  k = nzb, nzt+1
     2418                      rad_lw_hr_av(k,j,i) = rad_lw_hr_av(k,j,i) + rad_lw_hr(k,j,i)
     2419                   ENDDO
     2420                ENDDO
     2421             ENDDO
     2422
     2423          CASE ( 'rad_sw_in' )
     2424             DO  i = nxlg, nxrg
     2425                DO  j = nysg, nyng
     2426                   DO  k = nzb, nzt+1
     2427                      rad_sw_in_av(k,j,i) = rad_sw_in_av(k,j,i) + rad_sw_in(k,j,i)
     2428                   ENDDO
     2429                ENDDO
     2430             ENDDO
     2431
     2432          CASE ( 'rad_sw_out' )
     2433             DO  i = nxlg, nxrg
     2434                DO  j = nysg, nyng
     2435                   DO  k = nzb, nzt+1
     2436                      rad_sw_out_av(k,j,i) = rad_sw_out_av(k,j,i) + rad_sw_out(k,j,i)
     2437                   ENDDO
     2438                ENDDO
     2439             ENDDO
     2440
     2441          CASE ( 'rad_sw_cs_hr' )
     2442             DO  i = nxlg, nxrg
     2443                DO  j = nysg, nyng
     2444                   DO  k = nzb, nzt+1
     2445                      rad_sw_cs_hr_av(k,j,i) = rad_sw_cs_hr_av(k,j,i) + rad_sw_cs_hr(k,j,i)
     2446                   ENDDO
     2447                ENDDO
     2448             ENDDO
     2449
     2450          CASE ( 'rad_sw_hr' )
     2451             DO  i = nxlg, nxrg
     2452                DO  j = nysg, nyng
     2453                   DO  k = nzb, nzt+1
     2454                      rad_sw_hr_av(k,j,i) = rad_sw_hr_av(k,j,i) + rad_sw_hr(k,j,i)
     2455                   ENDDO
     2456                ENDDO
     2457             ENDDO
     2458
     2459          CASE DEFAULT
     2460             CONTINUE
     2461
     2462       END SELECT
     2463
     2464    ELSEIF ( mode == 'average' )  THEN
     2465
     2466       SELECT CASE ( TRIM( variable ) )
     2467
     2468         CASE ( 'rad_net*' )
     2469             DO  i = nxlg, nxrg
     2470                DO  j = nysg, nyng
     2471                   rad_net_av(j,i) = rad_net_av(j,i) / REAL( average_count_3d, KIND=wp )
     2472                ENDDO
     2473             ENDDO
     2474
     2475          CASE ( 'rad_lw_in' )
     2476             DO  i = nxlg, nxrg
     2477                DO  j = nysg, nyng
     2478                   DO  k = nzb, nzt+1
     2479                      rad_lw_in_av(k,j,i) = rad_lw_in_av(k,j,i) / REAL( average_count_3d, KIND=wp )
     2480                   ENDDO
     2481                ENDDO
     2482             ENDDO
     2483
     2484          CASE ( 'rad_lw_out' )
     2485             DO  i = nxlg, nxrg
     2486                DO  j = nysg, nyng
     2487                   DO  k = nzb, nzt+1
     2488                      rad_lw_out_av(k,j,i) = rad_lw_out_av(k,j,i) / REAL( average_count_3d, KIND=wp )
     2489                   ENDDO
     2490                ENDDO
     2491             ENDDO
     2492
     2493          CASE ( 'rad_lw_cs_hr' )
     2494             DO  i = nxlg, nxrg
     2495                DO  j = nysg, nyng
     2496                   DO  k = nzb, nzt+1
     2497                      rad_lw_cs_hr_av(k,j,i) = rad_lw_cs_hr_av(k,j,i) / REAL( average_count_3d, KIND=wp )
     2498                   ENDDO
     2499                ENDDO
     2500             ENDDO
     2501
     2502          CASE ( 'rad_lw_hr' )
     2503             DO  i = nxlg, nxrg
     2504                DO  j = nysg, nyng
     2505                   DO  k = nzb, nzt+1
     2506                      rad_lw_hr_av(k,j,i) = rad_lw_hr_av(k,j,i) / REAL( average_count_3d, KIND=wp )
     2507                   ENDDO
     2508                ENDDO
     2509             ENDDO
     2510
     2511          CASE ( 'rad_sw_in' )
     2512             DO  i = nxlg, nxrg
     2513                DO  j = nysg, nyng
     2514                   DO  k = nzb, nzt+1
     2515                      rad_sw_in_av(k,j,i) = rad_sw_in_av(k,j,i) / REAL( average_count_3d, KIND=wp )
     2516                   ENDDO
     2517                ENDDO
     2518             ENDDO
     2519
     2520          CASE ( 'rad_sw_out' )
     2521             DO  i = nxlg, nxrg
     2522                DO  j = nysg, nyng
     2523                   DO  k = nzb, nzt+1
     2524                      rad_sw_out_av(k,j,i) = rad_sw_out_av(k,j,i) / REAL( average_count_3d, KIND=wp )
     2525                   ENDDO
     2526                ENDDO
     2527             ENDDO
     2528
     2529          CASE ( 'rad_sw_cs_hr' )
     2530             DO  i = nxlg, nxrg
     2531                DO  j = nysg, nyng
     2532                   DO  k = nzb, nzt+1
     2533                      rad_sw_cs_hr_av(k,j,i) = rad_sw_cs_hr_av(k,j,i) / REAL( average_count_3d, KIND=wp )
     2534                   ENDDO
     2535                ENDDO
     2536             ENDDO
     2537
     2538          CASE ( 'rad_sw_hr' )
     2539             DO  i = nxlg, nxrg
     2540                DO  j = nysg, nyng
     2541                   DO  k = nzb, nzt+1
     2542                      rad_sw_hr_av(k,j,i) = rad_sw_hr_av(k,j,i) / REAL( average_count_3d, KIND=wp )
     2543                   ENDDO
     2544                ENDDO
     2545             ENDDO
     2546
     2547       END SELECT
     2548
     2549    ENDIF
     2550
     2551END SUBROUTINE radiation_3d_data_averaging
     2552
     2553
     2554!------------------------------------------------------------------------------!
     2555!
     2556! Description:
     2557! ------------
     2558!> Subroutine defining appropriate grid for netcdf variables.
     2559!> It is called out from subroutine netcdf.
     2560!------------------------------------------------------------------------------!
     2561SUBROUTINE radiation_define_netcdf_grid( var, found, grid_x, grid_y, grid_z )
     2562   
     2563    IMPLICIT NONE
     2564
     2565    CHARACTER (LEN=*), INTENT(IN)  ::  var         !<
     2566    LOGICAL, INTENT(OUT)           ::  found       !<
     2567    CHARACTER (LEN=*), INTENT(OUT) ::  grid_x      !<
     2568    CHARACTER (LEN=*), INTENT(OUT) ::  grid_y      !<
     2569    CHARACTER (LEN=*), INTENT(OUT) ::  grid_z      !<
     2570
     2571    found  = .TRUE.
     2572
     2573
     2574!
     2575!-- Check for the grid
     2576    SELECT CASE ( TRIM( var ) )
     2577
     2578       CASE ( 'rad_lw_cs_hr', 'rad_lw_hr', 'rad_sw_cs_hr', 'rad_sw_hr',        &
     2579              'rad_lw_cs_hr_xy', 'rad_lw_hr_xy', 'rad_sw_cs_hr_xy',            &
     2580              'rad_sw_hr_xy', 'rad_lw_cs_hr_xz', 'rad_lw_hr_xz',               &
     2581              'rad_sw_cs_hr_xz', 'rad_sw_hr_xz', 'rad_lw_cs_hr_yz',            &
     2582              'rad_lw_hr_yz', 'rad_sw_cs_hr_yz', 'rad_sw_hr_yz' )
     2583          grid_x = 'x'
     2584          grid_y = 'y'
     2585          grid_z = 'zu'
     2586
     2587       CASE ( 'rad_lw_in', 'rad_lw_out', 'rad_sw_in', 'rad_sw_out',            &
     2588              'rad_lw_in_xy', 'rad_lw_out_xy', 'rad_sw_in_xy','rad_sw_out_xy', &
     2589              'rad_lw_in_xz', 'rad_lw_out_xz', 'rad_sw_in_xz','rad_sw_out_xz', &
     2590              'rad_lw_in_yz', 'rad_lw_out_yz', 'rad_sw_in_yz','rad_sw_out_yz' )
     2591          grid_x = 'x'
     2592          grid_y = 'y'
     2593          grid_z = 'zw'
     2594
     2595
     2596       CASE DEFAULT
     2597          found  = .FALSE.
     2598          grid_x = 'none'
     2599          grid_y = 'none'
     2600          grid_z = 'none'
     2601
     2602        END SELECT
     2603
     2604    END SUBROUTINE radiation_define_netcdf_grid
     2605
     2606!------------------------------------------------------------------------------!
     2607!
     2608! Description:
     2609! ------------
     2610!> Subroutine defining 3D output variables
     2611!------------------------------------------------------------------------------!
     2612 SUBROUTINE radiation_data_output_2d( av, variable, found, grid, mode,         &
     2613                                      local_pf, two_d )
     2614 
     2615    USE indices
     2616
     2617    USE kinds
     2618
     2619
     2620    IMPLICIT NONE
     2621
     2622    CHARACTER (LEN=*) ::  grid     !<
     2623    CHARACTER (LEN=*) ::  mode     !<
     2624    CHARACTER (LEN=*) ::  variable !<
     2625
     2626    INTEGER(iwp) ::  av !<
     2627    INTEGER(iwp) ::  i  !<
     2628    INTEGER(iwp) ::  j  !<
     2629    INTEGER(iwp) ::  k  !<
     2630
     2631    LOGICAL      ::  found !<
     2632    LOGICAL      ::  two_d !< flag parameter that indicates 2D variables (horizontal cross sections)
     2633
     2634    REAL(wp), DIMENSION(nxlg:nxrg,nysg:nyng,nzb:nzt+1) ::  local_pf !<
     2635
     2636    found = .TRUE.
     2637
     2638    SELECT CASE ( TRIM( variable ) )
     2639
     2640       CASE ( 'rad_net*_xy' )        ! 2d-array
     2641          IF ( av == 0 ) THEN
     2642             DO  i = nxlg, nxrg
     2643                DO  j = nysg, nyng
     2644                   local_pf(i,j,nzb+1) = rad_net(j,i)
     2645                ENDDO
     2646             ENDDO
     2647          ELSE
     2648             DO  i = nxlg, nxrg
     2649                DO  j = nysg, nyng
     2650                   local_pf(i,j,nzb+1) = rad_net_av(j,i)
     2651                ENDDO
     2652             ENDDO
     2653          ENDIF
     2654          two_d = .TRUE.
     2655          grid = 'zu1'
     2656
     2657 
     2658       CASE ( 'rad_lw_in_xy', 'rad_lw_in_xz', 'rad_lw_in_yz' )
     2659          IF ( av == 0 ) THEN
     2660             DO  i = nxlg, nxrg
     2661                DO  j = nysg, nyng
     2662                   DO  k = nzb, nzt+1
     2663                      local_pf(i,j,k) = rad_lw_in(k,j,i)
     2664                   ENDDO
     2665                ENDDO
     2666             ENDDO
     2667          ELSE
     2668             DO  i = nxlg, nxrg
     2669                DO  j = nysg, nyng
     2670                   DO  k = nzb, nzt+1
     2671                      local_pf(i,j,k) = rad_lw_in_av(k,j,i)
     2672                   ENDDO
     2673                ENDDO
     2674             ENDDO
     2675          ENDIF
     2676          IF ( mode == 'xy' )  grid = 'zu'
     2677
     2678       CASE ( 'rad_lw_out_xy', 'rad_lw_out_xz', 'rad_lw_out_yz' )
     2679          IF ( av == 0 ) THEN
     2680             DO  i = nxlg, nxrg
     2681                DO  j = nysg, nyng
     2682                   DO  k = nzb, nzt+1
     2683                      local_pf(i,j,k) = rad_lw_out(k,j,i)
     2684                   ENDDO
     2685                ENDDO
     2686             ENDDO
     2687          ELSE
     2688             DO  i = nxlg, nxrg
     2689                DO  j = nysg, nyng
     2690                   DO  k = nzb, nzt+1
     2691                      local_pf(i,j,k) = rad_lw_out_av(k,j,i)
     2692                   ENDDO
     2693                ENDDO
     2694             ENDDO
     2695          ENDIF   
     2696          IF ( mode == 'xy' )  grid = 'zu'
     2697
     2698       CASE ( 'rad_lw_cs_hr_xy', 'rad_lw_cs_hr_xz', 'rad_lw_cs_hr_yz' )
     2699          IF ( av == 0 ) THEN
     2700             DO  i = nxlg, nxrg
     2701                DO  j = nysg, nyng
     2702                   DO  k = nzb, nzt+1
     2703                      local_pf(i,j,k) = rad_lw_cs_hr(k,j,i)
     2704                   ENDDO
     2705                ENDDO
     2706             ENDDO
     2707          ELSE
     2708             DO  i = nxlg, nxrg
     2709                DO  j = nysg, nyng
     2710                   DO  k = nzb, nzt+1
     2711                      local_pf(i,j,k) = rad_lw_cs_hr_av(k,j,i)
     2712                   ENDDO
     2713                ENDDO
     2714             ENDDO
     2715          ENDIF
     2716          IF ( mode == 'xy' )  grid = 'zw'
     2717
     2718       CASE ( 'rad_lw_hr_xy', 'rad_lw_hr_xz', 'rad_lw_hr_yz' )
     2719          IF ( av == 0 ) THEN
     2720             DO  i = nxlg, nxrg
     2721                DO  j = nysg, nyng
     2722                   DO  k = nzb, nzt+1
     2723                      local_pf(i,j,k) = rad_lw_hr(k,j,i)
     2724                   ENDDO
     2725                ENDDO
     2726             ENDDO
     2727          ELSE
     2728             DO  i = nxlg, nxrg
     2729                DO  j = nysg, nyng
     2730                   DO  k = nzb, nzt+1
     2731                      local_pf(i,j,k) = rad_lw_hr_av(k,j,i)
     2732                   ENDDO
     2733                ENDDO
     2734             ENDDO
     2735          ENDIF
     2736          IF ( mode == 'xy' )  grid = 'zw'
     2737
     2738       CASE ( 'rad_sw_in_xy', 'rad_sw_in_xz', 'rad_sw_in_yz' )
     2739          IF ( av == 0 ) THEN
     2740             DO  i = nxlg, nxrg
     2741                DO  j = nysg, nyng
     2742                   DO  k = nzb, nzt+1
     2743                      local_pf(i,j,k) = rad_sw_in(k,j,i)
     2744                   ENDDO
     2745                ENDDO
     2746             ENDDO
     2747          ELSE
     2748             DO  i = nxlg, nxrg
     2749                DO  j = nysg, nyng
     2750                   DO  k = nzb, nzt+1
     2751                      local_pf(i,j,k) = rad_sw_in_av(k,j,i)
     2752                   ENDDO
     2753                ENDDO
     2754             ENDDO
     2755          ENDIF
     2756          IF ( mode == 'xy' )  grid = 'zu'
     2757
     2758       CASE ( 'rad_sw_out_xy', 'rad_sw_out_xz', 'rad_sw_out_yz' )
     2759          IF ( av == 0 ) THEN
     2760             DO  i = nxlg, nxrg
     2761                DO  j = nysg, nyng
     2762                   DO  k = nzb, nzt+1
     2763                      local_pf(i,j,k) = rad_sw_out(k,j,i)
     2764                   ENDDO
     2765                ENDDO
     2766             ENDDO
     2767          ELSE
     2768             DO  i = nxlg, nxrg
     2769                DO  j = nysg, nyng
     2770                   DO  k = nzb, nzt+1
     2771                      local_pf(i,j,k) = rad_sw_out_av(k,j,i)
     2772                   ENDDO
     2773                ENDDO
     2774             ENDDO
     2775          ENDIF
     2776          IF ( mode == 'xy' )  grid = 'zu'
     2777
     2778       CASE ( 'rad_sw_cs_hr_xy', 'rad_sw_cs_hr_xz', 'rad_sw_cs_hr_yz' )
     2779          IF ( av == 0 ) THEN
     2780             DO  i = nxlg, nxrg
     2781                DO  j = nysg, nyng
     2782                   DO  k = nzb, nzt+1
     2783                      local_pf(i,j,k) = rad_sw_cs_hr(k,j,i)
     2784                   ENDDO
     2785                ENDDO
     2786             ENDDO
     2787          ELSE
     2788             DO  i = nxlg, nxrg
     2789                DO  j = nysg, nyng
     2790                   DO  k = nzb, nzt+1
     2791                      local_pf(i,j,k) = rad_sw_cs_hr_av(k,j,i)
     2792                   ENDDO
     2793                ENDDO
     2794             ENDDO
     2795          ENDIF
     2796          IF ( mode == 'xy' )  grid = 'zw'
     2797
     2798       CASE ( 'rad_sw_hr_xy', 'rad_sw_hr_xz', 'rad_sw_hr_yz' )
     2799          IF ( av == 0 ) THEN
     2800             DO  i = nxlg, nxrg
     2801                DO  j = nysg, nyng
     2802                   DO  k = nzb, nzt+1
     2803                      local_pf(i,j,k) = rad_sw_hr(k,j,i)
     2804                   ENDDO
     2805                ENDDO
     2806             ENDDO
     2807          ELSE
     2808             DO  i = nxlg, nxrg
     2809                DO  j = nysg, nyng
     2810                   DO  k = nzb, nzt+1
     2811                      local_pf(i,j,k) = rad_sw_hr_av(k,j,i)
     2812                   ENDDO
     2813                ENDDO
     2814             ENDDO
     2815          ENDIF
     2816          IF ( mode == 'xy' )  grid = 'zw'
     2817
     2818       CASE DEFAULT
     2819          found = .FALSE.
     2820          grid  = 'none'
     2821
     2822    END SELECT
     2823 
     2824 END SUBROUTINE radiation_data_output_2d
     2825
     2826
     2827!------------------------------------------------------------------------------!
     2828!
     2829! Description:
     2830! ------------
     2831!> Subroutine defining 3D output variables
     2832!------------------------------------------------------------------------------!
     2833 SUBROUTINE radiation_data_output_3d( av, variable, found, local_pf )
     2834 
     2835
     2836    USE indices
     2837
     2838    USE kinds
     2839
     2840
     2841    IMPLICIT NONE
     2842
     2843    CHARACTER (LEN=*) ::  variable !<
     2844
     2845    INTEGER(iwp) ::  av    !<
     2846    INTEGER(iwp) ::  i     !<
     2847    INTEGER(iwp) ::  j     !<
     2848    INTEGER(iwp) ::  k     !<
     2849
     2850    LOGICAL      ::  found !<
     2851
     2852    REAL(sp), DIMENSION(nxlg:nxrg,nysg:nyng,nzb:nzt+1) ::  local_pf !<
     2853
     2854
     2855    found = .TRUE.
     2856
     2857
     2858    SELECT CASE ( TRIM( variable ) )
     2859
     2860      CASE ( 'rad_sw_in' )
     2861         IF ( av == 0 )  THEN
     2862            DO  i = nxlg, nxrg
     2863               DO  j = nysg, nyng
     2864                  DO  k = nzb, nzt+1
     2865                     local_pf(i,j,k) = rad_sw_in(k,j,i)
     2866                  ENDDO
     2867               ENDDO
     2868            ENDDO
     2869         ELSE
     2870            DO  i = nxlg, nxrg
     2871               DO  j = nysg, nyng
     2872                  DO  k = nzb, nzt+1
     2873                     local_pf(i,j,k) = rad_sw_in_av(k,j,i)
     2874                  ENDDO
     2875               ENDDO
     2876            ENDDO
     2877         ENDIF
     2878
     2879      CASE ( 'rad_sw_out' )
     2880         IF ( av == 0 )  THEN
     2881            DO  i = nxlg, nxrg
     2882               DO  j = nysg, nyng
     2883                  DO  k = nzb, nzt+1
     2884                     local_pf(i,j,k) = rad_sw_out(k,j,i)
     2885                  ENDDO
     2886               ENDDO
     2887            ENDDO
     2888         ELSE
     2889            DO  i = nxlg, nxrg
     2890               DO  j = nysg, nyng
     2891                  DO  k = nzb, nzt+1
     2892                     local_pf(i,j,k) = rad_sw_out_av(k,j,i)
     2893                  ENDDO
     2894               ENDDO
     2895            ENDDO
     2896         ENDIF
     2897
     2898      CASE ( 'rad_sw_cs_hr' )
     2899         IF ( av == 0 )  THEN
     2900            DO  i = nxlg, nxrg
     2901               DO  j = nysg, nyng
     2902                  DO  k = nzb, nzt+1
     2903                     local_pf(i,j,k) = rad_sw_cs_hr(k,j,i)
     2904                  ENDDO
     2905               ENDDO
     2906            ENDDO
     2907         ELSE
     2908            DO  i = nxlg, nxrg
     2909               DO  j = nysg, nyng
     2910                  DO  k = nzb, nzt+1
     2911                     local_pf(i,j,k) = rad_sw_cs_hr_av(k,j,i)
     2912                  ENDDO
     2913               ENDDO
     2914            ENDDO
     2915         ENDIF
     2916
     2917      CASE ( 'rad_sw_hr' )
     2918         IF ( av == 0 )  THEN
     2919            DO  i = nxlg, nxrg
     2920               DO  j = nysg, nyng
     2921                  DO  k = nzb, nzt+1
     2922                     local_pf(i,j,k) = rad_sw_hr(k,j,i)
     2923                  ENDDO
     2924               ENDDO
     2925            ENDDO
     2926         ELSE
     2927            DO  i = nxlg, nxrg
     2928               DO  j = nysg, nyng
     2929                  DO  k = nzb, nzt+1
     2930                     local_pf(i,j,k) = rad_sw_hr_av(k,j,i)
     2931                  ENDDO
     2932               ENDDO
     2933            ENDDO
     2934         ENDIF
     2935
     2936      CASE ( 'rad_lw_in' )
     2937         IF ( av == 0 )  THEN
     2938            DO  i = nxlg, nxrg
     2939               DO  j = nysg, nyng
     2940                  DO  k = nzb, nzt+1
     2941                     local_pf(i,j,k) = rad_lw_in(k,j,i)
     2942                  ENDDO
     2943               ENDDO
     2944            ENDDO
     2945         ELSE
     2946            DO  i = nxlg, nxrg
     2947               DO  j = nysg, nyng
     2948                  DO  k = nzb, nzt+1
     2949                     local_pf(i,j,k) = rad_lw_in_av(k,j,i)
     2950                  ENDDO
     2951               ENDDO
     2952            ENDDO
     2953         ENDIF
     2954
     2955      CASE ( 'rad_lw_out' )
     2956         IF ( av == 0 )  THEN
     2957            DO  i = nxlg, nxrg
     2958               DO  j = nysg, nyng
     2959                  DO  k = nzb, nzt+1
     2960                     local_pf(i,j,k) = rad_lw_out(k,j,i)
     2961                  ENDDO
     2962               ENDDO
     2963            ENDDO
     2964         ELSE
     2965            DO  i = nxlg, nxrg
     2966               DO  j = nysg, nyng
     2967                  DO  k = nzb, nzt+1
     2968                     local_pf(i,j,k) = rad_lw_out_av(k,j,i)
     2969                  ENDDO
     2970               ENDDO
     2971            ENDDO
     2972         ENDIF
     2973
     2974      CASE ( 'rad_lw_cs_hr' )
     2975         IF ( av == 0 )  THEN
     2976            DO  i = nxlg, nxrg
     2977               DO  j = nysg, nyng
     2978                  DO  k = nzb, nzt+1
     2979                     local_pf(i,j,k) = rad_lw_cs_hr(k,j,i)
     2980                  ENDDO
     2981               ENDDO
     2982            ENDDO
     2983         ELSE
     2984            DO  i = nxlg, nxrg
     2985               DO  j = nysg, nyng
     2986                  DO  k = nzb, nzt+1
     2987                     local_pf(i,j,k) = rad_lw_cs_hr_av(k,j,i)
     2988                  ENDDO
     2989               ENDDO
     2990            ENDDO
     2991         ENDIF
     2992
     2993      CASE ( 'rad_lw_hr' )
     2994         IF ( av == 0 )  THEN
     2995            DO  i = nxlg, nxrg
     2996               DO  j = nysg, nyng
     2997                  DO  k = nzb, nzt+1
     2998                     local_pf(i,j,k) = rad_lw_hr(k,j,i)
     2999                  ENDDO
     3000               ENDDO
     3001            ENDDO
     3002         ELSE
     3003            DO  i = nxlg, nxrg
     3004               DO  j = nysg, nyng
     3005                  DO  k = nzb, nzt+1
     3006                     local_pf(i,j,k) = rad_lw_hr_av(k,j,i)
     3007                  ENDDO
     3008               ENDDO
     3009            ENDDO
     3010         ENDIF
     3011
     3012       CASE DEFAULT
     3013          found = .FALSE.
     3014
     3015    END SELECT
     3016
     3017
     3018 END SUBROUTINE radiation_data_output_3d
     3019
     3020!------------------------------------------------------------------------------!
     3021!
     3022! Description:
     3023! ------------
     3024!> Subroutine defining masked data output
     3025!------------------------------------------------------------------------------!
     3026 SUBROUTINE radiation_data_output_mask( av, variable, found, local_pf )
     3027 
     3028    USE control_parameters
     3029       
     3030    USE indices
     3031   
     3032    USE kinds
     3033   
     3034
     3035    IMPLICIT NONE
     3036
     3037    CHARACTER (LEN=*) ::  variable   !<
     3038
     3039    INTEGER(iwp) ::  av   !<
     3040    INTEGER(iwp) ::  i    !<
     3041    INTEGER(iwp) ::  j    !<
     3042    INTEGER(iwp) ::  k    !<
     3043
     3044    LOGICAL ::  found     !<
     3045
     3046    REAL(wp),                                                                  &
     3047       DIMENSION(mask_size_l(mid,1),mask_size_l(mid,2),mask_size_l(mid,3)) ::  &
     3048          local_pf   !<
     3049
     3050
     3051    found = .TRUE.
     3052
     3053    SELECT CASE ( TRIM( variable ) )
     3054
     3055
     3056       CASE ( 'rad_lw_in' )
     3057          IF ( av == 0 )  THEN
     3058             DO  i = 1, mask_size_l(mid,1)
     3059                DO  j = 1, mask_size_l(mid,2)
     3060                   DO  k = 1, mask_size_l(mid,3)
     3061                       local_pf(i,j,k) = rad_lw_in(mask_k(mid,k),              &
     3062                                            mask_j(mid,j),mask_i(mid,i))
     3063                    ENDDO
     3064                 ENDDO
     3065              ENDDO
     3066          ELSE
     3067             DO  i = 1, mask_size_l(mid,1)
     3068                DO  j = 1, mask_size_l(mid,2)
     3069                   DO  k = 1, mask_size_l(mid,3)
     3070                       local_pf(i,j,k) = rad_lw_in_av(mask_k(mid,k),           &
     3071                                               mask_j(mid,j),mask_i(mid,i))
     3072                   ENDDO
     3073                ENDDO
     3074             ENDDO
     3075          ENDIF
     3076
     3077       CASE ( 'rad_lw_out' )
     3078          IF ( av == 0 )  THEN
     3079             DO  i = 1, mask_size_l(mid,1)
     3080                DO  j = 1, mask_size_l(mid,2)
     3081                   DO  k = 1, mask_size_l(mid,3)
     3082                       local_pf(i,j,k) = rad_lw_out(mask_k(mid,k),             &
     3083                                            mask_j(mid,j),mask_i(mid,i))
     3084                    ENDDO
     3085                 ENDDO
     3086              ENDDO
     3087          ELSE
     3088             DO  i = 1, mask_size_l(mid,1)
     3089                DO  j = 1, mask_size_l(mid,2)
     3090                   DO  k = 1, mask_size_l(mid,3)
     3091                       local_pf(i,j,k) = rad_lw_out_av(mask_k(mid,k),          &
     3092                                               mask_j(mid,j),mask_i(mid,i))
     3093                   ENDDO
     3094                ENDDO
     3095             ENDDO
     3096          ENDIF
     3097
     3098       CASE ( 'rad_lw_cs_hr' )
     3099          IF ( av == 0 )  THEN
     3100             DO  i = 1, mask_size_l(mid,1)
     3101                DO  j = 1, mask_size_l(mid,2)
     3102                   DO  k = 1, mask_size_l(mid,3)
     3103                       local_pf(i,j,k) = rad_lw_cs_hr(mask_k(mid,k),           &
     3104                                            mask_j(mid,j),mask_i(mid,i))
     3105                    ENDDO
     3106                 ENDDO
     3107              ENDDO
     3108          ELSE
     3109             DO  i = 1, mask_size_l(mid,1)
     3110                DO  j = 1, mask_size_l(mid,2)
     3111                   DO  k = 1, mask_size_l(mid,3)
     3112                       local_pf(i,j,k) = rad_lw_cs_hr_av(mask_k(mid,k),        &
     3113                                               mask_j(mid,j),mask_i(mid,i))
     3114                   ENDDO
     3115                ENDDO
     3116             ENDDO
     3117          ENDIF
     3118
     3119       CASE ( 'rad_lw_hr' )
     3120          IF ( av == 0 )  THEN
     3121             DO  i = 1, mask_size_l(mid,1)
     3122                DO  j = 1, mask_size_l(mid,2)
     3123                   DO  k = 1, mask_size_l(mid,3)
     3124                       local_pf(i,j,k) = rad_lw_hr(mask_k(mid,k),              &
     3125                                            mask_j(mid,j),mask_i(mid,i))
     3126                    ENDDO
     3127                 ENDDO
     3128              ENDDO
     3129          ELSE
     3130             DO  i = 1, mask_size_l(mid,1)
     3131                DO  j = 1, mask_size_l(mid,2)
     3132                   DO  k = 1, mask_size_l(mid,3)
     3133                       local_pf(i,j,k) = rad_lw_hr_av(mask_k(mid,k),           &
     3134                                               mask_j(mid,j),mask_i(mid,i))
     3135                   ENDDO
     3136                ENDDO
     3137             ENDDO
     3138          ENDIF
     3139
     3140       CASE ( 'rad_sw_in' )
     3141          IF ( av == 0 )  THEN
     3142             DO  i = 1, mask_size_l(mid,1)
     3143                DO  j = 1, mask_size_l(mid,2)
     3144                   DO  k = 1, mask_size_l(mid,3)
     3145                       local_pf(i,j,k) = rad_sw_in(mask_k(mid,k),              &
     3146                                            mask_j(mid,j),mask_i(mid,i))
     3147                    ENDDO
     3148                 ENDDO
     3149              ENDDO
     3150          ELSE
     3151             DO  i = 1, mask_size_l(mid,1)
     3152                DO  j = 1, mask_size_l(mid,2)
     3153                   DO  k = 1, mask_size_l(mid,3)
     3154                       local_pf(i,j,k) = rad_sw_in_av(mask_k(mid,k),           &
     3155                                               mask_j(mid,j),mask_i(mid,i))
     3156                   ENDDO
     3157                ENDDO
     3158             ENDDO
     3159          ENDIF
     3160
     3161       CASE ( 'rad_sw_out' )
     3162          IF ( av == 0 )  THEN
     3163             DO  i = 1, mask_size_l(mid,1)
     3164                DO  j = 1, mask_size_l(mid,2)
     3165                   DO  k = 1, mask_size_l(mid,3)
     3166                       local_pf(i,j,k) = rad_sw_out(mask_k(mid,k),             &
     3167                                            mask_j(mid,j),mask_i(mid,i))
     3168                    ENDDO
     3169                 ENDDO
     3170              ENDDO
     3171          ELSE
     3172             DO  i = 1, mask_size_l(mid,1)
     3173                DO  j = 1, mask_size_l(mid,2)
     3174                   DO  k = 1, mask_size_l(mid,3)
     3175                       local_pf(i,j,k) = rad_sw_out_av(mask_k(mid,k),          &
     3176                                               mask_j(mid,j),mask_i(mid,i))
     3177                   ENDDO
     3178                ENDDO
     3179             ENDDO
     3180          ENDIF
     3181
     3182       CASE ( 'rad_sw_cs_hr' )
     3183          IF ( av == 0 )  THEN
     3184             DO  i = 1, mask_size_l(mid,1)
     3185                DO  j = 1, mask_size_l(mid,2)
     3186                   DO  k = 1, mask_size_l(mid,3)
     3187                       local_pf(i,j,k) = rad_sw_cs_hr(mask_k(mid,k),           &
     3188                                            mask_j(mid,j),mask_i(mid,i))
     3189                    ENDDO
     3190                 ENDDO
     3191              ENDDO
     3192          ELSE
     3193             DO  i = 1, mask_size_l(mid,1)
     3194                DO  j = 1, mask_size_l(mid,2)
     3195                   DO  k = 1, mask_size_l(mid,3)
     3196                       local_pf(i,j,k) = rad_sw_cs_hr_av(mask_k(mid,k),        &
     3197                                               mask_j(mid,j),mask_i(mid,i))
     3198                   ENDDO
     3199                ENDDO
     3200             ENDDO
     3201          ENDIF
     3202
     3203       CASE ( 'rad_sw_hr' )
     3204          IF ( av == 0 )  THEN
     3205             DO  i = 1, mask_size_l(mid,1)
     3206                DO  j = 1, mask_size_l(mid,2)
     3207                   DO  k = 1, mask_size_l(mid,3)
     3208                       local_pf(i,j,k) = rad_sw_hr(mask_k(mid,k),              &
     3209                                            mask_j(mid,j),mask_i(mid,i))
     3210                    ENDDO
     3211                 ENDDO
     3212              ENDDO
     3213          ELSE
     3214             DO  i = 1, mask_size_l(mid,1)
     3215                DO  j = 1, mask_size_l(mid,2)
     3216                   DO  k = 1, mask_size_l(mid,3)
     3217                       local_pf(i,j,k) = rad_sw_hr_av(mask_k(mid,k),           &
     3218                                               mask_j(mid,j),mask_i(mid,i))
     3219                   ENDDO
     3220                ENDDO
     3221             ENDDO
     3222          ENDIF
     3223
     3224       CASE DEFAULT
     3225          found = .FALSE.
     3226
     3227    END SELECT
     3228
     3229
     3230 END SUBROUTINE radiation_data_output_mask
     3231
     3232
     3233!------------------------------------------------------------------------------!
     3234!
     3235! Description:
     3236! ------------
     3237!> Subroutine defines masked output variables
     3238!------------------------------------------------------------------------------!
     3239 SUBROUTINE radiation_last_actions
     3240 
     3241
     3242    USE control_parameters
     3243       
     3244    USE kinds
     3245
     3246    IMPLICIT NONE
     3247
     3248    IF ( write_binary(1:4) == 'true' )  THEN
     3249       IF ( ALLOCATED( rad_net ) )  THEN
     3250          WRITE ( 14 )  'rad_net             ';  WRITE ( 14 )  rad_net 
     3251       ENDIF
     3252       IF ( ALLOCATED( rad_net_av ) )  THEN
     3253          WRITE ( 14 )  'rad_net_av          ';  WRITE ( 14 )  rad_net_av 
     3254       ENDIF 
     3255       IF ( ALLOCATED( rad_lw_in ) )  THEN
     3256          WRITE ( 14 )  'rad_lw_in           ';  WRITE ( 14 )  rad_lw_in 
     3257       ENDIF
     3258       IF ( ALLOCATED( rad_lw_in_av ) )  THEN
     3259          WRITE ( 14 )  'rad_lw_in_av        ';  WRITE ( 14 )  rad_lw_in_av 
     3260       ENDIF
     3261       IF ( ALLOCATED( rad_lw_out ) )  THEN
     3262          WRITE ( 14 )  'rad_lw_out          ';  WRITE ( 14 )  rad_lw_out
     3263       ENDIF
     3264       IF ( ALLOCATED( rad_lw_out_av ) )  THEN
     3265          WRITE ( 14 )  'rad_lw_out_av       ';  WRITE ( 14 )  rad_lw_out_av 
     3266       ENDIF
     3267       IF ( ALLOCATED( rad_lw_out_change_0 ) )  THEN
     3268          WRITE ( 14 )  'rad_lw_out_change_0 '
     3269          WRITE ( 14 )  rad_lw_out_change_0
     3270       ENDIF
     3271       IF ( ALLOCATED( rad_lw_cs_hr ) )  THEN
     3272          WRITE ( 14 )  'rad_lw_cs_hr        ';  WRITE ( 14 )  rad_lw_cs_hr
     3273       ENDIF
     3274       IF ( ALLOCATED( rad_lw_cs_hr_av ) )  THEN
     3275          WRITE ( 14 )  'rad_lw_cs_hr_av     ';  WRITE ( 14 )  rad_lw_cs_hr_av
     3276       ENDIF
     3277       IF ( ALLOCATED( rad_lw_hr ) )  THEN
     3278          WRITE ( 14 )  'rad_lw_hr           ';  WRITE ( 14 )  rad_lw_hr
     3279       ENDIF
     3280       IF ( ALLOCATED( rad_lw_hr_av ) )  THEN
     3281          WRITE ( 14 )  'rad_lw_hr_av        ';  WRITE ( 14 )  rad_lw_hr_av
     3282       ENDIF
     3283       IF ( ALLOCATED( rad_sw_in ) )  THEN
     3284          WRITE ( 14 )  'rad_sw_in           ';  WRITE ( 14 )  rad_sw_in 
     3285       ENDIF
     3286       IF ( ALLOCATED( rad_sw_in_av ) )  THEN
     3287          WRITE ( 14 )  'rad_sw_in_av        ';  WRITE ( 14 )  rad_sw_in_av 
     3288       ENDIF
     3289       IF ( ALLOCATED( rad_sw_out ) )  THEN
     3290          WRITE ( 14 )  'rad_sw_out          ';  WRITE ( 14 )  rad_sw_out 
     3291       ENDIF
     3292       IF ( ALLOCATED( rad_sw_out_av ) )  THEN
     3293          WRITE ( 14 )  'rad_sw_out_av       ';  WRITE ( 14 )  rad_sw_out_av 
     3294       ENDIF
     3295       IF ( ALLOCATED( rad_sw_cs_hr ) )  THEN
     3296          WRITE ( 14 )  'rad_sw_cs_hr        ';  WRITE ( 14 )  rad_sw_cs_hr
     3297       ENDIF
     3298       IF ( ALLOCATED( rad_sw_cs_hr_av ) )  THEN
     3299          WRITE ( 14 )  'rad_sw_cs_hr_av     ';  WRITE ( 14 )  rad_sw_cs_hr_av
     3300       ENDIF
     3301       IF ( ALLOCATED( rad_sw_hr ) )  THEN
     3302          WRITE ( 14 )  'rad_sw_hr           ';  WRITE ( 14 )  rad_sw_hr
     3303       ENDIF
     3304       IF ( ALLOCATED( rad_sw_hr_av ) )  THEN
     3305          WRITE ( 14 )  'rad_sw_hr_av        ';  WRITE ( 14 )  rad_sw_hr_av
     3306       ENDIF
     3307
     3308       WRITE ( 14 )  '*** end rad ***     '
     3309
     3310    ENDIF
     3311
     3312 END SUBROUTINE radiation_last_actions
     3313
     3314
     3315SUBROUTINE radiation_read_restart_data( i, nxlfa, nxl_on_file, nxrfa, nxr_on_file,   &
     3316                                     nynfa, nyn_on_file, nysfa, nys_on_file,   &
     3317                                     offset_xa, offset_ya, overlap_count,      &
     3318                                     tmp_2d, tmp_3d )
     3319 
     3320
     3321    USE control_parameters
     3322       
     3323    USE indices
     3324   
     3325    USE kinds
     3326   
     3327    USE pegrid
     3328
     3329    IMPLICIT NONE
     3330
     3331    CHARACTER (LEN=20) :: field_char   !<
     3332
     3333    INTEGER(iwp) ::  i               !<
     3334    INTEGER(iwp) ::  k               !<
     3335    INTEGER(iwp) ::  nxlc            !<
     3336    INTEGER(iwp) ::  nxlf            !<
     3337    INTEGER(iwp) ::  nxl_on_file     !<
     3338    INTEGER(iwp) ::  nxrc            !<
     3339    INTEGER(iwp) ::  nxrf            !<
     3340    INTEGER(iwp) ::  nxr_on_file     !<
     3341    INTEGER(iwp) ::  nync            !<
     3342    INTEGER(iwp) ::  nynf            !<
     3343    INTEGER(iwp) ::  nyn_on_file     !<
     3344    INTEGER(iwp) ::  nysc            !<
     3345    INTEGER(iwp) ::  nysf            !<
     3346    INTEGER(iwp) ::  nys_on_file     !<
     3347    INTEGER(iwp) ::  overlap_count   !<
     3348
     3349    INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) ::  nxlfa       !<
     3350    INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) ::  nxrfa       !<
     3351    INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) ::  nynfa       !<
     3352    INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) ::  nysfa       !<
     3353    INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) ::  offset_xa   !<
     3354    INTEGER(iwp), DIMENSION(numprocs_previous_run,1000) ::  offset_ya   !<
     3355
     3356    REAL(wp),                                                                  &
     3357       DIMENSION(nys_on_file-nbgp:nyn_on_file+nbgp,nxl_on_file-nbgp:nxr_on_file+nbgp) ::&
     3358          tmp_2d   !<
     3359
     3360    REAL(wp),                                                                  &
     3361       DIMENSION(nzb:nzt+1,nys_on_file-nbgp:nyn_on_file+nbgp,nxl_on_file-nbgp:nxr_on_file+nbgp) ::&
     3362          tmp_3d   !<
     3363
     3364
     3365
     3366   IF ( initializing_actions == 'read_restart_data' )  THEN
     3367      READ ( 13 )  field_char
     3368
     3369      DO  WHILE ( TRIM( field_char ) /= '*** end rad ***' )
     3370
     3371         DO  k = 1, overlap_count
     3372
     3373            nxlf = nxlfa(i,k)
     3374            nxlc = nxlfa(i,k) + offset_xa(i,k)
     3375            nxrf = nxrfa(i,k)
     3376            nxrc = nxrfa(i,k) + offset_xa(i,k)
     3377            nysf = nysfa(i,k)
     3378            nysc = nysfa(i,k) + offset_ya(i,k)
     3379            nynf = nynfa(i,k)
     3380            nync = nynfa(i,k) + offset_ya(i,k)
     3381
     3382
     3383            SELECT CASE ( TRIM( field_char ) )
     3384
     3385                CASE ( 'rad_net' )
     3386                   IF ( .NOT. ALLOCATED( rad_net ) )  THEN
     3387                      ALLOCATE( rad_net(nysg:nyng,nxlg:nxrg) )
     3388                   ENDIF 
     3389                   IF ( k == 1 )  READ ( 13 )  tmp_2d
     3390                   rad_net(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
     3391                                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     3392
     3393                CASE ( 'rad_net_av' )
     3394                   IF ( .NOT. ALLOCATED( rad_net_av ) )  THEN
     3395                      ALLOCATE( rad_net_av(nysg:nyng,nxlg:nxrg) )
     3396                   ENDIF 
     3397                   IF ( k == 1 )  READ ( 13 )  tmp_2d
     3398                   rad_net_av(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)  = &
     3399                                          tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     3400                CASE ( 'rad_lw_in' )
     3401                   IF ( .NOT. ALLOCATED( rad_lw_in ) )  THEN
     3402                      ALLOCATE( rad_lw_in(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     3403                   ENDIF 
     3404                   IF ( k == 1 )  READ ( 13 )  tmp_3d
     3405                   rad_lw_in(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
     3406                             tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     3407
     3408                CASE ( 'rad_lw_in_av' )
     3409                   IF ( .NOT. ALLOCATED( rad_lw_in_av ) )  THEN
     3410                      ALLOCATE( rad_lw_in_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     3411                   ENDIF 
     3412                   IF ( k == 1 )  READ ( 13 )  tmp_3d
     3413                   rad_lw_in_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
     3414                             tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     3415
     3416                CASE ( 'rad_lw_out' )
     3417                   IF ( .NOT. ALLOCATED( rad_lw_out ) )  THEN
     3418                      ALLOCATE( rad_lw_out(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     3419                   ENDIF 
     3420                   IF ( k == 1 )  READ ( 13 )  tmp_3d
     3421                   rad_lw_out(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
     3422                             tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     3423
     3424                CASE ( 'rad_lw_out_av' )
     3425                   IF ( .NOT. ALLOCATED( rad_lw_out_av ) )  THEN
     3426                      ALLOCATE( rad_lw_out_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     3427                   ENDIF 
     3428                   IF ( k == 1 )  READ ( 13 )  tmp_3d
     3429                   rad_lw_out_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
     3430                             tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     3431
     3432                CASE ( 'rad_lw_out_change_0' )
     3433                   IF ( .NOT. ALLOCATED( rad_lw_out_change_0 ) )  THEN
     3434                      ALLOCATE( rad_lw_out_change_0(nysg:nyng,nxlg:nxrg) )
     3435                   ENDIF
     3436                   IF ( k == 1 )  READ ( 13 )  tmp_2d
     3437                   rad_lw_out_change_0(nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp)&
     3438                              = tmp_2d(nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     3439
     3440                CASE ( 'rad_lw_cs_hr' )
     3441                   IF ( .NOT. ALLOCATED( rad_lw_cs_hr ) )  THEN
     3442                      ALLOCATE( rad_lw_cs_hr(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     3443                   ENDIF
     3444                   IF ( k == 1 )  READ ( 13 )  tmp_3d
     3445                   rad_lw_cs_hr(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
     3446                           tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     3447
     3448                CASE ( 'rad_lw_cs_hr_av' )
     3449                   IF ( .NOT. ALLOCATED( rad_lw_cs_hr_av ) )  THEN
     3450                      ALLOCATE( rad_lw_cs_hr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     3451                   ENDIF
     3452                   IF ( k == 1 )  READ ( 13 )  tmp_3d
     3453                   rad_lw_cs_hr_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
     3454                           tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     3455
     3456                CASE ( 'rad_lw_hr' )
     3457                   IF ( .NOT. ALLOCATED( rad_lw_hr ) )  THEN
     3458                      ALLOCATE( rad_lw_hr(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     3459                   ENDIF
     3460                   IF ( k == 1 )  READ ( 13 )  tmp_3d
     3461                   rad_lw_hr(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
     3462                           tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     3463
     3464                CASE ( 'rad_lw_hr_av' )
     3465                   IF ( .NOT. ALLOCATED( rad_lw_hr_av ) )  THEN
     3466                      ALLOCATE( rad_lw_hr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     3467                   ENDIF
     3468                   IF ( k == 1 )  READ ( 13 )  tmp_3d
     3469                   rad_lw_hr_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
     3470                           tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     3471
     3472                CASE ( 'rad_sw_in' )
     3473                   IF ( .NOT. ALLOCATED( rad_sw_in ) )  THEN
     3474                      ALLOCATE( rad_sw_in(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     3475                   ENDIF 
     3476                   IF ( k == 1 )  READ ( 13 )  tmp_3d
     3477                   rad_sw_in(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
     3478                             tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     3479
     3480                CASE ( 'rad_sw_in_av' )
     3481                   IF ( .NOT. ALLOCATED( rad_sw_in_av ) )  THEN
     3482                      ALLOCATE( rad_sw_in_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     3483                   ENDIF 
     3484                   IF ( k == 1 )  READ ( 13 )  tmp_3d
     3485                   rad_sw_in_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
     3486                             tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     3487
     3488                CASE ( 'rad_sw_out' )
     3489                   IF ( .NOT. ALLOCATED( rad_sw_out ) )  THEN
     3490                      ALLOCATE( rad_sw_out(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     3491                   ENDIF 
     3492                   IF ( k == 1 )  READ ( 13 )  tmp_3d
     3493                   rad_sw_out(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
     3494                             tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     3495
     3496                CASE ( 'rad_sw_out_av' )
     3497                   IF ( .NOT. ALLOCATED( rad_sw_out_av ) )  THEN
     3498                      ALLOCATE( rad_sw_out_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     3499                   ENDIF 
     3500                   IF ( k == 1 )  READ ( 13 )  tmp_3d
     3501                   rad_sw_out_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
     3502                             tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     3503
     3504                CASE ( 'rad_sw_cs_hr' )
     3505                   IF ( .NOT. ALLOCATED( rad_sw_cs_hr ) )  THEN
     3506                      ALLOCATE( rad_sw_cs_hr(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     3507                   ENDIF
     3508                   IF ( k == 1 )  READ ( 13 )  tmp_3d
     3509                   rad_sw_cs_hr(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
     3510                           tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     3511
     3512                CASE ( 'rad_sw_cs_hr_av' )
     3513                   IF ( .NOT. ALLOCATED( rad_sw_cs_hr_av ) )  THEN
     3514                      ALLOCATE( rad_sw_cs_hr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     3515                   ENDIF
     3516                   IF ( k == 1 )  READ ( 13 )  tmp_3d
     3517                   rad_sw_cs_hr_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
     3518                           tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     3519
     3520                CASE ( 'rad_sw_hr' )
     3521                   IF ( .NOT. ALLOCATED( rad_sw_hr ) )  THEN
     3522                      ALLOCATE( rad_sw_hr(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     3523                   ENDIF
     3524                   IF ( k == 1 )  READ ( 13 )  tmp_3d
     3525                   rad_sw_hr(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
     3526                           tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     3527
     3528                CASE ( 'rad_sw_hr_av' )
     3529                   IF ( .NOT. ALLOCATED( rad_sw_hr_av ) )  THEN
     3530                      ALLOCATE( rad_sw_hr_av(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
     3531                   ENDIF
     3532                   IF ( k == 1 )  READ ( 13 )  tmp_3d
     3533                   rad_lw_hr_av(:,nysc-nbgp:nync+nbgp,nxlc-nbgp:nxrc+nbgp) = &
     3534                           tmp_3d(:,nysf-nbgp:nynf+nbgp,nxlf-nbgp:nxrf+nbgp)
     3535
     3536               CASE DEFAULT
     3537                  WRITE( message_string, * ) 'unknown variable named "',       &
     3538                                        TRIM( field_char ), '" found in',      &
     3539                                        '&data from prior run on PE ', myid
     3540                  CALL message( 'radiation_read_restart_data', 'PA0441', 1, 2, 0, 6, &
     3541                                 0 )
     3542
     3543            END SELECT
     3544
     3545         ENDDO
     3546
     3547         READ ( 13 )  field_char
     3548
     3549      ENDDO
     3550   ENDIF
     3551
     3552 END SUBROUTINE radiation_read_restart_data
     3553
    22083554
    22093555 END MODULE radiation_model_mod
Note: See TracChangeset for help on using the changeset viewer.