# Isogeometric analysis

Isogeometric analysis is a computational approach that offers the possibility of integrating finite element analysis (FEA) into conventional NURBS-based CAD design tools. Currently, it is necessary to convert data between CAD and FEA packages to analyse new designs during development, a difficult task since the two computational geometric approaches are different. Isogeometric analysis employs complex NURBS geometry (the basis of most CAD packages) in the FEA application directly. This allows models to be designed, tested and adjusted in one go, using a common data set.
The pioneers of this technique are Tom Hughes and his group at The University of Texas at Austin. A reference free software implementation of some isogeometric analysis methods is GeoPDEs. Likewise, other implementations can be found online. For instance, PetIGA is an open framework for high performance isogeometric analysis heavily based on PETSc. In addition, MIGFEM is another IGA code which is implemented in Matlab and supports Partition of Unity enrichment IGA for 2D and 3D fracture. Furthermore, G+Smo is an open C++ library for isogeometric analysis. In particular, FEAP is a finite element analysis program which includes an Isogeometric analysis library FEAP IsoGeometric (Version FEAP84 & Version FEAP85).

## Advantages of IGA with respect to FEA

Isogeometric analysis presents two main advantages with respect to the finite element method:
* There is no geometric approximation error, due to the fact the domain is represented exactly
* Wave propagation problems, arising for instance in cardiac electrophysiology, acoustics and elastodynamics, are better described, thanks to the reduction of numerical dispersion and dissipation errors.

## Meshes

In the framework of IGA, the notions of both control mesh and physical mesh are defined.
A control mesh is made by the so-called control points and it is obtained by a piecewise linear interpolation of them. Control points play also the role of degrees of freedom (DOFs).
The physical mesh lays directly on the geometry and it consists of patches and knot spans. According to the number of patches that are used in a specific physical mesh, a single-patch or a multi-patch approach is effectively employed. A patch is mapped from a reference rectangle in two dimensions and from a reference cuboid in three dimensions: it can be seen as the entire computational domain or a smaller portion of it. Each patch can be decomposed into knot spans, which are points, lines and surfaces in 1D, 2D and 3D, respectively. Knots are inserted inside knot spans and define the elements. Basis functions are $C^{p-m}$ across the knots, with $p$ degree of the polynomial and $m$ multiplicity of a specific knot, and $C^{\infty }$ between a certain knot and the next or preceding one.

## Knot vector

A knot vector, normally indicated as $\Xi =\{\xi _{1},\xi _{2},...,\xi _{n+p+1}\}$, is a set of non-descending points. $\xi _{i}\in \mathbb {R}$ is the $i^{th}$ knot, $n$ is the number of functions, $p$ refers to the basis functions order. A knot divides the knot span into elements. A knot vector is uniform or non-uniform according to the fact that its knots, once their multiplicity is not taken into account, are equidistant or not. If the first and the last knots appear $p+1$ times, the knot vector is said to be open.

## Basis functions

Once a definition of knot vector is provided, several types of basis functions can be introduced in this context, such as B-splines, NURBS and T-splines.

### B-splines

B-splines can be derived recursively from a piecewise constant function with $p=0$:
$N_{i,0}(\xi )={\mathcal {I}}_{[\xi _{i},\xi _{i+1})}(s)\quad 1\leq i\leq n$
Using De Boor's algorithm, it is possible to generate B-splines of arbitrary order $p$:
$N_{i,p}(\xi )={\frac {\xi -\xi _{i}}{\xi _{i+p}-\xi _{i}}}N_{i,p-1}(\xi )+{\frac {\xi _{i+p+1}-\xi }{\xi _{i+p+1}-\xi _{i+1}}}N_{i+1,p-1}(\xi )\quad 1\leq i\leq n$
valid for both uniform and non-uniform knot vectors. For the previous formula to work properly, let the division of two zeros to be equal to zero, i.e. ${\dfrac {0}{0}}:=0$.
B-splines that are generated in this way own both the partition of unity and positivity properties, i.e.:
$\sum _{i=1}^{n}N_{i,p}(\xi )=1\quad \forall \xi$
$N_{i,p}(\xi )\geq 0\quad \forall \xi$
So as to calculate derivatives or order $k$ of the $i^{th}$ B-splines of degree $p$, another recursive formula can be employed:
${\frac {d^{k}}{d^{k}\xi }}N_{i,p}(\xi )={\frac {p!}{(p-k)!}}\sum _{j=0}^{k}\alpha _{k,j}N_{i+j,p-k}(\xi )$
where:
$\alpha _{0,0}=1$
$\alpha _{k,0}={\frac {\alpha _{k-1,0}}{\xi _{i+p-k+1}-\xi _{i}}},$
$\alpha _{k,j}={\frac {\alpha _{k-1,j}-\alpha _{k-1,j-1}}{\xi _{i+p+j-k+1}-\xi _{i+j}}}\quad j=1,...,k-1,$
$\alpha _{k,k}={\frac {-\alpha _{k-1,j-1}}{\xi _{i+p+1}-\xi _{i+k}}}.$
whenever the denominator of an $\alpha _{j,j}$ coefficient is zero, the entire coefficient is forced to be zero as well.
A B-spline curve can be written in the following way:
${\textbf {C}}(\xi )=\sum _{i=1}^{n}N_{i,p}(\xi ){\textbf {B}}_{i}$
where $n$ is the number of basis functions $N_{i,p}$, and ${\textbf {B}}_{i}\in \mathbb {R} ^{d}$ is the $i^{th}$ control point, with $d$ dimension of the space in which the curve is immersed.
An extension to the two dimensional case can be easily obtained from B-splines curves. In particular B-spline surfaces are introduced as:
${\textbf {S}}(\xi ,\eta )=\sum _{i=1}^{n}\sum _{j=1}^{m}N_{i,p}(\xi )M_{j,q}(\eta ){\textbf {B}}_{i,j}$
where $n$ and $m$ are the numbers of basis functions $N_{i,p}$ and $M_{j,q}$ defined on two different knot vectors $\Xi =\{\xi _{1},\xi _{2},...,\xi _{n+p+1}\}$, ${\mathcal {H}}=\{\eta _{1},\eta _{2},...,\eta _{m+q+1}\}$, ${\textbf {B}}_{i,j}$ represents now a matrix of control points (also called control net).
Finally, B-splines solids, that need three sets of B-splines basis functions and a tensor of control points, can be defined as:
${\textbf {S}}(\xi ,\eta ,\zeta )=\sum _{i=1}^{n}\sum _{j=1}^{m}\sum _{k=1}^{l}N_{i,p}(\xi )M_{j,q}(\eta )L_{k,r}(\zeta ){\textbf {B}}_{i,j,k}$

### NURBS

In IGA basis functions are also employed to develop the computational domain and not only for representing the numerical solution. For this reason they should have all the properties that permit to represent the geometry in an exact way. B-splines, due to their intrinsic structure, are not able to generate properly circular shapes for instance. In order to circumvent this issue, non-uniform rational B-splines, also known as NURBS, are introduced in the following way:
$R_{i}^{p}(s)={\frac {N_{i,p}(s)\omega _{i}}{W(s)}}$
where $N_{i,p}$ is a one dimensional B-spline, $W(s)=\sum _{i=1}^{n}N_{i,p}(s)\omega _{i}$ is referred to as weighting function, and finally $\omega _{i}$ is the $i^{th}$ weight.
Following the idea developed in the subsection about B-splines, NURBS curve are generated as follows:
${\textbf {C}}(s)=\sum _{i=1}^{n}R_{i}^{p}(s){\textbf {B}}_{i}$
with ${\textbf {B}}_{i}$ $i^{th}$ vector of control points.
The extension of NURBS basis functions to manifolds of higher dimensions (for instance 2 and 3) is given by:
$R_{i,j}^{p,q}(s,t)={\frac {N_{i,p}(s)M_{j,q}(t)\omega _{i,j}}{\sum _{a=1}^{n}\sum _{b=1}^{m}N_{a,p}(s)M_{b,q}(t)\omega _{a,b}}}$
$R_{i,j,k}^{p,q,r}(s,t,w)={\frac {N_{i,p}(s)M_{j,q}(t)L_{k,r}(w)\omega _{i,j,k}}{\sum _{a=1}^{n}\sum _{b=1}^{m}\sum _{c=1}^{l}N_{a,p}(s)M_{b,q}(t)L_{c,r}(w)\omega _{a,b,c}}}$

## hpk-refinements

There are three techniques in IGA that permit to enlarge the space of basis functions without touching the geometry and its parametrization.
The first one is known as knot insertion (or h-refinement in the FEA framework), where ${\overline {\Xi }}=\{{\overline {\xi _{1}}}=\xi _{1},{\overline {\xi _{2}}},...,{\overline {\xi _{n+m+p+1}}}=\xi _{n+p+1}\}$ is obtained from $\Xi =\{\xi _{1},\xi _{2},...,\xi _{n+p+1}\}$ with the addition of more knots, which implies an increment of both the number of basis functions and control points.
The second one is called degree elevation (or p-refinement in the FEA context), which permits to increase the polynomial order of the basis functions.
Finally the third method, known as k-refinement (without a counterpart in FEA), derives from the preceding two techniques, i.e. combines the order elevation with the insertion of a unique knot in $\Xi$.