boxbeam


Nameboxbeam JSON
Version 1.3.0.post1 PyPI version JSON
download
home_pagehttps://gitlab.com/dlr-sy/boxbeam
SummaryCalculation of effective cross-sectional properties of composite beams
upload_time2024-07-24 18:28:17
maintainerGarbade, Marc
docs_urlNone
authorHeinecke, Falk
requires_python!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7
licenseMIT
keywords analysis beam composite
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            [![PyPi](https://img.shields.io/static/v1?label=PyPi&message=1.3.0&color=informational&logo=pypi)](https://pypi.org/project/boxbeam/)
[![doi](https://img.shields.io/badge/DOI-10.5281%2Fzenodo.12795533-red.svg)](https://zenodo.org/records/12795533)
[![pipeline status](https://gitlab.com/dlr-sy/boxbeam/badges/master/pipeline.svg)]()

# BoxBeam
BoxBeam is a legacy Fortran-based beam calculation tool. It is compiled for Python using [f2py](https://numpy.org/doc/stable/f2py).
> Installation from source requires an active Fortran compiler (ifort, gfortran). 
## Downloading
Use GIT to get the latest code base. From the command line, use
```
git clone https://gitlab.dlr.de/fa_sw/boxbeam boxbeam
```
If you check out the repository for the first time, you have to initialize all submodule dependencies first. Execute the following from within the repository. 
```
git submodule update --init --recursive
```
To update all refererenced submodules to the latest production level, use
```
git submodule foreach --recursive 'git pull origin $(git config -f $toplevel/.gitmodules submodule.$name.branch || echo master)'
```
## Installation
BoxBeam can be installed from source using [poetry](https://python-poetry.org). If you don't have [poetry](https://python-poetry.org) installed, run
```
pip install poetry --pre --upgrade
```
to install the latest version of [poetry](https://python-poetry.org) within your python environment. Use
```
poetry update
```
to update all dependencies in the lock file or directly execute
```
poetry install
```
to install all dependencies from the lock file. Last, you should be able to import BoxBeam as a python package.
```python
import boxbeam
```
## Example
Copy and paste the following text into a new python script to verify the local installation
```python
import os, sys
import boxbeam as bbeam
 
from itertools import count, zip_longest
from operator import itemgetter
from collections import OrderedDict
import numpy as np

def toolInitiate(directory):
    #---INITIATE BOXBEAM VARIABLES
    bbeam.boxbeam.initialize()

    extendedLogFile = False
    newPath = directory#+'\\TestProfile.out'

    #setting control parameters for BOXBEAM
    bbeam.steuer.druck = extendedLogFile # extended log file
    bbeam.steuer.nurqer = False
    bbeam.steuer.klog = 11
    bbeam.steuer.kraeft = False # calculate nodal forces (utilization for FE applications)

    #---CHANGE THE NAME OF THE OUTPUT FILE TO THE ACTUAL CROSS SECTION NAME
    if extendedLogFile:
        for ffile, bbeamPathVar in zip(["boxbeam_results.out", 
                                        "boxbeam_test.out"], 
                                        ["csinfopath", 
                                         "vbinfopath"]):

            fullPathFfile = os.path.abspath(os.path.join(newPath, ffile))

            # 240 is the length of the character variable reserved
            # within FORTRAN to store the directory name
            if len(fullPathFfile) > 240:
                raise Exception("Path length of file %s to long!" % fullPathFfile)

            pathList = [""] * 240
            pathList[: len(fullPathFfile)] = list(fullPathFfile)

            if bbeamPathVar == "csinfopath":
                self.bbeam.path.csinfopath = np.array(pathList,dtype="object")
            else:
                self.bbeam.path.vbinfopath = np.array(pathList,dtype="object")

def toolCalculate(capCount, webCount, cellCount, yi, zi, yk0, zk0, yklk, zklk, ig1, ig2, iak, ia, 
                    webExtensionalStiffness, webShearStiffness, webRefPlaneDist, webThickness,webDensity):
    #---ASSIGN GURT DATA
    bbeam.gurt.ig = capCount
    
    #---ASSIGN GURT COORDINATES
    variableList = np.zeros(bbeam.restr.maxgu-bbeam.gurt.ig).tolist()
    bbeam.gurt.yi = yi + variableList
    bbeam.gurt.zi = zi + variableList
    
    #---ASSIGN GURT MATERIAL INFORMATION WITHIN BOXBEAM
    bbeam.gurt.bi = np.zeros(bbeam.restr.maxgu)
    bbeam.gurt.myi = np.zeros(bbeam.restr.maxgu)

    #---ASSIGN BOXBEAM WAND DATA
    bbeam.wand.kw = webCount
    
    #---ASSIGN WAND COORDINATES
    variableList = np.zeros(bbeam.restr.maxwa-len(yk0)).tolist()
    bbeam.wand.yk0 = yk0 + variableList
    bbeam.wand.yklk = yklk + variableList
    bbeam.wand.zk0 = zk0 + variableList
    bbeam.wand.zklk = zklk + variableList
    
    #---ASSIGN WAND MATERIAL INFORMATION WITHIN BOXBEAM
    variableList = np.zeros(bbeam.restr.maxwa-bbeam.wand.kw).tolist()
    bbeam.wand.it = (5*np.ones(bbeam.wand.kw)).tolist()+variableList
    bbeam.wand.bk = webExtensionalStiffness+variableList
    bbeam.wand.gk = webShearStiffness+variableList
    bbeam.wand.rhok = webDensity+variableList
    bbeam.wand.e = webRefPlaneDist+variableList
    
    #---ASSIGN WAND TOPOLOGY WITHIN BOXBEAM
    bbeam.wand.th = webThickness+variableList
    bbeam.wand.ig1 = ig1+variableList
    bbeam.wand.ig2 = ig2+variableList

    #---ASSIGN BOXBEAM ZELLE DATA
    bbeam.zelle.az = cellCount
    variableList = np.zeros(bbeam.restr.maxze-bbeam.zelle.az).tolist()
    bbeam.zelle.iak = iak+variableList
    
    iaArrayTransposed = np.zeros((bbeam.restr.maxze, bbeam.restr.maxgu))
    for cellNumber in range(int(bbeam.restr.maxze)):
        if cellNumber < cellCount:
            iaArrayTransposed[cellNumber, :len(ia[cellNumber])] += ia[cellNumber]
    bbeam.zelle.ia = iaArrayTransposed.T

    #---ASSIGN BOXBEAM UNIFY LOADS
    for attrName, load in zip_longest(["qqx","qqy","qqz","qmx","qmy","qmz"], reactionForces):
        setattr(bbeam.spanug, attrName, load)

    #---EXECUTE BOXBEAM FOR CALCULATING THE CROSS SECTION PARAMETERS
    bbeam.boxbeam.getequivalentxsection()

    crossSectionParamNames = ['YS','ZS','YT','ZT','YMST','ZMST','YMSTAC','ZMSTAC','BX',
                                'ALPHA','DYYSTE','DZZSTE','DYY','DZZ','DZY','DT','M','IYYS','IZZS','IZYS','ITT']

    crossSectionParameters = {}
    for param in crossSectionParamNames:
        crossSectionParameters[param] = float(getattr(bbeam.quer, param.lower()))

    effectiveProps = OrderedDict([
                        ('EA',crossSectionParameters['BX']    ),
                        ('EIxx',crossSectionParameters['DYY'] ),
                        ('EIyy',crossSectionParameters['DZZ'] ),
                        ('GJ',crossSectionParameters['DT']    ),
                        ('YS',crossSectionParameters['YS']    ),
                        ('ZS',crossSectionParameters['ZS']    ),
                        ])


if __name__ == '__main__':

    #Specify folder where output files are to be stored
    runDir = os.path.join(os.getcwd(),"boxbeam")
    try:
        os.makedirs(runDir)
    except WindowsError: 
        pass

    #Tool specific limitations
    #maxCaps = 22 #variable specifying the maximum number of caps within a BoxBeam cross section - defined in bbeam.pyd
    #maxWebs = 31 #variable specifying the maximum number of walls within a BoxBeam cross section - defined in bbeam.pyd
    #maxCells = 10 #variable specifying the maximum number of cells within a BoxBeam cross section - defined in bbeam.pyd

#------------------------------------------------------------------------------------------------------------------------
# Initiation of boxbeam
#------------------------------------------------------------------------------------------------------------------------

    toolInitiate(runDir)

#------------------------------------------------------------------------------------------------------------------------
# Input for profile
#------------------------------------------------------------------------------------------------------------------------

    calcGeometry = False # If true the material data is set in a fashion, that the geometric properties (e.g. area moments of inertia) can be calculated.
    
    thickness1 = 1.25
    thickness2 = .375
    if calcGeometry:
        extensionalStiffness1 = 1.*thickness1
        extensionalStiffness2 = 1.*thickness2
        shearStiffness1 = 1.*thickness1
        shearStiffness2 = 1.*thickness2
        density1 = 1.*thickness1
        density2 = 1.*thickness2
        bbeam.steuer.nurqer = True

        #"qqx","qqy","qqz","qmx","qmy","qmz"
        reactionForces = [0., 0., 0., 0., 0., 0.]     
        
    else:
        extensionalStiffness1 = 7.3335e4*thickness1
        extensionalStiffness2 = 3.2232e4*thickness2
        shearStiffness1 = 1.7327e4*thickness1
        shearStiffness2 = 2.5012e4*thickness2
        density1 = 0.00158*thickness1
        density2 = 0.00158*thickness2

        #"qqx","qqy","qqz","qmx","qmy","qmz"
        reactionForces = [0., 0., 500., 0., -62500., 0.]        

    #---RETRIEVING POINT LOCATIONS AND TOPOLOGY
    yi,zi,yk0,zk0 = [],[],[],[]
    yklk, zklk, ig1, ig2 = [],[],[],[]
    iak = []
    ia = []
    
    webExtensionalStiffness = []
    webShearStiffness, webRefPlaneDist = [], []
    webThickness, webDensity = [],[]
    
    capExtensionalStiffness = []
    capMass = []

    #definition of simple profile
    capCount = 8 
    webCount = 9
    cellCount = 2
    
    yi = [55., 55., -225., 13., 13., 75., -75., 75.]
    zi = [12., -12., 0., 18., -18., 0., 16., 16.]
    yk0 = [55., 75., 55., 13., -75., -225., -75., 13., 13., 13.]
    zk0 = [12., 0., -12., -18., -16., 0., 16., 18., 18., 18.]
    yklk = [75., 55., 13., -75., -225., -75., 13., 55., 13., 13.] 
    zklk = [0., -12., -18., -16., 0., 16., 18., 12., -18., -18.]

    ig1 = [1, 6, 2, 5, 8, 3, 7, 4, 4]
    ig2 = [6, 2, 5, 8, 3, 7, 4, 1, 5]
    iak = [5, 5]
    ia = [[1, 6, 2, 5, 4], [5, 8, 3, 7, 4]]

    webExtensionalStiffness = [extensionalStiffness1]*(webCount-1)+[extensionalStiffness2]
    webShearStiffness = [shearStiffness1]*(webCount-1)+[shearStiffness2]
    webRefPlaneDist = [thickness1/2.]*(webCount-1)+[thickness2/2.]
    webThickness = [thickness1]*(webCount-1)+[thickness2]
    webDensity = [density1]*(webCount-1)+[density2]

#------------------------------------------------------------------------------------------------------------------------
# Assigning variables of boxbeam
# Executing boxbeam
# Retrieving results from boxbeam
#------------------------------------------------------------------------------------------------------------------------

    toolCalculate(
        capCount, webCount, cellCount, yi, zi, yk0, zk0, yklk, zklk, ig1, ig2, iak, ia, 
        webExtensionalStiffness, webShearStiffness, webRefPlaneDist, webThickness,webDensity
    )
```
## Contact
* [Marc Garbade](mailto:marc.garbade@dlr.de)
## Support
* [List of Contributors](CONTRIBUTING.md)


            

Raw data

            {
    "_id": null,
    "home_page": "https://gitlab.com/dlr-sy/boxbeam",
    "name": "boxbeam",
    "maintainer": "Garbade, Marc",
    "docs_url": null,
    "requires_python": "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7",
    "maintainer_email": "marc.garbade@dlr.de",
    "keywords": "analysis, beam, composite",
    "author": "Heinecke, Falk",
    "author_email": "falk.heinecke@volkswagen.de",
    "download_url": null,
    "platform": null,
    "description": "[![PyPi](https://img.shields.io/static/v1?label=PyPi&message=1.3.0&color=informational&logo=pypi)](https://pypi.org/project/boxbeam/)\n[![doi](https://img.shields.io/badge/DOI-10.5281%2Fzenodo.12795533-red.svg)](https://zenodo.org/records/12795533)\n[![pipeline status](https://gitlab.com/dlr-sy/boxbeam/badges/master/pipeline.svg)]()\n\n# BoxBeam\nBoxBeam is a legacy Fortran-based beam calculation tool. It is compiled for Python using [f2py](https://numpy.org/doc/stable/f2py).\n> Installation from source requires an active Fortran compiler (ifort, gfortran). \n## Downloading\nUse GIT to get the latest code base. From the command line, use\n```\ngit clone https://gitlab.dlr.de/fa_sw/boxbeam boxbeam\n```\nIf you check out the repository for the first time, you have to initialize all submodule dependencies first. Execute the following from within the repository. \n```\ngit submodule update --init --recursive\n```\nTo update all refererenced submodules to the latest production level, use\n```\ngit submodule foreach --recursive 'git pull origin $(git config -f $toplevel/.gitmodules submodule.$name.branch || echo master)'\n```\n## Installation\nBoxBeam can be installed from source using [poetry](https://python-poetry.org). If you don't have [poetry](https://python-poetry.org) installed, run\n```\npip install poetry --pre --upgrade\n```\nto install the latest version of [poetry](https://python-poetry.org) within your python environment. Use\n```\npoetry update\n```\nto update all dependencies in the lock file or directly execute\n```\npoetry install\n```\nto install all dependencies from the lock file. Last, you should be able to import BoxBeam as a python package.\n```python\nimport boxbeam\n```\n## Example\nCopy and paste the following text into a new python script to verify the local installation\n```python\nimport os, sys\nimport boxbeam as bbeam\n \nfrom itertools import count, zip_longest\nfrom operator import itemgetter\nfrom collections import OrderedDict\nimport numpy as np\n\ndef toolInitiate(directory):\n    #---INITIATE BOXBEAM VARIABLES\n    bbeam.boxbeam.initialize()\n\n    extendedLogFile = False\n    newPath = directory#+'\\\\TestProfile.out'\n\n    #setting control parameters for BOXBEAM\n    bbeam.steuer.druck = extendedLogFile # extended log file\n    bbeam.steuer.nurqer = False\n    bbeam.steuer.klog = 11\n    bbeam.steuer.kraeft = False # calculate nodal forces (utilization for FE applications)\n\n    #---CHANGE THE NAME OF THE OUTPUT FILE TO THE ACTUAL CROSS SECTION NAME\n    if extendedLogFile:\n        for ffile, bbeamPathVar in zip([\"boxbeam_results.out\", \n                                        \"boxbeam_test.out\"], \n                                        [\"csinfopath\", \n                                         \"vbinfopath\"]):\n\n            fullPathFfile = os.path.abspath(os.path.join(newPath, ffile))\n\n            # 240 is the length of the character variable reserved\n            # within FORTRAN to store the directory name\n            if len(fullPathFfile) > 240:\n                raise Exception(\"Path length of file %s to long!\" % fullPathFfile)\n\n            pathList = [\"\"] * 240\n            pathList[: len(fullPathFfile)] = list(fullPathFfile)\n\n            if bbeamPathVar == \"csinfopath\":\n                self.bbeam.path.csinfopath = np.array(pathList,dtype=\"object\")\n            else:\n                self.bbeam.path.vbinfopath = np.array(pathList,dtype=\"object\")\n\ndef toolCalculate(capCount, webCount, cellCount, yi, zi, yk0, zk0, yklk, zklk, ig1, ig2, iak, ia, \n                    webExtensionalStiffness, webShearStiffness, webRefPlaneDist, webThickness,webDensity):\n    #---ASSIGN GURT DATA\n    bbeam.gurt.ig = capCount\n    \n    #---ASSIGN GURT COORDINATES\n    variableList = np.zeros(bbeam.restr.maxgu-bbeam.gurt.ig).tolist()\n    bbeam.gurt.yi = yi + variableList\n    bbeam.gurt.zi = zi + variableList\n    \n    #---ASSIGN GURT MATERIAL INFORMATION WITHIN BOXBEAM\n    bbeam.gurt.bi = np.zeros(bbeam.restr.maxgu)\n    bbeam.gurt.myi = np.zeros(bbeam.restr.maxgu)\n\n    #---ASSIGN BOXBEAM WAND DATA\n    bbeam.wand.kw = webCount\n    \n    #---ASSIGN WAND COORDINATES\n    variableList = np.zeros(bbeam.restr.maxwa-len(yk0)).tolist()\n    bbeam.wand.yk0 = yk0 + variableList\n    bbeam.wand.yklk = yklk + variableList\n    bbeam.wand.zk0 = zk0 + variableList\n    bbeam.wand.zklk = zklk + variableList\n    \n    #---ASSIGN WAND MATERIAL INFORMATION WITHIN BOXBEAM\n    variableList = np.zeros(bbeam.restr.maxwa-bbeam.wand.kw).tolist()\n    bbeam.wand.it = (5*np.ones(bbeam.wand.kw)).tolist()+variableList\n    bbeam.wand.bk = webExtensionalStiffness+variableList\n    bbeam.wand.gk = webShearStiffness+variableList\n    bbeam.wand.rhok = webDensity+variableList\n    bbeam.wand.e = webRefPlaneDist+variableList\n    \n    #---ASSIGN WAND TOPOLOGY WITHIN BOXBEAM\n    bbeam.wand.th = webThickness+variableList\n    bbeam.wand.ig1 = ig1+variableList\n    bbeam.wand.ig2 = ig2+variableList\n\n    #---ASSIGN BOXBEAM ZELLE DATA\n    bbeam.zelle.az = cellCount\n    variableList = np.zeros(bbeam.restr.maxze-bbeam.zelle.az).tolist()\n    bbeam.zelle.iak = iak+variableList\n    \n    iaArrayTransposed = np.zeros((bbeam.restr.maxze, bbeam.restr.maxgu))\n    for cellNumber in range(int(bbeam.restr.maxze)):\n        if cellNumber < cellCount:\n            iaArrayTransposed[cellNumber, :len(ia[cellNumber])] += ia[cellNumber]\n    bbeam.zelle.ia = iaArrayTransposed.T\n\n    #---ASSIGN BOXBEAM UNIFY LOADS\n    for attrName, load in zip_longest([\"qqx\",\"qqy\",\"qqz\",\"qmx\",\"qmy\",\"qmz\"], reactionForces):\n        setattr(bbeam.spanug, attrName, load)\n\n    #---EXECUTE BOXBEAM FOR CALCULATING THE CROSS SECTION PARAMETERS\n    bbeam.boxbeam.getequivalentxsection()\n\n    crossSectionParamNames = ['YS','ZS','YT','ZT','YMST','ZMST','YMSTAC','ZMSTAC','BX',\n                                'ALPHA','DYYSTE','DZZSTE','DYY','DZZ','DZY','DT','M','IYYS','IZZS','IZYS','ITT']\n\n    crossSectionParameters = {}\n    for param in crossSectionParamNames:\n        crossSectionParameters[param] = float(getattr(bbeam.quer, param.lower()))\n\n    effectiveProps = OrderedDict([\n                        ('EA',crossSectionParameters['BX']    ),\n                        ('EIxx',crossSectionParameters['DYY'] ),\n                        ('EIyy',crossSectionParameters['DZZ'] ),\n                        ('GJ',crossSectionParameters['DT']    ),\n                        ('YS',crossSectionParameters['YS']    ),\n                        ('ZS',crossSectionParameters['ZS']    ),\n                        ])\n\n\nif __name__ == '__main__':\n\n    #Specify folder where output files are to be stored\n    runDir = os.path.join(os.getcwd(),\"boxbeam\")\n    try:\n        os.makedirs(runDir)\n    except WindowsError: \n        pass\n\n    #Tool specific limitations\n    #maxCaps = 22 #variable specifying the maximum number of caps within a BoxBeam cross section - defined in bbeam.pyd\n    #maxWebs = 31 #variable specifying the maximum number of walls within a BoxBeam cross section - defined in bbeam.pyd\n    #maxCells = 10 #variable specifying the maximum number of cells within a BoxBeam cross section - defined in bbeam.pyd\n\n#------------------------------------------------------------------------------------------------------------------------\n# Initiation of boxbeam\n#------------------------------------------------------------------------------------------------------------------------\n\n    toolInitiate(runDir)\n\n#------------------------------------------------------------------------------------------------------------------------\n# Input for profile\n#------------------------------------------------------------------------------------------------------------------------\n\n    calcGeometry = False # If true the material data is set in a fashion, that the geometric properties (e.g. area moments of inertia) can be calculated.\n    \n    thickness1 = 1.25\n    thickness2 = .375\n    if calcGeometry:\n        extensionalStiffness1 = 1.*thickness1\n        extensionalStiffness2 = 1.*thickness2\n        shearStiffness1 = 1.*thickness1\n        shearStiffness2 = 1.*thickness2\n        density1 = 1.*thickness1\n        density2 = 1.*thickness2\n        bbeam.steuer.nurqer = True\n\n        #\"qqx\",\"qqy\",\"qqz\",\"qmx\",\"qmy\",\"qmz\"\n        reactionForces = [0., 0., 0., 0., 0., 0.]     \n        \n    else:\n        extensionalStiffness1 = 7.3335e4*thickness1\n        extensionalStiffness2 = 3.2232e4*thickness2\n        shearStiffness1 = 1.7327e4*thickness1\n        shearStiffness2 = 2.5012e4*thickness2\n        density1 = 0.00158*thickness1\n        density2 = 0.00158*thickness2\n\n        #\"qqx\",\"qqy\",\"qqz\",\"qmx\",\"qmy\",\"qmz\"\n        reactionForces = [0., 0., 500., 0., -62500., 0.]        \n\n    #---RETRIEVING POINT LOCATIONS AND TOPOLOGY\n    yi,zi,yk0,zk0 = [],[],[],[]\n    yklk, zklk, ig1, ig2 = [],[],[],[]\n    iak = []\n    ia = []\n    \n    webExtensionalStiffness = []\n    webShearStiffness, webRefPlaneDist = [], []\n    webThickness, webDensity = [],[]\n    \n    capExtensionalStiffness = []\n    capMass = []\n\n    #definition of simple profile\n    capCount = 8 \n    webCount = 9\n    cellCount = 2\n    \n    yi = [55., 55., -225., 13., 13., 75., -75., 75.]\n    zi = [12., -12., 0., 18., -18., 0., 16., 16.]\n    yk0 = [55., 75., 55., 13., -75., -225., -75., 13., 13., 13.]\n    zk0 = [12., 0., -12., -18., -16., 0., 16., 18., 18., 18.]\n    yklk = [75., 55., 13., -75., -225., -75., 13., 55., 13., 13.] \n    zklk = [0., -12., -18., -16., 0., 16., 18., 12., -18., -18.]\n\n    ig1 = [1, 6, 2, 5, 8, 3, 7, 4, 4]\n    ig2 = [6, 2, 5, 8, 3, 7, 4, 1, 5]\n    iak = [5, 5]\n    ia = [[1, 6, 2, 5, 4], [5, 8, 3, 7, 4]]\n\n    webExtensionalStiffness = [extensionalStiffness1]*(webCount-1)+[extensionalStiffness2]\n    webShearStiffness = [shearStiffness1]*(webCount-1)+[shearStiffness2]\n    webRefPlaneDist = [thickness1/2.]*(webCount-1)+[thickness2/2.]\n    webThickness = [thickness1]*(webCount-1)+[thickness2]\n    webDensity = [density1]*(webCount-1)+[density2]\n\n#------------------------------------------------------------------------------------------------------------------------\n# Assigning variables of boxbeam\n# Executing boxbeam\n# Retrieving results from boxbeam\n#------------------------------------------------------------------------------------------------------------------------\n\n    toolCalculate(\n        capCount, webCount, cellCount, yi, zi, yk0, zk0, yklk, zklk, ig1, ig2, iak, ia, \n        webExtensionalStiffness, webShearStiffness, webRefPlaneDist, webThickness,webDensity\n    )\n```\n## Contact\n* [Marc Garbade](mailto:marc.garbade@dlr.de)\n## Support\n* [List of Contributors](CONTRIBUTING.md)\n\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Calculation of effective cross-sectional properties of composite beams",
    "version": "1.3.0.post1",
    "project_urls": {
        "Changelog": "https://gitlab.com/dlr-sy/boxbeam/-/blob/master/CHANGELOG.md",
        "Documentation": "https://gitlab.com/dlr-sy/boxbeam/-/blob/master/README.md",
        "Homepage": "https://gitlab.com/dlr-sy/boxbeam",
        "Repository": "https://gitlab.com/dlr-sy/boxbeam"
    },
    "split_keywords": [
        "analysis",
        " beam",
        " composite"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ec07c3f15ca40ed6b48b57f8c83854bf6a95ce999320b0d5928aec9708dc8473",
                "md5": "4f4313a88b58c9aa965b5628a3fb0cc9",
                "sha256": "7aecf36fb58635b15e87de15d1fe2ddd65e05f9289d83f59f2458dd47b559cc0"
            },
            "downloads": -1,
            "filename": "boxbeam-1.3.0.post1-cp27-cp27m-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "4f4313a88b58c9aa965b5628a3fb0cc9",
            "packagetype": "bdist_wheel",
            "python_version": "cp27",
            "requires_python": "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7",
            "size": 443465,
            "upload_time": "2024-07-24T18:28:17",
            "upload_time_iso_8601": "2024-07-24T18:28:17.634366Z",
            "url": "https://files.pythonhosted.org/packages/ec/07/c3f15ca40ed6b48b57f8c83854bf6a95ce999320b0d5928aec9708dc8473/boxbeam-1.3.0.post1-cp27-cp27m-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a88ec3558874d6e973f3038b0713dbbf2e58ae4361bb37218b131b2f14af8dfc",
                "md5": "e50014a07669e147d03730e2f4a8ea9b",
                "sha256": "b31b15c9af0cb9958f0b9045e4320d39511ee9fbd18115a42d3e7bbba7d8e3e4"
            },
            "downloads": -1,
            "filename": "boxbeam-1.3.0.post1-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "e50014a07669e147d03730e2f4a8ea9b",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7",
            "size": 447400,
            "upload_time": "2024-07-24T18:28:19",
            "upload_time_iso_8601": "2024-07-24T18:28:19.490081Z",
            "url": "https://files.pythonhosted.org/packages/a8/8e/c3558874d6e973f3038b0713dbbf2e58ae4361bb37218b131b2f14af8dfc/boxbeam-1.3.0.post1-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "15125a2effd2c5e8d88cbb7a837bc05ce25c6f277742d470d8da7f5c3ba7015d",
                "md5": "9ff397aa68eb90b89a39c6b4b8af582f",
                "sha256": "e4d6b87bae855a65f2205c90c891adb7fe6c8e793b9aa9f9df3526568fb5a520"
            },
            "downloads": -1,
            "filename": "boxbeam-1.3.0.post1-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "9ff397aa68eb90b89a39c6b4b8af582f",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7",
            "size": 447598,
            "upload_time": "2024-07-24T18:28:21",
            "upload_time_iso_8601": "2024-07-24T18:28:21.103773Z",
            "url": "https://files.pythonhosted.org/packages/15/12/5a2effd2c5e8d88cbb7a837bc05ce25c6f277742d470d8da7f5c3ba7015d/boxbeam-1.3.0.post1-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "eb0f5ca83a87240723775416303fdb9002b60f237c1565d23d07fa0540c5ac31",
                "md5": "280b1d58b8c764a8c2b7a2f47a61b1ef",
                "sha256": "d8b1ab0660e7c5949a1eda8a137a89f991f1a3905f09fd2ceaf9c7be695a9eeb"
            },
            "downloads": -1,
            "filename": "boxbeam-1.3.0.post1-cp35-cp35m-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "280b1d58b8c764a8c2b7a2f47a61b1ef",
            "packagetype": "bdist_wheel",
            "python_version": "cp35",
            "requires_python": "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7",
            "size": 444674,
            "upload_time": "2024-07-24T18:28:22",
            "upload_time_iso_8601": "2024-07-24T18:28:22.761448Z",
            "url": "https://files.pythonhosted.org/packages/eb/0f/5ca83a87240723775416303fdb9002b60f237c1565d23d07fa0540c5ac31/boxbeam-1.3.0.post1-cp35-cp35m-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "2b1c51a448e87d17aaae0b07514767078c5e703efd34edcee762fcb34b184aa8",
                "md5": "3c84bd63f672554be460dd7892d9aa97",
                "sha256": "20921acade850ed0078ad6b8ff1cf1b44c825a114f50815db773fe6a0730a58d"
            },
            "downloads": -1,
            "filename": "boxbeam-1.3.0.post1-cp36-cp36m-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "3c84bd63f672554be460dd7892d9aa97",
            "packagetype": "bdist_wheel",
            "python_version": "cp36",
            "requires_python": "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7",
            "size": 446574,
            "upload_time": "2024-07-24T18:28:24",
            "upload_time_iso_8601": "2024-07-24T18:28:24.035276Z",
            "url": "https://files.pythonhosted.org/packages/2b/1c/51a448e87d17aaae0b07514767078c5e703efd34edcee762fcb34b184aa8/boxbeam-1.3.0.post1-cp36-cp36m-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "6c8d61df879efd7d9a035565b5c6e2b1d4b275d70610d86503cd47ae69112555",
                "md5": "d7a9109a0ee0785ab2dda1a73219cce1",
                "sha256": "468775e5150c23c070f016481261a38dd520b030dbb8935f027f4942a4039d10"
            },
            "downloads": -1,
            "filename": "boxbeam-1.3.0.post1-cp37-cp37m-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "d7a9109a0ee0785ab2dda1a73219cce1",
            "packagetype": "bdist_wheel",
            "python_version": "cp37",
            "requires_python": "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7",
            "size": 447876,
            "upload_time": "2024-07-24T18:28:25",
            "upload_time_iso_8601": "2024-07-24T18:28:25.821757Z",
            "url": "https://files.pythonhosted.org/packages/6c/8d/61df879efd7d9a035565b5c6e2b1d4b275d70610d86503cd47ae69112555/boxbeam-1.3.0.post1-cp37-cp37m-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "95e4aed5aed4982fda1b9e3eb621cfa08411ea471987280e34420d6c5cd51d29",
                "md5": "e2d31911785a28bf222c412732e0bad4",
                "sha256": "2f1f56dc4146fec8661fb307a1be136bce02cc3c25e5ec7e7533023a0a3d2fb4"
            },
            "downloads": -1,
            "filename": "boxbeam-1.3.0.post1-cp38-cp38-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "e2d31911785a28bf222c412732e0bad4",
            "packagetype": "bdist_wheel",
            "python_version": "cp38",
            "requires_python": "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7",
            "size": 446709,
            "upload_time": "2024-07-24T18:28:27",
            "upload_time_iso_8601": "2024-07-24T18:28:27.754064Z",
            "url": "https://files.pythonhosted.org/packages/95/e4/aed5aed4982fda1b9e3eb621cfa08411ea471987280e34420d6c5cd51d29/boxbeam-1.3.0.post1-cp38-cp38-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "3715d25d65c4fcf546390abfc9eb3d22b55e6f6d5e6f0c9fd12dfdac254edf0c",
                "md5": "8312dec6209411f7fd0a87d8025d2901",
                "sha256": "911d08934445adb087d77c3c83fee945091fdccf1038c087535467de34b152cd"
            },
            "downloads": -1,
            "filename": "boxbeam-1.3.0.post1-cp39-cp39-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "8312dec6209411f7fd0a87d8025d2901",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7",
            "size": 447210,
            "upload_time": "2024-07-24T18:28:29",
            "upload_time_iso_8601": "2024-07-24T18:28:29.378453Z",
            "url": "https://files.pythonhosted.org/packages/37/15/d25d65c4fcf546390abfc9eb3d22b55e6f6d5e6f0c9fd12dfdac254edf0c/boxbeam-1.3.0.post1-cp39-cp39-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-07-24 18:28:17",
    "github": false,
    "gitlab": true,
    "bitbucket": false,
    "codeberg": false,
    "gitlab_user": "dlr-sy",
    "gitlab_project": "boxbeam",
    "lcname": "boxbeam"
}
        
Elapsed time: 0.37124s