pyfracval.experimental.soft_relaxation#
Soft potential relaxation for cluster-cluster aggregation.
Implements force-driven relaxation using harmonic repulsion potentials as an alternative to rigid-body docking for hard regimes (Df≥2.25).
The approach: 1. Initial placement at target gamma_pc distance 2. Compute repulsive forces from overlapping particles 3. Add restoring force to maintain gamma_pc constraint 4. Gradient descent until convergence 5. Return relaxed configuration
Module Contents#
- pyfracval.experimental.soft_relaxation.compute_forces(coords, radii, k_repulsion=10.0, cm_target=None, k_gamma=1.0, gamma_target=0.0)[source]#
Compute forces on all particles.
- Parameters:
coords (np.ndarray) – Nx3 array of particle coordinates.
radii (np.ndarray) – N array of particle radii.
k_repulsion (float) – Spring constant for harmonic repulsion (default 10.0).
cm_target (np.ndarray, optional) – Target center of mass position for gamma constraint.
k_gamma (float) – Spring constant for gamma constraint (default 1.0).
gamma_target (float) – Target gamma distance (not used directly, only for CM constraint).
- Returns:
forces (np.ndarray) – Nx3 array of forces.
max_overlap (float) – Maximum overlap fraction.
total_energy (float) – Total potential energy.
- pyfracval.experimental.soft_relaxation.soft_relaxation(coords, radii, cm_target, k_repulsion=10.0, k_gamma=1.0, max_iters=100, tol_overlap=0.0001, tol_force=0.001, learning_rate=0.1, verbose=False)[source]#
Relax configuration using gradient descent on soft potential.
- Parameters:
coords (np.ndarray) – Nx3 array of initial coordinates.
radii (np.ndarray) – N array of particle radii.
cm_target (np.ndarray) – Target center of mass position.
k_repulsion (float) – Spring constant for repulsion (default 10.0).
k_gamma (float) – Spring constant for gamma constraint (default 1.0).
max_iters (int) – Maximum gradient descent iterations.
tol_overlap (float) – Convergence tolerance for max overlap.
tol_force (float) – Convergence tolerance for max force magnitude.
learning_rate (float) – Gradient descent step size (default 0.1).
verbose (bool) – Print progress information.
- Returns:
coords (np.ndarray) – Relaxed coordinates.
success (bool) – True if converged within tolerances.
info (dict) – Diagnostics (iterations, final energy, max overlap, etc.).
- pyfracval.experimental.soft_relaxation.soft_sticking(coords1, radii1, coords2, radii2, gamma_pc, cm1, cm2, candidate_particle_idx1, candidate_particle_idx2, k_repulsion=10.0, k_gamma=1.0, gamma_tolerance=0.05, max_iters=100, tol_overlap=0.0001, learning_rate=0.1)[source]#
Stick two clusters using soft potential relaxation.
This is an alternative to rigid-body docking that allows small deviations from exact gamma_pc distance to resolve overlaps.
- Parameters:
coords1 (np.ndarray) – Coordinates of clusters 1 and 2.
coords2 (np.ndarray) – Coordinates of clusters 1 and 2.
radii1 (np.ndarray) – Radii of clusters 1 and 2.
radii2 (np.ndarray) – Radii of clusters 1 and 2.
gamma_pc (float) – Target distance between cluster centers.
cm1 (np.ndarray) – Current centers of mass.
cm2 (np.ndarray) – Current centers of mass.
candidate_particle_idx1 (int) – Indices of particles that should be brought into contact.
candidate_particle_idx2 (int) – Indices of particles that should be brought into contact.
k_repulsion (float) – Repulsion spring constant.
k_gamma (float) – Gamma constraint spring constant.
gamma_tolerance (float) – Allowed fractional deviation from gamma_pc (default 5%).
max_iters (int) – Maximum relaxation iterations.
tol_overlap (float) – Overlap convergence tolerance.
learning_rate (float) – Gradient descent step size.
- Returns:
new_coords1, new_coords2 (np.ndarray) – Relaxed coordinates for both clusters.
success (bool) – True if relaxation converged within tolerances.
info (dict) – Diagnostics including final gamma error.