标量场壁面梯度的处理方式
-
各位前辈:
我自己编写的一个求解器里 热扩散系数ka 在不同位置值不一样,是一个标量场。因此我定义了一个变量 volScalarField ka=f(....) 。 在温度方程里的拉普拉斯项fvm::laplacian(ka,T) 中 存在ka的梯度的计算。 volScalarField 在壁面边界也有分布,因此grad(ka)在边界处的计算是错误的。
我的办法是把ka在壁面设为 zerogradient 条件。但总觉得不是十分完美,不知各位前辈有没有更好的方法。 -
@东岳 纯流体计算时热扩散系数在边界是没有意义的吧,一般情况下是dimensionscalar ,是一个常数,grad(ka)都是0。 但如果吧ka 设为 volScalarField 的话,边界值也会被用于计算grad。 热扩散系数应该定义在流体域也就是内部场中,但volScalarField 有边界值。 有没有可能只对volScalarField 的内部场进行初始化和计算?
像这样 ka.primitiveFieldRef()=(r*(kf*(1+nn)-ks)+ks)/(1+nn*r); -
你可以简单的把
grad(ka)
在边界处的值设为0,可参考: http://www.cfd-china.com/topic/1199 -
参考这个:
forAll(patches, patchi) { const fvPatch& currPatch = patches[patchi]; if (isType<wallFvPatch>(currPatch)) { forAll(currPatch, facei) { label faceCelli = currPatch.faceCells()[facei]; epsilon[faceCelli] = 0.0;//毗连网格单元值 G[faceCelli] = 0.0;//毗连网格单元值 } } }
将你的边界毗连网格单元值的梯度手动给定
-
@mr-h 在 标量场壁面梯度的处理方式 中说:
在温度方程里的拉普拉斯项fvm::laplacian(ka,T) 中 存在ka的梯度的计算。
此处Ka为volScalarField,那么fvm::laplacian(ka,T)是不是等价于(fvm::grad(ka)&fvm::grad(T)) + ka*fvm::laplacian(T);这两种表达方式的意义一样吗?
1/8