Usage Guide#
This guide demonstrates the basic ways to use pyfracval to generate fractal aggregates.
Command-Line Interface (CLI)#
The primary way to use pyfracval is through its command-line interface.
Basic Generation:
To generate a single aggregate with default parameters (check defaults using -h):
pyfracval
This will create a .dat file in a RESULTS/ subdirectory.
Specifying Parameters:
You can control the aggregate properties using command-line options. For example, to generate an aggregate of 512 particles with Df=1.9 and kf=1.4, using polydisperse primary particles (rp_g=50, rp_gstd=1.25):
pyfracval -n 512 --df 1.9 --kf 1.4 --rp-g 50 --rp-gstd 1.25
Key Options:
-n,--num-particles: Total number of primary particles.--df: Target fractal dimension.--kf: Target fractal prefactor.--rp-g: Geometric mean radius of primary particles.--rp-gstd: Geometric standard deviation of radii (>= 1.0). If provided, takes precedence over--rp-std. If neither is provided, defaults to [Default Value, e.g., 1.5].--rp-std: Approximate arithmetic standard deviation of radii. Used to estimate--rp-gstdviaexp(std/mean)only if--rp-gstdis not given. A warning will show the estimated geometric value being used.--tol-ov: Overlap tolerance (e.g.,1e-5).--n-subcl-perc: Target fraction for PCA subcluster size (e.g.,0.1).--num-aggregates: Generate multiple aggregates sequentially.-f,--folder: Specify the output directory (default:RESULTS).--seed: Set a specific random seed for reproducibility.-p,--plot: Display the generated aggregate(s) interactively using PyVista (requires PyVista installation).-v,-vv,-vvv: Increase logging verbosity (INFO, DEBUG, TRACE).--log-file: Redirect log output to a file.-h,--help: Show all available options and their defaults.
Example: Using Arithmetic Standard Deviation
Generate an aggregate with N=200, Df=1.9, kf=1.2, geometric mean radius 20, and an approximate arithmetic standard deviation of 5. pyfracval will estimate the geometric standard deviation and use that.
pyfracval -n 200 --df 1.9 --kf 1.2 --rp-g 20 --rp-std 5 -vv
(Check the log output for a WARNING indicating the calculated rp_gstd value being used).
Example: Geometric Standard Deviation Takes Precedence
If you provide both, --rp-gstd will be used:
# rp_gstd=1.3 will be used, rp-std=5 will be ignored (with a warning)
pyfracval -n 100 --df 1.8 --rp-gstd 1.3 --rp-std 5
Example: Generating Multiple Aggregates with Plotting
Generate 3 aggregates, each with N=100, Df=1.7, kf=1.1, and show the plots:
pyfracval -n 100 --df 1.7 --kf 1.1 --num-aggregates 3 -p
(Note: Plots are shown sequentially after all aggregates are generated).
Using as a Python Library (Programmatic Usage)#
You can also import and use the core simulation function directly in your Python scripts.
import numpy as np
from pathlib import Path
from pyfracval.main_runner import run_simulation
from pyfracval.visualization import plot_particles
import pyvista as pv # Requires installation
# 1. Define Simulation Parameters
sim_config = {
"N": 128,
"Df": 1.8,
"kf": 1.3,
"rp_g": 10.0,
"rp_gstd": 1.2,
"tol_ov": 1e-4,
"n_subcl_percentage": 0.15,
"ext_case": 0,
# "seed": 42 # Optional: for reproducibility
}
# 2. Define Output Directory
output_directory = Path("./my_aggregates")
# 3. Run the Simulation
print("Running simulation...")
success, final_coords, final_radii = run_simulation(
iteration=1, # Iteration number for saving
sim_config_dict=sim_config,
output_base_dir=str(output_directory)
# seed=sim_config.get("seed") # Or pass seed directly
)
# 4. Check result and process data
if success and final_coords is not None and final_radii is not None:
print(f"Simulation successful! Aggregate saved in {output_directory}")
print(f"Generated {final_coords.shape[0]} particles.")
# Example: Calculate center of mass
cm = np.mean(final_coords, axis=0)
print(f"Center of Mass: {cm}")
# Example: Plot using pyvista
print("Generating plot...")
plotter = plot_particles(final_coords, final_radii)
plotter.add_text(f"N={final_coords.shape[0]}, Df={sim_config['Df']}, kf={sim_config['kf']}", position="upper_left")
plotter.show()
elif not success:
print("Simulation failed. Check logs for errors.")
else:
print("Simulation reported success but returned None data.")
This provides a basic structure for using pyfracval programmatically.