Update to README, based on more thorough planning.
Done with thread management of noise multiplication -- just dispatch frequency ranges given some total number of threads available.
Add locks at key points which I don't plan to make thread-safe; and add the appropriate header functions.  (But I'm not done yet!)
Remove the global workspace in favor of either a local workspace (if small), or changing to an in-place algorithm (if a large workspace would have been needed).  This is easier and probably more effective than a collection of thread-local workspaces or a lock around use of the workspace.
Implemented threads to handle BiCGSTAB iterations on events, using a lockfree queue to manage events.  Still need to deal with a few more details listed in README.
In principle the multi-threaded version of the code is ready to go.  Still needs to be tested, and compared against alternative of shared memory.
Fix some (not all) bugs; and add various code to make it possible to run on Edison cluster.  Still a work in progress.
A few more fixes -- finally compiling and running (though failing).
Update README notes.
Have things running (not successfully, and only single-threaded) on hopper.
Hopper (and possibly all NERSC systems) does not seem to permit outgoing network traffic from compute nodes; so, read calibration information from text file.
Bug fix -- I was double-counting sizeof(double).
Try to make code detect which machine it's on, and set macros accordingly.
Fix a bug in constructing lock-free queues -- by the choice of the library author, we are required to specify an initial buffer size for queues which can be expanded to encourage proper use.  In our case, we account for the expectation that the queue will be expanded in serial code, so this is unnecessary; make the necessary changes anyway.
Minor changes to the edison submission script.  A few extra assertions in the noise multiplication part of the code where I'm seeing segfaults currently.
Bug fix in ranges -- I was passing one too many frequencies in the last chunk.
Default compiler versions for edison and hopper are different.
Add a hopper batch submission script.  Update the edison submission script to launch two processes, filling a node.  Increase the number of events handled by an edison batch job to 2000.
Add a python MPI wrapper, to permit us to take the rank of a process.  (Only hopper's scripts are completely implemented.)
Rather than preconditioning and unpreconditioning X in the setup phase, precondition X into our temp vector.