diff --git a/.github/workflows/test_demos.yml b/.github/workflows/test_demos.yml index 5c88ef258..5750b3c34 100644 --- a/.github/workflows/test_demos.yml +++ b/.github/workflows/test_demos.yml @@ -2,11 +2,7 @@ name: Test demos # Controls when the action will run. on: - # Triggers the workflow on push or pull request events but only for the master branch - push: - branches: - - main - - develop + # Triggers the workflow on push requests to main or develop branches pull_request: branches: - main diff --git a/conda/meta.yaml b/conda/meta.yaml index e8fb06a74..d1a425479 100644 --- a/conda/meta.yaml +++ b/conda/meta.yaml @@ -30,7 +30,7 @@ requirements: - nbformat - nbconvert - ipywidgets - # - jupyter-cadquery not avaialbe on conda + # - jupyter-cadquery not availalbe on conda test: imports: diff --git a/conda_build.sh b/conda_build.sh index 874f903e5..5f6c90607 100644 --- a/conda_build.sh +++ b/conda_build.sh @@ -11,7 +11,7 @@ rm -rf /tmp/conda-build # VERSION=$(echo $GITHUB_REF | sed 's#.*/v##') -VERSION=0.5.0 +VERSION=0.6.3 PLACEHOLDER='version="develop"' VERSION_FILE='setup.py' # Grep checks that the placeholder is in the file. If grep doesn't find diff --git a/paramak/parametric_reactors/ball_reactor.py b/paramak/parametric_reactors/ball_reactor.py index b1fd75932..c9f2306b9 100644 --- a/paramak/parametric_reactors/ball_reactor.py +++ b/paramak/parametric_reactors/ball_reactor.py @@ -64,19 +64,19 @@ class BallReactor(paramak.Reactor): def __init__( self, - inner_bore_radial_thickness: float, - inboard_tf_leg_radial_thickness: float, - center_column_shield_radial_thickness: float, - divertor_radial_thickness: float, - inner_plasma_gap_radial_thickness: float, - plasma_radial_thickness: float, - outer_plasma_gap_radial_thickness: float, - firstwall_radial_thickness: float, - blanket_radial_thickness: float, - blanket_rear_wall_radial_thickness: float, - elongation: float, - triangularity: float, - plasma_gap_vertical_thickness: float, + inner_bore_radial_thickness: float = 10., + inboard_tf_leg_radial_thickness: float = 30., + center_column_shield_radial_thickness: float = 60., + divertor_radial_thickness: float = 150., + inner_plasma_gap_radial_thickness: float = 30., + plasma_radial_thickness: float = 300., + outer_plasma_gap_radial_thickness: float = 30., + plasma_gap_vertical_thickness: float = 50., + firstwall_radial_thickness: float = 30., + blanket_radial_thickness: float = 50., + blanket_rear_wall_radial_thickness: float = 30., + elongation: float = 2., + triangularity: float = 0.55, divertor_to_tf_gap_vertical_thickness: Optional[float] = 0, number_of_tf_coils: Optional[int] = 12, rear_blanket_to_tf_gap: Optional[float] = None, diff --git a/paramak/parametric_reactors/center_column_study_reactor.py b/paramak/parametric_reactors/center_column_study_reactor.py index 31f98a638..2e7a65e39 100644 --- a/paramak/parametric_reactors/center_column_study_reactor.py +++ b/paramak/parametric_reactors/center_column_study_reactor.py @@ -45,20 +45,20 @@ class CenterColumnStudyReactor(paramak.Reactor): def __init__( self, - inner_bore_radial_thickness, - inboard_tf_leg_radial_thickness, - center_column_shield_radial_thickness_mid, - center_column_shield_radial_thickness_upper, - inboard_firstwall_radial_thickness, - divertor_radial_thickness, - inner_plasma_gap_radial_thickness, - plasma_radial_thickness, - outer_plasma_gap_radial_thickness, - center_column_arc_vertical_thickness, - elongation, - triangularity, - plasma_gap_vertical_thickness, - rotation_angle=360.0, + inner_bore_radial_thickness: float = 20, + inboard_tf_leg_radial_thickness: float = 50., + center_column_shield_radial_thickness_mid: float = 50., + center_column_shield_radial_thickness_upper: float = 100., + inboard_firstwall_radial_thickness: float = 20., + divertor_radial_thickness: float = 100., + inner_plasma_gap_radial_thickness: float = 80., + plasma_radial_thickness: float = 200., + outer_plasma_gap_radial_thickness: float = 90, + center_column_arc_vertical_thickness: float = 520., + elongation: float = 2.3, + triangularity: float = 0.45, + plasma_gap_vertical_thickness: float = 40, + rotation_angle: float = 360.0, ): super().__init__([]) diff --git a/paramak/parametric_reactors/cylinder_reactor.py b/paramak/parametric_reactors/cylinder_reactor.py index b7fbb6130..c37bc508d 100644 --- a/paramak/parametric_reactors/cylinder_reactor.py +++ b/paramak/parametric_reactors/cylinder_reactor.py @@ -30,15 +30,15 @@ class CylinderReactor(paramak.Reactor): def __init__( self, - inner_blanket_radius: Optional[float] = 100, - blanket_thickness: Optional[float] = 60, - blanket_height: Optional[float] = 500, - lower_blanket_thickness: Optional[float] = 50, - upper_blanket_thickness: Optional[float] = 40, - blanket_vv_gap: Optional[float] = 20, - upper_vv_thickness: Optional[float] = 10, - vv_thickness: Optional[float] = 10, - lower_vv_thickness: Optional[float] = 10, + inner_blanket_radius: Optional[float] = 100., + blanket_thickness: Optional[float] = 70., + blanket_height: Optional[float] = 500., + lower_blanket_thickness: Optional[float] = 50., + upper_blanket_thickness: Optional[float] = 40., + blanket_vv_gap: Optional[float] = 20., + upper_vv_thickness: Optional[float] = 10., + vv_thickness: Optional[float] = 10., + lower_vv_thickness: Optional[float] = 10., rotation_angle: Optional[float] = 360, ): @@ -98,7 +98,7 @@ def create_solids(self): 0.5, 0.5, 0.5), - name="lower vacuum vessel", + name="lower_vacuum_vessel", ) lower_blanket = paramak.RotateStraightShape( @@ -113,7 +113,7 @@ def create_solids(self): ], rotation_angle=self.rotation_angle, color=(0.0, 1.0, 0.498), - name="lower blanket", + name="lower_blanket", ) blanket = paramak.CenterColumnShieldCylinder( @@ -145,7 +145,7 @@ def create_solids(self): ], rotation_angle=self.rotation_angle, color=(0.0, 1.0, 0.498), - name="upper blanket", + name="upper_blanket", ) upper_vv = paramak.RotateStraightShape( @@ -157,7 +157,7 @@ def create_solids(self): ], rotation_angle=self.rotation_angle, color=(0.5, 0.5, 0.5), - name="upper vacuum vessel", + name="upper_vacuum_vessel", ) vac_ves = paramak.RotateStraightShape( @@ -189,7 +189,7 @@ def create_solids(self): ], rotation_angle=self.rotation_angle, color=(0.5, 0.5, 0.5), - name="vacuum vessel", + name="vacuum_vessel", ) self.shapes_and_components = [ diff --git a/paramak/parametric_reactors/segmented_blanket_ball_reactor.py b/paramak/parametric_reactors/segmented_blanket_ball_reactor.py index 203d2b373..b5968066d 100644 --- a/paramak/parametric_reactors/segmented_blanket_ball_reactor.py +++ b/paramak/parametric_reactors/segmented_blanket_ball_reactor.py @@ -22,9 +22,9 @@ class SegmentedBlanketBallReactor(paramak.BallReactor): def __init__( self, - gap_between_blankets, - number_of_blanket_segments, - blanket_fillet_radius: float = 10.0, + gap_between_blankets: float = 15., + number_of_blanket_segments: int = 12, + blanket_fillet_radius: float = 10., **kwargs ): diff --git a/paramak/parametric_reactors/submersion_reactor.py b/paramak/parametric_reactors/submersion_reactor.py index d13860cde..9ce156c53 100644 --- a/paramak/parametric_reactors/submersion_reactor.py +++ b/paramak/parametric_reactors/submersion_reactor.py @@ -56,22 +56,22 @@ class SubmersionTokamak(paramak.Reactor): def __init__( self, - inner_bore_radial_thickness: float, - inboard_tf_leg_radial_thickness: float, - center_column_shield_radial_thickness: float, - inboard_blanket_radial_thickness: float, - firstwall_radial_thickness: float, - inner_plasma_gap_radial_thickness: float, - plasma_radial_thickness: float, - divertor_radial_thickness: float, - support_radial_thickness: float, - outer_plasma_gap_radial_thickness: float, - outboard_blanket_radial_thickness: float, - blanket_rear_wall_radial_thickness: float, - elongation: float, - triangularity: float, + inner_bore_radial_thickness: float = 30., + inboard_tf_leg_radial_thickness: float = 30, + center_column_shield_radial_thickness: float = 30, + inboard_blanket_radial_thickness: float = 80, + firstwall_radial_thickness: float = 20, + inner_plasma_gap_radial_thickness: float = 50, + plasma_radial_thickness: float = 200, + divertor_radial_thickness: float = 80, + support_radial_thickness: float = 90, + outer_plasma_gap_radial_thickness: float = 50, + outboard_blanket_radial_thickness: float = 30, + blanket_rear_wall_radial_thickness: float = 30, + elongation: float = 2., + triangularity: float = 0.5, number_of_tf_coils: int = 16, - rotation_angle: float = 360.0, + rotation_angle: float = 360., outboard_tf_coil_radial_thickness: Optional[float] = None, rear_blanket_to_tf_gap: Optional[float] = None, outboard_tf_coil_poloidal_thickness: Optional[float] = None, diff --git a/paramak/reactor.py b/paramak/reactor.py index 74144e1d7..8e5899657 100644 --- a/paramak/reactor.py +++ b/paramak/reactor.py @@ -339,11 +339,12 @@ def export_stp( return filename - def export_brep(self, filename): + def export_brep(self, filename: str, merge: bool = True): """Exports a brep file for the Reactor.solid. Args: filename: the filename of exported the brep file. + merged: if the surfaces should be merged (True) or not (False). """ path_filename = Path(filename) @@ -354,15 +355,30 @@ def export_brep(self, filename): path_filename.parents[0].mkdir(parents=True, exist_ok=True) - self.solid.exportBrep(str(path_filename)) - # alternative method is to use BRepTools that might support imprinting - # and merging https://github.com/CadQuery/cadquery/issues/449 + if not merge: + self.solid.exportBrep(str(path_filename)) + else: + import OCP + bldr = OCP.BOPAlgo.BOPAlgo_Splitter() + + for shape in self.shapes_and_components: + bldr.AddArgument(shape.solid.val().wrapped) + + bldr.SetNonDestructive(True) + + bldr.Perform() + + bldr.Images() + + merged = cq.Compound(bldr.Shape()) + + merged.exportBrep(str(path_filename)) return str(path_filename) def export_stl( self, - filename: Union[List[str], str], + filename: Union[List[str], str] = None, tolerance: Optional[float] = 0.001, angular_tolerance: Optional[float] = 0.1, ) -> List[str]: diff --git a/tests/test_parametric_reactors/test_cylinder_reactor.py b/tests/test_parametric_reactors/test_cylinder_reactor.py index 312605c16..8b05e200a 100644 --- a/tests/test_parametric_reactors/test_cylinder_reactor.py +++ b/tests/test_parametric_reactors/test_cylinder_reactor.py @@ -47,11 +47,16 @@ def test_export_brep(self): os.system("rm test_reactor.brep") - self.test_reactor.export_brep(filename='test_reactor.brep') + self.test_reactor.export_brep(filename='merged.brep', merge=True) + self.test_reactor.export_brep(filename='not_merged.brep', merge=False) - assert Path("test_reactor.brep").exists() is True + assert Path("merged.brep").exists() is True + assert Path("not_merged.brep").exists() is True + assert Path("not_merged.brep").stat().st_size > Path( + "merged.brep").stat().st_size - os.system("rm test_reactor.brep") + os.system("rm merged.brep") + os.system("rm not_merged.brep") def test_export_brep_without_extention(self): """Exports a brep file without the extention and checks that the diff --git a/tests/test_reactor.py b/tests/test_reactor.py index 1fa2f530a..79dbc2749 100644 --- a/tests/test_reactor.py +++ b/tests/test_reactor.py @@ -126,18 +126,18 @@ def test_make_sector_wedge(self): ) assert sector_wedge is None - def test_missing_filename_arg(self): + def test_wrong_number_of_filenames(self): - def test_stl_filename_None(): + def test_stl_filename_list_length(): test_shape = paramak.ExtrudeCircleShape( points=[(20, 20)], radius=10, distance=10 ) my_reactor = paramak.Reactor([test_shape]) - my_reactor.export_stl() + my_reactor.export_stl(['wrong.stl', 'number_of.stl', 'files.stl']) self.assertRaises( - TypeError, - test_stl_filename_None) + ValueError, + test_stl_filename_list_length) def test_make_graveyard_accepts_offset_from_graveyard(self): """Creates a graveyard for a reactor and sets the graveyard_offset.