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



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

     --> 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函数是怎么回事,不应该是控制再读取的吧?它起到的作用是什么,又是在哪里调用的呢?

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



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


登录后回复
 

与 CFD中文网 的连接断开,我们正在尝试重连,请耐心等待