{ "info": { "author": "Joseph Contreras", "author_email": "26684136+JosephJContreras@users.noreply.github.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "# FEmethods\n\n[![PyPI version](https://badge.fury.io/py/femethods.svg)](https://badge.fury.io/py/femethods)\n[![Build Status](https://travis-ci.org/josephjcontreras/FEMethods.svg?branch=master)](https://travis-ci.org/josephjcontreras/FEMethods)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/josephjcontreras/FEMethods/blob/master/License.txt)\n[![Coverage Status](https://coveralls.io/repos/github/josephjcontreras/FEMethods/badge.svg?branch=master)](https://coveralls.io/github/josephjcontreras/FEMethods?branch=master)\n[![Documentation Status](https://readthedocs.org/projects/femethods/badge/?version=latest)](https://femethods.readthedocs.io/en/latest/?badge=latest)\n\n\n## Introduction\n_FEmethods_ is a python module that uses Finite Element Methods to determine the\nreactions, and plot the shear, moment, and deflection along the length of a beam.\n\nUsing Finite elements has the advantage over using exact solutions because it \ncan be used as a general analysis, and can analyze beams that are statically \nindeterminate. The downside of this numerical approach is it will be less \naccurate than the exact approach.\n\nThe official documentation is on [Read the Docs](https://femethods.readthedocs.io/en/latest/). \n\n## Installation\n\n__FEMethods__ is hosted on PyPi, so installation is simple.\n\n`pip install femethods`\n\n\n## General Layout\n\n`FEMethods` is made up of several sub-classes to make it easy to define loads\nand reaction types.\n\n### femethods.loads\nThere are currently only two different load types that are implemented.\n\n * `PointLoad`, a normal force acting with a constant magnitude on a single point\n * `MomentLoad`, a rotational moment acting with a constant magnitude acting at a single point\n\nAll loads are defined by a `location` along the element, and a `magnitude`. \nThe `location` must be positive, and must lie on the length of the beam,\nor it will raise a `ValueError`\n\n_Future goals are to add a library of standard distributed loads \n(constant, ramp, etc) as well as functionality that will allow a distributed \nload function to be the input._\n\n#### femethods.loads.PointLoad\nThe `PointLoad` class describes a standard point load. A normal load acting at\na single point with a constant value. It is defined with a location and a \nmagnitude.\n\n```python\n>>> PointLoad(-10, 5)\nPointLoad(magnitude=-10, location=5)\n```\n\nThe `location` must be a positive value, and less than or equal to the length\nof the beam, otherwise it raise a `ValueError`.\n\n#### femethods.loads.MomentLoad\nA `MomentLoad` class describes a standard moment load. A moment acting at a \nsingle point with a constant value. It is defined with a location and a value.\n\n```python\n>>> MomentLoad(2, 5)\nMomentLoad(magnitude=2, location=5)\n```\n\nThe `location` must be a positive value, and less than or equal to the length\nof the beam, otherwise it raise a `ValueError`.\n\n### femethods.reactions\n\nThere are two different reactions that can be used to support an element.\n\n * `FixedReaction` does not allow vertical or rotational displacement\n * `PinnedReaction` does not allow vertical displacement but does allow rotational displacement\n\nAll reactions have two properties, a `force` and a `moment`. They represent\nthe numerical value for the resistive force or moment acting on the element \nto support the load(s). These properties are set to `None` when the reaction \nis instantiated (ie, they are unknown). They are calculated and set when \nanalyzing a element. Note that the `moment` property of a `PinnedReaction` \nwill always be `None` because it does not resist a moment.\n\nThe `value` property is a read-only combination of the `force` and `moment` \nproperties, and is in the form `value = (force, moment)`\n\nAll reactions have an `invalidate` method that will set the `force` and\n`moment` back to `None`. This is useful when changing parameters and the\n calculated reactions are no longer valid.\n\n#### femethods.reactions.FixedReaction\nThe `FixedReaction` is a reaction class that prevents both vertical and angular\n(rotational displacement). It has boundary conditions of `bc = (0, 0)`\n\n```python\n>>> FixedReaction(3)\nFixedReaction(location=3)\n\n>>> print(FixedReaction(3))\nFixedReaction\n Location: 3\n Force: None\n Moment: None\n```\n\nThe `location` must be a positive value, and less than or equal to the length\nof the beam, otherwise it raise a `ValueError`.\n\n#### femethods.reactions.PinnedReaction\nThe `PinnedReaction` is a reaction class that prevents vertical displacement, \nbut allows angular (rotational) displacement. It has boundary conditions of `bc = (0, None)`\n\n```python\n>>> PinnedReaction(7)\nPinnedReaction(location=7)\n>>> print(PinnedReaction(7))\nPinnedReaction\n Location: 7\n Force: None\n Moment: None\n```\n\nThe `location` must be a positive value, and less than or equal to the length\nof the beam, otherwise it raise a `ValueError`.\n\n### femethods.elements.Beam\nDefines a beam as a finite element. This class will handle the bulk of the \nanalysis, populating properties (such as meshing and values for the reactions).\n\nTo create a `Beam` object, write the following:\n\n```python\nb = Beam(length, loads, reactions, E=1, Ixx=1)\n```\n\nWhere the loads and reactions are a list of `loads` and `reactions` respectively.\n\n**Note**\nLoads and reactions must be a list, even when there is only one.\n\n The `E` and `Ixx` parameters are Young's modulus and the polar moment of \n inertia about the bending axis. They both default to `1`.\n\n## Examples\n\nThis section contains several different examples of how to use the beam \nelement, and their results.\n\nFor all examples, the following have been imported:\n\n```python\nfrom femethods.elements import Beam\nfrom femethods.reactions import FixedReaction, PinnedReaction\nfrom femethods.loads import PointLoad, MomentLoad\n```\n\n### Example 1: Cantilevered Beam with Fixed Support and End Loading\n\n```python\nbeam_len = 10\n# Note that both the reaction and load are both lists. They must always be\n# given to Beam as a list,\nr = [FixedReaction(0)] # define reactions as list\np = [PointLoad(magnitude=-2, location=beam_len)] # define loads as list\n\nb = Beam(beam_len, loads=p, reactions=r, E=29e6, Ixx=125)\n\n# an explicit solve is required to calculate the reaction values\nb.solve()\nprint(b)\n```\n\nThe output of the program is\n```\nPARAMETERS\nLength (length): 10\nYoung's Modulus (E): 29000000.0\nArea moment of inertia (Ixx): 125\nLOADING\nType: point load\n Location: 10\n Magnitude: -2\n\nREACTIONS\nType: fixed\n Location: 0\n Force: 2.0\n Moment: 20.0\n```\n\n### Example 2: Cantilevered Beam with 3 Pinned Supports and End Loading\n\n```python\nbeam_len = 10\n\n# Note that both the reaction and load are both lists. They must always be\n# given to Beam as a list,\nr = [PinnedReaction(0), PinnedReaction(2), PinnedReaction(6)] # define reactions\np = [PointLoad(magnitude=-2, location=beam_len)] # define loads\n\nb = Beam(beam_len, loads=p, reactions=r, E=29e6, Ixx=125)\n\n# an explicit solve is required to calculate the reaction values\nb.solve()\nprint(b)\n```\n\nThe output of the program is\n```\nPARAMETERS\nLength (length): 10\nYoung's Modulus (E): 29000000.0\nArea moment of inertia (Ixx): 125\nLOADING\nType: point load\n Location: 10\n Magnitude: -2\n\nREACTIONS\nType: pinned\n Location: 0\n Force: 1.3333333333333346\n Moment: 0.0\nType: pinned\n Location: 2\n Force: -4.000000000000004\n Moment: 0.0\nType: pinned\n Location: 6\n Force: 4.666666666666671\n Moment: 0.0\n```\n\n## TODO\n * Add a more thorough documentation for all the features, limitations and FE fundamentals for each section\n * Add additional element types, such as the bar element\n\n## Acknowledgements\n[Derivation of stiffness matrix for a beam](https://www.12000.org/my_notes/stiffness_matrix/stiffness_matrix_report.htm#x1-50002.1.1) by Nasser M. Abbasi\n[An idiot\u00e2\u20ac\u2122s guide to Python documentation with Sphinx and ReadTheDocs](https://samnicholls.net/2016/06/15/how-to-sphinx-readthedocs) by [Sam Nicholls](https://samnicholls.net/about/) for\n a very helpful guide on how to get sphinx set up\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://femethods.readthedocs.io/en/latest/index.html", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "femethods", "package_url": "https://pypi.org/project/femethods/", "platform": "", "project_url": "https://pypi.org/project/femethods/", "project_urls": { "Homepage": "https://femethods.readthedocs.io/en/latest/index.html" }, "release_url": "https://pypi.org/project/femethods/0.1.6.dev0/", "requires_dist": [ "numpy", "matplotlib", "scipy" ], "requires_python": "", "summary": "Implementation of Finite Element Analysis", "version": "0.1.6.dev0" }, "last_serial": 5317767, "releases": { "0.1.2.dev0": [ { "comment_text": "", "digests": { "md5": "43cc0a668dd11d980342f96f4b1d5cf9", "sha256": "9a0bf36fb236914c6c2ad7a6754cef00603f06709096b183c171a1e2415e6288" }, "downloads": -1, "filename": "femethods-0.1.2.dev0-py3-none-any.whl", "has_sig": false, "md5_digest": "43cc0a668dd11d980342f96f4b1d5cf9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11686, "upload_time": "2019-01-03T04:08:06", "url": "https://files.pythonhosted.org/packages/5d/c8/7200c834798599dda7af165839f249777bcd8b3f0d88de3c4164ba6cbb6a/femethods-0.1.2.dev0-py3-none-any.whl" } ], "0.1.3.dev0": [ { "comment_text": "", "digests": { "md5": "d1b887b0f2677bc537840b6169e3dd9f", "sha256": "3fcca9fc017e9aaa754bf20fb1409df971f2bde6a01f4d07f69a1d8309ba9435" }, "downloads": -1, "filename": "femethods-0.1.3.dev0-py3-none-any.whl", "has_sig": false, "md5_digest": "d1b887b0f2677bc537840b6169e3dd9f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13244, "upload_time": "2019-01-26T19:12:42", "url": "https://files.pythonhosted.org/packages/09/01/edc906f1efa8f3cd0f22a4053e9d652936c996dcc10a4a775d0af46f705d/femethods-0.1.3.dev0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "46e0dfba47f3ca96e9b5725330bbb9d9", "sha256": "dcd150f56912f4bf95f868e361c7683e58b444b2574a09161cf44038ba8e42ec" }, "downloads": -1, "filename": "femethods-0.1.3.dev0.tar.gz", "has_sig": false, "md5_digest": "46e0dfba47f3ca96e9b5725330bbb9d9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12241, "upload_time": "2019-01-26T19:12:43", "url": "https://files.pythonhosted.org/packages/ce/e8/46f214d115e82ca190123ca0a78d536d53ec1fe7e2ceb5d291cfbf02ce14/femethods-0.1.3.dev0.tar.gz" } ], "0.1.4.dev0": [ { "comment_text": "", "digests": { "md5": "3cd9049bd65c25b1879deccc1ffd8071", "sha256": "9244115063b60380d67bd44e8e10bd43a97600881994e02237d89a88f5ccde6d" }, "downloads": -1, "filename": "femethods-0.1.4.dev0-py3-none-any.whl", "has_sig": false, "md5_digest": "3cd9049bd65c25b1879deccc1ffd8071", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 18431, "upload_time": "2019-03-08T04:23:44", "url": "https://files.pythonhosted.org/packages/39/97/1cac33cc23c8001da7ae623f65c4afa2cbc9e5a3ed0ad8b9ed2542475f06/femethods-0.1.4.dev0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0b2d57bf429481bfb4fd705550071ff7", "sha256": "5c99192305aa41c4c0ba9629cb66ef92c9783242d8424651c23f7acf5cd06897" }, "downloads": -1, "filename": "femethods-0.1.4.dev0.tar.gz", "has_sig": false, "md5_digest": "0b2d57bf429481bfb4fd705550071ff7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16396, "upload_time": "2019-03-08T04:23:46", "url": "https://files.pythonhosted.org/packages/b0/71/92a62fbf07729b9f985316d0769df6c1ab8ff0e32d2dd184ddc60cfe8a1a/femethods-0.1.4.dev0.tar.gz" } ], "0.1.5.dev0": [ { "comment_text": "", "digests": { "md5": "e4c9f23137b54c7a3f29b8cca118aeb0", "sha256": "4bfb5d41cdd9fb8a0139b99c9767d2048d8d2e5feedaa59b3a62062c33f5bae0" }, "downloads": -1, "filename": "femethods-0.1.5.dev0-py3-none-any.whl", "has_sig": false, "md5_digest": "e4c9f23137b54c7a3f29b8cca118aeb0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 23704, "upload_time": "2019-04-13T03:23:22", "url": "https://files.pythonhosted.org/packages/a4/9b/53fc91e27e164db8d6b8e78ce3b311390fa71fe502bc55e1f7b5d00f37c2/femethods-0.1.5.dev0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1b0e0c575f271bc6aaf3b65b22218d41", "sha256": "46eec3c823b7103b5873e813789f5fb315908f39bedc5a2a7f7e55e9ed0e2325" }, "downloads": -1, "filename": "femethods-0.1.5.dev0.tar.gz", "has_sig": false, "md5_digest": "1b0e0c575f271bc6aaf3b65b22218d41", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15862, "upload_time": "2019-04-13T03:23:26", "url": "https://files.pythonhosted.org/packages/b8/f5/c51e2cbcc60483910fcab56dffa6ed4b963006a79380a675e0524caffe2b/femethods-0.1.5.dev0.tar.gz" } ], "0.1.6.dev0": [ { "comment_text": "", "digests": { "md5": "dbe276563edf7457b039db2a2d720e79", "sha256": "6fc8395f76a27824dea5678d113626b5be467c4099ffc3288bff0c58cee8276a" }, "downloads": -1, "filename": "femethods-0.1.6.dev0-py3-none-any.whl", "has_sig": false, "md5_digest": "dbe276563edf7457b039db2a2d720e79", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 25830, "upload_time": "2019-05-26T03:10:44", "url": "https://files.pythonhosted.org/packages/fe/f8/eaf3c99ebdbc3324099989e20c6fd92a4f465ba38178b933517425f5f0b3/femethods-0.1.6.dev0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5a5e6553ae4c56b6ba18ffed859adaa2", "sha256": "96c972807d9a6f1c348bf18bb2d0899350a0674523f03a255b5ef0fc5733bffe" }, "downloads": -1, "filename": "femethods-0.1.6.dev0.tar.gz", "has_sig": false, "md5_digest": "5a5e6553ae4c56b6ba18ffed859adaa2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18423, "upload_time": "2019-05-26T03:10:48", "url": "https://files.pythonhosted.org/packages/bd/b6/8c22448abf7f409f6fc1fbe34729c78aade7a26470d0ae77e6c15979aa08/femethods-0.1.6.dev0.tar.gz" } ], "0.1.dev0": [ { "comment_text": "", "digests": { "md5": "3a3aba3bca51458dca3156814740f4e8", "sha256": "22b01e35da3896d3eb482fe4cb5f62f3e64f2060d6a3be7d4462d222f96ac2a4" }, "downloads": -1, "filename": "femethods-0.1.dev0-py3-none-any.whl", "has_sig": false, "md5_digest": "3a3aba3bca51458dca3156814740f4e8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11596, "upload_time": "2019-01-03T03:17:04", "url": "https://files.pythonhosted.org/packages/f7/78/a134f59f284267a55f1e12ce37d99aba2ddc59b39b502d03178bc8d519c2/femethods-0.1.dev0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6d55bbd5052a5c4f822690683954a34b", "sha256": "7409721f2022390e36c7ab11a4724a8e82b39ebfbe58675ecfd2dce8e9140396" }, "downloads": -1, "filename": "femethods-0.1.dev0.tar.gz", "has_sig": false, "md5_digest": "6d55bbd5052a5c4f822690683954a34b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11218, "upload_time": "2019-01-03T03:17:06", "url": "https://files.pythonhosted.org/packages/60/41/171008ec1788d281b39dfed9f875f39447c3b2dc2c9d0797a82a107878b0/femethods-0.1.dev0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "dbe276563edf7457b039db2a2d720e79", "sha256": "6fc8395f76a27824dea5678d113626b5be467c4099ffc3288bff0c58cee8276a" }, "downloads": -1, "filename": "femethods-0.1.6.dev0-py3-none-any.whl", "has_sig": false, "md5_digest": "dbe276563edf7457b039db2a2d720e79", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 25830, "upload_time": "2019-05-26T03:10:44", "url": "https://files.pythonhosted.org/packages/fe/f8/eaf3c99ebdbc3324099989e20c6fd92a4f465ba38178b933517425f5f0b3/femethods-0.1.6.dev0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5a5e6553ae4c56b6ba18ffed859adaa2", "sha256": "96c972807d9a6f1c348bf18bb2d0899350a0674523f03a255b5ef0fc5733bffe" }, "downloads": -1, "filename": "femethods-0.1.6.dev0.tar.gz", "has_sig": false, "md5_digest": "5a5e6553ae4c56b6ba18ffed859adaa2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18423, "upload_time": "2019-05-26T03:10:48", "url": "https://files.pythonhosted.org/packages/bd/b6/8c22448abf7f409f6fc1fbe34729c78aade7a26470d0ae77e6c15979aa08/femethods-0.1.6.dev0.tar.gz" } ] }