diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ae1dd81..4498639 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,7 +2,6 @@ stages: - deploy - test - black: stage: test image: python:3.8 @@ -14,19 +13,12 @@ black: script: - black --check . - -# https://github.com/python-gitlab/python-gitlab/blob/master/.gitlab-ci.yml used for reference -deploy: - stage: deploy +pypi: image: python:3.8 - - before_script: - - python -V # Print out python version for debugging - - pip install -U setuptools wheel twine - + stage: deploy script: - - python setup.py bdist_wheel - - twine upload --skip-existing -u __token__ -p $PYPI_TOKEN dist dist/* - - only: - - tags + - apt-get update -qy + - apt-get install -y ruby-dev + - gem install dpl + - python setup.py sdist + - dpl --provider=pypi --user=$TWINE_USERNAME --password=$TWINE_PASSWORD --skip_existing=true diff --git a/README.md b/README.md index b5a1708..f70ed4a 100644 --- a/README.md +++ b/README.md @@ -2,17 +2,44 @@ A small python library with functions to assist engineers. -## Usage +## Getting Started -### Code: +- Install using pip: + +``` +pip install aero-astro-calc +``` + +- Import into your Python project ```python from aero_astro_calc import PlaneStress +``` +## Usage + +Make plane stress object: + +```python stress = PlaneStress(80, -40, 25) +``` + +View the stress on a 2D plane: + +```python stress.plane() ``` -### Output: +![Plane Stress example](images/PlaneStress.png) -![Plane Stress example](PlaneStress.png) +View Mohr's circle of the stresses: + +```python +stress.mohr() +``` + +![Mohr's Circle Example](images/MohrsCircle.png) + +## Contact + +Anson Biggs - [anson@ansonbiggs.com](mailto:anson@ansonbiggs.com) - [@Anson_3D](https://twitter.com/Anson_3D) diff --git a/aero_astro_calc/PlaneStress.py b/aero_astro_calc/PlaneStress.py index 1f3f4c6..8cacbce 100644 --- a/aero_astro_calc/PlaneStress.py +++ b/aero_astro_calc/PlaneStress.py @@ -1,9 +1,7 @@ -from math import sqrt - +from aero_astro_calc.dependencies.LatexLabel import LatexLabel from bokeh.models import Arrow from bokeh.plotting import figure, show - -from aero_astro_calc.dependencies.LatexLabel import LatexLabel +from numpy import cos, linspace, pi, sin, sqrt class PlaneStress: @@ -63,7 +61,7 @@ class PlaneStress: LatexLabel( x=-1.8, y=1.8, - text=f"\sigma_1 = {round(self.sigma_1,4)}", + text=f"\\sigma_1 = {round(self.sigma_1,4)}", render_mode="css", ) ) @@ -71,7 +69,7 @@ class PlaneStress: LatexLabel( x=-1.8, y=1.4, - text=f"\sigma_2 = {round(self.sigma_2,4)}", + text=f"\\sigma_2 = {round(self.sigma_2,4)}", render_mode="css", ) ) @@ -85,3 +83,74 @@ class PlaneStress: ) show(plot) + + def mohr(self): + padding = 1.3 + midpoint = (self.sigma_1 + self.sigma_2) / 2 + + plot = figure( + x_range=[ + (midpoint - self.tau_max) * padding, + (midpoint + self.tau_max) * padding, + ], + y_range=[-self.tau_max * padding, self.tau_max * padding], + ) + + # Bokeh circle is stupid so it has to be done the hard way. + theta = linspace(0, 2 * pi, 200) + sig1 = self.tau_max * cos(theta) + midpoint + sig2 = self.tau_max * sin(theta) + plot.line(x=sig1, y=sig2) + + # x axis + plot.line( + x=[ + (midpoint - self.tau_max) * padding, + (midpoint + self.tau_max) * padding, + ], + y=[0, 0], + line_color="black", + ) + + # y axis + plot.line( + x=[0, 0], + y=[self.tau_max * padding, self.tau_max * -padding], + line_color="black", + ) + + # Labels + # sigma_1 + plot.circle(x=midpoint + self.tau_max, y=0, size=self.tau_max * 0.2) + plot.add_layout( + LatexLabel( + x=midpoint + self.tau_max, + y=self.tau_max * -0.1, + text=f"\\sigma_1 = {round(self.sigma_1)}", + render_mode="css", + ) + ) + + # sigma_2 + plot.circle(x=midpoint - self.tau_max, y=0, size=self.tau_max * 0.2) + plot.add_layout( + LatexLabel( + x=midpoint - self.tau_max, + y=self.tau_max * -0.1, + text=f"\\sigma_2 = {round(self.sigma_2)}", + render_mode="css", + ) + ) + + # tau_max + plot.circle(x=midpoint, y=self.tau_max, size=sqrt(self.tau_max)) + plot.add_layout( + LatexLabel( + x=midpoint, + y=self.tau_max * 0.9, + text=f"\\tau_{{max}} = {round(self.tau_max)}", + render_mode="css", + ) + ) + + show(plot) diff --git a/images/MohrsCircle.png b/images/MohrsCircle.png new file mode 100644 index 0000000..9d56e03 Binary files /dev/null and b/images/MohrsCircle.png differ diff --git a/PlaneStress.png b/images/PlaneStress.png similarity index 100% rename from PlaneStress.png rename to images/PlaneStress.png diff --git a/setup.py b/setup.py index 7829b8d..cd438fe 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ with open("README.md", "r") as fh: setuptools.setup( name="aero_astro_calc", - version="2020.1.0", + version="2020.2.0", author="Anson Biggs", author_email="anson@ansonbiggs.com", description="A small python library with functions to assist engineers.",