Navigation

    CFD中文网

    CFD中文网

    • Login
    • Search
    • 最新

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

    OpenFOAM
    2
    2
    1679
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • C
      CFDngu last edited by

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

       --> 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 Reply Last reply Reply Quote
      • C
        CFD中文网 last edited by

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

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

        1 Reply Last reply Reply Quote
        • First post
          Last post

        CFD中文网 | 东岳流体 | 京ICP备15017992号-2
        论坛登录问题反馈可联系 li.dy@dyfluid.com