Mercurial > fem-fenics-eugenio
diff src/Function.cc @ 119:4b8b705e22a7
Added new output messagging and changed index convvenction for extracting
a Function: now start from 1.
author | gedeone-octave <marcovass89@hotmail.it> |
---|---|
date | Sun, 01 Sep 2013 23:14:28 +0200 |
parents | d03627091414 |
children | 9486cbdc0a2e |
line wrap: on
line diff
--- a/src/Function.cc Sun Sep 01 22:47:21 2013 +0200 +++ b/src/Function.cc Sun Sep 01 23:14:28 2013 +0200 @@ -4,8 +4,11 @@ DEFUN_DLD (Function, args, , "-*- texinfo -*-\n\ @deftypefn {Function File} {[@var{func}]} = \ -fem_func (@var{name}, @var{Functional Space}, @var{Vector})\n\ -The input parameters are\n\ +Function (@var{name}, @var{Functional Space} or @var{Function},\ +@var{Vector} or @var{index})\n\ +These function can be used in two ways\n\ +@itemize @bullet \n\ +@item To create a function from a vector. In this case, the arguments are:\n\ @itemize @bullet \n\ @item @var{name} is a string representing the name of the function\n\ @item @var{Functional Space} is the fem-fenics functional space where\ @@ -13,6 +16,14 @@ @item @var{Vector} contains the value of the coefficients\ for the basis functions of @var{Functional Space}\n\ @end itemize\n\ +@item To extract a scalar field from a vectorial one\n\ +@itemize @bullet \n\ +@item @var{name} is a string representing the name of the function\n\ +@item @var{Function} is the vector valued Function\n\ +@item @var{Index} contains the index of the scalar field to extract.\ +Index starts from 1. \n\ +@end itemize\n\ +@end itemize \n\ The output @var{func} is an object which contain a representation of the\ function @var{Vector} which can be plotted or saved.\n\ @seealso{fem_plot, fem_save}\n\ @@ -20,7 +31,7 @@ { int nargin = args.length (); - octave_value retval=0; + octave_value retval; if (nargin < 3 || nargin > 3) print_usage (); @@ -55,6 +66,7 @@ error ("The size of the functional space and of the vector must agree"); else { + std::cout <<"creating function from vector..."<< std::endl; dolfin::Vector du(myu.length ()); for (std::size_t i = 0; i < myu.length (); ++i) du.setitem (i, myu(i)); @@ -78,11 +90,17 @@ const boost::shared_ptr<const dolfin::Function> & f = fspo.get_pfun (); if (f->value_rank () < 1) - error ("The function you provided isn't a vecotr field"); + error ("Function: The function you provided isn't a vecotr field"); else { - boost::shared_ptr <const dolfin::Function> u (new dolfin::Function((*f)[idx])); - retval = new function (str, u); + std::cout <<"Extracting function..."<< std::endl; + if (idx < 1 || idx > f->value_dimension (0)) + error ("Function: index out of bounds"); + else + { + boost::shared_ptr <const dolfin::Function> u (new dolfin::Function((*f)[idx - 1])); + retval = new function (str, u); + } } } }