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
7 帖子 2 发布者 3.8k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • C 离线
    C 离线
    crispy
    写于 最后由 编辑
    #1

    体积力场是随时间变化的量,是(x, y)的函数

    1 条回复 最后回复
  • 学流体的小明学 在线
    学流体的小明学 在线
    学流体的小明 神
    写于 最后由 编辑
    #2

    编程。

    // 先创建一个场
    volVectorField source_Vector
    (
        IOobject
        (
            "source_Vector",
            mesh.time().timeName(),
            mesh,
            IOobject::NO_READ,
            IOobject::AUTO_WRITE
        ),
        mesh,
        dimensionedVector(dimensionSet(1,-2,-2,0,0,0,0), Zero)
    );
    
    // 根据你的需要进行赋值
    forAll(mesh,cellid)
    {
           source_Vector[cellid]=........;
    }
    
    // 添加方案一,添加到UEqn.H当中的动量方程中
     fvVectorMatrix UEqn
        (
            fvm::ddt(rho, U) + fvm::div(rhoPhi, U)
          + MRF.DDt(rho, U)
          + turbulence->divDevRhoReff(rho, U)
         ==
            fvOptions(rho, U)
          + source_Vector // Add the source field
        );
    
    // 添加方案二,添加到泊松方程里面,需要先插值为surfaceScalarField
    surfaceScalarField source_phig=-fvc::interpolate(source_Vector );
    // 然后添加到pEqn的phig
    surfaceScalarField phig
        (
            (
                mixture.surfaceTensionForce()
              + source_phig // Add the source field
              - ghf*fvc::snGrad(rho)
            )*rAUf*mesh.magSf()
        );
    

    我这个是改的interFoam,你类比一下就行,量纲应该不会一样。

    C 3 条回复 最后回复
  • C 离线
    C 离线
    crispy
    在 中回复了 学流体的小明 最后由 编辑
    #3

    @学流体的小明 谢谢大佬,我昨天写好了。但是目前的问题是体积力场添加的位置不对,我现在改成了最简单的模型来检查错误,希望在一个长方形区域中添加固定数值的体积力场,还是不能实现。

    1 条回复 最后回复
  • C 离线
    C 离线
    crispy
    在 中回复了 学流体的小明 最后由 编辑
    #4

    @学流体的小明

    volVectorField bForce
    (
        IOobject
        (
            "bForce",
            runTime.timeName(),
            mesh,
            IOobject::NO_READ,
            IOobject::AUTO_WRITE
        ),
        mesh,
        dimensionedVector("bForce", dimensionSet(1, -2, -2, 0, 0, 0, 0), Zero) // dimless
    );
    
    for (label cellI = 0; cellI < mesh.C().size(); cellI++) // only process 0?
    {
        const scalar x0 = 0;
        const scalar y0 = 0.0245;
        const scalar x = mesh.Cf()[cellI][0] - x0;
        const scalar y = mesh.Cf()[cellI][1] - y0;
    
        if (x > 0 && x < 0.012 && y > 0 && y < 0.0005) {
            bForce[cellI][0] = 50;
        }
    
    1 条回复 最后回复
  • C 离线
    C 离线
    crispy
    在 中回复了 学流体的小明 最后由 编辑
    #5

    @学流体的小明
    红线包围的是我限制的区域,黑线表示的是网格,这样看应该有满足限制条件的网格,但计算得到的结果是bForce全是0,没有任何赋值的情况。
    d5fffe4f-5885-4119-ac02-b032ed6f86e2-image.png

    1 条回复 最后回复
  • 学流体的小明学 在线
    学流体的小明学 在线
    学流体的小明 神
    写于 最后由 学流体的小明 编辑
    #6

    @crispy
    mesh.Cf()好像是网格面心,你改用mesh.C()试试。

    // only process 0?

    这个无所谓的,所有processor都会执行这串代码,但是它们各自的网格中心的坐标是不一样的,不会每一个processor都会有一个(0,0,0)的坐标这样。

    C 1 条回复 最后回复
  • C 离线
    C 离线
    crispy
    在 中回复了 学流体的小明 最后由 编辑
    #7

    @学流体的小明
    1、谢谢大佬!就是这个原因,mesh.Cf()改成mesh.C()就没问题了!
    2、当时注释这个是因为我发现有问题后用Info输出坐标和mesh的size想看看问题出在哪,但是只输出了processer0的网格信息,所以有了这个疑问。后来我查到了是Info只会输出master processor的信息,我改成Pout就可以输出所有processor的信息。

    1 条回复 最后回复

  • 登录

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