# HG changeset patch # User Eugenio Gianniti # Date 1407484379 -7200 # Node ID 6b37560b7cbbfb1e0713093a182f110033745ecb # Parent 0b9dc516ba36d9d888535b6f7c65523b026a41e9 Add save method for mesh diff -r 0b9dc516ba36 -r 6b37560b7cbb src/Makefile.in --- a/src/Makefile.in Fri Aug 08 09:55:16 2014 +0200 +++ b/src/Makefile.in Fri Aug 08 09:52:59 2014 +0200 @@ -35,6 +35,7 @@ Function.oct \ save_func.oct \ save_mf.oct \ + save_mesh.oct \ assemble.oct \ assemble_system.oct \ plot_func.oct \ @@ -117,6 +118,12 @@ save_mf.o: save_mf.cc meshfunction.h CPPFLAGS=$(CPPFLAGS) $(MKOCTFILE) -c $< -o $@ +save_mesh.oct: save_mesh.o mkmesh + CPPFLAGS=$(CPPFLAGS) $(MKOCTFILE) $< -o ./@mesh/save.oct $(LIBS) + +save_mesh.o: save_mesh.cc mesh.h + CPPFLAGS=$(CPPFLAGS) $(MKOCTFILE) -c $< -o $@ + mkfunction: mkdir -p @function diff -r 0b9dc516ba36 -r 6b37560b7cbb src/save_mesh.cc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/save_mesh.cc Fri Aug 08 09:52:59 2014 +0200 @@ -0,0 +1,73 @@ +/* + Copyright (C) 2014 Eugenio Gianniti + + 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 . +*/ + +#include "mesh.h" + +DEFUN_DLD (save, args, nargout, "-*- texinfo -*-\n\ +@deftypefn {Function File} \ +save (@var{Mesh}, @var{Name})\n\ +Save a mesh in XDMF format.\n\ +The input parameters are\n\ +@itemize @bullet \n\ +@item @var{Mesh} is the mesh 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{Mesh, plot}\n\ +@end deftypefn") +{ + int nargin = args.length (); + octave_value retval; + + if (nargin < 2 || nargin > 2 || nargout > 1) + print_usage (); + else + { + if (! mesh_type_loaded) + { + mesh::register_type (); + mesh_type_loaded = true; + mlock (); + } + + if (args(0).type_id () == mesh::static_type_id () && + args(1).is_string ()) + { + mesh const & msh_arg = + static_cast (args(0).get_rep ()); + std::string str = args(1).string_value (); + + if (!error_state) + { + dolfin::Mesh const & msh = msh_arg.get_msh (); + str += ".xdmf"; + try + { + dolfin::File file (str); + file << msh; + } + catch (std::runtime_error &) + { error ("error saving mesh"); } + retval = 0; + } + } + else + error ("invalid input arguments"); + } + + return retval; +}