slim4.particles3d
Classes
- class slim4.particles3d.ParticleArrays3d
slim4::particles::ParticleArrays This class holds the particle data for 23 particles. It is designed to be used with the Tracker2d class, and to be able to store a large number of particles efficiently on the GPU. It also provides methods to add, remove and sort particles, as well as to compute the concentration field on the mesh. The particles are stored in a structure of arrays format, with the position of the particles in local coordinates (xi, eta, z) within each triangle, and the triangle indices and boundary types of the particles. The class also allows to store additional scalar attributes for the particles, which can be used to compute the concentration field or to export the particles. The class also keeps track of the random seed used for the random number generator, which is used for the random walk of the particles.
Properties
Constructor
- __init__(mesh, attr_names=[], initial_capacity=0, random_seed=0)
Create a new slim4::particles3d::ParticleArrays3d with the given capacity
Parameters
mesh: slim3d.Mesh — The 3D meshattr_names: List[str] — additional scalar attributesinitial_capacity: int — capacityrandom_seed: int — random_seed (if 0 time will be used)
Methods
- add_particles(position, z, attrs={})
Add particles to the slim4::particles3d::ParticleArrays3d
Parameters
position: NDArray[np.float64] — The 3D position of the particles (3, n_particles)z: NDArray[np.float64] — The vertical mesh coordinateattrs: Dict[str,NDArray[np.float64]] — additional scalar attributesReturns
n_added: int — the number of particles added
- static create_xdmf(fname)
Create a new xdmf export for the particles
Parameters
fname: str — The name of the xdmf file to create (without extension)
- append_to_xdmf(fname, t, fields=[])
Append the particles to an existing xdmf export
Parameters
fname: str — The name of the xdmf file to append to (without extension)t: float — The time to exportfields: List[str] — The fields to export (if empty, all fields will be exported). Defaults fields are ‘tri’, ‘bndtype’, ‘layer’ and ‘deletion_time’
- sort()
Sort the particles by triangle, and putting the deleted particles at the end (for better performance)
- remove_inactive()
Remove inactive particles (settled, leaving, etc.) from the slim4::particles3d::ParticleArrays3d. This also sorts the particles.
Returns
removed: ParticleArrays3d — the removed particles
- get_position()
Get the 3D position of the particles
Returns
xyz: NDArray[np.float64] — The 3D position of the particles (3, n_particles)
- get_concentration(attr_name, z)
Compute the volumetric concentration field on the 3D mesh. Each prism receives the sum of particle values divided by the prism volume (m^-3 or kg/m^3).
Parameters
attr_name: str — Name of the attribute to accumulate; use ‘count’ for particle countz: slim.ScalarArrayDevice — Current vertical coordinates of the mesh nodes (shape: 1, 6, n_prisms)Returns
concentration: slim.ScalarArrayDeviceMPI — Volumetric concentration per prism (n_prisms)
- get_triangle()
Get the triangle indices of the particles
Returns
tri: NDArray[np.int32] — The triangle indices of the particles (n_particles)
- get_layer()
Get the layer indices of the particles
Returns
layer: NDArray[np.int32] — The layer indices of the particles (n_particles)
- get_bndtype()
Get the bndtype flag
Returns
bndtype: NDArray[np.int32] — The bndtype flag of the particles (n_particles)
- get_deletion_time()
Get the deletion time of the deleted particles
Returns
deletion_time: NDArray[np.float64] — The deletion time of the deleted particles (n_particles)
- get_attr(name)
Get the attribute of the particles
Parameters
name: str — The name of the attributeReturns
attr: NDArray[np.float64] — The attribute of the particles (n_particles)
- get_attribute_names()
Get the names of the attributes of the particles
Returns
names: List[str] — The names of the attributes of the particles
- eval_data_gpu(mesh, z, data, t)
Evaluate the data at time t
Parameters
mesh: slim3d.Mesh — the 3d meshz: slim.Data — the z coordinates of the 3d meshdata: slim.Data — The data to evaluatet: float — The time to evaluate the data atReturns
evaluated_data: slim.ScalarArrayDevice — The evaluated data GPU readable
- eval_data(mesh, z, data, t)
Evaluate the data at time t
Parameters
mesh: slim3d.Mesh — the 3d meshz: slim.Data — the z coordinates of the 3d meshdata: slim.Data — The data to evaluatet: float — The time to evaluate the data atReturns
evaluated_data: NDArray[np.float64] — The evaluated data
- class slim4.particles3d.Tracker3d
doc
Constructor
- __init__(mesh, z, uvw, kh, kv, kh_formula='direct')
Create new 3D tracker
Parameters
mesh: slim3d.Mesh — 3D meshz: slim.Data — z coordinate of the mesh on one timestepuvw: slim.Data — velocity fieldkh: slim.Data — horizontal diffusivitykv: slim.Data — vertical diffusivitykh_formula: slim2d.HorizontalDiffusivityFormula | str — horizontal diffusivity formula
Methods
- set_boundary(tag, type)
Set open boundaries for the tracker
Parameters
tag: str — The boundary tagtype: particles.ParticleBoundaryType | str — The type of boundary
- move(p_array, t, dt)
Move particles
Parameters
Returns
end_t: float — the new time after moving the particles
- add_particles(p_array, px, t, attrs={})
doc
Parameters
p_array: ParticleArrays3d — p_arraypx: NDArray[np.float64] — pxt: float — timeattrs: Dict[str,NDArray[np.float64]] — additional scalar attributesReturns
n_added: int — the number of particles added
- class slim4.particles3d.SedimentsQuasi3d
Quasi-3D Lagrangian tracker for cohesive or non-cohesive sediment particles in a 2D hydrodynamic framework. Each particle carries individual grain properties (diameter, settling velocity, density ratio, erodibility), enabling polydisperse sediment transport simulations. The vertical dimension is resolved analytically: particles are assigned a depth position within the water column based on local flow conditions and settling dynamics, without requiring a full 3D mesh for advection. Typical workflow: 1. create() — instantiate with hydrodynamic fields 2. add_particles() — inject particles with per-grain attributes 3. move() / resuspend_sediments() / update_depth_position() — advance each time step 4. get_suspension_concentrations() / get_settlement_concentrations() — post-process
Constructor
- __init__(mesh, uv, eta, bathy, rho_water, kh, kh_formula='direct')
Create new 2D tracker
Parameters
mesh: slim2d.Mesh — 2D meshuv: slim.Data — velocity field (u, v)eta: slim.Data — sea surface elevationbathy: slim.Data — bathymetryrho_water: float — water densitykh: slim.Data — horizontal diffusivitykh_formula: slim2d.HorizontalDiffusivityFormula | str — horizontal diffusivity formula
Methods
- set_boundary(tag, type)
Set open boundaries for the tracker
Parameters
tag: str — The boundary tagtype: particles.ParticleBoundaryType | str — The type of boundary
- add_particles(p_array, px, attrs)
doc
Parameters
p_array: particles2d.ParticleArrays2d — p_arraypx: NDArray[np.float64] — pxattrs: Dict[str,NDArray[np.float64]] — { mass: the particle mass (kg), depth: the particle position along the z axis (depth = h > 0 at the bottom and depth = -eta at the surface) (m), D: the particle diameter (m), w_s: th eparticle settling velocity, positive downward (m/s), density_ratio: the density ratio between the grain and the water, u_crit: the critical velocity to trigger resuspension (m/s), dry_sedimentation_density: the dry sedimentation density (kg/m**3), erodibility: the erodibility used to compute the erosion flux (= erodibility *(tau/tau_crit-1)**power), power: the power used to compute the erosion flux (= erodibility *(tau/tau_crit-1)**power), … }Returns
n_added: int — the number of particles added
- move(p_array, t, dt, k_s)
Move particles
Parameters
p_array: particles2d.ParticleArrays2d — particle arrayst: float — timedt: float — time diff betweenk_s: float — form roughness height (=3*D90)
- update_depth_position(parray, t, dt, mesh, k_s)
doc
Parameters
parray: particles2d.ParticleArrays2d — parray of the particles in suspensiont: float — timedt: float — time stepmesh: slim2d.Mesh — meshk_s: float — form roughness height = 3* D90
- resuspend_sediments(parray, t, dt, mesh, k_s)
doc
Parameters
parray: particles2d.ParticleArrays2d — parray of the settled particlest: float — timedt: float — time stepmesh: slim2d.Mesh — meshk_s: float — form roughness height
- get_concentration_3D(p_array, attr_name, mesh3D, z_0, t)
Get the a 3D continuous map of the concentratin (kg/m**3)
Parameters
p_array: particles2d.ParticleArrays2d — p_arrayattr_name: str — The name of the attribute to sum (if ‘count’ the number of particles is used)mesh3D: slim3d.Mesh — The 3D mesh on which the concentration is computedz_0: slim.ScalarArrayDevice — The z coordinates of the nodes in the 3D mesht: float — The time of the computationReturns
concentration: slim.ScalarArrayDeviceMPI — P0 array with the concentration of particles on each prism (n_prims)z: slim.ScalarArrayDeviceMPI — P1 array with the updated z coordinates of the mesh (1,6,n_prisms)
- get_suspension_concentrations(parray, attr_name, t, dt, by_area)
Get the 2D position of the particles
Parameters
parray: particles2d.ParticleArrays2d — parray of the suspended particlesattr_name: str — The name of the attribute to sum (if ‘count’ the number of particles is used)t: float — The time of the computationdt: float — time stepby_area: bool — = true Compute the concentration by squared metersReturns
concentration_whole_water_column: slim.ScalarArrayDevice — P0 array with the concentration of particles in the total water column on each element (in kg/m**3)concentration_main_water_column: slim.ScalarArrayDevice — P0 array with the concentration of particles in the main water column on each element (in kg/m**3)concentration_nearbed: slim.ScalarArrayDevice — P0 array with the concentration of particles in the nearbed layer on each element (in kg/m**3) (n_triangles)
- get_settlement_concentrations(parray, attr_name, by_area)
Get the 2D position of the particles
Parameters
parray: particles2d.ParticleArrays2d — parray of the suspended particlesattr_name: str — The name of the attribute to sum (if ‘count’ the number of particles is used)by_area: bool — = true Compute the concentration by squared metersReturns
settlement: slim.ScalarArrayDevice — P0 array with the mass per squared meters of settled particlessettlement_thickness: slim.ScalarArrayDevice — P0 array with the thickness of the settled particle layer (n_triangles)
- class slim4.particles3d.SedimentsMixtureQuasi3d
Quasi-3D Lagrangian tracker for a sediment mixture described by its grain-size distribution statistics, rather than per-particle grain properties. All particles share the same statistical grain properties (D50, D90), which characterise the sediment mixture as a whole. Settling velocity and critical shear stress are derived internally from D50 using empirical relationships (e.g. van Rijn), and the roughness height is set to k_s = 3 * D90. This approach is appropriate when the sediment can be treated as a uniform mixture — e.g. for reach-scale dredging plumes or background fine-sediment transport — and individual grain-class resolution is not required. Compared to SedimentsQuasi3d: - No per-particle D, w_s, or density_ratio attributes - D50 and D90 are set once at construction (or via setters) - Settling velocity, Shields threshold, and roughness are computed from the mixture statistics Typical workflow: 1. create() — instantiate with hydrodynamic fields and mixture statistics (D50, D90, rho_s) 2. add_particles() — inject particles with mass and depth position only 3. move() / resuspend_sediments() / update_depth_position() — advance each time step 4. get_suspension_concentrations() / get_settlement_concentrations() — post-process
Constructor
- __init__(mesh, uv, eta, bathy, rho_water, rho_sediment, D50, D90, kh, kh_formula='direct')
Create new 2D tracker
Parameters
mesh: slim2d.Mesh — 2D meshuv: slim.Data — velocity field (u, v)eta: slim.Data — sea surface elevationbathy: slim.Data — bathymetryrho_water: float — water densityrho_sediment: float — sediment densityD50: float — Grain size at which 50% of the sediment is finer (m).D90: float — Grain size at which 90% of the sediment is finer (m).kh: slim.Data — horizontal diffusivitykh_formula: slim2d.HorizontalDiffusivityFormula | str — horizontal diffusivity formula
Methods
- set_boundary(tag, type)
Set open boundaries for the tracker
Parameters
tag: str — The boundary tagtype: particles.ParticleBoundaryType | str — The type of boundary
- move(p_array, t, dt, k_s)
Move particles
Parameters
p_array: particles2d.ParticleArrays2d — particle arrayst: float — timedt: float — time diff betweenk_s: float — form roughness height (=3*D90)
- add_particles(p_array, px, attrs)
doc
Parameters
p_array: particles2d.ParticleArrays2d — p_arraypx: NDArray[np.float64] — pxattrs: Dict[str,NDArray[np.float64]] — { mass: the particle mass (kg), depth: the particle position along the z axis (depth = h > 0 at the bottom and depth = -eta at the surface) (m), }Returns
n_added: int — the number of particles added
- update_depth_position(parray, t, dt, mesh, k_s)
doc
Parameters
parray: particles2d.ParticleArrays2d — parray of the particles in suspensiont: float — timedt: float — time stepmesh: slim2d.Mesh — meshk_s: float — form roughness height = 3* D90
- resuspend_sediments(parray, t, dt, mesh, k_s)
doc
Parameters
parray: particles2d.ParticleArrays2d — parray of the settled particlest: float — timedt: float — time stepmesh: slim2d.Mesh — meshk_s: float — form roughness height
- get_concentration_3D(p_array, attr_name, mesh3D, z_0, t)
Get the a 3D continuous map of the concentratin (kg/m**3)
Parameters
p_array: particles2d.ParticleArrays2d — p_arrayattr_name: str — The name of the attribute to sum (if ‘count’ the number of particles is used)mesh3D: slim3d.Mesh — The 3D mesh on which the concentration is computedz_0: slim.ScalarArrayDevice — The z coordinates of the nodes in the 3D mesht: float — The time of the computationReturns
concentration: slim.ScalarArrayDeviceMPI — P0 array with the concentration of particles on each prism (n_prims)z: slim.ScalarArrayDeviceMPI — P1 array with the updated z coordinates of the mesh (1,6,n_prisms)
- get_suspension_concentrations(parray, attr_name, t, dt, by_area)
Get the 2D position of the particles
Parameters
parray: particles2d.ParticleArrays2d — parray of the suspended particlesattr_name: str — The name of the attribute to sum (if ‘count’ the number of particles is used)t: float — The time of the computationdt: float — time stepby_area: bool — = true Compute the concentration by squared metersReturns
concentration_whole_water_column: slim.ScalarArrayDevice — P0 array with the concentration of particles in the total water column on each element (in kg/m**3)concentration_main_water_column: slim.ScalarArrayDevice — P0 array with the concentration of particles in the main water column on each element (in kg/m**3)concentration_nearbed: slim.ScalarArrayDevice — P0 array with the concentration of particles in the nearbed layer on each element (in kg/m**3) (n_triangles)
- get_settlement_concentration(parray, attr_name, by_area)
Get the 2D position of the particles
Parameters
parray: particles2d.ParticleArrays2d — parray of the suspended particlesattr_name: str — The name of the attribute to sum (if ‘count’ the number of particles is used)by_area: bool — = true Compute the concentration by squared metersReturns
settlement: slim.ScalarArrayDevice — P0 array with the concentration of settled particles (n_triangles)
- class slim4.particles3d.ConnectivityArray
doc
Properties
nnz: int — numner of non-zero entriessize: int — number of reefsConstructor
- __init__(size, initial_capacity=0)
Create a new slim4::particles3d::ParticleArrays3d with the given capacity
Parameters
size: int — number of reefsinitial_capacity: int — initial capacity of the array
Methods
- get_entries()
Get the entries of the connectivity array
Returns
pfrom: NDArray[np.int32] — pfrompto: NDArray[np.int32] — ptomass: NDArray[np.float64] — mass
- update(pfrom, pto, pmass)
Adds the entries to the connectivity array
Parameters
pfrom: slim.IdxArrayDevice — pfrompto: slim.IdxArrayDevice — ptopmass: slim.ScalarArrayDevice — mass
- class slim4.particles3d.Particle3dCorals
doc
Constructor
- __init__(mesh, z, uvw, kh, kv, kh_formula='direct')
Create new 3D tracker
Parameters
mesh: slim3d.Mesh — 3D meshz: slim.Data — z coordinate of the mesh on one timestepuvw: slim.Data — velocity fieldkh: slim.Data — horizontal diffusivitykv: slim.Data — vertical diffusivitykh_formula: slim2d.HorizontalDiffusivityFormula | str — horizontal diffusivity formula
Methods
- set_boundary(tag, type)
Set open boundaries for the tracker
Parameters
tag: str — The boundary tagtype: particles.ParticleBoundaryType | str — The type of boundary
- move(p_array, t, dt)
Move particles
Parameters
Returns
end_t: float — the new time after moving the particles
- add_particles(p_array, px, t, attrs={})
doc
Parameters
p_array: ParticleArrays3d — p_arraypx: NDArray[np.float64] — pxt: float — timeattrs: Dict[str,NDArray[np.float64]] — additional scalar attributesReturns
n_added: int — the number of particles added
- update_biological_state(p_array, t, dt, tc, a, b, u, v)
Parameters
p_array: ParticleArrays3d — p_arrayt: float — timedt: float — time steptc: float — minimum time to competence (hours)a: float — competence acquisition rate (hours^-1)b: float — competence loss rate (hours^-1)u: float — mortality rate (hours^-1)v: float — Weibull shape parameter (dimensionless)
- update_biological_state_discrete(p_array, t)
Parameters
p_array: ParticleArrays3d — p_arrayt: float — time
- update_biological_state_discrete2(p_array, t)
Parameters
p_array: ParticleArrays3d — p_arrayt: float — time
- update_physical_state(p_array, t, rho, nu_v, times, rho_p, diameter)
Update the physical state of the particles
Parameters
p_array: ParticleArrays3d — p_arrayt: float — timerho: slim.Data — density field (kg/m3)nu_v: slim.Data — vertical viscosity field (m2/s)times: NDArray[np.float64] — list of times to evaluate the physical staterho_p: NDArray[np.float64] — list of particle densities (kg/m3)diameter: NDArray[np.float64] — list of particle diameters (m)
- update_physical_state_discrete(p_array, t, swimspeed, rho, nu_v, times, rho_p, diameter)
Update the physical state of the particles
Parameters
p_array: ParticleArrays3d — p_arrayt: float — timeswimspeed: float — downwards swimming speed (m/s) during competent phaserho: slim.Data — density field (kg/m3)nu_v: slim.Data — vertical viscosity field (m2/s)times: NDArray[np.float64] — list of times to evaluate the physical staterho_p: NDArray[np.float64] — list of particle densities (kg/m3)diameter: NDArray[np.float64] — list of particle diameters (m)
- update_physical_state_discrete2(p_array, t, tides, eta, eta_corr)
Update the physical state of the particles
Parameters
p_array: ParticleArrays3d — p_arrayt: float — timetides: bool — boolean indicating if tidal synchrony is activatedeta: slim.Data — Sea surface elevation (m)eta_corr: float — Correction term for eta (m)
- update_physical_state_discrete2_NT(p_array, t, tides)
Update the physical state of the particles without tidal synchrony and eta correction
Parameters
p_array: ParticleArrays3d — p_arrayt: float — timetides: bool — boolean indicating if tidal synchrony is activated
- settle_particles(p_array, reef_map, cm_array, t, dt, z_dist, gamma)
Evaluate the data at time t
Parameters
p_array: ParticleArrays3d — p_arrayreef_map: slim.Data — reef map data to evaluatecm_array: ConnectivityArray — connectivity map arrayt: float — The time to evaluate the data atdt: float — The time stepz_dist: float — vertical distance for particles to settle (m)gamma: float — deposition rate (h-1)
- settle_particles_discrete(p_array, reef_map, cm_array, t, dt, z_dist, gamma)
Evaluate the data at time t
Parameters
p_array: ParticleArrays3d — p_arrayreef_map: slim.Data — reef map data to evaluatecm_array: ConnectivityArray — connectivity map arrayt: float — The time to evaluate the data atdt: float — The time stepz_dist: float — vertical distance for particles to settle (m)gamma: float — deposition rate (h-1)
- settle_particles_discrete2(p_array, reef_map, cm_array, t, dt, z_dist, cues)
Evaluate the data at time t
Parameters
p_array: ParticleArrays3d — p_arrayreef_map: slim.Data — reef map data to evaluatecm_array: ConnectivityArray — connectivity map arrayt: float — The time to evaluate the data atdt: float — The time stepz_dist: float — vertical distance for particles to settle (m)cues: bool — boolean indicating if settlement cues are activated
- class slim4.particles3d.Particle3dSediments
doc
Constructor
- __init__(mesh, z, uvw, kh, kv, kh_formula='direct')
Create new 3D tracker
Parameters
mesh: slim3d.Mesh — 3D meshz: slim.Data — z coordinate of the mesh on one timestepuvw: slim.Data — velocity fieldkh: slim.Data — horizontal diffusivitykv: slim.Data — vertical diffusivitykh_formula: slim2d.HorizontalDiffusivityFormula | str — horizontal diffusivity formula
Methods
- set_boundary(tag, type)
Set open boundaries for the tracker
Parameters
tag: str — The boundary tagtype: particles.ParticleBoundaryType | str — The type of boundary
- move(p_array, t, dt)
Move particles
Parameters
Returns
end_t: float — the new time after moving the particles
- add_particles(p_array, px, t, attrs={})
doc
Parameters
p_array: ParticleArrays3d — p_arraypx: NDArray[np.float64] — pxt: float — timeattrs: Dict[str,NDArray[np.float64]] — additional scalar attributesReturns
n_added: int — the number of particles added
- settle_sediments(parray, t, z_tolerance)
doc
Parameters
- class slim4.particles3d.SeagrassFateArray
doc
Properties
nnz: int — numner of non-zero entriesn_rows: int — number of seagrass patchesn_cols: int — number of fate categoriesConstructor
- __init__(n_rows, n_cols, initial_capacity=0)
Create a new slim4::particles3d::SeagrassFateArray with the given capacity
Parameters
n_rows: int — number of seagrass patchesn_cols: int — number of fate categoriesinitial_capacity: int — initial capacity of the array
Methods
- get_entries()
Get the entries of the connectivity array
Returns
pfrom: NDArray[np.int32] — pfrompto: NDArray[np.int32] — ptoweight: NDArray[np.float64] — weight
- update(pfrom, pto, pweight)
Adds the entries to the array
Parameters
pfrom: slim.IdxArrayDevice — pfrompto: slim.IdxArrayDevice — ptopweight: slim.ScalarArrayDevice — weight
- class slim4.particles3d.Particle3dSeagrass
doc
Constructor
- __init__(mesh, z, uvw, kh, kv, wind, kh_formula='direct')
Create new 3D tracker
Parameters
mesh: slim3d.Mesh — 3D meshz: slim.Data — z coordinate of the mesh on one timestepuvw: slim.Data — velocity fieldkh: slim.Data — horizontal diffusivitykv: slim.Data — vertical diffusivitywind: slim.Data — wind speedkh_formula: slim2d.HorizontalDiffusivityFormula | str — horizontal diffusivity formula
Methods
- set_boundary(tag, type)
Set open boundaries for the tracker
Parameters
tag: str — The boundary tagtype: particles.ParticleBoundaryType | str — The type of boundary
- move(p_array, t, dt)
Move particles
Parameters
Returns
end_t: float — the new time after moving the particles
- add_particles(p_array, px, t, attrs={})
doc
Parameters
p_array: ParticleArrays3d — p_arraypx: NDArray[np.float64] — pxt: float — timeattrs: Dict[str,NDArray[np.float64]] — additional scalar attributesReturns
n_added: int — the number of particles added
- set_physical_attributes(p_array, t, eta, surf_threshold, deep_threshold, deposition_threshold)
Adjust vertical velocity and boolean attributes
Parameters
p_array: ParticleArrays3d — particle arrayst: float — timeeta: slim.Data — sea surface elevationsurf_threshold: float — distance threshold for considering a particle to be at the surfacedeep_threshold: float — distance threshold for considering a particle to be in deep waterdeposition_threshold: float — distance threshold for considering a particle to be near the bottom
- decompose(p_array, t, dt, t_exp, tfactor, z_exp, zfactor)
Update particle mass as a function of time and depth
Parameters
p_array: ParticleArrays3d — particle arrayst: float — timedt: float — time stept_exp: bool — exponential decay with time (linear if False)tfactor: float — decomposition factor with time (s-1)z_exp: bool — exponential decay with depth (linear if False)zfactor: float — depth-dependence of the decomposition factor (m-1)
- update_deposition_clock(p_array, t, dt, resuspension_speed, deposition_time)
Update the deposition clock for particles near the bottom
Parameters
p_array: ParticleArrays3d — particle arrayst: float — timedt: float — time stepresuspension_speed: float — speed at which the deposition clock is restarted due to resuspension (m/s)deposition_time: float — time required for a particle to be considered settled if it is near the bottom (s)
- update_fate_arrays(p_array, t, sgn_array, sgm_array)
Update fate arrays based on the attributes of the particles at the time of deletion
Parameters
p_array: ParticleArrays3d — particle arrayst: float — timesgn_array: SeagrassFateArray — fate array for number of particlessgm_array: SeagrassFateArray — fate array for mass of particles