Frequently Asked Questions
- 1 Do I need to bother to upgrade my version of RTTOV v11.3 to RTTOV v12?
- 2 Can I compile the code in single precision to save space?
- 3 I don’t have an O3, CO2, CO, N2O, CH4 or SO2 profile to include in the state vector. What can I do?
- 4 My profile top is below the top level required by RTTOV (usually 0.005hPa), how do I best extrapolate it?
- 5 Why does compilation with the HDF5 library fail?
- 6 Why do some of the tests fail when I compile with certain compilers (e.g. ifort)?
- 7 Why do I get run-time errors with the Python wrapper or GUI when using conda?
Do I need to bother to upgrade my version of RTTOV v11.3 to RTTOV v12?
If you want any of the following the answer is yes (if you have an earlier version of RTTOV there are more reasons):
- New Discrete Ordinates Method multiple-scattering simulations for visible/IR sensors
- New MFASIS fast cloud multiple-scattering simulations for visible sensor channels (v12.2, improved in v12.3)
- New liquid water cloud particle optical properties with explicit Deff dependence for visible/IR scattering simulations (v12.2)
- Updated ice cloud particle optical properties for visible/IR scattering simulations (v12.1, v12.3)
- Option to supply cloud and aerosol profiles in units of kg/kg for visible/IR scattering simulations
- New aerosol optical properties based on CAMS species (v12.2)
- Tool for generating custom aerosol optical property files for use with RTTOV (v12.3)
- Capability to perform simulations with variable SO2 profiles
- New subroutine which makes it simple to populate the profile structure with scaled versions of the background (reference) trace gas profiles (v12.3)
- New options for the permittivity parameterisation for MW cloud liquid water absorption (v12.2)
- New option to carry out RTTOV-SCATT calculations in radiance instead of brightness temperature (v12.2)
- New optional output structure from RTTOV-SCATT containing information to allow dynamic surface emissivity retrieval (v12.2)
- New OpenMP parallel interface to RTTOV-SCATT (v12.2)
- Improved non-local thermodynamic equilibrium (NLTE) correction
- Capability to perform Principal Components calculations which include the NLTE correction, and from v12.2 with additional trace gases or aerosols
- New interface to HTFRTC PC-based fast model for hyperspectral IR sounders (v12.2, additional capabilities added in v12.3)
- New options related to Lambertian surface option (v12.3)
- Improved solar sea surface BRDF model (v12.2)
- New MW sea-surface emissivity model TESSEM2 intended for use with MetopSG ICI
- New physically-based IR sea-surface emissivity model
- Updated MW land surface emissivity atlases (TELSEM2 atlas and interpolator and the CNRM MW atlas)
- New CAMEL IR land surface emissivity atlas
- New CAMEL emissivity atlas based on 2000-2016 climatology (v12.3)
- Improved interface to land surface emissivity atlases (simultaneously use data from any/all atlases for all months and instruments)
- Python/C++ wrapper now provides the capability to run direct and K model simulations for all RTTOV clear-sky and scattering options (visible/IR/MW) and as of v12.2 is Python2/3 compatible
Can I compile the code in single precision to save space?
The RTTOV real, integer and logical “kind” values are defined in the src/main/parkind1.F90 module. However editing this module is not recommended (and hence not supported) and in particular running the AD/K models in single precision can result in significant errors in the output.
I don’t have an O3, CO2, CO, N2O, CH4 or SO2 profile to include in the state vector. What can I do?
You can use a coefficient file which includes the relevant gas or gases in the mixed gases. If you use a a coefficient file which allows the relevant gases to vary you do not have to provide profiles of these trace gases: if omitted RTTOV will use the reference (background) profile from the coefficient file. You must take care to set the logical flags for example opts%rt_ir%co_data etc to false if you don’t have a CO profile, otherwise RTTOV assumes you are providing a valid profile and will fail if you do not.
As of RTTOV v12.3 you can use the rttov_scale_ref_gas_prof subroutine to populate your profiles structures with scaled copies of the reference profiles. This can be useful, for example, if you wish to use a lower CO2 concentration than the RTTOV reference profile (~400ppm), but you do not have a full atmospheric profile: this subroutine makes it simple to populate your profiles structures with scaled copies of the reference CO2 with a different maximum ppm concentration. See Annex N of the RTTOV v12.3 user guide.
My profile top is below the top level required by RTTOV (usually 0.005hPa), how do I best extrapolate it?
The easiest way is to use RTTOV’s internal interpolator which interpolates the input profile onto the coefficient levels for the optical depth calculation. By default profiles are extrapolated with constant value at the top of the atmosphere (the extrapolated values are clipped to the min/max regression limits so that extrapolated values never exceed the limits). Alternatively you can set the opts%interpolation%reg_limit_extrap option to extrapolate profiles at the top of the atmosphere by maintaining the relative position between the relevant training profile limits to the top coefficient level. See the user guide for more details on this.
If you don’t want to use the internal interpolation and instead supply a profile on the coefficient levels then for gas concentrations you can use the reference profiles for levels above the top input level. The reference profiles are available on the coefficients download page. You can also access them via the coef structure e.g. for water vapour coefs%coef%ref_prfl_mr(:,coefs%coef%fmv_gas_pos(gas_id_watervapour)) where gas_id_watervapour is available from the rttov_const module. For temperature you can extrapolate from the top level of the input profile using a representative lapse rate from standard atmospheres.
Why does compilation with the HDF5 library fail?
You must first edit the file build/Makefile.local to point to the location of your HDF5 installation and to include the relevant compiler and linker flags. You must also regenerate the RTTOV Makefiles to include the HDF5 code: this is done automatically when you run the rttov_compile.sh script.
Why do some of the tests fail when I compile with certain compilers (e.g. ifort)?
You should increase the stack size before running the test scripts, for example by executing:
$ ulimit -s unlimited
For PC-RTTOV tests running the K model with NTHREADS > 1, you may need to increase the OpenMP stack size as well:
$ export OMP_STACKSIZE=1000M
Why do I get run-time errors with the Python wrapper or GUI when using conda?
Some users have found that Python calls to RTTOV or the GUI fail to run. Errors are similar to:
At line 591 of file ../../src/main/rttov_getoptions.F90 Internal Error: get_unit(): Bad internal unit KIND
This affects users who use conda and results from an incompatibility with the compiler environment that conda makes available at run-time vs the system default. This problem does not seem to affect miniconda.
To fix this you should try installing the conda gcc package:
$ conda install gcc
And then do a fresh build of RTTOV. You may also have to recompile the HDF5 library with the version of gfortran from the conda gcc package, and then link the RTTOV build to this library. When running RTTOV you may then need to add the library from your conda environment and the updated HDF5 library to the LD_LIBRARY_PATH.
If you are running on Mac OSX then one user discovered that the following worked:
$ conda install clang_osx-64 clangxx_osx-64 gfortran_osx-64