sindr 0.1.0-alpha.5

Rust circuit simulator: SPICE-style MNA solver with built-in semiconductor device models. Transient, AC, DC sweep, temperature sweep.
Documentation
use sindr::ac_analysis::{solve_ac, AcConfig, FrequencySpacing};
use sindr::examples;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let circuit = examples::rc_lowpass_filter();

    let config = AcConfig {
        f_start: 10.0,
        f_stop: 100_000.0,
        num_points: 50,
        spacing: FrequencySpacing::Logarithmic,
        source_id: "V1".into(),
        ac_magnitude: 1.0,
    };

    let result = solve_ac(&circuit, &config)?;

    println!("=== RC Low-Pass Filter — Bode Plot ===");
    println!("{:>10}\t{:>7}\t{:>7}", "freq(Hz)", "gain(dB)", "phase(deg)");

    for point in result.points.iter() {
        let gain = point.gain_db("n2", config.ac_magnitude).unwrap_or(f64::NAN);
        let phase = point.phase_deg("n2").unwrap_or(f64::NAN);
        println!("{:>10.2}\t{:>7.2}\t{:>7.2}", point.frequency, gain, phase);
    }

    Ok(())
}