@@ -92,7 +92,7 @@ namespace AnalysisManager
9292 retval = IDASetId (solver_, tag_);
9393 checkOutput (retval, " IDASetId" );
9494
95- setIDAOptions (solver_, time_step_, rel_tol_, abs_tol_override_, max_steps_);
95+ setIDAOptions (solver_, time_step_, rel_tol_, abs_tol_override_, max_steps_, suppress_alg_ );
9696
9797 // Set up linear solver
9898 return this ->configureLinearSolver ();
@@ -535,7 +535,12 @@ namespace AnalysisManager
535535 retval = IDAInitB (solver_, backwardID_, this ->adjointResidual , tf, yyB_, ypB_);
536536 checkOutput (retval, " IDAInitB" );
537537
538- setIDAOptions (IDAGetAdjIDABmem (solver_, backwardID_), backward_time_step_, backward_rel_tol_, backward_abs_tol_override_, backward_max_steps_);
538+ setIDAOptions (IDAGetAdjIDABmem (solver_, backwardID_),
539+ backward_time_step_,
540+ backward_rel_tol_,
541+ backward_abs_tol_override_,
542+ backward_max_steps_,
543+ backward_suppress_alg_);
539544
540545 retval = IDASetUserDataB (solver_, backwardID_, model_);
541546 checkOutput (retval, " IDASetUserDataB" );
@@ -1168,6 +1173,35 @@ namespace AnalysisManager
11681173 backward_quadrature_abs_tol_override_ = abs_tol_override;
11691174 }
11701175
1176+ /* *
1177+ * @brief Set whether IDA suppresses local error tests on algebraic variables
1178+ *
1179+ * @param suppress If true, algebraic variables are excluded from IDA's
1180+ * local error test
1181+ * @tparam ScalarT Scalar data type
1182+ * @tparam IdxT Index data type
1183+ */
1184+ template <class ScalarT , typename IdxT>
1185+ void Ida<ScalarT, IdxT>::setSuppressAlgebraicErrors(bool suppress)
1186+ {
1187+ suppress_alg_ = suppress;
1188+ }
1189+
1190+ /* *
1191+ * @brief Set whether IDA suppresses local error tests on algebraic
1192+ * variables for the backward simulation
1193+ *
1194+ * @param suppress If true, algebraic variables are excluded from IDA's
1195+ * local error test
1196+ * @tparam ScalarT Scalar data type
1197+ * @tparam IdxT Index data type
1198+ */
1199+ template <class ScalarT , typename IdxT>
1200+ void Ida<ScalarT, IdxT>::setBackwardSuppressAlgebraicErrors(bool suppress)
1201+ {
1202+ backward_suppress_alg_ = suppress;
1203+ }
1204+
11711205 /* *
11721206 * @brief Set the maximum number of steps
11731207 *
@@ -1204,6 +1238,8 @@ namespace AnalysisManager
12041238 * absolute tolerance for the nonlinear solver rather than the
12051239 * model's default absolute tolerance
12061240 * @param max_steps The maximum number of steps
1241+ * @param suppress_alg If true, algebraic variables are excluded from IDA's
1242+ * local error test
12071243 * @tparam ScalarT Scalar data type
12081244 * @tparam IdxT Index data type
12091245 */
@@ -1212,7 +1248,8 @@ namespace AnalysisManager
12121248 ScalarT time_step,
12131249 ScalarT rel_tol,
12141250 ScalarT abs_tol_override,
1215- IdxT max_steps)
1251+ IdxT max_steps,
1252+ bool suppress_alg)
12161253 {
12171254 int retval = 0 ;
12181255 retval = IDASetMinStep (mem, time_step);
@@ -1221,6 +1258,8 @@ namespace AnalysisManager
12211258 checkOutput (retval, " IDASetMaxStep" );
12221259 retval = IDASetMaxNumSteps (mem, static_cast <long int >(max_steps));
12231260 checkOutput (retval, " IDASetMaxNumSteps" );
1261+ retval = IDASetSuppressAlg (mem, suppress_alg ? SUNTRUE : SUNFALSE );
1262+ checkOutput (retval, " IDASetSuppressAlg" );
12241263
12251264 if (time_step == 0 )
12261265 {
0 commit comments