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. 《icoFoam解析》中压力修正的代码问题

《icoFoam解析》中压力修正的代码问题

已定时 已固定 已锁定 已移动 OpenFOAM
9 帖子 5 发布者 13.4k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • J 离线
    J 离线
    jzheng
    写于 最后由 jzheng 编辑
    #1

    请教各位大神个问题,在《icoFoam解析》中求第一次修正压力场pr的公式是~~~~
    0_1460585812668_upload-8c420251-9d6f-4774-bf54-65666c8b960a

    但是,在pEqn的代码是
    0_1460585883662_upload-7c158693-0e6e-4365-8af1-76759d27e3fe

    我的问题是,把fvc::div(phiHbyA)代码还原成公式的话是∇∙(phiHbyA),它是怎么和修正公式里面的∇∙(HbyA)对应上的呢?

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

    @jzheng 说:

    ∇∙(phiHbyA)

    Hi,

    HbyA是矢量,phiHbyA是面标量。fvc::div(phiHbyA)表示的就是$\nabla \cdot HbyA$。再比如fvc::div(phi)就是$\nabla \cdot U$。这个div被操作符重载了。

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

    J 1 条回复 最后回复
  • 散漫守望2016散 离线
    散漫守望2016散 离线
    散漫守望2016 大神
    写于 最后由 编辑
    #3

    竟然和我有一样的疑惑,当时这里一直不理解,现在还是不太理解。东岳兄那个乱码了,可以改改。

    1 条回复 最后回复
  • J 离线
    J 离线
    jzheng
    在 中回复了 李东岳 最后由 编辑
    #4

    @李东岳 明白了,谢谢东岳兄,厉害

    1 条回复 最后回复
  • WayneW 离线
    WayneW 离线
    Wayne
    写于 最后由 编辑
    #5

    补充一下。

    公式乱码刷新一下就行。

    fvc::div代码如下:

    template<class Type>
    tmp<GeometricField<Type, fvPatchField, volMesh> >
    div
    (
        const GeometricField<Type, fvsPatchField, surfaceMesh>& ssf
    )
    {
        return tmp<GeometricField<Type, fvPatchField, volMesh> >
        (
            new GeometricField<Type, fvPatchField, volMesh>
            (
                "div("+ssf.name()+')',
                fvc::surfaceIntegrate(ssf)
            )
        );
    }
    
    

    fvc::div(phiHbyA) 就是对单元体表面的phiHbyA进行求和。这个依据高斯定理,相当于对 ∇∙(HbyA) 在单元体上进行积分。

    所以这个问题的关键是,div和laplacian等操作符是对
    \begin{equation}
    \nabla \cdot (HbyA^r) = \nabla \cdot(\frac{1}{A_{\mathrm{p},f}} \nabla p^r)
    \end{equation}
    这个半离散方程进行进一步的离散,即积分。

    主要做AI,懂一点CFD

    1 条回复 最后回复
  • WayneW 离线
    WayneW 离线
    Wayne
    写于 最后由 编辑
    #6

    另外,
    参考
    fvc::div(u)=fvc::div(phi)。

    对应的代码如下:

    template<class Type>
    tmp
    <
        GeometricField
        <typename innerProduct<vector, Type>::type, fvPatchField, volMesh>
    >
    gaussDivScheme<Type>::fvcDiv
    (
        const GeometricField<Type, fvPatchField, volMesh>& vf
    )
    {
        tmp
        <
            GeometricField
            <typename innerProduct<vector, Type>::type, fvPatchField, volMesh>
        > tDiv
        (
            fvc::surfaceIntegrate
            (
                this->mesh_.Sf() & this->tinterpScheme_().interpolate(vf)
            )
        );
    
        tDiv().rename("div(" + vf.name() + ')');
    
        return tDiv;
    }
    

    即div(U)的计算方法也是先插值到单元体表面上,然后进行求和。

    主要做AI,懂一点CFD

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

    @Wayne

    Updated. 非常感谢。

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

    1 条回复 最后回复
  • 张某人张 离线
    张某人张 离线
    张某人
    写于 最后由 编辑
    #8

    我找到了一个对div和snGrad的理解,希望可以帮上忙,内容来源:Giskard's CFD Learning Tricks
    https://wenku.baidu.com/view/838580050975f46527d3e1ff.html
    我的理解是fvc::div(phiHbyA)已经将原控制方程中的散度表示为高斯积分的求和形式了,不知道这样理解是否正确?

    让回流区再发展一会儿~

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

    我的理解是fvc::div(phiHbyA)已经将原控制方程中的散度表示为高斯积分的求和形式了

    是的。正确。

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

    1 条回复 最后回复

  • 登录

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