暂停后继续计算与边界条件中的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函数是怎么回事,不应该是控制再读取的吧?它起到的作用是什么,又是在哪里调用的呢?不胜感激,祝大家元旦快乐:)