Parametric Structural Modeling: User Manual For Version 1.2.2
Parametric Structural Modeling: User Manual For Version 1.2.2
Parametric Structural Modeling: User Manual For Version 1.2.2
User Manual
October 3, 2016
Contents
1. Introduction 7
1.1. Citing Karamba . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2. How to obtain a pro- or pro-student-license . . . . . . . . . . 7
3. Installation 11
4. Quick start 13
4.1. Basic Example . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
4.2. Physical Units . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
4.3. Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4.4. Materials . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4.5. Cross Sections . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4.6. Supports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
4.7. Loads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.8. Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.9. Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.10. Visualization . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
4.11. Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
6. Component Reference 28
2
6.1. Ensemble . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
6.1.1. Activate Element . . . . . . . . . . . . . . . . . . . . 28
6.1.2. Assemble Model . . . . . . . . . . . . . . . . . . . . . 28
6.1.3. Connected Parts . . . . . . . . . . . . . . . . . . . . . 29
6.1.4. Disassemble Model . . . . . . . . . . . . . . . . . . . 30
6.1.5. Line to Beam . . . . . . . . . . . . . . . . . . . . . . 31
6.1.6. Index to Beam . . . . . . . . . . . . . . . . . . . . . . 32
6.1.7. Connectivity to Beam . . . . . . . . . . . . . . . . . . 33
6.1.8. Mesh to Shell . . . . . . . . . . . . . . . . . . . . . . 33
6.1.9. Modify Element . . . . . . . . . . . . . . . . . . . . . 34
6.1.10. Modify Element for Beams . . . . . . . . . . . . . . . 34
6.1.11. Modify Element for Shells . . . . . . . . . . . . . . . 38
6.1.12. Point-Mass . . . . . . . . . . . . . . . . . . . . . . . . 38
6.1.13. Disassemble Beam . . . . . . . . . . . . . . . . . . . . 39
6.1.14. Make Beam-Set . . . . . . . . . . . . . . . . . . . . . 39
6.1.15. Orientate Beam . . . . . . . . . . . . . . . . . . . . . 40
6.1.16. Select Beam . . . . . . . . . . . . . . . . . . . . . . . 41
6.1.17. Support . . . . . . . . . . . . . . . . . . . . . . . . . 42
6.2. Cross Section . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
6.2.1. Beam Cross Section . . . . . . . . . . . . . . . . . . 46
6.2.2. Shell Cross Section . . . . . . . . . . . . . . . . . . . 47
6.2.3. Spring Cross Section . . . . . . . . . . . . . . . . . . 48
6.2.4. Beam-Joints . . . . . . . . . . . . . . . . . . . . . . . 49
6.2.5. Beam-Joint Agent . . . . . . . . . . . . . . . . . . . . 50
6.2.6. Disassemble Cross Section . . . . . . . . . . . . . . . 51
6.2.7. Eccentricity on Beam, Eccentricity on Cross Section 51
6.2.8. Cross Section Matcher . . . . . . . . . . . . . . . . . 53
6.2.9. Cross Section Range Selector . . . . . . . . . . . . . 54
6.2.10. Cross Section Selector . . . . . . . . . . . . . . . . . 54
6.2.11. Generate Cross Section Table . . . . . . . . . . . . . 55
6.2.12. Read Cross Section Table from File . . . . . . . . . . 56
6.3. Material . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
6.3.1. Material Properties . . . . . . . . . . . . . . . . . . . 57
6.3.2. Material Selection . . . . . . . . . . . . . . . . . . . . 59
6.3.3. Read Material Table from File . . . . . . . . . . . . 59
3
6.4. Load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
6.4.1. Gravity . . . . . . . . . . . . . . . . . . . . . . . . . . 61
6.4.2. Point-Load . . . . . . . . . . . . . . . . . . . . . . . . 62
6.4.3. Imperfection-Load . . . . . . . . . . . . . . . . . . . . 62
6.4.4. Initial Strain-Load . . . . . . . . . . . . . . . . . . . . 63
6.4.5. Temperature-Load . . . . . . . . . . . . . . . . . . . 64
6.4.6. Line-Load on Element . . . . . . . . . . . . . . . . . 64
6.4.7. Mesh-Load . . . . . . . . . . . . . . . . . . . . . . . . 64
6.4.8. Prescribed displacements . . . . . . . . . . . . . . . . 68
6.5. Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
6.5.1. Analyze Th. I . . . . . . . . . . . . . . . . . . . . . . 69
6.5.2. Analyze Th. II . . . . . . . . . . . . . . . . . . . . . . 71
6.5.3. Analyze Large Deformation . . . . . . . . . . . . . . 73
6.5.4. Buckling Modes . . . . . . . . . . . . . . . . . . . . . 75
6.5.5. Eigen Modes . . . . . . . . . . . . . . . . . . . . . . . 77
6.5.6. Natural Vibrations . . . . . . . . . . . . . . . . . . . 78
6.5.7. BESO for Beams . . . . . . . . . . . . . . . . . . . . 79
6.5.8. BESO for Shells . . . . . . . . . . . . . . . . . . . . . 84
6.5.9. Tension/Compression Eliminator . . . . . . . . . . . 86
6.5.10. Optimize Cross Section . . . . . . . . . . . . . . . . 87
6.6. Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
6.6.1. Deformation-Energy . . . . . . . . . . . . . . . . . . 93
6.6.2. ModelView . . . . . . . . . . . . . . . . . . . . . . . . 94
6.6.3. Nodal Displacements . . . . . . . . . . . . . . . . . . 99
6.6.4. Principal Strains Approximation . . . . . . . . . . . . 100
6.6.5. Reaction Forces . . . . . . . . . . . . . . . . . . . . . 101
6.6.6. Utilization of Elements . . . . . . . . . . . . . . . . . 101
6.6.7. Beam Displacements . . . . . . . . . . . . . . . . . . 103
6.6.8. BeamView . . . . . . . . . . . . . . . . . . . . . . . . 105
6.6.9. Resultant Section Forces . . . . . . . . . . . . . . . . 107
6.6.10. Beam Forces . . . . . . . . . . . . . . . . . . . . . . 109
6.6.11. Line Results on Shells . . . . . . . . . . . . . . . . . 110
6.6.12. Principal Force Directions on Shells . . . . . . . . . 115
6.6.13. Principal Stress Directions on Shells . . . . . . . . . 115
6.6.14. Shell Forces . . . . . . . . . . . . . . . . . . . . . . . 116
4
6.6.15. ShellView . . . . . . . . . . . . . . . . . . . . . . . . 116
6.7. Export . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
6.7.1. Export Model to DStV . . . . . . . . . . . . . . . . . 118
6.8. Utilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
6.8.1. Mesh Breps . . . . . . . . . . . . . . . . . . . . . . . . 118
6.8.2. Nearest Neighbors . . . . . . . . . . . . . . . . . . . . 120
6.8.3. Multi-dimensional Nearest Neighbors . . . . . . . . . 121
6.8.4. Remove Duplicate Lines . . . . . . . . . . . . . . . . 122
6.8.5. Remove Duplicate Points . . . . . . . . . . . . . . . . 122
6.8.6. Get Cells from Lines . . . . . . . . . . . . . . . . . . . 122
6.8.7. Line-Line Intersection . . . . . . . . . . . . . . . . . . 122
6.8.8. Element Felting . . . . . . . . . . . . . . . . . . . . . 123
6.8.9. Mapper . . . . . . . . . . . . . . . . . . . . . . . . . . 124
6.8.10. Interpolate Shape . . . . . . . . . . . . . . . . . . . . 125
6.8.11. Proximity Stitch . . . . . . . . . . . . . . . . . . . . . 126
6.8.12. Simple Stitch . . . . . . . . . . . . . . . . . . . . . . 127
6.8.13. Stacked Stitch . . . . . . . . . . . . . . . . . . . . . . 128
6.8.14. User Iso-Lines and Stream-Lines . . . . . . . . . . . 128
5
7.12. Icons in Karamba-toolbar do not show up . . . . . . . . . . 134
7.13. Error messages upon loading denitions saved with outdated
Karamba versions . . . . . . . . . . . . . . . . . . . . . . . . . 134
7.14. Component in old denition reports a run-time error . . . . 134
7.15. The Optimize Cross Section-component does not work . . 134
7.16. The Optimize Cross Section-component returns wrong results134
7.17. Other problems . . . . . . . . . . . . . . . . . . . . . . . . . . 135
6
1. Introduction
In case you use Karamba for your scientic work please cite the following
paper:
The commercial license (pro) without time limitation costs e 30 for stu-
dents and e 1250 for businesses. A pro-license with one year validity comes
at e 450. The pro-student version is for non-commercial use only. In case
7
you plan to use Karamba for university courses please contact us for special
conditions.
One single static license can be installed on two computers. A license
includes all updates of the current main version (i.e. currently 1.x.x.).
For commercial use a network license option exists. Being based on the
Zoo 6.0 license server of McNeel it comes at the same price as a static
license. Versions of one year and unlimited validity can be purchased.
In order to obtain the pro-version download Karamba from either http:
//www.karamba3d.com or http://www.food4rhino.com/project/karamba and in-
stall the trial-version. Then use the Karmba-license component (right-click
on the icon) to generate a machine.id-le on the computers where you wish
to run Karamba on. Send these les to [email protected] and buy a license
at http://www.karamba3d.com/downloads/. In return you will get a license.lic-
le which turns your Karamba trial into a Karamba pro or pro-student ver-
sion. Start Rhino as an administrator, right-click on the Karamba-license
component and select Load license le.
When purchasing a student version either attach a scan of your student ID
or send the e-mail from your university account. More information regarding
the pro-version can be obtained through the License-component (see g.
1).
8
Those parts of this manual that apply to the pro/trial-version only, are either
blue or have blue section headings.
New solver makes Karamba roughly two times faster and uses up much
less memory compared to older versions.
Cross section forces: come now in two colors for positive and negative
values.
9
These bugs got xed:
Removed bug that made Karamba crash in cases where zero elements
resulted after BESO for beams.
Known limitations:
2.1. Disclaimer
10
3. Installation
Grasshopper
version 1.2.1 of Karamba was tested on GH 0.9.0076.
In case you do not possess Rhino, download a fully featured, free trial
version from http://www.rhino3d.com/download.html. Grasshopper which is
free can be found at http://www.grasshopper3d.com/.
Karamba comes as 32-bit or 64-bit application. Select the version accord-
ing to the bitness of the Rhino version you want to work with. By default
'Rhinoceros 5' (this is the 32-bit version) and 'Rhinoceros 5 (64-bit)' get
installed.
The installation procedure lets you set the physical units used for calcu-
lation. By default Karamba assumes input to be in SI units (e.g. meters for
point coordinates). You can switch to Imperial units either on installation or
later on by editing the karamba.ini le. Coordinates will then be interpreted
to be in feet, force in kips, material strength in ksi and so on.
For installation invoke KarambaSetup.msi. It automatically copies karamba-
.dll and libiomp5md.dll to C:/Windows/ and all other les to the plug-ins
folder of Rhino. This installs Karamba for all users by default.
The installer automatically detects the path to Rhinoceros 5.0. In case you
wish to use Karamba with Rhinoceros 6.0 change the installation path to e.g.
C:/Program Files/Rhino WIP/Plug-ins. In order to have Karamba available
under Rhinoceros 5.0 and 6.0 follow the default installation procedure for
Rhino5. After that copy the folder Karamba and the le karamba.gha
from the Plug-ins-folder of Rhino5 to that of Rhino6.
Besides other things a folder named Karamba will be created in the in-
stallation directory, containing an examples folder, the license agreement, a
readme-le, pre-fabricated cross section and material tables and the cong-
uration le karamba.ini. The cong-le contains general program settings
and can be edited with any text editor. It contains key - value pairs and
is pretty self descriptive. By default a Karamba desktop-icon gets created.
Double-click on it to open the Karamba-directory.
11
If all goes well you will notice upon starting Grasshopper that there is a
new category called Karamba on the component panel. It consists of ten
subsections (see gure 2). In case you do not see any icons select Draw
All Components in Grasshoppers View-menu. The installation can be
tested by placing a Karamba License-component on the canvas: it should
not issue a warning or error. If not, see section 7.2 for how to solve that
issue. On Apple machines make sure to have Microsofts .NET Framework
4.0 installed.
12
Utils: contains some extra geometric functionality that makes it easier
to handle and optimize models.
4. Quick start
Creating a statical model in Karamba consists of six basic steps1 see g.
3:
13
4. Assemble the Karamba structural model with points, elements, sup-
ports and loads. Optional: Dene custom cross sections and materials
and add them as well. They reference elements either by index or user
dened element identiers.
On installing Karamba one can specify the family of physical units to be used
for input and results. The default option is metric (e.g. meters, centimeters,
degree Celsius, Newtons,...) but Karamba can also deal with Imperial units
(e.g. feet, inch, degree Fahrenheit, kiloponds,...).
The set of units to be used can be changed any time by editing the
karamba.ini le.
Depending on the family of units Karamba interprets geometric input
either as meters or feet. The kind of physical units that components expect
to receive shows up in the tool-tip which appears when the mouse pointer
hovers over an input-plug.
Changing the type of physical units during the creation of a GH denition
may give rise to problems: The help text of Grasshopper components does
not change dynamically. Switching from SI to imperial units leaves the help
text of those components already placed on the canvas unaltered. The
interpretation of the input values however changes. Opening a GH denition
14
with Karamba versions with dierently set physical units entails the same
problem.
4.3. Elements
4.4. Materials
Figure 5: left: definition of a custom material (1). Right: selection of a material from the
material library (2)
15
nothing is given.
Figure 6: left: definition of a beam cross section (1); Middle: definition of a shell cross
section (2); Right: selection of a cross section from the default cross section library. (3)
Arbitrary I-, hollow box, lled trapezoid and hollow circular cross sections
can be dened for beams, an element-wise variable height for shells. Cross
sections get attached to elements via element names (B and S in g.
6). Alternatively cross sections can be chosen from a library.
The Karamba cross sections are available as multi-components: they can
be accessed via the single component Cross Sections. The drop down
menu lets you select the concrete type.
4.6. Supports
16
Supply a plane as input for specifying locally oriented support conditions.
4.7. Loads
Figure 8: definitions of gravity load (1), point load (2), uniformly distributed load on a
beam (3) and distributed load on a mesh (4)
4.8. Model
After dening elements, supports, loads and optionally cross sections and
materials the statical model can be assembled (see g. 9). Elements get
rigidly connected in case they attach to the same node. The component
outputs the total mass of the model and its center of gravity (COG).
17
Figure 9: The model gets assembled from the generated structural information.
4.9. Algorithms
Figure 10: The model can be evaluated in several ways. Left: analysis of structural re-
sponse under loads; Right: calculation of eigen-modes.
4.10. Visualization
Karamba comes with three components for visualizing the structural model
(see g. 11):
18
Figure 11: There are three components for visualizing the model: ModelView,
BeamView and ShellView
4.11. Results
Figure 12: Retrieval of numerical results: nodal displacements (1), level of material uti-
lization (2), resultant cross section forces (3) and reaction forces (4).
Structural response properties can be used to inform the model and e.g.
optimize it. Fig. 12 shows some of the available options.
19
5. Quick Component Reference
5.1. License
5.2. Algorithms
20
Box-Prole (default): Creates rectangular, trapezoid and tri-
angular hollow cross sections.
Shell Cross Section: Lets you set the height of a shell cross
section.
Cross Section Matcher: Returns for a cross section the best tting
cross section contained in a given list. The matched cross section is
equal or better in all mechanical aspects at minimum weight.
21
Cross Section Range Selector: Lets you select cross sections by
country, shape, family or maximum depth or width.
5.4. Model
22
Modify Beam (default): Modies beams only.
5.5. Export
5.6. Load
23
Point-Load: Creates point loads at points of given index or
position.
5.7. Material
5.8. Results
24
Nodal Displacements: Returns nodal displacements: translation-
s/rotations in global x-, y-, and z-direction; rotations about global
x-, y- and z-axis.
Principal Strains Approximation: Approximates the principal strain
directions from the model deformation at arbitrary points.
Reaction Forces: Returns reaction forces and moments at supports.
Beam View: Lets you inspect beam properties: section forces, cross
sections, displacement, utilization and stresses. Is to be plugged into
the denition after the ModelView-component.
25
Principal Moment Lines on Shells: Returns the principal mo-
ment lines that originate from user dened points on shells.
Shell forces: Outputs the values of rst and second principal normal
forces and moments in the center of each shell element.
Shell View: Lets you inspect shell properties: displacement, utiliza-
tion, principal stresses and Van Mises stress. Is to be plugged into the
denition after the ModelView-component.
5.9. Utilities
Get Cells from Lines: Creates closed cells from a graph and vertices
on a user supplied plane.
Mesh Breps: Takes multiple breps and generates a unied mesh from
them. The algorithm takes account of common edges and predened
points. This lets one dene positions for supports or point-loads on shells.
26
Nearest Neighbors: Connects each node of one set to a given number
of nearest neighbor nodes or neighbors within a specied distance of
another set.
Multi-dimensional Nearest Neighbors: Performs a multidimensional
nearest neighbor search on a two sets of vectors.
27
6. Component Reference
6.1. Ensemble
Figure 13: Setting the activation state of all elements of a model with a list of boolean
values.
In order to calculate the behavior of a real world structure one needs to dene
its geometry, loads and supports. The component Assemble gathers all the
necessary information and creates a statical model from it (see gure 14).
In case that some beams were dened by node indexes then these will
refer to the list of points given at the Pt input-plug.
28
Figure 14: The Assemble-component gathers data and creates a model from it.
The input-plug LDist can be used to dene the distance of points below
which they will be merged to one. This helps in dealing with inaccurate
geometry. Giving a negative value to LDist allows two separate nodes in a
model to reside on the same spot. This lets you dene zero length elements
such as springs connecting the two halves of a scissor structure.
The output-plug Mass renders the mass of the structure in kilogram,
COG the position of its center of gravity. When being plugged into a
panel the model prints basic information about itself: number of nodes,
elements, and so on. At the start of the list the characteristic length of the
model is given which is calculated as the distance between opposing corners
of its bounding box.
29
Figure 15: The Connected Parts-component groups beams into sets of elements that have
at least on node in common each.
30
6.1.5. Line to Beam
Figure 17: The LineToBeam-component that turns two lines into beams
New: If this plug has the value False only those lines will be added to
the structure that start and end at one of the points given in the input
points-list.
31
Remove: If this option has the value True the LineToBeam-component
checks for lines that lie on each other and merges such duplicates into
one. This prevents an error that is hard to detect by visual inspection
alone: Two lines on the same spot mean double member stiness in
the statical model.
LDist: sets the limit distance for two points to be merged into one.
Lines of length less than that value will be discarded. The default value
is 5[mm].
Id: takes a list of strings as identiers for beams. The default value
is an empty string. Each beam has a name by default: its zero based
index in the model. Identiers provide a useful means to group the
beams in order to modify or display them.
Figure 18: The IndexToBeam-component lets you directly define the connectivity infor-
mation of beams
32
with default properties from it. This speeds up model generation considerably
for there is no need to compare nodes for coincident coordinates.
The IndToBeam-component makes it possible to dene elements with
zero length. This proves useful in case you want to connect elements that
touch each other but should not be rigidly connected (think of a scissor
see section 6.2.3 about springs).
Figure 19: The ConToBeam-component turns connectivity diagrams into sets of beams
33
Figure 20: The MeshToShell-component turns meshes into shells
34
Figure 21: Modification of the default element properties.
When set to false this option excludes the corresponding beam from fur-
ther calculations until it is reset to true. See section 6.1.1 for an alternative
way of setting a beams activation state.
Bending stiness
Beams resist normal force and bending. Setting the Bending-plug of the
ModifyElement-component to false disables bending stiness and turns the
corresponding beam into a truss. There exist reasons that motivate such a
step:
For slender beams i.e. beams with small diameter compared to their
length the eect of bending stiness is negligible compared to axial
stiness. Just think of a thin wire that is easy to bend but hard to tear
by pulling.
35
half for each node with only trusses attached.
Trusses only take axial forces. Therefore they do not prevent the nodes
they are connected to from rotating. In case that only trusses attach to
a node, Karamba automatically removes its rotational degrees of freedom.
Otherwise the node could freely rotate which is a problem in static calcu-
lations. As soon as one beam connects to a node the node has rotational
degrees of freedom. Bear this in mind when the Analysis-component turns
red and reports a kinematic system. Transferring only axial forces means
that a truss reduces a nodes movability in one direction. A node that is
not attached to a support has three translational degrees of freedom. Thus
there must be three truss elements that do not lie in one plane for a node
to be xed in space.
Height and wall-thickness of cross-sections
Height which in case of circular tubes is equivalent to the outer diameter
D and wall-thickness of a cross-section determine a beams axial and bend-
ing stiness. Karamba expects both input values to be given in centimeter.
The cross-section area is linear in both diameter and thickness whereas the
moment of inertia grows linearly with thickness and depends on D 3 in case of
full sections and on D 2 in case of hollow sections. So in case of insucient
bending stiness it is much more eective to increase a beams height (or
diameter) than increasing its wall thickness.
Local and Global Eccentricity of the Beam axis
36
The input-plugs ecce-loc and ecce-glo serve to set the eccentricity of
the beam-axis with respect to the connection line between its endpoints.
Both expect a three dimensional vector. ecce-loc refers the eccentricity
to the local, ecce-glo to the global coordinate system. Eccentricities of
beams can also be dened via the Eccent-Beam-component (see sec. 6.2.7).
Orientation of the Beam
Lets you dene the orientation of a beam. Works analogously to the
orientate-beam-component (see 6.1.15).
Buckling property for cross section optimization
Buckling can be turned o for cross section optimization. This lets you
simulate pre-tensioned, slender elements without having to really pretension
them. The necessary pretension force is roughly the negative value of the
largest compressive axial normal force of all load cases.
Buckling length in local beam directions
For doing cross section optimization it is necessary to know a beams
buckling length. Karamba approximates it using the algorithm described in
section 6.5.10. For cases of system buckling this approximation does not
lie on the safe side. The input-plugs BklLenY, BklLenZ and BklLenLT
allow to specify the buckling length of a beam for its local Y- and Z- axis
respectively as well as for lateral torsional buckling. When specied, these
values override those from the buckling length calculation of Karamba. The
value lg sets the distance of transverse loads from the center of shear of
the cross section. It defaults to zero. Positive values mean that the loads
point towards the shear center and thus act destabilizing for lateral torsional
buckling. The property lg inuences the beams utilization with respect to
lateral torsional buckling according to EC3.
Second order theory normal force N II
Axial normal forces inuence the stiness of a beam in second order theory
calculations. If compressive they lower, in case of tension they increase
its bending stiness. Think of a guitar string which vibrates at a higher
frequency (i.e. is stier) under increased tension. In Karamba the normal
force which impacts stiness (N II ) is independent from the normal force
which actually causes stresses in the cross section (N ). This enables one to
superimpose second order theory results on the safe side by choosing N II as
the largest compressive force N of each beam.
37
6.1.11. Modify Element for Shells
Height
Sets a uniform height throughout the shell.
Second order theory normal force N II
As for beams N II for shells species the in-plane normal force which impact
stiness in case of second order theory calculations. It is a force per unit of
length assumed to be of same magnitude in all directions of the plane of the
shell.
6.1.12. Point-Mass
Figure 22: Vibration mode of beam with point mass in the middle.
38
Figure 23: A beam decomposed into its individual parts.
39
Figure 24: Beam-sets can be used to group beams.
disjoint. The Beam Id plug expects a list of strings with beam-identiers,
beam indexes, other beam-set-identiers or a regular expression. Regular
expressions have & as their rst character by denition. Set Id expects
a string which serves as identier of the new set of beams.
The group of beams dened by a set can be used for dening geometric
mappings. In this context a beam-set represents a polygon of straight seg-
ments. The order of the elements in the set is dened by the order in which
they were entered into the set. Such polygons can be split at an arbitrary
position (see e.g. section 6.8.12). MinSLen (minimum segment length)
lets you set the minimum length which may result from such a split. In case
of potentially smaller segments the intersection point snaps to its nearest
neighbor.
In order to group a structure visually, beam-sets can be given dierent
colors. These colors show when Cross section is enabled in the BeamViews
Render Settings (see section 6.6.8).
The identier of a beam-set can be used anywhere instead of a beam
identier. In order to be registered with the model, beam-sets need to be
fed into the Set input-plug of the Assemble-component.
The local X-axis (of red color) is the beam axis and points from starting-
40
Figure 25: The orientation of the local beam coordinate system can be controlled with
the OrientateBeam-component.
node to end-node.
The local Y-axis (green) is at right angle to the local X-axis and parallel
to the global XY-plane. This species the local Y-axis uniquely unless
the local X-axis is perpendicular to the XY-plane. If this is the case,
then the local Y-axis is chosen parallel to the global Y-axis.
The local Z-axis (blue) follows from the local X- and Y-axis so that the
three of them form a right-handed coordinate system.
The local coordinate system aects the direction of locally dened loads
and the orientation of the element's cross section. Use the Orientate Beam
component to set the local coordinate system (see g. 25):
The input plug X-axis accepts a vector. The local X-axis will be
oriented in such a way that its angle with the given vector is less than
90[deg]. This allows to give a consistent orientation to a group of beams.
The local Z-axis lies in the plane which is dened by the local X-axis
and the vector plugged into the Z-axis-input.
All structural elements can be given identiers, i.e. names. These names
need not be unique: Two elements can have the same name without Karamba
41
Figure 26: Elements can be selected by using their identifiers.
&b.: matches any identier that starts with b followed by an arbi-
trary character.
6.1.17. Support
Without supports a structure would have the potential to freely move around
in space. This is not desirable in case of most buildings. The current version
of Karamba does statical calculations. This means that there must always
42
be enough supports so that the structure to be calculated can not move
without deforming. Thus rigid body modes are forbidden.
When dening the supports for a structure one has to bear in mind, that
in three dimensional space a body has six degrees of freedom (DOFs): three
translations and three rotations (see gure 27). The structure must be
supported in such a way that none of these is possible without invoking
a reaction force at one of the supports. Otherwise Karamba will refuse
to calculate the deected state. Sometimes you get results from moveable
structures although you should not: The reason for this lies in the limited ac-
curacy of computer-calculations which leads to round-o errors. Sometimes
one is tempted to think that if there act no forces in one direction consider
e.g. a plane truss then there is no need for corresponding supports. That
is wrong: What counts is the possibility of a displacement.
Figure 27: Metaphor for the six degrees of freedom of a body in three-dimensional space.
3 In order to nd out the index of a specic node enable the node-tag checkbox in the
ModelView-component. See section 6.1.5 on how to predene the index of specic
nodes
43
Figure 28: Define the position of supports by node-index or position.
the point (or a list with indexes or positions of points) to which it applies.
By default the coordinate system for dening support conditions is the
global one. This can be changed by dening a plane and feeding it into the
Plane-input plug of the Support component.
Six small circles on the component indicate the type of xation: The
rst three correspond to translations in global x, y and z-direction, the last
stand for rotations about the global x,y and z-axis. Filled circles indicate
xation which means that the corresponding degree of freedom is zero. The
state of each circle can be changed by clicking on it. The string output of
the component lists node-index or nodal coordinate, an array of six binaries
corresponding to its six degrees of freedom and the number of load-case to
which it applies. Supports apply to all load cases by default.
Supports cause reaction forces. These can be visualized by activating
Reactions in the Display Scales section of the ModelView (see section
6.6.2). They show as arrows with numbers in colors green representing
forces and purple representing moments. The numbers either mean [kN ]
in case of forces or [kN m] when depicting moments. The orientation of the
moment arrows corresponds to the screw-driver convention: They rotate
about the axis of the arrow anti-clockwise when looked at in such a way that
the arrow head points towards the observer.
From the support-conditions in gure 28 one can see that the structure
is a simply supported beam: green arrows symbolize locked displacements in
the corresponding direction. The translational movements of the left node
44
(a) (b)
Figure 29: Influence of support conditions undeflected and deflected geometry. Left:All
translations fixed at supports. Right: One support moveable in horizontal direction.
are completely xed. At the right side two supports in y- and z-direction
suce to block translational movements of the beam as well as rotations
about the global y- and z-axis. The only degree of freedom left is rotation of
the beam about its longitudinal axis. Therefore it has to be blocked at one
of the nodes. In this case it is the left node where a purple circle indicates
the rotational support.
The displacement boundary conditions may inuence the structural re-
sponse signicantly. Figure 29 shows an example for this: when calculating
e.g. the deection of a chair, support its legs in such a way that no exces-
sive constraints exist in horizontal direction otherwise you underestimate
its deformation. The more supports you apply the stier the structure and
the smaller the deection under given loads. In order to arrive at realistic
results introduce supports only when they reliably exist.
By default the size of the support symbols is set to approximately 1.5[m].
The slider with the heading Support on the ModelView-component lets
you scale the size of the support symbols. Double click on the knob of the
slider in order to set the range of values.
Karamba oers cross section denitions for beams, shells and springs. They
can be generated with the Cross Sections multi-component. Use the drop-
down list on the bottom to chose the cross section type.
45
The dimensions of each cross section may be dened manually or by
reference to a list of cross sections (see section 6.2.10).
Cross sections are autonomous objects which can be plugged into the
Assemble-component (see g. 30). They know about the elements (or
element sets) they belong to by their ElemIds property: This is a list
of strings containing element identiers (see 6.1.5) or regular expressions
that match a group of element identiers (elem-ids). Upon assembly all
elem-ids are compared to all ElemIds entries of a cross section. In case
of correspondence the cross section is attached to the element. An empty
string which is the default value signies that the cross section shall be
applied to all elements. If two cross sections refer to the same element then
that which gets processed later by the assemble-component wins. It makes
no sense to attribute beam cross sections to shells and vice versa Karamba
ignores any such attempts.
46
I-prole
47
Figure 31: Shell made up of two elements with different thicknesses.
The input-plugs Family and Name have the same meaning as described
in section 6.2.1.
Figure 32: Spring fixed at one end and loaded by a point load on the other.
Springs allow you to directly dene the stiness relation between two
nodes via spring constants. Each node has six degrees of freedom (DOFs):
three translations and three rotations. Using the Cross Sections multi-
component with Cross Section set to Spring lets one couple these DOFs
by means of six spring-constants. A relative movement ui,rel between two
nodes thus leads to a spring force Fi = ci ui,rel . In this equation ui,rel stands
for a relative translation or rotation in any of the three possible directions
x, y, z, ci is the spring stiness. In Karamba the latter has the meaning of
kilo Newton per meter [kN/m] in case of translations and kilo Newton meter
per radiant [kN m/rad] in case of rotations. The input-plugs Ct and Cr
expect to receive vectors with translational and rotational stiness constants
respectively. Their orientation corresponds to the local beam coordinate
48
system to which they apply. In case of zero-length springs this defaults to
the global coordinate system but can be changed with the OrientateBeam-
component.
In case one wants to realize a rigid connection between two nodes the
question arises as to which spring stiness should be selected. A value too
high makes the global stiness matrix badly conditioned an can lead to a
numerically singular stiness matrix. A value too low results in unwanted
relative displacements. So you have to nd out by trial and error which value
gives acceptable results.
Figure 32 shows a peculiarity one has to take into account when using
springs: They are unaware of the relative position of their endpoints. This
is why the load on the right end of the spring does not evoke a moment at
the left, xed end of the spring.
6.2.4. Beam-Joints
Figure 33: Beam under dead weight, fixed at both supports with a fully disconnected
joint at one end resulting in a cantilever.
49
Figure 33 shows a beam under dead weight with fully xed boundary
conditions at both end-points. At the right end the joint (which is in fact
no joint any more) completely dissociates the beam from the support there.
The result is a cantilever.
The symbols for joints resemble that for supports: pink arrows represent
translational joints, white circles symbolize moment hinges. In Karamba
joints are realized by inserting a spring between the endpoint of a beam
and the node to which it connects. This necessitates sucient support
conditions at the actual nodes to prevent them from freely moving around.
See for example the right node in g. 33 which has to be fully xed
otherwise the system would be kinematic.
The Crosec-Joint-component allows to dene hinges at a beams starting-
and end-node. A list of beam-identiers lets you select the beams where the
joint denition shall apply. Filled circles mean that the corresponding degrees
of freedom represent joints. T stands for translation, R for rotation.
Feed the resulting cross-section into the Joint-plug of the Assemble-
component. The orientation of the axes of the joints corresponds to the
local coordinate system of the beam they apply to.
Sometimes the stiness of connections lies between fully xed and zero.
With the input-plugs Ct-start and Cr-start it is possible to set the stiness
of the hinge in translation (kN/m) and rotation (kN m/rad) respectively at the
start of the element. Ct-end and Cr-end provide the same functionality
for the end-point.
In order to make the denition of hinges accessible to optimization the
input-plugs Dofs-start and Dofs-end can be used to set hinges at the
beams endpoints with a list of numbers. Integers in the range from '0' to
'5' signify degrees of freedom to be released in addition to those specied
manually with the radio-buttons.
50
Figure 34: Three different but equivalent possibilities for defining a hinge based on geo-
metric relations using a Beam-Joint Agent.
plug. Upon assembly the beam-joint agent crawls around in the model and
places hinges when one of the following conditions apply:
The node on the at-element lies on one of the geometric items supplied
in ToGeom. This can be points, curves, planes, breps or meshes.
The tolerance for two geometric items touching in space is LDist as
dened on model assembly (see 6.1.2).
The meaning of Ct, Cr and Dofs is analogous to that of the Beam-
Joints-component.
Cross section forces of beam and truss elements relate to the line that con-
nects the cross section centroids. When a cross section changes, chances are
51
Figure 35: Properties of a given cross section can be retrieved via the Disassemble Cross
Section-component.
Figure 36: Beam positioned eccentrically with respect to the connection line of its two
end-nodes.
high that also the position of its centroid shifts. In case of elements predom-
inantly loaded by bending moments, such a shift can normally be neglected.
In the presence of normal forces however e.g. when considering columns
changes in the centroids position lead to additional bending moments that
may be decisive for a members cross section design.
In Karamba there exist two components that can be used to take care
of eccentricities (see g. 36): One works on beams, the other on cross
sections. When both variants of denition coincide for an element then they
52
get additively combined. This enables one to dene families of cross sections
of dierent size with e.g. the position of their upper sides at one level.
The denition of a local eccentricity for cross sections with a Eccent-
CroSec-component is straight forward: The ecce-loc-input plug expects a
vector that denes the oset with respect to the local beam axes. Values
are expected in centimeters. x represents the longitudinal beam axis, y is
horizontal, z vertically upwards. Cross sections with eccentricities can be
stored in cross section tables using the GenCSTable-component and thus
be made reusable in other projects.
The Eccent-Beam-component has one additional input-plug as compared
to the cross section variant: ecce-glo lets one dene beam eccentricities
([cm]) with respect to the global coordinate system.
Figure 37: The Cross Section Matcher-component returns a standard profile for a
custom profile.
Use the Cross Section Matcher-component in case you want to nd the
rst prole from a given list that provides equal or higher resistance compared
to a given custom prole (see g. 37). The CSMatch-component takes a
cross section and a list of cross sections as input. Traversing the list starting
from the rst element it proceeds until an appropriate prole is found which
is returned as the result.
53
6.2.9. Cross Section Range Selector
The cross section library that comes with Karamba contains roughly 6000
proles. In order to reduce the amount of information the list can be short-
ened by applying selection criteria on it using the Cross Section Range
Select component (see g. 38). The input-plugs maxH and maxW let
you limit the list according to maximum cross section height and width. The
submenu which unfolds when clicking on the black select-bar oers further
options for narrowing the search: country of origin, general shape and family
name.
In case one does not supply a list of cross sections at the CroSec input-
plug, the cross section table that comes with Karamba is used by default.
Figure 38: Selection of a range of cross sections from among a given list.
54
Figure 39: Cantilever with four different kinds of cross section taken from the standard
cross section table.
family: name of the group to which the cross section belongs (see
sec. 6.2.1)
S: spring
Sh: shell
geometric properties which are used for drawing the cross section
area, moments of inertia, etc. that dene the cross sections mechanical
behavior.
55
The GenCSTable-component takes a cross section (or a list of cross sec-
tions) as input and returns the equivalent table data as a string. The physical
units used for output are always metric. When plugged into a panel the in-
formation can be streamed to a le which then constitutes a valid cross
section table. Karamba reads the data of cross section tables only once. So
in order that changes in the table take eect restart Grasshopper.
Figure 41: List of cross sections generated from the standard cross section table.
56
irrespective of the user settings at installation.
When opening the Karamba-folder you will nd three dierently named
cross section tables: CrossSectionValues.csv and CrossSectionValues_sorted-
ForHeight.csv contain cross sections sorted according to increasing height.
In CrossSectionValues_sortedForWeight.csv the area and thus weight per
unit of length determines a cross sections relative position within a family.
When doing cross section optimization (see section 6.5.10) those two sorting
options lead to dierent results. Depending on external requirements they
result in structures of minimum cross section height or structural weight.
6.3. Material
There are two ways for dening materials in Karamba: Either select a ma-
terial by name from a list of materials (see section 6.3.2) or set mechanical
material properties manually (see below).
The Appendix (see section A.1) contains additional information on me-
chanical properties of materials.
Materials (like cross sections) are autonomous entities which may be
plugged into the Assemble component. They know about the elements
(or element sets) they apply to by their Elems|Ids property: This is a list
of strings containing element identiers (see 6.1.5) or regular expressions
that match a group of element identiers (element-ids). Upon assembly
each element-id is compared to all Elems|Ids entries of a material. In case
they match the material is attached to the element. An empty string
which is the default value signies that the material shall be applied to all
elements.
The component MatProps lets one directly dene material properties (see
g. 42):
57
Figure 42: The definition of the properties of two materials via the MatProps compo-
nent, selection of the second Material from the resulting list (mid, bottom) or selection
from the default material table (mid, top).
58
6.3.2. Material Selection
Figure 43: Partial view of the default data base of materials. SI units are used irrespec-
tive of user settings. Automatic conversion ensures compatibility with Imperial units.
59
get automatically converted when used in the context of Imperial units.
The extension .csv stands for comma separated value. The le can
be opened with any text editor and contains the table entries separated by
semicolons. It is preferable however to use OpenOce or Excel (both can
read and write csv-les): They render the data neatly formatted (see g.
43). Make sure to have a . and not a , set as your decimal separator.
In some countries . is used to separate thousands which then needs to be
adapted as well. The setting may be changed under Windows via regional
settings in system settings. All lines in the table that start with # are
comments. Feel free to dene your own materials. All physical units in the
table are assumed to be metric irrespective of the user choice at installation.
The le path to the materials data-base can be changed in two ways: rst
right-click on the component and hit Select le path to material denitions
in the context menu that pops up. Second plug a panel with a le path into
Path. Relative paths are relative to the directory where your denition lies.
Figure 44: List of materials resulting from the ReadMatTable-component reading the
default data base of materials. Selection of the default Steel via MatSelect.
6.4. Load
60
help of the Loads multi-component. On the bottom of the ModelView-
component (see section 6.6.2) there is a drop-down-list (unfold it by click-
ing on the Load-case Selection-menu header) which can be used to select
single load-cases for display. Select all in order to view all existing load-
denitions of all load-cases simultaneously. Use the force-slider to scale the
size of the load-symbols (double-clicking on its knob lets you change the
value range and its current value).
Figure 45: Simply supported beam with three loads and three load-cases.
6.4.1. Gravity
61
6.4.2. Point-Load
The component Point-Load lets you dene loads on points. These get
attached to their points either by node-index6 or coordinate. Feed a cor-
responding list of items into the Pos|Ind-plug (quite analogous to the
Support-component). A point-loads can be either a forces (kN ) or mo-
ments (kN m). Feed a force- or moment-vector into the Force or Moment
input-plug. Its components dene the force or moment in global x-, y- and
z-direction.
When set to true the boolean input Local? makes loads and moments
follow the nodal rotations in large displacement calculations (see section
6.5.3).
Plugging a point-load into a panel component gives the following informa-
tion: Node-index where the load gets applied, force-vector, moment vector,
the number of the load case to which it belongs and whether the load is tied
to the nodal coordinate system.
By default point loads will be put into load case zero. Any positive number
fed into the LCase-plug denes the load case to which the corresponding
load will be attributed. A value of 1 signals that the load acts in all existing
load cases.
For more information on loads and some typical values see section A.2.
6.4.3. Imperfection-Load
6 In order to nd out the index of a specic node enable the node tag-checkbox in the
ModelView-component. See section 6.1.5 on how to predene the index of specic nodes
or node-position
62
inclination 0 causes transverse loads 0 N II at the elements endpoints. An
initial curvature 0 results in a uniformly distributed line load of magnitude
0 N II and transverse forces at the elements endpoints that make the overall
resultant force zero. For details see e.g. [4].
Karamba lets you dene axial initial strains. Fig. 46 shows a beam with
both ends xed, subject to a positive initial strain. The unit of dimension
of the pretension which gets fed into the Eps0 plug is [mm/m]. A positive
value means that the element would become longer if unconstrained.
Applying initial strain to an element is not the same as applying a pair of
opposite forces at its endpoints: In case of initial strain the axial force in
the element depends on its boundary conditions: If the structure to which
it connects is very sti then the resulting axial force will be N = 0 A E .
In gure 46 the supports are rigid, the elements cross section A = 25[cm2 ],
Young's Modulus E = 21000[kN/cm2 ] and 0 = 0.00015. This results in an
axial force of N = 78.75[kN ] and shows up as horizontal support reactions.
When the rest of the structure does not resist, then a pretension-load merely
results in lengthening or shortening the corresponding element.
The input plug ElemIds denes the elements where the load acts and
LCase the load-case.
Figure 46: Member under initial strains fixed at both ends and resulting support reac-
tions.
63
6.4.5. Temperature-Load
Figure 48 shows a tilted structure consisting of three beams under the action
of a uniformly distributed load at elements 0 and 2. The load acts parallel
to the beams local z-axis. The components of the load vector are assumed
to be given in kilo Newton per meter [kN/m]. The input-plug BeamIds
receives a list of the identier of the beams on which the load shall act. See
section 6.1.5 for how to attach identiers to beams. By default beams are
named after their index in the FE-model. There are three options for the
orientation of the load: local to element, global and global proj.. Their
meaning corresponds to the options available for mesh-loads (see g. 51).
The input-plug LCase which designates the load case defaults to 0.
6.4.7. Mesh-Load
64
Figure 48: Line loads on a structure consisting of three beam elements defined in local
beam coordinate systems.
Figure 49: Simply supported beam loaded with line loads that approximate a given,
evenly distributed surface load on a mesh.
65
The procedure for calculating nodal loads and uniformly distributed beam
loads from surface loads consists of the following steps: First Karamba
calculates the resultant load on each face of the given mesh. Then the
resultant load of each face gets evenly distributed among its three or four
vertices.
The second step consists of distributing the vertex-loads among the nodes
of the structure. In order to arrive at beam loads additional helper-nodes
along their axes get generated. The mutual distance of those is chosen equal
to a third of the mean edge length of the given mesh.
Each mesh vertex transfers its load to the nearest node. In case that there
are several nodes within a radius of less than LDist as set at the Assemble-
component (see section 6.1.2) the vertex load gets evenly distributed among
them. The loads received by the helper-nodes along beam axes get summed
up and divided by the element length. This results in the approximately
equivalent uniformly distributed load which is placed on the element. From
the procedure described, one can see that a crude mesh may lead to a locally
incorrect distribution of loads. In the system shown in g. 49 the points
closest to the vertices are the element's end-points. Therefore the helper
nodes along the beam-axis do not receive a share in the mesh-load and thus
no line-load results.
Fig. 50 shows a similar setting as in g. 49. The dierence lies in the
rened mesh with more vertices along the beam axis. Now loads from the
mesh vertices get distributed also to the helper nodes along the element axis.
This leads to to the generation of a uniform line-load.
The right side of gure 50 shows what data the Mesh-load-component
collects: The input-plug Vec expects a vector or list of vectors that dene
the surface load. Its physical units are kilo Newton per square meter (kN/m2 ).
The orientation of the load-vector depends on the checkbox selected under
Orientation (see also gure 51):
66
Figure 50: Simply supported beam loaded with point loads (dark orange) that approxi-
mate a given, evenly distributed surface load on a mesh.
Figure 51: Orientation of loads on mesh: (a) local; (b) global; (c) global projected to
global plane.
The input-plug Mesh accepts the mesh where the surface load shall be
applied. Its vertices need not correspond to structure nodes. The mesh may
have any shape.
Set the LCase-input to the index of the load case in which the surface
load shall act. Indexing of load-cases starts with zero, -1 is short for all
load cases.
67
6.4.8. Prescribed displacements
Figure 52: Left: Deflection of a beam under predefined displacements at its end-supports;
Right: PreDisp-component for setting displacement condition at left support.
4 The term displacement as used throughout this manual includes translations and rota-
tions.
5 In order to nd out the index of a specic node enable the node tag-checkbox in the
ModelView-component. See section 6.1.5 on how to predene the index of specic nodes
68
system dened by the plane fed into the Plane-input plug. Translations
are to be given in meter, rotations in degree. The X-component of the
rotation vector describes a rotation about the coordinate systems X-axis.
A positive value means that the node rotates counter-clockwise if the X-
axis points towards you. Analog denitions apply to rotations about the
Y- and Z-axis. Karamba is based on the assumption of small deections.
Thus be aware that large prescribed displacements and rotations give rise
to incorrect results (which can nevertheless be used for shape-nding). For
approximating eects due to large displacements see section 6.5.3.
Displacements can only be prescribed if the corresponding displacement
degree of freedom is removed from the statical system. This means you
have to activate the corresponding button in the Conditions-section of the
PreDisp-component. The rst three buttons stand for translations the last
three for rotations. Only those components of the Trans- and Rot-vectors
take eect which correspond to activated supports.
6.5. Algorithms
With geometry, supports and loads dened the statical model is ready for
processing. The AnalyzeThI-component computes the deection for each
load case and adds this information to the model. It assumes that the
inuence of axial forces is negligible thus ThI which stands for rst order
theory. Whenever the AnalyzeThI-component reports an error (turns red)
despite the fact that the Assemble component works, it is probably a good
idea to check the support conditions.
Figure 53 shows a deected beam with two load-cases. An axial load acts
in load-case zero, a transverse load in mid-span in load-case one.
The analysis component not only computes the model deections but
also outputs the maximum nodal displacement (in meter), the maximum
total force of gravity (in kilo Newton, if gravity is set) and the structures
internal deformation energy of each load case - see section 6.6.1 for details
on work and energy.
These values can be used to rank structures in the course of a structural
69
Figure 53: Deflection of simply supported beam under single load in mid-span and axial,
compressive load.
optimization procedure: the more ecient a structure the smaller the max-
imum deection, the amount of material used and the value of the internal
elastic energy. Real structures are designed in such a way that their de-
ection does not impair their usability. See section A.3 for further details.
Maximum deection and elastic energy both provide a benchmark for struc-
tural stiness yet from dierent points of view: the value of elastic energy
allows to judge a structure as a whole; The maximum displacement returns
a local peak value.
In order to view the deected model use the ModelView-component (see
section 6.6.2) and select the desired load case in the menu Load case
Selection. There exist two options for scaling the deection output. First
there is a slider entitled Deformation in the menu Display Scales that lets
you do quick ne-tuning on the visual output. Second option: the input-
plug LC-Factor which accepts a list of numbers that ModelView uses to
scale the loads. Its default value is 1.0. Each item in the list applies to
a load case. If the number of items in this list and the number of load
cases do not match then the last number item is copied until there is a one
to one correspondence. The second option for scaling displacements can
be used in the course of form-nding operations: The model-plug at the
right side of the ModelView outputs the displaced geometry which can be
used for further processing. Selecting item all on the drop-down-list for
the selected load case results in a superposition of all load cases with their
corresponding scaling factor.
Looking at gure 53 one immediately notices that only beam center
70
axes are shown. In order to see beams or shells in a rendered view add a
BeamView- or ShellView-component after the ModelView. See sections
6.6.8 and 6.6.15 for details.
Axial forces in beams and in-plane forces in shells inuence the structures
stiness. Compressive forces decrease a structure's stiness, tensile forces
increase it. The inuence of compressive forces on displacements and cross
section forces may be neglected as long as their absolute value is less than
10% of the buckling load.
Karamba lets you consider second order theory (Th.II) via the AnalyzeThII-
component. It is based on small displacements and takes account of axial
forces via the element's geometric stiness matrix. For beams the procedure
outlined in [4] gets used for calculating cross section forces.
In Karamba distinction is made between normal forces Nx which cause
stresses in the members and normal forces N II which result in second order
eects (see also [4]). At rst sight this concept seems weird. How can there
be two kinds of normal forces in the same beam? Well, in reality there can't.
In a computer program it is no problem: stresses get calculated as = Nx /A
and N II is used for determining second order eects. The advantage is, that
in the presence of several load-cases one can chose for each element the
largest compressive force as N II . This gives a lower limit for the structures
stiness. A reevaluation of the load-cases using these N II values leads to a
structural response which is too soft. However the dierent load-cases may
then be safely superimposed.
In a model N II can be set using the ModifyBeam-component (see 6.1.9).
In such a case 0 has to be supplied at the MaxIter-input plug of the
AnalyzeThII-component. Otherwise N II will be determined in the course
of the iterative procedure. The value of N II can be displayed via the
ModelView-component (see 6.6.2).
Fig. 54 shows the same system as in g. 53. This time with results
according to rst and second order theory. When comparing the transverse
deections in load-case two one can see that the maximum deection in-
creased from 0.24[m] to 0.28[m] due to the eect of the axial compressive
71
load.
Figure 54: Deflection of simply supported beam under single load in mid-span and axial
compressive load. Comparison of first and second order theory results.
LC Number of load-case from which to take the normal force N II in the
members which cause second order theory eects. If set to -1 the
minimum normal force of all load-cases is considered.
The normal forces N II get attached to the model and will be considered
in all further analysis steps.
72
In case that N II lies beyond the buckling load an error will result. If
that happens reduce the normal forces in your structure and determine the
buckling load factor using the Buckling Modes-component.
Before the advent of digital modeling people like Heinz Isler or Antoni Gaudi
helped themselves with physical models for generating curved geometries.
A popular method was to use the shape of meshes or elastic membranes
hanging from supports (see g. 55).
(a) (b)
Figure 55: Hanging models. Left: Model of Antoni Gaudi for the Temple Expiatori de la
Sagrada Famlia (from the internet). Right: Some of Heinz Islers hanging models (from the
internet).
73
Figure 56: Structure resulting from large deflection analysis with the LaDeform-
component.
Figure 57: Catenary resulting from point loads that do not change their direction when
displaced.
74
proportionally in each step. Aside from cases like mentioned above this
results in an approximation of the structures real deections under
the given loads.
In g. 57 the point loads are dened with respect to the global coordinate
system: The input-plug Local? at the point-load component is set to
false. Fig. 58 shows what happens if one changes that property to true:
The point-loads co-rotate with the points they apply to. This leads to a
pneumatic shape. The same happens for locally dened line-loads.
Figure 58: Pneumatic form resulting from point loads that rotate along with the points
they apply to.
Axial forces in beams and trusses as well as in-plane forces in shells change
the elements response under transverse load. Tension makes them stier,
compression has a softening eect.
75
Figure 59: Shape and load-factors of the first buckling mode of a cantilever analyzed as a
beam and shell.
Slender columns or thin shells may fail due to buckling before the stresses
in the cross section reach the material strength. Stability analysis therefore
plays an important role in structural design.
When doing cross section optimization with the Optimize Cross Section-
component the design formulas applied take account of buckling, based on
the buckling length of the members. By default local buckling of individual
elements is assumed. So called global buckling occurs if a structural sub-
system consisting of several elements (like e.g. a truss) loses stability. Global
buckling can be checked with the Buckling Modes-component (see g. 59).
The Buckling Modes-component expects these input parameters:
76
For the determination of buckling modes a so called Van Mises iteration
is applied. This procedure works well in case the buckling load factors are
nicely separated. Sometimes it occurs, that the load factors of the rst
buckling shapes are identical or nearly the same. In such cases convergence
may prove hard or impossible to reach. Sometimes it helps to increase the
maximum number of iterations or the convergence criteria.
The model which comes out on the right side lists the computed buckling-
modes as load cases. Due to convergence problems it may happen that not all
desired buckling modes can be calculated. The Buckling Modes-component
tries to compute as many as possible.
BLFacs returns the buckling load factors which are assumed to be non-
negative. When multiplied with those factors the current normal forces
N II would lead to an unstable structure. The buckling load factors are
listed in ascending order. The calculation of buckling factors assumes small
deections up to the point of instability. This may not always be the case.
Figure 60: Left: 14th eigen-mode with strain display enabled. Right: EigenMode-
component in action.
77
corresponding eigen-values of structures (see gure 60).
The input parameters are a model, the index of the rst eigen-mode to be
computed and the number of desired eigen-modes. The model which comes
out on the right side lists the computed eigen-modes as load cases. Thus
they can be superimposed using the ModelView-component for form-nding
or structural optimization. All loads which were dened on the input model
get discarded. The determination of eigen-shapes can take some while in
case of large structures or many modes to be calculated. Grasshopper has
no Cancel-button. Therefore you should save your model before
activating the component!.
The number of dierent eigen-modes in a structure equals the number of
degrees of freedom. In case of beams there are six degrees of freedom per
node, with only trusses attached a node possesses three degrees of freedom.
Figure 61 shows the rst nine eigen-modes of a triangular beam mesh that
is xed at its lower corners. In the upper left corner of gure 61 one sees the
undeected shape. The higher the index of an eigen-mode the more folds it
exhibits.
The eigen-values represent a measure for the resistance of a structure
against being deformed to the corresponding eigen-form. Values of zero
or nearly zero signal rigid body modes. In case that the AnalyzeThI- or
AnalyzeThII-components complain about a kinematic structure the eigen-
forms can be used to detect those kinematic modes.
In case you want to know how and at which frequency a structure vibrates
use the NaturalVibrations-component (see g. 62).
The mass of beams and trusses enters the calculation of natural vibrations
with the values derived from their material weight. Karamba uses consistent
mass matrixes for beam elements. For truss and shell elements a lumped
approach is applied.
At nodes additional masses (see sec. 22) can be dened to simulate the
eect of e.g. concrete slabs (these normally make up the majority of mass
in high-rises) in an approximate manner. These masses are assumed to have
translational inertia only.
78
Figure 61: Undeflected geometry (upper left corner) and the first nine eigen-modes of the
structure.
Figure 62: Simply supported steel beam IPE100 of length 10[m] in its 14th natural vi-
bration mode.
79
it. Calculating the structural response will show that there are regions which
carry more of the external load than others. Now one removes a number
of those elements of the structure that are least strained and thus least ef-
fective. Again the response of the now thinned out model is determined,
under-utilized elements removed and so on. This iterative procedure stops
when a target volume or number of remaining structural elements is reached.
The above algorithm can be viewed as a way of tracing the internal force
ow through a structure and removing those elements that do not form part
of it. Fig. 63 shows a cantilever after applying the BESO for Beams-
component on it. The algorithm works on beam and truss elements only.
For shells a separate component exists (see section 6.5.8).
Figure 63: Cantilever with initially regular mesh after application of the BESO for
Beams-component.
80
nodes of the structure are held xed. The right picture shows the opti-
mized structure reduced to 45% of its initial mass in the course of 20 design
iterations.
Here the description of the input parameters:
LCases : List of load cases to be considered. Zero is the index of the rst
load case. Considering the total eect of several load cases amounts
to adding up their individual inuences on an element.
81
MaxConvIter : Maximum number of additional iterations for convergence
after the structures mass has reached its target value using nChangeIter
iterations.
GroupIds : Expects list of strings. Elements that match a given list entry
take part in the optimization and belong to one group. They get col-
lectively activated or deactivated during force path nding. A structure
may consist of active and non-active elements. The initial state of a
group is determined by the state of the majority of its elements. Groups
need not be disjoint.
By clicking on the Settings bar you can unfold the following input-plugs:
82
MinDist : In some cases one wishes to limit the number of elements that
get added or removed in a certain area. MinDist lets you select the
minimum distance in meter [m] between the endpoints of elements that
may be changed in one iteration.
Figure 64: Triangular mesh of beams before (a) and after (b) applying the BESO for
Beams-component.
Hist : a data tree which contains for each iteration step a list of boolean
values that signify whether an element in active (true) or inactive (false).
The boolean values map directly on the model elements. Using a Tree
Branch component with a slider connected to a Activate Model-
component (see section 6.1.1) lets you inspect the history of the BESO-
process (see g. 64).
Is active : renders a list of true/false values one for each element. True
signals that the corresponding element is part of the nal structure (i.e.
83
active). Otherwise it contains a false entry.
These are the main parameters that control the optimization process:
LCases : List of load cases to be considered. Zero is the index of the rst
load case. Considering the total eect of several load cases amounts
to adding up their individual inuences on an element.
TargetRatio : Ratio of the target mass to the initial mass of the shells
in a structure. When determining the initial mass all shell elements of
84
the structure irrespective of state of activation count. In the target
structure only active elements contribute to its mass. This enables one
to apply BESO-components in series.
ER : Is short for evolutionary ratio and denes the ratio between the
volumes Vi and Vi+1 of the optimized structure in two consecutive steps:
Vi+1 = Vi (1 ER). The sign before ER depends on whether elements
shall be added or removed. In case that ER < 0 which is the default
ER is set automatically: ER = (1T argetRatio)/M axIter+ARmax /2. In
case that ER is too small, the target mass of the optimized structure
can not be reached within MaxIter steps.
Nhist : Number of iterations between the steps which are used for calcu-
lating the convergence criteria.
Conv : Relative change of the mass between two iterations Nhist cycles
apart below which convergence is assumed.
Rexp : Determines how the strain energy at nodes within the distance Rmin
of the element center is weighted for calculating an elements sensitivity.
Rij )Rexp . Here Rij = Rmin R
P
The weight is determined as w = (Rij /
with R being the distance between a sample node and the center of the
85
P
element. Rij is the sum of the center distances of all nodes closer
than Rmin to the element center.
KillThick : The BESO for shell procedure makes use of a so called soft
kill approach. Instead of removing elements from the model they are
made very soft by reducing their thickness. With the input-plug KillTh-
ick a value other than the default 0.00001[m] can be selected.
ModelHist List of intermediate models one for each iteration step of the
BESO procedure.
VHist List of values which chart the development of the volume of the
shells to be optimized.
86
Figure 66: The Tension/Compression Eliminator-component.
LC You can specify a special load case to consider. The default is 0.
Compr If true, then only members under compression will be kept. Oth-
erwise only members under tension will survive. This value is false by
default.
87
Figure 67: Cross section optimization with the OptiCroSec-component on a simply sup-
ported beam.
2. For each element or given set of elements: selection of the rst sucient
entry from the family to which each cross section belongs
88
sections one needs to supply a list of lists of thicknesses and corresponding
cross section names. Each sub-list species the element thicknesses of one
shell (see section 6.2.2).
For shells the mechanical utilization is calculated as the maximum Van
Mises stress in a point divided by the material strength. For cross section
optimization of shells the same procedure applies as for beams. Starting
with the rst item of a cross section family the algorithm tests all members
and stops when a cross section is encountered for which the utilization is
less than 1.
After ensuring safety against structural failure a second, optional step fol-
lows where Karamba tries to approach a user supplied maximum deection.
Behind the scenes Karamba iteratively adapts temporarily the yield stress of
the materials. This may lead to uneconomic results in case of structures
where the maximum displacement occurs in a small region whereas the rest
of the structure shows a much smaller deformation. In order that the iter-
ative adaption for the maximum displacement works, the number of design
iterations should be chosen appropriately ve is normally sucient.
Building codes prescribe dierent levels of safety against reaching max-
imum displacement and load bearing limits. When using external loads at
ultimate limit state level one should keep in mind that this is approximately
1.4 times the loads used to check maximum displacement requirements.
When the given loads surpass the load bearing capacity of the biggest
cross section available in a cross section family, Karamba issues a warning
via the Info output-plug.
There is no guarantee, that the iteration procedure for nding the optimal
cross sections eventually converges so check the results via the utilization-
output of the ModelView-component. Due to the lower-bound theorem of
plasticity the structure will be sucient for the given loads at any iteration
step although some elements may show overutilization provided that
the material is suciently plastic (like e.g. steel). With increasing number
of iterations the statical system tends to become more and more statically
determinate.
The prole selection procedure assumes that the cross sections of a family
are ordered: starting with your most favorite and descending to the least de-
sired cross section. In the cross section table CrossSectionValues.csv that
89
comes with Karamba all families are ranked according to their height. The
cross section with the smallest height comes rst, the one with the largest
height last. When using cross section area as sorting criteria, structures of
minimum weight (and thus approximately cost) result. See 6.2.12 for how
to switch between minimum height and minimum weight design. Ordering
the proles by area may lead to structures where the cross section heights
vary signicantly from one beam to the next.
In order to check whether a given beam cross section is sucient Karamba
applies a procedure for steel beams according to Eurocode 1993-1-1. The
interaction values for the cross section forces kyy , kyz and so on get calculated
according to EN 1993-1-1 appendix B. The values Cmy and Cmz are limited
to a minimum of 0.9. The design procedure takes account of normal force,
biaxial bending, torsion and shear force. For more details see section A.6. It
is possible to switch o the inuence of buckling for single members or set
user dened values for the buckling length (see section 6.1.10).
The adverse eect of compressive normal forces in a beam can be taken
into account globally (see section 6.5.4) or locally on the level of individual
members. The procedure applied in Karamba for cross section optimization
works on member level. A crucial precondition for this method to deliver
useful results is the determination of a realistic buckling length lb of an
element. For this the following simplication which is not always on the
safe side is applied: Starting from the endpoints of an element, proceeding
to its neighbors, the rst nodes are tracked that connect to more than two
elements. The buckling length is determined as the distance between these
two nodes. It lies on the safe side in case of endpoints held by the rest of the
structure against translation. When beams are elements of a larger part of a
system that buckles (e.g. a girder of a truss) then the applied determination
of buckling length produces unsafe results! One should always check this
by calculating the global buckling modes (see section 6.5.4). In case of
a free end the buckling length is doubled. Compressive normal force in
slender beams reduces their allowable maximum stress below the yield limit.
Visualizing the level of utilization with the ModelView-component will then
show values below 100% in the compressive range.
The design procedure applied in Karamba takes lateral torsional buckling
into account. An elements lateral torsional buckling length is calculated in
90
the same way as for conventional buckling. The buckling length for lat-
eral torsional buckling can be set manually via the property BklLenLT of
the Modify Beam-component. In the course of cross section optimization
Karamba checks the cross sections for local buckling and issues a warning
if necessary. The check for local buckling uses the classication of cross
sections into classes 1 to 4 according to EN 1993-1-1. Class 4 cross sections
are susceptible to local buckling.
During the optimization of cross sections normal forces N II are not up-
dated. In order to include second order theory eects either set N II manually
or use AnalysisThII (see section 6.5.2) to determine N II iteratively.
The OptiCroSec-component provides the following set of input-plugs:
MaxUtil Target value of the element utilization where 1.0 means full
utilization - the default. In some situations (e.g. early stage design)
loads or geometry can not be fully specied. Then it makes sense to
keep some structural reserves for later phases by setting this value to
less than 1.0.
91
In order to see all input-plugs click on the Settings-button to unfold the
rest of the component:
Elast If set to true (the default) cross section design is done within
the elastic range. This means that under given loads the maximum
resulting stress in a cross section has to lie below the yield stress fy
of the material. In case of materials with high ductility (like steel)
the plastic capacity of cross sections can be exploited. Depending on
the cross section shape the plastic capacity is 10% to 20% higher than
the elastic capacity. Set Elast to false in order to activate plastic
cross section design. When enabling plastic cross section design do not
be surprised that the ModelView reports utilization-levels beyond 100%.
The reason is that Karamba assumes linear elastic material behavior.
On the output side the Model-plug renders the structure with optimized
cross sections. Check the Info-plug in order to see whether any problems
occurred during optimization. The Mass-plug informs you about the overall
mass of the optimized structure. Disp- and Energy-plugs return the
92
maximum displacement and internal energy of the structure after the last
cross section design iteration.
The aim of the design procedure applied in Karamba is to render plausible
cross section choices. Be aware that it builds upon assumptions like the
correct determination of buckling lengths.
6.6. Results
The results category consists of three sections. The rst contains compo-
nents that apply to a structure in general. Components of the second and
third category apply to beams and shells respectively.
6.6.1. Deformation-Energy
93
Figure 69: Simply supported beam under axial and transversal point-load: List of axial
deformation energy and bending energy for each element and load case.
6.6.2. ModelView
94
Model expects the model to be displayed
LC-Index lets one select the visible load-case. The value in LC-
Index will be added to the load-case selected in the drop-down-list of
ModelView (all counts as -1). If the resulting number is larger
than the number of available load-cases the ModelView turns red. If
the resulting value is smaller than 0 all load-cases are superimposed.
The possibility of using a number-slider for selecting load-cases makes
life easier in case that there are many of them.
Colors: Color plots for e.g. stresses use a color spectrum from blue to
white to red by default. One can customize the color range by handing
over a list of RGB-values to the Colors-plug. There have to be at
least four colors given. The rst color is used for values below, the last
color for values above the current number range. The remaining colors
get distributed over the number range (see g. 71). The colors are
centered on zero if zero is part of the number range. Otherwise the
colors spread evenly between lower and upper numerical limit. In case
you want to change the coloring defaults, set them in the karamba.ini
le. There it is also possible to switch o the centering around zero by
setting center_color_range_on_zero to false.
Ids: This plug lets one select those parts of a model which shall be
displayed. It expects a list of strings. The default value is an empty
string which means that all of the model shall be visible. As one can
see in g. 70 it is possible to input regular expressions. These must
start with the character & and adhere to the conventions for regular
expressions as used in C#. The identier of each element of the model
is compared to each item of the given string list. In case a list entry
matches the element identier the element will be displayed. Fig. 70
contains four examples of Id lists: The rst would limit visibility to
element A, the second to element B. The third is a regular expression
which matches elements A or C. The fourth matches elements A
to C.
95
Figure 71: Color plot of strains with custom color range.
From the defMesh output-plug you can get the mesh of the shells and
beam cross sections of the deformed model for further processing. It is
a list of meshes with each item corresponding to one shell or beam.
The defAxes plug delivers the axes of the beams of the deformed
structure as interpolated 3rd degree nurb-splines. Use the Length/Sub-
division slider to set the number of interpolation points.
96
Figure 72: Local axes of cantilever composed of two beam elements, reaction force and
moment at support.
97
values as thresholds (e.g. the yield stress of a material). The radio button
group Result Threshold as can be used to switch between relative and
absolute thresholds.
Limiting the value range of utilization values can be confusing: If the
result thresholds are given in percent, then setting the lower threshold to
zero and the upper to 100 displays the full range of utilization values. If the
result thresholds are given as absolute values then a lower threshold of 100
and an upper threshold of 100 limit the color range to the areas where the
material resistance is sucient.
Load values adds the numerical values of loads or point masses to the
corresponding sysmbols.
NII prints the value of second order theory normal forces N II for all
element where it is not equal to zero. For the meaning of N II see 6.5.2.
98
all which means that the results of all load-cases are superimposed.
Dene load-factors by feeding a corresponding list of numbers into the LC-
Factor input-plug.
The Load-case Selection sets the load-case to be queried for the shell
results-components placed further downstream (e.g. Force Flow Lines on
Shells, Principal Stress Lines on Shells,...).
Figure 73: Simply supported beam under axial and transverse point-load: List of nodal
displacements: vectors with translations and rotations for each node and load case.
The NodeDisp component lists the displacements of each node for all
load cases. Two data-trees consisting of vectors make up its output. The
two rightmost dimensions correspond to Model/LoadCase. The data for
each node at the output plugs Trans and Rot consists of a vector which
contains the three translations or three rotations (see g. 73). The vectors
refer to the global coordinate system. Their units are meter and radiant
respectively. A positive rotation say about the global X-axis means that the
node rotates counter clockwise for someone who looks at the origin of the
coordinate system with the X-axis pointing towards him or her.
99
Figure 74: Approximation of principal strains in a simply supported slab simulated with
beam elements under a point-load. Irregularity of principal strain directions is due to the
irregularity of the element grid.
Karamba includes shell elements from which principal stress lines can be
retrieved (see sec. 6.6.11). In case of single layer grid shells made up
of beams the Approximate Principal Strains-component can be used to
determine the approximate principal strain directions of such structures (see
g. 74). It works on arbitrary sets of deformed points.
The calculation of principal strains is based on the assumption of a con-
tinua. When applied to nodes connected with linear elements the result can
thus only result in a qualitative picture therefore the term Approximate.
The Approximate Principal Strains-component expects as input a refer-
ence model (input-plug Model) and the same model in a deformed cong-
uration (input-plug def.Model). The deformed model can be the output
of a ModelView-component. Hand over a list of points to the input-plug
'Point' where principal strain directions shall be computed. For each point
in this list the following two steps are applied: First those three nodes of
the reference model that do not lie on a line and have minimum distance
to the given point are determined. Second the strains in the sides of the
thus found triangle determine the principal strain directions plane stress is
assumed. The conversion of rst (output-plug VT1) and second principal
strains (output-plug VT2) to vectors occurs in such a way that they align
with the average displacement of the triangle that denes the corresponding
strain-state. The size of the vectors emanating from VT1 and VT2 can
100
be scaled by providing a factor in the input-plug Scale.
The principal strains are tangents to the principal stress lines of a struc-
ture. Use e.g. Daniel Hambleton's SPM Vector Components (see http:
//www.grasshopper3d.com/group/spmvectorcomponents) to retrieve these lines
from the strain-vector-eld.
Figure 75: Beam under axial and transverse point-load: Reaction forces and moments for
both load cases.
101
Figure 76: Beam under axial and transverse point-load: Utilization of the cross sections
of the elements.
Utilization of Beams
Fig. 76 shows the utilization component for beams. The meaning of the
input-plugs nSamples, Elast, gammaM0 and gammaM1 exactly corre-
sponds to that of the Optimize Cross Section (see 6.5.10). The algorithm
for determining an elements utilization corresponds is the same as that under-
lying the cross section optimization procedure. Set the input-plug Details?
to true in order to get intermediate values of the utilization calculation at
the output-plug Details. For large structures the generation of the detailed
output may take some time.
Utilization numbers for beams rendered by this component (output-plug
Util) and the ModelView show dierences - especially for compressive axial
forces: The ModelView-component returns the ratio of stress to yield stress
as level of utilization, whereas the Utilization of Elements-component also
includes buckling. See for example the two utilization entries on the in g.
76: The second load case (i.e. number 1) is made up of an axial load
102
acting in the middle of the beam. As both ends are axially xed, one beam
is in tension, on in compression. The absolute value of the normal force in
both elements is the same. Yet the beam under compression has a utilization
of 0.26, the one under tension only 0.05. 1 means 100%.
The output-plugs sig-max and sig-min return the minimum and maxi-
mum stress in each beam.
In order to diagnose the reason why a specic beam shows over-utilization
the output-plugs Util-N, Util-Vy, Util-Vz, Util-Mt, Util-My and Util-
Mz return the contribution of each cross section component to the overall
utilization. When enabled via Details? the output-plug Details renders
a detailed account of intermediate values used for the calculation of the
element's utilization according to EN 1993-1-1.
Utilization of Shells
The utilization calculated for shells (see g. 77) is the ratio between yield
stress and Van Mises Stress in each element of the shell. The output-plug
Util lists the utilization of each element of the shell in the same order as
the mesh-faces are listed in the mesh which underlies the shell geometry.
In case you want to know how displacements change over the length of
a beam use the Beam Displacements-component (see g. 78). The
'LCase, 'maxL and 'NRes input-plugs work analogously to those of
the Section Forces-component (see section 6.6.10).
103
Figure 78: Beam consisting of two elements under axial and transverse point-load: List
of displacements along the axis: three components of translations and rotations for each
section and load case.
104
6.6.8. BeamView
(a) (b)
Figure 80: Rendered images of the beam. Left: Cross section-option enabled. Right:
Axial Stress enabled.
The color range of the results starts at the minimum value and stretches to
the maximum. You can dene individual color ranges for all result quantities
in the karamba.ini-le. A Legend-component lets you inspect the meaning
of the colors.
The mesh of the rendered image is available at the Mesh-output of the
BeamView-component. Two sliders control the mesh-size of the rendered
beams: First Length/Segment of ModelView determines the size of sec-
tions along the middle axis of the beams. Second Faces/Cross section
of BeamView controls the number of faces per cross-section. For ren-
dering circular hollow cross sections the number of Faces/Cross section is
multiplied by six in order to get a smooth visual result.
It is instructive to see which parts of a beam are under tension or com-
pression. Activate the Stress-checkbox in menu Render Settings in order
to display the stresses in longitudinal beam direction. Red (like brick) means
compression, blue (like steel) tension. In some models there may exist small
regions with high stresses with the rest of the structure having comparatively
105
Figure 81: Mesh of beams under dead weight with Render Color Margin set to 5%.
106
Figure 82: Moment My (green) about the local beam Y-Axis and shear force Vz (blue) in
local Z-direction.
107
Figure 83: Normal force N, shear force V and resultant moment M at a cross section
with local coordinate axes XYZ. Force and bending moment components are positive in the
direction of the local coordinate axes.
thus the second index from the right is zero. The rst index from the right
refers to the load case. If the input-plug LCase has a value other than the
default of -1 the output in N, M, and V is limited to the load-case
with the corresponding index. With BeamIds the result output may be
conned to a subset of the beams in the model.
Tensile normal forces come out positive, compressive normal forces have
negative sign. The resultant moment yields always positive values as it is
the length of the resultant moment vector in the plane of the cross section.
Figure 84: Beam under axial and transverse point-load: List of normal forces, shear
forces and moments for all elements and all load cases.
108
The input-plug NRes sets the number of equidistant points along the
beam axis where resultant forces are calculated in order to determine the
maximum values for output. In case of zero gravity and in the absence of
uniform beam loads the maximum values of M and N occur at the endpoints.
Otherwise these maxima may lie inside the elements. The default value of
NRes is three which means that values are checked at the beams end-points
and in the middle.
As M is always rendered positive the maximum along an element is un-
ambiguously given. Under gravity normal forces in a beam may change sign.
In such a case Karamba returns that N which gives the maximum absolute
value.
Fig. 84 shows the results of a simply supported beam consisting of two
elements under two load-cases: In load case zero both elements return zero
normal force because there acts no external axial load. The maximum mo-
ment of both elements is 2[kN m]. For a simply supported beam under a
mid-point transverse load the maximum moment occurs in the middle and
turns out to be M = F L/4 = 1[kN ] 8[m]/4 = 2[kN m].
The axial force of 3[kN ] in load case one ows to equal parts into both
axial supports. It causes tension (1.5[kN ]) in the left element and compression
(1.5[kN ]) in the right one.
109
load-case of a subset of the beams in the model.
Figure 85: Simply supported beam under axial and transverse point-load: List of normal
forces, shear forces and moments for all elements and all load cases along an the elements.
Figure 86: Cantilever consisting of triangular shell elements: Flow lines of force in hori-
zontal direction.
Force ow (FF) lines or load pathes (as they are also sometimes called)
illustrate the load distribution in structures [5]). There is a loose analogy
between those force ow (FF) lines and streamlines in hydromechanics: The
law of conservation of mass in hydromechanics is matched by the static
conditions of equilibrium in a specied direction. If there are two FF-lines
the resultant force between those in a predened direction stays constant.
110
Consider e.g. the cantilever in g. 86 for which the force ow in horizontal
direction is described by the red lines. At the supports the force ow lines
run nearly horizontal at the upper and lower side where the normal stresses
from the supports reach their maximum and thus dominate the resultant
force. They gradually curve down to the neutral axis where the shear stresses
constitute the only contribution to horizontal forces.
Aside from resulting in nice line drawings those force ow lines can be
practical as well [5]:
FF-lines form eddies in ineective (with respect to the given force di-
rection) parts of a structure or reverse their direction there.
FF-lines are not the same as principal stress lines because the latter lack
the property of constant force between adjacent lines.
The Shell Force Flow Lines-component lets you create force ow lines
in arbitrary points of shells (see g. 86). There exist seven input plugs:
Model: The model from which you want to create FF-lines. By default
the results of all load-cases get superimposed with factor 1. Use a
ModelView-component to select specic load-cases or to impose load-
factors other than 1.
Layer: In case of bending the stress state of shells and therefore the
FF-lines change over the cross section height. A value of -1 denotes
the lower 1 the upper shell surface and 0 the middle layer. The
default value in 0.
111
Source: Denes points on the shell where FF-lines shall originate. You
can feed points on or near the shell into this plug. It is also possible to
use lines that intersect the shell. In case of multiple intersections there
will be the same number of FF-lines.
dA: This parameter sets the accuracy with which the FF-lines get
determined: It is the maximum dierential angle between to adjacent
pieces of a FF-line. If this criteria results in pieces of length smaller
than Seg-L then they will be joined before sent to the output-plug
Line. By default this value is set to 5[deg].
theta: Here you can dene an angle between the FF-lines and those
lines output at the Line-output plug. The angle is in [deg] and defaults
to zero.
Isolines on Shells
The Isolines on Shells-component lets you do two thing. First draw con-
tour lines on shells that connect points of equal principal stresses, principal
moments, utilization, resultant displacements or shell thickness (see g. 87).
Second query results in arbitrary points of the shell.
The input-plugs Model, Layer and Seg-L have the same meaning
as for the Force Flow Lines on Shells-component (see sec. 6.6.11). In
terms of placing iso-lines on the structure the input Vals|Pts|Lines oers
the following options:
112
Figure 87: Lines of equal first principal stress on a cantilever.
Pts: Iso-lines will start at the closest projection of the given points on the
shell.
Lines: The intersection points of the given lines and the shells serve as
seeds of iso-lines
113
(Disp) or shell thickness (Thick).
The Lines-output data-structure corresponds to that of the Force Flow
Lines on Shells-component. Each number in the output-plug Value cor-
responds to one piece of isoline from the Lines'-output.
Figure 88: Principal stress lines: they are tangent to the first and second principal stress
direction. The coloring reflects the level of material utilization.
Principal stress (PS) lines are tangent to the principal stress directions (see
g. 88). In the case of a cantilever they either run parallel or at right angle
to the free boundaries. In the middle where normal stresses due to bending
vanish rst and second principal stress lines intersect at 90[deg].
The meaning of the input-plugs of the Principal Stress Lines on Shells-
component correspond to that of the Force Flow Lines on Shells-component
(see sec. 6.6.11 for details). On the output side Lines1 and Lines2 hold
the rst and second principal stress lines in data trees: the right-most di-
mension holds a list of lines that represent a part of a PS-line. There are
usually two parts per line that start o to either side of the starting point.
In case of more complicated topologies there can be more than two parts.
These parts populate the second dimension from the right.
114
Figure 89: Cantilever analyzed as shell structure: directions of second principal normal
forces at element centers.
This components provides the same results as the Princ. Stress 1-2 option
of the ShellView-component (see g. 90). The output-plug P renders
the positions of the elements centroids. V1 and V2 return corresponding
vectors for the rst and second principal stresses there. Thin out results
by setting Result Threshold of ModelView (needs to be upstream of the
data-ow) to a value of less than 100% . Like for isoline and force-ow
lines a specic load case or superimposition of load cases can be set via
115
Figure 90: Triangular mesh of shell elements and principal stress directions at their cen-
troids. Colors indicate the resultant displacement.
ModelView. By default all load-case results get added up using unit load
factors.
6.6.15. ShellView
116
Figure 91: Resultant displacement of a shell.
Cross section: shows the upper and lower shell surface and adds them
to the output at the Mesh-output plug.
Princ. Stress 1: visualizes the resultant value of the rst principal
stress in the plane of the shell.
Princ. Stress 2: displays the resultant value of the second principal
stress. direction would also be a correct result.
Layer of Results: sets the shell layer on which results are calculated.
A value of +1 corresponds to the upper surface, 1 to the lower.
117
6.7. Export
6.8. Utilities
118
Figure 92: Unified mesh generated from Breps using the MeshBreps-component; cre-
ated by Moritz Heimrath.
nodes determine its connectivity to the other parts of the structure. Thus
point-loads, supports, point-masses and the like can only be attached to
mesh vertices. When two meshes have common boundaries they need to
have identical vertices there in order to be structurally connected.
The MeshBreps-component ensures the connectedness of meshes gen-
erated from multiple breps. It also allows to dene points on those breps
where mesh vertices shall result. Fig. 92 shows the unied mesh based on
four breps and one predened point.
These input-plugs control mesh generation (see g. 93):
119
Figure 93: In- and output of the MeshBreps-component; created by Moritz Heimrath.
SStep and SIter: These two parameters let you control mesh relax-
ation. Triangular nite shell elements give better results when having
sides of approximately equal length. The smoothing algorithm tries
to improve the mesh in that direction: It moves each vertex towards
the center of gravity of those vertices it connects to. During mesh
relaxation vertices always remain on the brep they belong to.
Assume you have two lists of points: say FromPts and ToPts. Further
imagine you want to have a network that connects each point of the rst set
with a predened number of its nearest neighbors in the second set (or to
points in set two that lie within a given distance). In that case the Nearest
Neighbor-component will be the right choice. It outputs lists of connection
lines and a corresponding connectivity diagram. Be aware of the fact that
120
these lists will probably contain duplicate lines. But this is no big problem
(see section 6.8.4).
Figure 94: Random points in a unit volume connected to their nearest neighbor in a 5-D
setting
121
species points where nearest neighbor connections can start.
When you have a list of lines that you suspect of containing duplicate lines
then send it through this component and out comes a puried list of ones of
a kind. The input-plug LDist determines the limit distance for nodes to be
considered as identical. Lines of length less than LDist will be discarded.
Lines that overlap only partly can not be detected.
Does essentially the same as the component described above only with
points instead of lines.
This component takes a list of lines as input and mutually tests them for
intersection. Output-plug IP delivers a list of intersection points. LSS
returns all the line-segments including those which result from mutual inter-
section. The input-plug LTol sets the tolerance length in meter for nding
122
intersections between lines that do not actually intersect. LTol is also the
minimum length of segments at the ends of lines (e.g. at T-intersections).
Figure 95: The elements A and B of the original model are connected resulting in
the additional element C.
MaxELen [m]: you can set here a length limit for elements that shall
take part in the felting-process. All element longer than the value of
MaxELen will be ignored.
123
StartInd: Lets you limit the felting process to elements with an index
larger than or equal StartInd.
Beam Id: The beam identier provided her will be attributed to the
connections generated by the component. Cross sections, materials and
eccentricities previously dened for this beam identier apply to these.
In case no identier is given neighboring elements snap to the point in
the middle of their shortest connection line.
The felting algorithm proceeds from the rst element to the last, always
testing against all currently existing elements. Therefore newly generated
connection elements may be the source of further connections.
The algorithm operates directly on the Karamba-model and is therefore
quite fast.
6.8.9. Mapper
Figure 96: The Mapper-component applies mappings to a given model. In this case
there is one mapping that connects two beam-sets with elements whose position is con-
trolled by the parameters given to the mapper.
124
Fig. 96 shows a denition where a mapper applies a mapping called Sim-
ple Stitch on a given model which originally consists of two elements: A
and B. The input-plug Params receives two parameters. In the context of
the Simple Stitch-mapping these parameters give the relative position on
the two beam-sets A and B where a connection C shall be introduced.
So a mapping encapsulates an operation and the mapper activates it 10 .
Currently Karamba oers mappings which mainly deal with connecting
existing beam-sets by variants of an operation termed stitching. The notion
comes from the analogy to joining together pieces of cloth. These mappings
will be explained further below. They are rooted in the research project
Algorithmic Generation of Complex Space Frames which was conducted at
the University of Applied Arts Vienna.
Figure 97: Definition for optimizing the shape of a simply supported beam under mid-
span single load.
Fig. 97 shows a denition where the rst 30 eigen-forms (the thin red
lines in 98) of a simply supported beam serve as the shape-dimensions of
125
the design space.
Galapagos is used to determine the position in that design-space which
results in minimum deection under a single load at mid-span. It is clear
(think of a hanging model) that the optimum shape has a sharp kink under
the load and is otherwise straight.
Fig. 98 shows the result of the optimization run which resembles the
ideal shape to a large degree. A sharper bend underneath the load could be
achieved by including more shape-dimensions in the design space.
Figure 98: Result of shape optimization (thick red line) for a simply supported beam
under mid-span single load using the first 30 eigen-forms the thin red lines as axes of
the design space.
Figure 99: Proximity Stitch-mapping with the same set-up as in fig. 96 but ten ran-
dom connections instead of two.
126
three dierent connection types. Select the concrete type via the drop-down
list at the bottom of the component.
The Proximity Stitch is a tamed Simple Stitch (see sec. 6.8.12):
In case of n beam-sets a tuple of n parameters describes one connection.
All parameters are in the range [0, 1]. The rst value p1 sets the relative
location l1 on the rst beam-set. All following parameters pn relate to the
restricted interval [ln1 minOf f set, ln1 + maxOf f set]. Here minOset
and maxOset can be dened by the user. The narrower the interval they
dene, the more regular the structure.
Figure 100: Simple Stitch-mapping with the same set-up as in fig. 96 but fifteen ran-
dom connections instead of two.
127
parameters.
This simple-variant of stitches is also the most versatile one: it gives
you great freedom in generating connection patterns by dening the way
how a set of parameters is mapped to the set of values that are fed into the
Simple Stitch. Sections 6.8.11 and 6.8.13 deal with variants of the Simple
Stitch which are limiting the scope of possible patters. This approach leads
to faster convergence in case of optimization with e.g. Galapagos and spares
you programming eort but lacks the full exibility of the Simple Stitch.
Figure 101: Stacked Stitch-mapping with the same set-up as in fig. 96 but fifteen
random connections instead of two.
The components User Iso-Lines and User Stream-Lines let you draw iso-
lines and stream-lines on arbitrary meshes by dening values and vectors at
their vertices.
128
Figure 102: User defined Iso-lines (red) and stream-lines (green) on a rectangular shell
patch.
7. Trouble shooting
Do not panic in case some Karamba-components turn red upon feeding them
with your model. Read the error message. It usually contains information
that helps you further. A very ecient technique for tracking errors is to
divide and conquer:
129
4. See whether you can nd an error in it.
5. If not take that part as your new model and proceed to point 1.
2. In case that more than one item is plugged into an input, check the
incoming data via a panel component.
130
Turn trusses into beams by activating their bending-stiness. Be
aware of the fact that a node has to be xed by at least three
trusses that do not lie in one plane.
7.2. fem.karambaPINVOKE-exception
reinstall Karamba.
Make sure that you installed a Karamba version with the correct bitness:
Karamba (64bit) can be used together with Rhinoceros 5 (64bit);
Karamba (32bit) with Rhinoceros 5. Be aware of the fact that both
versions of Rhino get installed.
131
Start Grasshopper
Restart Rhino
Upon installing Grasshopper some les of the Karamba package may have
been erased. Try to reinstall Karamba.
7.5. Karamba does not appear nor any of its components seem to
be installed
132
7.6. Karamba seems to get stuck while calculating a model
Check whether you disabled the correct degrees of freedom in the Condi-
tions section of the PreDisp-component.
Check whether your Rhino background color is black. Some types of tags
are printed in black and do not show on a black canvas. You can change the
text color in the 'karamba.ini-le (see section 3).
133
7.12. Icons in Karamba-toolbar do not show up
On some components the order of input-plugs changed over time (e.g. the
Assemble-component). They will turn red when loaded and the runtime error
message will state that one object can not be cast to some other object.
In this case replace the old component with a new one and reattach the
input-plugs accordingly.
Make sure that the beams you intend to optimize belong to the same family
as those you want them to be selected from.
134
has no chance to converge and thus returns seemingly wrong results. Always
check the Info-output of the component for information on the solution
procedure.
In case you encounter any further problems please do not hesitate to con-
tact us at [email protected] or via the Karamba group at http://www.
grasshopper3d.com/group/karamba.
135
A. Background information
For composite materials like in the case of rods made from glass ber
and epoxy it is necessary to defer a mean value for E using material tests.
Karamba expects the input for E to be in kilo Newton per square centimeter
[kN/cm2 ].
If one stretches a piece of material it not only gets longer but also thinner:
it contracts laterally. In case of steel for example lateral strain amounts to
30% of the longitudinal strain. In case of beams with a large ratio of cross
section height to span this eect inuences the displacement response. In
common beam structures however this eect is of minor importance. The
shear modulus G describes material behavior in this respect.
136
calculating deections of structures the assumption of f = 10N is accurate
enough. Table 3 gives specic weights of a number of typical building mate-
rials. The weight of materials only takes eect if gravity is added to a load
case (see section 6.4.1).
=E
E stands for Young's Modulus which depends on the material and depicts its
stiness. Hooke's law expresses the fact that the more you deform something
the more force you have to apply.
137
type of material [kN/m3 ]
loads
type [kN/m2 ]
138
Figure 103: Simply supported beam.
139
A.4. Hints on Reducing Computation Time
Karamba spends most of its time solving for the deections of a model.
The time needed depends on the number of degrees of freedom n of the
statical system and how many connections exist between the nodes. In
the theoretical case that each node is connected to all others computation-
time grows with n3 . If each node is connected to nneigh others and the
overall structure has a main axis along which it is oriented (i.e. there are
no connections between distant nodes) then computational eort increases
approximately with 0.5 n n2neigh . Karamba makes use of multiple processors
so having more than one saves time. Using trusses instead of beams more
than halves computation time. When doing optimization with Galapagos
the continuous display updates slow down things considerably. For better
performance disable the preview of all components or minimize the Rhino
window.
140
The Buckling Modes-component calculates the factor with which the
normal forces N II need to be multiplied in order to cause structural instability.
The buckling factors are the eigenvalues of the general Eigenvalue problem
x +2 CG ~
C ~ x = 0. Here C is the elastic stiness matrix and CG the geometric
e e e e
stiness matrix. The latter captures the inuence of normal forces N II on
a structures deformation response.
Karamba does cross section design by going through the list of cross sections
in a group of cross sections called a family. It starts at the rst entry and
proceeds to the next until a cross section is found that is sucient for the
given cross section forces.
The calculation of the utilization of a beam is done using the procedure
described in EN 1993-1-1 i.e. Eurocode (EC) 3. It takes account of buckling
and lateral torsional buckling. The superposition of dierent cross section
forces works according to procedure 2 (see annex B of EC 3). The values
Cmy , Cmz and CmLT are limited to 0.9. The Utilization components Details-
output returns a listing of intermediate values from the calculation according
to EC3 (see section 6.6.6).
References
141
[4] Rubin H. Schneider K.-J. Baustatik Theorie I. und II. Ordnung. Werner-
Verlag, 1996.
142