## public subroutine applySrc_force(fun, inState, outState, neigh, auxField, nPdfSize, iLevel, varSys, time, phyConvFac, derVarPos)

Update state with source variable "force".
Force term used here is from:
"Discrete lattice effects on the forcing term in the lattice Boltzmann
method", Zhaoli Guo, Chugung Zheng and Baochang Shi.
In the paper, use force term is referred as Method 2 as:
Force must be defined as body force per unit volume
KM: If this force formula is used then velocity needs to be
computed as u = \sum c_i f_i + \vec{F}/2

Simuilar to derive routine but it updates the state whereas derive
is used for tracking.

This subroutine's interface must match the abstract interface definition
proc_apply_source in derived/mus_source_type_module.f90 in order to
be callable via applySrc function pointer.

### Arguments

Type | Intent | Optional | Attributes | | Name | |

class(mus_source_op_type), |
intent(in) |
| | :: |
**fun** | Description of method to apply source terms |

real(kind=rk), |
intent(in) |
| | :: |
**inState**(:) | input pdf vector |

real(kind=rk), |
intent(inout) |
| | :: |
**outState**(:) | output pdf vector |

integer, |
intent(in) |
| | :: |
**neigh**(:) | connectivity Array corresponding to state vector |

real(kind=rk), |
intent(in) |
| | :: |
**auxField**(:) | auxField array |

integer, |
intent(in) |
| | :: |
**nPdfSize** | number of elements in state Array |

integer, |
intent(in) |
| | :: |
**iLevel** | current level |

type(tem_varSys_type), |
intent(in) |
| | :: |
**varSys** | variable system |

type(tem_time_type), |
intent(in) |
| | :: |
**time** | Point in time at which to evaluate the variable. |

type(mus_convertFac_type), |
intent(in) |
| | :: |
**phyConvFac** | Physics conversion factor for current level |

type(mus_derVarPos_type), |
intent(in) |
| | :: |
**derVarPos**(:) | position of derived quantities in varsys |

## Variables

Type | Visibility | Attributes | | Name | | Initial | |

type(mus_varSys_data_type), |
private, | pointer | :: |
**fPtr** | | | |

type(mus_scheme_type), |
private, | pointer | :: |
**scheme** | | | |

real(kind=rk), |
private | | :: |
**forceField**(fun%elemLvl(iLevel)%nElems*3) | | | |

real(kind=rk), |
private | | :: |
**G**(3) | | | |

real(kind=rk), |
private | | :: |
**velocity**(3) | | | |

real(kind=rk), |
private | | :: |
**ucx** | | | |

real(kind=rk), |
private | | :: |
**uMinusCX**(3) | | | |

real(kind=rk), |
private | | :: |
**forceTerm** | | | |

integer, |
private | | :: |
**nElems** | | | |

integer, |
private | | :: |
**iElem** | | | |

integer, |
private | | :: |
**iDir** | | | |

integer, |
private | | :: |
**QQ** | | | |

integer, |
private | | :: |
**nScalars** | | | |

integer, |
private | | :: |
**posInTotal** | | | |

integer, |
private | | :: |
**statePos** | | | |

integer, |
private | | :: |
**elemOff** | | | |

integer, |
private | | :: |
**vel_pos**(3) | | | |

real(kind=rk), |
private | | :: |
**omega** | | | |

real(kind=rk), |
private | | :: |
**omega_fac** | | | |