• 返回目录

  • 第五章:群体平衡模型的UDF


    这一章我们讨论以下内容:
    5.1.群体平衡模型变量
    5.2.群体平衡模型中的DEFINE
    5.3.挂载UDF
  • 5.1.群体平衡模型变量

  • 表5.1中列举的宏可以返回对应的某个群体平衡模型求解方法的real(实数)变量。他们在压力基以及密度基求解器中都可用。sg_pb.h头文件(被udf.h头文件包含)中定义了相关的宏。

    表5.1.sg_pb.h头文件中定义的群体平衡模型宏

    Macro Argument Types Returns
    C_PB_DISCI cell_t c,Thread *t, int i 第i个bins的体积分数
    C_PB_SMMI cell_t c,Thread *t, int i 第i个动量
    C_PB_QMOMI cell_t c,Thread *t, int i 第i个动量,其中i为0,1,2,3,4,5
    C_PB_QMOMI_L cell_t c,Thread *t, int i 节点$L_i$,其中i为0,1,2
    C_PB_QMOMI_W cell_t c,Thread *t, int i 权重$w_i$,其中i为0,1,2
    C_PB_DISCI_PS cell_t c,Thread *t, int i 第i个bins的源项
    C_PB_SMMI_PS cell_t c,Thread *t, int i 第i个动量的源项
    C_PB_QMOMI_PS cell_t c,Thread *t, int i 第i个动量的源项


     
  • 5.2.群体平衡模型中的DEFINE宏函数

  •  这一节我们来讨论群体平衡模型中的DEFINE宏函数。每个DEFINE宏函数被定义在udf.h头文件中。
    5.2.1.DEFINE_PB_BREAK_UP_RATE_FREQ
    5.2.2.DEFINE_PB_BREAK_UP_RATE_PDF
    5.2.3.DEFINE_PB_COALESCENCE_RATE
    5.2.4.DEFINE_PB_NUCLEATION_RATE
    5.2.5.DEFINE_PB_GROWTH_RATE
    Report菜单下,用户可以调取矩和数量密度函数。
  • 5.2.1.DEFINE_PB_BREAK_UP_RATE_FREQ

  •  用户可以使用DEFINE_PB_BREAK_UP_RATE_FREQ宏函数来定义破碎频率。这个函数会在每个时间步之前进行计算。
  • 5.2.1.1.使用

  • DEFINE_PB_BREAK_UP_RATE_FREQ(name, cell, thread, d_1)

    参数类型
    描述

    char name
    UDF 名称

    cell_t cell
    网格索引

    Thread *thread
    指向离散相(d_1)的指针

    real d_1
    子粒径


    函数返回

    real


    DEFINE_PB_BREAK_UP_RATE_FREQ宏函数中,需要提供4个参数:name(UDF的名称),cellthreadd_1(后三个参数传入宏函数)。
  • 5.2.1.2.一个范例

  • 下面我们通过UDF来定义Coulaloglou & Tavlarides的破碎频率模型。其公式如下: \begin{equation}\tag{5.1} g(V') = {C_1}\frac{{{\varepsilon^{1/3}}}}{{{d^{2/3}}(1+\alpha)}}\exp \left( {-C_2}\frac{\sigma (1+\alpha)^2 }{{{\rho_l}{\varepsilon^{2/3}}{d^{5/3}}}} \right) \end{equation} 其中$C_1$和$C_2$为常数,$ε$为湍流耗散率,$d$为母粒径,$σ$为表面张力,$α$为离散相体积分数,$ρ_l$为连续相的密度。

    /************************************************************************
    UDF that computes the particle breakage frequency
    *************************************************************************/
    #include "udf.h"
    #include "sg_pb.h"
    #include "sg_mphase.h"
    DEFINE_PB_BREAK_UP_RATE_FREQ(break_up_freq_tav, cell, thread, d_1)
    {
        real epsi, alpha, f1, f2, rho_d;
        real C1 = 0.00481, C2 = 0.08, sigma = 0.07;
        Thread *tm = THREAD_SUPER_THREAD(thread);/*passed thread is phase*/
        epsi = C_D(cell, tm);
        alpha = C_VOF(cell, thread);
        rho_d = C_R(cell, thread);
        f1 = pow(epsi, 1./3.)/((1.+epsi)*pow(d_1, 2./3.));
        f2 = -(C2*sigma*(1.+alpha)*(1.+alpha))/(rho_d*pow(epsi,2./3.)*pow(d_1, 5./3.));
        return C1*f1*exp(f2);
    }
    

  • 5.2.2.DEFINE_PB_BREAK_UP_RATE_PDF

  •  用户可以使用DEFINE_PB_BREAK_UP_RATE_PDF宏函数来定义破碎DSD函数。这个函数会在每个时间步之前进行计算。
  • 5.2.2.1.使用

  • DEFINE_PB_BREAK_UP_RATE_PDF(name, cell, thread, d_1, thread_2, d_2)

    参数类型
    描述

    char name
    UDF 名称

    cell_t cell
    网格索引

    Thread *thread
    指向离散相(d_1)的指针

    real d_1
    子粒径

    Thread *thread_2
    指向离散相(d_2)的指针

    real d_2
    破碎后的粒径,其通过粒子体积不变来进行计算



    函数返回

    real


    DEFINE_PB_BREAK_UP_RATE_PDF宏函数中,需要提供6个参数:name(UDF的名称),cellthreadd_1,thread_2d_2(后五个参数传入宏函数)。


    注意:

    threadthread_2对于离散法,QMOM,SMM是相同的。对于非均一模型,他们是否相同取决于d_1和d_2是否从属于一相。

  • 5.2.2.2.一个范例

  • 下面我们通过UDF来定义抛物线的破碎DSD函数:

    /************************************************************************
    UDF that computes the particle breakage PDF
    *************************************************************************/
    #include "udf.h"
    #include "sg_pb.h"
    #include "sg_mphase.h"
    DEFINE_PB_BREAK_UP_RATE_PDF(break_up_pdf_par, cell, thread, d_1, thread_2, d_2)
    {
        real pdf;
        real kv = M_PI/6.;
        real C = 1.0;
        real f_2, f_3, f_4;
        real V_prime = kv*pow(d_1,3.);
        real V = kv*pow(d_2,3.);
        f_2 = 24.*pow(V/V_prime,2.);
        f_3 = -24.*(V/V_prime);
        f_4 = 6.;
        pdf = (C/V_prime) + ((1.-C/2.)/V_prime)*(f_2 + f_3 + f_4);
        return 0.5*pdf;
    }
    

  • 5.2.3. DEFINE_PB_COALESCENCE_RATE

  •  用户可以使用DEFINE_PB_COALESCENCE_RATE宏函数来定义破碎聚并函数。这个函数会在每个时间步之前进行计算。
  • 5.2.3.1.使用

  • DEFINE_PB_COALESCENCE_RATE (name, cell, thread, d_1, thread_2, d_2)

    参数类型
    描述

    char name
    UDF 名称

    cell_t cell
    网格索引

    Thread *thread
    指向离散相(d_1)的指针

    Thread *thread_2
    指向离散相(d_2)的指针

    real d_1,d_2
    碰撞粒子的粒径



    函数返回

    real


    DEFINE_PB_ COALESCENCE_RATE宏函数中,需要提供6个参数:name(UDF的名称),cellthreadd_1,thread_2d_2(后五个参数传入宏函数)。这个函数最后会返回一个实数的聚并率。


    注意:

    threadthread_2对于离散法,QMOM,SMM是相同的。对于非均一模型,他们是否相同取决于d_1和d_2是否从属于一相。

  • 5.2.3.2.一个范例

  • 下面我们通过UDF来定义布朗运动聚并核函数,在这个聚并核中,其定义为: \begin{equation}\nonumber a(L,\lambda)=a(V,V')=\beta_0\frac{(L+\lambda)^2}{L\lambda} \end{equation} 其中$\beta_0=1\times10^{-17}m^3/s$

    /************************************************************************
    UDF that computes the particle breakage PDF
    *************************************************************************/
    #include "udf.h"
    #include "sg_pb.h"
    #include "sg_mphase.h"
    DEFINE_PB_COALESCENCE_RATE(aggregation_kernel,cell,thread,d_1,thread_2,d_2)
    {
        real agg_kernel;
        real beta_0 = 1.0e-17 /* aggregation rate constant */
        agg_kernel = beta_0*pow((d_1+d_2),2.0)/(d_1*d_2);
        return agg_kernel;
    }
    

  • 5.2.4. DEFINE_PB_ NUCLEATION_RATE

  • 用户可以使用DEFINE_PB_NUCLEATION_RATE宏函数来定义成核率。这个函数会在每个时间步之前计算。
  • 5.2.4.1.使用

  • DEFINE_PB_NUCLEATION_RATE (name, cell, thread)

    参数类型
    描述

    char name
    UDF 名称

    cell_t cell
    网格索引

    Thread *thread
    指向离散相(d_1)的指针

    函数返回

    real


    DEFINE_PB_ NUCLEATION_RATE宏函数中,需要提供6个参数:name(UDF的名称),cellthread(后三个参数传入宏函数)。这个函数最后会返回一个实数的成核率。

  • 5.2.4.2.一个范例

  • 氯化钾在水中冷却的时候会结晶。其溶解度随着温度的降低而线性的降低。假定一个幂率函数成核率: \begin{equation}\nonumber \dot{n}=K_n(S-1)^{N_n} \end{equation} 其中$K_n=4\times10^{10}$,$N_n=2.77$。

    /************************************************************************
    UDF that computes the particle nucleation rate
    *************************************************************************/
    #include "udf.h"
    #include "sg_pb.h"
    #include "sg_mphase.h"
    DEFINE_PB_NUCLEATION_RATE(nuc_rate, cell, thread)
    {
        real J, S;
        real Kn = 4.0e10; /* nucleation rate constant */
        real Nn = 2.77; /* nucleation law power index */
        real T,solute_mass_frac,solvent_mass_frac, solute_mol_frac,solubility; 
        real solute_mol_wt, solvent_mol_wt;
        Thread *tc = THREAD_SUPER_THREAD(thread); /*obtain mixture thread */
        Thread **pt = THREAD_SUB_THREADS(tc); /* pointer to sub_threads */
        Thread *tp = pt[P_PHASE]; /* primary phase thread */
        solute_mol_wt = 74.55; /* molecular weight of potassium chloride */
        solvent_mol_wt = 18.; /* molecular weight of water */
        solute_mass_frac = C_YI(cell,tp,0);
        /* mass fraction of solute in primary phase (solvent) */
        solvent_mass_frac = 1.0 - solute_mass_frac;
        solute_mol_frac = (solute_mass_frac/solute_mol_wt)/
        ((solute_mass_frac/solute_mol_wt)+(solvent_mass_frac/solvent_mol_wt));
        T = C_T(cell,tp); /* Temperature of primary phase in Kelvin */
        solubility = 0.0005*T-0.0794;
        /* Solubility Law relating equilibrium solute mole fraction to Temperature*/
        S = solute_mol_frac/solubility; /* Definition of Supersaturation */
        if (S = 1.)
        {
            J = 0.;
        }
        else
        {
            J = Kn*pow((S-1),Nn);
        }
        return J;
    }
    


    注意:

    溶解度以及组分应该在上面的函数中分别定义。

  • 5.2.5. DEFINE_PB_ GROWTH _RATE

  • 用户可以使用DEFINE_PB_GROWTH_RATE宏函数来定义增长率。这个函数会在每个时间步之前计算。
  • 5.2.5.1.使用

  • DEFINE_PB_ GROWTH _RATE (name, cell, thread, d_i)

    参数类型
    描述

    char name
    UDF 名称

    cell_t cell
    网格索引

    Thread *thread
    指向第二相的指针

    real d_i
    粒径

    函数返回

    real


    DEFINE_PB_ GROWTH _RATE宏函数中,需要提供4个参数:name(UDF的名称),cellthreadd_i(后四个参数传入宏函数)。这个函数最后会返回一个实数的增长率。

  • 5.2.5.2.一个范例

  • 氯化钾在水中冷却的时候会结晶。其溶解度随着温度的降低而线性的降低。假定一个幂率函数增长率: \begin{equation}\nonumber G=K_g(S-1)^{N_g} \end{equation} 其中$K_g=2.8\times10^{-8}$,$N_g=1$。

    /************************************************************************
    UDF that computes the particle growth rate
    *************************************************************************/
    #include "udf.h"
    #include "sg_pb.h"
    #include "sg_mphase.h"
    DEFINE_PB_GROWTH_RATE(growth_rate, cell, thread,d_1)
    {
        /* d_1 can be used if size-dependent growth is needed */
        /* When using SMM, only size-independent or linear growth is allowed */
        real G, S;
        real Kg = 2.8e-8; /* growth constant */
        real Ng = 1.; /* growth law power index */
        real T,solute_mass_frac,solvent_mass_frac, solute_mol_frac,solubility;
        real solute_mol_wt, solvent_mol_wt;
        Thread *tc = THREAD_SUPER_THREAD(thread); /*obtain mixture thread */
        Thread **pt = THREAD_SUB_THREADS(tc); /* pointer to sub_threads */
        Thread *tp = pt[P_PHASE]; /* primary phase thread */
        solute_mol_wt = 74.55; /* molecular weight of potassium chloride */
        solvent_mol_wt = 18.; /* molecular weight of water */
        solute_mass_frac = C_YI(cell,tp,0);
        /* mass fraction of solute in primary phase (solvent) */
        solvent_mass_frac = 1.0 - solute_mass_frac;
        solute_mol_frac = (solute_mass_frac/solute_mol_wt)/
        ((solute_mass_frac/solute_mol_wt)+(solvent_mass_frac/solvent_mol_wt));
        T = C_T(cell,tp); /* Temperature of primary phase in Kelvin */
        solubility = 0.0005*T-0.0794;
        /* Solubility Law relating equilibrium solute mole fraction to Temperature*/
        S = solute_mol_frac/solubility; /* Definition of Supersaturation */
        if (S = 1.)
        {
            G = 0.;
        }
        else
        {
            G = Kg*pow((S-1),Ng);
        }
        return G;
    }
    


    注意:

    溶解度以及组分应该在上面的函数中分别定义。

  • 5.3. 挂载群体平衡模型UDF

  • 在定义了DEFINE_PB_BREAK_UP_RATE_FREQ, DEFINE_PB_ BREAK_UP_RATE_PDF, DEFINE_PB_COALESCENCE_RATE, DEFINE_PB_NUCLEATION_RATE, 以及 DEFINE_PB_GROWTH_RATE 宏函数且编译成功后,在每个宏函数中用户指定的UDF名称(例如,agg_kernel)会显示出来并可选(在Population Balance Model对话框下的Phenomena下拉菜单中)。




    附录以及参考文献略
    《ANSYS Fluent群体平衡模型指南》全文完



    上一页