dc_sweep/
dc-sweep.rs

1use reda_spsim::probe::Drawer;
2use reda_spsim::{netlist::Circuit, simulate::ngspice::NgSpiceShared, DcCommandBuilder};
3use reda_spsim::{num, u};
4
5fn main_result() -> Result<(), Box<dyn std::error::Error>> {
6    let mut cir = Circuit::new("DC Sweep");
7    cir.add_dc_voltage("1", "in", "0", num!(0.));
8    cir.add_resistor("1", "in", "out", num!(2 k));
9    cir.add_resistor("2", "out", "0", num!(1 k));
10    
11    let shared = NgSpiceShared::default()?;
12    let mut simulator = cir.simulator(shared);
13    
14    let command = DcCommandBuilder::default()
15        .src_name("V1")
16        .start(num!(0.))
17        .stop(num!(5.))
18        .step(num!(0.1))
19        .build().unwrap();
20    
21    let analysis = simulator.run_dc_voltage(&command)?;
22    println!("{}", analysis.get_voltage_at("out", u!(200 uV)).unwrap());
23
24    analysis.draw_all_branchs(&Drawer::default(), "./images/dc-sweep-branchs.png")?;
25    analysis.draw_all_nodes(&Drawer::default(), "./images/dc-sweep-nodes.png")?;
26
27    Ok(())
28}
29
30fn main() {
31    if let Err(e) = main_result() {
32        eprintln!("{}", e);
33    }
34}