Skip to main content

Monte Carlo Analysis

The Monte Carlo analyzer runs repeated simulations with regenerated phase screens to compute statistical properties of the turbulent channel.

Usage

python gpu_main.py --mode monte_carlo

How It Works

The MonteCarloAnalyzer class (analysis/monte_carlo.py):

  1. Runs num_runs independent simulations
  2. Regenerates phase screens before each run (recreate_initial_ps())
  3. Computes requested metrics per run
  4. Saves checkpoints at configurable intervals
  5. Aggregates statistics across all runs

Configuration

Set Monte Carlo parameters in config.json:

{
"monte_carlo": {
"enabled": { "value": true },
"num_runs": { "value": 1000 },
"save_interval": { "value": 100 },
"analysis_metrics": {
"value": ["scintillation_index", "mcf"]
}
}
}
ParameterDefaultDescription
num_runs1000Total number of independent simulations
save_interval100Save checkpoint every N iterations
analysis_metrics["scintillation_index", "mcf"]Metrics to compute

Available Metrics

Scintillation Index

Measures intensity fluctuations:

SI = Var(I) / <I>^2

where I is the intensity (amplitude squared) and <I> is the mean intensity.

Mutual Coherence Function (MCF)

Computes the spatial coherence of the output field by averaging over multiple realizations using MCF_calc().

Output Structure

RUN_N/
iterations/
iter_0000/
result.npy
iter_0001/
result.npy
...
checkpoints/
checkpoint_0100.json
checkpoint_0200.json
...
results/
all_results.json
statistics.json
scintillation_histogram.png
metric_evolution.png
performance_metrics.png
summary_report.txt

Statistics Output

The statistics.json file contains aggregated results:

{
"scintillation_index": {
"mean": 0.42,
"std": 0.08,
"min": 0.21,
"max": 0.73,
"median": 0.41
}
}

Checkpointing

Intermediate results are saved every save_interval iterations. If a run is interrupted, previously completed iterations are preserved in the iterations/ directory.