-
Notifications
You must be signed in to change notification settings - Fork 0
plotModes
Plots the damped eigenmodes of every results file in a directory. Scans for
results_2D_iso_N*_P*_Seed*_gamma_*.mat and results_3D_N*_P*_Width*_Seed*_gamma_*.mat,
then draws attenuation vs. frequency (log-log) in a tiled layout: one column per
damping gamma, top row raw, bottom row with frequency normalized by
sqrt(P). Color encodes pressure, marker encodes N. Reference omega^2 and
omega^(1/3) scaling lines are drawn for comparison.
resultsDir = "path/to/your/results" % string, directory containing results_*.mat files
averageMass = 1; % double, average particle mass
plotModes(resultsDir, averageMass)This scans the directory and plots every eigenmode spectrum it finds (2D + 3D).
X-axis is the reduced frequency omega*sqrt(m), y-axis the reduced attenuation
beta*sqrt(m) / (gamma/sqrt(m)).
Pass a struct as a third argument. All fields are optional; "closest match" selection is used — if a target value is not present in the files, the nearest value that is present gets plotted.
opts.argGamma = [0.01 0.001]; % double vector, target gammas
opts.argPressure = [0.1 0.02]; % double vector, target pressures
opts.argN = [216 1000]; % double vector, target particle counts
opts.argSeed = [1 3]; % double vector, target seeds
opts.scalPressure = 0.25; % double, multiply y by P^0.25 (0 or empty -> no scaling)
opts.flagCoordNumRow = true; % logical, add a 3rd row whose y is divided by the
% packing's mean coordination number z-bar
plotModes(resultsDir, averageMass, opts)-
argGamma/argPressure/argN/argSeed— filter which files are plotted (closest match, not exact). -
scalPressure— scales the y-value byP^scalPressure; the axis label updates to show the exponent (0.25 renders as P^(1/4)). -
flagCoordNumRow— off by default. If the saved packing lacksscalMeanCoordNumit is recomputed from the saved positions exactly aspack.mdoes (wall contacts not counted).
averageMass = 1;
% Plot all results in a directory
plotModes('data/eigenData/', averageMass);
% Gamma/pressure selection + P^(1/4) scaling
opts.argGamma = [0.01 0.001];
opts.argPressure = [0.1 0.02];
opts.scalPressure = 0.25;
plotModes('data/eigenData/', averageMass, opts);
% Same, plus the coordination-number-normalized row
opts.flagCoordNumRow = true;
plotModes('data/eigenData/', averageMass, opts);