20260226 Provide a better error message for attempts to reuse a loopdummy as a dummy. Example: with param p{1..3}; for{i in 1..2}{ let {i in 1..3} p[i] := Uniform01(); display p; } in file "foo", the invocation "ampl foo" now gives syntax error: attempt to reuse loopdummy as dummy context: let {i in >>> 1..3} <<< p[i] := Uniform01(); instead of just foo, line 3 (offset 39): syntax error context: let {i >>> in <<< 1..3} p[i] := Uniform01(); Fix an obscure bug in determining which variables are used nonlinearly. Previously model hs114.mod option solver conopt, linelim 0; solve; gave CONOPT 3.17A: variable _svar[10]: Nonlinear variable does not appear in Hessian. CONOPT error: Status not called. (with an older version of conopt). Now it gives CONOPT 3.17A: Locally optimal; objective -1768.806964 14 iterations; evals: nf = 25, ng = 15, nc = 122, nJ = 15, nH = 0, nHv = 0 New option keep_dv_eqn (default 0). When $keep_dv_eqn is 1, a defined variable declaration is separated in a variable declaration and a constraint that the variable should have the specified value. For example, var x = y^2 + exp(z); is treated as var x; s.t. =x: x == y^2 + exp(z); The name of the constraint "=x" appears in the *.row file if $auxfiles mentions "r" and appears in solexpand output but cannot be used in commands. By experimenting with 0 and 1 values of options keep_dv_eqn, linelim, and substout, one may find settings that work well for a particular problem and solver.