## 2 Digital Porous Rock Models and Graph-Based Representation
### Graph-Based Representation of Pore Space of Digital Porous Rock Models  
We analyzed the geometric structural properties of the pore spaces within the sample rock data, such as the porosity, distribution of pore sizes, degree of pore voxels interconnection critical to the particle flow, and the clogging process. Some statistical measurements of the geometric structural properties of the pore spaces are given in Table 1 in Appendix A. The degree of pore voxels interconnection can be quantified by _pore-connected components_. A connected component is defined as a maximal subset of pore voxels, such that there is a path through the pore spaces connecting any two voxels within that component. To explain this precisely, we need some mathematical notations, as follows. We embed the rock sample into the three-dimensional Euclidean space, having three standard basis vectors, \(\vec{i}=(1,0,0)\), \(\vec{j}=(0,1,0)\), \(\vec{k}=(0,0,1)\). Given a pore voxel \(x\) at the lattice position \((i,j,k)\) at time instant \(t\), we define its _lattice 6-neighbors_ as  
\[\mathcal{N}(x_{t})=\{(i\pm 1,j,k),\;(i,j\pm 1,k),\;(i,j,k\pm 1)\}. \tag{1}\]  
Figure 2: The three-dimensional binary rock samples we used in this study were Bentheimer, Doddington, Estaillades, and Ketton [29]. The rock samples were of size \(1000^{3}\), where each point was represented by either 1 (white for the grain voxels) or 0 (black for the pore voxels), with a resolution/voxel size of 3.2 μm. Each sample represented a physical rock volume of approximately \(3.2\times 3.2\times 3.2\) mm\({}^{3}\). Let \(\mathcal{V}\) be the set of all the pore voxels; we define the _pore neighbors_ of a pore voxel as  
\[\mathcal{N}_{p}(x_{t})=N(x_{t})\cap\mathcal{V}, \tag{2}\]  
where \(\cap\) is the intersect operator on sets. Each pore voxel's number of pore neighbors is called its _degree_. By the above pore neighbors construction, pore voxels will take degree values in the set {0, 1, 2, 3, 4, 5, 6}. A pore voxel having degree 6 lies in the inner part of the pore space, while those with other values of degree lie on the boundary of the pore space. The pore voxels with degree 0 are isolated: that is, a particle from this position cannot go anywhere else, and a particle from anywhere else cannot arrive at this position. There are quite a large number of isolated pore voxels in Bentheimer and Ketton. The pore degree counts of the four rock samples are given in Table 12.  
For each rock sample, we can construct a graph \(G(\mathcal{V},\mathcal{E})\) on the vertex set \(\mathcal{V}\) of pore voxels and the edge set \(\mathcal{E}\), each of which connects two pore voxels in \(\mathcal{V}\). We say that there exists an edge \((x,y)\) that connects two pore voxels \(x\) and \(y\) if \(x\) and \(y\) are in the pore neighbor of each other. Note that if the pore voxel \(x\) is in the pore neighbor of the pore voxel \(y\), then \(y\) is also in the pore neighbor of the pore voxel \(x\); therefore, the graph is undirected. We say that there is a path connecting the two voxels \(x_{1}\) and \(x_{n}\) if there exists a sequence \((x_{1},x_{2},x_{3},\ldots,x_{n})\in\mathcal{V}^{n}\), such that \((x_{i},x_{i+1})\in\mathcal{E}\) for \(i=1,2,\ldots,n-1\). Two pore voxels \(x\) and \(y\) are said to be connected if there exists a finite path connecting them. From this construction, the pore-connected components are the connected components of the graph \(G(\mathcal{V},\mathcal{E})\). By definition, the connected components are disjoint and their union is the set \(\mathcal{V}\). In our simulation, we developed a tree-based searching-tracking algorithm to classify the pore spaces into disjoint connected components. The number of pore-connected components varies for the four rock types. We observed that only in Doddington were there quite a few pore-connected components while in the other three samples the pore spaces were comprised of a large number of connected components; see Table 13 in Appendix A.