OF文件读写



  • 一直没找到如何用OF进行文件读写,目标是在计算的过程中,把某一个scalar数输出到一个文本里面(例如叫 result.txt),似乎IOdictionary可以做到,但是不知道具体如何实现,请问大家有没有类似的代码参考一下。是输出到同一个文本里面,例如result.txt最终包含数据为:

    1
    5
    7
    45
    78288
    12554
    


  • 再解释一下,例如我有一个scalar F, F是随计算变化的,而我想知道F随时间的变化规律,所以需要对F进行输出。为了方便以后数据处理,希望把F的值输出到同一个文本文件里面。


  • 离散相副教授

    OFstream



  • @马乔 感谢



  • 还有个问题是,OFstream能否像runTime.write()一样受到controlDict里面的输出间隔限制呢?目的主要是为了和runTime.write()对应,因为runTime.write()可能是每隔5个时间步长输出一次的,所以我想OFstream也是每隔五个时间步写入一次。
    有没有某个函数能判断当前time是否需要write()呢?



  • 找到了

    if(runTime.writeTime())
    

    如果当前时间是需要写入的时间则会返回true


  • 离散相副教授

    #include "fvCFD.H"
    
    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
    //
    
    class proxyWriter
    :
        public regIOobject
    {
    private:
        scalar value_;
    
        proxyWriter(const proxyWriter&) = delete;
        void operator=(const proxyWriter&) = delete;
    
    public:
        proxyWriter(const IOobject& io, const scalar& value)
        :
    	regIOobject(io),
    	value_(value)
        {
        }
    
        virtual bool writeData(Ostream& os) const
        {
    	os<<value_;
    	return os.good();
        }
    
        proxyWriter& operator++()
        {
    	++value_;
    	return *this;
        }
    };
    
    
    int main(int argc, char *argv[])
    {
        #include "setRootCaseLists.H"
        #include "createTime.H"
    
        // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
    
        proxyWriter writer
        (
    	IOobject
    	(
    	    "value",
    	    runTime.timeName(),
    	    runTime,
    	    IOobject::NO_READ,
    	    IOobject::AUTO_WRITE
    	),
    	0.
        );
    
        Info<< "\nStarting time loop\n" << endl;
    
        while (runTime.loop())
        {
            Info<< "Time = " << runTime.timeName() << nl << endl;
    
    	++writer;
    
            runTime.write();
    
            runTime.printExecutionTime(Info);
        }
    
        Info<< "End\n" << endl;
    
        return 0;
    }
    :chigua:


  • @马乔 非常感谢,我好好研究下



  • 您好,我也有一些关于of 读写的问题,您可以给一个联系方式吗?咱们仔细交流一下,谢谢



  • @小考拉 直接在论坛上说啊,这样大家都能都收获。。



  • 您好,我目前对 源程序 添加了读写IOobject代码,但编译存在一定问题,您可以指点一下吗?谢谢,帖子如下:
    http://www.cfd-china.com/topic/3329/湍流模型里面如何输出动态系数/2



  • @马乔OF文件读写 中说:

    #include "fvCFD.H"
    
    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
    //
    
    class proxyWriter
    :
        public regIOobject
    {
    private:
        scalar value_;
    
        proxyWriter(const proxyWriter&) = delete;
        void operator=(const proxyWriter&) = delete;
    
    public:
        proxyWriter(const IOobject& io, const scalar& value)
        :
    	regIOobject(io),
    	value_(value)
        {
        }
    
        virtual bool writeData(Ostream& os) const
        {
    	os<<value_;
    	return os.good();
        }
    
        proxyWriter& operator++()
        {
    	++value_;
    	return *this;
        }
    };
    
    
    int main(int argc, char *argv[])
    {
        #include "setRootCaseLists.H"
        #include "createTime.H"
    
        // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
    
        proxyWriter writer
        (
    	IOobject
    	(
    	    "value",
    	    runTime.timeName(),
    	    runTime,
    	    IOobject::NO_READ,
    	    IOobject::AUTO_WRITE
    	),
    	0.
        );
    
        Info<< "\nStarting time loop\n" << endl;
    
        while (runTime.loop())
        {
            Info<< "Time = " << runTime.timeName() << nl << endl;
    
    	++writer;
    
            runTime.write();
    
            runTime.printExecutionTime(Info);
        }
    
        Info<< "End\n" << endl;
    
        return 0;
    }
    :chigua:
    

    @马乔 @Samuel-Tu 请问这个怎么用?这是重新编译一个lib然后link到controlDict吗?那怎么知道是在这一步的什么时候输出?是计算前还是计算后?


Log in to reply
 

京ICP备15017992号-2