1 // The libMesh Finite Element Library. 2 // Copyright (C) 2002-2020 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner 3 4 // This library is free software; you can redistribute it and/or 5 // modify it under the terms of the GNU Lesser General Public 6 // License as published by the Free Software Foundation; either 7 // version 2.1 of the License, or (at your option) any later version. 8 9 // This library is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 // Lesser General Public License for more details. 13 14 // You should have received a copy of the GNU Lesser General Public 15 // License along with this library; if not, write to the Free Software 16 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 17 18 19 20 #ifndef LIBMESH_GNUPLOT_IO_H 21 #define LIBMESH_GNUPLOT_IO_H 22 23 // Local includes 24 #include "libmesh/mesh_output.h" 25 26 // C++ includes 27 #include <cstddef> 28 29 30 namespace libMesh 31 { 32 33 // forward declaration 34 class MeshBase; 35 36 /** 37 * This class implements writing meshes using GNUplot, designed for 38 * use only with 1D meshes. 39 * 40 * \author David Knezevic 41 * \date 2005 42 */ 43 class GnuPlotIO : public MeshOutput<MeshBase> 44 { 45 public: 46 47 /** 48 * Define enumerations to set plotting properties on construction 49 */ 50 enum PlottingProperties { GRID_ON = 1, 51 PNG_OUTPUT = 2}; 52 53 /** 54 * Constructor. Takes a reference to a constant mesh object. 55 * To set the properties, we input a bitwise OR of the 56 * GnuPlotIO::PlottingProperties enumerations, 57 * e.g. GnuPlotIO::GRID_ON | GnuPlotIO::PNG_OUTPUT 58 */ 59 explicit 60 GnuPlotIO (const MeshBase &, 61 const std::string & = std::string("FE 1D Solution"), 62 int properties=0); 63 64 /** 65 * Write the mesh to the specified file. 66 */ 67 virtual void write(const std::string &) override; 68 69 /** 70 * Bring in base class functionality for name resolution and to 71 * avoid warnings about hidden overloaded virtual functions. 72 */ 73 using MeshOutput<MeshBase>::write_nodal_data; 74 75 /** 76 * This method implements writing a mesh with nodal data to a 77 * specified file where the nodal data and variable names are provided. 78 */ 79 virtual void write_nodal_data (const std::string &, 80 const std::vector<Number> &, 81 const std::vector<std::string> &) override; 82 83 /** 84 * Set title of plot 85 */ set_title(const std::string & title)86 void set_title(const std::string & title) { _title = title; } 87 88 /** 89 * Turn grid on or off. 90 */ use_grid(bool grid)91 void use_grid(bool grid) { _grid = grid; } 92 93 94 /** 95 * Write output to a .png file using gnuplot 96 */ set_png_output(bool png_output)97 void set_png_output(bool png_output) { _png_output = png_output; } 98 99 /** 100 * GNUplot automatically adjusts the x and y-axes of 2D plots 101 * to "zoom in" on the data. You can set this string to force 102 * GNUplot to maintain a fixed set of axes. 103 * Example: axes_limits = "[0:1] [0:1]" would force x and y 104 * to be plotted on the range 0<=x<=1 and 0<=y<=1 regardless 105 * of where the data lie. 106 */ 107 std::string axes_limits; 108 109 private: 110 /** 111 * This method implements writing a mesh with nodal data to a 112 * specified file where the nodal data and variable names are optionally 113 * provided. This will write an ASCII file. 114 */ 115 void write_solution (const std::string &, 116 const std::vector<Number> * = nullptr, 117 const std::vector<std::string> * = nullptr); 118 119 std::string _title; 120 121 bool _grid; 122 bool _png_output; 123 }; 124 125 } // namespace libMesh 126 127 128 #endif // LIBMESH_GNUPLOT_IO_H 129