changeset 242:958a0e0e8102

interpolate.cc: catch exception if interpolation fails
author Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
date Wed, 25 Jun 2014 22:32:38 +0200
parents 0f14cdbcaed3
children e51dba005f87
files src/interpolate.cc
diffstat 1 files changed, 45 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- 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 <stdexcept>
 
 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