# circgraph

This is a tool for calculating equivalent
resistances/impedances/capacitances for a circuit (represented as a
graph, hence "circuit graph"), written in C++.

# Motivation

This program exists for three reasons: boredom, a desire to brush up
on my C++, and -- most importantly -- laziness. Why do tedious
arithmetic when you can spend hours writing a program to do it for
you?

# Usage

Compile with:

```
make
```

Run as:

```
./circgraph
```

By default, `circgraph` will read a circuit from stdin (see below) and
output the equivalent resistance between the source and sink. The `-C`
flag will switch the calculation mode to capacitance.

`circgraph` can output graphs in Graphviz's `dot` format to stdout for
visualization. Pass stdout to `tests/testgraph.sh` to try (requires
graphviz and evince).

# Circuit Input

`circgraph` represents circuits as weighted undirected graphs, with
nodes representing electrically common elements (i.e. a wire) and
edges and their weights representing either resistors or capacitors
(depending on command-line options).

`circgraph` takes input from stdin in the following format:

```
<source_node> <sink_node>
<node1> <node 2> <weight>
<node1> <node 2> <weight>
...
```

The first line specifies the names of the source and sink nodes. All
subsequent lines represent a weighted edge with the names of the two
nodes and the weight of the edge. Node names are created upon use.

An example input (test5.txt) and its corresponding graph are given
below:

```
a c
a b 1
a c 1
b c 1
```

![test5](http://fwei.tk/git/circgraph/plain/tests/test5.png)

See the `testX.txt` files for further examples.
