使用以网格为中心的 FVM 时如何表示 CFD 结果?

计算科学 流体动力学 插值 可视化
2021-12-22 17:05:42

我的变量存储在单元格的中心。如何将这些值传输到网格点?如果我计算代数平均值,可能会感到震惊。

2个回答

正如之前的评论中提到的,这取决于你的目标是什么。现代可视化软件(例如 Paraview)允许在单元中心或单元顶点处表示数据。此外,您可以即时切换并将数据从单元中心插入到顶点,反之亦然。在 paraview 中,这是使用“单元数据到点数据”过滤器(从单元中心到顶点)和点数据到单元数据(从单元顶点到单元中心)来实现的。我建议您研究一下,这是一种从一个可视化选项切换到另一个可视化选项的简单方法。但是,我建议除了“制作好看的电影部分”之外,您可以专注于可视化单元格中心的数据,因为这可以为您提供更多信息。如果你有说,棋盘效应,

这是我的 C++ 代码,用于以 tecplot 格式输出 FVM 数据文件。

void OutPut()
{
    int nbPoints=PT->Field.mesh().NodeNumber;
    int nbCells=PT->Field.mesh().CellNumber;
    string name="Energy.dat";
    ofstream outfile("../"+name);
    outfile<<" VARIABLES=\"X\",\"Y\",\"U\", \"V\", \"T\" "<<endl;
    outfile<< "ZONE N="<<nbPoints<<",E="<nbCells<<",ZONETYPE=FEQUADRILATERAL"    <<endl;
    outfile<< "DATAPACKING=block "<<endl;
    outfile<<"  VARLOCATION=( [1,2]=NODAL,[3,4,5]=CELLCENTERED )"<<endl;    for(int i=0; i<nbPoints;i++)
    {
        outfile<< setprecision(20)<<scientific<<PT->Field.mesh().Coordinate[i][0]<<"   "<<endl;
    }
    for(int i=0; i<nbPoints;i++)
    {
        outfile<< setprecision(20)<<scientific<<PT->Field.mesh().Coordinate[i][1]<<"   "<<endl;
    }

    for(int i=0; i<nbCells;i++)
    {
        outfile<<this->U.Field()[i]<<" "<<endl;
    }
    for(int i=0; i<nbCells;i++)
    {
        outfile<<this->V.Field()[i]<<" "<<endl;
    }
    for(int i=0; i<nbCells;i++)
    {
        outfile<<this->Field.Field()[i]<<" "<<endl;
    }

    for(int i=0; i<nbCells;i++)
    {
        if(PT->Field.mesh().Connection[i].size()==3)
        {
            for(unsigned int j=0; j<PT->Field.mesh().Connection[i].size();j++) 
            {
                outfile<<PT->Field.mesh().Connection[i][j]+1<<" "; 
            }
            outfile<<PT->Field.mesh().Connection[i][2]+1;
            outfile<<endl;      
         }

         if(PT->Field.mesh().Connection[i].size()==4)
         {
             for(unsigned int j=0; j<PT>Field.mesh().Connection[i].size();j++)
             {
                 outfile<<PT->Field.mesh().Connection[i][j]+1<<" "; 
             }
             outfile<<endl;     
          }
     }
     outfile.close();
}