2023年十一月上旬科研日志

十一月份最主要的任务是完成第一篇文章的初稿。

2023-11-06 11:54

暂时先用 LBFGS 方法求解非线性问题

用下面的运算符重载来表达残差公式 Y = X - _solid_displacement - dt * U 的计算。此函数需要返回两个对象,一个是grad,一个目标函数 f=Y2f=\|\mathbf{Y}\|_2 。需要注意的是,ff 关于 X\mathbf{X} 的导数并不是 Y\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左右,因此,未达到稳定状态时,心室的膨胀程度比论文中的结果大。需要继续运行程序,等程序几乎达到稳定状态再看结果。此外,还需要缩小时间步长,增大顶端的固定系数。

image-20231107160116830

image-20231107155840478

真实左心室形变后变得非常粗糙,因为误差太大导致的。主要有两个原因:

  1. 时间不长太大导致不稳定
  2. 流体网格步长太大导致误差太大

2023-11-08 16:00 周汇报

近期数值模拟结果

真实左心室

真实左心室的拟静态模拟,先整体膨胀,后心尖收缩,再膨胀,如此反复。

理想左心室

直杆模拟

2023-11-13 18:45

近期任务

  1. 直杆弯曲的算例(时间步长0.001)
    • 用显格式跑100s,保存10000个数据。
    • 用隐格式跑100s,保存10000个数据。
  2. 真实左心室算例网格
    1. 时间步长不够小(1/32)
    2. 背景网格的空间步长不够小(0.001s)
    3. 还未达到稳态(10s)
  3. 理想左心室的几何形状有问题,应当选取椭球更长的那半截
  4. 二维理想弹性圆环的算例
    1. 计算能量
    2. 计算压强p的收敛阶(需要考虑流体网格、固体网格、时间不长三者)
    3. 计算速度u的收敛阶(速度应该为零)
    4. 要不要考虑椭圆形?
  5. 将箱型迭代法考虑进心肌灌注问题的求解
  6. 三维流体的优化(未来一两周的规划)
    1. 多重网格
    2. 重写 GPU 加速
  7. 二维算例代码重构
    1. 二维流体求解器应当独立出来
    2. 流体数据的输出应当统一起来
    3. 在看了压强的结果之后,计算压强的误差
    4. ibm 也应该独立出来

2023-11-13 16:11 BOXSMOTHING

稳态stokes方程的求解结果[1]和非稳态stokes方程的求解结果[2]作为标准验证流体求解器是否正确。被王璇骂了一顿,她觉得她自己代码是对的,为什么要注释掉!!!

箱型迭代法

为了下午的组会,我们快速地构造出了一个算例,基于方腔驱动流,顶盖外法向速度的梯度为零,压强为零。


  1. https://gist.github.com/shaoyaoqian/664fb1ba512f802baa8a8643d8325a79 ↩︎

  2. https://gist.github.com/shaoyaoqian/c62a8014e3875967d763fd98022c7e72 ↩︎