Commit 40fc8462 authored by Andrew Heather's avatar Andrew Heather
Browse files

ENH: coordSet - added protection for the 'distance' option

parent 50f56503
......@@ -3,7 +3,7 @@
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2016 OpenFOAM Foundation
\\/ M anipulation |
\\/ M anipulation | Copyright (C) 2017 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
......@@ -41,6 +41,21 @@ Foam::coordSet::coordFormatNames_
};
// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
void Foam::coordSet::checkDimensions() const
{
if (size() != curveDist_.size())
{
FatalErrorInFunction
<< "Size of points and curve distance must be the same" << nl
<< " points size : " << size()
<< " curve size : " << curveDist_.size()
<< abort(FatalError);
}
}
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
Foam::coordSet::coordSet
......@@ -68,49 +83,61 @@ Foam::coordSet::coordSet
name_(name),
axis_(coordFormatNames_[axis]),
curveDist_(curveDist)
{}
{
checkDimensions();
}
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
bool Foam::coordSet::hasVectorAxis() const
{
return axis_ == XYZ;
return axis_ == coordFormat::XYZ;
}
Foam::scalar Foam::coordSet::scalarCoord
(
const label index
) const
Foam::scalar Foam::coordSet::scalarCoord(const label index) const
{
const point& p = operator[](index);
if (axis_ == X)
{
return p.x();
}
else if (axis_ == Y)
switch (axis_)
{
return p.y();
}
else if (axis_ == Z)
{
return p.z();
}
else if (axis_ == DISTANCE)
{
// Use distance to reference point
return curveDist_[index];
}
else
{
FatalErrorInFunction
<< "Illegal axis specification " << axis_
<< " for sampling line " << name_
<< exit(FatalError);
return 0;
case coordFormat::X:
{
return p.x();
}
case coordFormat::Y:
{
return p.y();
}
case coordFormat::Z:
{
return p.z();
}
case coordFormat::DISTANCE:
{
// Note: If this has been constructed from the 'name' and 'axis'
// constructor the curveDist list will not have been set
if (curveDist_.empty())
{
FatalErrorInFunction
<< "Axis type '" << coordFormatNames_[axis_]
<< "' requested but curve distance has not been set"
<< abort(FatalError);
}
return curveDist_[index];
}
default:
{
FatalErrorInFunction
<< "Illegal axis specification '" << coordFormatNames_[axis_]
<< "' for sampling line " << name_
<< exit(FatalError);
return 0;
}
}
}
......@@ -125,14 +152,14 @@ Foam::point Foam::coordSet::vectorCoord(const label index) const
Foam::Ostream& Foam::coordSet::write(Ostream& os) const
{
os << "name:" << name_ << " axis:" << axis_
<< endl
<< endl << "\t(coord)"
os << "name:" << name_ << " axis:" << coordFormatNames_[axis_]
<< nl
<< nl << "\t(coord)"
<< endl;
forAll(*this, sampleI)
for (const point& pt : *this)
{
os << '\t' << operator[](sampleI) << endl;
os << '\t' << pt << endl;
}
return os;
......
......@@ -3,7 +3,7 @@
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration |
\\ / A nd | Copyright (C) 2011-2012 OpenFOAM Foundation
\\/ M anipulation |
\\/ M anipulation | Copyright (C) 2017 OpenCFD Ltd.
-------------------------------------------------------------------------------
License
This file is part of OpenFOAM.
......@@ -45,7 +45,7 @@ namespace Foam
{
/*---------------------------------------------------------------------------*\
Class coordSet Declaration
Class coordSet Declaration
\*---------------------------------------------------------------------------*/
class coordSet
......@@ -58,7 +58,7 @@ public:
// Public data types
//- Enumeration defining the output format for coordinates
enum coordFormat
enum class coordFormat
{
XYZ,
X,
......@@ -73,6 +73,9 @@ private:
//- String representation of coordFormat enums
static const Enum<coordFormat> coordFormatNames_;
//- Check for consistent dimensions of points and curve distance
void checkDimensions() const;
protected:
......@@ -91,11 +94,8 @@ public:
// Constructors
//- Construct from components
coordSet
(
const word& name,
const word& axis
);
// Note: curveDist will be empty
coordSet(const word& name, const word& axis);
//- Construct from components
......@@ -126,6 +126,13 @@ public:
return curveDist_;
}
//- Set cumulative distance
void setCurveDist(const scalarList& curveDist)
{
curveDist_ = curveDist;
checkDimensions();
}
//- Is axis specification a vector
bool hasVectorAxis() const;
......@@ -136,6 +143,7 @@ public:
//- Get point according to axis="xyz" specification
vector vectorCoord(const label index) const;
//- Write to stream
Ostream& write(Ostream& os) const;
};
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment