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. Euler-Lagrange的一些解析,sprayFoam

Euler-Lagrange的一些解析,sprayFoam

已定时 已固定 已锁定 已移动 OpenFOAM
87 帖子 14 发布者 82.3k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 星 离线
    星 离线
    星星星星晴
    在 中回复了 vbcwl 最后由 编辑
    #34

    @vbcwl 理论上gofun那个方法引入所有的cloud都没问题,只要提供cloud需要的相关field就行,所以你可以尝试在gofun的基础上修改kinematiccloud为dsmccloud 或者你可以修改dsmcfoam 加上pimple 计算即可

    游荡

    vbcwlV 李东岳李 3 条回复 最后回复
  • vbcwlV 离线
    vbcwlV 离线
    vbcwl
    在 中回复了 星星星星晴 最后由 编辑
    #35

    @星星星星晴 感谢前辈:146:

    LBE

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

    @星星星星晴 感谢分享 大佬大佬 :duang: 恨不得送你3个本子

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

    星 1 条回复 最后回复
  • 星 离线
    星 离线
    星星星星晴
    在 中回复了 李东岳 最后由 编辑
    #37

    @李东岳 想找个工作啊

    游荡

    1 条回复 最后回复
  • vbcwlV 离线
    vbcwlV 离线
    vbcwl
    在 中回复了 星星星星晴 最后由 编辑
    #38

    @星星星星晴 我尝试着调用dsmc的cloud,但是在UEqn.H中加入粒子对流体的作用力时无法成功添加,图片上传一直失败,我手打一下报错信息。如果参考GOFUN那个,直接 +invrhoInfdsmcCloud.SU(U) 报错为:expect primary-expression before'.' token +invrhoInfdsmcCloud.SU(U) ,如果吧dsmcCloud改为dsmc 在UEqn后面加+invrhoInf*dsmc.SU(U),报错为has no member named 'SU',请问您知道该怎么把粒子力加到UEqn.H里么

    LBE

    星 1 条回复 最后回复
  • 星 离线
    星 离线
    星星星星晴
    在 中回复了 vbcwl 最后由 编辑
    #39

    @vbcwl 添加该项主要是为了2-way coupling,另外可能调用dsmccloud并不是这样的,请参考之前给你的那个解析,每个cloud调用的方法可能不一样,你可以参考一下其他的cloud是怎么被调用的。
    看看其他求解器

    Info<< nl << "Constructing dsmcCloud " << endl;
        dsmcCloud dsmc("dsmc", mesh);
        Info<< "\nStarting time loop\n" << endl;
        while (runTime.loop())
        {
            Info<< "Time = " << runTime.timeName() << nl << endl;
            dsmc.evolve(); //<<------ 这里是演化步
            dsmc.info();  //<<------ dump到屏幕一些基本信息
            runTime.write(); //<<------- 这里很关键,到底写的是什么
            Info<< nl << "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
                << "  ClockTime = " << runTime.elapsedClockTime() << " s"
                << nl << endl;
        }
        Info<< "End\n" << endl;
    
    

    游荡

    chengan.wangC 1 条回复 最后回复
  • chengan.wangC 离线
    chengan.wangC 离线
    chengan.wang
    在 中回复了 星星星星晴 最后由 编辑
    #40

    @星星星星晴 您好,您推荐的2. 输出文件方法我基本弄明白了,特别适合输出一个平面上不同时刻的统计数据,然后用python数据处理。
    我遇到的问题主要是输出三维规则网格空间点上的水滴质量,把这个数据导入到别的程序中。我尝试过用paraview输出粒子所在空间点数据,因为很不规则,所以之后用python三维插值,但是效果很差。
    所以我觉得您提出的1. 将拉格朗日场转到EULER场比较适合我的情况。但是关于这个代码使用还想请教您几个问题:
    1.

    template<class CloudType>
    Foam::volScalarField& Foam::IVT8_StochasticCollisionModel_2022<CloudType>::PPC() {
    	if (!PPCPtr_.valid() ) {
    		const fvMesh& mesh = this->owner().mesh();
    		PPCPtr_.reset
    		(
    		    new volScalarField
    		    (
    		        IOobject
    		        (
    		            this->owner().name() + ":PPC",
    		            mesh.time().timeName(),
    		            mesh,
    		            IOobject::READ_IF_PRESENT,
    		            IOobject::AUTO_WRITE
    		        ),
    		        mesh,
    		        dimensionedScalar ("zero", dimless, 0.0),
    		        zeroGradientFvPatchScalarField::typeName
    		    )
    		);
    	}
    
    	return PPCPtr_();
    }
    

    这段代码应该是定义了一个函数,应该放在求解器的哪个文件中呢?
    Screenshot from 2022-09-08 15-46-58.png
    或者是自己重新定义一个头文件?

    1. 这个函数中的PPC应该是一个通用模板吧?比如我想输出 p.mass()质量的数据到EULER场,这个PPC直接用mass替换?

    2. 调用的时候您说用下面的代码,我想知道这段代码又是放在对应的哪个文件中呢?

    scalar& PPC = PPCPtr_->primitiveFieldRef() [cellI];
    PPC += 1.0;
    
    星 1 条回复 最后回复
  • 星 离线
    星 离线
    星星星星晴
    在 中回复了 chengan.wang 最后由 编辑
    #41

    @chengan-wang
    同样可以放到cloudfunction中,对应的改名什么的
    第一步写这个function
    第二步在constructor里面调用,生成这个field
    第三步在你需要的地方调用

    这个方法比较复杂,需要多个地方定义,我这仅仅是提供一个思路,可以在任何地方生成这个field,只要在计算的时候能够赋值即可,你也可以在你的solver里面生成这个field,只要在拉格朗日部分能调用到这个field就行。

    为什么要插值?我没get到你的点。插值也有很多方法的,另外当你的数据量不够的时候自然会存在很大的误差,这是统计学的问题了。

    方法一天然的会损失位置信息,因为网格中储存的数据都是在网格中心,如果做复杂的运算的话,这样会损失掉很多信息,anyway这是你的计算,你可以试试。

    我个人觉得方法二足矣应对所有的统计问题,无非就是后处理计算复杂一点,无法paraview中直接连续性的可视化

    游荡

    chengan.wangC 1 条回复 最后回复
  • chengan.wangC 离线
    chengan.wangC 离线
    chengan.wang
    在 中回复了 星星星星晴 最后由 编辑
    #42

    @星星星星晴 谢谢回复,方法2我倒是能用了,只是我需要输出不仅仅是几个面上的数据,而是统计200x100x100这样的网格节点上的数据,不知道该怎么弄了

    星 1 条回复 最后回复
  • 星 离线
    星 离线
    星星星星晴
    在 中回复了 chengan.wang 最后由 编辑
    #43

    @chengan-wang 这也简单啊,同理,你不需要判断是否碰到面,而是做一个判断是否在你的区域内即可,比如你需要判断在两个面之间,z-dir

    if(p.position(2)<1 & p.position(2)>0)
    {
    输出
    }
    

    但是这种方法会出现什么问题,比如一个parcel在这个区域待了3个$\Delta t_L$, 那就输出3次,就是你的输出文件几何倍数的增长。。

    游荡

    chengan.wangC 2 条回复 最后回复
  • chengan.wangC 离线
    chengan.wangC 离线
    chengan.wang
    在 中回复了 星星星星晴 最后由 编辑
    #44

    @星星星星晴 在 Euler-Lagrange的一些解析,sprayFoam 中说:

    @chengan-wang 这也简单啊,同理,你不需要判断是否碰到面,而是做一个判断是否在你的区域内即可,比如你需要判断在两个面之间,z-dir

    if(p.position(2)<1 & p.position(2)>0)
    {
    输出
    }
    

    但是这种方法会出现什么问题,比如一个parcel在这个区域待了3个$\Delta t_L$, 那就输出3次,就是你的输出文件几何倍数的增长。。

    您好,如果加判断条件的话应该是在particleCollector代码中加,然后编译,对吧?这个圆柱面或者矩形面的定义就无所谓了。也就是说单独命名一个输出文件。
    还有,我的网格数量挺大,200x100x100,我得定义好多个长方体区域,采用循环的办法,判断粒子与每一个区域的相对位置,如果符合条件就保存数据,跳出循环。但如果我的计算时间很长,每个时间点都保存数据,数据量肯定很大,能否只保存最后一个时间步的数据?也就是说我需要传递controlDict的参数,比如

    startFrom       startTime;
    
    startTime       0;
    
    stopAt          endTime;
    
    endTime         5;
    
    deltaT          0.01;
    
    星 1 条回复 最后回复
  • chengan.wangC chengan.wang 被引用 于这个主题
  • chengan.wangC chengan.wang 被引用 于这个主题
  • 星 离线
    星 离线
    星星星星晴
    在 中回复了 chengan.wang 最后由 编辑
    #45

    @chengan-wang 自然可以 这就需要你自己研究啦,也有许多其他的方法,比如你获得你要查的目标的cell number,然后只搞这部分就行。

    游荡

    chengan.wangC 1 条回复 最后回复
  • chengan.wangC 离线
    chengan.wangC 离线
    chengan.wang
    在 中回复了 星星星星晴 最后由 编辑
    #46

    @星星星星晴 我仔细想了一下,输出文件的方法可能数据量很大,感觉还是转换的方法更合适,
    但还是有点没有搞清楚。

    您之前告诉我可以放到cloudfunction中,我想知道您具体是放在哪个文件中了,能提供个思路么?我想看看安装包的原始文件,然后再比较一下您的代码,这样可能就清楚该怎么改和调用了。

    另外,IVT8_StochasticCollisionModel_2022,PPC这是随便取得名字么?我在使用的时候是不是得改动呢?

    星 1 条回复 最后回复
  • 星 离线
    星 离线
    星星星星晴
    在 中回复了 chengan.wang 最后由 编辑
    #47

    @chengan-wang
    不能给你我的code,这个不是我自己的私产,我只能大致的说一下方法。
    祝你好运。

    游荡

    chengan.wangC 1 条回复 最后回复
  • chengan.wangC 离线
    chengan.wangC 离线
    chengan.wang
    在 中回复了 星星星星晴 最后由 编辑
    #48

    @星星星星晴 不是要您的code,就是想知道应该改哪个文件而已,您误会了

    星 1 条回复 最后回复
  • 星 离线
    星 离线
    星星星星晴
    在 中回复了 chengan.wang 最后由 编辑
    #49

    @chengan-wang
    正如我前面所说的,你可以在任何Euler/Lagrange场的计算的地方建立这个field,solver部分也可以。
    然后在任何Lagrange计算的地方对这个field进行操作。
    只要是这个计算的方法是符合你的要求的,Euler 时间步还是Lagrange 时间步。
    你可以参考具体下面的拉格朗日部分的流程图,在你需要的地方放置计算即可。

    51407930-774c-41c8-84d4-a35ece7fe83c-image.png

    游荡

    chengan.wangC 1 条回复 最后回复
  • chengan.wangC 离线
    chengan.wangC 离线
    chengan.wang
    在 中回复了 星星星星晴 最后由 编辑
    #50

    @星星星星晴 非常感谢,我再仔细研究一下。我在google以及源代码中没有查到IVT8_StochasticCollisionModel_2022,PPC,它们代表的意思您方便告诉我么?感觉这个PPC应该是粒子的相关信息,又感觉直接用这个名字不对

    星 1 条回复 最后回复
  • 星 离线
    星 离线
    星星星星晴
    在 中回复了 chengan.wang 最后由 编辑
    #51

    @chengan-wang
    ivt-xxxx 这个是我们自己的cloudfunction的名字而已,
    ppc也就是这个cloudfunction中的一个function的名字,可以被调用。

    你可以尝试在solver中建立一个field,叫任何名字都可以。

    游荡

    1 条回复 最后回复
  • 香柏树香 离线
    香柏树香 离线
    香柏树
    在 中回复了 星星星星晴 最后由 编辑
    #52

    @星星星星晴 前辈,您好!我在使用sprayFoam喷射液滴的时候,在两个不同进气流量的case进行计算,case1为100%空气,case2为200%空气,所有的constant,system里的文件设置都一样,仅仅改变了进气流量。进行液滴后处理时发现,Case2的液滴数目(nParticles)比Case1少了近一半,请问您知道是什么原因么?液滴喷射模型设置具体如下:

    model1
            {
                type            coneNozzleInjection;
                SOI             0.029;
                massTotal       0.0044166;
                parcelBasisType mass;
                injectionMethod disc;
                flowType        constantVelocity;
                UMag            33.0;
                outerDiameter   0.0007;
                innerDiameter   0;
                duration        1.0;
                position        (0 0 -0.03584797);
                direction       (0 0 1);
                parcelsPerSecond 2000000;
                massFlowRate    0.0044166;
                flowRateProfile table
                (
                    (0              0.0044166)
                    (1              0.0044166)
                    (2              0.0044166)
                    (3              0.0044166)
                    (4              0.0044166)
                    (5              0.0044166)
                    (6              0.0044166)
                    (7              0.0044166)
                    (8              0.0044166)
                    (9              0.0044166)
                    (10              0.0044166)
                    
                );
    
                Cd              constant 0.9;
    
                thetaInner      constant 25;
                thetaOuter      constant 30;
    
                sizeDistribution
                {
                    type        RosinRammler;
    
                    RosinRammlerDistribution
                    {
                        minValue        1e-05;
                        maxValue        6e-05;
                        d               4e-05;
                        n               3;
                    }
                }
            }
    
    星 1 条回复 最后回复
  • 星 离线
    星 离线
    星星星星晴
    在 中回复了 香柏树 最后由 编辑
    #53

    @香柏树 请问100%?和200% 空气是什么意思?另外空气的速度有变化么?你有没有用碰撞模型?

    游荡

    香柏树香 1 条回复 最后回复

  • 登录

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