怎么对标量场进行体积积分求总量
-
如题,不用paraFoam处理,怎么求某个标量在整个计算区域的总量
-
两种方法,一个是在代码里加入一些操作,然后输出得到的量。另一个是使用functionObject后处理。
第一种方法:
使用举例
scalar sumHRRate = gSum(chemistry.dQ()());//总放热率等于每个网格放热率之和,这里的dQ单位是J/s totalHeatRR_ = fvc::domainIntegrate(chemistryQdot_); dimensionedScalar totalMass = fvc::domainIntegrate(rho);//总质量等于密度乘以网格体积,然后求和。 p.weightedAverage(mesh.V()).value() //就是缸内压力的平均值
gSum的功能是全场求和。
domainIntegrate 的功能是对某个物理量,乘以其网格体积,然后对所有网格求和。domainIntegrate(df) = gSum(fvc::volumeIntegrate(df))//df是被操作的场。
volumeIntegrate 的功能是对每个网格的某个物理量,乘以其网格体积,然后形成一个新的场。volumeIntegrate(df)=df.mesh().V()*df.field()//df是被操作的场
加权平均 weightedAverage:p.weightedAverage(weightField) = gSum(weightField*p)/gSum(weightField)
//这里的p是被操作的场,操作之后,dimension信息仍在。第二种方法:
在 controlDict 中加入:
functions { my_name { type volFieldValue; functionObjectLibs ("libfieldFunctionObjects.so"); fields (Qdot); writeFields no; operation volIntegrate; } }
然后在solver运行时,就会自动在case目录下生成postProcessing信息。
或者运行完之后,也可以用过运行OF自带的后处理工具postProcess:postProcess -fields '(Qdot)'
我这里的Qdot单位是[kg/m/s3],体积分之后的单位是J/s。区别
上述两个方法使用上的不同之处在于functionObject可以方便地对某个特定的Zone进行操作。加入这两个关键词:regionType和name。
functionObject 中针对 volFieldValue 一共有以下这些操作:none | No operation sum | Sum weightedSum | Weighted sum sumMag | Sum of component magnitudes average | Ensemble average weightedAverage | Weighted average volAverage | Volume weighted average weightedVolAverage | Weighted volume average volIntegrate | Volume integral weightedVolIntegrate | Weighted volume integral min | Minimum max | Maximum CoV | Coefficient of variation: standard deviation/mean
-
@ 李东岳 之前可以编辑已发布的帖子,现在没有这个功能了?
-
嗯,之前属于设置上的疏忽,现在已经更改,参见 http://www.cfd-china.com/topic/223/
“CFD中文网”为了知识的可追溯性,在用户发帖10分钟后不可更改以及删除帖子,因此在发帖、回帖之前,请对内容仔细考量,有删帖需求请联系我;
类似制度参考小木虫和cfd-online
4/5