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. OF文件读写

OF文件读写

已定时 已固定 已锁定 已移动 OpenFOAM
12 帖子 4 发布者 8.1k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • S 离线
    S 离线
    Samuel-Tu
    写于2020年1月7日 02:58 最后由 编辑
    #1

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

    1
    5
    7
    45
    78288
    12554
    
    1 条回复 最后回复
  • S 离线
    S 离线
    Samuel-Tu
    写于2020年1月7日 03:08 最后由 编辑
    #2

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

    1 条回复 最后回复
  • 马 离线
    马 离线
    马乔 大神
    写于2020年1月7日 03:46 最后由 编辑
    #3

    OFstream

    装逼没输过,吵架没赢过!

    S 1 条回复 最后回复 2020年1月7日 07:59
  • S 离线
    S 离线
    Samuel-Tu
    在 2020年1月7日 07:59 中回复了 马乔 最后由 编辑
    #4

    @马乔 感谢

    1 条回复 最后回复
  • S 离线
    S 离线
    Samuel-Tu
    写于2020年1月7日 08:05 最后由 编辑
    #5

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

    1 条回复 最后回复
  • S 离线
    S 离线
    Samuel-Tu
    写于2020年1月7日 08:11 最后由 编辑
    #6

    找到了

    if(runTime.writeTime())
    

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

    1 条回复 最后回复
  • 马 离线
    马 离线
    马乔 大神
    写于2020年1月7日 09:31 最后由 编辑
    #7
    #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:

    装逼没输过,吵架没赢过!

    S 1 条回复 最后回复 2020年1月7日 11:24
  • S 离线
    S 离线
    Samuel-Tu
    在 2020年1月7日 11:24 中回复了 马乔 最后由 编辑
    #8

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

    1 条回复 最后回复
  • 小 离线
    小 离线
    小考拉
    写于2020年2月3日 13:16 最后由 编辑
    #9

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

    S 1 条回复 最后回复 2020年2月4日 05:59
  • S 离线
    S 离线
    Samuel-Tu
    在 2020年2月4日 05:59 中回复了 小考拉 最后由 编辑
    #10

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

    1 条回复 最后回复
  • 小 离线
    小 离线
    小考拉
    写于2020年2月7日 03:44 最后由 编辑
    #11

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

    1 条回复 最后回复
  • C 离线
    C 离线
    cxzhmg
    写于2020年2月8日 23:17 最后由 编辑
    #12

    @马乔 在 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吗?那怎么知道是在这一步的什么时候输出?是计算前还是计算后?

    1 条回复 最后回复
2020年1月7日 02:58

6/12

2020年1月7日 08:11

未读 6
2020年2月8日 23:17
  • 登录

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