新浪博客

gnuplot绘制OpenFOAM计算残差

2015-11-02 23:03阅读:
基本参照本文的代码,我对代码进行一点解释:
http://www.cfd-online.com/Forums/openfoam-solving/64146-tutorial-how-plot-residuals.html
第一步:计算的过程中一定要使用日志文件: 比如 turbFoam >log
第二步:在计算过程中或者计算结束之后都可以plot残差数据已对计算过程进行监控。绘制残差的代码如下:

set logscale y //将y坐标设为对数坐标
set title 'Residuals' //图形名称为Residuals
set ylabel 'Residual' //y轴名称为Residual
set xlabel 'Iteration' //x轴名称为Iteration,即迭代次数
plot '< cat log | grep 'Solving for Ux' | cut -d' ' -f9 | tr -d ','' title 'Ux' with lines,\
'< cat log | grep 'Solving for Uy' | cut -d' ' -f9 | tr -d ','' title 'Uy' with lines,\
'< cat log | grep 'Solving for Uz' | cut -d' ' -f9 | tr -d ','' title 'Uz' with lines,\
'< cat log | grep 'Solving for omega' | cut -d' ' -f9 | tr -d ','' title 'omega' with lines,\
'< cat log | grep 'Solving for k' | cut -d' ' -f9 | tr -d ','' title 'k' with lines,\
'< cat log | grep 'Solving for p' | cut -d' ' -f9 | tr -d ','' title 'p' with lines
pause 1 //暂停
reread //重新读取并绘图,以保证对计算结果实时监控
============================
需要解释的是每一行中 在文本中提取数据的linux命令
cat就是将读取文本,|为管道,将上一个命令的结果直接输入到下一个命令,grep为搜索带有Solving for Ux的行,然后使用cut命令以空格符为分隔符将这一行分隔,然后取第9个数据,使用tr命令将取得数据末尾的逗号,去掉,这就得到了Ux的初始残差。其他几行的意思都差不多。但是这样的处理方法有一个问题,当使用pimple算法是,需要迭代两次的压力项,这样每个迭代步就出现了两行完全相同的压力数据,使用这种提取方法无法分辨这两种数据,所以也就无法plot压力项的残差了。但是可以使用python绘图语言来解决这个问题
如我的另一篇博文所示:
http://blog.sina.cn/dpool/blog/s/blog_a0b4201d0102vq8o.html?vt=4

我的更多文章

下载客户端阅读体验更佳

APP专享