CLUBB_core routinely declares a dummy with no intent -- `LG_2005_ansatz` (skx_module) declares its output `Skx` as `real( kind = core_rknd ), dimension(ngrdcol,nz) :: Skx`; `lin_interp_between_grids` (interpolation) declares its three array inputs the same way. The frontend records `UNKNOWN` and `differential.bitexact` refuses: `argument(s) skx have UNKNOWN intent; this verifier ...`. The extension carries an `intent_overrides` table for now.
The engine already computes what every subprogram reads and writes (`effects`, what `static.rwset` compares). A dummy with no declared intent that the body only reads is `IN`; one it writes before reading is `OUT`; one it reads and writes is `INOUT`. Recording the inferred intent in `Facts.provenance` (as `intent_overrides` already is) keeps it an assumption a reader can see.
Found 2026-09-03 on the recast-clubb tier-0 units.
CLUBB_core routinely declares a dummy with no intent -- `LG_2005_ansatz` (skx_module) declares its output `Skx` as `real( kind = core_rknd ), dimension(ngrdcol,nz) :: Skx`; `lin_interp_between_grids` (interpolation) declares its three array inputs the same way. The frontend records `UNKNOWN` and `differential.bitexact` refuses: `argument(s) skx have UNKNOWN intent; this verifier ...`. The extension carries an `intent_overrides` table for now.
The engine already computes what every subprogram reads and writes (`effects`, what `static.rwset` compares). A dummy with no declared intent that the body only reads is `IN`; one it writes before reading is `OUT`; one it reads and writes is `INOUT`. Recording the inferred intent in `Facts.provenance` (as `intent_overrides` already is) keeps it an assumption a reader can see.
Found 2026-09-03 on the recast-clubb tier-0 units.