The concept of grooves in PyRolL¶
The Generalized Groove¶
All elongation grooves can be traced back to a generalized elongation groove consisting of two straights and four radii. The geometry of this is shown below.
All geometric key values like cross-sections and perimeters can be calculated on this generalized groove. The
generalized groove is implemented in the GrooveBase
class, all special groove types are derived from that.
In the following the measures of the groove are listed, their names are used in source code and throughout the documentation. The radii and angles are numbered from outside to inside.
Symbol |
Description |
---|---|
\(r\) |
Radius |
\(\alpha\) |
Angle corresponding to a radius |
\(\beta\), \(\gamma\) |
Angles useful for coordinate calculation |
\(b_d\) |
Ground width |
\(b_d'\) |
Even ground width |
\(b_\mathrm{ks}\) |
Tip width |
\(b_\mathrm{kn}\) |
Usable width |
\(d\) |
Depth |
\(i\) |
Indent |
\(s\) |
Roll gap |
The coordinates of the points 1 to 12 shown in the figure can be calculated as follows, where the angles \(\beta = \alpha_4 - \alpha_3 / 2\) and \(\gamma = \frac{\pi}{2} - \alpha_2 - \alpha_3 + \alpha_4\).
number |
z |
y |
---|---|---|
1 |
\(z_2 + r_1 \tan \frac{\alpha_2}{2}\) |
\(0\) |
2 |
\(\frac{b_{kn}}{2}\) |
\(0\) |
3 |
\(z_1 - r_1 \sin \alpha_1\) |
\(r_1 \left( 1 - \cos \alpha_1 \right)\) |
4 |
\(z_{11} + r_2 \cos \gamma\) |
\(y_{11} + r_2 \sin \gamma\) |
5 |
\(z_{10} + r_3 \sin \left( \frac{\alpha_3}{2} - \beta \right)\) |
\(y_{10} + r_3 \cos \frac{\alpha_3}{2}\) |
6 |
\(z_8 + r_4 \sin \alpha_4\) |
\(y_8 - r_4 \sin \alpha_4\) |
7 |
\(\frac{b_d'}{2}\) |
\(d - i\) |
8 |
\(\frac{b_d'}{2}\) |
\(y_7 + r_4\) |
9 |
\(0\) |
\(y_7\) |
10 |
\(z_6 + r_3 \sin \left( \frac{\alpha_3}{2} + \beta \right)\) |
\(y_6 + r_3 \cos \left( \frac{\alpha_3}{2} + \beta \right)\) |
11 |
\(z_{10} + \left( r_3 - r_2 \right) \sin \left( \frac{\alpha_3}{2} - \beta \right)\) |
\(y_{10} + \left( r_3 - r_2 \right) \cos \left( \frac{\alpha_3}{2} - \beta \right)\) |
12 |
\(z_1\) |
\(r_1\) |
However, in the current implementation the term “groove” is more narrow. From now on, the term should represent only the
shape machined into the roll surface. Therefore, the roll gap \(s\) is no measure of the groove itself but of
the RollPass
. Also, the tip width \(b_\mathrm{kn}\) is not inherent to the groove, since it
depends on the roll gap.
Box-like Grooves¶
The BoxGroove
class¶
The BoxGroove
class represents a rectangular shaped groove as shown in the figure. For wear reasons, the flanks a
typically inclined by a small angle.
Mandatory measures of the box groove are the two radii \(r_1\) and \(r_2\), as well as the depth \(d\). To constrain geometry fully, any two of the following must be given:
usable width \(b_\mathrm{kn}\)
ground width \(b_d\)
flank angle \(\alpha_1\)
So the constructor has the following signature:
BoxGroove(r1, r2, depth, usable_width, ground_width, flank_angle)
The radii are typically small, the depth is \(d\) typically \(\le \frac{b_\mathrm{kn}}{2}\).
\(r_3\) and \(r_4\) are considered to be zero.
\(b_d\) was chosen in favor of the even ground width \(b_d'\), because it does not change when the radii are modified. So the overall geometry remains the same if one modifies only the radii.
The ConstrictedBoxGroove
class¶
The ConstrictedBoxGroove
class represents a BoxGroove
but with an indent in the ground as shown in the
figure.
Mandatory measures of the box groove are the two radii \(r_1\) and \(r_2\), as well as the depth \(d\) and the indent \(i\). To constrain geometry fully, any two of the following must be given:
usable width \(b_\mathrm{kn}\)
ground width \(b_d\)
flank angle \(\alpha_1\)
So the constructor has the following signature:
ConstrictedBoxGroove(r1, r2, depth, indent, usable_width, ground_width, flank_angle)
The radii are typically small, the depth is \(d\) typically \(\le \frac{b_\mathrm{kn}}{2}\).
\(r_3\) and \(r_4\) are considered to be zero.
Diamond-like grooves¶
The DiamondGroove
class¶
The DiamondGroove
class represents a rhombus shaped groove as shown in the figure.
Mandatory measures of this groove are the two radii \(r_1\) and \(r_2\). To constrain geometry fully, any two of the following must be given:
usable width \(b_\mathrm{kn}\)
tip depth \(d_\mathrm{t}\)
tip angle \(\delta\)
So the constructor has the following signature:
DiamondGroove(r1, r2, usable_width, tip_depth, tip_angle)
The radii are typically small, the depth is \(d_\mathrm{t}\) typically \(< \frac{b_\mathrm{kn}}{2}\) so that the tip angle \(\delta\) is larger than 90°.
\(r_3\) and \(r_4\) are considered to be zero, as well as \(b_d\) and \(b_d'\).
The tip depth \(d_\mathrm{t}\) was chosen in favor of the real depth \(d\), because it does not change, when the radii are modified. So the overall geometry remains the same if one modifies only the radii. The tip depth can be considered as the diagonal of the rhombus with sharp corners.
The SquareGroove
class¶
The SquareGroove
class represents a square shaped groove as shown in the figure.
Mandatory measures of this groove are the two radii \(r_1\) and \(r_2\). To constrain geometry fully, any two of the following must be given:
usable width \(b_\mathrm{kn}\)
tip depth \(d_\mathrm{t}\)
tip angle \(\delta\)
So the constructor has the following signature:
SquareGroove(r1, r2, usable_width, tip_depth, tip_angle)
The radii are typically small, the depth is \(d_\mathrm{t}\) typically \(\approx \frac{b_\mathrm{kn}}{2}\). The tip angle \(\delta\) is typically a one or two degree larger than 90° for wear reasons.
\(r_3\) and \(r_4\) are considered to be zero, as well as \(b_d\) and \(b_d'\).
The tip depth \(d_\mathrm{t}\) was chosen in favor of the real depth \(d\), because it does not change, when the radii are modified. So the overall geometry remains the same if one modifies only the radii. The tip depth can be considered as the diagonal of the square with sharp corners.
The constructor will raise a warning, if the tip angle significantly deviates from 90°, consider to use
a DiamondGroove
instead.
Round-like Grooves¶
The RoundGroove
class¶
The RoundGroove
class represents a groove with a circular cross-section as shown in the figure.
It is defined by two radii \(r_1\) and \(r_2\) and the depth \(d\), so the constructor has the following signature:
RoundGroove(r1, r2, depth)
The geometric constraints are \(r_1 << r_2\) and \(d < r_2\).
\(r_3\) and \(r_4\) are considered to be zero, as well as \(b_d\) and \(b_d'\).
The angles can be calculated as following:
The usable width is then:
The FalseRoundGroove
class¶
The FalseRoundGroove
class represents a groove with a roughly circular cross-section, which shows a small straight
flank, as shown in the figure.
It is defined by two radii \(r_1\) and \(r_2\), the depth \(d\) and the flank angle \(\alpha_1\) , so the constructor has the following signature:
FalseRoundGroove(r1, r2, depth, flank_angle)
The geometric constraints are \(r_1 << r_2\), \(d < r_2\) and \(\alpha_1 < 90°\) .
\(r_3\) and \(r_4\) are considered to be zero, as well as \(b_d\) and \(b_d'\).
The usable width can be calculated as:
Oval-like Grooves¶
The CircularOvalGroove
class¶
The CircularOvalGroove
class represents an oval shaped groove consisting of two radii as shown in the figure.
It is defined by two radii \(r_1\) and \(r_2\) and the depth \(d\), so the constructor has the following signature:
CircularOvalGroove(r1, r2, depth)
The geometric constraints are \(r_1 << r_2\) and \(d << r_2\).
\(r_3\) and \(r_4\) are considered to be zero, as well as \(b_d\) and \(b_d'\).
The topology of this groove is similar to the RoundGroove
, with the main difference, that
the center of \(r_2\) is not placed in the center of the groove. For this reason \(d\) is typically much smaller than \(`r_2`
\).
The FlatOvalGroove
class¶
The FlatOvalGroove
class represents an oval shaped groove consisting of two radii and an even ground as shown in the
figure.
Mandatory measures of this groove are the two radii \(r_1\) and \(r_2\), as well as the depth \(d\) and the usable width \(b_ \mathrm{kn}\).
So the constructor has the following signature:
FlatOvalGroove(r1, r2, depth, usable_width)
The depth is \(d\) typically \(\le \frac{b_\mathrm{kn}}{2}\).
\(r_3\) and \(r_4\) are considered to be zero.
The SwedishOvalGroove
class¶
The SwedishOvalGroove
class represents a hexagonal shaped groove as shown in the figure. The term “hexagonal” is also
used for this type of groove, but can be confused with regular hexagon shaped grooves. The current type of groove is
used as an oval and therefore the term swedish oval should be used, which is derived from its origin in swedish steel
plants.
Mandatory measures of this groove are the two radii \(r_1\) and \(r_2\), as well as the depth \(d\). To constrain geometry fully, any two of the following must be given:
usable width \(b_\mathrm{kn}\)
ground width \(b_d\)
flank angle \(\alpha_1\)
So the constructor has the following signature:
SwedishOvalGroove(r1, r2, depth, usable_width, ground_width, flank_angle)
The radii are typically small, the depth is \(d\) typically \(<< \frac{b_\mathrm{kn}}{2}\).
\(r_3\) and \(r_4\) are considered to be zero.
\(b_d\) was chosen in favor of the even ground width \(b_d'\), because it does not change when the radii are modified. So the overall geometry remains the same if one modifies only the radii.
The topology of this groove is similar to the BoxGroove
, but typically the flank angles are smaller
and the groove is less deep.
The ConstrictedSwedishOvalGroove
class¶
The ConstrictedSwedishOvalGroove
class represents a SwedishOvalGroove
but with an indent in the
ground as shown in the figure.
Mandatory measures of this groove are the two radii \(r_1\) and \(r_2\), as well as the depth \(d\) and the indent \(`i` \). To constrain geometry fully, any two of the following must be given:
usable width \(b_\mathrm{kn}\)
ground width \(b_d\)
flank angle \(\alpha_1\)
So the constructor has the following signature:
ConstrictedSwedishOvalGroove(r1, r2, depth, indent, usable_width, ground_width, flank_angle)
The radii are typically small, the depth is \(d\) typically \(<< \frac{b_\mathrm{kn}}{2}\).
\(r_3\) and \(r_4\) are considered to be zero.
The Oval3RadiiGroove
class¶
The Oval3RadiiGroove
class represents an oval shaped groove consisting of three radii as shown in the figure.
Mandatory measures of this groove are the three radii \(r_1\), \(r_2\) and \(r_3\), as well as the depth \(d\) and the usable width \(b_\mathrm{kn}\).
So the constructor has the following signature:
Oval3RadiiGroove(r1, r2, r3, depth, usable_width)
The depth is \(d\) typically \(\le \frac{b_\mathrm{kn}}{2}\).
\(r_4\) and \(b_d'\) are considered to be zero.
The Oval3RadiiFlankedGroove
class¶
The Oval3RadiiFlankedGroove
class represents an oval shaped groove consisting of three radii and a small straight
flank as shown in the figure.
Mandatory measures of this groove are the three radii \(r_1\), \(r_2\) and \(r_3\), as well as the depth \(d\), the usable width \(b_\mathrm{kn}\) and the flank angle \(\alpha_1\).
So the constructor has the following signature:
Oval3RadiiFlankedGroove(r1, r2, r3, depth, usable_width, flank_angle)
The depth is \(d\) typically \(\le \frac{b_\mathrm{kn}}{2}\).
\(r_4\) and \(b_d'\) are considered to be zero.
Reference of Groove Classes¶
- class BoxGroove(r1: float, r2: float, depth: float, ground_width: Optional[float] = None, usable_width: Optional[float] = None, flank_angle: Optional[float] = None)¶
Represents a box shaped groove.
Exactly two of ground_width, usable_width and flank_angle must be given.
- Parameters
r1 (float) – radius of the first edge
r2 (float) – radius of the second edge
depth (float) – depth of the groove
ground_width (float) – width of the groove from intersection between two flanks and ground width
usable_width (float) – ground width excluding influence of radii
flank_angle (float) – angle of the flanks
- Raises
ValueError – if not exactly two of ground_width, usable_width and flank_angle are given
- property types: 'box'¶
A tuple of keywords to specify the types of this groove.
- class CircularOvalGroove(r1: float, r2: float, depth: float)¶
Represents an oval shaped groove with one main radius.
- Parameters
r1 (float) – radius of the first edge
r2 (float) – radius of the second edge
depth (float) – depth of the groove
- property types: 'oval', 'circular_oval'¶
A tuple of keywords to specify the types of this groove.
- class ConstrictedBoxGroove(r1: float, r2: float, r4: float, depth: float, indent: float, ground_width: Optional[float] = None, usable_width: Optional[float] = None, flank_angle: Optional[float] = None)¶
Represents a box shaped groove with an indented ground.
Exactly two of ground_width, usable_width and flank_angle must be given.
- Parameters
r1 – radius of the first edge :type r1: float :param r2: radius of the second edge :type r2: float :param depth: depth of the groove :type depth: float :param indent: indentation of the depth of the groove towards the grooves center :type indent: float :param ground_width: width of the groove from intersection between two flanks and ground width :type ground_width: float :param usable_width: ground width excluding influence of radii :type usable_width: float :param flank_angle: angle of the flanks :type flank_angle: float :raises ValueError: if not exactly two of ground_width, usable_width and flank_angle are given
- property types: 'box', 'constricted_box'¶
A tuple of keywords to specify the types of this groove.
- class ConstrictedSwedishOvalGroove(r1: float, r2: float, r4: float, depth: float, indent: float, ground_width: Optional[float] = None, usable_width: Optional[float] = None, flank_angle: Optional[float] = None)¶
Represents a hexagonal shaped groove with an indented ground that is used like an oval groove (swedish oval).
Exactly two of ground_width, usable_width and flank_angle must be given.
- Parameters
r1 (float) – radius of the first edge
r2 (float) – radius of the second edge
depth (float) – depth of the groove
indent (float) – indentation of the depth of the groove towards the grooves center
ground_width (float) – width of the groove from intersection between two flanks and ground width
usable_width (float) – ground width excluding influence of radii
flank_angle (float) – angle of the flanks
- Raises
ValueError – if not exactly two of ground_width, usable_width and flank_angle are given
- property types: 'oval', 'swedish_oval', 'constricted_swedish_oval'¶
A tuple of keywords to specify the types of this groove.
- class DiamondGroove(r1: float, r2: float, usable_width: Optional[float] = None, tip_depth: Optional[float] = None, tip_angle: Optional[float] = None)¶
Represent a diamond shaped groove.
Exactly two of usable_width, tip_depth and tip_angle must be given.
- Parameters
r1 (float) – radius of the first edge
r2 (float) – radius of the second edge
usable_width (float) – ground width excluding influence of radii
tip_depth (float) – depth of the tip of the groove
tip_angle (float) – angle at witch the tip is formed
- Raises
ValueError – if not exactly two of usable_width, tip_depth and tip_angle are given
- property types: 'diamond'¶
A tuple of keywords to specify the types of this groove.
- class FalseRoundGroove(r1: float, r2: float, depth: float, flank_angle: float)¶
Represents a round shaped groove with a dedicated flank (false round).
- Parameters
r1 (float) – radius of the first edge
r2 (float) – radius of the second edge
depth (float) – depth of the groove
flank_angle (float) – angle of the flanks
- property types: 'round', 'false_round'¶
A tuple of keywords to specify the types of this groove.
- class FlatGroove(width: float)¶
Represents a box shaped groove.
- Parameters
width (float) – width of the forming zone
- property types: 'flat'¶
A tuple of keywords to specify the types of this groove.
- class FlatOvalGroove(r1: float, r2: float, depth: float, usable_width: float)¶
Represent an oval shaped groove with a flat ground.
- Parameters
r1 (float) – radius of the first edge
r2 (float) – radius of the second edge
depth (float) – depth of the groove
usable_width (float) – ground width excluding influence of radii
- property types: 'oval', 'flat_oval'¶
A tuple of keywords to specify the types of this groove.
- class GenericElongationGroove(usable_width: float = 0, depth: float = 0, r1: float = 0, r2: float = 0, r3: float = 0, r4: float = 0, even_ground_width: float = 0, indent: float = 0, alpha1: float = 0, alpha2: float = 0, alpha3: float = 0, alpha4: float = 0, types: Tuple[str, ...] = ())¶
Represents a groove defined by the generic elongation groove geometry.
- property contour_line: LineString¶
A line representing the geometry of the groove contour.
- property cross_section: Polygon¶
A polygon representing the cross-section of this groove limited by the contour line and y=0.
- property depth: float¶
The maximum depth of the groove.
- local_depth(z) Union[float, ndarray] ¶
Function of the local groove depth in dependence on the z-coordinate.
- property types: Tuple[str, ...]¶
A tuple of keywords to specify the types of this groove.
- property usable_width: float¶
The usable width of the groove, meaning the width of ideal filling.
- class GrooveBase¶
Abstract base class for all grooves.
- abstract property contour_line: LineString¶
A line representing the geometry of the groove contour.
- abstract property cross_section: Polygon¶
A polygon representing the cross-section of this groove limited by the contour line and y=0.
- abstract property depth: float¶
The maximum depth of the groove.
- abstract local_depth(z: Union[float, ndarray]) Union[float, ndarray] ¶
Function of the local groove depth in dependence on the z-coordinate.
- abstract property types: Tuple[str, ...]¶
A tuple of keywords to specify the types of this groove.
- abstract property usable_width: float¶
The usable width of the groove, meaning the width of ideal filling.
- class Oval3RadiiFlankedGroove(r1: float, r2: float, r3: float, depth: float, usable_width: float, flank_angle: float)¶
Represents an oval shaped groove with 3 main radii and a dedicated flank.
Exactly two of ground_width, usable_width and flank_angle must be given.
- Parameters
r1 (float) – radius of the first edge
r2 (float) – radius of the second edge
depth (float) – depth of the groove
usable_width (float) – ground width excluding influence of radii
flank_angle (float) – angle of the flanks
- Raises
ValueError – if not exactly two of ground_width, usable_width and flank_angle are given
- property types: 'oval', 'oval_3_radii', 'oval_3_radii_flanked'¶
A tuple of keywords to specify the types of this groove.
- class Oval3RadiiGroove(r1: float, r2: float, r3: float, depth: float, usable_width: float)¶
Represents an oval shaped groove with 3 main radii.
- Parameters
r1 (float) – radius of the first edge
r2 (float) – radius of the second edge
r2 – radius of the third edge
depth (float) – depth of the groove
usable_width (float) – ground width excluding influence of radii
- property types: 'oval', 'oval_3_radii'¶
A tuple of keywords to specify the types of this groove.
- class RoundGroove(r1: float, r2: float, depth: float)¶
Represents a round shaped groove.
- Parameters
r1 (float) – radius of the first edge
r2 (float) – radius of the second edge
depth (float) – depth of the groove
- property types: 'round'¶
A tuple of keywords to specify the types of this groove.
- class SplineGroove(contour_points: Union[Iterable[Tuple[float, float]], ndarray], types: Iterable[str], usable_width: Optional[float] = None)¶
Represents a groove defined by a linear spline contour.
- Parameters
contour_points – an iterable of contour points to be used for the spline
types – an interable of string keys used as type classifiers
usable_width – the usable width to assume for this instance, if None, the maximum width will be used
- property contour_line: LineString¶
A line representing the geometry of the groove contour.
- property cross_section: Polygon¶
A polygon representing the cross-section of this groove limited by the contour line and y=0.
- property depth: float¶
The maximum depth of the groove.
- local_depth(z) Union[float, ndarray] ¶
Function of the local groove depth in dependence on the z-coordinate.
- property types: Tuple[str, ...]¶
A tuple of keywords to specify the types of this groove.
- property usable_width: float¶
The usable width of the groove, meaning the width of ideal filling.
- class SquareGroove(r1: float, r2: float, usable_width: Optional[float] = None, tip_depth: Optional[float] = None, tip_angle: Optional[float] = None)¶
Represents a square shaped groove (diamond with tip angle near 90°).
Exactly two of usable_width, tip_depth and tip_angle must be given.
- Parameters
r1 (float) – radius of the first edge
r2 (float) – radius of the second edge
usable_width (float) – ground width excluding influence of radii
tip_depth (float) – depth of the tip of the groove
tip_angle (float) – angle at witch the tip is formed
- Raises
ValueError – if not exactly two of usable_width, tip_depth and tip_angle are given
ValueError – if tip angle is <85° or >95° (no matter if given or calculated internally)
- property types: 'diamond', 'square'¶
A tuple of keywords to specify the types of this groove.
- class SwedishOvalGroove(r1: float, r2: float, depth: float, ground_width: Optional[float] = None, usable_width: Optional[float] = None, flank_angle: Optional[float] = None)¶
Represents a hexagonal shaped groove that is used like an oval groove (swedish oval).
Exactly two of ground_width, usable_width and flank_angle must be given.
- Parameters
r1 (float) – radius of the first edge
r2 (float) – radius of the second edge
depth (float) – depth of the groove
ground_width (float) – width of the groove from intersection between two flanks and ground width
usable_width (float) – ground width excluding influence of radii
flank_angle (float) – angle of the flanks
- Raises
ValueError – if not exactly two of ground_width, usable_width and flank_angle are given
- property types: 'oval', 'swedish_oval'¶
A tuple of keywords to specify the types of this groove.