## 2 Materials and Methods
### Particle Tracking Algorithm for Advective Transport  
The particle tracking algorithm is a typical approach to simulate the advective transport in complex fractured rocks [40; 41]. This study assumes that the particles move with the flow of fractured rocks and have no chemical reactions and diffusion and dispersion. Therefore, the approach ignores the influences of sorption, degradation, and decay on transport. The movements of a particle are determined by the seepage velocity at a specific released location. With the predefined moving time steps, the particle locations at different time steps are calculated based on solving the following advection equation:  
\[\frac{\mathrm{dx}}{\mathrm{dt}}=\mathrm{U}(\mathrm{x},\mathrm{t}) \tag{7}\]  
where x is the particle location in space (m), t is the time (s), and U is the seepage velocity in a certain location (m/s). When the flow fields are available, the solution to the first-order  
Figure 1: An example that shows two fractures and the corresponding 2D and 3D meshes for the proposed HD model. (**a**) The geometry of the fractures inside the modeling domain; (**b**) The generated triangular meshes for the fractures near the intersection; (**c**) The exterior view of the generated meshes for the simulation domain; (**d**) A profile view shows the interior of the generated meshes for the simulation domain. differential equation can employ classical numerical solvers such as Euler and Runge-Kutta methods. In this study, the Euler method yields the following formula:  
\[X(t+\Delta t)=X(t)+U(x,t)\Delta t \tag{8}\]  
where \(\Delta t\) is the specified time step (s) for the particle tracking. The calculations of the particle traces and the traveling times rely on accumulating the recorded particle locations at different time steps. Figure 2 shows an example of the developed particle tracking algorithm. In this study, the basic computational meshes are triangle and tetrahedron. The calculation of particle movement follows the seepage velocities through triangular faces on each tetrahedral element. The intersection points between the trajectory line and element faces are calculated based on the Ray-Plane intersection test [42; 43; 44]. Figure 2a also shows a particle trace passing through several tetrahedral elements. Note that the velocities are available at the nodes of each element. This study uses the linear interpolation algorithm to obtain the velocities at the particle locations. This developed module can record the locations on element faces, the distances in elements, and the traveling time inside elements. The total travel length and time accumulate the step-by-step distances and times in different elements along the particle trace for each released particle. Figure 2b,c are the local enlargements that zoom into two adjacent elements (marked with grey color) shown in Figure 2a. Figure 2b shows the particle trace outside the two selected elements, and the entrance point is marked on one face of the right element. Again, the point can be obtained based on the Ray-Plane intersection test. The 3D velocities at the marked location are then calculated based on the velocities at nodes of the element face. The traveling path inside the right element follows the trajectory of the velocity vectors determined at the point on the element face (see Figure 2c). This trajectory can reach  
Figure 2: The demonstration of the particle tracking algorithm for a particle trace and the associated element along the trace line: (**a**) The overall particle moving paths starting from the point “Start” and end with the point “End”; (**b**) The local enlargement for the selected elements (marked with grey color in (**a**) and the particle trace outside the selected elements; (**c**) The drawing of local enlargement that shows the particle trace and the associated intersection point on the element face. another face of the right element, and the intersection point on the face can be determined (marked in Figure 2c). This face is shared with the left and right elements.