VMD Development Status

  • Working toward VMD 1.9.4 beta releases
    • modelmaker: fixed bug when calculating per residue cc
    • autoionize: Typo correction in detecting Cesium (CES)
    • qwikmd: Addition of the optional salts for structure preparation: CsCl MgCl2 CaCl2 ZnCl2 (already supported by the autoionize)
    • Additional .qwikmd files loading mechanism using the "initial structure" selection entry and load button
    • Make the deletion of the previous output folders more precise. Delete only the files of the system to be replaced and leave the rest intact. Lock the save button in the case of the preparation a QM/MM simulation from a classical simulations
    • qwikmd: Change the QM Options from global (same options for all protocols) to QM options for each protocol. A combobox on the top of "QM Options" controls the target protocol. Add the capability to load the orbitals for orca. The print commands are exemplary, working when Orca ran with PM3. These commands need to be changed if another theory level is used. General bugfixes and improvements.
    • Finished implementing update_type function in Segmentation.C so that the datatype used to represent groups can be switched while the segmentation algorithm is running. Fixed various bugs with the templatized group types that did not appear before when only using floats.
    • Eliminated two tiny memory leaks in the CPU fallback code path for the MDFF cross correlation code.
    • eliminated unused counter to please Clang/LLVM
    • Fixed segfault in the CPU gaussian blur code path caused by an uninitialized pointer.
    • Changed constant from double to float to prevent pointless double promotion
    • Added a new experimental "LatticeCubes" representation to draw axis-aligned particle-radius-scaled lattice site cubes for use when visualizing LM lattice sites, particularly for multi-modal simulations that combine both lattice-based cell simulation with brownian dynamics based particle/bead simulation. The first implementation is absolutely minimalistic and borrows heavily from the old GLSL sphere rendering code path. In principle, the OpenGL path would best be done using additional GLSL geometry shader stage to multiply the incoming vertex out to build the cubes. Similarly, the initial implementation for the FileRenderer hierarchy is also very minimalistic and doesn't batch up the triangles into higher level meshes, so there's a lot of inefficient triangle-at-a-time processing occuring when feeding the cubes to OptiX. Lastly, for renderers like Tachyon and OptiX where we have freedom to introduce a purpose-built primitive, we could create an actual cube array primitive like we do for spheres, and this would boost performance tremendously. Fornow by default, the new experimental "LatticeCubes" representation is only available in the graphical interfaces when the code is compiled with -DVMDLATTICECUBES, otherwise the display commands and associated rendering paths exist, but the graphical representation and GUI controls are all disabled.
    • pdbxplugin: Added ability to read PDB_model_num (the alt_loc field in vmd) from PDBx files.
    • modelmaker: workaround for rosetta bug where abinitio doesn't keep fixed part's sidechains fixed. for now, take fixed part from template and merge that with rosetta generated part.
    • misc cleanup of CPU-based QCP RMSD algorithms before building up the GPU side further.
    • Modified the behavior of VMDApp::molecule_load() to accept PDB-Dev mmCIF hybrid model files that in some cases contain graphical objects such as spheres, but may or may not contain atomic structure information. Previously, in any case when a molfile plugin advertised the ability to read atomic structure information, we expected it to follow through with a successful read, but now we have to check whether or not the specific file in question happens to contain atomic structure information before we try and read it, and in either case we must still check for volumetric density map information, graphics objects, and similar. Similarly, the logic for loading simulation trajectory information has also been updated to check for a non-zero atom count as a necessary precondition. It should be noted that if we further revise VMD to enable time-varying density map information or other non-atomic information to be read from a trajectory file that this will have to be revised further.
    • pdbxplugin: Added ability to read spheres from PDB-Dev files. Fixed a string handling bug that could cause some fields to be truncated.
    • modelmaker: analysis alignment now uses exact selection text of user and does not add backbone, so that users can align with only CA as an example. If aligned pdb already exists, skips doing alignment again. Will now overwrite formatted dcd so subsequent analysis runs can be done in same folder.
    • Continued work on APIs to improve saved state restore performance for massive biomolecular complexes.
    • pdbxplugin: Added a check for PDB-Dev files and adds warning that support is experimental. Also adds warnings for missing PDBx fields that are required in the PDBx spec. Fixed memory leak and other memory related errors in delete_pdbxParser. Improved string handling when reading headers to prevent buffer overflows. Fixed errors in the way we were parsing special bonds. Removed unused variables and renamed/reformated parts of the code for better readability.
    • Added detailed comments about the two CUDA QCP kernel designs and their current approach and a couple of special alternative schemes that may come closer to GPU "speed of light" under a limited range of circumstances.
    • Added a CUDA thread-block-per-structure-pair QCP RMSD implementation optimized for small structures.
    • Added support for CUDA 7.5 so that the CUDA-accelerated QCP code can be compiled on NCSA Blue Waters and ORNL Titan.
    • Added a GPU-accelerated quaternion characteristic polynomial (QCP) RMSD alignment inner product kernel designed for device-wide calculations (all thread blocks collectively compute QCP inner product sums) suited for very large structures of macromolecular complexes, viruses, etc.
    • Added VMDApp::color_change_namelist() method to drastically reduce the number of display update cycles that occur when loading saved states associated with massive molecular complexes. Large molecular complexes with hundreds of millions of atoms tend to have color categories (e.g. segment names, chains, etc) that have a much larger number of entries than would occur for small structures with only a few million atoms. The impact of the huge item lists associated with each color category is a form of quadratically scaling complexity when processing saved state files due to the combination of previous approach of setting color category items one-at-a-time, which has a side effect of triggering representation updates, which then trigger display updates. This is inconsequential for small systems, but for systems in the >= 100M atoms range such as the Chromatophore, Flu viruses, or the protocell, it is a major performance issue. The simplest resolution (without significant changes to the way that saved state restoration is performed wrt/ file loading and color category initialization) is to batch all of the color category updates together at once, thereby triggering only a single cycle of DrawMolItem updates and subsequent display updates. This approach would also make it feasible, with a minimal amount of code to continue to enable a saved state written by VMD 1.9.4 to be loaded by VMD 1.9.3 or perhaps VMD 1.9.2, at least for the time being, albeit only VMD 1.9.4 would get a performance gain.
    • pdbxplugin: Commit includes multiple bug fixes, and experimental support for PDB-Dev. Fixed an error handling bug that occurred when we couldn't find the number of atoms in a file. Fixed a buffer overflow that occured when special bond column names were larger than expected, and added length checks to internal string manipulation code. Fixed multiple memory leaks and uninitialized reads. Added comments and renamed variables to improve readability.
    • modelmaker: new model command options for sorting and modifying output structures
    • modelmaker: python clustering now creates a pdb of each medoid
    • modelmaker: python clustering now creates dcds for each cluster
    • modelmaker: added kmin and kmax options for python clustering
    • modelmaker: fixed naming for tmp input pdb and seq files in model command
    • Updated molecular orbital code to automatically select the L1 cache kernel when running on Volta hardware.
    • Updated build logic for LIBPNG and ZLIB so that we can redistribute these with the VMD build and ensure we avoid conflicts with older and incompatible platform-supplied versions of these libraries.
    • Added plumbing for VMD builds using a Vulkan rendering path rather than OpenGL, although there's a long way to go before the Vulkan path is ready for prime-time.
    • Added significant additional error checking to EGL surface creation and context binding during startup. Added checks for EGL implementations that do very late memory allocations and emit more informative error strings when things go awry.
    • Continued adding debugging checks and optional diagnostic outputs into OptiXRenderer initialization routines.
    • Added detailed error checking/reporting during the earliest phase of EGL context creation.
    • Continued adding debugging checks and optional diagnostic outputs into OptiXRenderer initialization routines.
    • Added much more extensive console output during device enumeration logic to help track down issues with running OptiX inside containers on certain hardware/software platforms. When set for debug output, the VMDOPTIXVERBOSE environment variable now causes the OptiXRenderer device enumeration code to emit intermediate results as OptiX APIs are queried for device counts, compute capabilities, and so on.
    • Added support for LLVM/clang for Linux builds
    • Added typecasts for eliminate LLVM/clang warnings for Python keyword lists
    • Ensure that Orbital class member fctn descriptions show up on Doxygen
    • Trimmed unused enum member variable from CUDAAccel class.
    • Eliminated unused input/unput functions from the AtomLexer atom selection scanner implementation
    • Removed old special case SC'15 ray tracing demo code paths that were enabled by a SC15ANIMSPHERESHACK compile-time macro.
    • Added conditional compilation for vmd_input_hook() which is only used when compiling VMD as a shared object for use within a Python module.
    • Eliminated unused state variables in the Python atom selection bindings
    • Miscellaneous cleanup and conditional compilation completeness improvements to please LLVM/clang, which is more attentive to unreferenced class member variables and the like.
    • Cranked version number.
  • VMD 1.9.4 alpha 16 (March 19, 2018)
    • Switched builds to OptiX 5.0.1
    • Started updating the VMD 1.9.4 README files
    • Started testing/revisit on default setting for the auto-sample-count adjustment loop when used in combination with the progressive API
    • Updated the comments related to 256-way shader specialization and its impact on VMD startup performance.
    • Added a wrapper for nvtxInitialize() since we didn't have one yet.
    • Added ORNL Summit EGL config into the defaults Makefile as summit.egl
    • Corrected image segmentation code so it can still be compiled when CUDA is disabled.
    • Added an extra internal flag so that the QuickSurf GPU-side object allocation and caching strategies don't impact cases where we've forced the use of the CPU code path for other reasons.
    • Added NVTX tags to top of Segmentation algorithm hierarchy to ensure that the front-end constructor and final GPU-host copy of the group map are both included as they should be.
    • Eliminated explicit CUDA synchronizations where they are not critically needed.
    • Eliminated unnecessary GPU-host-GPU copy cycle for 3-D density map when initializing the Watershed algorithm from a previously Gaussian-blurred density map image that already resides on the GPU.
    • Eliminated unnecessary GPU-host-GPU copy cycle for 3-D density map when initializing the Watershed algorithm from a previously Gaussian-blurred density map image that already resides on the GPU.
    • Revised to segmentation algorithms to make use of cudaMemcpyAsync(), cudaMemcpyToSymbolAsync(), and cudaMemsetAsync() and so on, where it is safe to do so.
    • Updated conditional compilation macros on various branches of the image segmentation algorithm to facilitate easy compilation of the 10+ variants of the code (and profiles) required for the GTC2018 Nsight system profiler talk.
    • Added support for LLVM (clang) compilation in the ORNL Summit builds
    • Updated ORNL Summit XLC compiler flags to add -qsuppress=1500-036 to suppress warnings about NOSTRICT (the usual worries about the impact of non-associativity of floating point math). The -qsuppress flag is supported for XLC compiler versions after 20180208.
    • Eliminate compiler warnings on signed/unsigned comparison for MOLFILE_BADOPTIONS (which is 0xffffffff or -1)
    • revised implementation of the K nearest neighbor selection to avoid signed/unsigned comparisons
    • Added measure commands "centerperresidue" "rmsfperresidue" "rmsdperresidue" for testing.
    • Added console message when image segmentation diagnostic output is enabled
    • Updated built in help for 'profile' script commands
    • Added -Wno-unknown-pragmas to all of the GCC compiler flag sets to prevent warnings associated with OpenACC #pragmas in several source files when compiled with versions of GCC that predate support for OpenACC.
    • Commented out unused yellow2 variable in DrawRingsUtils
    • Continue revision of CPU affinity logic to support special case handling for batch systems that externally manage affinity masks etc.
    • Restructured the CPU thread core/socket affinity code in prep to add special handling for batch systems that restrict our ability to set thread affinity at runtime.
    • Added cleanup rules for .lst files produced by IBM XLC compilers
    • Added initial tags to support compilation with LLVM (clang)
    • The current GCC versions on Summit (4.8.5) don't have -mtune=power9 yet, so we revert to power8 for now.
    • Modified the stock Khronos EGL header eglplatform.h to cope with systems like the ORNL Summit machine that don't have any X11 headers installed.
    • Further revision of the Watershed algorithm to handle large volumes, while reducing register footprint of the CUDA kernels
    • Eliminated -ll link flags leftover from commercial Unix lex linkage
    • Took the proverbial flamethrower to all of the ancient hacks that related to old compilers that used explicit directories for C++ template caching that used to pollute the filesystem. We are long since rid of these now so there's no longer a reason to keep any of the build steps associated with compilers of that era.
    • Added explicit type conversions to eliminate spurious compiler warnings for the idx2sub() variants
    • Eliminated orphaned calculation of curr_diff in the CPU Watershed code path
    • Silence spurious compiler warnings about float to int conversions
    • More colvars updates to correct some remaining mismatched integer types among some colvars APIs
    • Disable CPU thread pool affinitization on the ORNL Summit system since the job scheduling tools currently box in CPU threads according to the details of the parameters passed to 'jsrun'. If VMD tries to reset the CPU affinity of the threads in the pool it gets runtime errors, so for the time being we'll accept what the job scheduler assigns and make the best of what we're given.
    • Updated the configure script to workaround various teething issues on the ORNL Summit system.
    • Updated to colvars version 2018-03-09
    • Updated the MRC/CCP4 plugin to correctly interpret non-IMOD tomograms that use signed-byte voxel formats by checking the sign of 'amin' in the header.
    • Updated to latest Khronos KHR/khrplatform.h header
    • Updated to latest Khronos EGL headers
    • Cranked version number.
  • VMD 1.9.4 alpha 15 (March 7, 2018)
    • multiseq: Updated multiseq to accept any current version of the colorscalebar plugin
    • colorscalebar: Rewrote the internals of the color scale bar plugin to generate color bars that will render with high quality in ray tracing engines, by replacing line primitives with cylinders and color-per-vertex triangles.
    • Added #ifdefs for socklen_t case for Summit and OpenPOWER platforms.
    • Improve Segmentation error handling warnings for illegal voxel type
    • Updated to colvars version 2018-02-24
    • Corrected redefinition of default parms on Thrust branch of #ifdef in the CUDAParPrefixOps code.
    • Corrected "mol fromsels" PBC unit cell transfer logic to depend on 'selidx'.
    • Updated built-in help to document flags that allow the user to override default values for the Gaussian blur sigma for both the initial Watershed pass, and both the initial sigma and blur-multiple coefficients for each iteration of the scale-space segmentation algorithm.
    • Corrected the CUDA parallel prefix sum wrapper builds to correctly set conditional compilation flags for CUB vs. Thrust for callers that need to know whether to make use of the optional caller-provided workspace allocations parameters by providing pre-allocated buffers of appropriate size.
    • Updated CCP4/MRC map reader plugin to properly handle density maps with several billion voxels in them.
    • misc cleanup of various test code and leftover test scaffolding
    • Promoted image segmentation indexing and size related intermediate variables to long integer types to allow processing of volumes containing tens of billions of voxels
    • Corrected VMD-internal side of the of the molfile plugin interface for volumetric data to prevent problems when loading tomograms or density maps containing tens of billions of voxels. The previous code was extensively using plain integer types that are insufficient for indexing calculations, which have been replaced by long integer types for now.
    • Corrected console output when loading massive tomograms containing tens of billions of voxels so that the correct voxel counts and memory use are displayed, by performing arithmetic with long integer types and by replacing a few more instances of hand-written size arithmetic with calls to the VolumetricData::gridsize() method.
    • Changed SIMD-vectorized min/max functions to accept long types to allow them to process cryo-EM density maps with tens of billions of voxels and to facilitate atom selections w/ long integer types at a later time.
    • Typecast volume dimension parameters to ensure that huge tomograms don't overflow intermediate arithmetic when computing total voxel counts after getting volume metadata from the reader plugin.
    • Begin addressing DCD plugin limitations with respect to 2-billion atom simulations
    • Improved color mapping for NVTX profile tags
    • Added NVTX tags to clearly show startup script execution and command line or user .vmdrc startup processing activity vs. the interactive command interpreter loop.
    • Add profiler tags for the longer running OptiX class initialization steps that involve shader compilations, etc.
    • Added NVTX markers for CUDA device pool initialization time ranges
    • Improved use of NVTX markers for file I/O activity and VMD text command execution. Text command completion is still vague since some operations are not triggered until the next VMD display update cycle.
    • Eliminated unnecessary inclusion of tcl.h and TclCommands.h in MDFF.C
    • qwikmd: Allow creation of QM regions with charges between -1 and +1 with MOPAC, but emit warnings
    • Added inclusive scan to CUDAParPrefixOps. Noted that we're going to have an issue with some of the intrinsic vector types like uint2 which are used in Marching Cubes, and that we may need to explicitly supply a zero-value initializer for type T to handle the lack of a built-in automatic type conversion from int to types like uint2. It may be simpler to expose an extra zero parameter here rather than baking it into the implementation the way it has been done at present.
    • Added NVTX profiler push/pop operations into CUDAWatershed::init_gpu_on_device()
    • Added in conditional compilation for GPU-based initialization to ease collection of pre-optimization profiles for the GTC presentations.
    • Added comments and improved formatting of the explicit template instantiation block
    • Added CUDAParPrefixOps to the build.
    • Migrated parallel prefix sums routines out of the CUDA image segmentation code so that the CUB-based code paths and the more explicit handling of persistent allocations of temporary workspace buffers can be generalized in other parts of VMD that make extensive time-critical use of parallel prefix operations, such as QuickSurf, Marching Cubes, etc.
    • Added an init_gpu_on_device function to CUDAWatershed that allocates arrays on the GPU and then calls the calc_neighbors_kernel. This is called instead of the previous init_gpu function, and performs the initial watershed neighbor initializtion entirely on the GPU. It is a large performance win over the previous CPU-based initialization.
    • modelmaker: gnuplot fix
    • modelmaker: fixed bug in ssanalysis if only 1 struct. Turn off evaluate_ss_analysis for now because gnuplot is causing a variety of issues and may no longer be needed.
    • modelmaker: quick_mdff now works with multiple maps and new gridpdb selection text. removed last mention of Juan's old cluster code paths
    • Cranked version number.
  • VMD 1.9.4 alpha 14 (March 1, 2018)
    • modelmaker: ss analysis no longer launches another vmd instance
    • modelmaker: added optional output prefix for fragment files
    • qwikmd: Add qmbondscheme option to QwikMD GUI
    • Added notes on key GPU segmentation algorithm control flags
    • Added notes about the tight loop over GPU update_kernel() launches and checks on changes_d state after each run.
    • disable CUB until we've formalized the usage of CUB for scan etc.
    • Refactored the CUDA image segmentation classes to permit the initialization phase neighbor calculations to be performed on the GPU rather than the host. Added a first draft of CUDA calc_neighbors_kernel() and calling routines that will eventually replace the CPU-side initialization routines.
    • Added notes about pthread_setname_np() on Linux
    • Refactored the CUDA-accelerated scale space filter and segmentation classes to permit the use of persistent temporary work buffers for the parallel prefix sum (exclusive scan) operations. This change permits elimination of the CUDA global memory allocation/deallocation pairs within the scale space filter loops. Thrust has a mechanism for ensuring reuse of temporary work area allocations, but it requires very new versions of GCC, in contrast, the CUB device-wide exclusive scan implementation provides explicit workspace parameters that can easily be managed by the caller.
    • Added notes about Thrust cached allocations supported w/ GCC 4.4 and later
    • Added comments about thrust-internal allocation/free calls that show up in detailed profiler traces
    • Corrected NVTX tag color alpha channel values to 0xff so that tags display properly both in 'nvvp' and the system profiler
    • Began revision of the entire image segmentation pipeline to enable the use of persistent GPU-side temporary buffers across multiple iterations of high-level segmentation algorithm steps. By incrementally modifying the affected classes with some optional temporary workspace parameters, we can also do A/B comparisons with profiling tools to evaluate the overall performance impact. At present the CUDASegmentation classes have been updated to use this approach, but the entire collection of segmentation classes need a more unified scheme for persistent GPU object management. This is just a starting point for further revision and refactoring.
    • Renamed get_cuda_array() helper routine to alloc_cuda_array() for clarity. The segmentation pipeline APIs need cleanup so we don't have to create and expose wrappers for low level memory allocations like this among the different segmentation related classes.
    • Added the BFE estimator plugin to the startup scripts
    • Added Chris Chipot's binding free energy estimator plugin.
    • Eliminated debugging code with conditional compilation and removed unnecessary extra calls to cudaDeviceSynchronize()
    • Eliminated more debugging code and calls to cudaDeviceSynchronize()
    • Continued cleanup, shave off unnecessary calls to cudaDeviceSynchronize()
    • Refactored the Watershed constructor to eliminate the separate helper method.
    • Updated comment about runtime associated with the CPU-side init() method.
    • Cause the GaussianBlur class to avoid GPU-host copies after blur() operations until absolutely necessary, which is only the case if get_image() is called to get the results in a host-side memory buffer. This cuts the runtime by 30% or so, particularly for large size maps.
    • Added more profiling hooks in the Segmentation and ScaleSpaceFilter classes to track down unnecessary host-GPU data movement calls.
    • Added more profiling hooks to the Gaussian blur class
    • Added profiler hooks to key CUDA Gaussian blur routines
    • Improved usage of NVTX profiling markers in the Segmentation and ScaleSpaceFilter classes.
    • Continued improvment of MeasureVolInterior loop nests and indexing arithmetic.
    • Corrected the loop nest traversal order in MeasureVolInterior markIsoGrid() and RaycastGrid() for best memory performance. Eliminated leftover unused temporaries and did more cleanup.
    • use VolumetricData::gridsize() rather than computing voxel counts within the measure volinterior implementation
    • rewrote the countIsoGrids() routine for measure volinterior
    • Cleanup and de-tabification of 'measure volinterior'.
    • Misc cleanup of measure volinterior Tcl bindings
    • Added Tcl bindings for "measure volinterior" commands, lightly revised from Juan's original implementation.
    • Added MeasureVolInterior.[Ch] source files associated with Juan's ray casting based vesicle/capsid interior volume routines.
    • Added Juan Perilla's routines to measure the interior volume of a vesicle or capsid, based on inside/outside tests performed on a simulated density map (e.g. from QuickSurf, 'volmap', or similar) in combination with an isovalue boundary value threshold parameter, and a ray casting approach for marking voxels.
    • modelmaker: added fragments command for using local fragment picker and removing Robetta webserver dependence
    • Added a profiler timestamp marker for the CUDA Watershed::init_gpu() method
    • Migrated Watershed segmentation profiler timestamp marks into the specific CPU/GPU methods
    • docs: Updated documentation for the collective variables module.
    • docs: Imported documentation for the many Python bindings contributed by Josh Vermaas.
    • Further optimization of the shuffle-based MDFF GPU kernels for SM >= 3.x
    • Revised the molecular orbital GPU kernels to eliminate use of the old umul24() intrinsics that were beneficial for performance on the first few generations of GPUs.
    • Revised the direct Coulomb electrostatics GPU kernels to eliminate use of the old umul24() intrinsics that were beneficial for performance on the first few generations of GPUs.
    • Revised the implicit ligand sampling GPU kernels to eliminate use of the old umul24() intrinsics that were beneficial for performance on the first few generations of GPUs.
    • Updated the built-in CUDA multiply-add benchmark to eliminate use of the old umul24() intrinsics that were beneficial for old GPUs. Increased the default workload size by 40x to do a better job on the latest Volta GPUs.
    • Rewrote the MDFF cross correlation intra-warp parallel sum reduction loops to exploit shuffle instructions for Kepler and later GPUs. The use of shuffle instructions eliminates much of the need for shared memory. The new reductions are written against the latest __shfl_xxx_sync() routines from CUDA 9.x and beyond, since the previous shuffle instruction variants are now deprecated. There is no noticable impact on performance thus far, which is logical since the reduction scheme we use was highly efficient even on the older generation GPU hardware.
    • Made 2xl and 4xl variants of the find_max_values_shm() kernel for improved convergence rate with very large numbers of segments.
    • Corrected image segmentation diagnostic timing output.
    • Wrote a new CUDA kernel to significantly speed up the find_max_values() kernel by creating a variant that limits the scope of potential atomic update collisions for each thread block to SM-local shared memory, followed by a block-wide update to global memory. The new find_max_values_shm() kernel is only used when the number of segments is smaller than or equal to the number of voxels per thread block, such that each thread handles one potential group's max value update.
    • modelmaker: changed default cccolor selection from all to protein and noh
    • Added profiler markers for CUDA segmentation algorithm steps, and noted that we currently spend 20% of our overall GPU-accelerated segmentation runtime in the Watershed::init() routine.
    • Added comment about memory bandwidth limitations associated with sampleVolume() use within the MC code.
    • QuickSurf: Added comments about key kernel latency hot spots
    • Added -lineinfo compiler flag to ensure that CUDA kernel dissassemblies shown in profiling tools can be correlated with source
    • Re-tuned QuickSurf CUDA launch bounds for Kepler and later GPUs with CUDA 9.x
    • Migrated main VMD thread profiler hook to the earliest point of execution, and special-cased the marker to it is used even when running with the system profiler.
    • Added profiling hooks in the cryo-EM segmentation routines
    • Added profiling tags in the MDFF cross correlation code path, and ensured unique tag colors for timeline profiler views.
    • Cleaned up MDFF error propagation and CPU-fallback handling if/when cases arise that the CUDA code path can't continue. Added a new parameter to the default QuickSurf() constructor to allow forced CPU fallback and override of the use of the CUDA-accelerated code path if we already have a cascading error situation.
    • Added comment about MDFF internal environment manipulation logic
    • Removed early test code from the MDFF CPU/GPU cross correlation launch path
    • Added new "profile" text commands to allow VMD scripts to enable/disable collection of profiling data with external tools like the NVIDIA visual profiler, system profiler, etc.
    • Added cmd_profile.C to the build
    • Added ref to NVTX sample
    • Added profiling hooks into QuickSurf and Molecular Orbital routines
    • Added NVTX profile markers for VMD text commands where possible
    • Implemented initial use of NVTX tags with the NVIDIA system profiler
    • Added PROFILE_NAME_THREAD macro for use in labeling host threads
    • Added header-based profiling hooks for NVTX and similar profiling APIs.
    • Added NVTX configure flag to enable use of the NVTX profiling APIs for VMD builds compiled against the NVIDIA development tools.
    • modelmaker: model usage info no longer shows get_empty_density info
    • Updated plugin build scripts for final ORNL Summit system
    • fixed pdb2seq output and model usage info
    • Split the compilation target for Summit to be separate from the more generic OPENPOWER so we can do extra (potentially not generalizable) compile-time optimizations for VMD.
    • modelmaker: fixed cluster alignment code path and added modelmaker interface for modeller scripts
    • Added first version of the ModelMaker plugin
    • Cranked version number.
  • VMD 1.9.4 alpha 13 (January 24, 2018)
    • Corrected ownership of density map memory allocation in the segmentation -separate_groups subcommand.
    • Added a -separate_groups subcommand to the density map segmentation implementation, to automatically mask the reference density map by group IDs, emitting a new density map corresponding to each group ID, with all non-member voxel values set to zero.
    • Improved argument parsing for segmentation routines.
    • Standardize the console output routines for timing output
    • updated built-in help for segmentation commands
    • Linked up the "segmentation" Tcl command bindings.
    • Updated default segmentation parameters and optional argument parsing.
    • the 'mdffi' commands are no longer experimental
    • Organized Tcl command binding initializations so they occur in alphabetical order (there are no other initializations or side effects at this point in the code, only the actual command binding).
    • Added initial Tcl bindings for the scale-space density map segmentation algorithms.
    • Updated the Segmentation class to add a constructor that works directly from the VolumetricData class.
    • Changed volumetric data API to use long return type for the gridsize() method to prevent integer overflow for large datasets.
    • Refactored gaussian blur 1D kernel generation and added 3D kernel generation in prepration for adding 3D gaussian blur convolutions.
    • Added comments about the display update callback implementation and the limitations imposed by older FLTK APIs vs. the latest.
    • Began revisions to remove/hide VMD GUI controls that aren't particularly relevent to rendering performance in 2018: both backface culling and display list cache mode are (today) anachronistic schemes for gaining rendering performance, which were even at the time really meant as solutions for special rendering systems like the CAVE, tiled display walls, and similar. Since most users will never have contact with the kinds of hardware where these approaches were useful, there's no longer a reason to incorporate them in the GUI. The underlying features still exist and can be manipulated with text commands however. While modifying the GUI, I also took the opportunity to eliminate hard-coded menu indexing in favor of the use of a simple enum type, which simplifies conditional compilation of menu items via ifdefs.
    • Added top level image segmentation and scale-space filtering classes to the build.
    • Accomodate header file expectations of some old C++ compilers.
    • Corrected Gaussian blur class to call integer abs()
    • Protect CUDA GPU related teardown call with #ifdefs so that it is not called on CPU-only builds, such as 32-bit MacOS X.
    • More corrections to minor issues in the latest colvars update.
    • workaround for type-ambiguous calls to pow() in colvars
    • Updated colvars module to the current git version 3bf0ded
    • Added the new top level scale-space 3-D image segmentation classes to the build.
    • Added the 3-D scale-space Gaussian filtering to the build. This is used for scale-space variants of the Waterhsed image segmentation algorithm in VMD.
    • Began type-generic templatizing all of the image segmentation related classes so they are capable of operating on arbitrary pixel/voxel types, to allow us to exploit high performance hardware features for half-precision IEEE floating point, as well as a variety of fixed-point and integer voxel/pixel types for better memory bandwidth and in some cases significantly higher arithmetic throughput. This is particularly valuable on the GPU, as it will eventually enable the so-called "tensor core" in NVIDIA's latest Volta GPUs to be used for some of the convolution operations used in scale-space filtering.
    • Updated to OSPRay 1.4.3.
    • Added CUDA-accelerated Gaussian blur kernels to the build.
    • qwikmd: Bug Fix on the declaration of the Temperature when preparing simulations from previous simulations performed with QwikMD
    • qwikmd: Use vec operations to calculate mean and standard deviation
    • nanotube: Corrected command line parameter count check on the graphene plugin to accept 6 parameters rather than a minimum of 8.
    • qwikmd: Fix issue with copying files on Mac returned by the glob command
    • qwikmd: Prevent issues finding the original pdb file when stored in folders with space characters
    • Cranked version number.
  • VMD 1.9.4 alpha 12 (December 21, 2017)
    • qwikmd: Add mdProtInfo array to the save file, when the qwikmd file is saved without preparing the simulation.
    • watershed: Protect call to destroy_gpu() with ifdefs so that it doesn't cause linkage issues on non-CUDA builds (e.g. 32-bit MacOS X).
    • alascan: updated alascan plugin dependency version number for new parsefep
    • fftk: Added fftk_ChargeOpt_ESP.tcl to the distrib target
    • ParseFEP: Updated version of ParseFEP from Chris Chipot and colleagues. The new version improves FEP analysis performance by a factor of ten or so. This version also corrects a bug in the Bennett-Acceptance Ratio (BAR) module that had affected prior versions.
    • Corrected a bug in the use of toupper() in the atom name string matching code used to assign default atomic masses when they are not explicitly provided by input files.
    • fftk: added link to parmed for conversion to Amber-style files
    • fftk: Added support for RESP calculations used in the Amber force field.
    • qwikmd: Typo Correction
    • Updated VMD to use OptiX 5.0.0 test builds.
    • runante: Add missing close brackets
    • qmtool: fixed a parsing error for Gaussian
    • Cranked version number.
  • VMD 1.9.4 alpha 11 (November 8, 2017)
    • Continued development of "mol fromsels": added handling of cross-term maps
    • Continued development of "mol fromsels": Ensure we don't create duplicate bonds when building a new molecule from multiple selections.
    • Changed OptiX cylinder count comparison logic so we don't emit an odd buffer size.
    • Modified the OptiX renderer to break up sphere and cylinder array buffers containing more than 5 million primitives into multiple smaller buffers. This helps OptiX exploit NVLink-based distributed memory ray tracing through round-robin allocation of geometry buffers over multiple GPUs. Previously VMD was accumulating as much geometry as possible into each buffer to minimize API overheads. The buffer size cutoff chosen is mostly arbitrary, and it may be that going to larger arrays containing 10 million elements or more may be sufficient to achieve the desired result.
    • Continued implementation of "mol fromsels": Ensure that after the new molecule has been constructed from the list of selections, we call newmol->analyze() so that per-atom fields populated by VMD's internal structure analysis are assigned before we return to the caller. When building the new molecule, we also combine the molecule datasetflag from each of the selected molecules, ORing in the fields provided by each, since the new molecule is a superset of the originals. The user can of course override this behavior by manually setting or clearing the molecule dataset flags themselves ex post facto.
    • Cranked version number.
  • VMD 1.9.4 alpha 10 (October 27, 2017)
    • Corrected mismatched parameter to strstr() in vaspoutcarplugin, reported by Thomas Holder.
    • Corrected leaked title string and temporary atom parsing strings in vaspposcarplugin, reported by Thomas Holder.
    • msmsplugin: Fix a memory leak of temporary path strings in the MSMS plugin reported by Thomas Holder.
    • Improved MolFilePlugin indexing efficiency for angle/dihedral/improper traversal
    • Continued development of "mol fromsels": Added handling for filtering angles/dihedrals/impropers from the selection list into the new molecule.
    • Continued implementation of "mol fromsels": Added initialization path to copy periodic cell information from first selection into the new molecule. It doesn't make sense to copy in quantities like timestep index, physical time, or energies, and even PBC unit cell info is only useful in some cases. The implementation should use the merge mode flag to determine whether to copy PBC cell information or not. Added comments related to copying other per-timestep data such as velocities.
    • Continued work on 'mol fromsels': added code to copy atomic coordinates from multiple selections into a new timestep, when one or more of the selections have coordinates associated with them. The code does not replicate timesteps, but rather only takes the currently active coordinates for each selection, enabling the caller to mix and match whichever timesteps they might want to use by using '$sel frame' judiciously. The new code only handles coordinates and does not yet handle other time-varying quantities such as velocities, forces, "user" fields, or PBC info.
    • Initial implementation of "mol fromsels" Tcl binding.
    • Fix missing free in 'measure sasalist'
    • Implemented a prototypical implementation of "mol fromsel" to create a new molecule from a list of selections. The code presently copies the required per-atom fields from each selection, and ignores the merge mode flag. The merge behavior and data consistency requirements among the list of selections are not yet implemented or enforced. Different flags will be used to indicate wheather or not to copy over data such as bond/angle/dihedral/improper arrays and similar. QM data will not be copied. It is conceivable that we might want to copy trajectory data under some circumstances, but for now we will copy only timestep 0.
    • Correction the shift in the time axis when plotting the QMEnergies due to the double print of the Energies by NAMD. Addition of the printing of the QMEnergies analysis info in the infoMD file
    • Addition of the functions and checkbutton to plot electrostatic energies Correction the shift in the time axis when plotting the energies due to the NAMD double printing of some timesteps in the log file
    • Caclulate convlution boundary conditions ahead of time instead of performing boundary checks for each read.
    • Moved watershed timing code from CPU and GPU specific functions to the generic watershed function, so the same timing code is used for both.
    • Regenerate the pdb structure and the tempMol molecule if a mutation is performed. If a mutation is performed on the N-terminal of a protein chain, re-evaluate the N-terminal patch
    • New class to perform repeated volumetric Gaussian blurs, needed for watershed filtering.
    • Updated Watershed class to remove storage of original image float array. This is only needed to initialize Watershed, so it makes sense to store it elsewhere.
    • Cranked version number.
  • VMD 1.9.4 alpha 9 (October 19, 2017)
    • Updated docs for colvars module
    • Updated builds to use OSPRay version 1.4.0
    • Changed CUDA device reporting format string to allow for longer GPU names, such as the new "Tesla V100-PCIE-16GB"
    • Further cleanup, commenting, and doxygenization of the Watershed class. Added comments about proposed code refactoring and changes to GPU handling.
    • Moved some macros from Watershed header to C++ code, and moved some struct and enums into the WATERSHED_INTERNAL ifdef
    • Removed use of device variables for watershed cuda code and pass them as kernel parameters instead.
    • Added a separate function to copy the output of the cuda watershed algorithm from GPU to the host, instead of copying it automatically when the algorithm finishes. This is in prepration for doing the rest of the filtering on the GPU.
    • Refactored part of the watershed update kernel to remove redundant if statement.
    • Removed use of global varaible neighbor_offset lookup table in the CPU and GPU Watershed implementations by including it as a class member variable.
    • fftk: Changed ffTK GUI scripts to use Unix linefeed text formatting to prevent future issues with CVS diffing changes.
    • fftk: set elements using topotools if not found in PDB
    • Added more socklen_t #ifdef cases.
    • Add typecast to Tcl_SetResult() calls on literal strings
    • Modern putenv() implementations do not copy their environment input string, so putenv() calls have need a strdup() for strings in automatic or otherwise transient string variables.
    • Improved doxygen comments for MobileInterface and continued cleanup.
    • Modern putenv() implementations do not copy their environment input string, so putenv() calls have need a strdup() for strings in automatic or otherwise transient string variables.
    • Significant cleanup of MobileInterface class implementation to eliminate type-punned pointers and aliasing, improved portability, and improve code style uniformity. Also got rid of a couple of small typos and bugs that the compiler hadn't ever complained about.
    • Guard the OptiX device enumeration message helper routine with #ifdefs used by fully interactive builds, since the routine isn't used for batch mode runs.
    • Added typecasts for string literals to be used in PNG headers.
    • Misc cleanup of unreferenced variables in the CUDA QCP algorithm.
    • Updated Cray builds to use the socklen_t variant of accept()
    • Updated to colvars version 5005669abc5a97ed497411af7e027e9f2a77578e
    • Eliminate compiler warnings for Linux headers that use the socklen_t variants of accept().
    • Misc cleanup in the SpringTool class.
    • Added typecasts on simulated command line parameters to eliminate compilation warnings on Android
    • FastPBC: Ensure initialization of optional array pointers to NULL.
    • Added (char*) typecasts to Tcl_SetResult() calls that pass in literal strings
    • Eliminate compiler warnings about unused helper functions for CPU vectorization when compiling on on ARM platforms such as Android, when NEON instructions are not enabled.
    • eliminate unused thread launch result code
    • #if out the old internal HMDMgr quaterion code since we're using the VMD quaternion implementation now.
    • Eliminate compiler warnings for unused variables etc in the CUDA-related startup code when compiling for Android.
    • qwikmd: Complete the addition of the validation process of the "Ignore Interactive Forces" button
    • Updated the Watershed host code to compile successfully without always assuming that CUDA support is enabled.
    • Promoted Watershed index offsets from char to int to improve performance and portability across compilers that choose signed/unsigned char types differently when left unspecified. Updated timer output to report total in one case that was incorrect.
    • Eliminated problems with ambiguous use of ceil() in integer arithmetic used for block sizing/padding in Watershed implementation.
    • Protect internally-used macros in Watershed implementations by WATERSHED_INTERNAL, so that callers don't get any of them in their namespace.
    • QM/MM bug fix in the declaration of Temperature in the case of the first protocol is not a Minimization (binvelocities and temperature declared at the same time). Added new validation of the status to the "ignore interactive foreces" button (disable) if MDFF is selected since MDFF does not use this option.
    • Added CPU- and GPU-accelerated Watershed image segmentation implementations to the standard build.
    • android: Added missing revision info header
    • namdgui: Updated the list of parameter and stream files to be included by default to favor CHARMM36 since the structure preparation plugins such as AutoPSF are now using CHARMM36 by default.
    • qwikmd: Add the "Ignore Interactive Forces" checkbutton to control the IMD keyword "IMDignoreForces". Allow or ignore forces applied during a "Live View" simulation
    • colvars: Synced with colvars tree, to COLVARS_VERSION "2017-09-14"
    • Updated location of Rez binary for new revs of Apple's dev tools.
    • Enable compilation using CUDA 9.0RC and later now that workarounds are in place for problems with Thrust scan() prefix sums on uint2 types.
    • Implemented a temporary workaround for problems with CUDA 9.0RC that break the use of the Thrust parallel prefix scan() routines when used in conjuntion with vector integer types such as uint2 due to lack of a conversion constructor in the CUDA 9.0 toolkit headers.
    • Force inclusion of cuda_fp16.h when compiling with CUDA 9.0 due to changes in the default sub-inclusions for cuda.h
    • Replaced OptiX 4.1.1 shared lib with a patched library that should cure segfault problems when running on machines with no GPUs or associated driver software.
    • structurecheck: Use unique number to flag the selected atoms (-9999) to be checked
    • Incorporated a patch for the AMBER parm7 parser from Robin Betz that corrects the parm7 plugin's handling of the atomic number field in the input prmtop file instead of using mass field to guess what element each atom is. This previously caused problems when VMD was passed a prmtop where the hydrogens have had their masses repartitioned (for a faster simulation timestep). Updated the plugin minor version number.
    • Updated the AMBER rst7 writing code per suggestions from Josh Vermaas about the behavior of the Fortran reader on the AMBER side when used with relatively small atomic structures. Changing the format specifier from %10d to %6d for writes cures read-side problem for the Fortran code. Updated the rst7plugin minor version number.
    • Cranked version number.
  • VMD 1.9.4 alpha 8 (August 30, 2017)
    • psfgen: Updated psfgen to meet requirements for out-of-core I/O with trajectory file formats that need page-aligned page-multiple memory buffers to support direct unbuffered I/O for atomic coordinates. Updated the psfgen version number to 1.7.
    • catdcd: correct logic for freeing output buffers when index-selected coordinate frames are used and page-aligned page-multiple buffers are used by plugins.
    • Updated VMD configure script to use CUDA 9.0, add support for Volta GPUs (adding compute_70 and sm_70 compilation targets), and OptiX 4.1.1.
    • Added additional exception handling for Thrust/CUB failures that lead to thrust::system::system_error being thrown at runtime. This arose in early testing on Volta GPUs with CUDA 9.0RC and with binaries produced by CUDA 8.0 when run on Volta.
    • Force both binary and src distributions to incorporate the colvars_files.pl script into the resulting tar file.
    • Updated distribution scripts to encompass new colvars configure sub-script
    • Migrated listing of collective variables module source files into separately maintained per script section to ease ongoing updates.
    • Updated collective variables documentation from the latest git repo pull.
    • Updated collective variables module to match latest version from Git: ae4375492605ba82f2be3058a3c8e95fcf56ee68
    • plumed: Updated the PLUMED plugin to match the latest version in Git.
    • NanoShaper: Corrected bug in NanoShaper vertex file parser
    • NanoShaper: Eliminate bad referencess to an already-closed NanoShaper facet file during the vertex parsing block.
    • Continued misc cleanup of old code to please valgrind by pre-clearing various temporary buffers to prevent uninitialized reads/conditionals here and there.
    • initialize temporary memory buffer to all NUL chars to please valgrind
    • qwikmd: Disabled MD and SMD options after preparation/load on both Easy and Advanced Run
    • qmtool: slight tweak to support gaussian 16
    • namdenergy: added support for Drude forcefield
    • fftk: added fix from Po-Chao; changed "Optimization completed\." to "Optimization completed"
    • qwikmd: Initialize the smd protocol check button variable in the easy run tab
    • qwikmd: Added text for the infoMD file regarding the QM/MM simulations and temporary topology generation.
    • qwikmd: Bug fix in the preparation of the QM/MM simulation, prepared from a previous MM simulation with a temporary topology containing iron atoms (needed a temporary stream file). Bug fix for live, advanced SMD simulations (generation of the smd file from an unfinished simulation).
    • qwikmd: Bug fix for the display of the list of residues defined as "QM" type (macro)
    • rmsdvt: Applied patch from Thomas Albers to make RMSDVT cope with failure to create its working directory when it happens to try a non-writable location.
    • Updated build scripts for OSPRay 1.3.1
    • structurecheck: Ensures the Reset of torsionplot even if the plugin returns an error
    • Released test version for QM/MM paper submission/review
  • VMD 1.9.4 alpha 7 (July 12, 2017)
    • cranked version for QM/MM paper submission/review
    • Migrate MacOS X plugin compiles to clang on 'malaga'.
    • qwikmd: Added the QMMM configuration files to the Makefile distrib target
    • pdbtool: Updated PDB download URLs and updated version number.
    • qwikmd: Added check procedure to find TMPDIR folder (new QWIKMDTMPDIR env variable). Added procedure to allow different QM charges from the ones defined in the topology files. Bug fix for atom selection evaluation.
    • autopsf: Updated AutoPSF plugin to new RCSB PDB web site layout,
    • structurecheck: update structurecheck version to 1.1
    • structurecheck: Add error handling in the case of torsionplot fails, usually due to the absence of or wrongly declared TMPDIR.
    • qwikmd: update qwikmd version to 1.2
    • vmdprefs: Cranked vmdprefs version number for recent bug fix.
    • readcharmmpar: Updated version number of readcharmmpar for recent stream file changes.
    • Change default behavior when TMPDIR is unset to try /tmp and if that fails, scream loudly to the terminal console and tell the user to take corrective action.
    • qwikmd: Skip pdbalias if called by qwikmd
    • qwikmd: Changes on the QM/MM configuration files according to Marcelo's comments
    • qwikmd: Add the info button text for the QM regions (empty for now)
    • qwikmd: Improvements to the energies, pressure, volume, and temperature log text
    • qwikmd: QwikMD 1.3 alpha version containing QM/MM interface for the NAMD QM/MM paper. Addition of the "fake" topology functions Function to select charged residues when using Mopac via vmd_pick_event Automatic renaming of residues and atoms upon pdb loading process (replacing autopsf psfaliases command)- including the /toppar/pdbaliastable.txt file containing all the pdbaliases Bug fix for plotting energies, temperature, pressure, volume and smd General bug fixes and GUI improvements
    • Enable molecular orbital representation grid reuse optimization by default since no crashes or problems have been seen yet.
    • Preliminary test implementation of scheme to allow multiple representations to reuse the same molecular orbital grid when they refer to the same orbital ID, wavefunction type, excitation, spin, grid spacing, and other grid-specific parameters. This short-circuits a number of common cases that otherwise trigger duplicative orbital grid calculations. With the optimization in place, the animation speed for QM/MM simulation trajectories with large QM regions can be up to 2X faster in common cases, and more if multiple density isovalues are shown superimposed. In cases where orbital calculation time is non-dominant, the performance gain is much more moderate, often in the range of 20% to 30%, but depending heavily on the speed of the remaining isosurface extraction step. When combined with a GPU-side marching cubes implementation, performance gains could be much higher so long as entire orbital grids remain completely GPU-resident as all of the graphical representations are processed.
    • qwikmd: Reflect the changes to download pdbs diretcly from webpdb
    • cranked version
  • VMD 1.9.4 alpha 6 (June 23, 2017)
    • autopsf: Updated AutoPSF plugin to new RCSB PDB web site layout, adapting the automatic PDB download to the new layout of the RCSB PDB web site, since the previous URLs no longer function.
    • save_state: Avoid using loop control idioms that break when deleting objects from resizable lists.
    • webpdbplugin: Updated the webpdb plugin to adapt the automatic PDB download to the new layout of the RCSB PDB web site, since the previous URLs no longer function.
    • plugins: Eliminate historical build configurations and associated host configs.
    • Merged in bug fix for handling of non-orthogonal unit cells in the ::TopoTools::replicatemol function.
    • Ensure that when a Pickable gets deleted, that any pending pick events are canceled so that we don't get a crash later on in pick_end(). This cures problems with user-defined callbacks on mouse pick events that delete representations associated with the in-progress pick event. The new code will null out any in-progress pick when the Pickable is removed from the PickList.
    • vmdprefs: fixed a bug in the gui control of aoambient and aodirect settings
    • qwikmd: New functions to generate topologies for the QM region
    • qwikmd: Widgets to generate topologies for the QM region ONLY Modification of the Edit Atoms window to become Generate Missing QM Region Topology window
    • readcharmmpar: Remove comment of the read para flag to make psfgen aware of the beginning of the parameters section
    • Corrected handling of volmap output filenames that lack the .dx extension.
    • gromacsplugin: Changed the Groamcs plugin TRX timestep read logic so that if we get a NULL pointer for mdio_ts.pos caused by a zero-sized coordinate frame (possibly occuring as the result of a corrupt file or some other reason?) we skip the afflicted timestep and continue reading.
    • mdff: fixed temperature setting for remdff
    • mdff: turned temperature control back on in ReMDFF. added resetmaps.sh for ReMDFF.
    • qwikmd: Update the configuration files in the user qwikmd Library folder (copy the older ones to the backup folder). Add the QMMM files to the user qwikmd library folder
    • Update Colvars to fd7445328d5f670863690869bf95716dce8a1dd8
    • qwikmd: First implmentation of the QM/MM and functions to prepare QM/MM structure files and namd configuration files. Allow prepare new structures and simulations starting from a previous simulation prepared with QwikMD. General improvements and bug fixes.
    • qwikmd: Declare steps per cycle explicitly. First version of the Configuration files for QM/MM calculations. Add text for the info buttons of the QM/MM tab Fix text for materials and colors info buttons. Update solvent, salt ions and concentration variables in the text Correct the balloon text of the materials resolution label
    • autopsf: Bug fix for the undeclared Ccoords (broken fro coarse grain models)' Bug fix for the mapping of chains to segments (chaintoseg variable). The chains were always one cicle increment ahead, breaking in the last residue of the pdb.
    • Ensure that the VCA cluster device is initialized to NULL in all cases.
    • Implemented maximum transparent surface display feature that matches the behavior of the original CPU Tachyon -trans_max_surfaces command line flag. This is particularly useful when rendering images of complex cryo-EM density maps that have a very large transparent surface depth complexity which can result in overly-detailed or confusing images. By dropping display of the Nth and greater transparent surfaces a scientist can make an effective "illustrative" rendering by removing the excessive background detail.
    • Prevent an uninitialized read due to order of constructor initialization steps.
    • cranked version
  • VMD 1.9.4 alpha 5 (April 26, 2017)
    • Updated ffTK Makefile to add missing installation of fftk_Configuration.tcl source file, and updated version number to 1.2.
    • Allow people to use transmode as a means of hacking shaders in pre-built binaries by passing values all the way down into OptiX.
    • autoionize: Added an extra safety check so that autoionize will only try and create Tk dialogs for error output when the user is running in a graphics-enabled session and has launched the GUI for autoionize rather than through the scripting interface. Updated autoionize version numbers to 1.5.
    • xmdff: added -ignorestderr to exec to avoid xmdff aborting if vmd reports any libgl warnings
    • Implemented an alpha transparency channel for perspective, orthographic, and dome master camera modes in the TachyonL-OptiX ray tracing engines for use when compositing images rendered by VMD with externally rendered content or background materials produced by other means, as needed for the NSF CADENS movie project: "The Birth of Planet Earth".
    • Added alpha channel tracking infrastructure to the low level OptiX ray tracing code.
    • corrected rgba4f to rgba4u conversion loop
    • Added alpha channel image output support to OptiXRenderer image output routines
    • Bolstered error handling for OptiX image output after adding alpha channel paths
    • Commented out png_set_alpha_mode() call that apparently isn't implemented in all revs of libpng. Corrected missing file close.
    • Initial implementation of alpha channel image file output
    • Added in PNG alpha channel output implementation based on Tachyon src
    • cranked version
  • VMD 1.9.4 alpha 4 (April 19, 2017)
    • psfgen: Replace use of int64_t with long since older MS compilers didn't support int64_t anyway, and long works fine on 64-bit platforms where it would be possible to generate multi-billion atom structures.
    • psfgen: The stdint.h header doesn't exist on older MSVC compilers. Since we don't actually need it on any existing platform we compile VMD on, don't include it, at least for the time being.
    • mergepdbs: updated script to get the right topology file location
    • Corrected the old buffer-based OptiX lighting code path which hadn't yet been correctly synced up with changes for positional lights etc.
    • Prevent un-normalized directional light directions from making it into the core OptiX rendering code.
    • Removed all conditional compilation checks for VMD plugin ABI versions prior to 15 since plenty of time and use has shown the oldest API entry points to be useful by now. A current question is whether it still makes sense to retain some of the APIs that were added circa 2010/2011 for the purposes of paratool-based parameterization and similar, which may no longer be necessary given the molecular file formats that currently exist in the field.
    • mdffplugin: fixed bug in checking paramater file location (qwikmd issue) and replaced code with much more reasonable check
    • namdenergy: Include changes to the "Parameter Files (-par FILE):" description sent by Peter Freddolino
    • topotools: Applied Axel's latest Topotools bug fixes that address small problems reported by One Sun Lee and Aric Newton, and updated the DOI for topotools.
    • plugins: Added compilation rules for KTH PDC Cray XC40 'Beskow'
    • Added ref to NvPipe API
    • qwikmd: Call catdcd using the explicit path to the folder inside the VMD plugins tree
    • colvars: Updated to colvars version 20170321
    • psfgen: Minimal change to allow writing tiled billion-atom systems for testing.
    • psfgen: Increase version to 1.6.7.
    • psfgen: Support 2 GB hasharrays to enable 2^25 residues per segment.
    • fftk: converted geometry optimized PDB and charge optimized PSF files to multi-use variables accessed through the configurations namespace
    • fftk: general configurations changed to be self-initializing on startup
    • fftk: the configuration namespace is now a dependency of script-based bond/angle and dihedral optimizations
    • fftk: implementing general configuration namespace and hooked up to variable storing namd binary path
    • readcharmmpar: uncomment "read para *" lines to be detected by psfgen and ignore until the next "read rtf" flag appears again
    • Added "Delphi Force" plugin to the externally-hosted plugin list.
    • Emit a console message when the user has overridden the VMD OptiX shader path
    • Correct a bug in the shadow ray transparent surface light attenuation
    • Updated collective variables module with changes that migrated large method implementations out of headers (previously declared inline) and into the class implementation, which also cures problems with the Intel C/C++ compiler and its ability to generate code for multiple target architectures in the same binary. The previously inlined methods were not being properly generated as runtime-dispatched functions by the Intel 2015 compilers.
    • Further streamlining of hand-vectorized CPU kernels, removing old non-FMA implementations for AVX/AVX2, and misc cleanup.
    • Prototypical implementation of AVX-512F molecular orbital kernel. Uses exponential approximation approach, AVX-512 mask registers, and FMA instructions. Needs further tuning, but good enough for starting work.
    • Put in thread affinity logic for the persistent thread pool used by the molecular orbital CPU kernels. While not important for standard x86, this is of significant importance for Power8 and KNL that both have significant SMT depths, to eliminate run-to-run variation caused by Linux shuffling threads around with large thread counts.
    • cranked version
  • VMD 1.9.4 alpha 3 (March 8, 2017)
    • psfgen: corrected psfgen version number to match compiled code
    • psfgen: Fix C++-style variable declarations after first statement.
    • Bugfixes and optimizations in the Colvars module
    • Enforce the checking of the protocol's temperature
    • qwikmd: Force the initialization of the velocities after the Minimization steps.
    • Collective variables updates and a fix for a bug reported by Chris Mayne.
    • Added comment to make it clearer what low-level array storage format is used for people reading the headers.
    • Prevent the VMD viewport height factor from influencing OptiX dome master camera behavior. We should instead add an explicit fov control API for this.
    • Update VMD builds to require OSPRay 1.2.0 or later.
    • Replace the use of the global "aoWeight" factor from OSPRay 1.1.x with the new special-purpose "ambient" light implemented in OSPRay 1.2.0.
    • Updated VMD to require OSPRay version 1.2.0 or later, since that version fixes the known problems with lighting through transparent surfaces. VMD enables the OSPRay "aoTransparencyEnabled" flag by default since that's the normal behavior for the other ray tracing engines that support it.
    • cranked version
  • VMD 1.9.4 alpha 2 (February 7, 2017)
    • psfgen: Sync with NAMD. Bump version to 1.6.6. In topology file PRES (patch) entries support ATOM record with name but no type or charge to specify subsequent atom insertion order. From Brian Radak: new psfset command to replace vel, bfactor, and renameatom commands, extend segment command to query charge.
    • Latest collective variables module updates from Giacomo and Jerome.
    • Added source files for the prototypical FastPBC implementation.
    • Added Python bindings for per-residue RMSD, RMSF, QCP etc, and Hbonds.
    • Added routines for per-residue RMSD, RMSF, CoM, and refactored Hbond code to facilitate access through native Python interface. The Hbond changes need further revision for robustness.
    • tinkerplugin: Applied patch from James Graham to correctly handle parsing of Tinker arc files that contain simulation periodic cell information.
    • Added Tcl "mol voldelete" command and updated the behavior of "mol volmove" so that both require the volume index parameter for the sake of encouraging consistent usage.
    • Added prototype fast PBC wrapping code written by Josh Vermaas as part of preparing for the ORNL/NCSA OpenACC hackathon.
    • Added per-residue variants of several existing VMD "measure" routines: measure_center_perresidue(), measure_rmsd_perresidue(), and measure_rmsf_perresidue(). Added an initial refactored variant of the hbonds determination code that has been separated out of the Tcl hbonds implementation so that it can be called directly from Python also.
    • Added Python interface to allow volumetric data objects to be deleted from a specified molecule. The Tcl variant of this still needs to be added.
    • cranked version
  • VMD 1.9.4 alpha 1 (January 31, 2017)
    • Initial prototype implementation of molecule instancing feature, with Tcl bindings for new commands "mol addinstance" (to add one), "mol showinstances" (to show instances for a selected representation), and "mol instances" (to return the count of instances). At present, the instance list is global to a molecule and they are not individually selectable or modifiable, but this is a short-term limitation. Ultimately, the instances should be indexed, and multiple lists of instances should be maintained per molecule, accessible by indices or string name keys. These next steps will enable development of hierarchies of instances and other advances in a prototypical form for evaluation and testing for a period of time before they are ultimately committed into a low-level implementation.
    • gromacsplugin: Use modular arithmetic to prevent formatting problems on GRO files that contain more than 100,000 atoms. Since GROMACS ignores the atom indices, causing the indices to wrap around is a simple workaround to prevent GRO files for large structures from becoming unreadable.
    • psfgen: Warn and ignore on self and duplicate bonds when reading topology files.
    • Replace the use of literal constants for trajectory loading "waitfor" sentinel values with a new FileSpec::waitfor enum for this purpose. Corrected an old error in the save trajectory FLTK menu.
    • qwikmd: Bug fix in the declaration of the default material
    • qwikmd: Bug fix on atom name changes
    • Corrected VMD AVX-512 CPU feature test reporting so that it correctly identifies non-KNL Xeon CPUs that have AVX-512F, but not AVX-512ER etc. The previous VMD startup code, when run on next-gen Skylake Xeon E5 CPUs misidentified them as KNL in the startup messages. At present, only KNL supports all four of the AVX-512F/CD/ER/PF and other scientific computing instruction subsets. The Skylake Xeon E5 supports just AVX-512F/CD so far.
    • Corrected incorrectly terminated Tcl_AppendResult() calls in error handling cases that arise in animate, display, and measure commands. Eliminated tabs in the source code, and did minor code reformatting cleanup where necessary.
    • mdff: moved autosmoothing code from mdff_setup to mdff_gui since mdff_setup doesn't normally make potentials.
    • topotools: Prevent un-escaped brackets from being interpreted as a Tcl command.
    • mdff: initial commit of new BETA feature for setting up ReMDFF simulations
    • Promote integer volume dimensions to long to avoid integer overflow issues in the Tachyon renderer interface.
    • Fixed 3-D texture map allocation and management APIs in VMD to allow handling of large byte-per-voxel tomograms that would break 32-bit indexing arithmetic that inadvertently remained due to lack of manual integer type promotion in a few places where sizes were computed in the VolumeTexture class. This was corrected by adding a new size calculation method that does the required (ugly) manual type promotion internally.
    • Corrected various minor issues that cropped up during compilation of the OSPRay renderer with GCC rather than Intel C++.
    • torsionplot: Bug fix for windows, where the tmpdir folder is defined only as "c:" and not "c:/"
    • psfgen: Recognize READ statements even if previous END statement is missing.
    • mdff: fixed file overwrite bug on Windows when MDFF called from QwikMD
    • Wrote skeletal prototype for hand-written GPU-accelerated QCP kernels.
    • Updated the QCP code to avoid on-demand thread pool creation to avoid performance loss on Xeon Phi hardware with large core counts and current Linux kernels that don't seem to initially migrate large numbers of threads well.
    • Revised the QCP RMSD measurement APIs to pass in the VMDApp pointer so we have access to both the CPU and GPU persistent thread pools. This matches the structure we used for the RDF implementation, and it also sets the stage for eliminating the CPU-side on-demand thread launch approach we previously had to use, which is a particularly poor performer on Xeon Phi hardware. In the case of CUDA the thread pool is also a must have since we'd otherwise have to create fresh threads/contexts.
    • psfgen: Sync with NAMD 2.12, mostly from Brian Radak: vel, bfactor, and renameatom commands; query velocities, mass, and atomid; writepsf nopatches option.
    • Revised the VMD startup script to better accomodate the special needs of EGL-enabled VMD builds running on SLURM-based Cray XC50 machines such as the newly-upgraded Piz Daint system at CSCS.
    • moldenplugin: Corrected buffer parameter in sscanf() call, from Thomas Holder, Schrodinger
    • plyplugin: eliminate unused string list, from Thomas Holder, Schrodinger
    • jsplugin: Corrected function return type, from Thomas Holder, Schrodinger
    • qwikmd: Remove Render related text. Add resolution info.
    • qwikmd: Add MDFF text info. Add color scheme text.
    • qwikmd: Remove Render commands. Label corrections. Add check resolution command after adding representations.
    • qwikmd: Addition of color schemes. Combobox corrections to avoid getting stuck in selections. Minor GUI corrections.
    • qwikmd: Added images for new QwikMD docs, updated CSS page formatting, and updated the documentation page to match the current QwikMD software.
    • Added more URLs for reference for the Amira plugin
    • Added Amira plugin to the build
    • Added early prototypical plugin for reading Amira mesh files
    • Force the fully-general shader to enable runtime toggling of the VR clipping plane and the VR headlight.
    • Slightly improved the shader safety check for bogus surface normals resulting from degenerate triangles in isosurfaces reconstructed from noisy data.
    • Added a short-term workaround for scenes that contain some really bad surface geometry from marching cubes surfaces that result from noisy and coarse resolution cryo-ET
    • Improved console debugging messages
    • Added code to read and report amin/amax/amean when reading MRC maps. Improved MRC/CCP4 plugin handling with a new special case for for orthorhombic cell axes, which solves a numerical precision problem with very large tomograms where there was previously a possibility of computing a NaN for two of the Z-axis basis vector components when running the code path that previously assumed a non-orthorhombic map. Improved code organization.
    • Updated URLs for MRC/CCP4 file format specifications for the variations used by EMDB, the IMOD program, and recently published format extension proposals in JSB.
    • Cranked version
  • VMD 1.9.3 Final Release (November 30, 2016)

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