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. OpenFOAM小代码

OpenFOAM小代码

已定时 已固定 已锁定 已移动 OpenFOAM
41 帖子 15 发布者 45.1k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 马乔马 离线
    马乔马 离线
    马乔 大神
    写于 最后由 编辑
    #4
    wordHashSet unMatchedkeys(dict.toc());
    forAll(names, nameI)
    {
        const word& name = names[nameI];
        const entry* ePtr = dict.findEntry(name, keyType::REGEX);
        if(ePtr)
           unMatchedKeys.erase(ePtr->keyWord());
    }
    

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

    1 条回复 最后回复
  • 马乔马 离线
    马乔马 离线
    马乔 大神
    写于 最后由 李东岳 编辑
    #5
    class base
    {
    private:
        bool ownedByRegistry_;
    public:
        template<class Type>
        static void store(Type* p)
        {
    	//p->base::ownedByRegistry_ =true;
    	p->ownedByRegistry_ = true;
    	p->printInfo();
        }
    };
    
    class derived
    :public base
    {
    public:
        derived() {}
        void printInfo()
        {
    	Info << "derived class" << endl;
        }
    };
    
    int main(int argc, char *argv[])
    {
    ...
        derived d;
        base::store(&d);
    ...
    }
    

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

    1 条回复 最后回复
  • D 离线
    D 离线
    D.Benjamin
    写于 最后由 李东岳 编辑
    #6

    @东岳 在 OpenFOAM小代码 中说:

    东岳老师,请教几个小问题:

    1. 在编译过程中报错:'mesh_' was not declared,所以mesh_是不可以直接使用的,但是我不太理解什么是类内可以调用的成员变量,感觉速度场U,温度场T等都是类内可以调用的成员变量?
    2. 如果mesh_不可获取,U_可获取。上面说mesh_是类内可以调用的成员变量,然而U_又是什么?
    3. 声明一个tmp变量,mesh_表示什么意思呢?在声明U、T、p等场的时候,mesh_的位置常常写的是mesh

    期待回复,祝好!

    OpenFOAM初学者,希望和大家共同交流

    1 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    写于 最后由 编辑
    #7

    @D-Benjamin

    我不太理解什么是类内可以调用的成员变量

    我说的这个东西,就是类的成员变量。如果存在成员变量mesh, 它在OpenFOAM类内都被定义为mesh_,在类外那肯定是mesh,后面有没有_只是写法风格,OpenFOAM类里面的变量都带_,类外面的变量都没有_。

    OpenFOAM这面类继承会涉及到好几层。你可以一层一层的找有没有mesh_的声明,你可以直接用mesh_看看是否报错,没报错就是声明了,报错了就是没生命。

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    1 条回复 最后回复
  • 霜 离线
    霜 离线
    霜染丹枫
    在 中回复了 Zhong-combustion 最后由 编辑
    #8

    @Zhong-combustion 你好,我目前也在用LES做加热管流的湍流研究,关于湍流入口的设置看了一些资料,如有兴趣,可以加个qq:1191364394,共同学习探讨。

    1 条回复 最后回复
  • Z 离线
    Z 离线
    Zhy2022
    写于 最后由 编辑
    #9

    东岳老师您好,请问如果是两相流中相分数(比如alpha.particle)随时间变化,它在codeFixedValue中应该怎么定义呢?

    李东岳李 1 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    在 中回复了 Zhy2022 最后由 编辑
    #10

    @Zhy2022 codedFixedValue上面不是有嘛,你举一反三一下咩

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    Z 2 条回复 最后回复
  • Z 离线
    Z 离线
    Zhy2022
    在 中回复了 李东岳 最后由 编辑
    #11

    @东岳 东岳老师,没能找出报错原因:135: ,只能再来麻烦一下您:

    INLET1
        {
            type            codedFixedValue;
            value           $internalField;
            name            stepInjection;
            redictType      variedValue;
            code
            #{
                 scalar alphapar = this->patch().fluid().phase();
    
                 scalar t = this->db().time().value();
           
                 if(t >= 0 && t<=5)
                 {
                      alphapar = 0;
                 }
                 
                 else
    	     {
    	          alphapar = 0.15;
    	     }
    
    	     operator==(alphapar)
    
             #};
            
        }
    

    56e49c26-63f1-479c-bd8e-d479760394d9-image.png

    1 条回复 最后回复
  • Z 离线
    Z 离线
    Zhy2022
    在 中回复了 李东岳 最后由 编辑
    #12

    @东岳 东岳老师,问题已解决!无法编译与文件路径有关
    ee3e6b1d-91b1-4633-879c-41502c56cf20-image.png

    1 条回复 最后回复
  • V 离线
    V 离线
    veen
    写于 最后由 编辑
    #13

    fvOption小工具

    根据GitHub上一个python脚本改写了一个生成fvOption的小工具 https://github.com/Veenxz/fvSchemes
    用Foam没有多久,各位大佬可以多提提意见。

    # version 2.0
    # Based on https://github.com/Carlopasquinucci/fvSchemes
    # Generation by Veenxz
    # relaesed under license GPL GNU 3.0
    
    steady = True
    pseudo_transient = False
    precision = 2    # First order 1 or Second order 2
    unbounded = False
    LUST = False
    secondorder = True
    
    maxOrtho = 80
    maxSkew = 20
    
    # Header and Footer
    h = [
        "/*--------------------------------*- C++ -*----------------------------------*|",
        "| =========                 |                                                 |",
        "| \\\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |",
        "|  \\\    /   O peration     | Website:  https://openfoam.org                  |",
        "|   \\\  /    A nd           | Version:  7                                     |",
        "|    \\\/     M anipulation  |                                                 |",
        "\*---------------------------------------------------------------------------*/",
        "FoamFile", "{", "    version     2.0;", "    format      ascii;",
        "    class       dictionary;", '    location    "system";', "    object      fvSchemes;",
        "}",
        "// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //",
        ""
    ]
    footer = '\n// ************************************************************************* //'
    
    nonOrthogonalCorrectors = 1
    if (maxOrtho) > 80:
        print(
            'Warning: mesh is not so nice. Use 3 nonOrthogonalCorrectors in fvSolution file'
        )
        nonOrthogonalCorrectors = 3
    if (maxSkew) > 8:
        print('Warning: mesh is not so nice')
    
    if (maxOrtho) > 80:
    
        gradSchemes = (
            '{\n    default          cellLimited Gauss linear 0.5;\n'
               '    grad(U)          faceLimited Gauss linear 1.0;\n}'
        )
        divSchemes = (
            '{\n    div(phi,U)       Gauss linearUpwind grad(U);\n'
               '    div(phi,omega)   Gauss upwind;\n'
               '    div(phi,k)       Gauss upwind;\n'
               '    div(phi,e)       Gauss upwind;\n'
               '    div((nuEff*dev(T(grad(U))))) Gauss linear;\n}'
        )
        laplacianSchemes = (
            '{\n    default          Gauss linear limited 0.333;\n}'
        )
        snGradSchemes = (
            '{\n    default          Gauss linear limited 0.333;\n}'
        )
    
        blending = 0.2
        nonOrthogonalCorrectors = 3
    
    if (maxOrtho) > 70:
    
        gradSchemes = (
            '{\n    default          cellLimited Gauss linear 0.5;\n'
               '    grad(U)          cellLimited Gauss linear 1.0;\n}'
        )
        divSchemes = (
            '{\n    div(phi,U)       Gauss linearUpwind grad(U);\n'
               '    div(phi,omega)   Gauss linearUpwind grad(omega);\n'
               '    div(phi,k)       Gauss linearUpwind grad(k);\n'
               '    div(phi,e)       Gauss linearUpwind grad(e);\n'
               '    div((nuEff*dev(T(grad(U))))) Gauss linear;\n}'
        )
        laplacianSchemes = (
            '{\n    default          Gauss linear limited 0.5;\n}'
        )
        snGradSchemes = (
            '{\n    default          Gauss linear limited 0.5;\n}'
        )
    
        blending = 0.5
        nonOrthogonalCorrectors = 3
    
    if (maxOrtho) > 60:
    
        gradSchemes = (
            '{\n    default          cellMDLimited Gauss linear 0.5;\n'
               '    grad(U)          cellMDLimited Gauss linear 0.5;\n}'
        )
        divSchemes = (
            '{\n    div(phi,U)       Gauss linearUpwind grad(U);\n'
               '    div(phi,omega)   Gauss linearUpwind grad(omega);\n'
               '    div(phi,k)       Gauss linearUpwind grad(k);\n'
               '    div(phi,e)       Gauss linearUpwind grad(e);\n'
               '    div((nuEff*dev(T(grad(U))))) Gauss linear;\n}'
        )
        laplacianSchemes = (
            '{\n    default          Gauss linear limited 0.777;\n} '
        )
        snGradSchemes = (
            '{\n    default          Gauss linear limited 0.777;\n} '
        )
    
        blending = 0.7
        nonOrthogonalCorrectors = 2
    
    if (maxOrtho) > 0:
    
        gradSchemes = (
            '{\n    default          cellMDLimited Gauss linear 0;\n'
               '    grad(U)          cellMDLimited Gauss linear 0.333;\n}'
        )
        divSchemes = (
            '{\n    div(phi,U)       Gauss linearUpwind grad(U);\n'
               '    div(phi,omega)   Gauss linearUpwind grad(omega);\n'
               '    div(phi,k)       Gauss linearUpwind grad(k);\n'
               '    div(phi,e)       Gauss linearUpwind grad(e);\n'
               '    div((nuEff*dev(T(grad(U))))) Gauss linear;\n}'
        )
        laplacianSchemes = (
            '{\n    default          Gauss linear limited 0.95;\n}'
        )
        snGradSchemes = (
            '{\n    default          Gauss linear limited 0.95;\n}'
        )
    
        blending = 0.8
        nonOrthogonalCorrectors = 1
    
    if (LUST):
        gradSchemes = (
            '{\n    default          Gauss linear;\n'
               '    grad(U)          cellMDLimited leastSquares 1;\n}'
        )
        divSchemes = (
            '{\n    div(phi,U)       Gauss LUST grad(U);\n'
               '    div(phi,omega)   Gauss LUST grad(omega);\n'
               '    div(phi,k)       Gauss LUST grad(k);\n'
               '    div(phi,e)       Gauss LUST grad(e);\n'
               '    div((nuEff*dev(T(grad(U))))) Gauss linear;\n}'
        )
        laplacianSchemes = (
            '{\n    default          Gauss linear corrected;\n}'
        )
        snGradSchemes = (
            '{\n    default          Gauss linear corrected;\n}'
        )
        
        blending = 0.9
        nonOrthogonalCorrectors = 1
    
    if (steady):
        ddtSchemes = (
            '{\n    default          steadyState;\n}'
        )
        if (pseudo_transient):
                    ddtSchemes = (
                        '{\n    default          localEuler;\n}'
                    )
    else:
        ddtSchemes = (
            '{\n    default           CrankNicolson ' + str(blending) + ' ;\n}'
        )
        if precision == 1:
            ddtSchemes = (
                '{\n    default           Euler;\n}'
            )
        if (unbounded):
            ddtSchemes = (
                '{\n    default           backward;\n}'
            )
    
    
    wallDist = (
        "{\n    method           meshWave;\n}"
    )
    
    #open fvSchemes and write inside
    
    f = open("fvSchemes", "w")
    
    for i in h:
    	f.write(i + "\n")
    
    f.write("ddtSchemes" + "\n")
    f.write(ddtSchemes + "\n")
    f.write("\n")
    f.write("gradSchemes" + "\n")
    f.write(gradSchemes + "\n")
    f.write("\n")
    f.write("divSchemes" + "\n")
    f.write(divSchemes + "\n")
    f.write("\n")
    f.write("laplacianSchemes" + "\n")
    f.write(laplacianSchemes + "\n")
    f.write("\n")
    f.write("snGradSchemes" + "\n")
    f.write(snGradSchemes + "\n")
    f.write("\n")
    f.write("wallDist" + "\n")
    f.write(wallDist + "\n")
    f.write(footer)
    
    f.close()
    
    print('File fvSchemes created')
    
    
    李东岳李 V 2 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    在 中回复了 veen 最后由 编辑
    #14

    @veen 厉害厉害 :146: :146:

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    1 条回复 最后回复
  • V 离线
    V 离线
    veen
    在 中回复了 veen 最后由 编辑
    #15

    @veen 这个代码还有些格式没法用……我回头测试了再放到github大家看仓库里边的代码就好了。

    1 条回复 最后回复
  • H 离线
    H 离线
    hongjiewang
    写于 最后由 编辑
    #16

    @李东岳 在 OpenFOAM小代码 中说:

    IOField<scalar> utau
    (
    IOobject
    (
    "utau",
    runTime.constant(),
    "../postProcessing",
    mesh,
    IOobject::NO_READ,
    IOobject::AUTO_WRITE
    ),
    scalarField(totalFSize,0.0)
    );

    请问老师,如果我想要在postProcessing中输出一个标量,他只是一个数,并不是场量,我应该怎么定义他的类型。上面这种方法是不是只适应于场量的输出。我想输出的是下面c的数值。

    const volScalarField& b = mesh().lookupObject<volScalarField>("alpha.liquid");
    scalar c= b.weightedAverage(mesh().V()).value();
    
    李东岳李 1 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    在 中回复了 hongjiewang 最后由 编辑
    #17

    @hongjiewang

        IOList<scalar> utau
        (
            IOobject
            (
                "utau",
                runTime.constant(),
                "../postProcessing",
                mesh,
                IOobject::NO_READ,
                IOobject::AUTO_WRITE 
            ),
            1
        );
        
        utau[0] = b.weightedAverage(mesh().V()).value();
    

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    H vbcwlV 3 条回复 最后回复
  • H 离线
    H 离线
    hongjiewang
    在 中回复了 李东岳 最后由 编辑
    #18

    @李东岳

      totalLiquid
      {        
            libs            (utilityFunctionObjects);
            type            coded;
            name            totalLiquid;
            enabled         true;
            writeControl    timeStep;
            writeInterval   1;
            
            codeOptions
            #{
                -I$(LIB_SRC)/meshTools/lnInclude
            #};
    
            codeExecute
            #{
    
                const volScalarField& b =
                    mesh().lookupObject<volScalarField>("alpha.liquid");
    
                IOList<scalar> liquidFraction
                (
                    IOobject
                    (
                        "liquidFraction",
                        mesh().time().constant(),
                        "../postProcessing",
                        mesh(),
                        IOobject::NO_READ,
                        IOobject::AUTO_WRITE
                    ),
                    1
                );
                liquidFraction[0] = b.weightedAverage(mesh().V()).value();
            #};
        }
    

    东岳老师,我这样添加到controlDict里,运行后postProcessing里并没有出现liquidFraction的值。
    1618213472(1).png

    H 1 条回复 最后回复
  • H 离线
    H 离线
    hongjiewang
    在 中回复了 hongjiewang 最后由 hongjiewang 编辑
    #19

    @hongjiewang 在 OpenFOAM小代码 中说:

    @李东岳

      totalLiquid
      {        
            libs            (utilityFunctionObjects);
            type            coded;
            name            totalLiquid;
            enabled         true;
            writeControl    timeStep;
            writeInterval   1;
            
            codeOptions
            #{
                -I$(LIB_SRC)/meshTools/lnInclude
            #};
    
            codeExecute
            #{
    
                const volScalarField& b =
                    mesh().lookupObject<volScalarField>("alpha.liquid");
    
                IOList<scalar> liquidFraction
                (
                    IOobject
                    (
                        "liquidFraction",
                        mesh().time().constant(),
                        "../postProcessing",
                        mesh(),
                        IOobject::NO_READ,
                        IOobject::AUTO_WRITE
                    ),
                    1
                );
                liquidFraction[0] = b.weightedAverage(mesh().V()).value();
            #};
        }
    

    东岳老师,我这样添加到controlDict里,运行后postProcessing里并没有出现liquidFraction的值。
    1618213472(1).png

    需要修改两个部分,
    1.在下方添加 .write()
    2.将codeExecute改为codeWrite
    之后就可以得到想要的相含量结果。

    1 条回复 最后回复
  • H 离线
    H 离线
    hongjiewang
    在 中回复了 李东岳 最后由 编辑
    #20

    @李东岳

    FoamFile
    {
        version     2.0;
        format      ascii;
        class       scalarField;
        location    "constant/../postProcessing";
        object      totalLiquid;
    }
    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
    
    1(0.2)
    

    麻烦老师再帮我看一下,为什么每次都只会输出一个时刻的值,不会随时间增加输出的

    1 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    写于 最后由 李东岳 编辑
    #21
    meanDiameter
        {
            type            coded;
            libs            ("libutilityFunctionObjects.so");
            name            error;
        
            codeExecute
            #{
                const volScalarField& d =
                    mesh().lookupObject<volScalarField>("d.alpha.oil");
    
                scalar d32 = d.weightedAverage(mesh().V()).value();
        
                if (Pstream::master())
                {
                    std::ofstream file;
                    file.open ("d32", std::ofstream::out | std::ofstream::app);
                    file << mesh().time().timeName() << " " << d32 << "\n";
                    file.close();
                }
            #};
        }
    

    我最近也凑巧要用这个,我用的上面这种方式。

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    1 条回复 最后回复
  • 五好青年五 离线
    五好青年五 离线
    五好青年
    在 中回复了 李东岳 最后由 编辑
    #22

    @李东岳
    请问东岳老师:135:

    (1) 东岳老师,您上面写的:codedFixedValue
    (2) yfclark朋友,上面写的:CodeStream

    在自定义边界条件方面,这两个有啥区别啊,我研究了几天没想明白

    I am a CFD machine with no emotions.

    五好青年五 1 条回复 最后回复
  • 五好青年五 离线
    五好青年五 离线
    五好青年
    在 中回复了 五好青年 最后由 编辑
    #23

    @yfclark
    朋友,您好:

    codedFixedValue和CodeStream

    你知道在自定义边界条件方面,这两个有啥区别啊,我研究了几天没想明白

    I am a CFD machine with no emotions.

    李东岳李 1 条回复 最后回复

  • 登录

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