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}