Mercurial > hg > octave-nkf
diff src/DLD-FUNCTIONS/dasrt.cc @ 3997:d4091aff6468
[project @ 2002-07-17 18:00:06 by jwe]
author | jwe |
---|---|
date | Wed, 17 Jul 2002 18:00:07 +0000 |
parents | a41827ec5677 |
children | f6df65db67f9 |
line wrap: on
line diff
--- a/src/DLD-FUNCTIONS/dasrt.cc +++ b/src/DLD-FUNCTIONS/dasrt.cc @@ -234,7 +234,7 @@ } \ while (0) -DEFUN_DLD (dasrt, args, , +DEFUN_DLD (dasrt, args, nargout, "-*- texinfo -*-\n\ @deftypefn {Loadable Function} {[@var{x}, @var{xdot}, @var{t}] =} dasrt (@var{fj} [, @var{g}], @var{x_0}, @var{xdot_0}, @var{t_out} [, @var{t_crit}])\n\ Solve a system of differential/algebraic equations with functional\n\ @@ -442,9 +442,6 @@ dae.copy (dasrt_opts); - if (error_state) - DASRT_ABORT1 ("something is wrong"); - if (crit_times_set) output = dae.integrate (out_times, crit_times); else @@ -452,14 +449,26 @@ if (! error_state) { - retval(2) = output.times (); - retval(1) = output.deriv (); - retval(0) = output.state (); - } - else - { - DASRT_ABORT1("something wicked has occurred!"); - // print_usage ("dasrt"); + std::string msg = dae.error_message (); + + retval(4) = msg; + retval(3) = static_cast<double> (dae.integration_state ()); + + if (dae.integration_ok ()) + { + retval(2) = output.times (); + retval(1) = output.deriv (); + retval(0) = output.state (); + } + else + { + retval(2) = Matrix (); + retval(1) = Matrix (); + retval(0) = Matrix (); + + if (nargout < 4) + error ("dasrt: %s", msg.c_str ()); + } } unwind_protect::run_frame ("Fdasrt");