### 8.5.4. Fluid Pairs

The models described in this section are selected on the Fluid Pairs tab when creating a domain containing particles in CFX-Pre. For details, see Fluid Pair Models Tab in the CFX-Pre User's Guide.

#### 8.5.4.1. Particle Fluid Pair Coupling Options

Particles can be either fully coupled to the continuous fluid or can be one-way coupled. Fully coupled particles exchange momentum with the continuous phase, enabling the continuous flow to affect the particles, and the particles to affect the continuous flow.

Full coupling is needed to predict the effect of the particles on the continuous phase flow field but has a higher CPU cost than one-way coupling. One-way coupling simply predicts the particle paths as a post-process based on the flow field and therefore it does not influence the continuous phase flow field. For details, see Interphase Transfer Through Source Terms in the CFX-Solver Theory Guide.

The choice of one-way or full coupling for particles depends on the mass loading, that is, the ratio of the mass flow rate of particles to the mass flow rate of fluid. One-way coupling may be an acceptable approximation in flows with low mass loadings where particles have a negligible influence on the fluid flow. If the particles influence the fluid flow significantly, then you should use full coupling.

To optimize CPU usage, you can create two sets of identical particles. The first smaller set should be fully coupled and is used to enable the particles to influence the flow field. The second larger set should use one-way coupling and provides a more accurate calculation of the particle volume fraction as well as local forces on walls. When postprocessing these types of cases, you should not, for example, sum the forces on the wall from both sets of particles because each set fully represents all the particles.

The CPU cost of tracking particles is proportional to the number of particles tracked multiplied by the number of times tracked. One-way coupled particles are tracked only once, at the end of the solver run. The number of times fully coupled particles are tracked depends on the iteration frequency set on the Solver Control tab and the number of iterations required for the simulation to converge.

You can define multiple sets of one-way coupled particles without affecting the flow field. For example, if you were conducting a parametric study with various different particle sizes, you can create multiple particle materials with the same properties and then use each one to define a set of particles with different diameters. This is not true of fully coupled particles, because each set influences the flow field.

#### 8.5.4.2. Drag Force for Particles

There are three ways in which the drag forces between the continuous phase and the particle phase can be modeled:

- Use the Schiller-Naumann, Ishii-Zuber, or Grace correlations.

- Use Particle Transport Drag Coefficient and specify the drag coefficient using one of the following options:

  - Drag Coefficient - specify a constant value (CEL expressions are not permitted)

  - User Defined - specify a drag correlation using a particle user routine. See Particle User Source Example for an example of how to do this.

- Set the drag to `None` and set your own drag force using a particle user routine.

A description of these particle models is available in Interphase Drag for the Particle Model, along with models for Euler-Euler flows.

##### 8.5.4.2.1. Particle User Source Example

This example is a basic routine used to calculate the particle drag coefficient using the Wen Yu Drag Model. The Schiller-Naumann correlation is used with a modified particle Reynolds number and a power law correction, both functions of the continuous phase volume fraction. The input arguments to the routine are Particle Reynolds number and volume fraction of the particle phase. The Fortran subroutine returns the particle drag coefficient, C_d. You can copy the routine (pt_drag_factor.F) from the <install_dir>\examples\UserFortran directory.

The Fortran for this example is:

    #include "cfx5ext.h"
    dllexport(pt_drag_factor)
          SUBROUTINE PT_DRAG_FACTOR (NLOC,NRET,NARG,RET,ARG,CRESLT,
         &                              CZ,DZ,IZ,LZ,RZ)
    CC
    CC --------------------
    CC        Input
    CC --------------------
    CC
    CC  NRET   - number of components in result
    CC  NARG   - number of arguments in call
    CC  ARG() - (NARG) argument values
    CC
    CC --------------------
    CC      Modified
    CC --------------------
    CC
    CC  Stacks possibly.
    CC
    CC --------------------
    CC        Output
    CC --------------------
    CC
    CC  RET()  - (NRET) return values
    CC
    CC --------------------
    CC       Details
    CC --------------------
    CC
    CC======================================================================
    C
    C ------------------------------
    C     Preprocessor includes
    C ------------------------------
    C
    C ------------------------------
    C        Global Parameters
    C ------------------------------
    C
    C ------------------------------
    C        Argument list
    C ------------------------------
    C
          INTEGER NLOC,NARG,NRET
    C
          REAL ARG(NLOC,NARG), RET(NLOC,NRET)
    C
          CHARACTER CRESLT*(*)
    C
          INTEGER IZ(*)
          CHARACTER CZ(*)*(1)
          DOUBLE PRECISION DZ(*)
          LOGICAL LZ(*)
          REAL RZ(*)
    C
    C ------------------------------
    C        External routines
    C ------------------------------
    C
    C ------------------------------
    C        Local Parameters
    C ------------------------------
    C
    C ------------------------------
    C        Local Variables
    C ------------------------------
    C
    C ------------------------------
    C        Stack pointers
    C ------------------------------
    C
    C=======================================================================
    C
    C ---------------------------
    C    Executable Statements
    C ---------------------------
    C
    C=======================================================================
    C
    C     Argument variables stack:
    C     -------------------------
    C     Reynolds number          :     RE_PT      = ARG(1,1)
    C     Particle volume fraction :     VOLFRN_PT  = ARG(1,2)
    C
    C     Return variables stack:
    C     -----------------------
    C     Drag coefficient         :     CD         = RET(1,1)
    C
    C=======================================================================
    C
    C-----------------------------------------------------------------------
    C     Calculate the momentum source and source term coefficient
    C-----------------------------------------------------------------------
    C
          CALL USER_CD(RET(1,1),ARG(1,1),ARG(1,2))
          END
    C
          SUBROUTINE USER_CD(CD,RE_PT,VOLFRN_PT)
    C
    C=======================================================================
    C     Calculate the momentum source and source term coefficient
    C=======================================================================
    C
    C ------------------------------
    C     Preprocessor includes
    C ------------------------------
    C
    #include "cfd_sysdep.h"
    #include "cfd_constants.h"
    C
    C ------------------------------
    C        Argument list
    C ------------------------------
    C
          REAL CD, RE_PT, VOLFRN_PT
    C
    C ------------------------------
    C        Local variables
    C ------------------------------
    C
          REAL VOLFRN_C, RE_S
    C
    C ------------------------------
    C    Executable statements
    C ------------------------------
    C
    C---- Clip continuous phase volume fraction [0,1]
    C
          VOLFRN_C  = 1. - MAX(0.0,MIN(1.0,VOLFRN_PT))
    C
    C---- Correct Reynolds number
    C
          RE_S = RE_PT*VOLFRN_C
    C
    C---- Calculate the Schiller-Naumann drag coefficient
    C
          IF (RE_S .LT. 1000.) THEN
            CD = 24./RE_S*(1+0.15*RE_S**0.687)
          ELSE
            CD = 0.44
          ENDIF
    C
    C---- Correct drag coefficient to account for high particle volume
    C     loading
    C
          CD = VOLFRN_C**-1.65*CD
    C
          END

##### 8.5.4.2.2. Linearization Blend Factor

The linearization blend factor is a value that interpolates between simple linearization and the linearization based upon accurate differentiation of the drag. The recommended value (and the default) is 0.

#### 8.5.4.3. Particle User Source

For details, see Particle User Sources.

#### 8.5.4.4. Non-Drag Forces

##### 8.5.4.4.1. Virtual Mass Force

Virtual mass force can be modeled with the specification of a virtual mass coefficient. The virtual mass force is proportional to the continuous phase density, hence, is most significant when the dispersed phase density is less than the continuous phase density. Also, by its nature, it is only significant in the presence of large accelerations, for example, in transient flows, and in flows through narrow restrictions. Additional information on the implementation and usage for this model is available in Virtual Mass Force. For particle transport, the virtual mass coefficient defaults to 0.5.

##### 8.5.4.4.2. Turbulent Dispersion Force

Turbulent dispersion forces result in additional dispersion of particles from high volume fraction regions to low volume fraction regions due to turbulent fluctuations. The `Particle Dispersion` model is available to account for the turbulent dispersion force. This force is only important for small particles (approximately smaller than 100 microns for water drops in air) and when you want to see the dispersion. For example, even when the particle tracks are affected by turbulence, the effect of the particles on the continuous phase is usually the important process, and this is not affected by the turbulence.

The turbulent dispersion force is only active in regions where the turbulent viscosity ratio is above the value specified by Eddy Viscosity Ratio Limit. The default value is 5.

Note: Turbulent dispersion can only be used if a drag force is specified. Therefore, it is not possible to combine turbulent dispersion with a user-specified momentum source term for the drag.

##### 8.5.4.4.3. Pressure Gradient Force

The pressure gradient force is small for particles of much higher density than the continuum fluid and need not be included when this is the case. For details, see Pressure Gradient Force in the CFX-Solver Theory Guide.

#### 8.5.4.5. Interphase Heat Transfer

The only available heat transfer option between the continuous phase and the particles is `Ranz Marshall`. The Ranz Marshall correlation is also applicable to Eulerian multiphase flow. For details, see Particle Model Correlations for Overall Heat Transfer Coefficient.

##### 8.5.4.5.1. Particle User Source

For details, see Particle User Sources.

#### 8.5.4.6. Interphase Radiation Transfer

##### 8.5.4.6.1. Opaque

If `Opaque` is chosen, the radiation transfer can be either one-way coupled or fully coupled (if the overall coupling is fully coupled). For details, see:

- Opaque

- Emissivity.

##### 8.5.4.6.2. Blended Particle Emissivity

When a reacting particle case has been defined, two parameters exist to account for the change as the reacting particle changes its composition. For details, see Multiphase Reactions and Combustion. Base Emissivity and Blended Emissivity must both be supplied. The present model assumes a linear variation in the emissivity from the reference material (for example, raw coal) value to the value of the reaction product (for example, char). For details, see Radiative Preheating in the CFX-Solver Theory Guide.

#### 8.5.4.7. Mass Transfer

There are a number of choices available for mass transfer in ANSYS CFX. The choices available for mass transfer depend on the type of particles that have been selected for the simulation. For any particle, simple mass transfer can be modeled with the `Ranz Marshall` model. Mass transfer from liquid drops can be modeled with the `Liquid Evaporation Model`. Coal combustion also uses mass transfer, but is set up using multiphase reactions, so no component pair information should be set at this point. For details, see Multiphase Reactions and Combustion.

Important: Regardless of the mass transfer option chosen, whenever mass transfer takes place, the particle diameter is automatically changed to reflect the change in mass.

##### 8.5.4.7.1. Ranz Marshall

This option is analogous to Additional Variable species transfer, and uses the Ranz Marshall correlation on the continuous phase side of the interface and a zero resistance on the particle phase side of the phase interface. For details, see Ranz-Marshall Correlation. A mass fraction equilibrium ratio can be set, analogous to that described in the multiphase mass transfer section. For details, see Equilibrium Models in the CFX-Solver Theory Guide.

##### 8.5.4.7.2. Liquid Evaporation Model

This option is used to model evaporation of a liquid species in particles to the respective gas phase species in the continuous phase. This model is designed for evaporation of a single species and commonly used for spray dryer and oil combustion applications. However, it can be extended to multi-component evaporation. For details, see Extension of the Liquid Evaporation Model in the CFX-Solver Theory Guide. A template CCL outline has been provided for general liquid evaporation. The evaporating_drops.ccl file (located in the `etc/model-templates/` directory of your ANSYS CFX installation) can be selected when starting a new simulation using the Library User mode. The template sets up a continuous gas phase containing `H2O` and `Air Ideal Gas`, and defines a homogeneous binary mixture for the phase change of `Water at 25 C` to `H2O`. It also creates and specifies a domain named `Domain 1` that includes the continuous and particle phases. Templates have also been provided for the `Spray Dryer` and `Oil Combustion`. For details, see:

- Liquid Evaporation Model: Spray Dryer with Droplets Containing a Solid Substrate

- Liquid Evaporation Model: Oil Evaporation/Combustion.

To complete the domain specification, you would need to create a material to define the particle phase (step 1, below) and import an appropriate mesh.

Should you choose not to use the template, a general outline of the steps to set up a liquid evaporation model, including `Water at 25 C` evaporating from a particle into a gas mixture of `H2O` and `Air Ideal Gas` follows. You can substitute the materials below for the materials you are modeling in your simulation.

1. Create a pure substance or variable composition mixture that will be the particle phase. In the case of a variable composition mixture, it should contain the solid material(s) from which water evaporates, and the evaporating liquid (`Water at 25 C`).

2. Create another variable composition mixture that will be the continuous fluid. This mixture must include the gas phase component of the evaporating liquid selected in step 1 (`H2O` from the `Gas Phase Combustion` material group), as well as a constraint material (`Air Ideal Gas`).

3. Create a homogeneous binary mixture to set the mass transfer properties of the evaporating material. For the case of water, the homogeneous binary mixture contains `Water at 25 C` and `H2O`. The rate of evaporation in the liquid evaporation model is controlled by the binary mixture settings defined in the Material details view. Information on the creation of homogeneous binary mixtures is available in Material Details View: Homogeneous Binary Mixture in the CFX-Pre User's Guide.

4. When creating the domain, define a fluid (or select an existing fluid) and set the Morphology > Option to `Continuous Fluid`.

5. Define a particle and set the Morphology > Option to `Particle Transport Fluid`.

6. On the Fluid Models form, set Heat Transfer Model to `Fluid Dependent`.

7. When setting up the Fluid Specific Models for the continuous mixture set `H2O` to use a `Transport Equation` and `Air Ideal Gas` to `Constraint`. Set Heat Transfer to use `Thermal Energy` for the continuous phase, and `Particle Temperature` for the particle phase.

8. On the Fluid Pairs tab, set Heat Transfer to `Ranz Marshall` (to enable interphase heat transfer). Under Component Pairs, enable the check mark for H2O | Water at 25C, and set Option to `Liquid Evaporation Model`.

9. The `Latent Heat` setting for Latent Heat can be selected if the reference enthalpies of the liquid and gas materials are inconsistent.

##### 8.5.4.7.3. Liquid Evaporation Model: Spray Dryer with Droplets Containing a Solid Substrate

The evaporation of liquid from droplets containing a solid substrate is a common industrial application. The spray_dryer.ccl template is the same as the general liquid evaporation model, but includes the particle phase `Coffee Mixture`, which includes a new material `Coffee` and `Water at 25 C`. For details, see Liquid Evaporation Model.

##### 8.5.4.7.4. Liquid Evaporation Model: Oil Evaporation/Combustion

The simulation of evaporating oil droplets is set up in a very similar way to the liquid evaporation model, with a Modification parameter named `Light Oil`, which is enabled to control the physical properties used in calculating the heat and mass transfer from the droplet. For details, see Liquid Evaporation Model. This parameter should be set for all oil evaporation simulations. Enabling combustion involves creating a reaction for the gas phase mixture and then defining the gas phase mixture as a reacting mixture when setting up its material properties. For details, see Material Details View: Reacting Mixture in the CFX-Pre User's Guide.

The oil_combustion.ccl template contains the material `JetA Liquid` (as the liquid oil) as a pure substance particle that evaporates into its gas phase equivalent `JetA`. `JetA` is part of the gas phase variable composition mixture named `Gas Mixture`. The `Gas Mixture` material itself is defined using a single-step reaction `JetA Oxygen WD1` (a reaction that specifies `JetA` and oxygen as reactants, and carbon dioxide and water as products, with an additional non-reacting `N2` component). A homogeneous binary mixture, `JetAlg`, exists to model the evaporation of `JetA Liquid` to `JetA`.

A domain named `Domain 1` is set up in a very similar way to a general liquid evaporation specification, with the `Light Oil Modification` set for the mass transfer of `JetA Liquid` to `JetA`. Additional information on the `Light Oil` treatment is available in Light Oil Modification in the CFX-Solver Theory Guide.

##### 8.5.4.7.5. Latent Heat

In general, you can select `From Material Properties` for the Latent Heat option. The reference enthalpies will be used to determine latent heat if this option is selected. You can optionally set a latent heat by entering a value (for example, if the reference enthalpies of the liquid and gas materials are not consistent).

#### 8.5.4.8. Particle User Sources

The Particle User Source functionality allows you to use a User Fortran subroutine to calculate sources of momentum, heat and mass transfer. General information on creating user routines is available in User Fortran.

In the `<install_dir>\examples\UserFortran` directory, you can find routines and CCL templates to calculate sources for momentum (pt_mom_source.F, pt_mom_source.ccl), heat (pt_heat_source.F, pt_heat_source.ccl), and mass transfer (pt_mass_source.F, pt_mass_source.ccl). These routines can be used as starting points for your own modifications. A particle user routine example is presented later in this section.

To use a particle user routine, you should first write the Fortran routine and create a shared library. Next, you should create a User Routine (Insert > User Routine) of type `Particle User Routine` in CFX-Pre. When defining the domain, particle user sources are selected by selecting the Particle User Source check box for the appropriate quantity, and selecting the routine from the drop-down list. For details, see:

- Creating the Shared Libraries

- Particle User Routines in the CFX-Pre User's Guide.

The Argument Variables list should contain the fluid and particle variables needed to calculate the source (help on how to use variable names in ANSYS CFX, as well as a list of all variables, can be found in the `VARIABLES` file, in the `/etc/` directory of your ANSYS CFX installation).

The Return Variables list can only contain four quantities: the source itself, its derivative with respect to the associated variable in the particle, its derivative with respect to the associated variable in the fluid, and for mass sources only its derivative with respect to the temperature in the particle. The latter three quantities are optional, and the derivative with respect to the associated variable in the fluid can only be used when the overall coupling and the coupling set for the user source are both set to Fully Coupled. For momentum sources the associated variable is velocity, for heat transfer the associated variable is temperature, and for mass transfer the associated variable is mass fraction of species. Additional information on general source specification is available in Sources in Basic Capabilities Modeling.

##### 8.5.4.8.1. Particle User Source example

Important: This example is a basic routine used to calculate a Schiller-Naumann drag force and is intended for demonstration purposes. If you want to use this example, you should set the Drag Force option to `None` on the Fluid Pairs tab.

This example uses a subroutine to calculate a user drag force between a particle phase `Red Sand`, and the fluid `AirSTP`. The Fortran subroutine returns a source and a source coefficient with respect to the particle and fluid. The input arguments to the routine are:

- Mean particle diameter, velocity, particle Reynolds number and slip velocity for the particle `Red Sand`.

- Density and velocity for the fluid `AirSTP`.

You can copy the routine (pt_mom_source.F) from the `<install_dir>\examples\UserFortran` directory. The Fortran for this example is:

    #include "cfx5ext.h"
    dllexport(pt_momsource)
          SUBROUTINE PT_MOM_SOURCE (NLOC, NRET, NARG, RET, ARG, CRESLT,
          &    CZ,DZ,IZ,LZ,RZ)
    CC
    CD User routine: template for particle user routine
    CC
    CC --------------------
    CC        Input
    CC --------------------
    CC
    CC  NRET   - number of components in result
    CC  NARG   - number of arguments in call
    CC  ARG() - (NARG) argument values
    CC  CRESLT - Result
    CC
    CC --------------------
    CC        Output
    CC --------------------
    CC
    CC  RET()  - (NRET) return values
    CC
    CC --------------------
    CC       Details
    CC --------------------
    CC
    CC======================================================================
    C
    C ------------------------------
    C        Argument list
    C ------------------------------
    C
             INTEGER NLOC,NARG,NRET
    C
             REAL ARG(NLOC,NARG), RET(NLOC,NRET)
    C
             CHARACTER CRESLT*(*)
    C
             INTEGER IZ(*)
             CHARACTER CZ(*)*(1)
             DOUBLE PRECISION DZ(*)
             LOGICAL LZ(*)
             REAL RZ(*)
    C
    C ------------------------------
    C        Local Variables
    C ------------------------------
    C
    C=======================================================================
    C
    C ---------------------------
    C    Executable Statements
    C ---------------------------
    C
    C=======================================================================
    C
    C     Argument variables stack:
    C     -------------------------
    C
    C     Particle diameter   :     DIAM_PT    = ARG(1,1)
    C     Particle velocity   :     VEL_PT     = ARG(1,2:4)
    C     Reynolds number     :     RE_PT      = ARG(1,5)
    C     Slip velocity       :     SLPVEL_PT  = ARG(1,6)
    C     Fluid density       :     DENSITY_FL = ARG(1,7)
    C     Fluid velocity      :     VEL_FL     = ARG(1,8:10)
    C
    C     Return variables stack:
    C     -----------------------
    C
    C     Source term         :     SOURCE     = RET(1,1:3)
    C     Source coefficient  :     COEF_PT    = RET(1,4)
    C     Source coefficient  :     COEF_FL    = RET(1,5)
    C
    C=======================================================================
    C
    C-----------------------------------------------------------------------
    C     Calculate the momentum source and source term coefficient
    C-----------------------------------------------------------------------
    C
             CALL USER_MOMENTUM_SOURCE (RET(1,1),RET(1,4),RET(1,5),
         &    ARG(1,1),ARG(1,2),ARG(1,5),ARG(1,6),
         &    ARG(1,7),ARG(1,8))
    C
          END
          SUBROUTINE USER_MOMENTUM_SOURCE (SOURCE,COEF_PT,COEF_FL,
         &                                 DIAM_PT,VEL_PT,RE_PT,SLPVEL_PT,
         &                                 DENSITY_FL,VEL_FL)
    C
    C=======================================================================
    C     Calculate the momentum source and source term coefficient
    C=======================================================================
    C
    C ------------------------------
    C     Preprocessor includes
    C ------------------------------
    C
    #include "cfd_sysdep.h"
    #include "cfd_constants.h"
    C
    C ------------------------------
    C        Argument list
    C ------------------------------
    C
             REAL SOURCE(3), COEF_PT, COEF_FL,
         &    DIAM_PT, VEL_PT(3), RE_PT, SLPVEL_PT,
         &    DENSITY_FL, VEL_FL(3)
    C
    C ------------------------------
    C        Local variables
    C ------------------------------
    C
             REAL AREA, CD, FACT
    C
    C ------------------------------
    C    Executable statements
    C ------------------------------
    C
    C---- Calculate the particle reference area
    C
             AREA = PI*DIAM_PT**2*QUARTER
    C
    C---- Calculate the Schiller-Naumann drag coefficient
    C
             IF (RE_PT.LT.1000.) THEN
                CD = 24./RE_PT*(1+0.15*RE_PT**0.687)
             ELSE
                CD = 0.44
             ENDIF
    C
    C---- Calculate the momentum source term and linear coefficients
    C
             FACT = HALF*DENSITY_FL*AREA*CD*SLPVEL_PT
    C
             SOURCE(1) = FACT*(VEL_FL(1)-VEL_PT(1))
             SOURCE(2) = FACT*(VEL_FL(2)-VEL_PT(2))
             SOURCE(3) = FACT*(VEL_FL(3)-VEL_PT(3))
    C
             COEF_PT = -FACT
             COEF_FL =  FACT
    C
          END

Outlined instructions for the Fortran file is available in Creating the Shared Libraries.

The specification of the input and output variables occurs in CFX-Pre. The definition for the user routine is created, setting the Option to `Particle User Routine`, setting the calling name to `pt_momsource` and specifying the Library Name and Library Path as appropriate.

On the Fluid Pairs form in the Mass and Momentum frame, `Particle User Source` is created and chosen from the drop-down list.

The Argument Variables List contains the following variables:

- `Red Sand.Mean Particle Diameter`

- `Red Sand.Velocity`

- `Red Sand.Particle Reynolds Number`

- `Red Sand.Particle Slip Velocity`

- `AirSTP.Density`

- `AirSTP.Velocity`

The Return Variables List contains all of the available options:

- `Source`

- `Source Coefficient with respect to Particle Variable`

- `Source Coefficient with respect to Fluid Variable`

Release 18.2 - © ANSYS, Inc. All rights reserved.