COSP-RTTOV integration with CAM
Closes #1324 Closes #1328
Requires cime6.1.106 or later
I have coupled the COSP-RTTOV satellite emulator with CAM and would like to pull it into the main code repository. This update to COSP significantly extends emulation capabilities and is described here: https://egusphere.copernicus.org/preprints/2025/egusphere-2025-169/
An important note: Integrating with COSP-RTTOV with CAM requires linking an external build of RTTOV to CESM during the build step and changes to CIME. This is further complicated by the fact that the RTTOV source code is free but only available to registered users and creating a new build is slow relative to a normal CESM build, so linking an existing RTTOV build during CESM build appears to be the best solution.
CIME fork here: https://github.com/jshaw35/cime/tree/cime6.0.217_httpsbranch02_cosprttov
@cacraigucar I have now ported the COSP-RTTOV interface code to the cam_development branch. These changes make CAM compatible with the COSP-RTTOV branch that @dustinswales and I are currently reviewing before merging into the official COSPv2.0 repository. I've updated the CAM namelist options and logic as well.
I made the following tests for performance:
- Bit-for-bit agreement for all COSPv2.0 variables compared to the normal cam_development.
- COSPv2.0 outputs with and without satellite-like swathing are identical (e.g. swathing just puts nans in "unobserved" gridcells, answers are unchanged even though computing time should be significantly less).
- RTTOV builds correctly and output is nearly identical to the CESM2.1.5 version that I validated for the COSP-RTTOV documentation paper.
This pull request also corrects an answer-changing model error (cospsimulator_intr.F90) in the assignment of the "hgt_matrix_half" field that COSPv2.0 uses. Per cosp.F90 this array should be:
Height of bottom interface of atm layer(km). First level contains the bottom of the top layer. Last level contains the bottom of the surface layer.
The current CAM interface sets the first level as the top of the top layer and allocates the array as length nlay+1 instead of nlay. This changes all fields that use the lidar_simulator subroutine (CALIPSO, PARASOL, etc) and RTTOV outputs.
I think that this PR is ready for a more detailed review! I will be traveling for work until August 28th and will be slow to respond during that time.