# Solids model

## Solids settings

Enabling the SOLIDS solver and specifying options common to both DEM and PIC models. The following inputs are defined with the prefix `solids`:

| Description | Type | Default
--- | --- | --- | ---
types | Specified name(s) of the solids types or None to disable the solids solver. The user-defined names are used to specify DEM and/or PIC model inputs. | Strings | None
molecular_weight | Value of constant solid molecular weight. | Real | 0
density | Specify which density model to use for solids. Options (case-insensive): `None` - solids density specified through initial and boundary conditions; `Mixture` - solids density computed as a weighted average of the solid phase species densities. It requires constant species densities to be defined by the user. | String | None
specific_heat | Specify which specific heat model to use for solids. Options: `constant` - constant specific heat | String | constant
specific_heat.constant | Constant solids specific heat value. A value is required for `constant` specific heat model. | Real | 0
reference_temperature | Reference temperature used for specific enthalpy. | Real | 0
species | Specify which species can constitute the solids phase [defined species must be a subset of the species.solve arguments]. | Strings | None
newton_solver.absolute_tol | Define absolute tolerance for damped Newton solver | Real | 1.e-6
newton_solver.relative_tol | Define relative tolerance for damped Newton solver | Real | 1.e-6
newton_solver.max_iterations | Define max number of iterations for damped Newton solver | Int | 100
thermal_conductivity | Specify which thermal conductivity model to use for solids. Options: `constant` - constant thermal conductivity A thermal conductivity model is not required for solids. Defining a thermal conductivity model enables conductive heat transfer for DEM. However, it has no effect for PIC solids heat transfer. | String | constant
thermal_conductivity.constant | Constant solids thermal conductivity value. A value is required for `constant` thermal conductivity model. | Real | 0
min_conduction_dist | The surface roughness separating two touching particles. This value is used to remove the singularity that the particle-fluid-particle conduction model develops at the contact interface. | Real | 2.e-8
flpc | The fluid lens proportionality constant (flpc) is used to calculate the radius of the fluid lens surrounding the particle for particle-fluid-particle conduction. | Real | 0.4

Below is an example for specifying the solids solver model options.

    solids.types = my_solid0  my_solid1

    solids.reference_temperature = 298.15

    solids.specific_heat = mixture

    solids.species = Fe2O3  FeO

## DEM model settings

Enabling the DEM solver and specifying model options. The following keys must be defined with the prefix `dem`:

| Description | Type | Default
--- | --- | --- | ---
solve | Specified name(s) of the DEM types or None to disable the DEM solver. The user-defined names are used to specify DEM model inputs. | Strings | “None”
friction_coeff.pp | Friction coefficient :: particle to particle collisions [required] | Real | 0
friction_coeff.pw | Friction coefficient :: particle to wall collisions [required] | Real | 0
spring_const.pp | Normal spring constant :: particle to particle collisions [required] | Real | 0
spring_const.pw | Normal spring constant :: particle to wall collisions [required] | Real | 0
spring_tang_fac.pp | Tangential-to-normal spring constant factor :: particle to particle collisions | Real | 0.2857
spring_tang_fac.pw | Tangential-to-normal spring constant factor :: particle to wall collisions | Real | 0.2857
damping_tang_fac.pp | Factor relating the tangential damping coefficient to the normal damping coefficient :: particle to particle collisions | Real | 0.5
damping_tang_fac.pw | Factor relating the tangential damping coefficient to the normal damping coefficient :: particle to wall collisions | Real | 0.5
implicit_drag | Apply fluid-particle drag force by implicit velocity update. | Int | 0
tan_history | Include tangential history force in the collision model. | Bool | false
tan_history.max_contacts | Maximum number of contacts per particle tracked at any point when tangential history is enabled. | Int | 10
rolling_friction | Rolling friction model to use when tangential history is enabled. [ACRO11, BVB+19, WK12, ZWY+99] Options: `None` `ModelA` \(\boldsymbol{\tau}_{ij}^{(r)} = -\mu_{r}\hat{r}_{ij} \left| f_{ij}^{(n)} \right| \frac{\omega_{ij}}{\left|\omega_{ij}\right|}\) `ModelB` \(\boldsymbol{\tau}_{ij}^{(r)} = -\mu_{r}\hat{r}_{ij} \left| f_{ij}^{(n)} \right| \boldsymbol{u}_{ij}^{\omega}\) | String | None
rolling_friction.coefficient | Rolling friction coefficient when using a rolling friction model | Real | 0

The following inputs use the DEM type names specified using the dem.solve input to define restitution coefficients and are proceeded with the prefix `dem.restitution_coeff`. These must be defined for all solid-solid and solid-wall combinations.

| Description | Type | Default
--- | --- | --- | ---
[solid0].[solid1] | Specifies the restitution coefficient between solid0 and solid1. Here the order is not important and could be defined as [solid1].[solid0] | Real | 0
[solid0].wall | Specifies the restitution coefficient between solid0 and the wall. Order is not important and this could be defined as wall.[solid0] | Real | 0

Below is an example for specifying the inputs for two DEM solids.

    dem.solve = sand  char

    dem.friction_coeff.pp     =     0.25
    dem.friction_coeff.pw     =     0.15

    dem.spring_const.pp       =   100.0
    dem.spring_const.pw       =   100.0

    dem.spring_tang_fac.pp    =     0.2857
    dem.spring_tang_fac.pw    =     0.2857

    dem.damping_tang_fac.pp   =     0.5
    dem.damping_tang_fac.pw   =     0.5

    dem.restitution_coeff.sand.sand =  0.85
    dem.restitution_coeff.sand.char =  0.88
    dem.restitution_coeff.char.char =  0.90

    dem.restitution_coeff.sand.wall =  0.85
    dem.restitution_coeff.char.wall =  0.89

### Implicit drag

By default, the fluid-particle drag force is applied explicitly to particles,

\[u_p^{n^{\prime}+1} = u_p^{n^\prime} + dt_{\mathrm{DEM}}\left(\beta^n (u_f^{n+1} - u_p^{n}) + \mathcal{F}_p^{n^\prime}\right)/m_p\]

where \(u_p\) is the p-th particle velocity at the indicated time level, \(\beta^n\) is the drag coefficient, \(u_f^{n+1}\) is the fluid velocity, \(\mathcal{F}_p\) are all non-drag forces (e.g., gravitational, buoyancy, collision etc.), and \(m_p\) is particle mass. Terms exist at different time levels due in part to how the fluid and particle models are coupled and partly because particles typically sub-step in time. Specifically, a time step advances the fluid from \(t^n\) to \(t^{n+1}\), then particles take multiple smaller time steps to traverse the same total time. In the above equation, prime markers differentiate quantities updated at each DEM sub-step.

The updated particle velocity, \(u_p^{n^{\prime}+1}\), is substituted into the drag expression when implicit drag is enabled.

\[u_p^{n^{\prime}+1} = \frac{u_p^{n^\prime} + dt_{\mathrm{DEM}}\left( \beta^n u_f^{n+1} + \mathcal{F}_p^{n^\prime} \right)/m_p}{1 + dt_{\mathrm{DEM}} \beta^n / m_p}\]

By using the updated velocity, the drag force computed for the fluid and particles is inconsistent, and interphase momentum is not conserved. However, implicit drag may be needed for numerical stability when the particle density is much less than the fluid (such as bubbles).

## PIC model settings