-
Notifications
You must be signed in to change notification settings - Fork 7
OpenOrd: An Open-Source Toolbox for Large Graph Layout
License
SciTechStrategies/OpenOrd
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
OpenOrd: An Open-Source Toolbox for Large Graph Layout
------------------------------------------------------
S. Martin
smartin@sandia.gov
11/13/2007
Citation
--------
If you use this code in your research, please cite the following
article:
S. Martin, W. M. Brown, R. Klavans, K. Boyack (2011) "OpenOrd: An Open-Source
Toolbox for Large Graph Layout," Visualization and Data Analysis (VDA):7868-06.
To Install for Linux/Unix/Mac
-----------------------------
First, copy the correct compiler information in the src directory
to the file Configuration.mk. Examples are included in the src
directory:
Configuration.gnu # Default GNU (not parallel)
Configuration.gnu_parallel # GNU with LAM/MPI
Configuration.intel # Highly optimized serial intel
For example to compile using parallel GNU:
cd src
cp Configuration.gnu_parallel Configuration.mk
make
ls ../bin
To Install for Windows
----------------------
You need to have gcc and bash. I have used MSYS and MinGW successfully
for that purpose in the past. If you want to do this, go ahead and
install MSYS and MinGW to the directories MSYS/1.0 and MinGW/MinGW.
Then compile the codes from the src directory by typing
> copy Configuration.win Configuration.mk
> path ..\MSYS\1.0\bin;..\MinGW\MinGW\bin
> make
NOTE: If you do not want to set the path variables each time then you
can specify the path permanently using Windows. Also, you can install
MSYS to your computer permanently.
Documentation -- Important Note
-------------------------------
Important NOTE: all programs in the OpenOrd library have documentation
available, including descriptions of input and output formats, by typing
the name of the program with no input. For example, in the bin
directory you can type
> layout
to get a full description of the inputs to the force directed layout
program.
Examples
--------
Examples can be found in the examples directory. If you are using
windows you must specify the MSYS directory, as described in the
readme.txt file in the examples directory.
Modifications
-------------
The code is based on the following ideas, so any modifications might
adhere to the below "standards:"
1. A project has a rootname along with different extensions. The
yeast_gs directory in the examples directory is a project with
the rootname "yeast_gs." The initial file is "yeast_gs.sim" and
numerous other files are produced along the way, but nearly all
the commands in the bin directory only need the "yeast_gs" rootname
as input. If you want to add a new program, it should also input
only a rootname, then read and write files with appropriate
extensions.
2. Each program has the format
> command_name [options] root_name
where the [options] are flags such as "-e," sometimes with an
argument. If you want to change a command just add a flag.
If you want to change the behavior of an existing flag, make sure
the preivous behavior is still available. If you want to add a new
command you can also use this format.
3. Every command puts out instructions on it's purpose and how it can be
used if you type
> command_name
with no options. New commands might also follow this convention.
How the Codes Communicate
-------------------------
Below is how the recursive code communicates via the files with different
extensions.
The initial graph is given by root_name.sim, which is a sparse adjacency
matrix in the format
<id1> <tab> <id2> <tab> <weight>
where id1 and id2 are strings and weight is a float. id1 and id2 should
not be the same.
truncate: takes root_name.sim and creates root_name.int, root_name.ind,
and root_name.full.
layout: takes root_name.int and creates root_name.icoord and (optional)
root_name.iedges.
single_link: takes root_name.full root_name.icoord and root_name.iedges
and creates root_name.clust
coarsen: takes root_name_(l-1).full and root_name_(l-1).clust (_(l-1) is
automatically created by coarsen) and creates root_name_l.full
and root_name_l.int
refine: takes root_name_l.icoord and root_name_(l-1).clust and creates
root_name_(l-1).real
recoord: takes root_name.icoord and root_name.ind and creates corresponding
root_name.coord (optionally .edges can also be created)
Bugs and Future Fixes
---------------------
1. The coarsen program throws out unconnected components of the graph,
keeping only the largest "giant" component.
2. Edge-cutting can be used in the parallel version of layout, but cut
edges are not communicated to the different processors. This could
potentially cause problems but really hasn't so far.
About
OpenOrd: An Open-Source Toolbox for Large Graph Layout
Resources
License
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published