/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | www.openfoam.com
\\/ M anipulation |
-------------------------------------------------------------------------------
Copyright (C) 2011-2013 OpenFOAM Foundation
Copyright (C) 2019 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
OpenFOAM 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.
OpenFOAM 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 OpenFOAM. If not, see .
Class
Foam::graph
Description
Class to create, store and output qgraph files.
SourceFiles
graph.C
\*---------------------------------------------------------------------------*/
#ifndef Foam_graph_H
#define Foam_graph_H
#include "curve.H"
#include "HashPtrTable.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
// Forward Declaration
class graph;
Ostream& operator<<(Ostream&, const graph&);
/*---------------------------------------------------------------------------*\
Class graph Declaration
\*---------------------------------------------------------------------------*/
class graph
:
public HashPtrTable
{
// Private Data
string title_;
string xName_;
string yName_;
scalarField x_;
struct xy
{
scalar x_, y_;
// Friend Operators
friend bool operator==(const xy& a, const xy& b)
{
return equal(a.x_, b.x_) && equal(a.y_, b.y_);
}
friend bool operator!=(const xy& a, const xy& b)
{
return !(a == b);
}
friend Istream& operator>>(Istream& is, xy& xyd)
{
is >> xyd.x_ >> xyd.y_;
return is;
}
friend Ostream& operator<<(Ostream& os, const xy& xyd)
{
os << xyd.x_ << ' ' << xyd.y_;
return os;
}
};
// Private Member Functions
void readCurves(Istream&);
public:
// Constructors
//- Construct from title and labels (no curves)
graph
(
const string& title,
const string& xName,
const string& yName,
const scalarField& x
);
//- Construct from title, labels and y data for 1 curve
graph
(
const string& title,
const string& xName,
const string& yName,
const scalarField& x,
const scalarField& y
);
//- Construct from Istream given title and labels
graph
(
const string& title,
const string& xName,
const string& yName,
Istream& is
);
//- Construct from Istream
explicit graph(Istream& is);
// Member Functions
// Access
const string& title() const
{
return title_;
}
const string& xName() const
{
return xName_;
}
const string& yName() const
{
return yName_;
}
const scalarField& x() const
{
return x_;
}
scalarField& x()
{
return x_;
}
const scalarField& y() const;
scalarField& y();
// Limit the data for all axes based on x-limits
void setXRange(const scalar x0, const scalar x1);
// Write
//- Abstract base class for a graph writer
class writer
{
protected:
void writeXY
(
const scalarField& x,
const scalarField& y,
Ostream&
) const;
public:
//- Runtime type information
TypeName("writer");
//- Declare run-time constructor selection table
declareRunTimeSelectionTable
(
autoPtr,
writer,
word,
(),
()
);
// Selectors
//- Return a reference to the selected writer
static autoPtr New(const word& writeFormat);
// Constructors
//- Default construct
writer() = default;
//- Destructor
virtual ~writer() = default;
// Member Functions
//- The fileName extension for this graph format
virtual word ext() const = 0;
//- Write graph in appropriate format
virtual void write(const graph&, Ostream&) const = 0;
};
//- Write out graph data as a simple table
void writeTable(Ostream&) const;
//- Write graph to stream in given format
void write(Ostream&, const word& format) const;
//- Write graph to file in given path-name and format
void write(const fileName& pName, const word& format) const;
//- Write graph to file in given path, name and format
void write
(
const fileName& path,
const word& name,
const word& format
) const;
//- Helper function to convert string name into appropriate word
static word wordify(const string& sname);
// Friend Operators
//- Ostream Operator
friend Ostream& operator<<(Ostream&, const graph&);
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //