- 终端输入mpirun -np n pvserver (n根据情况调整),保持该终端不关闭
- 打开paraFoam,file -> connect -> add server : 其中,Name随意, Server type 用 client/server,Host 用 localhost,port 默认即可。
- 加载 .foam文件
感觉这种方法要比reconstructPar快
感觉这种方法要比reconstructPar快
把粒子按x坐标排序,i是序号,形成xorder(i,1)存x坐标,xorder(i,2)存粒子编号;
同理,把粒子按y、z坐标排序,形成yorder(i,1..2),zorder(i,1..2)
计算网格顶点的xmin,xmax,ymin,ymax,zmin,zmax
loop:循环网格{
找到xmin,xmax在xorder(i,1)中的位置
同理,处理ymin,ymax,zmin,zmax
new 一个数组 possible(i)
loop: 处理上面缩小的范围{
把以上范围内的粒子编号xorder(i,2),yorder(i,2),
zorder(i,2)插入排 序到possible(i)
}
loop: 确定真正在网格中的粒子{
possible(i)中有连续三个相同编号,判断是否真的在网格内,
如果真在,就存起来
}
}
至于每个网格里的粒子编号怎么存,搞一个数组叫data(i)一个接一个地存上面伪代码得到的编号,另一个数组叫position(j)存单元j在data(i)中的起始位置
不知道问题理解对不对,抛个砖试试看
@dzw05 学习了,div(phid,p) 确实不用 bounded 为好
@东岳 把 z01~02 后面的zip去掉,然后对着 rhoSimple.zip 选择解压
非气动专业,尝试和大佬讨论,想问一下:
(1)div(phid,p) 的格式为什么不用 bounded Gauss upwind 呢?经验来看,bounded格式稳定很多;
(2)grad用最小二乘,以及interpolation用迎风也是为了数值稳定性吧?但貌似当前算例都用中心差分也可以,所以为了精度给改了。
按照以上两项修改试着跑了几万步,不过不是特别收敛,连续性方程不满足,升阻力系数还在震荡。是不是这个物理问题本身是非定常的,或者是网格太粗糙呢?
还有就是挺好奇这个网格使用sHM画的吗?像这类混合网格如何处理trailing edge这种特变尖锐的地方?
可能你的操作系统位数和别人不一样。
试下装一个和你目前系统位数不一样的虚拟机(或者用超算、别人的电脑)
然后把case搬到这台机器上,在controlDict 里面writeFormat 改成 ascii,终端键入foamFormatConvert看看能不能转换
抱歉说漏了,rho、rho.water、rho.air这三个文件都要放进0文件夹。funkySetFields是能够使用函数表达式的,用来设置场内分布;边界上的值可以用funkySetBoundaryField来设置。在system下添加funkySetFieldsDict和funkySetBoundaryDict来使用。里面的内容,随便举个例子:
//funkySetFields
expressions
(
pressureWater
{
field p_rgh; //需要设置的物理量
expression "100000 - 99800*pos().y"; //这行写你要的函数
condition "(pos().x <= 5) && (pos().x >= 0)"; //起作用的范围、可以注释掉,不影响使用
keepPatches 1; //填1就好,要不然可能把边界条件改成zeroGradient
}
);
//funkySetBoundaryField
pressureWater
{
field p_rgh;
expressions
(
{
target value;
patchName INLET; //选择边界面
//variables "maxY=max(pts().y);"; //可以注释掉,不影响使用
expression "100000 - 99800*pos().y"; //这行写你要的函数
}
//可以再expression下同时写多个边界的设置
{
target value;
patchName OUTLET;
//variables "maxY=max(pts().y);";
expression "100000 - 99800*pos().y";
}
);
}
更多细节参考这里链接文本,以及swak4foam的tutorials
另外,你的这个算例里面压力也应当要设置,需要和密度相匹配。
感觉这种方法要比reconstructPar快
compressibleInterFoam读入rho的方式是READ_IF_PRESENT,也就是说存在rho文件的话,就会被读进去。所以可以在0文件夹下自己添加一个rho,然后用funkySetField 设置你要的初始场。
至于“如何设置边界密度随空间变化”,compressibleInterFoam是基于压力的求解器,也就是密度由压力决定。所以只要把p_rgh设置对了就可以吧?
@maoyanjun_dut 非常感谢你的工作!另外想再请教个问题,如果要把overset用到compressibleInterFoam这类可压缩求解器里面的话,可压缩带来的dgdt,pEqnComp应该怎么处理?
如果是除0的话,应该报 #2 Foam::divide at ??:? 这样的错误。
你的这个错误像是缺少了自己写的库文件。FOAM_USER_APPBIN下能找到吗?试着重新编译一下?