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*. |
---|