更改瞬态喷射中的质量流率
本节举例说明如何更改瞬态喷射中的质量流率。
默认情况下,Simcenter STAR-CCM+ 中的每个粒子束表示相同的质量。 粒子束的质量是单个颗粒的质量 和粒子束计数之积。 粒子束计数是粒子束中包含的颗粒数。 粒子束计数是一个浮点数,还可以视为在该空间位置找到具有该质量和直径的颗粒的概率。
通过用户程序将每个粒子束中的质量作为直径函数进行更改很简单。 在此示例中,每个粒子束的质量流率随直径而线性增加。
要将参数传递给子例程,必须通过调用库例程 ufarg() 注册参数:
subroutine uflib()
use StarRealMod
implicit none
c Register user functions
external linearDiameter
external parcelMdot
call uffunc(linearDiameter,
& "ParcelProfile",
& "Linear Diameter")
call uffunc(parcelMdot,
& "ParcelProfile",
& "Parcel Mass Flow")
call ufarg(parcelMdot,
& "Parcel",
& "$ParticleDiameter",
& CoordRealSize)
return
end
要设置线性直径分布,通过替换用于设置结果的行来修改 rosinRammlerDiameter.f 例程。 在此示例中,最小直径设为 1 微米,最大值设为 100 微米。 这些直径可以设为参数。 线性分布可以编码为:
delta = (maxdiam-mindiam)/(size-1)
do i = 1, size
result(i) = mindiam+(i-1)*delta
enddo
由于下面的示例例程为喷射中的每个粒子束设置了质量流率,因此必须将质量流率条件设为“根据粒子束流”。 此设置仅当喷射器位于单个分区中时才有效,如果分区穿过喷射器,则此设置在并行模式下不起作用。
subroutine parcelMdot(result,size,D)
use StarRealMod
implicit none
integer, intent(in) :: size
real(StarReal), intent(out) :: result(size)
real(CoordReal), intent(in) :: D(*)
c parcel mass is count*rho*volume, so for an exponent of
c -3 parcel mass is constant (default behavior)
c -2 parcel mass increases with diameter linearly
c -1 parcel mass increases with diameter quadratically
c etc.
real(StarReal), parameter :: expon = -2.0
real(StarReal) sum, ratio, mdot
integer i
c a constant mass flow rate for all particles
mdot = 1.0e-3*size
c set the Parcel Count
sum = 0.0
do i = 1, size
result(i) = D(i)**expon
sum = sum + result(i)*D(i)**3
end do
c scale for flow rate per parcel
if (sum > 0.0) then
ratio = mdot/sum
do i = 1, size
result(i) = ratio*result(i)*D(i)**3
enddo
endif
return
end
作为颗粒直径函数的粒子束质量的 XY 绘图显示了 Simcenter STAR-CCM+ 的默认行为(相 1)和用户程序的结果(相 2),且粒子束质量随直径而线性增加。