我的变量存储在单元格的中心。如何将这些值传输到网格点?如果我计算代数平均值,可能会感到震惊。
使用以网格为中心的 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();
}
其它你可能感兴趣的问题