# 3.5.10: BESO for Shells

An in-depth description of the BESO for shells algorithm used in Karamba3D can be found in . Fig. 3.5.10.1 shows an example which starts off from a rectangular wall which supports two point-loads at each of its upper corners. The result of the BESO procedure is the X-shaped structure shown on the left side. Fig. 3.5.10.1: BESO for a rectangular plate under two corner loads
These are the main parameters that control the optimization process:
 ​ " "Model" Model to be optimized "ElemIds" List of identifiers of shells that take part in the optimization. In case of an empty list (the default) all shells are included. "LCases" List of load cases to be considered. Zero is the index of the first load case. Considering the total effect of several load cases amounts to adding up their individual influences 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 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. "MaxIter" Maximum number of iterations
Under the submenu “Settings” these additional options can be used to further customize the optimization procedure:
 ​ ​ "ER" Is short for evolutionary ratio and defines the ratio between the volumes $V_i$ and $V_{i+1}$ of the optimized structure in two consecutive steps: $V_{i+1} = V{i} \cdot (1\pm ER)$. The sign of “ER” depends on whether elements shall be added or removed. In case that $ER<0$ – which is the default –$ER$is set automatically: $ER = (1-TargetRatio)/MaxIter + AR_{max}/2$. In case that “ER” is too small, the target mass of the optimized structure can not be reached within “MaxIter” steps. "ARmax" The ratio between maximum number of elements to be added per step and all shell elements. "Nhist" Number of iterations between those steps which are used for calculating the convergence criteria. "Conv" Relative change of the mass between two iterations $N_{hist}$ cycles apart below which convergence is assumed. "Rmin" In order to avoid the formation of checkerboard patterns a filter scheme is used for calculating the fitness of individual elements (see , section 3.3.2). $R_{min}$ defines the radius of influence in meters for determining the element sensitivity. It is thus important to choose this value according to the mean element size. If $R_{min} <0$ (the default) then $R_{min}$ is set equal to the characteristic element length which is calculated as $(totalArea/numberOfElements)^{0.5} \cdot 2$. "Rexp" Determines how the strain energy at nodes within the distance $R_{min}$ of the element center is weighted for calculating an elements sensitivity. The weight is determined as $w =(R_{ij}/\sum R_{ij})^{R_{exp}}$. Here $R_{ij}=R_{min}-R$ with $R$ being the distance between a sample node and the center of the element. $\sum R_{ij}$ is the sum of the center distances of all nodes closer than $R_{min}$ 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 “KillThick” a value other than the default 0.00001 m can be selected.
The output-plugs of the “BESOShell”-component return the following data:
 ​ ​ "Model" Model which results from the BESO optimization. "ModelHist" List of intermediate models – one for each iteration step of the BESO procedure. "CHist" History of the volume weighted compliance of the structure which drives the BESO procedure. When fed into a “Quick Graph” component one can check whether the BESO procedure converged: at the end the chart should be horizontal. If that is not the case try a smaller “ER”-value. "VHist" List of values which chart the development of the volume of the shells to be optimized. "Info" Returns information regarding the solution process in case something goes wrong.