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

时间:2015-04-09 04:54:31

标签: javascript fluid-dynamics

我最近一直在研究模型this scholarly article.的JS程序。我最近遇到的问题是:

  

“表面张力通常是由颗粒之间的吸引力引起的。   在液体中,这种吸引力会抵消,但对于分子而言   在表面附近,邻居分布的不对称导致a   对流体的非零净力。“

我认为这种情况在双密度松弛法中自然发生,但我的program似乎没有显示出它的迹象。

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

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);

  }
}

1 个答案:

答案 0 :(得分:0)

Here's one表现得更像是一种可识别的低粘度液体。这种模拟似乎在数字上不稳定,而且帧速率越低。

我发现我认为您的代码存在一些问题。

  • 在我阅读论文时,L ij 是跨时间步长保持的弹簧长度的三角矩阵的元素; gamma和alpha控制它变化的速率。该矩阵未保留在原始代码中,因此粘弹性不起作用。

  • 粒子间碰撞是不必要的,实际上会进一步破坏模拟的稳定性。粘度传递中的β提供了排斥力。

  • p 0 / k的比率不能太低,否则会以快速振荡的崩溃簇的形式出现不稳定。当群集破裂时,你会得到单个粒子从墙壁上反弹,就像失控的Flubber球一样。

  • 墙壁仍然存在一些问题:即使我做了调整,颗粒也会沿着柱子排成一排,新的颗粒被压在底部,因为旧的颗粒从顶部喷出,形成流体中有一种双涡旋。

  • 我正在尝试设置弹簧长度的下限,这有时可以稳定其他不稳定的参数集。关于它建模的物理属性,我对袖口的猜测是dilatant行为。