Calculation of effective cross-sectional properties of composite beams
Project description
BoxBeam
BoxBeam is a legacy Fortran-based beam calculation tool. It is compiled for Python using 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. If you don't have poetry installed, run
pip install poetry --pre --upgrade
to install the latest version of poetry 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.
import boxbeam
Example
Copy and paste the following text into a new python script to verify the local installation
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
Support
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
File details
Details for the file boxbeam-1.3.0.post1-cp311-cp311-win_amd64.whl
.
File metadata
- Download URL: boxbeam-1.3.0.post1-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 447.6 kB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.10.14
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e4d6b87bae855a65f2205c90c891adb7fe6c8e793b9aa9f9df3526568fb5a520 |
|
MD5 | 9ff397aa68eb90b89a39c6b4b8af582f |
|
BLAKE2b-256 | 15125a2effd2c5e8d88cbb7a837bc05ce25c6f277742d470d8da7f5c3ba7015d |
File details
Details for the file boxbeam-1.3.0.post1-cp310-cp310-win_amd64.whl
.
File metadata
- Download URL: boxbeam-1.3.0.post1-cp310-cp310-win_amd64.whl
- Upload date:
- Size: 447.4 kB
- Tags: CPython 3.10, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.10.14
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | b31b15c9af0cb9958f0b9045e4320d39511ee9fbd18115a42d3e7bbba7d8e3e4 |
|
MD5 | e50014a07669e147d03730e2f4a8ea9b |
|
BLAKE2b-256 | a88ec3558874d6e973f3038b0713dbbf2e58ae4361bb37218b131b2f14af8dfc |
File details
Details for the file boxbeam-1.3.0.post1-cp39-cp39-win_amd64.whl
.
File metadata
- Download URL: boxbeam-1.3.0.post1-cp39-cp39-win_amd64.whl
- Upload date:
- Size: 447.2 kB
- Tags: CPython 3.9, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.10.14
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 911d08934445adb087d77c3c83fee945091fdccf1038c087535467de34b152cd |
|
MD5 | 8312dec6209411f7fd0a87d8025d2901 |
|
BLAKE2b-256 | 3715d25d65c4fcf546390abfc9eb3d22b55e6f6d5e6f0c9fd12dfdac254edf0c |
File details
Details for the file boxbeam-1.3.0.post1-cp38-cp38-win_amd64.whl
.
File metadata
- Download URL: boxbeam-1.3.0.post1-cp38-cp38-win_amd64.whl
- Upload date:
- Size: 446.7 kB
- Tags: CPython 3.8, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.10.14
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2f1f56dc4146fec8661fb307a1be136bce02cc3c25e5ec7e7533023a0a3d2fb4 |
|
MD5 | e2d31911785a28bf222c412732e0bad4 |
|
BLAKE2b-256 | 95e4aed5aed4982fda1b9e3eb621cfa08411ea471987280e34420d6c5cd51d29 |
File details
Details for the file boxbeam-1.3.0.post1-cp37-cp37m-win_amd64.whl
.
File metadata
- Download URL: boxbeam-1.3.0.post1-cp37-cp37m-win_amd64.whl
- Upload date:
- Size: 447.9 kB
- Tags: CPython 3.7m, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.10.14
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 468775e5150c23c070f016481261a38dd520b030dbb8935f027f4942a4039d10 |
|
MD5 | d7a9109a0ee0785ab2dda1a73219cce1 |
|
BLAKE2b-256 | 6c8d61df879efd7d9a035565b5c6e2b1d4b275d70610d86503cd47ae69112555 |
File details
Details for the file boxbeam-1.3.0.post1-cp36-cp36m-win_amd64.whl
.
File metadata
- Download URL: boxbeam-1.3.0.post1-cp36-cp36m-win_amd64.whl
- Upload date:
- Size: 446.6 kB
- Tags: CPython 3.6m, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.10.14
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 20921acade850ed0078ad6b8ff1cf1b44c825a114f50815db773fe6a0730a58d |
|
MD5 | 3c84bd63f672554be460dd7892d9aa97 |
|
BLAKE2b-256 | 2b1c51a448e87d17aaae0b07514767078c5e703efd34edcee762fcb34b184aa8 |
File details
Details for the file boxbeam-1.3.0.post1-cp35-cp35m-win_amd64.whl
.
File metadata
- Download URL: boxbeam-1.3.0.post1-cp35-cp35m-win_amd64.whl
- Upload date:
- Size: 444.7 kB
- Tags: CPython 3.5m, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.10.14
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d8b1ab0660e7c5949a1eda8a137a89f991f1a3905f09fd2ceaf9c7be695a9eeb |
|
MD5 | 280b1d58b8c764a8c2b7a2f47a61b1ef |
|
BLAKE2b-256 | eb0f5ca83a87240723775416303fdb9002b60f237c1565d23d07fa0540c5ac31 |
File details
Details for the file boxbeam-1.3.0.post1-cp27-cp27m-win_amd64.whl
.
File metadata
- Download URL: boxbeam-1.3.0.post1-cp27-cp27m-win_amd64.whl
- Upload date:
- Size: 443.5 kB
- Tags: CPython 2.7m, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.10.14
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7aecf36fb58635b15e87de15d1fe2ddd65e05f9289d83f59f2458dd47b559cc0 |
|
MD5 | 4f4313a88b58c9aa965b5628a3fb0cc9 |
|
BLAKE2b-256 | ec07c3f15ca40ed6b48b57f8c83854bf6a95ce999320b0d5928aec9708dc8473 |