49
OpenFOAMにおけるDEM 計算のモデルの解読 阪学学院基礎学研究科 博2 本卓也 44OpenCAE勉強会@関西 2015/12/13

OpenFOAMにおけるDEM計算の力モデルの解読

Embed Size (px)

Citation preview

  • OpenFOAMDEM

    2

    44OpenCAE@ 2015/12/13

  • OpenFOAMDEM

    OpenFOAM-2.0.0DEM

    2011/6/16 OpenFOAM-2.0.0DEM(Discrete Element Method) (Lagrangian)

    2014/2/17 OpenFOAM-2.3.0DPM(Discrete ParHcle Modeling) MP-PIC(MulHphase ParHcle-in-Cell)

    Release History

    OpenFOAMDEMdocument

  • Ver. 2.3.x

    13 ( ErgunWenYuDrag PlessisMasliyahDrag SRF SaffmanMeiLiSForce TomiyamaLiS WenYuDrag gravity nonInerHalFrame nonSphereDrag paramagneHc pressureGradient sphereDrag virtualMass )

    constant/kinemaHcCloudProperHeserror

    13

    ?

  • $FOAM_SRC/lagrangian/intermediate/submodels/KinemaHc/ParHcleForces

    . Drag Gravity LiS NonInerHalFrame ParamagneHc ParHcleForce PressureGradient SRF VirtualMass forceSuSp

    $tree -L 1Drag/ ErgunWenYuDrag NonSphereDrag PlessisMasliyahDrag SphereDrag WenYuDrag

    LiS LiSForce SaffmanMeiLiS TomiyamaLiS

    tree

  • (5) ErgunWenYuDrag NonSphereDrag PlessisMasliyahDrag SphereDrag WenYuDrag

    Re: u: d: :

    Re = f u f us ds

    f

  • (Sphere)

    Sphere

    Re

  • (Sphere)

    F = 34msCd Re

    fsds

    2 u

    value.Sp() = mass*0.75*muc*CdRe(Re)/(p.rho()*sqr(p.d()));

    SphereDragForce.C

    OpenFOAMSp

    if (Re > 1000.0) { return 0.424*Re; } else { return 24.0*(1.0 + 1.0/6.0*pow(Re, 2.0/3.0)); }

    Re

  • (NonSphere)

    Cd =24Re

    1+ a Reb( )+ c ReRe+ d

    NonSphere

    A. Haier and O. Levenspiel, Powder Technol., 58, 63-70 (1989)

    a ( ) = exp 2.3288 6.4581 + 2.4486 2( )b ( ) = 0.0964+ 0.5565

    c ( ) = exp 4.905013.8944 +18.4222 2 10.2599 3( )d ( ) = exp 1.4681+12.2584 20.7322 2 +15.8855 3( )

    F = 34msCd Re

    fsds

    2 u f us

  • (NonSphere)

    Cd CdRe return 24.0*(1.0 + a_*pow(Re, b_)) + Re*c_/(1 + d_/(Re + ROOTVSMALL));

    Cd =24Re

    1+ a Reb( )+ c1+ d / Re+ small( )

    value.Sp() = mass*0.75*muc*CdRe(Re)/(p.rho()*sqr(p.d()));

    F = 34msCd Re

    fsds

    2 u

    a, b, c, dNonSphereDragForce.C

    NonSphereDragForce.C

    NonSphereDragForce.C

  • (WenYu)

    nRe

  • (WenYu)

    =34Cd

    1 n( )ds

    f u f us n2.65

    f: s:

    : Cd: n: d: : u: V:

    Ff =1 n

    u f us( )Vs

    C. Y. Wen and Y. H. Yu, Chem. Eng. Prog. S. Ser., 62, 100-113 (1966).

    Ff =Vs1 n

    34Cd

    1 n( )ds

    f n2.65 u f us

    2

    Ff =mss

    34CdRes f

    nds2 n

    2.65 u f us

    Vs =mss, f =

    Res fn u f us ds

  • (WenYu)

    return forceSuSp ( vector::zero, (mass/p.rho()) *0.75*CdRe(alphac*Re)*muc*pow(alphac, -2.65)/(alphac*sqr(p.d())) );

    Su

    mss

    34CdRecc

    2.65

    cds2

    Ff =mss

    34CdRes f

    nds2 n

    2.65 u f usWenYuDragForce.C

  • (ErgunWenYu)

    f: s:

    : Cd: n: d: : u: :

    Wen-Yu (n > 0.8)

    Ergun (n < 0.8)

    =1501 n( )2

    n2 fds2 +1.75

    1 n( )n

    fdsu f us

    S. Ergun, Chem. Eng. Prog., 48, 89-94 (1952).

    nRe

  • (ErgunWenYu)

    f: s:

    : Cd: n: d: : u: V:

    Ff =1 n

    u f us( )Vs

    C. Y. Wen and Y. H. Yu, Chem. Eng. Prog. S. Ser., 62, 100-113 (1966).

    Ff =mss

    fnd 2s

    1501 n( )n

    +1.75Re!"#

    $%&u f us

    Vs =mss

    f =Re fu f us ds

    Ff =mss

    1 n

    u f us( )

    =1501 n( )2

    n2 fds2 +1.75

    1 n( )n

    Re fds2

    =1501 n( )2

    n2 fds2 +1.75

    1 n( )n

    fdsu f us

  • (ErgunWenYu)

    if (alphac < 0.8) { return forceSuSp ( vector::zero, (mass/p.rho()) *(150.0*(1.0 - alphac)/alphac + 1.75*Re)*muc/(alphac*sqr(p.d())) ); }

    mss

    1501c( )c

    +1.75Re!"#

    $%&

    fcd

    2s

    Ff =mss

    fnd 2s

    1501 n( )n

    +1.75Re!"#

    $%&u f us

    ErgunWenYuDragForce.C

  • (PlessisMasliyah)

    Plessis-Masliyah (RUC)

    A = 26.8n3

    1 n( )23 1 1 n( )

    13

    !

    "#

    $

    %& 1 1 n( )

    23

    !

    "#

    $

    %&2

    B = n2

    1 1 n( )23

    !

    "#

    $

    %&2

    = A1 n( )2

    n2 fds2 +B

    1 n( )n

    fdsu f us

    Ergun

    J. P. Du Plessis and J. H. Masliyah, Trans. Porous Media, 3, 145-161 (1988).

  • (PlessisMasliyah)

    f: s:

    : Cd: n: d: : u: V:

    Ff =1 n

    u f us( )Vs

    Ff =mss

    fnd 2s

    A1 n( )n

    +BRe!"#

    $%&u f us

    Vs =mss

    f =Re fu f us ds

    Ff =mss

    1 n

    u f us( )

    = A1 n( )2

    n2 fds2 +B

    1 n( )n

    Re fds2

    = A1 n( )2

    n2 fds2 +B

    1 n( )n

    fdsu f us

  • (PlessisMasliyah)

    scalar A = 26.8*pow3(alphac) /( sqr(cbrtAlphap) *(1.0 - cbrtAlphap) *sqr(1.0 - sqr(cbrtAlphap)) + SMALL );

    scalar B = sqr(alphac) /sqr(1.0 - sqr(cbrtAlphap));

    vector::zero, (mass/p.rho()) *(A*(1.0 - alphac)/alphac + B*Re)*muc/(alphac*sqr(p.d()))

    mss

    A1c( )c

    +BRe!"#

    $%&

    fcd

    2s

    A = 26.8n3

    1 n( )23 1 1 n( )

    13

    !

    "#

    $

    %& 1 1 n( )

    23

    !

    "#

    $

    %&2

    B = n2

    1 1 n( )23

    !

    "#

    $

    %&2

    Ff =mss

    fnd 2s

    A1 n( )n

    +BRe!"#

    $%&u f us

    PlessisMasliyahDragForce.C

  • (2) SaffmanMeiLiS TomiyamaLiS

    Re = f u f us ds

    f

    Re: u: d: :

  • scalar Cl = this->Cl(p, curlUc, Re, muc); value.Su() = mass/p.rho()*p.rhoc()*Cl*((p.Uc() - p.U())^curlUc);

    LiSForce.C

    F = mss

    cCl uc us( ) uc( )( )

  • (SaffmanMei)

    Fl =ClAp f u f us

    2

    2

    (Saffman)

    Fl,Sa = 6.46 fud2

    !

    "#

    $

    %&2 G

    !

    "#

    $

    %&

    12

    (Saffman-Mei)FlFl,Sa

    = 1 0.331412

    !

    "#

    $

    %&exp Res

    10!

    "#

    $

    %&+ 0.3314

    12

    = 0.0524 Res( )12

    Res 40

    Res > 40

    R. Mei, Int. J. MulHphase Flow, 18, 145-147 (1992)

    Res =uds

    =12Res

    2

    =12ReGRes

    =ReG

    12

    Res

    ReG =Gds

    2

    G = duldy u = u f us

  • (SaffmanMei)

    Fl,Sa = 6.46 f u f usds2

    !

    "#

    $

    %&2

    u

    !

    "#

    $

    %&

    12

    = 6.46 fds4

    ReG u f us

    = 6.46 3mss

    1ReG

    f u f us u2

    Res =uds

    =12Res

    2

    =12ReGRes

    =ReG

    12

    Res

    ReG =Gds

    2

    G = duldy

    = u

    u = u f us

    (Saffman)

    FlFl,Sa

    =mei

    Fl = 6.46mei3mss

    1ReG

    f u f us u2

    =32

    1ReG

    6.46mei mss

    f u f us u

    Cl (OpenFOAM)

  • (SaffmanMei)

    scalar Rew = p.rhoc()*mag(curlUc)*sqr(p.d())/(muc + ROOTVSMALL); scalar beta = 0.5*(Rew/(Re + ROOTVSMALL)); scalar alpha = 0.3314*sqrt(beta); scalar f = (1.0 - alpha)*exp(-0.1*Re) + alpha; ... if (Re < 40) { Cld = 6.46*f; } else { Cld = 6.46*0.0524*sqrt(beta*Re); } return 3.0/(mathemaHcal::twoPi*sqrt(Rew))*Cld;

    SaffmanMeiLiSForce.C

    Rew =l u ds

    2

    l

    = 0.3314

    = 0.3314 Rew2Re

    =Rew2Re

    Cld = 6.460.0524 Re

    = 6.460.0524 Rew2

    Cld = 6.46 f f = 1( ) exp 0.1Re( )+

    = 1 0.3314 Rew2Re

    #

    $%

    &

    '( exp Re

    10#

    $%

    &

    '(+ 0.3314

    Rew2Re

    ()OpenFOAM, OpenFOAMCldFL/FLSax6.46

    Cl =32

    1ReG

    6.46mei

    Cld (OpenFOAM)

  • (Tomiyama)

    A. Tomiyama et al., Chem. Eng. Sci., 57, 1849-1858 (2002)

    Cl =min 0.288tanh 0.121Res( ), f( )= f

    Fl =Cl f mss

    u u f( )

    Eod < 44 Eod 10.7

    f = 0.00105Eod3 0.0159Eod

    2 0.0204Eod + 0.474

    Eod =g f s( )dH2

    Eo: Etvs dH: dv: E: ds:

    E = dVdH

    =1

    1+ 0.163Eo0.757

    dH = 1+ 0.163Eo0.757( )dV

    dH = 1+ 0.163Eo0.757( )

    13 ds

  • (Tomiyama)

    scalar Eo = p.Eo(g, p.d(), sigma_); scalar dH = p.d()*cbrt(1.0 + 0.163*pow(Eo, 0.757)); scalar Eod = p.Eo(g, dH, sigma_); scalar f = 0.00105*pow3(Eod) - 0.0159*sqr(Eod) - 0.0204*Eod + 0.474; if (Eod 4) && (Eod

  • (6) SRF gravity nonInerHalFrame paramagneHc pressureGradient virtualMass

  • SRF

    f: s:

    F: m: g: : V:

    value.Su() = mass*(1.0 - p.rhoc()/p.rho()) *(2.0*(p.U() ^ omega) + (omega ^ (r ^ omega)));

    SRF (Single RotaTng Frame)()

    FSRF =ms 2v + r ( )

    ()

    FSRF =ms 1 fs

    "

    #$

    %

    &' 2v + r ( )

    SRFForce.C

    v = drdt

  • (gravity)

    Fg =msg lgVs

    f: s:

    F: m: g: : V: Vs =

    mss

    Fg =msg 1ls

    "

    #$

    %

    &'

    OpenFOAM

    value.Su() = mass*g_*(1.0 - p.rhoc()/p.rho());GravityForce.C

  • (nonInerTalFrame)

    FnIF =ms w+ 2v + r ( )

    Lagragian

    v = drdt

    value.Su() = mass *( -W_ + (r ^ omegaDot_) + 2.0*(p.U() ^ omega_) + (omega_ ^ (r ^ omega_)) );

    NonInerHalFrameForce.C

  • (paramagneTc)

    Fmg =ms 30

    +3

    H H#

    $%

    &

    '(

    ?

    value.Su()= mass*3.0*constant::electromagneHc::mu0.value()/p.rho() *magneHcSuscepHbility_/(magneHcSuscepHbility_ + 3) *HdotGradHInterp.interpolate(p.posiHon(), p.currentTetIndices());

    ParamagneHcForce.C

  • (pressureGradient)

    Fp =ms fs

    u ft

    +u f u f!

    "#

    $

    %&

    =ms fs

    Du fDt

    OpenFOAMBug (Bug #0001302)

    value.Su() = mass*p.rhoc()/p.rho()*DUcDt;

    PressureGradientForce.C

  • (virtualMass)

    Fvm = cvmFp

    = cvmms fs

    Du fDt

    Cvm: (0.5)

    forceSuSp value = PressureGradientForce::calcCoupled(p, dt, mass, Re, muc); value.Su() *= Cvm_;

    VirtualMassForce.C

  • OpenFOAMDEM

    Ver.2.3.x13

  • force

    template class SphereDragForce : public ParHcleForce

    SphereDrag/SphereDragForce.H

    forceParHcleForce

    class derive : public base

    basederive

    C++()

    $FOAM_SRC/lagrangian/intermediate/submodels/KinemaHc/ParHcleForces/ParHcleForce/

    ParHcleForce

  • force

    ParHcleForce

    Owner Mesh Coeffs

    cacheFields calcCoupled

    calcNonCoupled massAdd

    ParHcleForce.H

    virtual forceSuSp calcCoupled ( const typename CloudType::parcelType& p, const scalar dt, const scalar mass, const scalar Re, const scalar muc ) const;

    virtual: ()

    C++()ParHcleForcecalcCoupled, calcNonCoupled, massAdd (0)

  • DragForce

    ParHcleForce

    Owner Mesh Coeffs

    cacheFields calcCoupled

    calcNonCoupled massAdd

    Owner Mesh Coeffs

    cacheFields calcCoupled

    calcNonCoupled massAdd

    SphereDragForce

    SpereDragForcecalcCoupled calcCoupled (Drag(ErgunWenYuDrag, NonSphereDrag, PlessisMasliyahDrag, WenYuDrag))

    CdRe

    ParHcleForce

    DragForce

  • Li[Force

    ParHcleForce

    Owner Mesh Coeffs

    cacheFields calcCoupled

    calcNonCoupled massAdd

    Owner Mesh Coeffs

    cacheFields calcCoupled

    calcNonCoupled massAdd

    LiSForce

    Li[ForcecalcCoupled, cacheFieldsCl

    curlUc, Su Uc,Su

    Cl

  • Owner Mesh Coeffs

    cacheFields calcCoupled

    calcNonCoupled massAdd

    LiSForce

    Cl

    TomiyamaLiSForce

    Owner Mesh Coeffs

    cacheFields calcCoupled

    calcNonCoupled massAdd

    Cl

    TomiyamaLi[ForceCl Cl (LiSForce(TomiyamaLiSForce, SaffmanMeiLiSForce))

    ParHcleForce LiSForce LiSForce

    Li[Force

  • GravityForce

    ParHcleForce

    Owner Mesh Coeffs

    cacheFields calcCoupled

    calcNonCoupled massAdd

    Owner Mesh Coeffs

    cacheFields calcCoupled

    calcNonCoupled massAdd

    GravityForce

    GravityForcecalcNonCoupled, g

    g

    ParHcleForce

    GravityForce

  • NonInerTalForce

    ParHcleForce

    Owner Mesh Coeffs

    cacheFields calcCoupled

    calcNonCoupled massAdd

    Owner Mesh Coeffs

    cacheFields calcCoupled

    calcNonCoupled massAdd

    NonInerHalForce

    NonInerTalForcecalcNonCoupled, cacheFields, W, omega, omegaDot, CentreOfRotaTon

    W

    ParHcleForce

    NonInerHalForce

    omega omegaDot

    centreOfRotaHon

  • ParamagneTcForce

    ParHcleForce

    Owner Mesh Coeffs

    cacheFields calcCoupled

    calcNonCoupled massAdd

    Owner Mesh Coeffs

    cacheFields calcCoupled

    calcNonCoupled massAdd

    ParamagneHcForce

    NonInerTalForcecalcNonCoupled, cacheFields, HdotGradHName, magneTcSuscepTbility

    HdotGradHName

    ParHcleForce

    ParamegneHcForce

    magneHcSuscepHbility

  • PressureGradientForce

    ParHcleForce

    Owner Mesh Coeffs

    cacheFields calcCoupled

    calcNonCoupled massAdd

    Owner Mesh Coeffs

    cacheFields calcCoupled

    calcNonCoupled massAdd

    PressureGradientForce

    PressureGradientForcecalcCoupled, massAdd, cacheFields, DUcDtInterp

    DUcDtInterp

    ParHcleForce

    PressureGradientForce

  • VirtualMassForce

    Owner Mesh Coeffs

    cacheFields calcCoupled

    calcNonCoupled massAdd

    VirtualMassForce

    Vi_ualMassForcecalcCoupled, massAdd, cacheFields

    ParHcleForce

    PressureGradientForce

    Owner Mesh Coeffs

    cacheFields calcCoupled

    calcNonCoupled massAdd

    PressureGradientForce

    DUcDtInterp

    VirtualMassForce

    DUcDtInterp

  • SRFForce

    ParHcleForce

    Owner Mesh Coeffs

    cacheFields calcCoupled

    calcNonCoupled massAdd

    Owner Mesh Coeffs

    cacheFields calcCoupled

    calcNonCoupled massAdd

    SRFForce

    SRFForcecalcNonCoupled, cacheFields

    ParHcleForce

    SRFForce

  • coupled or nonCoupled

    Coupled nonCoupled

    LiSForce (TomiyamaLiSForce, SaffmanMeiLiSForce)

    DragForce (SphereDrag, ErgunWenYuDrag, NonSphereDrag, PlessisMasliyahDrag, WenYuDra)

    GravityForce

    NonInerHalForce

    ParamegneHcForce

    PressureGradientForce

    VirtualMassForceSRFForce

    couplednonCoupled?

  • $FOAM_SRC/lagrangian/intermediate/submodels/KinemaHc/ParHcleForces/forceSuSp

    forceSuSp.H F = Sp U Up( )+ Su

    F: Su: () Sp: (/)

    coupled (Sp) nonCoupled (Su)

  • forceSuSp

    class forceSuSp : public Tuple2

    forceSuSp.H

    class derive : public base

    basederive

    C++()

    forceSuSpTuple2

    Tuple2

    first second reverseTuple2

    forceSuSp

    first second reverseTuple2

    Su Sp

  • forceSuSpforceSuSpI.H

    inline Foam::vector& Foam::forceSuSp::Su() { return first(); } inline Foam::scalar& Foam::forceSuSp::Sp() { return second(); }

    Su()Tuple2first()Sp()second()

    Su Sp

  • References

    A. Haier and O. Levenspiel, Powder Technol., 58, 63-70 (1989).

    C. Y. Wen and Y. H. Yu, Chem. Eng. Prog. S. Ser., 62, 100-113 (1966).

    S. Ergun, Chem. Eng. Prog., 48, 89-94 (1952). J. P. Du Plessis and J. H. Masliyah, Trans. Porous Media, 3, 145-161 (1988).

    R. Mei, Int. J. Multiphase Flow, 18, 145-147 (1992). A. Tomiyama et al., Chem. Eng. Sci., 57, 1849-1858 (2002). C++()