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. 暂停后继续计算与边界条件中的write函数

暂停后继续计算与边界条件中的write函数

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

    自己的边界写的差不多了,但是最最近发现一个很尴尬的问题,就是用我的边界计算时,如果暂停了,没有办法继续算。一般都会提示如下:

     --> FOAM FATAL IO ERROR: 
      cannot find file
    
      file: /home/wangdongxu/OpenFOAM-4.0/tutorials/tuiban/pistonFlume/constant/tuibangenerationdic     at line 0.
    
    From function regIOobject::readStream()
    in file db/regIOobject/regIOobjectRead.C at line 72.
    
    FOAM exiting
    

    对应到代码就是这部分:

        fileName objPath;
        if (watchIndex_ != -1)
        {
            // File is being watched. Read exact file that is being watched.
            objPath = time().getFile(watchIndex_);
        }
        else
        {
            // Search intelligently for file
            objPath = filePath();
    
            if (!objPath.size())
            {
                FatalIOError
                (
                    "regIOobject::readStream()",
                    __FILE__,
                    __LINE__,
                    objectPath(),
                    0
                )   << "cannot find file"
                    << exit(FatalIOError);
            }
        }
    

    可以看出,就是读取我定义的字典路径出问题了,我的字典定义在边界条件中暂时没有发现有问题:

    IOdictionary tuibanwavegenerationdic
    (
        IOobject
        (
            tuibandicname,
            this->db().time().constant(),
            this->db(),
            IOobject::MUST_READ,
            IOobject::NO_WRITE
        )
    );  
    

    后来我问了一下别人,有人说是边界条件中一般出现的write函数控制计算暂停后读取,但是看代码觉得这个应该是输出的函数。可是偏偏我又没有发现这个函数在哪里调用了,输出的东西也不知道哪去了。所以现在不知道暂停后不能继续计算是这个write函数的问题,还是我的边界的问题?
    下面是wirte函数,找了一个自带边界的标准函数:

    H文件中声明的部分

            //- Update the coefficients associated with the patch field
            virtual void updateCoeffs();
    
        //- Write
        virtual void write(Ostream&) const;
    

    第一个函数就不用说了,是更新边界的,第二个是write函数,我就搞不清楚它在哪调用的了,下面是这个函数:

     void oscillatingDisplacementPointPatchVectorField::write(Ostream& os) const
      {   
      pointPatchField<vector>::write(os);
      os.writeKeyword("amplitude")
          << amplitude_ << token::END_STATEMENT << nl;
      os.writeKeyword("omega")
          << omega_ << token::END_STATEMENT << nl;
       writeEntry("value", os);
      }
    

    求大神能指导一下,我这个不能继续计算的问题是怎么回事,这个路径是没有错误的,因为编译的时候都是那个路径。
    其次,那个write函数是怎么回事,不应该是控制再读取的吧?它起到的作用是什么,又是在哪里调用的呢?

    不胜感激,祝大家元旦快乐:)

    1 条回复 最后回复
  • C 离线
    C 离线
    CFD中文网
    写于 最后由 编辑
    #2

    如果从0时间步开始计算就没问题?从非0时间步开始就有问题?是这个意思么

    CFD中国标准用户测试帐号
    目前由徐笑笑登录

    1 条回复 最后回复

  • 登录

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