%===================================================================================
\section{Finite Volume Particle Method: Essentials} \label{chap:meshless}
%===================================================================================

The Finite Volume Particle methods (FVPM) are a way to solve hyperbolic systems of conservation
laws of the form

\begin{equation}
    \DELDT{\mathcal{U}} + \nabla \mathcal{F}(\mathcal{U}) = 0 \label{eq:conservation-law}
\end{equation}

for some state vector $\mathcal{U}$ and flux tensor $\mathcal{F}(\mathcal{U})$
and are used to solve the hydrodynamics equations. Since the M1 RT method can be written in the same
form (see Section~\ref{chap:rt-equations}), the method will also be used to solve these equations.
For completeness and quick reference, the most important formulae are listed below. For the actual
implementation details, please refer to the `Gizmo' theory section in the SWIFT repository, and
\citet{hopkinsGIZMONewClass2015}. For a step-by-step derivation and introduction, see
\citet{ivkovicThesis}.



The FVPM schemes rely on the ``partitions of unity''. The partition of unity assigned to a particle
$i$ at some point $\x$ is defined as:

\begin{align}
	\psi_i(\x) &= \frac{1}{\omega(\x)} W(\x - \x_i, h(\x))		\label{eq:psi} \\
	\omega(\x) &= \sum_j W(\x - \x_j, h(\x)) 					\label{eq:omega}
\end{align}

where $h(\x)$ is the smoothing length at $\x$ and $\omega(\x)$ is used to normalise the volume
partition at any point $\x$.

The associated particle volumes are given by

\begin{align}
	V_i &= \int_V \psi_i(\x) \de V \approx \frac{1}{\omega(\x_i)} \label{eq:volume}
\end{align}


The actual state updates are given by

\begin{equation}
	\frac{\D}{\D t} (V_i \mathcal{U}_{k,i}) + \sum_j \mathcal{F}_{k,ij} \cdot \Aijm = 0
\end{equation}


with

\begin{equation}
	\Aijm^\alpha = V_i \psitilde_j^\alpha (\x_i) - V_j\psitilde_i^\alpha (\x_j) 			\label{eq:HopkinsAij}
\end{equation}

for every component $k$ of the state vector $\mathcal{U}$ and for every coordinate dimension
$\alpha$.

The $\psitilde(\x)$ come from the $\mathcal{O}(h^2)$ accurate discrete gradient expression from
\cite{lansonRenormalizedMeshfreeSchemes2008}:

\begin{align}
	\frac{\del}{\del x_{\alpha}} f(\x) \big{|}_{\x_i} &= 
	\sum_j \left( f(\x_j) - f(\x_i) \right) \psitilde_j^\alpha (\x_i) 		\label{eq:gradient} \\
	\psitilde_j^\alpha (\x_i) &= \sum_{\beta = 1}^{\beta=\nu} \mathcal{B}_i^{\alpha \beta}
	(\x_j - \x_i)^\beta \psi_j(\x_i) 	\\
	\mathcal{B}_i &= \mathcal{E_i} ^ {-1} \label{eq:matrix-B}\\
	\mathcal{E}_i^{\alpha \beta} &= \sum_j (\x_j - \x_i)^\alpha (\x_j - \x_i)^\beta \psi_j(\x_i)
\label{eq:matrix-E}
\end{align}


where $\alpha$ and $\beta$ again represent the coordinate components for $\nu$ dimensions.


The final explicit update formula is given by

\begin{align}
    \U_i^{n+1} = \U_i^{n} + \frac{\Delta t}{V_i} \sum_j  \F_{\alpha, ij} \Aijm^\alpha
\label{eq:meshless-explicit}
\end{align}








%===================================================================================
\subsection{Individual Timestepping}
%===================================================================================

With particles being allowed to have individual time steps, the update formula for the finite volume
particle methods (eq.~\ref{eq:meshless-explicit}) needs to be slightly updated in order to
maintain its conservative properties. In particular, rather than exchanging fluxes, particles now
need to exchange time integrated fluxes, which are integrated using a trivial explicit Euler scheme:

\begin{align}
\U_i^{n+1} =
    \U_i^n + \frac{1}{V_i} \sum_j \left[
    \min\{ \Delta t_i, \Delta t_j \} \F_{\alpha, ij} \Aijm^\alpha
    \right]
\label{eq:meshless-explicit-individual-timesteps}
\end{align}

The time integration needs to be the smaller of the two time step sizes $\{\Delta t_i,\  \Delta
t_j\}$ since if one particle has a smaller time step size than the other, it also means that there
will be several interactions between that particle pair, each with the time step size of the smaller
of the two. Suppose for example $\Delta t_i = 4 \Delta t_j$. Then for a single update of particle
$i$, there will be in total 4 updates of particle $j$. Each update of particle $j$ will entail a
symmetric (time integrated) flux exchange with particle $i$. Therefore the time integration of the
flux to be exchanged must be applied over the smaller time interval $\Delta t_j$ for each of
the four (time integrated) flux exchanges.




