diff --git a/src/ExprNode.cc b/src/ExprNode.cc index 1da16358e50edc874c114cc3248ef935545f9fa6..09f409059e08851ac62209fd6f4d3c1cfa5c0601 100644 --- a/src/ExprNode.cc +++ b/src/ExprNode.cc @@ -2136,13 +2136,18 @@ UnaryOpNode::prepareForDerivation() preparedForDerivation = true; - arg->prepareForDerivation(); - - // Non-null derivatives are those of the argument (except for STEADY_STATE) - non_null_derivatives = arg->non_null_derivatives; - if (op_code == UnaryOpcode::steadyState || op_code == UnaryOpcode::steadyStateParamDeriv - || op_code == UnaryOpcode::steadyStateParam2ndDeriv) + /* Non-null derivatives are those of the argument (except for STEADY_STATE in + a dynamic context, in which case the potentially non-null derivatives are + all the parameters) */ + if ((op_code == UnaryOpcode::steadyState || op_code == UnaryOpcode::steadyStateParamDeriv + || op_code == UnaryOpcode::steadyStateParam2ndDeriv) + && datatree.isDynamic()) datatree.addAllParamDerivId(non_null_derivatives); + else + { + arg->prepareForDerivation(); + non_null_derivatives = arg->non_null_derivatives; + } } expr_t