The first chapter introduces the basic terms for structural optimization. In addition, it introduces the mathematical notation used throughout this lecture and repeats some basic concepts of tensor algebra and tensor analysis.
Learning Objectives
After studying this chapter and finishing the exercise, you should be
able to
distinguish three types of structural optimization problems.
perform tensor algebra computations such as inner products, cross products, outer products, dyadic products, and tensor contractions.
apply differential operators such as divergence and gradient on tensor fields.
Following Gordon (Gordon 2003), a structure is "any assemblage of materials which is intended to sustain loads". The term optimization means making things best. Thus, structural optimization is the subject of making an assemblage of materials sustain loads in the best way (Christensen and Klarbring 2008).
The term best depends on what we define to be the objective function of our design problem. It could be the weight to obtain light structures, it could be the cost to obtain cheap structures, or it could be CO2 emissions to obtain sustainable structures. Usually the optimization is subject to some constraints, for example a certain load that has to be endured without permanent deformation. The variables that we can change to optimize the objective function are called design variables. Depending on the choice of design variables, we generally divide three types of structural optimization problems:
The design variables describe some technical parameters of a structure, e.g. wall thickness, diameters of holes, or the cross section of beams. We seek the optimal size of these parameters in he optimization task.
The design variables describe the contour or boundary of a part. We seek the optimal shape of the part boundaries in the optimization task.
The design variables describe the presence of material in a design space. We seek the optimal distribution of material within that design space.
Before we can start optimizing structures, we need to recapitulate some basic tensor math, continuum mechanics and fundamentals of optimization, though.
During this lecture we will deal with spaces, scalars, vectors, tensors, matrices and other mathematical objects. To support understanding of which objects are used in each context, we introduce some notation rules.
A scalar variable, such as a temperature, has no direction and is completely described by a single real value. Scalars are denoted as variables in regular font, for example \[a \in \mathcal{R}.\]
Most objects have some sort of direction associated to it (e.g. a velocity or a force). They are defined in a vector space \(\mathcal{R}^d\), where \(d\) is the dimension of the vector space. A vector is an element of the vector space that fulfills so-called vector axioms and is denoted in bold font, e.g. \[\textbf{a} \in \mathcal{R}^d.\] In order to describe components of a vector, it is convenient to define a basis. A basis is given by a subset of vectors \({\mathbf{e}_1,\mathbf{e}_2,...,\mathbf{e}_d}\) that are linearly independent and span the entire vector space. More specifically, we use an orthonormal basis (ONB) that is spanned by normalized and orthogonal vectors \(\{\mathbf{e}_i\}\). The orthogonality is expressed as \[\label{eq:orthogonality} \mathbf{e}_i \cdot \mathbf{e}_j = \delta_{ij}\] with the Kronecker symbol \[\delta_{ij} = \begin{cases} 1 & \text{if } i=j \\ 0 & \text{else}. \end{cases}\]
Example: Standard basis in 3D Euclidean
space
The standard basis for the three-dimensional (\(d=3\)) Euclidean space is given by the set
of three vectors \[\{\mathbf{e}_1=(1,0,0),
\mathbf{e}_2=(0,1,0), \mathbf{e}_3=(0,0,1)\}.\]
With a basis, we can define a vector in terms of coordinates \((a_1, a_2, ..., a_d)\) as \[\label{eq:coordinates} \mathbf{a} = \sum_i a_i \mathbf{e}_i.\] It is important to note that these coordinates depend on the basis. The same vector \(\mathbf{a}\) may be expressed with coordinates \((a_1, a_2, ..., a_d)\) for a basis \(\{\mathbf{e}_i\}\) and \((\tilde{a}_1, \tilde{a}_2, ..., \tilde{a}_d)\) for a basis \(\{\tilde{\mathbf{e}}_i\}\).
We define the inner product or scalar product of two vectors \(\mathbf{a}, \mathbf{b} \in \mathcal{R}^d \rightarrow \mathcal{R}\) as \[\mathbf{a} \cdot \mathbf{b} = \sum_i a_i \mathbf{e}_i \cdot \sum_j b_j \mathbf{e}_j = \sum_{i,j} a_i b_j \overbracket{(\mathbf{e}_i \cdot \mathbf{e}_j)}^{\delta_{ij}} = \sum_{i,j} a_i b_j \delta_{ij} = \sum_{i} a_i b_i\] using Equation [eq:orthogonality]. There are two remarks at this point: First, the result of the scalar product between two vectors is a scalar as it is just a summation of coordinates. Second, the Kronecker symbol can be interpreted as an operator that replaces an index.
Example: Calculations with the Kronecker
symbol
These are a couple of examples for Kronecker computations: \[\begin{aligned}
\delta_{11} &= 1\\
a \delta_{33} &= a \\
\sum_i \delta_{ii} &= d
\end{aligned}\]
The cross product between two vectors results in a vector perpendicular to the first two vectors and a magnitude equal to the area spanned by the two vectors. It can be denoted for two vectors \(\mathbf{a},\mathbf{b} \in \mathcal{R}^3 \rightarrow \mathcal{R}^3\) as \[\mathbf{a} \times \mathbf{b} = \sum_{i,j,k} \epsilon_{ijk} a_j b_k \mathbf{e}_i\] with the permutation symbol \[\epsilon_{ijk} = \begin{cases} +1 & \text{if } (ijk) \text{ is an even permutation of } (1,2,3)\\ -1 & \text{if } (ijk) \text{ is an odd permutation of } (1,2,3)\\ 0 & \text{else}. \end{cases}\]
Vectors are not sufficient to describe all directional objects needed in this lecture. A stress, for example, results in a traction vector that also depends on the cutting plane defined by its normal direction. In a sense, the stress tensor combines two directions and we learn in basic mechanics courses that one index is attributed to the direction and one to the plane. We can also think about the stress tensor as a mapping from one vector to another vector or as a multi-dimensional array containing the values of \(S_{ij}\).
Such tensor objects can be constructed by the outer product, tensor product, or dyadic product of two vectors \(\mathbf{a}, \mathbf{b} \in \mathcal{R}^d \rightarrow \mathcal{R}^{d \times d}\) as \[\label{eq:tensorproduct} \mathbf{a} \otimes \mathbf{b} = \sum_{i,j} a_i b_j \mathbf{e}_i \otimes \mathbf{e}_j,\] where the term \(\mathbf{e}_i \otimes \mathbf{e}_j\) may be interpreted as a new basis for the tensor. We may also specify such a tensor \(\mathbf{A} \in \mathcal{R}^{d \times d}\) directly as \[\mathbf{A} = \sum_{i,j} A_{ij} \mathbf{e}_i \otimes \mathbf{e}_j ,\] where bold variables are used for such tensors. The entries of these tensors may be interpreted as two-dimensional arrays \[\mathbf{a} \otimes \mathbf{b} = \begin{pmatrix} a_1 b_1 & a_1 b_2 & \dots & a_1 b_d \\ a_2 b_1 & a_2 b_2 & \dots & a_2 b_d \\ \dots & \dots & \dots & \dots \\ a_d b_1 & a_d b_2 & \dots & a_d b_d \\ \end{pmatrix}_{\{\mathbf{e}_i\}}\] and \[\mathbf{A} = \begin{pmatrix} A_{11} & A_{12} & \dots & A_{1d} \\ A_{21} & A_{22} & \dots & A_{2d} \\ \dots & \dots & \dots & \dots \\ A_{d1} & A_{d2} & \dots & A_{dd} \\ \end{pmatrix}_{\{\mathbf{e}_i\}}\] for this specific ONB. Again, note that these entries could be different in a different basis.
In fact, we can interpret some objects of the previous chapter as tensors. A vector is a first-order tensor \[\mathbf{a} = \sum_{i} a_i \mathbf{e}_i = \begin{pmatrix} a_1 \\ a_2 \\ \dots \\ a_d \end{pmatrix}_{\{\mathbf{e}_i\}}\] and the Kronecker symbol can be used to define a second-order unit tensor \[\pmb{I} = \sum_{i,j} \delta_{ij} \mathbf{e}_i \otimes \mathbf{e}_j = \begin{pmatrix} 1 & 0 & \dots & 0 \\ 0 & 1 & \dots & 0 \\ \dots & \dots & \dots & \dots \\ 0 & 0 & \dots & 1 \\ \end{pmatrix}_{\{\mathbf{e}_i\}}\] using a bold capital letter for the second-order tensor, and the permutation symbol is a third-order tensor with a three-dimensional array specifying its entries: \[\pmb{\epsilon} = \sum_{i,j,k} \epsilon_{ijk} \mathbf{e}_i \otimes \mathbf{e}_j \otimes \mathbf{e}_k\]
We may extend this concept further to higher orders. A stiffness tensor for example maps a second-order strain tensor to a second-order stress tensor and thus it is a fourth-order tensor, which we denote with double-stroke capital letters. More general, a fourth order tensor may be obtained by an outer product of two second-order tensors \(\mathbf{A},\mathbf{B}\in \mathcal{R}^{d \times d} \rightarrow \mathcal{R}^{d \times d \times d \times d}\) as \[\mathbb{C} = \mathbf{A} \otimes \mathbf{B} = \sum_{i,j,k,l} A_{ij}B_{kl} \mathbf{e}_i \otimes \mathbf{e}_j \otimes \mathbf{e}_k \otimes \mathbf{e}_l.\]
We define the tensor contraction of two second-order tensors \(\mathbf{A},\mathbf{B} \in \mathcal{R}^{d \times d} \rightarrow \mathcal{R}^{d \times d}\): \[\begin{aligned} \mathbf{A} \cdot \mathbf{B} &= \sum_{i,j} A_{ij} \mathbf{e}_i \otimes \mathbf{e}_j \cdot \sum_{k,l}B_{kl} \mathbf{e}_k \otimes \mathbf{e}_l \\ &= \sum_{i,j,k,l} A_{ij} B_{kl} (\mathbf{e}_i \otimes \overbracket{\mathbf{e}_j) \cdot (\mathbf{e}_k}^{\delta_{jk}} \otimes \mathbf{e}_l) \\ &= \sum_{i,j,k,l} A_{ij} B_{kl} (\overbracket{\mathbf{e}_j \cdot \mathbf{e}_k}^{\delta_{jk}}) \mathbf{e}_i \otimes \mathbf{e}_l \\ &= \sum_{i,j,k,l} A_{ij}B_{kl} \delta_{jk} \mathbf{e}_i \otimes \mathbf{e}_l \\ &= \sum_{i,j,l} A_{ij}B_{jl} \mathbf{e}_i \otimes \mathbf{e}_l \end{aligned}\] Essentially, this contracts the inner dimensions. This is an exemplary summary of such contractions:
Example: Tensor contraction
Contraction of two first order tensors \(\mathbf{a},\mathbf{b} \in \mathcal{R}^d
\rightarrow \mathcal{R}\): \[\mathbf{a} \cdot \mathbf{b} = \sum_i a_i
b_i\] Contraction of two second-order tensors \(\mathbf{A},\mathbf{B} \in \mathcal{R}^{d \times d}
\rightarrow \cdot \mathcal{R}^{d \times d}\): \[\mathbf{A} \cdot \mathbf{B} = \sum_{i,j,k} A_{ij}
B_{jk} \mathbf{e}_i \otimes \mathbf{e}_k\] Contraction of a
second-order tensor \(\mathbf{A} \in
\mathcal{R}^{d \times d}\) and a first-order tensor \(\mathbf{b} \in \mathcal{R}^d \rightarrow
\mathcal{R}^d\): \[\mathbf{A} \cdot
\mathbf{b} = \sum_{i,j} A_{ij} b_j \mathbf{e}_i\]
We can apply the inner product multiple times. For example, we can define the double contraction of two second-order tensors \(\mathbf{A},\mathbf{B} \in \mathcal{R}^{d \times d} \rightarrow \mathcal{R}\): \[\begin{aligned} \mathbf{A} : \mathbf{B} &= \sum_{i,j} A_{ij} \mathbf{e}_i \otimes \mathbf{e}_j : \sum_{k,l} B_{kl} \mathbf{e}_k \otimes \mathbf{e}_l \\ &= \sum_{i,j,k,l} A_{ij}B_{kl} (\underbracket{\mathbf{e}_i \otimes \overbracket{\mathbf{e}_j) : (\mathbf{e}_k}^{\delta_{jk}} \otimes \mathbf{e}_l}_{\delta_{il}}) \\ &= \sum_{i,j,k,l} A_{ij}B_{kl} \delta_{jk} \delta_{il} \\ &= \sum_{i,j} A_{ij}B_{ji} \end{aligned}\]
Essentially, the number of dots in the product indicates how many dimensions we want to contract.
Example: Tensor double
contraction
Double contraction of two second-order tensors \(\mathbf{A},\mathbf{B} \in \mathcal{R}^{d \times d}
\rightarrow \mathcal{R}\): \[\mathbf{A} : \mathbf{B} = \sum_{i,j} A_{ij}
B_{ji}\] Double contraction of two fourth-order tensors \(\mathbb{A},\mathbb{B} \in \mathcal{R}^{d \times d
\times d \times d} \rightarrow \mathcal{R}^{d \times d \times d \times
d}\): \[\mathbb{A} : \mathbb{B} =
\sum_{i,j,k,l,m,n} A_{ijkl} B_{lkmn} \mathbf{e}_i \otimes \mathbf{e}_j
\otimes \mathbf{e}_m \otimes \mathbf{e}_n\] Double contraction of
a fourth-order tensor \(\mathbb{A} \in
\mathcal{R}^{d \times d \times d \times d}\) and a second-order
tensor \(\mathbf{B} \in \mathcal{R}^{d \times
d} \rightarrow \mathcal{R}^{d \times d}\): \[\mathbb{A} : \mathbf{B} = \sum_{i,j,k,l} A_{ijkl}
B_{lk} \mathbf{e}_i \otimes \mathbf{e}_j\]
Finally, we denote the trace, transposition and inverse of a tensor as \(\text{tr}(\mathbf{A})\), \(\mathbf{A}^\top\), and \(\mathbf{A}^{-1}\), respectively.
In many physical processes, variables appear as tensor fields with a dependency on a spatial variable \(\mathbf{x} \in \mathcal{R}^d\). Some examples are given here:
Example: Tensor fields
A temperature field is a scalar field \[\theta: \mathcal{R}^d \rightarrow
\mathcal{R}.\] A displacement field is a vector field \[\mathbf{u}: \mathcal{R}^d \rightarrow
\mathcal{R}^d.\] A stress field is a second-order tensor field
\[\mathbf{S}: \mathcal{R}^d \rightarrow
\mathcal{R}^{d \times d}.\]
In most governing equations of physical processes, we need to compute differential operations on these fields. Therefore, the following sections introduce the most important differential operators for tensor fields assuming that the fields are differentiable and that we are using Cartesian coordinates.
A common notation for differential operations on tensor fields utilizes the Nabla operator \[\nabla = \sum_i \frac{\partial }{\partial x_i} \mathbf{e}_i = \begin{pmatrix} \frac{\partial}{\partial x_1} \\ \frac{\partial}{\partial x_2} \\ \dots \\ \frac{\partial}{\partial x_d} \\ \end{pmatrix}_{\{\mathbf{e}_i\}}\] The Nabla operator may be interpreted as a first-order tensor or vector, which upon multiplication in an inner product or cross product applies a derivative instead of being just multiplied.
The gradient computes the partial derivative with respect to each spatial direction and represents this information as a higher-order tensor. We denote the gradient operator \(\nabla (\bullet)\). The resulting tensor is increased by one order as shown in the following examples:
Example: Gradient
Gradient of a scalar field \[\nabla \theta =
\sum_i \frac{\partial \theta}{\partial x_i} \mathbf{e}_i =
\begin{pmatrix}
\frac{\partial \theta}{\partial x_1} \\
\frac{\partial \theta}{\partial x_2} \\
\dots \\
\frac{\partial \theta}{\partial x_d} \\
\end{pmatrix}_{\{\mathbf{e}_i\}}\] Gradient of a vector
field \[\nabla \mathbf{u} = \sum_{i,j}
\frac{\partial u_i}{\partial x_j} \mathbf{e}_i \otimes \mathbf{e}_j
=
\begin{pmatrix}
\frac{\partial u_1}{\partial x_1} & \frac{\partial
u_1}{\partial x_2} & \dots & \frac{\partial u_1}{\partial x_d}\\
\frac{\partial u_2}{\partial x_1} & \frac{\partial
u_2}{\partial x_2} & \dots & \frac{\partial u_2}{\partial x_d}\\
\dots & \dots & \dots & \dots\\
\frac{\partial u_d}{\partial x_1} & \frac{\partial
u_d}{\partial x_2} & \dots & \frac{\partial u_d}{\partial x_d}\\
\end{pmatrix}_{\{\mathbf{e}_i\}}\]
The gradient may be interpreted as a measure for how much a tensor changes in each direction.
We may compute the gradient of a gradient of a scalar field. If all the partial derivatives exits, we call the entries a Hessian.
Example: Hessian
Hessian of a scalar field \[\nabla^2 \theta =
\sum_{i,j} \frac{\partial^2 \theta}{\partial x_i \partial x_j}
\mathbf{e}_i \otimes \mathbf{e}_j
=
\begin{pmatrix}
\frac{\partial^2 \theta}{\partial x_1 \partial x_1} &
\frac{\partial^2 \theta}{\partial x_1 \partial x_2} & \dots &
\frac{\partial^2 \theta}{\partial x_1 \partial x_d}\\
\frac{\partial^2 \theta}{\partial x_2 \partial x_1} &
\frac{\partial^2 \theta}{\partial x_2 \partial x_2} & \dots &
\frac{\partial^2 \theta}{\partial x_2 \partial x_d}\\
\dots & \dots & \dots & \dots\\
\frac{\partial^2 \theta}{\partial x_d \partial x_1} &
\frac{\partial^2 \theta}{\partial x_d \partial x_2} & \dots &
\frac{\partial^2 \theta}{\partial x_d \partial x_d}\\
\end{pmatrix}_{\{\mathbf{e}_i\}}\]
The divergence computes the partial derivative with respect to each spatial direction, sums these values up and represents this information as a lower-order tensor. We denote the divergence operator \(\nabla \cdot (\bullet)\). The resulting tensor is increased by one order as shown in the following examples:
Example: Divergence
Divergence of a vector field \[\nabla \cdot
\mathbf{u} = \sum_i \frac{\partial u_i}{\partial x_i}
=
\frac{\partial u_1}{\partial x_1} + \frac{\partial u_2}{\partial
x_2} + \dots + \frac{\partial u_d}{\partial x_d}\] Divergence of
a second-order tensor field \[\nabla \cdot
\mathbf{S} = \sum_{i,j} \frac{\partial S_{ij}}{\partial x_j}
\mathbf{e}_i
=
\begin{pmatrix}
\frac{\partial S_{11}}{\partial x_1} + \frac{\partial
S_{12}}{\partial x_2} + \frac{\partial S_{13}}{\partial x_3} \\
\frac{\partial S_{21}}{\partial x_1} + \frac{\partial
S_{22}}{\partial x_2} + \frac{\partial S_{23}}{\partial x_3}\\
\frac{\partial S_{31}}{\partial x_1} + \frac{\partial
S_{32}}{\partial x_2} + \frac{\partial S_{33}}{\partial x_3}
\end{pmatrix}_{\{\mathbf{e}_i\}}\]
The divergence may be interpreted as the tensor field’s source. If the divergence is positive, this is a source and if it is negative, it will act as a sink.