Mercurial > fem-fenics-eugenio
diff src/save_mf.cc @ 259:598c5e9e0a9e
Add utilities for meshfunction
* src/save_mf.cc: save meshfunction to .xml
* src/MeshFunction.cc: import meshfunction from .xml
* src/meshfunction.h: add print method
author | Eugenio Gianniti <eugenio.gianniti@mail.polimi.it> |
---|---|
date | Wed, 06 Aug 2014 16:48:25 +0200 |
parents | |
children | 0b9dc516ba36 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/save_mf.cc Wed Aug 06 16:48:25 2014 +0200 @@ -0,0 +1,74 @@ +/* + Copyright (C) 2014 Eugenio Gianniti <eugenio.gianniti@mail.polimi.it> + + This program is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free Software + Foundation; either version 3 of the License, or (at your option) any later + version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + details. + + You should have received a copy of the GNU General Public License along with + this program; if not, see <http://www.gnu.org/licenses/>. +*/ + +#include "meshfunction.h" + +DEFUN_DLD (save, args, nargout, "-*- texinfo -*-\n\ +@deftypefn {Function File} \ +save (@var{MeshFunction}, @var{Name})\n\ +Save a meshfunction in XDMF format.\n\ +The input parameters are\n\ +@itemize @bullet \n\ +@item @var{MeshFunction} is the meshfunction that you want to save\n\ +@item @var{Name} is a string for the output name\n\ +@end itemize\n\ +The output is a .xdmf file.\n\ +@seealso{plot, MeshFunction}\n\ +@end deftypefn") +{ + int nargin = args.length (); + octave_value retval; + + if (nargin < 2 || nargin > 2 || nargout > 1) + print_usage (); + else + { + if (! meshfunction_type_loaded) + { + meshfunction::register_type (); + meshfunction_type_loaded = true; + mlock (); + } + + if (args(0).type_id () == meshfunction::static_type_id () && + args(1).is_string ()) + { + meshfunction const & mf_arg = + static_cast<meshfunction const &> (args(0).get_rep ()); + std::string str = args(1).string_value (); + + if (!error_state) + { + dolfin::MeshFunction <std::size_t> const & + mf = mf_arg.get_mf (); + str += ".xdmf"; + try + { + dolfin::File file (str); + file << mf; + } + catch (std::runtime_error &) + { error ("error saving meshfunction"); } + retval = 0; + } + } + else + error ("invalid input arguments"); + } + + return retval; +}