/*---------------------------------------------------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation
\\/ M anipulation |
-------------------------------------------------------------------------------
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::ensightPart
Description
Base class for ensightPartCells and ensightPartFaces
SourceFiles
ensightPart.C
ensightPartIO.C
ensightPartTemplates.C
\*---------------------------------------------------------------------------*/
#ifndef ensightPart_H
#define ensightPart_H
#include "ensightFile.H"
#include "ensightGeoFile.H"
#include "typeInfo.H"
#include "labelList.H"
#include "polyMesh.H"
#include "Field.H"
#include "IOPtrList.H"
#include "IOstream.H"
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
namespace Foam
{
/*---------------------------------------------------------------------------*\
Class ensightPart Declaration
\*---------------------------------------------------------------------------*/
class ensightPart
{
// Private data
// Static data members
static const List elemTypes_;
protected:
// Protected data
//- Part number
label number_;
//- Part name (or description)
string name_;
//- Simple labelList with a name
labelListList elemLists_;
//- Start offset for elemLists_
label offset_;
//- Number of elements in this part
label size_;
//- Cell or face data
bool isCellData_;
//- Material id (numeric)
label matId_;
//- pointField referenced
const pointField& points_;
// Protected Classes
//- Track the points used by the part and map global to local indices
class localPoints
{
public:
//- Number of points used
label nPoints;
//- Map global to local indices
labelList list;
//- Null constructor
localPoints()
:
nPoints(0),
list(0)
{}
//- Construct for mesh points
localPoints(const pointField& pts)
:
nPoints(0),
list(pts.size(), -1)
{}
};
// Protected Member Functions
//- Reconstruct part characteristics (eg, element types) from Istream
// A part reconstructed in this manner can be used when writing fields,
// but cannot be used to write a new geometry
void reconstruct(Istream&);
//- Check for fully defined fields
bool isFieldDefined(const List&) const;
//- Write the part header
void writeHeader(ensightFile&, bool withDescription=false) const;
//- Write a scalar field for idList
// A null reference for idList writes the perNode values
void writeFieldList
(
ensightFile& os,
const List& field,
const labelUList& idList
) const;
//- Track points used
virtual localPoints calcLocalPoints() const
{
return localPoints();
}
//- Write connectivities
virtual void writeConnectivity
(
ensightGeoFile&,
const word& key,
const labelUList& idList,
const labelUList& pointMap
) const
{}
public:
//- Runtime type information
TypeName("ensightPart");
// Constructors
//- Construct null
ensightPart();
//- Construct empty part with number and description
ensightPart(label partNumber, const string& partDescription);
//- Construct part with number, description and points reference
ensightPart
(
label partNumber,
const string& partDescription,
const pointField& points
);
//- Construct as copy
ensightPart(const ensightPart&);
// Selectors
// Declare run-time constructor selection table
declareRunTimeSelectionTable
(
autoPtr,
ensightPart,
istream,
(
Istream& is
),
(is)
);
//- Construct and return clone
autoPtr clone() const
{
return autoPtr(new ensightPart(*this));
};
//- Reconstruct part characteristics on freestore from Istream
// \sa reconstruct
static autoPtr New(Istream&);
//- Destructor
virtual ~ensightPart();
// Static members
virtual const List& elementTypes() const
{
return elemTypes_;
}
// Access
//- Number of elements in this part
label size() const
{
return size_;
}
//- Represents cell data
bool isCellData() const
{
return isCellData_;
}
//- Represents face data
bool isFaceData() const
{
return !isCellData_;
}
//- Part number
label number() const
{
return number_;
}
//- Part name or description
const string& name() const
{
return name_;
}
//- Material id
label materialId() const
{
return matId_;
}
//- non-const access to part name or description
void name(const string& value)
{
name_ = value;
}
//- non-const access to material id
void materialId(const label value)
{
matId_ = value;
}
//- Simple labelList with a name
const labelListList& elemLists() const
{
return elemLists_;
}
//- Offset for element ids
label offset() const
{
return offset_;
}
// Edit
//- Renumber elements
void renumber(const labelUList&);
//- Write summary information about the object
bool writeSummary(Ostream&) const;
//- Write reconstruction information for the object
bool writeData(Ostream&) const;
//- Write geometry
virtual void writeGeometry(ensightGeoFile&) const
{}
//- Helper: write geometry given the pointField
void writeGeometry(ensightGeoFile&, const pointField&) const;
//- Write scalar field
// optionally write data per node
void writeScalarField
(
ensightFile&,
const List& field,
const bool perNode = false
) const;
//- Write vector field components
// optionally write data per node
void writeVectorField
(
ensightFile&,
const List& field0,
const List& field1,
const List& field2,
const bool perNode = false
) const;
//- Write generalized field components
// optionally write data per node
template
void writeField
(
ensightFile&,
const Field&,
const bool perNode = false
) const;
// Member Operators
//- Disallow default bitwise assignment
void operator=(const ensightPart&)
{
NotImplemented;
}
// IOstream Operators
//- Write data (reconstruction information)
friend Ostream& operator<<(Ostream&, const ensightPart&);
//- Write geometry
friend ensightGeoFile& operator<<(ensightGeoFile&, const ensightPart&);
};
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
} // End namespace Foam
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#ifdef NoRepository
# include "ensightPartTemplates.C"
#endif
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
#endif
// ************************************************************************* //