Simbody v3.6 Release Notes

Release Date: 2018-02-21 // about 6 years ago
    • ๐Ÿ‘ฎ Forced GCC to be at least 4.9.0, so that new C++11 features like regular expressions can be used (PR #485).
    • โšก๏ธ Minimum Ubuntu version supported 14.04 LTS (Trusty), with a manual update of GCC.
    • Recommended minimum Ubuntu version : 15.04 (Vivid), that is shipped with GCC 4.9.2.
    • โž• Added mixin classes ResetOnCopy<T> and ReinitOnCopy<T> to force default construction or reinitialization of data members on copy construction or copy assignment, without requiring a user written copy constructor and copy assignment operator just to get those reinitializations done.
    • โž• Added clone() method to SimTK::Function_ base class and implemented it for Simbody-defined concrete Function classes. Made concrete Function members non-const to permit assignment, and modified Function_::Step to allow changing its parameters after construction.
    • Added C++11 features to the SimTK::Array_ container including std::initializer_list construction, move construction, move assignment, and emplace methods.
    • Prevented copy construction of Array_<T> from Array_<T2> unless T2 is implicitly convertible to T. Previously this was allowed if there was any conversion possible even if it was explicit. Array_ was being too relaxed about this, causing hidden copies to occur.
    • โž• Added CloneOnWritePtr smart pointer (acts like ClonePtr but with deferred cloning).
    • โšก๏ธ Updated ClonePtr and ReferencePtr APIs to follow C++11 standard smart pointer terminology. This required deprecating some existing methods and operators, so you can expect to get annoying warnings until you switch to the new API.
    • ๐Ÿ‘ฏ Possible BREAKING CHANGE: ClonePtr's operator==() previously delegated to the managed object; now it just operates on the managed pointer as is done in other smart pointers. Consequently now only a clone() method is required for a type to be contained in a ClonePtr; previously it had to support comparison also.
    • ๐Ÿ‘€ Make doxygen run silently so errors will be easier to see.
    • โž• Added new methods to Pathname class for interpreting pathnames against a specified working directory instead ๐Ÿ‘€ of the current working directory (thanks to Carmichael Ong). See Issue #264 and PR #307.
    • โž• Added the ability to parallelize forces, robustness/performance improvements ๐Ÿ”’ to ParallelExecutor, mutex state lock. PR #414.
    • โž• Added move constructor and move assignment to State (very fast).
    • โž• Added "stage version" counters for time, q, u, and z that are incremented whenever one of these changes.
    • Separated time-independent position and kinematics calculations so that they are not invalidated by a time change. These can also be initiated explicitly with new methods realizePositionKinematics() and realizeVelocityKinematics(). They are invalidated by a change to q or to u, respectively.
    • Modified floating point-to-String conversions to use lossless number of digits by default. An attempt to use the default type-to-String conversion when no stream insertion operator is available is now a runtime rather than compile time error. PR #459.
    • โฌ†๏ธ Upgraded SimTK::Xml from class to namespace; local classes like Xml::Element were promoted to namespace level within Xml. This was necessary to untangle Array_ and Xml classes which can be mutually dependent. This change is backwards compatible for those following the recommended use of the previously-available Xml::Document typedef instead of Xml directly. Otherwise you will have to change uses of SimTK::Xml to SimTK::Xml::Document. Also any using SimTK::Xml; must be removed or replaced with using namespace SimTK::Xml or using SimTK::Xml::Document depending on the intent. PR #460
    • ๐Ÿ‘Œ Improved NiceTypeName<T>::namestr() to produce a canonicalized name that is the same on all platforms (with a few exceptions). Added xmlstr() method to make an XML-friendly modification of namestr() that replaces angle brackets with curly braces. Added a new regression test to verify that the names come out right. PR #461
    • โž• Added helper class IteratorRange to use range-based for loops with a pair of iterators. PR#467
    • โž• Added the method State::isConsistent() to compare two states PR #469.
    • Started using RPATH on OSX so that users need not set DYLD_LIBRARY_PATH to run simbody-visualizer or the example executables, regardless of where you install Simbody.
    • ๐Ÿ‘Œ Improved the ability to find the simbody-visualizer executable when Simbody is installed in non-standard locations or if the Simbody installation is relocated (even to different computers). This enhancement is only for non-Windows operating systems.
    • ๐Ÿ›  Fixed a bug when compiling on macOS (OSX) with SDK MacOSX10.12.sdk, related to the POSIX function clock_gettime(). Issue #523, PR #524
    • ๐Ÿšš Replaced usages of pthreads with C++11 classes. Removed the following classes:
      • ThreadLocal
      • AtomicInteger
    • ๐ŸŒ Deprecated some badly-named methods in MobilizedBody::Translation Issue #604
    • โœ‚ Removed support for long double. PR #597
    • ๐Ÿ›  Fixed a bug in MultibodyGraphMaker where massless bodies were handled incorrectly. PR #592 and PR #594.
    • ๐Ÿšš Moved Ipopt into the namespace SimTKIpopt to avoid duplicate symbols when combining Simbody with an independent Ipopt.
    • ๐Ÿ›  Fixed a bug where RowVectors could not be constructed with 0 elements.
    • CMake: Downstream projects no longer need to use include_directories().
    • CMAES: You can now specify a different initial step size (standard deviation) for each variable. PR #540
    • SimbodyMatterSubsystem now provides a function for the error in acceleration-level constraint equations. PR #517
    • ๐Ÿ‘ The visualizer now supports lazily loading mesh geometry from a file. PR #475
    • ๐Ÿ Simbody can now be built with MinGW on Windows. PR #441