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里simple.loop()的咨询

关于OpenFOAM里simple.loop()的咨询

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

    c6091247-02d9-44bb-be96-ea43d883446e-image.png

    我有ABC三个程序,想写在同一个程序里,分别用simple.loop(),计算完A在计算B,最后计算 C。但是当A计算完收敛时,B,C就没有进行计算,我想请教一下simple.loop()会返回一个什么值,有什么办法可以对B,C也进行计算。

    1 条回复 最后回复
  • 李东岳李 离线
    李东岳李 离线
    李东岳 管理员
    写于 最后由 编辑
    #2

    很多次好多人都问我一个具体函数是干什么用的,这种很难回答,因为OpenFOAM这面很多函数都是各种嵌套,要摸到底要翻个底朝天,比如这就是我对你的simple.loop(runTime)摸底找出来的函数,你自己总结下,主要就是收敛了之后,就设定一个截止时间,返回false了。

    另外,你这种,不如自己写一个while循环或者for循环更合适

    simpleControl.C->time.loop();

    bool Foam::simpleControl::loop(Time& time)
    {
        read();
    
        if (!endIfConverged(time))
        {
            storePrevIterFields();
        }
    
        return time.loop();
    }
    

    Time.C->loop();

    bool Foam::Time::loop()
    {
        bool running = run();
    
        if (running)
        {
            operator++();
        }
    
        return running;
    }
    

    Time.C->run();

    bool Foam::Time::run() const
    {
        bool running = this->running();
    
        if (!subCycling_)
        {
            if (!running && timeIndex_ != startTimeIndex_)
            {
                functionObjects_.execute();
                functionObjects_.end();
            }
        }
    
        if (running)
        {
            if (!subCycling_)
            {
                const_cast<Time&>(*this).readModifiedObjects();
    
                if (timeIndex_ == startTimeIndex_)
                {
                    functionObjects_.start();
                }
                else
                {
                    functionObjects_.execute();
                }
            }
    
            // Re-evaluate if running in case a function object has changed things
            running = this->running();
        }
    
        return running;
    }
    

    Time.C->running();

    bool Foam::Time::running() const
    {
        return value() < (endTime_ - 0.5*deltaT_);
    }
    

    Time.C->setTime;

    void Foam::Time::setTime(const Time& t)
    {
        value() = t.value();
    }
    

    convergenceControl.C->endIfConverged;

    bool Foam::convergenceControl::endIfConverged(Time& time)
    {
        if (converged())
        {
            if (time.writeTime())
            {
                time.stopAt(Time::stopAtControl::noWriteNow);
                time.setEndTime(time);
            }
            else
            {
                time.writeAndEnd();
            }
    
            return true;
        }
        else
        {
            return false;
        }
    }
    

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    1 条回复 最后回复
  • 大 离线
    大 离线
    大喵
    写于 最后由 编辑
    #3

    你好,请问这个问题你解决了吗?我也遇到类似问题。如果A程序是稳态问题,B程序是瞬态问题。而且AB还要循环多次求解。请问这个问题该如何解决呢?

    1 条回复 最后回复

  • 登录

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