2023年十一月上旬科研日志
十一月份最主要的任务是完成第一篇文章的初稿。 ## 2023-11-06 11:54
暂时先用 LBFGS 方法求解非线性问题
用下面的运算符重载来表达残差公式 Y = X - _solid_displacement - dt * U
的计算。此函数需要返回两个对象,一个是grad,一个目标函数 \(f=\|\mathbf{Y}\|_2\) 。需要注意的是,\(f\) 关于 \(\mathbf{X}\) 的导数并不是 \(\mathbf{Y}\) 。
double operator()(const Eigen::VectorXd &x, Eigen::VectorXd &grad)
在这个函数内部需要完成以下这些事情 1. 将 x 转换成 std::vector<double3>
类型 2. 调用 calculate_solid_velocity(X, U);
3. Y = X - _solid_displacement - dt * U;
4. 将 Y 转换回 Eigen::VectorXd
类型 5. 计算 Y 的二范数
下载 LBFGSpp 代码
lbfgspp 是一个仅有头文件的库,它依赖Eigen。因为我们的dolfin等库已经使用了eigen,因此没必要再在lbfgspp中再使用一次Eigen。因此需要在cmake文件中注释掉下面几行代码。
find_package(Eigen3 3.0 REQUIRED)
target_link_libraries(lbfgspp INTERFACE Eigen3::Eigen)
message("-- Eigen3 version: " ${EIGEN3_VERSION_STRING})
2023-11-06 12:31 中午休息
2023-11-06 13:46
查看理想左心室舒张算例结果
程序中断了,查看结果发现
左心室算例
显格式的真实左心室和理想左心室舒张都重新放上去跑了。理想左心室还未跑到终止时刻程序就断了。和论文中结果进行比较,论文中心室在中轴线上的中点的位置为-26.5--27.5之间,在参数还未调对之前,我算出来的位移为0.72左右,换算一下为30.7左右,因此,未达到稳定状态时,心室的膨胀程度比论文中的结果大。需要继续运行程序,等程序几乎达到稳定状态再看结果。此外,还需要缩小时间步长,增大顶端的固定系数。
真实左心室形变后变得非常粗糙,因为误差太大导致的。主要有两个原因:
- 时间不长太大导致不稳定
- 流体网格步长太大导致误差太大
2023-11-08 16:00 周汇报
近期数值模拟结果
真实左心室
真实左心室的拟静态模拟,先整体膨胀,后心尖收缩,再膨胀,如此反复。
理想左心室
直杆模拟
2023-11-13 18:45
近期任务
- 直杆弯曲的算例(时间步长0.001)
- 用显格式跑100s,保存10000个数据。
- 用隐格式跑100s,保存10000个数据。
- 真实左心室算例网格
- 时间步长不够小(1/32)
- 背景网格的空间步长不够小(0.001s)
- 还未达到稳态(10s)
- 理想左心室的几何形状有问题,应当选取椭球更长的那半截
- 二维理想弹性圆环的算例
- 计算能量
- 计算压强p的收敛阶(需要考虑流体网格、固体网格、时间不长三者)
- 计算速度u的收敛阶(速度应该为零)
- 要不要考虑椭圆形?
- 将箱型迭代法考虑进心肌灌注问题的求解
- 三维流体的优化(未来一两周的规划)
- 多重网格
- 重写 GPU 加速
- 二维算例代码重构
- 二维流体求解器应当独立出来
- 流体数据的输出应当统一起来
- 在看了压强的结果之后,计算压强的误差
- ibm 也应该独立出来
2023-11-13 16:11 BOXSMOTHING
稳态stokes方程的求解结果1和非稳态stokes方程的求解结果2作为标准验证流体求解器是否正确。被王璇骂了一顿,她觉得她自己代码是对的,为什么要注释掉!!! ### 箱型迭代法 为了下午的组会,我们快速地构造出了一个算例,基于方腔驱动流,顶盖外法向速度的梯度为零,压强为零。