pyroll-core 2.1.7__tar.gz → 2.1.8__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/PKG-INFO +1 -1
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/__init__.py +1 -1
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/roll/hookimpls.py +6 -1
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/roll/roll.py +3 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/roll_pass/hookimpls/deformation_unit.py +1 -1
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/roll_pass/hookimpls/helpers.py +1 -1
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/roll_pass/hookimpls/profile.py +7 -7
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/roll_pass/hookimpls/roll.py +1 -1
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/roll_pass/hookimpls/roll_pass.py +3 -10
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/roll_pass/three_roll_pass.py +6 -5
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/rotator/hookimpls.py +6 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/.gitignore +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/LICENSE +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/README.md +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/hatch.toml +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyproject.toml +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/config.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/disk_elements/__init__.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/disk_elements/disk_element_unit.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/disk_elements/hookimpls.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/__init__.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/base.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/boxes/__init__.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/boxes/box.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/boxes/constricted_box.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/boxes/upset_box.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/diamonds/__init__.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/diamonds/diamond.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/diamonds/gothic.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/diamonds/square.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/equivalent_ripped_groove.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/flat.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/generic_elongation.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/generic_elongation_solvers.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/hexagonal.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/ovals/__init__.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/ovals/circular_oval.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/ovals/constricted_circular_oval.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/ovals/constricted_swedish_oval.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/ovals/flat_oval.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/ovals/oval_3radii.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/ovals/oval_3radii_flanked.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/ovals/swedish_oval.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/ovals/upset_oval.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/rounds/__init__.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/rounds/false_round.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/rounds/round.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/spline.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/hooks.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/log.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/profile/__init__.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/profile/hookimpls.py +2 -2
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/profile/profile.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/repr.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/roll/__init__.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/roll_pass/__init__.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/roll_pass/deformation_unit.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/roll_pass/hookimpls/__init__.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/roll_pass/hookimpls/disk_element.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/roll_pass/roll_pass.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/rotator/__init__.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/rotator/rotator.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/sequence/__init__.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/sequence/hookimpls.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/sequence/sequence.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/shapes.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/transport/__init__.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/transport/cooling_pipe.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/transport/hookimpls/__init__.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/transport/hookimpls/cooling_pipe.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/transport/hookimpls/transport.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/transport/transport.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/unit/__init__.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/unit/hookimpls.py +0 -0
- {pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/unit/unit.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: pyroll-core
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.8
|
|
4
4
|
Summary: PyRoll rolling simulation framework - core library.
|
|
5
5
|
Project-URL: Homepage, https://pyroll-project.github.io
|
|
6
6
|
Project-URL: Repository, https://github.com/pyroll-project/pyroll-core
|
|
@@ -24,6 +24,11 @@ def roll_power(self: Roll):
|
|
|
24
24
|
return self.roll_torque * self.rotational_frequency * 2 * np.pi
|
|
25
25
|
|
|
26
26
|
|
|
27
|
+
@Roll.working_velocity
|
|
28
|
+
def working_velocity(self: Roll):
|
|
29
|
+
return self.rotational_frequency * self.working_radius * 2 * np.pi
|
|
30
|
+
|
|
31
|
+
|
|
27
32
|
@Roll.surface_velocity
|
|
28
33
|
def surface_velocity(self: Roll):
|
|
29
34
|
return self.rotational_frequency * self.nominal_radius * 2 * np.pi
|
|
@@ -31,7 +36,7 @@ def surface_velocity(self: Roll):
|
|
|
31
36
|
|
|
32
37
|
@Roll.rotational_frequency
|
|
33
38
|
def rotational_frequency(self: Roll):
|
|
34
|
-
return self.surface_velocity / self.nominal_radius
|
|
39
|
+
return self.surface_velocity / (2 * np.pi * self.nominal_radius)
|
|
35
40
|
|
|
36
41
|
|
|
37
42
|
@Roll.width
|
|
@@ -32,6 +32,9 @@ class Roll(HookHost):
|
|
|
32
32
|
surface_velocity = Hook[float]()
|
|
33
33
|
"""Tangential velocity of the outer roll surface (at nominal radius)."""
|
|
34
34
|
|
|
35
|
+
working_velocity = Hook[float]()
|
|
36
|
+
"""Tangential velocity of the roll surface (at working radius)."""
|
|
37
|
+
|
|
35
38
|
contour_points = Hook[LineString]()
|
|
36
39
|
"""Points of the contour line in the z-y-plane."""
|
|
37
40
|
|
|
@@ -18,7 +18,7 @@ def out_cross_section3(rp: ThreeRollPass, width: float) -> Polygon:
|
|
|
18
18
|
poly = Polygon(np.concatenate([cl.coords for cl in rp.contour_lines]))
|
|
19
19
|
|
|
20
20
|
for _ in range(3):
|
|
21
|
-
poly = clip_by_rect(poly, -math.inf, -
|
|
21
|
+
poly = clip_by_rect(poly, -math.inf, -math.inf, math.inf, width / 2)
|
|
22
22
|
poly = rotate(poly, angle=120, origin=(0, 0))
|
|
23
23
|
|
|
24
24
|
return refine_cross_section(poly)
|
|
@@ -19,14 +19,14 @@ def exit_point(self: RollPass.OutProfile):
|
|
|
19
19
|
return 0
|
|
20
20
|
|
|
21
21
|
|
|
22
|
-
@RollPass.InProfile.
|
|
23
|
-
def
|
|
24
|
-
return
|
|
22
|
+
@RollPass.InProfile.longitudinal_angle
|
|
23
|
+
def longitudinal_angle(self: RollPass.InProfile):
|
|
24
|
+
return self.roll_pass.entry_angle
|
|
25
25
|
|
|
26
26
|
|
|
27
|
-
@RollPass.OutProfile.
|
|
28
|
-
def
|
|
29
|
-
return
|
|
27
|
+
@RollPass.OutProfile.longitudinal_angle
|
|
28
|
+
def longitudinal_angle(self: RollPass.OutProfile):
|
|
29
|
+
return self.roll_pass.exit_angle
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
@RollPass.OutProfile.strain
|
|
@@ -78,7 +78,7 @@ def cross_section(self: RollPass.OutProfile) -> Polygon:
|
|
|
78
78
|
@ThreeRollPass.OutProfile.cross_section
|
|
79
79
|
def cross_section3(self: ThreeRollPass.OutProfile) -> Polygon:
|
|
80
80
|
cs = helpers.out_cross_section3(self.roll_pass, self.width)
|
|
81
|
-
if (
|
|
81
|
+
if (cs.bounds[3] + cs.centroid.y) * 2.02 < self.width:
|
|
82
82
|
raise ValueError(
|
|
83
83
|
"Profile's width can not be larger than its contour lines."
|
|
84
84
|
"May be caused by critical overfilling."
|
|
@@ -51,4 +51,4 @@ def surface_velocity(self: RollPass.Roll):
|
|
|
51
51
|
if self.has_value("neutral_angle"):
|
|
52
52
|
return self.roll_pass.velocity / np.cos(self.neutral_angle)
|
|
53
53
|
else:
|
|
54
|
-
return self.roll_pass.velocity / np.cos(self.roll_pass.
|
|
54
|
+
return self.roll_pass.velocity / np.cos(self.roll_pass.exit_angle)
|
|
@@ -139,7 +139,7 @@ def height3(self):
|
|
|
139
139
|
self.roll.groove.usable_width / 2,
|
|
140
140
|
math.inf
|
|
141
141
|
)
|
|
142
|
-
return 2 * usable_contour.bounds[
|
|
142
|
+
return abs(2 * usable_contour.bounds[1])
|
|
143
143
|
|
|
144
144
|
|
|
145
145
|
@RollPass.volume
|
|
@@ -167,9 +167,9 @@ def contact_area3(self: ThreeRollPass):
|
|
|
167
167
|
@RollPass.velocity
|
|
168
168
|
def velocity(self: RollPass):
|
|
169
169
|
if self.roll.has_value("neutral_angle"):
|
|
170
|
-
return self.roll.
|
|
170
|
+
return self.roll.working_velocity * np.cos(self.roll.neutral_angle)
|
|
171
171
|
else:
|
|
172
|
-
return self.roll.
|
|
172
|
+
return self.roll.rotational_frequency * self.roll.working_radius * 2 * np.pi
|
|
173
173
|
|
|
174
174
|
|
|
175
175
|
@RollPass.duration
|
|
@@ -275,11 +275,4 @@ def exit_angle(self: RollPass):
|
|
|
275
275
|
return np.arcsin(self.exit_point / self.roll.working_radius)
|
|
276
276
|
|
|
277
277
|
|
|
278
|
-
@RollPass.InProfile.longitudinal_angle
|
|
279
|
-
def longitudinal_angle(self: RollPass.InProfile):
|
|
280
|
-
return self.roll_pass.entry_angle
|
|
281
278
|
|
|
282
|
-
|
|
283
|
-
@RollPass.OutProfile.longitudinal_angle
|
|
284
|
-
def longitudinal_angle(self: RollPass.OutProfile):
|
|
285
|
-
return self.roll_pass.exit_angle
|
|
@@ -21,12 +21,13 @@ class ThreeRollPass(RollPass):
|
|
|
21
21
|
return self._contour_lines
|
|
22
22
|
|
|
23
23
|
shift = self.roll.groove.usable_width / 2 / np.sqrt(3) + self.gap / np.sqrt(3)
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
right = rotate(
|
|
27
|
-
left = rotate(
|
|
24
|
+
lower = translate(self.roll.contour_line, yoff=shift)
|
|
25
|
+
lower = LineString(lower.coords[::-1]) # get back coordinate order
|
|
26
|
+
right = rotate(lower, angle=-60, origin=(0, 0))
|
|
27
|
+
left = rotate(lower, angle=60, origin=(0, 0))
|
|
28
|
+
lower = rotate(lower, angle=180, origin=(0, 0))
|
|
28
29
|
|
|
29
|
-
self._contour_lines = [
|
|
30
|
+
self._contour_lines = [left, lower, right]
|
|
30
31
|
return self._contour_lines
|
|
31
32
|
|
|
32
33
|
@property
|
|
@@ -52,6 +52,12 @@ def box_diamond_45(self: Rotator):
|
|
|
52
52
|
return 45
|
|
53
53
|
|
|
54
54
|
|
|
55
|
+
@Rotator.rotation
|
|
56
|
+
def box_flat_0(self: Rotator):
|
|
57
|
+
if "box" in self.in_profile.classifiers and "flat" in self.next_roll_pass.classifiers:
|
|
58
|
+
return 0
|
|
59
|
+
|
|
60
|
+
|
|
55
61
|
@Rotator.rotation
|
|
56
62
|
def square_flat_45(self: Rotator):
|
|
57
63
|
if "square" in self.in_profile.classifiers and "flat" in self.next_roll_pass.classifiers:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/ovals/constricted_circular_oval.py
RENAMED
|
File without changes
|
{pyroll_core-2.1.7 → pyroll_core-2.1.8}/pyroll/core/grooves/ovals/constricted_swedish_oval.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -19,13 +19,13 @@ def width(self: Profile):
|
|
|
19
19
|
@Profile.height
|
|
20
20
|
def height_3fold(self: Profile):
|
|
21
21
|
if "3fold" in self.classifiers:
|
|
22
|
-
return (self.cross_section.
|
|
22
|
+
return (self.cross_section.centroid.y - self.cross_section.bounds[1]) * 2
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
@Profile.width
|
|
26
26
|
def width_3fold(self: Profile):
|
|
27
27
|
if "3fold" in self.classifiers:
|
|
28
|
-
return (self.cross_section.
|
|
28
|
+
return (self.cross_section.bounds[3] - self.cross_section.centroid.y) * 2
|
|
29
29
|
|
|
30
30
|
|
|
31
31
|
@Profile.equivalent_height
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|