Changes in Simbody 3.0 since Simbody 2.2 release (July, 2011)
(includes changes in Simbody 2.3 branch)
20 June 2012
--------------------------------------------------------------------------------

License changed from MIT to Apache 2.0 (still unrestricted open source but
with less ambiguity).

Converting from 2.X to 3.0
--------------------------
- project(): drop most arguments; always does q and u and prescribed now. If
you want to do just q or just u, call projectQ() or projectU() instead.
- ProjectOptions has changed; no longer accepted by project(); used only by
lower-level projectQ and projectU methods
- handleEvent() virtual: must convert to reduced signature, get rid of
"lowestModified"
- constraint virtuals: changed to operators, meaning needed inputs are
supplied as arguments rather than extracted from State
- adding an EventHandler or EventReporter invalidates System topology now so
you must call realizeTopology() after the last handler or reporter has been
added
- Integrator::successfulStepStatusString() now getSuccessfulStepStatusString()
- removed ill-conceived String::getAs() and updAs() methods
- Concretize<T> renamed more conventional ClonePtr<T>
- The UserFunction<T> class used by TextDataEventReporter has been made local to that class; rename it TextDataEventReporter::UserFunction.


Changes
-------
- Performance improvements to basic multibody compuations & vectors
- Added task space support methods in SimbodyMatterSubsystem: operators
  for working with point, frame, and system Jacobians and their time
  derivatives.
- Numerous fixes to Visualizer; intermittent failures and mesh problems
  fixed.
- Added DecorativePoint, 3-axis scaling, search path for Visualizer
- Pathname::fileExists() added
- Bug 1609: Cpodes was ignoring setAllowInterpolation(false).
- OSX Lion support
- Make Spline_ copy & copy assign work properly for null Spline_
- Fix mishandled work arrays in FactorQTZ
- Implemented fast prescribed motion using mixed forward/inverse computation;
  all integrators modified accordingly
- u's and z's are now integrated to relative tolerance; q's still absolute
- improved CPodes handling of triggered events
- added macros to allows use of C++11 "override" and "final" keywords
  (OVERRIDE_11, FINAL_11). Build system defines those for compilers that
  support them (VS10)
- Reimplemented predefined constants as global externals to avoid static
initialization order dependency; now safe to use these in static initializers
- Fix Verlet's initial estimates for u and z
- Standardized I/O for true/false/NaN/Inf values; added readUnformatted() and writeUnformatted() methods
- Added ReferencePtr<T> useful to allow pointer data members without requiring
user-written copy/copy assign methods
- Fix error-check bug in Xml::Element::insertNodeBefore()
- Reorganized geometry source to localize in SimTKmath for complicated geometry (like contact) and SimTKcommon for basic primitives
- Added BicubicSurface/BicubicFunction and related primitives
  


8/16 Version changed to 3.0
8/16 Checked in FrictionConstraints doc
8/21 Rearchitected constraint API to support use of constraints
     as operators (BREAKING CHANGE TO CUSTOM CONSTRAINTS)
8/25 Fixed bug 1521 in SpeedCoupler constraint; backported to 2.3.
8/29 Fixed bug 1522 in memory-sharing Vector constructor; backported to 2.3.
8/29 Added calcBodyAccelerationFromUDot() method to matter subsystem.
8/29 Renamed getCoriolisAcceleration() to getMobilizerCoriolisAcceleration()
     and getCentrifugalForces() to getMobilizerCentrifugalForces()
     to make it clear that these are just mobilizer-incremental contributions.
     This is a BREAKING CHANGE if anyone ever called those, but probably if
     they did it was a mistake and they should have been calling 
     getTotalCoriolisAccleration() or getTotalCentrifugalForces() which are
     the meaningful physical quantities.
8/30 Added multiplyByG(), calcG() and related methods to matter subsystem.
8/31 Fixed bug 1523: 0-width slice of 1-d matrix was broken
9/09 Bug fixes to mesh-mesh elastic foundation code; backported to 2.2 & 2.3
     (bugs 1527, 1528)
9/14 calcAcceleration operators are now really operators (no effect on state 
cache).
9/15 Added calcResidualForces() method equivalent to sdfulltrq(); inverse
dynamics with constraints.
9/18 Reworked pos & vel projection to use new operators; fixed pos projection
so that it produces a normal projection in q-space (was u-space before).
9/19 Fixed bug 1535 -- mobilizer reaction torque sometimes miscalculated.
9/21 Replaced freebody reaction force method with faster method due to Abhi
Jain.
10/27 Fix to copy of matrix subblock.

11/17/2011
Stage class has been simplified. Constants like Stage::Position are just enums
now and can be used in case statements. Previously you had to use
Stage::PositionIndex, etc. for that purpose. Those extra enums are gone now so
if you were using Stage::VelocityIndex just switch to Stage::Velocity.

The Enumeration<> and EnumerationSet<> types have been removed since they were
not being used any more. If anyone was using them, let me know.

11/30/2011
- Added Function::Sinusoid
- Added additional inertia sanity check looking at products of inertia which have to obey conditions like Ixx>=|2*Iyz| (thanks to Paul Mitiguy). The strictest test is for central inertias; if those are OK then shifting them away always results in a good inertia.

12/3/2011
- Added missing rowSum() methods to Matrix, Mat and SymMat; fixed a bug in SymMat's existing sum() method for complex matrices.
- Added missing elementwiseMultiply()/Divide()/Assign() ops

6/24/2012 Made UserFunction a local class of TextDataEventReporter since it isn't used anywhere else.
