Thermal calculation: source and capture review

11 September 2026 · CALMET 6.5.0, release 150223 · Retained 1 June 2023 episode

The capture records the temperatures, incoming convective mixing height and stability gradient actually consumed by the exercised calculation. It establishes which operations the model performs. It does not establish that those operations represent local atmospheric stability accurately. The thermal findings report the comparison with archived native profiles.

This review applies to the unchanged 5 km and 10 km terrain configurations, with 201 × 201 active cells, ten layers and 24 intervals. The relevant controls are IPROG=14, ITPROG=2, IUPT=-1, ISURFT=-1, ITWPROG=1 and ZUPT=200 m. Other options can follow different paths. Line locators below refer to the retained, uninstrumented calmet.for in the provider’s CALMET 6.5.0 source distribution; the user guide supplies broader model context.

Order Source locator Exercised operation
1 5458; 12635–12646; 12704–12709 The initial SURFVAR(IALL=2) initializes TEMP2D to 288 K. It does not yet copy the prognostic temperature.
2 5508–5515; 22333–22337; 22384–22387 RDMM5 prepares TPROG for the interval endpoint, then CGAMMA2 consumes it and the incoming ZICONV. RDMM5 updates TPROG, not TEMP2D directly.
3 5609–5610; 12704–12709 A second SURFVAR(IALL=0) copies current TPROG(:,:,1) to TEMP2D. Thus the temperature available to blocking is the current prepared 10 m layer.
4 5643–5644; 7385–7400 FRADJ consumes that temperature and GAMMA for its terrain-blocking calculation.
5 5669 A further surface-temperature call follows blocking. It is not the origin of the captured pre-blocking temperature.

The hourly interval labels identify fixed PST, UTC−8. The native-data operator targets the interval end, using its actual date and seconds fields. Consequently the 24 intervals starting 00:00–23:00 PST use endpoints from 1 June 09:00 UTC through 2 June 08:00 UTC. These are endpoint states, not hourly temperature averages. The capture preserves the raw begin/end identifiers, seconds and time-step counters.

At these layer centres, CGAMMA2 interpolates 200 m temperature from the 120 m and 230 m values, then subtracts the 10 m temperature and divides by 190 m. If incoming ZICONV ≥ 200 m, it instead assigns GAMMA = −0.0098 K/m (3351–3375). Domain averaging under IUPT=-2 is inactive (3384–3392). The incoming mixing height is initialized at model start and subsequently carries earlier mixing-height processing; it is not a new, simultaneous independent measurement (3653; 4688–4716).

For the exercised surface-temperature option, the stability quantity in FRADJ is 9.8 × (GAMMA + 0.01) / TEMP2D (7348, 7357, 7385–7400). The override therefore gives a small positive value rather than exact zero. This is the source’s dry-static surrogate; it is not a moisture-aware measurement of buoyancy frequency.

The native preparation uses heights above each native column’s own terrain, performs vertical preparation there, and then combines neighbouring columns. Below-first-level preparation can use day/night and thermal-history rules (21582–21583; 21755–21928; 22080–22094). Common absolute-height sampling is a different operator. Their difference can combine vertical reference, extrapolation, history, sampling and arithmetic effects; it does not isolate a pure terrain error. The capture does not expose every internal native preprocessing state.

Independent pre-run review verified that only three recording calls and three output helpers were added. Removing those additions restores every original calmet.for byte; all 41 other source/include files match the baseline. Model arguments are read-only, shared model state is not assigned, and only private recording counters and file state change. Arrays use active extents, with west-to-east indices varying fastest. Both completed replays subsequently produced CALMET.DAT files byte-identical to their retained originals. These checks support an output-only interpretation of the capture; the separate independent numerical review also passed its reconstruction and table checks.

The preserved review has a wording addendum: 24 interval samples correspond to 102, 49 and 73 physical Fortran records in the pre-calculation, gradient and pre-blocking-temperature files respectively. The addendum also corrects an omitted surface-temperature call: the second, post-reader/pre-blocking call supplies current TPROG layer 1. Neither clarification changes source code or binary layout.

The four reported contributions form a declared, order-dependent algebraic decomposition, not uniquely isolated physical causes. Zero override contribution at the selected cell and time addresses its current proxy only; it does not exclude history or effects elsewhere on the resulting wind. Complete comparison support is restricted to the shared four-neighbour, four-height subset. It does not cover the 13 reference locations or justify community-wide extrapolation. Printing envelopes address precision alone; they do not validate temperatures, wind, plume rise or exposure.

For audit identification, the uninstrumented source SHA-256 is fc7fda7cb7e7932f67eb0ce1fb94f1d81a2084063a1dbf797b3270b460b7ee6f; the recording source is 7871642b8dc5a4ef70efb2aaaa68e01f6cbb90a50ec10509157b10822d121a24. The final schema SHA-256 is 6fca6a5526f5fbc07f8d16e98ec110399914d7fdbcfbbda50c9f225077ba7ca7. The declared protocol binds the cases and comparison rules. Provider source and manuals are linked, not republished here.