aboutsummaryrefslogtreecommitdiff

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

See the testX.txt files for further examples.