Saturation-Adjustment
- WSM6SaturationAdjustment
model
atmospheric_dynamics
wsm6
Saturation adjustment of cloud water in the WRF single-moment 6-class microphysics scheme (WSM6; Hong and Lim 2006), transcribed from the pcond block at the end of each sub-time step of mp_wsm6_run (phys/physics_mmm/mp_wsm6.F90, WRF 4.8, NCAR/MMM-physics; the statement function conden and the loop labelled 'pcond: condensational/evaporational rate of cloud water [HL A46] [RH83 A6]'). After every process rate has been applied and the hydrometeors have fallen, the kernel recomputes the saturation mixing ratio OVER WATER from the updated temperature and vapor (the inlined fpvs block, water branch only -- ice saturation plays no part here, whatever the temperature) and removes the remaining super- or sub-saturation with the one-step Newton (Asai 1965; Rutledge and Hobbs 1983 eq. A6) increment dq = (qv - qsat) / (1 + L^2 qsat / (r_v cpm T^2)), the linearisation of the Clausius-Clapeyron feedback of the latent heating on qsat. Condensation (dq > 0) is capped by the available vapor, evaporation (dq < 0) happens only where cloud water exists and is capped by the cloud water present, so that a layer that dries out loses all its cloud (the kernel then pads qc <= qmin to 0). The latent heat L and the moist heat capacity cpm are the START-OF-CALL values (EqWeFiC FORTRAN_BUGS.md note N4), so they are inputs here (saturation.esm xl, cpm); the saturation state at the adjusted temperature comes from saturation.esm mounted as subsystem `sat` on the same inputs. This is an INSTANTANEOUS ADJUSTMENT, not a rate: WSM6 applies the whole increment dq once per sub-step and stores pcond = dq/dtcld only for bookkeeping, so the stored 'rate' scales with 1/dtcld (EqWeFiC FORTRAN_BUGS.md note N3) and a small-dt replay of the kernel is meaningless for it. The model therefore exposes (i) the adjusted target state T*, qv*, qc* and the applied increment dq_applied, which are step-free and are what the tests check against the kernel, (ii) pcond = dq_applied/dtcld as the kernel reports it, and (iii) the relaxation-rate form pcond_relax = dq_adj/tau with an adjustment time tau as a parameter: for tau = dtcld it reproduces the kernel's unlimited rate, and a continuous model that cannot take an instantaneous step would use this form with a physical tau (a few seconds to tens of seconds) as the condensation tendency. Layer index `lev` (WRF k, layer 1 at the surface), pointwise, no grid geometry. Consumer-supplied inputs are the REWRITE-TARGET ops input_T, input_qv, input_p (read by the `sat` subsystem and re-exported), input_qc, input_xl and input_cpm, lowered in the inline tests through a per-test expression_template_imports library extracted from kernel dumps of the instrumented WRF fork ctessum-claude/WRF, commit e42a269 (v4.8.0-2-ge42a269e) (esm-spec 6.6 admits scalar overrides only). EqWeFiC, cited here for FORTRAN_BUGS.md and couplings/, is https://github.com/EarthSciML/EqWeFiC, where these components were developed and are coupled into a WRF column.