From cbe78046addc3ef08230887316c6590cb607a64f Mon Sep 17 00:00:00 2001 From: Spencer Bryngelson Date: Fri, 11 Sep 2026 22:46:06 -0500 Subject: [PATCH] Fix three doc-reference lint hits on master --- docs/documentation/contributing.md | 2 +- docs/documentation/gpuParallelization.md | 2 +- docs/documentation/testing.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/documentation/contributing.md b/docs/documentation/contributing.md index d42dc09e8..dd3c0f33c 100644 --- a/docs/documentation/contributing.md +++ b/docs/documentation/contributing.md @@ -217,7 +217,7 @@ Both human reviewers and AI code reviewers reference this section. ### Parameter Plumbing -- **Derived-type parameters are not auto-broadcast.** `generated_bcast.fpp` covers namelist *scalars* only. Each derived type (`chem_params`, `lag_params`, `rburn`) needs a hand-written `_emit_` in `toolchain/mfc/params/generators/fortran_gen.py` plus its call site in that generator's simulation branch, and, if it is read on device, an explicit `$:GPU_UPDATE(device='[name]')` in both the target's `m_global_parameters.fpp` and `src/simulation/m_start_up.fpp` — `GPU_DECLARE` alone does not make it device-resident. Regrouping existing scalars into a derived type silently drops their broadcast, leaving every non-root rank holding the `dflt_real` sentinel. Single-rank golden files cannot catch this, so pair such a change with a `ppn=2` test and confirm it fails without the emitter. +- **Derived-type parameters are not auto-broadcast.** `generated_bcast.fpp` covers namelist *scalars* only. Each derived type (`chem_params`, `lag_params`, `rburn`) needs a hand-written `_emit_` in `toolchain/mfc/params/generators/fortran_gen.py` plus its call site in that generator's simulation branch, and, if it is read on device, an explicit ``$:GPU_UPDATE(device='[name]')`` in both the target's `m_global_parameters.fpp` and `src/simulation/m_start_up.fpp` — `GPU_DECLARE` alone does not make it device-resident. Regrouping existing scalars into a derived type silently drops their broadcast, leaving every non-root rank holding the `dflt_real` sentinel. Single-rank golden files cannot catch this, so pair such a change with a `ppn=2` test and confirm it fails without the emitter. - **A `patch_ib` member that immersed-boundary ghost-point code reads must also be set in `s_add_cloud_particle`** (`src/simulation/m_particle_cloud.fpp`). `particle_cloud_ibs` is allocated without default initialization, and `s_reduce_ib_patch_array` copies the whole struct into `patch_ib`, overwriting the defaults assigned in `s_assign_default_values_to_user_inputs`. Anything left unset reaches the solver as uninitialized memory, and only where the allocation is not already zero-filled. A platform-only NaN is the signature of this class: a garbage `v_blow` once failed an AMD lane with `ICFL is NaN` while every NVIDIA lane and all local runs passed. - **Runtime checks go where they run.** Shared constraints belong in `src/common/m_checker_common.fpp`, simulation-only ones in `src/simulation/m_checker.fpp`, and pre- and post-process ones in their own `m_checker.fpp`. Those two `s_check_inputs` are currently empty; that is still the correct home for their checks, not `m_checker_common`. - **Analytic initial conditions are compiled into the binary** and their expressions are AST-validated at case load, so syntax errors and unknown variables surface immediately and by name. Each IC variable maps to an `eqn_idx` expression in `QPVF_IDX_VARS` (`toolchain/mfc/case.py`); adding a patch-settable conserved variable means updating that map and the Fortran `eqn_idx` builder together, because a mismatch is a silent wrong index. diff --git a/docs/documentation/gpuParallelization.md b/docs/documentation/gpuParallelization.md index 8b205715d..b559c17fe 100644 --- a/docs/documentation/gpuParallelization.md +++ b/docs/documentation/gpuParallelization.md @@ -874,7 +874,7 @@ answer is wrong, or one backend diverges from all the others. always use `GPU_PARALLEL_LOOP` / `END_GPU_PARALLEL_LOOP`. - **An array whose bound is a device global** (`dimension(num_fluids)`, `dimension(num_species)`) may be passed to a device routine from a parallel-loop body, - but **not from inside another `GPU_ROUTINE(parallelism='[seq]')`**. Cray OpenACC rejects + but **not from inside another ``GPU_ROUTINE(parallelism='[seq]')``**. Cray OpenACC rejects the second form with `ftn-7066 ... Global in accelerator routine without declare`, and reports it at whatever line it gave up on: remove one trigger and the message walks forward to the next call, so the reported line is not the cause. Only the plain lanes diff --git a/docs/documentation/testing.md b/docs/documentation/testing.md index be50883f7..b23e15231 100644 --- a/docs/documentation/testing.md +++ b/docs/documentation/testing.md @@ -92,7 +92,7 @@ If a trace is empty (that is, the empty string `""`), it will not appear in the Finally, the case is appended to the `cases` list, which will be returned by the `list_cases` function. -### Selection and Execution Pitfalls +### Selection and Execution Pitfalls {#selection-and-execution-pitfalls} Each of these fails quietly rather than loudly.