关于OpenFOAM的输入输出



  • Hello Foamers:
    目前在编译新的求解器和边界条件,遇到了一些困难,萌新想请教几个OpenFOAM的输入输出问题
    (1)一般而言,怎样将参数输入求解器?之前尝试了IOobject的方法,输入了dimensionedScalar类型的参数,但是如果想要输入int或是double类型的参数,编译就会报错,请问应该怎样解决?
    (2)怎样在新编译的边界上读入文件里的数据?目前在编译一个新的动边界条件,需要用到每一步求解器中计算的参数实时更新,请问在边界条件里怎样读取case中某个文件里的参数呢?
    谢谢!


  • 网格教授 OpenFOAM教授 管理员

    这个问题看起来有点难以简单回复 :zoule:



  • @东岳 哈哈哈
    感谢东岳老师
    第一个问题已经解决了
    请问第二个问题能否给点思路提示
    就是怎样从fvMotionSolver的边界条件里读constant或者时间文件里的参数
    万分感谢


  • 网格教授 OpenFOAM教授 管理员

    就是怎样从fvMotionSolver的边界条件里读constant或者时间文件里的参数

    在你的fvMotionSolver里面,定义一个私有成员dictionary,然后初始化就可以了。要读取时间步下面的场,场要定义为MUST_READ



  • @东岳 感谢东岳老师的回复!
    是这样的
    我目前主要是在oscillatingDisplacement这个边界的基础上修改
    下面是oscillatingDisplacement中的一个构造函数

    oscillatingDisplacementPointPatchVectorField::
    oscillatingDisplacementPointPatchVectorField
    (
        const pointPatch& p,
        const DimensionedField<vector, pointMesh>& iF,
        const dictionary& dict
    )
    :
        fixedValuePointPatchField<vector>(p, iF, dict),
        amplitude_(dict.lookup("amplitude")),
        omega_(readScalar(dict.lookup("omega")))
    {
        if (!dict.found("value"))
        {
            updateCoeffs();
        }
    }
    

    按我的理解
    这个dict使用了Case中的pointDisplacement这个dictionary进行初始化
    我尝试了在构造函数中再新增一个dictionary
    但是编译一直有问题

    我目前的想法是在每个时间步
    在求解器中用ofstream强制改写时间文件夹里pointDisplacement里面的某个参数
    但是总感觉这样计算容易造成错误

    烦请东岳老师指点
    万分感谢!



  • @东岳 东岳老师
    我又仔细检查了一下代码
    由于oscillatingDisplacementPointPatchVectorField引用了fixedValuePointPatchVectorField
    fixedValue又引用了valuePointPatchVectorField
    构造函数模板以及操作符都是在valuePointPatchVectorField里面定义的
    因此如果在构造函数里变成两个dictionary
    考虑到初始化以及后续的运算符操作似乎需要改比较多的内容

    我目前的想法是在每个时间步
    在求解器中用ofstream强制改写时间文件夹里边界的dictionary的某个参数
    但是总感觉这样计算容易造成错误

    请问还有其他思路吗?
    非常感谢!