VMD Development Status

  • VMD 1.8.7 released (August 1, 2009)
    • ILS computations will use CUDA except when expressly disabled.
    • fix behavior of solvate for pathnames containing spaces.
    • made autoionize gui properly handle spaces in filenames when building ionize command.
    • Fix the problem with nonexisting occupancies for MCSCF optimized orbitals.
    • Added disabled code to tag the highest occupied MO in the GUI chooser. This can't be enabled yet as there are a number of cases that arise that a simple single-timestep lookup mechanism can't handle properly. Leaving this disabled for release, and we'll enable it later.
    • Corrections to QMTimestep code fixing "animate dup" and related functionality, and correcting the code that reports the highest occupied molecular orbital.
    • Updated programmer's guide docs to list the VMD 1.8.7 CVS tag
    • fixed c++ism in gamessplugin
    • Enable CUDA-accelerated ILS calculation by default rather than only when an environment variable is set.
    • Added docs for VMDNOCUDA environment variable
    • Added new chapter to user's guide that discusses a little bit about how VMD uses multi-core CPUs, and GPU acceleration of analysis tasks, etc.
    • Added user guide docs for the FieldLines, Polyhedra, PaperChain, Twister, and Orbital representations.
    • Force regen of wavefunction types, spins, excitations, and orbitals when the user hits the default button.
    • Force Orbital GUI choosers to default to existing wavefunction types and spins when a rep is first created. When the code that loops testing available types and spins runs, we record the first available type and spin, and use it when initializing the chooser.
    • readcharmmpar: updated parameter file to latest charmm version including CMAP terms
    • gamessplugin: Deny service gracefully if user tris to load a PC GAMESS file.
    • gamessplugin: Fix parsing of SURFACE scan calculations. Now all logfiles from 2000 that Axel provided can be loaded.
    • multiseq: slight revisions to the status bar changes (for modified bases) that I made last week. When talking to Elijah I thought up a way to make it show the 3 letter codes for all question marks (including things like HOH for water) so now that is being displayed.
    • Cleanup and modularize the way multiple sets of wavefunctions are parsed. Complete the MCSCF parsing scheme so that all wavefunctions are read. Silence some of the debuggin chatter and make remaining output more readable.
    • Change a few search strings to be able to read GAMESS logfiles from 2000.
    • changed orbidx parameter to orbid for clarity in reading the code
    • renamed DrawMolItem::orbid to DrawMolItem::gridorbid to clarify that it's associated with the computed grid.
    • switch solaris builds to cupertino due to another machine failure
    • Fixed C++isms in gamessplugin
    • Fixed range check for get_orbital_index_from_id()
    • Use orbital ID consistently instead of orbital label.
    • Updates to orbital indexing logic
    • Don't accept orbital ID of zero
    • Call get_orbital_index_from_id() to convert from monotonically increasing 1-based orbital IDs to the internal orbital indices used in a given timestep.
    • fixed handling of 1-based orbital ID parameter
    • Removed old orbital GUI selector code
    • gamessplugin: Fixed a bunch of problems with reading charges. Eliminated per-molecule charges (ESP) even though some of them are per-molecule in GAMESS. Instead we have a number of charge sets with a type associated type per timestep. These can either be empty or populated. Actually we will need at some point another level in our data structures: each timestep can have N electronic configurations. Each configuration can have an optional wavefunction associated and other optional properties like charge sets.
    • Repositioned orbital rep controls based on user feedback (AK)
    • Added comments about Orbital GUI update logic, and fixed the behavior of the orbital GUI when the "apply changes automatically" control is unchecked.
    • Added lots of comments to the excitation and orbital chooser regeneration routines, since they contain lots of indexing and mapping calculations that convert between 1-based QM data and 0-based GUI elements in many places.
    • Enabled new orbital list subset control, so that complex electronic structures with hundreds of orbitals don't overwhelm the GUI choosers. The user can change the orbital index range of interest and select from the list of +-10 orbitals from the "list center".
    • Correct size of copied memory in memcpy (float->double).
    • ilstools: Allow automatic recentering of the molecule and re-wrapping of the solvent. Upgraded version number.
    • ILS: Silence ILS debugging output for the release.
    • protect csh version of the vmd launch script to look for rlwrap on any other platform than LINUX and LINUXAMD64, as others, particularly AIX seem to have issues.
    • topotools: preserve information about atom masses in more cases, particularly for extended CGCMM style of lammps data files.
    • symmetry: Added code to handle the case where we have a Cn pointgroup but no central atom and no unique axes of inertia.
    • hoomdplugin: avoid null-pointer dereference.
    • timeline: documentation additions, changes
    • timeline: gui fixes (appearance)
    • hoomdplugin: make units scale factor handling more consistent. allocate storage for velocities so they are not only parsed but also handed on to VMD.
    • hoomdplugin: need to initialize massscale to 1.0 and not 0.0 for mass tags without the units attribute.
    • jsplugin: Changed string table allocations to use calloc so that unused string table memory is always cleared to zeros. This makes it possible to do binary compares on files that contain identical payload data but were written on different hosts, or at different times.
    • jsplugin: fixed another endian swapping buglet
    • jsplugin: Fix bug in the length of the swap4() calls for some of the string table length parameters when reading an opposite-endian file.
    • set Isosurface rep text command parameter types for easier interpretation of saved state files
    • set Orbital rep output precision and types for easier interpretation
    • Align horizontal position of the orbital chooser with the excitation chooser
    • Set default orbital isovalue to 0.05
    • Added options to impose given symmetry elements on the structure. It will wrap the atoms around these elements and average the coordinates of the atoms and its images. Added option -idealsel that allows to specify a second selection. The symmetry search will be performed on the regular selection but then the found symmetry elements will be imposed on the second selection an the search is repeated with that second selection. This allows for example to perform the symmetry guess on a selection without hydrogens which point in random directions for rotable groups but still get the ideal coordinates and unique atoms for the entire structure (in this case the idealsel selection). idealsel must be a superset of sel.
    • make orbital indices active/inactive in the GUI depending on whether they exist in any loaded frame for the selected wavefunction type, spin, and excitation.
    • Added function to query if a certain orbital ID exists in any frame in the given wavefunction.
    • reactivate orbitallist control in all cases
    • Dynamically regenerate the list of excitations when the user selects a different wavefunction type
    • replaced failed sundemo build box with asuncion, which is freshly reinstalled
    • don't used pinned memory for atom position/charge data in the multi-GPU Coulomb kernel until future drivers have completely cured race conditions with cudaMallocHost()/cudaFreeHost() in multi-GPU codes.
    • topolammps: adding full support for atom style dpd and partial support for style hybrid.
    • lammpsplugin: sorting the atom index map is very useful to optimize for the common case that we don't need a hashtable, however, that destroys the map for the less common case that we actually need it. With the imminent release we have to stick to to always using the hashtable.
    • fix bug when trying to save a selection from Molecule. commented out code that cannot work anymore. the behavior now is consistent.
    • add documentation for the "imd copyunitcell" hack.
    • need to use atom index maps when merging selections to molecules.
    • Applied Simon's patch that adds C2, C2' and C_2 to the list of names that are considered for the first atom after the oxygen.
    • Added new "imd copyunitcell" command to cause the IMD code to copy the previous timestep's unit cell information rather than leaving it uninitialized. This is helpful for demos that want to show the periodic cell, until such time as we update the IMD protocol to actually send/receive unit cell information.
    • add documentation for measure inertia and measure symmetry.
    • Moved two #defines back into MeasureSymmetry.h. (Oops) Updated Usage message for measure symmetry.
    • For "measure inertia" and "measure symmetry" allow syntax for options with and without leading dash (e.g. -nobonds vs. nobonds). without dash is compliant with the syntax of most of the otehr VMD commands but since there are scripts in use already that use tha dash syntax I simply allow both.
    • multiplot: update docs for 4.x
    • multiplot: now accepts parameters -xmin -xmax -ymin -ymax to specify the plot range manually.
    • symmetrytool: Set the working molecule to the first molecule with numframes greater than 0 when the current molecule gets deleted by the user. Improved behaviour of the molecule selector/updater. List molecule ID and name instead of just the ID.
    • topotools: bond types need to be canonicalized on retyping.
    • topotools: we have to canonicalize dihedral- and impropertypes based on the types of atoms 1 and 4, if the types of 2 and 3 are identical.
    • molfileplugin: copy dihedral and impropertype names, so they can be written out.
    • fix off-by-one error in the tcl interface to dihedrals and impropers.
    • symmetry: Added an outer loop that goes through increasing tolerance values up to the user specified maximum. If several different point groups are found the one with the highest symetry is chosen. The algorithm is now very very robust. If there is any symmetry within the max. tolerance level it will find it correctly. No false positives or bad number of found symmetry elements anymore. This is the beauty of a self-consistent algorithm. Corrected the number of allowed arguments for measure symmetry.
    • Only delete GLU quadric objects if display initialization was entirely successfull and they were actually created at init time.
    • Fixed missing initialization of vmdcollab pointer to NULL
    • symmetry: Fix problem with endless loop into which one could get in certain rare circumstances. It was in the code that finds the connected set of unique coordinates. Reassign the bonds topology and bondsum vectors in each iteration. This helps detecting cases where symmetry is falsely detected for C1 molecules (when the tolerance parameter is chosen high). In such casesidealized structures are generated that are recognized as similar to the original coordinates due to the high tolerance. Only the messed up bond orientations indicate that there is no symmetry.
    • multiseq: add the pdf manual and change the main multiseq html page to reference it
    • cgtools: added in a check to see if bead definitions have been loaded before trying to apply them. Should help in debugging incorrect tool usage from the command line.
    • POV-Ray renderings now take account of the shadow rendering state
    • Removed support for old POV-Ray versions lower than 3.5.
    • symmetry: Check bond equivalence only for bonds with both atoms within the selection.
    • multiseq: For modified bases, the status bar now displays the modified 3 letter residue code. The sequence window still shows a '?' (much more difficult to change), but a user can now click on a modified base residue and see what the 3 letter code is, as zls had asked about.
    • Show non-unique axes of inertia in half size and in grey instead of white. Add checkbuttons to show/hide symmetry elements.
    • Added docs for VMDDISABLESTEREO environment variable
    • Added a new VMDDISABLESTEREO environment variable check, to allow stereo X11 visuals to be ignored as a workaround for buggy display drivers. This can be used to workaround recent bugs found in the MacOS X 10.5.7 X11 server when remote displaying VMD sessions over a network.
    • Disable tests for OpenGL video resizing extension since we don't need this anymore.
    • Added function to query the existence of a wavefunction with a certain excitation.
    • added a note about the main multiseq window redrawing more slowly than normal if the zoom window is open.
    • multiseq: revise zoom window so that it updates when the main window updates.
    • Replaced Orbital representation "Step" control with a new "Grid Spacing" control that gives grid/lattice spacing in units of Angstroms. The step parameter is still used by the isovalue slider to speed up redraws while the slider is being dragged (without regenerating the orbital grid from scratch), whereas changes grid spacing parameter will cause both the orbital grid to be recalculated and the on-screen graphics to be redrawn.
    • Correct size of Fl_Group() for rep controls to fix a bug in interaction with the ribbon height slider for the Twister representation.
    • Only cause rep commands to update the orbital chooser contents when the wavefunction chooser values have been modified. Doing the orbital list regeneration causes the isovalue slider to lose focus after every value update if it is done unnecessarily.
    • symmetry: Report unnormalized eigenvalues.
    • symmetrytool: added tk callback function. Improved color scheme for drawing rotation axes and inversion center.
    • multiseq: fixed a bug where some code didn't like a temp dir not being specified
    • multiseq: added in a check for the temp directory to make sure that: a) it is given, and b) it is writeable. If not, let the user know, and tell them how to specify a good one.
    • symmetry: Fixed the sometimes wrong counting of the vertical planes.
    • Introduced option -verbose to control the amount of console logging produced by measure symmetry. Pretty up the output.
    • multiseq: when extracting regions, properly handle the cases where no elements in a region exist because they are all gaps. That particular case wasn't being checked, which was resulting in a crash.
    • multiseq: revised phylotree proc to use curated selected cell information. Fixes a bug or two that can occur, depending on how cells are being selected.
    • multiseq: revised column selection to not duplicate starting column. Also revised proc that returns curated selected cell information to sort the residues.
    • Fix a problem with linear molecules. Suppress C2 axes that are parallel to the Cinf axis.
    • gamessplugin: workaround lack of sqrtf() on Windows platforms
    • symmetrytool: Add molecule selector and handle cases where no molecules are present or where molecules have been deleted.
    • symmetrytool: Gracefully ignore everything in case no molecule is loaded. Fix indentation in several places.
    • Change the behavior of the measure inertia command so that it does not normalize the eigenvalues. Chris and Leo need unnormalized eigenvals. Adjusted measure symmetry code accordingly.
    • multiseq: added in a check to prevent Residue: -1 from showing up on the statusbar
    • Added GRADIENT and MEX to the list of known QM run types. Silence debugging output.
    • gamessplugin: Expand symmetry unique atoms by creating images of the atoms so that we have the full coordinate set. For now we need this for MEX trajectories but, I suspect there are many more cases where GAMESS doesn't print the full set of atoms.
    • The Orbital wavefunction selection GUIs are stable and are now enabled by default.
    • Add function to get the highest excitation for any wavefunction with the given type.
    • Fixed D shell and F shell angular momenta ordering in the CUDA kernel to match the CPU code.
    • Extended angular momentum sorting to all orbitals.
    • gamessplugin: Enable reading trajectories from FMO runs.
    • topotools: use more digits after decimal point when generating LAMMPS data files.
    • gamessplugin: Fix reading CIS state energies.
    • gamessplugin: Enable reading trajectories from potential energy surface scans.
    • gamessplugin: Many small bugfixes. Enable reading coordinates of FMO calculations. (Coordinates only because the wavefunctions are printed per fragment and VMD requires that there's a wavefunction present for each atom. A possible workaround would be to pad the wavefunctions accordingly and add a wavefunction for each fragment.
    • Changed Orbital GUI to dynamically update the list of available wavefunction spin types based on availability in the selected molecule.
    • Dynamically update the list of available Wavefunction types when the molecule chooser is changed, or new files are loaded. Unavailable wavefunction types are grayed out, but the mapping between the GUI chooser index and the internal type index remains fixed.
    • Cause the orbital GUI to accept combinations of wavefunction/orbitals that don't exist without reverting to the default settings.
    • Enable dynamic regeneration of the available orbitals in the GUI
    • gamessplugin: Don't consider a missing basis set an error for semiempirical calculations. These parameters are never printed. VMD should hardcode them instead.
    • gamessplugin: Fixed the cartesian hessian reader.
    • multiseq: changed help url to point to plugins/multiseq instead of scs.
    • gamessplugin: Fixed a bug and a memory leak both caused by wrong usage of strtok().
    • gamessplugin: Fixed and greatly simplified the normal mode reader.
    • gamessplugin: Fix hessian and normal mode readers. They still read incomplete data, but at least they don't crash anymore and the code is a lot more readable.
    • Fix the handling of hessian and normal modes. Made a bunch of QMData members private and provide access functions instead. Eliminated QMData::ncart since it is always 3*num_atoms.
    • catdcd: updated catdcd doc page
    • gamessplugin: Separate parsing internal coordinates and hessian in internal coordinates. Improve functions for reading hessians.
    • molfile_plugin.h: Rename have_internals to have_inthessian since this is a more accurate description.
    • multiseq: still-rough version of multiseq manual. 'make' creates a PDF.
    • gamessplugin: Improve and generalize searching for keystrings.
    • gamessplugin: Fix the parsing of SCF energies.
    • rmsd: catch a division by zero and display errors with a tk_messageBox.
    • seqdata: the 'i' button was pulling up an info window on the desired sequence, and it was allowing multiple windows, but it was using "class" variables that were not being properly handled on a per-window basis, so things broke badly when multiple info windows were opened. Tweaked to only allow one window at a time now. This would be handy functionality to actually fix and put in correctly once we have the release out the door.
    • Updated ccp4plugin output messages per Willy Wriggers' suggestions.
    • Tagged plugin-related VMD source files with the UIUC open source license so they can be more easily incorporated into other people's codes.
    • hbonds: Explicitly import tk_version from global namespace before checking for it.
    • seqdata: remove duplicate procedure
    • adapt gaussian and cpmdlog plugins so they compile with the latest revision of the molfile_plugin.h header file.
    • timeline: fixed an init problem for picked items. Only appeared when molecule had fewer residues than the (usually smaller number of) free-selection groups. Fixed now.
    • interal salt bridge calc and some stability improvements. (namesapce vars for hbond and salt bridge params.)
    • Complete the support of energies per wavefunction by adding a molfile command.
    • Process multiplicity per wavefunctions correctly. Remove num_orbitalsA/B from QMData.
    • gamessplugin: Read the multiplicity per wavefunction if possible. Read the energy of the electronic state of a wavefunction.
    • molfile_plugin.h: Changed the electronic state energy from float to double. Removed multiplicity from molfile_qm_sysinfo_t, it is in molfile_qm_wavefunction_t now.
    • document option to allow overriding the namd executable name. TODO: add documentation for several other undocumented textmode-only options.
    • namdplugin: add option to allow overriding the namd executable name (textmode only), as requested on VMD-l. TODO: - support to pass options to namd would be nice, too. e.g., NAMD-gpu requires +idlepoll. - add GUI support, if possible (same goes for other textmode-only options).
    • molfile_plugin.h: Added multiplicity and energy of the electronic state to the wavefunction object. These two are really parameters of a wave function per timestep and not of a molecule or just a timestep.
    • CMAP terms added to main topology CMAP terms for GLY-related residues corrected in hybrid topology
    • hoomdplugin: added overdue support for dihedrals and impropers.
    • gamessplugin: Improve function that parses SCF iterations.
    • Add functions to determine if a wavefunction with a given signature exists.
    • Add function QMData::get_avail_orbitals() to get the occupancies for all available orbitals for a given wavefunction signature.
    • moved text label that was getting cut off by Tk (discovered when making screen shots)
    • Removed unused functions. Made order of functions in QMData.C roughly match QMData.h.
    • Added test code to regenerate the orbital list any time the wavefunction type, spin, or excitation selections change
    • Handle more cases in the orbital GUI logic, reactivate controls after updates, regardless whether or not there are orbitals in the new list
    • Ordered the plethora of functions in QMData.h and titles for groups of functions. Deleted unused functions from QMData. Renamed a function.
    • Correct orbital list regeneration behavior when a nonexistent wavefunction parameter combination is selected in the GUI
    • Refer to the index of the wavefunction signature in QMData as iwavesig to distinguish it from iwave which refers to the index of the wavefunction in QMTimestep. The wavefunction signature is the timestep independent wavefunction ID.
    • Added function to retrieve the list of available orbitals for a given wavefunction.
    • Catch cases where the qm_data member of a Molecule is still NULL but the rep is set to Orbital, e.g. when loading a saved state.
    • Added new routines for dynamically regenerating the list of available orbitals in the GUI, based on the currently selected wavefunction type, spin, and excitation parameters.
    • migrated callback data structures into GraphicsFltkReps.h since that's where they're primarily used. This will enable referencing the callback handle pointers within the orbital representation.
    • fix incorrect callback handle on Orbital representation
    • gamessplugin: Made reading the GUESS section optional since it is not always printed in the output. Read in point group symmetry, even though we don't use it yet.
    • gamessplugin: Improve version string parsing.
    • gamessplugin: Return gracefully when there are no atom coordinates found as it is the case with FMO calculations.
    • gamessplugin: Read wavefunctions for CI GUGA and CIS calculations.
    • gamessplugin: Made wavefunction keyword parsing scheme more robust. We can now read Ruedenberg localized orbitals.
    • apbsrun bugfix: gracefully handle the situation of a top molecule without a representation.
    • contactmap bugfix: avoid division by zero in a couple of places.
    • gamessplugin: Enable reading gradients.
    • readcharmmpar: bugfix: add missing expr that makes paratool run into errors otherwise.
    • gamessplugin: Enable correct readding of orbital occupancies and energies for MCSCF calculations.
    • Better handling of orbital occupancies and energies.
    • gamessplugin: Handle orbital energies and occcupancies properly. Enable to read occupancies for CI natural orbitals.
    • Add flags for orbital energies and occupancies per wavefunction.
    • namdgui: Withdraw window instead of destroying it when user closes it. Withdraw children with parent. When user iconifies main window, unmap children.
    • Added code (still commented out) to get the right orbital from the orbital index used in the gui. Improved comments.
    • namdgui: Rolled back Axel's recently commited GUI fixes since they didn't work. The scrollbar didn't scroll down to reveal the rest of the frame. Fixed the problem of the too large window by putting two frames into separate widgets accessible from the Edit menu.
    • Add comments for the functions for getting the wavefunction indexes and labels.
    • cpmdlogplugin, gaussianplugin: follow molfile plugin API changes to keep cpmdlogplugin and gaussianplugin compileable.
    • Changed variable names runtyp->runtype and scftyp->scftype.
    • gamessplugin: Get rid of unused variables. Reorganize qm data structure (reorder only). Use new variable names.
    • gamessplugin: Defortranized variable names scftyp and runtyp.
    • gamessplugin: Handle the case when SCF does not converge for single point runs.
    • Add safety and range checks for some query functions.
    • Add MOLFILE_MAXWAVEPERTS macro for the maximum number of wavefunctions allowed per timestep.
    • libbiokit: minor text change to an error message to help identify reason
    • atomids in lammps data files can be anything for as long as they are unique. support this case upon reading through an index map.
    • if we advertise using CODATA 2006 for unit conversion, we should use that and not something else for AU to eV definition.
    • hbonds: added a clarification to hbonds webpage
    • timeline: Data collection interface, data file format to ver 1.3 now with .tml extension, 2D zooming working properly, lots of GUI fixes and GUI improvements
    • ilstools: bug fixes.
    • Cranked VASP plugin version to match latest code.
    • Added Sung Sukong's VASP parchg plugin
    • topotools: plug memory leak.
    • ILS: Allow, but ignore specifying orientations for monoatomic probes. This makes it easier to write a reusable input script.
    • Applied Sung Sukong's VASP plugin update to workaround input files with minor errors in them.
    • Added conversion factor from Hartree into eV
    • cranked vasp plugin version numbers, and tagged all of the ones that use strtok() as thread-unsafe.
    • Updated versions of Sung Sakong's VASP plugins, in support of the new VASP 5.2 package, which has some new/updated file formatting.
    • multiseq: Fixed a bug that was occuring with the multiseq window was zoomed out to the point that the text was replaced with just colored pixels (found it on Windows). Introduced this bug back when we set the text color to be the "opposite" of the background color.
    • paratool: Improved text of a menu item.
    • resptool: Updated version that fixes several bugs and shortcomings.
    • readcharmmpar: Recognize lines beginning with '*' as comments. Fix indentation.
    • molfile_plugin.h: Removed unused fields from the qm interface. Aligned some comments.
    • readcharmmtop: hybrid topology now includes CMAP terms (from C. Chipot)
    • signalproc: add rudimentary documentation for most of the additional functionality.
    • signalproc: place code in namespace to avoid polluting the global namespace.
    • Added functions to translate between orbital ids and indexes. Add function to query the maximum number of available orbitals over all frames for the given wavefunction.
    • Have autoionize write the box information if it was there in the input pdb
    • Fixed QMTimestep copy constructor.
    • Add get_max_avail_orbitals() function that returns the total number of different orbitals present over all frames for the specified wavefunction.
    • hbonds: Don't attempt to call multiplot when running in text mode.
    • Store the orbital IDs in the wavefunction.
    • Change orbital_indices ot orbital_ids to reflect the fact that they are 1-based and don't have to start with 1 either.
    • Added orbital index numbers lists for each wavefunction to qm_timestep. Removed unused fields.
    • cpmdlogplugin, gaussianplugin, gamessplugin: Following Axel's suggestion, added num_occupied_A and num_occupied_B to the interface since the wavefunction may have only a subset of orbitals, and we want to know where the frontier orbitals are located. with the similarity reordering in VMD this information will be essential, if somebody compares the .log file and the orbital rep.
    • multiseq: based on what I discovered when using VMware, revised the size of a dialog box so that it fits on the screen better.
    • topotools: need to export selections2mol.
    • Switched on the new Orbital Rep code. Now one can choose between several wavefunctions per timestep.
    • added test code for menu item activation/deactivation. Used volumetric data reps and coloring as the first test case.
    • Change numerical values for spin alpha and beta.
    • provide a function that gets the wavefunction index from the IDtag. This is necessary since some timestep might not contain a certain wavefunction thus changing the indexes of the follwing wavefunctions.
    • gamessplugin: Remove the idtag field from the wavefunction since it will be set by VMD based on the other wavefunction descriptors.
    • Assign a wavefunction identifier based on type, spin, excitation and info string.
    • removed MOLFILE_WAVE_OTHER from list of wavefunction types since we have UNKNOWN which takes care of all other than the specified cases.
    • gamessplugin: Populate the wavefunction info string.
    • migrate loop control params out toward script interface
    • Add support for test looping to prevent host thread launch overhead from interrupting kernel execution when doing power consumption tests.
    • increase benchmark loops for madd kernel
    • increase arithmetic intensity of MADD benchmark inner loop
    • Set default orbital min/max range values to -0.1 and 0.1 respectively
    • solvate: Write a new pdb with bounding box information, as per justin's suggestion
    • Added new GUI controls for wavefunction selection, though they remain disabled until matching code is added to DrawMolItemOrbital to draw orbitals for the selected wavefunction.
    • Updated orbital rendering code with new parameters and state tracking to allow selection of wavefunctions by type, spin, and excitation
    • Increased maximum atom representation storage to accomodate new orbitals representation
    • gamessplugin: Removed old debugging output.
    • Added function to translate betrween the wavefunction type flags from the GUI and the wavefunctions actually stored. Removed debugging printf.
    • changed order of #define GUI_WAVEF_TYPE_*
    • prepare orbital gui for new wavefunction choosers
    • provide a list of #define GUI_WAVEF_TYPE_* that enumerate the options in the dropdown list for selecting the wavefunction type in the Representation window.
    • Removed debugging output.
    • Enable VMD to store multiple wavefunctions per timestep. Fix wrong behaviour of QM related molinfo get commands. Before they would override the Tcl result object instead of appending to it.
    • gamessplugin: Populate spin, orbital type, and excitation fields when sending QM timestep data.
    • hoomdplugin: some comment corrections. support minimal hoomd xml files that don't have a type section.
    • Prevent "within 0 of XXX" from causing a memory exhaustion and a subsequent crash.
    • rnaview: Close file that was not being closed.
    • rnaview: Removed conflicting parsing code for -debug option.
    • Revised multiseq tcl package number from 2.1 to 3.0 to match what Elijah et al are calling it externally.
    • Removed cpmdlogplugin from the release builds since it requires a non-standard build of CPMD and we don't want to "tease" users with this until all of the matching pieces are available both in the standard CPMD code and in VMD.
    • prepare for making final VMD release builds, no more beta tags
    • Cranked version number
  • VMD 1.8.7 beta 6 (June 16, 2009)
    • Fixed bad latex in python docs caused by a patch insertion/paste problem of some sort.
    • need to quote string when using square brackets in glob pattern. fixes spurious "0-9: command not found" error with 'atomselect list'.
    • fix macish no-line-break measure surface latex source
    • Added docs for measure surface
    • reworked vmdhttpcopy to first do a HEAD check on the URL to see if it exists (and is readable, accessible on the network, etc) and then do a request to get the actual file. This should help a lot on machines that have been firewalled off from the remote file.
    • multiseqdialog: reworked some of the initialization code that executes when a user is starting multiseq for the first time. Tells them that they need a good network connection, and handles results from vmdhttpcopy in a more sane fashion (checking for a few common errors, etc)
    • inorganicbuilder: Added waitfor all to mol new and mol addfile commands, to possibly fix file deletion race condition problems on Windows.
    • Fixed bug that crashed vmd when tying volmap ils without options.
    • Warn users about potential buggy rendering when the X11 'Composite' extension is enabled.
    • molfile_plugin.h: Added new wavefunction type. Changed wavefunction type name. Added documentation.
    • gamessplugin: Made wavefunction parser even more robust.
    • basissetplugin: Removed unused helper functions.
    • plugin docs: Update docs to match current plugin version number.
    • edmplugin: Added code to write X-PLOR maps (only orthogonal cells for now). The X-PLOR format requires that the edges of the cell be integer multiples of the grid spacing. To overcome this limitation, we pad the box accordingly and resample the map, keeping the original grid spacing.
    • Added comments on two MolAtom members that should probably become unsigned bit fields to save memory.
    • Changed constant memory layout for CUDA ILS: permit up to 160 atom types, up to 8 probe atoms (for ethane), reduce maximum number of bin offsets to fit into first 8K page, reduce maximum number of conformers for increased probe size, and leave the highest 1K unused.
    • if CUDA ILS fails, fall back on CPU calculation
    • small GUI tweaks and cleanups. Update documentation to mention some possible optimizations for certain g(r) calculations. Step version number to 1.1.
    • contactmap: Fixed bugs in initial data field filling, which were obvious when loaded contactmap without any molecules present. Also, can now compare different-length molecules.
    • gamessplugin: Enable reading CI runs.
    • fix c++isms in gamessplugin
    • vmdmovie: Added a new "dry run" movie mode that doesn't do any image generation or encoding, to let users test their movie segments much more conveniently.
    • vmdmovie: All of the supported movie renderers support both bmp and ppm image output
    • vmdmovie: All of the VMD versions now incorporate the same list of renderers.
    • vmdmovie: updated documentation version number to match the latest vmdmovie plugin
    • Updated the behavior of the shared library compiles to link with g++ so that the shared library builds can use CUDA etc.
    • molfile_plugin: Added two new QM wave function types.
    • gamessplugin: Enable reading GVB ROHF calculations. They have an extra set of so called geminal orbitals which can be loaded now.
    • gamessplugin: Made parser more robust. Simplified parsing structure. Fixed memory leaks.
    • Added CUDA source files to make_distrib source distributions
    • Removed outdated SWIG interface
    • Updated python docs per Axel's patch.
    • namdplot: close input file at the end of the namdparse proc
    • reduced solvate GUI picture to 60% of the original size to improve the layout of the docs page.
    • avsplugin: Update URL with the CVS Field file format description. Updated version number to match latest revision.
    • mapplugin: Update URL with the AutoDock file format description.
    • Added ssrestraints and rnaview plugins to the main plugin docs page.
    • ssrestraints: fix a memory leak
    • gamessplugin: Fix some problems with reading older file formats.
    • Added prototype detection code for X11 "Composite" extension
    • gamessplugin: Enable reading older versions of GAMESS output (the format changed 2005).
    • Bugfix: Allow loading of QM logfiles that contain no explicit basis set (such as calculations with semiempirical methods in GAMESS). This takes care of Rui Rodriguez's bug.
    • make the generation of a list of atom selections a bit smarter.
    • Changed FileRenderer::nearest_index() to search the entire color table and not just the first 33 colors. This was causing problems for sphere and point arrays colored by one of the attribute-based color scales.
    • Try pale green selection highlight color and get user feedback
    • Fix bug in volmap command parser that could result in a crash if the selection parameter was missing.
    • Silence console output from performance measurement code in the orbitals rep
    • Recompute the orbital grid if the user changes the step size parameter
    • Cache molecular orbital grids and only recompute them when the selection changes, the timestep changes, or the orbital index changes. Other representation parameters should only affect the rendering and not the computed orbital grid itself.
    • prevent double inclusion of volumetric data header from causing troubles
    • signalproc: added support for regular sliding window average for sake of completeness.
    • signalproc: First part of signalproc documentation overhaul. Added overview for all packages and sgsmooth results example.
    • signalproc: fix non-portable use of find, so that fftcmds.so does get installed.
    • Add documention for the 'evaltcl' command in the Python section of the User's Guide.
    • try harder to make the VMD module work when imported into a Python interpreter and give a hint to the user in case it ultimately fails. turn 'evaltcl' into a regular method forwarding calls to VMDevaltcl, but only if the latter is actually available. add embedded documentation for 'evaltcl'.
    • some minor tweaks and changes to make the VMD python module behave consistently and without errors when using it from a python interpreter. make the tcl evaluation command directly available as 'evaltcl'.
    • topotools: expand topotools documentation to add some explanations on usage and scope.
    • topotools: implement a "selections2mol" utility method for use in "trunctraj" and otherwise.
    • topotools: fixed bug in sorting of residue numbers
    • one more update for CG-CMM topology and parameter input generation.
    • cranked mutator plugin version due to bug fix provided by Grischa Meyer.
    • Applied Grischa Meyer's fix for a scenario where mutator would fail when one tried to mutate one residue in one segment in a file which has many segments and the resid of the mutation is higher than the number of residues in the smallest segment. The problem was caused by an empty "oldres" variable, and is fixed by moving the offending code into the safety of an appropriate if/then block.
    • improve support for reading LAMMPS topology files for CMM coarse grain systems.
    • topotools: remove redundant function definition. write a Masses section, if reasonable data is present.
    • topotools: minor cleanup and documentation fixes.
    • Cranked version number
  • VMD 1.8.7 beta 5 (June 1, 2009)
    • vmd.sh: correct variable name broken in two by a newline char.
    • Tweaked the color of browser selections to be a lighter shade of gray than the default window background color.
    • Reduced maximum ray recursion depth from 30 down to 8, since there's really no sane reason one would ever need this for a normal VMD scene
    • Added code to detect and report mismatches between the CUDA runtime and the installed CUDA driver.
    • Teach the CUDA management code how to deal with devices that are in computeModeProhibited state.
    • disable trunctraj until it's ready for prime-time
    • Added hbonds plugin to the docs page
    • reduced the size of the screen shot for the hbonds plugin docs
    • fixed name of multitext plugin on the docs page
    • Added mergestructs to the docs page
    • Added ilstools, reordered the "other" grouping
    • added signalproc plugin to the docs page
    • Added topotools to the docs page
    • Added nanotube builder docs to the plugin docs page
    • added credits and documentation for nanotube plugin.
    • Added CUDA support to win32 vs2005 builds, runs well so far.
    • Fixed a bad fopen() file mode that was causing a crash when compiled with MSVS 2005.
    • Added libtachyon to vs2005 win32 builds
    • Updated vs2005 project for recent changes
    • nanotube: use "mol new atoms XXX" instead of a temporary file. convert to vmdcon.
    • topotools: make adddefaultrep independent from namespace variables, so it can be used in other plugins.
    • qmtool, paratool: changing the palette at this point triggers initialization failures, if the GUI is enabled from a script. Commented out the call for the time being.
    • ilstools: make the GUI handle the situation of having no molecule or no usable top molecule gracefully and without error that are silently ignored.
    • use correct callback name for cggui plugin.
    • use correct callback name in hbonds plugin registration.
    • only enable the use of rlwrap on Linux platforms for the time being, as the tests for its existence encounter problems on platforms like AIX that use ksh rather than bash, and for which rlwrap is most likely not installed anyway.
    • Added AIX6_64 target to make_distrib
    • fix Blue Print plugins build config
    • updated build configuration for NCSA Blue Print now that it's running AIX 6.x
    • Added AIX6_64 target for Blue Waters
    • ilstools: some more GUI tweaks to make it look more regular and keep room for large sampling molecule names. convert to use vmdcon for log messages.
    • ilstools: replaced inserted scrolled frame between GUI and toplevel. cleaned up the confusing use of $frame and removed all explicit references to .ilstools except when initializing the toplevel window.
    • Added macosx.x86.opengl.nocuda target for MacOS X 10.4.x builds that cannot support CUDA
    • convert sequence viewer to use vmdcon. step version number to 1.1.
    • namdgui: make the GUI a little bit wider for safety and center the scrolledframe.
    • rewrite of the code for the left side panel of the sequence viewer to use grid as layout manager and make the zoomslider fill the panel.
    • rewrote and simplified the menubar handling to match other plugins. removed some dead and non-working code.
    • solvate: convert solvate to use vmdcon.
    • solvate: Fix a bug that occurs for very small water boxes Compress the gui to get rid of some wasted space Remove the scrollbar (can be added in again very easily be changing what it is set to
    • autopsf: Shorten the autopsf gui
    • molefacture: Slim down the molefacture gui
    • autopsf: Make the checkbuttons for the fragments into radiobuttons
    • inorganicbuilder: Shrunk GUI
    • zoomseq: comment out "Close Window" function for style consistency.
    • untabify zoomseq.
    • reduce namespace pollution by importing the scrolledframe proc into the individual namespaces and not into the global one.
    • make solvate GUI resizable in y direction by inserting a scrolled frame, similar to namdgui.
    • convert namdgui to use vmdcon.
    • namdgui: resizable by inserting a scrolledframe between toplevel window and the existing gui elements. width is still fixed at 550px, but height can be changed. defaults to 400px showing the file i/o widgets.
    • fix off-by-one buffer overflow detected by gcc-4.3
    • Tweaked MSM coulomb button
    • Updated the volmapgui plugin to indicate the relative performance of the "coulomb" and "coulombmsm" map types
    • Corrected order of x/y/z lattice dimension parameters for the multilevel summation-based coulomb potential calculation.
    • Updated volmapgui plugin adding support for the new multilevel summation based Coulomb potential map type ("coulombmsm").
    • Moved the multilevel summation based electrostatic algorithm from the old "coulomb" map type, into a new "coulombmsm" map type.
    • Scaled down the ilstools GUI snapshot in the docs so it doesn't take up the whole web page.
    • Set default contact map window size to be more netbook-friendly
    • Changed the window title from "VMD Seq Compare" to "VMD Contact Map" since that's the name of the plugin and that's really the only calculation it can do presently.
    • Resized rep browser column widths to accomodate longer representation and coloring method names, e.g. "DynamicBonds", and "PhysicalTime".
    • Further fine tuning of color menu browser widths and positioning. Increased the width of the color scale image to take up the entire window.
    • Increased the width of the color window by 40 pixels to accomodate longer color category item names and color names
    • Added a text label for the shadowing and ambient occlusion controls to indicate they are (currently) only for external renderers and have no effect on the OpenGL rendering
    • Added new macros for colors used for text in browsers to signify active/inactive or displayed/hidden states, updated the color scheme for the browsers to be slightly off-white to differentiate them visually from the text input fields, and changed the default "inactive" text color to red rather than magenta.
    • Started adding macros to allow redefinition of the main window colors
    • enable alternate color scheme, time to collect feedback from users..
    • checked in alternate color scheme, though not enabled
    • Updated more FLTK GUI source files to use the new color macros
    • merge the text/selection macros for choosers since they are really the same thing in FLTK's view
    • Made color macro names more consistent with FLTK's coloring terminology
    • Replaced hard-coded VMD FLTK color scheme with macros that are much easier to modify. This will make it much easier to devise an interface that improves on the old cyan/black/yellow scheme used in the past.
    • Fixed Tachyon triangle strip generation code so that per-vertex colors aren't exported when volumetric texturing is active.
    • Applied Justin's patch adding VMDevaltcl to the Python interface and changing the behavior when loading in standalone vs. module mode
    • Cranked version number
  • VMD 1.8.7 beta 4 (May 27, 2009)
    • Added a progress callback to the internal Tachyon renderer calls so that long-running ambient occlusion renderings don't leave the user mystified as to how long things are likely to take...
    • Added several new materials optimized for ambient occlusion renderings
    • Updated the "diffuse" material so it looks closer to the same whether rendered in GLSL, normal OpenGL, or in Tachyon
    • Corrected material state handling for file renderers, so that the volume slice representation looks right when rendered with ray tracers
    • require latest version of Tachyon for volumetric coloring/texturing features
    • corrected export of scenes containing triangle meshes or vertex arrays with volumetric texturing in effect.
    • Enabled volumetric coloring now that it's working correctly for the VolumeSlice representation. Need to add missing code for the other cases still.
    • Added 3-D texturing to the built-in Tachyon renderer
    • Cleanup of 3-D texturing implementation for external Tachyon renderings. Added comments to clarify the steps in transforming the texture plane equations from molecule coordinates into the renderer's world coordinates.
    • corrected handling of objects drawn with lighting disabled.
    • Call virtual method to enable volume texturing once a volume texture is defined.
    • enable volume texturing by default for tachyon renderer
    • autopsf: Fix an indexing problem when using osel in some cases
    • Fixed Z offset bug and handedness of 3-D texture plane equation vectors passed to Tachyon. Translation and scaling of 3-D volumetric textures both appear to work correctly now. Rotations give incorrect renderings, so more bugs remain.
    • gaussianplugin: recover ability to parse wavefunctions and store them appropriately. currently only cartesian basis sets are supported. orbital display for some simple cases recovered.
    • cpmdlogplugin, gaussianplugin: next step in fixing the gaussian plugin for orbital display. needed to add a parser for counting total atomic basis functions, total primitives and total shells, so that we can allocate arrays in the correct sizes before parsing the basis set and the wavefunction(s). currently handles only inline basis sets but not external ones. all basis functions are assumed to be cartesian; pure basis functions will need to be converted.
    • cgtools: Use better default md parameters
    • timeline: many GUI, feature, and stability fixes. (Hopefully have at last solved non-atom molecule problems)
    • eliminated old (now unused) macros that were previously used for sizing internal data structures in the GAMESS plugin.
    • fixed a bug that was occuring when you used the mouse to select an element in a sequence that was "past the end" of the sequence. Basically something that makes the plugin more robust
    • cubeplugin: convert cubeplugin to vmdcon.
    • cubeplugin: added support to read charge field from atom specification on suggestion by xavier cartoixa soler.
    • ILS: Removed outdated citation message.
    • Cranked version number
  • VMD 1.8.7 beta 3 (May 18, 2009)
    • Updated the vmdmovie plugin to allow use of TachyonInternal on Windows, since Windows versions of VMD now include a built-in "TachyonInternal" renderer just like the Unix versions do.
    • Prevent snprintf() from tripping up msvc compiles
    • dtrplugin: Updated version from DESRES, fixes a number of bugs and improves interoperability with Schrodinger's maestro tool.
    • maeffplugin: Updated version from DESRES, improved interoperability with Schrodinger's maestro tool
    • vmdmovie: Fix an unprotected 'molinfo top get numframes' call that could cause an error when no molecule was loaded.
    • Updated documentation build to use ps2pdf rather than distiller, since ps2pdf is free and widely available whereas distiller is no longer available
    • Added documentation for new "render" subcommands to control antialiasing and ambient occlusion lighting parameters, and image output formats
    • Added docs for new ambient occlusion and shadow control display commands
    • Added shadow control to display command built-in help
    • added ambientocclusion to built-in help query list
    • updated readme info with new rendering features
    • vmdmovie: removed hard-coded Tachyon shader mode flags from the command line arguments since these are now contained in the scene files emitted by VMD
    • vmdmovie: removed hard-coded antialiasing sample flags and rendering mode flags from Tachyon execution strings, since VMD now exports this information in the emitted scene file itself.
    • Added ilstools to the Analysis extensions menu
    • Applied Olaf's updates to the plugin test main to allow multi-file tests and exercising more of the new plugin APIs.
    • Updated AA sample count in default Tachyon run command string
    • make psfgen compilable again when using molfile plugin interface.
    • vtfplugin: fix C++isms
    • Updated the external Tachyon renderer code to emit all of the key parameters in the scene file rather than depending on command line options. The new code uses the "shader_mode" block to enable the VMD-specific transparency and fog rendering modes, as well as setting the appropriate rendering quality mode, and optionally enabling ambient occlusion lighting if needed. Changed both the internal and external Tachyon renderers to use a default of 12 AA samples per pixel, and 12 AO samples per AA sample.
    • A bunch of minor bugfixes and changes in order to work with the new format of CHARMM toppar files that allow more than 4 Characters for resnames, atom names and types.
    • added new 'ilstools' plugin
    • Minimum reasonable AO samples is about 16 samples per AA sample, with a default of 8 AA samples, we get a nice total of 128 AO samples per pixel.
    • Added shadowing and ambient occlusion controls to the display menu
    • Added display commands to enable/disable rendering with shadows and ambient occlusion lighting, AO ambient value and direct light rescaling factor, and FileRenderer commands to control the number of AO samples taken. Currently implemented only for TachyonInternal.
    • minor cleanup/reorg for readability
    • pretty up display settings window
    • Added several new materials using the outline shader
    • doc: Add little segment in tutorial about "logfile" and the new GUI controls for it.
    • Bumped up required Tachyon version number now that larger-than-unity texture outline factors are allowed (requires range clamping on output).
    • corrected a typo in the Tachyon texture output for outline rendered objects
    • Cranked up outline factor for goodsell material to leave dark outlines
    • Allow the outline factor to go beyond unity so that users can make dark halos around objects if they like.
    • improve readability of outline shading section of the GLSL fragment shaders
    • vtfplugin: Updated with Olaf's latest version
    • Fixed up the File menu command logging feature and corrected missing behavior entries for the newly-added command logging items.
    • hide "render imagesize" from built-in help until at least one external renderer implements it.
    • renamed old "aalevel" parameter to file renderers to "aasamples" which is more correct.
    • Misc cleanup and improvement of handling of previously undocumented renderer antialiasing controls and image format options
    • Added missing render subcommands to built-in help
    • updated default material list, added "Goodsell" shader to the built-in materials
    • solvate: pretty up I/O calls
    • improved order of material parameters written to saved state files
    • Increase default antialiasing for Tachyon renderings to 8 samples per pixel
    • Updated docs with note on outline shader
    • Applied AK's patch to add text command logging to the GUI
    • Updated FileRenderer and Tachyon renderers to support the new outline shader modes as well.
    • ssrestraings: Fix selection logic when deciding if STRIDE should be run on each segment separately.
    • Added two new material parameters "outline" and "outlinewidth" for use with the GLSL shading mode. These cannot currently be rendered by any of the external renderers, but the improved convenience of having them built-into VMD rather than having users hack the shader files externally is well worth it. It should be straightforward to add matching rendering support into Tachyon.
    • Added outline rendering to both VMD GLSL fragment shaders
    • ssrestraints: Only run STRIDE on each segment if the given selection contains protein.
    • Added a query for zero-copy mapped host memory
    • Add helper package to run STRIDE on each segname separately, which is more robust than running STRIDE on the whole structure at once. Using this approach, secondary structure is correctly calculated for the ribosome structures.
    • solvate: Added "waitfor all" flags to all file loading commands to prevent open file handles from lingering by the time we get to the point where the file delete calls are made.
    • topotools: make all procs that create a new molecule behave more like "mol new" and have them create a representation and reset the display view. The package internal variable "newaddsrep" controls this behavior.
    • lammpsplugin: let atoms have a radius when reading lammps data files. we use 1.5 by default, same as the molfile plugin. fixes problems with VDW rep reported by Lutz Maibaum.
    • fix help message for "mol" command.
    • fix cut-n-paste error in vecmul documentation.
    • topotools: fix undefined variable bug in replicatemol error message.
    • prevent string buffer overflow when renaming molecules with huge name strings.
    • Eliminated standalone build ifdefs from ILS code again
    • ILS: add option to ignore exclusion checks
    • Cranked version number
  • VMD 1.8.7 beta 2 (May 13, 2009)
    • Updated msvc6 project for recent thread pool changes.
    • hoomdplugin: finalized support for velocities by adding timestep metadata reader function.
    • Updated to Tom Bishop's latest version 2.0 of the VDNA plugin
    • seqdata: fixed a bug that was occuring when a list item that contained spaces was passed in.
    • Assume the MAP[CRS] fields apply also to the ORIGIN coordinates as they do for N*START
    • pbctools updated to Olaf's latest version 2.5
    • ccp4plugin: Added support for MRC2000 format headers with floating point ORIGIN records
    • fixed device minor version check logic to accept G80 hardware
    • Switch default VMD builds to use CUDA 2.2
    • ILS: Fix bug in rotamer generation code that prevented correct processing of nonsymmetric probes.
    • export vmdconio.h header with VMD alongside vmdplugin.h and molfile_plugin.h so that plugins can again be built against the VMD installation only, including those that have been converted to use the vmd console interface.
    • ssrestraints: Require input psf/pdb files, as opposed to acting on a previously loaded molecule. The RNA restraints code relies on the 'residue' definition, and requiring psf/pdb files prevents us from relying on "guessing" from VMD.
    • Allow the use of the environment variable VMDCUDANODISPLAYGPUS to prevent GPUs used for display from being used for computation. This is helpful in cases where only one GPU is installed and it gets overwhelmed by work, making the host windowing system unresponsive.
    • Changed threadpool manipulation routines to check for NULL parameter values and return error codes as appropriate.
    • Enabled automatic worker scheduler tile size scaling using predictive relative performance heuristics.
    • Use GTX 280 and Tesla C1060 as the "1.0" speed reference for the dynamic scheduler
    • Added device pool initialization code to compute and set speed scaling factors for each GPU device.
    • Added APIs for setting and querying relative device performance scaling factors, and for automatically scaling peak requested scheduler tile sizes by device performance index.
    • Changed all thread APIs to use the same symbolic constant return codes to indicate when the work schedulers/iterators have no more work units left
    • Fixed missing mutex unlock call prior to returning an empty status for an empty error stack
    • updated conditional compilation thread library selection tests
    • ILS: Put the energy threshold clamping back into the CPU kernels. Otherwise the algorithm is incorrect (and slower for mono-atom case).
    • ILS: Removed the heuristic that puts a restrictive bound on the number of "extra atoms" permitted for a given number of atoms. Instead we allow the maximum number of extra atoms that the CUDA kernels can handle.
    • Line up columns when printing the number of SMs in each GPU device found
    • ILS: Remove clamping of the occcupancy value in the different kernels. Clamping during the computration doesn't give any speedup but it decreases accuracy in some cases where the downsampling over gridpoints gived a different final result when the individual points were clamped already. Now the energy cutoff is only applied during the energy exclusion to identify points that would always be excluded and after the final downsampling.
    • Updated documentation for mergemols and replicatemol.
    • Merged in external tools to merge molecules and replicate unitcells. Some refactoring of the sources into more logical pieces. Place the "topo" frontend command into the TopoTools namespace and 'export' it to the outside via an alias. The source is more readable now, due to removal of most namespace qualifiers.
    • volmap compare: Added RMSD per bin to the histogram. Added command option -interval and -numbins.
    • ssrestraints: Update docs with new -hbonds option.
    • ssrestraints: H-bond restraints based on a script by Peter Freddolino.
    • topotools: properly skip over pair, angle, dihedral and improper coefficients in the topology file, handling empty and comment lines, too.
    • Changed histogram bin interval to 2.5 for volmap compare.
    • Fix the weighted RMSD computation in volmap compare. Fixed bad histogram bin assignment.
    • ILS: Changed the -conf option to -orient in "volmap ils" because that's a more accurate name. The old syntax still works, though.
    • Added note about GPUs for ILS.
    • Updated ILS documentation.
    • removed @myselection example since this was eliminated in rev 1.74 of AtomSel.C many years ago.
    • remove '$' from the list of recognized "break characters" to rlwrap as this breaks with certain versions of /bin/csh. removed it in /bin/sh version, too, to have the identical behavior in both scripts.
    • Started process of merging the CUDA device pool feature into the lower level thread pool APIs for better performance and reduction in code to maintain
    • topolammps: velocities list has to be initialized outside the loop.
    • fix a typo in the color clamping routine
    • collapse platform macro tests where possible.
    • volmap compare now also returns the average error per bin as well as the maximum error per bin (and the histogram printing includes the values as well)
    • eliminated unnecessary include on MacOS X
    • Collapsed many instances of ARCH_LINUXxxx down to a single test for definition of the __linux macro. Only if we have a specific reason to differentiate the flavors will we need to check for the VMD compilation macros.
    • Replaced VMD-specific hp-ux macro tests with general ones
    • collapsed AIX macro tests down to a single check for _AIX
    • collapsed separate IRIX macro tests down to single __irix test
    • Collapsed a large number of conditional compilations for Linux down to a single test for __linux. There were historical issues with __linux not being defined in c99 mode in older revs of GCC, but it appears to be fixed now. I've also checked that Intel C/C++ both do the right thing as of version 9.x at least.
    • Correct ABI compilation mode for text mode 64-bit AIX5 builds
    • Fixed a bug in handling of accession codes and database info that was introduced in rev 1.439 with AK's patch to allow creation of empty molecules. The accession info was being appended out-of-sync with the file lists being updated, breaking the correct behavior in the normal use case. In the special case where a molecule is generated internally via scripting commands, nothing should be recorded since the file records aren't being updated either.
    • Fix unprotected use of strcasecmp() in psfcheck. Win32 doesn't provide this routine by default.
    • Added AIX5 text build configurations for anlaysis-only use
    • Fix namespace collision with AIX system-defined "hz" macro.
    • Changed tilestack initializer to assume caller-allocated memory to improve cache use when inserted into the thread pool object.
    • Use correct frame count when reporting time/frame.
    • eliminate unnecessary padding bytes. Since the tile stack will only be access at the same time as the shared iterator, any shared cache lines are harmless, the sharing is thus real and would not create any performance loss.
    • ILS: added return of histogram information from volmap compare
    • ILS: Silenced excessive debugging output with check for VMDILSVERBOSE environment variable
    • ILS: Added comment about deficiencies in generating tetrahedral probe distributions at higher frequencies.
    • ILS: Fix bug in tetrahedral probe conformer generation. Remove unnecessary code.
    • ILS: Support of higher numbers (over 32) of probe orientations by geodesic triangulation of an icosahedron. In most practical cases we hopefully don't need more than 32 orientations but we need at least one reference calculation with a ridiculously large number.
    • Updated CUDA orbital code in prep for dynamic tile size selection by thread pool workers at runtime.
    • Added option to ignore probe symmetry through env variable VMDILSNOSYMM. Improved log messages and comments.
    • ILS: Generation of uniformly distributed probe orientations based on vertices and faces of platonic solids. Various minor other improvements. Still needs some cleanup.
    • rename APIs for dynamic work scheduler to be more developer-friendly
    • Misc cleanup and commenting on CPU affinity routines
    • Call sched_yield() after setting new thread CPU affinity mask to cause the new mask to take effect immediately.
    • correct a buglet in the CPU affinity code
    • psfcheck: Ignore "end" lines just like "END" lines
    • Added matching calls for device pool.
    • Added iterators into the threadpool construct for caller convenience
    • reorganized the header to facilitate adding new structs to the threadpool primitive.
    • Added a tasktile stack for use in handling errors and exceptions.
    • Revised the threading primitives to accept a new tile structure that describes the half-open interval of tasks, instead of individual integer parameters. Eliminated the single task work request routines in favor of using the variable size tile request version in all cases.
    • updated dependencies for lammpsplugin. add hash files, remove periodic table.
    • updated plugin for native lammps text mode trajectories. added a completely new parser for the data section that can now also handle many forms of "custom" dumps in addition for the simpler "atom" format. due to additional information in the plugin about the contents of the data (=ATOMS) section, optional data can be read in as soon as it is supported by VMD. support for molid, charge, and velocities is already in. more to come when VMD is ready for it.
    • added integer hashing functions from main VMD trunk with slight modifications, so that it can be included together with the string hash. will be used by improved LAMMPS plugin.
    • topolammps: add support for numbers in exponential representation that have a capital 'E' instead of a small 'e' to indicate the exponent. fixes reading the micelle data file.
    • Enable multiple planes per kernel call. Use heuristics based on timings for testcases on GT200 to determine the number of planes to process per kernel call.
    • removed commented out code in create_unique_paramlist()
    • Cranked version number
  • VMD 1.8.7 beta 1 (April 29, 2009)
    • Prevent machines without CUDA from creating an empty device pool.
    • Prevent MacOS X systems with no CUDA drivers/devices from catching the emulation device
    • updated list of authors
    • Added display of third line of authors that have made significant contributions to the code in the main VMD executable. (contributors of plugins aren't listed, as they get their credits elsewhere)
    • ILS: Check for errors from create_unique_paramlist(). Set upper bound on unique atom types to 200 so that our naive search never devolves into a quadratic algorithm. Allocate less memory for temp storage, perform fewer sqrtf()s. Typecast float* arrays to flint* so that we can perform equality comparison between ints rather than floats. Check validity of VDW parameter types. Left old version of create_unique_paramlist() commented out, just in case.
    • seqedit: removed debug line that had slipped through
    • Disabled 3dconnexion driver code for MacOS X builds until it has been completed and fully tested. Enabled CUDA by default for MacOS X 10.5.x builds.
    • MSM: Corrected non-portable use of "uint" type that was preventing compilation of the CUDA kernels on MacOS X 10.5.x.
    • Silence CUDA error/warning messages that can occur with mismatched driver versions, as this is apparently common with machines running linux distributions that install NVIDIA drivers (and thus libcuda.so) despite lacking an actual NVIDIA GPU.
    • Updated plugin build script for change of NCSA cobalt login node name
    • Changed AIX5 builds to tune for Power5 processors by default
    • changed version to be more verbosely a beta version, to prevent people from continuing to run the beta revs for months on end.
    • ILS CUDA: Better error reporting, does one plane, limit slabs to two planes
    • volmap compare: Histogram of error in map 1 relative to map 2
    • Added code to handle newer style LAMMPS native trajectory files based on suggestion from Lutz Maibaum. The change in LAMMPS will finally allow to detect the content of the trajectory file, so support for custom style trajectory files can be implemented and will follow soon. Fix incorrect variable declaration for write file descriptor.
    • enhanced error messages for psipred. Still not good... but better..
    • ILS: Moved sync threads to after early exit of entire thread block. Improved performance for exclusion optimizations by reducing shared memory use to within 4K, by decreasing number of conformers per loop from 8 to 5.
    • revved required Tachyon version number for new fog features.
    • ILS: Change exclusion logic for (commented out) warp vote. Add test for thread block early exit to monoatom kernel. Using distance-based exclusion testing is too slow (for slices). Is the exclusion distance too large (at least for xenon example)? Disabled distance-based exclusion check.
    • ILS: Changed logic from 'inclusion' back to 'exclusion'
    • fixed typo in fog rendering mode
    • Enable built-in "TachyonInternal" rendering for Windows builds, using multi-core enabled Tachyon.
    • Cause Tachyon renderings to use planar Z-depth based fog coordinates rather than the more physically correct radial fog, since this will much more closely match what users see in the VMD OpenGL display.
    • eliminated old VolMap.C file from Win32 builds
    • ILS CUDA: Enabled thread work compaction for exclusions. Fixed by adding missing sync threads.
    • Various updates to please GCC 4.1.x.
    • Rewrote color scale function to avoid undefined compiler behavior.
    • Added default case for eye position switch block to please GCC 4.1.x
    • ILS CUDA: Have early exit optimization for thread block enabled. Have thread work compaction in thread block disabled (gives wrong results).
    • Enabled thread pools for Win32 builds, since the condition variable implementation adapted from Tachyon has been working fine so far.
    • Added conditional compilation ifdefs for BUILD_STANDALONE to allow compilation of the ILS module outside of VMD. At present, there are many dependencies on other VMD data structures, but the intent is to gradually address these one at a time until it's runnable.
    • eliminated old dependency on config.h for DEF_VMDTMPDIR, as this was only really used as a method of last resort.
    • Added method for specifying optional probe symmetry.
    • Platform-specific temporary directories are now dealt with purely in the hard-coded utility routines, since it was already the case that the configured directory was only used as a method of last resort.
    • more work towards standalone builds
    • Added include of stdlib.h for standlone ILS builds that need RAND_MAX
    • Added CUDA kernels to find distance- and energy-based exclusions. Note that the performance is lower because the multiatom occupancy code doesn't yet take real advantage of having the exclusions.
    • removed bogus "color rgb" command listed built-in help, leftover from some incomplete cleanup from one of Jordi's previous revs.
    • ILS: Allow probes with more than 2 atoms.
    • removed some commented out lines
    • commented out a couple of debug statements that had slipped through.
    • Optimized monoatom kernel using techniques from multiatom kernel
    • Changed 3D bin offset index into "flattened" offset for 1D atom bin array. This reduces register counts of both kernels, aligns constant memory access to int, and removes 2 int multiplies from loop over atom bins.
    • Removed USE_FLAT_OFFSET macro and alternative code paths, all code paths use this optimization now. Startup code in multiatom kernel replaces as many int mults as possible with bit shifts and __umul24() calls. Fixed host code to process thick slabs whenever DO_ONE_PLANE macro is "off.'
    • Added a couple of comments about decreasing register use in multiatom kernel
    • ILS: Optimized multiatom CUDA kernel. Eliminated as many int multiplies inside loops as possible. Loop over fixed number of conformers and correctly sum results of padded list of conformers when calculating occupancy. Much better performance now.
    • gaussian/cpmdlogplugin: Step one in adapting gaussian and cpmdlog file plugins to the updated molfile QM infrastructure: adjusted internal data structures and implemented reader test routines. wavefunction parser still incomplete, but no more segfaults on the simple tests.
    • Removed old multiatom kernels. Renamed kernel cuda_occupancy_multiatom_final to cuda_occupancy_multiatom.
    • Fixed a loop range bug and made the memory clearing code run faster by reducing the maximum number of iterations taken in the allocator.
    • Changed CUDA device pool function names to be more palatable in reusable code.
    • ILS: removed ATOMTRANS code, calculate all interactions on untranslated positions
    • Enable clearing of all CUDA device memories (global and constant memory) on program start.
    • Optimized inner loops of multiatom_final() for better performance.
    • Added new source file with CUDA memory clearing code
    • Added a new CUDA utility routine to allocate and clear all accessible device memory (both constant memory and global memory) to aid in debugging.
    • multiseq: added in an error box if you choose to predict secondary structures and things haven't been set up. You are now notified of what is wrong.
    • ILS: Added cuda_occupancy_multiatom_final() CUDA kernel. This version has shared memory summing of conformer potentials. The loop unrolling of "_clean()" have been removed along with all of the related macros. This "final()" will be our new base version for optimizing the inner loops over the probe atoms.
    • ILS: Added shared memory accumulation of conformer potentials. Unfortunately, this is not working with loop unrolling, so it's disabled. Also renamed conditional macro USUM to more descriptive SHMEM_SUM_CONFORMERS.
    • multiseq: removed a debug line that had slipped in
    • topotools: added checks for supported atom styles and writing out atom types and residue names to lammps data files as comments, if available.
    • topotools: added a special case for adding bonds to an "all" selection resulting in massive speedups.
    • added some code that sets the text color in the boxes in the main MS window to hopefully be of a higher contrast than what we had before. Right now, the code is doing an ^, but I played around with adding and modding, but got the same values.
    • avoid parameter name collisions with AIX5 "hz" macro
    • stamp: removed completely bogus use of strcat in a function
    • Updated plugin build scripts for IBM AIX on the "Blue Print" test machine.
    • Beginning of beta builds. Still have a several nagging known buglets to fix, but we're getting close.
    • timeline: Version bump to 2.0
    • Added code for use of pinned memory (but disabled currently) for orbital kernels
    • multiseq: fixed a couple of slider bars that were allowing 0% to be returned, which didn't make any sense
    • Fixed indentation for measure symmetry.
    • multiseq: added in some error checking for the user when they import data. Now tells them if they chose file with files listed, and if they choose BLAST without a database being given.
    • Added an explicit synchronization at the end of each work block so that asynchronous kernel launches and I/O's don't allow one GPU to grab more work than it should resulting in load imbalance.
    • Optimized the orbital kernel memory copies to reduce overhead
    • Changed the CUDA molecular orbital kernels to use the blocked work distribution mechanism for improved performance.
    • Added blocked work request routines to the on-demand thread launch mechanism as well, to ease migration between use of the thread pool and use of on-demand spawned threads.
    • Eliminated outdated Tcl command options. Added arguments to specify probe completely without atom selections using just Tcl lists.
    • Eliminate unnecessary dependencies in pbc measure routines
    • Peel away unnecessary dependencies in timestep class
    • added documentation for "order" flag to "measure fit".
    • Started working on standalone build of top level ILS driver routines
    • Improve performance in multiatom by unrolling inner loops over probe atoms. For now, restrict CUDA grid from slabs to slices.
    • Fix memory leak when using "measure fit" with "order" as reported by chris macdermaid.
    • ILS: Removed user specified selection and all its dependencies.
    • Started making ILS independent of AtomSel.
    • volmap: Fixed bug calculating "meanrange". Report elements producing max difference
    • gamessplugin: Protected printing of atomic numbers and other info with debugging macro
    • silence debugging output in GAMESS plugin by default
    • silence various debugging messages in the QM code, except when the macro DEBUGGING is defined
    • ILS: removed various debugging code that's been turned off for a while.
    • Removed more unnecessary dependencies in ILS code
    • Started trimming unnecessary dependencies out of the ILS code to make it easier to form a standalone app from the same source code.
    • bugfixes and some cleanup.
    • Added shared iterator block request routines for use by CUDA codes that may want multiple work units at a time for improved overlapping of communication and computation, and for use in scheduling work across both CPUs and GPUs, or GPUs with a large variation in the SM count where different work scheduling chunk sizes are appropriate.
    • corrected shared iterator increment logic
    • Rewrote shared iterator routines in prep for caller-requested increment (e.g. block size for work distribution).
    • Changed CUDA device pool initialization code to limit max number of device worker threads to the maximum CPU core count we're allowed to use.
    • Started redesigning the dynamic load balancing routines so that they can be used to schedule work not only round-robin, but with blocks, and to allow the worker threads to request an efficient block size based on the attributes of their associated CPU and/or GPU accelerator.
    • ILS: Removed outdated argument to the volmap ils command.
    • ILS: Use the molfile_plugin interface to write the DX file instead of Jordi's copy of the dx writer in VolmapCreate.
    • Replaced SAFESTRNCPY() macro in write_volumetric(). It was designed to work with two statically allocated arrays but SAFESTRNCPY fails here because sizeof(name) is just the size of the pointer and not the size of the allocated memory.
    • ILS: debugging code, clean version of multiatom, calculate cuda expf()
    • ILS: fixed max_energy parameter to compute_allatoms(), plus some disabled printfs
    • ILS: Removed unnecessary -margin argument.
    • ILS: Get rid of too much debuggihg output. Change Max. energy default to 87 which is the machine limit on the GPU. Simplify the class interface.
    • ILS: Fixed code for combining frames and for downsampling the final map. Added safety checck, preventig to run ILS with a num_conf larger than 1 for monoatomic probes.
    • cleaned up some error messages to make them more obvious
    • cleaned up some error messages to make them more obvious, and removed a puts that had slipped through
    • fixed a bug that was occuring if you did a select, shift-select, control-select, control-shift-select
    • had an proc call that wasn't doing anything. Got rid of it
    • decreased DEFAULT_EXCL_DIST for CPU multi-atom to agree with all atom check
    • removed VolMap.[Ch] from the build since they are no longer used
    • Fixed noop in volmap compare.
    • changed conditional expression to please GCC 4.3.x
    • Added parens around conditional evaluations to please GCC 4.3.x
    • multitext: updated docs to show example calls
    • removed the old "textview" plugin from the build/distribution since it has been superceded by the new "multitext" plugin.
    • Updated all of the package version numbers for the new MultiSeq plugins.
    • removed outdated/unneeded MultiSeq plugins from the top level Makefile: colorbar, plotter, and simpleedit
    • ILS: Reorganized constant memory so that everything is stored in first 8K page except for arbitrarily long array of conformers that follow. Load parts of conformers array from constant memory into shared memory, based on NCONFPERLOOP (looks like optimal value is 8). Enabled code path in which first warp cooperatively performs the loading, making sure that we no longer access first 8K constant memory block as we load the conformers. Performance is only a mildly better, not approaching the factor of 2 improvement that earlier tests showed might be possible.
    • import new version of MultiSeq code from ZLS and all attendant plugins.
    • psfgen, autoimd: Set CVS to ignore files created during latex compilation
    • Cranked version
  • VMD 1.8.7a63 (March 31, 2009)
    • Updated the MSVC6 build settings to enable multithreading now that the Win32 threading primitives have caught up with the POSIX threads implementation.
    • Fixed a bug in alchemical system handling in the maeff plugin.
    • Molecule writes should set molfile_timestep::physical_time
    • ILS: corrected missing conditional compilation logic for CUDA vs. non-CUDA builds.
    • ILS: Migrated the function prototype for vmd_cuda_evaluate_occupancy_map() to the CUDAKernels.h header with all of the others.
    • ILS: Test use of constant memory. (Test is disabled.) Shows that performance significantly impacted by not restricting constant memory reads to a single 8K page.
    • ILS: Added to multiatom inner loop to accumulate energies for 8 conformers to shared memory, reducing number of bin neighborhood loads by a factor of 1/8. Unfortunately this does not improve performance for "gpu_small" test case, and slows performance if this number of conformers is increased or decreased.
    • ILS: Sync CUDA API calls to gaurantee timing values for kernel execution are correct.
    • switched plugin builds from asuncion to sundemo until asuncion is reinstalled
    • ILS: Added CUDA kernel for multi-atom case
    • ILS: CUDA on single GPU is working for ILS monoatom case. Fixed bug calculating num_unique_types. Fixed several bugs in original CUDA routine.
    • Restrain secondary structure of selction 'extended_beta' instead of 'sheet' to prevent restraining beta bridges.
    • namdgui bug fix, wouldn't run simulations due to an apparently missing "variable fixedatoms" line while writing temporary files... this line has been added
    • misc cleanup in Win32 condition variable implementation
    • Added condition variable routines for pthreads and Win32 builds, and rewrote the run_barrier primitive to use them. The Win32 condition variable implementation is based off of one of three basic approaches. The best approach is to use the new native condition variable primitves in MS WS2008. The other two implementations are my own variation of Doug Schmidt's approach as described in his white paper. One of these uses mutexes as in Schmidt's paper. The other implementation instead uses the Win32 Interlocked[Inc/Dec]rement() APIs for (hopefully) better performance and scalability. Neither Win32 implementation is fully tested yet, but this is a start.
    • Changed bin offsets array from int to char to reduce memory use
    • Added Win32 code to delete the critical section
    • Enabled multithreaded Windows builds for MSVS2005.
    • Renamed the atom parser WORD, INT, FLOAT, and ERROR macros/enums to avoid conflicts with Windows system headers
    • Added mutexes for Win32 thread-enabled builds
    • Protected CUDA device barrier code so it's only used in a CUDA build and not in non-CUDA builds.
    • renamed "rad1" and "rad2" to avoid namespace conflict with Windows headers needed for multithreading stuff.
    • renamed parameter "rad2" to avoid namespace conflict with Windows headers needed for multithreading stuff.
    • ILS: remove atom translation in the CUDA version for now
    • ILS: Add CUDAVolMapCreateILS.cu to CUDA enabled builds
    • Cranked version
  • VMD 1.8.7a62 (March 18, 2009)
    • Added all of the orbital classes to the MSVC 6.x builds and enabled the orbital representation in the GUI.
    • Fixed missing include for QMTimestep.h which was upsetting MSVC 6.x
    • Added a workaround for lameness in the Windows version of Tcl 8.5.x where it is unable to find it's library directory.
    • Enabled the orbital representation in the MSVS2005 builds
    • Added and enabled the molecular orbital code to the MSVS2005 project
    • Commented out wavefunction printing since MS Windows lacks both the log2f() and log2() math functions.
    • improved floating point consistency in the CPU orbital code
    • Changes to Tcl 8.5.x require (on MS Windows at least) that console output be done using the new Tcl_WriteChars() routines, and not with Tcl_Write() as had been done in the past. Calling Tcl_Write() with character strings in the new 8.5.x versions for Windows results in gibberish output otherwise.
    • Added carbohydrate related source files, and enabled various of the option build flags that hadn't been turned on yet in MSVS2005.
    • Updated MSVS2005 project with recently added source files
    • volmap: Corrected missing include of Inform.h
    • Corrected missing ifdefs for carbohydrate analysis code
    • Added CUDA device pool code to the Win32 builds
    • Only destroy the CUDA device thread pool in threaded builds
    • corrected inconsistent use of floating point types
    • Silence debugging output from CUDA device thread pool initialization. Only initialize the thread pool when building a threaded version.
    • Added support for the python version of Axel's "mol new atoms" structure building feature.
    • Added a linux sharedlib build target
    • corrected a comment
    • Applied AK's fix for the csh startup script invocation of the 'rlwrap' tool.
    • AK's bugfixes/cleanup in topotools and support for reading velocities from lammps data.
    • Removed all of Jordi's original implementation.
    • Translate atoms by origin when hashing into bins.
    • Disabled the "workaround" for the supposedly wrong cell dimensions. Some cleanup.
    • ILS: Use "max_energy" to set energy threshold. The exclusion distance given by "clashcutoff" is too large!
    • ILS: Removed original implementation, now superseded by ComputeOccupancyMap. Updated atom_bin_stats() and write_bin_histogram_map().
    • ILS: Cleaned up the rest of ComputeOccupancyMap. Correctness has been validated and the code path is enabled.
    • ILS: Improved profiling of new code for computing a frame. Cleaning the new ComputeOccupancyMap codes.
    • ILS: Fix grid cell spacing and offset problem.
    • ILS: Fixed bug in averaging occupancy for multi-atom conformers. Patched all atom algorithm to work for the mono-atom case. Reduced default exclusion distance.
    • ILS: driver code to invoke slow quadratic complexity algorithm to check correctness
    • ILS: finished computation routines for ComputeOccupancyMap
    • Allow a new molecule to be constructed containing N "empty" atoms. This makes it much easier to build molecules from scratch (avoiding reading dummy files or the like) in structure building plugins. This adds a new "mol new atoms N" command that will create a molecule containing N atoms, but with no data set for the atoms initially.
    • clamp PDB residue name length output to the fixed field width.
    • ILS: compute_allatoms() quadratic complexity algorithm for checking correctness
    • Don't automatically recalc secondary structure when the molecule is reanalyzed, instead, merely invalidate it and let the rest of the code act appropriately.
    • Changed the bond search code so that in the case when we're asked to use the atom radii to compute the distance cutoff, we use an effective minimum radius of 0.833 A, which leaves the bond search code in a comfortable parameter range, otherwise we could get fed atom radii of 0.0 which would cause hanging behavior in the case of a molecule with explicit radii set to zero.
    • change hydrogen atom type logic to deal with atoms with NULL names.
    • AK's topotools typo fix.
    • Changed the molecular orbital kernel to use the VMD CUDA device pool rather than spawning new child threads for each device on every invocation.
    • Added code to manage pools of host threads that are already attached to GPUs and can be woken from sleep and launched with much lower latency than newly created threads that aren't yet attached to a GPU.
    • Added support for both blocking and non-blocking variants of the threadpool launch call and a matching wait call.
    • Save the device index with the property list
    • made threadpool preprocessor checks deal with Win32 builds that may have threads enabled, but where we currently lack an implementation of the run barrier code.
    • minimally functional thread pool
    • added find energy exclusions to ComputeOccupancyMap
    • make threadpool launch routines in non-threaded builds, so we can use a single code path in the calling code.
    • make new threadpool routine compile on non-threaded builds
    • tweak handling of thread parms in the run barrier construct
    • Applied Axel's updates for topotools
    • AK's patch: another round of bashism removal in bourne shell launch script.
    • ILS: added find distance exclusions to ComputeOccupancyMap
    • partial thread pool implementation
    • Added draft version of a run barrier for use in implementing a thread pool construct. Misc cleanup elsewhere.
    • ILS: finished setup for ComputeOccupancyMap
    • ILS: code (commented out) in compute_frame that will use ComputeOccupancyMap
    • ILS: algorithm to choose bin size based on map spacings
    • ILS: bundling occupancy map computation data as a struct - here are the definitions
    • ILS: Remove some debugging output. Add routine to print the binning histogram to a dx file. Fix unwanted behaviour when selecting atoms for ils.
    • Differentiated the process-shared version of the symmetric counting barrier from the process-local version, since we may want to use these as a component of a thread pool abstraction, the difference in performance is substantial.
    • ILS: fix inconsistent preprocessor defines for static routine for histogramming the atom bins.
    • changed the FreeVR code to use its own env variable for hard-setting the number of draw processes (for debugging)
    • corrected a bug in the thread barrier destroy call for the version used in VMD
    • ILS: for debugging: print out before and after min/max values
    • ILS: changed floor to floorf.
    • Removed the old code supporting Unix International threads, since we've been building solely with POSIX threads now for several years. If we want it back, we can just pick it up from CVS or by re-importing that from Tachyon again.
    • moved bin histogram diagnostics into separate function
    • Fixed bug in binning code. (origin[0] was used for all dimensions)
    • applied Axel's fix correcting a typo in the Bourne shell version of the startup script.
    • eliminated inconsistent use of floating point types for constant periodic table entries.
    • Applied Michelle's ring coloring changes
    • more polygon winding order corrections for the Twister representation
    • corrected polygon winding order for main body of Twister ribbons
    • another update to the cremer-pople ring coloring scheme
    • Added a lerp-based version of the color gradient logic for ring pucker.
    • ILS: Handle extra atoms with an array, like an additional extended bin. Have the exclusion and computation routines process extra atoms. Early exit from inner loops on distance-based exclusion check. Clamp occupancy to zero for excluded lattice points.
    • altered the pucker coloring scale per Michelle's changes
    • Remove limits on ring sizes for pucker calculations since the Cremer-Pople scheme works for rings of arbitrary size.
    • Added helper routines to check/eat Fortran unformatted I/O record markers
    • computation routines skip over excluded lattice points
    • ILS: find energy-based exclusions
    • Cranked version
  • VMD 1.8.7a61 (March 10, 2009)
    • minor fixes for changeover to pucker based solely on cremer-pople
    • Applied Michelle's change to use the Cremer-Pople puckering algorithm in place of Hill-Reilly in all cases. The methods are still called hill_reilly_ring_pucker and hill_reilly_ring_color, but that can be fixed later.
    • Cranked version
  • VMD 1.8.7a60 (March 10, 2009)
    • Updated the ring puckering calculations with Michelle's fix, which now uses the Cremer-Pople technique for 5-member rings, but uses Hill-Reilly for 6-member rings. The Hill-Reilly algorithm yields a different pucker value depending on which atom it starts with, and since we don't want to have to deal with that problem we will use the Cremer-Pople algorithm since it's invariant with respect to the starting atom selected.
    • Eliminated extra line feeds from the wavefront obj output for paranoia's sake
    • eliminated leading spaces for Wavefront OBJ files since a user reported trouble importing the file into Blender.
    • ILS: find distance-based exclusions
    • Updated rendering mode lists in the docs
    • Removed the old Sun-specific "AlphaBlend" rendering mode that was dependent on the Sun global alpha OpenGL extension. Our GLSL code now does the same thing, but works with any modern GPU, so there's no need to carry around this hardware-specific code any longer.
    • Removed the now-unused OpenGL extension handling code that was specifically tied to the Sun XVR-1000/XVR-4000 graphics accelerator hardware.
    • ILS: Allow switching between old code that stores intermediate results as pmf instead of occupancies. Switch old code on by setting env(VMDOLDILSUSEPMF).
    • ILS: Use bin index offsets to tighten bin neighborhood for calculation.
    • ILS: No longer need list of conformers passed to atom bin create.
    • ILS: Remove code to determine probe radius and extend cutoff.
    • ILS: Generate binoffset list, use provided extended cutoff.
    • ILS: Pass extended cutoff that takes probe radius into account into atom binning function.
    • ILS: Eliminated inconsistent use of floating point types
    • ILS: Added destroy routine to free memory from creating atom bins. Renamed routines to create and destroy atom bins. Changed function parameters to include bin offset list.
    • ILS: Add code path for computing monoatom occupancy.
    • ILS: Added + removed comments. Clamp subres greater than or equal to 1
    • ILS: Added monoatomic occupancy calculation. Free temp buffer storage for calculating conformer energies.
    • volmap: Avoid nan for identical maps in volmap compare.
    • Added function prototype for monoatomic occupancy calculation.
    • Eliminated inconsistent use of floating point types
    • Add support for "all" as a valid dataset flag for the "mol dataflag" command
    • Added "mol dataflag [set | unset] flagname" command to allow users/scripts to override which fields are output when a molecule is written to a new file. This makes it easy for one to cause the autogenerated bonds to be stored, or alternately to prevent fields (e.g. beta, occupancy, etc) from being stored. This is particularly useful when working with very large structures (e.g. 100M atom NSF benchmark case for Blue Waters), since one can significantly reduce file sizes by limiting what fields are output.
    • topotools: Added topolammps.tcl to CVS
    • Fixed compute_ils() to correctly combine VDW params. Extended compute_ils() to calculate energies averaged over conformers.
    • fixed ILS binning to account for radius of conformers
    • Major cleanup of TclMolInfo
    • Added a method to unset dataset flags so that users can prevent certain fields from being written to disk when a molecule is saved. Unsetting the flag essentially marks them as unimportant.
    • Cranked version
  • VMD 1.8.7a59 (March 5, 2009)
    • Continued revisions to AMBER parm7 plugin to deal with minor variations in file contents vs. what the main AMBER tools generate.
    • parm7plugin: Eliminated tabs and misc formatting cleanup in prep for some more bug fix work
    • More topotools improvements from Axel. Bugfixes and new features (can now read and write some LAMMPS topologies). The LAMMPS support is incomplete and probably will never be perfect due to incompatible atom kinds (granular, dipole, peridynamics) Its getting better all the time. Now it works for Axel's minimal requirements (interchange between lammps and hoomd).
    • Add probe_vdw to the ILS parameter list.
    • Pass # probe atoms and # conformers into ILS function.
    • Fixed rotamer generation.
    • Finished basic compute_ils routine
    • Fix bug in ILS probe coordinate setup.
    • Passing array of conformers (rotamers) into the new ILS function.
    • Cranked version
  • VMD 1.8.7a58 (March 5, 2009)
    • Added new "withinbonds" atom selection keyword
    • Updated MSVC6 project with newly added multilevel summation source files
    • volmap ILS: Cleaned up the initialization process.
    • Eliminated compiler warnings from floating point type conversions
    • Fixed the "ringsize" and "maxringsize" atom selections so that they will only accept integer values.
    • Applied Michelle's patch updating the Hill-Reilly ring puckering calculation for 5-membered rings.
    • Corrected the vdwtype array.
    • Update angle/dihedral/improper data flags when they have been written to by the user, so that they get saved when a molecule is written out.
    • Fixed ILS binning function to return amount of bin padding. Fixed parameters for compute function.
    • Improved interface to the new ILS functions.
    • Fixed ILS binning, pad lattice dimensions by cutoff
    • Included vdwparams into compute_ils() stub.
    • Moved the ILS driving function towards the end, just before the new kernels.
    • Add stub for ILS calculation function using the binned atoms.
    • Eliminated cached molecule pointer in CoorData and MolFilePlugin by explicitly passing in the molecule pointer when the next()/skip() methods are called in VMDApp/CoorData/MolFilePlugin.
    • More FreeVR configuration fixes
    • Fixed FreeVR linkage flags for Linux builds
    • topotools: AK's patch to make the topo command print a proper help message in more cases (e.g. no molecule loaded)
    • Applied Justin's patch adding a new "NOSTATICPLUGINS" compile time configuration option, to disable static linkage of molfile plugins.
    • cranked version
  • VMD 1.8.7a57 (March 3, 2009)
    • AK's update for hoomdplugin to comply to recent changes in hoomd format. newly added attributes are supported now. hoomd expects all atoms to be contained in the box centered about the origin and then use the image section for "unwrapped" coordinates. this is now implmented. for systems without box dimensions, we stick with unwrapped coordinates.
    • Applied Axel's patch to fix a couple of typos in the topotools plugin.
    • Accept rings of size 5 or 6 for the "pucker" selection. We may wish to allow even larger rings, but this matches our carbohydrate coloring code which is well tested for rings of these sizes.
    • Fixed some non-portable constructs in the ring puckering analysis code
    • Cleanup and compartmentalization of ILS. Added volmap compare command.
    • Made gridsize() const.
    • Added a "pucker" atom selection keyword that uses the same sum of the Hill-Reilly pucker parameters used in the rendering code. One caveat with the current code is that it will assign only one pucker value to a given atom, the value corresponding to the final ring processed. If an atom is a member of multiple rings, it will return the final value. We may need to use a completely different approach to make this query more usable given the multiplicity of rings an atom may be a member of.
    • volmap: Added function to ste the probe parameters, which eliminates a bunch of public variables. Also allow to specify the probe in form of a selection.
    • dtrplugin: cranked minor version subsequent to applying Justin's patch
    • dtrplugin: Applied DESRES patch for dtrplugin to support certain Desmond 2.0 trajectories
    • Revised the CUDA device detection and startup info messages to detect systems that have an out-of-date or otherwise incompatible device driver, and differentiate that from the case where no devices exist, or only an emulation device is detected.
    • timeline: More improvements for file I/O. GUI improvements for larger data sets. Right-click marquee zoom-in (click zoom out) is working acceptably.
    • Updated docs for new molinfo commands (bondsrecalc, angle/dihedral/improper/etc)
    • Added Axel's patch completing basic functionality for topotools. sort/unique added. sort uses tcl internal lsort (O(N log(n)).
    • cranked version
  • VMD 1.8.7a56 (February 27, 2009)
    • Applied Michelle's patch fixing the Hill-Reilly pucker sum calculation
    • volmap: Fixed ILS memory leak.
    • added topotools docs to CVS
    • molefacture: Make the FEP interface better organized and more usable. Add documentation for the FEP gui
    • Applied Justin's patch to correct maeffplugins's handling of NULL bond orders.
    • rmsfit.c: Fix bug that was causing weights to get squared in the correlation matrix while the translation vector uses unsquared weights, resulting in a bad fit
    • continued volmp ILS cleanup
    • misc cleanup and completion of infrastructure to allow standalone runs
    • Removed old d_num_shell_per_atom and d_atom_basis arrays which are no longer used by the tiled shared memory CUDA orbital algorithm
    • Added ifdefs to allow standalone compilation of the CUDA orbital kernel
    • Reduced external dependencies in CUDA orbital kernel to make it easier to supply standalone benchmark code to NVIDIA
    • cranked version
  • VMD 1.8.7a55 (February 25, 2009)
    • Applied Simon's patches to fix the pucker sum for Hill-Reilly and a fix for ring orientation computations adding recognition of "C_1" to the list of atoms it looks for.
    • volmap: Deleted long-range electrostatics since it never really worked and we will replace it by multilevel summation anyway.
    • Added parser implementation for new 'ringsize' and 'maxringsize' selection keywords. May still want to alter the syntax somewhat.
    • Improved the implementation of the "maxringsize" and "ringsize" selections. Need to see if we can do size ranges in an efficient way by adding some new variant of this selection syntax.
    • basemolecule: silence ring finding debugging output by default
    • Added crude first cut implementation of "ringsize X from FOO" selection.
    • volmap: Added function to retrieve gridsize to VolumetricData. Cleanup and compartmentalization of ILS VI
    • Updated build script for recent changes to the compile farm
    • cranked version
  • VMD 1.8.7a54 (February 24, 2009)
    • Enable the multilevel summation code, but only used when VMDUSEMSMPOT environment is defined, to enable testing whlie we decide on new Tcl bindings for the MSM code.
    • Added the multilevel summation code to the VMD build.
    • Added multilevel summation code to VMD CVS tree.
    • volmapcreateils: Cleanup and compartmentalization V
    • vtfplugin: Added another macro to enable zlib features in vtfplugin per Axel's patch
    • vaspchgcarplugin: Updated thread safety flag, cranked version
    • Eliminated angle duplicate checking as it had O(N^2) behavior in the previous implementation. We'll want a single-pass sorting based scheme to eliminate duplicates, but that can come later.
    • autoionizegui: Made the segname used by ::Autoi::sod2pot user defined Removed some memory leaks due to undeleted atom selections Replaced 'mol load' with 'mol new/add' Replaced 'exec cp' with 'file copy' Added comments about code that should be moved to autoionize.tcl
    • volmap: Cleanup and compartmentalization IV
    • Updated HOOMD plugin with Axel's updates for angle type info etc.
    • cranked version
  • VMD 1.8.7a53 (February 23, 2009)
    • Updated Axel's topotools plugin per reorganization of the bondtype/angletype functionality in VMD.
    • cranked plugin ABI version now that things are working with the updated angles APIs etc.
    • cranked LAMMPS plugin version since Axel's patch added limited write support.
    • Added Axel's latest patch adding vmdcon support to LAMMPS plugin
    • Continued cleanup of bondtypes, angletypes, and associated interface routines.
    • Updated to newly added angle types/strings to molfile plugin APIs
    • added angle types/strings to molfile plugin APIs
    • Fixed some orbital sorting code that is still commented out.
    • Cleanup and compartmentalization I
    • Added angle type storage akin to the recently added bond type storage, along with matching updates for the molfile plugin APIs. Several more steps upcoming...
    • gamessplugin: Fixed an improper use of free().
    • Second half of multi-wavefunction bugfixes. Changed occupancy type from int to float (bugfix)
    • A few bugfixes for the new multiple wavefunction support.
    • Added prototype of MSM-based electrostatic potential code to the volmap coulomb command. Likely the best way to do this will be to add a parameter to allow the user to specify the computation method. We'll also need to add parameters to specify periodic/nonperiodic systems, etc.
    • Added partial support for multiple wavefunctions per timestep. Allow loading basis sets that don't have data defined for every atom in the system but rather for every atom type.
    • gamessplugin: Fixed C++isms.
    • Fixed typo (an additional comma) that caused a warning.
    • Updated to Axel's newest HOOMD plugin
    • Added Axel's topotools plugin
    • Added support for multiple wavefunctions.
    • eliminate warnings on Solaris
    • Added basissetplugin for reading basis sets into existing molecules.
    • Added support for multiple wavefunctions. Added support for basis sets with less atoms than atoms in molecules (e.g. in symmetric molecules.)
    • Updated psfgen plugin I/O for the new read_bonds() and write_bonds() APIs
    • Added basissetplugin for reading basis sets into existing molecules.
    • Updated plugin ABI version number to 15
    • Updated plugins for the new read_bonds()/write_bonds() API with bondtype info.
    • Added bondtype info to the molfile plugin API for ABI version 15 or greater
    • fix typo in macro test
    • Added data storage, logic, and new text commands for manipulating bond type information akin to the way we've previously stored/manipulated bond orders. This will allow VMD to be used to build and translate topology files for HOOMD, LAMMPS, and other codes that cannot use PSF files. This adds new "getbondtypes" and "setbondtypes" subcommands for atom selections, and new moinfo "bondsretype" subcommand. We'll likely follow this scheme for adding similar commands to query/manipulate angles/dihedrals/impropers/cterms, etc.
    • Added dynamically allocated integer blocks to be used akin to how the existing floating point extra data blocks have been stored.
    • Clear device property arrays to zero at initialization just for paranoia's sake.
    • Initialize the kernel timeout flag to zero when using CUDA revs earlier than 2.1.
    • renamed the per-atom "extra" field to "extraflt" to differentiate from a soon-to-be-added collection of optional per-atom integer fields
    • Added code to detect and report which GPUs have kernel execution watchdog timers active. VMD will try to avoid using these for long running calculations.
    • check CUDA runtime API version macro rather than driver API version
    • Converted the CPU Coulomb potential kernel to use the new threadlaunch apis already in use for the CUDA GPU version.
    • Converted the CPU orbital kernel to use the new threadlaunch apis already in use for the CUDA GPU version.
    • Converted the orbital kernel to use the new threadlaunch apis already in use for the coulomb potential kernel. Getting comparable performance for the orbital kernel required adding a special 1-thread fast path to the threading routines as there's a significant amount of overhead associated with binding a CUDA device to a newly created thread with the current version of CUDA, enough to reduce performance by up to 30% in the case of the 8800GTX.
    • Added a performance optimization for the case of only running a single thread. This allows the abstraction to be used for things like the CUDA orbital kernel where the whole calculation takes less than a second and launching a new child thread may not be strictly necessary if there's only a single GPU device. We'll need to implement a GPU thread pool to avoid thread launch overhead in the longer term.
    • Updated the CUDA potential kernel to deal with fatal errors occuring after GPU worker threads have already been launched.
    • Added routines to set/query fatal errors on shared iterators so that worker threads can cause cancellation of an entire calculation if an unrecoverable error occurs during the calculation. This can be used to cause CPU fallback in cases where a GPU starts failing, runs out of memory, or something similar at a point too deep within a calculation to be able to recover. In the case of a purely CPU-based code this can be used to handle things like fatal memory allocation errors occuring within worker threads after a computation has already launched.
    • Added thread safe shared flag functions and used them to implement a global error feature for the threadlaunch routines as a means of handling GPU kernel execution errors since their host threads have already been launched.
    • Replaced the hand-coded thread launching code in the top level CUDA Coulomb potential routines with the new encapsulted thread launcher, using the shared iterator for dynamic work distribution.
    • Added a completely encapsulated mechanism for launching a group of threads with a pointer to client data, and a work distribution iterator configuration. Three helper routines can be called within a worker thread to query their ID, and get the next work unit from the iterator. This will be easy to adapt to a more sophisticated work distribution scheme at a later time.
    • Fix bugs in new volmap command parser. The command parser was completely ignoring the -minmax flags due to untested changes in the structure of the parsing logic.
    • fix bad string logic. All of this VolMap command parsing code is going to be rewritten, it's absolutely hideous.
    • Rewrote the CUDA Coulomb potential kernel to use a shared iterator rather than a simple static for loop-based round-robin slice scheduler. The shared iterator still can't deal with things like exceptions, but it will dynamically load balance among a pool of wildly dissimilar GPUs with great effectiveness.
    • Added a thread-safe shared iterator for use in dynamically load balancing multiple GPUs of wildly different performance levels. For very simple workloads where it's all-or-nothing, one can use this in place of a hard-coded for loop based round-robin static decomposition with just a few lines of source changes. The iterator has an adjustable step size so you can count up or down in any step size. This is not a substitute for a more sophsticated data structure like a double-ended queue, as there's no way for a worker thread that encounters an exception/error of some kind to "put back" an iteration that it has consumed, so such an event would be fatal to codes that use this simple iterator. This iterator makes the most sense in cases where the whole calculation is likely to be over very quickly.
    • molefacture: Fix a variety of bugs pointed out by Chris Chipot
    • molefacture: Fix the fragment documentation to properly describe SHORTNAME
    • molefacture: Fix the fragment names of a couple new base fragments
    • cranked version
  • VMD 1.8.7a52 (February 18, 2009)
    • molefacture: Make editing atom properties more intuitive
    • molefacture: Fix the thiophene and furan fragments
    • Updated linux targets using Intel C/C++ to enable CUDA support by default, and added a 64-bit target as well.
    • Updated the Intel C/C++ compilation support in the configure script. Needs more testing yet, but the new builds can mix Intel C/C++ and CUDA in the same binary with success.
    • Applied Chuck Rendleman's patch to fix uninitialized variable warnings from GCC 4.2.x
    • molefacture: Add script for generating custom fragments
    • molefacture: Add documentation on custom fragments
    • molefacture: Add documentation of some new features
    • tweaks to distrib script
    • Atom selections are now properly applied to bonds, angles, dihedrals, impropers, and cross-terms when writing to file formats that support them. Only bonds, angles, dihedrals, impropers, and cross-terms that have no missing atoms are remapped and emitted to the output file.
    • warn the user if we aren't going to write angles/dihedrals/impropers/cterms for a selection
    • Made the CUDA orbital kernel source much more printable for meeting discussions.
    • Updated the HOOMD plugin with Axel's latest code.
    • Removed the conditionally compiled approximation variants of the GPU orbital kernels, since they were only needed for performance tests for the paper. If we use an approximation-based kernel in the future, we'll have a different formulation that's oriented towards a cutoff-based kernel for some formulation of linear-time algorithm.
    • Applied Justin's update to dtrplugin to enable correct behavior of the "clickme.dtr" method of loading a dtr frameset, since they are actually organized as a directory.
    • eliminated unnecessary 'extern "C"' blocks on the VMDPLUGIN_init/register/fini routines, as they should be fully prototypes in vmdplugin.h already. If the prototype in vmdplugin.h is insufficient for a particular compiler or in some build environment, we'll just revise the vmdplugin.h prototypes to set VMDPLUGIN_API the same way VMDPLUGIN_EXTERN is set currently.
    • Added test code to test the concept of JIT code generation for CUDA molecular orbital calculations. The current test case is only setup to generate code for the C60 test case (one atom type), but it should be trivial to extend this for an arbitrarily complex system.
    • Updated CUDA code to work correctly if compiled with CUDA 2.0 but run on a system with a bleeding edge driver, avoiding errors on a multiplicity of calls to cudaSetDevice() in certain cases.
    • cranked version
  • VMD 1.8.7a51 (February 10, 2009)
    • multiplot: integrated Nadja Lederer's undraw subcommand, updated documentation and version number.
    • Added escapes for wildcards in the 'find' expressions for the 'clean' target of the main plugin tree makefile.
    • Eliminated a DESRES workaround for the older VMD plugin header that was setting the declspecs incorrectly for statically compiled dtrplugin/maeffplugin builds on Win32.
    • Changed the parm7 plugin to accept files that have mixed case in the format specifiers for each flags block.
    • Made parm7 reader more flexible based on feedback from Ross Walker.
    • Fixed inadequate internal buffer size in parm7 plugin. This was inherited from older code, and is the reason that Ross Walker had been encountering problems when loading files from deeply nested paths.
    • Updated make_distrib to copy the completion.dat file for rlwrap
    • Updated make_distrib for the changes to support both vmd.csh and vmd.sh startup scripts in the distribution.
    • Added tests and actions to install either the vmd.csh or vmd.sh startup script depending on what command shells the host system has available. The current default is still to use the c shell based startup script, and install the Bourne shell script only if the /bin/csh interpreter is missing. Once the Bourne shell scripte reaches more maturity and has been tested thoroughly, we may consider using it by default since it's typically available even on very limited linux distributions.
    • renamed 'vmd' startup script to 'vmd.csh' to differtiate now that we have versions for both bourne shell and c shell.
    • added Axel's bourne shell version of the VMD startup script for use on deficient linux distributions.
    • Added the rlwrap completion.dat file to the installer
    • Updated the startup script with Axel's latest patch for 'rlwrap' usage.
    • Added a memset() call to the texture map allocation to force initialization of all border voxels/pixels to zero, yielding cleaner valgrind runs and eliminating speckles when viewing un-clamped texture maps (since the code does not presume the ability to display NPOT textures).
    • disable generation of Tachyon embedded texture maps until we make further changes to the display commands and texture storage to make it possible to completely eliminate padding bytes from the generated scene files.
    • Added incomplete but partially functional implementation of 3-D texture export for the Tachyon renderer. This code still needs work as it only works for orthogonal volume data basis vectors and has some scaling issues, but it has been tested and now gives correct renderings in a subset of cases. The code is still disabled by default, but will be enabled when the remaining bugs are fixed.
    • Matrix4: Added a first implementation of a transform method designed to operate on the VMD texture plane equation coefficients, used in exporting 3-D textures to external renderers like Tachyon. This will likely need rewriting as the display command is revised and improved and we learn more about interchanging the plane equations or volume data basis vectors and scaling coefficients between VMD and various external renderers.
    • Added missing macro to map snprintf() to _snprintf() on Windows builds of psfgen when plugin-I/O is enabled.
    • Updated all instances of the cudaSetDevice() calls in VMD to recover if they get a cudaErrorSetOnActiveProcess return value. If this occurs, they attempt to soldier on using whatever GPU the main process is already attached to. Older revs of CUDA didn't yield an error and merely treated it as a no-op of sorts. Starting with CUDA 2.1, this yields and error which caused the safety checks in the various CUDA kernels in VMD to abort entirely, even though this is not a critical error. It's mainly an issue when building without the PTHREADS option set, since all of the CUDA kernels launch from the main thread in that case.
    • Allow compilation of non-QM plugins for the old plugin ABIs (e.g. VMD 1.8.6)
    • Eliminate dllimport/dllexport declarations for static plugin builds on Windows.
    • Switch to CUDA 2.1 for current builds
    • cranked version
  • VMD 1.8.7a50 (February 6, 2009)
    • Free the name string returned by the XGetWMName() query used in the SpaceNavigator/3DxWare X client driver code.
    • fixed a small memory leak orbital callback struct used in the GUI
    • cionize: corrected dx output routine by comparing against the independent dxplugin code.
    • Fix another buglet in command processing when compiled with Tcl 8.5.x. Since the command objects can't be set to zero length without duplication or recreation, due to sharing, we simply delete them and allocate new ones.
    • cionize: fixed compiler warnings
    • cionize: fixed compiler warning
    • cionize: destroy timers when finished
    • fixed a couple of memory leaks in the QMData class.
    • gamessplugin: Eliminated calloc(0, xxx) calls.
    • Fix a tiny memory leak of the list returned by the XInput device query
    • Fix two GLSL shader path string memory leaks
    • Fix to tiny memory leaks for temporary GLSL shader path strings
    • Correct an error in the indexing of the pre-generated display lists OpenGL display lists in the destructor calls.
    • Changed precision from double to float for QM frequencies, intensities and normalmodes.
    • Changed molfile plugin orbital occupancies from int to float.
    • Don't attempt vertex fusion if we get an empty list. The vertex fusion code requires non-empty arrays.
    • cranked version
  • VMD 1.8.7a49 (February 5, 2009)
    • pulled in first full-fledged test of multiseq plugin version 2.1
    • changed commenting to document window handle call. No code change.
    • cranked version
  • VMD 1.8.7a48 (February 4, 2009)
    • Added Axel Kohlmeyer's plugin for reading output files from HOOMD This plugin currently depends on the 'expat' XML parser library.
    • Applied AK's latest update to cpmdlogplugin and gaussianplugin
    • Added significant extra logic within the water box replica loop to avoid having to perform costly solvent/solute atom overlap tests with "within" atom selections except in cases where it's known that their bounding boxes actually overlap. In the cases where they do not overlap, the atoms only have to be checked against the bounding box for the resulting solvated system. This gives over a factor of two speed boost when solvating large systems like the NSF BAR domain test case for Blue Waters.
    • Added progress status messages for long running solvate jobs
    • Added some profiling data to the core of the solvent box replication code to guide further tuning efforts.
    • Implemented a special-case version of the code that matches unique residue IDs to residue names to avoid quadratic time complexity which severely slowed down generation of large solvent boxes (e.g. 100M atom NSF BAR domain test case for Blue Waters).
    • reorganized the solvate internals to improve readability and added comments on a few algorithms that need some work to improve performance on large systems.
    • solvate: updated comments, prettied up the code
    • Updated minor version number of solvate due to recent changes
    • psfgen: Added code to load the bonds, angles, dihedrals, impropers, and cross-term maps into the psfgen data structures when the "readmol" command is called for a file that contains all info and not merely for reading coords.
    • psfgen: Added explicit initialization of various array pointers to NULL.
    • psfgen: Initialize the atomcoords pointer to NULL to handle cases where we load a structure but no coords. Updated source file comments.
    • solvate: Modified the solvate plugin to accept .js format input files, using the new psfgen commands. The new code doesn't handle rotated systems yet, and much cleanup remains to be done, but this is a necessary step to building the complete chromatophore or the NSF Blue Waters bar domain tests since they greatly exceed the capacity of existing file formats. This feature requires the use of one of the plugin-enabled psfgen builds.
    • Added code to the topo_mol_pluginio to enable plugin-based "readmol" version of "readpsf" for fully populated structure files, e.g. replacing the pair of commands readpsf+coordpdb.
    • psfgen: If an error occurs, we exit out prior to attempting to parse any further data from the psf file. (previous rev was continuing to parse header info used by autopsf before checking for errors)
    • namdgui: Ensure proper scaling when using AMBER parameters.
    • AK's updates to gaussianplugin and cpmdlogplugin: cleanup of gaussian and cpmdlog plugins This change removes all code that had remained from the precursors and makes the plugins by default less chatty. It re-instates the wavefunction read functionality for older CPMD versions, and suggests a workaround for coordinates on load.
    • Updated VASP CHGCAR plugin from Sung Sakong fixes a bug.
    • Added perfstat configure flag options for AIX5
    • updated AIX5 perfstat code
    • Added physical memory query code based on the AIX perfstat interface found on recent machines
    • Updated the physmem queries for newer revs of AIX5
    • improved the free memory determination routine so it doesn't yield bogus numbers on AIX. Still need to catch these a bit more gracefully.
    • Updated AIX5 info for builds on NCSA "Blue Print"
    • Fix dtrplugin for AIX5
    • fixed problems with the 'distrib' make target for the signalproc plugin
    • Updated signalproc makefile with Axel's latest rev
    • Added missing signalproc makefile to CVS
    • Updated sgsmooth code per Axel's fixes for MSVC and eliminating iostream
    • Updated MSVC builds for Tcl 8.5 and added the new ILS source files to the build
    • Removed irspecgui src in favor of new signalproc plugin
    • Updated the Inform class with recent vmdcon log level updates
    • Added Axel's 'signalproc' signal processing plugin
    • revised VMD init to textview to point to the new multitext plugin instead.
    • Added new 'multitext' plugin to replace the old 'textview' plugin. Revision of the old textview plugin that is multiple instance aware. You can create instances, get handles back, and have multiple copies of the code going at once without trouncing on each other.
    • fixed dipwatch makefile version
    • pbctools: added Olaf's doc .tex file
    • gofrgui: updated doc links
    • gaussianplugin: eliminated non-portable __FUNCTION__ preprocessor macro
    • AK's tweak to clonerep
    • cionize: eliminated C++isms
    • irspecgui: changed tk_getOpenFile calls to avoid annoying defaultextension behavior
    • Fix a crashing bug when picking atoms with the mouse mode "Pick" and python as the active text interpreter. Also unconditionally initializes the vmd module, which is helpful for running VMD as a Python module.
    • Cranked the minor version of the maeffplugin, given the largish number of changes that were recently made for portability reasons.
    • Work around a C++ loop variable scoping problem in maeffplugin
    • maeffplugin: applied Justin's patch to eliminate template issues on MSVC6
    • convert remaining Tcl link dependencies to 8.5
    • Added the truncate_trajectory plugin (trunctraj)
    • Switched to framework linkage flag, and use Tcl 8.5
    • Various minor revisions to dtrplugin and maeffplugin to allow compilation on MSVC6. Still have to workaround a remaining problem with the template code in maeffplugin on MSVC6.
    • cranked version
  • VMD 1.8.7a47 (January 30, 2009)
    • Added truncate_trajectory plugin to the startup scripts
    • Updated truntraj Makefile to copy parameter/topology files etc.
    • Added vmdcon log level comments etc.
    • AK's patch cleaning up the vmdcon log level features and adding comments to the code.
    • Prettied up debugging output from cpmdlogplugin
    • Second try for the arbitrary shape patch to dxplugin. This version also updates the console I/O code to use the vmdcon feature when available.
    • added truncate_trajectory plugin by Thomas Evangelidis
    • Reverted the dxplugin code until we solve bugs resulting from the update for arbitrary shape support. Kept the comment updates and other changes not related to the bug.
    • dtrplugin/maeffplugin: Workarounds for compilation problems on Linux systems using GCC 4.3.x.
    • cpmdlogplugin: eliminate non-portable preprocessor macro usage
    • Applied Axel's update to allow the cpmdlogplugin to read trajectories from a specially modified CPMD version that projects wavefunctions onto atomic orbitals during an MD run. The support for the old static output is currently broken, but will be addressed subsequently once things are cleaned up.
    • Updated cubeplugin Makefile dependency for new unit conversion header
    • Updated basis set handling code in gaussianplugin
    • Marked VASP plugins thread-unsafe due to use of strtok()
    • avsplugin marked thread-unsafe due to use of strtok()
    • Updated to use unit conversion header
    • dtrplugin/maeffplugin: synced header comments with DESRES repository version
    • Added required copyright/license/redistribution info for dtrplugin and maeffplugin by D. E. Shaw Research.
    • dtrplugin/maeffplugin: Updated the formatting of the license block as per request from Chuck Rendleman at D. E. Shaw Research.
    • Enable static linkage compilation of dtrplugin and maeffplugin
    • Added conditional compilation of the default main() routines in dtrplugin and maeffplugin.
    • Enable compilation of dtrplugin and maeffplugin by D. E. Shaw Research
    • Added preprocessor tests to allow compilation of dtrplugin on Solaris sparc/x86
    • Added VMD CVS version tag macro to top of dtrplugin/maeffplugin source files
    • Added perforce version tags from DESRES source tree to the top of the dtrplugin and maeffplugin source files for future reference. Whenever we have 100% sync against their tree, we can manually update these strings.
    • Added new "dtrplugin": Frameset plugin for reading/writing Desmond and Anton trajectories, written by D. E. Shaw Research. Framesets are stored as a directory of files as opposed to a single large file. This file was originally named frameset.cxx, but has been renamed dtrplugin.cxx for use in the VMD plugin tree.
    • Added new "maeffplugin": Maestro file reader/writer plugin written by D. E. Shaw Research. Reads .mae, .maeff, and .cms files.
    • Added connected() method for the python IMD module
    • Made python molecule.write use waitfor=1 by default.
    • get_vmdapp() now correctly handles null modules, dictionaries, and objects returned via the python interfaces.
    • Fixed handling of "vmdcon" command with no arguments for binaries not compiled with the VMDTKCON option
    • cranked version
  • VMD 1.8.7a46 (January 28, 2009)
    • Added cpmdplugin dependency for unit_conversion.h
    • cpmdplugin: updated to use the unit conversion header/macros
    • cpmdlogplugin: now uses the internal VSTO-6G basis set unless overridden by an environment variable.
    • cpmdlogplugin: Prevent crashes when basis set file can't be loaded.
    • Fixed bogus sizeof arithmetic in scftyp and runtype string table lookups, added new SCFTYP_TOTAL and RUNTYP_TOTAL enums for this purpose.
    • Eliminated compiler warnings about hidden class member variables.
    • changed IMDSimThread class to use an extern "C" thread proc routine which calls into the IMDSimThread::reader() routine rather than tricks with a static method.
    • IMDSimThread: make the reader() method public so it is legal to call it from an extern "C" thread wrapper routine.
    • Changed the Tcl asynchronous handler and the signal handler procs to explicitly use extern "C" linkage to please the compiler
    • Changed the vmd_alloc(), vmd_dealloc(), vmd_realloc(), and vmd_resize_alloc() shared memory allocation routines to use extern "C" linkage for consistency of function pointer types, to please various compilers.
    • Fix portability nits in recent patches/updates.
    • renamed loop variables to eliminate warnings about hiding Fl_Window::i
    • Renamed parameter to eliminate compiler warnings about hiding member variable 'pos'
    • Updated various multithreading thread-worker routines to use extern "C" linkage to please the compilers.
    • Applied AK's patch to allow the dxplugin to deal with other shapes, and to correct a string handling bug.
    • Updated runtype scftype enumeration string tables and methods
    • AK's patch to adjust strings returned when using internal basis set
    • Enable compilation of the new cpmdlog QM plugin
    • Updated cpmdlogplugin for updated console redirection api
    • Axel Kohlmeyer's CPMD logfile reader plugin
    • Added header containing unit conversion macros to be used within molfile plugins.
    • Updated vmdinit.tcl for vmdcon console redirection feature updates
    • Revised QM portions of the plugin API, replacing various strings with integer enumerations and updating the comments to be Doxygen-usable. Cranked the ABI version number, enabling the new cons_fputs() entrypoint.
    • Updated the GAMESS and Gaussian log file reader plugins according to recent plugin QM API changes, replacing strings with enumerations and updating comments to be more Doxygen friendly.
    • Applied Axel's patch to make tkcon do the right thing with common commands like vim/pico/etc. Also catches calls to "gopython" which really don't work if done from inside of tkcon presently.
    • Applied Axel's patch to improve qm-related Tcl output format strings
    • Applied AK's patch updating the VMD QM data structures to use enumerations rather than strings to indicate the SCF type, run type, and so on. Various headers updated for improved Doxygen documentation, and readability.
    • increase number of fractional digits for orbital energy in GUI
    • Applied Axel's updates to the VMD console redirection feature, enabling message buffering, priorities, masks, and new text commands to control the console redirection feature.
    • applied Axel's latest updates to his gaussian plugin
    • Added cons_fputs() entry point for console I/O managed by the calling application. This should really be provided by the caller in a block of read-only function pointers, but for the time being we'll start out with it here and revise further.
    • Added an updated version of Axel's console I/O routine for use in plugins. When compiled against a plugin ABI that supports the use of cons_fputs() it will check the cons_fputs() function pointer and if not NULL, will call the application-provided routine for console I/O. If compiled against and older plugin ABI, it will simply direct output to stdout as would have been done via normal printf() calls.
    • gamessplugin: fixed C++isms, marked as thread-unsafe, and cranked version
    • Fix string termination arithmetic in netcdfplugin
    • Fix a C++ism in psfgen
    • Disable exception handling in the hesstrans plugin since unhandled exceptions can't cross the C-based plugin interface back to VMD
    • Corrected C++isms in cionize code
    • corrected comment blocks in STAMP
    • Replaced printf() by msgInfo.
    • Improved precision/correctness of measure dipole constants
    • Increased the precision of the VMD_ANGS_TO_BOHR constant
    • Applied Axel's patch to prevent throwing an unhandled exception in the MeasureSurface code.
    • Added ifdefs to auto-select the most appropriate orbital kernel by predefined compiler macros
    • Fixed QMTimestep to allow 'animate dup' to operate correctly.
    • cranked version
  • VMD 1.8.7a45 (January 22, 2009)
    • Check which QM arrays exist during destructor calls to properly handle situations where log files don't contain all data.
    • Applied Axel's patch adding multiplicity to the set_occupancies() method for QMTimestep.
    • Use 1-based indexing for QM orbitals in the GUI
    • volmap: Add ILS -maskonly mode that computes a mask map containing 0 for gridpoints that don't have contributions from each frame (due to drift of the structure).
    • renamed QMDATA_RUNTITLESZ to QMDATA_BIGBUFSZ, and increased the size to match that found in the plugin API
    • Use the safe strncpy macro for the volumetric data strings as well.
    • Replaced raw strncpy() calls with size-checked macro that will use a max length of the minimum of the source/target array lengths
    • gaussianplugin: Added return values for newly-non-void get_basis() routine.
    • Enable compilation of the new gaussian plugin
    • gaussianplugin: fix return type for get_basis() routine
    • Added field for occupancies to qm_timestep.
    • Added makefile dependencies for Gromacs.h and gamessplugin.h as they had not been listed previously
    • Updated gamessplugin to match the new QM plugin APIs that were revised to better accomodate Gaussian
    • revised the QM related sections of the plugin API to better accomodate Gaussian, based on early experience with Axel's gaussian plugin.
    • Minor bugfix. Cleanup. Improved warning output.
    • misc cleanup and doxygenation of QM data structures
    • plugins: discard numbers in atom labels in periodic table element idenfication routine
    • Updated the QMData class with additional shell type constants, and adjusted the storage space for the run title to accomodate Gaussian log files.
    • use a sentinel value to indicate undefined occupancy field
    • Added Axel's Glass3 material for molecular orbital renderings
    • Added Axel's first revs of a Gaussian reader plugin that works with the new molecular orbital rendering code.
    • Added option -com to "pbc wrap" which allows to set the center of the wrapping cell to the center of mass of the given selection.
    • Add some safety checks for the QMData/QMTimestep get_xxx() functions.
    • situsplugin: Decrease tolerance for determining if a cell is orthogonal or uniform.
    • Improved user ILS interface.
    • Finally separated ILS from the VolMapCreate baseclass.
    • Use new version of compute_pbcminmax(). Improve indentation.
    • Allow to specify frame in compute_pbcminmax().
    • Cleanup and further preparation for separating volmap and ILS.
    • Check for tcsh prior to checking for and/or enabling 'rlwrap'
    • Swap left/right eye mappings for Anaglyph stereo as suggested by Christopher Bruns, since left-eye-red convention seems to have won the "format war" some time ago and most anaglyph glasses follow this scheme.
    • volmap: cleanup
    • autoionize: Change the error to a warning for non-integer total charges; in some cases this is desired by the user
    • autoionize: Display an error message if the system has a non-integer total charge
    • Added Axel's patch to enable user-configured trajectory step size for the movie maker plugin
    • readcharmmtop: Changed the charges on the CYSD patch to yield an integer overall charge (those charges are still made up though; their origin is unclear, as they were in the file in jordi's original commit)
    • cranked version
  • VMD 1.8.7a44 (January 16, 2009)
    • multiseq: revised font selection to use [font actual... ] and not an lindex into what the default font used to be
    • tkcon: removed the -exact flag from the package require, since this fails on Tcl 8.5.x
    • cranked version
  • VMD 1.8.7a43 (January 16, 2009)
    • volmap: Further simplification of argument parsing.
    • Further changes toward separating ILS from volmap.
    • corrected vdna package version in pkgIndex.tcl script
    • updates to some debug messages to give version numbers, and updated pkgIndex to properly match version numbers
    • Some changes in preparation of separating ILS from volmap.
    • Added Axel's placeholder vmdcon stub command for VMD binaries that have been built without it.
    • Fix floating point type inconsistencies in ILS code that yielded function overloading ambiguities on Solaris.
    • Force extern "C" linkage for all of the threading routines in VMDThreads
    • Applied Axel's patch to update the multiplot version and to fix reset behavior.
    • doc: Removed another stray bracket.
    • Applied Axel's initial patch to make it possible to get tkcon to interoperate somewhat with the vmdcon interface.
    • Added Axel's command completion rule set for use with the 'rlwrap' readline wrapper tool.
    • Applied Axel's updates to the optional "vmdcon" console interface
    • gamessplugin: Moved static function declarations from *.h to *.c.
    • Use C linkage for all of the low level threading routines.
    • Updated gofrgui docs with additional web links, and an updated multiplot package version requirement
    • Updated the dipwatch plugin with the latest version from Axel.
    • renamed measure diple "-nocenter" option to "-origincenter"
    • updated multiplot version and docs for Axel's patch
    • Applied Axel's patches to enable embedding of multiplot within another window.
    • Applied Axel's doc update for measure dipole
    • Applied Axel's patch to allow measure dipole to use geometric center, center of mass, or the origin as the center.
    • doc: Removed unmatched bracket that prevented correct building.
    • cgtools: There was a minor revision of the RBCG parameter file, rbcg-2007.par. Thanks to trial runs by some external users, we realized that there were a couple lines missing in the file. it worked for our simulations, but because of those missing lines some simulations with very specific order of amino acids in a protein could not be performed.
    • Use better names for the ILS related classes.
    • Put ILS code into separate file. Some cache optimizations.
    • Workaround (fix maybe?) for a problem with Tcl 8.5's behavior with regard to Tcl_SetObjLength() resulting in an abort() call while parsing console or script input in our line-by-line parsing modes (e.g. the 'play' command, reading .vmdrc, or console input). The old code was efficient and reused the same object over and over, but with Tcl 8.5 this results in an abort() call from within the Tcl library. The new alternate code deletes the old object and makes a new one for every command, which is less efficient, but doesn't trigger problems with Tcl's internals.
    • solvate: Prettied up the atom selection for the extra overlap check
    • nanotube: Applied Bob's update for the nanotube builder that adds more parameter checking.
    • solvate: Avoid an unnecessary duplicate structure load after the overlap check, deleted the associated atom selection, and changed the code so that the extra safety check looking for overlaps is only done for structures containing fewer than 4 million atoms.
    • solvate: First round of revisions to solvate to take advantage of plugin-based file I/O in psfgen. The code checks the output name for a .js filename extension, and if found it does all intermediate file I/O and final output using the .js format. This is just a stopgap revision until the solvate interface is redesigned to handle these new features more gracefully.
    • solvate: eliminated deprecated file loading syntax from solvate plugin
    • volmap: Generation of the path for the checkpoint file was not Windows compatible because it used forward slashes. This is fixed now.
    • Cleanup of plugin build script prior to revisions for new Tcl/Tk versions
    • volmap: Corrected manual entry for volmap command
    • volmap: Made ILS substantially faster for diatomic probes: Check if a single sphere can be placed at the subgrid points before testing the rotamers. If we cannot fit a monoatomic probe then there is no way we can place a diatomic one and we can skip the whole gridpoint. Made the max energy cutoff a user controlled parameter. Lowering the energy cutoff gives a big speedup but the optimal choice depends on the application.
    • volmap: Added timers for the different steps of ILS computation.
    • volmap: Improved comments. Replace double quotes with single quotes when writing data name string to file.
    • dxplugin: Added comment about transposing the order of grid data.
    • Added conversion factor from Angstroms to Bohr for use by QM related routines
    • namdgui: Improved AMBER support.
    • namdgui: Added some support for AMBER files.
    • nanotube: Added Bob Johnson's nanotube builder plugin
    • Not doing 32-bit builds for Solaris/sparc anymore, since nobody has such old machines anymore.
    • cgnetworking: fixed a problem that C�ar had run across with floating poin numbers being out of range. Anton had put in number test before doing an exponential and this was very system dependent. I had flagged it as something that needed fixed, and finally got around to doing it. Now we do the calculation and set the result appropriately if the system can't handle the calculation
    • cranked version number, enable CUDA register count output during compilation
  • VMD 1.8.7a43 (December 22, 2008)
    • updated webpage for the hbonds plugin
    • correct floating point consistency
    • pass origin coordinates as parameters rather than as a global memory reference.
    • eliminated unused parameters from tiled shared kernel
    • Padded the GPU shellinfo arrays elements out to coalesced block sizes
    • Added compile time macro to enable/disable use of Dave's approximation
    • Merged the shell symmetry type and count of primitives per shell into a single array in GPU global memory to reduce the number of global memory read transactions. Added Dave's aexpfnx() approximation to the GPU code, and cleaned things up in a few places.
    • misc cleanup of CUDA orbital routines
    • use shift rather than multiply to pick up a few clock cycles
    • Reorganized the global memory storage of per atom coordinates, basis set index, and shell counters, and forced coalesced memory alignment.
    • misc cleanup, changed environment variable name for test runs
    • rename CUDA kernels to match the text in the paper
    • Correct floating point constant type for ANGS_TO_BOHR
    • Corrected the summary of individual MO runtime components
    • Removed the older versions of Dave's exponential/gaussian approximation routine, since the newest version now outruns all of the prior versions.
    • Updated Dave's SSE loop with the _mm_movemask_ps() intrinsic replacing the slower ORing of individual condition codes.
    • prettied up Dave's SSE approximation
    • eliminated conflicting type redefinition for new exp approx code
    • disable the SSE in the default build for now
    • Added Dave's new aexpfnx() and aexpfnxsse() routines for approximating exp(x).
    • Fixed various crash-causing bugs in xbgf, bgf, and mol2 plugins
    • Fixed missing copy of the contraction coefficient parameters in the log2e fixup code.
    • pre-factored log2(e) into the exponent terms send to the GPU so that we can call the exp2f() routine rather than __expf(), giving us an improved maximum error bound of 2 ulps over the full range.
    • Added Dave's expn2sse() implementation
    • Fixed an xdist coordinate scaling bug in the SSE loop and added an SSE version of the Cephes exp() routine, adapted from the open source exp_ps() variant by Julien Pommier.
    • Added skeletal SSE implementation of the orbital calculation code. Still needs a 4-way SSE-ized expf() to be runnable.
    • prettied up formatting on timing info
    • print gridpoints/sec rate for orbital calculations
    • Enabled info messages for GPU kernels.
    • Display the orbital occupancies in the menu
    • Added Dave's new expn2() approximation, which gives a nice performance boost, particularly for GCC.
    • Updated and cleaned up the formatting on the shared memory tiling comments
    • simplified shared memory block addressing arithmetic
    • fix typo in include
    • Increased the shared memory buffer sizes and added a bit of short-circuit code to prevent the basis set shared memory block from being loaded except when necessary when beginning a new atom.
    • Updated the shared memory loader for the basis array to reload only when strictly necessary. This yielded a 20% performance boost.
    • Added code to use Dave's spline approximation rather than the real expf() routine, albeit with the requirement that the input is always a value less than or equal to zero. This code runs about four times faster than expf() for molecular orbital computation in early testing.
    • cranked version
  • VMD 1.8.7a42 (December 4, 2008)
    • Added new routines to check the maximum shell type and maximum number of primitives per basis function. Added new checks to ensure compatibility with the limits inherent in the CUDA implementation prior to attempting to launch a GPU kernel.
    • Enable the molecular orbital code for testing for the time being.
    • Turned off excess performance and debugging output generated by the CUDA orbital code.
    • Now that the global+shared mem kernel works, there is no longer any need for the old intermediate "cuorbital()" kernel at the present time.
    • First working shared kernel entirely based on the use of shared memory based tiling for bandwidth amplification by sharing various wavefunction and GTO primitive coefficient data among all threads in a block.
    • Eliminated the catch-all loop for shell types higher than those handled in the hand-written cases, since we can only test with systems containing shell types up to "G" at present. Implemented a program-managed cache in shared memory for storing the wavefunction coefficients. The current shared memory tiling also assumes a maximum shell type of "G" at present, though higher shell types could easily be supported.
    • changed kernel override processing order so that constant memory is always initialized before we override, to simplify various speed testing modifications
    • Reorganized the order of memory references for loop control variables so that loads from arrays that are indexed the same occur right next to each other. CPU and GPU cache utilization can be improved by storing these matched-indexing arrays together as even/odd elements.
    • Fixed the console printf calls in gamessplugin so they identify themselves correctly in all but the few cases that are intended only for debugging. Changed the format to match all of the other plugins.
    • Added padding for all CUDA device arrays to simplify memory coalescing for the global-memory-only kernel versions
    • silence QM debugging output for now
    • Added a routine to compute the maximum number of wave_f references in a single shell, to help the CUDA kernel determine what strategy to use.
    • Corrected the CUDA global-mem-only kernel so it wasn't using any of the constant memory data. It got broken at some point via cut/paste.
    • Migrated the computation strategy logic to the earliest part of the top level CUDA orbital routine and added environment variable checks to allow forced use of the fallback code paths for testing correctness and performance.
    • Generate an index array that sorts atoms by atomic basis set type. Pass pointer to this array *atom_sort into the Orbital upon construction. Here it can be used to sort the wavefunction table and the offset arrays accordingly. Minor cleanup
    • Added additional timers into the MO rep code so that we can profile the MO kernels in the context of the full rep, and tune the graphics pieces as necessary.
    • Updated the CUDA orbital kernel for the new unique-basis-set and sorted atom implementation. Simplified the regular C version slightly.
    • Use offset instead of pointer into basis_array to get entry for an atom.
    • Use unique basis sets, i.e one entry per atom type.
    • Removed any dependency on the individual atom from the basis set so that we can create a unique basis set (i.e. one entry per atoom type). Added functions to compare and copy atomic basis entries. Cleaned up along the way.
    • cgtools: Fix POPC's topology, which was identical to DPPC
    • Separated basis set normalization from setting up the hierarchical basis set structures. This is a condition for efficient collapsing into a unique basis set.
    • Made two variables in QMTimestep private and added access functions. Removed inline statements that shouldn't be there. Added function to compute MO occupancies.
    • molefacture: Get a fully working fep gui. Add AM1 minimization option. Squash various bugs.
    • runante: Add compatibility with the new version of molefacture, and ability to use divcon for charges
    • Factored out multiplication by contracted_gto from each of the shell cases, in particular tweaked the catch-all loop implementation.
    • Factored out multiplication by contracted_gto from each of the shell cases, and improved efficiency of a few of the hand-coded angular momenta calculations.
    • Fixed frame selection bug in VolMapCreate. Previously, VolMapCreate would override which_frame of the given selection with TS_NOW.
    • Fix return codes in init_basis().
    • Added some error checking for QM data.
    • Removed QM access functions that are now unused.
    • Renamed molfile_qm_orbital_t to molfile_qm_basis_t because that's what it really is.
    • Simplified QMData setup.
    • Removed unnecessary vmdplugin_ABIVERSION tests from the QM interface since it has been in use only in version 12.
    • eliminate redundant memset() calls to clear sub structs..
    • Removed a bunch of unneeded variables from the QM interface. We compute stuff on the fly instead.
    • Only use basis_string to send info about standard basis sets and eliminated data fields for Pople style basis sets. This can be parsed from the string in VMD if needed at all.
    • cgtools: added the reverse coarse grain parameter and topology files. Revised the docs to mention the two files.
    • cgtools: added the reverse coarse grain parameter and topology files. Revised the docs to mention the two files.
    • cgtools: spelled out RBCG a few times to make it more clear
    • Determine the highest shell that occurs in the basis set in order to allocate **norm_factors correctly.
    • gamessplugin: Change shell_symmetry from char* to int* Remove unused code Add preliminary code for reading potential suface scans.
    • molfile plugins: Change shell_symmetry from char* to int*
    • Added a function to the QMData that creates an orbital and returns a pointer to it. Eliminated compiler warnings.
    • Fixed problem with the shell symmetry (int vs. string representation).
    • Enabled the carbohydrate reps in the Windows builds now that we're free of various STL templates that MSVC can't deal with.
    • Applied JG's patch reversing polygon winding order for the background gradient polygon so that it doesn't get culled when backface culling is enabled.
    • improved floating point consistency to please msvc
    • typecast to please msvc
    • molefacture: added a delete for an atomselect
    • Removed the experimental "mol orbital" command since we have a built-in orbital representation now.
    • Applied JG's patch to deal with FP imprecision in bin assignment for the spatial search routine.
    • Cleaned up const char return types and parameters to QMData::get_shell_type_str().
    • pbctools: reverted the documentation change, but added the link to Olaf's page back in
    • Updated pbctools plugin with version 2.4 from Olaf Lenz
    • Corrected the coordinate unit conversions in all three CUDA kernels as per the previous bug fixes. The previous patch only fixed one of the three CUDA kernels.
    • Fixed computation of the gridsize so that orbitals are really centered on the atoms.
    • Added safety chacks in QMTimestep thereby fixing the bug that would crash trajectories with empty wavefunctions. Fixed small bug in yet unused code in Orbital class.
    • timeline: file load/read for both: per-residue and free-selection groups are working other debugs/improvements, including crude velocity functions some hoped-for functions will have to wait for after imminent VMD release to be reliable/present, so do not appear here ...
    • Force use of a single GPU with a single thread for now, as this gives us a 20% speed boost due to the initial 0.1s GPU attach time for the newly generated thread. By using the main VMD thread for computing the Orbital kernel, we eliminate this 0.1s launch overhead, and the peak framerate for animating orbitals will be much faster. To solve this in the longer term, we'll want to keep a thread pool within DrawMolItem, and avoid re-launching/joining the threads except when necessary.
    • greatly increased default orbital grid resolution for the purposes of SC2008 demos and testing of the CUDA kernel.
    • Simplified constructor for the orbital class.
    • Made a bunch of functions that return const pointers const.
    • Fixed the units and the access of the atomic coordinates.
    • Reduced amount of debugging output. Cleanup
    • Changed the sorting of the wave function coefficients from lexicographical order of the corresponding angular momenta to an order determined by the power of the y and z component. This matches the order in the orbital computation loop.
    • Added function to retrieve the string representation of the angular momentum.
    • Corrected the order in which the normalization factor table was populated. Changed the type of shell.symmetry variable from char to int and added function to retrieve the string representation.
    • Improved some comments. Removed unused variable. Misc. cleanup.
    • Fixed debugging artifact (the angular momentum dependent normalization factors were omitted). This fixes the problem with the orbitals looking too big. Some cleanup.
    • Changed order of the explicitly given functions for angular momenta to match the order generated by the fallback loop.
    • Converted distance between grid point and atoms from Angstrom to Bohr since that seems to be the unit implied by the basis set. Fixed bug that prevented getting the correct atom coordinates.
    • disabled the orbital grid optimization pass for the time being until we make it more robust and prevent it from slowing down the CUDA accelerated code.
    • Only print the wavefunction data when debugging
    • Updated the molecular orbital representation GUI such that it lists only 20 orbitals beyond the highest occupied molecular orbital (HOMO). Also updated chooser text to include the orbital energy, and a slot for occupancy, although the occupancy is currently listed as N/A since we don't have that data available yet.
    • Fixed the neighborlist code. It has been verified on the chromatophore by also computing using a larger neighborhood.
    • cionize: Using generalized neighborlist code. It is correct, as verified using virus, but suboptimal because the neighborlist is not as tight as it can be for our common parameter choices.
    • cionize: fixed return from write_grid_dx that always failed
    • Fixed QMData memory access bug
    • Changed a number of direct accesses to QMData and QMTimestep variables to use access functions instead. Made these variables private.
    • cionize: Implemented factored interpolation. This algorithm generally reduces the number of multiplies for cubic interpolation from 64 down to 12. Performance is faster when there aren't too many exclusions, e.g., on the virus with 30% excluded map points. It is slower when there are a significant number of exclusions, e.g., on the 1.5 M atom water test system with 80% excluded map points. The original algorithm can completely skip excluded map points, whereas the new algorithm still has to do most of its work per point. The new implementation has been verified to be correct (it agrees with original implementation up to roundoff error). It is currently disabled (commenting out the preprocessor macro definition MGPOT_FACTOR_INTERP). The plan is to improve performance before enabling. We will use a heuristic based on the exclusion ratio to dynamically choose the fastest interpolation method.
    • Replaced unsigned ints in QM interface by ints.
    • Added sorting of the wavefunction coefficients for each shell by the angular momentum. This assures that the traversing order is always the same as assumed by the orbital calculation loops independent of the order in which they were read in from file. Started replaceing direct access to QMData member variables by access functions.
    • gamessplugin: Changed the wave function parser to read blocks rather than words so that it correctly reads G-shells where the angularmomentum field is fused with the atom number. Eliminated unused variable.
    • Added various comments about code that needs to be corrected in the MolFilePlugin system.
    • Timestep has no business including vmdplugin.h under any circumstances
    • Changed to single-precision floating point constants to please msvc
    • Corrected a typo in the Spaceball dominant axis assignment logic
    • Applied Simon's patch to replace the use of STL vector with ResizeArray, allowing the carbohydrate code to work on Windows MSVC, and eliminating the dependency on the STL.
    • Use double precision for memory allocation arithmetic since large potential maps (e.g. chromatophore) can easily contain many billions of voxels, thus overflowing a 32-bit integer if the math was done using a normal integer type.
    • Updated the MSMS plugin to deal with newer revs of MSMS that emit comment lines at the top of the .vert and .face files.
    • Fixed hbonds plugin makefile
    • Added a new OpenDX output routine adapted from the VMD dxplugin, with support for binary DX file output, used in place of the binary I/O test harness that David had previously been using.
    • Fixed file open mode for writing so that writing binary DX files will work correctly on Windows.
    • Doxygenized the comments for the recently added QM data structures
    • The QMData class has now an array of flags which determine which cartesian component of the angularmomentum each wavefunction coefficient corresponds to. The array has a length of 3*num_wave_f and each triplet represents the exponents of the x, y, and z components. I.e. (1, 0, 2) means xzz for an F shell. Next the QMData class must provide a routine to sort the wavefunction coefficients of each shell according to that scheme.
    • Added support for angular momentum flags.
    • Added support for sortable agular momentum flags for the wavefunction array.
    • molfile_plugin: Got rid of the homo_index variable for orbitals. We will compute that on the fly in VMD.
    • gamessplugin: all-new file parser that reads the file in a logical order and is very robust wrt different kinds of logfiles containing various amounts of data. also handles truncated files which is very useful if you want to analyze a run that you broke off because something was wrong. Or even better, you can analyze your simulation while it's still running.
    • Removed the hand-coded G shell code, thereby saving registers and allowing the G80-based cards to run about 25% faster for most cases.
    • Updated the cufastorbital() kernel so that _all_ of the orbital data is now stored in constant memory. Removed the old unused global memory kernel parameters, and streamlined the routine further.
    • Updated the fast orbital kernel to store the atom coordinates in constant memory along with the wavefunction and basis set tables. Also changed the code to use the __expf() intrinsic which only takes 32 clock cycles per call.
    • Increased the default orbital grid resolution slightly, and improved the grid volume optimization parameters for better performance with the GPU-accelerated kernels.
    • Adjusted the sizes of the CUDA constant memory arrays to better fit the sizes that occur in the test runs I've been doing for the new orbital code.
    • Added two new CUDA orbital kernels that store as much of the wavefunction data and basis arrays in constant memory as will fit. The code determines which of the three kernels to use depending on how much of the data was loaded into constant memory.
    • Added environment variable check to make it easy to enable/disable the CUDA based orbital code for demos/testing in the next several weeks.
    • dowser: Clamp the beta values in case the energies calculated by Dowser don't fit in a valid PDB file, avoiding very rare cases where writepdb will fail attempting to write a beta value that doesn't fit in the PDB file.
    • Pull array references out of the loop tests to improve performance
    • Added code to unpack the padded GPU orbital grid
    • Fixed initialization of one of the GPU arrays for the CUDA orbital code, which now appears to run correctly.
    • More bug fixes for the CUDA orbital kernel
    • Updated cuda code, closer to functional now
    • Signedness correction until we revise the API
    • Added necessary array size info to the CUDA kernel parameters so that the CUDA code can download all of the orbital arrays onto the GPU, etc.
    • Added new get_orbital_occ_energy() method for use by the GUI code
    • gamessplugin: Changed order of some function so that they appear in the file more or less in ther order they are being used during the parsing process.
    • gamessplugin: Got rid of read_next_timestep(). Read angular momentum identifiers for wavefunction coefficients from file (not yet passed on to VMD).
    • Made QM plugins independent of the outdated read_next_timestep() function. It was only used by can_read_timesteps() but for QM files we want to use can_read_qm_timestep() querying the existence of read_timestep() in the plugin which is the function that actually provides the timestep data. Tested using ABI versions 10, 11 and 12.
    • Use new angular momentum ordering scheme in print_wavefunction().
    • Added routine to print the wavefunction for debugging. Fixed small bug.
    • Reorganized the wavefunction loops to process the angular momentums in successive px, py, pz order which is what we're planning to use as the canonical wavefunction ordering within VMD.
    • gamessplugin: Silenced most of the debugging output.
    • Made QMData initialization less chatty.
    • Added command to get the basis set in form of nested lists.
    • Fixed small bug: symmetry was filled with an int rather than a char.
    • Added functions to allocate and set data in the QMData class.
    • ssrestratins: Update usage info.
    • ssrestraints: Add ideal values for 3-10 helix.
    • ssrestraints: Fix ideal phi and psi angles for helices. Re-set the internal state after running with the -ideal option.
    • Leave the cell lengths at zero by default, indicating a non-periodic system
    • Added a comment about Jan's idea to replace the primitive loop with the actual gaussian that the primitives are attempting to model.
    • Compacted the cephes fast expf() routine a bit more
    • Added a variation of the single precision expf() routine from the free cephes math library for use in the orbital grid code. This gives a 2x speed increase over using the standard GNU libc implementations.
    • The Situs format requires an orthogonal, uniform cell (same grid spacing in all directions). When asked to write an orthogonal, non-uniform cell, instead of returning an error, we now return a warning and re-sample the map.
    • prettied up the GFLOPS counting code, and profiled the runtime due to calling exp().
    • fixed straggling reference to one of the old QMData member variables
    • cionize: support big data sets in latcut04, choose which device to run long-range part
    • changed QM related variable names
    • Added the size of the wave_f array to the Orbital class. Also renamed a bunch of variables.
    • updated the flop counter to account for the hand-optimized cases
    • remove CPU count mesg during multithreaded orbital run on the CPU
    • Added a new routine to compute the exact number of FLOPS executed for a single molecular orbital gridpoint for the loop-based routine
    • closer to a runnable cuda orbital kernel..
    • fleshed out more of the cuda orbital kernel setup code
    • removed the less optimized loops for high orbital calcs
    • re-enabled CPU/GPU processor count matching
    • further updates to the cuda kernels for molecular orbital calculation
    • Updated class member variable names to match recent updates in the other QM data structures.
    • Added CUDA molecular orbital code to the build
    • Added multithreading to the molecular orbital grid computation code and implemented the skeletal portions of a CUDA implementation.
    • Added routines to determine the HOMO and LUMO.
    • Renamed variables in the QM interface.
    • gamessplugin: Fixed broken build by adding function declarations before registering them with the plugin API. Renamed a bunch of variables to be consistent with the names in VMD's QMData class.
    • gamessplugin: Reorderd functions in a more logical way. Improved a feww comments.
    • Further reorganization of the molecular orbital grid computation code
    • continued reorganization of the grid computation routines
    • Split molecular orbital code into two routines, evaluate_at_grid_xyz() will now be used for general purpose calculations and for grid size optimization, and a new single-purpose highly optimized evaluate_grid() routine will be used to compute the whole grid, optionally with multiple CPU cores, GPUs, etc.
    • rewrote the molecular orbital grid loop for fastest memory traversal order, hoisted some work out of the innermost loop, and did a bit of cleanup in preparation for further code specialization and work with CUDA.
    • Eliminated unnecssary passing around of internal variables.
    • Corrected the initialization and loading of the qm timestep metadata using the new plugin API.
    • Updated the plugin API to separate the QM timestep metadata entry point and data structures from the non-QM timestep metadata routines/structs. Updated the logic in MolFilePlugin to deal with the change.
    • gamessplugin: Added QM timestep metadata entry point
    • separated the QM trajectory metadata from non-QM trajectory metadata API, adding a new plugin entry point for the QM case.
    • Changed the DX plugin to return a non-zero thickness for planar maps where the xdelta/ydelta/zdelta values are non-zero.
    • Changed volume texturing allocators to work with planar volumes
    • Updated cell length/axis routines to deal with planar volumes
    • added new position coloring modes to volume texturing switch statement.
    • situsplugin: Don't attempt to write a Situs file if the cell is not orthogonal. Ideally, we should resample the map when the cell is either not orthogonal or not uniform, printing a warning.
    • Further optimized the catch-all molecular orbital evaluation loop to minimize branching and eliminate unnecessary use of pow().
    • Added molecular orbital loop that avoids the use of pow()
    • Fixed incorrect loop control conditions in the catch-all molecular orbital evaluation code.
    • Misc cleanup and commenting on the orbital rendering code
    • gamessplugin: Got rid of now unused variables and functions.
    • gamessplugin: Removed the old/buggy molecular orbital code
    • Prettied up the chooser control for the Orbital representation. We probably want to replace the chooser with a text input field that allows the user to select a list or range of orbitals, much like we do for the draw multiple frames feature
    • Add more orbital entries in the chooser and added more safety checking to the representation rendering code.
    • Set better defaults for the new Orbital representation
    • Silence all unnecessary console debugging messages in the orbital related code since it gets invoked on every change to the new Orbital rep.
    • Added the new orbital representation code to the configure script
    • Added brand new "Orbital" representation, that computes the requested molecular orbital, extracts an isosurface, and renders it, all entirely on-the-fly. The GUI needs a lot of work, but the basics are there, and it currently reuses all but a tiny part of the Isosurface representation GUI controls, and all of the rendering code.
    • Added ifdefs to prevent problems when compiling with the new plugin ABI, but with orbitals disabled in the VMD data structures.
    • gamessplugin: Only populate the orbital data structures when using the latest ABI, to prevent crashing due to older revs not allocating memory properly etc.
    • Added comment about opportunity to improve performance by using exp2f() rather than exp(), which would require some premultiplication of exponent coefficients etc. Rewrote the exceptional orbital handler to avoid the use of pow() instead calculating the distance factor powers as the intraorbital loops execute.
    • misc cleanup of orbital variable scoping etc.
    • no need for shell_type to be a character type anymore.
    • Made orbital symmetry dependent on the shell rather than on the primitive. This greatly simplifies the inner loop for orbital calculation. Currently something is still wrong with the normalization factors and the orbitals are not exactly centered on the atoms but fixing these bugs will most likely not affect the structure of the inner loops.
    • jsplugin: Updated endianism detection message
    • cionize: data-parallel multi-GPU support for MSM short-range part
    • Added comment documenting VolMapCreateInterp function.
    • docs: Added documentation for volmap interp.
    • rmsdtt: Set menubutton width to avoid truncation in OS X.
    • Initialize new basis set data structures after reading all data from file.
    • Changed variable name in QMData class from basis to basis_array to emphasize that this is the flat array we are using for the GPU computation of the orbital. I also added a simple hierarchical data structure to store the basis set data (counters and pointers into basis_array). This will make it a lot easier to retrieve info about certain basis functions and to compute things like GTOs or even primitives.
    • Fixed a problem with the orbital grid dimesion optimizer.
    • Changed the char based storage of the shell type to an integer representation and changed the variable name from orbital_symmetry to shell_symmetry. This is better for lookup tables.
    • Eliminated redundant variables. Added support for g-orbitals.
    • Renamed variable atomic_shells to num_shells_per_atom.
    • Renamed variables for clarity. Changed optimal boundary finding algorithm in the Orbital class: Based on the idea that the wave function trails off in a distance of a few Angstroms from the molecule. We start from the current grid size (which could be for instance the molecular bounding box plus a padding region) and test the values on each of the six boundary planes. If there is no value larger than the given threshold in a plane then we shrink the system along the plane normal. In the distance the wave function tends to be smoother so we start the testing on a coarser grid. When we find the first value above the threshold we jump back one step and continue with half of the previous stepsize. When stepsize has reached minstepsize then we consider the corresponding boundary plane optimal. Note that starting out with a too coarse grid one might miss some features of the wave function.
    • cgtools: Initialize some vars that were slipping through a boundary condition. Fixed some strange formatting bug that had messed up the linebreaks in the tcl
    • Fixed bug in the orbital calculation code that was introduced during the previous cleanup.
    • Added support for CUDA 2.0 (64-bit only) on Solaris x86
    • removed plugin ABI ifdefs in QMData. The VMD data structures should not depend on the plugin ABI.
    • gamessplugin: Removed some of the unused animated normalmode code.
    • gamessplugin: Fixed bug that ocurred sometimes when loading geometry optimization runs. Fixed memory hole that ocurred when loading Hessian runs. Reorganized gamessplugin.h: Moves main datastruct to the beginning of the file.
    • psfgen: Added a special makefile that enables plugin-based I/O and includes the appropriate linkage against the static plugin library. This is only intended as a short-term solution for testing, as it doesn't work for Win32 or MacOS X builds.
    • added a timer to calculate_mo()
    • misc cleanup and optimization of the QM orbital code
    • cionize: Added comment about adding timing for the MSM long+short range summation step
    • massive cleanup of the orbital calculation class replaced tabs with spaces replaced if/else chain with switch statement
    • mol2plugin: Fix handling of optional bond order data in mol2plugin
    • gamessplugin: A few more changes for next-gen gamess reader. Enhanced code readability.
    • gamessplugin: New read_timestep() and read_timestep_metadata() functions for next-gen file reader. Removed C++-isms
    • psfgen: fix typo in psfgen error string
    • gamessplugin: Improvement of file parser so that it reads trajectory data.
    • gamessplugin: Compacted orbital related code and moved it to the end of the file. It will eventually be deleted because this functionality will be performed by VMD itself.
    • gamessplugin: Merging accumulated improvements of the file reader into the cvs tree: This first step is characterized mainly by renaming variables and reordering some code.
    • Added the new QM related source files to the default builds, though they are not enabled without the VMDWITHORBITALS define and the plugin ABI is set to version 12 or greater.
    • psfgen: warn on pdb and fail on psf output if segid is more than 4 characters long
    • Updated comments regarding bond order information.
    • Updated molfile_plugin.h comments regarding bond order information
    • Fix handling of optional bond order data in bgfplugin and xbgfplugin
    • psfgen: allow segid up to 7 chars
    • multiplot: Jan's changes to make multiplot more Mac friendly
    • cgtools: commented out a print statement that didn't need to be there
    • Added experimental Tcl commands to query QM data
    • Added more qm data initialization code
    • cionize: have to precede __constant__ with static
    • cionize: added cuda version macros
    • Applied Jan's patches adding QM orbital data based on new plugin APIs.
    • Added missing method for testing availability of timestep metadata
    • Applied Jan's patches for orbital calculations to the main VMDApp code.
    • Applied Jan's changes to the QM data structures used by the next-gen plugin APIs.
    • Fixed C++isms in the gamess plugin
    • Applied AK's patch replacing the ::autopsf::lreverse proc with the use of the global namespace 'lreverse' provided by Tcl 8.5, or emulated by the conditionally defined proc in vmdinit.tcl
    • Applied AK's patch conditionally defining an 'lreverse' proc for use in Tcl versions older than 8.5 so that 'lreverse' can safely be used in other plugins even when VMD is compiled against an older Tcl.
    • Applied AK's patch correcting comment text for measure gofr
    • Corrected improper use of C++ style comments
    • gromacsplugin: Applied AK's patch to add support for comment lines in g96 files
    • cionize: Added AK's patch for strict ANSI gettimeofday() params.
    • gamessplugin: Renamed variables for clarity Corrected bad comments Fixed a bug in the f-shell code
  • VMD 1.8.7a38 (October 15, 2008)
    • psfgen: Added new code to support coordinates-only and residues-only read modes.
    • psfgen: Expanded argument parsing for the new 'readmol' command to allow it to eventually duplicate all of the capabilities provided by the existing "readpsf" "coordpdb" and similar commands. The parser needs to support modes for reading just coordinates, just residues, full structure data, and various other optional flags beyond that.
    • psfgen: Added code to remove whitespace and match the atom name format expected by psfgen. Enabled some of the alternate atom name matching code. Still need to enable chain and element matching.
    • psfgen: Added atom alias checking and other missing pieces to the plugin-based structure loading code
    • psfgen: added coordinate reading to readmol implementation
    • psfgen: added segid-specific coordinate loading to the readmol implementation
    • psfgen: cranked psfgen subminor version number to indicate that this build has the new plugin-based structure reader code.
    • psfgen: added new 'readmol' command that calls plugin API to load structure or coordinate files
    • psfgen: Added plugin structure loading framework. Still need to copy the data loaded by the selected plugin into the internal psfgen data structures.
    • psfgen: fix typo
    • psfgen: Added skeletal routines for loading structure and/or coordinate data through the plugin interface.
    • docs: correct categorization of Intersurf
    • Fixed some bugs in the orbital rendering code Added some comments about other possible existing bugs Renamed a bunch of variables for clarity.
    • cranked version
  • VMD 1.8.7a37 (October 9, 2008)
    • psfgen: Added check to make sure that a given plugin supports write_timestep() before attempting to write atom coordinate data.
    • psfgen: Fix psfgen plugin-based coordinate output code
    • psfgen: Changed psfgen "writeplugin" to "writemol" which is less obtuse sounding
    • Reorganized the top level plugin makefile to gaurantee that the static library version of the molfile plugins is always completely built and linked prior to compiling and linking any of the other plugins. This became a particularly tricky issue with the addition of plugin-based I/O within psfgen, but was already required by catdcd as well. The new makefile structure explicitly builds all versions of the molfile plugins prior to beginning any of the others.
    • jsplugin: Added support for cross-term maps
    • psfgen: corrected struct member references for cmaps
    • psfgen: Added support for writing cross-term maps
    • psfgen: Added code to emit angles/dihedrals/impropers using the plugin API. Still need to implement cross-terms and logging/remarks.
    • psfgen: Added skeletal code for emitting bonds/angles/dihedrals/impropers/cterms via the plugin interface, reusing much of the logic from the native PSF output code.
    • psfgen: Fixed a few typos, and got first successful test run invoking a real plugin
    • vtfplugin: initialize parsed line pointer in all cases
    • psfplugin: fix linkage scope for start_psf_block()
    • psfgen: Added the primary plugin-based structure file writing infrastructure to psfgen. The implementation presently includes all of the data normally emmitted to a PDB file via "writepdb". The next step will be to add in the necessary code blocks to emit bonds, angles, dihedrals, impropers, and cross-terms. Finally, in order to support autopsf some effort will have to be put into dealing with handling of remark lines, which may be somewhat tricky due to formatting and line length limitations inherent in the various file formats supported by the plugin API.
    • psfgen: Added plugin enumeration and registration routines to psfgen
    • psfgen: Added plugin header paths to compilation directives
    • psfgen: Use compile-time macros to enable/disable the new psfgen "writeplugin" command.
    • psfgen: cranked version number due to updated PSF input/output code, and the new experimental 'writeplugin' command
    • corrected the ordering of the cross-term output vs. the acceptor/donor and NNB stuff that is presently unused and unsupported by psfplugin.
    • Added new routines for doing file I/O via the VMD plugins rather than hard-coded routines. This implementation is purely skeletal at this moment, and much needs to be added before it will be usable.
    • revised psfplugin docs for current version of the plugin
    • psfgen: compact output code
    • psfgen: Eliminated entirely redundant functions for parsing the leading header portion of each block of the PSF file, replacing the separate routines for bonds, angles, dihedrals, impropers, and cross-terms with a single psf_start_block() routine that accepts the block string you're looking for.
    • moved Solaris plugin builds to asuncion
    • Added notes about plugin build ordering
    • fix cut/paste error in array reference for cterms
    • Fixed cross-term indexing on output, and misc cleanup
    • Fix bug in add_cterms()
    • psfplugin: cranked minor plugin version now that cross-term code is enabled
    • Added write support for cross-terms to psfplugin
    • Added code to MolFilePlugin to enable loading and saving cross-term info
    • Added cross-term read support to psfplugin
    • psfplugin: Fix cross-term rows/column init
    • Added support for storage of cross-terms
    • Minor tweaks to please MSVC
    • Updated pbctools with Olaf's new version 2.3.
    • Minor cleanup on the nucleic backbone identification code.
    • cranked version
  • VMD 1.8.7a36 (October 3, 2008)
    • Migrated angle/dihedral/improper informational output to BaseMolecule where it more rightly belongs.
    • jsplugin: corrected a bug in endian swapping and memory allocation
    • jsplugin: Added more diagnostic output for testing purposes
    • jsplugin: Added angle/dihedral/improper reading/writing code and wired up the new routines via the callback registration interface.
    • jsplugin: Added partial implementation of angle/dihedral/improper handling to the jsplugin code.
    • psfplugin: removed angle/dihedral/improper force related code bits since PSF files can't actually read/store such information at present.
    • psfplugin: cranked major version of PSF plugin now that it handles reading and writing angles/dihedrals/impropers. Still need to add support for cross-terms.
    • molefacture: Modify opls type definitions
    • molefacture: Add extra features for use with antechamber
    • molefacture: Fix usage of runante with molefacture
    • Added storage for angles/dihedrals/impropers in BaseMolecule, and matching code to load/save them in MolFilePlugin.
    • Added angle/dihedral/improper reading and writing code to psfplugin
    • If the user alters bond info with the mouse, we flag it has having been modified by the user, and thus it becomes "valid" and will be saved if the molecule is written to a format that can store bond info.
    • cranked version
  • VMD 1.8.7a35 (September 24, 2008)
    • Renamed all of the internal functions of the xbgfplugin to avoid confusion with the original non-extended bgfplugin source code/symbols/etc.
    • revised JS plugin format forward to the new form
    • Fixed missing static linkage scope declator
    • Fix cut/paste typo in occupancy/bfactor flag code in the molfile writing code. Pulled flag manipulation code outside of atom data field scatter/gather loops.
    • Enabled angle reading calls and matching flag setting logic
    • Added angle reader driver code into the MolFilePlugin interface in VMD. Still need to add matching data structures in BaseMolecule.
    • Added major version checking in the JS plugin reader.
    • psfplugin: More updates to psf angle reader code
    • psfplugin: Added basic code for the read_angles() and write_angles() APIs.
    • psfgen: correct bogus comments resulting from cut/paste
    • molfile plugins: fix types on read_angles() API
    • cranked version
  • VMD 1.8.7a33 (September 23, 2008)
    • Added a set of "data validity" flags to BaseMolecule which are used when structures are loaded, modified, and saved, to track what data fields VMD should be concerned with saving when writing to file formats that support "everything". It's wasteful for VMD to always pass on all data fields for writing by default since some of them are all zeros, or contain "guessed" data or properties that VMD is perfectly capable of guessing again at a later time. If the user modifies fields that were guessed, then VMD assumes that the whole field is now "valid" and that will cause it to be saved just as if it had been loaded from another file originally. This allows one to write structure building/verification plugins and have them capable of saving their results.
    • Fixed use of jsplugin version numbering macros
    • don't bother building the 32-bit Solaris x86 versions
    • Changed the carbohydrate ring finding code to use the NameList::typecode() routine to find atom name codes rather than the incorrect method that had been used previously.
    • applied Simon's patch to correct the lookups of atom names for the carbohydrate ring finding routines
    • molefacture: Fix a litany of annoyances with the protein builder
    • autopsf: Make better guesses about disulfide bonds in some cases
    • cgtools: doc changes wording tweaks suggested by anton
    • cggui: wording tweaks suggested by anton
    • cggui: revised some prompts per Anton's request
    • cggui: added a module to scale bond/angle constants in a CG parameter file that has been created. Taken from anton and optimized.
    • cggui: added documentation for a module to scale bond/angle constants in a CG parameter file that has been created. Changed all needed pictures to make it accurate.
    • correct a string concatenation bug
    • updated configure script to use CUDA 2.0 toolchain
    • jsplugin: Use major version number to control structure read/write feature
    • jsplugin: Fixed up more of the structure reading/writing code. The new code now seems to correctly read what it writes.
    • jsplugin: finished the structure writing block
    • jsplugin: Fixed a few bugs in the new structure writing routines, and added debugging output for the time being.
    • jsplugin: crank version when structure info is enabled
    • jsplugin: Added bond and bond order storage
    • jsplugin: Finished the structure writing block
    • Added SymmetryTool files.
    • Final version of measure symmetry. All printfs removed. Bugfixes.
    • jsplugin: Added code to compress the atomic data structure on-the-fly using hash tables to make unique name string lists, which are then indexed into by the data that's actually stored for each atom field. This closely mirrors what VMD does internally already. Ideally we'd go a few steps further storing a unique atom ID key for a unique combination of multiple fields, further reducing file size. We'll eventually want to provide the means to special-case things like bulk solvent atoms which will reduce storage even further.
    • jsplugin: fix typo, began adding structure data to the handle
    • modernized jsplugin initialization code.
    • jsplugin: normalized the console I/O
    • AK's patch for the case where the bonds variable is unset.
    • MeasureSymmetry: Improved generation of GAMESS standard orientation. Some cleanup
    • MeasureSymmetry: Made unique coordinate finding more robust. It is especially better now in finding connected sets of unique atoms. Smaller bugfixes.
    • Added new code to allow the paperchain representation to use the normal VMD color scale rather than the hard-coded gradient table.
    • Silence spurious output from the ring finding code.
    • refactored pucker coloring routines for carbohydrate structures
    • Updated comments about STL vector issue in the ring finding code
    • misc cleanup, and eliminated some non-portable C++ idioms
    • Cleanup of carbohydrate rendering code
    • MeasureSymmetry: Added determination of unique atoms. Added support for reorienting molecule according to standard GAMESS coordinate frame. Fixed a problem that occurs when two eigenvalues of the moments of inertia tensor are incitendally identical (or very similar). This leads to wrong assumptions about the symmetry of the molecule. However one can prevent this by checking the existence of rotary symmetry axes corresponding to the principles axes of inertia. If two eigenvalues are the really the same because of underlying molecular symmetry then there must be a Cn axis orthogonal to the two corresponding principles axes. A few smaller bugfixes
    • improved comments in volmap code
    • cranked version
  • VMD 1.8.7a33 (August 13, 2008)
    • Added the new spaceball source files to the MSVC builds
    • Get around the problem of MSVC 6.x not having any of the erfc() variants.
    • Enabled new polyhedra and carbohydrate representations in the MSVC builds
    • Added comment about the use of std::vector in the ring finding code
    • Migrated inclusion of the vector template into BaseMolecule.C rather than the headers, which was causing problems on MSVC.
    • Corrected missing include
    • eliminated MSVC warning
    • Added typecast to please msvc
    • Unpacked the coloring method menu by one level. Still much shorter than a flat menu, but easier to use than the fully hierarchical menu. More sorting is in order, but this is a first step in that direction.
    • Enable the new "polyhedra" representation in the default build.
    • Added a new "Polyhedra" representation which can be used to generate tetrahedral representations commonly used for inorganic structures. The code is a derivative of a short patch provided by Francois-Xavier Coudert. The algorithm finds all atom pairs within a user-supplied cutoff distance, and for the subset originating with selected atoms, draws polyhedra using all of the neighboring atoms as vertices. This initial (simple) implementation makes no attempt to avoid replication of vertex coordinates, and emits triangles independently of each other which can result in a significant amount of memory use when the cutoff distance is large. It would be a tremendous improvement to rewrite the rendering code to build non-redundant vertex arrays, and emit groups of rendering commands for each of the colors to be drawn. Elimination of redundant vertex data would decrease the size of display list data by factors of hundreds for cases with large cutoff radii and very densely packed silicon structures.
    • cranked version of the vmdtkcon package
    • Added AK's patch to prevent TkCon from getting caught in an endless loop if the current directory is deleted/unmounted out from under it.
    • cranked version
  • VMD 1.8.7a32 (August 7, 2008)
    • Changed the behavior of VMDApp::molecule_savetrajectory() so that when writing files with "waitfor all" specified rather than adding the I/O transaction to the molecule's I/O queue for the final completion step, the completion, file closure, and memory freeing occur synchronously as well. This prevents problems from occuring with analysis scripts that do significant amounts of file I/O within loops that never return control to the main VMD loop, where the I/O queue processing is normally handled. With the old code, it was possible for a massive number of outstanding I/O queue entries to accumulate, waiting only for their final close operations command and callback triggering, etc. The new implementation creates a new Molecule::close_coor_file() routine that's used both within the I/O queue handling logic as well as for the synchronous case in VMDApp::molecule_savetrajectory(). This eliminates the need for script developers to insert explicit calls to "display update" in tight loops that do lots of molecule file or trajectory output.
    • Added comments to the filespec setup in the selection writeXXX processing code.
    • Only emit timing stats if the I/O took longer than 3 seconds.
    • Added check for the atom name "OXT" in the structure analyzer.
    • cranked version
  • VMD 1.8.7a31 (August 6, 2008)
    • Added AK's irspec patch for OpenMP
    • Added AK's patches for irspecgui src/docs
    • gofrgui: updated docs
    • Fixed various C++isms in C source files
    • crdplugin: cranked minor version number
    • Applied Axel's patch to multithread the gofr/rdf all pairs histogram calculation.
    • inorganicbuilder: Made the wireframe for the device box thicker so its easier to see
    • Fixed animation behavior so that single-step commands don't wrap around when the animation mode is set to "once". This affects the behavior of the GUI, the text UI, and Spaceball devices.
    • namdenergy: Add amber defaults when a parm file is loaded
    • namdenergy: Fix docs about using amber with namdenergy
    • Applied Axel's patch to correct integer truncation that could create bad results for measure gofr.
    • Applied Simon's patch to alter the maximum pucker sum in relation to 0.6154 radians which has significance for perfect tetrahedral bond geometry (see Hill paper).
    • Fixed another C++ism in gamessplugin.
    • gamessplugin: Fixed illegal use of C++ syntax in a C source file
    • Fixed bug in crdplugin where trajectories without box information were lacking line feeds between timesteps.
    • Added movie maker return codes for use by text interface callers Added placeholder safety check to prevent "snapshot" renderer from being used when VMD is running in pure text mode with no windowing system.
    • vmdmovie: improved the performance of the cleanframes proc across the board
    • vmdmovie: Cranked version number, added parameter to text mode interface to select movie type, and did some misc cleanup here and there.
    • namdgui: Better defaults for some variables.
    • molefacture: Fix masses written by topology file generator
    • Added a comment for the "hydrophobic" selection. Andrew chose the residues from Branden and Tooze (pp6-7)
    • Fixed unprotected modification to the plugin ABI
    • Added parameter scfiter to struct molfile_qm_timestep_t. In a QM simulation for each trajectory point (i.e. optimization step) a number of SCF iterations is performed until the energy converges for this geometry. If we want to make use of the stored scfenergies for a given timestep we also have to store the number of iteration for the timestep.
    • inorganicbuilder: Fixed some problem in the addMaterial interface
    • cgtools: added a script that i've tweaked from anton that extracts values for bond and angle parameters of a CG molecule from an all-atom simulation of the same molecule.
    • cgtools: cleaned up some code that wasn't deleting selections, and code that was unnecessarily creation atomselect macros.
    • resptool: Correct the ESP intermediate file format. Fix the autodetection of RESP binary.
    • paratool: Fix bug that would pick the wrong element from a the parameter list after selecting it with the mouse.
    • cranked version
  • VMD 1.8.7a30 (June 20, 2008)
    • Changed Spaceball behavior when the display projection is in orthographic mode, so that rather than translating in Z, we scale the molecule. This seems to match user preference for most people. We'll make this a user-selectable mode toggle eventually.
    • updated comments in the Spaceball code.
    • MeasureSymmetry: fix compiler warning.
    • Further improvements for animate mode with regard to varying rendering load. Still needs a timer to normalize the input by frame rendering time.
    • Capped the maximum allowable Spaceball trajectory animation stride to 20 by default. This needs to be a user-defined parameter.
    • Added some notes to the current Spaceball code documenting things that need adjustment.
    • Applied Olaf's pbctools bug fixes to correct for 'segid' rather than 'segment'.
    • Added a help button and text and image for docs
    • inorganicbuilder: Added docs and image files for docs
    • mergestructs: Added a help button and text and image for docs
    • Added "TDCONNEXION" configure option used to enable support for the 3DConnexion MacOS X device API.
    • Enabled the 3DConnexion SpaceNavigator API in the MacOS X builds by default.
    • Notes on MacOS X single-threaded event handling issues for the SpaceNavigator
    • Added support for 3DConnexion SpaceNavigator on MacOS X
    • gamessplugin: Making all functions static since they are not supposed to be used elsewhere.
    • gamessplugin: Fixed bug that would prevent proper reading of # of processors and memory for some versions of GAMESS. Added a debugging output function that makes it easy to compare what's in the file and what was read. The basis set info is now read by default, before it was only read for single point runs.
    • cionize: Open the GPU device prior to starting timers, as there can be an artificial delay during the first open call depending on whether or not X-windows is running.
    • cionize: Added a 64-bit build with Intel C/C++, CUDA, etc.
    • cionize: added BENCH statements for profiling
    • cionize: eliminated the Intel C/C++ libimf.so dependency
    • cionize: added small bin kernel
    • cionize: added setup and cleanup routines for cuda short-range and long-range parts
    • cionize: factored short-range part into a driver routine that calls either some CUDA kernel or an optimized sequential version or a fallback version
    • cionize: factored setup/cleanup for geometric hashing from short-range routine
    • cionize: fixed bug that fortunately never manifested itself
    • cionize: added data for sequential short-range part, geometric hashing
    • cionize: added setup and cleanup routines for cuda short-range and long-range parts factored large bin kernel into setup/cleanup and pre/post calls
    • cionize: added mgpot_cuda_binlarge.cu removed -DMGPOT_GEOMHASH because it is now defined internally
    • cionize: Eliminated include of cutil.h so we can compile with MCUDA
    • cionize: rearranged data structures and routines to prepare for short range cuda kernels
    • cionize: modified clean and added veryclean targets
    • MeasureSymmetry: Added comparison of bond orientation for each atom. This can distinguish for example if the orientation of a double bond in the transformed image atom is different than in the original position. It cures the falsepositive detection of additional symmetry elements for instance in some antiaromatic systems. Also fixed a bug introduced when I got rid of the gridsearch that would in somme cases lead to wrong idealized coordinates.
    • cionize: Updated Makefile.specialbuilds to use our CUDA 1.1 install by default.
    • cionize: Added new 'linux-icc-cuda-thr' build target
    • cionize: Some loop unrolling combined with shared memory copying to reduce global memory copying gives significant performance improvements on both the GT200 and Tesla D870 even though the register count swells from 40 to 58.
    • cionize: use latcut04 to experiment with loop unrolling
    • cionize: Attempted many optimizations in latcut03. major optimizations: SHMEMCOPY - Copy half the amount of subcubes from global memory on each inner loop iteration and shift the shared memory storage. This does not decrease time and it uses more registers. SHIFT - Replace int multiplication by int powers of 2 by bit shifts. This uses 3 fewer registers but slows down computation on both Tesla and GT200 cards. CPARM - Read srad and padding from constant memory rather than passing them as parameters. This does not change the register use and does not appear to change the time. minor optimizations: WTRAD - Pre-compute (8*srad) appearing in inner loop. Doesn't make a difference to runtime or register use. THRIDX - Change tx, ty, and tz to macro expansions of threadIdx.x, etc., rather than variables. Doesn't make a difference. built in: - Calculate "tid = (tz*4 + ty)*4 + tx" as flat thread ID outside of the main loops, rather than inside as "isrc", since tx, ty, and tz don't change. Also reuse at end of kernel for indexing global memory potential to write. Doesn't seem to make a difference.
    • cionize: generate cubin output for cuda files
    • cionize: changed text output title
    • cionize: minor change to text output
    • MeasureSymmetry: Made execution 2-10 times faster (depending on molecule) by eliminating gridsearch. Improved robustness by comparing atom types instead of just chemical elements. Added more comments
    • cionize: CUDA thread blocks are no longer assigned to padding subcubes
    • cionize: latcut02 is cleaned up copy of latcut01
    • cionize: select mgpot cuda kernels from command line
    • Reverted an unintentional change to the "VMDSPACEBALLPORT" environment variable tests that occured during a global search/replace in the source code. With this fixed, one can use multiple Spaceballs concurrently, with some coming from X-windows, and others coming from serial ports.
    • fix builtin "spaceball" help text
    • cionize: Lattice cutoff computation on GPU works. Requires padding around all edges with one layer of 0-charge subcubes. For now, each thread block corresponds to a subcube; test for early termination if subcube is padding.
    • cionize: fixed mgpot lattice cutoff host to device memory copy, start index for weights, qgrid offset
    • cionize: mgpot will use cuda automatically
    • cionize: fixed bug with weight indexing in long-range lattice cutoff
    • xbgfplugin: Increased maximum number of bonds to 16.
    • timeline: Fixed paste-typo bug
    • MeasureSymmetry: Add RMSD between original and idealized coordinates to the TCL return string. More comments.
    • MeasureSymmetry: Enhance robustness of search Handle rotary reflections properly in all cases. Cleanup
    • cranked version
  • VMD 1.8.7a29 (June 9, 2008)
    • The SpaceballTracker and SpaceballButtons UIVR devices are now always compiled in.
    • Added new code to allow the console Spaceball device to be used as a VMD tracker device, for use with the UIVR tools akin to how the haptic devices are used. The console Spaceball code now has a new "tracker" mode, which just stores incoming spaceball events for reading by the SpaceballTracker and SpaceballButtons classes. The .vmdsensors config lines for the local Spaceball device are: device SpaceballTracker sballtracker://local/vmdlocal device SpaceballButtons sballbuttons://local/vmdlocal
    • Added new SpaceballButtons class for use with the console spaceball device.
    • cionize: lattice cutoff cuda kernel setup/cleanup and condense/expand routines
    • cionize: added data for lattice cutoff cuda kernel
    • More Spaceball cleanup
    • The Spaceball UIVR object is now compiled-in in all cases since we have code that's "always on" in the windowing system drivers now. As a result the space ball source files are now built into all builds and so a number of places in the code needed cleanup and portability improvements which are now taken care of.
    • Redesigned the Spaceball animation velocity scaling to make use of the animation playback speed control in addition to the step size. The control now seems very usable all the way from very slow playback rates all the way up to very fast ones.
    • Added a new 'spaceball animate' command and matching input control mode to allow the spaceball to be used as a jog/shuttle controller for playing VMD trajectories
    • cionize: preparation for introducing additional cuda kernels
    • eliminate compiler warning
    • Better defaults for Spaceball rotation/translation speeds and null region values.
    • Added new "spaceball nullregion" command
    • Eliminated compiler warnings
    • Added spaceball Tcl command source file
    • fix missing CVS revision ID tag
    • cionize: clean also removes gpuionize
    • renamed the old "SPACEBALL" configure option and corresponding "VMDSPACEBALL" conditional compilation macros to "LIBSBALL" and "VMDLIBSBALL" respectively, in order to differentiate the old direct I/O LibSBall spaceball functionality from the new implementations based on windowing system events, XInput, and other input libraries that also support Spaceball devices.
    • Added new 'spaceball sensitivity' command
    • Implemented new "spaceball" command, to accept spaceball mode changes, sensitivity adjustments, input modes, and so on.
    • Added new Spaceball "user" mode that reports events via TextEvent callbacks.
    • cionize: eliminted warnings
    • cionize: correct race conditions in multi-threaded MGPOT part
    • cionize: Removed all calls to abort(). Now errors in MGPOT propagate back and return an error value to the top level calling routine.
    • cranked version
  • VMD 1.8.7a28 (June 7, 2008)
    • Abbreviated the X-windows ClientMessage device detection message.
    • MeasureSymmetry: initialize stack variable
    • Made the XInput startup code less chatty, it only announces when devices are found, rather than when they aren't found.
    • Added a build setting just for CUDA test compiles of 'cionize'
    • MeasureSymmetry: Pretty up things.
    • Updated Spaceball event handling loop so that we accumulate inputs for all of the queued spaceball events since the last redraw, rather than throwing away all but the most recent input. This change makes the input behavior much smoother with wildly varying scene complexity and results in an approximate constant angular rate of rotation or linear rate of translation for a given user-applied Spaceball torque/deflection. We could do even better by adding timers to the code, and scaling rates by the time since the last input event, but this seems to be sufficient at the present moment.
    • MeasureSymmetry: More function moving into logical order. Pretty up more (Changed order of functions in the file). This is a fairly big change but it could not be cut into smaller ones: Previously the symmetry guess was based on a elements that were found in a single pass. The biggest problem with this is to decide which symmetry elements to keep and which to discard, based on their score. While the point group guess, relying only on certain key features, was generally good, the number of found elements was often wrong. In case additional elements were found this could totally screw up the idealized coordinates. Now we are passing through the element guess in a loop in which we only keep the elements with a really good score and idealize them. The subsequent generation of ideal coordinates will definitely yield "more symmetric" coordinate set than the original one. In the next pass we use these improved coordinates for guessing the elements and we will probably find a few more this time. This is repeated until the number of found symmetry elements converges. The tcl command now also returns a summary string of the found elements along with a string with elements that are missing wrt the ideal number for the guessed point group and with a string containing additional elements that would not be expected. This can provide good hints that something might be wrong with the guess.
    • updated URL for check sidechains plugin home page
    • autoionize: forgot to change back name used during testing (autoionize1 vs. autoionize)
    • cranked version
  • VMD 1.8.7a27 (June 5, 2008)
    • Silence debugging info in spaceball event handler
    • Change XInput spaceball device axis mapping to assume a direct mapping. Added code to skip over the "evdev brain" XInput devices found on Xorg servers since they aren't usable devices for our purposes. Prettied up the device enumeration messages and formatting.
    • The Spaceball.C source file is now always compiled in, since we now support various native windowing system-based 6DOF input device mechanisms like XInput, ClientMessage, and other schemes that don't require any device-specific serial I/O code to be compiled in. At present all of these devices get mapped to the VMD Spaceball input mechanism, but we may want to generalize this somewhat to allow support for multiple devices simultaneously, etc.
    • Completed an initial implementation of XInput support for Spaceball 6DOF devices. With minor tweaks, the same logic will work for dial boxes, tablets, and other input devices that are supported by the XInput extension.
    • Added XINPUT option to all of the normal x86 linux builds.
    • Built up the XInput device handling implementation significantly
    • Added new XINPUT compile time configuration option to enable/disable support for the X-Windows XInput Extensions mechanism for advanced input devices such as Spaceballs, Dial/Button boxes, Tablets, etc.
    • Added MacOS X 32-bit Intel text only build target
    • Made XInput device attach more robust
    • Improved XInput device list code
    • Added skeletal XInput based 6DOF device I/O code with similar structure to the X-Windows event-based Spaceball interface.
    • Added comments to X-Windows Spaceball driver event decoder
    • Let the X-Windows Spaceball driver do window focus processing for us, except when the user sets the environment variable VMDSPACEBALLXDRVGLOBALFOCUS which will allow VMD to keep Spaceball focus all the time regardless of the X11 keyboard/mouse focus.
    • Eliminated redundant code
    • Apply mouse/keyboard focus state to the processing of Spaceball/Magellan/SpaceNavigator events from the windowing system.
    • Additional tweak to SpaceballTracker messages
    • Updated Spaceball device open messages to better indicate which driver interface/method is being used to talk to the device.
    • Added code to merge direct spaceball and windowed spaceball events if we happen to have two devices attached using different interfaces.
    • Move CUDA device enumeration earlier in the startup process immediately after the CPU and memory enumeration code.
    • pretty up CUDA device enumeration
    • Updated the main Spaceball event handling code to deal with events from both the host windowing system as well as from the direct I/O libsball driver. Ideally we'd beef this up even more to deal with multiple simultaneous devices in a nice way, but even the windowing system drivers are currently pretty weak in that regard.
    • Added a bit more safety checking for initialization of the spaceball X-Windows driver. Added an environment variable override to disable it if necessary.
    • Added X-Windows support for 3DConnexion SpaceNavigator, as well as all of the older Magellan, and Spaceball devices using the Magellan style X-Windows driver using Xlib client messages.
    • timeline: All-residue user-defined function via entering function name (function must exist somewhere, can be in any name space) Definable analysis frame range Default user definable function set, exisits in global namespace. (May change this to very-unlikely name, but should keep as instructs user).
    • MeasureSymmetry: cleanup
    • Added workaround for a bug in the MacOS X linker when compiling for X11+OpenGL rather than using the native Aqua windowing system.
    • Fixed 64-bit MacOS X ifdefs. Disabled the use of OpenGL extensions for 64-bit MacOS X builds until more details are ironed out.
    • Updated build config for 64-bit MacOS X target using X11/OpenGL
    • Added support for 64-bit builds on MacOS X. At present, MacOS X doesn't include a version of Carbon for their 64-bit ABI, so 64-bit VMD builds have to be done either for text-mode only, or they must be classical X11 based builds rather than using the native Aqua windowing system interfaces. When building for X11, matching X11 versions of FLTK and Tcl/Tk must be linked against. Until Apple releases a 64-bit ABI version of Carbon, or the Tcl/Tk maintainers port Tk to use 64-bit-capable Cocoa instead of Carbon, there's no other option.
    • Added MacOS X 64-bit build configurations and configure script logic. Currently, 64-bit MacOS X builds are limited to X11 or text mode only due to the lack of a 64-bit ABI version of Apple's Carbon framework, or a version of Tcl/Tk that uses Cocoa rather than Carbon.
    • Added a 64-bit build target for MacOS X, so we can do text-only and X11-based builds, despite the lack of a 64-bit Carbon framework that we'd otherwise use for a native aqua version of Tcl/Tk. For now, all 64-bit MacOS X builds have to use X11 or be text-only.
    • Updated the bigdcd script to Axel Kohlmeyer's new version which incorporates the key improvements people have made over the last couple years with a cleaned up interface and docs.
    • Applied AK's fix for the HOLE homepage URL
    • Applied AK's fix for the histogram build for 'measure gofr'
    • Fixed pkgIndex.tcl for autoionize plugin
    • Raised optimization level for 64-bit Solaris x86 builds
    • MeasureSymmetry: Made idealization more robust and efficient.
    • molefacture: Change tickmark size in dihedral slider
    • molefacture: Change resolution of dihedral slider
    • cranked version
  • VMD 1.8.7a26 (June 1, 2008)
    • Fixed a bug in the CUDA device enumeration code that skips emulation devices
    • Added the 'jsplugin' fast trajectory format to the default builds
    • Added new VMDApp methods used by the Molecule class to inform the main event loop when background I/O is going on so that the CPU throttling code remains inactive until the background I/O is complete for all molecules. With this change one can use VMD interactively and achieve background trajectory I/O rates that approach the performance achieved with the blocking "waitfor all" loading parameter. Using "waitfor all" is still the best way to achieve peak I/O rates, but this eliminates one potential performance bottleneck when people are doing interactive analysis jobs and the like.
    • Fixed the main event loop logic so that the anti-CPU-hog code allows background I/O to progress at full speed when display update is off. An improved approach would consider background I/O independently of the display update mode.
    • Fixed bug pointed out by Peter where VMD would crash if measure bond was called with an empty list instead of an atom index.
    • cgtools: Fix protein cgc file to include glycine hydrogens in with the backbone bead
    • Added performance instrumentation code for coordinate I/O routines
    • Updates for Solaris x86 builds
    • qmtool: Fixed small bug in the Gaussian file reader. Added comments.
    • added casablanca to build script
    • Added missing documentation for a couple of arguments to the volmap ligand command.
    • MeasureSymmetry: Added inversion center to the returned TCL list. Fixed a bug that in some case would return an axis with length zero.
    • MeasureSymmetry: Improved generation of idealized coordinates. Fixed a bug in the idealization of symmetry elements.
    • MeasureSymmetry: Switched on and improved idealizing of symmetry elements.
    • runante: Modify opls typing to not overwrite current charges
    • runante: Allow user to keep charges if desired
    • Applied Simon's patch which reverses the colour scale and also fixes a bug in the calculation of the puckering parameters.
    • MeasureSymmetry: Return rotary reflection to the user.
    • MeasureSymmetry: Returns idealized coordinates now. The coordinated are generated by taking the average if each coordinate and its transformed image for each symmetry element (currently only planes, will add axes soon).
    • Added VMD's "residue" index (internally determined unique residue ID) to the atom pick output.
    • cranked version
  • VMD 1.8.7a25 (May 16, 2008)
    • AK's patch to workaround GCC 4.x issues with pointer aliasing
    • Added safety check to make sure no stale atomselection is used.
    • Fixed bug that would crash VMD when volmap ligand is accidentally run with a molecule that contains no frames.
    • VolmapCreate: Fixed memory leak Added comments Renamed a variable for clarity
    • MeasureSymmetry updates: Reorganized some parts of the code. Improved prediction. Better output. Store weight and overlap score with the found planes and axes.
    • Fixed a bug eliminating these annoying warnings: "TclVolMap.C", line XXX: Warning: String literal converted to char* in assignment.
    • Added MeasureSymmetry source files to the win32 builds
    • Elminated non-portable fmin() call.
    • Changed call to non-portable random() to vmd_random().
    • Added RCS header and comments. Limited the number of atoms on which finding planes and axes is based to a given value (default=100). Now you can also feed large structures into the algorithm without locking the machine. Doxygenized some comments
    • Added MeasureSymmetry.[Ch] to the build.
    • Added "measure symmetry" command which guesses the pointgroup of a selection and returns the according symmetry elements (mirror planes rotary axes, rotary reflection axes). The algorithm is fairly forgiving about molecules where atoms are perturbed from the ideal position and tries its best to guess the correct point group anyway. The 'forgivingness' can be controlled with the -sigma parameter which is the average allowed deviation from the ideal position. Works nice on my 30 non-patholocical test cases. what pathological means in this context will be explained in the docs when I add them. If you feed the algorithm with the ribosome it's going to compute for 400,000 years I guess, but for the biggest symmetrical things in my test set (C60/C70 fullerenes) it takes 3s. Smaller molecules often take only a few milliseconds. But these times can probably be still reduced.
    • Added command 'measure transoverlap' which computes a score value for the structural overlap of a selection and it's image that was transformed according to the given transformation matrix. This is the underlying command for checking symmetry elements.
    • timeline: Update combining several checkins from (personally maintained) svn, much cleaner, but not such a major resturcture that greatly helped by multi-checkins to CVS. features: "free selections" (arbitart selections, Hh-bonds provided as example), user-defined per-residue functions (e.g. measure contacts) coding: generic per-res property and delta-per-res (e.g. done slightly sanely) ; switchable debug messages (via function edit) Problems: Features slow and hard to use for users, but need to get some feedback on borken things, so must checkin. Hope to get things presentable / usable in next days . Needed: Merge performance, interface for builtin/user-defined functions so one way to register functions. GUI / text UI to show which loaded / available at startup. Move user-defined per-residue to name-of-function via type in function, provide test option on tiny selection (provide adhjustable guess) Debug silencing via proc in place. hardcoded per-res user procedure working. The chosen measure command is slow. Reminds should be more sparing on doing recalcs. H-bonds working, getting 2D graph. improvement, generalization, and move away from selection-text-based indexing still needed. But 2D graph looks good.
    • Added safety checks to measure inertia and measure pbcneighbors to prevent running with stale atomselections, i.e ones that refer to a deleted molecule.
    • Added safety checcks into vmd_gridsearch3, so that it is not run with empty atom selections.
    • autoionize: fixed slow inner loop that selects waters to replace
    • Simon Cross and James Gain's patch to use cold to hot color ramp for pucker coloring of carbohydrate structures.
    • molefacture: Fix bug reported by Jan with residue name lengths
    • correct function signature ambiguity for fmod()
    • Ring coloring based on Michelle's new coloring scheme. The current implementation calculates the Hill-Reilly puckering parameters and then maps x, the absolute value of their sum (divided by a suitable guess at the range of sums), onto RGB(x) = x, 0.5, 1-x. This gives nice blue and orange colours for the 18 ring glucose chain.
    • ring utils: General cleanup, conversion of arithmetic to single precision for use of VMD vector routines.
    • Pretty up CUDA device enumeration a bit more
    • Added tests and reporting of overlapped I/O during CUDA device enumeration
    • Updated the CUDA device enumeration routines for CUDA 2.0, improved the display of device attributes, etc.
    • autopsf: Add some extra aliasing for nucleotides suggested by leo
    • Improved measure command usage output for better readability
    • Added new "measure inertia" command that returns the principle axes of inertia.
    • Updated documentation for display commands
    • Eliminated more redundant Pi constants and degree-to-radian macros
    • Make gofr code use VMD_PI constant
    • Applied AK's bugfix when calculating the r values for measure gofr
    • Applied AK's patch to enable compilation with Python 2.4.x
    • Added docs for hbonds plugin
    • more updates to feature/bug fix lists
    • Improved error message reporting for Tk menu registration code
    • cranked version
  • VMD 1.8.7a24 (April 29, 2008)
    • Eliminated compiler warnings about volmap parameters hiding class member variables, and a problematic literal string conversion.
    • Eliminated compiler warnings about gradient parameter hiding class member
    • Eliminate compiler warning on Solaris
    • Eliminated unnecessary display command objects
    • Corrected projection of surface normals into world coordinates for isosurfaces of density maps with non-axis aligned basis vectors, and/or opposite handedness coordinate systems.
    • Added a routine to return basis direction unit vectors
    • Added another variant of vec_scale() that accepts double precision values
    • cgtools: Added an option to assign Lennard-Jones parameters for a shape based coarse-grained structure based on the all-atom one from Anton. Also added docs for said option, as well as docs for the mapping code that I'd added a while back (but hadn't gotten the docs in for yet)
    • eliminate MSVC compiler warnings
    • fix floating point consistency for the PBC measure commands
    • Eliminate MSVC warnings
    • Fixed inconsistent floating point precision in the dipole and bond/angle/dihed/imprp energy measure commands.
    • Corrected floating point precision consistency
    • Made Gelato and RenderMan output classes use self-consistent floating point precision.
    • correct floating point constant declaration to avoid compiler warning
    • replace hard-coded constants in the ring finding code with locally defined macros
    • reduce memory usage for ring finding routines by combining the intree_flag and intree_parents arrays by using sentinel values for atom indices.
    • cranked version
  • VMD 1.8.7a23 (April 23, 2008)
    • Re-enable VRPN for the MacOS X builds after compiling the client library for MacOS X 10.4.x on Intel.
    • Eliminated a massive proliferation of various forms of PI constants, e.g. M_PI, M_1_PI, QUAT_PI, MYPI, and many others, in favor of VMD_PI, VMD_TWOPI, and VMD_1_PI, now defined in utilities.h Also eliminated a similar proliferation of macros conversion between degrees and radians, and so on.
    • Eliminate warning on MacOS X
    • Fix duplicate definition of M_PI on some platforms.
    • eliminated bogus include of iostream from ring linkage header
    • Create new variable declaration scopes in switch statement cases for correct compilation on Win32 with MSVC6.
    • prevent a problem with ambiguous overloading with recent C++ compilers
    • volmap: * Pretty up the code by replacing multiple object casts by a cast pointer. * Replaced the MYPRINTF by msgInfo stream. * Made file_writing independent of the VolMap class. There is a virtual write_map() method in the base class now that calls the write_dx_dile() (which will eventually be replaced by using molefile plugin). For the FastEnergy derived class there is another write_map definition that adds temperature and weight info to the dataset name string. * When the dataset name string is set now all double quotes are replaced by single quotes because double quotes delimit the name string itself. * Added more comments.
    • Added a function rotate_axis() to the Matrix4 class that rotates around a given vector. It also corresponds to the TCL command transabout which is currently defined in vectors.tcl. I created a TCL interface to the C++ version such that the TCL script version can go away.
    • Added safety checks to cap the maximum number of rings that we'll search for in the ring finding code. It was previously possible to crash the the program during ring finding when analyzing large silicon nanodevice structures with high connectivity.
    • Enable carbohydrate representations by default now that the ring finding code is run on-the-fly rather than at start.
    • Carbohydrate structure representation update from Simon Cross. The Twister code for rendering the ends of the ribbons when the "start from ring centroid" option is selected has basically been completely re-written. The new implementation actually starts the ribbon at a point X which is lies on the plane formed by the ring centroid and the ring normal. X is chosen to be as close to the point midway between the centroid and the last atom on the path as possible. This is cheating a bit, but it does bring the final sections of all ribbons arriving at a single ring into a common plane so that they line-up nicely. Any possible gaps where the ribbons meet are filled in by rendering a small circular disk (actually it's a regular dodecagon).
    • Carbohydrate default ring search size patch from Simon Cross. Simple patch to reduce the default maximum ring size from 20 to 10. This just reduces the possibility of really pathalogical molecules files causing problems by having huge numbers of rings. Perhaps less necessary now because the BaseMolecule clean-ups also mean that the ring finding code isn't called by default (Twister or PaperChain already recalculate the results if the maximum ring size or path length differ from the current settings).
    • Carbohydrate structure analysis patch from Simon Cross. * Removal of call to find_small_rings_and_linkages so that ring finding code is only run on demand. * Fix missing bracket in comment. * Fix small but bad bug in back edge finding code (parent in the spanning tree was being stored very late, resulting in some back edges being missed). * find_small_rings_from_partial(...) modified to excluded barred rings (i.e. ones which are crossed by a single edge). This speeds up ring finding quite a bit since a lot of cases can be quickly discarded. It also reduces the number of rings found in highly linked molecules. * Change ring orientating code to look for "C1" or "C1'" after the oxygen atom, rather than trying to guess the first carbon by looking for links to carbons outside the ring. I'm still not 100% sure that this is a good part of the patch. The old system failed to orientate rings quite often (for example, if the ring was bonded to another ring via something other than a carbon) but the new system relies on the carbons being labelled nicely in the files. A fair number of the test files I have don't. However, at least the new method is predictable and gives the user some more control over the orientation (i.e. they can orientate the rings themselves by changing the labels on the carbons next to the oxygen). * Ring linkage finding code modified to ignore atoms which belong to multiple rings. The ring finding code implicitly assumed that atoms belonged to at most one ring and produced some spurious links between rings which shared atoms as a result.
    • Added notes file to docs subdirectory, with informal todo list, people assignments for plugins, etc.
    • Fixed missing timer destroy call
    • compact Tcl interface code
    • Removed the update_internal (a misnomer anyway) from VolMap. All that's left now should in some way correspond to stuff that is in VolumetricData.
    • Deleted further functions from the VolMap class. It is almost ready now to get replaced by VolumetricData.
    • Added a timer for ILS for subsequent speed tuning
    • Set menubutton width to avoid truncation in OS X, for the plugins: colorscalebar, dipwatch, molefacture, multimolanim, irspecgui, gofrgui, dowser, contactmap, clonerep.
    • volmap: Eliminated dead code.
    • cranked version
  • VMD 1.8.7a22 (April 18, 2008)
    • Fix timestep memory leak introduced with the recent reorganization of the Animation class, timestep storage, etc. Timesteps were not getting deleted properly when their parent molecules were being deleted.
    • biocore: made the error message more descriptive when a login fails
    • Fixed documentation for exectool, which was still using the old namespace
    • Moved the material change command immediately prior to the ribbon rendering commands. Coalescing rendering operations into compact groupings makes addition of mutex locks for multithreading much easier.
    • Improved readability of the ribbon/cartoon spline computation loops, reduced int/float conversions, and explicitly replaced a few divides in favor of multiplies.
    • Added performance measurement instrumentation for the ribbon extrusion code.
    • More work on control point precalc code.
    • Added code to precalculate control point lists used by ribbon/cartoon reps, to help improve interactive trajectory display performance. This will ultimately eliminate all of the on-the-fly traversal of the atoms in residues presently being done to identify control points. It will also allow VMD to use more robust control point selection criteria that would otherwise be too costly to perform at redraw time.
    • update comments on fragment finding code
    • Start preparing for precalculated control point storage
    • Fixed some out of date comments about the color index ranges, and updated examples to query color ranges rather than hard coding them.
    • ccp4plugin docs: Added a missing space.
    • xsfplugin docs: Added a missing period.
    • cranked version
  • VMD 1.8.7a21 (April 3, 2008)
    • Updated pbctools makefile for the current version number
    • Updated to pbctools version 2.2, based on the latest source and documentation updates from Olaf Lenz.
    • Adjust benchmark grid size and thread block size to get more accurate performance measurements for next-gen GPUs with differing numbers of SMs.
    • plugin docs: Added new "plugin development best practices" document.
    • UIText fixed missing "of" in python support message
    • Fix missing linefeeds in the built-in help for the "measure energy" and "measure surface" commands.
    • plugin docs: Added basic info about the intricacies of shared library handling on Unix and Windows, with practical examples of why we do things the way we do in the VMD plugin system.
    • Added CVS ID tags to all of the plugin programmer's docs.
    • Eliminated holdover code from old residue bond logic.
    • Added ssrestraints and rnaview to main plugins Makefile.
    • Added rnaview plugin, which calls the external program RNAView and parses its output, creating a bpseq file with base pair information (or an extended bpseq file with a classification of the base pairs). This is simply a helper plugin to be used by ssrestraints at the moment.
    • Added ssrestraints plugin, used to create an extraBonds file for NAMD to restrain secondary structure of proteins or nucleic acids in a simulation.
    • Fix uninitialized curframe member variable found by valgrind.
    • cranked version
  • VMD 1.8.7a20 (March 26, 2008)
    • First full-up test with CUDA on MacOS X, with full graphics etc on 10.5.2.
    • Starting with MacOS X 10.4 we can use dlopen(), dlsym(), dlclose() natively, so there's no need to emulate these anymore. We'll leave the code in place, but for all current builds we're targeting 10.4 or later anyway.
    • MacOS X 10.5.x changes the behavior of putenv() such that it no longer makes copies of strings added to the environment. Changed the environment initialization code to use setenv() instead, since it copies parameters and provides a cleaner interface to work with.
    • Update render code to support Tcl/Tk 8.5.x versions of the Tk_PhotoSetSize() and Tk_PhotoPutBlock() APIs.
    • Olaf's fixes to vtfplugin correcting linkage scope of the internal plugin functions.
    • molefacture: Added comment about dealing with SPC water
    • molefacture: Fix the tert-butyl fragment, which had some incorrect bonds
    • molefacture: Start using measure commands instead of labels where possible to speed things up
    • molefacture: Add option to type for opls
    • cranked version
  • VMD 1.8.7a19 (March 20, 2008)
    • Applied Justin's patch to extend the list of default masses guessed by VMD. Added recognition of SPC water. The SPC water code may conflict with a residue in the PDB compound library, but we'll see how it goes.
    • Applied Justin's patch to write velocities when they exist, and when writing with a plugin that supports them.
    • Applied Justin's patch to add iterators to the Python atom selection interface.
    • New version of vtfplugin from Olaf Lenz.
    • namdenergy: Add ability to turn off switching
    • Fixed mismatched enum for error return check.
    • Added CUDA to Mac builds
    • doc: Eliminated mention of the "make_links" script which has been superceded by the "links" target in the top level VMD makefile.
    • Added CVS tags to doxygen pages, to be displayed at the end of each page.
    • Fixed documentation typo
    • cranked version
  • VMD 1.8.7a18 (February 29, 2008)
    • Changed Unix startup script so it no longer starts an xterm. The linux xterm issues w/ LD_LIBRARY_PATH create new cross-platform headaches, it may be preferable just to take xterm out of the equation as some people prefer running from their existing terminal console anyway. We'll try this and see who screams.
    • Attempt workaround xterm's behavior of stripping LD_LIBRARY_PATH in recent Linux distros due to setgid permissions. This problem also affects other apps: https://bugzilla.redhat.com/show_bug.cgi?id=246063
    • Further tweaks to rpath to make the shared library search path relative to the location of the installed VMD executable.
    • Applied Axel Kohlmeyer's patch for the LAMMPS plugin to allow it to correctly interpret both absolute and fractional atom coordinates.
    • added compiled-in linker shared library search path for libcudart.so when configured with CUDA support.
    • cgtools: fixed a bug that anton found where the output status wasn't being put into the box correctly (and was throwing an error instead)
    • cranked version
  • VMD 1.8.7a17 (February 21, 2008)
    • Check to see if LD_LIBRARY_PATH is set before attempting to add to it.
    • Trigger text interpreter frame callbacks when change_ts() calls occur.
    • Added Justin's patch to scan user-provided plugin directories before loading built-in plugins.
    • Corrected a problem with label redraws resulting from the previous patch reorganizing timesteps etc.
    • runante: Add antechamber plugin
    • mol2plugin: Fix bond order reading for 'ar' bonds
    • cranked version number
    • molefacture: Fix the proline parent fragment
    • molefacture: Add FEP features to molefacture from Jonathan Degois The implementation will likely be changed in the future to make it more user friendly
  • VMD 1.8.7a16 (February 19, 2008)
    • Added CUDA to default builds now that the redistributable shared libs are handled by the installers etc.
    • VMD startup script now manipulates the shared library search path to allow redistributable shared libraries to be found in the VMD installation directory.
    • Added handling for redistributable runtime libraries needed for things like CUDA, NetCDF or any other shared libraries that are vendor-provided and/or otherwise something we can't compile for static linkage.
    • cgtools: Added in ability to map a previously generated shape based coarse grain model onto an all atom model. This can then be called multiple times to replicate CG models many times on a large all atom system. Doc updates coming later to describe this in more detail.
    • report CUDA device clock rates and compute capability during device enumeration
    • Added more checking for the bogus emulation mode devices, and eliminate them from consideration early on in the device enumeration code.
    • Emit more info during CUDA device enumeration
    • mol2plugin: Add recognition for 'ar' bond order output from antechamber
    • Add a banner with the original idatm citation, and remove some unneccesary puts statements
    • cranked version number
  • VMD 1.8.7a16withcarbs (February 7, 2008)
    • test builds withcarbs
    • Catch the case where we've been given a CUDA 'emulation device', and ignore it as unusable for our purposes.
    • molefacture: Add the cyclopropane base fragment (it had been missing)
    • dowser: Fix help URL.
    • Add padding for 'volmap interp'.
    • Counted FLOPS, global memory references, and conditional assignments in the main fmtool CUDA kernel
    • molefacture: Fix bug in writing topology files with newly added atoms
    • timeline: Made less chaty on startup, marked debug messages as DEBUG, some others as Info)
    • Applied Justin's patch reorganizing timestep animation control. Rather than keeping an Animation instance in each molecule, keep just a single instance in VMDApp. Make Animation a UIObject so it can generate animation events as time elapses. Add methods to DrawMolecule to return current frame and override current frame. In this form, the Animation class is much more transparent: it doesn't hold timesteps, it doesn't maintain a current frame, and it doesn't have so much asynchronous behavior. This also fixes a bug that manifests itself when you load two molecules with different numbers of frames. Previously, if the molecule with more frames is top, and you clicked the arrow button in the GUI to start animating, the molecule with the smaller number of frames loops over those frames multiple times as the animation slider goes from left to right. However, if you manually drag the slider from left to right, the molecule with fewer frames will instead clamp its frame to the last frame once the slider goes out of its frame range. Thus you have two different VMD states for the same GUI state, which is inconsistent. It never really made sense to have two Animation instances anyway, since there's only one animation state. Store center of volume and scale factor in DrawMolecule, rather than in individual Timesteps. Recompute cov and scale when required. Use the algorithm from MoleculeList to compute cov and scale, where only selected atoms in displayed reps are considered. The new behavior is smarter about when to update than the old code, and doesn't replicate code in Timestep and MoleculeList for computing the center.
    • Eliminated the DrawMolecule wrapper methods that were replicating/exporting MoleculeGraphics functionality, in favor of teaching the callers to retrieve and work directly with the MoleculeGraphics class. Updated the Tcl and Python bindings as per Justin's patch.
    • Updated MSVC builds for current sources
    • only call the init routine for NumPy when it has been enabled in the build.
    • Applied Simon Cross's patch adding a maximum ring size control to both the PaperChain and Twister representation controls. However, since there is only one ring size per molecule having multiple representations introduces the problem of synchronising the values of the maximum ring size in the AtomRep values for each representation. If this synchronisation is not done then the list of small rings will get re-calculated every time a different representation is drawn. This patch increases the vertical screen space consumed by the graphical representations window, which is somewhat undesirable. We will need to review the GUI design again later.
    • inorganicbuilder: Wrapped uses of psfgen in psfcontext commands, to preserve any psfgen state the user may have created.
    • Applied Justin's patch to preprocess and remap the residue numberings for the data we send to Stride so that it doesn't fail, e.g. when the protein is preceeded by a large water block thus inflating the indexes to larger numbers. It should now work for any molecule with fewer than 10,000 total protein residues and 100,000 total protein atoms.
    • new version of view_change_render script posted.
    • mergestructs: Added psfcontext commands to preserve any user psf context
    • cgtools: The bond determination checkbox was doing the opposite of what it should have been. Changed the if to handle that. Also revised an atom selection to use the molecule id being passed in instead of always using top, per Anton.
    • Added support for an above/below stereo display mode for use with special stereoscopic movie encoders
    • Added code to print tracker orientation (disabled for now)
    • Corrected plugins that emitted diagnostic or error messages without self-identification at the beginning of message strings.
    • Added new 'mergestructs' plugin for combining multiple structure files into one.
    • saltbr: Close log file before throwing an error.
    • cranked version number
  • VMD 1.8.7a15 (January 3, 2008)
    • various build and config updates
    • cranked version number
  • VMD 1.8.7a14 (December 18, 2007)
    • inorganicbuilder: Changed naming conventions for relabeling structures according to the number of bonds to be "XX_#", for example SI_2. Also changed the parameter file output to use .inp extension, even though both .par and .inp appear to be used for parameters. Added parameter files for sio2, asio2, and si3n4
    • inorganicbuilder: Material library now stores a parameter file name, which can be used to copy a parameter file from the materials directory into the user's working directory, to make it easier to set up a simulation. No files are currently provided.
    • inorganicbuilder: Added code and GUI to allow each axis to be specified as periodic or non- periodic, for both specified bonds and boundary bonds.
    • I added a checkbox to the GUI so that renaming the atom types according to the number of bonds is now optional.
    • inorganicbuilder: Added options to retain file bonds, and updated the wrapped bond search to implement VMD's heuristic 0.6*(r1+r2).
    • Removed lower performance potential kernels from CUDA source.
    • inorganicbuilder: Atom type selection for building bonds is now a menu derived from the names in the currently-specified molecule, rather than just text fields.
    • timeline: NOTE: this is final transfer check in from Barry I. SVN directory Some scale change, (Now up to SVN rev 35)
    • timeline: Working on startup errors seen on Mac (from Traced sliders) Small edits to remove typo. current changes entered. Likely were just to get running at good speed (commented out puts), some small corrections Creates own font name, so is independent of other plugin (had been relying on Sequence Viewer/zoomseq to do this)
    • timeline: various changes and corrections
    • timeline: better menus. Threshold functions in menus.
    • timeline: Improved appearance, more room for other controls.
    • timeline: works on syndey (Mac), but outlines for bar and event (blue vox). The event box looks bad, since is made of many lines, not just outline.
    • timeline: struct is working added thresholding, function only (no gui) may not yet work some thresh graph graphing of threshold looks ok, shows max and min
    • timeline: highlight looks good, toggleable adding some demo files
    • timeline: decent packing
    • timeline: scrub label close
    • timeline: many bugs gone. button 2 scrub in progress
    • timeline: small changes (on laptop)
    • timeline: numframes + 2 gone. now to check out +1 cases
    • timeline: from VMD CVS tree 1.30, with some changes added not working as of this initial import. Plan to re-merge back to CVS tree after features added
    • timeline: The next commits will be of changes to timline.tcl that took place in Barry I.'s personal SVN directory. The 34 SVN revisions are combined here to 13 major revisions, which will each be checked into this CVS tree, along with the associated comments for each one (excepting references to extraneous README and test files not included here). These major revisions were made in March and April 2007.
    • Applied Simon Cross's patch moving the ring finding code into a new method and cleaning things up a bit.
    • Enabled Carbohydrate code for testing new round of patches.
    • eliminate unused variable warnings in benchmark code
    • Updated build for CUDA 1.1
    • Eliminated unnecessary display update call that was creating trouble with python callbacks.
    • inorganicbuilder: Reformatted Start screen, made spacing nicer and added a button Changed bond search method to use atom type instead of element Combined PeriodicBonds and SpecifiedBonds GUIs into one window
    • inorganicbuilder: Removed commented out code that is no longer used now that the Specific Bonds and Periodic Bonds commands have been merged. Removed Merge Molecules code that is now in Merge Molecules plugin. Added exact-charge adjustement to the charge correction code, so that, after charge adjustments are distributed evenly across all atoms, any remaining correction that is needed due to PSF rounding is applied to atom zero. Other bug fixes.
    • inorganicbuilder: Separated the angle and dihedral options when creating bonds.
    • SGI IRIX builds are disabled until we have another build box available
    • vtfplugin: Updated to Olaf's latest version. This update cures a problem on Windows, and closes a small memory leak.
    • molefacture: Get rid of hard-coded restriction on recursion depth for bond/angle/dihedral changes
    • Applied Justin's python module related patch.
    • inorganicbuilder: New GUI for resolving segment name conflicts when merging two PSF files
    • Added the ruler GUI to the Extensions-Visualization menu
    • ruler: By popular request, added a small GUI window to access the VMD ruler
    • Added Axel's element-by-element vecmul command.
    • added Justin's config for shared lib builds of VMD
    • This patch fixes up some inconsistencies that arise when building VMD with the SHARED option, adds -fPIC to config_shared builds on LINUXAMD64, and adds a vmd module available only when the program is loaded as python extension that takes care of proper VMD initialization.
    • added thread CPU affinity function (linux/NPTL only at present)
    • Added comments about processor affinity on MacOS X, Solaris, and HP-UX.
    • added win32 branch of cpu affinity query.
    • Added a 'vmdinfo cpuaffinity' query text command
    • Added CPU affinity query code for the main VMD process
    • Split vmd_numprocessors() routine into two separate routines. The vmd_numprocessors() routine allows user-defined overriding of the number of worker threads to use, falling back to detecting the number of available processors if no preference exists. The vmd_numphysprocessors() routine only counts the number of physically available processors, independent of whatever preferences the user may have, for use by code that needs to do things like set CPU affinity, and so on.
    • inorganicbuilder: Fixed bug where the material state was not available when loading a saved state... Also sorted material lists for uniform presentation in menus.
    • inorganicbuilder: Added parameter and GUI to force constructed devices to have an integer charge, so that they can be easily neutralized by the addition of ions. The current method of modifying the charge is to calculate the correction and then add 1/n times the correction factor to every charge. Another possible method is to scale all charges, but that may lead to larger changes in the charge. I'll have to consult with Alek to find out what method is correct.
    • inorganicbuilder: Set the plugin to return to the Start screen whenever the plugin window is opened/reopened. Replaced charges in .top files with more useful values
    • inorganicbuilder: Added a Clear Device button, to erase any currently-defined structure Fixed a bug where an old device structure (Draw Box) was not deleted when a new one was loaded Made the "Draw Box" function dynamic, so it occurs automatically whenever the structure changes. This removes the need for the Draw Box button, so that has also been removed.
    • Prevent the main VMD thread from getting bound to a specific CUDA device by running all CUDA kernels in their own host threads.
    • Added support for benchmarking single user-specified CUDA devices, or groups of devices in parallel
    • Added low-level code to allow benchmarks on specific CUDA devices.
    • Added CUDA device/host bus bandwidth benchmark
    • Added comments to the multiply-add benchmark code.
    • Added new 'vmdinfo' subcommands: 'vmdinfo freemem' returns the estimated number of MB of free physical memory 'vmdinfo numcpus' returns the number of CPU cores 'vmdinfo numcudadevices' returns the number of CUDA devices
    • please the compiler
    • Added CUDA benchmarking kernels to the build
    • Added the CUDA multiply-add benchmark to the 'vmdbench' command
    • Added the CUDA multiply-add benchmark to the kernels header
    • Added built-in CUDA-based GPU benchmarking routines for use in helping diagnose performance issues, etc.
    • Replaced inner DMA buffer copy loops with memcpy, added support for pinned/page-locked DMA buffer memory allocations, eliminated the child thread for thread 0 by running in the main thread instead. The new code performs and scales a little better. A 32-bit multi-GPU run on a test system with a dual-QuadroPlex (Quadro FX5600) achieves 157.4 billion atom evals/second, 1160.83 GFLOPS
    • Added the newest version of the direct Coulomb summation CUDA kernel into VMD. This version achieves 291 GFLOPS, 39.5 billion atom evals/sec on a single GeForce 8800GTX. A 64-bit multi-GPU run on a dual QuadroPlex test system with 4 Quadro FX5600 cards achieves 1078 GFLOPS. A 32-bit multi-GPU run on the system achieves 1108 GFLOPS and 150.3 billion atom evals/sec.
    • Explicitly added linkage against libtlshook.so since some versions of the GNU compiler/linker tools fail to find it for themselves at link time, even though it's in the same directory with the cuda libs.
    • qmtool: Minor syntax bugfix.
    • utilities: Exporting all commands so that they can be imported from other namespaces. Added a couple new commands.
    • inorganicbuilder: Revised formatting on block input windows
    • Added Axel's patch to fix a measure gofr frame range checking bug
    • inorganicbuilder: Added a Start screen to start building a device
    • paratool: Added proper namespace to call of a procedure that has been moved to utilities.
    • inorganicbuilder: Added File menu, with options to save and open a state file (for the plugin state, not the complete VMD state)
    • inorganicbuilder: Added menu options and GUI for viewing materials and adding new ones.
    • Added a built-in variation of the STREAM benchmark, and Tcl commands to access it. The benchmark commands will be very helpful in collecting performance information on new multi-core systems and compilers used to build VMD. Similar GPGPU benchmarks will be added as time goes on.
    • cranked version number
  • VMD 1.8.7a12withcarbs (October 5, 2007)
    • Enabled carbohydrate code for fresh builds
    • cranked version number
  • VMD 1.8.7a12 (October 5, 2007)
    • correct some non-portable gccisms
    • Disable force color update for the position based coloring methods, since the user might want to be able to turn this off. We can change the default behavior to enable color updates in the GUI to accomplish the same thing as necessary, but if we enable it in the code itself, then automatic updates cannot be turned off by the user. This is somewhat self-inconsistent as we'd normally want all of the trajectory oriented reps to update every timestep, but position can be an exception as users may want to color atoms by their original position rather than by their current position. For the other trajectory based coloring methods, there isn't a logical reason to do things that way.
    • A few additional improvements to the menu handling code.
    • Further cleanup of the name-based color method menuing code
    • Fix coloring method menu behavior, a few more places needed to do their tests by name rather than by index.
    • namdenergy: Add option to update selection every frame, so people don't have to do ugly hacks for this
    • solvate: Fix issues with mixed solvent types
    • cranked version number
  • VMD 1.8.7a11 (October 4, 2007)
    • Fixed DrawMolItem so that it correctly updates the display for coloring by positional, velocity, physical time, and user data per-timestep when animating or when using the draw multiple timesteps feature.
    • Added support for coloring by physical time (in a trajectory). Significantly reorganized the structure of the Coloring Methods chooser/menu. Hopefully the users don't kill me :-)
    • Added error checking for filepsec Tcl command arguments per Axel's patch
    • molefacture: Fix atom ordering for input to bondedsel
    • initialize user pointer to NULL before testing coloring method for user coloring modes
    • Fixed the graphical representations coloring method menus to correctly handle coloring method submenus.
    • Added new X/Y/Z linear position coloring methods and moved all of the position based coloring methods into a new "Position" submenu, and renamed the GUI menu name of "Pos" to "Radial".
    • cranked version number
  • VMD 1.8.7a10 (October 3, 2007)
    • Added several additional text builds
    • Removed old VMDVOLUMETEXTURE compilation macro now that it's always turned on. Added VMDPBCSMOOTH compilation macro to enable Axel's PBC-aware smoothing code by default for the subsequent test builds.
    • Removed old VMDVOLUMETEXTURE ifdefs. This is required functionality from now on.
    • Updated default VdW radii assigned to elements to improve the default behavior for commonly used ions by replacing the Bondi radii with CHARMM27 Rmin/2 parameters for elements that are commonly ions in simulated systems.
    • Significant update to the mouse handling code. The "mouse pick" command now takes strings instead of mode numbers. * There is no longer a distinction between "picking" modes and simple modes in Tcl. Picking modes have their own names, and no longer have a "submode" number. * To see if we're in addbond mode, the new way is: if {$::vmd_mouse_mode == "addbonds"} {} instead of: if {$::vmd_mouse_mode == 4 && ::vmd_mouse_submode == 12} {} The old way is no longer compatible. * To switch to addbond mode, the new way is mouse mode addbonds as opposed to mouse mode pick 12 * The old way is _still_ compatible (but may be obsoleted later) Internal changes: * enums are used throughout, there is no more reliance on arbitatry constants and order in which the modes are defined, etc... * some functions have been streamlined and/or removed.
    • Eliminate typecasts that used to be used to please archaic versions of Tcl etc.
    • Situs plugin: Use %g instead of %e for Situs output. %e was a bit silly, %g is more readable/debuggable and takes as little as 25% of the space
    • DX plugin: Use %g instead of %e for file output
    • Added 3 more demand-allocated per-timestep "user" data fields named "user2", "user3", and "user4", added them to the coloring methods list in the GUI, and changed the GUI to create a "User" submenu by splitting the GUI names and the internal strings into two separate lists. This is a reasonable way of implementing this in the short-term, although it add more code to the existing cruft we're maintining. A much better way of doing this would be to build all of this dynamically, but some non-trivial changes need to added to the atom selection classes to allow that to happen, so I'll see about doing that as a second step. Once they can be added and deleted dynamically, we could open this up for as many fields as we want, and we could keep the coloring method choosers relatively organized with more submenus.
    • Applied Axel's patch for (optional) PBC-aware trajectory smoothing.
  • VMD 1.8.7a9 (September 28, 2007)
    • molefacture: Add a nucleic acid builder (still a work in progress, but needs to be committed) Fix up prolines in the protein builder to look better
    • Updated the nucleic acid structure analysis and ribbon/cartoon rendering code to handle the new PDB atom names "OP1" and "OP2", which have replaced the older "O1P" and "O2P" atom naming convention.
    • Added ability do create Coulomb potential maps through the GUI Added more options for the output molecule (including a "same as input" option, now used as the default)
    • Applied Justin's patch to add get_visible / set_visible methods to python molecule module that turn molecules on and off. Make the selection keyword of molecule.write take an atomsel instance intead of a tuple.
    • Greatly reduced the acceptable error tolerance for the RMS fitting routine by default. The new tolerance is 1e-15, vs. the old tolerance which was 1e-5. The new code also accepts an environment variable VMDFITRMSTOLERANCE which will override the default fit tolerance.
    • changed Intel C/C++ flags to eliminate an undesirable FP precision reduction flag.
    • inorganicbuilder: Added a min and max coordinate display in the build window
    • inorganicbuilder: Improved formatting of Create Box exclusion window. Fixed bug where basis vector setting were getting reset in the Build Specific Bonds window. Reformatted the exclusion list so that all geometric exclusions are listed first, followed by the VMD selection exclusions, to reflect how the exclusions are actually applied to the structure.
    • inorganicbuilder: Revised GUI for other tasks, consolidated the molecule file dialogs into one function, and fixed a couple of bugs in the solvate routine which occur when the original box is rectangular
    • inorganicbuilder: Revised look of FindSurface window, consolidated more GUI code between windows.
    • inorganicbuilder: Revised the layout of the Build Periodic Bonds screen
    • Applied API changes creating timestep metadata structures and adding support for velocities, for use in trajectory read/write plugins.
    • update main plugin doc index
    • inorganicbuilder: Improved layout of the Build Structure window
    • inorganicbuilder: Added Basis Vector button to Specified Bonds and Find Surface atoms as well
    • inorganicbuilder: Added a routine to determine basis vectors from the CRYST record in the PDB and GUI code to put it in the Periodic Bonds task window
    • inorganicbuilder: Added bindings so that the displayed basis vectors get updated whenever the user changes any of the box parameters
    • multiseq: set mouse picking mode properly
    • multiseq: use new vmd_pick_event variable for picking trace
    • aligntool: use new vmd_pick_event variable for picking trace
    • contactmap: use new vmd_pick_event variable for picking trace
    • timeline: use the new picking trace variable
    • stingtool: use new vmd_pick_event variable for picking trace
    • paratool: use new vmd_pick_event variable and mouse modes for picking trace
    • resptool: use new vmd_pick_event variable and mouse modes for picking trace
    • Made all numeric fields only accept numeric input, print a warning if the user tries to use anything besides a positive integer integer for the box size, and pre-initialize many numberic fields to zero
    • reenabled SOLARISX86_64 builds on taipei
    • linux builds are now on RHEL4 (dallas), and Sx86 builds are now on taipei
    • fix unterminated keyword list in the SASA command
    • inorganicbuilder: Now gets CHARMM topology file from the readcharmmtop plugin, also fixes title of about box
    • zoomseq: updated atom picking trace to only use "Pick" mode
    • Rewrote docs for mouse pick callbacks Fixed general callback docs (was using obsolete Tcl commands) Fixed table placement in PDF, this was buggy (use [htp] rather than [htb])
    • mouse: added a ::vmd_pick_event callback for plugins to trace to get "pick" events. This callback is only activated by the "Pick" (old "user") mode and it's purpose is to discourage plugins from overloading other inappropriate picking modes (query, label, force, etc) as they have done in the past. The fact that plugins are overloading the wrong picking modes also prevented us from adding new pick callbacks without breaking compatibility.
    • Cranked version number
  • VMD 1.8.7a8 (September 19, 2007)
    • Added the "p" hotkey for the "Pick" mouse mode Rewrote picking hotkeys mouse mode calls to use readable strings instead of cryptic numbers
    • Added the Pick mode to the GUI Added mention in GUI of pre-existing hotkeys for the force picking modes
    • "mouse mode pick" is now allowed and goes into "user" pick mode (which from soon on will simply be called "Pick"). This is a first step towards renaming all the picking modes to have their own name.
    • mouse user mode: wired the user mode so that it now works as intended (previously it did nothing). Note: It's essentially just another name for the 15th "pick" mode, but it looks like and acts as if it were its own mode, which is not a bad idea.
    • Commented code to warn about importance of not altering the order in which picking modes are defined.
    • Cranked movie maker version due to bug fixes.
    • vmdmovie: Applied Jan's patch to correct the transparent surface rendering for movies made using Tachyon. Also fixed the behavior of the ::makemovie method intended for use by external scripts etc.
    • Cranked version number
  • VMD 1.8.7a7 (September 12, 2007)
    • inorganicbuilder: Switched the order of set env() and the source command
    • inorganicbuilder: Fixed the Help URL, and removed most diagnostic puts
    • Fixed inorganicbuilder makefile
    • removed 2 lines of dead code
    • sorted plugin order in makefile
    • paratool: Minor bugfixes Moved some commands to ::util::
    • qmtool: Some procedures were moved from ::QMtool:: to ::utilities::.
    • Added inorganic builder to the GUI extensions menu
    • Added materials directory to the distribution of inorganicbuilder
    • Added inorganicbuilder to the distrib targets
    • Changed code to call new measure surface VMD internal command, rather than the external compvacuum utility.
    • Applied Justin's patch to add velocities to the Timestep data structures along with atom selections and Tcl/Python bindings to query them.
    • Reordered include directives to prevent compilations of Python related source modules from generating warnings about redefinition of _POSIX_C_SOURCE
    • Moved functions trans_from_rotate() and print_Matrix4() from Measure.[Ch].
    • eliminated unused code fragment.
    • Eliminated compiler warnings on MacOSX
    • Force 32-bit builds on 64-bit host ABI when building the "LINUX" target, since RH9 machines are going away fast now...
    • Updated msvc6 project for recent changes and new source files.
    • Updated vs2005 project for recent changes and new source files.
    • Fix M_PI portability issue with new pbc vectors code.
    • Fixed minor nits that annoy msvc.
    • Added MeasureSurface to the build.
    • Added Robert's routines and Tcl bindings to find surface atoms.
    • Added Justin's multithreaded implementation of find_within().
    • Added initial implementation of 'pbwithin' selection using Justin's implementation that builds on top of the existing find_within() function. Some comparison should be made of the algorithm pbwithin uses with what's in pbcneighbors; it might be faster, more correct, or both to do pbwithin the way pbcneighbors does it. In any case, it is highly desirable to have this functionality available from the atom selection interface, and this gets us there until we go back and evaluate whether we can do it in a more intelligent way.
    • Added Justin's variant of the find_minmax_selected() routine to be used by the new pbwithin selection
    • Updated the implementation of measure_minmax() to eliminate the need for an atom selection reference, allowing more routines to be able to use it.
    • Eliminated code duplication in the pbc transform calculation routines
    • Added comment about the new numpy timestep array structure.
    • Updated the py_numeric code for Python 2.5 and NumPy 1.x
    • Added pydocs for the python molecule methods.
    • Added documentation for the various python color control methods
    • Updated python atom selection bindings, docs, etc. Added new/updated "write" and "center" methods, and "keywords", "booleans", "functions", and "stringfunctions" parameter listing features.
    • Turned off python builds for platforms that haven't yet had their respective Python 2.5.1 and matching numeric builds completed yet.
    • Updated the configure script to reference Python 2.5 for all future builds.
    • Updated comments and return codes for the secondary structure related calls. The mol reanalyze call should not necessarily force complete ss regeneration, but that will require testing.
    • Secondary structure calls now correctly propagate error conditions if a STRIDE calculation fails.
    • Added utilities plugin.
    • Added utilities plugin with numerous helpful commands for lists, rings and topology.
    • Cranked version number
  • VMD 1.8.7a6 (August 31, 2007)
    • Incorported multiseq 2.1b6 into the a6 build for live testing
    • Added blank multiseq plugin list and comment indicating when it's appropriate to use.
    • Add a newline before last line when nvoxels%3 != 0.
    • Added documentation for new volmap ligand options, for "measure pbc2onc" and for "measure pbcneighbors".
    • Improved code documentation and "usage" strings.
    • Two bugfixes that prevent measure energy from crashing and from computing bad vdw energies.
    • Cranked version number
  • VMD 1.8.7a5 (August 29, 2007)
    • disable carbohyrate code in the main build until further testing is completed on the latest version of the ring finding code.
    • dxplugin: Fixed non-portable loop variable scoping construct.
    • Added Jan's new 'measure pbc2onc' and 'measure pbcneighbors' commands.
    • Correct argument parsing for the "measure energy" command
    • apbsrun: Updated the APBS plugin to allow dimension sizes n = a * 2^b + 1 for values of a other than 1.
    • namdplot: Added comment to the source code about picking the Y-axis label appropriately
    • Updated VS2005 project settings for the current code.
    • Updated win32 project for new source files
    • Migrated PBC functions to new MeasurePBC source file. Migrated spatial searching routines into new SpatialSearch source file.
    • correct situsplugin minor version number
    • Added new SpatialSearch and MeasurePBC source files to the build.
    • Moved the PBC helper routines from Measure to MeasurePBC.
    • Reorganized all of the routines that implement spatial searching routines into a new SpatialSearch source file. Separated out the bond search code which has diverged significantly from the other grid search and radial distance and contact searching routines. Updated other modules to reference SpatialSearch.h as appropriate.
    • dxplugin: Print line containing dataname at the end of dx file. Also, remove any quotes in dataname before printing it.
    • viewmaster: Added Axel's patch to correct radio button behavior in ViewMaster
    • fmtool: Implementation of the multiple-beam PSF
    • fmtool: Additions are made to construct the PSF using multiple interfering beams.
    • fmtool: Additions to use multiple interfering beams to form the PSF. Additions are ready for the configuration file reader. The actual PSF construction is not changed yet.
    • fmtool: 3D.conf: the configuration file containing the calls for using multiple beams to construct the PSF, in a right format.
    • fmtool: When you try to draw a plot with empty data or where X and Y dtata have different lengt, a warning is printed and the drawing is ignored.
    • inorganicbuilder: Added a line to store box basis to the VMD periodic box variables.
    • dxplugin: Fixed DX writer. It was printing the the axis size instead of the grid spacing in the header.
    • Cleaned up text output, made less chatty, removed the unnecessary fflush(stdout)'s
    • volmap: internally simplified the pmf combination operation.
    • volmap ligand: use double precision intead of floats whenever dealing with densities (as opposed to energies), since these have a large range that occasionally gets truncated by the single precision. Visible differences are only seen for isosurfaces of very large energies (e.g. 100kT); previously-computed maps are still valid, of course.
    • volmap: Do range checking on -minmax arguments (reported by Peter Freddolino)
    • Added Jan Saam's support for PBC cells in the implicit ligand sampling code ("volmap ligand").
    • Added Jan Saam's PBC utility functions, to be used by new "measure" and "volmap" options.
    • Made find_within() non-static.
    • situsplugin: Implemented situs writer.
    • ccp4plugin: updated source comments.
    • edmplugin: Fixed volumetric grid aligmnent for the X-PLOR map reader. It was scaled in each dimension by an extra factor of N/(N-1).
    • Added comments regarding the beneficial properties of summing subgroups of atoms in the coulombic potential kernels, as applied to floating point precision.
    • pmepot: Add ability to update selection for each frame.
    • psfgen: Look up atom type id when writing CHARMM format psf file, allowing an X-PLOR format psf file to be read and translated to CHARMM format as long as the required topology files are loaded.
    • fmtool: Updated comments about the shared mem version
    • fmtool: Added a shared memory variation, though it presently runs quite slow.
    • fmtool: Added CUDA ptx target
    • Removed recursion from the loop and path finding routines used by the carbohydrate representations.
    • Added intstack_empty() needed for the ring finding routines used in carbohydrate analysis.
    • Added carbohydrate rendering patch from Simon Cross. Only render rings and paths if all atoms in them are selected. Add an option to not display paths which share edges with other paths. Tweaked the position of the "Automatically Apply Changes" button in GraphicsFltkMenu.C and add a shorter version of the IsoSlider widget in an attempt to make the widgets in the interface for Twister and Paperchain parameters not overlap with other widgets or the default window border.
    • pbctools: PBCTools plugin version 2.1 updates from Olaf Improved error handling. Added -verbose option to wrap, unwrap and join. Added -check option to pbcget: checks the cell parameters for validity. Added generic pbcwrap_coordinates function to wrap coordinates into a unit cell around another coordinate. First implementation of pbc join.
    • Added new 'interp' volmap type. This type interpolates an atomic structure onto a map using an arbitrary weight.
    • fmtool: print timestep info at the requested output frequency rather than hard-coded at every 256 timesteps.
    • fmtool: updated the "null" test kernel to measure overhead in the current version, updated the timestep output code to occur at the output frequency rather than every 256 steps.
    • fmtool: compacted the code in the new kernel, and added comments about the design and performance criteria for both the original kernel used in the 4Pi submission, and the new one.
    • fmtool: duplicated the kernel used for the 4Pi paper and renamed to calc_grid_cudakernel_4pi() so that we can compare subsequent performance values with those published in the 4Pi paper.
    • fmtool: Eliminated various testing code since the CUDA version runs well now.
    • fmtool: fix usage message for CUDA params
    • inorganicbuilder: Screenshots to go with the docs
    • inorganicbuilder: Added docs for the GUI.
    • inorganicbuilder: Changed GUI for entering cylinders and cones, to hopefully use a more intuitive way for users to describe shapes to system
    • inorganicbuilder: GUI uses either files or loaded molecules for obtaining molecule information. If the user selects a loaded molecule, the GUI gets the files that were used to load that molecule, otherwise the user can browse for PSF and PDB files separately. Numerous other bug fixes and cleanup too.
    • applied Axel's patch to fix the frame range check in the measure gofr commands as reported by Philipp Schoen.
    • molefacture: Fix problem with running molefacture multiple times in one vmd session
    • molefacture: Add ability to merge molefacture edits back into parent molecule
    • fmtool: more speed tweaks. Got rid of extraneous calls. Cleaned up variable passing to fcts some. Overall, time for test execution went from 6.05 seconds down to <5.2.
    • fmtool: cuda version is now returning good answers
    • fmtool: added a -v option to print out all of the repeated input information at the beginning. Default is to not print it.
    • fmtool: wait for cuda thread to finish before running next timestep, just for paranoia's sake while doing initial performance tests. We will want to maximize asynchronous operations as the kernel matures, but this is a good start.
    • fmtool: change array organization for the h/h_det/... arrays when copied to the GPU so that only a single index calculation is required. they are copied to be boundary-padded in the same way that pold/pnew are.
    • fmtool: Added in branches to deal with boundary values in the CUDA kernel. This negatively impacts performance, but for these kernels, we're already very much dominated by global memory load times, and so the minor overhead added by the branching should be insignificant.
    • fmtool: added a 'outputFrequency' option to the config file that determines how often the observable calculation is saved to the file (and how often it is even calculated). Default value is 1. So, if you don't have the outputFrequency specified the config, it falls back to the current situation.
    • fmtool: eliminate unused Nz parameter from CUDA kernel
    • fmtool: remove redundant error check
    • fmtool: movr GPU data copies out into the observable calcualation area, since that is the only time the CUDA code should really need to propagate the data back to the CPU.
    • fmtool: Sorted global memory references in the CUDA kernel and eliminated unnecessary parameters for the grid update kernel, since they are only needed for calculating obervables.
    • fmtool: lots of cleanup and organizational changes for the nascent CUDA kernel
    • fmtool: more tweaks. double version gets the exact same results as anton's original. single precision version is off by a bit (0.0124% over 300,000 timesteps, for instance).
    • fmtool: Properly include newly added hydrogens in topology files that are written by molefacture
    • fmtool: Allow users to add residues to an existing protein chain
    • fmtool: Added more safety checking int CUDA routines. Both null and real kernels run, but the thread indexing and grid size has to be changed to account for padding layers, etc.
    • fmtool: Numerous fixes and additions to the CUDA kernel
    • fmtool: Added pinned/regular buffer allocators for use by the CUDA routines
    • fmtool: Added CUDA device attach code
    • fmtool: force 32-bit compiles for fmtool CUDA kernel for the linux-cuda builds
    • fmtool: uncomment cuda functions
    • fmtool: updated real cuda function from the threadsim variation, and changed floating point constants to explicit float values for better performance.
    • Cranked version number
  • VMD 1.8.7a4 (June 26, 2007)
    • fmtool: still digging for the bug. committing some other cleanups that don't affect the answers.
    • fmtool: tweaks to the thread/threadsim fcts to make them produce the same results as the earlier versions. Changes to threadsim still need to be put back into the real cuda version
    • fmtool: added cubin target and matching cleanup steps
    • fmtool: Added more prototype cuda code
    • fmtool: just removed some commented out parms
    • fmtool: Verified that the float version (CPU) obtains the same answers while using the cudacheck function (as before).
    • cionize: Updated cionize makefile for CUDA 1.0
    • Updated VMD compiler paths for CUDA 1.0
    • fmtool: updated compiler path for CUDA 1.0
    • autopsf: Avoid a potential buffer overrun
    • mol2plugin: Allow trajectory read/write (trajectories are represented as several separate complete mol2 blocks)
    • fmtool: knocked out a couple more bugs. Should now produce the same answers as anton's pre-optimized version
    • fmtool: cleanup, removed debugging stuff
    • fmtool: Added multi-build Makefile
    • fmtool: Added CUDA handling to the main program
    • fmtool: converted new/delete to malloc/free to make CUDA conversion and comparisons simpler.
    • fmtool: eliminated unnecessary includes
    • fmtool: moved tmp1 calculation outside the nested loops. Storing results in an array that then is accessed from the inside. 9.8% speed bump.
    • fmtool: added CUDA build machinery to the custom Makefile
    • fmtool: comment/fct ordering tweaks
    • Cranked version number
  • VMD 1.8.7a3 (June 22, 2007)
    • Added the carbohydrate rendering code to the win32 builds
    • fmtool: Made the default run case do a double precision, no explicit boundary condition checking case. The first two fcts in the time_steps file are the most relevant ones. The first is double precision, the second is single. fmtool -n is now the default (for no explicit boundary condition checking) fmtool -d does double precision with explicit BC checking -s is single precision with no explicit BC checking -e is double prec/explicit/ with observable accumulation pulled out -o is double prec/no explicit/ with observable accumulation pulled out -e and -o can likely go away. Just had them in for testing. added a few more versions of the time_step function.
    • fmtool: avoid double-counting the corners
    • updated Win32 registry keys
    • disable carbs for the present time.
    • Cranked version number
  • VMD 1.8.7a2 (June 21, 2007)
    • fix minor /bin/sh portability nit in shell check
    • Make Intel C builds use -i-static for static linkage of Intel libs.
    • prettied up CPU messages
    • Added a manually unrolled 8-voxel-at-a-time loop for the CPU SSE version of the coulomb map code
    • Added built-in GFLOP counting for CPU version
    • Updated the coulomb potential timer code to get along more nicely with the Intel compilers.
    • Changed timer codes to use the newer timer system, which handles large runs and large system time values much more cleanly.
    • fmtool: fixed warnings in error output statements
    • fmtool: Added binary file read/write support through binary_gridio.[ch], define constant BINARY_GRIDFILE to build support. Added timer for initial grid computation. Added keyword MULTIGRID support for config file to enable multilevel sum.
    • fmtool: added the ability to calculate using single or double precision. Default is double. Single (for the time being) is just a copy of the time_steps_xy_to_r method with doubles replaced by floats. Command line option.. -d specifies double (not needed), -s specifies single precision. At the current time, it is very simply passing in single precision versions of the arrays to the method and getting them back as single. Initial testing seems to show that results are the same out to 6-8 significant figures, but anton will want to test with his large test case.
    • fmtool: just a couple of comments.
    • fmtool: moved p, pnew array allocation into the time_step fct.
    • ruler: Ruler: cosmetic changes + better handling of ruler colors when VMD is in gradient background mode.
    • Added Twister graphical representation algorithm implementation by Michelle Kuttel and Simon Cross.
    • Added linkage classes used by the Twister carb display algorithm
    • Take Jordi's patch to check scene rather than display for querying background mode.
    • paratool: minor documentation improvement
    • paratool: simple bugfix that affects fixing/unfixing of internal coords.
    • inorganicbuilder: Two changes: Made cancel button do a wm withdraw, so that the window gets restored when the Extension menu option is reselected. Added an option (GUI and codE) to solvate hexagonal structures. I just realized however, that my solvate code is not going to produce a complete PSF file. Since I'm using VMD to delete atoms, VMD's writepsf command is not going to generate angles and dihedrals. I'll have to run everything through psfgen once more to fix this.
    • Split the boundary condition loops from the interior loop
    • fmtool: removed second grid loop. Didn't think it affected anything, and the resulting dat files seem to be about the same as before. Time went from 25 to 20 seconds
    • fmtool: prep for splitting of interior/exterior cases
    • fmtool: Move accumulation of r with dr to the end of the loop so it starts with rmin.
    • fmtool: move pointers around instead of copying arrays from one to another
    • inorganicbuilder: Added [file normalize] to all the mol new and mol addfile calls, so that calls to molinfo get filename return path information, in case the current dir changes after the molecule is loaded.
    • fmtool: Added output file checking
    • fmtool: made more things const, took out an *=
    • ruler: Ruler: Now will be visible and look good for almost any background color.
    • inorganicbuilder: Fixed parameter name for molinfo get
    • fmtool: Added ICC build
    • fmtool: more tweaks to clean up compiling.
    • fmtool: added a secondary makefile to make hacking for special ICC/CUDA builds easier.
    • docs: updated the Tcl "color" docs
    • color: Added a "color rbg " command to return the RGB values assigned to a given color.
    • color: calling "color " now returns the name of the color associated with that setting.
    • ruler: made it automatically loaded by VMD on startup
    • ruler: A dynamic ruler plugin for VMD. It display a scale for the top molecule, and its various modes can be activated by calling: "ruler [tape|grid|scale]", and turned off using "ruler off". In this version, the tape and scale modes only work well when using a clear background color (i.e. not Black).
    • inorganicbuilder: Added GUI for the solvate function, changed Merge molecules function to work with file names extracted from loaded molecules (so we get the real PSF file name, not the incomplete one produced by saving a selection).
    • fmtool compiles cleanly, ran through indent, and started (very preliminary at this point) cleaning up a few of the conventions
    • Added Anton's fmtool code and test data, but lots of work needed.
    • Added C source for the inorganic builder plugin
    • Added materials files for the inorganic builder
    • Added Rob's inorganicbuilder plugin
    • added initial 64-bit CUDA support to the configure script
    • Added 64-bit CUDA target
    • Added GFLOP counting and info messages to the CUDA volmap coulomb code.
    • cionize: eliminated chatty output messages during the ion placement phase
    • cionize: updated with benchmark from test code with CUDA 0.9
    • cionize: Updated unroll4x kernel comments and matched it with the current test kernel codes.
    • cionize: Fix FLOP count comments for Unroll4x kernel
    • cionize: eliminate spurious CUDA device messages when placing ions, and added GFLOP counting for the main grid calculations.
    • cionize: updated for CUDA 0.9
    • cionize: use full pathname for NVCC so that it can find its libs etc.
    • Updated VMD CUDA kernels for CUDA 0.9
    • dowserplugin: Fix typo in atom selection found by Chris Harrison.
    • cionize: Added special makefile used for doing CUDA-enabled builds, test versions of variations of the ML summation kernels, etc.
    • cionize: Added binary grid I/O files for use with accuracy test builds etc.
    • Changed write_matrix() output to use %g instead of %f. This allows values lower than 0.00001 to be displayed accurately, which is necessary to implement a Tcl-based dynamic grid/ruler.
    • Added startup script mods for 64-bit PowerPC
    • Cranked version number
  • VMD 1.8.7a1 (May 24, 2007)
    • added LINUXPPC64 distrib target
    • cgtools: Per anton, added in the ability to determine the bond cutoff information from the all atom model. Before, it was done using a cutoff. Now the user can choose to use the cutoff distance, but it uses the information from the all atom model by default
    • Added conditional compilation tests for 64-bit PowerPC Linux builds.
    • more IU BigRed updates
    • further PPC64 fixes for IU BigRed
    • Added IU BigRed as a build target for the plugin tree
    • cionize: Add tcl command line interface for cionize-based ion placement
    • cionize: Fix exclusion problem in intel threading case
    • qmtool: Fixed a weakness of the Gaussian logfile parser that would make it fail on some zmatrix based structures.
    • Volmap: added extra newline in some cases when writing DX files for greater consistency
    • autopsf: Reorganize how options are presented (in preparation for adding a bunch more)
    • autopsf: Add -splitonly option to exit after splitting chains (useful for using autopsf with other applications)
    • autoimd: AutoIMD: Now remember rep on/off and drawframe states between AutoIMD sessions
    • cionize: Sort atoms by geometric hashing (define MGPOT_GEOMHASH). It is as good, if not better, for practical use, and it can double the performance of a randomized set of atomic positions.
    • AutoIMD: If the simulation can't connect and there's an obvious error in the NAMD logfile, it is now relayed to the user (so they don't have to go hunting for the autoimd.log file).
    • molefacture: Remove some unneeded output Clean up unused temporary molecules
    • Added target for Intel C SSE builds for GPU comparisons
    • Added flags and handling logic for Intel C compiler on 32-bit Linux builds, so we can do Intel C SSE benchmarks.
    • The min/max bounds of the grid used to accelerate the 'within' distance selection was being done after the grid dimensions and memory allocations for the grid were performed, leading to potential trouble in some cases.
    • Don't import python hotkeys by default, otherwise, we'd be doing both Tcl and Python callbacks on each hotkey event, which is probably not what people want. If people want to build their own VMD with no Tcl interface, they can take it upon themselves to import hotkeys for themselves.
    • Make UIText do python callbacks whenever a Python interface is present. Currently, python callbacks are called only if a Tcl present is not present, which is effectively never.
    • Must call PyType_Ready() in py_atomsel; otherwise, for example, setting the frame of an atomsel object fails until after the first time one gets the frame.
    • Add J.C.'s new hbonds plugin.
    • Added VMD timer routines based on the portable implementation from Tachyon.
    • cionize: Define MGPOT_SPACING_0_2 to use mgpot with Coulombic lattice spacing 0.2 A. Mgpot modified to use h=1.6, a=9.6 (to keep ratio same as h=2, a=12 case) so as to give interpolation scaling factor 8 (= h/spacing).
    • change linkage for the CUDA constant buffers to static so that they are file scope only.
    • cionize: define MGPOT_SPACING_1_0 to use mgpot with Coulombic lattice spacing 1.0 A
    • cionize: changed GPU data buffer from entire lattice to slabs to avoid memory limits
    • cionize: back to using cudaMemset
    • cionize: For GPU-based placements, only use the GPU for ion placement updates if we have a big enough grid to make it worthwhile
    • cionize: run long-range and short-range parts in different threads
    • cionize: set defined constants back to 'CUDA'
    • cionize: made the __constant__ buffers static, so they have file scope linkage only.
    • cionize: mgpot short range with CUDA, define MGCUDA to build
    • molefacture: Allow the use of custom base fragments
    • improve debuggability of molefacture as suggested by Axel
    • molefacture: Fix missing brace caught by Axel
    • Fix incorrect TCL error strings.
    • Pretty up documentation of new measure commands.
    • atomedit: Use Courier as the default fixed font.
    • paratool: Improved control over label sizes Use Courier as the default fixed font. In contrast to tkFixed it does not render with too much size difference on different architectures. Added a flag for analog parameters in the internal parameter listbox
    • paratool: Replaced Tcl based measure commands by the new C++ based ones.
    • qmtool: Replaced the Tcl based measure commands with the new C++ versions.
    • cionize: incorporate performance improvements, vectorize loops on Intel compiler
    • dowser: Fixed a bug that occurred when the top molecule was a map.
    • molefacture: Allow inversion of chirality and add a button for it Also, add ability to save mol2 files from molefacture gui
    • molefacture: Clean up the protein builder to give much nicer alpha helices; also fix a bug where they sometimes 'kink' on long sequences
    • autopsf: Recognize .rtf files as charmm topology files (silly naming collision with rich text, but this has been bothering people)
    • fixed the /bin/csh test parameter
    • cionize: Include the proper headers for updating ion positions with CUDA.
    • configure: Added check for /bin/csh in the install target and generate a warning message when necessary. Some Ubuntu distributions don't include /bin/csh by default. Eventually we may replace the existing startup script with something written for the POSIX 1003.2 standard (Bourne shell derivative, which is also the basis for bash and others), but until then we should at least generate a warning if /bin/csh is missing.
    • rmsd_matrix: Fixed bad link in the docs.
    • Fix additional bgf/xbgf/mol2 badness
    • cranked minor versions of bgf and xbgf plugins
    • mol2plugin: several memory allocation/deallocation bugs similar to bgfplugin and xbgfplugin, as well as some mismatched new/delete/malloc/free usage.
    • Fix identical memory leaks in the bond reading codes for bgfplugin and xbgfplugin.
    • Added Jan's fix for a memory leak in part of xbgfplugin We'll need to verify this and also likely check the bgfplugin just to make sure it doesn't contain the same problem.
    • Fix a bug in the error handling code for "gettimestep", where a call to Tcl_AppendResult() was missing the final NULL.
    • cgtools: removed the namespace export and renamed the reverse cg instances to actually be reverse cg (instead of all-atom reconstruction)
    • updated development hardware lists
    • Updated source file/directory structure listing
    • Development plan update begins.
  • VMD 1.8.6 Final Release (April 7, 2007)

Please email any questions to vmd@ks.uiuc.edu.