• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..03-May-2022-

doc/H17-Dec-2021-2718

examples/H17-Dec-2021-4,7142,918

filedata/H17-Dec-2021-14,01813,931

.gitignoreH A D17-Dec-202160 43

README.mdH A D17-Dec-20216.2 KiB10083

gsALE.hH A D17-Dec-20212.6 KiB10247

gsALE.hppH A D17-Dec-20219.7 KiB242201

gsALE_.cppH A D17-Dec-2021163 107

gsBaseAssembler.hH A D17-Dec-20213.9 KiB10140

gsBaseAssembler.hppH A D17-Dec-20216.2 KiB167130

gsBaseAssembler_.cppH A D17-Dec-2021193 107

gsBasePde.hH A D17-Dec-20211.4 KiB5726

gsBaseUtils.hH A D17-Dec-20218.8 KiB246173

gsBiharmonicAssembler.hH A D17-Dec-20212.7 KiB8342

gsBiharmonicAssembler.hppH A D17-Dec-20214.5 KiB13296

gsBiharmonicAssembler_.cppH A D17-Dec-2021211 107

gsElPoissonAssembler.hH A D17-Dec-20211.8 KiB6434

gsElPoissonAssembler.hppH A D17-Dec-20213 KiB9364

gsElPoissonAssembler_.cppH A D17-Dec-2021208 107

gsElTimeIntegrator.hH A D17-Dec-20215.3 KiB15180

gsElTimeIntegrator.hppH A D17-Dec-20217 KiB193158

gsElTimeIntegrator_.cppH A D17-Dec-2021202 107

gsElasticityAssembler.hH A D17-Dec-20215.7 KiB13261

gsElasticityAssembler.hppH A D17-Dec-202114 KiB327243

gsElasticityAssembler_.cppH A D17-Dec-2021211 107

gsElasticityFunctions.hH A D17-Dec-20217.1 KiB211136

gsElasticityFunctions.hppH A D17-Dec-202111.6 KiB290216

gsElasticityFunctions_.cppH A D17-Dec-2021302 129

gsGeoUtils.hH A D17-Dec-202110.6 KiB225101

gsGeoUtils.hppH A D17-Dec-202147.9 KiB1,2411,043

gsGeoUtils_.cppH A D17-Dec-20216.1 KiB11769

gsIterative.hH A D17-Dec-20214.2 KiB13051

gsIterative.hppH A D17-Dec-20217.6 KiB240195

gsIterative_.cppH A D17-Dec-2021181 107

gsMassAssembler.hH A D17-Dec-20212.1 KiB7132

gsMassAssembler.hppH A D17-Dec-20213.6 KiB10764

gsMassAssembler_.cppH A D17-Dec-2021194 117

gsMuscleAssembler.hH A D17-Dec-20212.6 KiB7133

gsMuscleAssembler.hppH A D17-Dec-20214.4 KiB10465

gsMuscleAssembler_.cppH A D17-Dec-2021198 97

gsNsAssembler.hH A D17-Dec-20213.9 KiB10646

gsNsAssembler.hppH A D17-Dec-20218.4 KiB236161

gsNsAssembler_.cppH A D17-Dec-2021187 107

gsNsTimeIntegrator.hH A D17-Dec-20214.4 KiB14779

gsNsTimeIntegrator.hppH A D17-Dec-20219.1 KiB246187

gsNsTimeIntegrator_.cppH A D17-Dec-2021202 107

gsPartitionedFSI.hH A D17-Dec-20212.9 KiB9855

gsPartitionedFSI.hppH A D17-Dec-20219.4 KiB250179

gsPartitionedFSI_.cppH A D17-Dec-2021196 107

gsThermoAssembler.hH A D17-Dec-20212.2 KiB6630

gsThermoAssembler.hppH A D17-Dec-20213 KiB8959

gsThermoAssembler_.cppH A D17-Dec-2021198 97

gsVisitorBiharmonic.hH A D17-Dec-20217.3 KiB168107

gsVisitorElPoisson.hH A D17-Dec-20215.3 KiB13989

gsVisitorElUtils.hH A D17-Dec-20213.3 KiB10875

gsVisitorElasticityNeumann.hH A D17-Dec-20214.9 KiB13075

gsVisitorLinearElasticity.hH A D17-Dec-20217.9 KiB188125

gsVisitorMass.hH A D17-Dec-20215.2 KiB14188

gsVisitorMixedLinearElasticity.hH A D17-Dec-20217.7 KiB184113

gsVisitorMixedNonLinearElasticity.hH A D17-Dec-202110.6 KiB233144

gsVisitorMuscle.hH A D17-Dec-202113.4 KiB279175

gsVisitorNavierStokes.hH A D17-Dec-202115.4 KiB320206

gsVisitorNonLinearElasticity.hH A D17-Dec-20219.9 KiB229150

gsVisitorStokes.hH A D17-Dec-20216.5 KiB15794

gsVisitorThermo.hH A D17-Dec-20216 KiB15192

gsVisitorThermoBoundary.hH A D17-Dec-20215.9 KiB15391

gsWriteParaviewMultiPhysics.hH A D17-Dec-20213 KiB7424

gsWriteParaviewMultiPhysics.hppH A D17-Dec-20217.9 KiB248186

gsWriteParaviewMultiPhysics_.cppH A D17-Dec-20211.1 KiB2922

README.md

1
2# gsElasticity
3gsElasticity is a **submodule of G+Smo** which has started as a collection of nonlinear elasticity solvers for 2D and 3D solids. Since then, its focus has shifted towards mesh deformation, and now gsElasticity contains isogeometric solvers for nonlinear elasticity and incompressible Navier-Stokes equations, various PDE-based mesh deformations algorithms and a partitioned fluid-structure interaction solver. Additionally, gsElasticity includes numerous application examples and the corresponding NURBS geometries.
4
5------------------  Nonlinear elastic deformation of a 3D object  ----------------------------------------------------
6
7<img src="https://raw.githubusercontent.com/gismo/gsElasticity/media/images/terrific.png" width="500">
8
9------------------  Active muscle behavior  ----------------------------------------------------
10
11<img src="https://raw.githubusercontent.com/gismo/gsElasticity/media/images/muscle.png" width="600">
12
13------------------  Fluid-structure interaction in 2D  ---------------------------------------------------------------
14
15<img src="https://raw.githubusercontent.com/gismo/gsElasticity/media/images/FSI.png" width="450">
16
17------------------  Mesh deformation for isogeometric domain parametrization -----------------------------------------
18
19<img src="https://raw.githubusercontent.com/gismo/gsElasticity/media/images/meshDeform.png" width="550">
20
21## Solvers
22gsElasticity currently includes the following solvers for 2D and 3D multi-patch tensor-product NURBS geometries:
23* Elasticity solvers
24  * linear elasticity
25  * nonlinear elasticity with St.Venant-Kirchhoff and neo-Hookean material laws
26  * implicit time integration with Newmark method
27  * pure displacement and mixed displacement-pressure formulations
28  * thermal expansion
29  * active muscle behavior
30* Incompressible Navier-Stokes solver
31  * Stokes equation
32  * stationary INSE
33  * explicit and implicit time integration with the one-step theta-scheme
34  * suitable for arbitrary Lagrangian-Eulerian (ALE) mappings
35  * ~~SUPG stabilization~~
36  * ~~turbulence model~~
37* Fluid-structure interaction solver
38  * partitioned approach
39  * strong coupling
40  * Aitken relaxation for convergence speed-up
41* Bi-harmonic equation solver in mixed formulation
42* Poisson's equation solver
43
44## Installation
45Since gsElasticity is a submodule of G+Smo, you should download G+Smo first:
46```
47git clone https://github.com/gismo/gismo.git
48```
49Then, configure G+Smo with `GISMO_ELASTICITY=ON`:
50```
51cd gismo
52mkdir build
53cd build
54cmake .. -DGISMO_ELASTICITY=ON
55```
56This will trigger a download of gsElasticity from GitHub. Once gsElasticity is downloaded, you can compile G+Smo with gsElasticity:
57```
58make
59```
60Once complete, you can find the compiled library in `/path/to/gismo/build/lib` and examples in `/path/to/gismo/build/bin`.
61
62#### Advanced installation
63gsElasticity is an independent .git repository. By default, the procedure described above downloads the version of gsElasticity __that is linked to G+Smo__. Usually, it is the latest stable version. However, if you want to get other versions/branches of gsElastisity, or even contribute to it, you should access gsElasticity via its .git repository located in `/path/to/gismo/extenstions/gsElasticity`. For example, to get the latest version of gsElasticity, do
64```
65cd /path/to/gismo/extenstion/gsElasticity
66git pull
67```
68
69Simulation of time-dependent processes can be rather computationally costly. Although G+Smo and gsElasticity are not suitable for distributed computing, you can achieve significant speed-up by using it with multi-theading on your desktop or laptop. To that end, you should install OpenMP library https://www.geeksforgeeks.org/openmp-introduction-with-installation-guide/. Once you have OpenMP, configure G+Smo with `GISMO_WITH_OPENMP=ON`:
70```
71cd /path/to/gismo/build
72cmake .. -DGISMO_ELASTICITY=ON -DGISMO_WITH_OPENMP=ON
73```
74By defining the environmental variable `OMP_NUM_THREADS`, you can choose how many threads your application is going to use
75```
76export OMP_NUM_THREADS=<number of threads to use>
77```
78With OpenMP included, at least the linear system assebmly is parallelized. This is a big deal in IGA since the high continuity of NURBS inceases the support of each basis function, which in turn increases the number of function evaluations necessary for matrix assembly. However, G+Smo uses Eigen library http://eigen.tuxfamily.org/index.php?title=Main_Page as a linear algebra backend, and linear system solvers in Eigen tend to be pretty slow. Luckily, there is a way to significantly speed up your applications - get Pardiso solver https://www.pardiso-project.org/ and compile G+Smo with it included!
79
80There are two options to get Pardiso - either as a stand-alone library from the official page https://www.pardiso-project.org/#download, or as a part of Intel MKL https://software.intel.com/en-us/mkl. The former options allows you to get the latest version of Pardiso (which, theoretically, should be faster than the version that Intel MKL uses). Once you register, download the library and get a license, you can configure G+Smo with Pardiso by
81```
82cd /path/to/gismo/build
83cmake .. -DGISMO_ELASTICITY=ON -DGISMO_WITH_OPENMP=ON -DGISMO_WITH_PARDISO=ON -DPardiso_DIR=/path/to/pardiso
84```
85The Intel MKL way to use Pardiso is only viable for machines with an Intel CPU. To that end, you should register at Intel Development Tools https://software.intel.com/en-us/articles/free-ipsxe-tools-and-libraries, download and intall Inter C/C++ compiler and Intel MKL library. After that, you can configure G+Smo with Pardiso in the following way:
86```
87cd /path/to/gismo/build
88source /path/to/intel/compilers_and_libraries/linux/bin/compilervars.sh intel64
89cmake .. -DGISMO_ELASTICITY=ON -DGISMO_WITH_OPENMP=ON -DEIGEN_USE_MKL_ALL=ON -DGISMO_WITH_PARDISO=ON -DPARDISO_USE_MKL=ON -DINTEL_ROOT=/path/to/intel -DCMAKE_C_COMPILER=icc -DCMAKE_CXX_COMPILER=icpc
90```
91Despite an older version of Pardiso used in MKL, Intel optimization often results in faster performance than if a stand-alone library is used.
92
93Final tip: you can speed up the compilation of G+Smo by specifying the number of threads `make` command uses:
94```
95make -j<number of threads to use>
96```
97
98## Using
99Check out numerous detailed examples in `path/to/gismo/extensions/gsElasticity/examples`!
100