# HG changeset patch # User Eugenio Gianniti # Date 1403728358 -7200 # Node ID 958a0e0e8102c6147cbf631864569199cc8ad644 # Parent 0f14cdbcaed3f0e58823025385fb36ca710f2860 interpolate.cc: catch exception if interpolation fails diff -r 0f14cdbcaed3 -r 958a0e0e8102 src/interpolate.cc --- a/src/interpolate.cc Wed Jun 25 20:36:04 2014 +0200 +++ b/src/interpolate.cc Wed Jun 25 22:32:38 2014 +0200 @@ -18,6 +18,7 @@ #include "coefficient.h" #include "function.h" #include "functionspace.h" +#include DEFUN_DLD (interpolate, args, nargout, "-*- texinfo -*-\n\ @deftypefn {Function File} @var{interp} = \ @@ -86,10 +87,17 @@ if (! error_state) { - output->interpolate (u0.get_fun ()); - if (name.empty ()) - name = u0.get_str (); - retval = new function (name, output); + try { output->interpolate (u0.get_fun ()); } + catch (std::runtime_error &) + { + error ("unable to interpolate on this function space"); + } + if (! error_state) + { + if (name.empty ()) + name = u0.get_str (); + retval = new function (name, output); + } } } else if (args(0+offset).type_id () == @@ -100,10 +108,17 @@ if (! error_state) { - output->interpolate (* u0.get_expr ()); - if (name.empty ()) - name = u0.get_str (); - retval = new function (name, output); + try { output->interpolate (* u0.get_expr ()); } + catch (std::runtime_error &) + { + error ("unable to interpolate on this function space"); + } + if (! error_state) + { + if (name.empty ()) + name = u0.get_str (); + retval = new function (name, output); + } } } else @@ -127,10 +142,17 @@ if (! error_state) { - output->interpolate (u1.get_fun ()); - if (name.empty ()) - name = u1.get_str (); - retval = new function (name, output); + try { output->interpolate (u1.get_fun ()); } + catch (std::runtime_error &) + { + error ("unable to interpolate on this function space"); + } + if (! error_state) + { + if (name.empty ()) + name = u1.get_str (); + retval = new function (name, output); + } } } else if (args(0+offset).type_id () == @@ -141,10 +163,17 @@ if (! error_state) { - output->interpolate (* u1.get_expr ()); - if (name.empty ()) - name = u1.get_str (); - retval = new function (name, output); + try { output->interpolate (* u1.get_expr ()); } + catch (std::runtime_error &) + { + error ("unable to interpolate on this function space"); + } + if (! error_state) + { + if (name.empty ()) + name = u1.get_str (); + retval = new function (name, output); + } } } else