[3880] | 1 | MODULE RADIATION_SETUP |
---|
| 2 | |
---|
| 3 | ! RADIATION_SETUP - Setting up modular radiation scheme |
---|
| 4 | ! |
---|
| 5 | ! (C) Copyright 2015- ECMWF. |
---|
| 6 | ! |
---|
| 7 | ! This software is licensed under the terms of the Apache Licence Version 2.0 |
---|
| 8 | ! which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. |
---|
| 9 | ! |
---|
| 10 | ! In applying this licence, ECMWF does not waive the privileges and immunities |
---|
| 11 | ! granted to it by virtue of its status as an intergovernmental organisation |
---|
| 12 | ! nor does it submit to any jurisdiction. |
---|
| 13 | ! |
---|
| 14 | ! PURPOSE |
---|
| 15 | ! ------- |
---|
| 16 | ! The modular radiation scheme is contained in a separate |
---|
| 17 | ! library. SETUP_RADIATION_SCHEME in this module sets up a small |
---|
| 18 | ! number of global variables needed to store the information for it. |
---|
| 19 | ! |
---|
| 20 | ! Lower case is used for variables and types taken from the |
---|
| 21 | ! radiation library |
---|
| 22 | ! |
---|
| 23 | ! INTERFACE |
---|
| 24 | ! --------- |
---|
| 25 | ! SETUP_RADIATION_SCHEME is called from SUECRAD. The radiation |
---|
| 26 | ! scheme is actually run using the RADIATION_SCHEME routine (not in |
---|
| 27 | ! this module). |
---|
| 28 | ! |
---|
| 29 | ! AUTHOR |
---|
| 30 | ! ------ |
---|
| 31 | ! Robin Hogan, ECMWF |
---|
| 32 | ! Original: 2015-09-16 |
---|
| 33 | ! |
---|
| 34 | ! MODIFICATIONS |
---|
| 35 | ! ------------- |
---|
| 36 | ! |
---|
| 37 | !----------------------------------------------------------------------- |
---|
| 38 | |
---|
| 39 | USE PARKIND1, ONLY : JPRB |
---|
| 40 | USE radiation_config, ONLY : config_type, & |
---|
| 41 | & ISolverMcICA, ISolverSpartacus, & |
---|
| 42 | & ILiquidModelSlingo, ILiquidModelSOCRATES, & |
---|
| 43 | & IIceModelFu, IIceModelBaran, & |
---|
| 44 | & IOverlapExponentialRandom |
---|
| 45 | |
---|
| 46 | IMPLICIT NONE |
---|
| 47 | |
---|
| 48 | ! Store configuration information for the radiation scheme in a |
---|
| 49 | ! global variable |
---|
| 50 | type(config_type) :: rad_config |
---|
| 51 | |
---|
| 52 | ! Ultraviolet weightings |
---|
| 53 | INTEGER :: NWEIGHT_UV |
---|
| 54 | INTEGER :: IBAND_UV(100) |
---|
| 55 | REAL(KIND=JPRB) :: WEIGHT_UV(100) |
---|
| 56 | ! Photosynthetically active radiation weightings |
---|
| 57 | INTEGER :: NWEIGHT_PAR |
---|
| 58 | INTEGER :: IBAND_PAR(100) |
---|
| 59 | REAL(KIND=JPRB) :: WEIGHT_PAR(100) |
---|
| 60 | |
---|
| 61 | ! Background aerosol is specified in an ugly way: using the old |
---|
| 62 | ! Tegen fields that are in terms of optical depth, and converted to |
---|
| 63 | ! mass mixing ratio via the relevant mass-extinction coefficient |
---|
| 64 | INTEGER, PARAMETER :: ITYPE_TROP_BG_AER = 8 ! hydrophobic organic |
---|
| 65 | INTEGER, PARAMETER :: ITYPE_STRAT_BG_AER=12 ! non-absorbing sulphate |
---|
| 66 | REAL(KIND=JPRB) :: TROP_BG_AER_MASS_EXT |
---|
| 67 | REAL(KIND=JPRB) :: STRAT_BG_AER_MASS_EXT |
---|
| 68 | |
---|
| 69 | CONTAINS |
---|
| 70 | |
---|
| 71 | ! This routine copies information between the IFS radiation |
---|
| 72 | ! configuration (stored in global variables) and the radiation |
---|
| 73 | ! configuration of the modular radiation scheme (stored in |
---|
| 74 | ! rad_config). The optional input logical LOUTPUT controls whether |
---|
| 75 | ! to print lots of information during the setup stage (default is |
---|
| 76 | ! no). |
---|
| 77 | SUBROUTINE SETUP_RADIATION_SCHEME(LOUTPUT) |
---|
| 78 | |
---|
| 79 | USE YOMHOOK, ONLY : LHOOK, DR_HOOK |
---|
| 80 | ! USE YOMLUN, ONLY : NULNAM, NULOUT, NULERR |
---|
| 81 | USE YOMLUN, ONLY : NULOUT, NULERR |
---|
| 82 | USE YOESRTWN, ONLY : NMPSRTM |
---|
| 83 | ! AI ATTENTION |
---|
| 84 | ! USE YOERAD, ONLY : YRERAD |
---|
| 85 | |
---|
| 86 | USE radiation_interface, ONLY : setup_radiation |
---|
| 87 | USE radiation_aerosol_optics, ONLY : dry_aerosol_sw_mass_extinction |
---|
| 88 | |
---|
| 89 | !#include "posname.intfb.h" |
---|
| 90 | |
---|
| 91 | ! Whether or not to provide information on the radiation scheme |
---|
| 92 | ! configuration |
---|
| 93 | LOGICAL, INTENT(IN), OPTIONAL :: LOUTPUT |
---|
| 94 | |
---|
| 95 | ! Verbosity of configuration information 0=none, 1=warning, |
---|
| 96 | ! 2=info, 3=progress, 4=detailed, 5=debug |
---|
| 97 | INTEGER :: IVERBOSESETUP |
---|
| 98 | INTEGER :: ISTAT |
---|
| 99 | |
---|
| 100 | REAL(KIND=JPRB) :: ZHOOK_HANDLE |
---|
| 101 | |
---|
| 102 | character(len=512) :: file_name |
---|
| 103 | |
---|
| 104 | logical :: lprint_setp=.TRUE. |
---|
| 105 | |
---|
| 106 | IF (LHOOK) CALL DR_HOOK('RADIATION_SETUP:SETUP_RADIATION_SCHEME',0,ZHOOK_HANDLE) |
---|
| 107 | |
---|
| 108 | ! *** GENERAL SETUP *** |
---|
| 109 | |
---|
| 110 | ! Configure verbosity of setup of radiation scheme |
---|
| 111 | |
---|
| 112 | print*,'********** Dans radiation_setup *****************' |
---|
| 113 | |
---|
| 114 | IVERBOSESETUP = 4 ! Provide plenty of information |
---|
| 115 | IF (PRESENT(LOUTPUT)) THEN |
---|
| 116 | IF (.NOT. LOUTPUT) THEN |
---|
| 117 | IVERBOSESETUP = 1 ! Warnings and errors only |
---|
| 118 | ENDIF |
---|
| 119 | ENDIF |
---|
| 120 | rad_config%iverbosesetup = IVERBOSESETUP |
---|
| 121 | if (lprint_setp) then |
---|
| 122 | print*,'Dans radiation_setup ' |
---|
| 123 | print*,'rad_config%iverbosesetup =', rad_config%iverbosesetup |
---|
| 124 | endif |
---|
| 125 | |
---|
| 126 | IF (IVERBOSESETUP > 1) THEN |
---|
| 127 | WRITE(NULOUT,'(a)') '-------------------------------------------------------------------------------' |
---|
| 128 | WRITE(NULOUT,'(a)') 'RADIATION_SETUP' |
---|
| 129 | ENDIF |
---|
| 130 | |
---|
| 131 | ! Normal operation of the radiation scheme displays only errors |
---|
| 132 | ! and warnings |
---|
| 133 | rad_config%iverbose = 5 |
---|
| 134 | if (lprint_setp) then |
---|
| 135 | print*,'rad_config%iverbose =', rad_config%iverbose |
---|
| 136 | endif |
---|
| 137 | ! For the time being, ensure a valid default directory name |
---|
| 138 | rad_config%directory_name = '/d3/idelkadi/Ecrad/data' |
---|
| 139 | if (lprint_setp) then |
---|
| 140 | print*,'rad_config%directory_name =', rad_config%directory_name |
---|
| 141 | endif |
---|
| 142 | |
---|
| 143 | ! Do we do Hogan and Bozzo (2014) approximate longwave updates? |
---|
| 144 | ! AI ATTENTION (ifs : ) |
---|
| 145 | ! rad_config%do_lw_derivatives = YRERAD%LAPPROXLWUPDATE |
---|
| 146 | rad_config%do_lw_derivatives = .false. |
---|
| 147 | if (lprint_setp) then |
---|
| 148 | print*,'rad_config%do_lw_derivatives =', rad_config%do_lw_derivatives |
---|
| 149 | endif |
---|
| 150 | |
---|
| 151 | ! Surface spectral fluxes are needed for spectral shortwave albedo |
---|
| 152 | ! calculation |
---|
| 153 | ! AI ATTENTION test (ifs : T) |
---|
| 154 | ! rad_config%do_save_spectral_flux = .FALSE. |
---|
| 155 | rad_config%do_surface_sw_spectral_flux = .TRUE. |
---|
| 156 | if (lprint_setp) then |
---|
| 157 | print*,'rad_config%do_surface_sw_spectral_flux =', & |
---|
| 158 | rad_config%do_surface_sw_spectral_flux |
---|
| 159 | endif |
---|
| 160 | |
---|
| 161 | ! *** SETUP GAS OPTICS *** |
---|
| 162 | |
---|
| 163 | ! Assume IFS has already set-up RRTM, so the setup_radiation |
---|
| 164 | ! routine below does not have to (ifs : F) |
---|
| 165 | print*,'i_gas_model =',rad_config%i_gas_model |
---|
| 166 | rad_config%do_setup_ifsrrtm = .TRUE. |
---|
| 167 | if (lprint_setp) then |
---|
| 168 | print*,'rad_config%do_setup_ifsrrtm =', rad_config%do_setup_ifsrrtm |
---|
| 169 | endif |
---|
| 170 | |
---|
| 171 | ! *** SETUP CLOUD OPTICS *** |
---|
| 172 | |
---|
| 173 | ! Setup liquid optics |
---|
| 174 | ! AI ATTENTION |
---|
| 175 | ! Choix offline : liquid_model_name = "SOCRATES" |
---|
| 176 | ! IF (YRERAD%NLIQOPT == 2) THEN |
---|
| 177 | ! rad_config%i_liq_model = ILiquidModelSlingo |
---|
| 178 | ! ELSEIF (YRERAD%NLIQOPT == 3) THEN |
---|
| 179 | rad_config%i_liq_model = ILiquidModelSOCRATES |
---|
| 180 | if (lprint_setp) then |
---|
| 181 | print*,'rad_config%i_liq_model =',rad_config%i_liq_model |
---|
| 182 | endif |
---|
| 183 | |
---|
| 184 | ! ELSE |
---|
| 185 | ! WRITE(NULERR,'(a,i0)') 'Unavailable liquid optics model in modular radiation scheme: NLIQOPT=', & |
---|
| 186 | ! & YRERAD%NLIQOPT |
---|
| 187 | ! CALL ABOR1('RADIATION_SETUP: error interpreting NLIQOPT') |
---|
| 188 | ! ENDIF |
---|
| 189 | |
---|
| 190 | ! Setup ice optics |
---|
| 191 | ! Choix offline : ice_model_name = "Fu-IFS" |
---|
| 192 | ! IF (YRERAD%NICEOPT == 3) THEN |
---|
| 193 | rad_config%i_ice_model = IIceModelFu |
---|
| 194 | if (lprint_setp) then |
---|
| 195 | print*,'rad_config%i_ice_model =', rad_config%i_ice_model |
---|
| 196 | endif |
---|
| 197 | ! ELSEIF (YRERAD%NICEOPT == 4) THEN |
---|
| 198 | ! rad_config%i_ice_model = IIceModelBaran |
---|
| 199 | ! ELSE |
---|
| 200 | ! WRITE(NULERR,'(a,i0)') 'Unavailable ice optics model in modular radiation scheme: NICEOPT=', & |
---|
| 201 | ! & YRERAD%NICEOPT |
---|
| 202 | ! CALL ABOR1('RADIATION_SETUP: error interpreting NICEOPT') |
---|
| 203 | ! ENDIF |
---|
| 204 | |
---|
| 205 | ! For consistency with earlier versions of the IFS radiation |
---|
| 206 | ! scheme, we perform shortwave delta-Eddington scaling *after* the |
---|
| 207 | ! merge of the cloud, aerosol and gas optical properties. Set |
---|
| 208 | ! this to "false" to do the scaling on the cloud and aerosol |
---|
| 209 | ! properties separately before merging with gases. Note that this |
---|
| 210 | ! is not compatible with the SPARTACUS solver. |
---|
| 211 | rad_config%do_sw_delta_scaling_with_gases = .FALSE. |
---|
| 212 | if (lprint_setp) then |
---|
| 213 | print*,'rad_config%do_sw_delta_scaling_with_gases =', & |
---|
| 214 | rad_config%do_sw_delta_scaling_with_gases |
---|
| 215 | endif |
---|
| 216 | |
---|
| 217 | ! Use Exponential-Exponential cloud overlap to match original IFS |
---|
| 218 | ! implementation of Raisanen cloud generator |
---|
| 219 | rad_config%i_overlap_scheme = IOverlapExponentialRandom |
---|
| 220 | if (lprint_setp) then |
---|
| 221 | print*,'rad_config%i_overlap_scheme =', rad_config%i_overlap_scheme |
---|
| 222 | endif |
---|
| 223 | |
---|
| 224 | ! *** SETUP AEROSOLS *** |
---|
| 225 | ! AI ATTENTION |
---|
| 226 | ! rad_config%use_aerosols = .TRUE. !(ifs) |
---|
| 227 | rad_config%use_aerosols = .FALSE. |
---|
| 228 | if (lprint_setp) then |
---|
| 229 | print*,'rad_config%use_aerosols =', rad_config%use_aerosols |
---|
| 230 | endif |
---|
| 231 | |
---|
| 232 | ! IF (YRERAD%NAERMACC > 0) THEN |
---|
| 233 | ! Using MACC climatology - in this case the aerosol optics file |
---|
| 234 | ! will be chosen automatically |
---|
| 235 | |
---|
| 236 | ! 12 IFS aerosol classes: 1-3 Sea salt, 4-6 Boucher desert dust, |
---|
| 237 | ! 7 hydrophilic organics, 8 hydrophobic organics, 9&10 |
---|
| 238 | ! hydrophobic black carbon, 11 ammonium sulphate, 12 inactive |
---|
| 239 | ! SO2 |
---|
| 240 | rad_config%n_aerosol_types = 12 |
---|
| 241 | if (lprint_setp) then |
---|
| 242 | print*,'rad_config%n_aerosol_types =', rad_config%n_aerosol_types |
---|
| 243 | endif |
---|
| 244 | |
---|
| 245 | ! Indices to the aerosol optical properties in |
---|
| 246 | ! aerosol_ifs_rrtm_*.nc, for each class, where negative numbers |
---|
| 247 | ! index hydrophilic aerosol types and positive numbers index |
---|
| 248 | ! hydrophobic aerosol types |
---|
| 249 | rad_config%i_aerosol_type_map = 0 ! There can be up to 256 types |
---|
| 250 | ! if (lprint_setp) then |
---|
| 251 | ! print*,'rad_config%i_aerosol_type_map =', rad_config%i_aerosol_type_map |
---|
| 252 | ! endif |
---|
| 253 | |
---|
| 254 | rad_config%i_aerosol_type_map(1:12) = (/ & |
---|
| 255 | & -1, & ! Sea salt, size bin 1 (OPAC) |
---|
| 256 | & -2, & ! Sea salt, size bin 2 (OPAC) |
---|
| 257 | & -3, & ! Sea salt, size bin 3 (OPAC) |
---|
| 258 | & 7, & ! Desert dust, size bin 1 (Woodward 2001) |
---|
| 259 | & 8, & ! Desert dust, size bin 2 (Woodward 2001) |
---|
| 260 | & 9, & ! Desert dust, size bin 3 (Woodward 2001) |
---|
| 261 | & -4, & ! Hydrophilic organic matter (OPAC) |
---|
| 262 | & 10, & ! Hydrophobic organic matter (OPAC) |
---|
| 263 | & 11, & ! Black carbon (Boucher) |
---|
| 264 | & 11, & ! Black carbon (Boucher) |
---|
| 265 | & -5, & ! Ammonium sulphate (OPAC) |
---|
| 266 | & 14 /) ! Stratospheric sulphate (hand edited from OPAC) |
---|
| 267 | ! if (lprint_setp) then |
---|
| 268 | ! print*,'rad_config%i_aerosol_type_map =', rad_config%i_aerosol_type_map |
---|
| 269 | ! endif |
---|
| 270 | |
---|
| 271 | ! Background aerosol mass-extinction coefficients are obtained |
---|
| 272 | ! after the configuration files have been read - see later in |
---|
| 273 | ! this routine. |
---|
| 274 | |
---|
| 275 | ! ELSE |
---|
| 276 | ! Using Tegen climatology |
---|
| 277 | ! rad_config%n_aerosol_types = 6 |
---|
| 278 | ! rad_config%i_aerosol_type_map = 0 ! There can be up to 256 types |
---|
| 279 | ! rad_config%i_aerosol_type_map(1:6) = (/ & |
---|
| 280 | ! & 1, & ! Continental background |
---|
| 281 | ! & 2, & ! Maritime |
---|
| 282 | ! & 3, & ! Desert |
---|
| 283 | ! & 4, & ! Urban |
---|
| 284 | ! & 5, & ! Volcanic active |
---|
| 285 | ! & 6 /) ! Stratospheric background |
---|
| 286 | |
---|
| 287 | ! Manually set the aerosol optics file name (the directory will |
---|
| 288 | ! be added automatically) |
---|
| 289 | ! rad_config%aerosol_optics_override_file_name = 'aerosol_ifs_rrtm_tegen.nc' |
---|
| 290 | ! ENDIF |
---|
| 291 | |
---|
| 292 | ! *** SETUP SOLVER *** |
---|
| 293 | |
---|
| 294 | ! 3D effects are off by default (ifs) |
---|
| 295 | rad_config%do_3d_effects = .TRUE. |
---|
| 296 | if (lprint_setp) then |
---|
| 297 | print*,'rad_config%do_3d_effects=', rad_config%do_3d_effects |
---|
| 298 | endif |
---|
| 299 | |
---|
| 300 | ! Select longwave solver |
---|
| 301 | ! AI ATTENTION |
---|
| 302 | ! SELECT CASE (YRERAD%NLWSOLVER) |
---|
| 303 | ! CASE(0) |
---|
| 304 | ! rad_config%i_solver_lw = ISolverMcICA |
---|
| 305 | ! CASE(1) |
---|
| 306 | rad_config%i_solver_lw = ISolverSpartacus |
---|
| 307 | if (lprint_setp) then |
---|
| 308 | print*,'rad_config%i_solver_lw =', rad_config%i_solver_lw |
---|
| 309 | endif |
---|
| 310 | |
---|
| 311 | ! CASE(2) |
---|
| 312 | ! rad_config%i_solver_lw = ISolverSpartacus |
---|
| 313 | ! rad_config%do_3d_effects = .TRUE. |
---|
| 314 | ! CASE DEFAULT |
---|
| 315 | ! WRITE(NULERR,'(a,i0)') 'Unknown value for NLWSOLVER: ', YRERAD%NLWSOLVER |
---|
| 316 | ! CALL ABOR1('RADIATION_SETUP: error interpreting NLWSOLVER') |
---|
| 317 | ! END SELECT |
---|
| 318 | |
---|
| 319 | ! Select shortwave solver |
---|
| 320 | ! SELECT CASE (YRERAD%NSWSOLVER) |
---|
| 321 | ! CASE(0) |
---|
| 322 | ! rad_config%i_solver_sw = ISolverMcICA |
---|
| 323 | ! CASE(1) |
---|
| 324 | rad_config%i_solver_sw = ISolverSpartacus |
---|
| 325 | if (lprint_setp) then |
---|
| 326 | print*,'rad_config%i_solver_sw =', rad_config%i_solver_sw |
---|
| 327 | endif |
---|
| 328 | |
---|
| 329 | ! rad_config%do_3d_effects = .FALSE. |
---|
| 330 | ! IF (YRERAD%NLWSOLVER == 2) THEN |
---|
| 331 | ! CALL ABOR1('RADIATION_SETUP: cannot represent 3D effects in LW but not SW') |
---|
| 332 | ! ENDIF |
---|
| 333 | ! CASE(2) |
---|
| 334 | ! rad_config%i_solver_sw = ISolverSpartacus |
---|
| 335 | ! rad_config%do_3d_effects = .TRUE. |
---|
| 336 | ! IF (YRERAD%NLWSOLVER == 1) THEN |
---|
| 337 | ! CALL ABOR1('RADIATION_SETUP: cannot represent 3D effects in SW but not LW') |
---|
| 338 | ! ENDIF |
---|
| 339 | ! CASE DEFAULT |
---|
| 340 | ! WRITE(NULERR,'(a,i0)') 'Unknown value for NSWSOLVER: ', YRERAD%NSWSOLVER |
---|
| 341 | ! CALL ABOR1('RADIATION_SETUP: error interpreting NSWSOLVER') |
---|
| 342 | ! END SELECT |
---|
| 343 | |
---|
| 344 | ! SPARTACUS solver requires delta scaling to be done separately |
---|
| 345 | ! for clouds & aerosols |
---|
| 346 | IF (rad_config%i_solver_sw == ISolverSpartacus) THEN |
---|
| 347 | rad_config%do_sw_delta_scaling_with_gases = .FALSE. |
---|
| 348 | ENDIF |
---|
| 349 | |
---|
| 350 | ! Do we represent longwave scattering? |
---|
| 351 | rad_config%do_lw_cloud_scattering = .TRUE. |
---|
| 352 | rad_config%do_lw_aerosol_scattering = .TRUE. |
---|
| 353 | if (lprint_setp) then |
---|
| 354 | print*,'rad_config%do_lw_cloud_scattering =', & |
---|
| 355 | rad_config%do_lw_cloud_scattering |
---|
| 356 | print*,'rad_config%do_lw_aerosol_scattering =', & |
---|
| 357 | rad_config%do_lw_aerosol_scattering |
---|
| 358 | endif |
---|
| 359 | |
---|
| 360 | ! SELECT CASE (YRERAD%NLWSCATTERING) |
---|
| 361 | ! CASE(1) |
---|
| 362 | ! rad_config%do_lw_cloud_scattering = .TRUE. |
---|
| 363 | ! CASE(2) |
---|
| 364 | ! rad_config%do_lw_cloud_scattering = .TRUE. |
---|
| 365 | ! IF (YRERAD%NAERMACC > 0) THEN |
---|
| 366 | ! Tegen climatology omits data required to do longwave |
---|
| 367 | ! scattering by aerosols, so only turn this on with a more |
---|
| 368 | ! recent scattering database |
---|
| 369 | ! ENDIF |
---|
| 370 | ! END SELECT |
---|
| 371 | |
---|
| 372 | |
---|
| 373 | ! *** IMPLEMENT SETTINGS *** |
---|
| 374 | |
---|
| 375 | ! For advanced configuration, the configuration data for the |
---|
| 376 | ! "radiation" project can specified directly in the namelist. |
---|
| 377 | ! However, the variable naming convention is not consistent with |
---|
| 378 | ! the rest of the IFS. For basic configuration there are specific |
---|
| 379 | ! variables in the NAERAD namelist available in the YRERAD |
---|
| 380 | ! structure. |
---|
| 381 | ! CALL POSNAME(NULNAM, 'RADIATION', ISTAT) |
---|
| 382 | ! SELECT CASE (ISTAT) |
---|
| 383 | ! CASE(0) |
---|
| 384 | ! CALL rad_config%read(unit=NULNAM) |
---|
| 385 | ! CASE(1) |
---|
| 386 | ! WRITE(NULOUT,'(a)') 'Namelist RADIATION not found, using settings from NAERAD only' |
---|
| 387 | ! CASE DEFAULT |
---|
| 388 | ! CALL ABOR1('RADIATION_SETUP: error reading RADIATION section of namelist file') |
---|
| 389 | ! END SELECT |
---|
| 390 | |
---|
| 391 | ! AI ATTENTION test |
---|
| 392 | file_name="namelist_ecrad" |
---|
| 393 | call rad_config%read(file_name=file_name) |
---|
| 394 | |
---|
| 395 | ! Print configuration |
---|
| 396 | ! IF (IVERBOSESETUP > 1) THEN |
---|
| 397 | ! WRITE(NULOUT,'(a)') 'Radiation scheme settings:' |
---|
| 398 | ! CALL rad_config%print(IVERBOSE=IVERBOSESETUP) |
---|
| 399 | ! ENDIF |
---|
| 400 | |
---|
| 401 | ! Use configuration data to set-up radiation scheme, including |
---|
| 402 | ! reading scattering datafiles |
---|
| 403 | CALL setup_radiation(rad_config) |
---|
| 404 | |
---|
| 405 | ! Populate the mapping between the 14 RRTM shortwave bands and the |
---|
| 406 | ! 6 albedo inputs. The mapping according to the stated wavelength |
---|
| 407 | ! ranges of the 6-band model does not match the hard-wired mapping |
---|
| 408 | ! in NMPSRTM, but only the hard-wired values produce sensible |
---|
| 409 | ! results... |
---|
| 410 | ! Note that NMPSRTM(:)=(/ 6, 6, 5, 5, 5, 5, 5, 4, 4, 3, 2, 2, 1, 6 /) |
---|
| 411 | ! AI |
---|
| 412 | !! NMPSRTM(:)=(/ 6, 6, 5, 5, 5, 5, 5, 4, 4, 3, 2, 2, 1, 6 /) |
---|
| 413 | !! rad_config%i_albedo_from_band_sw = NMPSRTM |
---|
| 414 | !call rad_config%define_sw_albedo_intervals(6, & |
---|
| 415 | ! & (/ 0.25e-6_jprb, 0.44e-6_jprb, 1.19e-6_jprb, & |
---|
| 416 | ! & 2.38e-6_jprb, 4.00e-6_jprb /), (/ 1,2,3,4,5,6 /)) |
---|
| 417 | |
---|
| 418 | ! Likewise between the 16 RRTM longwave bands and the 2 emissivity |
---|
| 419 | ! inputs (info taken from rrtm_ecrt_140gp_mcica.F90) representing |
---|
| 420 | ! outside and inside the window region of the spectrum |
---|
| 421 | ! rad_config%i_emiss_from_band_lw = (/ 1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,1 /) |
---|
| 422 | ! AI |
---|
| 423 | !! call rad_config%define_lw_emiss_intervals(3, & |
---|
| 424 | !! & (/ 8.0e-6_jprb,13.0e-6_jprb /), (/ 1,2,1 /)) |
---|
| 425 | |
---|
| 426 | ! ! Get spectral weightings for UV and PAR |
---|
| 427 | !! call rad_config%get_sw_weights(0.2e-6_jprb, 0.4415e-6_jprb, & |
---|
| 428 | !! & NWEIGHT_UV, IBAND_UV, WEIGHT_UV, 'ultraviolet') |
---|
| 429 | !! call rad_config%get_sw_weights(0.4e-6_jprb, 0.7e-6_jprb, & |
---|
| 430 | !! & NWEIGHT_PAR, IBAND_PAR, WEIGHT_PAR, & |
---|
| 431 | !! & 'photosynthetically active radiation, PAR') |
---|
| 432 | |
---|
| 433 | ! IF (YRERAD%NAERMACC > 0) THEN |
---|
| 434 | ! With the MACC aerosol climatology we need to add in the |
---|
| 435 | ! background aerosol afterwards using the Tegen arrays. In this |
---|
| 436 | ! case we first configure the background aerosol mass-extinction |
---|
| 437 | ! coefficient at 550 nm, which corresponds to the 10th RRTMG |
---|
| 438 | ! shortwave band. |
---|
| 439 | ! TROP_BG_AER_MASS_EXT = dry_aerosol_sw_mass_extinction(rad_config, & |
---|
| 440 | ! & ITYPE_TROP_BG_AER, 10) |
---|
| 441 | ! STRAT_BG_AER_MASS_EXT = dry_aerosol_sw_mass_extinction(rad_config, & |
---|
| 442 | ! & ITYPE_STRAT_BG_AER, 10) |
---|
| 443 | |
---|
| 444 | ! WRITE(NULOUT,'(a,i0)') 'Tropospheric bacground uses aerosol type ', & |
---|
| 445 | ! & ITYPE_TROP_BG_AER |
---|
| 446 | ! WRITE(NULOUT,'(a,i0)') 'Stratospheric bacground uses aerosol type ', & |
---|
| 447 | ! & ITYPE_STRAT_BG_AER |
---|
| 448 | ! ENDIF |
---|
| 449 | |
---|
| 450 | IF (IVERBOSESETUP > 1) THEN |
---|
| 451 | WRITE(NULOUT,'(a)') '-------------------------------------------------------------------------------' |
---|
| 452 | ENDIF |
---|
| 453 | |
---|
| 454 | IF (LHOOK) CALL DR_HOOK('RADIATION_SETUP:SETUP_RADIATION_SCHEME',1,ZHOOK_HANDLE) |
---|
| 455 | |
---|
| 456 | END SUBROUTINE SETUP_RADIATION_SCHEME |
---|
| 457 | |
---|
| 458 | END MODULE RADIATION_SETUP |
---|