3.6.8: Optimize Cross Section
Last updated
Last updated
The "Optimize Cross Section" component is designed for the automated selection of optimal cross sections for beams and shells, taking into consideration the load-bearing capacity of the cross sections and, optionally, the maximum allowable deflection of the structure.
In Figure 3.6.8.1, no displacement limit is specified, allowing the "OptiCroSec" component to determine the cross section for each element to ensure adequate load-bearing capacity across all specified load cases and combinations, inputted via the "LCasesUtil" plug. Absence of an entry in "LCasesUtil" defaults to all load cases and combinations included in the model. A negative value for the target maximum utilization can be input to circumvent design toward strength limits. The "MaxUtil" input defaults to "1.0" meaning design for full utilization.
The Karamba3D software executes the following steps for limit load design:
Calculate sectional forces at "nSamples" points along all beams using the initial cross sections.
For each element or predefined set of elements, the algorithm selects the first sufficient cross section from the related cross section family based on the utilization value specified at the "MaxUtil" input plug.
If no modifications are required after step two, or if the maximum number of design iterations ("Util Iter") has been reached, the algorithm stops. Otherwise, it repeats from step one with the newly selected cross sections.
The procedure is iterative in statically indeterminate structures due to the dependency of sectional forces on member stiffness, which results from cross-sectional dimensions and material properties.
Figure 3.6.8.2 illustrates an optimization scenario for a cantilever modeled with shell elements, resulting in thicker shell elements at the critical edges. The "CroSecs" input of the "OptiCroSec" component contains a constant family of shell cross sections.
For shell elements, mechanical utilization is calculated by comparing the maximum stress at a point to the material strength, following the selected strength hypothesis (see section 3.5.1). For steel, the Von Mises stress criterion is applicable. The optimization process for shells follows the same steps as for beams, with the algorithm ceasing once a cross section meets the set utilization threshold, which defaults to "1" (100%).
Should the largest cross section in a family prove insufficient, the "OptiCroSec" component will issue a warning, as shown in fig. 3.6.8.2. The "Info" output details the reason for inadequacy concerning either maximum displacement or utilization targets. The output plugs "MaxDispView" and "MaxUtilView" respectively provide indices of elements failing the serviceability limit state (SLS) and ultimate limit state (ULS) criteria. These indices can be fed directly into the "ModelView" component's "View" input plug to highlight problem areas (see fig. 3.6.8.3).
For scenarios where overall displacement must be restricted, the "MaxDisp" input-plug initiates iterative design modifications before considering the ultimate limit state. This procedure, referenced in [16], encompasses the following steps:
Determination of Maximum displacements: The maximum displacement for the load cases and load case combinations given via "LCasesDisp" are determined. If nothing is given there the load cases and load case combinations of "LCasesUtil" are used. The displacements retrieved encompass all nodal displacements and beam displacements at the element start-, mid- and end-positions.
Adaptation Using Virtual Load Cases: For the load case exhibiting the maximum displacement, a virtual load case is internally generated and calculated. The corresponding virtual energy produced by the maximum displacement load case with respect to all virtual load cases guides the resizing of element cross sections to meet the constraints defined in the "MaxDisp" input, which can interpret three types of input:
Numeric Value: Defines a displacement limit which compares to the absolute values of the structure's displacement vectors.
Vectors: These specify directional displacement limits, with the vector's length defining the maximum allowable displacement.
Planes: These restrict in-plane displacements, with the plane's distance from the global origin setting the displacement limit. This is useful for controlling horizontal movements in structures like floor slabs while ignoring vertical displacements.
Figure 3.6.8.3 illustrates a frame under combined vertical and horizontal loads, where the horizontal displacement limit is set at 0.03 cm, and the vertical downward movement is limited to 0.29 cm. When multiple displacement criteria are specified, Karamba3D attempts to satisfy all conditions concurrently.
Cross Section Adjustment: The resizing of cross sections to achieve displacement limits is executed within a predefined number of iterations specified by "Disp Iter".
Karamba3D supports two methodologies for integrating safety levels against maximum displacement and load-bearing limits:
Accurate Approach: Implement load superposition rules as defined by design codes, applying different safety factors for SLS and ULS conditions, configured via the "LCasesDisp" and "LCasesUtil" inputs respectively.
There are cases when the above described procedure fails to converge. This concerns systems where the position of the maximum displacement constantly changes: Imagine a system which consists of a series of identical parts (e.g. frames) with identical loads: The first iteration will deal with the maximum displacement at the first subsystem, the second iteration with the maximum displacement of the second and so on. When the number of subsystems is larger than the maximum number of iterations some will not be optimized. When this happens alternative methods as described in subsequent sections should be employed.
The principle of virtual forces, utilized to calculate structural displacements under specified loads, begins by applying a unit-load or set of unit-loads in the desired direction of displacement measurement. The term "virtual" denotes that the applied forces are conceptual and are assumed to be negligible in magnitude to avoid invoking second-order theory effects or large displacement phenomena. The numerical value of virtual loads, however need not be small and is typically standardized at one for simplicity.
Figure 3.6.8.4 demonstrates the application of this principle on a cantilever beam subjected to a point-load at its tip. To limit the downward tip displacement, a virtual load of "1" kilonewton pointing downwards is applied. Displacement limitation is enforced by setting the "LCasesDisp" input with the actual load cases to consider and disabling cross section design for strength by inputting "-" as the load case name, which is unrecognized in the model. The "MaxWork" input allows setting a target for the maximum virtual work per virtual load case, measured in kilonewton-centimeters; a value of "1" restricts the movement to 1 cm. The output from "MaxDisp" typically indicates a conservative displacement limitation, especially if the largest cross section sizes of the applied families are adequate. Additionally, instead of translational loads, moments can be applied to control rotational displacements at specific structural points.
The iterative process for optimizing cross sections may not always guarantee convergence. Verification of results can be achieved using the "Utilization of Elements" component, which evaluates elements per Eurocode 3, accounting for the entire cross section's load-bearing capacity. The "Stress/Strength Ratio" output from the "ModelView" component indicates the stress-material strength ratio at any cross-sectional point, excluding considerations like buckling under compression.
Regarding ultimate limit state considerations, the lower-bound theorem of plasticity ensures that the structure will suffice under given loads at any iteration, even though some elements might exhibit over-utilization, assuming the material exhibits sufficient plasticity, such as steel. As the number of iterations increases, the structural system tends to become more statically determinate.
The profile selection procedure assumes that the cross sections of a family are ordered: starting with your most favorite and descending to the least desired cross section. In the cross section table "CrossSectionValues.bin" that comes with Karamba3D all families are ranked according to their height. The cross section with the smallest height comes first, 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 section 3.3.11 for how to switch between minimum height and minimum weight design. Ordering the profiles by area may lead to structures where the cross section heights vary significantly from one beam to the next.
The design procedure takes account of normal force, biaxial bending, torsion and shear force. For more details see section A.2.6 and the master thesis of Jukka Mäenpää [9]. It is possible to switch off the influence of buckling for single members or set user defined values for the buckling length (see section 3.1.10: Modify Element).
The design procedure applied in Karamba3D takes lateral torsional buckling into account. An elements lateral torsional buckling length is calculated in the same way as for conventional buckling. The buckling length for lateral torsional buckling can be set manually via the property "BklLenLT" of the "Modify Beam"-component.
In the course of cross section optimization Karamba3D checks the cross sections for local buckling and issues a warning if necessary. The check for local buckling uses the classification of cross sections into classes 1 to 4 according to EN 1993-1-1. Class 4 cross sections are susceptible to local buckling.
The "OptiCroSec" component is equipped with several input plugs to facilitate the optimization of structural cross sections, detailed as follows:
Additional configurations accessible through the "Settings" button include:
The output of the "OptiCroSec" component provides essential data regarding the optimized structure:
The aim of the design procedure applied in Karamba3D is to render plausible cross section choices. Be aware that it builds upon assumptions like the correct determination of buckling lengths.
Additional examples can be found in the Grasshopper main tab under Karamba3D > Help > Examples > Local Examples > Algorithms > Optimize Cross Section.
Simplified approach: 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. Thus one way of designing structures in Karamba3D is to limit material utilization to under characteristic loads (these are those usually given in the building codes) and use the resulting displacements directly for usability design. This approach eliminates the need for separate load combinations for ULS and SLS, directly using the resulting displacements for usability design.
In order to check whether a given beam cross section is sufficient, Karamba3D applies a procedure for steel beams according to Eurocode 3 (EN 1993-1-1) (see [5] for details). The interaction values for the cross section forces , and so on get calculated according to EN 1993-1-1 appendix B. The values and are limited to a minimum of 0.9 by default. This means that sideways sway initiates buckling which is on the safe side in case of non-sway frames. When the input-plug "SwayFrame" is set to 'False' the limit of 0.9 does not apply.
The adverse effect of compressive normal forces in a beam can be taken into account globally (see section 3.6.5) or locally on the level of individual members. The procedure applied in Karamba3D 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 of an element. For this the following simplification -- which is not always on the safe side -- is applied: Starting from the endpoints of an element, proceeding to its neighbors, the first 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 members of a larger part 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 3.6.5). In case of a free end the buckling length is doubled. Compressive normal forces in slender beams reduce 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.
During the optimization of cross sections normal forcesare updated according to the setting made for the respective load cases and load case combinations.
Input Plug | Description |
---|---|
Input Plug | Description |
---|---|
Output Plug | Description |
---|---|
"Model"
Specifies the structure to be optimized.
"ElemIds"
Identifies specific elements for optimization. If unspecified, the entire model undergoes optimization.
"GroupIds"
Lists identifiers for groups of elements that should have uniform cross sections, definable via element set names or regular expressions.
"CroSecs"
Contains an ordered list of cross section families, from preferred to least preferred, identified by their "family" property.
"MaxUtil"
Sets the target utilization value for elements, where 1.0 represents full utilization. Values less than 1.0 may be used to reserve structural capacity for uncertain early design stages or when operating under characteristic loads - then this value should be less than 0.7.
"LCasesUtil"
Specifies load cases and combinations for assessing load-bearing capacity, defining the ultimate limit state. If unspecified, all model cases are considered. In case the load case of given name does not exist no strength design takes place.
"MaxDisp"
Limits maximum structural deflections. Accepts numerical values, vectors, and planes, with each input being validated against every applicable displacement load case. When working with design loads keep in mind that those are roughly a factor of “1.4” above the level to be considered for usability.
"LCasesDisp"
Names load cases and combinations that constrain maximum nodal and element displacements (at start, middle, end), defining the serviceability limit state. Defaults to "LCasesUtil" settings if unspecified.
"MaxWork"
Sets the maximum virtual work for each virtual load case relative to actual cases.
"LCasesVirt"
List of names of load cases and load case combinations specifying virtual loads.
"Util Iter"
Defines the maximum number of iterations for achieving sufficient load-bearing capacity in the ultimate limit state. The default value is five.
"Disp Iter"
Specifies the maximum iterations for meeting displacement criteria. The design iterations for maximum displacement come before those for load bearing capacity.
"Disp Inc"
Determines the number of stiffness matrix updates per displacement iteration to accurately model internal force redistribution due to evolving cross-section stiffness. Setting up the stiffness matrix and solving it are computationally expensive. The higher the number of updates the more accurately one models the redistribution of internal forces due to changing cross seciton stiffnesses. The default value is 2.
"Disp Tol"
Establishes a tolerance factor for achieving displacement targets from below. This value multiplied with the specified maximum displacement is the allowable difference between target- and actual displacement value.
"NSamples"
Specifies the number of points along beams for utilization assessments, defaulting to three.
"Elast"
Toggles between elastic and plastic cross-section design. 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 stressof 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 Karamba3D assumes linear elastic material behavior.
"gammaM0"
Material safety factor according to EN 1993-1-1 in case that failure is not initiated by buckling. This applies in case of tensile normal force or zero buckling length. Its default value is 1.0. In some European countries this factor lies above 1.0. The default value of gammaM0 can be set in the karamba.ini-file.
"gammaM1"
Material safety factor according to EN 1993-1-1 in case that buckling initiates failure. This applies in case of compressive normal force and non-zero buckling length. The default value again lies at 1.1 - may be specified differently in your national application document of EN 1993-1-1. The default value of gammaM1 can be set in the karamba.ini-file. Attention: in Karamba3D 1.3.3 the default value of gammaM1 was 1.0!
"SwayFrame"
Indicates susceptibility to sideways sway buckling, set to 'True' by default to ensure conservative design outcomes.
"Model"
Returnd the structure with optimized cross sections
"Info"
Reports any issues encountered during the optimization process.
"Mass"
Indicates the total mass of the optimized structure.
"MaxDisp"
Shows the maximum displacement after the final design iteration.
"DEnergy"
Returns the internal energy of the structure post-optimization.
"MaxUtilView"
Lists element indices where the maximum cross section within their family was insufficient for utilization needs. Can be directly plugged into the "View"-input of the "ModelView"-component.
"MaxDispView"
Lists element indices failing to meet displacement criteria during iterations, useful for detailed evaluations in the "ModelView" component. Can be directly plugged into the "View"-input of the "ModelView"-component.