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
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`: 通过包围盒来定义边界条件
|