基于粒子的粘弹性流体表面张力问题



我最近一直在开发一个JS程序,为这篇学术文章建模。我最近遇到的问题是:

表面张力通常是由颗粒之间的吸引力引起的。在流体内部,这种吸引力会被抵消,但对于分子来说在表面附近,相邻分布的不对称性导致朝向流体的非零净力。"

我假设这在双密度弛豫方法中自然发生,但我的程序似乎没有显示出任何迹象

以下是双密度弛豫方法的摘录:

function doubleDensityRelaxation() {
  for(var i = 0; i<particles.length; i++) {
  var pi = particles[i];
  var p = 0;
  var pNear = 0;
  for(var j = i+1; j<particles.length; j++) {
    var pj = particles[j];
    var rij = sub(pi.r,pj.r);
    var q = length(rij)/h;
    if(q < 1) {
      p += (1-q)*(1-q);
      pNear += (1-q)*(1-q)*(1-q);
    }
  }
  var P = k*(p-p0);
  var PNear = kNear*pNear;
  var dx = [0,0];
  for(var j = i+1; j<particles.length; j++) {
    var pj = particles[j];
    var rij = sub(pi.r,pj.r);
    var q = length(rij)/h;
    if(q < 1) {
      var D = scale(normalize(rij), dtsq*(P*(1-q)+PNear*(1-q)*(1-q)));
      pj.r = add(pj.r,scale(D,0.5));
      dx = sub(dx,scale(D,0.5));
    }
  }
  pi.r = add(pi.r,dx);
  }
}

这里有一种更像可识别的低粘度流体。这种模拟在数值上似乎很不稳定,帧速率越低越不稳定。

我发现你的代码有一些问题。

  • 当我阅读这篇论文时,Lij是跨时间步长保留的弹簧长度的三角形矩阵的元素;gamma和alpha控制其变化的速率。这个矩阵没有保留在你的原始代码中,所以粘弹性根本不起作用。

  • 粒子间碰撞是不必要的,而且实际上会进一步破坏模拟的稳定性。粘度通道中的贝塔提供了这种排斥力。

  • p0/k的比率不能太低,否则你会以快速振荡坍缩团簇的形式得到不稳定性。当簇确实破裂时,单个粒子会像失控的Flubber球一样从墙上反弹。

  • 墙壁仍然存在一些问题:即使我做了一些调整,粒子也倾向于沿着它们排列成一列,新粒子被迫进入底部,而旧粒子则从顶部喷出,在流体中形成一种双漩涡。

  • 我正在尝试设置弹簧长度的下限,这有时可以稳定原本不稳定的参数集。我即兴猜测它所模拟的物理性质是膨胀行为。

相关内容

  • 没有找到相关文章

最新更新