BasedOnVolumeFlux

generate a sequence of spherical droplets based on user defined volume flux

DropletSource(n) = ( V_dot, sizeOfNewDroplets, xPosOfNewDroplet, yPosOfNewDroplet, zPosOfNewDroplet, iChamber, $Material$, OPTIONAL %DropletSource_doNotCreateDropletsOutside% , OPTIONAL %ind_v(1)%, xVelocityNewDroplet , OPTIONAL %ind_v(2)%, yVelocityNewDroplet , OPTIONAL %ind_v(3)%, zVelocityNewDroplet , OPTIONAL %ind_h%, initialH_NewDroplet )
Parameter Meaning
n index of the DropletSource sequence (up to 99)
V_dot volume flux to be generated by the droplet sequence in m^3/s
sizeOfNewDroplets volume of next droplet in the sequence in m^3
xPosOfNewDroplet x-position of next droplet in the sequence
yPosOfNewDroplet y-position of next droplet in the sequence
zPosOfNewDroplet z-position of next droplet in the sequence
iChamber chamber index to which each new droplet of the sequence will have to belong
$Material$ material index to which each new droplet will have to belong
%DropletSource_doNotCreateDropletsOutside% (optional) with this flag creation of droplets outside of EVENT-cuts are prevented, such that V_dot is preserved for the reduced creation area
%ind_v(1)%, %ind_v(2)%, %ind_v(3)% set the x, y, z velocity of the next droplet in the sequence respectively
xVelocityNewDroplet, yVelocityNewDroplet, zVelocityNewDroplet x, y, z velocity of the next droplet in the sequence respectively
%ind_h% set the initial interaction radius (SMOOTH_LENGTH) of the droplet. This can be useful for simulations with 'ADDS', 'ADTV' or when creating new points in DROPLETPHASE or STANDBY pointclouds
In order to generate a unique sequence of droplets, the functionalities given in real() can be used, especially in TwoArguments the options REMARK: Application of the optional parameters to initialize the fields %ind_v(1)%, %ind_v(2)% and %ind_v(3)% is developed for DROPLETPHASE solver. It may be used as an experimental feature for the LIQUID solver. Usage for the LIQUID solver with care! The settings done here for the initialization of the variables %ind_v(1)%, %ind_v(2)% and %ind_v(3)% will overwrite the settings from INITDATA for the DropletSource. REMARK: Radius correction Feature: (LIQUID only!) From the volume \( V\) given by the user, we compute the radius \( r\) of the sphere classically by \begin{align} r = \left( \frac{3V}{4 \pi} \right)^{\frac{1}{3}}\end{align} However, taking into account that the volume of the discrete particle sphere will be less (linear approximation of a convex, curved manifold), we correct the radius by \begin{align} \tilde{r} = r \cdot \left( 2 - \sqrt{ 1 - \left( \frac{\alpha}{2} \frac{h}{r} \right)^2 } \right)\end{align} where \( \alpha\) is the value of radius_hole and \( h\) is the current smoothing length.

Examples

Example 1: Randomly distributed droplets of identical size
DropletSource(1) = ( 5, [&Hmax&^3], [20*rand(1)], [1.5*rand(-1)], [2], 1, $Mat1$ ) # the droplet positions to be created are random: 0 < x < 20 # -1.5 < y < 1.5 # z = 2
Example 2: Droplets with random diameter from given distribution See drand().

EXPERIMENTAL - Parcel injection

DropletSource has an additional experimental syntax for injecting parcels:
DropletSource(n) = ( V_dot, sizeOfNewDroplets, xPosOfNewDroplet, yPosOfNewDroplet, zPosOfNewDroplet, iChamber, $Material$, OPTIONAL %DropletSource_doNotCreateDropletsOutside% , OPTIONAL ParcelInjectionOption , OPTIONAL ParcelInjectionQuantity )
If a ParcelInjectionOption is specified in DropletSource, e.g.
DropletSource(n) = ( V_dot, sizeOfNewDroplets, xPosOfNewDroplet, yPosOfNewDroplet, zPosOfNewDroplet, iChamber, $Material$, %DropletSource_Multiplicity%, Multiplicity ) DropletSource(n) = ( V_dot, sizeOfNewDroplets, xPosOfNewDroplet, yPosOfNewDroplet, zPosOfNewDroplet, iChamber, $Material$, %DropletSource_ParcelRate%, ParcelRate ) DropletSource(n) = ( V_dot, sizeOfNewDroplets, xPosOfNewDroplet, yPosOfNewDroplet, zPosOfNewDroplet, iChamber, $Material$, %DropletSource_ParcelSize%, sizeOfParcel )
points will be injected with a calculated multiplicity \( n_i\) (stored in %ind_mult%). The multiplicty is calculated based on an additional ParcelInjectionQuantity provided as an additional argument to DropletSource directly following ParcelInjectionOption. The meaning of this quantity and the formula for \( n_i\) differ for different values of ParcelInjectionOption, as shown in the following table:
ParcelInjectionOption ParcelInjectionQuantity Equation
%DropletSource_Multiplicity% Multiplicity \( n_i\) [1] \( n_i = n_i\)
%DropletSource_ParcelRate% ParcelRate \( \omega_i\) [Parcel/s] \( n_i = \dot{V}_i/(V_i^{Droplet}\omega_i)\)
%DropletSource_ParcelSize% sizeOfParcel \( V_i^{Parcel}\) [m^3] \( n_i = V_i^{Parcel}/V_i^{Droplet}\)
Clearly, the above formulas for \( n_i\) may lead to non-integer multiplicities, in which case the nearest integer value is used. Also, a minimum multiplicity of one is always enforced. Note: : It is still possible to use %DropletSource_doNotCreateDropletsOutside% when using parcel injection. In this case, %DropletSource_doNotCreateDropletsOutside% needs to preceed ParcelInjectionOption, e.g.
DropletSource(n) = ( V_dot, sizeOfNewDroplets, xPosOfNewDroplet, yPosOfNewDroplet, zPosOfNewDroplet, iChamber, $Material$, %DropletSource_doNotCreateDropletsOutside%, %DropletSource_Multiplicity%, Multiplicity )

Examples - Parcel injection

Example 3: Inject parcels with random diameter from given distribution and with specified multiplicity First, we store the probabilities (P) together with its associated droplet diameters (D) and multiplicities (Mult) in a begin_table{ environment:
begin_table{$TAB_ParcelData$} # P D Mult 0.05 1.5e-4 5 0.20 2.5e-4 10 0.35 3.5e-4 15 0.25 4.5e-4 20 0.15 5.5e-4 25 end_table
Next, we use the drand() function to sample droplets with a random diameter based on the above probabilites (see Example 2). To define the parcel multiplicity, we use %DropletSource_Multiplicity% and the same drand() argument, but with the column index of the multiplicity data:
DropletSource(1) = ( [ &PS_vdot& ], [ &piover6& * drand($TAB_ParcelData$,1,2,equn($iDroplet$))^3 ], 0, 0, 0, 1, $MAT_Droplet$, %DropletSource_Multiplicity%, [ drand($TAB_ParcelData$,1,3,equn($iDroplet$)) ] ) begin_equation{"iDroplet"} # this equation returns the unique counter of the next droplet real(%DropletSource_provideCounter%, 1) + 1 end_equation
Note, that we use the optional argument iReproducible of drand() together with the droplet counter. This is essential to ensure that the drand() function returns the same row of the table as long as we are processing the same droplet. Otherwise the association between diameters and multiplicities would be lost.