VMD Development Status

  • VMD 1.9.2 Final Release (December 29, 2014)
    • Updated VMD revision tags to add VMD 1.9.2 in doxygen docs.
    • Added a check for non-uniform grid spacing into the GPU cross correlation code to prevent it from being used inappropriately.
    • Updated MDFF CUDA function names
    • Updated paper citation info in the source code, renamed map simulation function to better indicate its usage.
    • Only emit console output during MDFF if verbose flags are set
    • Fix handling of verbose output for "mdffi sim" command
    • change MDFF console outpu from "synthetic" to "simulated" to match terminology in papers.
    • Ensure verbose flags are checked during GPU MDFF calcs.
    • Added basic docs for the parallel commands used with MPI-enabled VMD builds.
    • Added bib refs for the "volmap coulomb" and "volmap coulombmsm" electrostatics commands.
    • Added more paper refs to the discussion of hardware acceleration of key algorithms.
    • Moved collective variables documentation macro inclusion prior to the start of the body of the document, to prevent latex2html from parsing some of the macros as if they were section/subsection/subsubsection commands.
    • Added minimalistic docs for the new 'mdffi' commands in their current form.
    • fix typo in 'mdffi' built-in help
    • Added depth of field display commands to the user's guide, removed now-nonexistant "details" subcommand
    • Added missing "mol material" description
    • Updated the user's guide docs for Spaceball, Magellan, and SpaceNavigator devices.
    • remove old inactive grants from doc pages.
    • Added index tags for a few of the common file formats
    • Tweaked description of stereo for DTI autostereoscopic panels
    • Added stereo eye swap docs
    • Added background gradient docs
    • Updated copyright dates (forward dated to 2015 to save future revs)
    • Made the caption for the table of Python callbacks shorter to improve the formatting of the overall list of tables.
    • Added a brief caption for the table of volumetric atom selections
    • Fixed formatting of the list of figures and tables by adding short captions for cases that otherwise have an overly long caption.
    • Updated the stereoscopic display documentation for renaming of the old "DTI SideBySide" stereo mode to "HDTV SideBySide".
    • Renamed the "DTI SideBySide" stereo modes to "HDTV SideBySide" since this stereo mode is now much more broadly adopted, including not only the displays by Dimension Technologies (DTI), but also by a very wide range of HDTVs. Since most people will encounter HDTVs, the use of HDTV in the nomenclature will be more helpful to end users.
    • Updated rendering guidance and associated examples.
    • Updated the list of rendering options in VMD, along with reference URLs etc.
    • Renamed the interactive TachyonL-OptiX renderer command to TachyonLOptiXInteractive
    • Added journals_short abbreviations for use in VMD user's guide bib refs.
    • Added journal abbreviations needed for VMD bib refs.
    • Added new documentation for ambient occlusion and depth of field focal blur controls.
    • fixed period placement in colvars fig caption
    • Updated the table of color categories.
    • Updated the table of molecular coloring methods
    • Ongoing revision and updating of material properties and drawing methods tables and descriptions.
    • Updated the table of coloring methods
    • Updated color scale documentation
    • Added the mirror material property to the python and "material settings" documentation.
    • Continued updates and revisions to the material properties documentation.
    • Added docs for mirror material property
    • Added python support for mirror material property
    • Incorporated latest collective variables documentation from Giacomo and Jerome
    • Added colvars documentation figs from Giacomo and Jerome.
    • Final round of minor colvars bug fixes from Giacomo and Jerome.
    • Updated optix directories for 3.6.3 by default
    • cranked version
  • VMD 1.9.2 beta 2 Dec 22, 2014)
    • condensed verbose MDFF CC debugging output when enabled
    • Misc cleanup during debugging of 32-bit MDFF CC calc issue
    • Workaround 32-bit compiler bug that appears to cause misaligned class/structure member accesses for the MDFF CC code.
    • Added safety checks for the MDFF GPU cross correlation, to catch cases where we could get bogus grid spacing information either from the caller or from the reference map we're doing a cross correlation against.
    • Added Win32 WGL implementation of OpenGLDisplayDevice::prepare3D() to force the VMD OpenGL window to become the active GL context, needed to allow correct rendering of the OptiX interactive RT code, although it is not currently enabled under Win32 builds.
    • Added MDFF source file to MSVC builds.
    • Added file read check for cross corr. Set mouse event grab so that progress box can see cancel messages even when paramaters dialog box has been used.
    • Fixed MDFF GPU control code so it can compile on old MSVC compilers.
    • Made VMDApp object ptr public to please MSVC builds that need to use drag-and-drop handlers.
    • Changed MDFF GPU CC code to pass verbose flag deeper into kernel management code to allow better control over console output.
    • Only emit GPU CC timing info when verbose mode is set
    • Make the MDFF code avoid emitting console output unless -verbose is passed or the VMDMDFFVERBOSE environment variable is set.
    • Fixed MDFF CC code to print different messages when we launch the CC calc on the GPU vs. on the CPUs. Added checks for the VMDNOCUDA so that when running with a CUDA-enabled build the use can force VMD to launch the CPU code instead as per other CUDA kernels.
    • Only print GPU MDFF CC runtime info for calculations taking longer than 15 seconds.
    • Incorporated light list update performance optimization for remote VCA-based OptiX runs. When compiled for the VCA the lights are defined using a custom user-defined type instead of a buffer object. Buffer objects are very costly to update when running on the VCA, whereas user-defined types and variables are comparatively low latency. When performing interactive rendering on the VCA, we redefine the light positions every time the scene is rotated to keep them in the same position relative to the camera, but doing this with buffer map/unmap operations has high latency and incurs round trip overheads that don't happen for user-defined variables. By moving the lights into the user defined variable, we get roughly twice the frame rate vs. using a buffer containing a list of lights, when running remotely on a VCA.
    • mdff: Significant cleanup of top level MDFF Tcl code
    • mdff: Corrected mutex code in the CPU MDFF branch, eliminating global scope on the mutex, and changing the design so that we destroy the mutex on completion of the CC calculation.
    • mdff: CPU pass through for CC, sim, and gspacing
    • timeline: Cleaned up early uneccessary variable definition.
    • timeline: GPU accelerated CC with added fixes GUI/logic for cc threshold choice
    • mdff: smaller ccplot better for laptops
    • mdff: removed interactive timeline code, not ready for production
    • Fixed MDFF refs to old volmap, need to correct code for CUDA-enabled builds so we also have a CPU-fallback code path.
    • Enabled the new version of the MDFF CC code for multi-core CPUs.
    • Updated MDFF CPU cross correlation routines to use new QuickSurf APIs.
    • Added new QuickSurf::calc_density_map() method for use by MDFF modules.
    • Added safety checks to the CPU branch of the QuickSurf code so that the CPU code can be called by the MDFF infrastructure for computing synthetic density maps, and for performing cross correlations between synthetic and experimental density maps.
    • Imported corrections from the NAMD colvars implementation. Fixed incomplete refactor that was ignoring centerReference for angle and dihedral colvars.
    • Applied patches to enable FBO-based offscreen rendering for Nanohub/Hubzero
    • Applied patches for the OpenGL display device subclass to facilitate server-side VMD runs on Nanohub/Hubzero where a non-double-buffered visual is used and rendering is done to an off-screen FBO.
    • Applied text interpreter patches to support VMD usage in Nanohub/Hubzero
    • vmdprefs: updated to handle mirror property for materials
    • mdff: moved xmdff mask input fix
    • namdplot: Updated parsing code to look for "POTENTIAL" instead of "TOTAL2" for the current version of NAMD.
    • Corrected material parsing safety check limits for the newly added mirror material property.
    • Updated to the latest version 2.4.5 of the plumed plugin from Toni Giorgino.
    • parsefep: Updated to latest ParseFEP plugin version 1.9 from Chris Chipot and Liu Peng.
    • parsefep: Updated ParseFEP documentation from Chris Chipot.
    • plugins: Added the vasp5 plugins to the build.
    • viewmaster: Added support for mirror reflectivity to materials
    • Added mirror reflectivity material property for use by batch and interactive ray tracing.
    • Added additional tests during teardown to ensure we only delete the OptiX context when it has been created, and similarly for the framebuffers and ray gen programs.
    • fftk: fixed syntax error in message box used to communicate errors in bond/angle data
    • Added conditional compilation checks for the interactive ray tracer code path.
    • Migrated OptiX memory deallocation into the destructor since things have been rearranged since the code was originally developed.
    • only update light positions in the light buffer when xformlights is on, on the VCA mapping and unmapping buffers is costly.
    • cranked version
  • VMD 1.9.2 beta 1 optixtest 4 Nov 13, 2014)
    • Added F12 hotkey to toggle full-screen display on/off, added image size info to the "p" rendering parameters hotkey output
    • Added a 'p' hotkey to print the current ray tracer rendering parameters.
    • save_state: Tweaked order of execution for commands that restore the cuestart and cueend settings, since the command logic does sanity checking and if the new cuestart is larger than the existing cueend, it might prevent it from being executed. By restoring cueend before cuestart, this should not occur. Added new code to save and restore the settings for shadows, ambient occlusion lighting parameters, and depth-of-field aperture and focal plane distance.
    • Added macros and associated ifdefs to allow the use of the any-hit traversal reversal optimization, enabled either through hotkeys in the interactive viewer, or enabled by default at compile time.
    • Added support for runtime toggling of the any-hit traversal reversal optimization to speed up any-hit rays associated with shadows and AO.
    • Print size when resizing window, to make it easier to set a very specific image size for video recording purposes. Only print window sizing info when movie recording is enabled, for now.
    • Refactored the DisplayDevice classes and related subclasses to allow leaf subclasses such as individual file renderers to have direct access to the VMDApp instance pointer, thereby enabling access to global VMD objects, e.g. those needed for cooperative GPU global memory resource management between major program components. This refactoring allows the OptiX-based GPU ray tracing code to evict QuickSurf CUDA memory allocations to make the bulk of GPU memory available for interactive ray tracing on-demand. In addition to these changes, the QuickSurf code was reorganized to migrate the persistent QuickSurf objects out of DrawMolecule classes, into a single instance stored in VMDApp. This eliminates the problem of multiple molecules competing for finite GPU memory when making heavy use of QuickSurf, and makes it straightforward for the OptiX-based GPU ray tracing engine to evict QuickSurf GPU memory allocations on-demand.
    • Added in first version of any-hit ray traversal reversal optimization, using a hard-coded max-occluder-distance based on assumptions about the VMD view volume coordinate transformations. The current code uses a hard-coded maximum occluder distance of 3 for simplicity speed. We should be able to exploit this optimization in a more robust way by computing the diagonal length of the axis-aligned bounding box for the entire scene and then scale that into camera coordinates, giving us the best combination of both speed and numerical precision for this approach.
    • Fixed a missing accumulation buffer clear operation in the batch mode OptiXRenderer renderer code path.
    • mdffgui: added imd keep option
    • Added code to allow live recording of the interactive ray tracing display to a sequence of image files indexed by their frame display timestamps multiplied by the fixed-frame-rate associated with the sequence. This allows easy encoding with standard movie formats with a tiny bit of scripting.
    • cranked version
  • VMD 1.9.2 beta 1 optixtest 3 Nov 7, 2014)
    • Increased default stack size in response to observance of some stack overflows on runs with the latest version of the code. Since we have added a number of additional state variables and RNG-related routines, particularly for progressive rendering, it is logical that the stack footprint has increased somewhat in the latest revs.
    • Improved printing of total sample counts etc on the text console.
    • Added a new resize_framebuffer() method, which actually resizes existing already-allocated OptiX buffers, rather than destroying and recreating them. This approach is needed as a short-term workaround for problems in the current VCA-specific version of OptiX which cause a segfault upon destruction and recreation of the framebuffers as was done previously. The new code only resizes the existing buffers, and this avoids triggering the crash on the VCA.
    • Changed VCA code path so it correctly shuts down progressive rendering prior to tear-down when the user closes the window.
    • Changed the VCA code path to call rtBufferSetSize2D() on the existing framebuffer and accumulation buffer rather than destroying and recreating them. This prevents a segfault from occuring with the current version of the VCA libraries.
    • Chopped out AA/AO RNG buffers in the VCA code path, although it makes no practical difference.
    • Added short-term gamma correction workaround in the OptiX VCA code path.
    • Added corrections for VCA subframe accumulation buffer normalization for AA sample counts greater than one.
    • fix typo in code for handling "display get dof_focaldist"
    • cranked version
  • VMD 1.9.2 beta 1 optixtest 2 October 30, 2014)
    • vmdremote: tweaked the colors behind the buttons. Red now means not connected at all, yellow means connected but not in control, and green means connected and in control.
    • mdffplugin: Corrected MDFF GUI plugin load command
    • Added very basic code to print OptiX devices in the active context.
    • vmdremote: revised the snapshot code to scale the downloaded image to fill the screen. Before it was giving something that was about 1/8th screen size. Now it is more natural.
    • mdff: output step for imd submit
    • We don't tear down the "framebuffer" variable during window resizing for the VCA case, because in the VCA case, we don't create it at all.
    • Only force a framebuffer resize for stereo, not when toggling DoF on/off.
    • Added built-in help for mouse depth-of-field control mode key
    • Corrected the non-VCA RT code path. The code to adjust sample counts and to update the OptiX context state must be executed under the same conditions, so that the sample counts used for accumulation buffer normalization agree with the actual number of samples used when the rendering kernels are launched.
    • mdff: output step added to gui
    • Merged in a couple additional VCA-related patches from Nikolai. Changed the interactive OptiX sample count update code to update only during when a redraw is triggered. This allows the logic to stay as-is, but it is then also safe to run in both the VCA and non-VCA code paths. It may be desirable to allow updates to occur while accumulating samples but for now this seems reasonable. A related change that still needs to be made is to prevent the sample count adjustments from occuring on every rendering pass, instead limiting them to on every redraw or every N frames, and only after previous adjustments have actually been applied.
    • Modified the interactive ray tracer event handling system to facilitate runtime toggles for enabling and disabling shadows, AO, DoF, and Fog by pressing the F[1-4] keys. Took away the 'D' key previously used for DoF on/off toggle.
    • Added new AA/AO sample assignment logic to improve the convergence rate for the case when AO and DoF are both enabled at the same time.
    • Merged in a couple of corrections to the VCA rendering code path
    • vmdremote: minor text tweaks, halved frequency of heartbeat packets.
    • vmdremote: tweaks to instructions, and increased minimum allowed android version to 4, which gives additional capabilities (and around 88% of devices are running 4 or higher according to https://developer.android.com/about/dashboards/ )
    • vmdremote: minor tweaks to menu text/items on the app
    • mdffplugin: xmdff masking options and imd view fix
    • Initial DoF implementation for POV-Ray 3.7
    • Added support for depth of field to both the CPU and GPU versions of Tachyon for rendering VMD scenes. It should also be possible to implement for POV-Ray.
    • topogromacs: Committed the latest topogromacs fixes from Josh Vermaas.
    • mdffgui: parameter file selections and all file types
    • mdffgui: .ccp4 file option
    • mdffgui: Fix for cc analysis issues
    • mdffgui: tail extra bracket fix
    • MDFF GUI added to extensions menu
    • mdffgui: initial mdff gui
    • Added DoF (depth of field) controls to the VMD rendering GUIs, and tested it with both the batch mode and interactive OptiX-based ray tracers.
    • Simplified the handling of VCA progressive rendering start/stop handling.
    • Improved handling of VCA streaming stop/restart
    • Rewrote the OptiX light buffer update code to work better for the VCA
    • Added live controls for depth of field aperture and focal distance, updated the interactive ray tracer automatic FPS tuning code to tune both AA and AO sample counts, so it can be used even when AO is disabled when depth of field is turned on.
    • Updated the depth of field implementation for better performance and reduced register footprint.
    • Added primitive depth of field implementation for the interactive ray tracer
    • Templatized the perspective and orthograhic ray generation programs so that both stereo and non-stereo ray gen programs share as much code as possible.
    • corrected ray tracer orthographic camera position calculation when stereo is enabled.
    • Refactored the four ray gen programs to greatly simplify color accumulation and runtime-based coloring.
    • Added stereoscopic control keys to the built-in help, improved help formatting.
    • Updated the ray tracer stereoscopic display to support orthographic projections as well.
    • Implemented stereoscopic display for the interactive ray tracer.
    • Added calls to communicate stereo viewing parms from OptiXDisplayDevice into OptiXRenderer, and did some Doxygen-ization of headers.
    • Migrated definition and initialization of the shader progressiveSubframeIndex and associated progressive_index_v. Misc cleanup. Corrected the batch mode rendering path so that the progressive index gets updated on every AA rendering pass.
    • Removed old host-side accumulation buffer initialization code, switched off xformlights when running in VCA mode until it is clear if that's a performance issue due to light buffer map/unmap operations causing a full round-trip between the host and the VCA. Misc additional comments.
    • Changed OptiX shader code to disable the use of AA and AO sample buffers by default, in exchange for using tea() hashing of the scene-wide subframe index instead.
    • Merged in more code needed to drive the network-attached VCA accelerators.
    • Fix a tiny bug with handling of mouse scaling vs. spaceball input, where a stale mouse scaling factor could unintentially downscale the sensitivity of the spaceball for the interactive ray tracer.
    • Integrated code changes to enable support for external networked VCA accelerators for the OptiX rendering work.
    • Print Spaceball availability status with help/usage message
    • Started adding runtime checks for stereoscopic display into the interactive ray tracer.
    • Updated the Spaceball/SpaceNavigator/Magellan 6DOF input code for the interactive ray tracer to perform translations using the camera's orientation vectors, and changed the motion scaling factor for a good range of precision and speed for demos running from 8 FPS to 30 FPS.
    • Added support for ClientMessage-based Spaceball/SpaceNavigator/Magellan devices to the interactive ray tracer.
    • Updated the interactive ray tracer code to track the total number of AO samples accumulated, change the behavior of the spacebar to trigger saving numbered snapshot images, and fixed up the image output routine so that it unmaps the OptiX framebuffer when it is finished.
    • colvars: Updated collective variables module with latest version from Giacomo Fiorin and Jerome Henin. The new version cures some update problems and improves the command interace further.
    • Rewrote the main display loop to properly handle the case where the window manager closes the OptiXRenderer display window.
    • cranked version
  • VMD 1.9.2 beta 1 optixtest 1 October 7, 2014)
    • Improved reporting of specialized material usage when renderer timing or diagnostic messages are enabled.
    • Added the first running version of the OptiX renderer that uses extensive template specialization of the core closest-hit shading code to create a fully combinatorially-expanded set of 64 shader functions for each of the shader features that can be enabled/disabled either scene-wide or specifically for a given material.
    • Finished first implementation of complete combinatorial expansion of shader parameters into a set of 64 templated-specialized closest hit programs, which are combined with either the opaque or the shadow-filtered any hit program, producing a set of 64 pre-built OptiX material objects to be linked into the scene graph according to the VMD global display settings and each individual representation's material-specific properties.
    • Added code to generate template-specialized shaders for all 2^6 combinations of shader feature parameters
    • Further preparation for macro-generated shader expansions
    • Began the process of templatizing the main shader to create a combinatorial expansion of specialized shader variants that have specific scene-wide or material-specific features enabled or disabled, to increase performance.
    • Re-enabled the ORT_USE_RAY_STEP macro to prevent self-intersections in various shadow and transmission ray calculations. This cures lingering shadow artifacts when zooming far into the STMV case, despite various previous attempts to correct them using only the scene epsilon.
    • Added ray step code to the direct lighting shadow calculation, where it was previously missing.
    • Corrected typo in exponential averaging of FPS in interactive ray tracer.
    • topogromacs: Added a fix from Josh to correct the behaviour for 6-membered rings. A naive implementation will pick up pairs across the rings twice (once in each direction around the ring). A new second check makes sure that those pairs are only included once as they should be.
    • All VASP plugins: Updated all of the VASP plugins to use the new style of plugin registration mechanism, so that they don't break if changes are made to the order of elements in the molfile_pluguin_t structure.
    • vasp5xdatcarplugin: Updated the plugin registration code in the vasp5xdatcarplugin to use the more up-to-date means of registering plugin callbacks so it is unaffected by upcoming plugin ABI changes.
    • vasp5xdatcarplugin: Added new VASP 5.x XDATCAR file reader by Dr. Sung Sakong. The new plugin reads the XDATCAR files generated by VASP newer than 5.2.12.
    • Implemented an automatic AO sample count control algorithm that tries to keep the interactive ray tracing frame rate between 40 FPS on the high side and 30 FPS on the low side. This makes for a good compromise on AO sampling work efficiency and interactivity, and gracefully handles things like window resizing which have a big impact on ray tracing interactivity.
    • Separated the interactive OptiX ray tracer from the batch mode code chain so that the user can select which rendering mode they want in the GUI.
    • Tweak line emulation cylinder scaling factor for file renderers that can't actually draw lines (e.g. ray tracers), but that don't override the default fall-back routine provided in the FileRenderer superclass.
    • Implemented window resize handling for interactive ray tracer
    • Updated the interactive renderer so it transforms the gradient sky sphere to keep it locked to the camera basis vectors, to emulate the behavior of the main VMD OpenGL window.
    • Added code to maintain the locking between the directional lights and the camera orientation basis vectors the same way VMD does.
    • Eliminated the old CPU-side RNG buffer initialization and map/unmap code in favor of a special purpose GPU-side ray gen program that (re)initializes the RNG buffers.
    • Changed the OpenGLDisplayDevice implementation to force a call to glXMakeCurrent() every time OpenGLDisplayDevice::prepare3D() is called, followed by pass-through to OpenGLRenderer::prepare3D(). This allows the main VMD thread to flip back and forth between multiple OpenGL contexts without malfunctioning.
    • Misc cleanup, implemented code to save/restore the initial view orientation in the interactive ray tracer, mirror the main VMD rotate/scale/translate mouse interaction modes, etc. Fixed a bug that was preventing scenes using AO from achieving peak progressive rendering rates.
    • Implemented first cut of interactive ray tracing feature. The interactive ray tracing implementation rides on the existing TachyonL-OptiX FileRenderer subclass, masquerading as if it was still merely a FileRenderer. The ray tracer outer loops were modified for the interactive case to implement progressive refinement using the accumulation buffer, but the rest of the shading code currently remains the same. There are still many areas in need of further optimization, but the primary-rays-only case already hits the vertical retrace sync redraw rate limit on at least one test machine, and shadows don't cost much more than that. The current implementation bypasses the existing VMD DisplayDevice class hierarchy and creates a completely independent OpenGL window for interactive ray tracing display. Ultimately, we'll likely want to implement all of this as a new VMD interactive rendering mode which would piggyback on the existing OpenGLRenderer and OpenGLDisplayDevice classes, but to do so will require some DisplayDevice refactoring that's impractical to do at the moment. The next steps will implement currently missing mouse interactions and begin with template specialization for improving the performance of the shading path on a case-by-case basis.
    • topotools: Patch from Josh Vermaas to correct topogromacs so that it generates the missing 1-4 terms as well. Patch also includes a fix to cause lsearch to use the "-exact" mode.
    • Start of refactoring to allow interactive RT
    • Added a workaround for bug in Trbvh in OptiX 3.6.0 to 3.6.2 that affects very large scene. When compiling against OptiX 3.6.[012], we switch back to MedianBvh. The bug is fixed in 3.6.3 subsequent OptiX versions, in which case we continue to use Trbvh.
    • Changed the OptiX camera state to be global to the OptiX context rather than local to the ray_gen program, so that the view direction vector (and other properties) can be directly referenced by the fog code, thereby eliminating the old hard-coded view direction vector. Since the camera state is now global to the context, the zoom, eye_pos, U, V, and W variables have all been renamed for clarity.
    • Corrected missing diffuse scaling factor on ambient occlusion lighting implementation for OptiX.
    • mdff: Added xmdff files in Makefile distrib target
    • Fixed sign error that was preventing linear and exponential fog from working correctly in the OptiX renderer.
    • Began testing of updated paperchain pucker algorithms.
    • doc: Corrected some very old cut/paste errors in the description of the "measure bond" commands
    • nanotube: Update from Axel to change the default behavior of the nanotube builder to avoid building impropers by default, since this can be a problem for CHARMM.
    • cranked version
  • VMD 1.9.2 beta 1 September 12, 2014)
    • Updated MSVS builds with new CUDA-accelerated MDFF routines, etc.
    • Added the new "vmdlite" teaching plugin to the build system.
    • Added new "vmdlite" teaching plugin by Conner Herndon and JC Gumbart
    • Eliminated missing shader warnings when installing non-OptiX builds.
    • vmdmovie: changed movie maker internal ID string for TachyonL-OptiX to prevent potential future confusion if we implement multiple OptiX-based renderer types.
    • vmdmovie: Updated the movie maker for the current TachyonL-OptiX renderer strings, so that auto-detection and menu bar updates are processed correctly.
    • Updated VMD User's Guide documentation with collective variables section and adjusted the Makefile to add the associated bib sections etc.
    • Updated grants that supported the current VMD version.
    • Eliminated duplicated bib entries that also show up in colvars.bib
    • Updated collective variables latex macros so that the User's Guide index listings for colvars commands are grouped under the common category "collective variables".
    • Began the process of adding the collective variables text to the VMD User's Guide.
    • Updated link to collective variables paper
    • Added --use_fast_math for OptiX shader PTX compilations, as needed by current revs of the OptiX toolkit.
    • Fix reciprocal zoom typo resulting from previous merges.
    • Disable ray stepping for the time being.
    • The ORT_RAY_STEP mode should step in the opposite direction of the surface normal in the case of transmission rays
    • Clear out CUDA PTX assembly output for "clean" and "veryclean" targets
    • pbctools: Added latest rev of pbctools latex docs as pre-built PDF.
    • pbctools: Updated to the latest pbctools 2.8 from Olaf's github.
    • Updated README with info about new topotools and psfgen features, fixes, etc.
    • networkview: revised from exec to ExecTool
    • clustalw: convert 'exec' to use ExecTool
    • stamp: typo in printf
    • Updated feature list with several recent additions
    • Added license file to the topotools directory, must have been missed in a previous round of updates.
    • First stage of revisions to collective variables error handling mechanisms to eliminate the outdated NAMD-centric approach of errors leading to termination.
    • cionize: Added old single-ion CUDA test code that's been kicking around for a long time.
    • Updated win32 installers
    • added new bdtk plugin to the build.
    • fftk: added Torsion Explorer tool
    • Use "TachyonL-OptiX" naming in the GUI as in the UltraVis'13 paper, since we may write other OptiX renderers that are not at all Tachyon-derived.
    • Small bug fix for the python color API keyword list.
    • Added Josh's native Python bindings for various measure and topology query commands akin to what Tcl has.
    • Added Josh's patch to get/set VMD color indices from the Python API
    • Enabled colvars for Solaris after fixing various C++ dialect issues.
    • More fixes for compilers that don't provide the latest vector/list conversions built-in.
    • colvars: Applied Giacomo's alternative workaround for ambiguous operator overloads.
    • Enabled the VMD colvars module by default on Linux/MacOS
    • Fix compilation problems on older versions of GCC by eliminating operator overloading ambiguities.
    • Rewrote parts of the colvars module to increase portability among a larger range of C++ compilers and their associated dialects.
    • cranked version
  • VMD 1.9.2 alpha 42 August 8, 2014)
    • Moved special Swift/T init to the end of the VMD initialization process
    • continued evolution of startup code to accomodate Swift/T
    • have to move Swift/T hacks after both Tcl and MPI have fully initialized.
    • Added code to the VMD startup to enable Swift/T to get access to the VMD MPI communicator, presently just a dup of MPI_COMM_WORLD. This is needed so an MPI-enabled VMD run can launch Swift/T, and safely return. If Swift/T is otherwise launched within an MPI VMD, it will try and init/finalize MPI for itself, which would create all manner of difficulties. The solution here is adapted from what was done previously in NAMD.
    • Tweaks to please MSVC
    • tngplugin: Added comment about TNG git repo SSL issue.
    • tngplugin: Further updates to the Gromacs TNG plugin for V1.6 of the TNG libs by Magnus Lundborg.
    • tngplugin: Updated include path for the Gromacs TNG plugin, assuming TNG version 1.6, as per Magnus Lundborg's email.
    • change cionize GPU builds to use CUDA 5.5 and static libcudart linkage.
    • changed Android binaries path to use x86_64 toolchain since the x86 toolchain is now history.
    • Commented out MDFF CUDA kernels and support code we're not currently using.
    • commented numVertsTable since it is unused by the CPU code currently
    • Print MO timing data when recalculation takes more than 5 seconds.
    • commented out non-optimized QuickSurf reference code path
    • Migrated declaration of force terms into the plugin API version code branch that supports them.
    • Improve constness of BaseMolecule::add_atom() and Atom::init() APIs
    • Only declare local SSE/AVX runtime check variables when compiling on x86 architectures.
    • improve constness of default charge/mass/radius APIs
    • colvars: Fix signed/unsigned comparisons
    • swap size/count parms so we get the expected fread() return code.
    • Added another check in case we get a read error or some sort of zero-length GLSL shader file.
    • Added VMD collective variables module by Giacomo Fiorin and Jerome Henin.
    • Reapplied Vlastimil Zama's patch after incorporating Josh's changes.
    • Applied Josh's update to add radius of gyration and rmsf implementations to the Python interface.
    • topotools: Applied another tweak to topogromacs from Josh Vermaas.
    • topotools: Updated to Axel's latest version of topotools, including the first rev of Josh's updates to topogromacs, and a contributed feature to allow support replication of non-orthogonal cells.
    • added items from user
    • Corrected a bug in the OptiX zoom factor calculation when using perpsective projection and non-standard parameters
    • Added new MDFF code to the default win32 build.
    • Disabled use of SSE movemask in atom selection loops until a bug in its use for bounding box min/max calculations is fixed.
    • Improved python atom selection error reporting per Vlastimil Zama
    • Added a few further notes about OptiX device exclusions, and changed the image conversion helper routines to file scope linkage.
    • Changed the OptiX device exclusion code to be used only for the older versions, since the compute capability incompatibilities should be gone in OptiX 3.6.x and later.
    • removed a few disused helper routines from the OptiX renderer
    • Enable SSE atom selection optimization by default for now.
    • Added CSCS Piz Daint to build rules
    • cranked version
  • VMD 1.9.2 alpha 41 July 31, 2014)
    • xmdff setup options
    • Added an alternative SSE instruction sequence for the particular 4-way logical OR operation required by the atom selection loops. This speeds up the code by 30% or more, but is far less general than the previous version of the code.
    • Added config options for CSCS Piz Daint Cray XC30 w/ GPUs
    • fftk: depreciated more instances of re(Type|Charge)FromPSF
    • fftk: depreciate re(Type|Charge)FromPSF
    • fftk: refined sanity check on atom name input
    • fftk: qm target data 120a|b filenames are parsed properly
    • Replaced now-deprecated calls to cudaThreadSynchronize() with the current cudaDeviceSynchronize() API whose name better reflects its purpose and behavior.
    • Replaced the use of the now-deprecated CUDA device properties field deviceOverlap, with the asyncEngineCount field which also provides more detailed information about the hardware.
    • Added code to report when a GPU is determined to be an integrated GPU that shares memory with the host CPU.
    • Disable the GPU DRAM clearing code during startup since the current approach is inappropriate for machines that share DRAM between the CPU and GPU and also implement VM paging.
    • Cranked Gromacs plugin version from 0.9 to 1.0 after fixing the uninitialized memory accesses that were occuring after applying the patch from Matt Harvey.
    • Fix problems with references to uninitialized sizesmall[] array in the patch from Matt Harvey by moving the case-1 sizesmall non-zero tests further down into the code after the point where sizesmall[] should have been populated by the assignment from xtc_magicints[]. The sizesmall array has to be non-zero to prevent integer division by zero in the subsequent calls to xtc_receiveints(), so the point of Matt's additional checks is to ensure that this can't occur at runtime without raising a non-fatal error first.
    • Changed the OpenGL renderer to disable line stippling before it draws row, column or checkerboard interleaved stereo patterns to the stencil buffer, so that any stale line stippling state left from a previous rendering pass does not affect interleaved stereoscopic display modes. Changed the HBonds rep to restore line style state to solid after it completes rendering.
    • qmtool: general fix for reading zmat, charge, mult from LOG files of different G09Revs
    • qmtool: fix for zmatrix read in G09 log files rev C or later
    • Added Ahmet Bakan's DruGUI plugin. DruGUI is for setting up simulations that contains organic solvent molecules for druggability analysis of a target. It can also be used to analyze simulations. This work was presented in the recent TCBG workshop in Pittsburgh (http://www.ks.uiuc.edu/Training/Workshop/Pittsburgh2013/labs.html). Documentation is here: http://ahmetbakan.com/DruGUI/ In addition to TCL files, there are topology, parameter, pdb/psf/xsc files, and also a python module for analysis of trajectories (that requires Py 2.7 and Numpy).
    • Updated plumed plugin to the latest version 2.3 from Toni.
    • Split the fog computation into separate computation of fog modulation value, and the actual color calculation. This allows the fog modulation value to be incorporated into importance-scaled AO sampling schemes, and similarly importance-weighted sampling functions. Added notes about the potential impact of dynamic importance-scaled AO sample counts in terms of apparent noise in animations or on some surface edges with significant variation of the importance factor. It may be that we can only scale the importance sample counts for the lower end values where discontinuities between neighboring pixels will not be noticed.
    • Improve default OptiX time normalization constant for recent GPUs
    • Added an alternative pixel shading mode that replaces the red color channel with either the max, or the average ray tracing time for the ray tree beginning from each pixel. The runtime is normalized by a "max allowable time", and the resulting value is clamped to the range 0-1. The green, blue, and alpha channels are averaged as per the normal rendering path.
    • Added epsilon stepping to reflection and transmission ray generation code along with conditional compilation and a macro for step size control. Further work should eliminate much of the need for this but this band-aid will let us get by in some difficult cases in the mean time.
    • Added OptiX shader makefile to overcome issues on platforms where we build the rest of VMD with CUDA 5.5 or CUDA 6.0, but OptiX 3.5.1 and earlier require older CUDA compiler versions for proper runtime generation of the full ray tracing kernel.
    • Emit runtime messages when the user overrides VMD's default choice of OptiX AS builder and traverser, and debugging messages are turned on.
    • Eliminated a leftover call to rtContextCreate() that has been superceded.
    • Fixed the behavior of the OptiX perspective camera for non-standard VMD viewport height settings, such as the one used in the STMV scene.
    • Updated the OptiX renderer to exclude incompatbiel GPUs from the active OptiX context. This prevents a runtime failure when a VMD compiled against OptiX 3.5.1 is run on a machine that contains a Maxwell (SM 5.x) GPU, which is not yet supported by OptiX. The new context management code also allows the user to exclude the use of GPUs that have the kernel execution timeout enabled, e.g. with displays attached, and GPUs not selected in a devide mask. The user can exclude GPUs with attached displays and associated windowing system-enforced execution timeouts by setting an VMDOPTIXNODISPLAYGPUS environment variable. The GPU device mask is specified using a hexadecimal selection string, where each "1" bit selects a GPU and each "0" bit excludes a GPU. The default GPU mask is 0xffffffff (all GPUs enabled), and it is overridden by setting the VMDOPTIXDEVICEMASK environment variable.
    • Added more extensive error checking during OptiX context validation, compilation, and AS generation phases to help track down issues that cropped up running some very large scenes on Blue Waters.
    • Emit a different error message if we encounter an OptiX error prior to the first real ray launch.
    • Added code to dynamically scale the number of AO samples depending on a combination of incident ray importance and the opacity of the lit surface. For scenes such as the chromatophore that contain large amounts of transparent geometry, this can yield a significant performance boost without harming output quality noticably, at least in early tests that I have run so far.
    • Updated comments, emit info messages when the user has overridden the default OptiX shader path.
    • cranked version
  • VMD 1.9.2 alpha 40 March 30, 2014)
    • Fixed the value used for the RNG normalization macro, and added another variant of the Archimedes sphere sampling approach using the GPU machine instruction intrinsics for the reduced precision __fsqrt_rn() and __sincosf() routines.
    • Updated uniform sphere RNG scheme from Tachyon.
    • Added GPU MDFF CC paper citation
    • Added the reference for our Ultrascale Viz. 2013 paper.
    • networkview: added in a couple of variable declarations to bring into scope
    • Crank up the AO origin offset one more epsilon for now.
    • Offset ambient occlusion ray origins a few epsilons away from the surface of the object we're leaving so we don't self-intersect. Where Tachyon keeps track of the object ID we're leaving, we don't have the same infrastructure implemented in OptiX yet, so this is a way to get by in some of the trickier scenes for now.
    • Eliminated a line of dead code in the orthographic camera.
    • Did a bit of overdue cleanup on the triangle mesh bounding box routines. Did some testing to compare the paranoid code variant that culls degenerate triangles vs. one that accepts everything for a case where we have some floating point precision issues, but it made no difference to the outcome.
    • Added additional OptiX versions and paths used on NCSA Blue Waters and IU Big Red II.
    • Print OptiX epsilon values in scientific notation.
    • Enable user-override of OptiX scene epsilon value for difficult scenarios.
    • Updated OptiX version string in the GUI
    • Protect recently-added OptiX exception enums with an ifdef on the OptiX version we're compiling against.
    • Allow runtime user override of the default OptiX stack size when the environment variable VMDOPTIXSTACKSIZE is set.
    • Give a more human readable error if we have an OptiX stack overflow
    • Increase default OptiX stack size to cope with latest Chromatophore test cases.
    • cranked version
  • VMD 1.9.2 alpha 39 March 21, 2014)
    • Updated UIText constructor for 64-bit MacOS X builds to take account of the new flags for data-parallel MPI runs.
    • Fixed MDFF compilation issue on MacOS X.
    • get rid of floating point where it doesn't belong in MDFF CPU code.
    • Pulled the multi-core CPU version of the MDFF code into MDFF.C and migrated the Tcl bindings to TclMDFF.C
    • Added comments around the OptiXRenderer::device_count() implementation. This would be a good place to add logic to exclude devices that are reported as usable by OptiX, but actually are not. An example of this occurs when running OptiX 3.0.1 on a machine that contains a Quadro K6000 (Kepler) and a GeForce GTX 750 Ti (Maxwell). OptiX 3.0.1 will erroneously try to use the Maxwell GPU, even though it will completely fail. We should be able to detect the combination of OptiX library version VMD was compiled with and the GPU compute capability (e.g. SM > 3.x in this particular case) and cull any GPUs that we know are not going to work out.
    • Added a trivial implementation of code to force VMD to use only a user-specified device for OptiX GPU accelerated ray tracing jobs. This helps solve the problem of scenarios where an OptiX context would otherwise pick up an undesirable GPU that either has insufficient on-board DRAM to be useful for rendering large scenes, or in another example, a bleeding edge GPU that is so new that it isn't actually supported by the version of OptiX that we are using. The latter case occurs, for example, when using OptiX 3.0.1 with one of the latest Maxwell GPUs such as the GeForce 750 Ti.
    • protect CUDA-specific MDFF implementation with appropriate ifdefs.
    • Removed MDFF Tcl bindings from the CUDA code now that they live in a new file.
    • Added MDFF.C to the build
    • Started migrating the top level MDFF 'mdffi' Tcl code out of the CUDA source file and into its own MDFF.C which is also where the multi-core CPU version of the code will end up.
    • fftk: updated Makefile and pkgIndex to reflect incr on package verno
    • fftk: updated header and cranked package version number
    • fftk: added visualization of missing parameters in buildpar
    • viewchangerender: Updated ::VCR::movie_print_stats to be more informative, and added it to the scripting oriented docs at the top of the file.
    • viewchangerender: Updated script command help at the top of the viewchangerender code
    • viewchangerender: Added draft versions of procs to enable script-based generation of movie sequences from an existing set of saved viewpoints.
    • viewchangerender: Force the viewchangerender GUI initialization code to read in the list of viewpoints in case the GUI is opened after a viewpoints file has been loaded by a script, or generated on-the-fly by scripting commands.
    • vmdmovie: updated docs, wrt/ videomach text talking about pricing (based on changes at the videomach site).
    • viewchangerender: fix doc typo
    • viewchangerender: Added a note about an observed bug in viewpoint renumbering that cropped up while preparing the chromatophore movies
    • Enable the new CUDA MDFF cross correlation code in the default build, although the matching CPU code isn't added quite yet.
    • Enable the new 'mdffi' commands, though the CPU code isn't in place yet.
    • Changed clipplane code to use IdList
    • cranked version
  • VMD 1.9.2 alpha 38 March 17, 2014)
    • Added OptiX paths on BW, BigRedII, etc.
    • Added IU Big Red II settings to the plugin build scripts
    • Enable OptiX by default on BW
    • fftk: fixed typo in paper citation
    • Use beirut instead of sydney for Android builds for now
    • Fix Makefile rule for tngplugin shared library build target.
    • gromacsplugin: Updates to gromacsplugin adding .gro write support, contributed by Magnus Lundborg.
    • viewchangerender: Updated viewchangerender so that it only performs an "animate goto" when the target trajectory frame is actually different than the current frame. This gives a tremendous interactive rendering performance boost when working with 10+ million atom structures drawn with QuickSurf or other representations with similarly computationally intensive update/redraw costs. If the current and target frames are the same, then the code skips doing the "animate goto" completely. The new behavior can be reverted to the original behavior if the ::VCR::forcetrjgoto is set to 1. The old behavior should only be necessary in cases where scripts have put traces on the trajectory frame updates as a means of being triggered, and in principle, if there's a need for such a capability, it would be better to have a special update variable just for that purpose, rather than having people depend on side effects of "animate goto" for that purpose.
    • fftk: fixed gaussian keyword issue for G09RevD when reading LOG files
    • pmepot: Check malloc() return value for memory allocation failure.
    • cranked version to clearly mark upcoming point of several changes
  • VMD 1.9.2 alpha 37 February 28, 2014)
    • cranked version
    • networkview: tweak to adjacencyMatrix to let it read carma dat files larger than a gigabyte. Rev'd plugin version number.
    • solvate: Improve solvate overlap check to sidestep issues resulting from floating point rounding that occurs with text file formats such as PDB that have a limited number of decimal places for coordinates.
    • solvate: revise error messages to exclude out-of-date package version string
    • Increased verbosity and explanatory nature of mismatched atom count error message.
    • fftk: fixed string match algorithm for removing dihedrals that contain linear bends
    • fftk: added check to dihedral scan guess that removes undefined dihedrals due to linear bends
    • fftk: added autodetection of Gaussian linear bends
    • fftk: added recognition of Gaussian lbend as angle for guessing BA parameter to optimize
    • fftk: added recognition of Gaussian lbend as angle for averaging zmat definitions
    • fftk: replaced string match with regexp to accomodate Gaussian lbend distortions
    • Incorporated Olaf's most recent VTF plugin, which re-adds the ability to compile with or without linking to Tcl.
    • Updated version of Olaf's VTF plugin that addresses issues with Windows builds behaving incorrectly.
    • Added plugin build flags for NVIDIA Kayla ARM+GPU test platform
    • networkview: added in a package require for psfgen that was causing the command line interface to fail (where it was working in the gui code because gui code was getting the require via another path).
    • dlpolyplugin: Fixed a typo in the PBC unit cell basis vector orthogonality check.
    • parsefep: Updated to latest parseFEP version from Peng Liu and Chris Chipot, which includes updates to use the exectool plugin for launching external programs, and various other updates. I updated the version number to 1.8 for this one to match the previous rev in VMD CVS.
    • mdffplugin: added option in mdff setup to use implicit solvent
    • More work on the parallel reductions for min/max/mean/stddev calcs.
    • Added first part of parallel reduction code for min/max/mean/stddev kernel.
    • Eliminated some of the scaffolding used for early CUDA MDFF testing. Started adding a new min/max/mean/stddev kernel for computing volume stats.
    • Added CC range clamping and sample count thresholding to the spatial CC map generation logic, so that blocks with poor sample counts (and thus questionable statistical validity) are excluded from emitting a non-zero CC.
    • Added command/option parsing to optionally allow the spatial CC map and synthetic density map to DX files rather than appending to existing molecules.
    • Rewrote the safety checking logic in the per-thread-block local cross correlation calculation to prevent return of a NaN result which can occur in some tricky corner cases where we have only one valid voxel comparison and the behavior of floating point arithmetic results in a slightly negative input for the standard deviation calculation, which generates NaN in the square root computation when it should have been exactly zero.
    • Added source code command for the color scale volume texturing color table index clamping code noting why it is not vulnerable to the same NaN issue that the HSV color mapping routine is.
    • Rewrote the HSV volume texturing color table range clamping conditional expression to force correct behavior in the presence of NaN floating point values. The previous code could produce an out-of-bounds color table index when compiled with the Intel C/C++ compilers, whereas the same code compiled with GCC would not. By rewriting the conditional expression to take advantage of the IEEE FP property that comparisons vs. NaN must always fail, we cause the computed color table index to be clamped to zero. This should work on any compiler.
    • Added the necessary code for computing spatial cross correlation maps between the reference map and synthetic density map.
    • Added code to launch the density and difference map kernels when requested
    • Updated the CUDA MDFF interfaces to allow the Tcl commands that compare vs. a reference map to request that the corresponding density map, density difference map, and spatial CC map be saved, and to allow specification of a minimum density threshold cutoff as well.
    • Added VMDApp and BaseMolecule APIs and new VolumetricData constructors to allow double precision origin/axes information to be passed in directly when creating new VolumetricData objects.
    • Added an inlined CUDA device function to compute per-thread-block cross correlations which are optionally written to global memory, for use in evaluating spatially localized cross correlation.
    • Applied patch by Gibertini Marco and Giovanni Pizzi that fixes a bug with handling of XSF files that require rotation of the axes, where the origin of the volume was not getting rotated along with the axes.
    • Added CUDASpatialSearch.cu to the build.
    • Migrated the CUDA kernels for generating spatial acceleration grids out of the QuickSurf and MDFF modules and into its own source file since half of this code (and all of the algorithm) is now shared among all of the CUDA-accelerated QuickSurf and MDFF density map generation and correlation routines.
    • Migrated CUDA kernels for generating spatial acceleration data structures and atom hashing into CUDASpatialSearch.
    • cranked version
  • VMD 1.9.2 alpha 36 December 6, 2013)
    • Fixed parsing of temporary environment variable override for the field lines particle advection integration step size.
    • Fixed a typo in one of the temporary environment variable checks.
    • Enable override of the default maximum number of field line seeds through environment variables, until we have added a GUI control for this.
    • Incorporated changes to the field line visualization code based my work in the Faraday Discussion paper with Matthieu Chavent. The new field lines code now supports a "tube" based field line / streamline visualization mode that looks much nicer when rendered with Tachyon. The new code allows the tube radius and mesh resolution to be adjusted, and it makes basic use of the existing cylinder and sphere rendering primitives in VMD. It is clear in this particular case that we would benefit from having a specific tube array rendering primitive that drew spheres at the joints, and made use of the GLSL sphere primitives where possible. The new code also allows the particle advection integration step size to be adjusted to make smoother renderings for vector fields that may not be as high resolution as the electrostatic potential maps I originally used for developing the code. The new code also supports a flag to control whether the streamline seeds are chosen on a regular grid, or if they are selected according to gradient magnitude. For the time being the new field line rendering parameters are obtained through environment variables until the necessary changes have been made to the GUI code.
    • Added current rev of the GPU-accelerated MDFF analysis routines to the main VMD CVS.
    • Fix uninitialized mobile device pointer in VMDApp constructor.
    • When using OptiX 3.5.0 or greater, select the new Trbvh AS builder
    • Added a temporary workaround to satisfy OptiX linkage dependencies on libGL.so which are only needed when using the OpenGL interop features of OptiX. When VMD is compiled without OpenGL support, it is desirable that we not need libGL.so at all, so this workaround adds three fake stub functions that solve this problem.
    • Fix a scenario where the BMP output routine could go past the end of an internal buffer due to the padded buffer size calculation which is not necessarily evenly divisible by 3.
    • tngplugin: Added reference to JCC paper, Gromacs web site.
    • tngplugin: Added compilation rules for the new Gromacs TNG plugin
    • tngplugin: New plugin to support the Gromacs TNG trajectory format, contributed by the Gromacs team, and Magnus Lundborg in particular.
    • nanotube: Fix to the nanotube plugin that corrects an issue with bonds being of unequal length different from the requested bond length due to the fact that the nanotube is inscribed into a cylinder.
    • Increased MeasureSymmetry maxnatoms to 200 due to speed increases in the last few CPU generations.
    • Applied a patch from François-Xavier Coudert to fix issues with the way symmetries are calculated for larger structures using the partial random sampling approach. While partial random sampling of the atoms of the structure is a good idea, it turns out that cannot be used for scoring, at least not with the original implementation trans_overlap(). It may also be worth increasing maxnatoms to 200 based on an assumption of greater CPU speed.
    • Improved the FreeVR button class support for generation of UserKeyEvent AUX events from buttons that aren't assigned to hard-coded VMD behaviors. The updated code only triggers events on button state changes rather than continuously while being held, a larger range of button indices are tested, and a bug in event generation was fixed. These were all tested on the IU IQstation at SC2013 so far.
    • Added VMDApp access to the FreeVR interface classes so that they can trigger various UserKey events when particular buttons are pressed, much like what we already do for the Spaceball and similar hardware.
    • fftk: added some entries in TODO
    • Back-ported more improvments into QuickSurf from new MDFF code
    • Backport MDFF related improvements into the main CUDA QuickSurf code.
    • Condensed some of the QuickSurf code in the routines that perform spatial hashing and other setup calculations.
    • Updated the OptiXRenderer image I/O code to use the same image format recognition and output scheme we use for the built-in Snapshot renderer.
    • fftk: fixed incorrect syntax for mol addfile molid command
    • Fix some insufficiently thorough parameter checking in the parsing code for "mol addfile"
    • fftk: updated fftk citation in gui, parameter file writer, and docs
    • fftk: fixed typo in sanity check for BondAngle parameter guess button
    • fftk: added paper citation info to gui
    • fftk: better handling of unicode characters in gui
    • topotools: handle low-dimensional system box dimensions consistent with LAMMPS fix bug in writing non-orthogonal boxes reported by Sandeep Kumar Reddy
    • topotools: mention in README that topotools is maintained on github
    • Added a comment about the reordering of header files to prevent name collisions between the Tachyon C headers and identically named enumerated types in the OptiXRenderer class.
    • Added runtime calls to OptiXRenderer::device_count() to check whether there are any OptiX-capable GPUs before we add the OptiX-based ray tracing engine to the list of available renderers.
    • Added code to print startup messages with the count of OptiX-capable GPUs found during VMD initialization.
    • Added static query methods to OptiXRenderer to allow OptiX device queries without having an initialized OptiXRenderer object.
    • Added notes about Android NDK versions we've tested locally
    • Replaced Android NDK path "ndk" with the specific version we're using to help retain sanity when debugging problems that have cropped up with specific versions of the NDK.
    • Add some button messages for FreeVR aux buttons until we have an implementation that triggers user key events.
    • cranked version
  • VMD 1.9.2 alpha 35 October 24, 2013)
    • Increase max bond count slightly for Blue Waters, but keep it on the lean side to save memory on the XK7 nodes.
    • Added a build configuration for IBM Blue Gene/Q for Matthew Downtown.
    • renamed internal vec_sub helper to avoid a name collision with a compiler intrinsic on IBM Blue Gene/Q
    • Avoid inclusion of the CUDAQuickSurf.h header when compiling on platforms that don't support CUDA, e.g. IBM Blue Gene/Q
    • Updated the source code and comments for OpenCL code branch that had previously targeted the CPU-based OpenCL on the IBM Power 775 supercomputers which was the original Blue Waters architecture. Since the final machine ended up being a Cray, the IBM Power 775 code path isn't needed currently, but it may be useful to hold on to this for a future machine.
    • Revert to CUDA 4.0 while sorting out OptiX dependencies needed for production builds.
    • Protect the new QuickSurf CUDA object deletion code with ifdefs since it doesn't exist in a non-CUDA build.
    • qmtool: updated routines to deal with changes to G09RevD log files found when loading hessian log files from fftk
    • fftk: fix for gaussian hessian calculation, should be version independent
    • bendixplugin: Added link for Bendix in the top level docs
    • bendixplugin: Added a top level Bendix doc page for the time being, which points to the Sansom lab's Bendix home page.
    • remote: fixed a bug with a changed proc signature; other minor label changes.
    • Prevent draw-multiple-frames zero or negative frame step sizes from being accepted as valid and being used in the loop that generates the drawn frame list.
    • psfgen: Add non-plugin NAMD binary file writing command "writenamdbin".
    • Enable readpsf to read coordinates from NAMD binary files by adding "namdbin filename" as final arguments.
    • Added code to the VMD configure script to copy the compiled OptiX PTX code from the build area or installation archive into the shaders directory in the final VMD installation image.
    • Added code to make_distrib to copy the compiled OptiX PTX code to the generated distribution archive.
    • Set default OptiX shader path to prepare for making full distribution builds
    • Added new enumerated types for the two types of OptiX ray gen programs we use and replaced all remaining hard-coded indices with the new enumerated types to make the code easier to follow and to help prevent bugs from creeping in.
    • Force OptiX to build the acceleration structure prior to the actual ray tracing run so that we can separate the runtime for acceleration structure calculation when benchmarking renderings of very large structures
    • cranked version
  • VMD 1.9.2 alpha 34 October 1, 2013)
    • Prevent mismatched parameters for OptiX ray types, entry points, and other data by using named enums rather than hard-coded integer indices.
    • psfgen: Fix missing return value in hash array code.
    • psfplugin: Read (but do not write) insertion code in resid field of psf file.
    • psfgen: Properly handle insertion codes by appending the code to the resid string as in "48A". Read and write insertion code in resid field of psf file. Add "readpsf file.psf pdb file.pdb" to read insertion code from pdb file. Add "regenerate resids" to remove insertion codes with minimal residue renumbering.
    • Disable the second OptiX miss program call since it messes up the renderings in some cases.
    • fftk: recorded user feature requests in TODO note
    • psfgen: Handle various bond/angle/... misformattings for 10M-100M-atom structures.
    • psfplugin: Handle various bond/angle/... misformattings for 10M-100M-atom structures.
    • vmdmovie: Added support for the OptiXInternal renderer in the movie maker GUI
    • fftk: fix bug due to missing bracket
    • topotools: crossterms have no types, so they don't need to be fixed for LAMMPS protect against Tcl's "octabug", i.e. that all numbers with a leading zero will be parsed as octal numbers.
    • cubeplugin: make the parser for the cubefile header more resilient when new fields are added like in g09 rev d.01. some cleanups.
    • Added support for mirror reflection via the same specular threshold approach we use in the Tachyon code.
    • Add storage of mirror reflectivity material properties in the OptiX renderer so we can implement the same reflectivity threshold scheme that we use for Tachyon.
    • Added the OptiX code to spawn reflection rays, in prep for adding the same reflection thresholding scheme VMD currently uses for Tachyon renderings.
    • Removed debugging code from the OptiX version of the background texturing routines ported from Tachyon.
    • Completed a working implementation of the gradient background coloring scheme for the OptiX renderer based on the sky sphere and sky plane background texturing routines from Tachyon. I also took this opportunity to rename various member variables in OptiXRenderer to more closely match the names of the same variables in Tachyon to preserve sanity when debugging the OptiX version of the code.
    • Allow runtime override of maximum optix ray depth
    • topotools: add utility function to rename numerical atom and other types to have leading zeros, so they get sorted in correct numerical order when doing ASCII string sorts. This helps to retain the order of parameters when processing LAMMPS data files.
    • topotools: support for LAMMPS hybrid pair styles is not going to work well. declare it unsupported
    • topotools: add crossterm APIs to help message
    • topotools: add some code to make crossterm support work decently on older VMD versions, i.e. print a warning and return an empty list or do not try to do anything.
    • topotools: add documentation for crossterm commands
    • psfgen: Leave atoms in reasonable order when applying patches. Works well as long as added atoms follow modified atoms in patch definition.
    • It turns out that even with the multi-pass AA approach, we can still encounter OptiX kernel timeouts for difficult scenes when AO is enabled with high sample counts. I have rewritten the rendering code further to change the AO code so that we can cause new AO samples to be taken at the same time we are taking new AA samples. In the case of AO samples, in order to prevent noise at low sample counts, we must seed all of the AO RNGs the same way, whereas we can (and should) seed the AA RNGs with independent values. This scheme lets us take fewer AO samples per launch while still obtaining more AO sampling as we do further AA passes. I still need to test this scheme in movie rendering to ensure we don't have problems there.
    • Eliminated the old non-accumulation buffer based ray generation routines.
    • Rewrote OptiXRenderer::render() and the associated ray generation programs for the perspective and orthographic camera to be able to use an accumulation buffer for multi-pass rendering. One limitation that OptiX has to work around is that the host platform may enforce a watchdog timer on the GPU which can cause CUDA kernel timeouts if a one or more rays execute for too long in a single OptiX launch. This means that it isn't feasible to do too more than a certain amount of looping within a single ray tree, and that in order to avoid kernel timeouts during rendering of difficult scenes, we must instead break up the rendering process into multiple passes, storing our intermediate results into an accumulation buffer which is read in at the start of each launch, and written back at the end of each launch. The final framebuffer output is written by a second special ray generation program that does the pixel type conversion and range clamping, while copying from the accumulation buffer to the final color buffer. For the moment, we have retained the ability to do iterations within each ray launch which may perform better for non-AO renderings with small AA sample counts. With further testing we'll find out of it's worth keeping the internal looping or if that just eats registers and doesn't really contribute much to overall performance in those cases. If we wanted to do larger numbers of AO samples, it might turn out that we'd have to handle that with multiple passes as well, but for now we'll just use multiple passes only for AA samples.
    • vtfplugin: added URL link suggested by Olaf
    • Eliminated old branch of the acceleration builder setup code.
    • Increased the default OptiX stack size to 5x the initial size, which cures stack overflows for the Chromatophore test case which has a lot of transparent surfaces. Added code to enable all OptiX exception handlers at runtime for debugging purposes if the VMDOPTIXDEBUG environment variable is set.
    • Changed root level acceleration node to "NoAccel" since the nodes deeper in the scene graph have their own acceleration by virtue of the top level group. Eliminated old testing related ifdef block that's no longer needed.
    • Eliminated old OptiX test code paths that are no longer needed.
    • Move checks for OptiX debugging console output settings into the context initialization method rather than in the OptiXRenderer constructor.
    • Added a new VMDQUICKSURFMINMEM environment variable and associated control logic to make the CUDA QuickSurf code ultra-conservative of memory, for situations where it matters.
    • Reallocate the CUDAQuickSurf object on-demand if it was destroyed previously to make space for OptiX or other GPU computations...
    • Added a special-case environment variable check for QuickSurf to determine if VMD should free all GPU memory once the surface has been calculated. At present, this is only intended for internal testing before we implement an automatic mechanism to force all GPU-accelerated graphical representations to dump their memory at the point where VMD launches an OptiX ray tracing run on the GPU(s) which will need all of their memory.
    • Added a method to force QuickSurf objects to free up their GPU memory on-demand so that OptiX renderings can have all of the GPU memory during the ray tracing process. The performance hit for recreating the CUDA QuickSurf object after ray tracing completes is likely very minor compared to the impact of having to fall back to the CPU for rendering or worse, borderline cases where OptiX would otherwise have to use heavy amounts of paging to and from host memory during rendering to cover the memory shortfall.
    • Added a method to force QuickSurf objects to free up their GPU memory on-demand so that OptiX renderings can have all of the GPU memory during the ray tracing process. The performance hit for recreating the CUDA QuickSurf object after ray tracing completes is likely very minor compared to the impact of having to fall back to the CPU for rendering or worse, borderline cases where OptiX would otherwise have to use heavy amounts of paging to and from host memory during rendering to cover the memory shortfall.
    • Corrected the behavior of the startup code so VMD doesn't show the GUI menus when the user runs it with '-dispdev openglpbuffer', even if it has been compiled for a normal desktop runtime configuration.
    • Implemented mechanism to control degree of diagnostic and timing information that the VMD OptiX renderer emits to the text console during runs. This is helpful to minimize output on large parallel runs on Blue Waters, except when actually needed for debugging.
    • Fix a tiny antialiasing scaling factor bug in the OptiX renderer
    • fftk: added links to manuscript publication doi
    • Finished adding the OptiX rendering code for rings, which are then used to implement the cylinder caps VMD needs for secondary structure alpha helix cylinders.
    • Added a ring array primitive for OptiX, ported from Tachyon
    • Added an aggregator for cylinders to buffer larger numbers of lone cylinders and send them to OptiX in a single batch using the new color-per-cylinder array primtive. Still need to implement ring objects and add tracking for cylinder caps.
    • Added draft implementation of color-per-cylinder cylinder arrays, and did miscellaneous cleanup of the shader header and other code along the way.
    • Eliminated unnecessary hit point calcs from the OptiX sphere routines. Given the structure of OptiX, we will calc the hit point in the shading code where it is usually needed, not in the intersection programs. Even in the case of 3-D volumetric textures, there's no need to do this math here.
    • Eliminated remaining double-precision floating point constants and math function calls, replacing them with single-precision variants. This should help save registers and improve performance further.
    • Further cleanup of the OptiX cylinder intersection program, fixed a typo in the normal calculation
    • Minor tweaks to the cylinder and sphere intersection programs to eliminate bits of overhead and unused functionality in the current renderer.
    • Implemented basic ambient occlusion lighting, directly adapted from the original code in Tachyon, with various simplifications to avoid getting carried away with algorithm details that would likely slow down the GPU.
    • Fixed up major remaining issues in the OptiX orthographic and perspective camera ray generation programs, added working antialiasing, and changed all of the OptiX renderer classes to pass in the appropriate VMD state to make it behave correctly.
    • Changed the default shader .ptx file search path when building real VMD binaries (and always when on Blue Waters). Added some simple boilerplate antialiasing to the ray generation programs. Added code to enable use of multiple image formats.
    • topotools: canonicalization of crossterms
    • topotools: Include support for crossterms contributed by Josh Vermaas and step version to 1.4
    • Added OptiX build rules for Blue Waters
    • cranked version to distinguish for recent revisions in support of OptiX enabled builds of VMD, particularly on Blue Waters.
    • Completed first rev of the cylinder primitive and text rendering code.
    • Added draft of OptiX cylinder array code
    • Changed OptiXRenderer::sphere_array to allow a NULL transformation, since the text rendering code operates in world coordinates already
    • Added the first half of the text rendering code for OptiX. Added the OptiX primitives for uniform color sphere arrays used for text rendering, and did some renaming of the existing sphere array primitives to clarify the differences between the two.
    • Added a triangle aggregator for lone triangles that result from fallback to base class rendering primitives for any triangle mesh formats that we haven't yet written for OptiXDisplayDevice.
    • Added total runtime instrumentation to LibTachyon and LibOptiX to facilitate ongoing performance optimization work. Since the runtime fractions associated with vertex buffer conversino, scene preprocessing, acceleration data structure construction, and rendering vary wildly between the two renderers, only the the total runtime (which must include VMDDisplayList scene graph traversal) is useful for comparing performance of the two.
    • Added object counters to enable easier performance tuning with various test scenarios.
    • Added support for n3b_v3f and n3f_v3f triangle mesh formats, and fixed a coloring bug in the new version c4u_n3b_v3f triangle mesh format.
    • Implemented new more memory-optimized trimesh_c4u_n3b_v3f primitive, adjusted the stack size up again to prevent overflow, and did some housekeeping on the other kernels.
    • Draft OptiX shader code for trimesh_c4u_n3b_v3f format
    • Use a more minimalistic OptiX stack size for better performance. Final stack size will have to be determined by extensive testing with real scenes that have a higher degree of secondary ray traversals, e.g. the chromatophore scene.
    • Increase the default OptiX stack size to cure problems with transparent surface renderings.
    • Changed the default OptiX acceleration builder from Sbvh to MedianBvh, which gives a 10x performance boost for the large HIV-1 triangle mesh cases
    • Allow runtime override of the OptiX acceleration builder and traverser for ongoing performance testing and tuning work.
    • Added timing code and timer reporting to the OptiX renderer
    • Eliminated the FileRenderList environment variable check, since the OptiX renderer is working well for most scenes now.
    • Force normalization of light direction vectors when they get copied into the OptiX light buffer. Fixed OptiX shader's accumulation of phong hightlights so they are not affected by the edge cueing shader.
    • Added runtime user control over shadow casting for OptiX
    • Added depth cueing / fog handling to the OptiX shading code
    • Added transparency and outline shading to the OptiX renderer. It appears that some versions of the CUDA toolchain may mis-compile the transmission ray call in a particularly nasty way, so it is disabled until further testing proves whether this is a compiler bug, or some kind of CUDA kernel memory corruption issue of some sort.
    • Copy all directional light state from VMD into the OptiX shader.
    • Correctly track background/fog color state
    • Added a material cache to the OptiX renderer to prevent redundant material nodes from being created.
    • Added triangle strip handling for OptiX
    • Enabled OptiX Sbvh acceleration builder for the main geometry group, and Bvh for the top scene node. Added initial OptiX renderer methods for trimesh_c4u_n3b_v3f() and trimesh_c4u_n3f_v3f().
    • Changed the top level driver code to destroy and recreate the OptiXRenderer object on every frame since the OptiXRenderer class isn't ready for back-to-back calls while reusing same OptiX context. This avoids issues with inconsistent context state, with the current implementation. Added a low-performance tricolor list primitive as a short-term catch-all for rendering all of the geometry types that don't have a custom-written primitive yet. This gets 90% of geometry working immediately, albeit at much lower performance than we will get after the custom mesh primitives are in place
    • Corrected the scoping of the sphere buffer objects so they are uniquely associated with only one geometry node.
    • cgtools: added docs for the do_rotations parameter for apply the reverse coarse graining to a RBCG model.
    • Unmap geometry buffer when done
    • Added more details to sphere array geometry gen wrapper
    • Began adding in the geometry generation wrapper routiens for OptiX
    • Began adding the draft versions of the key OptiX shading routines needed for VMD
    • Added in the OptiX ray tracing routines for generating primary rays, handling misses, and various shader state variables for background gradients and other items.
    • Added compilation rules for generating the OptiX PTX shader code from a corresponding CUDA source file.
    • Added placeholder version of the OptiX shader code, along with new PPM image output routines adapted from Tachyon.
    • Added crossterms set/get routines for molinfo command
    • fftk: noted an issue with QMtool dependency on tk
    • fftk: BA optimization cannot run without tk due to dependency in QMtool, which requires tk. added a check for the build script to test for tk.
    • fftk: fixed problem in which BondAngleOpt build script wasnt setting lists properly
    • psfgen: Do not generate O-H-H angles (assume these are water molecules).
    • fftk: updated ffTK reference (doi)
    • cranked version
  • VMD 1.9.2 alpha 33 (August 19, 2013)
    • fftk: updated citation in par file writer
    • Reorganized configure script to accomodate the first round of changes needed for building the internal OptiX ray tracing engine.
    • Added NVIDIA OptiX renderer to the renderer list, initially hidden until full shading and geometry functionality is completely implemented.
    • remote: revised button configuration so that it isn't getting sent out (unnecessarily) as often to as many clients.
    • networkview: don't add color commands to the drawing if the color isn't actually changing.
    • lammpsplugin: support LAMMPS native trajectories with variable number of atoms through provisioning constant storage via an environment variable LAMMPSMAXATOM
    • lammpsplugin: the lammpstrj plugin always needs to read structure information to initialize its internal bookkeeping. add a flag to detect if this was done, and if not called externally, run it internally instead
    • vtfplugin: allow compilation of VTF plugin without Tcl using -DVTF_DISABLE_TCL
    • support MinGW as alternative windows compiler platform for VMD plugins
    • catdcd: include changes from port to ming64 and step version to 5.1
    • psfgen: Free old memory when regenerating angles or dihedrals for entire structure.
    • psfgen: Fix error on dihedral generation for triangles (bonds A-B, B-C, A-C). Also, clarify previous commit: Inter-segment dihedrals were missed on regeneration if the first and last atoms of the dihedral (A and D of A-B-C-D) had the same index within their segments (i.e., A is the 5th atom in SEG1 and D is the 5th atom in SEG2).
    • psfgen: Increase version to 1.6.2 due to fixed bug causing missed inter-segment dihedrals on regeneration.
    • psfgen: Test for and fix bug causing missed inter-segment dihedrals on regeneration.
    • fftk: added a check to charge optimization that checks for an empty return result
    • cranked version
  • VMD 1.9.2 alpha 32 (July 10, 2013)
    • Eliminated debugging output for prototype Tcl interface for measure sasalist
    • Eliminated the random sphere surface sample array generation code from the per-thread code path in favor of using the pre-generated sample array. This gives higher performance when processing a list of selections, and it avoids race conditions in the simple-but-fast thread-unsafe random number generator used in the original code.
    • Silence internal debug messages for the multithreaded sasa variant
    • added multithreaded code path for the multi-selection sasa prototype
    • Added prototype atom selection list variant of the sasa algorithm
    • networkview: trimmed filenames being read in from txt file to eliminate problems with leading/trailing spaces
    • utilities: Changed quaternion code to eliminate extra braces
    • nmwiz: Updated version of the normal mode wizard from Ahmet Bakan. Segment names are now handled, which ensures proper visualization of chains with distinct segment names but same identifiers.
    • psfgen: Use 6-wide atom type when writing CHARMM EXT format X-PLOR psf file.
    • psfgen: Use field width of 10 for angles etc. when writing CHARMM EXT format.
    • psfgen: Use field width of 10 when reading CHARMM EXT angles/dihedrals/impropers/cmaps.
    • psfplugin: More closely follow CHARMM EXT format, in particular field widths for angles/dihedrals/etc. and atom type width for X-PLOR-style files (atom type is a string rather than an integer).
    • psfgen: Add error checking for bond/angle/dihedral/improper/crossterm read.
    • cranked version
  • VMD 1.9.2 alpha 31 (June 21, 2013)
    • viewchangerender: Changed the state saving mechanism in the viewchangerender plugin so that it doesn't emit lots of console output when doing parallel movie rendering runs on large node counts.
    • Added new Tachyon parallel workgroup prototype code. The existing code works so long as all nodes enter the rendering together which causes MPI_Comm_split() to occur at the right time, since it is a form of collective operation. If the nodes are running in the dynamic work scheduler however, this approach doesn't work, and we have to have partitioned up the nodes into workgroups beforehand. This draft also exercises some of the newer Tachyon APIs in development before they are finalized.
    • Make jsplugin console status/debugging output silent unless the environment variable VMDJSVERBOSE is set.
    • QuickSurf is now silent as far as console output goes unless the environment variable VMDQUICKSURFVERBOSE is set, in which case it emits various timing and statistics info as it runs much like past versions did.
    • Added comments to the startup script to show the proper 'qsub' syntax for running parallel VMD jobs on Blue Waters w/ support for OpenGL Pbuffer off-screen rendering on the Cray XK7 nodes.
    • cranked version
  • VMD 1.9.2 alpha 30 (June 20, 2013)
    • Enabled the special MPI-related NCSA Blue Waters startup code in the standard startup scripts by default. When the startup script detects that we're running a Blue Waters build of VMD, it checks to see if it is being run from within the batch queueing system on the compute nodes, or interactively on one of the login nodes. When the startup code detects it is being run interactively, it sets a flag to prevent VMD from initializing it's MPI features, and it runs interactively just as a standard VMD build for a desktop machine would. In principle, we could take this even further and build the Blue Waters versions of VMD with full GUI support when/if Virtual GL or other remote display mechanisms become feasible from the login nodes on Blue Waters.
    • viewchangerender: Eliminated spurious debgging-oriented console output and protected status messages with checks for [parallel noderank] == 0.
    • Fixed leftover lighting change callback to the original Chromatophore test case. Rather than being hard-coded, the logical thing to do is to extend the interface for VCR to incorporate a per-frame user callback. Eliminated unnecessary per-frame console output for parallel rendering runs.
    • vmdremote: new way to determine that the mobile device wants to reset the view (that actually works on fast mobile devices like the nexus 10)
    • removed code that was a bit of a hack to determine that the mobile client was sending a message to reset the view. Now being done via a more formal message.
    • psfgen: Increase version from 1.6 to 1.6.1 due to new psf file code.
    • psfgen: Handle masses as large as 99999.
    • psfplugin: Handle masses as large as 99999.
    • psfplugin: Tolerate empty atomid and resid in psf atom records as before.
    • psfgen: Improve robustness of psf file reading. In particular, added field widths to "NAMD" file atom format string, test that blanks are present at the right places in Drude and EXT wide-format files, and for regular psf files accomodate text field overflow from 4 to 7 characters.
    • psfgen: Add field width limits (%7s) to atom scanf format string.
    • psfgen: Write psf files with NAMD and EXT flags as appropriate.
    • psfgen: Recognize EXT flag and read bonds with field width of 10.
    • psfplugin: Disable charmmext when namdfmt is active, since namdfmt is space-delimited anyway, to keep written files compatible with older builds of psfgen that don't recognize the EXT flag. Enable charmmext at numatoms > 9999999 rather than 99999999 to avoid breaking space-delimited readers at ten million atoms.
    • psfgen: Reverse bond/angle/etc. order on plugin input to compensate for reversal on output.
    • cranked version
  • VMD 1.9.2 alpha 29 (June 17, 2013)
    • utilities: Updated quaternion code to be more paranoid about the potential for division by zero.
    • plumed: Updated plumed plugin to v2.1 from Toni Giorgino.
    • Added example detection of interactive runs on Cray XE6/XK7, to support both interactive and batch-mode parallel MPI runs of the same VMD binary.
    • Updated example startup script modifications for MPI-enabled runs on Cray XE6/XK7 compute nodes, optionally supporting off-screen OpenGL rendering on XK7 nodes, using OpenGL Pbuffer support (currently only supported by NCSA Blue Waters).
    • Updated the MPI-enabled VMD builds to be executed either with MPI parallelization enabled or disabled, determined at runtime by environment variables. This allows the same VMD binary to be used for both interactive and batch-mode parallel runs on the Cray XE6/XK7 supercomputers such as the NCSA Blue Waters and ORNL Titan machines.
    • mdff: mdff tmp on win32 changed
    • mdff: win32 mdff file delete fix
    • mdff: win32 mdff tmp dir writable workaround
    • catdcd: Added support for VM-page and FS-block aligned I/Os required by the new SSD-optimized jsplugin.
    • jsplugin: Make it possible to write a trajectory-only JS file again. Corrected a C++ism and added comments for trajectory-only output case
    • fastio: Be sure to fail on unrecoverable I/O errors from POSIX code branch
    • Started updating the VMD startup code to make it possible to use an MPI-enabled VMD binary both interactively and in batch mode. These changes, when combined with others, will make it possible to use a single VMD binary on machines like NCSA Blue Waters and ORNL Titan, whether a user is running the program interactively on a login node, in an interactive session on a compute node, or in a traditional batch mode MPI run on a large number of compute nodes. If VMD has been compiled with MPI support enabled, it will check for a "VMDNOMPI" environment variable at startup, and if present, this will disable VMD's use of MPI and it will behave just like a normal workstation (single-node) build of VMD.
    • Another tweak to QuickSurf thurst+MC memory reservation array size to prevent unexpected memory exhaustion for very large surface renderings on the XK7 compute nodes.
    • Updated compilation flags for Intel C/C++ for the ORNL Titan Cray XK7
    • Added support for Intel compilers in BLUEWATERS target, in preparation for merging Titan build flags with Blue Waters.
    • Added more Titan login node names
    • Genericize the CUDA paths in the Blue Waters configuration so that we can get things compiling on both Blue Waters and Titan with minimal diffs.
    • Added ORNL Titan build flags and directories to the plugin build rules.
    • Updated NCSA Blue Waters plugin compilation flags.
    • cranked version
  • VMD 1.9.2 alpha 28 (June 4, 2013)
    • Turn on OpenGL Pbuffer rendering for Blue Waters XK7 nodes by default.
    • dcdplugin: Changed the dcdplugin reader code to avoid using readv() for the time being since it turns out that at least on some versions of Linux it can behave very badly when reading in very large I/O ops, e.g. > 2GB, and some libc implementations do extra data copies that harm both performance and peak memory utilization.
    • vmdprefs: add documentation website
    • vmdprefs: fixed menu x,y initialization in gui
    • vmdprefs: modified how gui manages menu x,y positions
    • jsplugin: Changed the jsplugin reader code to avoid using readv() for the time being since it turns out that at least on some versions of Linux it can behave very badly when reading in very large I/O ops, e.g. > 2GB, and some libc implementations do extra data copies that harm both performance and peak memory utilization.
    • fastio: Updated the POSIX based I/O code for fio_fread() and fio_fwrite() to use internal looping to handle cases where the underlying read() and write() system calls fail to complete very large, e.g. > 2GB, read/write sizes resulting in short reads or writes. This problem can occur even on 64-bit platforms, and is a combination of issues related to overrunning SSIZE_MAX and/or internal kernel limits of some kind. Implemented similar looping constructs within the individual read/write calls in the fio_readv() and fio_writev() implementations though these still need much more testing. The POSIX readv() and writev() APIs require that the I/O operation be atomic, and to achieve this requirement some libc implementations create a temporary internal copy of the I/O vectors in a contiguous memory buffer that can be read to or written from with a single I/O call. Such implementations of readv() or writev() are therefore not useful to us since these copies are very harmful for performance and they can have internal buffer allocation limitations that cause failures for very large I/O operations. In cases where the underlying OS kernel can't implement readv() or writev() natively, without harmful copies or I/O buffer size limitations, we are better off avoiding readv()/writev() and doing the I/Os for ourselves, since we don't care about atomicity in the plugins where readv() or writev() have been used up to this point.
    • vmdprefs: default main menu to "on" outside of block
    • fftk: updated header information written in parameter files
    • fftk: updated CGM link to ks webpage in the docs
    • fftk: significantly updated documentation page in preparation for VMD 1.9.2 release
    • fftk: removed puts commands that were for debugging
    • jsplugin: added more checks for timestep write failures
    • jsplugin: promote various integer constants to long types to avoid integer wraparound when working with huge virus structures that have individual data fields (coords, bonds, angles, dihedrals, etc) that are larger than 2GB, either in-memory or on-disk.
    • Updated jsplugin to use the new hash table entry count query routines.
    • Added a routine for querying the number of unique hash entries, which is used for string table compression, e.g. in jsplugin.
    • Updated the coordinate loading console message printing code to correctly handle per-timestep data sizes that are greater than 2GB.
    • jsplugin: promote types used in file pointer debugging output
    • jsplugin: Added conditional compilation of debug output so it can be easily silenced when building on Blue Waters for parallel I/O runs..
    • pbctools: More pbctool updates from Olaf to reconcile changes from Toni
    • pbctools: Applied Toni Giorgino's patch to improve the PBCTools "writexst" with more options, with associated documentation updates.
    • gromacsplugin: Applied Matt Harvey's patch to detect corrupt Gromacs XTC files and avoid subsequently triggering SIGFPE on bad input files.
    • Updated pbctools with version 2.7 from Olaf Lenz. The new version adds a "writexst" routine contributed by Toni Giorgino, and fully incorporates previous changes from the VMD CVS tree.
    • nmwiz: New nmwiz plugin from Ahmet Bakan, which fixes a bug and improves usability. Also eliminates extraneous whitespace.
    • cranked version
  • VMD 1.9.2 alpha 27 (May 25, 2013)
    • Added additional GPU memory safety padding when compiling parallel VMD builds for Blue Waters to overcome some unexpected GPU memory exhaustion scenarios that seem to occur only when we use the off-screen OpenGL Pbuffer rendering feature. By adding 512MB of minimum additional safety padding, we should not run out of framebuffer memory at runtime, even if the windowing system is poorly behaved. Eliminated a bunch of QuickSurf console I/O when compiled for Blue Waters
    • Set Blue Waters parallel builds of VMD to use a lower per-atom max bond connectivity to conserve memory so we can load 100M atom structures on the GPU-accelerated XK7 nodes that only have 32GB of host memory.
    • fftk: added a case to writeExceptionZMats that accounts for N=O, e.g., oxime tautomers
    • Fix reference count leak in the python atom selection contact calculation which otherwise prevents Python from freeing objects, effectively leaking memory.
    • vmdprefs: changed leading indent for custom code, and added colors data to pushtoVMD routines
    • Eliminated early revs of Pbuffer allocation code and various debugging checks
    • Completed a full implementation of the OpenGL Pbuffer framebuffer allocation code based on glXChooseFBConfig. The logic is directly analagous to what we do for normal windowed-mode OpenGL display, however the issue of whether or not we get a TrueColor X11 visual is moot since there is no on-display window to worry about. The vmd_get_fbconfig() routine implemented herein can serve as a starting point alternative to potentially replace the old vmd_get_visual() routine in the windowed OpenGL code path, though extra checks will have to be added to verify that framebuffer configs have a corresponding X visual that's usable, and the GLX_DRAWABLE_TYPE would need to be set to GLX_WINDOW_BIT.
    • Added Inform concatenation operator for unsigned ints
    • Eliminated unused variables that had remained from the original OpenGL initializaiton code path.
    • Added the OPENGLPBUFFER option to the Linux and Solaris builds
    • Clear up double-compilation of the OpenGL dependencies when compiling SDLOpenGLDisplayDevice or FltkOpenGLDisplayDevice classes.
    • corrected OpenGL directory dependencies in the rewritten build scripts
    • Massive rewrite of the way the VMD build system deals with OpenGL, since we now have the ability to support off-screen rendering independent of whether or not VMD includes traditional windowed-OpenGL, graphical user interfaces, etc. Added new self-consistency checks for user-specified configuration flags that have implied dependencies. Previously, any usage of OpenGL had been a tacit implication of a windowed display. With the new support for off-screen rendering, there may or may not necessarily be a GUI or windowed display and more configuration logic was needed to resolve these possibilities. We can use off-screen rendering both in binaries that run in a traditional windowed desktop mode as well as in binaries that run purely in text mode or with MPI on supercomputers such as Blue Waters where there are GPU-accelerated compute nodes that support OpenGL for off-screen rendering via Pbuffers or other APIs.
    • OpenGL Pbuffer rendering modes honor normal VMD display/image size environment variables except in cases where they exceed the maximum Pbuffer dimensions for the currently active OpenGL context.
    • Corrected conditional compilation dependencies for the new OpenGL Pbuffer-based off-screen rendering mode, to allow compilations that contain either normal windowed OpenGL, or Pbuffers, or both, in various combinations with other features.
    • parsefep: Updated parseFEP plugin with the latest code from Chris Chipot.
    • cranked version
  • VMD 1.9.2 alpha 26 (May 8, 2013)
    • psfgen: Updated version for the psfgen plugin I/O mod
    • Implemented image resizing for OpenGL Pbuffer off-screen rendering. The largest possible image that can be contained in the framebuffer is set when the OpenGL Pbuffer is initially created, so we store this in the OpenGL renderer subclass and check against the maximum image dimensions when we handle "display resize" commands and emit errors if they are beyond the limit. Since we are not processing windowing system events in this subclass, any display resize event must synchronously cause the reshape() method to be called, and we mark _needRedraw = 1 so that the scene is immediately redrawn and the contents of the off-screen buffer are again valid immediately upon return from the "display resize" command.
    • Started reworking the OpenGL Pbuffer initialization to better match the structure of the other OpenGL display subclasses. Lots of cleanup and elimination of early test code.
    • Added support for OpenGL Pbuffer off-screen rendering, to enable fast batch mode movie generation on supercomputers like Blue Waters, where we have the ability to create OpenGL contexts, but we do not have a traditional windowing system, and we're running entirely in batch mode.
    • Corrected the DisplayDevice base class stereo mode string list to be consistent, even though it would normally never be used in practice.
    • Improve ordering of window creation operations, to assist with specialization of the startup code into standard windows, and off-screen Pbuffer rendering contexts.
    • timeline: In cross-correlation density map, turned off the weighted scaling. This feature might return soon as a user-specified option, so the minor work to collect data for this and do the calculation still happens, but the result is not used.
    • timeline: Added new method for density map cross correlation: specify set of selections. GUI allows choice of methods for specifying selection: set of selections, or contiguous secondary structure. Also: fixed reference frame bug in distance calc.
    • topotools: correct typo in documentation. set version number to current version
    • topotools: add support for new Coeff section in LAMMPS data files
    • topotools: add support for writing lammps data files with triclinic cells
    • topotools: consistently handle the case of passing an atom selection to topotools, even if the atom selection is not up-to-date and thus cannot be recreated.
    • cranked version
  • VMD 1.9.2 alpha 25 (April 22, 2013)
    • Imported the latest version of the WorkForce threads code from Tachyon 0.99b6. This code import includes everything from Tachyon to make it easier to keep VMD in sync with Tachyon now that the Tachyon WorkForce threads code includes atomic ops and other features that may prove to helpful in VMD as well.
    • Added a call to "mol dataflag" so that VMD considers guessed bonds to be validated, so they will be written out if the user writes the generated structure to a PSF file.
    • Set appropriate output precision for colors and surface normals in triangle mesh primitives.
    • Implemented a new RenderManDisplayDevice::trimesh_c4u_n3b_v3f() method to reduce size of exported models.
    • Implemented a new Vrml2DisplayDevice::trimesh_c4u_n3b_v3f() method to reduce size of exported VRML 2.0 (aka VRML97) models.
    • Set appropriate output precision for colors and surface normals in X3D triangle mesh primitives. In particular, reduced the decimal precision of surface normals emitted by the trimesh_c4u_n3b_v3f() method since they originate in an already heavily quantized signed-byte representation used in OpenGL.
    • Rewrote POV3DisplayDevice::trimesh_c4n3v3() to avoid unnecessary copying of vertex buffers and eliminated code that was amplifying the total number of emitted vertices unnecessarily. This version eliminates the color table compression scheme used in the previous implementation, but it generates meshes that are at 30% smaller in many cases. We could reinstantiate the color table compression code, since the POV-Ray mesh2 primitive uses independent indexing for vertex coordinates and vertex colors.
    • cranked version
  • VMD 1.9.2 alpha 24 (April 16, 2013)
    • colorscalebar: fixed version number mismatch
    • Set appropriate output precision for surface normals in triangle mesh primitives. In particular, reduced the decimal precision of surface normals emitted by the trimesh_c4u_n3b_v3f() method since they originate in an already heavily quantized signed-byte representation used in OpenGL.
    • Further simplification of trimesh_c4u_n3b_v3f(), specifically in the vertex color state compression loop.
    • Continued elimination of unnecessary complexity in POV3DisplayDevice::trimesh_c4u_n3b_v3f().
    • Continued elimination of unnecessary vertex buffering and copying.
    • Updated comments about redundant color state compression
    • Begin elimination of unnecessary copies and vertex buffering in the POV3 export code.
    • Implemented an optimized trimesh_c4u_n3b_v3f() method for POV-Ray scene exports to avoid unwieldy scene file sizes on disk. While implementing, it became clear that the existing triangle mesh implementation trimesh_c4n3v3() that this routine is derived from could be greatly improved. The current implementations of both trimesh_c4n3v3() and trimesh_c4u_n3b_v3f() buffer vertex array data internally for no obvious reason. They should both be rewritten one more time to avoid unnecesssary copies and buffering.
    • Implemented an optimized trimesh_c4u_n3b_v3f() method for X3D and for X3Dom files to avoid unwieldy scene file sizes on disk.
    • Fixed color array indexing for WavefrontDisplayDevice::trimesh_c4u_n3b_v3f()
    • Implemented an optimized trimesh_c4u_n3b_v3f() method for Wavefront OBJ files to avoid unwieldy scene file sizes on disk.
    • Added CVS tags to heads of many plugin source files that were missing them.
    • nanotube: teach nanotube/graphene sheet builder to build boron nitride systems. Step version number to 1.5
    • colorscalebar, pbctools, solvate, vmddebug, zoomseq: replace incorrect "vmdcon -error" with "vmdcon -err", updated version number
    • topotools, nanotube: replace incorrect "vmdcon -error" with "vmdcon -err"
    • hesstrans: Fixed uninitialized variable
    • psfgen: write explicit pointer test to avoid compiler warnings
    • offplugin: move initialization of j to avoid problems with error handling jump code
    • lammpsplugin: Eliminated unused local variable and fixed an uninitialized idlist pointer variable.
    • webpdbplugin: fixed a typo in the call to Tcl_GetStringResult().
    • spiderplugin: Eliminated unused variables
    • pbeqplugin: eliminate compiler warning about format conversion specifier and parameter
    • offplugin: Fixed an uninitialized local variable issue.
    • moldenplugin: Eliminated unused variables
    • mdfplugin: eliminated unused variable
    • jsplugin: Force initialization of bszmask to eliminate compiler warnings about potentially uninitialized data.
    • gromacsplugin: Force initialization of bitsizeint[] to avoid compiler warnings.
    • moldenplugin, gamessplugin: Updated gamessplugin and moldenplugin to use the new version of the init_qmdata() helper routine which has been modified to avoid bogus generation of compiler warnings about uninitialized parameters.
    • qmplugin: Eliminate unusual parameter passing idiom that created bogus warnings about uninitialized variables in the calling code.
    • edmplugin: Eliminated the old code path that was intolerant of AMBER generated edm files
    • crdplugin: Eliminated uninitialized variable warning
    • Added comment regarding the opportunity to streamline the regeneration of nucleotide representations with the use of on-demand updated acceleration data structures.
    • Sorted the nucleotide residue matching tests so we don't start trying to match AMBER-specific residue names until we have failed to match others. This will help maintain performance for animation of very large structures that don't happen to use AMBER naming conventions. There are 2.4 times as many AMBER residue name combinations to check for, so we check them last rather than first.
    • Updated the code that displays nucleotide cylinders so it recognizes the AMBER residue names.
    • networkview: fixed a typo that raphael pointed out with counting the suboptimal path scaling
    • Soon the PDB will begin allowing structures that have at least two character chain IDs. Our own HIV structure (PDB code 3J3Q) requires this, and since we already have file formats in VMD that can accomodate larger chain IDs, this allows VMD to load the HIV structure in the way we expect that it will eventually be exposed by the PDB when they begin using their new file formats for large structures. The downside of this change is that it may cost 1-byte per atom more than the previous approach, which for 100M atom structures is 100MB more memory. A cursory inspection of the current atom struct indicates that compilers that preserve alignment of structure members may see no net change in memory footprint since we end up on proper 1-byte, 2-byte, and 4-byte word boundaries for the Atom members up to and including the chain index. Now that we allow multi-character chain IDs in VMD itself, we will have to add safety checks in the molfile plugins that use the chain field so they don't create bogus files for formats that have a fixed chain ID field width.
    • lammpsplugin: fix bug in handling triclinic cells with negative tilt factors
    • xsfplugin: Applied Roberto Guerra's patch to fix a problem with the interpretation of the cell vectors in cases that must be rotated.
    • timeline: In interSel dialog box, added dimming/inactication for the label/entryfields corresponding to unchecked selection method radiobuttons. Also tweaked labels.
    • irspecgui: update version and homepage URL
    • irspecgui: rework GUI to only use grid layout manager handle en-/disable of widgets more consistently
    • gofrgui: trigger EnDisable when all molecules are deleted
    • gofrgui: rework GUI to consistently use the grid layout manager trace internal molid variable with a function to en-/disable widgets if molid is not valid to avoid error conditions on bad user interactions
    • Added explicit cast to please MSVC
    • Improved floating point consistency to please MSVC
    • cranked version
  • VMD 1.9.2 alpha 23 (April 8, 2013)
    • timeline: Fixed bug in dialog variable for RMSF.
    • Fixed a bug that could cause incorrect renderings of scenes using the new "pointlight" advanced lighting features when a directional light with the same index was not turned on. There was a typo in the code that propagated advanced light state from the Scene data structures into the FileRenderer data structures that was reading the directional light on/off state rather than the advanced light on/off state.
    • timeline: Expanded dialog box to control expanded selection types for interSel. Also: tweaks for list parse error box messages, some rearranging of old-prefixed dialog box variables, intention is that these (and non old-prefixed) are in the same state as previous checkin.
    • improve floating point consistency to please MSVC
    • Cast sendto() buffer parameter in send_dgram() to const char * when compiling on the Win32 platform. On other platforms the type of the sendto() buffer varies, so conditional compilation is used for the time being.
    • timeline: Added copyUser to GUI, copies data values for whole trajectory to user field (or user2 / user3 / user4 as selected), so can be graphically displayed, easily seen by Tcl procs, etc.. Works for all cases (per-residue and free selections); has copy after all calcs. option. Also, fixed some general bugs on menu dialog box reset values.
    • cgtools: revised residue based coarse graining so it does not check to see whether or not a PSF is loaded (since it isn't strictly necessary) and tweaked the RBCG code to not attempt to use segment ID information in the atomselects if it hasn't been set.
    • Replaced hard coded conditional compilation tests with macro tests for VMDUSESVMLEXP and VMDUSEFULLEXP, to make it convenient to compare the performance of our fast hand-vectorized exponential approximation routines against the Intel SVML (short vector math library) and against the standard full-precision (scalar) math library exp() / expf() routines.
    • Moved and sized the Isosurface rep controls around to make better use of the available space.
    • Updated the SSE and AVX code paths in QuickSurf vmd_gaussdensity_opt() and vmd_gaussdensity_threaded() to support MDFF atomic number weighted density maps.
    • Updated QuickSurf vmd_gaussdensity() routine to support MDFF atomic number weighted density maps.
    • Eliminated QuickSurf grid point rounding since it's not truly needed for the MDFF calculations.
    • fftk: modified chargeOpt to remove dependency on PSFGen
    • cranked version
  • VMD 1.9.2 alpha 22 (March 29, 2013)
    • Updated the multi-core CPU code path for QuickSurf to use a better heuristic based on available physical memory when rendering huge density maps on multiple CPU cores. We limit the number of worker threads (current algorithm uses thread-private density maps) so we don't exhaust the overall free physical memory. The new core-free heuristic has one weakness in that we might have a 32-bit version of VMD running on a 64-bit machine, where the available physical memory may be much larger than is possible for a 32-bit VMD process to address. To do this properly we must therefore use conditional compilation safety checks here until we have a better way of determining this with a standardized helper routine.
    • Rewrote several key methods in VolumetricData and Isosurface to allow visualization of huge density maps that previously triggered problems with integer wraparound due to huge voxel index values.
    • qmtool: modified regex for reading Mulliken charges with hydrogens summed into heavy atoms to account for changes in Gaussian log syntax
    • fftk: ChargeOpt "Guess" button first clears the treeview box before refilling with guessed atoms
    • Began adding MDFF atomic number density map support into QuickSurf
    • Added rounding to nearest whole grid point for the QuickSurf CPU density scattering loops for better MDFF results.
    • Fixed incomplete change for user-defined OpenGL MSAA sample count override.
    • cranked version
  • VMD 1.9.2 alpha 21 (March 16, 2013)
    • Updated the ARM NEON SIMD ifdefs with the correct compiler checks
    • Added deeply-unrolled version of the minmax_1fv_aligned() inner loop using ARM Neon SIMD instructions.
    • Added an ARM Neon 4-way SIMD vector implementation of minmax_1fv_aligned().
    • remote udp interface: change the way that data was getting written into send buffer so that it works correctly for non char/char*. Sending strings > 256 bytes exposed the bug.
    • remote: more doc tweaks in anticipation of release
    • android startup: very minor formatting change. Not important
    • remote: doc updates to more closely match current reality
    • remote: beefed up some commented out debugging statements and couple of other unimportant changes that make debugging a bit easier
    • remote: minor code cleanup, added some currently inactive debugging statements
    • cranked version
  • VMD 1.9.2 alpha 20 (March 12, 2013)
    • Change our default MSAA request to 4 samples per pixel, as this is what most drivers have been providing up until now. We'll have to do much more performance testing with the latest drivers to determine if we can push this to 8 samples per pixel by default.
    • Increased default resolution of representations. The last increase of resolution defaults was back in 2009, and modern GPUs have gotten tremendously faster since then. This will cost 20% to 40% more display performance for very large structures, but since the majority of the user community are working on molecules under a million atoms, it's a better default for modern GPUs. People working on large structures are generally more skilled at managing rendering performance issues and will know how to change their personal defaults using the "mol default" commands.
    • Updated for relocation of CUDA-accelerated molecular orbital prototypes.
    • Moved the CUDA molecular orbital function prototype into its own header file, in preparation for the significant changes required to enable computing marching cubes from the wavefunction grid in-place rather than copying to host memory. The orbital representation will need to be refactored following the same general scheme that is used for QuickSurf, with the caller passing in the desired isovalue(s) and a VMDDisplayList pointer so that the extracted isosurface can be added directly.
    • Eliminated the old version of the CUDA kernel function prototype for QuickSurf.
    • Implemented an optimized trimesh_c4u_n3b_v3f() method for Tachyon to avoid unwieldy scene file sizes on disk.
    • Miscellaneous cleanup of FileRenderer subclasses to prune dead code, update old variants of the cone() method to the current API, and rename the polymorphic two-radius variant of cone() to cone_trunc() for clarity when reading these implementations.
    • Eliminated unimplemented cone stubs in LibGelatoDisplayDevice
    • Eliminated unnecessary polymorphism among triangle mesh methods. Having triangle mesh methods with the same name just served to make it difficult to track down which FileRenderer subclasses were using the fall-back code path and which ones had their own optimized triangle mesh implementations.
    • Fixed a typo in the docs for the VMDMACENABLEEEXTENSIONS environment variable. Added documentation for the VMDMAXAASAMPLES environment variable.
    • Changed the default maximum OpenGL multisample antialiasing sample depth we request down to 8 (was previously 16) and allow the user to override the maximum sample depth through a new VMDMAXAASAMPLES environment variable.
    • Added comment about stereoscopic display support to the VMD startup warning it prints when the X11 'Composite' extension is detected.
    • Eliminated various compiler-generated safety checks and increased default optimizations for Tegra for the CARMA builds.
    • Added SM 3.0, SM 3.5, and Compute 3.0 build targets to the default CARMA build.
    • Enable ACTC and LIBTACHYON options for CARMA builds
    • CARMA builds require Tcl/Tk 8.6.0 for stability, so I'm going to leave them hard-coded to use 8.6.0 in the makefile for the time being.
    • cranked version
  • VMD 1.9.2 alpha 19 (March 1, 2013)
    • gofrgui: Updated gofrgui plugin with changes to comment out the old Tk "pack" commands that remained from the original implementation. Tk 8.6.0 no longer allows "pack" and "grid" commands to manage the same objects (or for one to "supercede" management by the other). Needs further testing.
    • irspecgui: Updated irspecgui plugin with changes to comment out the old Tk "pack" commands that remained from the original implementation. Tk 8.6.0 no longer allows "pack" and "grid" commands to manage the same objects (or for one to "supercede" management by the other). Needs further testing.
    • Added a set of full OpenGL-enabled and CUDA-enabled ARM build flags for the NVIDIA CARMA boards.
    • Force Linux ARM builds for the SECO/NVIDIA CARMA boards to use Tcl/Tk 8.6.0 since ARM-native builds against the older 8.5.x series crash with internal memory corruption errors deep inside the Tcl library.
    • Fix an underzealous safety check (overzealous optimization) that prevents non-orthogonal isosurfaces from being sent into the orthogonal-only branch of the CPU-based Marching Cubes implementation.
    • Applied Bill Sherman's patches to the FreeVR implementation that allow renderinfo params to be passed into the ::draw() method, enable user navigation within the world (separate from the wand), and added various FreeVR self-help routines during startup.
    • Added more android startup functions that can be called from the native code side to interact with the android side. getMessage - get a string message from the android side, blocking getMessageNonBlock - get a string message from android side if exists, else return zero. getNumMessages - returns number of waiting messages Added internal caching of function name lookups so that it doesn't have to be done with each call. Put the global vars in a single struct to simplify passing.
    • cranked version
  • VMD 1.9.2 alpha 18 (February 27, 2013)
    • bendix: Added the README files from Bendix distribution to the documentation directory.
    • bendix: Updated to version 1.1 of the Bendix plugin by Caroline Dahl.
    • Fixed a small bug in the AVX/SSE alignment loops that could cause find_last_selection_aligned() to miss the index of the last selected atom if it happened to fall on a 16-byte or 32-byte boundary. The corrected code always tests the current atom index first, before dropping into the hand-vectorized AVX/SSE loops, even when it falls on a boundary.
    • parseFEP: Updated to the latest version 1.7 of the parseFEP plugin by Peng Liu and Chris Chipot.
    • jsplugin: Updated jsplugin to use the new MOLFILE_DIRECTIO_MIN_BLOCK_SIZE and MOLFILE_DIRECTIO_MAX_BLOCK_SIZE compile-time constants that define the range of disk block and memory page sizes that VMD can support for direct I/O calls that bypass the kernel buffer cache.
    • Added new molfile plugin constants MOLFILE_DIRECTIO_MIN_BLOCK_SIZE and MOLFILE_DIRECTIO_MAX_BLOCK_SIZE which set compile-time limits on the range of disk block and memory page sizes that VMD can support for direct I/O that bypasses the kernel buffer cache.
    • cranked version
  • VMD 1.9.2 alpha 17 (February 25, 2013)
    • Updated the implementation of minmax_3fv_aligned() to cope with unaligned input arrays that are only 8-byte aligned, occuring mainly on 32-bit linux. Added a prep loop that rolls up to the first 16-byte-aligned boundary and then begins using SSE. Also updated the implementation of minmax_selected_3fv_aligned() so that it uses an unaligned load of the 'on' flags array, so that we get better performance in the cases where the flags array and coordinates array have alignments that are mutually exclusive and cannot be rectified. The unaligned load of the flags array gives a small penalty in the ideal case where both input buffers happen to have compatible alignments, but it gives much better average case performance since it handles the other half of cases with much higher performance than the "prep" loop would.
    • utilities: Applied Josh's update to fix a closing brace, and change the quatarc routine so it always interpolates rotations along the shortest path.
    • viewchangerender: Added missing namespace for ::util::quatinterpmatrices call.
    • autopsf: Make autopsf case sensitive by default -- as JC points out, this is in line with the pdb spec
    • timeline: Native contact error checks and progress bar. Fixed formatting for displayed values for free selections. More robust parsing of selection lists for native contact and inter-sel contacts, with error alert boxes.
    • set the intial mode to move when the plugin window is opened
    • Began rewriting minmax_selected_3fv_aligned() to cope with input buffers that are only 8-byte aligned, which crop up on 32-bit Linux (and likely also on other 32-bit platforms). The new code loops over the array until it detects properly aligned coefficient addresses, and then begins using SSE instructions to operate on larger vectors from then on. There are cases where the two input buffers have incompatible alignment, and we can only either fix this by changing our memory allocation code throughout, or we can give up on doing aligned loads of one of the operands (likely the selection flags array) and only demand alignment for the array of atom coordinates.
    • changed default mode to off, but will follow up with change to plugin code turning on when gui is displayed.
    • Moved mobile interface code into fct and changed default activity to move when the plugin loads to be more natural
    • Started writing more startup loops for misaligned buffer handling in the fast SSE-vectorized atom selection acceleration routines since we can't trust malloc to provide sufficiently aligned memory blocks.
    • Updated the 128-bit SSE-oriented is_16byte_aligned() routine to remove alternate code, and added a new is_32byte_aligned() test for 256-bit AVX, and is_64byte_aligned() routine for LRB/MIC 512-bit vector instructions.
    • Further tests on 32-bit Linux machines have demonstrated that we cannot trust malloc() to return 16-byte aligned blocks, despite the fact that SSE is quite prevalent. A google search shows that there were wars fought about SSE-related 16-byte alignement on the GNU glibc bug tracking lists circa 2004 and earlier, and that the result has been that GNU's implementation of malloc() won't guarantee greater than 8-byte alignment on x86 anytime soon.
    • Applied a fix for correct handling of negative resids that show up in PDB files where DNA helices come together. By quoting the resid string we prevent an internal autopsf-constructed atom selection string from being mistakenly parsed as if it was a badly formatted regex or numeric value, and it works as intended. Patch provided by Josh Vermaas.
    • Rewrote the atom selection processing loops in ParseTree::eval_mathop() to use the find_last_selection_aligned() vectorized selection acceleration bound determination helper routine.
    • Added AVX loops for the atom selection bound determination routines.
    • Changed minmax_selected_3fv_aligned() to return 0 if at least one atom was selected, or -1 if no atoms selected or some other problem occured.
    • Rewrote measure_minmax() to use the vectorized atom selection analysis acceleration routines. To achieve peak perf, we will need to reimplement the inner loops with both radii-padded and non-radii-padded variants of minmax_selected_3fv_aligned().
    • Improved const correctness of vectorized atom selection accelerator routines.
    • Let the Intel compiler autovectorize the count loop, but use the hand-coded SSE for GCC, since it doesn't do as well otherwise.
    • Rewrote analyze_selection_aligned() to use find_last_selection_aligned() to determine the last selected atom, since we can use AVX instructions for searching even in the case that we don't have AVX2 instructions for counting them. The new code has better selection counting performance since it doesn't have to also track the last selected atom during counting.
    • Fix a typo in the 4-way reduction in the SSE max helper routine
    • Added a CUDA driver version mismatch workaround for CARMA boards, since the the first rev of the ARM-native CUDA compiler toolchain reports CUDA 5.5, but the matching driver version reports version 5.0.
    • webpdbplugin: Eliminated direct use of the Tcl interpreter result field in favor of calling Tcl_GetStringResult(), as required by Tcl 8.6.x
    • Use Tcl 8.5 for CARMA builds too
    • Enable CUDA by default for CARMA builds
    • Added LINUXCARMA to make_distrib rules
    • Updated plugin build flags for CARMA
    • Added code to check for CARMA-specific Linux binaries in the VMD startup scripts
    • Updated CARMA build flags to enable shared libs and improve optimization
    • Turn on hardware FP for CARMA builds
    • viewchangerender: fix package require typo
    • Fix CUDA build flags for ARM (NVIDIA/SECO CARMA board)
    • Force inclusion of thrust/device_ptr.h to prevent compilation errors with newer versions of the CUDA toolkit (in particular on CARMA).
    • remote: added new screen to choose a VMD machine to connect to. Revised menus accordingly. Last 10 servers are now stored. Also moved network traffic off of UI thread to keep Android 3+ happy.
    • remote: bumped android app version number, added xml declaration of ServerChooser activity, bumped minimum sdk version to 10 (corresponds to android 2.3.4) and added request for wifi_multicast permission, which lets the app warn the user that they need to turn wifi on for proper usage.
    • remote: added option to delete temporary snapshot files, used if only one mobile device is getting the snapshot (and not multiple devices)
    • Added an initial build configuration for SECO/NVIDIA CARMA
    • Change find_first_selection_aligned() and analyze_selection_aligned() so that firstsel is initialized to 0, and lastsel to -1, so that if we fail to analyze the selection, the results are set in such a way that loops that don't check the return code carefully will correctly operate as a "no selection" case.
    • Updated comments in AtomSel::change() regarding default assignment of firstsel and lastsel prior to actually analyzing the atom selection.
    • Added build flags for the SECO/NVIDIA CARMA boards
    • cranked version
  • VMD 1.9.2 alpha 16 (February 5, 2013)
    • Rewrote all of the atom selectop loops in ParseTree::eval_key() so they use firstsel/lastsel loop bounds that are predetermined by calls to the SSE-vectorized find_first_selection_aligned() and find_last_selection_aligned() routines. There is still an opportunity to pick up more speed by migrating the loop bound determination earlier, prior to the SymbolTable keyword_xxx() calls. Doing so could be used to trim the loop bounds on the inner loops of those operations as well, although the API has to change to allow for this.
    • Started optimizing ParseTree::eval_key(). Replaced old loop conditions with more common and easy-to-read variants. Replaced old and inefficient loops in the code for handling the SymbolTableElement::IS_INT case with a call to the SSE-vectorized find_first_selection_aligned() routine and misc cleanup. Auditing the code, we should be able to significantly improve the performance of several areas of the code by making broader use of predetermination of the first/last selection indices before entering the selection processing loops, and using that information to trim the index range that the loops must traverse.
    • Rewrote same_int() to use the SSE-vectorized find_last_selection_aligned() routine to trim the index range used by loops that compute the min/max values and subsequently process the atom selection arrays.
    • Eliminated the use of _mm_cmpeq_epi32(mask) in find_first_selection_aligned() and find_last_selection_aligned() since we don't really care which atom was selected in the 4-way hand-vectorized loop, We only need to know that one of the four elements was selected, and we use a short 4-iteration scalar loop to determine which element was actually the first/last. The new code simply calls hor_m128i(on4) to do a bitwise-OR of the 4 input flags and return the result as a scalar quantity that we test in order to exit the loop.
    • Added new SSE-vectorized find_last_selection_aligned() routine to rapidly find the last selected atom. Also rewrote parts of find_first_selection_aligned() so they are both more legible. Both routines can probably be made faster by eliminating the use of _mm_cmpeq_epi32(mask) and simply calling hor_m128i(on4) instead, since we don't really care which atom it was, and we're not counting, but only locating the first and last selected atoms in these cases.
    • Rewrote same_double() to use the SSE-vectorized analyze_selection_aligned() routine to compute the first and last selected atoms and the count, which are then used to allocate temporary working buffers, and to trim the index range of the subsequent atom selection processing loop that builds the unique string hash table.
    • Rewrote same_int() to use the SSE-vectorized find_first_selection_aligned() routine, eliminated some unnecessary array traversal, and noted opportunities for further efficiency improvements with the addition of some new SSE atom selection loops. The same_int() algorithm builds a sparse lookup table with a size that is determined by the difference between the minimum and maximum integer values associated with selected atoms stored in the incoming subselection array. In cases where the array has large maxima and small minima, but few other values in between, the existing approach will use a massive amount of memory for what could be done much more space-efficiently with a hash table.
    • Speed up ParseTree::eval_mathop() by calling the specialized find_first_selection_aligned() routine and trimming the range of indices that have to be processed by the individual mathop loops.
    • Added find_first_selection_aligned() to the header
    • Split out the SSE-vectorized first-selection finder loop from analyze_selection_aligned() into a separate function, find_first_selection_aligned(), so it can be called by several of the ParseTree routines that currently have to traverse the selection flags up to the first selection, before doing more sophisticated operations.
    • Misc cleanup before rewriting various loops to use helper functions that take advantage of x86 SSE vector intrinsics.
    • Use the new minmax_selected_3fv_aligned() routine for fast determination of the atom selection bounding box.
    • Replaced the previous rev of moldenplugin with an alternative version by Alexey Titov, which is a patched version (unforunately based on an earlier rev) that has been extensively exercised by the Terachem developers. This version cures some problems that were still not fixed by our previous rev, so we'll use Alexey's version until we can reconcile the changes in this version with the other updates contained in the most recent previous version by Jan Saam.
    • Updated the atom selection AtomSel::change method to use the new hand-vectorized SSE analyze_selection_aligned() instead of the old inline for loops. Compilers such as Intel C/C++ and GCC tend to be incapable of effectively autovectorizing code like this containing various comparison/branching type operations, so hand-vectorization is currently the most effective strategy. The SSE analyze_selection_aligned() routine outruns the old loops by 2x to 3x depending on the compiler version and the CPU generation, thereby reducing that saved runtime off of every atom selection creation or update operation. This is particularly helpful for analysis scripts operating on large molecular complexes (millions of atoms), where the runtime for one of the atom selection steps is long enough to be a concern, but not long enough to warrant the overhead of waking/syncing or spawning/joining multiple worker threads or the attendant software complexity involved in managing them.
    • Changed analyze_selection_aligned() to return -1 if no selection was found, so that the caller doesn't have to separately test the value of lastsel.
    • Updated the atom selection AtomSel::change method to use the new hand-vectorized SSE analyze_selection_aligned() instead of the old inline for loops. Compilers such as Intel C/C++ and GCC tend to be incapable of effectively autovectorizing code like this containing various comparison/branching type operations, so hand-vectorization is currently the most effective strategy. The SSE analyze_selection_aligned() routine outruns the old loops by 2x to 3x depending on the compiler version and the CPU generation, thereby reducing that saved runtime off of every atom selection creation or update operation. This is particularly helpful for analysis scripts operating on large molecular complexes (millions of atoms), where the runtime for one of the atom selection steps is long enough to be a concern, but not long enough to warrant the overhead of waking/syncing or spawning/joining multiple worker threads or the attendant software complexity involved in managing them.
    • Corrected a typo in analyze_selection_aligned(), improved traversal performance with early-exit of innermost loop iterations on empty selection vectors, and improved comments.
    • Corrected a typo in analyze_selection_aligned(), improved traversal performance with early-exit of innermost loop iterations on empty selection vectors, and improved comments.
    • Implemented a new atom selection acceleration routine, analyze_selection_aligned(), which contains a hand-coded SSE loop for locating the first selected atom, last selected atom, and the total count of selected atoms. When completely tested, this will replace the inlined loops that perform the same function in AtomSel, thereby improving overall atom selection performance since this work is performed at the end of every atom selection.
    • Make array indexing prettier in minmax_3fv_aligned()
    • Added minmax_selected_3fv_aligned() to the header and simplified conditional compilation of the SSE code for automated correctness and performance testing.
    • Added vectorized selection logic to SSE inner loop for minmax_selected_3fv_aligned()
    • Added SSE selection helper for 128-bit integer vectors
    • Continued development of the SSE code path for minmax_selected_3fv_aligned()
    • Eliminated the old inline SSE code for horizontal vector minima/maxima calculations in favor of the new fmin_m128() and fmax_m128() routines.
    • Added fully unrolled SSE-based 32-iteration loop for minmax_1fv_aligned()
    • Implemented more hand-vectorized accelerator routines for computing bounding boxes for groups of atoms, and a first-cut draft of one of the versions that also handles atom selections.
    • remote: minor changes to var scope, comments.
    • Updated bond search code to use minmax_3fv_aligned() instead of the old find_minmax_all() routine.
    • Added minmax_3fv_aligned() to the utilities header.
    • Updated minmax_3fv_aligned() to handle vec3 array sizes that aren't a multiple of three vec4s.
    • Updated 3-element vector min/max routine with plain C fallback and corrected a few remaining issues. Still needs complete testing.
    • Minor refactoring of 4-element min/max vector reduction operations into helper functions, and began implementation of an on-the-fly SOA-to-AOS aligned min/max routine for 3-element vectors.
    • Updated color scale data range determination loops to use the new fast minmax_1fv_aligned() routine rather than inline loops.
    • Migrated the 16-byte-aligned vectorized minmax loop out of BaseMolecule and into a new minmax_1fv_aligned() routine in utilities, so it can also be called by the VolumetricData class, and other routines operating on simple arrays of scalar single-precision quantities. We will also benefit from having a similar routine for arrays of 3-element single-precision vectors (e.g. atom coordinates, etc), and for cases that involve atom selections.
    • Enable both of the QuickSurf SSE code paths by default.
    • Updated the COV calculation to take advantage of the firstsel/lastsel selection indices when combining selections, and eliminated the need to scan for the first selected atom, also by using the firstsel/lastsel info.
    • Added hand-coded SSE radii minmax loop. We should probably refactor this into a more generally usable minmax routine so it can be applied to any of the 1-D scalar arrays. Arrays of vectors in AOS format will need special handling, and traversals that involve atom selections will be significantly more complex to implement.
    • mutator: Updated version number of mutator plugin per JC's recent bug fix.
    • Updated the AVX QuickSurf loop comments and added appropriate conditional compilation tests to allow it to use the AVX2 integer vector instructions when available. The use of AVX2 instructions should eliminate the performance cost of AVX/SSE state transitions, and will make it possible to write a more efficient shuffle sequence for the AOS-SOA conversions required for the per-atom color loop, but they are not supported on any CPUs that are shipping yet (Haswell will be the first CPU with AVX2).
    • Improved comments and readability of SSE SOA-AOS conversion block in the texture map calculation code.
    • Added higher performance SSE implementation of the QuickSurf inner loop for per-atom colors. The new implementation uses SSE shuffle instructions to perform on-the-fly SOA-to-AOS and AOS-to-SOA conversions during the accumulation of colors into the 3-D texture map.
    • Prototype SSE implementation of the per-atom-colors version of the innermost QuickSurf density/texture loop. The initial implementation currently handles the texture color calculation using scalar instructions since we work with 3-element color vectors. To implement this entirely with SSE will require extensive use of shuffle instructions to work on three vectors of four elements, where each of the three vectors contains 3 elements corresponding to one texel and 1 element corresponding to another.
    • Implemented an AVX variant of the innermost loop of the QuickSurf density map algorithm, using the fully-inlined exponential approximation. The AVX code path currently has a very significant weakness due to the fact that the AVX instruction set does not contain any instructions for operating on integer types. The lack of support for integer types in AVX means that we have to fall back to SSE instructions for the integer arithmetic required for manipulating the base-2 exponents, but another problem with AVX is that there is a significant AVX-to-SSE CPU state transition penalty that can only be avoided by either forcing VEX encoding of all vector instructions (including the older SSE instructions), or by calling _mm256_zeroupper() or _mm256_zeroall() before executing SSE code that follows AVX. At present, these issues prevent the hand-coded AVX loop from outperforming the SSE loop. If we were willing to create a completely separate AVX function, we might be able to force VEX encoding of the instructions and eliminate the AVX/SSE transition penalty and get at least a modest speed boost. Since upcoming CPUs support FMA3/FMA4 instructions that require further loop specialization, it seems likely that we would get the greatest benefit from an AVX-specific loop by waiting until we can also use FMA instructions, which significantly reduce the number of FP instructions in the innermost loop. The first Intel x86 hardware with FMA support is Haswell which is still 3 months out, at the time of this writing.
    • Prototype version of QuickSurf inner loop using Intel's AVX instructions. The first draft version is using the Intel SVML (short vector math library) implementation of exp2f(), which is quite a bit slower than our hand-optimized exponential approximation implementation, so I need to do a full AVX implementation of the inlined approximation before I can make any meaningful performance comparisons against the SSE code path. Another issue that also needs to be resolved is that we will have to do runtime tests against the CPUID instruction to determine if it is safe to execute the AVX code path, since AVX only exists in fairly recent CPUs, and error free execution also requires an OS kernel that properly saves and restores associated AVX machine state (registers, etc). For now, I will simply take this opportunity to evaluate the benefits of AVX for improving the performance of SIMD-friendly inner loops like the ones in QuickSurf.
    • Developed an alternative code path that uses Intel's SVML (short vector math library) implementation of exp2f() for SSE __m128 types. Our inlined exponential approximation code outruns Intel's SVML routine by a significant margin currently, but it's nice to have an alternate code path for ease of testing and for future papers that document the performance of our method.
    • Further SSE optimization, and correction of one of the comments that was referring to the bit masking steps that I already eliminated since they are unnecessary for QuickSurf.
    • Further cleanup and optimization of the QuickSurf hand-coded SSE inner loop.
    • Tweaked QuickSurf SSE-optimized loop condition test to prevent potential issues with non-multiple-of-four loop trip counts and grid sizes, since the non-SSE version of the loop does "cleanup" on any voxels not processed by the SSE loop.
    • Removed the QuickSurf SSE voxel masking operation since we should not encounter any density values that drop below the ACUTOFF level within the radii of interest in the QuickSurf inner loop.
    • Added Tcl routines for conversion between matrix and quaternion rotation representations, and performining quaternion based interpolation between two rotation matrices.
    • Change timestep coloring so we hit the endpoints of the color scale with small timestep counts.
    • mutator: bug fix for segments without resid specified
    • Updated the plumed Makefile and added another updated rev from Toni Giorgino that improves widget packing.
    • cgtools: fixed a minor grammatical error in the docs
    • molemeshplugin: Updated with Brian Bennion's latest molemeshplugin.
    • Corrected misplaced paren so that the max memory buffer heuristic behaves correctly for 3-D textured QuickSurf surfaces computed on the CPU.
    • networkview: added in ability to multiply suboptimal path counts by a scaling factor (defaults to 1) which rafael needed for his work.
    • plumed: Latest version of plumed plugin from Toni Giorgino. Tagged as version "1.9" rather than "1.901" for the time being.
    • multiplot: Updated multiplot callbacks to provide 5 params, needed by nmwiz plugin
    • nmwiz: Updated nmwiz plugin by Ahmet Bakan.
    • heatmapper: Updates to heatmapper plugin contributed by Ahmet Bakan. The new version adds support for callbacks, and fixes a bug where heatmapper was doing overly aggressive deletion of Tk images which could interfere with other plugins.
    • fftk: fixed bug in which glog parser pulled RHF energies instead of MP2
    • Updated Makefile for molfile plugins. New version of the VTF plugin requires Tcl linkage to allow extra data fields to be exposed to Tcl.
    • vtfplugin: Updated version of VTF plugin from Olaf
    • remote: changed name of market to store in docs
    • timeline: Native contact calculation added, output is fraction of native contacts for each selection, 0.0 to 1.0. Monitors key atoms (keyAtomSelString), e.g. CA for proteins. 0.0 to 1.0. The reference frame always 1.0 for every selection. In GUI, user can set cutoff distance, set of multiple From selections, the To selection, and reference frame.
    • vmdprefs: fixed "item blue" bug when loading theme file
    • fftk: added MP2 single point calc for incorporating MP2-level dipole into charge optimization
    • Added molemeshplugin to the build, and sorted the individual plugins into alphabetical order to improve readability of the makefile and to make it easier to locate things. Added comments regarding several of the plugins that have dependencies on other libraries, and/or that are not to be built on certain platforms (e.g. Android).
    • molemeshplugin: Added Brian Bennion's molemesh plugin for reading mesh files generated by the MOLE 2.0 program (mole.upol.cz).
    • timeline: Now can extend atom types recognized for coarse grain atoms with a line in .vmdrc. For instance set ::timeLineSettingExtraKeyAtoms "name AGH".
    • timeline: Added ability to work with coarse grained systems, via keyAtomSelString. Currently works with Martini force field (backbone atom BAS). Simple to extend to other coarse grained systems. Code for native contact (with side chains) in, needs some tweaking for normalizing, not exposed to user via GUI yet.
    • fix truncation of leading char when no path separators are in the filename
    • vmdprefs: upon launch tries to load a vmdrc file from $env(HOME); added a vmdprefs format check to the theme file reader; fixed bug with custom code parsing
    • fftk: added fftk_distort.tcl to the Makefile
    • fftk: allow user to specify vmdrc path; allow user to activate/deactivate portions of the theme file
    • fftk: prompt users before overwriting bak files; vmdrc does not try to load graphic related elements when running in text mode
    • fftk: fixed typo in variable name related to guessing bonded input
    • fftk: retype/recharge cmpd+wat combined structure
    • fftk: fixed error in if/then statements pertaining to guessing initial optBonded input
    • Implemented a depth-first variant of the atomparser_node destructor to avoid blowing the stack when processing massive parse trees, e.g. containing hundreds of thousands of residue IDs. The depth-first implementation is simpler and should be faster than the breadth-first implementation.
    • Designed a prototype atomparser_node destructor implementation that avoids recursion. The new implementation uses a combination of nested while loop iteration and a self-managed pointer stack, allocated from the heap, to perform a breadth-first traversal of the atomparser_node tree.
    • Added pointer stack implementation for use in eliminating deep recursion in the atom selection class destructor implementation
    • Updated CUDA flags for SM 3.5 on Blue Waters / Titan
    • fftk: modified fftk.tcl to source the new fftk_distort.tcl file
    • fftk: added gui element to read the final obj value from baopt
    • fftk: add distortion code
    • fftk: protect against psf and/or namdbin filenames with spaces
    • Added draft of char's new atom fields to molfile plugin APIs.
    • cranked version
  • VMD 1.9.2 alpha 15 (October 18, 2012)
    • fftk: updates to bond/angle optimization
    • fftk: updated to add some functionality to ffTK
    • fftk: fixed minor bug with colp autoscale
    • fixed GUI typos caught by Josh Vermaas
    • Updated VMD docs with current NIH grant numbers, added thanks lines for recent contributors, helpers, and bug reporters.
    • Began updating the VMD 1.9.2 README with up-to-date information.
    • Added our new NIGMS BTRC grant number in addition to the old one. I will remove the old grant number information after the NIH reorganization is complete and we're in the second full year of the new funding period.
    • Replaced the special-case 2-atom and 3-atom alignment code in myfit2 and myfit3 routines with updates from Josh Vermaas that corrected a typo and an incorrect assumption on the behavior of Matrix4::multmatrix(). Specifically, myfit2 and myfit3 were assuming the wrong behavior of multmatrix (that a.multmatrix(b) is a=bxa instead of a=axb), the result of which being that the translations and rotations were being applied in the wrong order.
    • Applied a fix for an IMD force cancellation bug reported by William Ray. The problem occurs in a relatively easily repeatable manner when using the mouse to apply forces to residues or fragments. The cause of the problem was twofold. The old code was using the wrong index when trying to find and cancel non-ongoing forces in the list it maintains, but by coincidence it happened to end up working in the single-atom cases. The second part of the problem was that the wrong force vector indices could end up being removed from the list due to incorrect indices being sent to the ResizeArray remove() method, since it shifts and re-packs the array after an element is removed. This should fix the abberant behavior observed with the mouse-based IMD interface. Thus far I haven't looked into why it didn't cause similar problems with the 6DOF tracker based IMD interface, but the most likely reason is that with the tracker interface the forces are negligible or perhaps actually zero in many cases before the user releases the active Tug Tool, thus hiding the symptoms of this bug in that specific case. More testing will be needed to ensure there aren't any other corner cases left out.
    • Changed android startup code to use dynamic query to determine the VMD application data directory where startup scripts, plugins, and other dependencies are stored after the initial install and first-run unzip.
    • fftk: fixes to GenZMatrix to allow for more general ACC/DON assignments
    • Prevent Android VMD builds from exiting on EOF for stdin, since there is no stdin stream except when running the code in emulation etc.
    • Changed hard-coded VMD lib directory for Android startup, until the dynamic query mechanism is in place.
    • networkview: latest changes from ZLS group with tweaks
    • parsefep: Updated ParseFEP docs with latest files from Chris Chipot.
    • Added ANDROIDARMV7A distrib target
    • Added the Android specific VMD startup code to the default build.
    • Moved the Android-specific JNI interface and other supporting code out into its own file along the same lines as we've done previously for MacOS X app bundles, and Win32 startup.
    • Added console output redirection for Android builds of VMD.
    • Added an initial Android-specific VMD bootstrap code until we have a more sophisticated startup mechanism and GUI in place.
    • Pull dtrplugin out of the android builds for the time being until we get past Android NDK STL implementation limitations.
    • Fixed up android cross compilation linkage to use the stlport libs for now
    • Added Android on ARM V7A to the standard plugin compiles
    • Prevent the DESRES maeffplugin from being compiled when cross-compiling for Android on ARM V7A targets, due to problems with the Android NDK cross-development toolchain for Linux.
    • cranked version
  • VMD 1.9.2 alpha 14 (October 2, 2012)
    • Improved floating point consistency for area calculation.
    • Added workaround to address the problem of varying CPU counts reported by sysconf() on the Android platform. Android varies the number of active CPU cores according to system activity, thermal load, and battery state. Several existing Android versions incorrectly report the number of active processors rather than the number of physical processors when queried with _SC_NPROCESSORS_CONF, so until this is fixed, we work around that problem by reading and interpreting the contents of the file /sys/devices/system/cpu/present.
    • Don't explicitly link -lpthread on Android since it's included within other system libs.
    • Added Android plugin build config and various macros for the Android NDK cross compilation directory paths etc.
    • Make dtrplugin compile on Android.
    • Prevent Android NDK builds from attempting to include values.h, which is unavailable when cross compiling for Arm V7A
    • Added extra #ifdef checks to prevent compilation of some molecular orbital diagnostic routines that call log2f(), which is unavailable with our current build flags on the Android NDK for Arm V7A.
    • Added -DANDROID to the compile flags to reproduce the behavior of the auto-generated NDK makefiles.
    • Added first round of Android Arm V7A build targets for testing.
    • Added ANDROIDARMV7A build target for native Android NDK builds.
    • Force 4-element padding of the X dimension of the molecular orbital grid so that we don't encounter problems for SSE-accelerated runs. The GPU code already does its own grid padding, so this handles the CPU-only cases.
    • Fixed a couple of issues that prevented a clean compile without Tcl, needed for early Android testing.
    • vdna: Updated Tom Bishop's contact info in the docs
    • Imported MacOS X 10.7 fixes from the latest Tachyon code.
    • Updated the VMD copy of WKFThreads from the latest version of Tachyon.
    • fftk: changed wording on dih viz checkbutton
    • fftk: added additional sanity check for dihedral input
    • fftk: fixed bug when multiple spaces were used for dihedral type definition when runing dih opt
    • fftk: added ability to plot points on dihedral fitting plots
    • fftk: added plot axes adjustment controls to dihedral fitting plots
    • fftk: removed ability to manually set/modify equilibrium value when scanning dih values; it is no longer supported in G09RevC
    • cranked version
  • VMD 1.9.2 alpha 13 (September 20, 2012)
    • fftk: fixed issue setting initial values for dih optimizer when lock phase was turned on
    • The Orbital class was failing to initialize the wave_f member to NULL, which could cause the multithreaded CPU implementation to crash in some scenarios.
    • Corrected the float3 to uchar4 color conversion routine so that sub-unity color magnitudes don't get amplified, this prevents dark colors from being renormalized to bright colors, e.g. changing dark gray to white. Removed three color clamping tests since the color renormalization code should already eliminate the possibility of integer wraparound for color magnitudes greater than one.
    • Simplified the template-based normalized density kernel by reordering a few operations.
    • Updated the templated version of the QuickSurf density map kernel to handle multiple data formats for both the output density volume and volumetric texture. This variant of the density map algorithm normalizes densities so that the target isovalue is a density of 1.0. Pre-normalizing the densities so that the target isovalue is represented as 1.0 makes better use of reduced-precision floating point formats such as the so-called "half" precision format (IEEE "binary2") supported by CUDA and OpenCL.
    • fftk: modified default Gaussian Route sections to force printing of 'input orientation'
    • fftk: added development version of bond/angle optimization, although the tab is hidden until some problems are fixed
    • fftk: completely rewritten GenZMatrix routines to allow for ACC and/or DON positions for any molecule (including diatomic and linear)
    • cranked version
  • VMD 1.9.2 alpha 12 (September 17, 2012)
    • The QuickSurf uchar4 code needs a specialized color clamping routine since the input color values are initially scaled by density, and ultimately normalized to the target isovalue. When we feed these values into a fixed point GLubyte representation, we can't go outside the 0..1 range, so we must rescale the colors before they are written to prevent clamping from harming the interpolated colors.
    • Replaced hand-coded gaussdensity_fast_tex4u() kernel for the uchar4 volumetric texture format with a new generic template-based gaussdensity_fast_tex() kernel and associated color format conversion functions. Since performance is dominated by density/color summation, the cost of doing more work within the color conversion functions (vs. the pre-factorization used in the previous hand-coded tex4u kernel) is negligible. The genericized kernel will make it easy to adapt to other texture formats as needed.
    • Fixed inverse isovalue pre-scale factor for the gaussdensity_fast_tex() kernel. Had been set to a lower value for testing purposes.
    • Allow QuickSurf to use the new DTRIMESH_C4U_N3B_V3F by default.
    • Added bias terms to the fixed-point to floating-point GLbyte vertex array normal conversions. Added appropriate references to the OpenGL specification formulas for GLbyte and GLubyte to GLfloat type conversions into comments.
    • Updated CUDAQuickSurf to use the new DTRIMESH_C4U_N3B_V3F triangle mesh format and the uchar4 volumetric texture map storage format. The combination of the two reduces the overall GPU memory footprint of the QuickSurf representation to under 57% of what it was with the original implementation, and reduces the size of host-GPU memory transfers associated with copying the final vertex array data down to 53% of the size of the original implementation, thereby allowing noticably higher trajectory animation frame rates in many cases. The new code path is slightly more arithmetic intensive in both the QuickSurf density map volumetric texture calculation and in the Marching Cubes color and normal interpolation code, however this should still be a win even on low-end GPUs since they typically have much more limited memory bandwidth. The new code path works, but needs more testing before it can become the default and replace the original behavior.
    • Added rendering path for DTRIMESH_C4U_N3B_V3F triangle mesh format
    • Added new DTRIMESH_C4U_N3B_V3F triangle mesh display command that uses the GLbyte type for surface normals.
    • eliminated leftover test code
    • Added support for GLbyte vertex array normal formats to the CUDA Marching Cubes implementation.
    • Corrected indexing for the FileRenderer virtual method handler for uchar4/GLubyte triangle mesh rendering.
    • Updated QuickSurf to allow use of the uchar4/GLubyte color format for the output vertex array, to reduce the overall memory footprint for surface representations with per-atom coloring methods.
    • Fix typo in call to DispCmdTriMesh::getpointers()
    • Added new DTRIMESH_C4U_N3F_V3F display command with RGBA GLubyte color format for use with QuickSurf and in other cases where the triangle mesh data can get overwhelmingly large when using floating point color formats.
    • Added polymorphic variants of CUDAMarchingCubes::SetVolumeData() to make it easier for external callers to use. Updated CUDAQuickSurf to use the cleaner interface.
    • Added support for multiple vertex array color formats to the CUDA accelerated marching cubes interfaces.
    • Templatized the generateTriangleColorNormal() output vertex color so that the Marching Cubes code can easily support multiple vertex array color formats.
    • Added color format conversion routines and improved latency hiding in the generateTriangleColorNormal() routine by moving the final color writes earlier in the code.
    • Completed initial support for multiple volumetric texture formats for QuickSurf representation. Changed the default QuickSurf volume texture format to RGB4U to save GPU memory.
    • Changed the CUDA Marching Cubes class to handle multiple volumetric RGB texture map formats, and revised the QuickSurf code to use the updated MC interface.
    • Added C++ template code and texture accessor routines to allow transparent use of both float3 and uchar4 texture map storage formats with the generateTriangleColorNormal() kernel.
    • Further cleanup and simplification of the CUDA marching cubes code
    • Eliminated various leftover debugging code and removed several calls to cudaThreadSynchronize() that are unnecessary in the normal code path. Each call to cudaThreadSynchronize() can potentially require a round-trip to the GPU, so eliminating unnecessary instances of this behavior helps increase performance in general.
    • Misc cleanup and changes to eliminate redundant arithmetic ops and replace the use of max() with fmaxf() in the vertex normal/color calculation kernels.
    • change the default RGBA texture value.
    • Streamlined the QuickSurf per-slab Marching Cubes geometry arithmetic and kernel launch sequence.
    • Streamlined the QuickSurf host-side kernel launch loops in prep for supporting more volumetric texture formats.
    • Added an alternative density map texturing implementation that uses a more compact texture map format. With appropriate matching additions to the Marching Cubes implementation, the use of the uchar4 texture format will reduce the memory footprint of QuickSurf to half of what it wa previously, although there will likely be a small performance cost in some cases. This will enable more laptops and entry level desktops to leverage the fast GPU code path even on systems with limited available GPU memory. On the high-end, this will double the size of the structure we can compute a surface for.
    • Imported win32 thread handling change from Tachyon to address potential handle leaks for non-detached threads at the join point. Also imported a comment about proper handling of detached threads. It may soon be time to import the UI threads code from Tachyon as well, for completeness and simplicity of ongoing code synchronization.
    • parsefep: Updated with the latest version of the parseFEP code from Peng Liu.
    • nmwiz: Updated with latest rev of the normal modes wizard from Ahmet Bakan.
    • fastio: Fallback in case kernel does not implement readv().
    • vmdprefs: changed row expansion/contraction from button bar to notebook
    • cranked version
  • VMD 1.9.2 alpha 11 (August 22, 2012)
    • VMD remote: updates written on the Mac
    • Began adding launch bounds directives for tighter control over register use and thread block occoupancy, though the code is disabled until I can run performance tests on each of SM 1.3, SM 2.0, SM 3.0, and SM 3.5 devices. Added "const __restrict__" array/pointer function parameter syntax to allow Kepler (GK110) GPUs to take advantage of the new read only data cache (non-coherent load via texture cache) memory path.
    • Fixed params to make_cudaPitchedPtr() to avoid runtime errors on CUDA 5.0.
    • vmdprefs: Added the new preferences plugin to the bottom of the Extensions menu
    • bendix: Added Bendix doc images
    • vmdprefs: Added Chris Mayne's VMD preferences plugin
    • Updated the molecular orbital kernels for CUDA 4.x and 5.x, and began implementing various Kepler-specific optimizations.
    • timeline: Added global cross-correlation coefficient for second structures, and associated GUI. Seems to work, only tested on Macintosh so far.
    • Added comment about the behavior of FileRenderer::text() when a subclass doesn't provide its own text() method.
    • Removed the dead code path from the Hershey font rendering loop
    • emit positional lights when they are enabled
    • always use the bulk-deletion optimization
    • Removed conditional tests for drag-and-drop and cut-paste handling on the FLTK OpenGL display window subclass.
    • Eliminated old force arrow scaling constant and updated the comments.
    • Eliminated the old BMP header code
    • Always add the wavefunction data
    • Always use mouse wheel
    • Removed the old MPI code path since the new one is stable.
    • timeline: Inter-selection-set contacts count works. User enters VMD/tcl-compatible list of selection strings, gets the set of Choose(n,2) combinations of two selections that result, with contacts between the two selections graphed vs. time (user sets cutoff). Progress bar updates with each pair of selections. Also, general improvement to text label display for all free-selction sets (notably, the long labels typical for InterSelContact)
    • psfplugin: Made the PSF plugin allow NAMD-tagged PSF files to use a space delimited bond record format since NAMD accepts that variation. Changed the PSF informational messages to clearly indicate when it has found a NAMD-format PSF file, as opposed to one of the Charmm variants.
    • bendix: Updated version of Bendix plugin from Caroline Dahl.
    • cranked version
  • VMD 1.9.2 alpha 10 (July 27, 2012)
    • bendix: Copy bendix help images into distribution for the time being.
    • gromacsplugin: Changed .gro parsing code to use fixed field widths to address problems with files that had no spaces between the coordinate fields.
    • gromacsplugin: misc cleanup of tabbing etc.
    • Misc cleanup and updates to source comments to reflect the current approach we take for the QuickSurf algorithm.
    • Leave the Thrust exception handling code enabled for the long-term, since we will not be free of the possibility of exhausting GPU memory capacity unexpectedly unless/until some new API comes along that allows us to guaranteeably reserve GPU memory for use by Thrust in advance of the calls.
    • Removed the multi-GPU direct summation versions of the Gaussian density kernels to simplify the code prior to putting in multi-GPU support for the linear-time Gaussian density kernels.
    • nmwiz: Further nmwiz updates from Ahmet Bakan.
    • fftk: added screencasts section to the fftk docs
    • nmwiz: Latest version of normal mode wizard plugin from Ahmet Bakan.
    • cranked version
  • VMD 1.9.2 alpha 9 (July 19, 2012)
    • moldenplugin: Updated the molden plugin with the latest version which fixes various limitations that had previously caused problems for Terachem users. I still need to reconcile this change set against overlapping changes contributed by Alexey Titov, where applicable.
    • bendix: Added the new Bendix plugin to the Visualization extensions menu
    • bendix: Added the Bendix plugin to the build.
    • bendix: Added the Bendix plugin for helix geometry analysis and visualization, by Anna Caroline E. Dahl, Matthieu Chavent, and Mark S. P. Sansom. Paper DOI: http://dx.doi.org/10.1093/bioinformatics/bts357
    • plumed: cranked version number of plumed plugin in the make distrib target
    • plumed: updated Toni Giorgino's VMD plumed plugin with the latest version
    • timeline: Added popup percent-progress bar with cancel button (users can observe, halt long calculations); all Calculate items update the progress bar. All Calculate items now obey frame range limits (firstAnalysisFrame, lastAnalysisFrame). Data set filtering now happens via a copy buffer (no file write/read cycle for the user or internally); a "Filter Data..." menu items has been added to the GUI to set paramaters and run the filtering.
    • qmtool: added MP2 scale factor for frequencies
    • psfgen: Provide some feedback when ignoring guessed coordinates due to angle under 45 deg.
    • cranked version
  • VMD 1.9.2 alpha 8 (June 12, 2012)
    • molefacture: Changed file menu item to reflect that .prm files are
    • Fixed a bug in the handling of zero-residue fragments in the cyclic fragment determination routine.
    • Updated with the latest version from Peng Liu.
    • nmwiz: Updated with the latest version of NMWiz from Ahmet Bakan.
    • rst7plugin: upgrade rst7plugin to support reading and writing box and velocity information.
    • timeline: Primitive filtering function added (writeDataFiltered), command line only (writeDataFiltered). No GUI yet, needs to work without requiring save to file. Color scales extended: now has Black-to-White, White-to-Black, RGB, BGR (avail via GUI). Associated GUI bug fixed (as correct intial radiobutton menu selection for highlight color and colorscale name) printPicRedraw added for experimental remote send (to attached touch devices) of Timeline printout. Relies on Unix commands to reformat picture. Only command-line interface.
    • fftk: added checks for fwd and rev bond/angle defintions when calculating bonded parameters
    • fftk: added proc to reset Gaussian values to defaults, both in init and in gui, for all instances; modified default wat int route from RHF to HF - gaussian can determine R or U
    • fftk: fixed dipole angle weighting in objective function
    • fftk: fixed order of statments in GenBonded fftk LOG file
    • qmtool: fixed Calc Bonded to properly assign force constants to internal coordinates
    • fftk: fixed Calc Bonded to properly assign force constants to internal coordinates
    • fftk: corrected testreb to testrev in buildpar
    • Eliminated old code paths for generating point arrays and pickpoint arrays that predated the new atom selection acceleration logic.
    • fftk: fixed plot color variable in colp
    • fftk: write charge optimization debugging file to same dir as the log file
    • fftk: fixed kmax to refineKmax in refine proc for dihedral optimization
    • fftk: fixed problem loading LOG files from previous charge opt runs; data was loading into the wrong column in results box
    • fftk: changed QME-MME to MME-QME reported in chargeopt log file
    • fftk: fixed problem writing out the optimized geometry to pdb
    • fftk: fixed gridding issue with Dipole Weight when mode is set to SA in charge opt
    • fftk: added phase lock feature for dihedral optimizations
    • fftk: fixed error in setting default upper bound when guessing charge groups for charge opt
    • fftk: changed charge sum implementation in charge opt.
    • fftk: added dipole weight variable to sanity check, print settings, and build script
    • moldenplugin: Use case-insensitive string comparisons when reading shell types from Molden files.
    • Added comment about the MacOS X Cocoa workaround based on recent email feedback from Francois-Xavier Coudert who did his own 32-bit MacOS X compilations using FLTK 1.3.0.
    • maeffplugin: Fixed uninitialized optflags state in maeffplugin, so that compilations that don't define DESRES_CTNUMBER will behave correctly.
    • fftk: added dipole component to charge optimization; updated COLP
    • fftk: replaced qmtool parsing of geometry optimization with custom parsing code
    • Cranked version
  • VMD 1.9.2 alpha 7 (April 4, 2012)
    • molefacture: Changed file menu item to reflect that .prm files are not written anymore
    • fftk: fixed problem writing new charges to PSF when 'final charges' is empty
    • fftk: fixed bug for writing psf with updated charges
    • nanotube: allow to set the C-C bond length for carbon nanotubes and graphene sheets. expose this feature to the GUI and step version number to 1.4. update documentation for text mode flags
    • fftk: fixed adjust charge in chargeopt results
    • fftk: somehow the writeSPfiles command was lost from 'write gaussian input files' section of genzmat
    • qmtool: additional fix for G09RevC log file parsing
    • qmtool: fixed problem parsing G09RevC log file from fftk hessian calculation
    • optimization: Updated optimization makefile for new version number.
    • fftk: modifications to charge opt gui; added charge optimization log plotter (COLP)
    • fftk: added support for constrained optimization (needed for charges). Requires optimization ver. 1.3.
    • optimization: added the complex algorithm for constrained optimization. currently undocumented. cranked version to reflect new functionality.
    • molefacture: Re-added mistakenly removed dialogue to write out .top,.pdb and .psf files.
    • Added generic PTX generation for compute_20 so that runtime cross-compilation for Kepler will work, even for builds using CUDA 4.0.
    • Cranked version
  • VMD 1.9.2 alpha 6 (March 21, 2012)
    • remote: fixed event handling for the aux buttons on honeycomb tablets that Johan found.
    • hesstrans: Patch from Ben Kaduk to make some versions of GNU make happy on FreeBSD.
    • fftk: fixed typos in header description
    • viewchangerender: Fixed recently introduced bug that causes multiple molecules to show when movetime_vp is called
    • fftk: changed path to CHK file from absolute to relative
    • Added #ifdef to conditionally compile the multithreaded MPI dynamic work scheduler, so that it doesn't create difficulties on platforms that don't have the MPI includes and libraries.
    • Improved floating point type consistency in the multi-touch user interface processing loop for wireless mobile devices.
    • Improved floating point type consistency in I/O bandwidth reporting calculations.
    • Improved floating point type consistency in QuickSurf resolution slider calculations.
    • Improved floating point type consistency in QuickSurf grid padding calculations.
    • Eliminated MSVC compiler warnings for floating point type conversion.
    • Updated Windows installer with the latest plugins.
    • Updated Windows registry key in the startup code.
    • Cranked version
  • VMD 1.9.2 alpha 5 (March 19, 2012)
    • remote: updated android package
    • Added MPI_Init_thread() call in place of MPI_Init() when VMD is compiled with threading enabled. Warnings are printed if the MPI implementation does not support at least thread-serialized MPI calls.
    • Implemented a multithreaded work scheduler for the MPI "parallel for" command so that node zero does work just like the rest of the nodes. Node zero processes the worker callback activity in the main thread, and runs the dynamic scheduler and MPI message passing operations in the child thread.
    • Added some example VMD startup script code for MPI-enabled builds of VMD on clusters that use the PBS batch scheduler. The two examples show how to figure out the right number of nodes to launch on with 'mpirun' or the Cray 'aprun' commands, and in the case of the Cray, we determine the correct number of host threads to use by calling apstat.
    • remote: per Johan's request, added the ability to remove all buttons of a button group. This allows the research to "change" the buttons that appear on the screen.
    • remote: changed a hardcoded string into a resource and added a self-expiring popup when the vmd server goes away.
    • remote: clerical; removed some unneeded string resources and added another
    • When VMD is compiled for parallel execution with MPI, we don't allow the Tcl text interpreter to try and read stdin for text input, because it can caus shutdown problems where MPI_Finalize() hangs indefinitely. This was observed both for a classic cluster-based MPICH and the MPI implementation on the NCSA Blue Waters Cray XK6. This patch cures the problem completely on MPICH, still need to verify on the Cray XK6 when the system comes back up.
    • Updated the plugin build script for the NCSA 'AC' GPU cluster
    • remote: Based on the bugs johan found from having multiple vmd's running at the same time, we reworked the port release code when the user changes the port number of the server so that it is more robust.
    • Cranked version
  • VMD 1.9.2 alpha 4 (March 17, 2012)
    • remote: Fixed a list print that didn't need to be there.
    • remote: Added ability for plugins to specify buttons that they want to appear on mobile device. Code similar should be added to the various plugins that want be be "mobile enhanced". All devices should be able to handle at least 5 buttons with short names. Some devices, such as tablets, can handle many more. This limitation will be removed in the future. This will create a "button group" on the mobile device. It will have 4 buttons in it. This button group can be chosen via a menu option on the mobile device for 'choose buttons'. The user can switch between groups of buttons. This will cause the proper tcl code to be executed on the server, if they are either in control or the call has specified that the mobile user doesn't need to be in control for execution to occur. For right now, the button group name and the text to appear on the buttons themselves can't have spaces in it. This limitation will be removed in the future.
    • remote: added support for receiving a specific string from the mobile device and sending it back through to the tcl interface. String is a key into a lookup table that will be interpreted by the tcl.
    • Increased QuickSurf box padding radius scale factor to prevent clipping of surfaces when large radius scaling factors are used with dense structures, and in certain cases when small radius scaling factors are used.
    • viewchangerender: Added correct package requires
    • Protect the userdata parameter to the 'parallel for' commands from being evaluated prematurely.
    • Added a dynamic load balancer for the "parallel for" command when VMD is running on an MPI-based cluster or supercomputer.
    • Implemented command parsing and single-node implementation of a parallel for loop construct. Adding the MPI implementation next.
    • viewchangerender: added movie script writing procs for parallel rendering
    • viewchangerender: Improved gui behaviour, improved interaction with moviemaker, now also saves movieList, and fixed some minor gui bugs
    • viewchangerender: Added ability to switch representations on viewpoint changes and improved interaction with moviemaker
    • Silence QuickSurf console output for Blue Waters MPI builds, so we don't get hundreds of thousands of console messages when doing parallel movie rendering jobs on hundreds of nodes.
    • remote: cleaned up bitmap viewing a bit so that we get filtering when zoomed in
    • remote: fixed a bug that was only occuring on Motorola Xoom when closing a tab. The event handler for the Xoom sends action messages that the other devices don't. Might be an ICS thing (though the events being sent aren't new to ICS)
    • fftk: fixed bug in error message
    • Added -DUSE_MPI_IN_PLACE for Blue Waters builds since they are based on MPI 2.x which requires the use of MPI_IN_PLACE for several types of collective operations where source and destination buffers are the same.
    • Switched MPI calls to check for ifdef on USE_MPI_IN_PLACE rather than on the Blue Waters target platform, since other machines can also MPI implementations that require MPI_IN_PLACE.
    • Enabled use of MPI_IN_PLACE with MPI_Allgather[v] operations when compiling for Blue Waters since it supports MPI 2.x.
    • Updated Blue Waters plugin targets to use the Cray-specific compilers activated by the modules system.
    • Updated VMD startup scripts for BLUEWATERS target.
    • Updated the BLUEWATERS build configuration to enable CUDA, using the unusual directory paths needed in the Cray software environment.
    • Switched BLUEWATERS build targets to use CUDA instead of OpenCL, since the Cray XK6 has NVIDIA GPUs in it (the IBM Power7 only had OpenCL)
    • Updated the BLUEWATERS platform target for the new Cray XK6 platform that has replaced the IBM Power7 target.
    • Updated Blue Waters build target with minimal dependencies to get the basic VMD builds bootstrapped on the early science system.
    • Added plugins build target for Blue Waters Early Science System.
    • Cranked version
  • VMD 1.9.2 alpha 3 (March 13, 2012)
    • remote: commented out the file deleting for the time being, so that multiple mobile clients can download an image
    • Any tcl code can now request that mobile apps display an image. Can be used in external plugin code by doing something like: ::remote::distributeImageToAll /PATH/TO/IMG TitleName or, a specific example might be: ::remote::distributeImageToAll /tmp/VMD_Timeline_Window.png TimeLine This will cause a new tab to appear on the remote device with the contents being the image. For right now, each invocation will cause an additional tab to be created on mobile devices.
    • remote: added ability to display images from the server with a tab name specified by the server. Turned off ability to rotate images via pinch/twisting.
    • remote: revised message sending to mobile clients to include a specific tag describing the type of message that is being sent, now that we have more than one.
    • molefacture: fixed typo when calling alchemify
    • Point lights are specified to renderers in world coordinates
    • Added initial support for rendering scenes with advanced forms of point lights, spot lights, glow lights, etc, with an initial implementation for the Tachyon renderers. Unlike the existing directional lighting model VMD already supports, the user wants to place these light in the currently active model coordinate system for the "top" molecule, rather than in world coordinates. The first implementation requires that the coordinates be pre-transformed, which we can do using a simple modification of the glowlights scripts people have been using to date. A more robust implementation will do the same thing, but will be implemented entirely internally. I still need to implement the matching GLSL shader code path for the more sophisticated lighting models, once we've tested this well.
    • fftk: fixed type in variable name
    • Use file scope linkage for internal QuickSurf helper routines that generate the acceleration grid and other temporary data structures. Ultimately, some of these routines should be pulled out of QuickSurf and shared with other algorithms that take advantage of the same kind of spatial decomposition to accelerate calculations using nearest-neighbor information.
    • remote: Added Tabs to the app that can be used to switch between the standard touchpad view, and image snapshots that the user can request. Stripped out the previous touchpad layout into its own file so that it can be shown and hidden. Added a new layout for viewing snapshots sent from the server. Added a menu option to take a snapshot of the current VMD view as well as all of the code to send a request to VMD to actually initiate the snapping of the shot. Added infrastructure to receive notice from the server that there is an image that we need to download and display. Snapshot view can be shared with any apps on the device that is configured to consume jpegs. Revised layouts so that the main layout contains a holder for daughter views. Removed title bar to give us a few more pixels of height
    • remote: Added proc that renders the current OpenGL window and notifies the client that a snapshot exists. Then launch a webserver to handle the request for said image (which is, currently, deleted after being retrieved). Added proc to process a request coming in from the mobile device. Currently performs a lookup on the request to determine what Tcl needs to be run. Added a user option to give a tmp dir where said image is stored. Rev'd version of tcl package.
    • VMD remote control changes: Added passthrough support for messages between the mobile devices and the remote control tcl code: Mobile Device to Tcl: Callback is MobileDeviceCommandEvent, via the variable exposed in tcl-space, vmd_mobile_device_command Added ability to send a message (originating in the remote control plugin tcl) to the mobile device.
    • molefacture: Updated documentation link for AmberTools 1.5
    • Imported improvements from the Tachyon BMP writer to address the behavior of BMP files loaded for display on Android phone/tablet devices
    • Cranked version
  • VMD 1.9.2 alpha 2 (March 7, 2012)
    • optimization: cranked optimization plugin version due to recent changes
    • Migrated the shared QuickSurf object out of DrawMolItem and into DrawMolecule, so that it is shared among all of the reps created for a given molecule. This greatly increases the GPU buffer memory reuse thereby allowing large numbers of QuickSurf reps to run with full acceleration and fewer passes, and it helps ameliorate problems where we can run the GPU completely out of memory in certain dire cases. It is now clear that what we ultimately need is a high-level VMD app-wide GPU temporary buffer management mechanism for things like QuickSurf that need allocate (and ideally repeatedly reuse) a large GPU memory buffer for extremely fast running per-frame calculations used for interactive visualization or analysis tasks. These calculations don't need the contents of the buffer after each iteration, they just need the buffer space itself. This would greatly reduce the performance cost and complexity of memory allocation/deallocation for similar algorithms, and would address the potential problem that multiple independent algorithms in VMD may need such buffers, but acting in isolation in their own interests they would allocate their own private buffers and run the GPU out of memory.
    • Added code to catch std::bad_alloc exceptions that can get thrown by Thrust if a GPU memory allocation fails while running the thrust::sort algorithms. In principle this shouldn't ever happen since we allocate safety padding arrays that we subsequently free before calling thrust, but in practice it does, so we need to cope with it by falling back to computing on the host if we run out of GPU memory.
    • remote: updates to newer version of android sdk
    • fftk: fixed bug writing water single point energy GAU file
    • fftk: writes to NUL if in windows
    • optimization: simplex now respects bounds
    • fftk: commented out depreciated code in buildpar
    • fftk: added code to also write single point energy GAU files when writing water interation GAU files
    • fftk: modified some labels for clarity; based on group meeting feedback
    • fftk: rmse for imported data in visualize results section of dihedral top formatted to 4 decimal places
    • Temporarily reverted the MolBrowser GUI update behavior to address bugs that affected updates for multi-molecule selections and file I/O cancel operations, caused by optimizations to update routine that improved performance substantially for cases with thousands of molecules loaded.
    • fftk: added button to reset all force constants in dihedral refinement
    • fftk: added button for loading dihedral scan LOG files into VMD for visual inspection
    • changed CHK specification in GAU header to a relative path (as opposed to an absolute path)
    • Use single-precision transcendental functions where possible.
    • remote: revised the app so that it now allows orientation changes properly without messing everything up.
    • Changed QuickSurf parameter handling for CG and cell models so that in cases where the minimum particle radius is greater than 4.0A, we change from absolute units of Angstroms in the GUI controls, to using relative units based on the minimum particle radius. This allows the default rep parameters and rep control value ranges to work well for a much wider range of models well beyond the normal all-atom case.
    • Added a define for VMDPBCSMOOTH so it is always enabled, thereby eliminating the need to explicitly set it in the Windows builds.
    • cranked version, and removed VMDPBCSMOOTH flag from configure options since it will now be (essentially) permanently set within the soure code.
    • Cranked version
  • VMD 1.9.2 alpha 1 (February 23, 2012)
    • remote: fix a bug that crept in with the scaling that was causing movement to stop in vmd if the mobile device didn't send any packets
    • remote: fixed a bug that was causing no clients to be active when you had multiple clients and the active one disconnected.
    • added a tcl command to retrieve the api version supported by the C code.
    • remote: added printing of the currently supported API version to the window
    • remote: added support for different sensitivity factors for tran, scale, rot
    • remote: device can now send a touchpad sensitivity aka scaling factor to the vmd session. The sensitivity factor is set in the preferences at the current time.
    • remote: added support for scaling the speed of rotation, translation, scaling based on input from the mobile device
    • Removed paratool from the plugin menu since the new FFTK plugin is making excellent progress. We still need to look at what to do about interactions between paratool and autopsf which might now be able to be handled through FFTK.
    • qmtool: fixed cart to dih and dih to cart to use proper signed dihedral (atan2, etc)
    • fftk: Major revision of charge optimization. Increased speed by orders of magnitude.
    • psfplugin: Updated PSF plugin to write 10-char bond records when emitting EXT format files
    • added bossconvert to the plugin builds
    • No longer doing builds for MacOS X on PowerPC platforms.
    • remote: Added detection of vmd server that has gone away
    • remote: Added the ability to set the desired API version to send to server. Reordered settings items to be more logical with subheadings.
    • remote: Added ability to receive data from VMD. Currently getting list of users (not being used) and who is in control. Control is shown via green or red area.
    • Added ability for VMD to send messages to mobile app. Currently only sending a list of connected users and who is in control.
    • fftk: fixed major problem with determining angle type definitions when parsing/averaging bonded parameters
    • fftk: added 'esc' key binding to dihopt visualize results data tv box to unselect all datasets
    • fftk: added event to delete selected charge constraint tv items with 'delete' key
    • networkview: updated version to 1.1
    • networkview: changes from john eargle on a proc that hadn't been fully converted from arrays
    • fftk: fixed mode setting for Build Script of charge optimization
    • fftk: fixed memory request in Gaussian input file for hessian calc
    • fftk: modify geomopt Gaussian input file to write CHK to CWD
    • nanotube: step version to 1.3 and make it depend on the current topotools.
    • nanotube: have the nanotube plugin assign segment ids to atoms so that psfgen no longer incorrectly identifies saved psf files as being in X-plor format.
    • nanotube: document which atom properties are set by the plugin.
    • topotools: step topotools version to 1.3
    • topotools: properly fix the bug with detecting invalid commands
    • topotools: reduce stack size requirements through avoiding long selection strings detect short reads, e.g. due to a wrong atom style flag, when reading lammps data files.
    • topotools: correct logic for printing the help message
    • Check for VMDFORCECPUCOUNT environment variable. I should also back-patch this change into the 'sed' script that adapts the Tachyon thread library into the "workforce" version.
    • gamessplugin: Fixed reading of minimization steps for latest build of Firefly 8
    • fftk: scale energies and distances by tol^2 now in ChargeOpt
    • fftk: fixed problem with writing dihedral optimization refinement results to LOG; issue with default file type in file dialog
    • fftk: added TODO.txt file
    • fftk: fixed gaussian memory setting when writing gaussian input file for hessian calculation
    • fftk: more tiny bug fixes
    • multiseq: fix a bug noticed by charles.sun1990 at gmail.com, where the ctrl key was not working properly when selecting individual residues. The display update proc was being called for everything but ctrl key selections for some reason.
    • qmtool: couple bug fixes to qmtool_readwrite
    • remote: made the docs a bit more readable with more HTML formatting
    • remote: give better example of a button1Pressed proc in the docs
    • viewmaster: updated version number in the docs
    • remote: Fixed bad URL in the VMD remote plugin docs.
    • nmwiz: Updated version of NMWiz plugin from Ahmet Bakan. This update adds support for a new "porcupine" style vector representation.
    • rmsdvt: Updated rmsdvt source file author credits and usage comments per Anssi Nurminen's latest email. Updated the help menu "About" box.
    • heatmapper: Updated heatmapper source file author credits and usage comments per Anssi Nurminen's latest email.
    • heatmapper: more docs for heatmapper
    • bossconvert: fix distrib target for Win32
    • rnaview: fixed makefile tabbing in the distrib target
    • bossconvert: added bossconvert files to the plugin tree
    • Cranked version
  • VMD 1.9.1 Final Release (February 4, 2012)

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