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中关于breakup model的 child parcel的速度设置问题

SprayFoam中关于breakup model的 child parcel的速度设置问题

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

    各位大佬,

    关于sprayFoam中的breakup model,中childparcel是如何设定其速度的?

    template<class CloudType>
    bool Foam::ReitzKHRT<CloudType>::update
    (
        const scalar dt,
        const vector& g,
        scalar& d,
        scalar& tc,
        scalar& ms,
        scalar& nParticle,
        scalar& KHindex,
        scalar& y,
        scalar& yDot,
        const scalar d0,
        const scalar rho,
        const scalar mu,
        const scalar sigma,
        const vector& U,
        const scalar rhoc,
        const scalar muc,
        const vector& Urel,
        const scalar Urmag,
        const scalar tMom,
        scalar& dChild,
        scalar& massChild
    )
    {
     .......
        return addParcel;
    }
    

    上部分code节选与KHRTmodel,其中的return 的addParcel是一个boolean,true时即增加child parcel。 child parcel的mass和diameter都计算得到。

    接下来进入sprayParcel.C 的calcBreakup中

     typedef typename TrackData::cloudType cloudType;
        typedef typename cloudType::parcelType parcelType;
        typedef typename cloudType::forceType forceType;
    
        const parcelType& p = static_cast<const parcelType&>(*this);
        const forceType& forces = td.cloud().forces();
    
        if (td.cloud().breakup().solveOscillationEq())
        {
            solveTABEq(td, dt);
        }
    
        // Average molecular weight of carrier mix - assumes perfect gas
        scalar Wc = this->rhoc()*RR*this->Tc()/this->pc();
        scalar R = RR/Wc;
        scalar Tav = td.cloud().atomization().Taverage(this->T(), this->Tc());
    
        // Calculate average gas density based on average temperature
        scalar rhoAv = this->pc()/(R*Tav);
        scalar muAv = this->muc();
        vector Urel = this->U() - this->Uc();
        scalar Urmag = mag(Urel);
        scalar Re = this->Re(this->U(), this->d(), rhoAv, muAv);
    
        const scalar mass = p.mass();
        const forceSuSp Fcp = forces.calcCoupled(p, dt, mass, Re, muAv);
        const forceSuSp Fncp = forces.calcNonCoupled(p, dt, mass, Re, muAv);
        this->tMom() = mass/(Fcp.Sp() + Fncp.Sp());
    
        const vector g = td.cloud().g().value();
    
        scalar parcelMassChild = 0.0;
        scalar dChild = 0.0;
        if
        (
            td.cloud().breakup().update
            (
                dt,
                g,
                this->d(),
                this->tc(),
                this->ms(),
                this->nParticle(),
                this->KHindex(),
                this->y(),
                this->yDot(),
                this->d0(),
                this->rho(),
                mu_,
                sigma_,
                this->U(),
                rhoAv,
                muAv,
                Urel,
                Urmag,
                this->tMom(),
                dChild,
                parcelMassChild
            )
        )
        {
            scalar Re = rhoAv*Urmag*dChild/muAv;
    
            // Add child parcel as copy of parent
            SprayParcel<ParcelType>* child = new SprayParcel<ParcelType>(*this);
            child->origId() = this->getNewParticleID();
            child->d() = dChild;
            child->d0() = dChild;
            const scalar massChild = child->mass();
            child->mass0() = massChild;
            child->nParticle() = parcelMassChild/massChild;
    
            const forceSuSp Fcp =
                forces.calcCoupled(*child, dt, massChild, Re, muAv);
            const forceSuSp Fncp =
                forces.calcNonCoupled(*child, dt, massChild, Re, muAv);
    
            child->age() = 0.0;
            child->liquidCore() = 0.0;
            child->KHindex() = 1.0;
            child->y() = td.cloud().breakup().y0();
            child->yDot() = td.cloud().breakup().yDot0();
            child->tc() = 0.0;
            child->ms() = -GREAT;
            child->injector() = this->injector();
            child->tMom() = massChild/(Fcp.Sp() + Fncp.Sp());
            child->user() = 0.0;
            child->setCellValues(td, dt, celli);
    
            td.cloud().addParticle(child);
        }
    

    这部分Child 就包含了各个参数,且,然后在进入/basic/Cloud.C中添加进domain。
    但是问题是,很多参数都是直接由parents parcel复制而来。

    那么问题来了,
    Q1 如果我想单独设置child parcel的速度,如何设置呢?
    Q2 如果想射如多个parcel,且每个parcel有不同的size和mass如何处理呢?

    游荡

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

    我想从破碎的角度来讲,单纯的破碎并没有改变气泡速度(不想碰撞),如果你想设置子粒子的速度,或许需要类似硬球模型那种模型保证动量守恒啊各种之类

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

    1 条回复 最后回复
  • 星 离线
    星 离线
    星星星星晴
    写于 最后由 李东岳 编辑
    #3

    我继续看看,因为是这样,一个parent parcel breakup,他应该生成多个小液滴,但是模型里面并没有考虑数目的情况,另外一点是这样,childparcel的速度是直接从parent parcel复制过来的,

    $m_{p0}\vec{v_0}=m_{prest}\vec{v_0}+\sum m_{psat}\vec{v}$

    游荡

    1 条回复 最后回复
  • 星 离线
    星 离线
    星星星星晴
    写于 最后由 编辑
    #4

    怎么没法写公式了 = = 是不是方法用错了

    67069363-6745-40a9-8a27-6aa33e64e681-image.png
    质量守恒很简单,但是根据code,child的速度和数量就没办法设置。。。

    我再看看哪有方法解决吧

    游荡

    1 条回复 最后回复

  • 登录

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