Loading...
Searching...
No Matches
gnuplotCoordSetWriterImpl.C
Go to the documentation of this file.
1/*---------------------------------------------------------------------------*\
2 ========= |
3 \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4 \\ / O peration |
5 \\ / A nd | www.openfoam.com
6 \\/ M anipulation |
7-------------------------------------------------------------------------------
8 Copyright (C) 2022 OpenCFD Ltd.
9-------------------------------------------------------------------------------
10License
11 This file is part of OpenFOAM.
12
13 OpenFOAM is free software: you can redistribute it and/or modify it
14 under the terms of the GNU General Public License as published by
15 the Free Software Foundation, either version 3 of the License, or
16 (at your option) any later version.
17
18 OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
19 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
20 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
21 for more details.
22
23 You should have received a copy of the GNU General Public License
24 along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
25
26\*---------------------------------------------------------------------------*/
27
28#include "IOmanip.H"
29#include "OFstream.H"
30#include "OSspecific.H"
31
32// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
33
34template<class Type>
35Foam::fileName Foam::coordSetWriters::gnuplotWriter::writeTemplate
36(
37 const word& fieldName,
38 const UPtrList<const Field<Type>>& fieldPtrs
39)
40{
41 if (coords_.size() != fieldPtrs.size())
42 {
44 << "Attempted to write field: " << fieldName
45 << " (" << fieldPtrs.size() << " entries) for "
46 << coords_.size() << " sets" << nl
47 << exit(FatalError);
48 }
49
51
52
53 // Field: rootdir/<TIME>/<field>_setName.gplt
54
55 fileName outputFile = getFieldPrefixedPath(fieldName, "gplt");
56
57 if (verbose_)
58 {
59 Info<< "Writing field " << fieldName;
60 Info<< " to " << outputFile << endl;
61 }
62
63 // Master only
64 {
65 if (!isDir(outputFile.path()))
66 {
67 mkDir(outputFile.path());
68 }
69
70 OFstream os(outputFile, streamOpt_);
71 os.precision(precision_);
72
73 os << "set term pngcairo" << nl
74 << "set output \"" << outputFile.stem() << ".png\"" << nl;
75
76 // Header
77 {
78 os << "plot \\" << nl;
79 os << " '-' title \"" << fieldName << "\" with lines";
80 os << nl << nl;
81 }
82
83 forAll(coords_, tracki)
84 {
85 writeTable(os, coords_[tracki], fieldPtrs[tracki], " \t");
86 }
87 os << "end_data" << nl << nl;
88 os << "# end plot" << nl;
89 }
90
91 wroteGeom_ = true;
92 return outputFile;
93}
94
95
96// ************************************************************************* //
Istream and Ostream manipulators taking arguments.
Functions used by OpenFOAM that are specific to POSIX compliant operating systems and need to be repl...
Generic templated field type that is much like a Foam::List except that it is expected to hold numeri...
Definition Field.H:172
Output to file stream as an OSstream, normally using std::ofstream for the actual output.
Definition OFstream.H:75
A list of pointers to objects of type <T>, without allocation/deallocation management of the pointers...
Definition UPtrList.H:101
bool wroteGeom_
Track if geometry has been written since the last open.
static void writeTable(Ostream &os, const coordSet &coords, const UList< Type > &values, const char *sep)
Write coordinates and values.
bool verbose_
Additional output verbosity.
UPtrList< const coordSet > coords_
Reference to coordinate set(s).
fileName getFieldPrefixedPath(const word &fieldName, const word &fileExt=word::null) const
Get field-prefixed output file name.
A class for handling file names.
Definition fileName.H:75
static std::string stem(const std::string &str)
Return the basename, without extension.
Definition fileName.C:391
static std::string path(const std::string &str)
Return directory path name (part before last /).
Definition fileNameI.H:169
A class for handling words, derived from Foam::string.
Definition word.H:66
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
Definition error.H:600
OBJstream os(runTime.globalPath()/outputName)
bool mkDir(const fileName &pathName, mode_t mode=0777)
Make a directory and return an error if it could not be created.
Definition POSIX.C:616
messageStream Info
Information stream (stdout output on master, null elsewhere).
Ostream & endl(Ostream &os)
Add newline and flush stream.
Definition Ostream.H:519
error FatalError
Error stream (stdout output on all processes), with additional 'FOAM FATAL ERROR' header text and sta...
errorManipArg< error, int > exit(error &err, const int errNo=1)
Definition errorManip.H:125
bool isDir(const fileName &name, const bool followLink=true)
Does the name exist as a DIRECTORY in the file system?
Definition POSIX.C:862
constexpr char nl
The newline '\n' character (0x0a).
Definition Ostream.H:50
#define forAll(list, i)
Loop across all elements in list.
Definition stdFoam.H:299