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中文网

A

Alvin

@Alvin
关于
帖子
64
主题
7
群组
0
粉丝
2
关注
0

帖子

最新

  • fireFoam createFields.H文件中创建场编译,输出多组分混合物各成分的质量流率,没有效果......
    A Alvin

    @alvin 抱歉,新添加的代码未能正常黄色标记显示,加入的代码为

    PtrList<surfaceScalarField> Ysf;
    forAll(Ysf, i)
    {
    surfaceScalarField Ycf
    (
    IOobject
    (
    IOobject::groupName(“Ycf”,Y[i].name()),
    runTime.timeName(),
    mesh,
    IOobject::READ_IF_PRESENT,
    IOobject::AUTO_WRITE
    ),
    fvc::interpolate(Y[i])*phi
    );
    Info<< “Ycf is\n” << Ycf << endl;
    }
    

  • fireFoam createFields.H文件中创建场编译,输出多组分混合物各成分的质量流率,没有效果......
    A Alvin

    在fireFoam求解器源程序的createfields.H文件中,根据phi(总质量通量)和Yi(多组分的质量分数),希望创建各组分的通量场,值为phi*Yi,进行如下添加后(标记黄色),编译正常通过,但求解结果文件中并没有发现创建好的通量场,希望各位大神能给与指导,不胜感激。

    autoPtr<combustionModels::psiCombustionModel> combustion
    (
        combustionModels::psiCombustionModel::New
        (
            mesh
        )
    );
    
    Info<< "Reading thermophysical properties\n" << endl;
    
    psiReactionThermo& thermo = combustion->thermo();
    thermo.validate(args.executable(), "h", "e");
    
    SLGThermo slgThermo(mesh, thermo);
    
    basicMultiComponentMixture& composition = thermo.composition();
    PtrList<volScalarField>& Y = composition.Y();
    
    
    const word inertSpecie(thermo.lookup("inertSpecie"));
    
    Info<< "Creating field rho\n" << endl;
    volScalarField rho
    (
        IOobject
        (
            "rho",
            runTime.timeName(),
            mesh,
            IOobject::NO_READ,
            IOobject::AUTO_WRITE
        ),
        thermo.rho()
    );
    
    volScalarField& p = thermo.p();
    const volScalarField& T = thermo.T();
    const volScalarField& psi = thermo.psi();
    
    Info<< "\nReading field U\n" << endl;
    volVectorField U
    (
        IOobject
        (
            "U",
            runTime.timeName(),
            mesh,
            IOobject::MUST_READ,
            IOobject::AUTO_WRITE
        ),
        mesh
    );
    
    #include "compressibleCreatePhi.H"
    
    Info<< "Creating turbulence model\n" << endl;
    autoPtr<compressible::turbulenceModel> turbulence
    (
        compressible::turbulenceModel::New
        (
            rho,
            U,
            phi,
            thermo
        )
    );
    
    // Set the turbulence into the combustion model
    combustion->setTurbulence(turbulence());
    
    volScalarField dQ
    (
        IOobject
        (
            "dQ",
            runTime.timeName(),
            mesh,
            IOobject::NO_READ,
            IOobject::AUTO_WRITE
        ),
        mesh,
        dimensionedScalar("dQ", dimEnergy/dimTime, 0.0)
    );
    
    
    Info<< "Creating field dpdt\n" << endl;
    volScalarField dpdt
    (
        IOobject
        (
            "dpdt",
            runTime.timeName(),
            mesh
        ),
        mesh,
        dimensionedScalar("dpdt", p.dimensions()/dimTime, 0)
    );
    
    Info<< "Creating field kinetic energy K\n" << endl;
    volScalarField K("K", 0.5*magSqr(U));
    
    
    #include "readGravitationalAcceleration.H"
    #include "readhRef.H"
    #include "gh.H"
    
    
    volScalarField p_rgh
    (
        IOobject
        (
            "p_rgh",
            runTime.timeName(),
            mesh,
            IOobject::MUST_READ,
            IOobject::AUTO_WRITE
        ),
        mesh
    );
    
    // Force p_rgh to be consistent with p
    p_rgh = p - rho*gh;
    
    mesh.setFluxRequired(p_rgh.name());
    
    multivariateSurfaceInterpolationScheme<scalar>::fieldTable fields;
    
    forAll(Y, i)
    {
        fields.add(Y[i]);
    }
    fields.add(thermo.he());
    
    %(#fffc99)[PtrList<surfaceScalarField> Ysf;
    forAll(Ysf, i)
    {
        surfaceScalarField Ycf
        (
        IOobject
        (
            IOobject::groupName("Ycf",Y[i].name()),
            runTime.timeName(),
            mesh,
            IOobject::READ_IF_PRESENT,
            IOobject::AUTO_WRITE
        ),
        fvc::interpolate(Y[i])*phi
       );
       Info<< "Ycf is\n" << Ycf << endl;
    }]
    
    IOdictionary additionalControlsDict
    (
        IOobject
        (
            "additionalControls",
            runTime.constant(),
            mesh,
            IOobject::MUST_READ_IF_MODIFIED,
            IOobject::NO_WRITE
        )
    );
    
    Switch solvePrimaryRegion
    (
        additionalControlsDict.lookup("solvePrimaryRegion")
    );
    
    

  • 如何在fvoptions 同时固定速度和压力?
    A Alvin

    @东岳 “......在计算域内部添加一个吹气孔进行吹气”
    现在是要实现类似的吹气过程,将网格作为温度、质量(化学组分)源项,且网格赋予固定的速度以及压力,求解结果中反查这个网格的速度值和设定值是有偏差的(怀疑和组分浓度扩散相关,扩散系数存在导致网格有一定的附加“扩散速度”),结果的压力值误差更大(大于100%,猜测openfoam中应该用特殊的方式去限定这个压力约束)。

    ......BTW真正关心的问题来了,在fireFoam application源程序中没有找到质量运移的扩散系数D,也没找到施密特数Sc的设定位置(施密特数(Schmidt number, Sc)是一个无量纲的标量,定义为动黏滞系数和扩散系数的比值,用来描述同时有动量扩散及质量扩散的流体。施密特数的命名是为了纪念德国工程师 Ernst Heinrich Wilhelm Schmidt (1892-1975)。)


  • 如何在fvoptions 同时固定速度和压力?
    A Alvin

    @东岳 我用fireFoam试了一下,尝试同时固定某个网格速度压力,结果显示这个网格速度基本维持不变,压力变化


  • 如何在fvoptions 同时固定速度和压力?
    A Alvin

    "......通常情况下,一个边界上只会指定一个约束,否则就会出现所谓的过约束“”,即向模型文件引入了过多的约束条件,其后果往往是无解,然而,真实世界中,常常不可避免地会出现一些需要在某个边界指定多个约束,在对应的另一个边界取消约束。在数值模拟中,这需要经过特殊处理才能实现。以计算流体力学(CFD)为例,求解流体模型时最理想的边界约束条件时入口与出口分别指定速度和压力,例如入口指定层流流入的速度分布曲线,出口指定一个参考压力。但是,在某些情况下,我们不得不在同一个边界上同时约束两种边界条件,例如在入口既指定速度曲线,又约束必须满足指定的参考压力。COMSOL Multiphisics 采用弱约束的方式来实现这种多约束边界条件........"
    ---------摘自COMSOL Multiphisics工程实践与理论仿真-多物理场数值分析技术

    基于上述描述,实际仿真的对象,既然理论(或者实际需求)上存在“过约束”的情况,通过数值技术上也能实现。网格作为求解参数的载体,理论上应该和边界类似,通过一定的技术,也能固定速度与压力,把这个网格作为“体积源”,只是OpenFOAM中不知如何实现.....


  • 如何在fvoptions 同时固定速度和压力?
    A Alvin

    如题,如何在求解过程中,通过fvoptions源设定的方式,同时固定住计算域内某个网格上的速度和压力,各位CFDers,有什么想法吗?


  • DPMFoam追踪算法失效导致颗粒丢失
    A Alvin

    @东岳 您可以考虑做培训之外的企业技术咨询服务


  • DPMFoam追踪算法失效导致颗粒丢失
    A Alvin

    @dzw05 :zoule: blueCFD还没有用过


  • DPMFoam追踪算法失效导致颗粒丢失
    A Alvin

    @东岳 说的太对了,确实需要花费专门的时间去搞,在企业有限制。做研究就要沉得住气。openfoam-v1712 ....../etc/bashrc文件中有颗粒位置记录方式的选择,也可以调用程序将粒子的质心坐标转换为空间直角坐标:

    0_1529978239537_颗粒位置.JPG

    openfoam1712记录颗粒位置的文件是“coordinates",通过将”writeLagrangianPositions“ 值置为非零,结果文件夹下就出现了熟悉的”positions“ :

    0_1529978450900_位置.JPG


  • DPMFoam追踪算法失效导致颗粒丢失
    A Alvin

    @dzw05 你用的哪个版本的of?of50下的paraFoam能够读取质心坐标的


  • DPMFoam追踪算法失效导致颗粒丢失
    A Alvin

    @东岳 重心坐标只是第一步,理解of50那一整套新的颗粒追踪算法满有难度的,看能否找到相关文献吧


  • DPMFoam追踪算法失效导致颗粒丢失
    A Alvin

    @浪迹天大 谢谢您提供的这个思路。


  • DPMFoam追踪算法失效导致颗粒丢失
    A Alvin

    @东岳 “......不过,有时间的话,你可以研究一下重心坐标的计算,然后写个后处理程序重写坐标。感兴趣么?

    重心坐标的计算,网上查到了一点点相关资料“Generating Random Points in a Tetrahedron 网址: http://vcg.isti.cnr.it/jgt/tetra.htm
    目前我理解到的程度就是质心坐标是4个0~1之间的随机数a,s,t,u(4者相加为1),粒子空间位置坐标应该可以根据程序记录粒子所在的四面体(celli,tetFacei,tetPti共同确定四面体)四个空间点坐标(V0,V1,V2,V3)差值出来,即aV0+sV1+tV2+dV3.
    of50的粒子位置文件可以改写成of30那种输出格式,但是由于下一步要调用上一步计算的结果,of50的粒子计算过程不能正常进行(只能输出一个计算步)。


  • DPMFoam追踪算法失效导致颗粒丢失
    A Alvin

    在openfoam4之前的各版本中,粒子所在的空间位置通过其穿过网格面的算法去定位(涉及空间实体网格基础上的四面体虚拟网格划分,穿透网格面的界定(TetFacei,TetPti),位置更新等等),输出的结果文件记录了颗粒的空间绝对坐标和颗粒所在的网格编号。但是,由于算法存在bug,时常导致跟踪的粒子丢失(穿透边界,逃离计算域......);openfoam-5.0粒子追踪完全采用了不同的算法去定位颗粒的位置(https://cfd.direct/openfoam/free-software/barycentric-tracking/ https://openfoam.org/release/5-0/ )”The new development was funded from the €100 k for OpenFOAM maintenance, raised through the OpenFOAM Foundation in 2017, in which “particles and tracking” was identified as an area in OpenFOAM “requiring significant code refactoring and/or rewriting"..... The calculation of particle-face intersections is unambiguous and reproducible, even as a particle approaches a face at a small angles of incidence. Consequently, particles do not get “lost”, and tracking does not require ad-hoc corrections or “rescues” to function robustly......"
    前面啰嗦了好多,目前遇到的问题是,of5.0跑出的结果目前因为颗粒位置文件格式不兼容(而且没有直接提供粒子的空间位置坐标),无法在paraview中查看(头疼ing),不知道其他用of5.0做粒子研究的同仁,是如何查看计算结果的?


  • OF 中 颗粒的 sizedistribution models 问题?
    A Alvin

    关于双粒径分布,您查到具体设置方法了吗?还有如何设定两种不同密度(density)的颗粒


  • DEM和DPM
    A Alvin

    @hurricane007 了解了,你们做哪个方向


  • DEM和DPM
    A Alvin

    @hurricane007 您目前采用什么求解器算呢?cfdem?还是自己开发


  • DEM和DPM
    A Alvin

    @minzhang 在 DEM和DPM 中说:

    超级计算

    你们用超级计算机集群资源计算哪个领域的问题?


  • DEM和DPM
    A Alvin

    @MinZhang 不好意思,cfdem没有真正用过,“DPMFoam其实是一种对cfdem的简化”,可以这么理解,听官网介绍,cfdem应用的dem理论应该更为完备一些,描述背景场是流场情况下的离散元运动行为。DPMFoam考虑碰撞时借鉴了dem中的 Hert-Mindlin 软球接触模型,cfdem自身是一套耦合程序,一端是Liggghts较为完备的DEM模型,另一端是of计算提供流场用以描述气固两相流。


  • DEM和DPM
    A Alvin

    @hurricane007 DPM对每个离散的粒子(或者计算颗粒)求解基本的动力学方程,也只能算是介观尺度仿真,of中的DPMFoam稍稍借鉴了写DEM方面的理论,可以简单考虑颗粒尺度的碰撞/旋转等等,应用于大规模计算的主要限制因素就是计算速度(计算颗粒思想的提出对降低求解的自由度有一定的帮助,但感觉在实际应用过程中缺乏完善的设定标准),拉格朗日体系下求解的颗粒粒子与欧拉体系下的空间离散网格数量相比,求解量仍是相当大的,颗粒位置更新算法、碰撞检索效率都有待提升,MPPIC在碰撞计算方面,通过模型模化大大提升了稠密气固两相流的计算效率。大规模应用,高效、快速、稳定的算法亟待出现。

  • 登录

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