You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

50 lines
1.3 KiB

1 year ago
# README
实现了线弹性材料的静力学FEM (3D)仿真, 网格采用**四面体**单元.
### 结构
```C++
.
├── LinSysSolver // 实现两类线性方程求解器
├── Utils.hpp // 工具函数
├── Utils.cpp
├── Material.hpp // 单元形函数, 单元形函数偏导, 单元刚度矩阵
├── Material.cpp
├── Mesh.hpp // 网格类, 记录网格信息, 边界条件施加, 仿真求解
├── Mesh.cpp
├── main.cpp // 初始化仿真参数, 构造Mesh, 调用simulation
```
### 编译及运行
#### 环境
* `Ubuntu 22.04`, `Intel i7-11700 2.5GHz`
* `cmake 3.22`, `g++ 11.2.0`
#### 依赖
* [TBB](https://software.intel.com/content/www/us/en/develop/tools/threading-building-blocks.html): 并行编程库
* `Eigen`:向量运算
* `libigl`:几何处理
* `MshIO`: 四网格读入
* `spdlog`:用于日志输出
#### 编译
```shell
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make
```
### 一些代码细节
* `Mesh/vNeighbor`: 记录每个节点的邻接节点. 便于LinSysSolver中构建csr稀疏矩阵
* `Mesh/vFloc`: 记录每个节点`nodeI`所在的单元index (`eleI`), 以及该`nodeI`在该单元中的局部index (i.e., 在`TT.row(eleI)`中的第几个). 便于按节点并行地装配刚度矩阵.
* `Mesh/QS_DirichletBC, Mesh/QS_NeumannBC`: 通过包围盒来定义边界条件