libMesh
Loading...
Searching...
No Matches
namebased_io.C
Go to the documentation of this file.
1// The libMesh Finite Element Library.
2// Copyright (C) 2002-2026 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// Local includes
20#include "libmesh/libmesh_logging.h"
21#include "libmesh/mesh_base.h"
22#include "libmesh/mesh_communication.h"
23#include "libmesh/namebased_io.h"
24#include "libmesh/dyna_io.h"
25#include "libmesh/exodusII_io.h"
26#include "libmesh/gmv_io.h"
27#include "libmesh/tecplot_io.h"
28#include "libmesh/tetgen_io.h"
29#include "libmesh/ucd_io.h"
30#include "libmesh/unv_io.h"
31#include "libmesh/utility.h"
32#include "libmesh/matlab_io.h"
33#include "libmesh/off_io.h"
34#include "libmesh/medit_io.h"
35#include "libmesh/nemesis_io.h"
36#include "libmesh/gmsh_io.h"
37#include "libmesh/fro_io.h"
38#include "libmesh/stl_io.h"
39#include "libmesh/xdr_io.h"
40#include "libmesh/vtk_io.h"
41#include "libmesh/abaqus_io.h"
42#include "libmesh/checkpoint_io.h"
43#include "libmesh/equation_systems.h"
44#include "libmesh/enum_xdr_mode.h"
45#include "libmesh/parallel.h" // broadcast
46
47// C++ includes
48#include <iomanip>
49#include <fstream>
50#include <vector>
51
52#ifdef LIBMESH_HAVE_UNISTD_H
53#include <sys/types.h>
54#include <unistd.h> // for getpid() on Unix
55#endif
56
57#ifdef LIBMESH_HAVE_PROCESS_H
58#include <process.h> // for getpid() on Windows
59#endif
60
61
62namespace libMesh
63{
64
65
66
67// ------------------------------------------------------------
68// NameBasedIO members
69void NameBasedIO::read (const std::string & name)
70{
72
73 const std::string_view basename = Utility::basename_of(name);
74
77
78 // See if the file exists. Perform this check on all processors
79 // so that the code is terminated properly in the case that the
80 // file does not exist.
81
82 // For Nemesis files, the name we try to read will have suffixes
83 // identifying processor rank
84 if (ends_with(basename, ".nem") || ends_with(basename, ".n"))
85 {
86 std::ostringstream full_name;
87
88 // Find the length of a string which represents the highest processor ID
89 full_name << (mymesh.n_processors());
90 int field_width = cast_int<int>(full_name.str().size());
91
92 // reset the string stream
93 full_name.str("");
94
95 // And build up the full filename
96 full_name << name
97 << '.' << mymesh.n_processors()
98 << '.' << std::setfill('0') << std::setw(field_width) << mymesh.processor_id();
99
100 std::ifstream in (full_name.str().c_str());
101 libmesh_error_msg_if(!in.good(), "ERROR: cannot locate specified file:\n\t" << full_name.str());
102 }
103 else if (contains(basename, ".cp")) {} // Do error checking in the reader
104 else
105 {
106 std::ifstream in (name.c_str());
107 libmesh_error_msg_if(!in.good(), "ERROR: cannot locate specified file:\n\t" << name);
108 }
109
110 // Look for parallel formats first
111 if (is_parallel_file_format(basename))
112 {
113 // no need to handle bz2 files here -- the Xdr class does that.
114 if (contains(basename, ".xda") ||
115 contains(basename, ".xdr"))
116 {
117 XdrIO xdr_io(mymesh);
118
119 // .xda* ==> bzip2/gzip/ASCII flavors
120 if (contains(basename, ".xda"))
121 {
122 xdr_io.binary() = false;
123 xdr_io.read (name);
124 }
125 else // .xdr* ==> true binary XDR file
126 {
127 xdr_io.binary() = true;
128 xdr_io.read (name);
129 }
130
131 // The xdr_io object gets constructed with legacy() == false.
132 // if legacy() == true then it means that a legacy file was detected and
133 // thus processor 0 performed the read. We therefore need to broadcast the
134 // mesh. Further, for this flavor of mesh solution data ordering is tied
135 // to the node ordering, so we better not reorder the nodes!
136 if (xdr_io.legacy())
137 {
138 mymesh.allow_renumbering(false);
140 }
141
142 // libHilbert-enabled libMesh builds should construct files
143 // with a canonical node ordering, which libHilbert-enabled
144 // builds will be able to read in again regardless of any
145 // renumbering. So in that case we're free to renumber.
146 // However, if either the writer or the reader of this file
147 // don't have libHilbert, then we'll have to skip
148 // renumbering because we need the numbering to remain
149 // consistent with any solution file we read in next.
150#ifdef LIBMESH_HAVE_LIBHILBERT
151 // if (!xdr_io.libhilbert_ordering())
152 // skip_renumber_nodes_and_elements = true;
153#else
154 mymesh.allow_renumbering(false);
155#endif
156 }
157 else if (contains(basename, ".nem") ||
158 contains(basename, ".n"))
159 Nemesis_IO(mymesh).read (name);
160 else if (contains(basename, ".cp"))
161 {
162 if (contains(basename, ".cpa"))
163 CheckpointIO(mymesh, false).read(name);
164 else
165 CheckpointIO(mymesh, true).read(name);
166 }
167 }
168
169 // Serial mesh formats
170 else
171 {
172 // Read the file based on extension. Only processor 0
173 // needs to read the mesh. It will then broadcast it and
174 // the other processors will pick it up
175 if (mymesh.processor_id() == 0)
176 {
177 LOG_SCOPE("read()", "NameBasedIO");
178
179 std::ostringstream pid_suffix;
180 pid_suffix << '_' << getpid();
181 // Nasty hack for reading/writing zipped files
182 std::string new_name = name;
183 if (ends_with(name, ".bz2"))
184 {
185#ifdef LIBMESH_HAVE_BZIP
186 new_name.erase(new_name.end() - 4, new_name.end());
187 new_name += pid_suffix.str();
188 std::string system_string = "bunzip2 -f -k -c ";
189 system_string += name + " > " + new_name;
190 LOG_SCOPE("system(bunzip2)", "NameBasedIO");
191 if (std::system(system_string.c_str()))
192 libmesh_file_error(system_string);
193#else
194 libmesh_error_msg("ERROR: need bzip2/bunzip2 to open .bz2 file " << name);
195#endif
196 }
197 else if (ends_with(name, ".xz"))
198 {
199#ifdef LIBMESH_HAVE_XZ
200 new_name.erase(new_name.end() - 3, new_name.end());
201 new_name += pid_suffix.str();
202 std::string system_string = "xz -f -d -k -c ";
203 system_string += name + " > " + new_name;
204 LOG_SCOPE("system(xz -d)", "XdrIO");
205 if (std::system(system_string.c_str()))
206 libmesh_file_error(system_string);
207#else
208 libmesh_error_msg("ERROR: need xz to open .xz file " << name);
209#endif
210 }
211
212 if (contains(basename, ".mat"))
213 MatlabIO(mymesh).read(new_name);
214
215 else if (contains(basename, ".ucd"))
216 UCDIO(mymesh).read (new_name);
217
218 else if (contains(basename, ".off") ||
219 contains(basename, ".ogl") ||
220 contains(basename, ".oogl"))
221 OFFIO(mymesh).read (new_name);
222
223 else if (contains(basename, ".unv"))
224 UNVIO(mymesh).read (new_name);
225
226 else if (contains(basename, ".node") ||
227 contains(basename, ".ele"))
228 TetGenIO(mymesh).read (new_name);
229
230 else if (contains(basename, ".exd") ||
231 contains(basename, ".exo") ||
232 contains(basename, ".e"))
233 ExodusII_IO(mymesh).read (new_name);
234
235 else if (contains(basename, ".msh"))
236 GmshIO(mymesh).read (new_name);
237
238 else if (contains(basename, ".gmv"))
239 GMVIO(mymesh).read (new_name);
240
241 else if (contains(basename, ".stl"))
242 STLIO(mymesh).read (new_name);
243
244 else if (contains(basename, ".pvtu") ||
245 contains(basename, ".vtu"))
246 VTKIO(mymesh).read(new_name);
247
248 else if (contains(basename, ".inp"))
249 AbaqusIO(mymesh).read(new_name);
250
251 else if (contains(basename, ".bext") ||
252 contains(basename, ".bxt"))
253 DynaIO(mymesh).read (new_name);
254
255 else if (contains(basename, ".bez"))
256 DynaIO(mymesh, false).read (new_name);
257
258 else
259 {
260 libmesh_error_msg(" ERROR: Unrecognized file extension: " \
261 << name \
262 << "\n I understand the following:\n\n" \
263 << " *.bext -- Bezier files in DYNA format\n" \
264 << " *.bez -- Bezier DYNA files, omit spline nodes\n" \
265 << " *.bxt -- Bezier files in DYNA format\n" \
266 << " *.cpa -- libMesh Checkpoint ASCII format\n" \
267 << " *.cpr -- libMesh Checkpoint binary format\n" \
268 << " *.e -- Sandia's ExodusII format\n" \
269 << " *.exo -- Sandia's ExodusII format\n" \
270 << " *.gmv -- LANL's General Mesh Viewer format\n" \
271 << " *.inp -- Abaqus .inp format\n" \
272 << " *.mat -- Matlab triangular ASCII file\n" \
273 << " *.n -- Sandia's Nemesis format\n" \
274 << " *.nem -- Sandia's Nemesis format\n" \
275 << " *.off -- OOGL OFF surface format\n" \
276 << " *.ogl -- OOGL OFF surface format\n" \
277 << " *.oogl -- OOGL OFF surface format\n" \
278 << " *.pvtu -- Paraview VTK format\n" \
279 << " *.stl -- STereoLithography triangulation format\n" \
280 << " *.ucd -- AVS's ASCII UCD format\n" \
281 << " *.unv -- I-deas Universal format\n" \
282 << " *.vtu -- Paraview VTK format\n" \
283 << " *.xda -- libMesh ASCII format\n" \
284 << " *.xdr -- libMesh binary format\n" \
285 << " *.gz -- any above format gzipped\n" \
286 << " *.bz2 -- any above format bzip2'ed\n" \
287 << " *.xz -- any above format xzipped\n" \
288 );
289 }
290
291 // If we temporarily decompressed a file, remove the
292 // uncompressed version
293 if (ends_with(basename, ".bz2"))
294 std::remove(new_name.c_str());
295 if (ends_with(basename, ".xz"))
296 std::remove(new_name.c_str());
297 }
298
299 // Send the mesh & bcs (which are now only on processor 0) to the other
300 // processors
301 MeshCommunication().broadcast (mymesh);
302 }
303}
304
305
306void NameBasedIO::write (const std::string & name)
307{
308 const MeshBase & mymesh = MeshOutput<MeshBase>::mesh();
309
310 const std::string_view basename = Utility::basename_of(name);
311
312 using Utility::contains;
313 using Utility::ends_with;
314
315 // parallel formats are special -- they may choose to write
316 // separate files, let's not try to handle the zipping here.
317 if (is_parallel_file_format(basename))
318 {
319 // no need to handle bz2 files here -- the Xdr class does that.
320 if (contains(basename, ".xda"))
321 XdrIO(mymesh).write(name);
322
323 else if (contains(basename, ".xdr"))
324 XdrIO(mymesh,true).write(name);
325
326 else if (contains(basename, ".nem") ||
327 contains(basename, ".n"))
328 Nemesis_IO(mymesh).write(name);
329
330 else if (contains(basename, ".cpa"))
331 CheckpointIO(mymesh,false).write(name);
332
333 else if (contains(basename, ".cpr"))
334 CheckpointIO(mymesh,true).write(name);
335
336 else
337 libmesh_error_msg("Couldn't deduce filetype for " << name);
338 }
339
340 // serial file formats
341 else
342 {
343 // Nasty hack for reading/writing zipped files
344 std::string new_name = name;
345 int pid_0 = 0;
346 if (mymesh.processor_id() == 0)
347 pid_0 = getpid();
348 mymesh.comm().broadcast(pid_0);
349 std::ostringstream pid_suffix;
350 pid_suffix << '_' << pid_0;
351
352 if (ends_with(name, ".bz2"))
353 {
354 new_name.erase(new_name.end() - 4, new_name.end());
355 new_name += pid_suffix.str();
356 }
357 else if (ends_with(name, ".xz"))
358 {
359 new_name.erase(new_name.end() - 3, new_name.end());
360 new_name += pid_suffix.str();
361 }
362
363 // New scope so that io will close before we try to zip the file
364 {
365 // Write the file based on extension
366 if (contains(basename, ".dat"))
367 TecplotIO(mymesh).write (new_name);
368
369 else if (contains(basename, ".plt"))
370 TecplotIO(mymesh,true).write (new_name);
371
372 else if (contains(basename, ".ucd"))
373 UCDIO (mymesh).write (new_name);
374
375 else if (contains(basename, ".gmv"))
376 if (mymesh.n_partitions() > 1)
377 GMVIO(mymesh).write (new_name);
378 else
379 {
380 GMVIO io(mymesh);
381 io.partitioning() = false;
382 io.write (new_name);
383 }
384
385 else if (contains(basename, ".exd") ||
386 contains(basename, ".exo") ||
387 contains(basename, ".e"))
388 ExodusII_IO(mymesh).write(new_name);
389
390 else if (contains(basename, ".unv"))
391 UNVIO(mymesh).write (new_name);
392
393 else if (contains(basename, ".mesh"))
394 MEDITIO(mymesh).write (new_name);
395
396 else if (contains(basename, ".poly"))
397 TetGenIO(mymesh).write (new_name);
398
399 else if (contains(basename, ".msh"))
400 GmshIO(mymesh).write (new_name);
401
402 else if (contains(basename, ".fro"))
403 FroIO(mymesh).write (new_name);
404
405 else if (contains(basename, ".pvtu"))
406 VTKIO(mymesh).write (name);
407
408 else if (contains(basename, ".stl"))
409 STLIO(mymesh).write (new_name);
410
411 else
412 {
414 << " ERROR: Unrecognized file extension: " << name
415 << "\n I understand the following:\n\n"
416 << " *.cpa -- libMesh ASCII checkpoint format\n"
417 << " *.cpr -- libMesh binary checkpoint format,\n"
418 << " *.dat -- Tecplot ASCII file\n"
419 << " *.e -- Sandia's ExodusII format\n"
420 << " *.exo -- Sandia's ExodusII format\n"
421 << " *.fro -- ACDL's surface triangulation file\n"
422 << " *.gmv -- LANL's GMV (General Mesh Viewer) format\n"
423 << " *.mesh -- MEdit mesh format\n"
424 << " *.msh -- GMSH ASCII file\n"
425 << " *.n -- Sandia's Nemesis format\n"
426 << " *.nem -- Sandia's Nemesis format\n"
427 << " *.plt -- Tecplot binary file\n"
428 << " *.poly -- TetGen ASCII file\n"
429 << " *.pvtu -- VTK (paraview-readable) format\n"
430 << " *.stl -- STereoLithography triangulation format\n" \
431 << " *.ucd -- AVS's ASCII UCD format\n"
432 << " *.unv -- I-deas Universal format\n"
433 << " *.xda -- libMesh ASCII format\n"
434 << " *.xdr -- libMesh binary format,\n"
435 << std::endl
436 << "\n Exiting without writing output\n";
437 }
438 }
439
440 // Nasty hack for reading/writing zipped files
441 if (ends_with(basename, ".bz2"))
442 {
443 LOG_SCOPE("system(bzip2)", "NameBasedIO");
444 if (mymesh.processor_id() == 0)
445 {
446 std::string system_string = "bzip2 -f -c ";
447 system_string += new_name + " > " + name;
448 if (std::system(system_string.c_str()))
449 libmesh_file_error(system_string);
450 std::remove(new_name.c_str());
451 }
452 mymesh.comm().barrier();
453 }
454 if (ends_with(basename, ".xz"))
455 {
456 LOG_SCOPE("system(xz)", "NameBasedIO");
457 if (mymesh.processor_id() == 0)
458 {
459 std::string system_string = "xz -f -c ";
460 system_string += new_name + " > " + name;
461 if (std::system(system_string.c_str()))
462 libmesh_file_error(system_string);
463 std::remove(new_name.c_str());
464 }
465 mymesh.comm().barrier();
466 }
467 }
468}
469
470
471void NameBasedIO::write_nodal_data (const std::string & name,
472 const std::vector<Number> & v,
473 const std::vector<std::string> & vn)
474{
475 const MeshBase & mymesh = MeshOutput<MeshBase>::mesh();
476
477 using Utility::contains;
478 using Utility::ends_with;
479
480 // Write the file based on extension
481 if (contains(name, ".dat"))
482 TecplotIO(mymesh).write_nodal_data (name, v, vn);
483
484 else if (contains(name, ".exd") ||
485 contains(name, ".exo") ||
486 contains(name, ".e"))
487 ExodusII_IO(mymesh).write_nodal_data(name, v, vn);
488
489 else if (contains(name, ".gmv"))
490 {
491 if (mymesh.n_subdomains() > 1)
492 GMVIO(mymesh).write_nodal_data (name, v, vn);
493 else
494 {
495 GMVIO io(mymesh);
496 io.partitioning() = false;
497 io.write_nodal_data (name, v, vn);
498 }
499 }
500
501 else if (contains(name, ".mesh"))
502 MEDITIO(mymesh).write_nodal_data (name, v, vn);
503
504 else if (contains(name, ".msh"))
505 GmshIO(mymesh).write_nodal_data (name, v, vn);
506
507 else if (contains(name, ".nem") ||
508 contains(name, ".n"))
509 Nemesis_IO(mymesh).write_nodal_data(name, v, vn);
510
511 else if (contains(name, ".plt"))
512 TecplotIO(mymesh,true).write_nodal_data (name, v, vn);
513
514 else if (contains(name, ".pvtu"))
515 VTKIO(mymesh).write_nodal_data (name, v, vn);
516
517 else if (contains(name, ".ucd"))
518 UCDIO (mymesh).write_nodal_data (name, v, vn);
519
520 else
521 {
523 << " ERROR: Unrecognized file extension: " << name
524 << "\n I understand the following:\n\n"
525 << " *.dat -- Tecplot ASCII file\n"
526 << " *.e -- Sandia's ExodusII format\n"
527 << " *.exo -- Sandia's ExodusII format\n"
528 << " *.gmv -- LANL's GMV (General Mesh Viewer) format\n"
529 << " *.mesh -- MEdit mesh format\n"
530 << " *.msh -- GMSH ASCII file\n"
531 << " *.n -- Sandia's Nemesis format\n"
532 << " *.nem -- Sandia's Nemesis format\n"
533 << " *.plt -- Tecplot binary file\n"
534 << " *.pvtu -- Paraview VTK file\n"
535 << " *.ucd -- AVS's ASCII UCD format\n"
536 << "\n Exiting without writing output\n";
537 }
538}
539
540
541void NameBasedIO::write_equation_systems (const std::string & filename,
542 const EquationSystems & es,
543 const std::set<std::string> * system_names)
544{
545 // XDA/XDR require a separate code path, and currently only support
546 // writing complete restarts
547 if (!system_names)
548 {
549 const std::string_view basename =
550 Utility::basename_of(filename);
551
552 if (Utility::contains(basename, ".xda"))
553 {
554 es.write(filename,WRITE,
557 return;
558 }
559 else if (Utility::contains(basename, ".xdr"))
560 {
561 es.write(filename,ENCODE,
564 return;
565 }
566 }
567
568 // Other formats just use the default "write nodal values" path
570 (filename, es, system_names);
571}
572
573
574bool NameBasedIO::is_parallel_file_format(std::string_view name)
575{
576 using Utility::contains;
577 using Utility::ends_with;
578 return (contains(name, ".xda") || contains(name, ".xdr") ||
579 ends_with(name, ".nem") || ends_with(name, ".n") ||
580 contains(name, ".cp"));
581}
582
583
584} // namespace libMesh
void broadcast(T &data, const unsigned int root_id=0, const bool identical_sizes=false) const
The AbaqusIO class is a preliminary implementation for reading Abaqus mesh files in ASCII format.
Definition abaqus_io.h:42
virtual void read(const std::string &name) override
This method implements reading a mesh from a specified file.
Definition abaqus_io.C:227
The CheckpointIO class can be used to write simplified restart files that can be used to restart simu...
virtual void read(const std::string &input_name) override
This method implements reading a mesh from a specified file.
virtual void write(const std::string &name) override
This method implements writing a mesh to a specified file.
Reading and writing meshes in (a subset of) LS-DYNA format.
Definition dyna_io.h:53
virtual void read(const std::string &name) override
Reads in a mesh in the Dyna format from the ASCII file given by name.
Definition dyna_io.C:139
This is the EquationSystems class.
void write(std::string_view name, const XdrMODE, const unsigned int write_flags=(WRITE_DATA), bool partition_agnostic=true) const
Write the systems to disk using the XDR data format.
The ExodusII_IO class implements reading meshes in the ExodusII file format from Sandia National Labs...
Definition exodusII_io.h:53
virtual void write(const std::string &fname) override
This method implements writing a mesh to a specified file.
virtual void read(const std::string &name) override
This method implements reading a mesh from a specified file.
virtual void write_nodal_data(const std::string &, const std::vector< Number > &, const std::vector< std::string > &) override
Write out a nodal solution.
This class implements writing meshes in the .fro format used by the MIT ACDL.
Definition fro_io.h:43
virtual void write(const std::string &) override
This method implements writing a mesh to a specified file.
Definition fro_io.C:41
This class implements writing meshes in the GMV format.
Definition gmv_io.h:48
bool & partitioning()
Flag indicating whether or not to write the partitioning information for the mesh.
Definition gmv_io.h:107
virtual void write(const std::string &) override
This method implements writing a mesh to a specified file.
Definition gmv_io.C:271
virtual void read(const std::string &mesh_file) override
This method implements reading a mesh from a specified file.
Definition gmv_io.C:1866
virtual void write_nodal_data(const std::string &, const std::vector< Number > &, const std::vector< std::string > &) override
This method implements writing a mesh with nodal data to a specified file where the nodal data and va...
Definition gmv_io.C:281
Reading and writing meshes in the Gmsh format.
Definition gmsh_io.h:53
virtual void write(const std::string &name) override
This method implements writing a mesh to a specified file in the Gmsh *.msh format.
Definition gmsh_io.C:909
virtual void read(const std::string &name) override
Reads in a mesh in the Gmsh *.msh format from the ASCII file given by name.
Definition gmsh_io.C:149
virtual void write_nodal_data(const std::string &, const std::vector< Number > &, const std::vector< std::string > &) override
This method implements writing a mesh with nodal data to a specified file where the nodal data and va...
Definition gmsh_io.C:926
This class implements writing meshes in the mesh format used by the MEdit visualization tool develope...
Definition medit_io.h:48
virtual void write(const std::string &) override
This method implements writing a mesh to a specified ".mesh" file.
Definition medit_io.C:37
virtual void write_nodal_data(const std::string &, const std::vector< Number > &, const std::vector< std::string > &) override
This method implements writing a mesh with nodal data to a specified file where the nodal data and va...
Definition medit_io.C:46
This class implements reading meshes in the Matlab PDE toolkit in a proprietary format.
Definition matlab_io.h:86
virtual void read(const std::string &name) override
Reads in a matlab data file based on the string you pass it.
Definition matlab_io.C:33
This is the MeshBase class.
Definition mesh_base.h:81
void allow_renumbering(bool allow)
If false is passed in then this mesh will no longer be renumbered when being prepared for use.
Definition mesh_base.h:1355
unsigned int n_partitions() const
Definition mesh_base.h:1526
subdomain_id_type n_subdomains() const
Definition mesh_base.C:1190
This is the MeshCommunication class.
void broadcast(MeshBase &) const
This method takes a mesh (which is assumed to reside on processor 0) and broadcasts it to all the oth...
virtual void write_equation_systems(const std::string &, const EquationSystems &, const std::set< std::string > *system_names=nullptr)
This method implements writing a mesh with data to a specified file where the data is taken from the ...
Definition mesh_output.C:31
const MT & mesh() const
bool is_parallel_file_format(std::string_view filename)
virtual void write_equation_systems(const std::string &filename, const EquationSystems &es, const std::set< std::string > *system_names=nullptr) override
This method implements writing a mesh with data to a specified file where the data is taken from the ...
virtual void read(const std::string &mesh_file) override
This method implements reading a mesh from a specified file.
virtual void write_nodal_data(const std::string &, const std::vector< Number > &, const std::vector< std::string > &) override
This method implements writing a mesh with nodal data to a specified file where the nodal data and va...
virtual void write(const std::string &mesh_file) override
This method implements writing a mesh to a specified file.
The Nemesis_IO class implements reading parallel meshes in the Nemesis file format from Sandia Nation...
Definition nemesis_io.h:54
virtual void read(const std::string &base_filename) override
Implements reading the mesh from several different files.
Definition nemesis_io.C:215
virtual void write_nodal_data(const std::string &fname, const std::vector< Number > &soln, const std::vector< std::string > &names) override
Output a nodal solution from data in soln.
virtual void write(const std::string &base_filename) override
This method implements writing a mesh to a specified file.
This class is responsible for reading an unstructured, triangulated surface in the standard OFF OOGL ...
Definition off_io.h:40
virtual void read(const std::string &name) override
Reads in an OFF OOGL data file based on the string you pass it.
Definition off_io.C:35
processor_id_type processor_id() const
const Parallel::Communicator & comm() const
processor_id_type n_processors() const
This class implements reading and writing triangle meshes in the STL format.
Definition stl_io.h:47
virtual void write(const std::string &) override
This method implements writing a mesh to a specified file.
Definition stl_io.C:81
virtual void read(const std::string &mesh_file) override
This method implements reading a mesh from a specified file.
Definition stl_io.C:165
This class implements writing meshes in the Tecplot format.
Definition tecplot_io.h:44
virtual void write(const std::string &) override
This method implements writing a mesh to a specified file.
Definition tecplot_io.C:174
virtual void write_nodal_data(const std::string &, const std::vector< Number > &, const std::vector< std::string > &) override
This method implements writing a mesh with nodal data to a specified file where the nodal data and va...
Definition tecplot_io.C:187
This class implements reading and writing meshes in the TetGen format.
Definition tetgen_io.h:49
virtual void write(const std::string &) override
This method implements writing a mesh to a specified ".poly" file.
Definition tetgen_io.C:270
virtual void read(const std::string &) override
This method implements reading a mesh from a specified file in TetGen format.
Definition tetgen_io.C:36
This class implements reading & writing meshes in the AVS's UCD format.
Definition ucd_io.h:46
virtual void write(const std::string &) override
This method implements writing a mesh to a specified file in UCD format.
Definition ucd_io.C:103
virtual void write_nodal_data(const std::string &fname, const std::vector< Number > &soln, const std::vector< std::string > &names) override
This method implements writing a mesh and solution to a specified file in UCD format.
Definition ucd_io.C:331
virtual void read(const std::string &) override
This method implements reading a mesh from a specified file in UCD format.
Definition ucd_io.C:82
The UNVIO class implements the Ideas UNV universal file format.
Definition unv_io.h:54
virtual void write(const std::string &) override
This method implements writing a mesh to a specified file.
Definition unv_io.C:257
virtual void read(const std::string &) override
This method implements reading a mesh from a specified file.
Definition unv_io.C:96
This class implements reading and writing meshes in the VTK format.
Definition vtk_io.h:62
virtual void write(const std::string &) override
Output the mesh without solutions to a .pvtu file.
virtual void write_nodal_data(const std::string &, const std::vector< Number > &, const std::vector< std::string > &) override
This method implements writing a mesh with nodal data to a specified file where the nodal data and va...
Definition vtk_io.C:353
virtual void read(const std::string &) override
This method implements reading a mesh from a specified file in VTK format.
Definition vtk_io.C:186
MeshIO class used for writing XDR (eXternal Data Representation) and XDA mesh files.
Definition xdr_io.h:54
bool binary() const
Get/Set the flag indicating if we should read/write binary.
Definition xdr_io.h:103
bool legacy() const
Get/Set the flag indicating if we should read/write legacy.
Definition xdr_io.h:109
virtual void write(const std::string &) override
This method implements writing a mesh to a specified file.
Definition xdr_io.C:127
virtual void read(const std::string &) override
This method implements reading a mesh from a specified file.
Definition xdr_io.C:1436
bool contains(std::string_view superstring, std::string_view substring)
Look for a substring within a string.
Definition utility.C:205
bool ends_with(std::string_view superstring, std::string_view suffix)
Look for a substring at the very end of a string.
Definition utility.C:213
std::string_view basename_of(const std::string &fullname)
Definition utility.C:108
The libMesh namespace provides an interface to certain functionality in the library.
OStreamProxy err