大步长下变形网格发散
-
请教各位大神!OpenFOAM变形网格,步长大了之后,物面附近网格就跟不上了(如下图)。除了减小步长(实在是太耗费时间),还能通过使用不同diffusivity模型来改善吗,比如directional?这方面找不到啥帖子或讲解,自己测试也一头雾水,根本不知道原理上是怎么影响网格变形的。能给推荐几篇论文读读也十分感谢!
背景:
我在做一个流固耦合模拟,一根3D圆柱在横向平动时的变形,一端运动给定。因为preCICE耦合还不支持重叠网格,只能使用displacementLaplacian求解器,根据圆柱物面的平动位移+变形,将全场网格变形。试了几天后发现,OpenFOAM很难算大变形呐(虽然我这个问题主要是平动造成的大变形,可是又不能用solidBody) -
谢谢岳老师回复!刚去看了这个算例,确实使用的是directional diffusivity。顺着这个思路把其它用了directional的例程都看了一下,设置都是类似
diffusivity directional (a,b,c)
,我先照猫画虎试着算一个。我用的是com版本的。重叠网格是好,可惜物面还需要根据固体域的变形来变形,而现在还没法实现不同的dynamicFvMesh同时用吧。即使能同时使用dynamicOversetFvMesh和dynamicMotionSolverFvMesh,固体也需要在刚性运动的坐标系下求解,这样得到的物面位移才是“纯变形”,感觉很难,preCICE那边也一堆想要用重叠网格算FSI的,也没见解决方案。商软(starccm)那面还是强呀,随意叠加刚性运动与变形。
至于原理,根据directionalDiffusivity.C中写的
void Foam::directionalDiffusivity::correct() { const surfaceVectorField n(mesh().Sf()/mesh().magSf()); faceDiffusivity_ == (n & cmptMultiply(diffusivityVector_, n)); }
给
diffusivity directional (1,200,200)
相当于给朝x方向的面1个单位的扩散系数,而给y和z向的面200个单位的扩散系数。Gpt解释说扩散系数越小代表网格越刚,变形越小。也许因此实现了在x方向跟随变形? -
@李东岳 是扩散模型处理的:
diffusivity quadratic inverseDistance (cylinder)
1楼的图给的是圆柱的对称平面(圆柱端部用半球过渡的),圆柱往x负方向动(水平往右)。到图中发散的时刻,圆柱已经走了16个直径。将时间步长减小为当前的十分之一,网格变形能跟上,但是算得太慢了。所以想能不能通过改扩散系数模型来让网格在大步长的情况下也能 “跟着动” 。
@李东岳 在 大步长下变形网格发散 中说:
要不然就是扩散模型边界条件没弄对
pointDisplacement边界条件很简单,远场是slip(或fixedValue也行,因为远场很远,10000个直径,网格扭曲也是局限在物面附近),圆柱物面是fixedValue(但实际应该是openfoam-adapter把固体域的位移map过来了:
// Get the displacement on the patch fixedValuePointPatchVectorField& pointDisplacementFluidPatch( refCast<fixedValuePointPatchVectorField>( pointDisplacement_->boundaryFieldRef()[patchID])); // Overwrite the nodes on the interface directly forAll(pointDisplacement_->boundaryFieldRef()[patchID], i) { for (unsigned int d = 0; d < dim; ++d) pointDisplacementFluidPatch[i][d] = buffer[bufferIndex++]; }
-
给感兴趣的同学老师们更新一下进展:
-
directional diffusivity对我的三维情况,效果比inverDistance扩散模型更差,给的
diffusivity directional (1,200,200)
,只运动了不到两个直径网格便发散了
-
directional diffusivity好像只有给(a, b, 0)且a<<b这种模式才有效果,且仅针对单向平移的二维网格。用不同的参数试了试moving cone算例
尝试把moving cone改为球,diffusivity directional (1,200,0)
,效果也不错
-
我的情况目前只有减小时间步长了,移动33个直径后还没发散
-