Skip to content
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠
CFD中文网

CFD中文网

  1. CFD中文网
  2. OpenFOAM
  3. 如何获得流域中等值面的最小流向坐标?

如何获得流域中等值面的最小流向坐标?

已定时 已固定 已锁定 已移动 OpenFOAM
4 帖子 2 发布者 2.8k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 香柏树香 离线
    香柏树香 离线
    香柏树
    写于 最后由 编辑
    #1

    最近在写一个燃烧流场后处理的代码,目的是要提取出以燃烧释热率(Qdot)为1E+10J/m3/s的等值面在流向(y方向)的最小坐标,将其定义为Flame lift-off。目前在OF教程中的aachenBomb案例(图1)基础上进行测试,编译成功的代码如下。但是输出的Flame lift-off值(图2)和paraview中提取的流场数据不一致;比如在0.0004s时Flame lift-off值大概是y=0.075,但是后处理程序输出的是0.1。应该是程序没有遍历整个流域的网格,请问大家知道怎么解决么?个人C++小白,如果需要C++语句的撰写修改,请大家指出方向,我去学习下,非常感谢!

    \*---------------------------------------------------------------------------*/
    
    #include "argList.H"
    #include "Time.H"
    #include "timeSelector.H"
    #include "fvCFD.H"
    #include "transformGeometricField.H"
    
    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
    
    int main(int argc, char *argv[])
    {
        timeSelector::addOptions();
        #include "addRegionOption.H"
     
        #include "setRootCase.H"
    
        #include "createTime.H"
        instantList timeDirs = timeSelector::select0(runTime, args);
        #include "createMesh.H"
    
        std::ofstream file("Flame_lifty.plt",ios_base::app); // open a file ++
        forAll(timeDirs, timeI)
        {
        runTime.setTime(timeDirs[timeI], timeI);
        Info<< "Reading field Qdot\n" << endl;
    
        volScalarField Qdot
        (
            IOobject
            (
                "Qdot",
                runTime.timeName(),
                mesh,
                IOobject::MUST_READ,
                IOobject::NO_WRITE
            ),
            mesh
        );
    
        
        scalar MinYlocation = 0.1;// maxmimum y position in domain
        //scalar MinQdot = 0.0;
        label index_ = 0;
      
    
        forAll(Qdot, cellI)
        {
          
         
          if (Qdot[cellI] == scalar(10000000000.0))
          
          {
           // Info << "caculating y position" << endl;
            scalar y = mesh.C()[cellI].component(vector::Y);
            if (y < MinYlocation)
            {
              MinYlocation = y; 
            }
          }
        }
        MinYlocation = mesh.C()[index_].component(vector::Y);
        Info << "   Time= " << runTime.value()<<"," << " Flame lift-off=" << MinYlocation  << endl ;
        file << runTime.value() << " " <<MinYlocation << " " << std::endl;
         
        
        }    
        file.close();  //close the file ++
        return 0;
    }
    
    
    // ************************************************************************* //
    

    c601db89-8ea3-4deb-9d90-76851118b4db-图片.png

    1 条回复 最后回复
  • I 离线
    I 离线
    ir77
    写于 最后由 编辑
    #2

    @香柏树 楼主您好,请问这个问题您找到解决方法了吗

    香柏树香 1 条回复 最后回复
  • 香柏树香 离线
    香柏树香 离线
    香柏树
    在 中回复了 ir77 最后由 编辑
    #3

    @ir77 解决了,需要设置一个误差限,使if语句里二者的值小于误差限就默认二者相等了。

    I 1 条回复 最后回复
  • I 离线
    I 离线
    ir77
    在 中回复了 香柏树 最后由 编辑
    #4

    @香柏树 好的,多谢楼主分享

    1 条回复 最后回复

  • 登录

  • 登录或注册以进行搜索。
  • 第一个帖子
    最后一个帖子
0
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]