Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
269 commits
Select commit Hold shift + click to select a range
613921b
Unit_AerosolScatter tests: load GOCART-GEOS5 from NetCDF
BenjaminTJohnson May 9, 2026
8311ba3
CRTM_Forward: index RTV by thread in Obs_4_downward warning
BenjaminTJohnson May 9, 2026
ec1cbb1
CRTM_Forward/TL/K: fix three OpenMP-over-channels races
BenjaminTJohnson May 9, 2026
fc0a49a
CRTM_K_Matrix: restore channel-thread OpenMP (JCSDA/CRTMv3#231)
BenjaminTJohnson May 9, 2026
12b0394
Stage PARMIO LUT + AWS coeffs in canonical test_data; demote RC resid…
BenjaminTJohnson May 10, 2026
69e752f
Switch coefficient extension from .nc4 to .nc for fix_REL-3.2.0.0
BenjaminTJohnson May 10, 2026
2a7495a
Add ODSSU netCDF I/O and BIN2NC converter for SSU TauCoeff
BenjaminTJohnson May 10, 2026
b6168df
PARMIO/AWS tests: read coefficients from canonical test_data only
BenjaminTJohnson May 10, 2026
5e0a69d
update MD5sum hash in test/CMakeLists.txt
BenjaminTJohnson May 10, 2026
c88c79c
updatd Get_CRTM_Binary_Files.sh with correct md5sum for current fix_R…
BenjaminTJohnson May 10, 2026
6bf5757
Add nvfortran support: split 8-D Rdown into V/H 7-D arrays
BenjaminTJohnson May 10, 2026
9cebd68
Phase 4: wire PARMIO LUT into CRTM_Init lifecycle
BenjaminTJohnson May 10, 2026
34fbbeb
Lift PARMIO obs-space drivers to the integrated CRTM_Init lifecycle
BenjaminTJohnson May 10, 2026
98c6815
SpcCoeff netCDF reader: fix silent NLTECoeff sibling-load truncation;…
BenjaminTJohnson May 11, 2026
c1e00de
test: stage cris-fsr_n21 NLTECoeff sibling for the regression suite
BenjaminTJohnson May 12, 2026
6ae8c1c
Fix thread-safety issues: remove unsafe SAVE attributes and pointer i…
BenjaminTJohnson Jan 4, 2026
07e91d7
CRTM_Forward/TL/K: aggregate channel-thread error status via reduction
BenjaminTJohnson May 12, 2026
33a23da
updated MD5sums for netcdf tarball fix_REL-3.2.0.0.tgz to 57772423872…
BenjaminTJohnson May 12, 2026
5d0ca34
build: drop dead Zeeman_Utility.f90 from the libcrtm sources
BenjaminTJohnson May 12, 2026
ce8fcf0
docs: add "OpenMP and thread safety" section to README
BenjaminTJohnson May 12, 2026
7c9bdd9
test: add OpenMP/serial consistency regression test (JCSDA/CRTMv3#111)
BenjaminTJohnson May 12, 2026
b94b23f
FitCoeff_*_Create: assumed-shape `dimensions` arg (re-applies the #19…
BenjaminTJohnson May 12, 2026
3a36f5f
NESDIS_ATMS_SnowEM: guard the diagnosis-based path against absent/sho…
BenjaminTJohnson May 12, 2026
240520b
NESDIS_ATMS_SeaICE: only run the diagnosis-based path on sane TBs (pa…
BenjaminTJohnson May 12, 2026
53a266d
Test channel subsetting under OpenMP; harden CRTM_ChannelInfo_Subset
BenjaminTJohnson May 12, 2026
7689efe
PARMIO: route MW-water channels >= 200 GHz to PARMIO LUT
BenjaminTJohnson May 13, 2026
776aa56
PARMIO: delete ATMS-only regression tests obviated by 200 GHz gate
BenjaminTJohnson May 13, 2026
9e8702f
PARMIO: rewrite remaining A/B tests to two-phase CRTM_PARMIOCoeff_Load
BenjaminTJohnson May 13, 2026
0c6ff86
PARMIO: remove inert Use_PARMIO_Model flag
BenjaminTJohnson May 13, 2026
13c7d23
PARMIO: auto-load LUT from default coefficient path in CRTM_Init
BenjaminTJohnson May 13, 2026
6df91a7
fixing more default binary options.
BenjaminTJohnson May 19, 2026
8dc9bc3
docs: correct Read/Write netCDF-arg doc blocks to NETCDF default
BenjaminTJohnson May 25, 2026
ed20667
test: extend OMP consistency check to CRTM_Tangent_Linear
BenjaminTJohnson May 25, 2026
9358caa
feat(SfcOptics): analytic MW land emissivity Jacobians (LAI, vegetati…
BenjaminTJohnson May 26, 2026
43661a9
updated md5sum for tarball.
BenjaminTJohnson May 26, 2026
bdc7fb9
fix(SfcOptics): drop Distance_Ratio scaling in CONST_MIXED_POLARIZATION
BenjaminTJohnson May 29, 2026
57c9911
test: add CONST_MIXED_POLARIZATION surface-optics unit test
BenjaminTJohnson May 29, 2026
9ca8e98
chore: repo hygiene for REL-3.2.0 tag
BenjaminTJohnson May 30, 2026
8bd411c
fix(PARMIO): unify reflection-correction gating in TL/AD with the for…
BenjaminTJohnson May 30, 2026
c89b2e4
docs(Forward): document the shared read-only Predictor OMP invariant …
BenjaminTJohnson May 30, 2026
aff03b5
test(PARMIO): add >=200 GHz mwr_aws stored-reference regression (issu…
BenjaminTJohnson May 30, 2026
a84de47
fix(test): repair PARMIO delta-sweep that compared PARMIO against itself
BenjaminTJohnson May 31, 2026
91f5fee
test(PARMIO): add TROPICS 204.8 GHz delta-sweep, the stronger >=200 G…
BenjaminTJohnson May 31, 2026
ed21dc7
fix(TauCoeff): harden Zeeman format probe against silent SSMIS downgrade
BenjaminTJohnson May 31, 2026
471d884
feat(Surface): add netCDF I/O for rank-2 Surface baselines (REL-3.2.0)
BenjaminTJohnson May 31, 2026
66522b1
feat(Atmosphere): add netCDF I/O for rank-2 Atmosphere baselines (REL…
BenjaminTJohnson May 31, 2026
72816d4
fix(RTSolution): handle n_Layers=0 in netCDF I/O (K-matrix RTSolution_K)
BenjaminTJohnson May 31, 2026
d944c45
fix(RTSolution): round-trip Reflectance and per-element RT_Algorithm_…
BenjaminTJohnson May 31, 2026
d63ab56
feat(Surface,Atmosphere): add profile-only (rank-1) netCDF I/O
BenjaminTJohnson May 31, 2026
ee6b908
test: flip regression baselines from binary to netCDF (hard switch)
BenjaminTJohnson May 31, 2026
2d0b164
docs(REL-3.2.0): note the binary→netCDF regression-baseline conversion
BenjaminTJohnson May 31, 2026
1635765
Merge branch 'develop' into feature/btj_REL-3.2.0
BenjaminTJohnson May 31, 2026
c95ac47
fix(forward): gate n_Stokes>1 phase-element guard on scatterer presence
BenjaminTJohnson Jun 3, 2026
56037ca
fix(RTSolution): two n_Stokes>1 polarized-scattering defects (partial)
BenjaminTJohnson Jun 3, 2026
3c65c8b
fix(RTSolution): correct ADA n_Stokes>1 thermal source (the ~40x infl…
BenjaminTJohnson Jun 3, 2026
6ec846c
fix(RTSolution): propagate n_Stokes>1 ADA thermal-source fix to TL/AD
BenjaminTJohnson Jun 3, 2026
4c800db
fix(TL/AD/K): gate n_Stokes>1 phase-element guard on scatterer presence
BenjaminTJohnson Jun 3, 2026
81c4b16
fix(RTSolution): correct two n_Stokes>1 ADA adjoint slot/column loops
BenjaminTJohnson Jun 3, 2026
3d3ce8f
fix(SfcOptics): prevent TL Emissivity/Reflectivity realloc-on-assign …
BenjaminTJohnson Jun 3, 2026
5dd13bf
fix(K-Matrix/Adjoint): route BT adjoint seed to Stokes(1) for n_Stokes>1
BenjaminTJohnson Jun 4, 2026
94760ef
fix(K-Matrix): set SfcOptics%n_Stokes from Opt so the forward surface…
BenjaminTJohnson Jun 4, 2026
bcb9ed4
MW cloud optics: let DDA-ARTS ICE_CLOUD scatter (gate the Mie-TAMU no…
jbenjam Jun 4, 2026
d04b001
Cloud define: default DDA ICE_CLOUD habit IceSphere(18) -> IconCloudI…
jbenjam Jun 4, 2026
7578d69
Cloud optics: explicit CloudCoeff%Data_Type scheme flag (Mie-TAMU vs …
jbenjam Jun 4, 2026
f41b326
update tarball to include TELSEM2 MW_Land netCDF file
BenjaminTJohnson May 28, 2026
3697a04
feat(SfcOptics): add TELSEM2 microwave land surface emissivity atlas
BenjaminTJohnson May 28, 2026
922662b
test: add TELSEM2 MW land emissivity integration test
BenjaminTJohnson May 28, 2026
3d3c6d3
test: exercise lat/lon/month geometry in TELSEM2 test
BenjaminTJohnson May 28, 2026
99a1fa8
updating md5sum for tarball.
BenjaminTJohnson Jun 5, 2026
7765d3d
feat(CloudCoeff): add experimental 'CRTM-Exp' cloud-optics schema sup…
BenjaminTJohnson Jun 6, 2026
f8d8dc9
feat(CloudCoeff_Inspect): support netCDF and auto-detect CRTM-Exp schema
BenjaminTJohnson Jun 6, 2026
e1eeea0
test(CloudCoeff-Exp): forward-mode ctest for the experimental cloud s…
BenjaminTJohnson Jun 6, 2026
1c4d4ce
fix(PARMIO): clamp MW-water reflectivity to [0,1] at grazing quadratu…
BenjaminTJohnson Jun 6, 2026
e662b02
fix(FastemX): guard MW-water reflectivity against grazing-angle blow-up
BenjaminTJohnson Jun 6, 2026
6898e2c
test(SfcOptics): grazing-angle reflectivity-guard regression test
BenjaminTJohnson Jun 6, 2026
e38e247
feat(RTSolution): differentiated surface Down_Radiance for clear-sky …
BenjaminTJohnson Jun 7, 2026
64b17db
feat(RTSolution): always-on surface Down_Radiance forward for ADA sca…
BenjaminTJohnson Jun 7, 2026
e913928
docs(downwelling): record Phase 2 forward-foundation progress + perf …
BenjaminTJohnson Jun 7, 2026
9de8041
feat(RTSolution): opt-in flag for scattering surface Down_Radiance (P…
BenjaminTJohnson Jun 7, 2026
8350789
feat(SOI): differentiated surface Down_Radiance for SOI scattering (P…
BenjaminTJohnson Jun 7, 2026
f93db31
feat(RTSolution): clear/cloudy Down_Radiance combine in FWD/TL/AD/K (…
BenjaminTJohnson Jun 7, 2026
030463a
docs(downwelling): ADA gate confirmed + derivation/traps recorded (Ph…
BenjaminTJohnson Jun 7, 2026
1fcb852
feat(ADA): differentiated surface Down_Radiance TL/AD/K (Phase 2 comp…
BenjaminTJohnson Jun 7, 2026
ee6a93b
refactor(downwelling): retire Obs_4_downward_P hack (Phase 4)
BenjaminTJohnson Jun 7, 2026
6b41e38
feat(downwelling): Downwelling_Radiance(:) profile field + flag + FWD…
BenjaminTJohnson Jun 7, 2026
2a118dd
feat(downwelling): Emission Downwelling_Radiance(:) profile TL/AD (Ph…
BenjaminTJohnson Jun 7, 2026
406b081
feat(downwelling): SOI Downwelling_Radiance(:) profile TL/AD (Phase 3…
BenjaminTJohnson Jun 7, 2026
825c426
feat(downwelling): ADA Downwelling_Radiance(:) profile TL/AD (Phase 3…
BenjaminTJohnson Jun 7, 2026
5a9c454
feat(downwelling): TCC-combine the Downwelling_Radiance(:) profile (P…
BenjaminTJohnson Jun 8, 2026
80cc638
docs(downwelling): record Phase 3 (level profile) complete + upwellin…
BenjaminTJohnson Jun 8, 2026
67471c8
feat(upwelling): Compute_Up_Radiance_Profile flag + scattering FWD pr…
BenjaminTJohnson Jun 8, 2026
94d3c9d
feat(upwelling): Emission Upwelling_Radiance(:) profile TL/AD (Up Ste…
BenjaminTJohnson Jun 8, 2026
20b1835
feat(upwelling): SOI Upwelling_Radiance(:) profile TL/AD (Up Step C')
BenjaminTJohnson Jun 8, 2026
321f7fb
feat(upwelling): ADA Upwelling_Radiance(:) profile TL/AD (Up Step D')
BenjaminTJohnson Jun 8, 2026
7c75772
feat(upwelling): TCC-combine the Upwelling_Radiance(:) profile (Up St…
BenjaminTJohnson Jun 8, 2026
ddc5213
docs(upwelling): record Phase 5 (full Upwelling_Radiance profile for …
BenjaminTJohnson Jun 8, 2026
31f3753
test(perf): add bench_Profile_Perf micro-benchmark for the profile ou…
BenjaminTJohnson Jun 8, 2026
c3ac530
test: create RTSolution before CRTM calls in TELSEM2 test
BenjaminTJohnson Jun 8, 2026
743df13
Update IRsnow module names follow the CRTM convention
chengdang Jun 9, 2026
35bd677
New VIS/NIR snow albedo LUT generated with SNICAR, add LUT loading
chengdang Jun 9, 2026
823c8ae
Name updates to IR snow modules
chengdang Jun 10, 2026
51e63f5
fix typo
chengdang Jun 10, 2026
c278079
Initial implementation for forward calculation. TL and AD implementat…
chengdang Jun 11, 2026
b19cd61
fix(TL): privatize r_cloudy_dn in the channel-thread OMP clause
BenjaminTJohnson Jun 12, 2026
9eda275
fix(SOI): gate Down/Up radiance TL/AD on the Compute_* flags
BenjaminTJohnson Jun 12, 2026
78aac3d
fix(LandEM): zero soil-moisture derivative at SMC = 0 (was +Infinity)
BenjaminTJohnson Jun 12, 2026
8f75a59
fix(LifeCycle): make the filename extension authoritative in Resolve_…
BenjaminTJohnson Jun 12, 2026
fe5104c
fix(RTSolution): mirror the Normalize_Phase polarized-block scaling i…
BenjaminTJohnson Jun 12, 2026
1cc9a5b
test: add vector-RT (n_Stokes>1) TL/AD/K verification (test_VectorRT_…
BenjaminTJohnson Jun 12, 2026
f7000b6
fix(K-Matrix): propagate the Exp-scheme dynamic n_Legendre_Terms to K…
BenjaminTJohnson Jun 12, 2026
8f39e93
feat(Options): plumb the Compute_*_Radiance flags through SetValue/In…
BenjaminTJohnson Jun 12, 2026
4be36b1
fix(Surface,Atmosphere): reject n_Channels/=0 in the rank-1 netCDF re…
BenjaminTJohnson Jun 12, 2026
6b188e7
fix(TELSEM2): correct longitude-wrap bound and validate class1 on read
BenjaminTJohnson Jun 12, 2026
4c80915
test: grazing-angle downwelling cases, >=200 GHz PARMIO kernel case, …
BenjaminTJohnson Jun 12, 2026
8e4a222
update to changes markdown file
BenjaminTJohnson Jun 12, 2026
9454088
Merge branch 'feature/btj_REL-3.2.0' into feature/cd_snicar_snow
chengdang Jun 17, 2026
fa09814
Updated test_emis_coeff_io.f90 to include SNICAR scheme, remove test_…
chengdang Jun 18, 2026
a8ceaab
nc4 --> nc
chengdang Jun 18, 2026
518dd41
fix(CRTM_Utility): guard ASYMTX balance loop against non-termination
BenjaminTJohnson Jun 23, 2026
b17d414
Add SNICAR LUT for unit tests
chengdang Jun 23, 2026
ef8e7c1
CRTM-Exp clouds: per-habit Reff->Dm conversion in the MW reader
BenjaminTJohnson Jun 9, 2026
b592145
feat(ODPS): GROUP_MW_O3 (Group_Index=7) - scene-ozone component for M…
BenjaminTJohnson Jul 15, 2026
b9c525a
test(ODPS): TL/AD/K parity test for the MW scene-ozone component (GRO…
BenjaminTJohnson Jul 15, 2026
a8a7329
Merge pull request #331 from JCSDA/feature/btj_mw_o3_group7
BenjaminTJohnson Jul 18, 2026
50ca243
fix(entry): carry cumulative channel offset 'ln' across sensors; guar…
BenjaminTJohnson Jul 19, 2026
8dda23e
fix(LifeCycle): per-format Spc/Tau search path; probe NC_File_Path fo…
BenjaminTJohnson Jul 19, 2026
e04a559
fix(PARMIO): gate azimuthal harmonics on a valid azimuth; zero 3rd/4t…
BenjaminTJohnson Jul 19, 2026
453625c
fix(RT): VMOM sensor-angle normalization targets the intensity elemen…
BenjaminTJohnson Jul 19, 2026
b8ef86f
fix(CloudScatter): Exp-scheme n_Legendre_Terms override is MW-only; r…
BenjaminTJohnson Jul 19, 2026
4edf76b
fix(coeff-io): make silent data-loss paths loud; validate file-derive…
BenjaminTJohnson Jul 19, 2026
112610b
fix(test-data): stage NLTECoeff/ACCoeff symlinks from their canonical…
BenjaminTJohnson Jul 19, 2026
067f4e2
test: check Error_Status in FD probes; fix Aerosol_Bypass failure-bra…
BenjaminTJohnson Jul 19, 2026
bef49b9
build: find_package(OpenMP REQUIRED); keep NDEBUG out of DEBUG builds…
BenjaminTJohnson Jul 19, 2026
3f5f3f5
docs: record the 2026-07-18 comprehensive review round in the changes…
BenjaminTJohnson Jul 19, 2026
4ba6c21
docs: correct download-size message (fix_REL-3.2.0.0 tarball is ~3.5 …
BenjaminTJohnson Jul 19, 2026
aa74418
docs: v3.2.0 release notes; set release date to July 31, 2026
BenjaminTJohnson Jul 19, 2026
3d61a9a
docs(LifeCycle): correct CRTM_Init header for the v3.2.0 coefficient …
BenjaminTJohnson Jul 19, 2026
f1d02c6
Merge pull request #332 from JCSDA/feature/btj_lifecycle_header_docs
BenjaminTJohnson Jul 19, 2026
aa31bb7
feat(SfcOptics): analytic MW-land Soil/Land temperature emissivity Ja…
BenjaminTJohnson Jul 20, 2026
8f876a0
docs(#281): mark Phase 3 (Soil/Land temperature Jacobians) done; land…
BenjaminTJohnson Jul 20, 2026
10bb9cb
docs(release): v3.2.0 notes + changes doc cover MW-land temperature J…
BenjaminTJohnson Jul 20, 2026
dde2c4f
Merge pull request #333 from JCSDA/feature/btj_landem_temperature_jac…
BenjaminTJohnson Jul 20, 2026
e77e145
docs(changes): update §5 summary-table row to include soil/land tempe…
BenjaminTJohnson Jul 20, 2026
2ffdf22
feat(LifeCycle): make TELSEM2 MW-land atlas opt-in for v3.2.0 (A1, #314)
BenjaminTJohnson Jul 20, 2026
a94a6ac
fix(SfcOptics): restore the Fastem1 MW-water SST Jacobian (A2)
BenjaminTJohnson Jul 20, 2026
8da16ed
test(DDA-ARTS): pin the ICE_CLOUD scattering behavior change (A3)
BenjaminTJohnson Jul 20, 2026
1ccdf0e
test(DDA-ARTS): use the newer CloudCoeff_DDA_Moradi_2024 table (A3)
BenjaminTJohnson Jul 20, 2026
0c5c29c
build: fix CRTM_IRSnowEM.f90 source path case (Linux build breaker)
BenjaminTJohnson Jul 20, 2026
aca88aa
Merge pull request #324 from JCSDA/feature/cd_snicar_snow
BenjaminTJohnson Jul 20, 2026
4848c57
Merge pull request #334 from JCSDA/feature/btj_rel320_readiness
BenjaminTJohnson Jul 20, 2026
a3062a4
test: add general TL-vs-FD and AD consistency check across sensor typ…
BenjaminTJohnson Jul 20, 2026
15b619a
Merge pull request #335 from JCSDA/feature/btj_fd_consistency_test
BenjaminTJohnson Jul 20, 2026
17a3de9
refactor(solvers): operate on the per-profile Opt copy inside profile…
BenjaminTJohnson Jul 20, 2026
61d48ae
fix(coeff-io): deferred-length coefficient paths, no fixed truncation…
BenjaminTJohnson Jul 20, 2026
2e09d33
fix(coeff-io): NC2BIN converters must write binary explicitly
BenjaminTJohnson Jul 23, 2026
0f8e4a4
feat(ODPS): GROUP_UV_NO2 (Group_Index=8) - scene-NO2 component for UV…
BenjaminTJohnson Jul 25, 2026
34da8b1
fix(SfcOptics): route UV sensors through the VIS surface-optics branch
BenjaminTJohnson Jul 25, 2026
a4de7e3
test(ODPS): TL/AD/K parity tests for the UV scene-NO2 component (GROU…
BenjaminTJohnson Jul 25, 2026
a0eb6c0
docs(release): GROUP_UV_NO2 and UV forward-operator enablement in the…
BenjaminTJohnson Jul 25, 2026
9354d06
test(ODPS): daytime GEOS-CF NO2 reference profile in test_UV_NO2_TLAD
BenjaminTJohnson Jul 25, 2026
694c46f
Merge pull request #341 from JCSDA/feature/btj_uv_no2_group8
BenjaminTJohnson Jul 25, 2026
c507439
feat(ODPS): Tier 0 group-system guardrails - load-time roster validation
BenjaminTJohnson Jul 26, 2026
33b5559
refactor(ODPS): Tier 1a - single group registry replaces the parallel…
BenjaminTJohnson Jul 26, 2026
67210f0
refactor(ODPS): Tier 1b - per-component predictor kernels for FWD, TL…
BenjaminTJohnson Jul 26, 2026
ce3545b
feat(ODPS): Tier 2 - file-roster-driven dispatch, capability validati…
BenjaminTJohnson Jul 26, 2026
4aad440
test(Zeeman): remove ssmis_f20 from the Zeeman test roster
BenjaminTJohnson Jul 27, 2026
8ca160e
Merge pull request #343 from JCSDA/feature/btj_odps_group_modernization
BenjaminTJohnson Jul 27, 2026
16df27d
docs(release): refresh v3.2.0 changelist for the readiness rounds; ad…
BenjaminTJohnson Jul 27, 2026
670d271
docs(support): retire crtm-support@googlegroups.com
BenjaminTJohnson Jul 27, 2026
5396ef7
test(data): manifest points at v.viirs-m_n21, not the retired j2 alias
BenjaminTJohnson Jul 28, 2026
632cd8e
test(UV): baseline-independent physics verification for OMPS and TEMPO
BenjaminTJohnson Jul 28, 2026
2d48c15
docs(release): 2026-07-28 coefficient campaign in the notes and inven…
BenjaminTJohnson Jul 28, 2026
2575bc2
test(MW): AMSU-A-anchored microwave sounder physics verification
BenjaminTJohnson Jul 28, 2026
4fe0191
fix(SfcOptics): convert surface emissivity/reflectivity to the Stokes…
BenjaminTJohnson Jul 31, 2026
8bf010e
Merge: Stokes-basis surface handoff fix for vector RT (n_Stokes>1)
BenjaminTJohnson Jul 31, 2026
411038b
docs(design): rigorous path forward for polarimetric (n_Stokes>1) sup…
BenjaminTJohnson Jul 31, 2026
bd779bc
test(polarimetric): scalar-limit ground-truth probe; finds a defect i…
BenjaminTJohnson Jul 31, 2026
8f93541
fix(ADA): correct the reflected cosmic background for n_Stokes>1 (FWD…
BenjaminTJohnson Jul 31, 2026
11c47c2
test(polarimetric): phase-matrix invariants; confirms the (1,1) clamp…
BenjaminTJohnson Jul 31, 2026
76b9018
fix(SfcOptics): carry the surface U and V through the MW coverage agg…
BenjaminTJohnson Jul 31, 2026
0c59c7c
fix(RTSolution): stop annihilating Stokes U and V in the Fourier accu…
BenjaminTJohnson Jul 31, 2026
a37bd7c
docs(design): resolve the surface frame question and record four new …
BenjaminTJohnson Jul 31, 2026
f2c920d
fix(test): equalize the scalar-limit profiles; corrects two mis-diagn…
BenjaminTJohnson Jul 31, 2026
03e10e4
feat(RTSolution): vector solver for the clear-sky path, FWD/TL/AD
BenjaminTJohnson Jul 31, 2026
3892793
fix(fractional cloud): seed every Stokes component, and run the clear…
BenjaminTJohnson Jul 31, 2026
9f32471
fix(RTSolution): refuse SOI with n_Stokes>1 instead of silently runni…
BenjaminTJohnson Jul 31, 2026
a5d80e2
verify: full-Stokes Jacobians, physical invariants, and scalar bit-id…
BenjaminTJohnson Jul 31, 2026
e29d648
verify: aircraft observer on the vector path, and sharpen gap 1
BenjaminTJohnson Jul 31, 2026
1e07398
verify: widen the scalar bit-identity instrument to FWD/TL/AD/K, VIS …
BenjaminTJohnson Jul 31, 2026
84aa55e
feat(RTSolution): project the emergent Stokes vector onto the channel…
BenjaminTJohnson Jul 31, 2026
312ed00
test(polarimetric): differentiate the surface, including dU/d(wind di…
BenjaminTJohnson Jul 31, 2026
9cda513
test(polarimetric): cover PARMIO's polarimetric surface at the interface
BenjaminTJohnson Jul 31, 2026
4457e89
test(polarimetric): PARMIO Jacobians end to end; corrects a wrong claim
BenjaminTJohnson Jul 31, 2026
9509f93
feat(polarimetric): adopt, document and pin the Stokes sign convention
BenjaminTJohnson Aug 1, 2026
0c2e801
docs(polarimetric): record the cloud-polarization result, strike a st…
BenjaminTJohnson Aug 1, 2026
fdd150a
fix(LifeCycle): MWwaterCoeff_File selects the microwave water model
BenjaminTJohnson Aug 1, 2026
f78d20e
feat(polarimetric): warn when a vector run has no polarimetric surface
BenjaminTJohnson Aug 1, 2026
fa12f64
fix(polarimetric): the no-polarimetric-surface warning must account f…
BenjaminTJohnson Aug 1, 2026
781dc69
feat(PARMIO): dispatch on table coverage, expose the floor, report cl…
BenjaminTJohnson Aug 1, 2026
bc9f20d
refactor(PARMIO): move the dispatch opt-in from CRTM_Init to Options
BenjaminTJohnson Aug 1, 2026
0cf7740
docs(PARMIO): the 200 GHz floor is arbitrary; say so
BenjaminTJohnson Aug 1, 2026
cff26b8
docs(PARMIO): record the regenerated LUT and the switch discontinuity
BenjaminTJohnson Aug 1, 2026
c239e97
docs(PARMIO): the permittivity switch is ours, and it should go
BenjaminTJohnson Aug 1, 2026
d2a807a
docs(PARMIO): honest confidence labels, and the first test above 200 GHz
BenjaminTJohnson Aug 1, 2026
e1a15fe
docs(design): track the MW land-state Jacobian design brief
BenjaminTJohnson Aug 1, 2026
c5ed428
docs(design): track the GSI, JEDI/UFO and netCDF-baseline documents
BenjaminTJohnson Aug 1, 2026
1fa466d
docs(release): polarimetric behavior changes, known issues, and hones…
BenjaminTJohnson Aug 1, 2026
73800f7
docs(inventory): reconcile the tables against the staging tree, one r…
BenjaminTJohnson Aug 1, 2026
ecdd359
chore: keep analysis artifacts out of the repository
BenjaminTJohnson Aug 1, 2026
fd5f378
merge: fold the polarimetric work into the v3.2.0 staging branch
BenjaminTJohnson Aug 1, 2026
dfc6db2
docs(release): reconcile the release documents against the staged tree
BenjaminTJohnson Aug 1, 2026
fdece59
fix(SfcOptics): the PRA polarization angle is 0/0 at nadir
BenjaminTJohnson Aug 1, 2026
7187df0
fix(TELSEM2): read the atlas in bounded slices, not whole arrays
BenjaminTJohnson Aug 1, 2026
cb14264
docs(release): record the two Intel-only defects and the spack shadow…
BenjaminTJohnson Aug 1, 2026
91ce4c1
docs(polarimetric): the third Stokes sign is settled against RTTOV
BenjaminTJohnson Aug 3, 2026
f16e022
docs(release): the tarball is rolled, and why the md5 pins stay put
BenjaminTJohnson Aug 3, 2026
f4a312b
merge: rebase the v3.2.0 staging branch onto the updated develop
BenjaminTJohnson Aug 3, 2026
830a280
docs(release): quantify the two v3.1.4 defects this release fixes
BenjaminTJohnson Aug 3, 2026
7cdf1da
docs(GSI): re-pin the interface plan and quantify the sibling risk
BenjaminTJohnson Aug 4, 2026
13a09c5
build(cmake): install the package where find_package looks, and expor…
BenjaminTJohnson Aug 4, 2026
852efd4
docs(release): add a coefficient-changes section, and fix two stale c…
BenjaminTJohnson Aug 4, 2026
81632f4
updating the tarball md5sum and pushed to ftp site.
BenjaminTJohnson Aug 4, 2026
ced1c2c
Merge branch 'feature/btj_REL-3.2.0' of https://github.com/JCSDA/CRTM…
BenjaminTJohnson Aug 4, 2026
e9f7ea0
docs(release): the tarball is published; refresh checksum and guidance
BenjaminTJohnson Aug 4, 2026
cafe7b4
adding some additional tests, but they're pretty slow so I might remo…
BenjaminTJohnson Aug 4, 2026
13cd613
fix(omp): rebuild ln from a per-sensor base each channel-chunk iteration
BenjaminTJohnson Aug 4, 2026
d43acb9
fix: derive the between-sensors ln advance from ln_base
BenjaminTJohnson Aug 4, 2026
9e26686
test: use type-bound UnitTest calls in test_emis_coeff_io for nvfortran
BenjaminTJohnson Aug 4, 2026
aaad3c2
test(omp): time the speedup phases best-of-3 so the threshold means s…
BenjaminTJohnson Aug 5, 2026
b974179
test(cmake): defer four long-running tests behind BUILD_TIER2_TESTS
BenjaminTJohnson Aug 5, 2026
26f7cff
docs(release): record the ABI ODPS regeneration and the VIS/UV compon…
BenjaminTJohnson Aug 5, 2026
c6bf685
release: re-roll the coefficient tarball to include the ABI regeneration
BenjaminTJohnson Aug 5, 2026
7bbe8cd
docs(release): state the verified coefficient scope, including the AB…
BenjaminTJohnson Aug 5, 2026
191da0a
docs(release): the re-rolled tarball is uploaded and confirmed on the…
BenjaminTJohnson Aug 5, 2026
fde1e66
fix(vissnow): hard-fail unrecognised classification and unloaded-tabl…
BenjaminTJohnson Aug 5, 2026
e8576ad
fix(sfcoptics): clamp SEcategory reflectance interpolant to the physi…
BenjaminTJohnson Aug 5, 2026
f988658
test: add radiance-level physics coverage for the SNICAR visible-snow…
BenjaminTJohnson Aug 5, 2026
652858f
build: force classic RPATH so in-build binaries never run a substitut…
BenjaminTJohnson Aug 5, 2026
b23b6b5
docs(release): SNICAR maturity restated; clamp and loader behavior ch…
BenjaminTJohnson Aug 5, 2026
e54e7cb
fix(omp): restore the caller's OpenMP nesting policy on exit
BenjaminTJohnson Aug 6, 2026
7af53cb
fix(omp): stop splitting channels below the break-even point
BenjaminTJohnson Aug 6, 2026
90f75c1
perf(omp): do not spawn a thread team just to count threads
BenjaminTJohnson Aug 6, 2026
4c7be67
test(omp): guard the single-profile OpenMP thread policy
BenjaminTJohnson Aug 6, 2026
784f003
docs: record the OpenMP thread-policy fixes and correct a GSI claim
BenjaminTJohnson Aug 6, 2026
0fc1bd4
docs: record nvfortran 25.5 in the OpenMP thread-policy validation
BenjaminTJohnson Aug 6, 2026
4610aa4
docs: record the 2026-08-05 coefficient refreshes in the inventory
BenjaminTJohnson Aug 6, 2026
5659f9d
build: pin the re-rolled 2026-08-06 coefficient tarball
BenjaminTJohnson Aug 6, 2026
c425d8b
docs: prune completed design/handoff documents; fix stale tarball note
BenjaminTJohnson Aug 19, 2026
9d19d55
Merge remote-tracking branch 'origin/develop' into feature/btj_REL-3.2.0
BenjaminTJohnson Aug 20, 2026
06ad753
docs: evaluation-period re-roll caveat for the hash-skip build path
BenjaminTJohnson Aug 20, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 18 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,12 +1,28 @@
.DS_Store
*.o
*.mod
*.tgz
.ipynb*
build
fix/
build*/
**/Build/
Testing/
fix/
__pycache__/
*.pyc
build.bash
rebuild.bash
.gitignore
*~
conductor/
test-data-release/
.claude/
test/testinput/*.nc

# Analysis artifacts. Working scripts, plots, coefficient tooling and session
# notes live outside the git tree, under /home/ben/CRTM/release_wrap_*/ or
# equivalent. Findings belong in a commit message or a docs/design note, not
# in the repository as files.
tools/
*.png
*.patch
HANDOFF_*.md
92 changes: 92 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
# CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

## Project Overview

CRTM (Community Radiative Transfer Model) v3.2.0 is a Fortran radiative transfer model for satellite data assimilation. It computes top-of-atmosphere radiances and brightness temperatures from atmospheric/surface states, and provides Jacobians (sensitivities) for data assimilation systems.

## Build Commands

```bash
mkdir build && cd build
cmake ..
make -j8 # Adjust -j to your CPU count
ctest -j8 # Run all tests in parallel
```

**CMake options:**
- `-DCMAKE_BUILD_TYPE=DEBUG|RELEASE|RELWITHDEBINFO` (default: RELEASE)
- `-DBUILD_SHARED_LIBS=ON|OFF` (default: ON, creates libcrtm.so)
- `-DFIX_FILE_PATH=<path>` - Path to coefficient files (auto-downloads if not found)
- `-DBUILD_TESTING=ON|OFF` (default: ON)
- `-DOPENMP=ON|OFF` (default: ON)

**Build outputs:**
- Library: `build/lib/libcrtm.so` or `libcrtm.a`
- Modules: `build/module/crtm/<compiler>/<version>/`
- Test data: `build/test_data/` (downloaded automatically)

## Running Tests

```bash
cd build
ctest -j4 # Run all tests in parallel
ctest -VV -R <testname> # Run specific test with verbose output
ctest --output-on-failure # Show output only for failed tests
```

Test exit codes: `STOP 0` = success, `STOP 1` = failure.

## Code Architecture

### Core Modules (src/)

The four main CRTM entry points in order of complexity:
1. **CRTM_Forward_Module** - Forward radiative transfer (atmosphere/surface → radiances)
2. **CRTM_Tangent_Linear_Module** - Linearized forward model
3. **CRTM_K_Matrix_Module** - Jacobian/sensitivity matrix calculations
4. **CRTM_Adjoint_Module** - Adjoint (reverse mode) computations

**CRTM_LifeCycle** handles initialization and finalization.

### Component Libraries

| Directory | Purpose |
|-----------|---------|
| Atmosphere/ | Atmospheric profiles (pressure, temperature, gases, clouds, aerosols) |
| AtmAbsorption/ | Gas absorption (ODAS, ODPS, ODZeeman algorithms) |
| AtmOptics/ | Atmospheric optical properties |
| AtmScatter/ | Cloud, aerosol, and molecular scattering |
| SfcOptics/ | Surface emissivity/reflectivity (MW_Land, MW_Water, IR_*, VIS_*) |
| Surface/ | Surface type characterization |
| Coefficients/ | Coefficient I/O (SpcCoeff, TauCoeff, CloudCoeff, AerosolCoeff, EmisCoeff) |
| RTSolution/ | Radiative transfer solution structures |

### File Naming Conventions

- `*_Define.f90` - Derived type definitions
- `*_TL.f90` - Tangent-linear routines
- `*_AD.f90` - Adjoint routines
- `*_Binary_IO.f90` / `*_netCDF_IO.f90` - Coefficient I/O

### Test Structure (test/mains/)

- **application/** - Large end-to-end tests (check_crtm.F90)
- **regression/** - Functionality tests organized by mode:
- forward/, k_matrix/, adjoint/, tangent_linear/
- **unit/** - Small-scope component tests

## Requirements

- Fortran 2008 compiler (GCC 5+, Intel 18+, Cray, NVHPC)
- netCDF4/HDF5 (built with same Fortran compiler)
- CMake 3.20+
- git-lfs 2.10+

## Key Technical Notes

- Coefficient files support both legacy binary (.bin) and netCDF (.nc4) formats
- OpenMP parallelization is enabled by default
- Most modules have parallel TL/AD implementations for sensitivity calculations
- Transmittance coefficient generation codes (TauProd/, TauRegress/) are not functional
45 changes: 30 additions & 15 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,13 +1,30 @@
cmake_minimum_required(VERSION 3.20)

project(crtm VERSION 3.1.4 LANGUAGES Fortran)
project(crtm VERSION 3.2.0 LANGUAGES Fortran)

option(OPENMP "Build crtm with OpenMP support" ON)
option(FIX_FILE_PATH "Path to fix files (default: fix/)" OFF)
# Long-running tests are registered only when this is ON, and carry the ctest
# label "tier2" so they can also be selected with `ctest -L tier2` or excluded
# with `ctest -LE tier2`. Their executables are always built, so compiler
# coverage of those sources is never lost; only the ctest registration is gated.
# Toggling this is therefore a reconfigure with no recompilation.
option(BUILD_TIER2_TESTS "Register long-running (tier2) tests" OFF)

list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
set(CMAKE_DIRECTORY_LABELS ${PROJECT_NAME})

# In-build binaries must always run the in-build libcrtm. With the linker's
# default RUNPATH dtags, LD_LIBRARY_PATH takes precedence at load time, and a
# spack environment carrying its own crtm package silently substitutes its
# library: the test suite then executes a different CRTM release against this
# build's module interfaces (observed as 230/235 failures with garbage
# optional arguments when spack's crtm-3.1.2 shadowed an ifx build). Classic
# RPATH outranks LD_LIBRARY_PATH, so force it.
if(UNIX AND NOT APPLE)
add_link_options(LINKER:--disable-new-dtags)
endif()

# Include GNUInstallDirs to get the standard installation directory variables
include(GNUInstallDirs)

Expand Down Expand Up @@ -58,20 +75,18 @@ include(GNUInstallDirs)

## Dependencies (unchanged from original)
if(OPENMP)
find_package(OpenMP COMPONENTS Fortran)

# Check if OMP_NUM_THREADS is set in the environment
if(DEFINED ENV{OMP_NUM_THREADS})
set(OMP_NUM_THREADS $ENV{OMP_NUM_THREADS})
else()
# Set a default value if not set
set(OMP_NUM_THREADS "1")
endif()

# Export OMP_NUM_THREADS to the environment
set(ENV{OMP_NUM_THREADS} ${OMP_NUM_THREADS})
# REQUIRED: src/CMakeLists.txt links OpenMP::OpenMP_Fortran unconditionally
# when OPENMP=ON; without REQUIRED a missing OpenMP fails later at generate
# time with a cryptic "target not found" error.
find_package(OpenMP REQUIRED COMPONENTS Fortran)
endif()

# Enable portable Fortran source preprocessing across all supported compilers
# (gfortran, ifort, ifx, flang, Cray, NVHPC, XL). This is the cross-compiler
# replacement for hardcoded -cpp/-fpp flags and lets sources use #ifdef _OPENMP
# guards regardless of file extension.
set(CMAKE_Fortran_PREPROCESS ON)

if(DEFINED ENV{NETCDF_PATH})
list(APPEND CMAKE_PREFIX_PATH $ENV{NETCDF_PATH})
elseif(DEFINED ENV{NETCDF})
Expand Down Expand Up @@ -107,12 +122,12 @@ write_basic_package_version_file(
install(FILES
"${CMAKE_CURRENT_BINARY_DIR}/crtm-config.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/crtm-config-version.cmake"
DESTINATION ${CRTM_INSTALL_PREFIX}/cmake/${PROJECT_NAME})
DESTINATION ${CRTM_INSTALL_PREFIX}/lib/cmake/${PROJECT_NAME})

# Install the export set for use with the install-tree (unchanged, with modified destination)
install(EXPORT ${PROJECT_NAME}-config
FILE "${PROJECT_NAME}-targets.cmake"
DESTINATION ${CRTM_INSTALL_PREFIX}/cmake/${PROJECT_NAME})
DESTINATION ${CRTM_INSTALL_PREFIX}/lib/cmake/${PROJECT_NAME})

# For build-tree linkage (unchanged from original)
export(EXPORT ${PROJECT_NAME}-config
Expand Down
9 changes: 0 additions & 9 deletions CRTM_V30_TEST/ADA.TLAD.test_failure_report

This file was deleted.

46 changes: 0 additions & 46 deletions CRTM_V30_TEST/README_CRTM_V3.0_test

This file was deleted.

Loading