[3908] | 1 | This directory contains the main part of the radiation scheme except |
---|
| 2 | for the calculation of gas optics. It is compiled into static library |
---|
| 3 | ../lib/libradiation.a and module files ../mod/radiation_*.mod. The |
---|
| 4 | coding conventions are described in the CONVENTIONS file. See the |
---|
| 5 | file ../driver/radiation_driver.f90 for an example of how the |
---|
| 6 | radiation scheme is called. The code is arranged as follows. |
---|
| 7 | |
---|
| 8 | The configuration information for the radiation scheme is stored in a |
---|
| 9 | "config" object (type defined in *radiation_config.f90*). After this |
---|
| 10 | has been populated depending on how the radiation scheme is to be |
---|
| 11 | configured, the subroutine "setup_radiation" in |
---|
| 12 | *radiation_interface.f90* is called. This sets up the gas, cloud and |
---|
| 13 | aerosol optics, all of which involve reading data from NetCDF files. |
---|
| 14 | The cloud and aerosol optics data are described in |
---|
| 15 | *radiation_aerosol_optics_data.f90* and |
---|
| 16 | *radiation_cloud_optics_data.f90*. |
---|
| 17 | |
---|
| 18 | The main interface to the radiation scheme is via the "radiation" |
---|
| 19 | subroutine in radiation_interface.f90, which takes six objects as |
---|
| 20 | input (noting that multiple columns are processed at once): |
---|
| 21 | |
---|
| 22 | single_level - all single-level fields such as skin temperature and |
---|
| 23 | surface albedo (type defined in *radiation_single_level.f90*) |
---|
| 24 | |
---|
| 25 | thermodynamics - pressure and temperature (type defined in |
---|
| 26 | *radiation_thermodynamics.f90*) |
---|
| 27 | |
---|
| 28 | gas - mixing ratios of gases (type defined in *radiation_gas.f90*) |
---|
| 29 | |
---|
| 30 | cloud - cloud fraction, water content and other information (type |
---|
| 31 | defined in *radiation_cloud.f90*) |
---|
| 32 | |
---|
| 33 | aerosol - mixing ratios of different aerosol species (type defined |
---|
| 34 | in *radiation_aerosol.f90*) |
---|
| 35 | |
---|
| 36 | The output is stored in the following object: |
---|
| 37 | |
---|
| 38 | flux - upwelling and downwelling shortwave and longwave fluxes (type |
---|
| 39 | defined in *radiation_flux.f90*) |
---|
| 40 | |
---|
| 41 | The "radiation" subroutine first computes the gas optical properties |
---|
| 42 | (in the form of 3D arrays of dimension column, height and spectral |
---|
| 43 | g-point), via a call to the "gas_optics" subroutine in |
---|
| 44 | *radiation_ifsrrtm.f90*, which provides an interface to the IFS |
---|
| 45 | implementation of the RRTM-G gas optics model in the ../ifsrrtm |
---|
| 46 | directory. For testing, a simple monochromatic gas model is also |
---|
| 47 | provided in *radiation_monochromatic.f90*. |
---|
| 48 | |
---|
| 49 | To these fields are added the contribution from aerosols via a call to |
---|
| 50 | the "aerosol_optics" subroutine, from *radiation_aerosol_optics.f90*. |
---|
| 51 | |
---|
| 52 | Cloud optical properties are computed (in the form of 3D arrays of |
---|
| 53 | dimension column, height and spectral band), via a call to the |
---|
| 54 | "cloud_optics" subroutine in *radiation_cloud_optics.f90*. |
---|
| 55 | |
---|
| 56 | The optical properties may then be saved to an intermediate NetCDF |
---|
| 57 | file via a routine in *radiation_save.f90*. |
---|
| 58 | |
---|
| 59 | Finally, the optics data are passed to the solver, which computes the |
---|
| 60 | flux profiles. Currently McICA nad SPARTACUS solvers are |
---|
| 61 | available. In the case of SPARTACUS, the longwave and shortwave |
---|
| 62 | versions are in *radiation_spartacus_lw.f90* and |
---|
| 63 | *radiation_spartacus_sw.f90*, respectively. These make use of |
---|
| 64 | routines in the following files: |
---|
| 65 | |
---|
| 66 | *radiation_two_stream.f90* - compute two-stream coefficients |
---|
| 67 | |
---|
| 68 | *radiation_matrix.f90* - matrix operations needed by SPARTACUS |
---|
| 69 | |
---|
| 70 | *radiation_overlap.f90* - compute cloud overlap matrices. |
---|
| 71 | |
---|
| 72 | Physical constants are provided in *radiation_constants.f90*. |
---|