前言
如题,本章主要准备讲解的是:基于蒙特卡洛(MC)和pennes模型的三维生物热传导的具体理论原理和实现。预计这章写完可以开始写基于CUDA的GPU运算加速(大概)。
附上前文链接:
理论
从傅里叶到pennes
在生物热仿真(1):无生命材料的热传导简析中提到的一维傅里叶热传导经典公式如下:
式中假设了
是均匀的,将此式拓展到三维可得到:
其中有,并且
不一定均匀,所以上式也可写为:
为式添加血液(blood)传热项
和代谢(metabolism)产热项
,得到pennes模型[1]的传热式:
pennes模型属于生物传热的最经典模型之一,在许多相关研究中都有用到,例如低温外科手术方面的Lisa X[2],肿瘤加热治疗方面的李和杰[3],在微波温热治疗方面的Thamire[4]等人,均使用pennes模型作为传热仿真的理论基础。
pennes模型具体说明
在pennes模型中,有:
其中为体积血液灌注率(
),对于此参数的选择尚无特别好的结论;
为血液比热容;
为动脉血液温度,一般可设为体核温度(37度)。
的计算依赖于具体的加热方式,对于RF加热常使用比吸收率(SAR)进行计算;对于单纯的传导式加热则可使用固定的代谢值进行处理,例如Deng[5]使用式
作为肤下高度血管化肿瘤的代谢值。
三维均匀热传导率物体的显式差分迭代
将公式中的温度场设定为三维温度场,并认为导热率不变,可得到如下形式的公式:
根据公式和
,上式可化为:
简单整理,将常数项移到最右边:
其中有 ,将上式如生物热仿真(1):无生命材料的热传导简析中进行一样的处理,时间采用前向差分,空间采用中间差分,三维空间步长一致(
),并对其中无导数的
使用
进行松弛,则对第个时刻,坐标为
的位置的温度迭代式为:
为了简化上式,使用如下定义:
然后可得简化式(m为维度,现在m=3):
移项可得:
最后可得迭代式:
为了使所有的项的系数之和为1,从而符合MC方式的要求,对右边提取公因式,首先设
,可将上式化为:
从式中可以看到,三维的显式差分方程和一维差别不算很大,由s时刻的该位置和周围位置的温度,可以计算s+1时刻的温度;另外,基于pennes模型,多考虑了一项
来代表代谢产热和血流散热的影响,更加适用于生物传热场景。
当令 时,有
,上式会回归为工程传热的三维公式,可见pennes模型和传统模型是完全兼容的。
显式差分的问题
使用MC方式计算式,首先需要计算概率,各个位置的概率如下:
- 原位置:
- 邻居位置:
松弛因子为,热扩散率
,则有:
为了维持差分稳定性,需要满足,由于
常常小于1,所以只需要满足
即可。
所以稳定性条件为:, 当
较小时,
会被次方级的限制至一个非常小的空间。
例如,若我们使用的空间步长,则有
隐式差分的迭代式
由于显式已经推导过,推导过程类似,迭代式为:
然而,虽然隐式差分能克服一定的稳定性问题,但由于本身需要联立求解,对于多线程加速十分不友好。
P.S. 补充一个稳定性分析
只要所有系数都大于0即可满足MC方法下的稳定性,即
在
时,恒满足
恒满足
所以稳定性条件可化为
在
时,有
可见由于不依赖于
,
的取值空间得到了很大的改善
基于蒙特卡洛的求解思路-随机游走
在调研了许多论文之后,发现基于MC思路求解的方法往往基于随机游走(Random Walk)进行实现,其核心思路在于基于统计方法获取内部点和边界点/初始点的温度关系,从而实现:边界点迭代->内部点跟随进行变化 这样的过程。优势在于便于并行计算,计算量相对小等[6]。但是,其概率的计算仍然基于有限差分,所以仍然需要满足有限差分的稳定性条件。
代码实现
随机游走算法描述
为了提高差分稳定性,此处使用隐式形式的差分。
//计算(x,y,z)位置, n次随机游走的结果
double MonteCarlo::computeTempWithRandomWalk(int x, int y, int z, int n)
{
// 计算各个方向的概率
std::vector<double> probs = this->computeProbs(x,y,z);
std::vector<double> interval = GlobalFun::getProbsInterval(probs);
std::vector<std::vector<int>> neighs;
GlobalFun::getNeighPos({x,y,z}, neighs, this->shape->getSize().toVectorInt());
// 开始迭代
int N = (n < 1) ? 1 : n;
double result = 0.0;
std::vector<int> cur_pos = {x, y, z};
srand((unsigned)time(NULL));
//判断状态,流体不更新温度
if(this->shape->getState(x,y,z)==ShapeState::FLUENT){
result = this->temp_3d[x][y][z];
} else {
for (int i = 0; i < N; ++i) {
for (int s=0; s<this->curr_iterate_time; ++s) {
double rand_prob = rand() / double(RAND_MAX);
for(int neigh_idx=0; neigh_idx<neighs.size(); ++neigh_idx){
if(rand_prob>=interval[neigh_idx] && rand_prob<=interval[neigh_idx+1]){
cur_pos = neighs[neigh_idx];
}
}
}
result += this->temp_3d[cur_pos[0]][cur_pos[1]][cur_pos[2]];
}
result /= N;
//判断邻居,如果为流体的邻居,则使用牛顿冷却定律先进行低精度仿真
for(std::vector<int> neigh : neighs){
if(this->shape->getState(neigh[0],neigh[1],neigh[2])==ShapeState::FLUENT){
double delta_temp = this->temp_3d[x][y][z] - this->fluent_value;
if(delta_temp > 0.0){
result -= this->k*delta_temp*this->step;
}
}
}
}
return result;
}
引用
-
刘 静,王存诚,等.生物传热学[M].北京:科学出版社.1997 ↩
-
Xu LX,Zhang At.,Sandison GA,et al.A microscale model for prediction of the breast cancer cell damage during cryosurgery[C].ASME Summer Heat Transfer Conference,July 20—23,2003 ↩
-
李和杰,刘 静,张学学,等.激光汽化活体生物组织的传热过程分析[J].航天医学与医学工程,2002,1(2):103—107. ↩
-
Thamire CS.Bellary S.A numerical,study of microwave thermotherapy for benign prostatic hyperplasia [C]. ASME Summer Heat Transfer Co nference,July 20—23,2003 ↩
-
Deng Z, Liu J. MONTE CARLO METHOD TO SOLVE MULTIDIMENSIONAL BIOHEAT TRANSFER PROBLEM[J]. Numerical Heat Transfer Part B-fundamentals, 2002, 42(6): 543-567. ↩
-
王辉, 吴建国. 生物传热学及其医学应用[J]. 同济大学学报:医学版, 2004, 025(002):159-162. ↩