流体c ++中的Jacobi迭代对象

时间:2013-04-02 22:37:05

标签: c++ fluid-dynamics

我正在编写一个程序来计算物体周围某个电流的速度,例如一个正方形。现在,我使用Jacobi Iteration方法,当我运行它时,结果不是我所期待的。我不知道我做错了什么。我有2个类,一个使我无法调整的Grid,另一个使用参数'voneindig'创建一个对象。

如果我制作一个正方形和一个网格并运行Iterate()函数,似乎我的方形对象变大了。 (我的原始广场越来越零了)

成员函数getStatusElement()是我用正方形所在的网格制作的网格,其他位置为零。

    void Object::Iterate()
{
double gem=1, jacobielement, som; //locale variabelen
double epsilon=pow(10,-5); //convergentiecriterium
const int d= grid1.GetDimension(); //dimension of the grid
while(gem > epsilon)
{
  for( int i = 0; i < d; i++ )
  {
    for( int j = 0; j < d; j++ )
    {
    grid2.SetElement(i,j,grid1.GetElement(i,j));
    }
  }

  for(int i=1; i<d-1; ++ i)
  {
    for(int j=1; j<d-1; ++ j)
    {
        if( grid1.getStatusElement(i,j) == 0 )
        {//jacobie
        jacobielement= (grid1.GetElement(i,j+1) + grid1.GetElement(i,j-1) + grid1.GetElement(i+1,j) + grid1.GetElement(i-1,j))/4;

        grid1.SetElement(i,j,jacobielement);
        }
    }
  }
  som=0;
  for(int i=0; i<d; ++ i){
    for(int j=0;j<d; ++ j){
    //Convergention
    som=som+std::abs(grid1.GetElement(i,j)-grid2.GetElement(i,j));
    }
  }
  gem= som/pow(d,2);
}
}

我希望我已经为这个问题提供了enoug信息,否则我可以给你我所有的代码。 非常感谢!

0 个答案:

没有答案