FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
0054 — Legacy SundialsExtra keys jtype, nonlin_type, lin_type give a misleading ERK error
ID 0054
Class BUG
Severity 1
Status ready

Models: —

Found: 2026-10-20 architecture review (a406e955); owner ruled "default ok" on the whole plan 2026-10-20

Source plan: plans/arch-2026-10-20/not-implemented/f9-sundials-solver-plan.md (workspace fhsim_workspace)

Kind: Behaviour change (error text of an already rejected input); test first. Take when passing; rides with: F9 items below, or a small own feature in src/engine/integrator/.

Evidence

src/engine/integrator/sundials/SundialsOptionApplier.cpp:397-406, in SundialsOptionApplier::ApplyExtras. The final else of the key chain is reached by every <SundialsExtra> key that no earlier branch matched, whatever the solver:

} else {
if (pair.first == "jtype") {
printer->ReportError("jtype is not a valid option for ARKODE with ERK");
} else if (pair.first == "nonlin_type") {
printer->ReportError("nonlin_type is not a valid option for ARKODE with ERK");
} else if (pair.first == "lin_type") {
printer->ReportError("lin_type is not a valid option for ARKODE with ERK");

The branch does not test cvodeMemory, arkodeMemory or erkMemory. The three keys are read nowhere else in src/ (‘grep -rnE 'jtype|nonlin_type|lin_type’ srchits only these lines and the local variablejtypein FhIntegratorSundials.cpp:368, which is a SUNMatrix id). The solver and linear solver come from the integrator attributes (ParseSundialsLinearSolver,IntegratorConfigFactory.cpp:97-105), not from<SundialsExtra>`.

Effect

A user who puts one of these keys in <SundialsExtra> of a CVODES run is told it is "not a valid option for ARKODE with ERK", although the run is not ARKODE or ERK. The input is rejected (ReportError) either way; only the text misleads.

Possible fix

Owner default (F9-Q1, ruled "default ok"): drop the three branches so the keys fall to unknown CVODE/ARKODE option: <key>. The alternative is to fix the text only.

Test that would prove it

A unit test of ApplyExtras with a CVODE-only memory and the key jtype: expect the message unknown CVODE/ARKODE option: jtype. Write it first; it is red on the current text.

Risk

Low. Only inputs that are already rejected get another message. Check that no test or example expects the old text. The XML attribute jtype of the integrator (alias of jac_type, tests/integrator/methods/ODE_test.cpp:35) is a different thing and stays.