// MoonBit Photonics Library - Main Benchmark & Interactive Application
// Copyright 2026 wyhjjkk. Apache-2.0 License.
///|
fn main {
println(
"=========================================================================",
)
println(
" MoonBit Photonics Library (moonbit-photonics v0.1.0) ",
)
println(
" High-Performance Transfer Matrix Method (TMM) & Photonic Suite ",
)
println(
"=========================================================================\n",
)
let air = @layer.Medium::air()
let bk7 = @layer.Medium::bk7()
println("--> [1] Analyzing Distributed Bragg Reflector (DBR) Mirror Stack...")
let high_n = @layer.Medium::new(
"TiO2",
@dispersion.DispersionModel::constant_real(2.3),
)
let low_n = @layer.Medium::new(
"SiO2",
@dispersion.DispersionModel::constant_real(1.45),
)
let dbr_cfg = @structures.DbrConfig::{
high_medium: high_n,
low_medium: low_n,
center_lambda_nm: 632.8,
num_pairs: 10,
}
let dbr_analysis = @structures.analyze_dbr(dbr_cfg, air, bk7)
println(" DBR Center Wavelength: \{dbr_analysis.center_lambda_nm} nm")
println(
" Analytical Peak Reflectance R_max: \{dbr_analysis.peak_reflectance_analytical}",
)
println(
" Stopband Width (FWHM): \{dbr_analysis.stopband_width_nm} nm [\{dbr_analysis.lambda_min_nm} nm - \{dbr_analysis.lambda_max_nm} nm]",
)
let dbr_tmm = @core_tmm.solve_tmm(dbr_analysis.stack, 632.8, 0.0, TE)
println(" Numerical TMM Reflectance at 632.8nm: \{dbr_tmm.reflectance}\n")
println("--> [2] Analyzing Fabry-Pérot Cavity Resonator...")
let dbr_small_cfg = @structures.DbrConfig::{
high_medium: high_n,
low_medium: low_n,
center_lambda_nm: 600.0,
num_pairs: 6,
}
let fp_cfg = @structures.FabryPerotConfig::{
left_dbr: dbr_small_cfg,
right_dbr: dbr_small_cfg,
cavity_medium: low_n,
cavity_order: 1,
center_lambda_nm: 600.0,
}
let fp_analysis = @structures.analyze_fp_cavity(fp_cfg, air, bk7)
println(" Cavity Thickness: \{fp_analysis.cavity_thickness_nm} nm")
println(
" Resonance Peak Wavelength: \{fp_analysis.resonance_lambda_nm} nm",
)
println(" FWHM: \{fp_analysis.fwhm_nm} nm")
println(" Cavity Quality Factor (Q): \{fp_analysis.q_factor}")
println(" Cavity Finesse (F): \{fp_analysis.finesse}\n")
println("--> [3] Analyzing Surface Plasmon Resonance (SPR) Sensor...")
let sf11 = @layer.Medium::new(
"SF11",
@dispersion.DispersionModel::constant_real(1.78),
)
let gold = @layer.Medium::gold()
let metal_layer = @layer.Layer::new(gold, 45.0)
let water = @layer.Medium::new(
"Water",
@dispersion.DispersionModel::constant_real(1.33),
)
let spr_res = @structures.analyze_spr_sensor(sf11, metal_layer, water, 632.8)
println(" SPR Resonance Angle: \{spr_res.spr_angle_deg} deg")
println(" Sensitivity: \{spr_res.sensitivity_deg_per_riu} deg/RIU")
println(" Figure of Merit (FOM): \{spr_res.figure_of_merit}\n")
println(
"--> [4] Executing Wavelength Spectrum Parameter Sweep (400 - 800 nm)...",
)
let sweep_cfg = @sweep.SpectrumSweepConfig::{
start_lambda_nm: 400.0,
end_lambda_nm: 800.0,
steps: 100,
angle_deg: 0.0,
polarization: TE,
}
let sweep_res = @sweep.sweep_spectrum(dbr_analysis.stack, sweep_cfg)
println(" Sweep Samples: \{sweep_res.lambdas_nm.length()} points")
println(
" Maximum Measured Reflection: \{sweep_res.max_reflectance} @ \{sweep_res.max_reflectance_lambda} nm",
)
println(
" Minimum Measured Transmission: \{sweep_res.min_transmittance} @ \{sweep_res.min_transmittance_lambda} nm\n",
)
println("--> [5] Running Reproducible Experiment Quality Gates...")
let workflow_config = @workflow.WorkflowConfig::{
sweep_config: sweep_cfg,
minimum_samples: 50,
energy_tolerance: 0.000001,
minimum_peak_reflectance: 0.90,
maximum_transmittance: 1.000001,
}
let workflow_report = @workflow.run_experiment(
dbr_analysis.stack,
workflow_config,
)
let diagnostics = @workflow.failed_check_names(workflow_report)
println(" Quality Gates Passed: \{workflow_report.passed}")
println(" Maximum Energy Error: \{workflow_report.max_energy_error}")
println(" Failed Gates: \{diagnostics.length()}")
println("--> [6] Running Bounded Thickness Optimization...")
let optimization = @optimization.optimize_thickness(dbr_analysis.stack, @optimization.ThicknessOptimizationConfig::{
wavelength_nm: 632.8,
angle_deg: 0.0,
polarization: TE,
parameters: [
@optimization.ThicknessParameter::{
layer_index: 0,
lower_nm: 45.0,
upper_nm: 95.0,
step_nm: 10.0,
},
],
objective: @optimization.maximize_reflectance_at(632.8),
max_iterations: 2,
max_evaluations: 16,
tolerance: 0.0000001,
})
println(" Evaluations: \{optimization.evaluations}")
println(" Initial Score: \{optimization.initial_score}")
println(" Final Score: \{optimization.final_score}")
let benchmark = @workflow.run_benchmark(dbr_analysis.stack, @workflow.BenchmarkConfig::{
repeats: 3,
start_lambda_nm: 500.0,
end_lambda_nm: 700.0,
steps: 40,
})
println(
" Benchmark Workload: \{benchmark.repeats} repeats x \{benchmark.samples_per_repeat} samples",
)
println(" Benchmark Checksum: \{benchmark.total_checksum}")
let experiment_validation = @validation.validate_experiment(
dbr_analysis.stack,
workflow_report.sweep,
@validation.default_validation_policy(),
)
println(
" Validation Status: \{experiment_validation.valid} (errors=\{experiment_validation.errors}, warnings=\{experiment_validation.warnings})\n",
)
println(
"--> [7] Running Monte Carlo Fabrication Tolerance Yield Simulation...",
)
let mc_res = @sweep.run_monte_carlo_yield(
dbr_analysis.stack,
632.8,
2.0,
100,
0.99,
)
println(" Simulated Trials: \{mc_res.trials}")
println(" Mean Reflectance: \{mc_res.mean_reflectance}")
println(" Standard Deviation: \{mc_res.std_dev_reflectance}")
println(
" Yield Pass Rate (R >= 0.99): \{mc_res.yield_pass_rate * 100.0}%\n",
)
println("--> [8] Generating Vector SVG Spectral Plot...")
let svg_markup = @export.generate_spectrum_svg(
sweep_res,
title="DBR 10-Pair Mirror Spectrum",
)
println(" SVG Chart Generated (\{svg_markup.length()} characters)\n")
println("--> [9] Generating Markdown Technical Report...")
let md_report = @export.generate_markdown_report(
dbr_analysis.stack,
sweep_res,
title="DBR Photonic Crystal Filter Benchmark",
)
println(" Markdown Report Rendered (\{md_report.length()} characters)\n")
println("--> [10] Generating Interactive HTML Visual Dashboard...")
let html_dashboard = @export.generate_html_dashboard(
dbr_analysis.stack,
sweep_res,
title="DBR Photonic Filter Interactive Dashboard",
)
println(
" HTML Dashboard Rendered (\{html_dashboard.length()} characters)\n",
)
println(
"=========================================================================",
)
println(
" moonbit-photonics TMM Simulation Completed Successfully! ",
)
println(
"=========================================================================",
)
}