Skip to main content

Create 3D fusion reactor CAD models based on input parameters

Project description

N|Python CircleCI codecov PyPI version Documentation Status Docker Cloud Build Status

Paramak

The Paramak python package allows rapid production of 3D CAD models of fusion reactors. The purpose of the Paramak is to provide geometry for parametric studies. It is possible to use the created geometry in engineering and neutronics studies as the STP or STL files produced can be automatically converted to DAGMC compatable neutronics models or meshed and used in finite element analysis codes.

:point_right: Documentation

Installation

To install the Paramak you need to have Conda, Cadquery 2 and Pip. If you have these three dependancies already then you can install the Paramak using Pip:

pip install paramak

Detailed installation instructions can be found in the User's Guide.

Features

In general the Paramak takes points and connection information in 2D space and performs operations on them to create 3D volumes. The points and connections can be provided by the user or when using parametric_components the points and connections are calculated by the software.

Once points and connections between the points are provided the user has options to perform CAD operations (rotate or extrude on different orientations) to create a 3D volume and boolean operations like cut.

The different families of shapes that can be made with the Paramak are shown in the table below. The CadQuery objects created can be combined and modified (e.g. fillet corners) using CadQueries powerful filtering capabilties to create more complex models (e.g. a Tokamak). The Tokamak images below are coloured based on the shape family that the component is made from. There are also parametric components which provide convenient fusion relevent shapes for common reactor components.

Rotate Extrude
Points connected with straight lines

RotateStraightShape()

ExtrudeStraightShape()
Points connected with spline curves

RotateSplineShape()

ExtrudeSplineShape()
Points connected with a mixture (splines, straights and circles)

RotateMixedShape()

ExtrudeMixedShape()
Circular shapes

RotateCircleShape()

ExtrudeCircleShape()

Usage - Parametric Shapes

There are a collection of Python scripts in the example folder that demonstrate simple shape construction and visualisation. However here is a quick example of a RotateStraightShape.

After importing the class the user then sets the points. By default, points should be a list of (x,z) points. In this case the points are connected with straight lines.

import paramak

my_shape = paramak.RotateStraightShape(points = [(20,0), (20,100), (100,0)])

Once these properties have been set users can write 3D volumes in CAD STP or STL formats.

my_shape.export_stp('example.stp')

my_shape.export_stl('example.stl')

Usage - Parametric Components

Parametric components are wrapped versions of the eight basic shapes where parameters drive the construction of the shape. There are numerous parametric components for a varity of different reactor components such as center columns, blankets, poloidal field coils. This example shows the construction of a plasma. Users could also construct a plasma by using a RotateSplineShape() combined with coordinates for the points. However a parametric component called Plasma can construct a plasma from more convenient parameters. Parametric components also inherit from the Shape object so they have access to the same methods like export_stp() and export_stl().

import paramak

my_plasma = paramak.Plasma(major_radius=620, minor_radius=210, triangularity=0.33, elongation=1.85)

my_plasma.export_stp('plasma.stp')

Usage - Parametric Reactors

Parametric Reactors are wrapped versions of a combination of parametric shapes and components that comprise a particular reactor design. Some parametric reactors include a ball reactor and a submersion ball reactor. These allow full reactor models to be constructed by specifying a series of simple parameters. This example shows the construction of a simple ball reactor without the optional outer pf and tf coils.

import paramak

my_reactor = paramak.BallReactor(
    inner_bore_radial_thickness = 50,
    inboard_tf_leg_radial_thickness = 50,
    center_column_shield_radial_thickness= 50,
    divertor_radial_thickness = 100,
    inner_plasma_gap_radial_thickness = 50,
    plasma_radial_thickness = 200,
    outer_plasma_gap_radial_thickness = 50,
    firstwall_radial_thickness = 50,
    blanket_radial_thickness = 100,
    blanket_rear_wall_radial_thickness = 50,
    elongation = 2,
    triangularity = 0.55,
    number_of_tf_coils = 16,
    rotation_angle = 180

my_reactor.name = 'BallReactor'

my_reactor.export_stp()

Usage - Reactor object

A reactor object provides a container object for all Shape objects created, and allows operations to be performed on the whole collection of Shapes.

import paramak

Initiate a Reactor object and pass a list of all Shape objects to the shapes_and_components parameter.

my_reactor = paramak.Reactor(shapes_and_components = [my_shape, my_plasma])

A html graph of the combined Shapes can be created.

my_reactor.export_html('reactor.html')

Usage - Neutronics model creation

First assign stp_filenames to each of the Shape objects that were created earlier on.

my_shape.stp_filename = 'my_shape.stp'

my_plasma.stp_filename = 'my_plasma.stp'

Then assign material_tags to each of the Shape objects.

my_shape.material_tag = 'steel'

my_plasma.material_tag = 'DT_plasma'

Note - Tetrahedral meshes can also be assigned to Shape objects

Now add the Shape objects to a freshly created reactor object.

new_reactor = paramak.Reactor(shapes_and_components = [my_shape, my_plasma])

The entire reactor can now be exported as step files. This also generates a DAGMC graveyard automatically.

my_reactor.export_stp()

A manifest.json file that contains all the step filenames and materials can now be created.

my_reactor.export_neutronics_description()

Once you step files and the neutronics description has been exported then Trelis can be used to generate a DAGMC geometry in the usual manner. There is also a convenient script included in task 12 of the UKAEA openmc workshop which can be used in conjunction with the neutronics description json file to automatically create a DAGMC geometry. Download this script and place it in the same directory as the manifest.json and step files. Then run the following command from the terminal. You will need to have previously installed the DAGMC plugin for Trelis.

trelis make_faceteted_neutronics_model.py

Alternatively, run this without the GUI in batch mode using:

trelis -batch -nographics make_faceteted_neutronics_model.py

This should export a h5m file for use in DAGMC.

Further information on DAGMC neutronics can be found here and information on OpenMC can be found here. The two codes can be used together to simulate neutron transport on the h5m file created. The UKAEA openmc workshop also has two tasks that might be of interest task 10 and task 12.

Example scripts

There are several example scripts in the examples folder. A good one to start with is make_CAD_from_points.py which makes simple examples of the different types of shapes (extrude, rotate) with different connection methods (splines, straight lines and circles).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

paramak-0.0.14.tar.gz (61.0 kB view details)

Uploaded Source

Built Distribution

paramak-0.0.14-py3-none-any.whl (108.8 kB view details)

Uploaded Python 3

File details

Details for the file paramak-0.0.14.tar.gz.

File metadata

  • Download URL: paramak-0.0.14.tar.gz
  • Upload date:
  • Size: 61.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.5

File hashes

Hashes for paramak-0.0.14.tar.gz
Algorithm Hash digest
SHA256 95ca57ea7c0d3624cd48b910155635e57fbbe3057e3bd37386855f1feeec751b
MD5 df0331c7c8fb90d6e3056a719ee9741e
BLAKE2b-256 a9d7a66eb1d110f7677b87be5998b4399c353ef08f7203d2b7bcecfa72da6831

See more details on using hashes here.

File details

Details for the file paramak-0.0.14-py3-none-any.whl.

File metadata

  • Download URL: paramak-0.0.14-py3-none-any.whl
  • Upload date:
  • Size: 108.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/47.1.0 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.5

File hashes

Hashes for paramak-0.0.14-py3-none-any.whl
Algorithm Hash digest
SHA256 f9f1ea10f067c5aeaccdf6fc703ebc206f07bc5dad33b53a9ec4b30cda040d8b
MD5 84816abba0c1510074721a81628cef9e
BLAKE2b-256 26181a79ac518bb41f8d71c3c5091e28832047b0c8889d75ed4fbbfa2d2e84ad

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page