Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Development
OpenFOAM-plus
Commits
40fc8462
Commit
40fc8462
authored
Sep 15, 2017
by
Andrew Heather
Browse files
ENH: coordSet - added protection for the 'distance' option
parent
50f56503
Changes
2
Hide whitespace changes
Inline
Side-by-side
src/fileFormats/coordSet/coordSet.C
View file @
40fc8462
...
...
@@ -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_
<<
end
l
<<
end
l
<<
"
\t
(coord)"
os
<<
"name:"
<<
name_
<<
" axis:"
<<
coordFormatNames_
[
axis_
]
<<
n
l
<<
n
l
<<
"
\t
(coord)"
<<
endl
;
for
All
(
*
this
,
sampleI
)
for
(
const
point
&
pt
:
*
this
)
{
os
<<
'\t'
<<
operator
[](
sampleI
)
<<
endl
;
os
<<
'\t'
<<
pt
<<
endl
;
}
return
os
;
...
...
src/fileFormats/coordSet/coordSet.H
View file @
40fc8462
...
...
@@ -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
;
};
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment