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. SprayFoam 只喷固体该如何设置?

SprayFoam 只喷固体该如何设置?

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

    0_1458720018133_New Microsoft PowerPoint Presentation.jpg
    模型如图所示,我需要模拟一个辆车的尾气颗粒在一个隧道里怎么分布,颗粒与颗粒的碰撞需要考虑,这辆车只喷颗粒物质一定速度喷(比如每秒20000个),然后隧道一段以一定的速度进风。 之前@散漫守望2016 给我介绍可以看看coalchemistryFoam,但是我今天看了sprayFoam,我想着用sprayFoam应该也可以解决这个问题。 今天就花了很久在看sprayFoam 但是发现了一个问题,我可以把所有的化学反应关闭,但是在设置sprayCloudProperties的时候遇见了问题。我是基于 tutorials/lagrangian/sprayFoam/aachenBomb 这个case直接改的。这个case是喷入C7H16,我这里如果想只喷入固体颗粒,需要在singlePhaseMixtureCoeffs 下面的phases 里面写成 solid就可以了,然后再在 thermophysicalProperties 里面也改。但是运行的时候出现这个的时候出现 segmentation fault。

    请问什么问题。

    1 条回复 最后回复
  • chpjz0391C 离线
    chpjz0391C 离线
    chpjz0391
    写于 最后由 编辑
    #2

    我之前把例子中喷入的液体换成水倒是没什么问题?但是就是纯固体不行

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

    @chpjz0391 说:

    前把例子中喷入的液体换成水倒是没什么问题?但

    Hi,

    好图!非常直观

    或许把 segmentation fault这部分的log贴出来更方便诊断 :)

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

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

    之前写的一个pimpleCoupledKinematicParcelFoam求解器,给你共享一下,大致下面这样,这个solver的主要部分,可以求解你的那个问题。
    主程序:
    int main(int argc, char *argv[])
    {
    argList::addOption
    (
    "cloudName",
    "name",
    "specify alternative cloud name. default is 'kinematicCloud'"
    );
    #include "setRootCase.H"
    #include "createTime.H"
    #include "createMesh.H"
    #include "readGravitationalAcceleration.H"
    #include "readTransportProperties.H"
    #include "createFields.H"
    #include "initContinuityErrs.H"
    #include "readTimeControls.H"
    #include "CourantNo.H"
    #include "setInitialDeltaT.H"

    pimpleControl pimple(mesh);
    
    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
    
    Info<< "\nStarting time loop\n" << endl;
    
    while (runTime.run())
    {
    
        #include "readTimeControls.H"
        #include "CourantNo.H"
        #include "setDeltaT.H"
    
        runTime++;
    
        Info<< "Time = " << runTime.timeName() << nl << endl;
    
        Info<< "Evolving " << kinematicCloud.name() << endl;
        kinematicCloud.evolve();
        kinematicCloud.info();
    
        // --- Pressure-velocity PIMPLE corrector loop
        while (pimple.loop())
        {
            #include "UEqn.H"
    
            // --- Pressure corrector loop
            while (pimple.correct())
            {
                #include "pEqn.H"
            }
    
            if (pimple.turbCorr())
            {
                turbulence->correct();
            }
        }
        
        runTime.write();
    
        Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
            << "  ClockTime = " << runTime.elapsedClockTime() << " s"
            << nl << endl;
    }
    
    Info<< "End\n" << endl;
    
    return 0;
    

    }

    CreateFields.H文件
    Info<< "Reading normalised dynamic presure field p_rgh\n" << endl;
    volScalarField p_rgh
    (
    IOobject
    (
    "p_rgh",
    runTime.timeName(),
    mesh,
    IOobject::MUST_READ,
    IOobject::AUTO_WRITE
    ),
    mesh
    );

    Info<< "Reading field U\n" << endl;
    volVectorField U
    (
        IOobject
        (
            "U",
            runTime.timeName(),
            mesh,
            IOobject::MUST_READ,
            IOobject::AUTO_WRITE
        ),
        mesh
    );
    
    Info<< "Creating phi [m3/s] " << endl;
    #include "createPhi.H"
    
    Info<< "Creating turbulence model\n" << endl;
    singlePhaseTransportModel laminarTransport(U, phi);
    autoPtr<incompressible::turbulenceModel> turbulence
    (
        incompressible::turbulenceModel::New(U, phi, laminarTransport)
    );
    
    //Info<< "Creating source list\n" << endl;
    fv::IOoptionList fvOptions(mesh);
    
    
    Info<< "Calculating field g.h\n" << endl;
    volScalarField gh("gh", g & mesh.C());
    surfaceScalarField ghf("ghf", g & mesh.Cf());
    
    Info<< "Creating absolute pressure field p [Pa]\n" << endl;
    volScalarField p
    (
        IOobject
        (
            "p",
            runTime.timeName(),
            mesh,
            IOobject::NO_READ,
            IOobject::AUTO_WRITE
        ),
        rhoVal*(p_rgh + gh)
    );
    
    Info<< "Reading field U\n" << endl;
    
    label pRefCell = 0;
    scalar pRefValue = 0.0;
    setRefCell
    (
        p,
        p_rgh,
        mesh.solutionDict().subDict("PIMPLE"),
        pRefCell,
        pRefValue
    );
    
    if (p_rgh.needReference())
    {
        p += dimensionedScalar
        (
            "p",
            p.dimensions(),
            pRefValue - getRefCellValue(p, pRefCell)
        );
    }
    
    Info<< "Creating mass flux density surface field rhoPhi [kg/s] " << endl;
    surfaceScalarField rhoPhi
    (
        IOobject
        (
            "rhoPhi",
            runTime.timeName(),
            mesh,
            IOobject::READ_IF_PRESENT,
            IOobject::AUTO_WRITE
        ),
        rhoVal*linearInterpolate(U) & mesh.Sf()
    );
    
    // dummy-fields to satisfy the requirements of the kinematicCloud
    Info<< "Creating rho field " << endl;
    volScalarField rho
    (
        IOobject
        (
            "rho",
            runTime.timeName(),
            mesh,
            IOobject::NO_READ,
            IOobject::NO_WRITE
        ),
        mesh,
        rhoVal,
        "zeroGradient"
    );
    
    Info<< "Creating mu field " << endl;
    volScalarField mu
    (
        IOobject
        (
            "mu",
            runTime.timeName(),
            mesh,
            IOobject::NO_READ,
            IOobject::NO_WRITE
        ),
        mesh,
        rhoVal*nu,
        "zeroGradient"
    );
    
    Info<< "Constructing kinematicCloud" << endl;
    basicKinematicCollidingCloud kinematicCloud
    (
        "kinematicCloud",
        rho,
        U,
        mu,
        g
    );
    

    **
    readTransportProperties文件**:
    Info<< "\nReading transportProperties\n" << endl;

    IOdictionary transportProperties
    (
        IOobject
        (
            "transportProperties",
            runTime.constant(),
            mesh,
            IOobject::MUST_READ_IF_MODIFIED,
            IOobject::NO_WRITE
        )
    );
    
    dimensionedScalar nu
    (
        transportProperties.lookup("nu")
    );
    
    dimensionedScalar rhoVal
    (
        transportProperties.lookup("rho")
    );
    Info<< "rhoVal is " << rhoVal << endl;
    
    dimensionedScalar irhoVal("irhoVal",(1.0/rhoVal));
    

    **
    UEqn.H文件:**
    // Solve the momentum equation
    fvVectorMatrix UEqn
    (
    fvm::ddt(U)

    • fvm::div(phi, U)
    • turbulence->divDevReff(U)
      ==
      irhoVal*kinematicCloud.SU(U)
    • fvOptions(U)
      );

    UEqn.relax();

    fvOptions.constrain(UEqn);

    if (pimple.momentumPredictor())
    {
    solve
    (
    UEqn
    ==
    fvc::reconstruct
    (
    -fvc::snGrad(p_rgh)*mesh.magSf()
    )
    );
    }

    pEqn.H文件:
    {
    volScalarField rAU("rAU", 1.0/UEqn.A());
    surfaceScalarField rAUf("(1|A(U))", fvc::interpolate(rAU));

    U = rAU*UEqn.H();

    phi = (fvc::interpolate(U) & mesh.Sf());
    //+ fvc::ddtCorr(U, phi);

    adjustPhi(phi, U, p_rgh);

    while (pimple.correctNonOrthogonal())
    {
    fvScalarMatrix p_rghEqn
    (
    fvm::laplacian(rAU, p_rgh) == fvc::div(phi)
    );

      p_rghEqn.setReference(pRefCell, getRefCellValue(p_rgh, pRefCell));
    
      p_rghEqn.solve(mesh.solver(p_rgh.select(pimple.finalInnerIter())));
    
      if (pimple.finalNonOrthogonalIter())
      {
          // Calculate the conservative fluxes
          phi -= p_rghEqn.flux();
    
          // Explicitly relax pressure for momentum corrector
          p_rgh.relax();
    
          // Correct the momentum source with the pressure gradient flux
          // calculated from the relaxed pressure
          U -= rAU*fvc::reconstruct((p_rghEqn.flux())/rAUf);
          U.correctBoundaryConditions();
      }
    

    }

    #include "continuityErrs.H"

    p = rhoVal*(p_rgh + gh);

    if (p_rgh.needReference())
    {
    p += dimensionedScalar
    (
    "p",
    p.dimensions(),
    pRefValue - getRefCellValue(p, pRefCell)
    );
    p_rgh = irhoVal*p - gh;
    }
    }

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

    这几天放假没在学校,才看到回复。谢谢分享 。我研究一下。万分感谢

    1 条回复 最后回复

  • 登录

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