From d24a79966df1c3bd76e32a4f46b97f113eb87285 Mon Sep 17 00:00:00 2001 From: joris997 Date: Mon, 22 Feb 2021 12:38:51 +0100 Subject: [PATCH 01/36] test commit --- test.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 test.txt diff --git a/test.txt b/test.txt new file mode 100644 index 0000000000..8bd6648ed1 --- /dev/null +++ b/test.txt @@ -0,0 +1 @@ +asdf From 290baff0e5b4076cfbfb687163bcc3a262fe5794 Mon Sep 17 00:00:00 2001 From: joris997 Date: Mon, 22 Feb 2021 12:39:55 +0100 Subject: [PATCH 02/36] removed test --- test.txt | 1 - 1 file changed, 1 deletion(-) delete mode 100644 test.txt diff --git a/test.txt b/test.txt deleted file mode 100644 index 8bd6648ed1..0000000000 --- a/test.txt +++ /dev/null @@ -1 +0,0 @@ -asdf From 19062db53e65dd6e9e3ed4b19085bb256153068d Mon Sep 17 00:00:00 2001 From: joris997 Date: Tue, 23 Feb 2021 09:07:11 +0100 Subject: [PATCH 03/36] initial changes to geometrypath with introduction of force and point based gp's --- .../Simulation/Model/FunctionBasedPath.cpp | 45 ++ OpenSim/Simulation/Model/FunctionBasedPath.h | 42 + OpenSim/Simulation/Model/GeometryPath.cpp | 20 +- OpenSim/Simulation/Model/GeometryPath.h | 6 +- OpenSim/Simulation/Model/Interpolate.cpp | 730 ++++++++++++++++++ OpenSim/Simulation/Model/Interpolate.h | 561 ++++++++++++++ OpenSim/Simulation/Model/PathActuator.cpp | 6 +- OpenSim/Simulation/Model/PathActuator.h | 1 + OpenSim/Simulation/Model/PointBasedPath.cpp | 26 + OpenSim/Simulation/Model/PointBasedPath.h | 38 + 10 files changed, 1460 insertions(+), 15 deletions(-) create mode 100644 OpenSim/Simulation/Model/FunctionBasedPath.cpp create mode 100644 OpenSim/Simulation/Model/FunctionBasedPath.h create mode 100644 OpenSim/Simulation/Model/Interpolate.cpp create mode 100644 OpenSim/Simulation/Model/Interpolate.h create mode 100644 OpenSim/Simulation/Model/PointBasedPath.cpp create mode 100644 OpenSim/Simulation/Model/PointBasedPath.h diff --git a/OpenSim/Simulation/Model/FunctionBasedPath.cpp b/OpenSim/Simulation/Model/FunctionBasedPath.cpp new file mode 100644 index 0000000000..202ae6d1ac --- /dev/null +++ b/OpenSim/Simulation/Model/FunctionBasedPath.cpp @@ -0,0 +1,45 @@ +#include "FunctionBasedPath.h" +#include + +using namespace std; +using namespace OpenSim; +using namespace SimTK; +using SimTK::Vec3; + +// Constructor +//FunctionBasedPath::Function() : +// GeometryPath() +//{ +// setAuthors("Joris Verhagen"); +// constructProperties(); + // create interplation object +// std::vector coords; +// for (OpenSim::Coordinate const& c : +// this->getModel().getComponentList()){ +// if (c.getMotionType() != OpenSim::Coordinate::MotionType::Coupled){ +// coords.push_back(&c); +// } +// } +// std::vector affecting_coords; +// Nonzero_conditions cond; +// SimTK::State st = this->getModel().initSystem(); +// for (Coordinate const* c : coords){ +// if(coord_affects_muscle(this,*c,st,cond)){ +// affecting_coords.push_back(c); +// } +// } +// std::vector nPoints(affecting_coords.size(),10); +// interp = Interpolate(this,std::move(affecting_coords),st,nPoints); +//} + +double FunctionBasedPath::getLength( const SimTK::State& s) const +{ +// return interp.getLength(s); + return 0.0; +} + +double FunctionBasedPath::getLengtheningSpeed( const State &s) const +{ +// return interp.getLengtheningSpeed(s); + return 0.0; +} diff --git a/OpenSim/Simulation/Model/FunctionBasedPath.h b/OpenSim/Simulation/Model/FunctionBasedPath.h new file mode 100644 index 0000000000..092f440ae7 --- /dev/null +++ b/OpenSim/Simulation/Model/FunctionBasedPath.h @@ -0,0 +1,42 @@ +#ifndef OPENSIM_FUNCTIONBASED_PATH_H_ +#define OPENSIM_FUNCTIONBASED_PATH_H_ + +#include "GeometryPath.h"; +#include "Interpolate.h"; + +#ifdef SWIG + #ifdef OSIMSIMULATION_API + #undef OSIMSIMULATION_API + #define OSIMSIMULATION_API + #endif +#endif + +namespace OpenSim { + +class Coordinate; +class PointForceDirection; +class ScaleSet; +class WrapResult; +class WrapObject; + +class FunctionBasedPath : public GeometryPath { +//class OSIMSIMULATION_API FunctionBasedPath : public GeometryPath { +// OpenSim_DECLARE_CONCRETE_OBJECT(FunctionBasedPath, GeometryPath); + +// OpenSim_DECLARE_OUTPUT(length, double, +// getLength, SimTK::Stage::Position); +// OpenSim_DECLARE_OUTPUT(lengthening_speed, double, +// getLengtheningSpeed, SimTK::Stage::Velocity); + +private: +// Interpolate interp; + +public: +// FunctionBasedPath(); + + double getLength( const SimTK::State& s) const override; + double getLengtheningSpeed( const SimTK::State& s) const override; +}; +} + +#endif diff --git a/OpenSim/Simulation/Model/GeometryPath.cpp b/OpenSim/Simulation/Model/GeometryPath.cpp index 85310c3803..770cd0fe4c 100644 --- a/OpenSim/Simulation/Model/GeometryPath.cpp +++ b/OpenSim/Simulation/Model/GeometryPath.cpp @@ -448,11 +448,11 @@ void GeometryPath::updateGeometry(const SimTK::State& s) const * * @return Total length of the path. */ -double GeometryPath::getLength( const SimTK::State& s) const -{ - computePath(s); // compute checks if path needs to be recomputed - return( getCacheVariableValue(s, "length") ); -} +//double GeometryPath::getLength( const SimTK::State& s) const +//{ +// computePath(s); // compute checks if path needs to be recomputed +// return( getCacheVariableValue(s, "length") ); +//} void GeometryPath::setLength( const SimTK::State& s, double length ) const { @@ -475,11 +475,11 @@ Vec3 GeometryPath::getColor(const SimTK::State& s) const * * @return lengthening speed of the path. */ -double GeometryPath::getLengtheningSpeed( const SimTK::State& s) const -{ - computeLengtheningSpeed(s); - return getCacheVariableValue(s, "speed"); -} +//double GeometryPath::getLengtheningSpeed( const SimTK::State& s) const +//{ +// computeLengtheningSpeed(s); +// return getCacheVariableValue(s, "speed"); +//} void GeometryPath::setLengtheningSpeed( const SimTK::State& s, double speed ) const { setCacheVariableValue(s, "speed", speed); diff --git a/OpenSim/Simulation/Model/GeometryPath.h b/OpenSim/Simulation/Model/GeometryPath.h index bedd55ef8e..86703d0d7a 100644 --- a/OpenSim/Simulation/Model/GeometryPath.h +++ b/OpenSim/Simulation/Model/GeometryPath.h @@ -56,7 +56,7 @@ class WrapObject; * @version 1.0 */ class OSIMSIMULATION_API GeometryPath : public ModelComponent { -OpenSim_DECLARE_CONCRETE_OBJECT(GeometryPath, ModelComponent); +OpenSim_DECLARE_ABSTRACT_OBJECT(GeometryPath, ModelComponent); //============================================================================= // OUTPUTS //============================================================================= @@ -149,13 +149,13 @@ OpenSim_DECLARE_CONCRETE_OBJECT(GeometryPath, ModelComponent); @see setDefaultColor() **/ SimTK::Vec3 getColor(const SimTK::State& s) const; - double getLength( const SimTK::State& s) const; + virtual double getLength( const SimTK::State& s) const = 0; void setLength( const SimTK::State& s, double length) const; double getPreScaleLength( const SimTK::State& s) const; void setPreScaleLength( const SimTK::State& s, double preScaleLength); const Array& getCurrentPath( const SimTK::State& s) const; - double getLengtheningSpeed(const SimTK::State& s) const; + virtual double getLengtheningSpeed(const SimTK::State& s) const = 0; void setLengtheningSpeed( const SimTK::State& s, double speed ) const; /** get the path as PointForceDirections directions, which can be used diff --git a/OpenSim/Simulation/Model/Interpolate.cpp b/OpenSim/Simulation/Model/Interpolate.cpp new file mode 100644 index 0000000000..a2b48f6846 --- /dev/null +++ b/OpenSim/Simulation/Model/Interpolate.cpp @@ -0,0 +1,730 @@ +#include "Interpolate.h" + +template +void printVector(std::vector x){ + for (int i=0; i +struct Defer final { + Callback cb; + Defer(Callback _cb) : cb{std::move(_cb)} { + } + Defer(Defer const&) = delete; + Defer(Defer&&) noexcept = default; + Defer& operator=(Defer const&) = delete; + Defer& operator=(Defer&&) = delete; + ~Defer() noexcept { + cb(); + } +}; +// factory function to Defer +template +Defer defer_action(Callback cb) { + return Defer{std::move(cb)}; +} +static bool coord_affects_muscle( + OpenSim::Muscle const& m, + OpenSim::Coordinate const& c, + SimTK::State& state, + Nonzero_conditions& out) { + + bool prev_locked = c.getLocked(state); + auto reset_locked = defer_action([&] { c.setLocked(state, prev_locked); }); + double prev_val = c.getValue(state); + auto reset_val = defer_action([&] { c.setValue(state, prev_val); }); + + c.setLocked(state, false); + + static constexpr int num_steps = 3; + double start = c.getRangeMin(); + double end = c.getRangeMax(); + double step = (end - start) / num_steps; + + for (double v = start; v <= end; v += step) { + c.setValue(state, v); + double ma = m.getGeometryPath().computeMomentArm(state, c); + if (std::abs(ma) > 0.001) { + out.input_val = v; + out.nonzero_ma = ma; + return true; + } + } + return false; +} + +////////////////// +// CONSTRUCTORS // +////////////////// +Interpolate::Interpolate(std::vector > discretizationIn, + std::vector, double> > evalsPair) + : discretization(discretizationIn), + dimension(discretizationIn.size()), + evalsPair(evalsPair), + n(dimension,0), + u(dimension,0), + loc(dimension,0) + { + assert(discretization.size() == evalsPair[0].first.size()); + + // allow it to work with the new struct method + for (int i=0; i cnt(dimension,0); + for (int i=0; i=0; x--){ + if (cnt[x] != dS[x].nPoints-1){ + cnt[x] += 1; + break; + } + if (cnt[x] == dS[x].nPoints-1){ + for (int y=x; y& discretizationNPoints) + : dimension(discretizationNPoints.size()), + n(dimension,0), + u(dimension,0), + loc(dimension,0) + { + // get the size of the 'vector'. Inclusive bottom, exclusive top + std::ptrdiff_t n = (cEnd-cBegin)+1; + assert(n > 0); + assert(dimension == (int)n); + + OpenSim::GeometryPath const& musc_path = m.getGeometryPath(); + + // put all coordinate pointers in a vector to later unpack an incoming + // state to a vector of coordinate values + for (int i=0; i cnt(dimension); + std::vector coordValues(dimension); + for (int i=0; i=0; x--){ + if (cnt[x] != dS[x].nPoints-1){ + cnt[x] += 1; + break; + } else{ + for (int y=x; y dc_; + for (int i=0; i coords, + SimTK::State& st, + std::vector& discretizationNPoints) + : Interpolate(m, + &coords[0], + &coords[coords.size()-1], + st, + discretizationNPoints) + {} + +///////////////// +// INTERPOLATE // +///////////////// + +double Interpolate::getInterp(const SimTK::State &s){ + assert(coords.size() != 0); + std::vector x; + for (int i=0; igetValue(s)); + } + return getInterp(x); +} +double Interpolate::getInterp(const std::vector &x){ + // This is the main interpolation function + // IN: x, a vector of points within the considered interpolation range + // OUT: eval, the interpolated value + assert(x.size() == dimension); + + // get the index of the closest range value to the discretization point + for (int i=0; i= x[i];}); + n[i] = std::distance(discretization[i].begin(), it)-1; + } + + // compute remaining fraction + for (int i=0; i=0; x--){ + if (discrLoopCnt[x] != 2){ + discrLoopCnt[x] += 1; + break; + } + if (discrLoopCnt[x] == 2){ + for (int y=x; y x; + for (int i=0; igetValue(s)); + } + return getInterpStruct(x); +} +double Interpolate::getInterpStruct(const std::vector &x){ + assert(x.size() == dimension); + + // get the index of the closest range value to the discretization point + for (int i=0; i=0; x--){ + if (discrLoopCnt[x] != 2){ + discrLoopCnt[x] += 1; + break; + } + if (discrLoopCnt[x] == 2){ + for (int y=x; y x; + for (int i=0; igetValue(s)); + } + return getInterpDer(x,coordinate,h); +} +double Interpolate::getInterpDer(const std::vector &x, int coordinate, double h){ + assert(x.size() == dimension); + assert(coordinate <= dimension-1); + assert(h>0 && h < (dS[coordinate].end-x[coordinate])); + // This is the main interpolation function + // IN: x, a vector of points within the considered interpolation range + // coordinate, the generalized coordinate of which we take the derivative + // OUT: eval, the interpolated value + double f1 = getInterp(x); + + std::vector x2 = x; + x2[coordinate] += h; + double f2 = getInterp(x2); + + return (f2 - f1)/h; +} + + + +double Interpolate::getEvalFast(){ + // get the wrapping length evaluation given a vector 'loc' which contains, in + // ascending dimension, the index in each dimension + int factor = 1; + int idx = 0; + + for (int i=0; i u, + int order){ + // create the basis spline functions + for (int i=0; i betaArray; + betaArray.push_back(Bk[0] + Bk[1]); + betaArray.push_back(Bk[1]/3); + betaArray.push_back(Bk[3] + Bk[2]); + betaArray.push_back(-Bk[2]/3); + beta.push_back(betaArray); + } +} + + + +//double z, Beta; +//int discrLoopCnt = -1; +//for (int i=0; i<4; i++){ +// Beta = beta[coordinate][i]; +// for (int j=0; j x, int derivativeOrder){ +// // This is the main interpolation function +// // IN: x, a vector of points within the considered interpolation range +// // OUT: eval, the interpolated value +// vector n, pk, pkp1, pkm1, pkp2; +// vector u, d; +// vector> beta, m; +// double Beta0=1, Beta1=1, Beta2=1, Beta3=1, z=0; +// int order = 3; + +// // check size of input argument +// if (x.size() != dimension){ +// std::cout << "Interpolation state not equal to object's dimension" << std::endl; +// exit(EXIT_FAILURE); +// } + +// // get the index of the closest range value to the discretization point +// for (int i=0; i mArray; +// mArray.push_back(0.5*((getEval(pkp1) - getEval(pk))/ +// (discretization[i][n[i]+1] - discretization[i][n[i]]) + +// (getEval(pk) - getEval(pkm1))/ +// (discretization[i][n[i]] - discretization[i][n[i]-1]))); + +// pkp2 = pkp1; pkp2[i] += 1; +// mArray.push_back(0.5*((getEval(pkp2) - getEval(pkp1))/ +// (discretization[i][n[i]+2] - discretization[i][n[i]+1]) + +// (getEval(pkp1) - getEval(n))/ +// (discretization[i][n[i]+1] - discretization[i][n[i]]))); + +// m.push_back(mArray); +// } + +// for (int i=0; i> &beta, +// vector u, +// int order){ +//// // compute the derivatives of the basis spline function for evaluation of the +//// // derivative of the grid-frield +//// for (int i=0; i betaArray; +//// betaArray.push_back(Bk[0] + Bk[1]); +//// betaArray.push_back(Bk[1]/3); +//// betaArray.push_back(Bk[3] + Bk[2]); +//// betaArray.push_back(-Bk[2]/3); +//// beta.push_back(betaArray); +//// } +// for (int i=0; i betaArray; +// betaArray.push_back(6*pow(u[i],2) - 6*u[i]); +// betaArray.push_back(3*pow(u[i],2) - 4*u[i] + 1); +// betaArray.push_back(-6*pow(u[i],2) + 6*u[i]); +// betaArray.push_back(3*pow(u[i],2) - 2*u[i]); +// beta.push_back(betaArray); +// } +//} + + + +// for (int i=0; i betaArray; +// betaArray.push_back(2*pow(u[i],3) - 3*pow(u[i],2) + 1); +// betaArray.push_back(pow(u[i],3) - 2*pow(u[i],2) + u[i]); +// betaArray.push_back(-2*pow(u[i],3) + 3*pow(u[i],2)); +// betaArray.push_back(pow(u[i],3) - pow(u[i],2)); +// beta.push_back(betaArray); +// } + +// for (int i=0; i betaArray; +// betaArray.push_back(6*pow(u[i],2) - 6*u[i]); +// betaArray.push_back(3*pow(u[i],2) - 4*u[i] + 1); +// betaArray.push_back(-6*pow(u[i],2) + 6*u[i]); +// betaArray.push_back(3*pow(u[i],2) - 2*u[i]); +// beta.push_back(betaArray); +// } + + + + + + + + +// // get the index of the closest range value to the discretization point +// for (int i=0; i x[i];}); +// n[i] = std::distance(discretization[i].begin(), it)-1; +// } + +// // compute remaining fraction +// for (int i=0; i=0; x--){ +// if (discrLoopCnt[x] != 2){ +// discrLoopCnt[x] += 1; +// break; +// } +// if (discrLoopCnt[x] == 2){ +// for (int y=x; y +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +template +void linspace(std::vector &linspaced, T start_in, T end_in, int num_in){ +// from: https://stackoverflow.com/questions/27028226/python-linspace-in-c + double start = static_cast(start_in); + double end = static_cast(end_in); + double num = static_cast(num_in); + + if (num == 0){ + return; + } + if (num == 1){ + linspaced.push_back(start); + return; + } + + double delta = (end - start) / (num - 1); + for(int i=0; i < num-1; ++i){ + linspaced.push_back(start + delta * i); + } + linspaced.push_back(end); +} + +struct Discretization{ + double begin; + double end; + int nPoints; + double gridsize; +}; +struct Nonzero_conditions final { + double input_val; + double nonzero_ma; +}; + +class Interpolate{ + private: + // dimension of the interpolation (e.g. two states -> 2D) + int dimension; + // number of points considered in constructing the polynomial + int nInterPoints = 4; + int g = 1; + // order of the interpolation polynomial function +// int polyOrder = 5; + // vector containing the orthogonal discretization vectors + // e.g. disc[0] = xrange, disc[1] = yrange etc. + std::vector> discretization; + std::vector discSizes; + // array containing the evaluations over the discretizations + std::vector,double>> evalsPair; + std::vector evals; + // vector containing index closest to discretization point + std::vector n; + // vector containing fraction of closest index to discretization point to next + std::vector u; + // array of polynomial evaluation + std::vector> beta; + // vector of an index in the evalsPair + std::vector loc; + + // OPENSIM INTEGRATION + std::vector dS; + std::vector coords; + + + public: + // getting + std::vector getRange(int i) {return discretization[i];} + int getDimension() {return dimension;} + + // template member functions + double getEval(); + double getEvalFast(); + + double getInterp(const std::vector& x); + double getInterp(const SimTK::State& s); + + double getInterpStruct(const std::vector& x); + double getInterpStruct(const SimTK::State& s); + double getLength(const SimTK::State& s){return getInterpStruct(s);} + + double getInterpDer(const std::vector& x, int coordinate, double h=0.0001); + double getInterpDer(const SimTK::State& s, int coordinate, double h=0.0001); + double getLengtheningSpeed(const SimTK::State& s); + + double interpCubicHermiteSpline(std::vector x, int derivativeOrder); + void computeBasisFunctions(std::vector u, int order); + void computeBasisFunctionsDerivatives(std::vector> &beta, + std::vector u, int order); + + + // CONSTRUCTOR FOR A NON-MUSCLE/COORDINATE INTERPOLATION + explicit Interpolate(std::vector> discretizationIn, + std::vector,double>> evalsPair); + + // N COORDINATES WITH GIVEN NPOINTS + explicit Interpolate(OpenSim::Muscle const& m, + OpenSim::Coordinate const** cBegin, + OpenSim::Coordinate const** cEnd, + SimTK::State& st, + std::vector& discretizationNPoints); + + + // VECTOR OF COORDINATES + explicit Interpolate(OpenSim::Muscle const& m, + std::vector coords, + SimTK::State& st, + std::vector& discretizationNPoints); + +// // 1 COORDINATE +// explicit Interpolate(OpenSim::Muscle const& m, +// Coordinate const& c1, +// SimTK::State& st, +// vector& discretizationNPoints, +// bool smooth=false) +// : Interpolate(m, +// c1, +// c1, +// st, +// discretizationNPoints) {} +}; + +#endif // INTERPOLATE_H + + + + + + + +// // 1 COORDINATE +// explicit Interpolate(OpenSim::Muscle const& m, +// Coordinate const& c1, +// SimTK::State& st, +// vector& discretizationNPoints, +// bool smooth=false) +// : Interpolate(m, +// c1, +// c1, +// st, +// discretizationNPoints) {} + +// // 2 COORDINATES +// explicit Interpolate(OpenSim::Muscle const& m, +// Coordinate const& c1, +// Coordinate const& c2, +// SimTK::State& st, +// vector& discretizationNPoints, +// bool smooth=false) +// : Interpolate(m, +// c1, +// c2, +// st, +// discretizationNPoints) {} + +// // 3 COORDINATES +// explicit Interpolate(OpenSim::Muscle const& m, +// Coordinate const& c1, +// Coordinate const& c2, +// Coordinate const& c3, +// SimTK::State& st, +// vector& discretizationNPoints, +// bool smooth=false) +// : Interpolate(m, +// c1, +// c3, +// st, +// discretizationNPoints) {} + +// // 4 COORDINATES +// explicit Interpolate(OpenSim::Muscle const& m, +// Coordinate const& c1, +// Coordinate const& c2, +// Coordinate const& c3, +// Coordinate const& c4, +// SimTK::State& st, +// vector& discretizationNPoints, +// bool smooth=false) +// : Interpolate(m, +// c1, +// c4, +// st, +// discretizationNPoints) {} + + + + +// // N COORDINATES WITH GIVEN DISCRETIZATION STRUCT +// explicit Interpolate(OpenSim::Muscle const& m, +// Coordinate const** cBegin, +// Coordinate const** cEnd, +// SimTK::State& st, +// vector& discretizationData) +// : dimension(discretizationData.size()), +// n(dimension,0), +// u(dimension,0), +// loc(dimension,0), +// dS(discretizationData) +// { +// std::ptrdiff_t n = cEnd-cBegin; +// assert(discretizationData.size() == (int)n); + +// GeometryPath const& musc_path = m.getGeometryPath(); + +// // just make it for using the old getInterp method +// vector dc_; +// for (int i=0; i cnt[dimension]; +// vector coordValues[dimension]; +// for (int i=0; i=0; x--){ +// if (cnt[x] != dS[x].nPoints-1){ +// cnt[x] += 1; +// break; +// } +// if (cnt[x] == dS[x].nPoints-1){ +// for (int y=x; y& discretizationData) +// : dimension(discretizationData.size()), +// n(dimension,0), +// u(dimension,0), +// loc(dimension,0), +// dS(discretizationData) +//{ +// assert(discretizationData.size() == 1); +// coords.push_back(c1); +// GeometryPath const& musc_path = m.getGeometryPath(); + +// // just make it for using the old getInterp method +// vector dc_; +// for (int i=0; i& discretizationData) +// : dimension(discretizationData.size()), +// n(dimension,0), +// u(dimension,0), +// loc(dimension,0), +// dS(discretizationData) +//{ +// assert(discretizationData.size() == 2); +// coords.push_back(c1); +// coords.push_back(c2); +// GeometryPath const& musc_path = m.getGeometryPath(); + +// // just make it for using the old getInterp method +// vector dc_; +// for (int i=0; i& discretizationNPoints, +// bool smooth=false) +// : dimension(discretizationNPoints.size()), +// n(dimension,0), +// u(dimension,0), +// loc(dimension,0) +//{ +// assert(discretizationNPoints.size() == 2); +// coords.push_back(c1); +// coords.push_back(c2); +// std::cout << "-------- CONSTRUCTOR CALLED --------" << std::endl; +// GeometryPath const& musc_path = m.getGeometryPath(); + +// // unlock coordinates +// bool c1_was_locked = c1.getLocked(st); +// c1.setLocked(st, false); +// auto unlock_c1 = defer_action([&] { c1.setLocked(st, c1_was_locked); }); +// double c1_initial_value = c1.getValue(st); +// auto reset_c1_val = defer_action([&] { c1.setValue(st, c1_initial_value); }); + +// bool c2_was_locked = c2.getLocked(st); +// c2.setLocked(st, false); +// auto unlock_c2 = defer_action([&] { c2.setLocked(st, c2_was_locked); }); +// double c2_initial_value = c2.getValue(st); +// auto reset_c2_val = defer_action([&] { c2.setValue(st, c2_initial_value); }); + +// // make discretization objects for interpolation class instance +// Discretization dc1, dc2; +// dc1.begin = c1.getRangeMin(); +// dc1.end = c1.getRangeMax(); +// dc1.nPoints = discretizationNPoints[0]; +// dc1.gridsize = (dc1.end-dc1.begin) / (dc1.nPoints-1); +// dc2.begin = c2.getRangeMin(); +// dc2.end = c2.getRangeMax(); +// dc2.nPoints = discretizationNPoints[1]; +// dc2.gridsize = (dc2.end-dc2.begin) / (dc2.nPoints-1); +// // push into discretization property vector +// dS.push_back(dc1); dS.push_back(dc2); + +// // check rms of error and possibly refine grid +// if (smooth){ +// std::cout << "-------- STARTING GRID SHAPING --------" << std::endl; +// // make it 6 points so we have enough room to sample inside. If it's +// // too large from user's input we throw away computation time, if it's +// // too small we cannot create sample points of which the surrounded +// // area does not exceed the min max of the coordinate +// for (int dim=0; dim> random_coords; +// vector samples; +// int num_of_points = 10; +// for (int sample=0; sample unif( +// dS[dim].begin+dS[dim].gridsize, +// dS[dim].end-2*dS[dim].gridsize); +// std::random_device rd; +// std::mt19937 gen(rd()); +// samples.push_back(unif(gen)); +// } +// random_coords.push_back(samples); +// } +// // include the total edge case as 'random' point +// samples.clear(); +// for (int dim=0; dim errors; +// for (int i=0; i dcVec; +// Discretization dc; +// for (int dim=0; dim unif(0,dc.gridsize); +// std::random_device rd; +// std::mt19937 gen(rd()); +// // we can overwrite [i][dim] and add a sampling from begin to end +// // as this lays in front or behind of random_coords[i][dim] +// random_coords[i][dim] += unif(gen); +// } +// // get approx +// Interpolate a = Interpolate(m,c1,c2,st,dcVec); +// double lengthInterp = a.getInterpStruct(random_coords[i]); +// std::cout << "interp: " << lengthInterp << std::endl; +// // get real +// c1.setValue(st,random_coords[i][0]); +// c2.setValue(st,random_coords[i][1]); +// double lengthReal = musc_path.getLength(st); +// std::cout << "real: " << lengthReal << std::endl; +// // get error value +// errors.push_back(std::abs(lengthInterp-lengthReal)/lengthReal); +// } +// RMS = *max_element(errors.begin(),errors.end()); +// std::cout << "nPoints: " << dS[0].nPoints << std::endl; +// std::cout << "RMS: " << RMS << std::endl; +// if (RMS < 0.001){ +// break; +// } else { +// for (int dim=0; dim dc_; +// for (int i=0; igetLength(s); +// return getGeometryPath().getLength(s); } //_____________________________________________________________________________ /** @@ -117,7 +118,8 @@ double PathActuator::getLength(const SimTK::State& s) const */ double PathActuator::getLengtheningSpeed(const SimTK::State& s) const { - return getGeometryPath().getLengtheningSpeed(s); + return path->getLengtheningSpeed(s); +// return getGeometryPath().getLengtheningSpeed(s); } //_____________________________________________________________________________ /** diff --git a/OpenSim/Simulation/Model/PathActuator.h b/OpenSim/Simulation/Model/PathActuator.h index 49e1f5b2ec..eaedb56b9b 100644 --- a/OpenSim/Simulation/Model/PathActuator.h +++ b/OpenSim/Simulation/Model/PathActuator.h @@ -48,6 +48,7 @@ class OSIMSIMULATION_API PathActuator : public ScalarActuator { //============================================================================= // PROPERTIES //============================================================================= + std::unique_ptr path; OpenSim_DECLARE_UNNAMED_PROPERTY(GeometryPath, "The set of points defining the path of the actuator."); OpenSim_DECLARE_PROPERTY(optimal_force, double, diff --git a/OpenSim/Simulation/Model/PointBasedPath.cpp b/OpenSim/Simulation/Model/PointBasedPath.cpp new file mode 100644 index 0000000000..59ceb602fa --- /dev/null +++ b/OpenSim/Simulation/Model/PointBasedPath.cpp @@ -0,0 +1,26 @@ +#include "PointBasedPath.h" + +using namespace std; +using namespace OpenSim; +using namespace SimTK; +using SimTK::Vec3; + +// Constructor +//PointBasedPath::PointBasedPath() : +// GeometryPath() +//{ +// setAuthors("Joris Verhagen"); +// constructProperties(); +//} + +double PointBasedPath::getLength( const SimTK::State& s) const +{ + computePath(s); + return ( getCacheVariableValue(s, "length") ); +} + +double PointBasedPath::getLengtheningSpeed( const SimTK::State& s) const +{ + computeLengtheningSpeed(s); + return getCacheVariableValue(s, "speed"); +} diff --git a/OpenSim/Simulation/Model/PointBasedPath.h b/OpenSim/Simulation/Model/PointBasedPath.h new file mode 100644 index 0000000000..5f0e18253e --- /dev/null +++ b/OpenSim/Simulation/Model/PointBasedPath.h @@ -0,0 +1,38 @@ +#ifndef OPENSIM_POINTBASED_PATH_H_ +#define OPENSIM_POINTBASED_PATH_H_ + +#include "GeometryPath.h"; + +#ifdef SWIG + #ifdef OSIMSIMULATION_API + #undef OSIMSIMULATION_API + #define OSIMSIMULATION_API + #endif +#endif + +namespace OpenSim { + +class Coordinate; +class PointForceDirection; +class ScaleSet; +class WrapResult; +class WrapObject; + +class PointBasedPath : public GeometryPath { +//class OSIMSIMULATION_API PointBasedPath : public GeometryPath { +// OpenSim_DECLARE_CONCRETE_OBJECT(PointBasedPath, GeometryPath); + +// OpenSim_DECLARE_OUTPUT(length, double, +// getLength, SimTK::Stage::Position); +// OpenSim_DECLARE_OUTPUT(lengthening_speed, double, +// getLengtheningSpeed, SimTK::Stage::Velocity); + +public: +// PointBasedPath(); + + double getLength( const SimTK::State& s) const override; + double getLengtheningSpeed( const SimTK::State& s) const override; +}; +} + +#endif From fb67d1e2d4326d77def96bbcfe63e3a877448d22 Mon Sep 17 00:00:00 2001 From: joris997 Date: Thu, 25 Feb 2021 12:46:54 +0100 Subject: [PATCH 04/36] update --- CMakeLists.txt.user | 5469 +++++++++++++++++ .../Model/Blankevoort1991Ligament.cpp | 2 +- OpenSim/Simulation/Model/FunctionBasedPath.h | 10 +- OpenSim/Simulation/Model/Ligament.cpp | 2 +- OpenSim/Simulation/Model/PathActuator.cpp | 10 +- OpenSim/Simulation/Model/PathActuator.h | 3 +- OpenSim/Simulation/Model/PathSpring.cpp | 2 +- OpenSim/Simulation/Model/PointBasedPath.cpp | 10 +- OpenSim/Simulation/Model/PointBasedPath.h | 6 +- .../RegisterTypes_osimSimulation.cpp | 12 +- OpenSim/Simulation/osimSimulation.h | 3 + 11 files changed, 5506 insertions(+), 23 deletions(-) create mode 100644 CMakeLists.txt.user diff --git a/CMakeLists.txt.user b/CMakeLists.txt.user new file mode 100644 index 0000000000..65d36cd86a --- /dev/null +++ b/CMakeLists.txt.user @@ -0,0 +1,5469 @@ + + + + + + EnvironmentId + {31e18788-fd95-4ab4-9268-c7219c462e0d} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + true + false + 0 + true + true + 0 + 8 + true + 1 + true + true + true + false + + + + ProjectExplorer.Project.PluginSettings + + + + ProjectExplorer.Project.Target.0 + + Desktop + Desktop + {5aa12636-ab1a-4881-a3d9-fe06a90bba71} + 0 + 0 + 0 + + + CMAKE_BUILD_TYPE:STRING=RelWithDebInfo + CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx} + CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C} + CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX} + QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable} + SIMBODY_HOME:PATH=/home/none/simbody + docopt_DIR:PATH=/home/none/opensim-core-dependencies-install/docopt/lib/cmake/docopt + spdlog_DIR:PATH=/home/none/opensim-core-dependencies-install/spdlog/lib/spdlog/cmake + + /home/none/opensim-core-joris-build + + + + + all + + true + CMake Build + + CMakeProjectManager.MakeStep + + 1 + Build + + ProjectExplorer.BuildSteps.Build + + + + + + clean + + true + CMake Build + + CMakeProjectManager.MakeStep + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release with Debug Information + Release with Debug Information + CMakeProjectManager.CMakeBuildConfiguration + + 1 + + + 0 + Deploy + + ProjectExplorer.BuildSteps.Deploy + + 1 + Deploy locally + + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testLepton + + + /home/none/opensim-core-joris-build + 2 + + testLepton + + CMakeProjectManager.CMakeRunConfiguration.testLepton + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testTRCFileAdapter + + + /home/none/opensim-core-joris-build + -1 + + testTRCFileAdapter + + CMakeProjectManager.CMakeRunConfiguration.testTRCFileAdapter + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testPath + + + /home/none/opensim-core-joris-build + -1 + + testPath + + CMakeProjectManager.CMakeRunConfiguration.testPath + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testRootSolver + + + /home/none/opensim-core-joris-build + -1 + + testRootSolver + + CMakeProjectManager.CMakeRunConfiguration.testRootSolver + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testFunctions + + + /home/none/opensim-core-joris-build + -1 + + testFunctions + + CMakeProjectManager.CMakeRunConfiguration.testFunctions + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testGCVSpline + + + /home/none/opensim-core-joris-build + -1 + + testGCVSpline + + CMakeProjectManager.CMakeRunConfiguration.testGCVSpline + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSerialization + + + /home/none/opensim-core-joris-build + -1 + + testSerialization + + CMakeProjectManager.CMakeRunConfiguration.testSerialization + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testStorage + + + /home/none/opensim-core-joris-build + -1 + + testStorage + + CMakeProjectManager.CMakeRunConfiguration.testStorage + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testXsensDataReader + + + /home/none/opensim-core-joris-build + -1 + + testXsensDataReader + + CMakeProjectManager.CMakeRunConfiguration.testXsensDataReader + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testStatesTrajectory + + + /home/none/opensim-core-joris-build + -1 + + testStatesTrajectory + + CMakeProjectManager.CMakeRunConfiguration.testStatesTrajectory + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testInverseKinematicsSolver + + + /home/none/opensim-core-joris-build + -1 + + testInverseKinematicsSolver + + CMakeProjectManager.CMakeRunConfiguration.testInverseKinematicsSolver + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testInitState + + + /home/none/opensim-core-joris-build + -1 + + testInitState + + CMakeProjectManager.CMakeRunConfiguration.testInitState + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testFunctionAdapter + + + /home/none/opensim-core-joris-build + -1 + + testFunctionAdapter + + CMakeProjectManager.CMakeRunConfiguration.testFunctionAdapter + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testFrames + + + /home/none/opensim-core-joris-build + -1 + + testFrames + + CMakeProjectManager.CMakeRunConfiguration.testFrames + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testModelInterface + + + /home/none/opensim-core-joris-build + -1 + + testModelInterface + + CMakeProjectManager.CMakeRunConfiguration.testModelInterface + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testForces + + + /home/none/opensim-core-joris-build + -1 + + testForces + + CMakeProjectManager.CMakeRunConfiguration.testForces + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testAssemblySolver + + + /home/none/opensim-core-joris-build + -1 + + testAssemblySolver + + CMakeProjectManager.CMakeRunConfiguration.testAssemblySolver + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testManager + + + /home/none/opensim-core-joris-build + -1 + + testManager + + CMakeProjectManager.CMakeRunConfiguration.testManager + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMomentArms + + + /home/none/opensim-core-joris-build + -1 + + testMomentArms + + CMakeProjectManager.CMakeRunConfiguration.testMomentArms + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testReportersWithModel + + + /home/none/opensim-core-joris-build + -1 + + testReportersWithModel + + CMakeProjectManager.CMakeRunConfiguration.testReportersWithModel + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testPoints + + + /home/none/opensim-core-joris-build + -1 + + testPoints + + CMakeProjectManager.CMakeRunConfiguration.testPoints + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testContactGeometry + + + /home/none/opensim-core-joris-build + -1 + + testContactGeometry + + CMakeProjectManager.CMakeRunConfiguration.testContactGeometry + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testNestedModelComponents + + + /home/none/opensim-core-joris-build + -1 + + testNestedModelComponents + + CMakeProjectManager.CMakeRunConfiguration.testNestedModelComponents + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testDataTable + + + /home/none/opensim-core-joris-build + -1 + + testDataTable + + CMakeProjectManager.CMakeRunConfiguration.testDataTable + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testPrescribedForce + + + /home/none/opensim-core-joris-build + -1 + + testPrescribedForce + + CMakeProjectManager.CMakeRunConfiguration.testPrescribedForce + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMuscleMetabolicsProbes + + + /home/none/opensim-core-joris-build + -1 + + testMuscleMetabolicsProbes + + CMakeProjectManager.CMakeRunConfiguration.testMuscleMetabolicsProbes + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testProbes + + + /home/none/opensim-core-joris-build + -1 + + testProbes + + CMakeProjectManager.CMakeRunConfiguration.testProbes + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSimulationUtilities + + + /home/none/opensim-core-joris-build + -1 + + testSimulationUtilities + + CMakeProjectManager.CMakeRunConfiguration.testSimulationUtilities + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testJoints + + + /home/none/opensim-core-joris-build + -1 + + testJoints + + CMakeProjectManager.CMakeRunConfiguration.testJoints + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testConstraints + + + /home/none/opensim-core-joris-build + -1 + + testConstraints + + CMakeProjectManager.CMakeRunConfiguration.testConstraints + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMuscleFirstOrderActivationDynamicModel + + + /home/none/opensim-core-joris-build + -1 + + testMuscleFirstOrderActivationDynamicModel + + CMakeProjectManager.CMakeRunConfiguration.testMuscleFirstOrderActivationDynamicModel + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testActuators + + + /home/none/opensim-core-joris-build + -1 + + testActuators + + CMakeProjectManager.CMakeRunConfiguration.testActuators + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMuscleFixedWidthPennationModel + + + /home/none/opensim-core-joris-build + -1 + + testMuscleFixedWidthPennationModel + + CMakeProjectManager.CMakeRunConfiguration.testMuscleFixedWidthPennationModel + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMuscles + + + /home/none/opensim-core-joris-build + -1 + + testMuscles + + CMakeProjectManager.CMakeRunConfiguration.testMuscles + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testAPDMDataReader + + + /home/none/opensim-core-joris-build + -1 + + testAPDMDataReader + + CMakeProjectManager.CMakeRunConfiguration.testAPDMDataReader + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSerializableMuscleCurves + + + /home/none/opensim-core-joris-build + -1 + + testSerializableMuscleCurves + + CMakeProjectManager.CMakeRunConfiguration.testSerializableMuscleCurves + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testOutputReporter + + + /home/none/opensim-core-joris-build + -1 + + testOutputReporter + + CMakeProjectManager.CMakeRunConfiguration.testOutputReporter + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testExternalLoads + + + /home/none/opensim-core-joris-build + -1 + + testExternalLoads + + CMakeProjectManager.CMakeRunConfiguration.testExternalLoads + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testControllers + + + /home/none/opensim-core-joris-build + -1 + + testControllers + + CMakeProjectManager.CMakeRunConfiguration.testControllers + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testModelCopy + + + /home/none/opensim-core-joris-build + -1 + + testModelCopy + + CMakeProjectManager.CMakeRunConfiguration.testModelCopy + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSerializeOpenSimObjects + + + /home/none/opensim-core-joris-build + -1 + + testSerializeOpenSimObjects + + CMakeProjectManager.CMakeRunConfiguration.testSerializeOpenSimObjects + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testVisualization + + + /home/none/opensim-core-joris-build + -1 + + testVisualization + + CMakeProjectManager.CMakeRunConfiguration.testVisualization + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleHopperDeviceAnswers + + + /home/none/opensim-core-joris-build + -1 + + exampleHopperDeviceAnswers + + CMakeProjectManager.CMakeRunConfiguration.exampleHopperDeviceAnswers + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleHopperDevice + + + /home/none/opensim-core-joris-build + -1 + + exampleHopperDevice + + CMakeProjectManager.CMakeRunConfiguration.exampleHopperDevice + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + example2DataTable + + + /home/none/opensim-core-joris-build + -1 + + example2DataTable + + CMakeProjectManager.CMakeRunConfiguration.example2DataTable + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testComponentInterface + + + /home/none/opensim-core-joris-build + -1 + + testComponentInterface + + CMakeProjectManager.CMakeRunConfiguration.testComponentInterface + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + example1DataTable + + + /home/none/opensim-core-joris-build + -1 + + example1DataTable + + CMakeProjectManager.CMakeRunConfiguration.example1DataTable + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleTRCFileAdapter + + + /home/none/opensim-core-joris-build + -1 + + exampleTRCFileAdapter + + CMakeProjectManager.CMakeRunConfiguration.exampleTRCFileAdapter + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testComponents + + + /home/none/opensim-core-joris-build + -1 + + testComponents + + CMakeProjectManager.CMakeRunConfiguration.testComponents + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testAddComponents + + + /home/none/opensim-core-joris-build + -1 + + testAddComponents + + CMakeProjectManager.CMakeRunConfiguration.testAddComponents + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testControllerExample + + + /home/none/opensim-core-joris-build + -1 + + testControllerExample + + CMakeProjectManager.CMakeRunConfiguration.testControllerExample + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleController + + + /home/none/opensim-core-joris-build + -1 + + exampleController + + CMakeProjectManager.CMakeRunConfiguration.exampleController + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testExampleMain + + + /home/none/opensim-core-joris-build + -1 + + testExampleMain + + CMakeProjectManager.CMakeRunConfiguration.testExampleMain + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleMain + + + /home/none/opensim-core-joris-build + -1 + + exampleMain + + CMakeProjectManager.CMakeRunConfiguration.exampleMain + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testOptimizationExample + + + /home/none/opensim-core-joris-build + -1 + + testOptimizationExample + + CMakeProjectManager.CMakeRunConfiguration.testOptimizationExample + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleOptimization + + + /home/none/opensim-core-joris-build + -1 + + exampleOptimization + + CMakeProjectManager.CMakeRunConfiguration.exampleOptimization + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testNCSpline + + + /home/none/opensim-core-joris-build + -1 + + testNCSpline + + CMakeProjectManager.CMakeRunConfiguration.testNCSpline + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCustomActuatorExample + + + /home/none/opensim-core-joris-build + -1 + + testCustomActuatorExample + + CMakeProjectManager.CMakeRunConfiguration.testCustomActuatorExample + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleCustomActuator + + + /home/none/opensim-core-joris-build + -1 + + exampleCustomActuator + + CMakeProjectManager.CMakeRunConfiguration.exampleCustomActuator + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMuscleExample + + + /home/none/opensim-core-joris-build + -1 + + testMuscleExample + + CMakeProjectManager.CMakeRunConfiguration.testMuscleExample + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleMuscle + + + /home/none/opensim-core-joris-build + -1 + + exampleMuscle + + CMakeProjectManager.CMakeRunConfiguration.exampleMuscle + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSimpleOptimizationExample + + + /home/none/opensim-core-joris-build + -1 + + testSimpleOptimizationExample + + CMakeProjectManager.CMakeRunConfiguration.testSimpleOptimizationExample + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleOptimizationSimple + + + /home/none/opensim-core-joris-build + -1 + + exampleOptimizationSimple + + CMakeProjectManager.CMakeRunConfiguration.exampleOptimizationSimple + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + checkEnvironment + + + /home/none/opensim-core-joris-build + -1 + + checkEnvironment + + CMakeProjectManager.CMakeRunConfiguration.checkEnvironment + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testIterators + + + /home/none/opensim-core-joris-build + -1 + + testIterators + + CMakeProjectManager.CMakeRunConfiguration.testIterators + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testREADME + + + /home/none/opensim-core-joris-build + -1 + + testREADME + + CMakeProjectManager.CMakeRunConfiguration.testREADME + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testWrapping + + + /home/none/opensim-core-joris-build + -1 + + testWrapping + + CMakeProjectManager.CMakeRunConfiguration.testWrapping + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSmoothSegmentedFunctionFactory + + + /home/none/opensim-core-joris-build + -1 + + testSmoothSegmentedFunctionFactory + + CMakeProjectManager.CMakeRunConfiguration.testSmoothSegmentedFunctionFactory + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testExampleLuxoMuscle + + + /home/none/opensim-core-joris-build + -1 + + testExampleLuxoMuscle + + CMakeProjectManager.CMakeRunConfiguration.testExampleLuxoMuscle + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testBuildDynamicWalker + + + /home/none/opensim-core-joris-build + -1 + + testBuildDynamicWalker + + CMakeProjectManager.CMakeRunConfiguration.testBuildDynamicWalker + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testJointReactions + + + /home/none/opensim-core-joris-build + -1 + + testJointReactions + + CMakeProjectManager.CMakeRunConfiguration.testJointReactions + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testStaticOptimization + + + /home/none/opensim-core-joris-build + -1 + + testStaticOptimization + + CMakeProjectManager.CMakeRunConfiguration.testStaticOptimization + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testInducedAccelerations + + + /home/none/opensim-core-joris-build + -1 + + testInducedAccelerations + + CMakeProjectManager.CMakeRunConfiguration.testInducedAccelerations + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testAnalyzeTool + + + /home/none/opensim-core-joris-build + -1 + + testAnalyzeTool + + CMakeProjectManager.CMakeRunConfiguration.testAnalyzeTool + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testForward + + + /home/none/opensim-core-joris-build + -1 + + testForward + + CMakeProjectManager.CMakeRunConfiguration.testForward + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testScale + + + /home/none/opensim-core-joris-build + -1 + + testScale + + CMakeProjectManager.CMakeRunConfiguration.testScale + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testIK + + + /home/none/opensim-core-joris-build + -1 + + testIK + + CMakeProjectManager.CMakeRunConfiguration.testIK + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testID + + + /home/none/opensim-core-joris-build + -1 + + testID + + CMakeProjectManager.CMakeRunConfiguration.testID + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSTOFileAdapter + + + /home/none/opensim-core-joris-build + -1 + + testSTOFileAdapter + + CMakeProjectManager.CMakeRunConfiguration.testSTOFileAdapter + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCSingleMuscle + + + /home/none/opensim-core-joris-build + -1 + + testCMCSingleMuscle + + CMakeProjectManager.CMakeRunConfiguration.testCMCSingleMuscle + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCEMGDrivenArm_Thelen + + + /home/none/opensim-core-joris-build + -1 + + testCMCEMGDrivenArm_Thelen + + CMakeProjectManager.CMakeRunConfiguration.testCMCEMGDrivenArm_Thelen + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCTwoMusclesOnBlock + + + /home/none/opensim-core-joris-build + -1 + + testCMCTwoMusclesOnBlock + + CMakeProjectManager.CMakeRunConfiguration.testCMCTwoMusclesOnBlock + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCEMGDrivenArm_Millard + + + /home/none/opensim-core-joris-build + -1 + + testCMCEMGDrivenArm_Millard + + CMakeProjectManager.CMakeRunConfiguration.testCMCEMGDrivenArm_Millard + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCArm26_Millard + + + /home/none/opensim-core-joris-build + -1 + + testCMCArm26_Millard + + CMakeProjectManager.CMakeRunConfiguration.testCMCArm26_Millard + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCGait10dof18musc + + + /home/none/opensim-core-joris-build + -1 + + testCMCGait10dof18musc + + CMakeProjectManager.CMakeRunConfiguration.testCMCGait10dof18musc + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCSingleRigidTendonMuscle + + + /home/none/opensim-core-joris-build + -1 + + testCMCSingleRigidTendonMuscle + + CMakeProjectManager.CMakeRunConfiguration.testCMCSingleRigidTendonMuscle + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCWithControlConstraintsGait2354 + + + /home/none/opensim-core-joris-build + -1 + + testCMCWithControlConstraintsGait2354 + + CMakeProjectManager.CMakeRunConfiguration.testCMCWithControlConstraintsGait2354 + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCWithControlConstraintsRunningModel + + + /home/none/opensim-core-joris-build + -1 + + testCMCWithControlConstraintsRunningModel + + CMakeProjectManager.CMakeRunConfiguration.testCMCWithControlConstraintsRunningModel + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCArm26_Thelen + + + /home/none/opensim-core-joris-build + -1 + + testCMCArm26_Thelen + + CMakeProjectManager.CMakeRunConfiguration.testCMCArm26_Thelen + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMarkerData + + + /home/none/opensim-core-joris-build + -1 + + testMarkerData + + CMakeProjectManager.CMakeRunConfiguration.testMarkerData + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testRRA + + + /home/none/opensim-core-joris-build + -1 + + testRRA + + CMakeProjectManager.CMakeRunConfiguration.testRRA + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + opensense + + + /home/none/opensim-core-joris-build + -1 + + opensense + + CMakeProjectManager.CMakeRunConfiguration.opensense + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testOpenSense + + + /home/none/opensim-core-joris-build + -1 + + testOpenSense + + CMakeProjectManager.CMakeRunConfiguration.testOpenSense + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + opensim-cmd + + + /home/none/opensim-core-joris-build + -1 + + opensim-cmd + + CMakeProjectManager.CMakeRunConfiguration.opensim-cmd + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCommandLineInterface + + + /home/none/opensim-core-joris-build + -1 + + testCommandLineInterface + + CMakeProjectManager.CMakeRunConfiguration.testCommandLineInterface + 3768 + false + true + false + false + true + + 95 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 18 + + + Version + 18 + + diff --git a/OpenSim/Simulation/Model/Blankevoort1991Ligament.cpp b/OpenSim/Simulation/Model/Blankevoort1991Ligament.cpp index c54cf2021a..2ea3dcd66a 100644 --- a/OpenSim/Simulation/Model/Blankevoort1991Ligament.cpp +++ b/OpenSim/Simulation/Model/Blankevoort1991Ligament.cpp @@ -81,7 +81,7 @@ void Blankevoort1991Ligament::setNull() } void Blankevoort1991Ligament::constructProperties() { - constructProperty_GeometryPath(GeometryPath()); +// constructProperty_GeometryPath(GeometryPath()); constructProperty_linear_stiffness(1.0); constructProperty_transition_strain(0.06); constructProperty_damping_coefficient(0.003); diff --git a/OpenSim/Simulation/Model/FunctionBasedPath.h b/OpenSim/Simulation/Model/FunctionBasedPath.h index 092f440ae7..cf6ad598b2 100644 --- a/OpenSim/Simulation/Model/FunctionBasedPath.h +++ b/OpenSim/Simulation/Model/FunctionBasedPath.h @@ -1,8 +1,8 @@ #ifndef OPENSIM_FUNCTIONBASED_PATH_H_ #define OPENSIM_FUNCTIONBASED_PATH_H_ -#include "GeometryPath.h"; -#include "Interpolate.h"; +#include "GeometryPath.h" +#include "Interpolate.h" #ifdef SWIG #ifdef OSIMSIMULATION_API @@ -19,9 +19,9 @@ class ScaleSet; class WrapResult; class WrapObject; -class FunctionBasedPath : public GeometryPath { +class OSIMSIMULATION_API FunctionBasedPath : public GeometryPath { //class OSIMSIMULATION_API FunctionBasedPath : public GeometryPath { -// OpenSim_DECLARE_CONCRETE_OBJECT(FunctionBasedPath, GeometryPath); + OpenSim_DECLARE_CONCRETE_OBJECT(FunctionBasedPath, GeometryPath); // OpenSim_DECLARE_OUTPUT(length, double, // getLength, SimTK::Stage::Position); @@ -40,3 +40,5 @@ class FunctionBasedPath : public GeometryPath { } #endif +// might need to make setLength etc. also virtual +// or make everything virtual (just for concept) diff --git a/OpenSim/Simulation/Model/Ligament.cpp b/OpenSim/Simulation/Model/Ligament.cpp index 7a4707f4d9..2b7577c5a1 100644 --- a/OpenSim/Simulation/Model/Ligament.cpp +++ b/OpenSim/Simulation/Model/Ligament.cpp @@ -63,7 +63,7 @@ Ligament::Ligament() void Ligament::constructProperties() { setAuthors("Peter Loan"); - constructProperty_GeometryPath(GeometryPath()); +// constructProperty_GeometryPath(GeometryPath()); constructProperty_resting_length(0.0); constructProperty_pcsa_force(0.0); diff --git a/OpenSim/Simulation/Model/PathActuator.cpp b/OpenSim/Simulation/Model/PathActuator.cpp index 8720388f81..633a291d4b 100644 --- a/OpenSim/Simulation/Model/PathActuator.cpp +++ b/OpenSim/Simulation/Model/PathActuator.cpp @@ -62,7 +62,7 @@ void PathActuator::setNull() */ void PathActuator::constructProperties() { - constructProperty_GeometryPath(GeometryPath()); +// constructProperty_GeometryPath(GeometryPath()); constructProperty_optimal_force(1.0); } @@ -107,8 +107,8 @@ double PathActuator::getOptimalForce() const */ double PathActuator::getLength(const SimTK::State& s) const { - return path->getLength(s); -// return getGeometryPath().getLength(s); +// return path->getLength(s); + return getGeometryPath().getLength(s); } //_____________________________________________________________________________ /** @@ -118,8 +118,8 @@ double PathActuator::getLength(const SimTK::State& s) const */ double PathActuator::getLengtheningSpeed(const SimTK::State& s) const { - return path->getLengtheningSpeed(s); -// return getGeometryPath().getLengtheningSpeed(s); +// return path->getLengtheningSpeed(s); + return getGeometryPath().getLengtheningSpeed(s); } //_____________________________________________________________________________ /** diff --git a/OpenSim/Simulation/Model/PathActuator.h b/OpenSim/Simulation/Model/PathActuator.h index eaedb56b9b..56493d2f38 100644 --- a/OpenSim/Simulation/Model/PathActuator.h +++ b/OpenSim/Simulation/Model/PathActuator.h @@ -48,7 +48,6 @@ class OSIMSIMULATION_API PathActuator : public ScalarActuator { //============================================================================= // PROPERTIES //============================================================================= - std::unique_ptr path; OpenSim_DECLARE_UNNAMED_PROPERTY(GeometryPath, "The set of points defining the path of the actuator."); OpenSim_DECLARE_PROPERTY(optimal_force, double, @@ -70,7 +69,7 @@ class OSIMSIMULATION_API PathActuator : public ScalarActuator { // Path GeometryPath& updGeometryPath() { return upd_GeometryPath(); } const GeometryPath& getGeometryPath() const - { return get_GeometryPath(); } + { return get_GeometryPath(); } bool hasGeometryPath() const override { return true;}; // OPTIMAL FORCE diff --git a/OpenSim/Simulation/Model/PathSpring.cpp b/OpenSim/Simulation/Model/PathSpring.cpp index 2ba09fac02..e8046a6209 100644 --- a/OpenSim/Simulation/Model/PathSpring.cpp +++ b/OpenSim/Simulation/Model/PathSpring.cpp @@ -64,7 +64,7 @@ PathSpring::PathSpring(const string& name, double restLength, void PathSpring::constructProperties() { setAuthors("Ajay Seth"); - constructProperty_GeometryPath(GeometryPath()); +// constructProperty_GeometryPath(GeometryPath()); constructProperty_resting_length(SimTK::NaN); constructProperty_stiffness(SimTK::NaN); constructProperty_dissipation(SimTK::NaN); diff --git a/OpenSim/Simulation/Model/PointBasedPath.cpp b/OpenSim/Simulation/Model/PointBasedPath.cpp index 59ceb602fa..66c3a92b3a 100644 --- a/OpenSim/Simulation/Model/PointBasedPath.cpp +++ b/OpenSim/Simulation/Model/PointBasedPath.cpp @@ -15,12 +15,14 @@ using SimTK::Vec3; double PointBasedPath::getLength( const SimTK::State& s) const { - computePath(s); - return ( getCacheVariableValue(s, "length") ); +// computePath(s); +// return ( getCacheVariableValue(s, "length") ); + return 0.0; } double PointBasedPath::getLengtheningSpeed( const SimTK::State& s) const { - computeLengtheningSpeed(s); - return getCacheVariableValue(s, "speed"); +// computeLengtheningSpeed(s); +// return getCacheVariableValue(s, "speed"); + return 0.0; } diff --git a/OpenSim/Simulation/Model/PointBasedPath.h b/OpenSim/Simulation/Model/PointBasedPath.h index 5f0e18253e..b6060bddee 100644 --- a/OpenSim/Simulation/Model/PointBasedPath.h +++ b/OpenSim/Simulation/Model/PointBasedPath.h @@ -1,7 +1,7 @@ #ifndef OPENSIM_POINTBASED_PATH_H_ #define OPENSIM_POINTBASED_PATH_H_ -#include "GeometryPath.h"; +#include "GeometryPath.h" #ifdef SWIG #ifdef OSIMSIMULATION_API @@ -18,9 +18,9 @@ class ScaleSet; class WrapResult; class WrapObject; -class PointBasedPath : public GeometryPath { +class OSIMSIMULATION_API PointBasedPath : public GeometryPath { //class OSIMSIMULATION_API PointBasedPath : public GeometryPath { -// OpenSim_DECLARE_CONCRETE_OBJECT(PointBasedPath, GeometryPath); + OpenSim_DECLARE_CONCRETE_OBJECT(PointBasedPath, GeometryPath); // OpenSim_DECLARE_OUTPUT(length, double, // getLength, SimTK::Stage::Position); diff --git a/OpenSim/Simulation/RegisterTypes_osimSimulation.cpp b/OpenSim/Simulation/RegisterTypes_osimSimulation.cpp index cfdbbb166d..8258d0bb38 100644 --- a/OpenSim/Simulation/RegisterTypes_osimSimulation.cpp +++ b/OpenSim/Simulation/RegisterTypes_osimSimulation.cpp @@ -59,7 +59,10 @@ #include "Model/PathPointSet.h" #include "Model/ConditionalPathPoint.h" #include "Model/MovingPathPoint.h" -#include "Model/GeometryPath.h" +//#include "Model/GeometryPath.h" +#include "Model/PointBasedPath.h" +#include "Model/FunctionBasedPath.h" + #include "Model/PrescribedForce.h" #include "Model/ExternalForce.h" #include "Model/PointToPointSpring.h" @@ -178,7 +181,9 @@ OSIMSIMULATION_API void RegisterTypes_osimSimulation() Object::registerType( LineGeometry()); Object::registerType( FrameGeometry()); Object::registerType( Arrow()); - Object::registerType( GeometryPath()); +// Object::registerType( GeometryPath()); + Object::registerType( PointBasedPath()); + Object::registerType( FunctionBasedPath()); Object::registerType( ControlSet() ); Object::registerType( ControlConstant() ); @@ -288,6 +293,9 @@ OSIMSIMULATION_API void RegisterTypes_osimSimulation() Object::renameType("MuscleMetabolicPowerProbeUmberger2010_MetabolicMuscleParameterSet", "Umberger2010MuscleMetabolicsProbe_MetabolicMuscleParameterSet"); + // GeometryPath now abstract but defaults to a PointBasedPath + Object::renameType("GeometryPath", "PointBasedPath"); + } catch (const std::exception& e) { std::cerr << "ERROR during osimSimulation Object registration:\n" diff --git a/OpenSim/Simulation/osimSimulation.h b/OpenSim/Simulation/osimSimulation.h index a47727017c..5998da9ca3 100644 --- a/OpenSim/Simulation/osimSimulation.h +++ b/OpenSim/Simulation/osimSimulation.h @@ -52,6 +52,9 @@ #include "Model/ConditionalPathPoint.h" #include "Model/MovingPathPoint.h" #include "Model/GeometryPath.h" +#include "Model/PointBasedPath.h" +#include "Model/FunctionBasedPath.h" +#include "Model/Interpolate.h" #include "Model/PrescribedForce.h" #include "Model/PointToPointSpring.h" #include "Model/ExpressionBasedPointToPointForce.h" From 2b89575e6f547175fc7cddd044708dc88793e113 Mon Sep 17 00:00:00 2001 From: joris997 Date: Mon, 8 Mar 2021 08:45:41 +0100 Subject: [PATCH 05/36] updates to interpolation integration but methods not detected --- Bindings/OpenSimHeaders_simulation.h | 5 + CMakeLists.txt.user | 1728 +++++++++++++++-- .../Model/Blankevoort1991Ligament.h | 4 +- .../Simulation/Model/FunctionBasedPath.cpp | 223 ++- OpenSim/Simulation/Model/FunctionBasedPath.h | 22 +- OpenSim/Simulation/Model/GeometryPath.cpp | 52 +- OpenSim/Simulation/Model/GeometryPath.h | 11 +- OpenSim/Simulation/Model/Interpolate.cpp | 370 +--- OpenSim/Simulation/Model/Interpolate.h | 519 +---- OpenSim/Simulation/Model/Ligament.cpp | 4 +- OpenSim/Simulation/Model/Muscle.cpp | 4 +- OpenSim/Simulation/Model/PathActuator.h | 10 +- OpenSim/Simulation/Model/PathSpring.cpp | 4 +- OpenSim/Simulation/Model/PointBasedPath.cpp | 35 +- OpenSim/Simulation/Model/PointBasedPath.h | 4 + .../RegisterTypes_osimSimulation.cpp | 8 +- OpenSim/Simulation/osimSimulation.h | 2 + 17 files changed, 2022 insertions(+), 983 deletions(-) diff --git a/Bindings/OpenSimHeaders_simulation.h b/Bindings/OpenSimHeaders_simulation.h index f22f948d4c..338678868d 100644 --- a/Bindings/OpenSimHeaders_simulation.h +++ b/Bindings/OpenSimHeaders_simulation.h @@ -109,7 +109,12 @@ #include #include #include + #include +#include +#include +#include + #include #include diff --git a/CMakeLists.txt.user b/CMakeLists.txt.user index 65d36cd86a..b071a55008 100644 --- a/CMakeLists.txt.user +++ b/CMakeLists.txt.user @@ -1,6 +1,6 @@ - + EnvironmentId @@ -64,7 +64,7 @@ {5aa12636-ab1a-4881-a3d9-fe06a90bba71} 0 0 - 0 + 95 CMAKE_BUILD_TYPE:STRING=RelWithDebInfo @@ -76,7 +76,7 @@ docopt_DIR:PATH=/home/none/opensim-core-dependencies-install/docopt/lib/cmake/docopt spdlog_DIR:PATH=/home/none/opensim-core-dependencies-install/spdlog/lib/spdlog/cmake - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build @@ -97,7 +97,7 @@ - clean + all true CMake Build @@ -174,7 +174,7 @@ testLepton - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build 2 testLepton @@ -230,7 +230,7 @@ testTRCFileAdapter - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testTRCFileAdapter @@ -286,7 +286,7 @@ testPath - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testPath @@ -299,7 +299,7 @@ false true - + false false 1000 @@ -339,15 +339,15 @@ 13 14 - testRootSolver + testMocoInverse - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 - testRootSolver + testMocoInverse - CMakeProjectManager.CMakeRunConfiguration.testRootSolver + CMakeProjectManager.CMakeRunConfiguration.testMocoInverse 3768 false true @@ -355,7 +355,7 @@ false true - + false false 1000 @@ -395,15 +395,1247 @@ 13 14 - testFunctions + testMocoMetabolics - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 - testFunctions + testMocoMetabolics + + CMakeProjectManager.CMakeRunConfiguration.testMocoMetabolics + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoInterface + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoInterface + + CMakeProjectManager.CMakeRunConfiguration.testMocoInterface + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoConstraints + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoConstraints + + CMakeProjectManager.CMakeRunConfiguration.testMocoConstraints + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoImplicit + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoImplicit + + CMakeProjectManager.CMakeRunConfiguration.testMocoImplicit + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoAnalytic + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoAnalytic + + CMakeProjectManager.CMakeRunConfiguration.testMocoAnalytic + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoGoals + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoGoals + + CMakeProjectManager.CMakeRunConfiguration.testMocoGoals + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoActuators + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoActuators + + CMakeProjectManager.CMakeRunConfiguration.testMocoActuators + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoTrack + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoTrack + + CMakeProjectManager.CMakeRunConfiguration.testMocoTrack + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoParameters + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoParameters + + CMakeProjectManager.CMakeRunConfiguration.testMocoParameters + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testRootSolver + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testRootSolver + + CMakeProjectManager.CMakeRunConfiguration.testRootSolver + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleSlidingMass + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleSlidingMass + + CMakeProjectManager.CMakeRunConfiguration.exampleSlidingMass + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleSlidingMassAdvanced + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleSlidingMassAdvanced + + CMakeProjectManager.CMakeRunConfiguration.exampleSlidingMassAdvanced + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleTracking + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleTracking + + CMakeProjectManager.CMakeRunConfiguration.exampleTracking + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleMarkerTracking + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleMarkerTracking + + CMakeProjectManager.CMakeRunConfiguration.exampleMarkerTracking + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleHangingMuscle + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleHangingMuscle + + CMakeProjectManager.CMakeRunConfiguration.exampleHangingMuscle + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + example2DWalkingMetabolics + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + example2DWalkingMetabolics + + CMakeProjectManager.CMakeRunConfiguration.example2DWalkingMetabolics + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + example2DWalking + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + example2DWalking + + CMakeProjectManager.CMakeRunConfiguration.example2DWalking + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleMocoInverse + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleMocoInverse + + CMakeProjectManager.CMakeRunConfiguration.exampleMocoInverse + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleMocoTrack + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleMocoTrack + + CMakeProjectManager.CMakeRunConfiguration.exampleMocoTrack + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleMocoCustomEffortGoal + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleMocoCustomEffortGoal + + CMakeProjectManager.CMakeRunConfiguration.exampleMocoCustomEffortGoal + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testFunctions + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testFunctions + + CMakeProjectManager.CMakeRunConfiguration.testFunctions + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleCustomImplicitAuxiliaryDynamics + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleCustomImplicitAuxiliaryDynamics + + CMakeProjectManager.CMakeRunConfiguration.exampleCustomImplicitAuxiliaryDynamics + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testLiveIK + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testLiveIK - CMakeProjectManager.CMakeRunConfiguration.testFunctions + CMakeProjectManager.CMakeRunConfiguration.testLiveIK 3768 false true @@ -454,7 +1686,7 @@ testGCVSpline - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testGCVSpline @@ -510,7 +1742,7 @@ testSerialization - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testSerialization @@ -566,7 +1798,7 @@ testStorage - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testStorage @@ -622,7 +1854,7 @@ testXsensDataReader - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testXsensDataReader @@ -678,7 +1910,7 @@ testStatesTrajectory - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testStatesTrajectory @@ -734,7 +1966,7 @@ testInverseKinematicsSolver - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testInverseKinematicsSolver @@ -790,7 +2022,7 @@ testInitState - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testInitState @@ -846,7 +2078,7 @@ testFunctionAdapter - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testFunctionAdapter @@ -902,7 +2134,7 @@ testFrames - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testFrames @@ -958,7 +2190,7 @@ testModelInterface - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testModelInterface @@ -1014,7 +2246,7 @@ testForces - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testForces @@ -1070,7 +2302,7 @@ testAssemblySolver - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testAssemblySolver @@ -1126,7 +2358,7 @@ testManager - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testManager @@ -1182,7 +2414,7 @@ testMomentArms - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testMomentArms @@ -1238,7 +2470,7 @@ testReportersWithModel - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testReportersWithModel @@ -1294,7 +2526,7 @@ testPoints - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testPoints @@ -1350,7 +2582,7 @@ testContactGeometry - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testContactGeometry @@ -1406,7 +2638,7 @@ testNestedModelComponents - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testNestedModelComponents @@ -1462,7 +2694,7 @@ testDataTable - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testDataTable @@ -1518,7 +2750,7 @@ testPrescribedForce - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testPrescribedForce @@ -1574,7 +2806,7 @@ testMuscleMetabolicsProbes - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testMuscleMetabolicsProbes @@ -1630,7 +2862,7 @@ testProbes - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testProbes @@ -1686,7 +2918,7 @@ testSimulationUtilities - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testSimulationUtilities @@ -1742,7 +2974,7 @@ testJoints - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testJoints @@ -1798,7 +3030,7 @@ testConstraints - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testConstraints @@ -1854,7 +3086,7 @@ testMuscleFirstOrderActivationDynamicModel - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testMuscleFirstOrderActivationDynamicModel @@ -1910,7 +3142,7 @@ testActuators - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testActuators @@ -1966,7 +3198,7 @@ testMuscleFixedWidthPennationModel - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testMuscleFixedWidthPennationModel @@ -2022,7 +3254,7 @@ testMuscles - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testMuscles @@ -2078,7 +3310,7 @@ testAPDMDataReader - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testAPDMDataReader @@ -2134,7 +3366,7 @@ testSerializableMuscleCurves - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testSerializableMuscleCurves @@ -2190,7 +3422,7 @@ testOutputReporter - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testOutputReporter @@ -2246,7 +3478,7 @@ testExternalLoads - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testExternalLoads @@ -2302,7 +3534,7 @@ testControllers - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testControllers @@ -2358,7 +3590,7 @@ testModelCopy - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testModelCopy @@ -2414,7 +3646,7 @@ testSerializeOpenSimObjects - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testSerializeOpenSimObjects @@ -2470,7 +3702,7 @@ testVisualization - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testVisualization @@ -2526,7 +3758,7 @@ exampleHopperDeviceAnswers - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 exampleHopperDeviceAnswers @@ -2582,7 +3814,7 @@ exampleHopperDevice - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 exampleHopperDevice @@ -2638,7 +3870,7 @@ example2DataTable - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 example2DataTable @@ -2694,7 +3926,7 @@ testComponentInterface - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testComponentInterface @@ -2750,7 +3982,7 @@ example1DataTable - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 example1DataTable @@ -2806,7 +4038,7 @@ exampleTRCFileAdapter - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 exampleTRCFileAdapter @@ -2862,7 +4094,7 @@ testComponents - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testComponents @@ -2918,7 +4150,7 @@ testAddComponents - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testAddComponents @@ -2974,7 +4206,7 @@ testControllerExample - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testControllerExample @@ -3030,7 +4262,7 @@ exampleController - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 exampleController @@ -3086,7 +4318,7 @@ testExampleMain - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testExampleMain @@ -3142,7 +4374,7 @@ exampleMain - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 exampleMain @@ -3198,7 +4430,7 @@ testOptimizationExample - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testOptimizationExample @@ -3254,7 +4486,7 @@ exampleOptimization - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 exampleOptimization @@ -3310,7 +4542,7 @@ testNCSpline - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testNCSpline @@ -3366,7 +4598,7 @@ testCustomActuatorExample - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testCustomActuatorExample @@ -3422,7 +4654,7 @@ exampleCustomActuator - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 exampleCustomActuator @@ -3478,7 +4710,7 @@ testMuscleExample - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testMuscleExample @@ -3534,7 +4766,7 @@ exampleMuscle - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 exampleMuscle @@ -3590,7 +4822,7 @@ testSimpleOptimizationExample - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testSimpleOptimizationExample @@ -3646,7 +4878,7 @@ exampleOptimizationSimple - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 exampleOptimizationSimple @@ -3702,7 +4934,7 @@ checkEnvironment - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 checkEnvironment @@ -3758,7 +4990,7 @@ testIterators - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testIterators @@ -3814,7 +5046,7 @@ testREADME - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testREADME @@ -3870,7 +5102,7 @@ testWrapping - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testWrapping @@ -3926,7 +5158,7 @@ testSmoothSegmentedFunctionFactory - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testSmoothSegmentedFunctionFactory @@ -3982,7 +5214,7 @@ testExampleLuxoMuscle - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testExampleLuxoMuscle @@ -4038,7 +5270,7 @@ testBuildDynamicWalker - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testBuildDynamicWalker @@ -4094,7 +5326,7 @@ testJointReactions - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testJointReactions @@ -4150,7 +5382,7 @@ testStaticOptimization - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testStaticOptimization @@ -4206,7 +5438,7 @@ testInducedAccelerations - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testInducedAccelerations @@ -4262,7 +5494,7 @@ testAnalyzeTool - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testAnalyzeTool @@ -4318,7 +5550,7 @@ testForward - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testForward @@ -4374,7 +5606,7 @@ testScale - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testScale @@ -4430,7 +5662,7 @@ testIK - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testIK @@ -4486,7 +5718,7 @@ testID - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testID @@ -4542,7 +5774,7 @@ testSTOFileAdapter - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testSTOFileAdapter @@ -4598,7 +5830,7 @@ testCMCSingleMuscle - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testCMCSingleMuscle @@ -4654,7 +5886,7 @@ testCMCEMGDrivenArm_Thelen - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testCMCEMGDrivenArm_Thelen @@ -4710,7 +5942,7 @@ testCMCTwoMusclesOnBlock - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testCMCTwoMusclesOnBlock @@ -4766,7 +5998,7 @@ testCMCEMGDrivenArm_Millard - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testCMCEMGDrivenArm_Millard @@ -4822,7 +6054,7 @@ testCMCArm26_Millard - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testCMCArm26_Millard @@ -4878,7 +6110,7 @@ testCMCGait10dof18musc - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testCMCGait10dof18musc @@ -4934,7 +6166,7 @@ testCMCSingleRigidTendonMuscle - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testCMCSingleRigidTendonMuscle @@ -4990,7 +6222,7 @@ testCMCWithControlConstraintsGait2354 - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testCMCWithControlConstraintsGait2354 @@ -5046,7 +6278,7 @@ testCMCWithControlConstraintsRunningModel - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testCMCWithControlConstraintsRunningModel @@ -5102,7 +6334,7 @@ testCMCArm26_Thelen - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testCMCArm26_Thelen @@ -5158,7 +6390,7 @@ testMarkerData - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testMarkerData @@ -5214,7 +6446,7 @@ testRRA - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testRRA @@ -5270,7 +6502,7 @@ opensense - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 opensense @@ -5326,7 +6558,7 @@ testOpenSense - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testOpenSense @@ -5382,7 +6614,7 @@ opensim-cmd - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 opensim-cmd @@ -5438,7 +6670,7 @@ testCommandLineInterface - /home/none/opensim-core-joris-build + /home/none/opensim/interpolation/RelWithDebInfo-build -1 testCommandLineInterface @@ -5451,7 +6683,287 @@ false true - 95 + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testWrappingMath + + + /home/none/opensim/interpolation/RelWithDebInfo-build + 2 + + testWrappingMath + + CMakeProjectManager.CMakeRunConfiguration.testWrappingMath + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testTableProcessor + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testTableProcessor + + CMakeProjectManager.CMakeRunConfiguration.testTableProcessor + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testModelProcessor + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testModelProcessor + + CMakeProjectManager.CMakeRunConfiguration.testModelProcessor + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testDeGrooteFregly2016Muscle + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testDeGrooteFregly2016Muscle + + CMakeProjectManager.CMakeRunConfiguration.testDeGrooteFregly2016Muscle + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoContact + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoContact + + CMakeProjectManager.CMakeRunConfiguration.testMocoContact + 3768 + false + true + false + false + true + + 122 diff --git a/OpenSim/Simulation/Model/Blankevoort1991Ligament.h b/OpenSim/Simulation/Model/Blankevoort1991Ligament.h index 4177aa704c..4ac92b6d27 100644 --- a/OpenSim/Simulation/Model/Blankevoort1991Ligament.h +++ b/OpenSim/Simulation/Model/Blankevoort1991Ligament.h @@ -24,7 +24,9 @@ * -------------------------------------------------------------------------- */ #include -#include +//#include +#include +#include namespace OpenSim { diff --git a/OpenSim/Simulation/Model/FunctionBasedPath.cpp b/OpenSim/Simulation/Model/FunctionBasedPath.cpp index 202ae6d1ac..0ccd4d66fd 100644 --- a/OpenSim/Simulation/Model/FunctionBasedPath.cpp +++ b/OpenSim/Simulation/Model/FunctionBasedPath.cpp @@ -1,45 +1,204 @@ #include "FunctionBasedPath.h" +#include "Model.h" #include +#include using namespace std; using namespace OpenSim; using namespace SimTK; using SimTK::Vec3; -// Constructor -//FunctionBasedPath::Function() : -// GeometryPath() -//{ -// setAuthors("Joris Verhagen"); -// constructProperties(); - // create interplation object -// std::vector coords; -// for (OpenSim::Coordinate const& c : -// this->getModel().getComponentList()){ -// if (c.getMotionType() != OpenSim::Coordinate::MotionType::Coupled){ -// coords.push_back(&c); -// } -// } -// std::vector affecting_coords; -// Nonzero_conditions cond; -// SimTK::State st = this->getModel().initSystem(); -// for (Coordinate const* c : coords){ -// if(coord_affects_muscle(this,*c,st,cond)){ -// affecting_coords.push_back(c); -// } -// } -// std::vector nPoints(affecting_coords.size(),10); -// interp = Interpolate(this,std::move(affecting_coords),st,nPoints); -//} - -double FunctionBasedPath::getLength( const SimTK::State& s) const +FunctionBasedPath::FunctionBasedPath(){ + +} + +FunctionBasedPath::FunctionBasedPath(const int id){ + // Constructor for reading in information from file and creating + // an interpolation object based on that file + identity = id; + readContent(); +} + +FunctionBasedPath::FunctionBasedPath(PointBasedPath& pbp, int id){ + identity = id; + // Constructor for copying a PointBasedPath object and creating + // an interpolation object + vector coords; + vector affectingCoords; + Nonzero_conditions cond; + + // find all coordinates in the model + const Model modelConst = pbp.getModel(); + Model model = modelConst; + for (Coordinate const& c : model.getComponentList()){ + if (c.getMotionType() != Coordinate::MotionType::Coupled){ + coords.push_back(&c); + } + } + model.buildSystem(); + State& st = model.initializeState(); + + // find affecting coordinates for the muscle + for (Coordinate const* c : coords){ + if (coord_affects_muscle(pbp,*c,st,cond)){ + affectingCoords.push_back(c); + } + } + // create vector for number of interpolation points + vector nPoints(affectingCoords.size(),10); + // create interpolation object + interp = Interpolate(pbp,move(affectingCoords),st,nPoints); +} + +FunctionBasedPath::FunctionBasedPath(const PointBasedPath& pbp, int id){ + identity = id; + // Constructor for copying a PointBasedPath object and creating + // an interpolation object + vector coords; + vector affectingCoords; + Nonzero_conditions cond; + + // find all coordinates in the model + const Model modelConst = pbp.getModel(); + Model model = modelConst; + for (Coordinate const& c : model.getComponentList()){ + if (c.getMotionType() != Coordinate::MotionType::Coupled){ + coords.push_back(&c); + } + } + model.buildSystem(); + State& st = model.initializeState(); + + // find affecting coordinates for the muscle + for (Coordinate const* c : coords){ + if (coord_affects_muscle(pbp,*c,st,cond)){ + affectingCoords.push_back(c); + } + } + // create vector for number of interpolation points + vector nPoints(affectingCoords.size(),10); + // create interpolation object + interp = Interpolate(pbp,move(affectingCoords),st,nPoints); +} + +double FunctionBasedPath::getLength(const State& s) const { -// return interp.getLength(s); - return 0.0; + Interpolate interpCopy = interp; + return interpCopy.getLength(s); } -double FunctionBasedPath::getLengtheningSpeed( const State &s) const +void FunctionBasedPath::setLength(const State &s, double length) const { -// return interp.getLengtheningSpeed(s); - return 0.0; + setCacheVariableValue(s, _lengthCV, length); +} + +double FunctionBasedPath::getLengtheningSpeed(const State &s) const +{ + Interpolate interpCopy = interp; + return interpCopy.getLengtheningSpeed(s); +} + +void FunctionBasedPath::setLengtheningSpeed(const State &s, double speed) const +{ + setCacheVariableValue(s, _speedCV, speed); +} + +double FunctionBasedPath::computeMomentArm(const State& s, const Coordinate& aCoord) const +{ + if (!_maSolver) + const_cast(this)->_maSolver.reset(new MomentArmSolver(*_model)); + + return _maSolver->solve(s, aCoord, *this); +} + + +void FunctionBasedPath::printContent(){ + ofstream printFile; + string filename = {"FBP"+to_string(identity)+".xml"}; + printFile.open(filename); + printFile << identity << "\n"; + printFile << "\n"; + printFile << interp.getDimension() << "\n"; + printFile << "\n"; + + vector dS = interp.getdS(); + for (unsigned i=0; i evals = interp.getEvals(); + for (unsigned i=0; i coords; + vector dS; + vector evals; + + ifstream readFile; + string filename = {"FBP"+to_string(identity)+".xml"}; + readFile.open(filename,ios::in); + + if (readFile){ + string sLine; + // get identity + while(std::getline(readFile,sLine)){ + if (sLine == ""){ + break; + } + assert(identity == atof(sLine.c_str())); + } + // get dimension + while(std::getline(readFile,sLine)){ + if (sLine == ""){ + break; + } + dimension = atof(sLine.c_str()); + } + // get interpolation discretization data + string delimiter = "\t"; + while(std::getline(readFile,sLine)){ + if (sLine == ""){ + break; + } + size_t last = 0; + size_t next = 0; + int cnt = 0; + Discretization disc; + while ((next = sLine.find(delimiter,last)) != string::npos){ + if (cnt == 0){ + disc.begin = atof(sLine.substr(last,next-last).c_str()); + } + if (cnt == 1){ + disc.end = atof(sLine.substr(last,next-last).c_str()); + } + if (cnt == 2){ + disc.nPoints = atof(sLine.substr(last,next-last).c_str()); + } + last = next + 1; + cnt++; + } + disc.gridsize = atof(sLine.substr(last).c_str()); + dS.push_back(disc); + } + assert(dS.size() == dimension); + // get interpolation data + while(std::getline(readFile,sLine)){ + if (sLine == ""){ + break; + } + evals.push_back(atof(sLine.c_str())); + } + // NEED TO FIND THE AFFECTING COORDS OF THE CORRESPONDING MUSCLE + interp = Interpolate(coords,dS,evals); + } else { + cout << "Could not find file" << endl; + } } diff --git a/OpenSim/Simulation/Model/FunctionBasedPath.h b/OpenSim/Simulation/Model/FunctionBasedPath.h index cf6ad598b2..23df6b8326 100644 --- a/OpenSim/Simulation/Model/FunctionBasedPath.h +++ b/OpenSim/Simulation/Model/FunctionBasedPath.h @@ -2,7 +2,9 @@ #define OPENSIM_FUNCTIONBASED_PATH_H_ #include "GeometryPath.h" +#include "PointBasedPath.h" #include "Interpolate.h" +#include #ifdef SWIG #ifdef OSIMSIMULATION_API @@ -29,13 +31,29 @@ class OSIMSIMULATION_API FunctionBasedPath : public GeometryPath { // getLengtheningSpeed, SimTK::Stage::Velocity); private: -// Interpolate interp; + Interpolate interp; + int identity; public: -// FunctionBasedPath(); + // Default constructor + FunctionBasedPath(); + // Read data constructor + FunctionBasedPath(int id); + // Copy from PointBasedPath constructor + FunctionBasedPath(PointBasedPath& pbp, int id); + FunctionBasedPath(const PointBasedPath& pbp, int id); double getLength( const SimTK::State& s) const override; + void setLength( const SimTK::State& s, double length) const override; double getLengtheningSpeed( const SimTK::State& s) const override; + void setLengtheningSpeed( const SimTK::State& s, double speed) const override; + + double computeMomentArm(const SimTK::State &s, const Coordinate &aCoord) const override; + + void printContent(); + void readContent(); + void setIdentity( int id){identity = id;} + int getIdentity(){return identity;} }; } diff --git a/OpenSim/Simulation/Model/GeometryPath.cpp b/OpenSim/Simulation/Model/GeometryPath.cpp index 31f61d50ed..34fcf078ee 100644 --- a/OpenSim/Simulation/Model/GeometryPath.cpp +++ b/OpenSim/Simulation/Model/GeometryPath.cpp @@ -446,24 +446,15 @@ void GeometryPath::updateGeometry(const SimTK::State& s) const * * @return Total length of the path. */ -<<<<<<< HEAD //double GeometryPath::getLength( const SimTK::State& s) const //{ // computePath(s); // compute checks if path needs to be recomputed -// return( getCacheVariableValue(s, "length") ); +// return getCacheVariableValue(s, _lengthCV); +//} +//void GeometryPath::setLength( const SimTK::State& s, double length ) const +//{ +// setCacheVariableValue(s, _lengthCV, length); //} -======= -double GeometryPath::getLength( const SimTK::State& s) const -{ - computePath(s); // compute checks if path needs to be recomputed - return getCacheVariableValue(s, _lengthCV); -} ->>>>>>> origin/master - -void GeometryPath::setLength( const SimTK::State& s, double length ) const -{ - setCacheVariableValue(s, _lengthCV, length); -} void GeometryPath::setColor(const SimTK::State& s, const SimTK::Vec3& color) const { @@ -481,23 +472,15 @@ Vec3 GeometryPath::getColor(const SimTK::State& s) const * * @return lengthening speed of the path. */ -<<<<<<< HEAD //double GeometryPath::getLengtheningSpeed( const SimTK::State& s) const //{ // computeLengtheningSpeed(s); -// return getCacheVariableValue(s, "speed"); +// return getCacheVariableValue(s, _speedCV); +//} +//void GeometryPath::setLengtheningSpeed( const SimTK::State& s, double speed ) const +//{ +// setCacheVariableValue(s, _speedCV, speed); //} -======= -double GeometryPath::getLengtheningSpeed( const SimTK::State& s) const -{ - computeLengtheningSpeed(s); - return getCacheVariableValue(s, _speedCV); -} ->>>>>>> origin/master -void GeometryPath::setLengtheningSpeed( const SimTK::State& s, double speed ) const -{ - setCacheVariableValue(s, _speedCV, speed); -} void GeometryPath::setPreScaleLength( const SimTK::State& s, double length ) { _preScaleLength = length; @@ -1154,21 +1137,6 @@ calcLengthAfterPathComputation(const SimTK::State& s, return( length ); } -//_____________________________________________________________________________ -/* - * Compute the path's moment arms for specified coordinate. - * - * @param aCoord, the coordinate - */ -double GeometryPath:: -computeMomentArm(const SimTK::State& s, const Coordinate& aCoord) const -{ - if (!_maSolver) - const_cast(this)->_maSolver.reset(new MomentArmSolver(*_model)); - - return _maSolver->solve(s, aCoord, *this); -} - //_____________________________________________________________________________ // Override default implementation by object to intercept and fix the XML node // underneath the model to match current version. diff --git a/OpenSim/Simulation/Model/GeometryPath.h b/OpenSim/Simulation/Model/GeometryPath.h index b0219aeb7f..a4436a867d 100644 --- a/OpenSim/Simulation/Model/GeometryPath.h +++ b/OpenSim/Simulation/Model/GeometryPath.h @@ -80,6 +80,7 @@ OpenSim_DECLARE_ABSTRACT_OBJECT(GeometryPath, ModelComponent); "The wrap objects that are associated with this path"); // used for scaling tendon and fiber lengths +protected: double _preScaleLength; // Solver used to compute moment-arms. The GeometryPath owns this object, @@ -155,14 +156,14 @@ OpenSim_DECLARE_ABSTRACT_OBJECT(GeometryPath, ModelComponent); @see setDefaultColor() **/ SimTK::Vec3 getColor(const SimTK::State& s) const; - virtual double getLength( const SimTK::State& s) const = 0; - void setLength( const SimTK::State& s, double length) const; double getPreScaleLength( const SimTK::State& s) const; void setPreScaleLength( const SimTK::State& s, double preScaleLength); const Array& getCurrentPath( const SimTK::State& s) const; + virtual double getLength( const SimTK::State& s) const = 0; + virtual void setLength( const SimTK::State& s, double length) const = 0; virtual double getLengtheningSpeed(const SimTK::State& s) const = 0; - void setLengtheningSpeed( const SimTK::State& s, double speed ) const; + virtual void setLengtheningSpeed( const SimTK::State& s, double speed ) const = 0; /** get the path as PointForceDirections directions, which can be used to apply tension to bodies the points are connected to.*/ @@ -185,7 +186,7 @@ OpenSim_DECLARE_ABSTRACT_OBJECT(GeometryPath, ModelComponent); //-------------------------------------------------------------------------- // COMPUTATIONS //-------------------------------------------------------------------------- - virtual double computeMomentArm(const SimTK::State& s, const Coordinate& aCoord) const; + virtual double computeMomentArm(const SimTK::State& s, const Coordinate& aCoord) const = 0; //-------------------------------------------------------------------------- // SCALING @@ -223,7 +224,7 @@ OpenSim_DECLARE_ABSTRACT_OBJECT(GeometryPath, ModelComponent); void extendFinalizeFromProperties() override; -private: +protected: void computePath(const SimTK::State& s ) const; void computeLengtheningSpeed(const SimTK::State& s) const; diff --git a/OpenSim/Simulation/Model/Interpolate.cpp b/OpenSim/Simulation/Model/Interpolate.cpp index a2b48f6846..5334f773a1 100644 --- a/OpenSim/Simulation/Model/Interpolate.cpp +++ b/OpenSim/Simulation/Model/Interpolate.cpp @@ -15,30 +15,13 @@ int binomialCoefficient(int n, int k) { return binomialCoefficient(n-1, k-1) + binomialCoefficient(n-1, k); } -//////////////////// -// FUNCTIONS ADAM // -//////////////////// -// defer an action until the destruction of this wrapper -template -struct Defer final { - Callback cb; - Defer(Callback _cb) : cb{std::move(_cb)} { - } - Defer(Defer const&) = delete; - Defer(Defer&&) noexcept = default; - Defer& operator=(Defer const&) = delete; - Defer& operator=(Defer&&) = delete; - ~Defer() noexcept { - cb(); - } -}; -// factory function to Defer template Defer defer_action(Callback cb) { return Defer{std::move(cb)}; } -static bool coord_affects_muscle( - OpenSim::Muscle const& m, + +bool coord_affects_muscle( + OpenSim::PointBasedPath const& pbp, OpenSim::Coordinate const& c, SimTK::State& state, Nonzero_conditions& out) { @@ -57,7 +40,7 @@ static bool coord_affects_muscle( for (double v = start; v <= end; v += step) { c.setValue(state, v); - double ma = m.getGeometryPath().computeMomentArm(state, c); + double ma = pbp.computeMomentArm(state, c); if (std::abs(ma) > 0.001) { out.input_val = v; out.nonzero_ma = ma; @@ -70,11 +53,34 @@ static bool coord_affects_muscle( ////////////////// // CONSTRUCTORS // ////////////////// +Interpolate::Interpolate(){}; + +Interpolate::Interpolate(std::vector coordsIn, + std::vector dSIn, + std::vector evalsIn) + : dimension(dSIn.size()), + evals(evalsIn), + n(dimension,0), + u(dimension,0), + loc(dimension,0), + dS(dSIn), + coords(coordsIn) + { + std::vector dc_; + for (int i=0; i > discretizationIn, std::vector, double> > evalsPair) : discretization(discretizationIn), dimension(discretizationIn.size()), - evalsPair(evalsPair), n(dimension,0), u(dimension,0), loc(dimension,0) @@ -103,7 +109,7 @@ Interpolate::Interpolate(std::vector > discretizationIn, std::vector cnt(dimension,0); for (int i=0; i > discretizationIn, } } -Interpolate::Interpolate(OpenSim::Muscle const& m, +Interpolate::Interpolate(OpenSim::PointBasedPath const& gp, OpenSim::Coordinate const** cBegin, OpenSim::Coordinate const** cEnd, SimTK::State& st, @@ -138,8 +144,6 @@ Interpolate::Interpolate(OpenSim::Muscle const& m, assert(n > 0); assert(dimension == (int)n); - OpenSim::GeometryPath const& musc_path = m.getGeometryPath(); - // put all coordinate pointers in a vector to later unpack an incoming // state to a vector of coordinate values for (int i=0; i=0; x--){ if (cnt[x] != dS[x].nPoints-1){ @@ -211,11 +215,22 @@ Interpolate::Interpolate(OpenSim::Muscle const& m, } } -Interpolate::Interpolate(OpenSim::Muscle const& m, +//Interpolate::Interpolate(OpenSim::Muscle const& m, +// std::vector coords, +// SimTK::State& st, +// std::vector& discretizationNPoints) +// : Interpolate(m.getPointBasedPath(), +// &coords[0], +// &coords[coords.size()-1], +// st, +// discretizationNPoints) +// {} + +Interpolate::Interpolate(OpenSim::PointBasedPath const& pbp, std::vector coords, SimTK::State& st, std::vector& discretizationNPoints) - : Interpolate(m, + : Interpolate(pbp, &coords[0], &coords[coords.size()-1], st, @@ -229,7 +244,7 @@ Interpolate::Interpolate(OpenSim::Muscle const& m, double Interpolate::getInterp(const SimTK::State &s){ assert(coords.size() != 0); std::vector x; - for (int i=0; igetValue(s)); } return getInterp(x); @@ -276,8 +291,6 @@ double Interpolate::getInterp(const std::vector &x){ bool breakWhile = false; bool allTrue; double Beta = 1; -// int cnt=0; -// while (cnt < pow(dimension,4)){ while (discrLoopCnt[0] < 3){ Beta = 1; for (int i=0; i &x){ loc[i] = discrLoopCnt[i] + n[i]; } - z += getEvalFast()*Beta; + z += getEval()*Beta; // from the back to the front, check if we're already at the maximum iteration @@ -331,7 +344,7 @@ double Interpolate::getInterp(const std::vector &x){ double Interpolate::getInterpStruct(const SimTK::State &s){ assert(coords.size() != 0); std::vector x; - for (int i=0; igetValue(s)); } return getInterpStruct(x); @@ -375,7 +388,7 @@ double Interpolate::getInterpStruct(const std::vector &x){ loc[i] = discrLoopCnt[i] + n[i]; } - z += getEvalFast()*Beta; + z += getEval()*Beta; for (int x=dimension-1; x>=0; x--){ if (discrLoopCnt[x] != 2){ @@ -404,7 +417,7 @@ double Interpolate::getLengtheningSpeed(const SimTK::State& s){ double Interpolate::getInterpDer(const SimTK::State &s, int coordinate, double h){ assert(coords.size() != 0); std::vector x; - for (int i=0; igetValue(s)); } return getInterpDer(x,coordinate,h); @@ -428,7 +441,7 @@ double Interpolate::getInterpDer(const std::vector &x, int coordinate, d -double Interpolate::getEvalFast(){ +double Interpolate::getEval(){ // get the wrapping length evaluation given a vector 'loc' which contains, in // ascending dimension, the index in each dimension int factor = 1; @@ -445,286 +458,3 @@ double Interpolate::getEvalFast(){ assert(idx <= evals.size()); return evals[idx]; } - - -double Interpolate::getEval(){ - // get the wrapping length evaluation given a vector 'loc' which contains, in - // ascending dimension, the index in each dimension - for (int i=0; i u, - int order){ - // create the basis spline functions - for (int i=0; i betaArray; - betaArray.push_back(Bk[0] + Bk[1]); - betaArray.push_back(Bk[1]/3); - betaArray.push_back(Bk[3] + Bk[2]); - betaArray.push_back(-Bk[2]/3); - beta.push_back(betaArray); - } -} - - - -//double z, Beta; -//int discrLoopCnt = -1; -//for (int i=0; i<4; i++){ -// Beta = beta[coordinate][i]; -// for (int j=0; j x, int derivativeOrder){ -// // This is the main interpolation function -// // IN: x, a vector of points within the considered interpolation range -// // OUT: eval, the interpolated value -// vector n, pk, pkp1, pkm1, pkp2; -// vector u, d; -// vector> beta, m; -// double Beta0=1, Beta1=1, Beta2=1, Beta3=1, z=0; -// int order = 3; - -// // check size of input argument -// if (x.size() != dimension){ -// std::cout << "Interpolation state not equal to object's dimension" << std::endl; -// exit(EXIT_FAILURE); -// } - -// // get the index of the closest range value to the discretization point -// for (int i=0; i mArray; -// mArray.push_back(0.5*((getEval(pkp1) - getEval(pk))/ -// (discretization[i][n[i]+1] - discretization[i][n[i]]) + -// (getEval(pk) - getEval(pkm1))/ -// (discretization[i][n[i]] - discretization[i][n[i]-1]))); - -// pkp2 = pkp1; pkp2[i] += 1; -// mArray.push_back(0.5*((getEval(pkp2) - getEval(pkp1))/ -// (discretization[i][n[i]+2] - discretization[i][n[i]+1]) + -// (getEval(pkp1) - getEval(n))/ -// (discretization[i][n[i]+1] - discretization[i][n[i]]))); - -// m.push_back(mArray); -// } - -// for (int i=0; i> &beta, -// vector u, -// int order){ -//// // compute the derivatives of the basis spline function for evaluation of the -//// // derivative of the grid-frield -//// for (int i=0; i betaArray; -//// betaArray.push_back(Bk[0] + Bk[1]); -//// betaArray.push_back(Bk[1]/3); -//// betaArray.push_back(Bk[3] + Bk[2]); -//// betaArray.push_back(-Bk[2]/3); -//// beta.push_back(betaArray); -//// } -// for (int i=0; i betaArray; -// betaArray.push_back(6*pow(u[i],2) - 6*u[i]); -// betaArray.push_back(3*pow(u[i],2) - 4*u[i] + 1); -// betaArray.push_back(-6*pow(u[i],2) + 6*u[i]); -// betaArray.push_back(3*pow(u[i],2) - 2*u[i]); -// beta.push_back(betaArray); -// } -//} - - - -// for (int i=0; i betaArray; -// betaArray.push_back(2*pow(u[i],3) - 3*pow(u[i],2) + 1); -// betaArray.push_back(pow(u[i],3) - 2*pow(u[i],2) + u[i]); -// betaArray.push_back(-2*pow(u[i],3) + 3*pow(u[i],2)); -// betaArray.push_back(pow(u[i],3) - pow(u[i],2)); -// beta.push_back(betaArray); -// } - -// for (int i=0; i betaArray; -// betaArray.push_back(6*pow(u[i],2) - 6*u[i]); -// betaArray.push_back(3*pow(u[i],2) - 4*u[i] + 1); -// betaArray.push_back(-6*pow(u[i],2) + 6*u[i]); -// betaArray.push_back(3*pow(u[i],2) - 2*u[i]); -// beta.push_back(betaArray); -// } - - - - - - - - -// // get the index of the closest range value to the discretization point -// for (int i=0; i x[i];}); -// n[i] = std::distance(discretization[i].begin(), it)-1; -// } - -// // compute remaining fraction -// for (int i=0; i=0; x--){ -// if (discrLoopCnt[x] != 2){ -// discrLoopCnt[x] += 1; -// break; -// } -// if (discrLoopCnt[x] == 2){ -// for (int y=x; y #include -#include -#include +#include "PointBasedPath.h" +#include +//////////////////// +// FUNCTIONS ADAM // +//////////////////// +struct Discretization{ + double begin; + double end; + int nPoints; + double gridsize; +}; +struct Nonzero_conditions final { + double input_val; + double nonzero_ma; +}; + +// defer an action until the destruction of this wrapper +template +struct Defer final { + Callback cb; + Defer(Callback _cb) : cb{std::move(_cb)} { + } + Defer(Defer const&) = delete; + Defer(Defer&&) noexcept = default; + Defer& operator=(Defer const&) = delete; + Defer& operator=(Defer&&) = delete; + ~Defer() noexcept { + cb(); + } +}; +// factory function to Defer +template +Defer defer_action(Callback cb); + +bool coord_affects_muscle( + OpenSim::PointBasedPath const& pbp, + OpenSim::Coordinate const& c, + SimTK::State& state, + Nonzero_conditions& out); + +////////////////////////// +// ADDITIONAL FUNCTIONS // +////////////////////////// template void linspace(std::vector &linspaced, T start_in, T end_in, int num_in){ // from: https://stackoverflow.com/questions/27028226/python-linspace-in-c @@ -35,17 +76,6 @@ void linspace(std::vector &linspaced, T start_in, T end_in, int num_in){ linspaced.push_back(end); } -struct Discretization{ - double begin; - double end; - int nPoints; - double gridsize; -}; -struct Nonzero_conditions final { - double input_val; - double nonzero_ma; -}; - class Interpolate{ private: // dimension of the interpolation (e.g. two states -> 2D) @@ -53,14 +83,11 @@ class Interpolate{ // number of points considered in constructing the polynomial int nInterPoints = 4; int g = 1; - // order of the interpolation polynomial function -// int polyOrder = 5; // vector containing the orthogonal discretization vectors // e.g. disc[0] = xrange, disc[1] = yrange etc. std::vector> discretization; std::vector discSizes; // array containing the evaluations over the discretizations - std::vector,double>> evalsPair; std::vector evals; // vector containing index closest to discretization point std::vector n; @@ -80,10 +107,11 @@ class Interpolate{ // getting std::vector getRange(int i) {return discretization[i];} int getDimension() {return dimension;} + std::vector getdS() {return dS;} + std::vector getEvals() {return evals;} // template member functions double getEval(); - double getEvalFast(); double getInterp(const std::vector& x); double getInterp(const SimTK::State& s); @@ -96,18 +124,20 @@ class Interpolate{ double getInterpDer(const SimTK::State& s, int coordinate, double h=0.0001); double getLengtheningSpeed(const SimTK::State& s); - double interpCubicHermiteSpline(std::vector x, int derivativeOrder); - void computeBasisFunctions(std::vector u, int order); - void computeBasisFunctionsDerivatives(std::vector> &beta, - std::vector u, int order); + // EMPTY CONSTRUCTOR + explicit Interpolate(); + // READ DATA CONSTRUCTOR + explicit Interpolate(std::vector coordsIn, + std::vector dSIn, + std::vector evalsIn); - // CONSTRUCTOR FOR A NON-MUSCLE/COORDINATE INTERPOLATION + // CONSTRUCTOR FOR A NON-GEOMETRYPATH/COORDINATE INTERPOLATION explicit Interpolate(std::vector> discretizationIn, std::vector,double>> evalsPair); // N COORDINATES WITH GIVEN NPOINTS - explicit Interpolate(OpenSim::Muscle const& m, + explicit Interpolate(OpenSim::PointBasedPath const& pbp, OpenSim::Coordinate const** cBegin, OpenSim::Coordinate const** cEnd, SimTK::State& st, @@ -115,447 +145,16 @@ class Interpolate{ // VECTOR OF COORDINATES - explicit Interpolate(OpenSim::Muscle const& m, +// explicit Interpolate(OpenSim::Muscle const& m, +// std::vector coords, +// SimTK::State& st, +// std::vector& discretizationNPoints); + + explicit Interpolate(OpenSim::PointBasedPath const& pbp, std::vector coords, SimTK::State& st, std::vector& discretizationNPoints); -// // 1 COORDINATE -// explicit Interpolate(OpenSim::Muscle const& m, -// Coordinate const& c1, -// SimTK::State& st, -// vector& discretizationNPoints, -// bool smooth=false) -// : Interpolate(m, -// c1, -// c1, -// st, -// discretizationNPoints) {} }; #endif // INTERPOLATE_H - - - - - - - -// // 1 COORDINATE -// explicit Interpolate(OpenSim::Muscle const& m, -// Coordinate const& c1, -// SimTK::State& st, -// vector& discretizationNPoints, -// bool smooth=false) -// : Interpolate(m, -// c1, -// c1, -// st, -// discretizationNPoints) {} - -// // 2 COORDINATES -// explicit Interpolate(OpenSim::Muscle const& m, -// Coordinate const& c1, -// Coordinate const& c2, -// SimTK::State& st, -// vector& discretizationNPoints, -// bool smooth=false) -// : Interpolate(m, -// c1, -// c2, -// st, -// discretizationNPoints) {} - -// // 3 COORDINATES -// explicit Interpolate(OpenSim::Muscle const& m, -// Coordinate const& c1, -// Coordinate const& c2, -// Coordinate const& c3, -// SimTK::State& st, -// vector& discretizationNPoints, -// bool smooth=false) -// : Interpolate(m, -// c1, -// c3, -// st, -// discretizationNPoints) {} - -// // 4 COORDINATES -// explicit Interpolate(OpenSim::Muscle const& m, -// Coordinate const& c1, -// Coordinate const& c2, -// Coordinate const& c3, -// Coordinate const& c4, -// SimTK::State& st, -// vector& discretizationNPoints, -// bool smooth=false) -// : Interpolate(m, -// c1, -// c4, -// st, -// discretizationNPoints) {} - - - - -// // N COORDINATES WITH GIVEN DISCRETIZATION STRUCT -// explicit Interpolate(OpenSim::Muscle const& m, -// Coordinate const** cBegin, -// Coordinate const** cEnd, -// SimTK::State& st, -// vector& discretizationData) -// : dimension(discretizationData.size()), -// n(dimension,0), -// u(dimension,0), -// loc(dimension,0), -// dS(discretizationData) -// { -// std::ptrdiff_t n = cEnd-cBegin; -// assert(discretizationData.size() == (int)n); - -// GeometryPath const& musc_path = m.getGeometryPath(); - -// // just make it for using the old getInterp method -// vector dc_; -// for (int i=0; i cnt[dimension]; -// vector coordValues[dimension]; -// for (int i=0; i=0; x--){ -// if (cnt[x] != dS[x].nPoints-1){ -// cnt[x] += 1; -// break; -// } -// if (cnt[x] == dS[x].nPoints-1){ -// for (int y=x; y& discretizationData) -// : dimension(discretizationData.size()), -// n(dimension,0), -// u(dimension,0), -// loc(dimension,0), -// dS(discretizationData) -//{ -// assert(discretizationData.size() == 1); -// coords.push_back(c1); -// GeometryPath const& musc_path = m.getGeometryPath(); - -// // just make it for using the old getInterp method -// vector dc_; -// for (int i=0; i& discretizationData) -// : dimension(discretizationData.size()), -// n(dimension,0), -// u(dimension,0), -// loc(dimension,0), -// dS(discretizationData) -//{ -// assert(discretizationData.size() == 2); -// coords.push_back(c1); -// coords.push_back(c2); -// GeometryPath const& musc_path = m.getGeometryPath(); - -// // just make it for using the old getInterp method -// vector dc_; -// for (int i=0; i& discretizationNPoints, -// bool smooth=false) -// : dimension(discretizationNPoints.size()), -// n(dimension,0), -// u(dimension,0), -// loc(dimension,0) -//{ -// assert(discretizationNPoints.size() == 2); -// coords.push_back(c1); -// coords.push_back(c2); -// std::cout << "-------- CONSTRUCTOR CALLED --------" << std::endl; -// GeometryPath const& musc_path = m.getGeometryPath(); - -// // unlock coordinates -// bool c1_was_locked = c1.getLocked(st); -// c1.setLocked(st, false); -// auto unlock_c1 = defer_action([&] { c1.setLocked(st, c1_was_locked); }); -// double c1_initial_value = c1.getValue(st); -// auto reset_c1_val = defer_action([&] { c1.setValue(st, c1_initial_value); }); - -// bool c2_was_locked = c2.getLocked(st); -// c2.setLocked(st, false); -// auto unlock_c2 = defer_action([&] { c2.setLocked(st, c2_was_locked); }); -// double c2_initial_value = c2.getValue(st); -// auto reset_c2_val = defer_action([&] { c2.setValue(st, c2_initial_value); }); - -// // make discretization objects for interpolation class instance -// Discretization dc1, dc2; -// dc1.begin = c1.getRangeMin(); -// dc1.end = c1.getRangeMax(); -// dc1.nPoints = discretizationNPoints[0]; -// dc1.gridsize = (dc1.end-dc1.begin) / (dc1.nPoints-1); -// dc2.begin = c2.getRangeMin(); -// dc2.end = c2.getRangeMax(); -// dc2.nPoints = discretizationNPoints[1]; -// dc2.gridsize = (dc2.end-dc2.begin) / (dc2.nPoints-1); -// // push into discretization property vector -// dS.push_back(dc1); dS.push_back(dc2); - -// // check rms of error and possibly refine grid -// if (smooth){ -// std::cout << "-------- STARTING GRID SHAPING --------" << std::endl; -// // make it 6 points so we have enough room to sample inside. If it's -// // too large from user's input we throw away computation time, if it's -// // too small we cannot create sample points of which the surrounded -// // area does not exceed the min max of the coordinate -// for (int dim=0; dim> random_coords; -// vector samples; -// int num_of_points = 10; -// for (int sample=0; sample unif( -// dS[dim].begin+dS[dim].gridsize, -// dS[dim].end-2*dS[dim].gridsize); -// std::random_device rd; -// std::mt19937 gen(rd()); -// samples.push_back(unif(gen)); -// } -// random_coords.push_back(samples); -// } -// // include the total edge case as 'random' point -// samples.clear(); -// for (int dim=0; dim errors; -// for (int i=0; i dcVec; -// Discretization dc; -// for (int dim=0; dim unif(0,dc.gridsize); -// std::random_device rd; -// std::mt19937 gen(rd()); -// // we can overwrite [i][dim] and add a sampling from begin to end -// // as this lays in front or behind of random_coords[i][dim] -// random_coords[i][dim] += unif(gen); -// } -// // get approx -// Interpolate a = Interpolate(m,c1,c2,st,dcVec); -// double lengthInterp = a.getInterpStruct(random_coords[i]); -// std::cout << "interp: " << lengthInterp << std::endl; -// // get real -// c1.setValue(st,random_coords[i][0]); -// c2.setValue(st,random_coords[i][1]); -// double lengthReal = musc_path.getLength(st); -// std::cout << "real: " << lengthReal << std::endl; -// // get error value -// errors.push_back(std::abs(lengthInterp-lengthReal)/lengthReal); -// } -// RMS = *max_element(errors.begin(),errors.end()); -// std::cout << "nPoints: " << dS[0].nPoints << std::endl; -// std::cout << "RMS: " << RMS << std::endl; -// if (RMS < 0.001){ -// break; -// } else { -// for (int dim=0; dim dc_; -// for (int i=0; i diff --git a/OpenSim/Simulation/Model/Muscle.cpp b/OpenSim/Simulation/Model/Muscle.cpp index 3d1544109d..9747f81b51 100644 --- a/OpenSim/Simulation/Model/Muscle.cpp +++ b/OpenSim/Simulation/Model/Muscle.cpp @@ -26,7 +26,9 @@ //============================================================================= #include "Muscle.h" -#include "GeometryPath.h" +//#include "GeometryPath.h" +#include "PointBasedPath.h" +#include "FunctionBasedPath.h" #include "Model.h" #include diff --git a/OpenSim/Simulation/Model/PathActuator.h b/OpenSim/Simulation/Model/PathActuator.h index 56493d2f38..b489c9bd0a 100644 --- a/OpenSim/Simulation/Model/PathActuator.h +++ b/OpenSim/Simulation/Model/PathActuator.h @@ -24,7 +24,9 @@ * -------------------------------------------------------------------------- */ #include "Actuator.h" -#include "GeometryPath.h" +//#include "GeometryPath.h" +#include "PointBasedPath.h" +#include "FunctionBasedPath.h" //============================================================================= //============================================================================= @@ -50,6 +52,8 @@ class OSIMSIMULATION_API PathActuator : public ScalarActuator { //============================================================================= OpenSim_DECLARE_UNNAMED_PROPERTY(GeometryPath, "The set of points defining the path of the actuator."); + OpenSim_DECLARE_UNNAMED_PROPERTY(PointBasedPath, + "The set of points defining the path of the actuator but on a lower abstraction."); OpenSim_DECLARE_PROPERTY(optimal_force, double, "The maximum force this actuator can produce."); @@ -72,6 +76,10 @@ class OSIMSIMULATION_API PathActuator : public ScalarActuator { { return get_GeometryPath(); } bool hasGeometryPath() const override { return true;}; + PointBasedPath& updPointBasedPath() { return upd_PointBasedPath(); } + const PointBasedPath& getPointBasedPath() const + { return get_PointBasedPath();} + // OPTIMAL FORCE void setOptimalForce(double aOptimalForce); double getOptimalForce() const override; diff --git a/OpenSim/Simulation/Model/PathSpring.cpp b/OpenSim/Simulation/Model/PathSpring.cpp index e8046a6209..0beff29678 100644 --- a/OpenSim/Simulation/Model/PathSpring.cpp +++ b/OpenSim/Simulation/Model/PathSpring.cpp @@ -25,7 +25,9 @@ // INCLUDES //============================================================================= #include "PathSpring.h" -#include "GeometryPath.h" +//#include "GeometryPath.h" +#include "PointBasedPath.h" +#include "FunctionBasedPath.h" #include "PointForceDirection.h" //============================================================================= diff --git a/OpenSim/Simulation/Model/PointBasedPath.cpp b/OpenSim/Simulation/Model/PointBasedPath.cpp index 66c3a92b3a..2b2aa363df 100644 --- a/OpenSim/Simulation/Model/PointBasedPath.cpp +++ b/OpenSim/Simulation/Model/PointBasedPath.cpp @@ -15,14 +15,37 @@ using SimTK::Vec3; double PointBasedPath::getLength( const SimTK::State& s) const { -// computePath(s); -// return ( getCacheVariableValue(s, "length") ); - return 0.0; + computePath(s); + return getCacheVariableValue(s, _lengthCV); } +void PointBasedPath::setLength(const State &s, double length) const +{ + setCacheVariableValue(s, _lengthCV, length); +} + + double PointBasedPath::getLengtheningSpeed( const SimTK::State& s) const { -// computeLengtheningSpeed(s); -// return getCacheVariableValue(s, "speed"); - return 0.0; + computeLengtheningSpeed(s); + return getCacheVariableValue(s, _speedCV); +} + +void PointBasedPath::setLengtheningSpeed(const State &s, double speed) const +{ + setCacheVariableValue(s, _speedCV, speed); +} + +//_____________________________________________________________________________ +/* + * Compute the path's moment arms for specified coordinate. + * + * @param aCoord, the coordinate + */ +double PointBasedPath::computeMomentArm(const State& s, const Coordinate& aCoord) const +{ + if (!_maSolver) + const_cast(this)->_maSolver.reset(new MomentArmSolver(*_model)); + + return _maSolver->solve(s, aCoord, *this); } diff --git a/OpenSim/Simulation/Model/PointBasedPath.h b/OpenSim/Simulation/Model/PointBasedPath.h index b6060bddee..68ea6f28df 100644 --- a/OpenSim/Simulation/Model/PointBasedPath.h +++ b/OpenSim/Simulation/Model/PointBasedPath.h @@ -31,7 +31,11 @@ class OSIMSIMULATION_API PointBasedPath : public GeometryPath { // PointBasedPath(); double getLength( const SimTK::State& s) const override; + void setLength( const SimTK::State& s, double length) const override; double getLengtheningSpeed( const SimTK::State& s) const override; + void setLengtheningSpeed( const SimTK::State& s, double speed) const override; + + double computeMomentArm(const SimTK::State &s, const Coordinate &aCoord) const override; }; } diff --git a/OpenSim/Simulation/RegisterTypes_osimSimulation.cpp b/OpenSim/Simulation/RegisterTypes_osimSimulation.cpp index aa7d6b1362..22e4bd0df8 100644 --- a/OpenSim/Simulation/RegisterTypes_osimSimulation.cpp +++ b/OpenSim/Simulation/RegisterTypes_osimSimulation.cpp @@ -59,7 +59,8 @@ #include "Model/PathPointSet.h" #include "Model/ConditionalPathPoint.h" #include "Model/MovingPathPoint.h" -//#include "Model/GeometryPath.h" + +#include "Model/GeometryPath.h" #include "Model/PointBasedPath.h" #include "Model/FunctionBasedPath.h" @@ -191,9 +192,10 @@ OSIMSIMULATION_API void RegisterTypes_osimSimulation() Object::registerType( LineGeometry()); Object::registerType( FrameGeometry()); Object::registerType( Arrow()); + // Object::registerType( GeometryPath()); - Object::registerType( PointBasedPath()); - Object::registerType( FunctionBasedPath()); + Object::registerType( OpenSim::PointBasedPath()); + Object::registerType( OpenSim::FunctionBasedPath()); Object::registerType( ControlSet() ); Object::registerType( ControlConstant() ); diff --git a/OpenSim/Simulation/osimSimulation.h b/OpenSim/Simulation/osimSimulation.h index e2f3fc5a59..7113e2f36c 100644 --- a/OpenSim/Simulation/osimSimulation.h +++ b/OpenSim/Simulation/osimSimulation.h @@ -52,10 +52,12 @@ #include "Model/PathPointSet.h" #include "Model/ConditionalPathPoint.h" #include "Model/MovingPathPoint.h" + #include "Model/GeometryPath.h" #include "Model/PointBasedPath.h" #include "Model/FunctionBasedPath.h" #include "Model/Interpolate.h" + #include "Model/PrescribedForce.h" #include "Model/PointToPointSpring.h" #include "Model/ExpressionBasedPointToPointForce.h" From aa760d71c4f1785dd567b81110ca3b0c0bb82f25 Mon Sep 17 00:00:00 2001 From: joris997 Date: Tue, 16 Mar 2021 09:30:27 +0100 Subject: [PATCH 06/36] finally integrated interpolator --- CMakeLists.txt.user | 6 +- .../Simulation/Model/FunctionBasedPath.cpp | 140 ++++++++++-------- OpenSim/Simulation/Model/FunctionBasedPath.h | 18 +-- OpenSim/Simulation/Model/GeometryPath.h | 4 + OpenSim/Simulation/Model/Interpolate.cpp | 17 +-- OpenSim/Simulation/Model/Interpolate.h | 9 +- OpenSim/Simulation/Model/PathActuator.cpp | 2 +- OpenSim/Simulation/Model/PointBasedPath.cpp | 9 +- OpenSim/Simulation/Model/PointBasedPath.h | 8 +- 9 files changed, 112 insertions(+), 101 deletions(-) diff --git a/CMakeLists.txt.user b/CMakeLists.txt.user index b071a55008..389083e23c 100644 --- a/CMakeLists.txt.user +++ b/CMakeLists.txt.user @@ -1,6 +1,6 @@ - + EnvironmentId @@ -79,9 +79,9 @@ /home/none/opensim/interpolation/RelWithDebInfo-build - + -j 2 - all + install true CMake Build diff --git a/OpenSim/Simulation/Model/FunctionBasedPath.cpp b/OpenSim/Simulation/Model/FunctionBasedPath.cpp index 0ccd4d66fd..3e48f2edda 100644 --- a/OpenSim/Simulation/Model/FunctionBasedPath.cpp +++ b/OpenSim/Simulation/Model/FunctionBasedPath.cpp @@ -1,6 +1,5 @@ #include "FunctionBasedPath.h" #include "Model.h" -#include #include using namespace std; @@ -8,83 +7,85 @@ using namespace OpenSim; using namespace SimTK; using SimTK::Vec3; +////////////////// +// CONSTRUCTORS // +////////////////// FunctionBasedPath::FunctionBasedPath(){ - + constructProperty_identity(0); +// constructProperty_coords(nullptr); + + readContent(); } -FunctionBasedPath::FunctionBasedPath(const int id){ +FunctionBasedPath::FunctionBasedPath(int id){ // Constructor for reading in information from file and creating // an interpolation object based on that file - identity = id; + constructProperty_identity(0); +// constructProperty_coords(nullptr); + + upd_identity() = id; readContent(); } -FunctionBasedPath::FunctionBasedPath(PointBasedPath& pbp, int id){ - identity = id; - // Constructor for copying a PointBasedPath object and creating - // an interpolation object - vector coords; - vector affectingCoords; - Nonzero_conditions cond; - // find all coordinates in the model - const Model modelConst = pbp.getModel(); - Model model = modelConst; - for (Coordinate const& c : model.getComponentList()){ - if (c.getMotionType() != Coordinate::MotionType::Coupled){ - coords.push_back(&c); - } - } - model.buildSystem(); - State& st = model.initializeState(); +FunctionBasedPath::FunctionBasedPath(const Model& model, + const PointBasedPath& pbp, + int id){ + constructProperty_identity(0); +// constructProperty_coords(nullptr); - // find affecting coordinates for the muscle - for (Coordinate const* c : coords){ - if (coord_affects_muscle(pbp,*c,st,cond)){ - affectingCoords.push_back(c); - } - } - // create vector for number of interpolation points - vector nPoints(affectingCoords.size(),10); - // create interpolation object - interp = Interpolate(pbp,move(affectingCoords),st,nPoints); -} + upd_identity() = id; + upd_Appearance() = pbp.get_Appearance(); + setPathPointSet(pbp.getPathPointSet()); + setPathWrapSet(pbp.getWrapSet()); -FunctionBasedPath::FunctionBasedPath(const PointBasedPath& pbp, int id){ - identity = id; // Constructor for copying a PointBasedPath object and creating // an interpolation object - vector coords; - vector affectingCoords; + vector coords; + vector affectingCoords; Nonzero_conditions cond; + Model* modelClone = model.clone(); + State& stClone = modelClone->initSystem(); + modelClone->equilibrateMuscles(stClone); + modelClone->realizeVelocity(stClone); + // find all coordinates in the model - const Model modelConst = pbp.getModel(); - Model model = modelConst; - for (Coordinate const& c : model.getComponentList()){ + for (Coordinate const& c : modelClone->getComponentList()){ if (c.getMotionType() != Coordinate::MotionType::Coupled){ coords.push_back(&c); } } - model.buildSystem(); - State& st = model.initializeState(); // find affecting coordinates for the muscle for (Coordinate const* c : coords){ - if (coord_affects_muscle(pbp,*c,st,cond)){ + if (coord_affects_muscle(pbp,*c,stClone,cond)){ affectingCoords.push_back(c); + std::cout << "affecting coord: " << c->getName() << std::endl; } } // create vector for number of interpolation points - vector nPoints(affectingCoords.size(),10); + vector nPoints(affectingCoords.size(),5); // create interpolation object - interp = Interpolate(pbp,move(affectingCoords),st,nPoints); + interp = Interpolate(pbp,move(affectingCoords),stClone,nPoints); + +// upd_coords() = affectingCoords; } + +///////////////////// +// REGULAR METHODS // +///////////////////// double FunctionBasedPath::getLength(const State& s) const { - Interpolate interpCopy = interp; - return interpCopy.getLength(s); +// Interpolate interpCopy = interp; + return interp.getLength(s); + +// computePath(s); + +// std::cout << "interp: " << interpCopy.getLength(s); +// std::cout << "\tnormal: " << getCacheVariableValue(s, _lengthCV) << "\n"; +// return getCacheVariableValue(s, _lengthCV); } void FunctionBasedPath::setLength(const State &s, double length) const @@ -94,8 +95,10 @@ void FunctionBasedPath::setLength(const State &s, double length) const double FunctionBasedPath::getLengtheningSpeed(const State &s) const { - Interpolate interpCopy = interp; - return interpCopy.getLengtheningSpeed(s); +// Interpolate interpCopy = interp; +// return interpCopy.getLengtheningSpeed(s); + computeLengtheningSpeed(s); + return getCacheVariableValue(s, _speedCV); } void FunctionBasedPath::setLengtheningSpeed(const State &s, double speed) const @@ -112,11 +115,8 @@ double FunctionBasedPath::computeMomentArm(const State& s, const Coordinate& aCo } -void FunctionBasedPath::printContent(){ - ofstream printFile; - string filename = {"FBP"+to_string(identity)+".xml"}; - printFile.open(filename); - printFile << identity << "\n"; +void FunctionBasedPath::printContent(std::ofstream& printFile) const{ + printFile << get_identity() << "\n"; printFile << "\n"; printFile << interp.getDimension() << "\n"; printFile << "\n"; @@ -128,6 +128,12 @@ void FunctionBasedPath::printContent(){ } printFile << "\n"; +// auto coords = interp.getCoords(); +// for (unsigned i=0; igetName() << "\n"; +// } +// printFile << "\n"; + vector evals = interp.getEvals(); for (unsigned i=0; i coords; +void FunctionBasedPath::readContent() { +// vector coordsNames; + vector coords; vector dS; vector evals; ifstream readFile; - string filename = {"FBP"+to_string(identity)+".xml"}; + // might change to tsv (tab/column delimeted file) + string filename = {"FBP"+to_string(get_identity())+".xml"}; readFile.open(filename,ios::in); if (readFile){ @@ -153,14 +160,14 @@ void FunctionBasedPath::readContent(){ if (sLine == ""){ break; } - assert(identity == atof(sLine.c_str())); + assert(get_identity() == atof(sLine.c_str())); } // get dimension while(std::getline(readFile,sLine)){ if (sLine == ""){ break; } - dimension = atof(sLine.c_str()); + int dimension = atof(sLine.c_str()); } // get interpolation discretization data string delimiter = "\t"; @@ -189,6 +196,13 @@ void FunctionBasedPath::readContent(){ dS.push_back(disc); } assert(dS.size() == dimension); +// // get affected coordinates +// while(std::getline(readFile,sLine)){ +// if (sLine ==""){ +// break; +// } +// coordsNames.push_back(atof(sLine.c_str())); +// } // get interpolation data while(std::getline(readFile,sLine)){ if (sLine == ""){ @@ -197,6 +211,14 @@ void FunctionBasedPath::readContent(){ evals.push_back(atof(sLine.c_str())); } // NEED TO FIND THE AFFECTING COORDS OF THE CORRESPONDING MUSCLE +// for (unsigned i=0; i()){ +// if (co.getName() == coordsNames[i]){ +// coords.push_back(co); +// break; +// } +// } +// } interp = Interpolate(coords,dS,evals); } else { cout << "Could not find file" << endl; diff --git a/OpenSim/Simulation/Model/FunctionBasedPath.h b/OpenSim/Simulation/Model/FunctionBasedPath.h index 23df6b8326..8100f73049 100644 --- a/OpenSim/Simulation/Model/FunctionBasedPath.h +++ b/OpenSim/Simulation/Model/FunctionBasedPath.h @@ -5,6 +5,7 @@ #include "PointBasedPath.h" #include "Interpolate.h" #include +#include #ifdef SWIG #ifdef OSIMSIMULATION_API @@ -25,14 +26,11 @@ class OSIMSIMULATION_API FunctionBasedPath : public GeometryPath { //class OSIMSIMULATION_API FunctionBasedPath : public GeometryPath { OpenSim_DECLARE_CONCRETE_OBJECT(FunctionBasedPath, GeometryPath); -// OpenSim_DECLARE_OUTPUT(length, double, -// getLength, SimTK::Stage::Position); -// OpenSim_DECLARE_OUTPUT(lengthening_speed, double, -// getLengtheningSpeed, SimTK::Stage::Velocity); + OpenSim_DECLARE_PROPERTY(identity,int,"Identity related to printed file"); +// OpenSim_DECLARE_PROPERTY(coords,std::vector,"Coordinates related to the GeometryPath"); private: Interpolate interp; - int identity; public: // Default constructor @@ -40,8 +38,7 @@ class OSIMSIMULATION_API FunctionBasedPath : public GeometryPath { // Read data constructor FunctionBasedPath(int id); // Copy from PointBasedPath constructor - FunctionBasedPath(PointBasedPath& pbp, int id); - FunctionBasedPath(const PointBasedPath& pbp, int id); + FunctionBasedPath(const Model& model, const PointBasedPath& pbp, int id); double getLength( const SimTK::State& s) const override; void setLength( const SimTK::State& s, double length) const override; @@ -50,10 +47,11 @@ class OSIMSIMULATION_API FunctionBasedPath : public GeometryPath { double computeMomentArm(const SimTK::State &s, const Coordinate &aCoord) const override; - void printContent(); + void printContent(std::ofstream& printFile) const; void readContent(); - void setIdentity( int id){identity = id;} - int getIdentity(){return identity;} + void setIdentity( int id) {upd_identity() = id;} + int getIdentity() const {return get_identity();} + Interpolate getInterpolate() const {return interp;} }; } diff --git a/OpenSim/Simulation/Model/GeometryPath.h b/OpenSim/Simulation/Model/GeometryPath.h index a4436a867d..f20d702d30 100644 --- a/OpenSim/Simulation/Model/GeometryPath.h +++ b/OpenSim/Simulation/Model/GeometryPath.h @@ -109,6 +109,8 @@ OpenSim_DECLARE_ABSTRACT_OBJECT(GeometryPath, ModelComponent); PathWrapSet& updWrapSet() { return upd_PathWrapSet(); } void addPathWrap(WrapObject& aWrapObject); + void setPathPointSet(const PathPointSet& pps) { upd_PathPointSet() = pps; } + void setPathWrapSet(const PathWrapSet& pws) { upd_PathWrapSet() = pws; } //-------------------------------------------------------------------------- // UTILITY //-------------------------------------------------------------------------- @@ -160,6 +162,8 @@ OpenSim_DECLARE_ABSTRACT_OBJECT(GeometryPath, ModelComponent); void setPreScaleLength( const SimTK::State& s, double preScaleLength); const Array& getCurrentPath( const SimTK::State& s) const; + /** Get methods are made non-const as when the GeometryPath is a FunctionBased- + Path, the Interpolation object inside of it changes after every evaluation **/ virtual double getLength( const SimTK::State& s) const = 0; virtual void setLength( const SimTK::State& s, double length) const = 0; virtual double getLengtheningSpeed(const SimTK::State& s) const = 0; diff --git a/OpenSim/Simulation/Model/Interpolate.cpp b/OpenSim/Simulation/Model/Interpolate.cpp index 5334f773a1..27aa3cfade 100644 --- a/OpenSim/Simulation/Model/Interpolate.cpp +++ b/OpenSim/Simulation/Model/Interpolate.cpp @@ -168,6 +168,7 @@ Interpolate::Interpolate(OpenSim::PointBasedPath const& gp, dc.end = c.getRangeMax(); dc.nPoints = discretizationNPoints[i]; dc.gridsize = (dc.end-dc.begin) / dc.nPoints; + std::cout << "dc: " << dc.begin << ", " << dc.end << ", " << dc.nPoints << ", " << dc.gridsize << std::endl; dS.push_back(dc); } // slightly extend the bound for accurate interpolation on the edges @@ -182,6 +183,7 @@ Interpolate::Interpolate(OpenSim::PointBasedPath const& gp, for (int i=0; i cnt(dimension); std::vector coordValues(dimension); for (int i=0; i=0; x--){ if (cnt[x] != dS[x].nPoints-1){ @@ -215,17 +221,6 @@ Interpolate::Interpolate(OpenSim::PointBasedPath const& gp, } } -//Interpolate::Interpolate(OpenSim::Muscle const& m, -// std::vector coords, -// SimTK::State& st, -// std::vector& discretizationNPoints) -// : Interpolate(m.getPointBasedPath(), -// &coords[0], -// &coords[coords.size()-1], -// st, -// discretizationNPoints) -// {} - Interpolate::Interpolate(OpenSim::PointBasedPath const& pbp, std::vector coords, SimTK::State& st, diff --git a/OpenSim/Simulation/Model/Interpolate.h b/OpenSim/Simulation/Model/Interpolate.h index bcbf2c54bb..faea52832d 100644 --- a/OpenSim/Simulation/Model/Interpolate.h +++ b/OpenSim/Simulation/Model/Interpolate.h @@ -105,10 +105,11 @@ class Interpolate{ public: // getting - std::vector getRange(int i) {return discretization[i];} - int getDimension() {return dimension;} - std::vector getdS() {return dS;} - std::vector getEvals() {return evals;} + std::vector getRange(int i) const {return discretization[i];} + int getDimension() const {return dimension;} + std::vector getdS() const {return dS;} +// std::vector getCoords() const {return coords;} + std::vector getEvals() const {return evals;} // template member functions double getEval(); diff --git a/OpenSim/Simulation/Model/PathActuator.cpp b/OpenSim/Simulation/Model/PathActuator.cpp index 633a291d4b..ed95c7e2c6 100644 --- a/OpenSim/Simulation/Model/PathActuator.cpp +++ b/OpenSim/Simulation/Model/PathActuator.cpp @@ -62,7 +62,7 @@ void PathActuator::setNull() */ void PathActuator::constructProperties() { -// constructProperty_GeometryPath(GeometryPath()); + constructProperty_GeometryPath(PointBasedPath()); constructProperty_optimal_force(1.0); } diff --git a/OpenSim/Simulation/Model/PointBasedPath.cpp b/OpenSim/Simulation/Model/PointBasedPath.cpp index 2b2aa363df..c8128731d1 100644 --- a/OpenSim/Simulation/Model/PointBasedPath.cpp +++ b/OpenSim/Simulation/Model/PointBasedPath.cpp @@ -6,12 +6,9 @@ using namespace SimTK; using SimTK::Vec3; // Constructor -//PointBasedPath::PointBasedPath() : -// GeometryPath() -//{ -// setAuthors("Joris Verhagen"); -// constructProperties(); -//} +PointBasedPath::PointBasedPath() : GeometryPath(){ + +} double PointBasedPath::getLength( const SimTK::State& s) const { diff --git a/OpenSim/Simulation/Model/PointBasedPath.h b/OpenSim/Simulation/Model/PointBasedPath.h index 68ea6f28df..ae364825ab 100644 --- a/OpenSim/Simulation/Model/PointBasedPath.h +++ b/OpenSim/Simulation/Model/PointBasedPath.h @@ -19,16 +19,10 @@ class WrapResult; class WrapObject; class OSIMSIMULATION_API PointBasedPath : public GeometryPath { -//class OSIMSIMULATION_API PointBasedPath : public GeometryPath { OpenSim_DECLARE_CONCRETE_OBJECT(PointBasedPath, GeometryPath); -// OpenSim_DECLARE_OUTPUT(length, double, -// getLength, SimTK::Stage::Position); -// OpenSim_DECLARE_OUTPUT(lengthening_speed, double, -// getLengtheningSpeed, SimTK::Stage::Velocity); - public: -// PointBasedPath(); + PointBasedPath(); double getLength( const SimTK::State& s) const override; void setLength( const SimTK::State& s, double length) const override; From 3b4b304f95bd6b86f5c2ff1e317c2421238b7832 Mon Sep 17 00:00:00 2001 From: joris997 Date: Mon, 12 Apr 2021 12:43:42 +0200 Subject: [PATCH 07/36] updates to interpolation --- CMakeLists.txt.user | 2 +- .../Simulation/Model/FunctionBasedPath.cpp | 28 ++++++---- OpenSim/Simulation/Model/FunctionBasedPath.h | 4 +- OpenSim/Simulation/Model/Interpolate.cpp | 56 ++++++++++++++----- OpenSim/Simulation/Model/Interpolate.h | 5 +- 5 files changed, 67 insertions(+), 28 deletions(-) diff --git a/CMakeLists.txt.user b/CMakeLists.txt.user index 389083e23c..15dcb5a2ec 100644 --- a/CMakeLists.txt.user +++ b/CMakeLists.txt.user @@ -1,6 +1,6 @@ - + EnvironmentId diff --git a/OpenSim/Simulation/Model/FunctionBasedPath.cpp b/OpenSim/Simulation/Model/FunctionBasedPath.cpp index 3e48f2edda..0eace21df4 100644 --- a/OpenSim/Simulation/Model/FunctionBasedPath.cpp +++ b/OpenSim/Simulation/Model/FunctionBasedPath.cpp @@ -10,6 +10,13 @@ using SimTK::Vec3; ////////////////// // CONSTRUCTORS // ////////////////// + +//FunctionBasedPath::FunctionBasedPath(FunctionBasedPath &fbp){ +// std::lock_guard> fbp.mtx; +// interp = fbp.interp; +// mtx = fbp.mtx; +//} + FunctionBasedPath::FunctionBasedPath(){ constructProperty_identity(0); // constructProperty_coords(nullptr); @@ -78,13 +85,12 @@ FunctionBasedPath::FunctionBasedPath(const Model& model, ///////////////////// double FunctionBasedPath::getLength(const State& s) const { -// Interpolate interpCopy = interp; +// std::lock_guard guard(mtx); return interp.getLength(s); -// computePath(s); - // std::cout << "interp: " << interpCopy.getLength(s); // std::cout << "\tnormal: " << getCacheVariableValue(s, _lengthCV) << "\n"; +// computePath(s); // return getCacheVariableValue(s, _lengthCV); } @@ -95,10 +101,10 @@ void FunctionBasedPath::setLength(const State &s, double length) const double FunctionBasedPath::getLengtheningSpeed(const State &s) const { -// Interpolate interpCopy = interp; -// return interpCopy.getLengtheningSpeed(s); - computeLengtheningSpeed(s); - return getCacheVariableValue(s, _speedCV); + return interp.getLengtheningSpeed(s); + +// computeLengtheningSpeed(s); +// return getCacheVariableValue(s, _speedCV); } void FunctionBasedPath::setLengtheningSpeed(const State &s, double speed) const @@ -108,10 +114,10 @@ void FunctionBasedPath::setLengtheningSpeed(const State &s, double speed) const double FunctionBasedPath::computeMomentArm(const State& s, const Coordinate& aCoord) const { - if (!_maSolver) - const_cast(this)->_maSolver.reset(new MomentArmSolver(*_model)); - - return _maSolver->solve(s, aCoord, *this); + return interp.getInterpDer(s,aCoord); +// if (!_maSolver) +// const_cast(this)->_maSolver.reset(new MomentArmSolver(*_model)); +// return _maSolver->solve(s, aCoord, *this); } diff --git a/OpenSim/Simulation/Model/FunctionBasedPath.h b/OpenSim/Simulation/Model/FunctionBasedPath.h index 8100f73049..3786aee415 100644 --- a/OpenSim/Simulation/Model/FunctionBasedPath.h +++ b/OpenSim/Simulation/Model/FunctionBasedPath.h @@ -6,6 +6,7 @@ #include "Interpolate.h" #include #include +#include #ifdef SWIG #ifdef OSIMSIMULATION_API @@ -30,7 +31,8 @@ class OSIMSIMULATION_API FunctionBasedPath : public GeometryPath { // OpenSim_DECLARE_PROPERTY(coords,std::vector,"Coordinates related to the GeometryPath"); private: - Interpolate interp; + mutable Interpolate interp; +// mutable std::mutex mtx; public: // Default constructor diff --git a/OpenSim/Simulation/Model/Interpolate.cpp b/OpenSim/Simulation/Model/Interpolate.cpp index 27aa3cfade..5cb15cc017 100644 --- a/OpenSim/Simulation/Model/Interpolate.cpp +++ b/OpenSim/Simulation/Model/Interpolate.cpp @@ -2,7 +2,7 @@ template void printVector(std::vector x){ - for (int i=0; i x; for (unsigned i=0; igetValue(s)); } +// printVector(x); return getInterp(x); } double Interpolate::getInterp(const std::vector &x){ @@ -267,10 +281,15 @@ double Interpolate::getInterp(const std::vector &x){ // compute the polynomials (already evaluated) for (int i=0; i &x){ breakWhile = true; } } +// std::cout << "z: " << z << std::endl; return z; } @@ -401,21 +421,29 @@ double Interpolate::getInterpStruct(const std::vector &x){ } +double Interpolate::getInterpDer(const SimTK::State &s, const OpenSim::Coordinate &aCoord){ + for (unsigned i=0; igetName() == aCoord.getName()){ + return getInterpDer(s,i); + } + } + return 0.0; +} double Interpolate::getLengtheningSpeed(const SimTK::State& s){ double lengtheningSpeed = 0; for (int i=0; igetSpeedValue(s); } return lengtheningSpeed; } -double Interpolate::getInterpDer(const SimTK::State &s, int coordinate, double h){ +double Interpolate::getInterpDer(const SimTK::State &s, int coordinate){ assert(coords.size() != 0); std::vector x; for (unsigned i=0; igetValue(s)); } - return getInterpDer(x,coordinate,h); + return getInterpDer(x,coordinate); } double Interpolate::getInterpDer(const std::vector &x, int coordinate, double h){ assert(x.size() == dimension); @@ -426,10 +454,12 @@ double Interpolate::getInterpDer(const std::vector &x, int coordinate, d // coordinate, the generalized coordinate of which we take the derivative // OUT: eval, the interpolated value double f1 = getInterp(x); +// double f1 = getInterpStruct(x); std::vector x2 = x; x2[coordinate] += h; double f2 = getInterp(x2); +// double f2 = getInterpStruct(x2); return (f2 - f1)/h; } diff --git a/OpenSim/Simulation/Model/Interpolate.h b/OpenSim/Simulation/Model/Interpolate.h index faea52832d..72e5aaf554 100644 --- a/OpenSim/Simulation/Model/Interpolate.h +++ b/OpenSim/Simulation/Model/Interpolate.h @@ -119,10 +119,11 @@ class Interpolate{ double getInterpStruct(const std::vector& x); double getInterpStruct(const SimTK::State& s); - double getLength(const SimTK::State& s){return getInterpStruct(s);} + double getLength(const SimTK::State& s); double getInterpDer(const std::vector& x, int coordinate, double h=0.0001); - double getInterpDer(const SimTK::State& s, int coordinate, double h=0.0001); + double getInterpDer(const SimTK::State& s, int coordinate); + double getInterpDer(const SimTK::State& s, const OpenSim::Coordinate& coordinate); double getLengtheningSpeed(const SimTK::State& s); // EMPTY CONSTRUCTOR From e486f12e127f50e59743a9a91ec2eff57335e998 Mon Sep 17 00:00:00 2001 From: Joris Verhagen <56355937+joris997@users.noreply.github.com> Date: Tue, 13 Apr 2021 11:40:39 +0200 Subject: [PATCH 08/36] Delete CMakeLists.txt.user --- CMakeLists.txt.user | 6981 ------------------------------------------- 1 file changed, 6981 deletions(-) delete mode 100644 CMakeLists.txt.user diff --git a/CMakeLists.txt.user b/CMakeLists.txt.user deleted file mode 100644 index 15dcb5a2ec..0000000000 --- a/CMakeLists.txt.user +++ /dev/null @@ -1,6981 +0,0 @@ - - - - - - EnvironmentId - {31e18788-fd95-4ab4-9268-c7219c462e0d} - - - ProjectExplorer.Project.ActiveTarget - 0 - - - ProjectExplorer.Project.EditorSettings - - true - false - true - - Cpp - - CppGlobal - - - - QmlJS - - QmlJSGlobal - - - 2 - UTF-8 - false - 4 - false - 80 - true - true - 1 - true - false - 0 - true - true - 0 - 8 - true - 1 - true - true - true - false - - - - ProjectExplorer.Project.PluginSettings - - - - ProjectExplorer.Project.Target.0 - - Desktop - Desktop - {5aa12636-ab1a-4881-a3d9-fe06a90bba71} - 0 - 0 - 95 - - - CMAKE_BUILD_TYPE:STRING=RelWithDebInfo - CMAKE_CXX_COMPILER:STRING=%{Compiler:Executable:Cxx} - CMAKE_C_COMPILER:STRING=%{Compiler:Executable:C} - CMAKE_PREFIX_PATH:STRING=%{Qt:QT_INSTALL_PREFIX} - QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable} - SIMBODY_HOME:PATH=/home/none/simbody - docopt_DIR:PATH=/home/none/opensim-core-dependencies-install/docopt/lib/cmake/docopt - spdlog_DIR:PATH=/home/none/opensim-core-dependencies-install/spdlog/lib/spdlog/cmake - - /home/none/opensim/interpolation/RelWithDebInfo-build - - - -j 2 - - install - - true - CMake Build - - CMakeProjectManager.MakeStep - - 1 - Build - - ProjectExplorer.BuildSteps.Build - - - - - - all - - true - CMake Build - - CMakeProjectManager.MakeStep - - 1 - Clean - - ProjectExplorer.BuildSteps.Clean - - 2 - false - - Release with Debug Information - Release with Debug Information - CMakeProjectManager.CMakeBuildConfiguration - - 1 - - - 0 - Deploy - - ProjectExplorer.BuildSteps.Deploy - - 1 - Deploy locally - - ProjectExplorer.DefaultDeployConfiguration - - 1 - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testLepton - - - /home/none/opensim/interpolation/RelWithDebInfo-build - 2 - - testLepton - - CMakeProjectManager.CMakeRunConfiguration.testLepton - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testTRCFileAdapter - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testTRCFileAdapter - - CMakeProjectManager.CMakeRunConfiguration.testTRCFileAdapter - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testPath - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testPath - - CMakeProjectManager.CMakeRunConfiguration.testPath - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoInverse - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoInverse - - CMakeProjectManager.CMakeRunConfiguration.testMocoInverse - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoMetabolics - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoMetabolics - - CMakeProjectManager.CMakeRunConfiguration.testMocoMetabolics - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoInterface - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoInterface - - CMakeProjectManager.CMakeRunConfiguration.testMocoInterface - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoConstraints - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoConstraints - - CMakeProjectManager.CMakeRunConfiguration.testMocoConstraints - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoImplicit - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoImplicit - - CMakeProjectManager.CMakeRunConfiguration.testMocoImplicit - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoAnalytic - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoAnalytic - - CMakeProjectManager.CMakeRunConfiguration.testMocoAnalytic - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoGoals - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoGoals - - CMakeProjectManager.CMakeRunConfiguration.testMocoGoals - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoActuators - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoActuators - - CMakeProjectManager.CMakeRunConfiguration.testMocoActuators - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoTrack - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoTrack - - CMakeProjectManager.CMakeRunConfiguration.testMocoTrack - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoParameters - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoParameters - - CMakeProjectManager.CMakeRunConfiguration.testMocoParameters - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testRootSolver - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testRootSolver - - CMakeProjectManager.CMakeRunConfiguration.testRootSolver - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleSlidingMass - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleSlidingMass - - CMakeProjectManager.CMakeRunConfiguration.exampleSlidingMass - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleSlidingMassAdvanced - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleSlidingMassAdvanced - - CMakeProjectManager.CMakeRunConfiguration.exampleSlidingMassAdvanced - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleTracking - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleTracking - - CMakeProjectManager.CMakeRunConfiguration.exampleTracking - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleMarkerTracking - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleMarkerTracking - - CMakeProjectManager.CMakeRunConfiguration.exampleMarkerTracking - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleHangingMuscle - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleHangingMuscle - - CMakeProjectManager.CMakeRunConfiguration.exampleHangingMuscle - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - example2DWalkingMetabolics - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - example2DWalkingMetabolics - - CMakeProjectManager.CMakeRunConfiguration.example2DWalkingMetabolics - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - example2DWalking - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - example2DWalking - - CMakeProjectManager.CMakeRunConfiguration.example2DWalking - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleMocoInverse - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleMocoInverse - - CMakeProjectManager.CMakeRunConfiguration.exampleMocoInverse - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleMocoTrack - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleMocoTrack - - CMakeProjectManager.CMakeRunConfiguration.exampleMocoTrack - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleMocoCustomEffortGoal - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleMocoCustomEffortGoal - - CMakeProjectManager.CMakeRunConfiguration.exampleMocoCustomEffortGoal - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testFunctions - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testFunctions - - CMakeProjectManager.CMakeRunConfiguration.testFunctions - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleCustomImplicitAuxiliaryDynamics - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleCustomImplicitAuxiliaryDynamics - - CMakeProjectManager.CMakeRunConfiguration.exampleCustomImplicitAuxiliaryDynamics - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testLiveIK - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testLiveIK - - CMakeProjectManager.CMakeRunConfiguration.testLiveIK - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testGCVSpline - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testGCVSpline - - CMakeProjectManager.CMakeRunConfiguration.testGCVSpline - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSerialization - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSerialization - - CMakeProjectManager.CMakeRunConfiguration.testSerialization - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testStorage - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testStorage - - CMakeProjectManager.CMakeRunConfiguration.testStorage - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testXsensDataReader - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testXsensDataReader - - CMakeProjectManager.CMakeRunConfiguration.testXsensDataReader - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testStatesTrajectory - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testStatesTrajectory - - CMakeProjectManager.CMakeRunConfiguration.testStatesTrajectory - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testInverseKinematicsSolver - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testInverseKinematicsSolver - - CMakeProjectManager.CMakeRunConfiguration.testInverseKinematicsSolver - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testInitState - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testInitState - - CMakeProjectManager.CMakeRunConfiguration.testInitState - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testFunctionAdapter - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testFunctionAdapter - - CMakeProjectManager.CMakeRunConfiguration.testFunctionAdapter - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testFrames - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testFrames - - CMakeProjectManager.CMakeRunConfiguration.testFrames - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testModelInterface - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testModelInterface - - CMakeProjectManager.CMakeRunConfiguration.testModelInterface - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testForces - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testForces - - CMakeProjectManager.CMakeRunConfiguration.testForces - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testAssemblySolver - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testAssemblySolver - - CMakeProjectManager.CMakeRunConfiguration.testAssemblySolver - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testManager - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testManager - - CMakeProjectManager.CMakeRunConfiguration.testManager - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMomentArms - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMomentArms - - CMakeProjectManager.CMakeRunConfiguration.testMomentArms - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testReportersWithModel - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testReportersWithModel - - CMakeProjectManager.CMakeRunConfiguration.testReportersWithModel - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testPoints - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testPoints - - CMakeProjectManager.CMakeRunConfiguration.testPoints - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testContactGeometry - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testContactGeometry - - CMakeProjectManager.CMakeRunConfiguration.testContactGeometry - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testNestedModelComponents - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testNestedModelComponents - - CMakeProjectManager.CMakeRunConfiguration.testNestedModelComponents - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testDataTable - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testDataTable - - CMakeProjectManager.CMakeRunConfiguration.testDataTable - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testPrescribedForce - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testPrescribedForce - - CMakeProjectManager.CMakeRunConfiguration.testPrescribedForce - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMuscleMetabolicsProbes - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMuscleMetabolicsProbes - - CMakeProjectManager.CMakeRunConfiguration.testMuscleMetabolicsProbes - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testProbes - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testProbes - - CMakeProjectManager.CMakeRunConfiguration.testProbes - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSimulationUtilities - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSimulationUtilities - - CMakeProjectManager.CMakeRunConfiguration.testSimulationUtilities - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testJoints - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testJoints - - CMakeProjectManager.CMakeRunConfiguration.testJoints - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testConstraints - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testConstraints - - CMakeProjectManager.CMakeRunConfiguration.testConstraints - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMuscleFirstOrderActivationDynamicModel - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMuscleFirstOrderActivationDynamicModel - - CMakeProjectManager.CMakeRunConfiguration.testMuscleFirstOrderActivationDynamicModel - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testActuators - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testActuators - - CMakeProjectManager.CMakeRunConfiguration.testActuators - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMuscleFixedWidthPennationModel - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMuscleFixedWidthPennationModel - - CMakeProjectManager.CMakeRunConfiguration.testMuscleFixedWidthPennationModel - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMuscles - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMuscles - - CMakeProjectManager.CMakeRunConfiguration.testMuscles - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testAPDMDataReader - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testAPDMDataReader - - CMakeProjectManager.CMakeRunConfiguration.testAPDMDataReader - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSerializableMuscleCurves - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSerializableMuscleCurves - - CMakeProjectManager.CMakeRunConfiguration.testSerializableMuscleCurves - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testOutputReporter - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testOutputReporter - - CMakeProjectManager.CMakeRunConfiguration.testOutputReporter - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testExternalLoads - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testExternalLoads - - CMakeProjectManager.CMakeRunConfiguration.testExternalLoads - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testControllers - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testControllers - - CMakeProjectManager.CMakeRunConfiguration.testControllers - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testModelCopy - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testModelCopy - - CMakeProjectManager.CMakeRunConfiguration.testModelCopy - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSerializeOpenSimObjects - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSerializeOpenSimObjects - - CMakeProjectManager.CMakeRunConfiguration.testSerializeOpenSimObjects - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testVisualization - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testVisualization - - CMakeProjectManager.CMakeRunConfiguration.testVisualization - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleHopperDeviceAnswers - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleHopperDeviceAnswers - - CMakeProjectManager.CMakeRunConfiguration.exampleHopperDeviceAnswers - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleHopperDevice - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleHopperDevice - - CMakeProjectManager.CMakeRunConfiguration.exampleHopperDevice - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - example2DataTable - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - example2DataTable - - CMakeProjectManager.CMakeRunConfiguration.example2DataTable - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testComponentInterface - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testComponentInterface - - CMakeProjectManager.CMakeRunConfiguration.testComponentInterface - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - example1DataTable - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - example1DataTable - - CMakeProjectManager.CMakeRunConfiguration.example1DataTable - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleTRCFileAdapter - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleTRCFileAdapter - - CMakeProjectManager.CMakeRunConfiguration.exampleTRCFileAdapter - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testComponents - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testComponents - - CMakeProjectManager.CMakeRunConfiguration.testComponents - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testAddComponents - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testAddComponents - - CMakeProjectManager.CMakeRunConfiguration.testAddComponents - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testControllerExample - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testControllerExample - - CMakeProjectManager.CMakeRunConfiguration.testControllerExample - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleController - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleController - - CMakeProjectManager.CMakeRunConfiguration.exampleController - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testExampleMain - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testExampleMain - - CMakeProjectManager.CMakeRunConfiguration.testExampleMain - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleMain - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleMain - - CMakeProjectManager.CMakeRunConfiguration.exampleMain - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testOptimizationExample - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testOptimizationExample - - CMakeProjectManager.CMakeRunConfiguration.testOptimizationExample - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleOptimization - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleOptimization - - CMakeProjectManager.CMakeRunConfiguration.exampleOptimization - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testNCSpline - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testNCSpline - - CMakeProjectManager.CMakeRunConfiguration.testNCSpline - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCustomActuatorExample - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCustomActuatorExample - - CMakeProjectManager.CMakeRunConfiguration.testCustomActuatorExample - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleCustomActuator - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleCustomActuator - - CMakeProjectManager.CMakeRunConfiguration.exampleCustomActuator - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMuscleExample - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMuscleExample - - CMakeProjectManager.CMakeRunConfiguration.testMuscleExample - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleMuscle - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleMuscle - - CMakeProjectManager.CMakeRunConfiguration.exampleMuscle - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSimpleOptimizationExample - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSimpleOptimizationExample - - CMakeProjectManager.CMakeRunConfiguration.testSimpleOptimizationExample - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleOptimizationSimple - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleOptimizationSimple - - CMakeProjectManager.CMakeRunConfiguration.exampleOptimizationSimple - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - checkEnvironment - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - checkEnvironment - - CMakeProjectManager.CMakeRunConfiguration.checkEnvironment - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testIterators - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testIterators - - CMakeProjectManager.CMakeRunConfiguration.testIterators - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testREADME - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testREADME - - CMakeProjectManager.CMakeRunConfiguration.testREADME - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testWrapping - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testWrapping - - CMakeProjectManager.CMakeRunConfiguration.testWrapping - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSmoothSegmentedFunctionFactory - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSmoothSegmentedFunctionFactory - - CMakeProjectManager.CMakeRunConfiguration.testSmoothSegmentedFunctionFactory - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testExampleLuxoMuscle - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testExampleLuxoMuscle - - CMakeProjectManager.CMakeRunConfiguration.testExampleLuxoMuscle - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testBuildDynamicWalker - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testBuildDynamicWalker - - CMakeProjectManager.CMakeRunConfiguration.testBuildDynamicWalker - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testJointReactions - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testJointReactions - - CMakeProjectManager.CMakeRunConfiguration.testJointReactions - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testStaticOptimization - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testStaticOptimization - - CMakeProjectManager.CMakeRunConfiguration.testStaticOptimization - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testInducedAccelerations - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testInducedAccelerations - - CMakeProjectManager.CMakeRunConfiguration.testInducedAccelerations - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testAnalyzeTool - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testAnalyzeTool - - CMakeProjectManager.CMakeRunConfiguration.testAnalyzeTool - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testForward - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testForward - - CMakeProjectManager.CMakeRunConfiguration.testForward - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testScale - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testScale - - CMakeProjectManager.CMakeRunConfiguration.testScale - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testIK - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testIK - - CMakeProjectManager.CMakeRunConfiguration.testIK - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testID - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testID - - CMakeProjectManager.CMakeRunConfiguration.testID - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSTOFileAdapter - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSTOFileAdapter - - CMakeProjectManager.CMakeRunConfiguration.testSTOFileAdapter - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCSingleMuscle - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCSingleMuscle - - CMakeProjectManager.CMakeRunConfiguration.testCMCSingleMuscle - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCEMGDrivenArm_Thelen - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCEMGDrivenArm_Thelen - - CMakeProjectManager.CMakeRunConfiguration.testCMCEMGDrivenArm_Thelen - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCTwoMusclesOnBlock - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCTwoMusclesOnBlock - - CMakeProjectManager.CMakeRunConfiguration.testCMCTwoMusclesOnBlock - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCEMGDrivenArm_Millard - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCEMGDrivenArm_Millard - - CMakeProjectManager.CMakeRunConfiguration.testCMCEMGDrivenArm_Millard - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCArm26_Millard - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCArm26_Millard - - CMakeProjectManager.CMakeRunConfiguration.testCMCArm26_Millard - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCGait10dof18musc - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCGait10dof18musc - - CMakeProjectManager.CMakeRunConfiguration.testCMCGait10dof18musc - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCSingleRigidTendonMuscle - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCSingleRigidTendonMuscle - - CMakeProjectManager.CMakeRunConfiguration.testCMCSingleRigidTendonMuscle - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCWithControlConstraintsGait2354 - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCWithControlConstraintsGait2354 - - CMakeProjectManager.CMakeRunConfiguration.testCMCWithControlConstraintsGait2354 - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCWithControlConstraintsRunningModel - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCWithControlConstraintsRunningModel - - CMakeProjectManager.CMakeRunConfiguration.testCMCWithControlConstraintsRunningModel - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCArm26_Thelen - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCArm26_Thelen - - CMakeProjectManager.CMakeRunConfiguration.testCMCArm26_Thelen - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMarkerData - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMarkerData - - CMakeProjectManager.CMakeRunConfiguration.testMarkerData - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testRRA - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testRRA - - CMakeProjectManager.CMakeRunConfiguration.testRRA - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - opensense - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - opensense - - CMakeProjectManager.CMakeRunConfiguration.opensense - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testOpenSense - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testOpenSense - - CMakeProjectManager.CMakeRunConfiguration.testOpenSense - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - opensim-cmd - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - opensim-cmd - - CMakeProjectManager.CMakeRunConfiguration.opensim-cmd - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCommandLineInterface - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCommandLineInterface - - CMakeProjectManager.CMakeRunConfiguration.testCommandLineInterface - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testWrappingMath - - - /home/none/opensim/interpolation/RelWithDebInfo-build - 2 - - testWrappingMath - - CMakeProjectManager.CMakeRunConfiguration.testWrappingMath - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testTableProcessor - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testTableProcessor - - CMakeProjectManager.CMakeRunConfiguration.testTableProcessor - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testModelProcessor - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testModelProcessor - - CMakeProjectManager.CMakeRunConfiguration.testModelProcessor - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testDeGrooteFregly2016Muscle - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testDeGrooteFregly2016Muscle - - CMakeProjectManager.CMakeRunConfiguration.testDeGrooteFregly2016Muscle - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoContact - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoContact - - CMakeProjectManager.CMakeRunConfiguration.testMocoContact - 3768 - false - true - false - false - true - - 122 - - - - ProjectExplorer.Project.TargetCount - 1 - - - ProjectExplorer.Project.Updater.FileVersion - 18 - - - Version - 18 - - From e466408d98ef0580aefb452b116d96091f18fb3a Mon Sep 17 00:00:00 2001 From: joris997 Date: Tue, 13 Apr 2021 21:13:29 +0200 Subject: [PATCH 09/36] formatting and introducing conversion tool --- CMakeLists.txt.user | 2 +- .../Simulation/Model/FunctionBasedPath.cpp | 62 ++----- OpenSim/Simulation/Model/FunctionBasedPath.h | 11 +- OpenSim/Simulation/Model/GeometryPath.cpp | 38 ---- OpenSim/Simulation/Model/Interpolate.cpp | 171 +++++------------- OpenSim/Simulation/Model/Interpolate.h | 57 +++--- OpenSim/Simulation/Model/PointBasedPath.cpp | 5 +- OpenSim/Simulation/Model/PointBasedPath.h | 6 +- OpenSim/Tools/FunctionBasedPathModelTool.cpp | 122 +++++++++++++ 9 files changed, 212 insertions(+), 262 deletions(-) create mode 100644 OpenSim/Tools/FunctionBasedPathModelTool.cpp diff --git a/CMakeLists.txt.user b/CMakeLists.txt.user index 15dcb5a2ec..446f0d5629 100644 --- a/CMakeLists.txt.user +++ b/CMakeLists.txt.user @@ -1,6 +1,6 @@ - + EnvironmentId diff --git a/OpenSim/Simulation/Model/FunctionBasedPath.cpp b/OpenSim/Simulation/Model/FunctionBasedPath.cpp index 0eace21df4..9f8d52b2e9 100644 --- a/OpenSim/Simulation/Model/FunctionBasedPath.cpp +++ b/OpenSim/Simulation/Model/FunctionBasedPath.cpp @@ -7,39 +7,28 @@ using namespace OpenSim; using namespace SimTK; using SimTK::Vec3; -////////////////// -// CONSTRUCTORS // -////////////////// - -//FunctionBasedPath::FunctionBasedPath(FunctionBasedPath &fbp){ -// std::lock_guard> fbp.mtx; -// interp = fbp.interp; -// mtx = fbp.mtx; -//} - +// Default constructor FunctionBasedPath::FunctionBasedPath(){ constructProperty_identity(0); -// constructProperty_coords(nullptr); - readContent(); } -FunctionBasedPath::FunctionBasedPath(int id){ - // Constructor for reading in information from file and creating - // an interpolation object based on that file +// Constructor for reading in information from file and creating +// an interpolation object based on that file +FunctionBasedPath::FunctionBasedPath(int id) +{ constructProperty_identity(0); -// constructProperty_coords(nullptr); upd_identity() = id; readContent(); } - +// Constructor used for conversion from PBP to FBP FunctionBasedPath::FunctionBasedPath(const Model& model, const PointBasedPath& pbp, - int id){ + int id) +{ constructProperty_identity(0); -// constructProperty_coords(nullptr); upd_identity() = id; upd_Appearance() = pbp.get_Appearance(); @@ -75,23 +64,12 @@ FunctionBasedPath::FunctionBasedPath(const Model& model, vector nPoints(affectingCoords.size(),5); // create interpolation object interp = Interpolate(pbp,move(affectingCoords),stClone,nPoints); - -// upd_coords() = affectingCoords; } -///////////////////// -// REGULAR METHODS // -///////////////////// double FunctionBasedPath::getLength(const State& s) const { -// std::lock_guard guard(mtx); return interp.getLength(s); - -// std::cout << "interp: " << interpCopy.getLength(s); -// std::cout << "\tnormal: " << getCacheVariableValue(s, _lengthCV) << "\n"; -// computePath(s); -// return getCacheVariableValue(s, _lengthCV); } void FunctionBasedPath::setLength(const State &s, double length) const @@ -102,9 +80,6 @@ void FunctionBasedPath::setLength(const State &s, double length) const double FunctionBasedPath::getLengtheningSpeed(const State &s) const { return interp.getLengtheningSpeed(s); - -// computeLengtheningSpeed(s); -// return getCacheVariableValue(s, _speedCV); } void FunctionBasedPath::setLengtheningSpeed(const State &s, double speed) const @@ -112,12 +87,10 @@ void FunctionBasedPath::setLengtheningSpeed(const State &s, double speed) const setCacheVariableValue(s, _speedCV, speed); } -double FunctionBasedPath::computeMomentArm(const State& s, const Coordinate& aCoord) const +double FunctionBasedPath::computeMomentArm(const State& s, + const Coordinate& aCoord) const { return interp.getInterpDer(s,aCoord); -// if (!_maSolver) -// const_cast(this)->_maSolver.reset(new MomentArmSolver(*_model)); -// return _maSolver->solve(s, aCoord, *this); } @@ -134,12 +107,6 @@ void FunctionBasedPath::printContent(std::ofstream& printFile) const{ } printFile << "\n"; -// auto coords = interp.getCoords(); -// for (unsigned i=0; igetName() << "\n"; -// } -// printFile << "\n"; - vector evals = interp.getEvals(); for (unsigned i=0; i coordsNames; vector coords; vector dS; vector evals; @@ -202,13 +168,7 @@ void FunctionBasedPath::readContent() { dS.push_back(disc); } assert(dS.size() == dimension); -// // get affected coordinates -// while(std::getline(readFile,sLine)){ -// if (sLine ==""){ -// break; -// } -// coordsNames.push_back(atof(sLine.c_str())); -// } + // get interpolation data while(std::getline(readFile,sLine)){ if (sLine == ""){ diff --git a/OpenSim/Simulation/Model/FunctionBasedPath.h b/OpenSim/Simulation/Model/FunctionBasedPath.h index 3786aee415..7839f50822 100644 --- a/OpenSim/Simulation/Model/FunctionBasedPath.h +++ b/OpenSim/Simulation/Model/FunctionBasedPath.h @@ -24,15 +24,12 @@ class WrapResult; class WrapObject; class OSIMSIMULATION_API FunctionBasedPath : public GeometryPath { -//class OSIMSIMULATION_API FunctionBasedPath : public GeometryPath { OpenSim_DECLARE_CONCRETE_OBJECT(FunctionBasedPath, GeometryPath); OpenSim_DECLARE_PROPERTY(identity,int,"Identity related to printed file"); -// OpenSim_DECLARE_PROPERTY(coords,std::vector,"Coordinates related to the GeometryPath"); private: mutable Interpolate interp; -// mutable std::mutex mtx; public: // Default constructor @@ -45,9 +42,11 @@ class OSIMSIMULATION_API FunctionBasedPath : public GeometryPath { double getLength( const SimTK::State& s) const override; void setLength( const SimTK::State& s, double length) const override; double getLengtheningSpeed( const SimTK::State& s) const override; - void setLengtheningSpeed( const SimTK::State& s, double speed) const override; + void setLengtheningSpeed( const SimTK::State& s, + double speed) const override; - double computeMomentArm(const SimTK::State &s, const Coordinate &aCoord) const override; + double computeMomentArm(const SimTK::State &s, + const Coordinate &aCoord) const override; void printContent(std::ofstream& printFile) const; void readContent(); @@ -58,5 +57,3 @@ class OSIMSIMULATION_API FunctionBasedPath : public GeometryPath { } #endif -// might need to make setLength etc. also virtual -// or make everything virtual (just for concept) diff --git a/OpenSim/Simulation/Model/GeometryPath.cpp b/OpenSim/Simulation/Model/GeometryPath.cpp index 34fcf078ee..6dc874e6f7 100644 --- a/OpenSim/Simulation/Model/GeometryPath.cpp +++ b/OpenSim/Simulation/Model/GeometryPath.cpp @@ -434,28 +434,6 @@ void GeometryPath::updateGeometry(const SimTK::State& s) const computePath(s); } -//============================================================================= -// GET -//============================================================================= -//----------------------------------------------------------------------------- -// LENGTH -//----------------------------------------------------------------------------- -//_____________________________________________________________________________ -/* - * Compute the total length of the path. - * - * @return Total length of the path. - */ -//double GeometryPath::getLength( const SimTK::State& s) const -//{ -// computePath(s); // compute checks if path needs to be recomputed -// return getCacheVariableValue(s, _lengthCV); -//} -//void GeometryPath::setLength( const SimTK::State& s, double length ) const -//{ -// setCacheVariableValue(s, _lengthCV, length); -//} - void GeometryPath::setColor(const SimTK::State& s, const SimTK::Vec3& color) const { setCacheVariableValue(s, _colorCV, color); @@ -466,22 +444,6 @@ Vec3 GeometryPath::getColor(const SimTK::State& s) const return getCacheVariableValue(s, _colorCV); } -//_____________________________________________________________________________ -/* - * Compute the lengthening speed of the path. - * - * @return lengthening speed of the path. - */ -//double GeometryPath::getLengtheningSpeed( const SimTK::State& s) const -//{ -// computeLengtheningSpeed(s); -// return getCacheVariableValue(s, _speedCV); -//} -//void GeometryPath::setLengtheningSpeed( const SimTK::State& s, double speed ) const -//{ -// setCacheVariableValue(s, _speedCV, speed); -//} - void GeometryPath::setPreScaleLength( const SimTK::State& s, double length ) { _preScaleLength = length; } diff --git a/OpenSim/Simulation/Model/Interpolate.cpp b/OpenSim/Simulation/Model/Interpolate.cpp index 5cb15cc017..188e17501d 100644 --- a/OpenSim/Simulation/Model/Interpolate.cpp +++ b/OpenSim/Simulation/Model/Interpolate.cpp @@ -1,20 +1,10 @@ #include "Interpolate.h" -template -void printVector(std::vector x){ - for (unsigned i=0; i Defer defer_action(Callback cb) { return Defer{std::move(cb)}; @@ -51,10 +41,12 @@ bool coord_affects_muscle( } ////////////////// -// CONSTRUCTORS // +// Constructors // ////////////////// +// Default constructor Interpolate::Interpolate(){}; +// General vector based interpolation constructor Interpolate::Interpolate(std::vector coordsIn, std::vector dSIn, std::vector evalsIn) @@ -77,8 +69,8 @@ Interpolate::Interpolate(std::vector coordsIn, } } -Interpolate::Interpolate(std::vector > discretizationIn, - std::vector, double> > evalsPair) +Interpolate::Interpolate(std::vector> discretizationIn, + std::vector, double>> evalsPair) : discretization(discretizationIn), dimension(discretizationIn.size()), n(dimension,0), @@ -86,7 +78,6 @@ Interpolate::Interpolate(std::vector > discretizationIn, loc(dimension,0) { assert(discretization.size() == evalsPair[0].first.size()); - // allow it to work with the new struct method for (int i=0; i cnt(dimension); std::vector coordValues(dimension); for (int i=0; i=0; x--){ @@ -241,21 +227,20 @@ Interpolate::Interpolate(OpenSim::PointBasedPath const& pbp, discretizationNPoints) {} -///////////////// -// INTERPOLATE // -///////////////// - +///////////// +// Methods // +///////////// +// getLength based on the state double Interpolate::getLength(const SimTK::State& s){ return getInterp(s); } - +// getLength with mapping from State to vector x double Interpolate::getInterp(const SimTK::State &s){ assert(coords.size() != 0); std::vector x; for (unsigned i=0; igetValue(s)); } -// printVector(x); return getInterp(x); } double Interpolate::getInterp(const std::vector &x){ @@ -282,14 +267,11 @@ double Interpolate::getInterp(const std::vector &x){ for (int i=0; i &x){ while (discrLoopCnt[0] < 3){ Beta = 1; for (int i=0; i &x){ z += getEval()*Beta; - - // from the back to the front, check if we're already at the maximum iteration - // on that 'nested' for loop or else increment with 1. In short, everything - // starts with [-1,-1,-1,...] and we keep adding ones until the array of the - // loops becomes [ 2, 2, 2, ...] + // from the back to the front, check if we're already at the maximum + // iteration on that 'nested' for loop or else increment with 1. + // In short, everything starts with [-1,-1,-1,...] and we keep adding + // ones until the array of the loops becomes [ 2, 2, 2, ...] for (int x=dimension-1; x>=0; x--){ if (discrLoopCnt[x] != 2){ discrLoopCnt[x] += 1; @@ -334,7 +315,7 @@ double Interpolate::getInterp(const std::vector &x){ } } - // CHECKING EXIT CONDITIONS + // checking exit conditions if (breakWhile){ break; } @@ -346,82 +327,17 @@ double Interpolate::getInterp(const std::vector &x){ break; } } - // if all are true (all are 2) set breakWhile to break on the next iteration + // if all true (all are 2) set breakWhile to break on the next iteration if (allTrue){ breakWhile = true; } } -// std::cout << "z: " << z << std::endl; return z; } - -double Interpolate::getInterpStruct(const SimTK::State &s){ - assert(coords.size() != 0); - std::vector x; - for (unsigned i=0; igetValue(s)); - } - return getInterpStruct(x); -} -double Interpolate::getInterpStruct(const std::vector &x){ - assert(x.size() == dimension); - - // get the index of the closest range value to the discretization point - for (int i=0; i=0; x--){ - if (discrLoopCnt[x] != 2){ - discrLoopCnt[x] += 1; - break; - } - if (discrLoopCnt[x] == 2){ - for (int y=x; ygetName() == aCoord.getName()){ return getInterpDer(s,i); @@ -445,30 +361,27 @@ double Interpolate::getInterpDer(const SimTK::State &s, int coordinate){ } return getInterpDer(x,coordinate); } -double Interpolate::getInterpDer(const std::vector &x, int coordinate, double h){ +double Interpolate::getInterpDer(const std::vector &x, + int coordinate, double h){ assert(x.size() == dimension); assert(coordinate <= dimension-1); assert(h>0 && h < (dS[coordinate].end-x[coordinate])); - // This is the main interpolation function + // This is the main interpolation function for derivatives // IN: x, a vector of points within the considered interpolation range - // coordinate, the generalized coordinate of which we take the derivative + // coordinate, the generalized coordinate of which we take derivative // OUT: eval, the interpolated value double f1 = getInterp(x); -// double f1 = getInterpStruct(x); std::vector x2 = x; x2[coordinate] += h; double f2 = getInterp(x2); -// double f2 = getInterpStruct(x2); return (f2 - f1)/h; } - - double Interpolate::getEval(){ - // get the wrapping length evaluation given a vector 'loc' which contains, in - // ascending dimension, the index in each dimension + // get the wrapping length evaluation given a vector 'loc' which contains, + // in ascending dimension, the index in each dimension int factor = 1; int idx = 0; diff --git a/OpenSim/Simulation/Model/Interpolate.h b/OpenSim/Simulation/Model/Interpolate.h index 72e5aaf554..f626e731f4 100644 --- a/OpenSim/Simulation/Model/Interpolate.h +++ b/OpenSim/Simulation/Model/Interpolate.h @@ -14,7 +14,7 @@ #include //////////////////// -// FUNCTIONS ADAM // +// Helper structs // //////////////////// struct Discretization{ double begin; @@ -41,7 +41,8 @@ struct Defer final { cb(); } }; -// factory function to Defer + +// Define helper functions (see .cpp file) template Defer defer_action(Callback cb); @@ -51,12 +52,11 @@ bool coord_affects_muscle( SimTK::State& state, Nonzero_conditions& out); -////////////////////////// -// ADDITIONAL FUNCTIONS // -////////////////////////// +////////////////////// +// Helper functions // +////////////////////// template void linspace(std::vector &linspaced, T start_in, T end_in, int num_in){ -// from: https://stackoverflow.com/questions/27028226/python-linspace-in-c double start = static_cast(start_in); double end = static_cast(end_in); double num = static_cast(num_in); @@ -78,11 +78,8 @@ void linspace(std::vector &linspaced, T start_in, T end_in, int num_in){ class Interpolate{ private: - // dimension of the interpolation (e.g. two states -> 2D) + // dimension of the interpolation (e.g. two states -> 2D -> 2) int dimension; - // number of points considered in constructing the polynomial - int nInterPoints = 4; - int g = 1; // vector containing the orthogonal discretization vectors // e.g. disc[0] = xrange, disc[1] = yrange etc. std::vector> discretization; @@ -91,7 +88,8 @@ class Interpolate{ std::vector evals; // vector containing index closest to discretization point std::vector n; - // vector containing fraction of closest index to discretization point to next + // vector containing fraction of closest index to discretization + // point to next std::vector u; // array of polynomial evaluation std::vector> beta; @@ -102,61 +100,56 @@ class Interpolate{ std::vector dS; std::vector coords; - public: // getting std::vector getRange(int i) const {return discretization[i];} int getDimension() const {return dimension;} std::vector getdS() const {return dS;} -// std::vector getCoords() const {return coords;} std::vector getEvals() const {return evals;} // template member functions double getEval(); + // 0th derivative double getInterp(const std::vector& x); double getInterp(const SimTK::State& s); - - double getInterpStruct(const std::vector& x); - double getInterpStruct(const SimTK::State& s); double getLength(const SimTK::State& s); - double getInterpDer(const std::vector& x, int coordinate, double h=0.0001); - double getInterpDer(const SimTK::State& s, int coordinate); - double getInterpDer(const SimTK::State& s, const OpenSim::Coordinate& coordinate); + // 1st derivative + double getInterpDer(const std::vector& x, + int coordinate, double h=0.0001); + double getInterpDer(const SimTK::State& s, + int coordinate); + double getInterpDer(const SimTK::State& s, + const OpenSim::Coordinate& coordinate); double getLengtheningSpeed(const SimTK::State& s); - // EMPTY CONSTRUCTOR + // Default constructor explicit Interpolate(); - // READ DATA CONSTRUCTOR + // Precomputed data constructor explicit Interpolate(std::vector coordsIn, std::vector dSIn, std::vector evalsIn); - // CONSTRUCTOR FOR A NON-GEOMETRYPATH/COORDINATE INTERPOLATION + // Constructor for non FBP/PBP related interpolation explicit Interpolate(std::vector> discretizationIn, - std::vector,double>> evalsPair); + std::vector,double>> evalsPair); - // N COORDINATES WITH GIVEN NPOINTS + // General interface constructor + // allows one to create an interface constructor as shown below + // with a vector of coordinates explicit Interpolate(OpenSim::PointBasedPath const& pbp, OpenSim::Coordinate const** cBegin, OpenSim::Coordinate const** cEnd, SimTK::State& st, std::vector& discretizationNPoints); - - // VECTOR OF COORDINATES -// explicit Interpolate(OpenSim::Muscle const& m, -// std::vector coords, -// SimTK::State& st, -// std::vector& discretizationNPoints); - + // Basic constructor having a vector of coordinate pointers as input explicit Interpolate(OpenSim::PointBasedPath const& pbp, std::vector coords, SimTK::State& st, std::vector& discretizationNPoints); - }; #endif // INTERPOLATE_H diff --git a/OpenSim/Simulation/Model/PointBasedPath.cpp b/OpenSim/Simulation/Model/PointBasedPath.cpp index c8128731d1..9c5c65f755 100644 --- a/OpenSim/Simulation/Model/PointBasedPath.cpp +++ b/OpenSim/Simulation/Model/PointBasedPath.cpp @@ -5,7 +5,7 @@ using namespace OpenSim; using namespace SimTK; using SimTK::Vec3; -// Constructor +// Default onstructor PointBasedPath::PointBasedPath() : GeometryPath(){ } @@ -39,7 +39,8 @@ void PointBasedPath::setLengtheningSpeed(const State &s, double speed) const * * @param aCoord, the coordinate */ -double PointBasedPath::computeMomentArm(const State& s, const Coordinate& aCoord) const +double PointBasedPath::computeMomentArm(const State& s, + const Coordinate& aCoord) const { if (!_maSolver) const_cast(this)->_maSolver.reset(new MomentArmSolver(*_model)); diff --git a/OpenSim/Simulation/Model/PointBasedPath.h b/OpenSim/Simulation/Model/PointBasedPath.h index ae364825ab..92b9d5558e 100644 --- a/OpenSim/Simulation/Model/PointBasedPath.h +++ b/OpenSim/Simulation/Model/PointBasedPath.h @@ -27,9 +27,11 @@ class OSIMSIMULATION_API PointBasedPath : public GeometryPath { double getLength( const SimTK::State& s) const override; void setLength( const SimTK::State& s, double length) const override; double getLengtheningSpeed( const SimTK::State& s) const override; - void setLengtheningSpeed( const SimTK::State& s, double speed) const override; + void setLengtheningSpeed( const SimTK::State& s, + double speed) const override; - double computeMomentArm(const SimTK::State &s, const Coordinate &aCoord) const override; + double computeMomentArm(const SimTK::State &s, + const Coordinate &aCoord) const override; }; } diff --git a/OpenSim/Tools/FunctionBasedPathModelTool.cpp b/OpenSim/Tools/FunctionBasedPathModelTool.cpp new file mode 100644 index 0000000000..678917c982 --- /dev/null +++ b/OpenSim/Tools/FunctionBasedPathModelTool.cpp @@ -0,0 +1,122 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace OpenSim; + +static const char HELP[] = + "This tool converts a model with classic GeometryPaths or \ + PointBasedPaths (the path of the PathActuator is described \ + by discrete sets of points) to a model with FunctionBasedPaths \ + \ + To that end, when a model is provided, this tool creates a new \ + .osim file according to the convention -originalName-FBP.osim \ + and a .txt file containing the sampled interpolation grid data \ + \ + usage: \ + FunctionBasedPathModelTool [--help] pathToModel/model.osim \ + e.g.: \ + FunctionBasedPathModelTool /home/user/models/Arm26.osim"; + +int main(int argc, char **argv){ + // skip tool name + --argc; + ++argv; + + // parse input arguments + std::string pbpModelString; + if (argc == 0){ + std::cout << "Provide an argument ('--help')" << std::endl; + return 0; + } else if (argc > 1) { + std::cout << "Provided too many arguments ('--help')" << std::endl; + return 0; + } else { + char const* arg = argv[0]; + if (!strcmp(argument,"--help")){ + std::cout << HELP; + return 0; + } else { + pbpModelString = argv[0]; + } + } + Model pbpModel(pbpModelString); + Model* fbpModel = pbpModel.clone(); + + pbpModel.finalizeConnections(); + pbpModel.finalizeFromProperties(); + pbpModel.initSystem(); + pbpModel.printSubcomponentInfo(); + + // Create folder for txt file data and new osim file + std::string modelPath = pbpModelString; + std::size_t found = modelPath.find_last_of("/\\"); + std::string modelName = modelPath.substr(found+1); + modelName = modelName.substr(0,modelName.find(".",0)); + + if (mkdir(modelName.c_str(),0777) == -1){ + std::cout << "Folder for model; " << modelName << " already created"; + std::cout << "so I'll just use that one and overwrite everything" + << std::endl; + } else { + std::cout << "Folder for model; " << modelName << " created" + << std::endl; + } + + // Converting + std::vector fbps; + std::vector pbps; + std::ofstream printFile; + int id = 0; + + for(PathActuator& pa : + pbpModel.updComponentList()){ + // const reference to a geometrypath + auto &pbp = pa.getGeometryPath(); + + // dynamic cast to check if its a pointbasedpath + const PointBasedPath* pbpp = dynamic_cast(&pbp); + pbps.push_back(*pbpp); + if(pbpp != nullptr){ + std::cout << "pa: " << pa.getName() << std::endl; + + FunctionBasedPath fbp(pbpModel,*pbpp,id); + + printFile.open(modelName+"/FBP"+std::to_string(id)+".txt"); + fbp.printContent(printFile); + + fbps.push_back(fbp); + id++; + } + } + + int cnt = 0; + const PointBasedPath* pbpp; + std::vector pap; + for(PathActuator& pa : + fbpModel->updComponentList()){ + pap.push_back(&pa); + } + for (unsigned i=0; igetGeometryPath(); + pbpp = dynamic_cast(&pbp); + if(pbpp != nullptr){ + pap[i]->updProperty_GeometryPath().setValue(fbps[cnt]); + cnt++; + } + } + fbpModel->finalizeConnections(); + fbpModel->finalizeFromProperties(); + fbpModel->initSystem(); + fbpModel->printSubcomponentInfo(); + + // Print model to file + fbpModel->print(modelName+"FBP.osim"); + + return 0; +} From f10526cc2d6083177a9a506b8c6f185837ceee78 Mon Sep 17 00:00:00 2001 From: joris997 Date: Wed, 14 Apr 2021 21:54:35 +0200 Subject: [PATCH 10/36] changed order in interpolate constructor --- CMakeLists.txt.user | 6974 ++++++++++++++++++++++ OpenSim/Simulation/Model/Interpolate.cpp | 16 +- OpenSim/Simulation/Model/Interpolate.h | 4 +- 3 files changed, 6984 insertions(+), 10 deletions(-) create mode 100644 CMakeLists.txt.user diff --git a/CMakeLists.txt.user b/CMakeLists.txt.user new file mode 100644 index 0000000000..6124700e22 --- /dev/null +++ b/CMakeLists.txt.user @@ -0,0 +1,6974 @@ + + + + + + EnvironmentId + {31e18788-fd95-4ab4-9268-c7219c462e0d} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + true + false + 0 + true + true + 0 + 8 + true + 1 + true + true + true + false + + + + ProjectExplorer.Project.PluginSettings + + + + ProjectExplorer.Project.Target.0 + + Imported Kit + Imported Kit + {100e64e2-3594-40f4-a592-7d97f2f817ca} + 0 + 0 + 0 + + + CMAKE_BUILD_TYPE:STRING=RelWithDebInfo + + /home/none/opensim/interpolation/RelWithDebInfo-build + + + + + all + + true + CMake Build + + CMakeProjectManager.MakeStep + + 1 + Build + + ProjectExplorer.BuildSteps.Build + + + + + + clean + + true + CMake Build + + CMakeProjectManager.MakeStep + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release with Debug Information + Release with Debug Information + CMakeProjectManager.CMakeBuildConfiguration + + 1 + + + 0 + Deploy + + ProjectExplorer.BuildSteps.Deploy + + 1 + Deploy locally + + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testLepton + + + /home/none/opensim/interpolation/RelWithDebInfo-build + 2 + + testLepton + + CMakeProjectManager.CMakeRunConfiguration.testLepton + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testTRCFileAdapter + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testTRCFileAdapter + + CMakeProjectManager.CMakeRunConfiguration.testTRCFileAdapter + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testPath + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testPath + + CMakeProjectManager.CMakeRunConfiguration.testPath + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testInducedAccelerations + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testInducedAccelerations + + CMakeProjectManager.CMakeRunConfiguration.testInducedAccelerations + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testAnalyzeTool + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testAnalyzeTool + + CMakeProjectManager.CMakeRunConfiguration.testAnalyzeTool + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testForward + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testForward + + CMakeProjectManager.CMakeRunConfiguration.testForward + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testScale + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testScale + + CMakeProjectManager.CMakeRunConfiguration.testScale + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testLiveIK + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testLiveIK + + CMakeProjectManager.CMakeRunConfiguration.testLiveIK + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testIK + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testIK + + CMakeProjectManager.CMakeRunConfiguration.testIK + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testID + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testID + + CMakeProjectManager.CMakeRunConfiguration.testID + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCSingleMuscle + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCSingleMuscle + + CMakeProjectManager.CMakeRunConfiguration.testCMCSingleMuscle + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCEMGDrivenArm_Thelen + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCEMGDrivenArm_Thelen + + CMakeProjectManager.CMakeRunConfiguration.testCMCEMGDrivenArm_Thelen + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCTwoMusclesOnBlock + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCTwoMusclesOnBlock + + CMakeProjectManager.CMakeRunConfiguration.testCMCTwoMusclesOnBlock + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testRootSolver + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testRootSolver + + CMakeProjectManager.CMakeRunConfiguration.testRootSolver + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCEMGDrivenArm_Millard + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCEMGDrivenArm_Millard + + CMakeProjectManager.CMakeRunConfiguration.testCMCEMGDrivenArm_Millard + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCArm26_Millard + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCArm26_Millard + + CMakeProjectManager.CMakeRunConfiguration.testCMCArm26_Millard + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCGait10dof18musc + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCGait10dof18musc + + CMakeProjectManager.CMakeRunConfiguration.testCMCGait10dof18musc + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCSingleRigidTendonMuscle + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCSingleRigidTendonMuscle + + CMakeProjectManager.CMakeRunConfiguration.testCMCSingleRigidTendonMuscle + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCWithControlConstraintsGait2354 + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCWithControlConstraintsGait2354 + + CMakeProjectManager.CMakeRunConfiguration.testCMCWithControlConstraintsGait2354 + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCWithControlConstraintsRunningModel + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCWithControlConstraintsRunningModel + + CMakeProjectManager.CMakeRunConfiguration.testCMCWithControlConstraintsRunningModel + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCArm26_Thelen + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCArm26_Thelen + + CMakeProjectManager.CMakeRunConfiguration.testCMCArm26_Thelen + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testRRA + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testRRA + + CMakeProjectManager.CMakeRunConfiguration.testRRA + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + opensense + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + opensense + + CMakeProjectManager.CMakeRunConfiguration.opensense + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testOpenSense + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testOpenSense + + CMakeProjectManager.CMakeRunConfiguration.testOpenSense + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testFunctions + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testFunctions + + CMakeProjectManager.CMakeRunConfiguration.testFunctions + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + opensim-cmd + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + opensim-cmd + + CMakeProjectManager.CMakeRunConfiguration.opensim-cmd + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCommandLineInterface + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCommandLineInterface + + CMakeProjectManager.CMakeRunConfiguration.testCommandLineInterface + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testGCVSpline + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testGCVSpline + + CMakeProjectManager.CMakeRunConfiguration.testGCVSpline + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSerialization + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testSerialization + + CMakeProjectManager.CMakeRunConfiguration.testSerialization + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testStorage + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testStorage + + CMakeProjectManager.CMakeRunConfiguration.testStorage + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testXsensDataReader + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testXsensDataReader + + CMakeProjectManager.CMakeRunConfiguration.testXsensDataReader + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testWrappingMath + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testWrappingMath + + CMakeProjectManager.CMakeRunConfiguration.testWrappingMath + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testTableProcessor + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testTableProcessor + + CMakeProjectManager.CMakeRunConfiguration.testTableProcessor + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testStatesTrajectory + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testStatesTrajectory + + CMakeProjectManager.CMakeRunConfiguration.testStatesTrajectory + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testFunctionAdapter + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testFunctionAdapter + + CMakeProjectManager.CMakeRunConfiguration.testFunctionAdapter + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testInverseKinematicsSolver + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testInverseKinematicsSolver + + CMakeProjectManager.CMakeRunConfiguration.testInverseKinematicsSolver + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testInitState + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testInitState + + CMakeProjectManager.CMakeRunConfiguration.testInitState + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testFrames + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testFrames + + CMakeProjectManager.CMakeRunConfiguration.testFrames + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testModelInterface + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testModelInterface + + CMakeProjectManager.CMakeRunConfiguration.testModelInterface + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testForces + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testForces + + CMakeProjectManager.CMakeRunConfiguration.testForces + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testAssemblySolver + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testAssemblySolver + + CMakeProjectManager.CMakeRunConfiguration.testAssemblySolver + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testManager + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testManager + + CMakeProjectManager.CMakeRunConfiguration.testManager + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMomentArms + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMomentArms + + CMakeProjectManager.CMakeRunConfiguration.testMomentArms + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testReportersWithModel + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testReportersWithModel + + CMakeProjectManager.CMakeRunConfiguration.testReportersWithModel + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testPoints + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testPoints + + CMakeProjectManager.CMakeRunConfiguration.testPoints + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testDataTable + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testDataTable + + CMakeProjectManager.CMakeRunConfiguration.testDataTable + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testContactGeometry + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testContactGeometry + + CMakeProjectManager.CMakeRunConfiguration.testContactGeometry + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testNestedModelComponents + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testNestedModelComponents + + CMakeProjectManager.CMakeRunConfiguration.testNestedModelComponents + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testPrescribedForce + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testPrescribedForce + + CMakeProjectManager.CMakeRunConfiguration.testPrescribedForce + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMuscleMetabolicsProbes + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMuscleMetabolicsProbes + + CMakeProjectManager.CMakeRunConfiguration.testMuscleMetabolicsProbes + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testProbes + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testProbes + + CMakeProjectManager.CMakeRunConfiguration.testProbes + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSimulationUtilities + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testSimulationUtilities + + CMakeProjectManager.CMakeRunConfiguration.testSimulationUtilities + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testJoints + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testJoints + + CMakeProjectManager.CMakeRunConfiguration.testJoints + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testConstraints + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testConstraints + + CMakeProjectManager.CMakeRunConfiguration.testConstraints + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSerializableMuscleCurves + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testSerializableMuscleCurves + + CMakeProjectManager.CMakeRunConfiguration.testSerializableMuscleCurves + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testActuators + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testActuators + + CMakeProjectManager.CMakeRunConfiguration.testActuators + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testAPDMDataReader + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testAPDMDataReader + + CMakeProjectManager.CMakeRunConfiguration.testAPDMDataReader + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMuscleFirstOrderActivationDynamicModel + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMuscleFirstOrderActivationDynamicModel + + CMakeProjectManager.CMakeRunConfiguration.testMuscleFirstOrderActivationDynamicModel + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testModelProcessor + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testModelProcessor + + CMakeProjectManager.CMakeRunConfiguration.testModelProcessor + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMuscleFixedWidthPennationModel + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMuscleFixedWidthPennationModel + + CMakeProjectManager.CMakeRunConfiguration.testMuscleFixedWidthPennationModel + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testDeGrooteFregly2016Muscle + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testDeGrooteFregly2016Muscle + + CMakeProjectManager.CMakeRunConfiguration.testDeGrooteFregly2016Muscle + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMuscles + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMuscles + + CMakeProjectManager.CMakeRunConfiguration.testMuscles + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testOutputReporter + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testOutputReporter + + CMakeProjectManager.CMakeRunConfiguration.testOutputReporter + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testExternalLoads + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testExternalLoads + + CMakeProjectManager.CMakeRunConfiguration.testExternalLoads + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testControllers + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testControllers + + CMakeProjectManager.CMakeRunConfiguration.testControllers + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testModelCopy + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testModelCopy + + CMakeProjectManager.CMakeRunConfiguration.testModelCopy + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSerializeOpenSimObjects + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testSerializeOpenSimObjects + + CMakeProjectManager.CMakeRunConfiguration.testSerializeOpenSimObjects + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testComponentInterface + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testComponentInterface + + CMakeProjectManager.CMakeRunConfiguration.testComponentInterface + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testVisualization + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testVisualization + + CMakeProjectManager.CMakeRunConfiguration.testVisualization + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoContact + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoContact + + CMakeProjectManager.CMakeRunConfiguration.testMocoContact + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoInverse + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoInverse + + CMakeProjectManager.CMakeRunConfiguration.testMocoInverse + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoMetabolics + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoMetabolics + + CMakeProjectManager.CMakeRunConfiguration.testMocoMetabolics + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoInterface + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoInterface + + CMakeProjectManager.CMakeRunConfiguration.testMocoInterface + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoConstraints + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoConstraints + + CMakeProjectManager.CMakeRunConfiguration.testMocoConstraints + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoImplicit + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoImplicit + + CMakeProjectManager.CMakeRunConfiguration.testMocoImplicit + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoAnalytic + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoAnalytic + + CMakeProjectManager.CMakeRunConfiguration.testMocoAnalytic + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoGoals + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoGoals + + CMakeProjectManager.CMakeRunConfiguration.testMocoGoals + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoActuators + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoActuators + + CMakeProjectManager.CMakeRunConfiguration.testMocoActuators + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testNCSpline + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testNCSpline + + CMakeProjectManager.CMakeRunConfiguration.testNCSpline + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoTrack + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoTrack + + CMakeProjectManager.CMakeRunConfiguration.testMocoTrack + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoParameters + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoParameters + + CMakeProjectManager.CMakeRunConfiguration.testMocoParameters + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleHopperDeviceAnswers + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleHopperDeviceAnswers + + CMakeProjectManager.CMakeRunConfiguration.exampleHopperDeviceAnswers + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleHopperDevice + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleHopperDevice + + CMakeProjectManager.CMakeRunConfiguration.exampleHopperDevice + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + example2DataTable + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + example2DataTable + + CMakeProjectManager.CMakeRunConfiguration.example2DataTable + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + example1DataTable + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + example1DataTable + + CMakeProjectManager.CMakeRunConfiguration.example1DataTable + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleTRCFileAdapter + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleTRCFileAdapter + + CMakeProjectManager.CMakeRunConfiguration.exampleTRCFileAdapter + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleSlidingMass + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleSlidingMass + + CMakeProjectManager.CMakeRunConfiguration.exampleSlidingMass + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleSlidingMassAdvanced + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleSlidingMassAdvanced + + CMakeProjectManager.CMakeRunConfiguration.exampleSlidingMassAdvanced + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleTracking + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleTracking + + CMakeProjectManager.CMakeRunConfiguration.exampleTracking + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSmoothSegmentedFunctionFactory + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testSmoothSegmentedFunctionFactory + + CMakeProjectManager.CMakeRunConfiguration.testSmoothSegmentedFunctionFactory + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleMarkerTracking + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleMarkerTracking + + CMakeProjectManager.CMakeRunConfiguration.exampleMarkerTracking + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleHangingMuscle + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleHangingMuscle + + CMakeProjectManager.CMakeRunConfiguration.exampleHangingMuscle + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + example2DWalkingMetabolics + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + example2DWalkingMetabolics + + CMakeProjectManager.CMakeRunConfiguration.example2DWalkingMetabolics + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + example2DWalking + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + example2DWalking + + CMakeProjectManager.CMakeRunConfiguration.example2DWalking + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleMocoInverse + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleMocoInverse + + CMakeProjectManager.CMakeRunConfiguration.exampleMocoInverse + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleMocoTrack + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleMocoTrack + + CMakeProjectManager.CMakeRunConfiguration.exampleMocoTrack + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleMocoCustomEffortGoal + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleMocoCustomEffortGoal + + CMakeProjectManager.CMakeRunConfiguration.exampleMocoCustomEffortGoal + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleCustomImplicitAuxiliaryDynamics + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleCustomImplicitAuxiliaryDynamics + + CMakeProjectManager.CMakeRunConfiguration.exampleCustomImplicitAuxiliaryDynamics + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testComponents + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testComponents + + CMakeProjectManager.CMakeRunConfiguration.testComponents + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testAddComponents + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testAddComponents + + CMakeProjectManager.CMakeRunConfiguration.testAddComponents + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSTOFileAdapter + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testSTOFileAdapter + + CMakeProjectManager.CMakeRunConfiguration.testSTOFileAdapter + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testControllerExample + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testControllerExample + + CMakeProjectManager.CMakeRunConfiguration.testControllerExample + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleController + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleController + + CMakeProjectManager.CMakeRunConfiguration.exampleController + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testExampleMain + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testExampleMain + + CMakeProjectManager.CMakeRunConfiguration.testExampleMain + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleMain + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleMain + + CMakeProjectManager.CMakeRunConfiguration.exampleMain + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testOptimizationExample + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testOptimizationExample + + CMakeProjectManager.CMakeRunConfiguration.testOptimizationExample + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleOptimization + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleOptimization + + CMakeProjectManager.CMakeRunConfiguration.exampleOptimization + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCustomActuatorExample + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCustomActuatorExample + + CMakeProjectManager.CMakeRunConfiguration.testCustomActuatorExample + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleCustomActuator + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleCustomActuator + + CMakeProjectManager.CMakeRunConfiguration.exampleCustomActuator + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMuscleExample + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMuscleExample + + CMakeProjectManager.CMakeRunConfiguration.testMuscleExample + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleMuscle + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleMuscle + + CMakeProjectManager.CMakeRunConfiguration.exampleMuscle + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMarkerData + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMarkerData + + CMakeProjectManager.CMakeRunConfiguration.testMarkerData + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSimpleOptimizationExample + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testSimpleOptimizationExample + + CMakeProjectManager.CMakeRunConfiguration.testSimpleOptimizationExample + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleOptimizationSimple + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleOptimizationSimple + + CMakeProjectManager.CMakeRunConfiguration.exampleOptimizationSimple + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + checkEnvironment + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + checkEnvironment + + CMakeProjectManager.CMakeRunConfiguration.checkEnvironment + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testIterators + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testIterators + + CMakeProjectManager.CMakeRunConfiguration.testIterators + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testREADME + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testREADME + + CMakeProjectManager.CMakeRunConfiguration.testREADME + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testWrapping + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testWrapping + + CMakeProjectManager.CMakeRunConfiguration.testWrapping + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testExampleLuxoMuscle + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testExampleLuxoMuscle + + CMakeProjectManager.CMakeRunConfiguration.testExampleLuxoMuscle + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testBuildDynamicWalker + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testBuildDynamicWalker + + CMakeProjectManager.CMakeRunConfiguration.testBuildDynamicWalker + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testJointReactions + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testJointReactions + + CMakeProjectManager.CMakeRunConfiguration.testJointReactions + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testStaticOptimization + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testStaticOptimization + + CMakeProjectManager.CMakeRunConfiguration.testStaticOptimization + 3768 + false + true + false + false + true + + 122 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 18 + + + Version + 18 + + diff --git a/OpenSim/Simulation/Model/Interpolate.cpp b/OpenSim/Simulation/Model/Interpolate.cpp index 188e17501d..c75abd2111 100644 --- a/OpenSim/Simulation/Model/Interpolate.cpp +++ b/OpenSim/Simulation/Model/Interpolate.cpp @@ -44,7 +44,7 @@ bool coord_affects_muscle( // Constructors // ////////////////// // Default constructor -Interpolate::Interpolate(){}; +Interpolate::Interpolate(){} // General vector based interpolation constructor Interpolate::Interpolate(std::vector coordsIn, @@ -71,8 +71,8 @@ Interpolate::Interpolate(std::vector coordsIn, Interpolate::Interpolate(std::vector> discretizationIn, std::vector, double>> evalsPair) - : discretization(discretizationIn), - dimension(discretizationIn.size()), + : dimension(discretizationIn.size()), + discretization(discretizationIn), n(dimension,0), u(dimension,0), loc(dimension,0) @@ -124,8 +124,8 @@ Interpolate::Interpolate(OpenSim::PointBasedPath const& gp, OpenSim::Coordinate const** cBegin, OpenSim::Coordinate const** cEnd, SimTK::State& st, - std::vector& discretizationNPoints) - : dimension(discretizationNPoints.size()), + std::vector& nPoints) + : dimension(nPoints.size()), n(dimension,0), u(dimension,0), loc(dimension,0) @@ -159,7 +159,7 @@ Interpolate::Interpolate(OpenSim::PointBasedPath const& gp, const OpenSim::Coordinate& c = *cBegin[i]; dc.begin = std::max(c.getRangeMin(),-(double)SimTK_PI); dc.end = std::min(c.getRangeMax(),(double)SimTK_PI); - dc.nPoints = discretizationNPoints[i]; + dc.nPoints = nPoints[i]; dc.gridsize = (dc.end-dc.begin) / (dc.nPoints-1); dS.push_back(dc); } @@ -219,12 +219,12 @@ Interpolate::Interpolate(OpenSim::PointBasedPath const& gp, Interpolate::Interpolate(OpenSim::PointBasedPath const& pbp, std::vector coords, SimTK::State& st, - std::vector& discretizationNPoints) + std::vector& nPoints) : Interpolate(pbp, &coords[0], &coords[coords.size()-1], st, - discretizationNPoints) + nPoints) {} ///////////// diff --git a/OpenSim/Simulation/Model/Interpolate.h b/OpenSim/Simulation/Model/Interpolate.h index f626e731f4..4cea21d442 100644 --- a/OpenSim/Simulation/Model/Interpolate.h +++ b/OpenSim/Simulation/Model/Interpolate.h @@ -143,13 +143,13 @@ class Interpolate{ OpenSim::Coordinate const** cBegin, OpenSim::Coordinate const** cEnd, SimTK::State& st, - std::vector& discretizationNPoints); + std::vector& nPoints); // Basic constructor having a vector of coordinate pointers as input explicit Interpolate(OpenSim::PointBasedPath const& pbp, std::vector coords, SimTK::State& st, - std::vector& discretizationNPoints); + std::vector& nPoints); }; #endif // INTERPOLATE_H From 4cd6e0b154413c48df14a2660703d2c8aadcdc63 Mon Sep 17 00:00:00 2001 From: Joris Verhagen <56355937+joris997@users.noreply.github.com> Date: Wed, 14 Apr 2021 21:55:15 +0200 Subject: [PATCH 11/36] Delete CMakeLists.txt.user --- CMakeLists.txt.user | 6974 ------------------------------------------- 1 file changed, 6974 deletions(-) delete mode 100644 CMakeLists.txt.user diff --git a/CMakeLists.txt.user b/CMakeLists.txt.user deleted file mode 100644 index 6124700e22..0000000000 --- a/CMakeLists.txt.user +++ /dev/null @@ -1,6974 +0,0 @@ - - - - - - EnvironmentId - {31e18788-fd95-4ab4-9268-c7219c462e0d} - - - ProjectExplorer.Project.ActiveTarget - 0 - - - ProjectExplorer.Project.EditorSettings - - true - false - true - - Cpp - - CppGlobal - - - - QmlJS - - QmlJSGlobal - - - 2 - UTF-8 - false - 4 - false - 80 - true - true - 1 - true - false - 0 - true - true - 0 - 8 - true - 1 - true - true - true - false - - - - ProjectExplorer.Project.PluginSettings - - - - ProjectExplorer.Project.Target.0 - - Imported Kit - Imported Kit - {100e64e2-3594-40f4-a592-7d97f2f817ca} - 0 - 0 - 0 - - - CMAKE_BUILD_TYPE:STRING=RelWithDebInfo - - /home/none/opensim/interpolation/RelWithDebInfo-build - - - - - all - - true - CMake Build - - CMakeProjectManager.MakeStep - - 1 - Build - - ProjectExplorer.BuildSteps.Build - - - - - - clean - - true - CMake Build - - CMakeProjectManager.MakeStep - - 1 - Clean - - ProjectExplorer.BuildSteps.Clean - - 2 - false - - Release with Debug Information - Release with Debug Information - CMakeProjectManager.CMakeBuildConfiguration - - 1 - - - 0 - Deploy - - ProjectExplorer.BuildSteps.Deploy - - 1 - Deploy locally - - ProjectExplorer.DefaultDeployConfiguration - - 1 - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testLepton - - - /home/none/opensim/interpolation/RelWithDebInfo-build - 2 - - testLepton - - CMakeProjectManager.CMakeRunConfiguration.testLepton - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testTRCFileAdapter - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testTRCFileAdapter - - CMakeProjectManager.CMakeRunConfiguration.testTRCFileAdapter - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testPath - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testPath - - CMakeProjectManager.CMakeRunConfiguration.testPath - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testInducedAccelerations - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testInducedAccelerations - - CMakeProjectManager.CMakeRunConfiguration.testInducedAccelerations - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testAnalyzeTool - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testAnalyzeTool - - CMakeProjectManager.CMakeRunConfiguration.testAnalyzeTool - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testForward - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testForward - - CMakeProjectManager.CMakeRunConfiguration.testForward - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testScale - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testScale - - CMakeProjectManager.CMakeRunConfiguration.testScale - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testLiveIK - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testLiveIK - - CMakeProjectManager.CMakeRunConfiguration.testLiveIK - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testIK - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testIK - - CMakeProjectManager.CMakeRunConfiguration.testIK - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testID - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testID - - CMakeProjectManager.CMakeRunConfiguration.testID - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCSingleMuscle - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCSingleMuscle - - CMakeProjectManager.CMakeRunConfiguration.testCMCSingleMuscle - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCEMGDrivenArm_Thelen - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCEMGDrivenArm_Thelen - - CMakeProjectManager.CMakeRunConfiguration.testCMCEMGDrivenArm_Thelen - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCTwoMusclesOnBlock - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCTwoMusclesOnBlock - - CMakeProjectManager.CMakeRunConfiguration.testCMCTwoMusclesOnBlock - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testRootSolver - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testRootSolver - - CMakeProjectManager.CMakeRunConfiguration.testRootSolver - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCEMGDrivenArm_Millard - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCEMGDrivenArm_Millard - - CMakeProjectManager.CMakeRunConfiguration.testCMCEMGDrivenArm_Millard - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCArm26_Millard - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCArm26_Millard - - CMakeProjectManager.CMakeRunConfiguration.testCMCArm26_Millard - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCGait10dof18musc - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCGait10dof18musc - - CMakeProjectManager.CMakeRunConfiguration.testCMCGait10dof18musc - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCSingleRigidTendonMuscle - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCSingleRigidTendonMuscle - - CMakeProjectManager.CMakeRunConfiguration.testCMCSingleRigidTendonMuscle - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCWithControlConstraintsGait2354 - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCWithControlConstraintsGait2354 - - CMakeProjectManager.CMakeRunConfiguration.testCMCWithControlConstraintsGait2354 - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCWithControlConstraintsRunningModel - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCWithControlConstraintsRunningModel - - CMakeProjectManager.CMakeRunConfiguration.testCMCWithControlConstraintsRunningModel - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCArm26_Thelen - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCArm26_Thelen - - CMakeProjectManager.CMakeRunConfiguration.testCMCArm26_Thelen - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testRRA - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testRRA - - CMakeProjectManager.CMakeRunConfiguration.testRRA - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - opensense - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - opensense - - CMakeProjectManager.CMakeRunConfiguration.opensense - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testOpenSense - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testOpenSense - - CMakeProjectManager.CMakeRunConfiguration.testOpenSense - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testFunctions - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testFunctions - - CMakeProjectManager.CMakeRunConfiguration.testFunctions - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - opensim-cmd - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - opensim-cmd - - CMakeProjectManager.CMakeRunConfiguration.opensim-cmd - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCommandLineInterface - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCommandLineInterface - - CMakeProjectManager.CMakeRunConfiguration.testCommandLineInterface - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testGCVSpline - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testGCVSpline - - CMakeProjectManager.CMakeRunConfiguration.testGCVSpline - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSerialization - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSerialization - - CMakeProjectManager.CMakeRunConfiguration.testSerialization - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testStorage - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testStorage - - CMakeProjectManager.CMakeRunConfiguration.testStorage - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testXsensDataReader - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testXsensDataReader - - CMakeProjectManager.CMakeRunConfiguration.testXsensDataReader - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testWrappingMath - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testWrappingMath - - CMakeProjectManager.CMakeRunConfiguration.testWrappingMath - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testTableProcessor - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testTableProcessor - - CMakeProjectManager.CMakeRunConfiguration.testTableProcessor - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testStatesTrajectory - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testStatesTrajectory - - CMakeProjectManager.CMakeRunConfiguration.testStatesTrajectory - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testFunctionAdapter - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testFunctionAdapter - - CMakeProjectManager.CMakeRunConfiguration.testFunctionAdapter - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testInverseKinematicsSolver - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testInverseKinematicsSolver - - CMakeProjectManager.CMakeRunConfiguration.testInverseKinematicsSolver - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testInitState - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testInitState - - CMakeProjectManager.CMakeRunConfiguration.testInitState - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testFrames - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testFrames - - CMakeProjectManager.CMakeRunConfiguration.testFrames - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testModelInterface - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testModelInterface - - CMakeProjectManager.CMakeRunConfiguration.testModelInterface - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testForces - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testForces - - CMakeProjectManager.CMakeRunConfiguration.testForces - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testAssemblySolver - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testAssemblySolver - - CMakeProjectManager.CMakeRunConfiguration.testAssemblySolver - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testManager - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testManager - - CMakeProjectManager.CMakeRunConfiguration.testManager - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMomentArms - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMomentArms - - CMakeProjectManager.CMakeRunConfiguration.testMomentArms - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testReportersWithModel - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testReportersWithModel - - CMakeProjectManager.CMakeRunConfiguration.testReportersWithModel - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testPoints - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testPoints - - CMakeProjectManager.CMakeRunConfiguration.testPoints - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testDataTable - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testDataTable - - CMakeProjectManager.CMakeRunConfiguration.testDataTable - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testContactGeometry - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testContactGeometry - - CMakeProjectManager.CMakeRunConfiguration.testContactGeometry - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testNestedModelComponents - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testNestedModelComponents - - CMakeProjectManager.CMakeRunConfiguration.testNestedModelComponents - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testPrescribedForce - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testPrescribedForce - - CMakeProjectManager.CMakeRunConfiguration.testPrescribedForce - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMuscleMetabolicsProbes - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMuscleMetabolicsProbes - - CMakeProjectManager.CMakeRunConfiguration.testMuscleMetabolicsProbes - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testProbes - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testProbes - - CMakeProjectManager.CMakeRunConfiguration.testProbes - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSimulationUtilities - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSimulationUtilities - - CMakeProjectManager.CMakeRunConfiguration.testSimulationUtilities - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testJoints - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testJoints - - CMakeProjectManager.CMakeRunConfiguration.testJoints - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testConstraints - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testConstraints - - CMakeProjectManager.CMakeRunConfiguration.testConstraints - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSerializableMuscleCurves - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSerializableMuscleCurves - - CMakeProjectManager.CMakeRunConfiguration.testSerializableMuscleCurves - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testActuators - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testActuators - - CMakeProjectManager.CMakeRunConfiguration.testActuators - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testAPDMDataReader - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testAPDMDataReader - - CMakeProjectManager.CMakeRunConfiguration.testAPDMDataReader - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMuscleFirstOrderActivationDynamicModel - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMuscleFirstOrderActivationDynamicModel - - CMakeProjectManager.CMakeRunConfiguration.testMuscleFirstOrderActivationDynamicModel - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testModelProcessor - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testModelProcessor - - CMakeProjectManager.CMakeRunConfiguration.testModelProcessor - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMuscleFixedWidthPennationModel - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMuscleFixedWidthPennationModel - - CMakeProjectManager.CMakeRunConfiguration.testMuscleFixedWidthPennationModel - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testDeGrooteFregly2016Muscle - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testDeGrooteFregly2016Muscle - - CMakeProjectManager.CMakeRunConfiguration.testDeGrooteFregly2016Muscle - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMuscles - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMuscles - - CMakeProjectManager.CMakeRunConfiguration.testMuscles - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testOutputReporter - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testOutputReporter - - CMakeProjectManager.CMakeRunConfiguration.testOutputReporter - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testExternalLoads - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testExternalLoads - - CMakeProjectManager.CMakeRunConfiguration.testExternalLoads - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testControllers - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testControllers - - CMakeProjectManager.CMakeRunConfiguration.testControllers - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testModelCopy - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testModelCopy - - CMakeProjectManager.CMakeRunConfiguration.testModelCopy - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSerializeOpenSimObjects - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSerializeOpenSimObjects - - CMakeProjectManager.CMakeRunConfiguration.testSerializeOpenSimObjects - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testComponentInterface - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testComponentInterface - - CMakeProjectManager.CMakeRunConfiguration.testComponentInterface - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testVisualization - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testVisualization - - CMakeProjectManager.CMakeRunConfiguration.testVisualization - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoContact - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoContact - - CMakeProjectManager.CMakeRunConfiguration.testMocoContact - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoInverse - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoInverse - - CMakeProjectManager.CMakeRunConfiguration.testMocoInverse - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoMetabolics - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoMetabolics - - CMakeProjectManager.CMakeRunConfiguration.testMocoMetabolics - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoInterface - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoInterface - - CMakeProjectManager.CMakeRunConfiguration.testMocoInterface - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoConstraints - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoConstraints - - CMakeProjectManager.CMakeRunConfiguration.testMocoConstraints - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoImplicit - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoImplicit - - CMakeProjectManager.CMakeRunConfiguration.testMocoImplicit - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoAnalytic - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoAnalytic - - CMakeProjectManager.CMakeRunConfiguration.testMocoAnalytic - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoGoals - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoGoals - - CMakeProjectManager.CMakeRunConfiguration.testMocoGoals - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoActuators - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoActuators - - CMakeProjectManager.CMakeRunConfiguration.testMocoActuators - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testNCSpline - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testNCSpline - - CMakeProjectManager.CMakeRunConfiguration.testNCSpline - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoTrack - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoTrack - - CMakeProjectManager.CMakeRunConfiguration.testMocoTrack - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoParameters - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoParameters - - CMakeProjectManager.CMakeRunConfiguration.testMocoParameters - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleHopperDeviceAnswers - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleHopperDeviceAnswers - - CMakeProjectManager.CMakeRunConfiguration.exampleHopperDeviceAnswers - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleHopperDevice - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleHopperDevice - - CMakeProjectManager.CMakeRunConfiguration.exampleHopperDevice - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - example2DataTable - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - example2DataTable - - CMakeProjectManager.CMakeRunConfiguration.example2DataTable - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - example1DataTable - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - example1DataTable - - CMakeProjectManager.CMakeRunConfiguration.example1DataTable - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleTRCFileAdapter - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleTRCFileAdapter - - CMakeProjectManager.CMakeRunConfiguration.exampleTRCFileAdapter - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleSlidingMass - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleSlidingMass - - CMakeProjectManager.CMakeRunConfiguration.exampleSlidingMass - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleSlidingMassAdvanced - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleSlidingMassAdvanced - - CMakeProjectManager.CMakeRunConfiguration.exampleSlidingMassAdvanced - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleTracking - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleTracking - - CMakeProjectManager.CMakeRunConfiguration.exampleTracking - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSmoothSegmentedFunctionFactory - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSmoothSegmentedFunctionFactory - - CMakeProjectManager.CMakeRunConfiguration.testSmoothSegmentedFunctionFactory - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleMarkerTracking - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleMarkerTracking - - CMakeProjectManager.CMakeRunConfiguration.exampleMarkerTracking - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleHangingMuscle - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleHangingMuscle - - CMakeProjectManager.CMakeRunConfiguration.exampleHangingMuscle - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - example2DWalkingMetabolics - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - example2DWalkingMetabolics - - CMakeProjectManager.CMakeRunConfiguration.example2DWalkingMetabolics - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - example2DWalking - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - example2DWalking - - CMakeProjectManager.CMakeRunConfiguration.example2DWalking - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleMocoInverse - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleMocoInverse - - CMakeProjectManager.CMakeRunConfiguration.exampleMocoInverse - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleMocoTrack - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleMocoTrack - - CMakeProjectManager.CMakeRunConfiguration.exampleMocoTrack - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleMocoCustomEffortGoal - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleMocoCustomEffortGoal - - CMakeProjectManager.CMakeRunConfiguration.exampleMocoCustomEffortGoal - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleCustomImplicitAuxiliaryDynamics - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleCustomImplicitAuxiliaryDynamics - - CMakeProjectManager.CMakeRunConfiguration.exampleCustomImplicitAuxiliaryDynamics - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testComponents - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testComponents - - CMakeProjectManager.CMakeRunConfiguration.testComponents - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testAddComponents - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testAddComponents - - CMakeProjectManager.CMakeRunConfiguration.testAddComponents - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSTOFileAdapter - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSTOFileAdapter - - CMakeProjectManager.CMakeRunConfiguration.testSTOFileAdapter - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testControllerExample - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testControllerExample - - CMakeProjectManager.CMakeRunConfiguration.testControllerExample - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleController - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleController - - CMakeProjectManager.CMakeRunConfiguration.exampleController - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testExampleMain - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testExampleMain - - CMakeProjectManager.CMakeRunConfiguration.testExampleMain - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleMain - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleMain - - CMakeProjectManager.CMakeRunConfiguration.exampleMain - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testOptimizationExample - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testOptimizationExample - - CMakeProjectManager.CMakeRunConfiguration.testOptimizationExample - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleOptimization - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleOptimization - - CMakeProjectManager.CMakeRunConfiguration.exampleOptimization - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCustomActuatorExample - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCustomActuatorExample - - CMakeProjectManager.CMakeRunConfiguration.testCustomActuatorExample - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleCustomActuator - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleCustomActuator - - CMakeProjectManager.CMakeRunConfiguration.exampleCustomActuator - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMuscleExample - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMuscleExample - - CMakeProjectManager.CMakeRunConfiguration.testMuscleExample - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleMuscle - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleMuscle - - CMakeProjectManager.CMakeRunConfiguration.exampleMuscle - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMarkerData - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMarkerData - - CMakeProjectManager.CMakeRunConfiguration.testMarkerData - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSimpleOptimizationExample - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSimpleOptimizationExample - - CMakeProjectManager.CMakeRunConfiguration.testSimpleOptimizationExample - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleOptimizationSimple - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleOptimizationSimple - - CMakeProjectManager.CMakeRunConfiguration.exampleOptimizationSimple - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - checkEnvironment - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - checkEnvironment - - CMakeProjectManager.CMakeRunConfiguration.checkEnvironment - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testIterators - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testIterators - - CMakeProjectManager.CMakeRunConfiguration.testIterators - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testREADME - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testREADME - - CMakeProjectManager.CMakeRunConfiguration.testREADME - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testWrapping - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testWrapping - - CMakeProjectManager.CMakeRunConfiguration.testWrapping - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testExampleLuxoMuscle - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testExampleLuxoMuscle - - CMakeProjectManager.CMakeRunConfiguration.testExampleLuxoMuscle - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testBuildDynamicWalker - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testBuildDynamicWalker - - CMakeProjectManager.CMakeRunConfiguration.testBuildDynamicWalker - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testJointReactions - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testJointReactions - - CMakeProjectManager.CMakeRunConfiguration.testJointReactions - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testStaticOptimization - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testStaticOptimization - - CMakeProjectManager.CMakeRunConfiguration.testStaticOptimization - 3768 - false - true - false - false - true - - 122 - - - - ProjectExplorer.Project.TargetCount - 1 - - - ProjectExplorer.Project.Updater.FileVersion - 18 - - - Version - 18 - - From a96c4fe3aa3b8d2c721b9c098d5932a03989a712 Mon Sep 17 00:00:00 2001 From: joris997 Date: Wed, 14 Apr 2021 23:45:25 +0200 Subject: [PATCH 12/36] fixed dependency to make dir --- OpenSim/Tools/FunctionBasedPathModelTool.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/OpenSim/Tools/FunctionBasedPathModelTool.cpp b/OpenSim/Tools/FunctionBasedPathModelTool.cpp index 678917c982..25f28300dc 100644 --- a/OpenSim/Tools/FunctionBasedPathModelTool.cpp +++ b/OpenSim/Tools/FunctionBasedPathModelTool.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include using namespace OpenSim; @@ -38,7 +39,7 @@ int main(int argc, char **argv){ return 0; } else { char const* arg = argv[0]; - if (!strcmp(argument,"--help")){ + if (!strcmp(arg,"--help")){ std::cout << HELP; return 0; } else { From a9e8d23ff6a82a4ab929ff03b524e5d7579713dd Mon Sep 17 00:00:00 2001 From: Adam Kewley Date: Thu, 15 Apr 2021 16:08:13 +0100 Subject: [PATCH 13/36] Initial refactor - compiles but needs fixing etc. --- Bindings/OpenSimHeaders_simulation.h | 1 - .../Model/Blankevoort1991Ligament.cpp | 1 - .../Model/Blankevoort1991Ligament.h | 4 +- .../Simulation/Model/FunctionBasedPath.cpp | 908 +++++++++++++++--- OpenSim/Simulation/Model/FunctionBasedPath.h | 130 ++- OpenSim/Simulation/Model/GeometryPath.h | 76 +- OpenSim/Simulation/Model/Interpolate.cpp | 398 -------- OpenSim/Simulation/Model/Interpolate.h | 155 --- OpenSim/Simulation/Model/PointBasedPath.h | 63 +- OpenSim/Simulation/osimSimulation.h | 1 - OpenSim/Tools/FunctionBasedPathModelTool.cpp | 285 ++++-- 11 files changed, 1151 insertions(+), 871 deletions(-) delete mode 100644 OpenSim/Simulation/Model/Interpolate.cpp delete mode 100644 OpenSim/Simulation/Model/Interpolate.h diff --git a/Bindings/OpenSimHeaders_simulation.h b/Bindings/OpenSimHeaders_simulation.h index 338678868d..7138d9c5b0 100644 --- a/Bindings/OpenSimHeaders_simulation.h +++ b/Bindings/OpenSimHeaders_simulation.h @@ -113,7 +113,6 @@ #include #include #include -#include #include #include diff --git a/OpenSim/Simulation/Model/Blankevoort1991Ligament.cpp b/OpenSim/Simulation/Model/Blankevoort1991Ligament.cpp index 6c349fb352..43d376d35e 100644 --- a/OpenSim/Simulation/Model/Blankevoort1991Ligament.cpp +++ b/OpenSim/Simulation/Model/Blankevoort1991Ligament.cpp @@ -81,7 +81,6 @@ void Blankevoort1991Ligament::setNull() } void Blankevoort1991Ligament::constructProperties() { -// constructProperty_GeometryPath(GeometryPath()); constructProperty_linear_stiffness(1.0); constructProperty_transition_strain(0.06); constructProperty_damping_coefficient(0.003); diff --git a/OpenSim/Simulation/Model/Blankevoort1991Ligament.h b/OpenSim/Simulation/Model/Blankevoort1991Ligament.h index 4ac92b6d27..4177aa704c 100644 --- a/OpenSim/Simulation/Model/Blankevoort1991Ligament.h +++ b/OpenSim/Simulation/Model/Blankevoort1991Ligament.h @@ -24,9 +24,7 @@ * -------------------------------------------------------------------------- */ #include -//#include -#include -#include +#include namespace OpenSim { diff --git a/OpenSim/Simulation/Model/FunctionBasedPath.cpp b/OpenSim/Simulation/Model/FunctionBasedPath.cpp index 9f8d52b2e9..cad49ecf61 100644 --- a/OpenSim/Simulation/Model/FunctionBasedPath.cpp +++ b/OpenSim/Simulation/Model/FunctionBasedPath.cpp @@ -1,75 +1,779 @@ #include "FunctionBasedPath.h" -#include "Model.h" -#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include using namespace std; using namespace OpenSim; using namespace SimTK; using SimTK::Vec3; -// Default constructor -FunctionBasedPath::FunctionBasedPath(){ - constructProperty_identity(0); - readContent(); +//////////////////// +// Helper structs // +//////////////////// +struct Discretization{ + double begin; + double end; + int nPoints; + double gridsize; +}; +struct Nonzero_conditions final { + double input_val; + double nonzero_ma; +}; + +// defer an action until the destruction of this wrapper +template +struct Defer final { + Callback cb; + Defer(Callback _cb) : cb{std::move(_cb)} { + } + Defer(Defer const&) = delete; + Defer(Defer&&) noexcept = default; + Defer& operator=(Defer const&) = delete; + Defer& operator=(Defer&&) = delete; + ~Defer() noexcept { + cb(); + } +}; + +// Define helper functions (see .cpp file) +template +Defer defer_action(Callback cb); + +bool coord_affects_muscle( + OpenSim::PointBasedPath const& pbp, + OpenSim::Coordinate const& c, + SimTK::State& state, + Nonzero_conditions& out); + +////////////////////// +// Helper functions // +////////////////////// +template +void linspace(std::vector &linspaced, T start_in, T end_in, int num_in){ + double start = static_cast(start_in); + double end = static_cast(end_in); + double num = static_cast(num_in); + + if (num == 0){ + return; + } + if (num == 1){ + linspaced.push_back(start); + return; + } + + double delta = (end - start) / (num - 1); + for(int i=0; i < num-1; ++i){ + linspaced.push_back(start + delta * i); + } + linspaced.push_back(end); } -// Constructor for reading in information from file and creating -// an interpolation object based on that file -FunctionBasedPath::FunctionBasedPath(int id) -{ - constructProperty_identity(0); +class Interpolate{ + private: + // dimension of the interpolation (e.g. two states -> 2D -> 2) + int dimension; + // vector containing the orthogonal discretization vectors + // e.g. disc[0] = xrange, disc[1] = yrange etc. + std::vector> discretization; + std::vector discSizes; + // array containing the evaluations over the discretizations + std::vector evals; + // vector containing index closest to discretization point + std::vector n; + // vector containing fraction of closest index to discretization + // point to next + std::vector u; + // array of polynomial evaluation + std::vector> beta; + // vector of an index in the evalsPair + std::vector loc; + + // OPENSIM INTEGRATION + std::vector dS; + std::vector coords; + + public: + // getting + std::vector getRange(int i) const {return discretization[i];} + int getDimension() const {return dimension;} + std::vector getdS() const {return dS;} + std::vector getEvals() const {return evals;} + + // template member functions + double getEval(); + + // 0th derivative + double getInterp(const std::vector& x); + double getInterp(const SimTK::State& s); + double getLength(const SimTK::State& s); + + // 1st derivative + double getInterpDer(const std::vector& x, + int coordinate, double h=0.0001); + double getInterpDer(const SimTK::State& s, + int coordinate); + double getInterpDer(const SimTK::State& s, + const OpenSim::Coordinate& coordinate); + double getLengtheningSpeed(const SimTK::State& s); + + // Default constructor + Interpolate() = default; + + // Precomputed data constructor + explicit Interpolate(std::vector coordsIn, + std::vector dSIn, + std::vector evalsIn); + + // Constructor for non FBP/PBP related interpolation + explicit Interpolate(std::vector> discretizationIn, + std::vector,double>> evalsPair); + + // General interface constructor + // allows one to create an interface constructor as shown below + // with a vector of coordinates + explicit Interpolate(OpenSim::PointBasedPath const& pbp, + OpenSim::Coordinate const** cBegin, + OpenSim::Coordinate const** cEnd, + SimTK::State& st, + std::vector& nPoints); + + // Basic constructor having a vector of coordinate pointers as input + explicit Interpolate(OpenSim::PointBasedPath const& pbp, + std::vector coords, + SimTK::State& st, + std::vector& nPoints); +}; + +//#define DEBUG + +////////////////////// +// Helper functions // +////////////////////// +template +Defer defer_action(Callback cb) { + return Defer{std::move(cb)}; +} + +bool coord_affects_muscle( + OpenSim::PointBasedPath const& pbp, + OpenSim::Coordinate const& c, + SimTK::State& state, + Nonzero_conditions& out) { + + bool prev_locked = c.getLocked(state); + auto reset_locked = defer_action([&] { c.setLocked(state, prev_locked); }); + double prev_val = c.getValue(state); + auto reset_val = defer_action([&] { c.setValue(state, prev_val); }); + + c.setLocked(state, false); + + static constexpr int num_steps = 3; + double start = c.getRangeMin(); + double end = c.getRangeMax(); + double step = (end - start) / num_steps; + + for (double v = start; v <= end; v += step) { + c.setValue(state, v); + double ma = pbp.computeMomentArm(state, c); + if (std::abs(ma) > 0.001) { + out.input_val = v; + out.nonzero_ma = ma; + return true; + } + } + return false; +} + +// General vector based interpolation constructor +Interpolate::Interpolate(std::vector coordsIn, + std::vector dSIn, + std::vector evalsIn) + : dimension(dSIn.size()), + evals(evalsIn), + n(dimension,0), + u(dimension,0), + loc(dimension,0), + dS(dSIn), + coords(coordsIn) + { + std::vector dc_; + for (int i=0; i> discretizationIn, + std::vector, double>> evalsPair) + : dimension(discretizationIn.size()), + discretization(discretizationIn), + n(dimension,0), + u(dimension,0), + loc(dimension,0) + { + assert(discretization.size() == evalsPair[0].first.size()); + // allow it to work with the new struct method + for (int i=0; i cnt(dimension,0); + for (int i=0; i=0; x--){ + if (cnt[x] != dS[x].nPoints-1){ + cnt[x] += 1; + break; + } + if (cnt[x] == dS[x].nPoints-1){ + for (int y=x; y& nPoints) + : dimension(nPoints.size()), + n(dimension,0), + u(dimension,0), + loc(dimension,0) + { + // get the size of the 'vector'. Inclusive bottom, exclusive top + std::ptrdiff_t n = (cEnd-cBegin)+1; + assert(n > 0); + assert(dimension == (int)n); + + // put all coordinate pointers in a vector to later unpack an incoming + // state to a vector of coordinate values + for (int i=0; i cnt(dimension); + std::vector coordValues(dimension); + for (int i=0; i=0; x--){ + if (cnt[x] != dS[x].nPoints-1){ + cnt[x] += 1; + break; + } else{ + for (int y=x; y dc_; + for (int i=0; i coords, + SimTK::State& st, + std::vector& nPoints) + : Interpolate(pbp, + &coords[0], + &coords[coords.size()-1], + st, + nPoints) + {} + +///////////// +// Methods // +///////////// +// getLength based on the state +double Interpolate::getLength(const SimTK::State& s){ + return getInterp(s); +} +// getLength with mapping from State to vector x +double Interpolate::getInterp(const SimTK::State &s){ + assert(coords.size() != 0); + std::vector x; + for (unsigned i=0; igetValue(s)); + } + return getInterp(x); +} +double Interpolate::getInterp(const std::vector &x){ + // This is the main interpolation function + // IN: x, a vector of points within the considered interpolation range + // OUT: eval, the interpolated value + assert(x.size() == dimension); + + // get the index of the closest range value to the discretization point + for (int i=0; i= x[i];}); + n[i] = std::distance(discretization[i].begin(), it)-1; + } + + // compute remaining fraction + for (int i=0; i=0; x--){ + if (discrLoopCnt[x] != 2){ + discrLoopCnt[x] += 1; + break; + } + if (discrLoopCnt[x] == 2){ + for (int y=x; ygetName() == aCoord.getName()){ + return getInterpDer(s,i); + } + } + return 0.0; +} + +double Interpolate::getLengtheningSpeed(const SimTK::State& s){ + double lengtheningSpeed = 0; + for (int i=0; igetSpeedValue(s); + } + return lengtheningSpeed; +} +double Interpolate::getInterpDer(const SimTK::State &s, int coordinate){ + assert(coords.size() != 0); + std::vector x; + for (unsigned i=0; igetValue(s)); + } + return getInterpDer(x,coordinate); +} +double Interpolate::getInterpDer(const std::vector &x, + int coordinate, double h){ + assert(x.size() == dimension); + assert(coordinate <= dimension-1); + assert(h>0 && h < (dS[coordinate].end-x[coordinate])); + // This is the main interpolation function for derivatives + // IN: x, a vector of points within the considered interpolation range + // coordinate, the generalized coordinate of which we take derivative + // OUT: eval, the interpolated value + double f1 = getInterp(x); + + std::vector x2 = x; + x2[coordinate] += h; + double f2 = getInterp(x2); + + return (f2 - f1)/h; +} - upd_identity() = id; - readContent(); +double Interpolate::getEval(){ + // get the wrapping length evaluation given a vector 'loc' which contains, + // in ascending dimension, the index in each dimension + int factor = 1; + int idx = 0; + + for (int i=0; i{new Impl{}}; + p->interp = interp; + return p.release(); + } +}; + +FunctionBasedPath FunctionBasedPath::fromPointBasedPath(const Model& model, const PointBasedPath& pbp) { - constructProperty_identity(0); + FunctionBasedPath fbp; - upd_identity() = id; - upd_Appearance() = pbp.get_Appearance(); - setPathPointSet(pbp.getPathPointSet()); - setPathWrapSet(pbp.getWrapSet()); + // copy relevant data from source PBP + fbp.upd_Appearance() = pbp.get_Appearance(); + fbp.setPathPointSet(pbp.getPathPointSet()); + fbp.setPathWrapSet(pbp.getWrapSet()); - // Constructor for copying a PointBasedPath object and creating - // an interpolation object - vector coords; - vector affectingCoords; Nonzero_conditions cond; - Model* modelClone = model.clone(); - State& stClone = modelClone->initSystem(); - modelClone->equilibrateMuscles(stClone); - modelClone->realizeVelocity(stClone); + std::unique_ptr modelClone{model.clone()}; + SimTK::State& initialState = modelClone->initSystem(); + modelClone->equilibrateMuscles(initialState); + modelClone->realizeVelocity(initialState); - // find all coordinates in the model + std::vector coordsThatAffectPBP; for (Coordinate const& c : modelClone->getComponentList()){ - if (c.getMotionType() != Coordinate::MotionType::Coupled){ - coords.push_back(&c); + if (c.getMotionType() == Coordinate::MotionType::Coupled) { + continue; } - } - // find affecting coordinates for the muscle - for (Coordinate const* c : coords){ - if (coord_affects_muscle(pbp,*c,stClone,cond)){ - affectingCoords.push_back(c); - std::cout << "affecting coord: " << c->getName() << std::endl; + if (!coord_affects_muscle(pbp, c, initialState, cond)) { + continue; } + + coordsThatAffectPBP.push_back(&c); + std::cout << "affecting coord: " << c.getName() << std::endl; } + // create vector for number of interpolation points - vector nPoints(affectingCoords.size(),5); - // create interpolation object - interp = Interpolate(pbp,move(affectingCoords),stClone,nPoints); + std::vector nPoints(coordsThatAffectPBP.size(), 5); + + // reinitialize the default-initialized interp with the points + fbp._impl->interp = Interpolate{ + pbp, + std::move(coordsThatAffectPBP), + initialState, + nPoints + }; + + return fbp; } +FunctionBasedPath FunctionBasedPath::fromDataFile(const std::string &path) +{ + // data file for FunctionBasedPath top-level structure: + // + // - plaintext + // - line-oriented + // - 3 sections (HEADERS, DISCRETIZATIONS, and EVALUATIONS) separated + // by blank lines + // + // details: + // + // line content + // ------------------------------------------------------------------- + // 0 ID (string) + // 1 + // 2 DIMENSIONS (int) + // 3 + // --- end HEADERS + // 4 DISCRETIZATION_1 + // 5 DISCRETIZATION_2 + // 6- DISCRETIZATION_n + // 3+DIMENSIONS DISCRETIZATION_${DIMENSIONS} + // 3+DIMENSIONS+1 + // --- end DISCRETIZATIONS + // 3+DIMENSIONS+2 EVAL_1_1 + // 3+DIMENSIONS+3 EVAL_1_2 + // 3+DIMENSIONS+4- EVAL_1_m + // 3+DIMENSIONS+${points_in_range} EVAL_1_${points_in_range} + // 3+DIMENSIONS+${points_in_range}+1 EVAL_2_1 + // ... + // ? (depends on points_in_range for each discretization) + // ? EVAL_${DIMENSIONS}_${points_in_range} + // EOF + // + // where DISCRETIZATION_$n is tab-delimited (\t) line that describes + // evenly-spaced points along the `n`th DIMENSION: + // + // column content + // ------------------------------------------------ + // 0 range_start (float) + // 1 range_end (float) + // 2 points_in_range (int) + // 3 grid_size (float) + // + // and EVAL_$n_$m is a line that contains a single real-valued evaluation + // of the curve at: + // + // range_start + (m * ((range_end - range_start)/points_in_range)) + // + // along DIMENSION `n` + + FunctionBasedPath fbp; + fbp.setDataPath(path); + + std::ifstream file{path}; + + if (!file) { + std::stringstream msg; + msg << path << ": error opening FunctionBasedPath data file"; + OPENSIM_THROW(OpenSim::Exception, std::move(msg).str()); + } + + int lineno = 0; + std::string line; + + // ID (ignored) + while (std::getline(file, line)) { + ++lineno; + + if (line.empty()) { + break; + } + } + + // DIMENSIONS + int dimensions = -1; + while (std::getline(file, line)) { + ++lineno; + + if (line.empty()) { + if (dimensions <= -1) { + std::stringstream msg; + msg << path << ": L" << lineno << ": unexpected blank line (expected dimensions)"; + OPENSIM_THROW(OpenSim::Exception, std::move(msg).str()); + } + break; + } + + dimensions = std::stoi(line.c_str()); + } + + // [DISCRETIZATION_1..DISCRETIZATION_n] + std::vector discretizations; + discretizations.reserve(static_cast(dimensions)); + while (std::getline(file, line)) { + ++lineno; + + if (line.empty()) { + if (discretizations.size() != static_cast(dimensions)) { + std::stringstream msg; + msg << path << ": L" << lineno << ": invalid number of discretizations in this file: expected: " << dimensions << " got " << discretizations.size(); + OPENSIM_THROW(OpenSim::Exception, std::move(msg).str()); + } + + break; // end of DISCRETIZATIONs + } + + // DISCRETIZATION_i + Discretization d; + std::sscanf(line.c_str(), "%lf\t%lf\t%i\t%lf", &d.begin, &d.end, &d.nPoints, &d.gridsize); + discretizations.push_back(d); + } + + // [EVAL_1_1..EVAL_n_m] + std::vector evals; + while (std::getline(file, line)) { + ++lineno; + + if (line.empty()){ + break; // end of EVALs + } + + evals.push_back(atof(line.c_str())); + } + + // sanity check + { + size_t expectedEvals = 0; + for (const Discretization& d : discretizations) { + expectedEvals += static_cast(d.nPoints); + } + + if (expectedEvals != evals.size()) { + std::stringstream msg; + msg << path << ": L" << lineno << ": invalid number of function evaluations in this file: expected " << expectedEvals << " got " << evals.size(); + OPENSIM_THROW(OpenSim::Exception, std::move(msg).str()); + } + } + + // load those values into the interpolation class + fbp._impl->interp = Interpolate{ + std::vector(static_cast(dimensions)), + std::move(discretizations), + std::move(evals) + }; + + return fbp; +} + +FunctionBasedPath::FunctionBasedPath() : _impl{new Impl{}} +{ + constructProperty_data_path(""); +} +FunctionBasedPath::FunctionBasedPath(const FunctionBasedPath&) = default; +FunctionBasedPath::FunctionBasedPath(FunctionBasedPath&&) = default; +FunctionBasedPath& FunctionBasedPath::operator=(const FunctionBasedPath&) = default; +FunctionBasedPath& FunctionBasedPath::operator=(FunctionBasedPath&&) = default; +FunctionBasedPath::~FunctionBasedPath() noexcept = default; double FunctionBasedPath::getLength(const State& s) const { - return interp.getLength(s); + if (isCacheVariableValid(s, _lengthCV)) { + return getCacheVariableValue(s, _lengthCV); + } + + // else: compute it + double rv = _impl->interp.getLength(s); + setCacheVariableValue(s, _lengthCV, rv); + return rv; } void FunctionBasedPath::setLength(const State &s, double length) const @@ -79,7 +783,14 @@ void FunctionBasedPath::setLength(const State &s, double length) const double FunctionBasedPath::getLengtheningSpeed(const State &s) const { - return interp.getLengtheningSpeed(s); + if (isCacheVariableValid(s, _speedCV)) { + return getCacheVariableValue(s, _speedCV); + } + + // else: compute it + double rv = _impl->interp.getLengtheningSpeed(s); + setCacheVariableValue(s, _speedCV, rv); + return rv; } void FunctionBasedPath::setLengtheningSpeed(const State &s, double speed) const @@ -90,103 +801,30 @@ void FunctionBasedPath::setLengtheningSpeed(const State &s, double speed) const double FunctionBasedPath::computeMomentArm(const State& s, const Coordinate& aCoord) const { - return interp.getInterpDer(s,aCoord); + return _impl->interp.getInterpDer(s,aCoord); } +void FunctionBasedPath::printContent(std::ostream& out) const +{ + // see FunctionBasedPath::fromDataFile(const std::string &path) for format + // spec -void FunctionBasedPath::printContent(std::ofstream& printFile) const{ - printFile << get_identity() << "\n"; - printFile << "\n"; - printFile << interp.getDimension() << "\n"; - printFile << "\n"; + // HEADERS + out << get_data_path() << '\n' + << '\n' + << _impl->interp.getDimension() << '\n' + << '\n'; - vector dS = interp.getdS(); - for (unsigned i=0; iinterp.getdS()) { + out << d.begin << '\t' << d.end << '\t' << d.nPoints << '\t' << d.gridsize << '\n'; } - printFile << "\n"; + out << '\n'; - vector evals = interp.getEvals(); - for (unsigned i=0; iinterp.getEvals()) { + out << d << '\n'; } - printFile.close(); -} - -void FunctionBasedPath::readContent() { - vector coords; - vector dS; - vector evals; - - ifstream readFile; - // might change to tsv (tab/column delimeted file) - string filename = {"FBP"+to_string(get_identity())+".xml"}; - readFile.open(filename,ios::in); - - if (readFile){ - string sLine; - // get identity - while(std::getline(readFile,sLine)){ - if (sLine == ""){ - break; - } - assert(get_identity() == atof(sLine.c_str())); - } - // get dimension - while(std::getline(readFile,sLine)){ - if (sLine == ""){ - break; - } - int dimension = atof(sLine.c_str()); - } - // get interpolation discretization data - string delimiter = "\t"; - while(std::getline(readFile,sLine)){ - if (sLine == ""){ - break; - } - size_t last = 0; - size_t next = 0; - int cnt = 0; - Discretization disc; - while ((next = sLine.find(delimiter,last)) != string::npos){ - if (cnt == 0){ - disc.begin = atof(sLine.substr(last,next-last).c_str()); - } - if (cnt == 1){ - disc.end = atof(sLine.substr(last,next-last).c_str()); - } - if (cnt == 2){ - disc.nPoints = atof(sLine.substr(last,next-last).c_str()); - } - last = next + 1; - cnt++; - } - disc.gridsize = atof(sLine.substr(last).c_str()); - dS.push_back(disc); - } - assert(dS.size() == dimension); - - // get interpolation data - while(std::getline(readFile,sLine)){ - if (sLine == ""){ - break; - } - evals.push_back(atof(sLine.c_str())); - } - // NEED TO FIND THE AFFECTING COORDS OF THE CORRESPONDING MUSCLE -// for (unsigned i=0; i()){ -// if (co.getName() == coordsNames[i]){ -// coords.push_back(co); -// break; -// } -// } -// } - interp = Interpolate(coords,dS,evals); - } else { - cout << "Could not find file" << endl; - } + out.flush(); } diff --git a/OpenSim/Simulation/Model/FunctionBasedPath.h b/OpenSim/Simulation/Model/FunctionBasedPath.h index 7839f50822..eead1e00ca 100644 --- a/OpenSim/Simulation/Model/FunctionBasedPath.h +++ b/OpenSim/Simulation/Model/FunctionBasedPath.h @@ -1,12 +1,35 @@ #ifndef OPENSIM_FUNCTIONBASED_PATH_H_ #define OPENSIM_FUNCTIONBASED_PATH_H_ -#include "GeometryPath.h" -#include "PointBasedPath.h" -#include "Interpolate.h" -#include -#include -#include +/* -------------------------------------------------------------------------- * + * OpenSim: FunctionBasedPath.h * + * -------------------------------------------------------------------------- * + * The OpenSim API is a toolkit for musculoskeletal modeling and simulation. * + * See http://opensim.stanford.edu and the NOTICE file for more information. * + * OpenSim is developed at Stanford University and supported by the US * + * National Institutes of Health (U54 GM072970, R24 HD065690) and by DARPA * + * through the Warrior Web program. * + * * + * Copyright (c) 2005-2021 TU Delft and the Authors * + * Author(s): Joris Verhagen * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); you may * + * not use this file except in compliance with the License. You may obtain a * + * copy of the License at http://www.apache.org/licenses/LICENSE-2.0. * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + * -------------------------------------------------------------------------- */ + +#include + +#include +#include +#include +#include #ifdef SWIG #ifdef OSIMSIMULATION_API @@ -15,44 +38,83 @@ #endif #endif +// forward declarations namespace OpenSim { - +class Model; +class PointBasedPath; class Coordinate; -class PointForceDirection; -class ScaleSet; -class WrapResult; -class WrapObject; +} + +namespace SimTK { +class State; +} + +namespace OpenSim { -class OSIMSIMULATION_API FunctionBasedPath : public GeometryPath { +/** + * An `OpenSim::GeometryPath` that computes its length/lengtheningSpeed by + * interpolating a pre-computed Bezier curve. + * + * The precomputed curve can be produced from by fitting an existing + * `OpenSim::PointBasedPath` in a Model. You can use + * `FunctionBasedPath::fromPointBasedPath` to do that in code, or use the + * FunctionBasedPathModelTool do convert all `PointBasedPaths` in an osim into + * `FunctionBasedPath`s. + * + * The curve fitting implementation requires access to the whole OpenSim model + * that the (concrete) `PointBasedPath` is in. This is because the fitting + * implementation permutes the model's coordinates to fit the curve, and + * because a curve's paramaterization depends on its place in the Model as + * a whole. + */ +class OSIMSIMULATION_API FunctionBasedPath : public GeometryPath { OpenSim_DECLARE_CONCRETE_OBJECT(FunctionBasedPath, GeometryPath); - OpenSim_DECLARE_PROPERTY(identity,int,"Identity related to printed file"); + OpenSim_DECLARE_PROPERTY(data_path, std::string, "Path to the associated data file for this path. Typically, the file contains interpolated data that the implementation uses to compute the path's length and lengthening speed at simulation-time"); + struct Impl; private: - mutable Interpolate interp; + SimTK::ClonePtr _impl; public: - // Default constructor + /** + * Returns an in-memory representation of a FunctionBasedPath generated + * by fitting curves against the supplied PointBasedPath. + * + * Does not set the 'data' member (it's an in-memory represenation). Saving + * the resulting FunctionBasedPath without setting 'data' will throw an + * exception. + */ + static FunctionBasedPath fromPointBasedPath(const Model& model, + const PointBasedPath& pbp); + + /** + * Returns an FunctionBasedPath read from an associated data file + * + * The file must contain the content written by `printContent` + */ + static FunctionBasedPath fromDataFile(const std::string& path); + FunctionBasedPath(); - // Read data constructor - FunctionBasedPath(int id); - // Copy from PointBasedPath constructor - FunctionBasedPath(const Model& model, const PointBasedPath& pbp, int id); - - double getLength( const SimTK::State& s) const override; - void setLength( const SimTK::State& s, double length) const override; - double getLengtheningSpeed( const SimTK::State& s) const override; - void setLengtheningSpeed( const SimTK::State& s, - double speed) const override; - - double computeMomentArm(const SimTK::State &s, - const Coordinate &aCoord) const override; - - void printContent(std::ofstream& printFile) const; - void readContent(); - void setIdentity( int id) {upd_identity() = id;} - int getIdentity() const {return get_identity();} - Interpolate getInterpolate() const {return interp;} + FunctionBasedPath(const FunctionBasedPath&); + FunctionBasedPath(FunctionBasedPath&&); + FunctionBasedPath& operator=(const FunctionBasedPath&); + FunctionBasedPath& operator=(FunctionBasedPath&&); + ~FunctionBasedPath() noexcept override; + + double getLength(const SimTK::State& s) const override; + void setLength(const SimTK::State& s, double length) const override; + + double getLengtheningSpeed(const SimTK::State& s) const override; + void setLengtheningSpeed(const SimTK::State& s, double speed) const override; + + const std::string& getDataPath() const { return get_data_path(); } + void setDataPath(const std::string& newPath) { upd_data_path() = newPath; } + + double computeMomentArm(const SimTK::State& s, + const Coordinate& aCoord) const override; + + void printContent(std::ostream& printFile) const; }; } diff --git a/OpenSim/Simulation/Model/GeometryPath.h b/OpenSim/Simulation/Model/GeometryPath.h index f20d702d30..3b5d14650a 100644 --- a/OpenSim/Simulation/Model/GeometryPath.h +++ b/OpenSim/Simulation/Model/GeometryPath.h @@ -1,5 +1,6 @@ #ifndef OPENSIM_GEOMETRY_PATH_H_ #define OPENSIM_GEOMETRY_PATH_H_ + /* -------------------------------------------------------------------------- * * OpenSim: GeometryPath.h * * -------------------------------------------------------------------------- * @@ -23,14 +24,12 @@ * limitations under the License. * * -------------------------------------------------------------------------- */ - // INCLUDE #include -#include "OpenSim/Simulation/Model/ModelComponent.h" -#include "PathPointSet.h" -#include #include - +#include +#include +#include #ifdef SWIG #ifdef OSIMSIMULATION_API @@ -47,23 +46,35 @@ class ScaleSet; class WrapResult; class WrapObject; -//============================================================================= -//============================================================================= /** - * A base class representing a path (muscle, ligament, etc.). - * - * @author Peter Loan - * @version 1.0 - */ + * A base class that represents a path that has a computable length and + * lengthening speed. + * + * This class is typically used in places where the model needs to simulate + * the changes in a path over time. For example, in `OpenSim::Muscle`s, + * `OpenSim::Ligament`s, etc. + * + * This class *only* defines a length and lenghtning speed. Do not assume that + * an `OpenSim::GeometryPath` is a straight line between two points, or assume + * that it is many straight lines between `n` points. The derived + * implementation may define a path using points, or it may define a path using + * a curve fit. It may also define a path as + * `length == 17.3f && lengtheningSpeed == 5.0f`. All of those definitions are + * *logically* valid - even if they aren't *functionally* valid + */ class OSIMSIMULATION_API GeometryPath : public ModelComponent { OpenSim_DECLARE_ABSTRACT_OBJECT(GeometryPath, ModelComponent); - //============================================================================= - // OUTPUTS - //============================================================================= + +//============================================================================= +// OUTPUTS +//============================================================================= OpenSim_DECLARE_OUTPUT(length, double, getLength, SimTK::Stage::Position); - // - OpenSim_DECLARE_OUTPUT(lengthening_speed, double, getLengtheningSpeed, - SimTK::Stage::Velocity); + + OpenSim_DECLARE_OUTPUT( + lengthening_speed, + double, + getLengtheningSpeed, + SimTK::Stage::Velocity); //============================================================================= // DATA @@ -79,8 +90,8 @@ OpenSim_DECLARE_ABSTRACT_OBJECT(GeometryPath, ModelComponent); OpenSim_DECLARE_UNNAMED_PROPERTY(PathWrapSet, "The wrap objects that are associated with this path"); - // used for scaling tendon and fiber lengths protected: + // used for scaling tendon and fiber lengths double _preScaleLength; // Solver used to compute moment-arms. The GeometryPath owns this object, @@ -96,40 +107,35 @@ OpenSim_DECLARE_ABSTRACT_OBJECT(GeometryPath, ModelComponent); //============================================================================= // METHODS //============================================================================= - //-------------------------------------------------------------------------- - // CONSTRUCTION - //-------------------------------------------------------------------------- public: GeometryPath(); - ~GeometryPath() override = default; const PathPointSet& getPathPointSet() const { return get_PathPointSet(); } + void setPathPointSet(const PathPointSet& pps) { upd_PathPointSet() = pps; } PathPointSet& updPathPointSet() { return upd_PathPointSet(); } + const PathWrapSet& getWrapSet() const { return get_PathWrapSet(); } + void setPathWrapSet(const PathWrapSet& pws) { upd_PathWrapSet() = pws; } PathWrapSet& updWrapSet() { return upd_PathWrapSet(); } void addPathWrap(WrapObject& aWrapObject); - void setPathPointSet(const PathPointSet& pps) { upd_PathPointSet() = pps; } - void setPathWrapSet(const PathWrapSet& pws) { upd_PathWrapSet() = pws; } //-------------------------------------------------------------------------- // UTILITY //-------------------------------------------------------------------------- + const Array& getCurrentPath( const SimTK::State& s) const; AbstractPathPoint* addPathPoint(const SimTK::State& s, int index, const PhysicalFrame& frame); AbstractPathPoint* appendNewPathPoint(const std::string& proposedName, const PhysicalFrame& frame, const SimTK::Vec3& locationOnFrame); - bool canDeletePathPoint( int index); + bool canDeletePathPoint(int index); bool deletePathPoint(const SimTK::State& s, int index); - + bool replacePathPoint(const SimTK::State& s, + AbstractPathPoint* oldPathPoint, + AbstractPathPoint* newPathPoint); + void moveUpPathWrap(const SimTK::State& s, int index); void moveDownPathWrap(const SimTK::State& s, int index); void deletePathWrap(const SimTK::State& s, int index); - bool replacePathPoint(const SimTK::State& s, AbstractPathPoint* oldPathPoint, - AbstractPathPoint* newPathPoint); - - //-------------------------------------------------------------------------- - // GET - //-------------------------------------------------------------------------- /** If you call this prior to extendAddToSystem() it will be used to initialize the color cache variable. Otherwise %GeometryPath will choose its own @@ -137,7 +143,8 @@ OpenSim_DECLARE_ABSTRACT_OBJECT(GeometryPath, ModelComponent); void setDefaultColor(const SimTK::Vec3& color) { updProperty_Appearance().setValueIsDefault(false); upd_Appearance().set_color(color); - }; + } + /** Returns the color that will be used to initialize the color cache at the next extendAddToSystem() call. The actual color used to draw the path will be taken from the cache variable, so may have changed. **/ @@ -160,7 +167,6 @@ OpenSim_DECLARE_ABSTRACT_OBJECT(GeometryPath, ModelComponent); double getPreScaleLength( const SimTK::State& s) const; void setPreScaleLength( const SimTK::State& s, double preScaleLength); - const Array& getCurrentPath( const SimTK::State& s) const; /** Get methods are made non-const as when the GeometryPath is a FunctionBased- Path, the Interpolation object inside of it changes after every evaluation **/ diff --git a/OpenSim/Simulation/Model/Interpolate.cpp b/OpenSim/Simulation/Model/Interpolate.cpp deleted file mode 100644 index c75abd2111..0000000000 --- a/OpenSim/Simulation/Model/Interpolate.cpp +++ /dev/null @@ -1,398 +0,0 @@ -#include "Interpolate.h" - -//#define DEBUG - -////////////////////// -// Helper functions // -////////////////////// -template -Defer defer_action(Callback cb) { - return Defer{std::move(cb)}; -} - -bool coord_affects_muscle( - OpenSim::PointBasedPath const& pbp, - OpenSim::Coordinate const& c, - SimTK::State& state, - Nonzero_conditions& out) { - - bool prev_locked = c.getLocked(state); - auto reset_locked = defer_action([&] { c.setLocked(state, prev_locked); }); - double prev_val = c.getValue(state); - auto reset_val = defer_action([&] { c.setValue(state, prev_val); }); - - c.setLocked(state, false); - - static constexpr int num_steps = 3; - double start = c.getRangeMin(); - double end = c.getRangeMax(); - double step = (end - start) / num_steps; - - for (double v = start; v <= end; v += step) { - c.setValue(state, v); - double ma = pbp.computeMomentArm(state, c); - if (std::abs(ma) > 0.001) { - out.input_val = v; - out.nonzero_ma = ma; - return true; - } - } - return false; -} - -////////////////// -// Constructors // -////////////////// -// Default constructor -Interpolate::Interpolate(){} - -// General vector based interpolation constructor -Interpolate::Interpolate(std::vector coordsIn, - std::vector dSIn, - std::vector evalsIn) - : dimension(dSIn.size()), - evals(evalsIn), - n(dimension,0), - u(dimension,0), - loc(dimension,0), - dS(dSIn), - coords(coordsIn) - { - std::vector dc_; - for (int i=0; i> discretizationIn, - std::vector, double>> evalsPair) - : dimension(discretizationIn.size()), - discretization(discretizationIn), - n(dimension,0), - u(dimension,0), - loc(dimension,0) - { - assert(discretization.size() == evalsPair[0].first.size()); - // allow it to work with the new struct method - for (int i=0; i cnt(dimension,0); - for (int i=0; i=0; x--){ - if (cnt[x] != dS[x].nPoints-1){ - cnt[x] += 1; - break; - } - if (cnt[x] == dS[x].nPoints-1){ - for (int y=x; y& nPoints) - : dimension(nPoints.size()), - n(dimension,0), - u(dimension,0), - loc(dimension,0) - { - // get the size of the 'vector'. Inclusive bottom, exclusive top - std::ptrdiff_t n = (cEnd-cBegin)+1; - assert(n > 0); - assert(dimension == (int)n); - - // put all coordinate pointers in a vector to later unpack an incoming - // state to a vector of coordinate values - for (int i=0; i cnt(dimension); - std::vector coordValues(dimension); - for (int i=0; i=0; x--){ - if (cnt[x] != dS[x].nPoints-1){ - cnt[x] += 1; - break; - } else{ - for (int y=x; y dc_; - for (int i=0; i coords, - SimTK::State& st, - std::vector& nPoints) - : Interpolate(pbp, - &coords[0], - &coords[coords.size()-1], - st, - nPoints) - {} - -///////////// -// Methods // -///////////// -// getLength based on the state -double Interpolate::getLength(const SimTK::State& s){ - return getInterp(s); -} -// getLength with mapping from State to vector x -double Interpolate::getInterp(const SimTK::State &s){ - assert(coords.size() != 0); - std::vector x; - for (unsigned i=0; igetValue(s)); - } - return getInterp(x); -} -double Interpolate::getInterp(const std::vector &x){ - // This is the main interpolation function - // IN: x, a vector of points within the considered interpolation range - // OUT: eval, the interpolated value - assert(x.size() == dimension); - - // get the index of the closest range value to the discretization point - for (int i=0; i= x[i];}); - n[i] = std::distance(discretization[i].begin(), it)-1; - } - - // compute remaining fraction - for (int i=0; i=0; x--){ - if (discrLoopCnt[x] != 2){ - discrLoopCnt[x] += 1; - break; - } - if (discrLoopCnt[x] == 2){ - for (int y=x; ygetName() == aCoord.getName()){ - return getInterpDer(s,i); - } - } - return 0.0; -} - -double Interpolate::getLengtheningSpeed(const SimTK::State& s){ - double lengtheningSpeed = 0; - for (int i=0; igetSpeedValue(s); - } - return lengtheningSpeed; -} -double Interpolate::getInterpDer(const SimTK::State &s, int coordinate){ - assert(coords.size() != 0); - std::vector x; - for (unsigned i=0; igetValue(s)); - } - return getInterpDer(x,coordinate); -} -double Interpolate::getInterpDer(const std::vector &x, - int coordinate, double h){ - assert(x.size() == dimension); - assert(coordinate <= dimension-1); - assert(h>0 && h < (dS[coordinate].end-x[coordinate])); - // This is the main interpolation function for derivatives - // IN: x, a vector of points within the considered interpolation range - // coordinate, the generalized coordinate of which we take derivative - // OUT: eval, the interpolated value - double f1 = getInterp(x); - - std::vector x2 = x; - x2[coordinate] += h; - double f2 = getInterp(x2); - - return (f2 - f1)/h; -} - -double Interpolate::getEval(){ - // get the wrapping length evaluation given a vector 'loc' which contains, - // in ascending dimension, the index in each dimension - int factor = 1; - int idx = 0; - - for (int i=0; i -#include -#include -#include -#include -#include -#include -#include - -#include "PointBasedPath.h" -#include - -//////////////////// -// Helper structs // -//////////////////// -struct Discretization{ - double begin; - double end; - int nPoints; - double gridsize; -}; -struct Nonzero_conditions final { - double input_val; - double nonzero_ma; -}; - -// defer an action until the destruction of this wrapper -template -struct Defer final { - Callback cb; - Defer(Callback _cb) : cb{std::move(_cb)} { - } - Defer(Defer const&) = delete; - Defer(Defer&&) noexcept = default; - Defer& operator=(Defer const&) = delete; - Defer& operator=(Defer&&) = delete; - ~Defer() noexcept { - cb(); - } -}; - -// Define helper functions (see .cpp file) -template -Defer defer_action(Callback cb); - -bool coord_affects_muscle( - OpenSim::PointBasedPath const& pbp, - OpenSim::Coordinate const& c, - SimTK::State& state, - Nonzero_conditions& out); - -////////////////////// -// Helper functions // -////////////////////// -template -void linspace(std::vector &linspaced, T start_in, T end_in, int num_in){ - double start = static_cast(start_in); - double end = static_cast(end_in); - double num = static_cast(num_in); - - if (num == 0){ - return; - } - if (num == 1){ - linspaced.push_back(start); - return; - } - - double delta = (end - start) / (num - 1); - for(int i=0; i < num-1; ++i){ - linspaced.push_back(start + delta * i); - } - linspaced.push_back(end); -} - -class Interpolate{ - private: - // dimension of the interpolation (e.g. two states -> 2D -> 2) - int dimension; - // vector containing the orthogonal discretization vectors - // e.g. disc[0] = xrange, disc[1] = yrange etc. - std::vector> discretization; - std::vector discSizes; - // array containing the evaluations over the discretizations - std::vector evals; - // vector containing index closest to discretization point - std::vector n; - // vector containing fraction of closest index to discretization - // point to next - std::vector u; - // array of polynomial evaluation - std::vector> beta; - // vector of an index in the evalsPair - std::vector loc; - - // OPENSIM INTEGRATION - std::vector dS; - std::vector coords; - - public: - // getting - std::vector getRange(int i) const {return discretization[i];} - int getDimension() const {return dimension;} - std::vector getdS() const {return dS;} - std::vector getEvals() const {return evals;} - - // template member functions - double getEval(); - - // 0th derivative - double getInterp(const std::vector& x); - double getInterp(const SimTK::State& s); - double getLength(const SimTK::State& s); - - // 1st derivative - double getInterpDer(const std::vector& x, - int coordinate, double h=0.0001); - double getInterpDer(const SimTK::State& s, - int coordinate); - double getInterpDer(const SimTK::State& s, - const OpenSim::Coordinate& coordinate); - double getLengtheningSpeed(const SimTK::State& s); - - // Default constructor - explicit Interpolate(); - - // Precomputed data constructor - explicit Interpolate(std::vector coordsIn, - std::vector dSIn, - std::vector evalsIn); - - // Constructor for non FBP/PBP related interpolation - explicit Interpolate(std::vector> discretizationIn, - std::vector,double>> evalsPair); - - // General interface constructor - // allows one to create an interface constructor as shown below - // with a vector of coordinates - explicit Interpolate(OpenSim::PointBasedPath const& pbp, - OpenSim::Coordinate const** cBegin, - OpenSim::Coordinate const** cEnd, - SimTK::State& st, - std::vector& nPoints); - - // Basic constructor having a vector of coordinate pointers as input - explicit Interpolate(OpenSim::PointBasedPath const& pbp, - std::vector coords, - SimTK::State& st, - std::vector& nPoints); -}; - -#endif // INTERPOLATE_H diff --git a/OpenSim/Simulation/Model/PointBasedPath.h b/OpenSim/Simulation/Model/PointBasedPath.h index 92b9d5558e..a18b76cca8 100644 --- a/OpenSim/Simulation/Model/PointBasedPath.h +++ b/OpenSim/Simulation/Model/PointBasedPath.h @@ -1,7 +1,30 @@ #ifndef OPENSIM_POINTBASED_PATH_H_ #define OPENSIM_POINTBASED_PATH_H_ -#include "GeometryPath.h" +/* -------------------------------------------------------------------------- * + * OpenSim: GeometryPath.h * + * -------------------------------------------------------------------------- * + * The OpenSim API is a toolkit for musculoskeletal modeling and simulation. * + * See http://opensim.stanford.edu and the NOTICE file for more information. * + * OpenSim is developed at Stanford University and supported by the US * + * National Institutes of Health (U54 GM072970, R24 HD065690) and by DARPA * + * through the Warrior Web program. * + * * + * Copyright (c) 2005-2021 TU Delft and the Authors * + * Author(s): Joris Verhagen * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); you may * + * not use this file except in compliance with the License. You may obtain a * + * copy of the License at http://www.apache.org/licenses/LICENSE-2.0. * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + * -------------------------------------------------------------------------- */ + +#include #ifdef SWIG #ifdef OSIMSIMULATION_API @@ -10,29 +33,41 @@ #endif #endif -namespace OpenSim { +// Forward declarations +namespace Simbody { +class State; +} +namespace OpenSim { class Coordinate; -class PointForceDirection; -class ScaleSet; -class WrapResult; -class WrapObject; +} +namespace OpenSim { + +/** + * An `OpenSim::GeometryPath` that is implemented as a sequence of points + * connected to their adjacent neighbors. + * + * Historically, in earlier versions of OpenSim, `OpenSim::GeometryPath`s were + * always implemented as `PointBasedPath`s. In later versions, there was a + * desire to define paths in terms of mathematical functions, curve fitting, + * lookups, etc., which is why the distinction now exists. + */ class OSIMSIMULATION_API PointBasedPath : public GeometryPath { OpenSim_DECLARE_CONCRETE_OBJECT(PointBasedPath, GeometryPath); public: PointBasedPath(); - double getLength( const SimTK::State& s) const override; - void setLength( const SimTK::State& s, double length) const override; - double getLengtheningSpeed( const SimTK::State& s) const override; - void setLengtheningSpeed( const SimTK::State& s, - double speed) const override; + double getLength(const SimTK::State& s) const override; + void setLength(const SimTK::State& s, double length) const override; + + double getLengtheningSpeed(const SimTK::State& s) const override; + void setLengtheningSpeed(const SimTK::State& s, double speed) const override; - double computeMomentArm(const SimTK::State &s, - const Coordinate &aCoord) const override; + double computeMomentArm(const SimTK::State& s, + const Coordinate& aCoord) const override; }; -} +} #endif diff --git a/OpenSim/Simulation/osimSimulation.h b/OpenSim/Simulation/osimSimulation.h index 7113e2f36c..c70414d845 100644 --- a/OpenSim/Simulation/osimSimulation.h +++ b/OpenSim/Simulation/osimSimulation.h @@ -56,7 +56,6 @@ #include "Model/GeometryPath.h" #include "Model/PointBasedPath.h" #include "Model/FunctionBasedPath.h" -#include "Model/Interpolate.h" #include "Model/PrescribedForce.h" #include "Model/PointToPointSpring.h" diff --git a/OpenSim/Tools/FunctionBasedPathModelTool.cpp b/OpenSim/Tools/FunctionBasedPathModelTool.cpp index 25f28300dc..c02fefd435 100644 --- a/OpenSim/Tools/FunctionBasedPathModelTool.cpp +++ b/OpenSim/Tools/FunctionBasedPathModelTool.cpp @@ -1,123 +1,220 @@ +#include + #include -#include #include #include +#include #include #include -#include -#include -#include +#include using namespace OpenSim; -static const char HELP[] = - "This tool converts a model with classic GeometryPaths or \ - PointBasedPaths (the path of the PathActuator is described \ - by discrete sets of points) to a model with FunctionBasedPaths \ - \ - To that end, when a model is provided, this tool creates a new \ - .osim file according to the convention -originalName-FBP.osim \ - and a .txt file containing the sampled interpolation grid data \ - \ - usage: \ - FunctionBasedPathModelTool [--help] pathToModel/model.osim \ - e.g.: \ - FunctionBasedPathModelTool /home/user/models/Arm26.osim"; - -int main(int argc, char **argv){ - // skip tool name +static const char usage[] = "FunctionBasedPathModelTool [--help] MODEL OUTPUT_NAME"; +static const char help_text[] = +R"( +ARGS + + --help print this help + -v, --verbose print verbose output + +DESCRIPTION + + This tool tries to convert an .osim file (MODEL) that contains + `GeometryPath`s and `PointBasedPath`s, into a functionally equivalent model + file, written to ${OUTPUT_NAME}.osim, that contains `FunctionBasedPath`s. + + The main reason to do this is performance. Computing a path at each timestep + in a simulation can be computationally expensive - especially if the path is + complex (e.g. contains complex wrapping geometry). Pre-computing the + path's topology ahead of time into a function-based lookup *may* speed up + simulations that spend a significant amount of time computing paths. + + This tool effectively: + + - Reads MODEL (the source model) + - Searches for `GeometryPath`s and `PointBasedPath`s in the source model + - Tries to parameterize those paths against the source model's coordinates + (e.g. joint coordinates), to produce an n-dimensional Bezier curve fit + of those paths + - Saves the fit data to ${OUTPUT_NAME}_DATA_${i}.txt, where `i` is an + arbirary ID that links the `FunctionBasedPath` in the output .osim file + to the Bezier fit's data + - Updates the source model to contain `FunctionBasedPath`s + - Writes the updated model to `${OUTPUT_NAME}.osim` + +EXAMPLE USAGE + + FunctionBasedPathModelTool RajagopalModel.osim RajagopalModel_Precomputed.osim +)"; + +int main(int argc, char **argv) { + // skip "FunctionBasedPathModelTool" --argc; ++argv; - // parse input arguments - std::string pbpModelString; - if (argc == 0){ - std::cout << "Provide an argument ('--help')" << std::endl; - return 0; - } else if (argc > 1) { - std::cout << "Provided too many arguments ('--help')" << std::endl; - return 0; - } else { - char const* arg = argv[0]; - if (!strcmp(arg,"--help")){ - std::cout << HELP; - return 0; - } else { - pbpModelString = argv[0]; + bool verbose = false; + char const* sourceModelPath = nullptr; + char const* outputName = nullptr; + + // parse CLI args + { + int nUnnamed = 0; + while (argc) { + const char* arg = argv[0]; + + // handle unnamed args + if (arg[0] != '-') { + switch (nUnnamed) { + case 0: + sourceModelPath = arg; + break; + case 1: + outputName = arg; + break; + default: + std::cerr << "FunctionBasedPathModelTool: error: too many arguments: should only supply 'MODEL' and 'OUTPUT_NAME'\n\nUSAGE: " + << usage + << std::endl; + return -1; + } + ++nUnnamed; + --argc; + ++argv; + continue; + } + + // flagged args + if (std::strcmp(arg, "--help") == 0) { + std::cout << "usage: " << usage << '\n' << help_text << std::endl; + return 0; + } else if (std::strcmp(arg, "--verbose") == 0 || std::strcmp(arg, "-v") == 0) { + verbose = true; + --argc; + ++argv; + } else { + std::cerr << "FunctionBasedPathModelTool: error: unknown argument '" + << arg + << "': see --help for usage info"; + return -1; + } + } + + if (nUnnamed != 2) { + std::cerr << "FunctionBasedPathModelTool: error: too few arguments supplied\n\n" + << usage + << std::endl; + return -1; } } - Model pbpModel(pbpModelString); - Model* fbpModel = pbpModel.clone(); - - pbpModel.finalizeConnections(); - pbpModel.finalizeFromProperties(); - pbpModel.initSystem(); - pbpModel.printSubcomponentInfo(); - - // Create folder for txt file data and new osim file - std::string modelPath = pbpModelString; - std::size_t found = modelPath.find_last_of("/\\"); - std::string modelName = modelPath.substr(found+1); - modelName = modelName.substr(0,modelName.find(".",0)); - - if (mkdir(modelName.c_str(),0777) == -1){ - std::cout << "Folder for model; " << modelName << " already created"; - std::cout << "so I'll just use that one and overwrite everything" - << std::endl; - } else { - std::cout << "Folder for model; " << modelName << " created" - << std::endl; + + Model sourceModel{sourceModelPath}; + Model outputModel{sourceModel}; + + sourceModel.finalizeConnections(); + sourceModel.finalizeFromProperties(); + sourceModel.initSystem(); + if (verbose) { + sourceModel.printSubcomponentInfo(); } - // Converting - std::vector fbps; - std::vector pbps; - std::ofstream printFile; - int id = 0; + // struct for holding source + dest actuators affected by this process + struct PathActuatorWithPointBasedPath final { + PathActuator& inSource; + PathActuator& inOutput; - for(PathActuator& pa : - pbpModel.updComponentList()){ - // const reference to a geometrypath - auto &pbp = pa.getGeometryPath(); + PathActuatorWithPointBasedPath(PathActuator& inSource_, + PathActuator& inOutput_) : + inSource{inSource_}, + inOutput{inOutput_} { + } + }; - // dynamic cast to check if its a pointbasedpath - const PointBasedPath* pbpp = dynamic_cast(&pbp); - pbps.push_back(*pbpp); - if(pbpp != nullptr){ - std::cout << "pa: " << pa.getName() << std::endl; + // collect actuators with `PointBasedPath`s (PBPs) + std::vector actuators; + for (auto& pa : sourceModel.updComponentList()) { - FunctionBasedPath fbp(pbpModel,*pbpp,id); + // if the actuator doesn't use a PBP, ignore it + if (!dynamic_cast(&pa.updGeometryPath())) { + continue; + } - printFile.open(modelName+"/FBP"+std::to_string(id)+".txt"); - fbp.printContent(printFile); + // otherwise, find the equivalent path in the destination + Component* c = const_cast(outputModel.findComponent(pa.getAbsolutePath())); - fbps.push_back(fbp); - id++; + if (!c) { + std::stringstream err; + err << "could not find '" << pa.getAbsolutePathString() << "' in the output model: this is a programming error"; + throw std::runtime_error{std::move(err).str()}; } - } - int cnt = 0; - const PointBasedPath* pbpp; - std::vector pap; - for(PathActuator& pa : - fbpModel->updComponentList()){ - pap.push_back(&pa); + PathActuator* paDest = dynamic_cast(c); + + if (!paDest) { + std::stringstream err; + err << "the component '" << pa.getAbsolutePathString() << "' has a class of '" << pa.getConcreteClassName() << "' in the source model but a class of '" << c->getConcreteClassName() << "' in the destination model: this shouldn't happen"; + throw std::runtime_error{std::move(err).str()}; + } + + actuators.emplace_back(pa, *paDest); } - for (unsigned i=0; igetGeometryPath(); - pbpp = dynamic_cast(&pbp); - if(pbpp != nullptr){ - pap[i]->updProperty_GeometryPath().setValue(fbps[cnt]); - cnt++; + + // for each actuator with a PBP, create an equivalent `FunctionBasedPath` + // and handle saving the fits etc. + int i = 1; + for (const auto& actuator : actuators) { + // this should be a safe cast, because it is checked above + const auto& pbp = + dynamic_cast(actuator.inSource.getGeometryPath()); + + // create an FBP in-memory + FunctionBasedPath fbp = FunctionBasedPath::fromPointBasedPath(sourceModel, pbp); + + // write the FBP's data to the filesystem + std::string dataFilename; + { + std::stringstream ss; + ss << outputName << "_DATA_" << i << ".txt"; + dataFilename = std::move(ss).str(); } + + std::fstream dataFile{dataFilename}; + + if (!dataFile) { + std::stringstream msg; + msg << "error: could not open a `FunctionBasedPath`'s data file at: " << dataFilename; + throw std::runtime_error{std::move(msg).str()}; + } + + fbp.printContent(dataFile); + + if (!dataFile) { + std::stringstream msg; + msg << "error: error occurred after writing `FunctionBasedPath`s data to" << dataFilename; + throw std::runtime_error{std::move(msg).str()}; + } + + fbp.setDataPath(dataFilename); + + // assign the FBP to the output model + actuator.inOutput.updProperty_GeometryPath().setValue(fbp); + + ++i; } - fbpModel->finalizeConnections(); - fbpModel->finalizeFromProperties(); - fbpModel->initSystem(); - fbpModel->printSubcomponentInfo(); - // Print model to file - fbpModel->print(modelName+"FBP.osim"); + // FBPs substitued: perform any final steps and write the output model + + outputModel.finalizeFromProperties(); + outputModel.initSystem(); + outputModel.print(std::string{outputName} + ".osim"); + + if (verbose) { + std::cerr << "--- interpolation complete ---\n\n" + << "model before:\n"; + sourceModel.printSubcomponentInfo(); + std::cerr << "\nmodel after:\n"; + outputModel.printSubcomponentInfo(); + } return 0; } From 66c1f95e05b86a2362bbab28fcc0a560f9f1dc11 Mon Sep 17 00:00:00 2001 From: Adam Kewley Date: Fri, 16 Apr 2021 13:48:45 +0100 Subject: [PATCH 14/36] Mostly refactored, apart from Interpolate itself --- .../Simulation/Model/FunctionBasedPath.cpp | 862 +++++++++--------- OpenSim/Simulation/Model/FunctionBasedPath.h | 2 + OpenSim/Tools/FunctionBasedPathModelTool.cpp | 75 +- 3 files changed, 473 insertions(+), 466 deletions(-) diff --git a/OpenSim/Simulation/Model/FunctionBasedPath.cpp b/OpenSim/Simulation/Model/FunctionBasedPath.cpp index cad49ecf61..6167659ecd 100644 --- a/OpenSim/Simulation/Model/FunctionBasedPath.cpp +++ b/OpenSim/Simulation/Model/FunctionBasedPath.cpp @@ -8,263 +8,194 @@ #include #include #include -#include +#include #include #include -#include #include -using namespace std; -using namespace OpenSim; -using namespace SimTK; -using SimTK::Vec3; +// Returns `true` if changing the supplied `Coordinate` changes the moment arm +// of the supplied `PointBasedPath` (PBP) +static bool coordinateAffectsPBP( + OpenSim::PointBasedPath const& pbp, + OpenSim::Coordinate const& c, + SimTK::State& state) { -//////////////////// -// Helper structs // -//////////////////// -struct Discretization{ - double begin; - double end; - int nPoints; - double gridsize; -}; -struct Nonzero_conditions final { - double input_val; - double nonzero_ma; -}; + static constexpr int numCoordProbingSteps = 3; + static constexpr double minMomentArmChangeRequired = 0.001; + + bool initialLockedState = c.getLocked(state); + double initialValue = c.getValue(state); + + c.setLocked(state, false); + + double start = c.getRangeMin(); + double end = c.getRangeMax(); + double step = (end - start) / numCoordProbingSteps; + + bool affectsCoord = false; + for (double v = start; v <= end; v += step) { + c.setValue(state, v); + double ma = pbp.computeMomentArm(state, c); -// defer an action until the destruction of this wrapper -template -struct Defer final { - Callback cb; - Defer(Callback _cb) : cb{std::move(_cb)} { + if (std::abs(ma) >= minMomentArmChangeRequired) { + affectsCoord = true; + break; + } } - Defer(Defer const&) = delete; - Defer(Defer&&) noexcept = default; - Defer& operator=(Defer const&) = delete; - Defer& operator=(Defer&&) = delete; - ~Defer() noexcept { - cb(); + + c.setLocked(state, initialLockedState); + c.setValue(state, initialValue); + + return affectsCoord; +} + +// Fills the output vector with n linearly-spaced values in the inclusive range +// [begin, end] +static void linspace(double begin, + double end, + size_t n, + std::vector& out) { + if (n == 0) { + return; } -}; -// Define helper functions (see .cpp file) -template -Defer defer_action(Callback cb); + if (n == 1) { + out.push_back(begin); + return; + } -bool coord_affects_muscle( - OpenSim::PointBasedPath const& pbp, - OpenSim::Coordinate const& c, - SimTK::State& state, - Nonzero_conditions& out); - -////////////////////// -// Helper functions // -////////////////////// -template -void linspace(std::vector &linspaced, T start_in, T end_in, int num_in){ - double start = static_cast(start_in); - double end = static_cast(end_in); - double num = static_cast(num_in); - - if (num == 0){ - return; - } - if (num == 1){ - linspaced.push_back(start); - return; - } - - double delta = (end - start) / (num - 1); - for(int i=0; i < num-1; ++i){ - linspaced.push_back(start + delta * i); - } - linspaced.push_back(end); + double step = (end - begin) / (n-1); + for (size_t i = 0; i < n-1; ++i) { + out.push_back(begin + i*step); + } + out.push_back(end); } -class Interpolate{ - private: - // dimension of the interpolation (e.g. two states -> 2D -> 2) - int dimension; - // vector containing the orthogonal discretization vectors - // e.g. disc[0] = xrange, disc[1] = yrange etc. - std::vector> discretization; - std::vector discSizes; - // array containing the evaluations over the discretizations - std::vector evals; - // vector containing index closest to discretization point - std::vector n; - // vector containing fraction of closest index to discretization - // point to next - std::vector u; - // array of polynomial evaluation - std::vector> beta; - // vector of an index in the evalsPair - std::vector loc; - - // OPENSIM INTEGRATION - std::vector dS; - std::vector coords; - - public: - // getting - std::vector getRange(int i) const {return discretization[i];} - int getDimension() const {return dimension;} - std::vector getdS() const {return dS;} - std::vector getEvals() const {return evals;} - - // template member functions - double getEval(); - - // 0th derivative - double getInterp(const std::vector& x); - double getInterp(const SimTK::State& s); - double getLength(const SimTK::State& s); - - // 1st derivative - double getInterpDer(const std::vector& x, - int coordinate, double h=0.0001); - double getInterpDer(const SimTK::State& s, - int coordinate); - double getInterpDer(const SimTK::State& s, - const OpenSim::Coordinate& coordinate); - double getLengtheningSpeed(const SimTK::State& s); - - // Default constructor - Interpolate() = default; - - // Precomputed data constructor - explicit Interpolate(std::vector coordsIn, - std::vector dSIn, - std::vector evalsIn); - - // Constructor for non FBP/PBP related interpolation - explicit Interpolate(std::vector> discretizationIn, - std::vector,double>> evalsPair); - - // General interface constructor - // allows one to create an interface constructor as shown below - // with a vector of coordinates - explicit Interpolate(OpenSim::PointBasedPath const& pbp, - OpenSim::Coordinate const** cBegin, - OpenSim::Coordinate const** cEnd, - SimTK::State& st, - std::vector& nPoints); - - // Basic constructor having a vector of coordinate pointers as input - explicit Interpolate(OpenSim::PointBasedPath const& pbp, - std::vector coords, - SimTK::State& st, - std::vector& nPoints); +// A discretization of n points along the (incluside) interval [begin, end] +struct Discretization final { + double begin; + double end; + int nPoints; + double gridsize; }; -//#define DEBUG +// overload for linspace that is specialized for `Discretization`s +static void linspace(const Discretization& d, std::vector& out) { + assert(d.nPoints >= 0); -////////////////////// -// Helper functions // -////////////////////// -template -Defer defer_action(Callback cb) { - return Defer{std::move(cb)}; + out.clear(); + linspace(d.begin, d.end, static_cast(d.nPoints), out); } -bool coord_affects_muscle( - OpenSim::PointBasedPath const& pbp, - OpenSim::Coordinate const& c, - SimTK::State& state, - Nonzero_conditions& out) { +class Interpolate final { +private: + // the dimensionality of the interpolation (i.e. a 2D fit == 2) + int dimensions; - bool prev_locked = c.getLocked(state); - auto reset_locked = defer_action([&] { c.setLocked(state, prev_locked); }); - double prev_val = c.getValue(state); - auto reset_val = defer_action([&] { c.setValue(state, prev_val); }); + // vector containing the orthogonal discretization vectors + // e.g. disc[0] = xrange, disc[1] = yrange etc. + std::vector> discretizations; - c.setLocked(state, false); + std::vector discSizes; - static constexpr int num_steps = 3; - double start = c.getRangeMin(); - double end = c.getRangeMax(); - double step = (end - start) / num_steps; + // array containing the evaluations over the discretizations + std::vector evals; - for (double v = start; v <= end; v += step) { - c.setValue(state, v); - double ma = pbp.computeMomentArm(state, c); - if (std::abs(ma) > 0.001) { - out.input_val = v; - out.nonzero_ma = ma; - return true; - } - } - return false; -} + // vector containing index closest to discretization point + std::vector n; + + // vector containing fraction of closest index to discretization + // point to next + std::vector u; + + // array of polynomial evaluation + std::vector> beta; -// General vector based interpolation constructor -Interpolate::Interpolate(std::vector coordsIn, - std::vector dSIn, - std::vector evalsIn) - : dimension(dSIn.size()), - evals(evalsIn), - n(dimension,0), - u(dimension,0), - loc(dimension,0), - dS(dSIn), - coords(coordsIn) + // vector of an index in the evalsPair + std::vector loc; + + // OPENSIM INTEGRATION + std::vector dS; + std::vector coords; + +public: + Interpolate() = default; + + // Precomputed data constructor + Interpolate( + std::vector coordsIn, + std::vector dSIn, + std::vector evalsIn) : + + dimensions(static_cast(dSIn.size())), + evals(evalsIn), + n(dimensions, 0), + u(dimensions, 0), + loc(dimensions, 0), + dS(dSIn), + coords(coordsIn) { std::vector dc_; - for (int i=0; i(dimensions); i++) { + beta.push_back({0, 0, 0, 0}); - dc_.clear(); - linspace(dc_,dS[i].begin,dS[i].end,dS[i].nPoints); - discretization.push_back(dc_); + linspace(dS[i], dc_); + discretizations.push_back(dc_); discSizes.push_back(dS[i].gridsize); } } -Interpolate::Interpolate(std::vector> discretizationIn, - std::vector, double>> evalsPair) - : dimension(discretizationIn.size()), - discretization(discretizationIn), - n(dimension,0), - u(dimension,0), - loc(dimension,0) + // Constructor for non FBP/PBP related interpolation + Interpolate( + std::vector> discretizationIn, + std::vector,double>> evalsPair) : + + dimensions(static_cast(discretizationIn.size())), + discretizations(discretizationIn), + n(dimensions,0), + u(dimensions,0), + loc(dimensions,0) { - assert(discretization.size() == evalsPair[0].first.size()); + assert(discretizations.size() == evalsPair[0].first.size()); + // allow it to work with the new struct method - for (int i=0; i(discretizations[i].size()); dc.gridsize = (dc.end - dc.begin)/(dc.nPoints-1); + dS.push_back(dc); } - for (int i=0; i cnt(dimension,0); - for (int i=0; i cnt(dimensions, 0); + for (int i = 0; i < numOfLoops; i++) { + for (unsigned k = 0; k < evalsPair.size(); k++) { + if (evalsPair[k].first == cnt) { evals.push_back(evalsPair[k].second); } } - // update cnt values - for (int x=dimension-1; x>=0; x--){ - if (cnt[x] != dS[x].nPoints-1){ + + for (int x = dimensions - 1; x >= 0; x--) { + if (cnt[x] != dS[x].nPoints-1) { cnt[x] += 1; break; } - if (cnt[x] == dS[x].nPoints-1){ - for (int y=x; y> discretizationIn, } } -Interpolate::Interpolate(OpenSim::PointBasedPath const& gp, - OpenSim::Coordinate const** cBegin, - OpenSim::Coordinate const** cEnd, - SimTK::State& st, - std::vector& nPoints) - : dimension(nPoints.size()), - n(dimension,0), - u(dimension,0), - loc(dimension,0) + // General interface constructor + // allows one to create an interface constructor as shown below + // with a vector of coordinates + Interpolate(OpenSim::PointBasedPath const& pbp, + OpenSim::Coordinate const** cBegin, + OpenSim::Coordinate const** cEnd, + SimTK::State& st, + std::vector& nPoints) : + + dimensions(static_cast(nPoints.size())), + n(dimensions,0), + u(dimensions,0), + loc(dimensions,0) { // get the size of the 'vector'. Inclusive bottom, exclusive top - std::ptrdiff_t n = (cEnd-cBegin)+1; + std::ptrdiff_t n = (cEnd - cBegin) + 1; assert(n > 0); - assert(dimension == (int)n); + assert(dimensions == (int)n); // put all coordinate pointers in a vector to later unpack an incoming // state to a vector of coordinate values - for (int i=0; i(SimTK_PI)); + dc.end = std::min(c.getRangeMax(), static_cast(SimTK_PI)); dc.nPoints = nPoints[i]; - dc.gridsize = (dc.end-dc.begin) / (dc.nPoints-1); + dc.gridsize = (dc.end - dc.begin) / (dc.nPoints - 1); dS.push_back(dc); } + // slightly extend the bound for accurate interpolation on the edges - for (int dim=0; dim cnt(dimension); - std::vector coordValues(dimension); - for (int i=0; i cnt(dimensions); + std::vector coordValues(dimensions); + for (int i = 0; i < numOfLoops; i++) { + for (int ii = 0; ii < dimensions; ii++) { coordValues[ii] = dS[ii].begin + (cnt[ii]*dS[ii].gridsize); const OpenSim::Coordinate& c = *cBegin[ii]; c.setValue(st,coordValues[ii]); } - evals.push_back((gp.getLength(st))); + evals.push_back((pbp.getLength(st))); // update cnt values - for (int x=dimension-1; x>=0; x--){ + for (int x = dimensions-1; x >= 0; x--) { if (cnt[x] != dS[x].nPoints-1){ cnt[x] += 1; break; - } else{ - for (int y=x; y dc_; - for (int i=0; i coords, - SimTK::State& st, - std::vector& nPoints) - : Interpolate(pbp, - &coords[0], - &coords[coords.size()-1], - st, - nPoints) - {} - -///////////// -// Methods // -///////////// -// getLength based on the state -double Interpolate::getLength(const SimTK::State& s){ - return getInterp(s); -} -// getLength with mapping from State to vector x -double Interpolate::getInterp(const SimTK::State &s){ - assert(coords.size() != 0); - std::vector x; - for (unsigned i=0; igetValue(s)); - } - return getInterp(x); -} -double Interpolate::getInterp(const std::vector &x){ - // This is the main interpolation function - // IN: x, a vector of points within the considered interpolation range - // OUT: eval, the interpolated value - assert(x.size() == dimension); - - // get the index of the closest range value to the discretization point - for (int i=0; i= x[i];}); - n[i] = std::distance(discretization[i].begin(), it)-1; - } - - // compute remaining fraction - for (int i=0; i coords, + SimTK::State& st, + std::vector& nPoints) : Interpolate(pbp, + &coords[0], + &coords[coords.size()-1], + st, + nPoints) + { + } + + std::vector getRange(int i) const { + return discretizations[i]; + } + + int getDimension() const { + return dimensions; + } + + std::vector getdS() const { + return dS; + } + + std::vector getEvals() const { + return evals; + } + + double getEval() { + // get the wrapping length evaluation given a vector 'loc' which contains, + // in ascending dimension, the index in each dimension + int factor = 1; + int idx = 0; + + for (int i = 0; i < dimensions-1; i++) { + factor = 1; + for (int ii = i+1; ii <= dimensions-1; ii++) { + factor *= discSizes[ii]; + } + idx += loc[i]*factor; } + idx += loc[loc.size()-1]; + + assert(idx <= evals.size()); - for (int i=0; i& x) { + // This is the main interpolation function + // IN: x, a vector of points within the considered interpolation range + // OUT: eval, the interpolated value + assert(x.size() == dimensions); + + // get the index of the closest range value to the discretization point + for (int i = 0; i < dimensions; i++) { + auto it = std::find_if(std::begin(discretizations[i]), + std::end(discretizations[i]), + [&](double j){return j >= x[i];}); + + n[i] = static_cast(std::distance(discretizations[i].begin(), it) - 1); } - z += getEval()*Beta; + // compute remaining fraction + for (int i = 0; i < dimensions; i++) { + u[i] = (x[i]-discretizations[i][n[i]])/ + (discretizations[i][2]-discretizations[i][1]); + } - // from the back to the front, check if we're already at the maximum - // iteration on that 'nested' for loop or else increment with 1. - // In short, everything starts with [-1,-1,-1,...] and we keep adding - // ones until the array of the loops becomes [ 2, 2, 2, ...] - for (int x=dimension-1; x>=0; x--){ - if (discrLoopCnt[x] != 2){ - discrLoopCnt[x] += 1; - break; + // compute the polynomials (already evaluated) + for (int i = 0; i < dimensions; i++) { + // compute binomial coefficient + beta[i][0] = 0.5*(u[i]-1)*(u[i]-1)*(u[i]-1)*u[i]*(2*u[i]+1); + beta[i][1] = -0.5*(u[i] - 1)*(6*u[i]*u[i]*u[i]*u[i] - + 9*u[i]*u[i]*u[i] + 2*u[i] + 2); + beta[i][2] = 0.5*u[i]*(6*u[i]*u[i]*u[i]*u[i] - 15*u[i]*u[i]*u[i] + + 9*u[i]*u[i] + u[i] + 1); + beta[i][3] = -0.5*(u[i] - 1)*u[i]*u[i]*u[i]*(2*u[i] - 3); + } + + // loop over all the considered points (n-dimensional) and multiply the + // evaluation with the weight + + // create an array containing the lengths of each discretization direction + int discrLoopCnt[dimensions]; + for (int i = 0; i < dimensions; i++) { + discrLoopCnt[i] = -1; + } + + double z = 0; + bool breakWhile = false; + bool allTrue; + double Beta = 1; + while (discrLoopCnt[0] < 3) { + Beta = 1; + for (int i = 0; i < dimensions; i++) { + Beta = Beta * beta[i][discrLoopCnt[i]+1]; + } + + for (int i = 0; i < dimensions; i++) { + loc[i] = discrLoopCnt[i] + n[i]; } - if (discrLoopCnt[x] == 2){ - for (int y=x; y= 0; x--) { + if (discrLoopCnt[x] != 2) { + discrLoopCnt[x] += 1; + break; + } + if (discrLoopCnt[x] == 2) { + for (int y = x; y < dimensions; y++) { + discrLoopCnt[y] = -1; + } } } - } - // checking exit conditions - if (breakWhile){ - break; - } - // loop through to check whether all are at max cnt or not - allTrue = true; - for (int i=0; igetName() == aCoord.getName()){ - return getInterpDer(s,i); + // getLength with mapping from State to vector x + double getInterp(const SimTK::State& s) { + assert(coords.size() != 0); + + std::vector x; + for (const OpenSim::Coordinate* c : coords) { + x.push_back(c->getValue(s)); } + + return getInterp(x); } - return 0.0; -} -double Interpolate::getLengtheningSpeed(const SimTK::State& s){ - double lengtheningSpeed = 0; - for (int i=0; igetSpeedValue(s); + // getLength based on the state + double getLength(const SimTK::State& s) { + return getInterp(s); } - return lengtheningSpeed; -} -double Interpolate::getInterpDer(const SimTK::State &s, int coordinate){ - assert(coords.size() != 0); - std::vector x; - for (unsigned i=0; igetValue(s)); + + // 1st derivative + double getInterpDer(const std::vector& x, + int coordinate, + double h = 0.0001) { + + assert(x.size() == dimensions); + assert(coordinate <= dimensions-1); + assert(h>0 && h < (dS[coordinate].end - x[coordinate])); + + // This is the main interpolation function for derivatives + // IN: x, a vector of points within the considered interpolation range + // coordinate, the generalized coordinate of which we take derivative + // OUT: eval, the interpolated value + double f1 = getInterp(x); + + std::vector x2 = x; + x2[coordinate] += h; + double f2 = getInterp(x2); + + return (f2 - f1)/h; } - return getInterpDer(x,coordinate); -} -double Interpolate::getInterpDer(const std::vector &x, - int coordinate, double h){ - assert(x.size() == dimension); - assert(coordinate <= dimension-1); - assert(h>0 && h < (dS[coordinate].end-x[coordinate])); - // This is the main interpolation function for derivatives - // IN: x, a vector of points within the considered interpolation range - // coordinate, the generalized coordinate of which we take derivative - // OUT: eval, the interpolated value - double f1 = getInterp(x); - - std::vector x2 = x; - x2[coordinate] += h; - double f2 = getInterp(x2); - - return (f2 - f1)/h; -} -double Interpolate::getEval(){ - // get the wrapping length evaluation given a vector 'loc' which contains, - // in ascending dimension, the index in each dimension - int factor = 1; - int idx = 0; + double getInterpDer(const SimTK::State& s, int coordinate) { + assert(coords.size() != 0); - for (int i=0; i x; + for (size_t i = 0; i < coords.size(); i++) { + x.push_back(coords[i]->getValue(s)); } - idx += loc[i]*factor; + return getInterpDer(x,coordinate); } - idx += loc[loc.size()-1]; - assert(idx <= evals.size()); - return evals[idx]; -} + + double getInterpDer(const SimTK::State& s, + const OpenSim::Coordinate& aCoord) { + + for (size_t i = 0; i < coords.size(); i++) { + if (coords[i]->getName() == aCoord.getName()) { + return getInterpDer(s, i); + } + } + + return 0.0; + } + + double getLengtheningSpeed(const SimTK::State& s) { + double lengtheningSpeed = 0.0; + + for (int i = 0; i < dimensions; i++) { + double firstDeriv = getInterpDer(s, i); + double coordinateSpeedVal = coords[i]->getSpeedValue(s); + + lengtheningSpeed += firstDeriv * coordinateSpeedVal; + } + + return lengtheningSpeed; + } +}; // ----- FunctionBasedPath implementation ----- @@ -561,7 +524,9 @@ struct OpenSim::FunctionBasedPath::Impl final { } }; -FunctionBasedPath FunctionBasedPath::fromPointBasedPath(const Model& model, const PointBasedPath& pbp) +OpenSim::FunctionBasedPath OpenSim::FunctionBasedPath::fromPointBasedPath( + const Model& model, + const PointBasedPath& pbp) { FunctionBasedPath fbp; @@ -570,8 +535,6 @@ FunctionBasedPath FunctionBasedPath::fromPointBasedPath(const Model& model, cons fbp.setPathPointSet(pbp.getPathPointSet()); fbp.setPathWrapSet(pbp.getWrapSet()); - Nonzero_conditions cond; - std::unique_ptr modelClone{model.clone()}; SimTK::State& initialState = modelClone->initSystem(); modelClone->equilibrateMuscles(initialState); @@ -583,7 +546,7 @@ FunctionBasedPath FunctionBasedPath::fromPointBasedPath(const Model& model, cons continue; } - if (!coord_affects_muscle(pbp, c, initialState, cond)) { + if (!coordinateAffectsPBP(pbp, c, initialState)) { continue; } @@ -605,8 +568,7 @@ FunctionBasedPath FunctionBasedPath::fromPointBasedPath(const Model& model, cons return fbp; } -FunctionBasedPath FunctionBasedPath::fromDataFile(const std::string &path) -{ +static Interpolate readInterp(const std::string &path) { // data file for FunctionBasedPath top-level structure: // // - plaintext @@ -656,9 +618,6 @@ FunctionBasedPath FunctionBasedPath::fromDataFile(const std::string &path) // // along DIMENSION `n` - FunctionBasedPath fbp; - fbp.setDataPath(path); - std::ifstream file{path}; if (!file) { @@ -744,27 +703,59 @@ FunctionBasedPath FunctionBasedPath::fromDataFile(const std::string &path) } } - // load those values into the interpolation class - fbp._impl->interp = Interpolate{ - std::vector(static_cast(dimensions)), + // TODO: figure out which coordinates affect this path - must be serialized + // in the file + + return Interpolate{ + std::vector(static_cast(dimensions)), std::move(discretizations), std::move(evals) }; +} + +OpenSim::FunctionBasedPath OpenSim::FunctionBasedPath::fromDataFile(const std::string &path) +{ + FunctionBasedPath fbp; + fbp.setDataPath(path); + + // the data file effectively only contains data for Interpolate, data file + // spec is in there + fbp._impl->interp = readInterp(path); return fbp; } -FunctionBasedPath::FunctionBasedPath() : _impl{new Impl{}} +OpenSim::FunctionBasedPath::FunctionBasedPath() : GeometryPath{}, _impl{new Impl{}} { constructProperty_data_path(""); } -FunctionBasedPath::FunctionBasedPath(const FunctionBasedPath&) = default; -FunctionBasedPath::FunctionBasedPath(FunctionBasedPath&&) = default; -FunctionBasedPath& FunctionBasedPath::operator=(const FunctionBasedPath&) = default; -FunctionBasedPath& FunctionBasedPath::operator=(FunctionBasedPath&&) = default; -FunctionBasedPath::~FunctionBasedPath() noexcept = default; +OpenSim::FunctionBasedPath::FunctionBasedPath(const FunctionBasedPath&) = default; +OpenSim::FunctionBasedPath::FunctionBasedPath(FunctionBasedPath&&) = default; +OpenSim::FunctionBasedPath& OpenSim::FunctionBasedPath::operator=(const FunctionBasedPath&) = default; +OpenSim::FunctionBasedPath& OpenSim::FunctionBasedPath::operator=(FunctionBasedPath&&) = default; +OpenSim::FunctionBasedPath::~FunctionBasedPath() noexcept = default; + +void OpenSim::FunctionBasedPath::extendFinalizeFromProperties() { + bool hasBackingFile = !get_data_path().empty(); + bool hasInMemoryFittingData = !_impl->interp.getdS().empty(); + + if (hasBackingFile) { + // load the file, always + // + // TODO: this should ideally be cached + _impl->interp = readInterp(get_data_path()); + } else if (hasInMemoryFittingData) { + // do nothing: just use the already-loaded in-memory fitting data + return; + } else { + // error: has no backing file and has no in-memory fitting data + std::stringstream msg; + msg << getAbsolutePathString() << ": cannot call `.finalizeFromProperties()` on this `" << getConcreteClassName() << "`: the path has no fitting associated with it. A `FunctionBasedPath` must either have a valid `data_path` property that points to its underlying fitting data data, or be initialized using `FunctionBasedPath::fromPointBasedPath` (i.e. generate new fitting data)"; + OPENSIM_THROW(OpenSim::Exception, std::move(msg).str()); + } +} -double FunctionBasedPath::getLength(const State& s) const +double OpenSim::FunctionBasedPath::getLength(const SimTK::State& s) const { if (isCacheVariableValid(s, _lengthCV)) { return getCacheVariableValue(s, _lengthCV); @@ -776,12 +767,12 @@ double FunctionBasedPath::getLength(const State& s) const return rv; } -void FunctionBasedPath::setLength(const State &s, double length) const +void OpenSim::FunctionBasedPath::setLength(const SimTK::State& s, double length) const { setCacheVariableValue(s, _lengthCV, length); } -double FunctionBasedPath::getLengtheningSpeed(const State &s) const +double OpenSim::FunctionBasedPath::getLengtheningSpeed(const SimTK::State& s) const { if (isCacheVariableValid(s, _speedCV)) { return getCacheVariableValue(s, _speedCV); @@ -793,18 +784,18 @@ double FunctionBasedPath::getLengtheningSpeed(const State &s) const return rv; } -void FunctionBasedPath::setLengtheningSpeed(const State &s, double speed) const +void OpenSim::FunctionBasedPath::setLengtheningSpeed(const SimTK::State& s, double speed) const { setCacheVariableValue(s, _speedCV, speed); } -double FunctionBasedPath::computeMomentArm(const State& s, - const Coordinate& aCoord) const +double OpenSim::FunctionBasedPath::computeMomentArm(const SimTK::State& s, + const Coordinate& aCoord) const { return _impl->interp.getInterpDer(s,aCoord); } -void FunctionBasedPath::printContent(std::ostream& out) const +void OpenSim::FunctionBasedPath::printContent(std::ostream& out) const { // see FunctionBasedPath::fromDataFile(const std::string &path) for format // spec @@ -817,7 +808,10 @@ void FunctionBasedPath::printContent(std::ostream& out) const // DISCRETIZATIONS for (const Discretization& d : _impl->interp.getdS()) { - out << d.begin << '\t' << d.end << '\t' << d.nPoints << '\t' << d.gridsize << '\n'; + out << d.begin << '\t' + << d.end << '\t' + << d.nPoints << '\t' + << d.gridsize << '\n'; } out << '\n'; diff --git a/OpenSim/Simulation/Model/FunctionBasedPath.h b/OpenSim/Simulation/Model/FunctionBasedPath.h index eead1e00ca..90dd9ea8d7 100644 --- a/OpenSim/Simulation/Model/FunctionBasedPath.h +++ b/OpenSim/Simulation/Model/FunctionBasedPath.h @@ -102,6 +102,8 @@ class OSIMSIMULATION_API FunctionBasedPath : public GeometryPath { FunctionBasedPath& operator=(FunctionBasedPath&&); ~FunctionBasedPath() noexcept override; + void extendFinalizeFromProperties() override; + double getLength(const SimTK::State& s) const override; void setLength(const SimTK::State& s, double length) const override; diff --git a/OpenSim/Tools/FunctionBasedPathModelTool.cpp b/OpenSim/Tools/FunctionBasedPathModelTool.cpp index c02fefd435..8eebeab659 100644 --- a/OpenSim/Tools/FunctionBasedPathModelTool.cpp +++ b/OpenSim/Tools/FunctionBasedPathModelTool.cpp @@ -49,7 +49,7 @@ EXAMPLE USAGE )"; int main(int argc, char **argv) { - // skip "FunctionBasedPathModelTool" + // skip exe name --argc; ++argv; @@ -66,10 +66,10 @@ int main(int argc, char **argv) { // handle unnamed args if (arg[0] != '-') { switch (nUnnamed) { - case 0: + case 0: // MODEL sourceModelPath = arg; break; - case 1: + case 1: // OUTPUT_NAME outputName = arg; break; default: @@ -78,13 +78,14 @@ int main(int argc, char **argv) { << std::endl; return -1; } + ++nUnnamed; --argc; ++argv; continue; } - // flagged args + // handle flagged args (e.g. --arg) if (std::strcmp(arg, "--help") == 0) { std::cout << "usage: " << usage << '\n' << help_text << std::endl; return 0; @@ -106,6 +107,10 @@ int main(int argc, char **argv) { << std::endl; return -1; } + + assert(argc == 0); + assert(sourceModelPath != nullptr); + assert(outputName != nullptr); } Model sourceModel{sourceModelPath}; @@ -118,24 +123,31 @@ int main(int argc, char **argv) { sourceModel.printSubcomponentInfo(); } - // struct for holding source + dest actuators affected by this process - struct PathActuatorWithPointBasedPath final { - PathActuator& inSource; - PathActuator& inOutput; + // struct that holds how a PBP in the source maps onto an actuator in the + // destination + struct PBPtoActuatorMapping final { + PointBasedPath& sourcePBP; + PathActuator& outputActuator; - PathActuatorWithPointBasedPath(PathActuator& inSource_, - PathActuator& inOutput_) : - inSource{inSource_}, - inOutput{inOutput_} { + PBPtoActuatorMapping(PointBasedPath& sourcePBP_, + PathActuator& outputActuator_) : + sourcePBP{sourcePBP_}, + outputActuator{outputActuator_} { } }; - // collect actuators with `PointBasedPath`s (PBPs) - std::vector actuators; + // find PBPs in the source and figure out how they map onto `PathActuator`s + // in the destination + // + // (this is because `PathActuator`s are the "owners" of `GeometryPath`s in + // most models) + std::vector mappings; for (auto& pa : sourceModel.updComponentList()) { + PointBasedPath* pbp = dynamic_cast(&pa.updGeometryPath()); + // if the actuator doesn't use a PBP, ignore it - if (!dynamic_cast(&pa.updGeometryPath())) { + if (!pbp) { continue; } @@ -156,29 +168,25 @@ int main(int argc, char **argv) { throw std::runtime_error{std::move(err).str()}; } - actuators.emplace_back(pa, *paDest); + mappings.emplace_back(*pbp, *paDest); } - // for each actuator with a PBP, create an equivalent `FunctionBasedPath` - // and handle saving the fits etc. + // for each `PathActuator` that uses a PBP, create an equivalent + // `FunctionBasedPath` (FBP) by fitting a function against the PBP and + // replace the PBP owned by the destination's `PathActuator` with the FBP int i = 1; - for (const auto& actuator : actuators) { - // this should be a safe cast, because it is checked above - const auto& pbp = - dynamic_cast(actuator.inSource.getGeometryPath()); - + for (const auto& mapping : mappings) { // create an FBP in-memory - FunctionBasedPath fbp = FunctionBasedPath::fromPointBasedPath(sourceModel, pbp); + FunctionBasedPath fbp = FunctionBasedPath::fromPointBasedPath(sourceModel, mapping.sourcePBP); // write the FBP's data to the filesystem - std::string dataFilename; - { + std::string dataFilename = [&outputName, &i]() { std::stringstream ss; ss << outputName << "_DATA_" << i << ".txt"; - dataFilename = std::move(ss).str(); - } + return std::move(ss).str(); + }(); - std::fstream dataFile{dataFilename}; + std::ofstream dataFile{dataFilename}; if (!dataFile) { std::stringstream msg; @@ -194,15 +202,18 @@ int main(int argc, char **argv) { throw std::runtime_error{std::move(msg).str()}; } + // update the FBP to refer to the data file fbp.setDataPath(dataFilename); - // assign the FBP to the output model - actuator.inOutput.updProperty_GeometryPath().setValue(fbp); + // assign the FBP over the destination's PBP + mapping.outputActuator.updProperty_GeometryPath().setValue(fbp); ++i; } - // FBPs substitued: perform any final steps and write the output model + // the output model is now the same as the source model, but each PBP in + // its `PathActuator`s has been replaced with an FBP. Perform any final + // model-level fixups and save the output model. outputModel.finalizeFromProperties(); outputModel.initSystem(); From d209c869c5f6bbad539089ec445142b06d646615 Mon Sep 17 00:00:00 2001 From: joris997 Date: Mon, 19 Apr 2021 11:11:11 +0200 Subject: [PATCH 15/36] updates to tool and application for functionbasedpath conversion --- Applications/CMakeLists.txt | 1 + .../CMakeLists.txt | 10 + .../functionbasedpathconversion.cpp | 131 + .../test/CMakeLists.txt | 9 + .../test/arm26.osim | 1647 ++++ .../test/testFunctionBasedPathConversion.cpp | 138 + CMakeLists.txt.user | 7045 +++++++++++++++++ .../Tools/FunctionBasedPathConversionTool.cpp | 157 + .../Tools/FunctionBasedPathConversionTool.h | 101 + OpenSim/Tools/FunctionBasedPathModelTool.cpp | 231 - OpenSim/Tools/RegisterTypes_osimTools.cpp | 4 +- OpenSim/Tools/osimTools.h | 1 + 12 files changed, 9243 insertions(+), 232 deletions(-) create mode 100644 Applications/FunctionBasedPathConversion/CMakeLists.txt create mode 100644 Applications/FunctionBasedPathConversion/functionbasedpathconversion.cpp create mode 100644 Applications/FunctionBasedPathConversion/test/CMakeLists.txt create mode 100644 Applications/FunctionBasedPathConversion/test/arm26.osim create mode 100644 Applications/FunctionBasedPathConversion/test/testFunctionBasedPathConversion.cpp create mode 100644 CMakeLists.txt.user create mode 100644 OpenSim/Tools/FunctionBasedPathConversionTool.cpp create mode 100644 OpenSim/Tools/FunctionBasedPathConversionTool.h delete mode 100644 OpenSim/Tools/FunctionBasedPathModelTool.cpp diff --git a/Applications/CMakeLists.txt b/Applications/CMakeLists.txt index c1fc930df8..2c85543624 100644 --- a/Applications/CMakeLists.txt +++ b/Applications/CMakeLists.txt @@ -8,6 +8,7 @@ add_subdirectory(IK) add_subdirectory(ID) add_subdirectory(CMC) add_subdirectory(RRA) +add_subdirectory(FunctionBasedPathConversion) add_subdirectory(opensense) add_subdirectory(versionUpdate) diff --git a/Applications/FunctionBasedPathConversion/CMakeLists.txt b/Applications/FunctionBasedPathConversion/CMakeLists.txt new file mode 100644 index 0000000000..fa6696eda8 --- /dev/null +++ b/Applications/FunctionBasedPathConversion/CMakeLists.txt @@ -0,0 +1,10 @@ +if(OPENSIM_BUILD_INDIVIDUAL_APPS) + OpenSimAddApplication(NAME functionbasedpathconversion) +endif() + +if(BUILD_TESTING) + subdirs(test) +endif(BUILD_TESTING) + + + diff --git a/Applications/FunctionBasedPathConversion/functionbasedpathconversion.cpp b/Applications/FunctionBasedPathConversion/functionbasedpathconversion.cpp new file mode 100644 index 0000000000..27d126cd46 --- /dev/null +++ b/Applications/FunctionBasedPathConversion/functionbasedpathconversion.cpp @@ -0,0 +1,131 @@ +#include + +#include +#include +#include +#include +#include +#include +#include + +using namespace OpenSim; +using namespace std; + +static const char usage[] = "FunctionBasedPathModelTool [--help] MODEL OUTPUT_NAME"; +static const char help_text[] = +R"( +ARGS + + --help print this help + -v, --verbose print verbose output + +DESCRIPTION + + This tool tries to convert an .osim file (MODEL) that contains + `GeometryPath`s and `PointBasedPath`s, into a functionally equivalent model + file, written to ${OUTPUT_NAME}.osim, that contains `FunctionBasedPath`s. + + The main reason to do this is performance. Computing a path at each timestep + in a simulation can be computationally expensive - especially if the path is + complex (e.g. contains complex wrapping geometry). Pre-computing the + path's topology ahead of time into a function-based lookup *may* speed up + simulations that spend a significant amount of time computing paths. + + This tool effectively: + + - Reads MODEL (the source model) + - Searches for `GeometryPath`s and `PointBasedPath`s in the source model + - Tries to parameterize those paths against the source model's coordinates + (e.g. joint coordinates), to produce an n-dimensional Bezier curve fit + of those paths + - Saves the fit data to ${OUTPUT_NAME}_DATA_${i}.txt, where `i` is an + arbirary ID that links the `FunctionBasedPath` in the output .osim file + to the Bezier fit's data + - Updates the source model to contain `FunctionBasedPath`s + - Writes the updated model to `${OUTPUT_NAME}.osim` + +EXAMPLE USAGE + + FunctionBasedPathModelTool RajagopalModel.osim RajagopalModel_Precomputed.osim +)"; + +int main(int argc, char **argv) +{ + try { + // skip exe name + --argc; + ++argv; + + bool verbose = false; + char const* sourceModelPath = nullptr; + char const* outputName = nullptr; + + // parse CLI args + { + int nUnnamed = 0; + while (argc) { + const char* arg = argv[0]; + + // handle unnamed args + if (arg[0] != '-') { + switch (nUnnamed) { + case 0: // MODEL + sourceModelPath = arg; + break; + case 1: // OUTPUT_NAME + outputName = arg; + break; + default: + std::cerr << "FunctionBasedPathModelTool: error: too many arguments: should only supply 'MODEL' and 'OUTPUT_NAME'\n\nUSAGE: " + << usage + << std::endl; + return -1; + } + + ++nUnnamed; + --argc; + ++argv; + continue; + } + + // handle flagged args (e.g. --arg) + if (std::strcmp(arg, "--help") == 0) { + std::cout << "usage: " << usage << '\n' << help_text << std::endl; + return 0; + } else if (std::strcmp(arg, "--verbose") == 0 || std::strcmp(arg, "-v") == 0) { + verbose = true; + --argc; + ++argv; + } else { + std::cerr << "FunctionBasedPathModelTool: error: unknown argument '" + << arg + << "': see --help for usage info"; + return -1; + } + } + + if (nUnnamed != 2) { + std::cerr << "FunctionBasedPathModelTool: error: too few arguments supplied\n\n" + << usage + << std::endl; + return -1; + } + + assert(argc == 0); + assert(sourceModelPath != nullptr); + assert(outputName != nullptr); + } + FunctionBasedPathConversionTool tool(sourceModelPath,outputName); + bool success = tool.run(); + if (success){ + return 0; + } else { + return 1; + } + + } catch(const std::exception& x) { + log_error("Exception in ID: {}", x.what()); + return -1; + } + return 0; +} diff --git a/Applications/FunctionBasedPathConversion/test/CMakeLists.txt b/Applications/FunctionBasedPathConversion/test/CMakeLists.txt new file mode 100644 index 0000000000..e6ab6e5fd3 --- /dev/null +++ b/Applications/FunctionBasedPathConversion/test/CMakeLists.txt @@ -0,0 +1,9 @@ + +file(GLOB TEST_PROGS "test*.cpp") +file(GLOB TEST_FILES *.osim *.xml *.sto *.mot *.trc) + +OpenSimAddTests( + TESTPROGRAMS ${TEST_PROGS} + DATAFILES ${TEST_FILES} + LINKLIBS osimTools + ) diff --git a/Applications/FunctionBasedPathConversion/test/arm26.osim b/Applications/FunctionBasedPathConversion/test/arm26.osim new file mode 100644 index 0000000000..6fb32ab12d --- /dev/null +++ b/Applications/FunctionBasedPathConversion/test/arm26.osim @@ -0,0 +1,1647 @@ + + + + + + The OpenSim Development Team (Reinbolt, J; Seth, A; Habib, A; Hamner, S) adapted from a model originally created by Kate Holzbaur (11/22/04) + + License: + Creative Commons (CCBY 3.0). You are free to distribute, remix, tweak, and build upon this work, even commercially, + as long as you credit us for the original creation. + http://creativecommons.org/licenses/by/3.0/ + + Holzbaur, K.R.S., Murray, W.M., Delp, S.L. A Model of the Upper Extremity for Simulating Musculoskeletal Surgery and Analyzing Neuromuscular Control. + Annals of Biomedical Engineering, vol 33, pp 829–840, 2005 + meters + N + + 0 -9.8066 0 + + + + + 0 + 0 0 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + 0 + 0 0 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + ground + + 0 0.8 0 + + 0 0 0 + + 0 0 0 + + 0 0 0 + + + + + + + false + + + + + + + + + ground_ribs.vtp + + 1 1 1 + + + + -0 0 -0 0 0 0 + + 1 1 1 + + 4 + + 1 + + + + ground_spine.vtp + + 1 1 1 + + + + -0 0 -0 0 0 0 + + 1 1 1 + + 4 + + 1 + + + + ground_skull.vtp + + 1 1 1 + + + + -0 0 -0 0 0 0 + + 1 1 1 + + 4 + + 1 + + + + ground_jaw.vtp + + 1 1 1 + + + + -0 0 -0 0 0 0 + + 1 1 1 + + 4 + + 1 + + + + ground_r_clavicle.vtp + + 1 1 1 + + + + -0 0 -0 0 0 0 + + 1 1 1 + + 4 + + 1 + + + + ground_r_scapula.vtp + + 1 1 1 + + + + -0 0 -0 0 0 0 + + 1 1 1 + + 4 + + 1 + + + + + + 1 1 1 + + -0 0 -0 0 0 0 + + false + + 4 + + + + + 1.37532 -0.294612 2.43596 + -0.043905 -0.0039 0.1478 + true + x + + + + + + + + 1 1 1 + + 1.37532 -0.294612 2.43596 -0.043905 -0.0039 0.1478 + + false + + 4 + + 0.003 + 0.03 + + + + + + + 1.864572 + 0 -0.180496 0 + 0.01481 + 0.004551 + 0.013193 + 0 + 0 + 0 + + + + + + + + + r_shoulder_elev + + -0.05889802 0.0023 0.99826136 + + + + 1 0 + + + + + + + + 0 1 0 + + + + 0 + + + + + + + + 0.99826136 -0 0.05889802 + + + + 0 + + + + + + + + + 1 0 0 + + + + 0 + + + + + + + + 0 1 0 + + + + 0 + + + + + + + + 0 0 1 + + + + 0 + + + + + base + -0.017545 -0.007 0.17 + 0 0 0 + 0 0 0 + 0 0 0 + + + + + + rotational + + 0 + + 0 + + -1.57079633 3.14159265 + + false + + false + + + + + + + false + + + + + + + + + arm_r_humerus.vtp + + 1 1 1 + + + + -0 0 -0 0 0 0 + + 1 1 1 + + 4 + + 1 + + + + + + 1 1 1 + + -0 0 -0 0 0 0 + + false + + 4 + + + + + 3.00162 -0.853466 2.57419 + -0.0078 -0.0041 -0.0014 + true + z + + + + + + + + 1 1 1 + + 3.00162 -0.853466 2.57419 -0.0078 -0.0041 -0.0014 + + false + + 4 + + 0.035 0.02 0.02 + + + -2.00434 -1.00164 0.975465 + 0.0033 0.0073 0.0003 + true + -y + + + + + + + + 1 1 1 + + -2.00434 -1.00164 0.975465 0.0033 0.0073 0.0003 + + false + + 4 + + 0.025 0.02 0.02 + + + -0.14015 -0.00628319 0.154985 + 0.0028 -0.2919 -0.0069 + true + all + + + + + + + + 1 1 1 + + -0.14015 -0.00628319 0.154985 0.0028 -0.2919 -0.0069 + + false + + 4 + + 0.016 + 0.05 + + + + + + + 1.534315 + 0 -0.181479 0 + 0.019281 + 0.001571 + 0.020062 + 0 + 0 + 0 + + + + + + + + + r_elbow_flex + + 0.04940001 0.03660001 0.99810825 + + + + 1 0 + + + + + + + + 0 1 0 + + + + 0 + + + + + + + + 0.99810825 0 -0.04940001 + + + + 0 + + + + + + + + + 1 0 0 + + + + 0 + + + + + + + + 0 1 0 + + + + 0 + + + + + + + + 0 0 1 + + + + 0 + + + + + r_humerus + 0.0061 -0.2904 -0.0123 + 0 0 0 + 0 0 0 + 0 0 0 + + + + + + rotational + + 0 + + 0 + + 0 2.26892803 + + false + + false + + + + + + + false + + + + + + + + + arm_r_ulna.vtp + + 1 1 1 + + + + -0 0 -0 0 0 0 + + 1 1 1 + + 4 + + 1 + + + + arm_r_radius.vtp + + 1 1 1 + + + + -0 0 -0 0 0 0 + + 1 1 1 + + 4 + + 1 + + + + arm_r_lunate.vtp + + 1 1 1 + + + + -0 0 -0 0 0 0 + + 1 1 1 + + 4 + + 1 + + + + arm_r_scaphoid.vtp + + 1 1 1 + + + + -0 0 -0 0 0 0 + + 1 1 1 + + 4 + + 1 + + + + arm_r_pisiform.vtp + + 1 1 1 + + + + -0 0 -0 0 0 0 + + 1 1 1 + + 4 + + 1 + + + + arm_r_triquetrum.vtp + + 1 1 1 + + + + -0 0 -0 0 0 0 + + 1 1 1 + + 4 + + 1 + + + + arm_r_capitate.vtp + + 1 1 1 + + + + -0 0 -0 0 0 0 + + 1 1 1 + + 4 + + 1 + + + + arm_r_trapezium.vtp + + 1 1 1 + + + + -0 0 -0 0 0 0 + + 1 1 1 + + 4 + + 1 + + + + arm_r_trapezoid.vtp + + 1 1 1 + + + + -0 0 -0 0 0 0 + + 1 1 1 + + 4 + + 1 + + + + arm_r_hamate.vtp + + 1 1 1 + + + + -0 0 -0 0 0 0 + + 1 1 1 + + 4 + + 1 + + + + arm_r_1mc.vtp + + 1 1 1 + + + + -0 0 -0 0 0 0 + + 1 1 1 + + 4 + + 1 + + + + arm_r_2mc.vtp + + 1 1 1 + + + + -0 0 -0 0 0 0 + + 1 1 1 + + 4 + + 1 + + + + arm_r_3mc.vtp + + 1 1 1 + + + + -0 0 -0 0 0 0 + + 1 1 1 + + 4 + + 1 + + + + arm_r_4mc.vtp + + 1 1 1 + + + + -0 0 -0 0 0 0 + + 1 1 1 + + 4 + + 1 + + + + arm_r_5mc.vtp + + 1 1 1 + + + + -0 0 -0 0 0 0 + + 1 1 1 + + 4 + + 1 + + + + arm_r_thumbprox.vtp + + 1 1 1 + + + + -0 0 -0 0 0 0 + + 1 1 1 + + 4 + + 1 + + + + arm_r_thumbdist.vtp + + 1 1 1 + + + + -0 0 -0 0 0 0 + + 1 1 1 + + 4 + + 1 + + + + arm_r_2proxph.vtp + + 1 1 1 + + + + -0 0 -0 0 0 0 + + 1 1 1 + + 4 + + 1 + + + + arm_r_2midph.vtp + + 1 1 1 + + + + -0 0 -0 0 0 0 + + 1 1 1 + + 4 + + 1 + + + + arm_r_2distph.vtp + + 1 1 1 + + + + -0 0 -0 0 0 0 + + 1 1 1 + + 4 + + 1 + + + + arm_r_3proxph.vtp + + 1 1 1 + + + + -0 0 -0 0 0 0 + + 1 1 1 + + 4 + + 1 + + + + arm_r_3midph.vtp + + 1 1 1 + + + + -0 0 -0 0 0 0 + + 1 1 1 + + 4 + + 1 + + + + arm_r_3distph.vtp + + 1 1 1 + + + + -0 0 -0 0 0 0 + + 1 1 1 + + 4 + + 1 + + + + arm_r_4proxph.vtp + + 1 1 1 + + + + -0 0 -0 0 0 0 + + 1 1 1 + + 4 + + 1 + + + + arm_r_4midph.vtp + + 1 1 1 + + + + -0 0 -0 0 0 0 + + 1 1 1 + + 4 + + 1 + + + + arm_r_4distph.vtp + + 1 1 1 + + + + -0 0 -0 0 0 0 + + 1 1 1 + + 4 + + 1 + + + + arm_r_5proxph.vtp + + 1 1 1 + + + + -0 0 -0 0 0 0 + + 1 1 1 + + 4 + + 1 + + + + arm_r_5midph.vtp + + 1 1 1 + + + + -0 0 -0 0 0 0 + + 1 1 1 + + 4 + + 1 + + + + arm_r_5distph.vtp + + 1 1 1 + + + + -0 0 -0 0 0 0 + + 1 1 1 + + 4 + + 1 + + + + + + 1 1 1 + + -0 0 -0 0 0 0 + + false + + 4 + + + + + + + + + + + + + + + + + + + + false + + 0 + + 1 + + + + + + -0.05365 -0.01373 0.14723 + base + + + -0.02714 -0.11441 -0.00664 + r_humerus + + + -0.03184 -0.22637 -0.01217 + r_humerus + + + -0.01743 -0.26757 -0.01208 + r_humerus + + + -0.0219 0.01046 -0.00078 + r_ulna_radius_hand + + + + + + + + + + + + 1 1 1 + + -0 0 -0 0 0 0 + + false + + 4 + + + + + TRI + hybrid + -1 -1 + + + TRIlonghh + hybrid + -1 -1 + + + TRIlongglen + hybrid + -1 -1 + + + + + + + 1 + + 798.52 + + 0.134 + + 0.143 + + 0.20943951 + + 10 + + 0.01 + + 0.04 + + 0.033 + + 0.6 + + 0.5 + + 4 + + 0.3 + + 1.8 + + + + false + + 0 + + 1 + + + + + + -0.00599 -0.12646 0.00428 + r_humerus + + + -0.02344 -0.14528 0.00928 + r_humerus + + + -0.03184 -0.22637 -0.01217 + r_humerus + + + -0.01743 -0.26757 -0.01208 + r_humerus + + + -0.0219 0.01046 -0.00078 + r_ulna_radius_hand + + + + + + + + + + + + 1 1 1 + + -0 0 -0 0 0 0 + + false + + 4 + + + + + TRI + hybrid + -1 -1 + + + + + + + 1 + + 624.3 + + 0.1138 + + 0.098 + + 0.15707963 + + 10 + + 0.01 + + 0.04 + + 0.033 + + 0.6 + + 0.5 + + 4 + + 0.3 + + 1.8 + + + + false + + 0 + + 1 + + + + + + -0.00838 -0.13695 -0.00906 + r_humerus + + + -0.02601 -0.15139 -0.0108 + r_humerus + + + -0.03184 -0.22637 -0.01217 + r_humerus + + + -0.01743 -0.26757 -0.01208 + r_humerus + + + -0.0219 0.01046 -0.00078 + r_ulna_radius_hand + + + + + + + + + + + + 1 1 1 + + -0 0 -0 0 0 0 + + false + + 4 + + + + + TRI + hybrid + -1 -1 + + + + + + + 1 + + 624.3 + + 0.1138 + + 0.0908 + + 0.15707963 + + 10 + + 0.01 + + 0.04 + + 0.033 + + 0.6 + + 0.5 + + 4 + + 0.3 + + 1.8 + + + + false + + 0 + + 1 + + + + + + -0.039235 0.00347 0.14795 + base + + + -0.028945 0.01391 0.15639 + base + + + 0.02131 0.01793 0.01028 + r_humerus + + + 0.02378 -0.00511 0.01201 + r_humerus + + + 0.01345 -0.02827 0.00136 + r_humerus + + + 0.01068 -0.07736 -0.00165 + r_humerus + + + 0.01703 -0.12125 0.00024 + r_humerus + + + 0.0228 -0.1754 -0.0063 + r_humerus + + + 0.00751 -0.04839 0.02179 + r_ulna_radius_hand + + + + + + + + + + + + 1 1 1 + + -0 0 -0 0 0 0 + + false + + 4 + + + + + BIClonghh + hybrid + 2 3 + + + + + + + 1 + + 624.3 + + 0.1157 + + 0.2723 + + 0 + + 10 + + 0.01 + + 0.04 + + 0.033 + + 0.6 + + 0.5 + + 4 + + 0.3 + + 1.8 + + + + false + + 0 + + 1 + + + + + + 0.004675 -0.01231 0.13475 + base + + + -0.007075 -0.04004 0.14507 + base + + + 0.01117 -0.07576 -0.01101 + r_humerus + + + 0.01703 -0.12125 -0.01079 + r_humerus + + + 0.0228 -0.1754 -0.0063 + r_humerus + + + 0.00751 -0.04839 0.02179 + r_ulna_radius_hand + + + + + + + + + + + + 1 1 1 + + -0 0 -0 0 0 0 + + false + + 4 + + + + + + + + 1 + + 435.56 + + 0.1321 + + 0.1923 + + 0 + + 10 + + 0.01 + + 0.04 + + 0.033 + + 0.6 + + 0.5 + + 4 + + 0.3 + + 1.8 + + + + false + + 0 + + 1 + + + + + + 0.0068 -0.1739 -0.0036 + r_humerus + + + -0.0032 -0.0239 0.0009 + r_ulna_radius_hand + + + + + + + + + + + + 1 1 1 + + -0 0 -0 0 0 0 + + false + + 4 + + + + + TRI + hybrid + -1 -1 + + + + + + + 1 + + 987.26 + + 0.0858 + + 0.0535 + + 0 + + 10 + + 0.01 + + 0.04 + + 0.033 + + 0.6 + + 0.5 + + 4 + + 0.3 + + 1.8 + + + + + + + + + + base + + -0.01256 0.04 0.17 + + false + + + + r_humerus + + 0.005 -0.2904 0.03 + + false + + + + r_ulna_radius_hand + + -0.0011 -0.23559 0.0943 + + false + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Applications/FunctionBasedPathConversion/test/testFunctionBasedPathConversion.cpp b/Applications/FunctionBasedPathConversion/test/testFunctionBasedPathConversion.cpp new file mode 100644 index 0000000000..eefee85013 --- /dev/null +++ b/Applications/FunctionBasedPathConversion/test/testFunctionBasedPathConversion.cpp @@ -0,0 +1,138 @@ +/* -------------------------------------------------------------------------- * + * OpenSim: testForward.cpp * + * -------------------------------------------------------------------------- * + * The OpenSim API is a toolkit for musculoskeletal modeling and simulation. * + * See http://opensim.stanford.edu and the NOTICE file for more information. * + * OpenSim is developed at Stanford University and supported by the US * + * National Institutes of Health (U54 GM072970, R24 HD065690) and by DARPA * + * through the Warrior Web program. * + * * + * Copyright (c) 2005-2017 Stanford University and the Authors * + * Author(s): Joris Verhagen * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); you may * + * not use this file except in compliance with the License. You may obtain a * + * copy of the License at http://www.apache.org/licenses/LICENSE-2.0. * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + * -------------------------------------------------------------------------- */ +// functionbasedpathconversion.cpp +// author: Joris Verhagen + +// INCLUDE +#include +#include +#include + +using namespace OpenSim; +using namespace std; + +void testArm(); + + +int main() { + SimTK_START_TEST("testFunctionBasedPathConversion"); + // test arm model conversion accuracy + SimTK_SUBTEST(testArm); + SimTK_END_TEST(); +} + +void testArm(){ + try { + string modelName = "arm26.osim"; + string newModelName = "arm26_FBP.osim"; + + // test creating a FBP model + FunctionBasedPathConversionTool tool(modelName,newModelName); + tool.run(); + + // test loading in a FBP model + Model modelPoint(modelName); + Model modelFunction(newModelName); + // load/overwrite interp from file + + modelPoint.finalizeConnections(); + modelPoint.finalizeFromProperties(); + modelPoint.initSystem(); + modelPoint.printSubcomponentInfo(); + + modelFunction.finalizeConnections(); + modelFunction.finalizeFromProperties(); + modelFunction.initSystem(); + modelFunction.printSubcomponentInfo(); + + // test simulating a FBP model + auto reporterPoint = new ConsoleReporter(); + reporterPoint->setName("point_results"); + reporterPoint->set_report_time_interval(0.05); + reporterPoint->addToReport(modelPoint.getComponent("/forceset/TRIlong/pointbasedpath").getOutput("length")); + modelPoint.addComponent(reporterPoint); + + auto reporterFunction = new ConsoleReporter(); + reporterFunction ->setName("function_results"); + reporterFunction ->set_report_time_interval(0.05); + reporterFunction ->addToReport(modelFunction.getComponent("/forceset/TRIlong/functionbasedpath").getOutput("length")); + modelFunction.addComponent(reporterFunction); + + SimTK::State& pointState = modelPoint.initSystem(); + SimTK::State& functionState = modelFunction.initSystem(); + + chrono::milliseconds pbpSimTime{0}; + chrono::milliseconds fbpSimTime{0}; + int pbpStepsAttempted = 0; + int fbpStepsAttempted = 0; + int pbpStepsTaken = 0; + int fbpStepsTaken= 0; + + int n = 10; + double tFinal = 3.5; + for (int i=0; i(dt); + } + + for (int i=0; i(dt); + } + pbpSimTime /= n; + fbpSimTime /= n; + pbpStepsAttempted /= n; + fbpStepsAttempted /= n; + pbpStepsTaken /= n; + fbpStepsTaken /= n; + + cout << "\navg-time PBP: " << pbpSimTime.count() << endl; + cout << "avg-time FBP: " << fbpSimTime.count() << endl; + + cout << "\nsteps attempted PBP: " << pbpStepsAttempted << endl; + cout << "steps attempted FBP: " << fbpStepsAttempted << endl; + + cout << "\nsteps taken PBP: " << pbpStepsTaken << endl; + cout << "steps taken FBP: " << fbpStepsTaken << endl; + + // test accuracy of FBP approximation + + } catch (const Exception& e) { + e.print(cerr); + } + cout << "Done" << endl; +} diff --git a/CMakeLists.txt.user b/CMakeLists.txt.user new file mode 100644 index 0000000000..4288decf37 --- /dev/null +++ b/CMakeLists.txt.user @@ -0,0 +1,7045 @@ + + + + + + EnvironmentId + {31e18788-fd95-4ab4-9268-c7219c462e0d} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + true + false + 0 + true + true + 0 + 8 + true + 1 + true + true + true + false + + + + ProjectExplorer.Project.PluginSettings + + + + ProjectExplorer.Project.Target.0 + + Imported Kit + Imported Kit + {100e64e2-3594-40f4-a592-7d97f2f817ca} + 0 + 0 + 122 + + + CMAKE_BUILD_TYPE:STRING=RelWithDebInfo + CMAKE_CXX_COMPILER:FILEPATH=/usr/bin/c++ + CMAKE_C_COMPILER:FILEPATH=/usr/bin/cc + CMAKE_PREFIX_PATH:PATH= + OPENSIM_WITH_CASADI:BOOL=OFF + QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable} + + /home/none/opensim/interpolation/RelWithDebInfo-build + + + + + install + + true + CMake Build + + CMakeProjectManager.MakeStep + + + + + all + + true + CMake Build + + CMakeProjectManager.MakeStep + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + + + clean + + true + CMake Build + + CMakeProjectManager.MakeStep + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release with Debug Information + Release with Debug Information + CMakeProjectManager.CMakeBuildConfiguration + + 1 + + + 0 + Deploy + + ProjectExplorer.BuildSteps.Deploy + + 1 + Deploy locally + + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testLepton + + + /home/none/opensim/interpolation/RelWithDebInfo-build + 2 + + testLepton + + CMakeProjectManager.CMakeRunConfiguration.testLepton + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testTRCFileAdapter + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testTRCFileAdapter + + CMakeProjectManager.CMakeRunConfiguration.testTRCFileAdapter + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testPath + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testPath + + CMakeProjectManager.CMakeRunConfiguration.testPath + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testInducedAccelerations + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testInducedAccelerations + + CMakeProjectManager.CMakeRunConfiguration.testInducedAccelerations + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testAnalyzeTool + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testAnalyzeTool + + CMakeProjectManager.CMakeRunConfiguration.testAnalyzeTool + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testForward + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testForward + + CMakeProjectManager.CMakeRunConfiguration.testForward + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testScale + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testScale + + CMakeProjectManager.CMakeRunConfiguration.testScale + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testLiveIK + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testLiveIK + + CMakeProjectManager.CMakeRunConfiguration.testLiveIK + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testIK + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testIK + + CMakeProjectManager.CMakeRunConfiguration.testIK + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testID + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testID + + CMakeProjectManager.CMakeRunConfiguration.testID + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCSingleMuscle + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCSingleMuscle + + CMakeProjectManager.CMakeRunConfiguration.testCMCSingleMuscle + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCEMGDrivenArm_Thelen + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCEMGDrivenArm_Thelen + + CMakeProjectManager.CMakeRunConfiguration.testCMCEMGDrivenArm_Thelen + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCTwoMusclesOnBlock + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCTwoMusclesOnBlock + + CMakeProjectManager.CMakeRunConfiguration.testCMCTwoMusclesOnBlock + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testRootSolver + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testRootSolver + + CMakeProjectManager.CMakeRunConfiguration.testRootSolver + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCEMGDrivenArm_Millard + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCEMGDrivenArm_Millard + + CMakeProjectManager.CMakeRunConfiguration.testCMCEMGDrivenArm_Millard + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCArm26_Millard + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCArm26_Millard + + CMakeProjectManager.CMakeRunConfiguration.testCMCArm26_Millard + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCGait10dof18musc + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCGait10dof18musc + + CMakeProjectManager.CMakeRunConfiguration.testCMCGait10dof18musc + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCSingleRigidTendonMuscle + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCSingleRigidTendonMuscle + + CMakeProjectManager.CMakeRunConfiguration.testCMCSingleRigidTendonMuscle + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCWithControlConstraintsGait2354 + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCWithControlConstraintsGait2354 + + CMakeProjectManager.CMakeRunConfiguration.testCMCWithControlConstraintsGait2354 + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCWithControlConstraintsRunningModel + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCWithControlConstraintsRunningModel + + CMakeProjectManager.CMakeRunConfiguration.testCMCWithControlConstraintsRunningModel + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCArm26_Thelen + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCArm26_Thelen + + CMakeProjectManager.CMakeRunConfiguration.testCMCArm26_Thelen + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testRRA + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testRRA + + CMakeProjectManager.CMakeRunConfiguration.testRRA + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + opensense + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + opensense + + CMakeProjectManager.CMakeRunConfiguration.opensense + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testOpenSense + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testOpenSense + + CMakeProjectManager.CMakeRunConfiguration.testOpenSense + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testFunctions + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testFunctions + + CMakeProjectManager.CMakeRunConfiguration.testFunctions + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + opensim-cmd + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + opensim-cmd + + CMakeProjectManager.CMakeRunConfiguration.opensim-cmd + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCommandLineInterface + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCommandLineInterface + + CMakeProjectManager.CMakeRunConfiguration.testCommandLineInterface + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testFunctionBasedPathConversion + + + /home/none/opensim/interpolation/RelWithDebInfo-build + 2 + + testFunctionBasedPathConversion + + CMakeProjectManager.CMakeRunConfiguration.testFunctionBasedPathConversion + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testGCVSpline + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testGCVSpline + + CMakeProjectManager.CMakeRunConfiguration.testGCVSpline + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSerialization + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testSerialization + + CMakeProjectManager.CMakeRunConfiguration.testSerialization + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testStorage + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testStorage + + CMakeProjectManager.CMakeRunConfiguration.testStorage + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testXsensDataReader + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testXsensDataReader + + CMakeProjectManager.CMakeRunConfiguration.testXsensDataReader + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testWrappingMath + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testWrappingMath + + CMakeProjectManager.CMakeRunConfiguration.testWrappingMath + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testTableProcessor + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testTableProcessor + + CMakeProjectManager.CMakeRunConfiguration.testTableProcessor + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testStatesTrajectory + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testStatesTrajectory + + CMakeProjectManager.CMakeRunConfiguration.testStatesTrajectory + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testFunctionAdapter + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testFunctionAdapter + + CMakeProjectManager.CMakeRunConfiguration.testFunctionAdapter + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testInverseKinematicsSolver + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testInverseKinematicsSolver + + CMakeProjectManager.CMakeRunConfiguration.testInverseKinematicsSolver + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testInitState + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testInitState + + CMakeProjectManager.CMakeRunConfiguration.testInitState + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testFrames + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testFrames + + CMakeProjectManager.CMakeRunConfiguration.testFrames + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testModelInterface + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testModelInterface + + CMakeProjectManager.CMakeRunConfiguration.testModelInterface + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testForces + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testForces + + CMakeProjectManager.CMakeRunConfiguration.testForces + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testAssemblySolver + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testAssemblySolver + + CMakeProjectManager.CMakeRunConfiguration.testAssemblySolver + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testManager + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testManager + + CMakeProjectManager.CMakeRunConfiguration.testManager + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMomentArms + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMomentArms + + CMakeProjectManager.CMakeRunConfiguration.testMomentArms + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testReportersWithModel + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testReportersWithModel + + CMakeProjectManager.CMakeRunConfiguration.testReportersWithModel + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testPoints + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testPoints + + CMakeProjectManager.CMakeRunConfiguration.testPoints + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testDataTable + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testDataTable + + CMakeProjectManager.CMakeRunConfiguration.testDataTable + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testContactGeometry + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testContactGeometry + + CMakeProjectManager.CMakeRunConfiguration.testContactGeometry + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testNestedModelComponents + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testNestedModelComponents + + CMakeProjectManager.CMakeRunConfiguration.testNestedModelComponents + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testPrescribedForce + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testPrescribedForce + + CMakeProjectManager.CMakeRunConfiguration.testPrescribedForce + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMuscleMetabolicsProbes + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMuscleMetabolicsProbes + + CMakeProjectManager.CMakeRunConfiguration.testMuscleMetabolicsProbes + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testProbes + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testProbes + + CMakeProjectManager.CMakeRunConfiguration.testProbes + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSimulationUtilities + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testSimulationUtilities + + CMakeProjectManager.CMakeRunConfiguration.testSimulationUtilities + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testJoints + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testJoints + + CMakeProjectManager.CMakeRunConfiguration.testJoints + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testConstraints + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testConstraints + + CMakeProjectManager.CMakeRunConfiguration.testConstraints + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSerializableMuscleCurves + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testSerializableMuscleCurves + + CMakeProjectManager.CMakeRunConfiguration.testSerializableMuscleCurves + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testActuators + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testActuators + + CMakeProjectManager.CMakeRunConfiguration.testActuators + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testAPDMDataReader + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testAPDMDataReader + + CMakeProjectManager.CMakeRunConfiguration.testAPDMDataReader + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMuscleFirstOrderActivationDynamicModel + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMuscleFirstOrderActivationDynamicModel + + CMakeProjectManager.CMakeRunConfiguration.testMuscleFirstOrderActivationDynamicModel + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testModelProcessor + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testModelProcessor + + CMakeProjectManager.CMakeRunConfiguration.testModelProcessor + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMuscleFixedWidthPennationModel + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMuscleFixedWidthPennationModel + + CMakeProjectManager.CMakeRunConfiguration.testMuscleFixedWidthPennationModel + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testDeGrooteFregly2016Muscle + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testDeGrooteFregly2016Muscle + + CMakeProjectManager.CMakeRunConfiguration.testDeGrooteFregly2016Muscle + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMuscles + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMuscles + + CMakeProjectManager.CMakeRunConfiguration.testMuscles + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testOutputReporter + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testOutputReporter + + CMakeProjectManager.CMakeRunConfiguration.testOutputReporter + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testExternalLoads + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testExternalLoads + + CMakeProjectManager.CMakeRunConfiguration.testExternalLoads + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testControllers + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testControllers + + CMakeProjectManager.CMakeRunConfiguration.testControllers + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testModelCopy + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testModelCopy + + CMakeProjectManager.CMakeRunConfiguration.testModelCopy + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSerializeOpenSimObjects + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testSerializeOpenSimObjects + + CMakeProjectManager.CMakeRunConfiguration.testSerializeOpenSimObjects + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testComponentInterface + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testComponentInterface + + CMakeProjectManager.CMakeRunConfiguration.testComponentInterface + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testVisualization + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testVisualization + + CMakeProjectManager.CMakeRunConfiguration.testVisualization + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoContact + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoContact + + CMakeProjectManager.CMakeRunConfiguration.testMocoContact + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoInverse + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoInverse + + CMakeProjectManager.CMakeRunConfiguration.testMocoInverse + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoMetabolics + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoMetabolics + + CMakeProjectManager.CMakeRunConfiguration.testMocoMetabolics + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoInterface + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoInterface + + CMakeProjectManager.CMakeRunConfiguration.testMocoInterface + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoConstraints + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoConstraints + + CMakeProjectManager.CMakeRunConfiguration.testMocoConstraints + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoImplicit + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoImplicit + + CMakeProjectManager.CMakeRunConfiguration.testMocoImplicit + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoAnalytic + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoAnalytic + + CMakeProjectManager.CMakeRunConfiguration.testMocoAnalytic + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoGoals + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoGoals + + CMakeProjectManager.CMakeRunConfiguration.testMocoGoals + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoActuators + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoActuators + + CMakeProjectManager.CMakeRunConfiguration.testMocoActuators + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testNCSpline + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testNCSpline + + CMakeProjectManager.CMakeRunConfiguration.testNCSpline + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoTrack + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoTrack + + CMakeProjectManager.CMakeRunConfiguration.testMocoTrack + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoParameters + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoParameters + + CMakeProjectManager.CMakeRunConfiguration.testMocoParameters + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleHopperDeviceAnswers + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleHopperDeviceAnswers + + CMakeProjectManager.CMakeRunConfiguration.exampleHopperDeviceAnswers + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleHopperDevice + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleHopperDevice + + CMakeProjectManager.CMakeRunConfiguration.exampleHopperDevice + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + example2DataTable + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + example2DataTable + + CMakeProjectManager.CMakeRunConfiguration.example2DataTable + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + example1DataTable + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + example1DataTable + + CMakeProjectManager.CMakeRunConfiguration.example1DataTable + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleTRCFileAdapter + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleTRCFileAdapter + + CMakeProjectManager.CMakeRunConfiguration.exampleTRCFileAdapter + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleSlidingMass + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleSlidingMass + + CMakeProjectManager.CMakeRunConfiguration.exampleSlidingMass + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleSlidingMassAdvanced + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleSlidingMassAdvanced + + CMakeProjectManager.CMakeRunConfiguration.exampleSlidingMassAdvanced + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleTracking + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleTracking + + CMakeProjectManager.CMakeRunConfiguration.exampleTracking + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSmoothSegmentedFunctionFactory + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testSmoothSegmentedFunctionFactory + + CMakeProjectManager.CMakeRunConfiguration.testSmoothSegmentedFunctionFactory + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleMarkerTracking + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleMarkerTracking + + CMakeProjectManager.CMakeRunConfiguration.exampleMarkerTracking + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleHangingMuscle + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleHangingMuscle + + CMakeProjectManager.CMakeRunConfiguration.exampleHangingMuscle + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + example2DWalkingMetabolics + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + example2DWalkingMetabolics + + CMakeProjectManager.CMakeRunConfiguration.example2DWalkingMetabolics + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + example2DWalking + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + example2DWalking + + CMakeProjectManager.CMakeRunConfiguration.example2DWalking + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleMocoInverse + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleMocoInverse + + CMakeProjectManager.CMakeRunConfiguration.exampleMocoInverse + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleMocoTrack + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleMocoTrack + + CMakeProjectManager.CMakeRunConfiguration.exampleMocoTrack + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleMocoCustomEffortGoal + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleMocoCustomEffortGoal + + CMakeProjectManager.CMakeRunConfiguration.exampleMocoCustomEffortGoal + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleCustomImplicitAuxiliaryDynamics + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleCustomImplicitAuxiliaryDynamics + + CMakeProjectManager.CMakeRunConfiguration.exampleCustomImplicitAuxiliaryDynamics + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testComponents + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testComponents + + CMakeProjectManager.CMakeRunConfiguration.testComponents + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testAddComponents + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testAddComponents + + CMakeProjectManager.CMakeRunConfiguration.testAddComponents + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSTOFileAdapter + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testSTOFileAdapter + + CMakeProjectManager.CMakeRunConfiguration.testSTOFileAdapter + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testControllerExample + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testControllerExample + + CMakeProjectManager.CMakeRunConfiguration.testControllerExample + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleController + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleController + + CMakeProjectManager.CMakeRunConfiguration.exampleController + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testExampleMain + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testExampleMain + + CMakeProjectManager.CMakeRunConfiguration.testExampleMain + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleMain + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleMain + + CMakeProjectManager.CMakeRunConfiguration.exampleMain + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testOptimizationExample + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testOptimizationExample + + CMakeProjectManager.CMakeRunConfiguration.testOptimizationExample + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleOptimization + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleOptimization + + CMakeProjectManager.CMakeRunConfiguration.exampleOptimization + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCustomActuatorExample + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCustomActuatorExample + + CMakeProjectManager.CMakeRunConfiguration.testCustomActuatorExample + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleCustomActuator + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleCustomActuator + + CMakeProjectManager.CMakeRunConfiguration.exampleCustomActuator + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMuscleExample + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMuscleExample + + CMakeProjectManager.CMakeRunConfiguration.testMuscleExample + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleMuscle + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleMuscle + + CMakeProjectManager.CMakeRunConfiguration.exampleMuscle + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMarkerData + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMarkerData + + CMakeProjectManager.CMakeRunConfiguration.testMarkerData + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSimpleOptimizationExample + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testSimpleOptimizationExample + + CMakeProjectManager.CMakeRunConfiguration.testSimpleOptimizationExample + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleOptimizationSimple + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleOptimizationSimple + + CMakeProjectManager.CMakeRunConfiguration.exampleOptimizationSimple + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + checkEnvironment + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + checkEnvironment + + CMakeProjectManager.CMakeRunConfiguration.checkEnvironment + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testIterators + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testIterators + + CMakeProjectManager.CMakeRunConfiguration.testIterators + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testREADME + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testREADME + + CMakeProjectManager.CMakeRunConfiguration.testREADME + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testWrapping + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testWrapping + + CMakeProjectManager.CMakeRunConfiguration.testWrapping + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testExampleLuxoMuscle + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testExampleLuxoMuscle + + CMakeProjectManager.CMakeRunConfiguration.testExampleLuxoMuscle + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testBuildDynamicWalker + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testBuildDynamicWalker + + CMakeProjectManager.CMakeRunConfiguration.testBuildDynamicWalker + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testJointReactions + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testJointReactions + + CMakeProjectManager.CMakeRunConfiguration.testJointReactions + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testStaticOptimization + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testStaticOptimization + + CMakeProjectManager.CMakeRunConfiguration.testStaticOptimization + 3768 + false + true + false + false + true + + 123 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 18 + + + Version + 18 + + diff --git a/OpenSim/Tools/FunctionBasedPathConversionTool.cpp b/OpenSim/Tools/FunctionBasedPathConversionTool.cpp new file mode 100644 index 0000000000..676fafcf3f --- /dev/null +++ b/OpenSim/Tools/FunctionBasedPathConversionTool.cpp @@ -0,0 +1,157 @@ +#include +#include "FunctionBasedPathConversionTool.h" +#include +#include +#include +#include +#include +#include +#include + +using namespace OpenSim; +using namespace std; + +FunctionBasedPathConversionTool::~FunctionBasedPathConversionTool() +{ +// delete &_modelPath; +// delete &_newModelName; +} + +FunctionBasedPathConversionTool::FunctionBasedPathConversionTool() + : _modelPath(""), _newModelName("") +{ + +} + +FunctionBasedPathConversionTool::FunctionBasedPathConversionTool( + const string modelPath, const string newModelName) + : _modelPath(modelPath), _newModelName(newModelName) +{ + +} + +bool FunctionBasedPathConversionTool::run(){ +// try{ + Model sourceModel{_modelPath}; + Model outputModel{sourceModel}; + + sourceModel.finalizeConnections(); + sourceModel.finalizeFromProperties(); + sourceModel.initSystem(); + + bool verbose = false; + if (verbose) { + sourceModel.printSubcomponentInfo(); + } + + // struct that holds how a PBP in the source maps onto an actuator in the + // destination + struct PBPtoActuatorMapping final { + PointBasedPath& sourcePBP; + PathActuator& outputActuator; + + PBPtoActuatorMapping(PointBasedPath& sourcePBP_, + PathActuator& outputActuator_) : + sourcePBP{sourcePBP_}, + outputActuator{outputActuator_} { + } + }; + + // find PBPs in the source and figure out how they map onto `PathActuator`s + // in the destination + // + // (this is because `PathActuator`s are the "owners" of `GeometryPath`s in + // most models) + vector mappings; + for (auto& pa : sourceModel.updComponentList()) { + + PointBasedPath* pbp = dynamic_cast(&pa.updGeometryPath()); + + // if the actuator doesn't use a PBP, ignore it + if (!pbp) { + continue; + } + + // otherwise, find the equivalent path in the destination + Component* c = const_cast(outputModel.findComponent(pa.getAbsolutePath())); + + if (!c) { + stringstream err; + err << "could not find '" << pa.getAbsolutePathString() << "' in the output model: this is a programming error"; + throw runtime_error{move(err).str()}; + } + + PathActuator* paDest = dynamic_cast(c); + + if (!paDest) { + stringstream err; + err << "the component '" << pa.getAbsolutePathString() << "' has a class of '" << pa.getConcreteClassName() << "' in the source model but a class of '" << c->getConcreteClassName() << "' in the destination model: this shouldn't happen"; + throw runtime_error{move(err).str()}; + } + + mappings.emplace_back(*pbp, *paDest); + } + + // for each `PathActuator` that uses a PBP, create an equivalent + // `FunctionBasedPath` (FBP) by fitting a function against the PBP and + // replace the PBP owned by the destination's `PathActuator` with the FBP + int i = 1; + string newModelNameLocal = _newModelName; + for (const auto& mapping : mappings) { + // create an FBP in-memory + FunctionBasedPath fbp = FunctionBasedPath::fromPointBasedPath(sourceModel, mapping.sourcePBP); + + // write the FBP's data to the filesystem + string dataFilename = [newModelNameLocal, &i]() { + stringstream ss; + ss << newModelNameLocal << "_DATA_" << i << ".txt"; + return move(ss).str(); + }(); + + ofstream dataFile{dataFilename}; + + if (!dataFile) { + stringstream msg; + msg << "error: could not open a `FunctionBasedPath`'s data file at: " << dataFilename; + throw runtime_error{move(msg).str()}; + } + + fbp.printContent(dataFile); + + if (!dataFile) { + stringstream msg; + msg << "error: error occurred after writing `FunctionBasedPath`s data to" << dataFilename; + throw runtime_error{move(msg).str()}; + } + + // update the FBP to refer to the data file + fbp.setDataPath(dataFilename); + + // assign the FBP over the destination's PBP + mapping.outputActuator.updProperty_GeometryPath().setValue(fbp); + + ++i; + } + + // the output model is now the same as the source model, but each PBP in + // its `PathActuator`s has been replaced with an FBP. Perform any final + // model-level fixups and save the output model. + + outputModel.finalizeFromProperties(); + outputModel.initSystem(); + outputModel.print(string{_newModelName} + ".osim"); + + if (verbose) { + cerr << "--- interpolation complete ---\n\n" + << "model before:\n"; + sourceModel.printSubcomponentInfo(); + cerr << "\nmodel after:\n"; + outputModel.printSubcomponentInfo(); + } +// } catch(const std::exception& x) { +// log_error("Exception in FunctionBasedPathConversionTool: run", x.what()); +// return false; +// } + + return true; +} diff --git a/OpenSim/Tools/FunctionBasedPathConversionTool.h b/OpenSim/Tools/FunctionBasedPathConversionTool.h new file mode 100644 index 0000000000..c874459fe3 --- /dev/null +++ b/OpenSim/Tools/FunctionBasedPathConversionTool.h @@ -0,0 +1,101 @@ +#ifndef __FunctionBasedPathConversionTool_h__ +#define __FunctionBasedPathConversionTool_h__ +/* -------------------------------------------------------------------------- * + * OpenSim: FunctionBasedPathConversionTool.h * + * -------------------------------------------------------------------------- * + * The OpenSim API is a toolkit for musculoskeletal modeling and simulation. * + * See http://opensim.stanford.edu and the NOTICE file for more information. * + * OpenSim is developed at Stanford University and supported by the US * + * National Institutes of Health (U54 GM072970, R24 HD065690) and by DARPA * + * through the Warrior Web program. * + * * + * Copyright (c) 2005-2017 Stanford University and the Authors * + * Author(s): Joris Verhagen * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); you may * + * not use this file except in compliance with the License. You may obtain a * + * copy of the License at http://www.apache.org/licenses/LICENSE-2.0. * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + * -------------------------------------------------------------------------- */ +#include + +#include "osimToolsDLL.h" + +#ifdef SWIG + #ifdef OSIMTOOLS_API + #undef OSIMTOOLS_API + #define OSIMTOOLS_API + #endif +#endif + +namespace OpenSim { +//============================================================================= +//============================================================================= +/** + * A concrete tool transforming a pointbasedpath model to a functionbasedpath + * model + * + * @author Joris Verhagen + * @version 1.0 + */ +class OSIMTOOLS_API FunctionBasedPathConversionTool: public AbstractTool { +OpenSim_DECLARE_CONCRETE_OBJECT(FunctionBasedPathConversionTool, AbstractTool); + +//============================================================================= +// MEMBER VARIABLES +//============================================================================= +protected: + std::string _modelPath; + std::string _newModelName; + +//============================================================================= +// METHODS +//============================================================================= + //-------------------------------------------------------------------------- + // CONSTRUCTION + //-------------------------------------------------------------------------- +public: + virtual ~FunctionBasedPathConversionTool(); + FunctionBasedPathConversionTool(); + FunctionBasedPathConversionTool(const std::string modelPath, const std::string newModelName); + +// void generateModelAndPrint(); + + //-------------------------------------------------------------------------- + // OPERATORS + //-------------------------------------------------------------------------- +public: +//#ifndef SWIG +// FunctionBasedPathConversionTool& +// operator=(const FunctionBasedPathConversionTool &aFunctionBasedPathConversionTool); +//#endif +// void updateFromXMLNode(SimTK::Xml::Element& aNode, int versionNumber=-1) override; + + //-------------------------------------------------------------------------- + // GET AND SET + //-------------------------------------------------------------------------- + void setModelPath(const std::string modelPath) {_modelPath = modelPath;} + void setNewModelName(const std::string newModelName) {_newModelName = newModelName;} + std::string getModelPath() {return _modelPath;} + std::string getNewModelName() {return _newModelName;} + + //-------------------------------------------------------------------------- + // INTERFACE + //-------------------------------------------------------------------------- + bool run() override SWIG_DECLARE_EXCEPTION; + +//============================================================================= +}; // END of class FunctionBasedPathConversionTool + +}; //namespace +//============================================================================= +//============================================================================= + +#endif // _FunctionBasedPathConversionTool_h__ + + diff --git a/OpenSim/Tools/FunctionBasedPathModelTool.cpp b/OpenSim/Tools/FunctionBasedPathModelTool.cpp deleted file mode 100644 index 8eebeab659..0000000000 --- a/OpenSim/Tools/FunctionBasedPathModelTool.cpp +++ /dev/null @@ -1,231 +0,0 @@ -#include - -#include -#include -#include -#include -#include -#include -#include - -using namespace OpenSim; - -static const char usage[] = "FunctionBasedPathModelTool [--help] MODEL OUTPUT_NAME"; -static const char help_text[] = -R"( -ARGS - - --help print this help - -v, --verbose print verbose output - -DESCRIPTION - - This tool tries to convert an .osim file (MODEL) that contains - `GeometryPath`s and `PointBasedPath`s, into a functionally equivalent model - file, written to ${OUTPUT_NAME}.osim, that contains `FunctionBasedPath`s. - - The main reason to do this is performance. Computing a path at each timestep - in a simulation can be computationally expensive - especially if the path is - complex (e.g. contains complex wrapping geometry). Pre-computing the - path's topology ahead of time into a function-based lookup *may* speed up - simulations that spend a significant amount of time computing paths. - - This tool effectively: - - - Reads MODEL (the source model) - - Searches for `GeometryPath`s and `PointBasedPath`s in the source model - - Tries to parameterize those paths against the source model's coordinates - (e.g. joint coordinates), to produce an n-dimensional Bezier curve fit - of those paths - - Saves the fit data to ${OUTPUT_NAME}_DATA_${i}.txt, where `i` is an - arbirary ID that links the `FunctionBasedPath` in the output .osim file - to the Bezier fit's data - - Updates the source model to contain `FunctionBasedPath`s - - Writes the updated model to `${OUTPUT_NAME}.osim` - -EXAMPLE USAGE - - FunctionBasedPathModelTool RajagopalModel.osim RajagopalModel_Precomputed.osim -)"; - -int main(int argc, char **argv) { - // skip exe name - --argc; - ++argv; - - bool verbose = false; - char const* sourceModelPath = nullptr; - char const* outputName = nullptr; - - // parse CLI args - { - int nUnnamed = 0; - while (argc) { - const char* arg = argv[0]; - - // handle unnamed args - if (arg[0] != '-') { - switch (nUnnamed) { - case 0: // MODEL - sourceModelPath = arg; - break; - case 1: // OUTPUT_NAME - outputName = arg; - break; - default: - std::cerr << "FunctionBasedPathModelTool: error: too many arguments: should only supply 'MODEL' and 'OUTPUT_NAME'\n\nUSAGE: " - << usage - << std::endl; - return -1; - } - - ++nUnnamed; - --argc; - ++argv; - continue; - } - - // handle flagged args (e.g. --arg) - if (std::strcmp(arg, "--help") == 0) { - std::cout << "usage: " << usage << '\n' << help_text << std::endl; - return 0; - } else if (std::strcmp(arg, "--verbose") == 0 || std::strcmp(arg, "-v") == 0) { - verbose = true; - --argc; - ++argv; - } else { - std::cerr << "FunctionBasedPathModelTool: error: unknown argument '" - << arg - << "': see --help for usage info"; - return -1; - } - } - - if (nUnnamed != 2) { - std::cerr << "FunctionBasedPathModelTool: error: too few arguments supplied\n\n" - << usage - << std::endl; - return -1; - } - - assert(argc == 0); - assert(sourceModelPath != nullptr); - assert(outputName != nullptr); - } - - Model sourceModel{sourceModelPath}; - Model outputModel{sourceModel}; - - sourceModel.finalizeConnections(); - sourceModel.finalizeFromProperties(); - sourceModel.initSystem(); - if (verbose) { - sourceModel.printSubcomponentInfo(); - } - - // struct that holds how a PBP in the source maps onto an actuator in the - // destination - struct PBPtoActuatorMapping final { - PointBasedPath& sourcePBP; - PathActuator& outputActuator; - - PBPtoActuatorMapping(PointBasedPath& sourcePBP_, - PathActuator& outputActuator_) : - sourcePBP{sourcePBP_}, - outputActuator{outputActuator_} { - } - }; - - // find PBPs in the source and figure out how they map onto `PathActuator`s - // in the destination - // - // (this is because `PathActuator`s are the "owners" of `GeometryPath`s in - // most models) - std::vector mappings; - for (auto& pa : sourceModel.updComponentList()) { - - PointBasedPath* pbp = dynamic_cast(&pa.updGeometryPath()); - - // if the actuator doesn't use a PBP, ignore it - if (!pbp) { - continue; - } - - // otherwise, find the equivalent path in the destination - Component* c = const_cast(outputModel.findComponent(pa.getAbsolutePath())); - - if (!c) { - std::stringstream err; - err << "could not find '" << pa.getAbsolutePathString() << "' in the output model: this is a programming error"; - throw std::runtime_error{std::move(err).str()}; - } - - PathActuator* paDest = dynamic_cast(c); - - if (!paDest) { - std::stringstream err; - err << "the component '" << pa.getAbsolutePathString() << "' has a class of '" << pa.getConcreteClassName() << "' in the source model but a class of '" << c->getConcreteClassName() << "' in the destination model: this shouldn't happen"; - throw std::runtime_error{std::move(err).str()}; - } - - mappings.emplace_back(*pbp, *paDest); - } - - // for each `PathActuator` that uses a PBP, create an equivalent - // `FunctionBasedPath` (FBP) by fitting a function against the PBP and - // replace the PBP owned by the destination's `PathActuator` with the FBP - int i = 1; - for (const auto& mapping : mappings) { - // create an FBP in-memory - FunctionBasedPath fbp = FunctionBasedPath::fromPointBasedPath(sourceModel, mapping.sourcePBP); - - // write the FBP's data to the filesystem - std::string dataFilename = [&outputName, &i]() { - std::stringstream ss; - ss << outputName << "_DATA_" << i << ".txt"; - return std::move(ss).str(); - }(); - - std::ofstream dataFile{dataFilename}; - - if (!dataFile) { - std::stringstream msg; - msg << "error: could not open a `FunctionBasedPath`'s data file at: " << dataFilename; - throw std::runtime_error{std::move(msg).str()}; - } - - fbp.printContent(dataFile); - - if (!dataFile) { - std::stringstream msg; - msg << "error: error occurred after writing `FunctionBasedPath`s data to" << dataFilename; - throw std::runtime_error{std::move(msg).str()}; - } - - // update the FBP to refer to the data file - fbp.setDataPath(dataFilename); - - // assign the FBP over the destination's PBP - mapping.outputActuator.updProperty_GeometryPath().setValue(fbp); - - ++i; - } - - // the output model is now the same as the source model, but each PBP in - // its `PathActuator`s has been replaced with an FBP. Perform any final - // model-level fixups and save the output model. - - outputModel.finalizeFromProperties(); - outputModel.initSystem(); - outputModel.print(std::string{outputName} + ".osim"); - - if (verbose) { - std::cerr << "--- interpolation complete ---\n\n" - << "model before:\n"; - sourceModel.printSubcomponentInfo(); - std::cerr << "\nmodel after:\n"; - outputModel.printSubcomponentInfo(); - } - - return 0; -} diff --git a/OpenSim/Tools/RegisterTypes_osimTools.cpp b/OpenSim/Tools/RegisterTypes_osimTools.cpp index 6def930d80..27a03342bc 100644 --- a/OpenSim/Tools/RegisterTypes_osimTools.cpp +++ b/OpenSim/Tools/RegisterTypes_osimTools.cpp @@ -34,6 +34,7 @@ #include "AnalyzeTool.h" #include "InverseKinematicsTool.h" #include "IMUInverseKinematicsTool.h" +#include "FunctionBasedPathConversionTool.h" #include "InverseDynamicsTool.h" @@ -79,6 +80,7 @@ OSIMTOOLS_API void RegisterTypes_osimTools() Object::registerType( RRATool() ); Object::registerType( ForwardTool() ); Object::registerType( AnalyzeTool() ); + Object::registerType( FunctionBasedPathConversionTool() ); Object::registerType( GenericModelMaker() ); Object::registerType( IKCoordinateTask() ); @@ -125,4 +127,4 @@ osimToolsInstantiator::osimToolsInstantiator() void osimToolsInstantiator::registerDllClasses() { RegisterTypes_osimTools(); -} \ No newline at end of file +} diff --git a/OpenSim/Tools/osimTools.h b/OpenSim/Tools/osimTools.h index 66b7c3b889..bf923c8c93 100644 --- a/OpenSim/Tools/osimTools.h +++ b/OpenSim/Tools/osimTools.h @@ -28,6 +28,7 @@ #include "CMCTool.h" #include "ForwardTool.h" #include "AnalyzeTool.h" +#include "FunctionBasedPathConversionTool.h" #include "InverseKinematicsTool.h" #include "InverseDynamicsTool.h" From c6e1598dafc39449022f2809b9c2ff495b58a55f Mon Sep 17 00:00:00 2001 From: joris997 Date: Thu, 29 Apr 2021 16:51:43 +0200 Subject: [PATCH 16/36] interpolation to working state --- CMakeLists.txt.user | 2 +- .../Simulation/Model/FunctionBasedPath.cpp | 274 ++++++++++++++---- OpenSim/Simulation/Model/FunctionBasedPath.h | 3 +- OpenSim/Simulation/Model/ModelComponent.h | 2 +- .../Tools/FunctionBasedPathConversionTool.cpp | 51 ++-- 5 files changed, 245 insertions(+), 87 deletions(-) diff --git a/CMakeLists.txt.user b/CMakeLists.txt.user index 4288decf37..22ab1dd922 100644 --- a/CMakeLists.txt.user +++ b/CMakeLists.txt.user @@ -1,6 +1,6 @@ - + EnvironmentId diff --git a/OpenSim/Simulation/Model/FunctionBasedPath.cpp b/OpenSim/Simulation/Model/FunctionBasedPath.cpp index 6167659ecd..03cabc616c 100644 --- a/OpenSim/Simulation/Model/FunctionBasedPath.cpp +++ b/OpenSim/Simulation/Model/FunctionBasedPath.cpp @@ -145,61 +145,26 @@ class Interpolate final { } } - // Constructor for non FBP/PBP related interpolation + // Precomputed data constructor without explicit coords Interpolate( - std::vector> discretizationIn, - std::vector,double>> evalsPair) : + std::vector dSIn, + std::vector evalsIn) : - dimensions(static_cast(discretizationIn.size())), - discretizations(discretizationIn), - n(dimensions,0), - u(dimensions,0), - loc(dimensions,0) + dimensions(static_cast(dSIn.size())), + evals(evalsIn), + n(dimensions, 0), + u(dimensions, 0), + loc(dimensions, 0), + dS(dSIn), + coords(std::vector(static_cast(dimensions))) { - assert(discretizations.size() == evalsPair[0].first.size()); - - // allow it to work with the new struct method - for (int i = 0; i < dimensions; i++) { - Discretization dc; - dc.begin = discretizations[i][0]; - dc.end = discretizations[i][discretizations[i].size()-1]; - dc.nPoints = static_cast(discretizations[i].size()); - dc.gridsize = (dc.end - dc.begin)/(dc.nPoints-1); - - dS.push_back(dc); - } - - for (int i = 0; i < dimensions; i++) { - beta.push_back({0,0,0,0}); - discSizes.push_back(discretizations[i].size()); - } - - // I'm aware this is still stupid but it is what it is for now - int numOfLoops = 1; - for (int i = 0; i < dimensions; i++) { - numOfLoops *= discretizations[i].size(); - } - - std::vector cnt(dimensions, 0); - for (int i = 0; i < numOfLoops; i++) { - for (unsigned k = 0; k < evalsPair.size(); k++) { - if (evalsPair[k].first == cnt) { - evals.push_back(evalsPair[k].second); - } - } - - for (int x = dimensions - 1; x >= 0; x--) { - if (cnt[x] != dS[x].nPoints-1) { - cnt[x] += 1; - break; - } + std::vector dc_; + for (size_t i = 0; i < static_cast(dimensions); i++) { + beta.push_back({0, 0, 0, 0}); - if (cnt[x] == dS[x].nPoints-1) { - for (int y = x; y < dimensions; y++) { - cnt[y] = 0; - } - } - } + linspace(dS[i], dc_); + discretizations.push_back(dc_); + discSizes.push_back(dS[i].gridsize); } } @@ -318,6 +283,14 @@ class Interpolate final { return dS; } + std::vector getCoords() const { + return coords; + } + + void setCoords(std::vector coordsIn) { + coords = coordsIn; + } + std::vector getEvals() const { return evals; } @@ -555,7 +528,7 @@ OpenSim::FunctionBasedPath OpenSim::FunctionBasedPath::fromPointBasedPath( } // create vector for number of interpolation points - std::vector nPoints(coordsThatAffectPBP.size(), 5); + std::vector nPoints(coordsThatAffectPBP.size(), 80); // reinitialize the default-initialized interp with the points fbp._impl->interp = Interpolate{ @@ -633,7 +606,7 @@ static Interpolate readInterp(const std::string &path) { while (std::getline(file, line)) { ++lineno; - if (line.empty()) { + if (lineno >= 2) { break; } } @@ -642,7 +615,6 @@ static Interpolate readInterp(const std::string &path) { int dimensions = -1; while (std::getline(file, line)) { ++lineno; - if (line.empty()) { if (dimensions <= -1) { std::stringstream msg; @@ -655,6 +627,24 @@ static Interpolate readInterp(const std::string &path) { dimensions = std::stoi(line.c_str()); } + // COORDINATES + std::string coordsExist = ""; + std::vector coordinates; + while (std::getline(file,line)) { + ++lineno; + + if (line.empty()) { + if (coordsExist == ""){ + std::stringstream msg; + msg << path << ": L" << lineno << ": unexpected blank line (expected coordinates)"; + OPENSIM_THROW(OpenSim::Exception, std::move(msg).str()); + } + break; + } + coordsExist = line.c_str(); + coordinates.push_back(line.c_str()); + } + // [DISCRETIZATION_1..DISCRETIZATION_n] std::vector discretizations; discretizations.reserve(static_cast(dimensions)); @@ -691,9 +681,9 @@ static Interpolate readInterp(const std::string &path) { // sanity check { - size_t expectedEvals = 0; + size_t expectedEvals = 1; for (const Discretization& d : discretizations) { - expectedEvals += static_cast(d.nPoints); + expectedEvals *= static_cast(d.nPoints); } if (expectedEvals != evals.size()) { @@ -703,9 +693,6 @@ static Interpolate readInterp(const std::string &path) { } } - // TODO: figure out which coordinates affect this path - must be serialized - // in the file - return Interpolate{ std::vector(static_cast(dimensions)), std::move(discretizations), @@ -713,6 +700,76 @@ static Interpolate readInterp(const std::string &path) { }; } +static std::vector readInterpCoords(const std::string &path, OpenSim::Component &root){ + std::ifstream file{path}; + + if (!file) { + std::stringstream msg; + msg << path << ": error opening FunctionBasedPath data file"; + OPENSIM_THROW(OpenSim::Exception, std::move(msg).str()); + } + + int lineno = 0; + std::string line; + + // ID (ignored) + while (std::getline(file, line)) { + ++lineno; + + if (lineno >= 2) { + break; + } + } + + // DIMENSIONS + int dimensions = -1; + while (std::getline(file, line)) { + ++lineno; + if (line.empty()) { + if (dimensions <= -1) { + std::stringstream msg; + msg << path << ": L" << lineno << ": unexpected blank line (expected dimensions)"; + OPENSIM_THROW(OpenSim::Exception, std::move(msg).str()); + } + break; + } + + dimensions = std::stoi(line.c_str()); + } + + // COORDINATES + std::string coordsExist = ""; + std::vector coordinates; + while (std::getline(file,line)) { + ++lineno; + + if (line.empty()) { + if (coordsExist == ""){ + std::stringstream msg; + msg << path << ": L" << lineno << ": unexpected blank line (expected coordinates)"; + OPENSIM_THROW(OpenSim::Exception, std::move(msg).str()); + } + break; + } + coordsExist = line.c_str(); + coordinates.push_back(line.c_str()); + } + + std::vector coords; + for (std::string coord : coordinates){ + const OpenSim::Component& comp = root.getComponent(coord); + std::cerr << "coord: " << coord << std::endl; + std::cerr << "comp.getabsolutepathstring: " << comp.getAbsolutePathString() << std::endl; + std::cerr << "comp.getconreteclassname: " << comp.getConcreteClassName() << std::endl; + if (comp.getAbsolutePathString() == coord){ + const OpenSim::Coordinate* c = dynamic_cast(&comp); + std::cerr << "c.name: " << c->getName() << std::endl; + coords.push_back(c); + } + } + return coords; +} + OpenSim::FunctionBasedPath OpenSim::FunctionBasedPath::fromDataFile(const std::string &path) { FunctionBasedPath fbp; @@ -721,6 +778,7 @@ OpenSim::FunctionBasedPath OpenSim::FunctionBasedPath::fromDataFile(const std::s // the data file effectively only contains data for Interpolate, data file // spec is in there fbp._impl->interp = readInterp(path); +// this->finalizeConnections(); return fbp; } @@ -735,7 +793,10 @@ OpenSim::FunctionBasedPath& OpenSim::FunctionBasedPath::operator=(const Function OpenSim::FunctionBasedPath& OpenSim::FunctionBasedPath::operator=(FunctionBasedPath&&) = default; OpenSim::FunctionBasedPath::~FunctionBasedPath() noexcept = default; -void OpenSim::FunctionBasedPath::extendFinalizeFromProperties() { +void OpenSim::FunctionBasedPath::extendFinalizeFromProperties() +{ + Super::extendFinalizeFromProperties(); + bool hasBackingFile = !get_data_path().empty(); bool hasInMemoryFittingData = !_impl->interp.getdS().empty(); @@ -755,6 +816,33 @@ void OpenSim::FunctionBasedPath::extendFinalizeFromProperties() { } } +void OpenSim::FunctionBasedPath::extendFinalizeConnections(OpenSim::Component &root) +{ +// Super::extendFinalizeConnections(root); + + Model* model = dynamic_cast(&root); + // Allow (model) component to include its own subcomponents + // before calling the base method which automatically invokes + // connect all the subcomponents. + if (model) + connectToModel(*model); + + bool hasBackingFile = !get_data_path().empty(); + bool hasInMemoryFittingData = !_impl->interp.getdS().empty(); + if (hasBackingFile) { + // set the coordinates + _impl->interp.setCoords(readInterpCoords(get_data_path(),root)); + } else if (hasInMemoryFittingData) { + // do nothing: just use the already-loaded in-memory fitting data + return; + } else { + // error: has no backing file and has no in-memory fitting data + std::stringstream msg; + msg << getAbsolutePathString() << ": cannot call `.finalizeConnections()` on this `" << getConcreteClassName() << "`: the path has no fitting associated with it. A `FunctionBasedPath` must either have a valid `data_path` property that points to its underlying fitting data data, or be initialized using `FunctionBasedPath::fromPointBasedPath` (i.e. generate new fitting data)"; + OPENSIM_THROW(OpenSim::Exception, std::move(msg).str()); + } +} + double OpenSim::FunctionBasedPath::getLength(const SimTK::State& s) const { if (isCacheVariableValid(s, _lengthCV)) { @@ -806,6 +894,12 @@ void OpenSim::FunctionBasedPath::printContent(std::ostream& out) const << _impl->interp.getDimension() << '\n' << '\n'; + // COORDINATES + for (const Coordinate* c : _impl->interp.getCoords()){ + out << c->getAbsolutePathString() << "\n"; + } + out << "\n"; + // DISCRETIZATIONS for (const Discretization& d : _impl->interp.getdS()) { out << d.begin << '\t' @@ -822,3 +916,63 @@ void OpenSim::FunctionBasedPath::printContent(std::ostream& out) const out.flush(); } + + + +//// Constructor for non FBP/PBP related interpolation +//Interpolate( +// std::vector> discretizationIn, +// std::vector,double>> evalsPair) : + +// dimensions(static_cast(discretizationIn.size())), +// discretizations(discretizationIn), +// n(dimensions,0), +// u(dimensions,0), +// loc(dimensions,0) +//{ +// assert(discretizations.size() == evalsPair[0].first.size()); + +// // allow it to work with the new struct method +// for (int i = 0; i < dimensions; i++) { +// Discretization dc; +// dc.begin = discretizations[i][0]; +// dc.end = discretizations[i][discretizations[i].size()-1]; +// dc.nPoints = static_cast(discretizations[i].size()); +// dc.gridsize = (dc.end - dc.begin)/(dc.nPoints-1); + +// dS.push_back(dc); +// } + +// for (int i = 0; i < dimensions; i++) { +// beta.push_back({0,0,0,0}); +// discSizes.push_back(discretizations[i].size()); +// } + +// // I'm aware this is still stupid but it is what it is for now +// int numOfLoops = 1; +// for (int i = 0; i < dimensions; i++) { +// numOfLoops *= discretizations[i].size(); +// } + +// std::vector cnt(dimensions, 0); +// for (int i = 0; i < numOfLoops; i++) { +// for (unsigned k = 0; k < evalsPair.size(); k++) { +// if (evalsPair[k].first == cnt) { +// evals.push_back(evalsPair[k].second); +// } +// } + +// for (int x = dimensions - 1; x >= 0; x--) { +// if (cnt[x] != dS[x].nPoints-1) { +// cnt[x] += 1; +// break; +// } + +// if (cnt[x] == dS[x].nPoints-1) { +// for (int y = x; y < dimensions; y++) { +// cnt[y] = 0; +// } +// } +// } +// } +//} diff --git a/OpenSim/Simulation/Model/FunctionBasedPath.h b/OpenSim/Simulation/Model/FunctionBasedPath.h index 90dd9ea8d7..d4dab4b96f 100644 --- a/OpenSim/Simulation/Model/FunctionBasedPath.h +++ b/OpenSim/Simulation/Model/FunctionBasedPath.h @@ -93,7 +93,7 @@ class OSIMSIMULATION_API FunctionBasedPath : public GeometryPath { * * The file must contain the content written by `printContent` */ - static FunctionBasedPath fromDataFile(const std::string& path); + FunctionBasedPath fromDataFile(const std::string& path); FunctionBasedPath(); FunctionBasedPath(const FunctionBasedPath&); @@ -103,6 +103,7 @@ class OSIMSIMULATION_API FunctionBasedPath : public GeometryPath { ~FunctionBasedPath() noexcept override; void extendFinalizeFromProperties() override; + void extendFinalizeConnections(Component &root) override; double getLength(const SimTK::State& s) const override; void setLength(const SimTK::State& s, double length) const override; diff --git a/OpenSim/Simulation/Model/ModelComponent.h b/OpenSim/Simulation/Model/ModelComponent.h index f892c5eb38..7741dc9f8b 100644 --- a/OpenSim/Simulation/Model/ModelComponent.h +++ b/OpenSim/Simulation/Model/ModelComponent.h @@ -264,7 +264,7 @@ template friend class ModelComponentSet; * ModelComponent interface. ModelComponent::extendFinalizeConnections() * ensures that extendConnectToModel() on ModelComponent subcomponents are * invoked. **/ - void extendFinalizeConnections(Component& root) override final; + void extendFinalizeConnections(Component& root) override; const SimTK::DefaultSystemSubsystem& getDefaultSubsystem() const; const SimTK::DefaultSystemSubsystem& updDefaultSubsystem(); diff --git a/OpenSim/Tools/FunctionBasedPathConversionTool.cpp b/OpenSim/Tools/FunctionBasedPathConversionTool.cpp index 676fafcf3f..5657012d4c 100644 --- a/OpenSim/Tools/FunctionBasedPathConversionTool.cpp +++ b/OpenSim/Tools/FunctionBasedPathConversionTool.cpp @@ -9,7 +9,6 @@ #include using namespace OpenSim; -using namespace std; FunctionBasedPathConversionTool::~FunctionBasedPathConversionTool() { @@ -24,14 +23,14 @@ FunctionBasedPathConversionTool::FunctionBasedPathConversionTool() } FunctionBasedPathConversionTool::FunctionBasedPathConversionTool( - const string modelPath, const string newModelName) + const std::string modelPath, const std::string newModelName) : _modelPath(modelPath), _newModelName(newModelName) { } bool FunctionBasedPathConversionTool::run(){ -// try{ + try{ Model sourceModel{_modelPath}; Model outputModel{sourceModel}; @@ -39,7 +38,10 @@ bool FunctionBasedPathConversionTool::run(){ sourceModel.finalizeFromProperties(); sourceModel.initSystem(); - bool verbose = false; + outputModel.finalizeConnections(); + outputModel.finalizeFromProperties(); + + bool verbose = true; if (verbose) { sourceModel.printSubcomponentInfo(); } @@ -62,7 +64,7 @@ bool FunctionBasedPathConversionTool::run(){ // // (this is because `PathActuator`s are the "owners" of `GeometryPath`s in // most models) - vector mappings; + std::vector mappings; for (auto& pa : sourceModel.updComponentList()) { PointBasedPath* pbp = dynamic_cast(&pa.updGeometryPath()); @@ -76,17 +78,17 @@ bool FunctionBasedPathConversionTool::run(){ Component* c = const_cast(outputModel.findComponent(pa.getAbsolutePath())); if (!c) { - stringstream err; + std::stringstream err; err << "could not find '" << pa.getAbsolutePathString() << "' in the output model: this is a programming error"; - throw runtime_error{move(err).str()}; + throw std::runtime_error{move(err).str()}; } PathActuator* paDest = dynamic_cast(c); if (!paDest) { - stringstream err; + std::stringstream err; err << "the component '" << pa.getAbsolutePathString() << "' has a class of '" << pa.getConcreteClassName() << "' in the source model but a class of '" << c->getConcreteClassName() << "' in the destination model: this shouldn't happen"; - throw runtime_error{move(err).str()}; + throw std::runtime_error{move(err).str()}; } mappings.emplace_back(*pbp, *paDest); @@ -96,32 +98,32 @@ bool FunctionBasedPathConversionTool::run(){ // `FunctionBasedPath` (FBP) by fitting a function against the PBP and // replace the PBP owned by the destination's `PathActuator` with the FBP int i = 1; - string newModelNameLocal = _newModelName; + std::string newModelNameLocal = _newModelName; for (const auto& mapping : mappings) { // create an FBP in-memory FunctionBasedPath fbp = FunctionBasedPath::fromPointBasedPath(sourceModel, mapping.sourcePBP); // write the FBP's data to the filesystem - string dataFilename = [newModelNameLocal, &i]() { - stringstream ss; + std::string dataFilename = [newModelNameLocal, &i]() { + std::stringstream ss; ss << newModelNameLocal << "_DATA_" << i << ".txt"; return move(ss).str(); }(); - ofstream dataFile{dataFilename}; + std::ofstream dataFile{dataFilename}; if (!dataFile) { - stringstream msg; + std::stringstream msg; msg << "error: could not open a `FunctionBasedPath`'s data file at: " << dataFilename; - throw runtime_error{move(msg).str()}; + throw std::runtime_error{move(msg).str()}; } fbp.printContent(dataFile); if (!dataFile) { - stringstream msg; + std::stringstream msg; msg << "error: error occurred after writing `FunctionBasedPath`s data to" << dataFilename; - throw runtime_error{move(msg).str()}; + throw std::runtime_error{move(msg).str()}; } // update the FBP to refer to the data file @@ -138,20 +140,21 @@ bool FunctionBasedPathConversionTool::run(){ // model-level fixups and save the output model. outputModel.finalizeFromProperties(); + outputModel.finalizeConnections(); outputModel.initSystem(); - outputModel.print(string{_newModelName} + ".osim"); + outputModel.print(std::string{_newModelName} + ".osim"); if (verbose) { - cerr << "--- interpolation complete ---\n\n" + std::cerr << "--- interpolation complete ---\n\n" << "model before:\n"; sourceModel.printSubcomponentInfo(); - cerr << "\nmodel after:\n"; + std::cerr << "\nmodel after:\n"; outputModel.printSubcomponentInfo(); } -// } catch(const std::exception& x) { -// log_error("Exception in FunctionBasedPathConversionTool: run", x.what()); -// return false; -// } + } catch(const std::exception& x) { + log_error("Exception in FunctionBasedPathConversionTool: run", x.what()); + return false; + } return true; } From 46e095d974f9851994f0424b242307877c8c0a5b Mon Sep 17 00:00:00 2001 From: joris997 Date: Mon, 10 May 2021 22:17:43 +0200 Subject: [PATCH 17/36] fixed inerpolation, removed user cmake file --- CMakeLists.txt.user | 7045 ----------------- .../Simulation/Model/FunctionBasedPath.cpp | 204 +- .../Tools/FunctionBasedPathConversionTool.cpp | 2 +- 3 files changed, 79 insertions(+), 7172 deletions(-) delete mode 100644 CMakeLists.txt.user diff --git a/CMakeLists.txt.user b/CMakeLists.txt.user deleted file mode 100644 index 22ab1dd922..0000000000 --- a/CMakeLists.txt.user +++ /dev/null @@ -1,7045 +0,0 @@ - - - - - - EnvironmentId - {31e18788-fd95-4ab4-9268-c7219c462e0d} - - - ProjectExplorer.Project.ActiveTarget - 0 - - - ProjectExplorer.Project.EditorSettings - - true - false - true - - Cpp - - CppGlobal - - - - QmlJS - - QmlJSGlobal - - - 2 - UTF-8 - false - 4 - false - 80 - true - true - 1 - true - false - 0 - true - true - 0 - 8 - true - 1 - true - true - true - false - - - - ProjectExplorer.Project.PluginSettings - - - - ProjectExplorer.Project.Target.0 - - Imported Kit - Imported Kit - {100e64e2-3594-40f4-a592-7d97f2f817ca} - 0 - 0 - 122 - - - CMAKE_BUILD_TYPE:STRING=RelWithDebInfo - CMAKE_CXX_COMPILER:FILEPATH=/usr/bin/c++ - CMAKE_C_COMPILER:FILEPATH=/usr/bin/cc - CMAKE_PREFIX_PATH:PATH= - OPENSIM_WITH_CASADI:BOOL=OFF - QT_QMAKE_EXECUTABLE:STRING=%{Qt:qmakeExecutable} - - /home/none/opensim/interpolation/RelWithDebInfo-build - - - - - install - - true - CMake Build - - CMakeProjectManager.MakeStep - - - - - all - - true - CMake Build - - CMakeProjectManager.MakeStep - - 2 - Build - - ProjectExplorer.BuildSteps.Build - - - - - - clean - - true - CMake Build - - CMakeProjectManager.MakeStep - - 1 - Clean - - ProjectExplorer.BuildSteps.Clean - - 2 - false - - Release with Debug Information - Release with Debug Information - CMakeProjectManager.CMakeBuildConfiguration - - 1 - - - 0 - Deploy - - ProjectExplorer.BuildSteps.Deploy - - 1 - Deploy locally - - ProjectExplorer.DefaultDeployConfiguration - - 1 - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testLepton - - - /home/none/opensim/interpolation/RelWithDebInfo-build - 2 - - testLepton - - CMakeProjectManager.CMakeRunConfiguration.testLepton - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testTRCFileAdapter - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testTRCFileAdapter - - CMakeProjectManager.CMakeRunConfiguration.testTRCFileAdapter - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testPath - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testPath - - CMakeProjectManager.CMakeRunConfiguration.testPath - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testInducedAccelerations - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testInducedAccelerations - - CMakeProjectManager.CMakeRunConfiguration.testInducedAccelerations - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testAnalyzeTool - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testAnalyzeTool - - CMakeProjectManager.CMakeRunConfiguration.testAnalyzeTool - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testForward - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testForward - - CMakeProjectManager.CMakeRunConfiguration.testForward - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testScale - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testScale - - CMakeProjectManager.CMakeRunConfiguration.testScale - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testLiveIK - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testLiveIK - - CMakeProjectManager.CMakeRunConfiguration.testLiveIK - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testIK - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testIK - - CMakeProjectManager.CMakeRunConfiguration.testIK - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testID - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testID - - CMakeProjectManager.CMakeRunConfiguration.testID - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCSingleMuscle - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCSingleMuscle - - CMakeProjectManager.CMakeRunConfiguration.testCMCSingleMuscle - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCEMGDrivenArm_Thelen - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCEMGDrivenArm_Thelen - - CMakeProjectManager.CMakeRunConfiguration.testCMCEMGDrivenArm_Thelen - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCTwoMusclesOnBlock - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCTwoMusclesOnBlock - - CMakeProjectManager.CMakeRunConfiguration.testCMCTwoMusclesOnBlock - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testRootSolver - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testRootSolver - - CMakeProjectManager.CMakeRunConfiguration.testRootSolver - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCEMGDrivenArm_Millard - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCEMGDrivenArm_Millard - - CMakeProjectManager.CMakeRunConfiguration.testCMCEMGDrivenArm_Millard - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCArm26_Millard - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCArm26_Millard - - CMakeProjectManager.CMakeRunConfiguration.testCMCArm26_Millard - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCGait10dof18musc - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCGait10dof18musc - - CMakeProjectManager.CMakeRunConfiguration.testCMCGait10dof18musc - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCSingleRigidTendonMuscle - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCSingleRigidTendonMuscle - - CMakeProjectManager.CMakeRunConfiguration.testCMCSingleRigidTendonMuscle - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCWithControlConstraintsGait2354 - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCWithControlConstraintsGait2354 - - CMakeProjectManager.CMakeRunConfiguration.testCMCWithControlConstraintsGait2354 - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCWithControlConstraintsRunningModel - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCWithControlConstraintsRunningModel - - CMakeProjectManager.CMakeRunConfiguration.testCMCWithControlConstraintsRunningModel - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCArm26_Thelen - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCArm26_Thelen - - CMakeProjectManager.CMakeRunConfiguration.testCMCArm26_Thelen - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testRRA - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testRRA - - CMakeProjectManager.CMakeRunConfiguration.testRRA - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - opensense - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - opensense - - CMakeProjectManager.CMakeRunConfiguration.opensense - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testOpenSense - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testOpenSense - - CMakeProjectManager.CMakeRunConfiguration.testOpenSense - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testFunctions - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testFunctions - - CMakeProjectManager.CMakeRunConfiguration.testFunctions - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - opensim-cmd - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - opensim-cmd - - CMakeProjectManager.CMakeRunConfiguration.opensim-cmd - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCommandLineInterface - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCommandLineInterface - - CMakeProjectManager.CMakeRunConfiguration.testCommandLineInterface - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testFunctionBasedPathConversion - - - /home/none/opensim/interpolation/RelWithDebInfo-build - 2 - - testFunctionBasedPathConversion - - CMakeProjectManager.CMakeRunConfiguration.testFunctionBasedPathConversion - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testGCVSpline - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testGCVSpline - - CMakeProjectManager.CMakeRunConfiguration.testGCVSpline - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSerialization - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSerialization - - CMakeProjectManager.CMakeRunConfiguration.testSerialization - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testStorage - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testStorage - - CMakeProjectManager.CMakeRunConfiguration.testStorage - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testXsensDataReader - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testXsensDataReader - - CMakeProjectManager.CMakeRunConfiguration.testXsensDataReader - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testWrappingMath - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testWrappingMath - - CMakeProjectManager.CMakeRunConfiguration.testWrappingMath - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testTableProcessor - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testTableProcessor - - CMakeProjectManager.CMakeRunConfiguration.testTableProcessor - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testStatesTrajectory - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testStatesTrajectory - - CMakeProjectManager.CMakeRunConfiguration.testStatesTrajectory - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testFunctionAdapter - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testFunctionAdapter - - CMakeProjectManager.CMakeRunConfiguration.testFunctionAdapter - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testInverseKinematicsSolver - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testInverseKinematicsSolver - - CMakeProjectManager.CMakeRunConfiguration.testInverseKinematicsSolver - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testInitState - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testInitState - - CMakeProjectManager.CMakeRunConfiguration.testInitState - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testFrames - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testFrames - - CMakeProjectManager.CMakeRunConfiguration.testFrames - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testModelInterface - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testModelInterface - - CMakeProjectManager.CMakeRunConfiguration.testModelInterface - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testForces - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testForces - - CMakeProjectManager.CMakeRunConfiguration.testForces - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testAssemblySolver - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testAssemblySolver - - CMakeProjectManager.CMakeRunConfiguration.testAssemblySolver - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testManager - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testManager - - CMakeProjectManager.CMakeRunConfiguration.testManager - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMomentArms - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMomentArms - - CMakeProjectManager.CMakeRunConfiguration.testMomentArms - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testReportersWithModel - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testReportersWithModel - - CMakeProjectManager.CMakeRunConfiguration.testReportersWithModel - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testPoints - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testPoints - - CMakeProjectManager.CMakeRunConfiguration.testPoints - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testDataTable - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testDataTable - - CMakeProjectManager.CMakeRunConfiguration.testDataTable - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testContactGeometry - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testContactGeometry - - CMakeProjectManager.CMakeRunConfiguration.testContactGeometry - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testNestedModelComponents - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testNestedModelComponents - - CMakeProjectManager.CMakeRunConfiguration.testNestedModelComponents - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testPrescribedForce - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testPrescribedForce - - CMakeProjectManager.CMakeRunConfiguration.testPrescribedForce - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMuscleMetabolicsProbes - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMuscleMetabolicsProbes - - CMakeProjectManager.CMakeRunConfiguration.testMuscleMetabolicsProbes - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testProbes - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testProbes - - CMakeProjectManager.CMakeRunConfiguration.testProbes - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSimulationUtilities - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSimulationUtilities - - CMakeProjectManager.CMakeRunConfiguration.testSimulationUtilities - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testJoints - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testJoints - - CMakeProjectManager.CMakeRunConfiguration.testJoints - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testConstraints - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testConstraints - - CMakeProjectManager.CMakeRunConfiguration.testConstraints - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSerializableMuscleCurves - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSerializableMuscleCurves - - CMakeProjectManager.CMakeRunConfiguration.testSerializableMuscleCurves - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testActuators - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testActuators - - CMakeProjectManager.CMakeRunConfiguration.testActuators - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testAPDMDataReader - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testAPDMDataReader - - CMakeProjectManager.CMakeRunConfiguration.testAPDMDataReader - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMuscleFirstOrderActivationDynamicModel - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMuscleFirstOrderActivationDynamicModel - - CMakeProjectManager.CMakeRunConfiguration.testMuscleFirstOrderActivationDynamicModel - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testModelProcessor - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testModelProcessor - - CMakeProjectManager.CMakeRunConfiguration.testModelProcessor - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMuscleFixedWidthPennationModel - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMuscleFixedWidthPennationModel - - CMakeProjectManager.CMakeRunConfiguration.testMuscleFixedWidthPennationModel - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testDeGrooteFregly2016Muscle - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testDeGrooteFregly2016Muscle - - CMakeProjectManager.CMakeRunConfiguration.testDeGrooteFregly2016Muscle - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMuscles - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMuscles - - CMakeProjectManager.CMakeRunConfiguration.testMuscles - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testOutputReporter - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testOutputReporter - - CMakeProjectManager.CMakeRunConfiguration.testOutputReporter - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testExternalLoads - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testExternalLoads - - CMakeProjectManager.CMakeRunConfiguration.testExternalLoads - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testControllers - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testControllers - - CMakeProjectManager.CMakeRunConfiguration.testControllers - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testModelCopy - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testModelCopy - - CMakeProjectManager.CMakeRunConfiguration.testModelCopy - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSerializeOpenSimObjects - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSerializeOpenSimObjects - - CMakeProjectManager.CMakeRunConfiguration.testSerializeOpenSimObjects - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testComponentInterface - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testComponentInterface - - CMakeProjectManager.CMakeRunConfiguration.testComponentInterface - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testVisualization - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testVisualization - - CMakeProjectManager.CMakeRunConfiguration.testVisualization - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoContact - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoContact - - CMakeProjectManager.CMakeRunConfiguration.testMocoContact - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoInverse - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoInverse - - CMakeProjectManager.CMakeRunConfiguration.testMocoInverse - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoMetabolics - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoMetabolics - - CMakeProjectManager.CMakeRunConfiguration.testMocoMetabolics - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoInterface - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoInterface - - CMakeProjectManager.CMakeRunConfiguration.testMocoInterface - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoConstraints - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoConstraints - - CMakeProjectManager.CMakeRunConfiguration.testMocoConstraints - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoImplicit - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoImplicit - - CMakeProjectManager.CMakeRunConfiguration.testMocoImplicit - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoAnalytic - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoAnalytic - - CMakeProjectManager.CMakeRunConfiguration.testMocoAnalytic - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoGoals - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoGoals - - CMakeProjectManager.CMakeRunConfiguration.testMocoGoals - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoActuators - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoActuators - - CMakeProjectManager.CMakeRunConfiguration.testMocoActuators - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testNCSpline - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testNCSpline - - CMakeProjectManager.CMakeRunConfiguration.testNCSpline - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoTrack - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoTrack - - CMakeProjectManager.CMakeRunConfiguration.testMocoTrack - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoParameters - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoParameters - - CMakeProjectManager.CMakeRunConfiguration.testMocoParameters - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleHopperDeviceAnswers - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleHopperDeviceAnswers - - CMakeProjectManager.CMakeRunConfiguration.exampleHopperDeviceAnswers - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleHopperDevice - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleHopperDevice - - CMakeProjectManager.CMakeRunConfiguration.exampleHopperDevice - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - example2DataTable - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - example2DataTable - - CMakeProjectManager.CMakeRunConfiguration.example2DataTable - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - example1DataTable - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - example1DataTable - - CMakeProjectManager.CMakeRunConfiguration.example1DataTable - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleTRCFileAdapter - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleTRCFileAdapter - - CMakeProjectManager.CMakeRunConfiguration.exampleTRCFileAdapter - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleSlidingMass - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleSlidingMass - - CMakeProjectManager.CMakeRunConfiguration.exampleSlidingMass - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleSlidingMassAdvanced - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleSlidingMassAdvanced - - CMakeProjectManager.CMakeRunConfiguration.exampleSlidingMassAdvanced - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleTracking - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleTracking - - CMakeProjectManager.CMakeRunConfiguration.exampleTracking - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSmoothSegmentedFunctionFactory - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSmoothSegmentedFunctionFactory - - CMakeProjectManager.CMakeRunConfiguration.testSmoothSegmentedFunctionFactory - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleMarkerTracking - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleMarkerTracking - - CMakeProjectManager.CMakeRunConfiguration.exampleMarkerTracking - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleHangingMuscle - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleHangingMuscle - - CMakeProjectManager.CMakeRunConfiguration.exampleHangingMuscle - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - example2DWalkingMetabolics - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - example2DWalkingMetabolics - - CMakeProjectManager.CMakeRunConfiguration.example2DWalkingMetabolics - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - example2DWalking - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - example2DWalking - - CMakeProjectManager.CMakeRunConfiguration.example2DWalking - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleMocoInverse - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleMocoInverse - - CMakeProjectManager.CMakeRunConfiguration.exampleMocoInverse - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleMocoTrack - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleMocoTrack - - CMakeProjectManager.CMakeRunConfiguration.exampleMocoTrack - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleMocoCustomEffortGoal - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleMocoCustomEffortGoal - - CMakeProjectManager.CMakeRunConfiguration.exampleMocoCustomEffortGoal - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleCustomImplicitAuxiliaryDynamics - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleCustomImplicitAuxiliaryDynamics - - CMakeProjectManager.CMakeRunConfiguration.exampleCustomImplicitAuxiliaryDynamics - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testComponents - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testComponents - - CMakeProjectManager.CMakeRunConfiguration.testComponents - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testAddComponents - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testAddComponents - - CMakeProjectManager.CMakeRunConfiguration.testAddComponents - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSTOFileAdapter - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSTOFileAdapter - - CMakeProjectManager.CMakeRunConfiguration.testSTOFileAdapter - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testControllerExample - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testControllerExample - - CMakeProjectManager.CMakeRunConfiguration.testControllerExample - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleController - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleController - - CMakeProjectManager.CMakeRunConfiguration.exampleController - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testExampleMain - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testExampleMain - - CMakeProjectManager.CMakeRunConfiguration.testExampleMain - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleMain - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleMain - - CMakeProjectManager.CMakeRunConfiguration.exampleMain - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testOptimizationExample - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testOptimizationExample - - CMakeProjectManager.CMakeRunConfiguration.testOptimizationExample - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleOptimization - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleOptimization - - CMakeProjectManager.CMakeRunConfiguration.exampleOptimization - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCustomActuatorExample - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCustomActuatorExample - - CMakeProjectManager.CMakeRunConfiguration.testCustomActuatorExample - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleCustomActuator - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleCustomActuator - - CMakeProjectManager.CMakeRunConfiguration.exampleCustomActuator - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMuscleExample - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMuscleExample - - CMakeProjectManager.CMakeRunConfiguration.testMuscleExample - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleMuscle - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleMuscle - - CMakeProjectManager.CMakeRunConfiguration.exampleMuscle - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMarkerData - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMarkerData - - CMakeProjectManager.CMakeRunConfiguration.testMarkerData - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSimpleOptimizationExample - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSimpleOptimizationExample - - CMakeProjectManager.CMakeRunConfiguration.testSimpleOptimizationExample - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleOptimizationSimple - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleOptimizationSimple - - CMakeProjectManager.CMakeRunConfiguration.exampleOptimizationSimple - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - checkEnvironment - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - checkEnvironment - - CMakeProjectManager.CMakeRunConfiguration.checkEnvironment - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testIterators - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testIterators - - CMakeProjectManager.CMakeRunConfiguration.testIterators - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testREADME - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testREADME - - CMakeProjectManager.CMakeRunConfiguration.testREADME - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testWrapping - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testWrapping - - CMakeProjectManager.CMakeRunConfiguration.testWrapping - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testExampleLuxoMuscle - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testExampleLuxoMuscle - - CMakeProjectManager.CMakeRunConfiguration.testExampleLuxoMuscle - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testBuildDynamicWalker - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testBuildDynamicWalker - - CMakeProjectManager.CMakeRunConfiguration.testBuildDynamicWalker - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testJointReactions - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testJointReactions - - CMakeProjectManager.CMakeRunConfiguration.testJointReactions - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testStaticOptimization - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testStaticOptimization - - CMakeProjectManager.CMakeRunConfiguration.testStaticOptimization - 3768 - false - true - false - false - true - - 123 - - - - ProjectExplorer.Project.TargetCount - 1 - - - ProjectExplorer.Project.Updater.FileVersion - 18 - - - Version - 18 - - diff --git a/OpenSim/Simulation/Model/FunctionBasedPath.cpp b/OpenSim/Simulation/Model/FunctionBasedPath.cpp index 03cabc616c..a1df22d0bc 100644 --- a/OpenSim/Simulation/Model/FunctionBasedPath.cpp +++ b/OpenSim/Simulation/Model/FunctionBasedPath.cpp @@ -13,6 +13,34 @@ #include #include +template +void printVector(std::vector vec){ + std::cout << "vec["< +struct Defer final { + Callback cb; + Defer(Callback _cb) : cb{std::move(_cb)} { + } + Defer(Defer const&) = delete; + Defer(Defer&&) noexcept = default; + Defer& operator=(Defer const&) = delete; + Defer& operator=(Defer&&) = delete; + ~Defer() noexcept { + cb(); + } +}; +template +Defer defer_action(Callback cb) { + return Defer{std::move(cb)}; +} + // Returns `true` if changing the supplied `Coordinate` changes the moment arm // of the supplied `PointBasedPath` (PBP) static bool coordinateAffectsPBP( @@ -114,14 +142,18 @@ class Interpolate final { // vector of an index in the evalsPair std::vector loc; - // OPENSIM INTEGRATION + // discretization vector containing, for each dimension, a struct that + // contains [begin, end, number of points, step-size] std::vector dS; + + // vector of coordinate pointers which are used to relate an incoming state + // to a vector of relevant coordinates for the interpolation std::vector coords; public: Interpolate() = default; - // Precomputed data constructor + // Precomputed data constructor (length evaluations are already known) Interpolate( std::vector coordsIn, std::vector dSIn, @@ -146,6 +178,10 @@ class Interpolate final { } // Precomputed data constructor without explicit coords + // used as a creation of an interpolation object after reading the data in + // extendFinalizeProperties. The coordinates are then related when the + // model is connected (as we need to sample the coordinates that affect a + // muscle again) Interpolate( std::vector dSIn, std::vector evalsIn) : @@ -169,8 +205,9 @@ class Interpolate final { } // General interface constructor - // allows one to create an interface constructor as shown below - // with a vector of coordinates + // allows one to create an interface constructor as shown below with a + // vector of coordinates. This is the 'from scratch' constructor that you + // could use manually Interpolate(OpenSim::PointBasedPath const& pbp, OpenSim::Coordinate const** cBegin, OpenSim::Coordinate const** cEnd, @@ -187,16 +224,23 @@ class Interpolate final { assert(n > 0); assert(dimensions == (int)n); - // put all coordinate pointers in a vector to later unpack an incoming - // state to a vector of coordinate values for (int i = 0; i < dimensions; i++) { + // put all coordinate pointers in a vector to later unpack an + // incoming state to a vector of coordinate values coords.push_back(cBegin[i]); + // fill an n-dimensional vector of 4 sized vectors which represent + // the polynomial values + beta.push_back({0,0,0,0}); } // unlock coordinates for (int i = 0; i < dimensions; i++) { const OpenSim::Coordinate& c = *cBegin[i]; + bool c_was_locked = c.getLocked(st); c.setLocked(st, false); + auto unlock_c = defer_action([&] { c.setLocked(st, c_was_locked); }); + double c_initial_value = c.getValue(st); + auto reset_c_val = defer_action([&] { c.setValue(st, c_initial_value); }); } // make discretization objects for interpolation class instance @@ -249,8 +293,6 @@ class Interpolate final { // just make it for using the old getInterp method std::vector dc_; for (int i = 0; i < dimensions; i++) { - beta.push_back({0,0,0,0}); - dc_.clear(); linspace(dS[i].begin, dS[i].end, dS[i].nPoints, dc_); discretizations.push_back(dc_); @@ -304,7 +346,7 @@ class Interpolate final { for (int i = 0; i < dimensions-1; i++) { factor = 1; for (int ii = i+1; ii <= dimensions-1; ii++) { - factor *= discSizes[ii]; + factor *= dS[ii].nPoints; } idx += loc[i]*factor; } @@ -322,30 +364,36 @@ class Interpolate final { // OUT: eval, the interpolated value assert(x.size() == dimensions); +// // get the index of the closest range value to the discretization point +// for (int i = 0; i < dimensions; i++){ +// n[i] = floor((x[i]-dS[i].begin)/dS[i].gridsize); +// } + +// // compute remaining fraction +// for (int i = 0; i < dimensions; i++){ +// u[i] = (x[i]-(dS[i].begin + n[i]*dS[i].gridsize))/(dS[i].gridsize); +// } // get the index of the closest range value to the discretization point - for (int i = 0; i < dimensions; i++) { + for (int i=0; i= x[i];}); - - n[i] = static_cast(std::distance(discretizations[i].begin(), it) - 1); + n[i] = std::distance(discretizations[i].begin(), it)-1; } // compute remaining fraction - for (int i = 0; i < dimensions; i++) { + for (int i=0; i= 0; x--) { - if (discrLoopCnt[x] != 2) { + for (int x=dimensions-1; x>=0; x--){ + if (discrLoopCnt[x] != 2){ discrLoopCnt[x] += 1; break; } - if (discrLoopCnt[x] == 2) { - for (int y = x; y < dimensions; y++) { + if (discrLoopCnt[x] == 2){ + for (int y=x; y& x, int coordinate, - double h = 0.0001) { + double h = 0.001) { assert(x.size() == dimensions); assert(coordinate <= dimensions-1); @@ -480,7 +504,6 @@ class Interpolate final { lengtheningSpeed += firstDeriv * coordinateSpeedVal; } - return lengtheningSpeed; } }; @@ -758,12 +781,8 @@ static std::vector readInterpCoords(const std::strin std::vector coords; for (std::string coord : coordinates){ const OpenSim::Component& comp = root.getComponent(coord); - std::cerr << "coord: " << coord << std::endl; - std::cerr << "comp.getabsolutepathstring: " << comp.getAbsolutePathString() << std::endl; - std::cerr << "comp.getconreteclassname: " << comp.getConcreteClassName() << std::endl; if (comp.getAbsolutePathString() == coord){ const OpenSim::Coordinate* c = dynamic_cast(&comp); - std::cerr << "c.name: " << c->getName() << std::endl; coords.push_back(c); } } @@ -778,7 +797,6 @@ OpenSim::FunctionBasedPath OpenSim::FunctionBasedPath::fromDataFile(const std::s // the data file effectively only contains data for Interpolate, data file // spec is in there fbp._impl->interp = readInterp(path); -// this->finalizeConnections(); return fbp; } @@ -802,8 +820,6 @@ void OpenSim::FunctionBasedPath::extendFinalizeFromProperties() if (hasBackingFile) { // load the file, always - // - // TODO: this should ideally be cached _impl->interp = readInterp(get_data_path()); } else if (hasInMemoryFittingData) { // do nothing: just use the already-loaded in-memory fitting data @@ -818,8 +834,6 @@ void OpenSim::FunctionBasedPath::extendFinalizeFromProperties() void OpenSim::FunctionBasedPath::extendFinalizeConnections(OpenSim::Component &root) { -// Super::extendFinalizeConnections(root); - Model* model = dynamic_cast(&root); // Allow (model) component to include its own subcomponents // before calling the base method which automatically invokes @@ -849,7 +863,6 @@ double OpenSim::FunctionBasedPath::getLength(const SimTK::State& s) const return getCacheVariableValue(s, _lengthCV); } - // else: compute it double rv = _impl->interp.getLength(s); setCacheVariableValue(s, _lengthCV, rv); return rv; @@ -866,7 +879,6 @@ double OpenSim::FunctionBasedPath::getLengtheningSpeed(const SimTK::State& s) co return getCacheVariableValue(s, _speedCV); } - // else: compute it double rv = _impl->interp.getLengtheningSpeed(s); setCacheVariableValue(s, _speedCV, rv); return rv; @@ -916,63 +928,3 @@ void OpenSim::FunctionBasedPath::printContent(std::ostream& out) const out.flush(); } - - - -//// Constructor for non FBP/PBP related interpolation -//Interpolate( -// std::vector> discretizationIn, -// std::vector,double>> evalsPair) : - -// dimensions(static_cast(discretizationIn.size())), -// discretizations(discretizationIn), -// n(dimensions,0), -// u(dimensions,0), -// loc(dimensions,0) -//{ -// assert(discretizations.size() == evalsPair[0].first.size()); - -// // allow it to work with the new struct method -// for (int i = 0; i < dimensions; i++) { -// Discretization dc; -// dc.begin = discretizations[i][0]; -// dc.end = discretizations[i][discretizations[i].size()-1]; -// dc.nPoints = static_cast(discretizations[i].size()); -// dc.gridsize = (dc.end - dc.begin)/(dc.nPoints-1); - -// dS.push_back(dc); -// } - -// for (int i = 0; i < dimensions; i++) { -// beta.push_back({0,0,0,0}); -// discSizes.push_back(discretizations[i].size()); -// } - -// // I'm aware this is still stupid but it is what it is for now -// int numOfLoops = 1; -// for (int i = 0; i < dimensions; i++) { -// numOfLoops *= discretizations[i].size(); -// } - -// std::vector cnt(dimensions, 0); -// for (int i = 0; i < numOfLoops; i++) { -// for (unsigned k = 0; k < evalsPair.size(); k++) { -// if (evalsPair[k].first == cnt) { -// evals.push_back(evalsPair[k].second); -// } -// } - -// for (int x = dimensions - 1; x >= 0; x--) { -// if (cnt[x] != dS[x].nPoints-1) { -// cnt[x] += 1; -// break; -// } - -// if (cnt[x] == dS[x].nPoints-1) { -// for (int y = x; y < dimensions; y++) { -// cnt[y] = 0; -// } -// } -// } -// } -//} diff --git a/OpenSim/Tools/FunctionBasedPathConversionTool.cpp b/OpenSim/Tools/FunctionBasedPathConversionTool.cpp index 5657012d4c..ce70e3c1e4 100644 --- a/OpenSim/Tools/FunctionBasedPathConversionTool.cpp +++ b/OpenSim/Tools/FunctionBasedPathConversionTool.cpp @@ -41,7 +41,7 @@ bool FunctionBasedPathConversionTool::run(){ outputModel.finalizeConnections(); outputModel.finalizeFromProperties(); - bool verbose = true; + bool verbose = false; if (verbose) { sourceModel.printSubcomponentInfo(); } From bb7528e73369f25ee5db154a2502ee55e6c4b494 Mon Sep 17 00:00:00 2001 From: joris997 Date: Thu, 20 May 2021 15:50:58 +0200 Subject: [PATCH 18/36] partially addInEquivalentForces and getPointDirectionForces --- CMakeLists.txt.user | 7030 +++++++++++++++++ .../Simulation/Model/FunctionBasedPath.cpp | 200 + OpenSim/Simulation/Model/FunctionBasedPath.h | 67 + OpenSim/Simulation/Model/GeometryPath.cpp | 918 --- OpenSim/Simulation/Model/GeometryPath.h | 118 +- OpenSim/Simulation/Model/PointBasedPath.cpp | 961 ++- OpenSim/Simulation/Model/PointBasedPath.h | 60 + 7 files changed, 8374 insertions(+), 980 deletions(-) create mode 100644 CMakeLists.txt.user diff --git a/CMakeLists.txt.user b/CMakeLists.txt.user new file mode 100644 index 0000000000..36bc3b3993 --- /dev/null +++ b/CMakeLists.txt.user @@ -0,0 +1,7030 @@ + + + + + + EnvironmentId + {31e18788-fd95-4ab4-9268-c7219c462e0d} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + true + false + 0 + true + true + 0 + 8 + true + 1 + true + true + true + false + + + + ProjectExplorer.Project.PluginSettings + + + + ProjectExplorer.Project.Target.0 + + Imported Kit + Imported Kit + {9285dd56-50e7-4060-bd5b-1fccd3c864ca} + 0 + 0 + 0 + + + CMAKE_BUILD_TYPE:STRING=RelWithDebInfo + + /home/none/opensim/interpolation/RelWithDebInfo-build + + + + + install + + true + CMake Build + + CMakeProjectManager.MakeStep + + 1 + Build + + ProjectExplorer.BuildSteps.Build + + + + + + clean + + true + CMake Build + + CMakeProjectManager.MakeStep + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release with Debug Information + Release with Debug Information + CMakeProjectManager.CMakeBuildConfiguration + + 1 + + + 0 + Deploy + + ProjectExplorer.BuildSteps.Deploy + + 1 + Deploy locally + + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testLepton + + + /home/none/opensim/interpolation/RelWithDebInfo-build + 2 + + testLepton + + CMakeProjectManager.CMakeRunConfiguration.testLepton + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testTRCFileAdapter + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testTRCFileAdapter + + CMakeProjectManager.CMakeRunConfiguration.testTRCFileAdapter + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testPath + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testPath + + CMakeProjectManager.CMakeRunConfiguration.testPath + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testInducedAccelerations + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testInducedAccelerations + + CMakeProjectManager.CMakeRunConfiguration.testInducedAccelerations + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testAnalyzeTool + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testAnalyzeTool + + CMakeProjectManager.CMakeRunConfiguration.testAnalyzeTool + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testForward + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testForward + + CMakeProjectManager.CMakeRunConfiguration.testForward + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testScale + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testScale + + CMakeProjectManager.CMakeRunConfiguration.testScale + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testLiveIK + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testLiveIK + + CMakeProjectManager.CMakeRunConfiguration.testLiveIK + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testIK + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testIK + + CMakeProjectManager.CMakeRunConfiguration.testIK + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testID + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testID + + CMakeProjectManager.CMakeRunConfiguration.testID + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCSingleMuscle + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCSingleMuscle + + CMakeProjectManager.CMakeRunConfiguration.testCMCSingleMuscle + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCEMGDrivenArm_Thelen + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCEMGDrivenArm_Thelen + + CMakeProjectManager.CMakeRunConfiguration.testCMCEMGDrivenArm_Thelen + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCTwoMusclesOnBlock + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCTwoMusclesOnBlock + + CMakeProjectManager.CMakeRunConfiguration.testCMCTwoMusclesOnBlock + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testRootSolver + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testRootSolver + + CMakeProjectManager.CMakeRunConfiguration.testRootSolver + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCEMGDrivenArm_Millard + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCEMGDrivenArm_Millard + + CMakeProjectManager.CMakeRunConfiguration.testCMCEMGDrivenArm_Millard + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCArm26_Millard + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCArm26_Millard + + CMakeProjectManager.CMakeRunConfiguration.testCMCArm26_Millard + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCGait10dof18musc + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCGait10dof18musc + + CMakeProjectManager.CMakeRunConfiguration.testCMCGait10dof18musc + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCSingleRigidTendonMuscle + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCSingleRigidTendonMuscle + + CMakeProjectManager.CMakeRunConfiguration.testCMCSingleRigidTendonMuscle + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCWithControlConstraintsGait2354 + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCWithControlConstraintsGait2354 + + CMakeProjectManager.CMakeRunConfiguration.testCMCWithControlConstraintsGait2354 + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCWithControlConstraintsRunningModel + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCWithControlConstraintsRunningModel + + CMakeProjectManager.CMakeRunConfiguration.testCMCWithControlConstraintsRunningModel + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCArm26_Thelen + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCArm26_Thelen + + CMakeProjectManager.CMakeRunConfiguration.testCMCArm26_Thelen + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testRRA + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testRRA + + CMakeProjectManager.CMakeRunConfiguration.testRRA + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testFunctionBasedPathConversion + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testFunctionBasedPathConversion + + CMakeProjectManager.CMakeRunConfiguration.testFunctionBasedPathConversion + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + opensense + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + opensense + + CMakeProjectManager.CMakeRunConfiguration.opensense + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testFunctions + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testFunctions + + CMakeProjectManager.CMakeRunConfiguration.testFunctions + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testOpenSense + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testOpenSense + + CMakeProjectManager.CMakeRunConfiguration.testOpenSense + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + opensim-cmd + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + opensim-cmd + + CMakeProjectManager.CMakeRunConfiguration.opensim-cmd + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCommandLineInterface + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCommandLineInterface + + CMakeProjectManager.CMakeRunConfiguration.testCommandLineInterface + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testGCVSpline + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testGCVSpline + + CMakeProjectManager.CMakeRunConfiguration.testGCVSpline + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSerialization + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testSerialization + + CMakeProjectManager.CMakeRunConfiguration.testSerialization + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testStorage + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testStorage + + CMakeProjectManager.CMakeRunConfiguration.testStorage + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testXsensDataReader + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testXsensDataReader + + CMakeProjectManager.CMakeRunConfiguration.testXsensDataReader + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testWrappingMath + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testWrappingMath + + CMakeProjectManager.CMakeRunConfiguration.testWrappingMath + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testTableProcessor + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testTableProcessor + + CMakeProjectManager.CMakeRunConfiguration.testTableProcessor + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testStatesTrajectory + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testStatesTrajectory + + CMakeProjectManager.CMakeRunConfiguration.testStatesTrajectory + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testFunctionAdapter + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testFunctionAdapter + + CMakeProjectManager.CMakeRunConfiguration.testFunctionAdapter + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testInverseKinematicsSolver + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testInverseKinematicsSolver + + CMakeProjectManager.CMakeRunConfiguration.testInverseKinematicsSolver + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testInitState + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testInitState + + CMakeProjectManager.CMakeRunConfiguration.testInitState + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testFrames + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testFrames + + CMakeProjectManager.CMakeRunConfiguration.testFrames + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testModelInterface + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testModelInterface + + CMakeProjectManager.CMakeRunConfiguration.testModelInterface + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testForces + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testForces + + CMakeProjectManager.CMakeRunConfiguration.testForces + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testAssemblySolver + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testAssemblySolver + + CMakeProjectManager.CMakeRunConfiguration.testAssemblySolver + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testManager + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testManager + + CMakeProjectManager.CMakeRunConfiguration.testManager + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMomentArms + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMomentArms + + CMakeProjectManager.CMakeRunConfiguration.testMomentArms + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testReportersWithModel + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testReportersWithModel + + CMakeProjectManager.CMakeRunConfiguration.testReportersWithModel + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testPoints + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testPoints + + CMakeProjectManager.CMakeRunConfiguration.testPoints + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testDataTable + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testDataTable + + CMakeProjectManager.CMakeRunConfiguration.testDataTable + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testContactGeometry + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testContactGeometry + + CMakeProjectManager.CMakeRunConfiguration.testContactGeometry + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testNestedModelComponents + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testNestedModelComponents + + CMakeProjectManager.CMakeRunConfiguration.testNestedModelComponents + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testPrescribedForce + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testPrescribedForce + + CMakeProjectManager.CMakeRunConfiguration.testPrescribedForce + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMuscleMetabolicsProbes + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMuscleMetabolicsProbes + + CMakeProjectManager.CMakeRunConfiguration.testMuscleMetabolicsProbes + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testProbes + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testProbes + + CMakeProjectManager.CMakeRunConfiguration.testProbes + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSimulationUtilities + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testSimulationUtilities + + CMakeProjectManager.CMakeRunConfiguration.testSimulationUtilities + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testJoints + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testJoints + + CMakeProjectManager.CMakeRunConfiguration.testJoints + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testConstraints + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testConstraints + + CMakeProjectManager.CMakeRunConfiguration.testConstraints + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSerializableMuscleCurves + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testSerializableMuscleCurves + + CMakeProjectManager.CMakeRunConfiguration.testSerializableMuscleCurves + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testActuators + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testActuators + + CMakeProjectManager.CMakeRunConfiguration.testActuators + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testAPDMDataReader + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testAPDMDataReader + + CMakeProjectManager.CMakeRunConfiguration.testAPDMDataReader + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMuscleFirstOrderActivationDynamicModel + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMuscleFirstOrderActivationDynamicModel + + CMakeProjectManager.CMakeRunConfiguration.testMuscleFirstOrderActivationDynamicModel + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testModelProcessor + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testModelProcessor + + CMakeProjectManager.CMakeRunConfiguration.testModelProcessor + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMuscleFixedWidthPennationModel + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMuscleFixedWidthPennationModel + + CMakeProjectManager.CMakeRunConfiguration.testMuscleFixedWidthPennationModel + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testDeGrooteFregly2016Muscle + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testDeGrooteFregly2016Muscle + + CMakeProjectManager.CMakeRunConfiguration.testDeGrooteFregly2016Muscle + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMuscles + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMuscles + + CMakeProjectManager.CMakeRunConfiguration.testMuscles + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testOutputReporter + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testOutputReporter + + CMakeProjectManager.CMakeRunConfiguration.testOutputReporter + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testExternalLoads + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testExternalLoads + + CMakeProjectManager.CMakeRunConfiguration.testExternalLoads + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testControllers + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testControllers + + CMakeProjectManager.CMakeRunConfiguration.testControllers + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testModelCopy + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testModelCopy + + CMakeProjectManager.CMakeRunConfiguration.testModelCopy + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSerializeOpenSimObjects + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testSerializeOpenSimObjects + + CMakeProjectManager.CMakeRunConfiguration.testSerializeOpenSimObjects + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testComponentInterface + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testComponentInterface + + CMakeProjectManager.CMakeRunConfiguration.testComponentInterface + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testVisualization + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testVisualization + + CMakeProjectManager.CMakeRunConfiguration.testVisualization + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoContact + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoContact + + CMakeProjectManager.CMakeRunConfiguration.testMocoContact + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoInverse + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoInverse + + CMakeProjectManager.CMakeRunConfiguration.testMocoInverse + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoMetabolics + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoMetabolics + + CMakeProjectManager.CMakeRunConfiguration.testMocoMetabolics + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoInterface + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoInterface + + CMakeProjectManager.CMakeRunConfiguration.testMocoInterface + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoConstraints + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoConstraints + + CMakeProjectManager.CMakeRunConfiguration.testMocoConstraints + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoImplicit + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoImplicit + + CMakeProjectManager.CMakeRunConfiguration.testMocoImplicit + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoAnalytic + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoAnalytic + + CMakeProjectManager.CMakeRunConfiguration.testMocoAnalytic + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoGoals + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoGoals + + CMakeProjectManager.CMakeRunConfiguration.testMocoGoals + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoActuators + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoActuators + + CMakeProjectManager.CMakeRunConfiguration.testMocoActuators + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testNCSpline + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testNCSpline + + CMakeProjectManager.CMakeRunConfiguration.testNCSpline + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoTrack + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoTrack + + CMakeProjectManager.CMakeRunConfiguration.testMocoTrack + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoParameters + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoParameters + + CMakeProjectManager.CMakeRunConfiguration.testMocoParameters + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleHopperDeviceAnswers + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleHopperDeviceAnswers + + CMakeProjectManager.CMakeRunConfiguration.exampleHopperDeviceAnswers + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleHopperDevice + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleHopperDevice + + CMakeProjectManager.CMakeRunConfiguration.exampleHopperDevice + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + example2DataTable + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + example2DataTable + + CMakeProjectManager.CMakeRunConfiguration.example2DataTable + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + example1DataTable + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + example1DataTable + + CMakeProjectManager.CMakeRunConfiguration.example1DataTable + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleTRCFileAdapter + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleTRCFileAdapter + + CMakeProjectManager.CMakeRunConfiguration.exampleTRCFileAdapter + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleSlidingMass + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleSlidingMass + + CMakeProjectManager.CMakeRunConfiguration.exampleSlidingMass + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleSlidingMassAdvanced + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleSlidingMassAdvanced + + CMakeProjectManager.CMakeRunConfiguration.exampleSlidingMassAdvanced + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleTracking + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleTracking + + CMakeProjectManager.CMakeRunConfiguration.exampleTracking + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSmoothSegmentedFunctionFactory + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testSmoothSegmentedFunctionFactory + + CMakeProjectManager.CMakeRunConfiguration.testSmoothSegmentedFunctionFactory + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleMarkerTracking + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleMarkerTracking + + CMakeProjectManager.CMakeRunConfiguration.exampleMarkerTracking + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleHangingMuscle + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleHangingMuscle + + CMakeProjectManager.CMakeRunConfiguration.exampleHangingMuscle + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + example2DWalkingMetabolics + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + example2DWalkingMetabolics + + CMakeProjectManager.CMakeRunConfiguration.example2DWalkingMetabolics + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + example2DWalking + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + example2DWalking + + CMakeProjectManager.CMakeRunConfiguration.example2DWalking + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleMocoInverse + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleMocoInverse + + CMakeProjectManager.CMakeRunConfiguration.exampleMocoInverse + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleMocoTrack + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleMocoTrack + + CMakeProjectManager.CMakeRunConfiguration.exampleMocoTrack + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleMocoCustomEffortGoal + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleMocoCustomEffortGoal + + CMakeProjectManager.CMakeRunConfiguration.exampleMocoCustomEffortGoal + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleCustomImplicitAuxiliaryDynamics + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleCustomImplicitAuxiliaryDynamics + + CMakeProjectManager.CMakeRunConfiguration.exampleCustomImplicitAuxiliaryDynamics + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testComponents + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testComponents + + CMakeProjectManager.CMakeRunConfiguration.testComponents + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testAddComponents + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testAddComponents + + CMakeProjectManager.CMakeRunConfiguration.testAddComponents + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSTOFileAdapter + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testSTOFileAdapter + + CMakeProjectManager.CMakeRunConfiguration.testSTOFileAdapter + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testControllerExample + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testControllerExample + + CMakeProjectManager.CMakeRunConfiguration.testControllerExample + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleController + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleController + + CMakeProjectManager.CMakeRunConfiguration.exampleController + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testExampleMain + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testExampleMain + + CMakeProjectManager.CMakeRunConfiguration.testExampleMain + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleMain + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleMain + + CMakeProjectManager.CMakeRunConfiguration.exampleMain + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testOptimizationExample + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testOptimizationExample + + CMakeProjectManager.CMakeRunConfiguration.testOptimizationExample + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleOptimization + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleOptimization + + CMakeProjectManager.CMakeRunConfiguration.exampleOptimization + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCustomActuatorExample + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCustomActuatorExample + + CMakeProjectManager.CMakeRunConfiguration.testCustomActuatorExample + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleCustomActuator + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleCustomActuator + + CMakeProjectManager.CMakeRunConfiguration.exampleCustomActuator + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMuscleExample + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMuscleExample + + CMakeProjectManager.CMakeRunConfiguration.testMuscleExample + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleMuscle + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleMuscle + + CMakeProjectManager.CMakeRunConfiguration.exampleMuscle + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMarkerData + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMarkerData + + CMakeProjectManager.CMakeRunConfiguration.testMarkerData + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSimpleOptimizationExample + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testSimpleOptimizationExample + + CMakeProjectManager.CMakeRunConfiguration.testSimpleOptimizationExample + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleOptimizationSimple + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleOptimizationSimple + + CMakeProjectManager.CMakeRunConfiguration.exampleOptimizationSimple + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + checkEnvironment + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + checkEnvironment + + CMakeProjectManager.CMakeRunConfiguration.checkEnvironment + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testIterators + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testIterators + + CMakeProjectManager.CMakeRunConfiguration.testIterators + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testREADME + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testREADME + + CMakeProjectManager.CMakeRunConfiguration.testREADME + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testWrapping + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testWrapping + + CMakeProjectManager.CMakeRunConfiguration.testWrapping + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testExampleLuxoMuscle + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testExampleLuxoMuscle + + CMakeProjectManager.CMakeRunConfiguration.testExampleLuxoMuscle + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testBuildDynamicWalker + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testBuildDynamicWalker + + CMakeProjectManager.CMakeRunConfiguration.testBuildDynamicWalker + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testJointReactions + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testJointReactions + + CMakeProjectManager.CMakeRunConfiguration.testJointReactions + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testStaticOptimization + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testStaticOptimization + + CMakeProjectManager.CMakeRunConfiguration.testStaticOptimization + 3768 + false + true + false + false + true + + 123 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 18 + + + Version + 18 + + diff --git a/OpenSim/Simulation/Model/FunctionBasedPath.cpp b/OpenSim/Simulation/Model/FunctionBasedPath.cpp index a1df22d0bc..fad9e1cd98 100644 --- a/OpenSim/Simulation/Model/FunctionBasedPath.cpp +++ b/OpenSim/Simulation/Model/FunctionBasedPath.cpp @@ -1,4 +1,9 @@ +#include "GeometryPath.h" +#include "ConditionalPathPoint.h" #include "FunctionBasedPath.h" +#include "MovingPathPoint.h" +#include "PointForceDirection.h" +#include #include #include @@ -13,6 +18,11 @@ #include #include +using namespace std; +using namespace OpenSim; +using namespace SimTK; +using SimTK::Vec3; + template void printVector(std::vector vec){ std::cout << "vec["<& bodyForces, + SimTK::Vector& mobilityForces) const +{ + double ma; + double torqueOverCoord; + + std::vector coords = _impl->interp.getCoords(); + for (unsigned i=0; i *rPFDs) const +{ + OPENSIM_THROW(Exception,"this method is not allowed within FunctionBasedPath"); +} + +//_____________________________________________________________________________ +/* + * Calculate the current path. + */ +void OpenSim::FunctionBasedPath::computePath(const SimTK::State& s) const +{ + OPENSIM_THROW(Exception,"this method is not allowed within FunctionBasedPath"); +} + +//_____________________________________________________________________________ +/* + * Compute the total length of the path. This function + * assumes that the path has already been updated. + */ +double OpenSim::FunctionBasedPath:: +calcLengthAfterPathComputation(const SimTK::State& s, + const Array& currentPath) const +{ + double length = getLength(s); + setLength(s,length); + return( length ); +} + +void OpenSim::FunctionBasedPath:: +computeLengtheningSpeed(const SimTK::State& s) const +{ + double lengtheningspeed = getLengtheningSpeed(s); + setLengtheningSpeed(s,lengtheningspeed); +} + +//------------------------------------------------------------------------------ +// GENERATE DECORATIONS +//------------------------------------------------------------------------------ +// The GeometryPath takes care of drawing itself here, using information it +// can extract from the supplied state, including position information and +// color information that may have been calculated as late as Stage::Dynamics. +// For example, muscles may want the color to reflect activation level and +// other path-using components might want to use forces (tension). We will +// ensure that the state has been realized to Stage::Dynamics before looking +// at it. (It is only guaranteed to be at Stage::Position here.) +void OpenSim::FunctionBasedPath:: +generateDecorations(bool fixed, const ModelDisplayHints& hints, + const SimTK::State& state, + SimTK::Array_& appendToThis) const +{ + std::cerr << "generateDecorations() called on a FunctionBasedPath"; + std::cerr << "which has no implementation yet"; + std::cerr << "call will be therefore be ignored" << std::endl; + // todo +} + + +//---------------------------------------------------------------------------- +// VIRTUAL METHODS EMPTY DEFINED +//---------------------------------------------------------------------------- +double OpenSim::FunctionBasedPath::calcPathLengthChange(const SimTK::State& s, + const WrapObject& wo, + const WrapResult& wr, + const Array& path) const +{ + OPENSIM_THROW(Exception,"this method is not allowed within FunctionBasedPath"); +} + +void OpenSim::FunctionBasedPath::addPathWrap(WrapObject& aWrapObject) +{ + OPENSIM_THROW(Exception,"this method is not allowed within FunctionBasedPath"); +} + + +const Array& OpenSim::FunctionBasedPath::getCurrentPath( const SimTK::State& s) const +{ + OPENSIM_THROW(Exception,"this method is not allowed within FunctionBasedPath"); +} + +AbstractPathPoint* OpenSim::FunctionBasedPath::addPathPoint(const SimTK::State& s, int index, + const PhysicalFrame& frame) +{ + OPENSIM_THROW(Exception,"this method is not allowed within FunctionBasedPath"); +} + +AbstractPathPoint* OpenSim::FunctionBasedPath::appendNewPathPoint(const std::string& proposedName, + const PhysicalFrame& frame, + const SimTK::Vec3& locationOnFrame) +{ + std::cerr << "appendNewPathPoint called on a FunctionBasedPath"; + std::cerr << "call will be ignored" << std::endl; +// OPENSIM_THROW(Exception,"this method is not allowed within FunctionBasedPath"); + return nullptr; +} + +bool OpenSim::FunctionBasedPath::canDeletePathPoint(int index) +{ + OPENSIM_THROW(Exception,"this method is not allowed within FunctionBasedPath"); +} + +bool OpenSim::FunctionBasedPath::deletePathPoint(const SimTK::State& s, + int index) +{ + OPENSIM_THROW(Exception,"this method is not allowed within FunctionBasedPath"); +} + +bool OpenSim::FunctionBasedPath::replacePathPoint(const SimTK::State& s, + AbstractPathPoint* oldPathPoint, + AbstractPathPoint* newPathPoint) +{ + OPENSIM_THROW(Exception,"this method is not allowed within FunctionBasedPath"); +} + + +void OpenSim::FunctionBasedPath::moveUpPathWrap(const SimTK::State& s, + int index) +{ + OPENSIM_THROW(Exception,"this method is not allowed within FunctionBasedPath"); +} + +void OpenSim::FunctionBasedPath::moveDownPathWrap(const SimTK::State& s, + int index) +{ + OPENSIM_THROW(Exception,"this method is not allowed within FunctionBasedPath"); +} + +void OpenSim::FunctionBasedPath::deletePathWrap(const SimTK::State& s, + int index) +{ + OPENSIM_THROW(Exception,"this method is not allowed within FunctionBasedPath"); +} + + +void OpenSim::FunctionBasedPath::applyWrapObjects(const SimTK::State& s, + Array& path ) const +{ + OPENSIM_THROW(Exception,"this method is not allowed within FunctionBasedPath"); +} + + +void OpenSim::FunctionBasedPath::namePathPoints(int aStartingIndex) +{ + std::cerr << "namePathPoints(int index) called on a FunctionBasedPath"; + std::cerr << "call will be ignored" << std::endl; +// OPENSIM_THROW(Exception,"this method is not allowed within FunctionBasedPath"); +} + +void OpenSim::FunctionBasedPath::placeNewPathPoint(const SimTK::State& s, + SimTK::Vec3& aOffset, + int index, + const PhysicalFrame& frame) +{ + OPENSIM_THROW(Exception,"this method is not allowed within FunctionBasedPath"); +} diff --git a/OpenSim/Simulation/Model/FunctionBasedPath.h b/OpenSim/Simulation/Model/FunctionBasedPath.h index d4dab4b96f..16c34ebccc 100644 --- a/OpenSim/Simulation/Model/FunctionBasedPath.h +++ b/OpenSim/Simulation/Model/FunctionBasedPath.h @@ -118,6 +118,73 @@ class OSIMSIMULATION_API FunctionBasedPath : public GeometryPath { const Coordinate& aCoord) const override; void printContent(std::ostream& printFile) const; + + + // From GeometryPath refactoring +public: + void addInEquivalentForces(const SimTK::State& state, + const double& tension, + SimTK::Vector_& bodyForces, + SimTK::Vector& mobilityForces) const; + + void getPointForceDirections(const SimTK::State& s, + OpenSim::Array *rPFDs) const; + +protected: + void computePath(const SimTK::State& s ) const; + void computeLengtheningSpeed(const SimTK::State& s) const; + + double calcLengthAfterPathComputation + (const SimTK::State& s, const Array& currentPath) const; + + void generateDecorations( + bool fixed, + const ModelDisplayHints& hints, + const SimTK::State& state, + SimTK::Array_& appendToThis) const + override; + + + + + + // related to pathpoints so has to be removed in release +protected: + double calcPathLengthChange(const SimTK::State& s, const WrapObject& wo, + const WrapResult& wr, + const Array& path) const; + +public: + void addPathWrap(WrapObject& aWrapObject); + +private: + const Array& getCurrentPath( const SimTK::State& s) const; + AbstractPathPoint* addPathPoint(const SimTK::State& s, + int index, + const PhysicalFrame& frame); + AbstractPathPoint* appendNewPathPoint(const std::string& proposedName, + const PhysicalFrame& frame, + const SimTK::Vec3& locationOnFrame); + bool canDeletePathPoint(int index); + bool deletePathPoint(const SimTK::State& s, + int index); + bool replacePathPoint(const SimTK::State& s, + AbstractPathPoint* oldPathPoint, + AbstractPathPoint* newPathPoint); + + void moveUpPathWrap(const SimTK::State& s, + int index); + void moveDownPathWrap(const SimTK::State& s, + int index); + void deletePathWrap(const SimTK::State& s, + int index); + + void applyWrapObjects(const SimTK::State& s, + Array& path) const; + + void namePathPoints(int aStartingIndex); + void placeNewPathPoint(const SimTK::State& s, SimTK::Vec3& aOffset, + int index, const PhysicalFrame& frame); }; } diff --git a/OpenSim/Simulation/Model/GeometryPath.cpp b/OpenSim/Simulation/Model/GeometryPath.cpp index 6dc874e6f7..d612dfc8c5 100644 --- a/OpenSim/Simulation/Model/GeometryPath.cpp +++ b/OpenSim/Simulation/Model/GeometryPath.cpp @@ -115,75 +115,7 @@ void GeometryPath::extendConnectToModel(Model& aModel) markCacheVariableValid(s, _colorCV); // it is OK at its default value } -//------------------------------------------------------------------------------ -// GENERATE DECORATIONS -//------------------------------------------------------------------------------ -// The GeometryPath takes care of drawing itself here, using information it -// can extract from the supplied state, including position information and -// color information that may have been calculated as late as Stage::Dynamics. -// For example, muscles may want the color to reflect activation level and -// other path-using components might want to use forces (tension). We will -// ensure that the state has been realized to Stage::Dynamics before looking -// at it. (It is only guaranteed to be at Stage::Position here.) -void GeometryPath:: -generateDecorations(bool fixed, const ModelDisplayHints& hints, - const SimTK::State& state, - SimTK::Array_& appendToThis) const -{ - // There is no fixed geometry to generate here. - if (fixed) { return; } - - const Array& pathPoints = getCurrentPath(state); - - assert(pathPoints.size() > 1); - - const AbstractPathPoint* lastPoint = pathPoints[0]; - MobilizedBodyIndex mbix(0); - Vec3 lastPos = lastPoint->getLocationInGround(state); - if (hints.get_show_path_points()) - DefaultGeometry::drawPathPoint(mbix, lastPos, getColor(state), appendToThis); - - Vec3 pos; - - for (int i = 1; i < pathPoints.getSize(); ++i) { - AbstractPathPoint* point = pathPoints[i]; - PathWrapPoint* pwp = dynamic_cast(point); - - if (pwp) { - // A PathWrapPoint provides points on the wrapping surface as Vec3s - Array& surfacePoints = pwp->getWrapPath(); - // The surface points are expressed w.r.t. the wrap surface's body frame. - // Transform the surface points into the ground reference frame to draw - // the surface point as the wrapping portion of the GeometryPath - const Transform& X_BG = pwp->getParentFrame().getTransformInGround(state); - // Cycle through each surface point and draw it the Ground frame - for (int j = 0; jgetLocationInGround(state); - if (hints.get_show_path_points()) - DefaultGeometry::drawPathPoint(mbix, pos, getColor(state), - appendToThis); - // Line segments will be in ground frame - appendToThis.push_back(DecorativeLine(lastPos, pos) - .setLineThickness(4) - .setColor(getColor(state)).setBodyId(0).setIndexOnBody(i)); - lastPos = pos; - } - } -} //_____________________________________________________________________________ /* @@ -200,225 +132,6 @@ void GeometryPath::constructProperties() constructProperty_Appearance(appearance); } -//_____________________________________________________________________________ -/* - * Name the path points based on their position in the set. To keep the - * names up to date, this method should be called every time the path changes. - * - * @param aStartingIndex The index of the first path point to name. - */ -void GeometryPath::namePathPoints(int aStartingIndex) -{ - char indx[5]; - for (int i = aStartingIndex; i < get_PathPointSet().getSize(); i++) - { - sprintf(indx,"%d",i+1); - AbstractPathPoint& point = get_PathPointSet().get(i); - if (point.getName()=="" && hasOwner()) { - point.setName(getOwner().getName() + "-P" + indx); - } - } -} - -//_____________________________________________________________________________ -/* - * get the current path of the path - * - * @return The array of currently active path points. - * - */ -const OpenSim::Array & GeometryPath:: -getCurrentPath(const SimTK::State& s) const -{ - computePath(s); // compute checks if path needs to be recomputed - return getCacheVariableValue< Array >(s, "current_path"); -} - -// get the path as PointForceDirections directions -// CAUTION: the return points are heap allocated; you must delete them yourself! -// (TODO: that is really lame) -void GeometryPath:: -getPointForceDirections(const SimTK::State& s, - OpenSim::Array *rPFDs) const -{ - int i; - AbstractPathPoint* start; - AbstractPathPoint* end; - const OpenSim::PhysicalFrame* startBody; - const OpenSim::PhysicalFrame* endBody; - const Array& currentPath = getCurrentPath(s); - - int np = currentPath.getSize(); - rPFDs->ensureCapacity(np); - - for (i = 0; i < np; i++) { - PointForceDirection *pfd = - new PointForceDirection(currentPath[i]->getLocation(s), - currentPath[i]->getParentFrame(), Vec3(0)); - rPFDs->append(pfd); - } - - for (i = 0; i < np-1; i++) { - start = currentPath[i]; - end = currentPath[i+1]; - startBody = &start->getParentFrame(); - endBody = &end->getParentFrame(); - - if (startBody != endBody) - { - Vec3 posStart, posEnd; - Vec3 direction(0); - - // Find the positions of start and end in the inertial frame. - //engine.getPosition(s, start->getParentFrame(), start->getLocation(), posStart); - posStart = start->getLocationInGround(s); - - //engine.getPosition(s, end->getParentFrame(), end->getLocation(), posEnd); - posEnd = end->getLocationInGround(s); - - // Form a vector from start to end, in the inertial frame. - direction = (posEnd - posStart); - - // Check that the two points are not coincident. - // This can happen due to infeasible wrapping of the path, - // when the origin or insertion enters the wrapping surface. - // This is a temporary fix, since the wrap algorithm should - // return NaN for the points and/or throw an Exception- aseth - if (direction.norm() < SimTK::SignificantReal){ - direction = direction*SimTK::NaN; - } - else{ - direction = direction.normalize(); - } - - // Get resultant direction at each point - rPFDs->get(i)->addToDirection(direction); - rPFDs->get(i+1)->addToDirection(-direction); - } - } -} - -/* add in the equivalent spatial forces on bodies for an applied tension - along the GeometryPath to a set of bodyForces */ -void GeometryPath::addInEquivalentForces(const SimTK::State& s, - const double& tension, - SimTK::Vector_& bodyForces, - SimTK::Vector& mobilityForces) const -{ - AbstractPathPoint* start = NULL; - AbstractPathPoint* end = NULL; - const SimTK::MobilizedBody* bo = NULL; - const SimTK::MobilizedBody* bf = NULL; - const Array& currentPath = getCurrentPath(s); - int np = currentPath.getSize(); - - const SimTK::SimbodyMatterSubsystem& matter = - getModel().getMatterSubsystem(); - - // start point, end point, direction, and force vectors in ground - Vec3 po(0), pf(0), dir(0), force(0); - // partial velocity of point in body expressed in ground - Vec3 dPodq_G(0), dPfdq_G(0); - - // gen force (torque) due to moving point under tension - double fo, ff; - - for (int i = 0; i < np-1; ++i) { - start = currentPath[i]; - end = currentPath[i+1]; - - bo = &start->getParentFrame().getMobilizedBody(); - bf = &end->getParentFrame().getMobilizedBody(); - - if (bo != bf) { - // Find the positions of start and end in the inertial frame. - po = start->getLocationInGround(s); - pf = end->getLocationInGround(s); - - // Form a vector from start to end, in the inertial frame. - dir = (pf - po); - - // Check that the two points are not coincident. - // This can happen due to infeasible wrapping of the path, - // when the origin or insertion enters the wrapping surface. - // This is a temporary fix, since the wrap algorithm should - // return NaN for the points and/or throw an Exception- aseth - if (dir.norm() < SimTK::SignificantReal){ - dir = dir*SimTK::NaN; - } - else{ - dir = dir.normalize(); - } - - force = tension*dir; - - const MovingPathPoint* mppo = - dynamic_cast(start); - - // do the same for the end point of this segment of the path - const MovingPathPoint* mppf = - dynamic_cast(end); - - // add in the tension point forces to body forces - if (mppo) {// moving path point location is a function of the state - // transform of the frame of the point to the base mobilized body - auto X_BF = mppo->getParentFrame().findTransformInBaseFrame(); - bo->applyForceToBodyPoint(s, X_BF*mppo->getLocation(s), force, - bodyForces); - } - else { - // transform of the frame of the point to the base mobilized body - auto X_BF = start->getParentFrame().findTransformInBaseFrame(); - bo->applyForceToBodyPoint(s, X_BF*start->getLocation(s), force, - bodyForces); - } - - if (mppf) {// moving path point location is a function of the state - // transform of the frame of the point to the base mobilized body - auto X_BF = mppf->getParentFrame().findTransformInBaseFrame(); - bf->applyForceToBodyPoint(s, X_BF*mppf->getLocation(s), -force, - bodyForces); - } - else { - // transform of the frame of the point to the base mobilized body - auto X_BF = end->getParentFrame().findTransformInBaseFrame(); - bf->applyForceToBodyPoint(s, X_BF*end->getLocation(s), -force, - bodyForces); - } - - // Now account for the work being done by virtue of the moving - // path point motion relative to the body it is on - if(mppo){ - // torque (genforce) contribution due to relative movement - // of a via point w.r.t. the body it is connected to. - dPodq_G = bo->expressVectorInGroundFrame(s, start->getdPointdQ(s)); - fo = ~dPodq_G*force; - - // get the mobilized body the coordinate is couple to. - const SimTK::MobilizedBody& mpbod = - matter.getMobilizedBody(mppo->getXCoordinate().getBodyIndex()); - - // apply the generalized (mobility) force to the coordinate's body - mpbod.applyOneMobilityForce(s, - mppo->getXCoordinate().getMobilizerQIndex(), - fo, mobilityForces); - } - - if(mppf){ - dPfdq_G = bf->expressVectorInGroundFrame(s, end->getdPointdQ(s)); - ff = ~dPfdq_G*(-force); - - // get the mobilized body the coordinate is couple to. - const SimTK::MobilizedBody& mpbod = - matter.getMobilizedBody(mppf->getXCoordinate().getBodyIndex()); - - mpbod.applyOneMobilityForce(s, - mppf->getXCoordinate().getMobilizerQIndex(), - ff, mobilityForces); - } - } - } -} //_____________________________________________________________________________ /* @@ -451,300 +164,6 @@ double GeometryPath::getPreScaleLength( const SimTK::State& s) const { return _preScaleLength; } -//============================================================================= -// UTILITY -//============================================================================= -//_____________________________________________________________________________ -/* - * Add a new path point, with default location, to the path. - * - * @param aIndex The position in the pathPointSet to put the new point in. - * @param frame The frame to attach the point to. - * @return Pointer to the newly created path point. - */ -AbstractPathPoint* GeometryPath:: -addPathPoint(const SimTK::State& s, int aIndex, const PhysicalFrame& frame) -{ - PathPoint* newPoint = new PathPoint(); - newPoint->setParentFrame(frame); - Vec3 newLocation(0.0); - // Note: placeNewPathPoint() returns a location by reference. - // It computes a new location according to the index where the new path point - // will be inserted along the path(among the other path points). - placeNewPathPoint(s, newLocation, aIndex, frame); - // Now set computed new location into the newPoint - newPoint->setLocation(newLocation); - upd_PathPointSet().insert(aIndex, newPoint); - - // Rename the path points starting at this new one. - namePathPoints(aIndex); - - // Update start point and end point in the wrap instances so that they - // refer to the same path points they did before the new point - // was added. These indices are 1-based. - aIndex++; - for (int i=0; isetParentFrame(frame); - newPoint->setName(proposedName); - newPoint->setLocation(aPositionOnBody); - upd_PathPointSet().adoptAndAppend(newPoint); - - return newPoint; -} - -//_____________________________________________________________________________ -/* - * Determine an appropriate default XYZ location for a new path point. - * Note that this method is internal and should not be called directly on a new - * point as the point is not really added to the path (done in addPathPoint() - * instead) - * @param aOffset The XYZ location to be determined. - * @param aIndex The position in the pathPointSet to put the new point in. - * @param frame The body to attach the point to. - */ -void GeometryPath:: -placeNewPathPoint(const SimTK::State& s, SimTK::Vec3& aOffset, int aIndex, - const PhysicalFrame& frame) -{ - // The location of the point is determined by moving a 'distance' from 'base' - // along a vector from 'start' to 'end.' 'base' is the existing path point - // that is in or closest to the index aIndex. 'start' and 'end' are existing - // path points--which ones depends on where the new point is being added. - // 'distance' is 0.5 for points added to the middle of a path (so the point - // appears halfway between the two adjacent points), and 0.2 for points that - // are added to either end of the path. If there is only one point in the - // path, the new point is put 0.01 units away in all three dimensions. - if (get_PathPointSet().getSize() > 1) { - int start, end, base; - double distance; - if (aIndex == 0) { - start = 1; - end = 0; - base = end; - distance = 0.2; - } else if (aIndex >= get_PathPointSet().getSize()) { - start = aIndex - 2; - end = aIndex - 1; - base = end; - distance = 0.2; - } else { - start = aIndex; - end = aIndex - 1; - base = start; - distance = 0.5; - } - - const Vec3 startPt = get_PathPointSet()[start].getLocation(s); - const Vec3 endPt = get_PathPointSet()[end].getLocation(s); - const Vec3 basePt = get_PathPointSet()[base].getLocation(s); - - Vec3 startPt2 = get_PathPointSet()[start].getParentFrame() - .findStationLocationInAnotherFrame(s, startPt, frame); - - Vec3 endPt2 = get_PathPointSet()[end].getParentFrame() - .findStationLocationInAnotherFrame(s, endPt, frame); - - aOffset = basePt + distance * (endPt2 - startPt2); - } else if (get_PathPointSet().getSize() == 1) { - aOffset= get_PathPointSet()[0].getLocation(s) + 0.01; - } - else { // first point, do nothing? - } -} - -//_____________________________________________________________________________ -/* - * See if a path point can be deleted. All paths must have at least two - * active path points to define the path. - * - * @param aIndex The index of the point to delete. - * @return Whether or not the point can be deleted. - */ -bool GeometryPath::canDeletePathPoint( int aIndex) -{ - // A path point can be deleted only if there would remain - // at least two other fixed points. - int numOtherFixedPoints = 0; - for (int i = 0; i < get_PathPointSet().getSize(); i++) { - if (i != aIndex) { - if (!( get_PathPointSet().get(i).getConcreteClassName() - ==("ConditionalPathPoint"))) - numOtherFixedPoints++; - } - } - - if (numOtherFixedPoints >= 2) - return true; - - return false; -} - -//_____________________________________________________________________________ -/* - * Delete a path point. - * - * @param aIndex The index of the point to delete. - * @return Whether or not the point was deleted. - */ -bool GeometryPath::deletePathPoint(const SimTK::State& s, int aIndex) -{ - if (canDeletePathPoint(aIndex) == false) - return false; - - upd_PathPointSet().remove(aIndex); - - // rename the path points starting at the deleted position - namePathPoints(aIndex); - - // Update start point and end point in the wrap instances so that they - // refer to the same path points they did before the point was - // deleted. These indices are 1-based. If the point deleted is start - // point or end point, the path wrap range is made smaller by one point. - aIndex++; - for (int i=0; i get_PathPointSet().getSize())) - get_PathWrapSet().get(i).setStartPoint(s, startPoint - 1); - - if ( endPoint > 1 - && aIndex <= endPoint - && ( (endPoint > startPoint) - || (endPoint > get_PathPointSet().getSize()))) - get_PathWrapSet().get(i).setEndPoint(s, endPoint - 1); - } - - return true; -} - -//_____________________________________________________________________________ -/* - * Replace a path point in the set with another point. The new one is made a - * member of all the same groups as the old one, and is inserted in the same - * place the old one occupied. - * - * @param aOldPathPoint Path point to remove. - * @param aNewPathPoint Path point to add. - */ -bool GeometryPath:: -replacePathPoint(const SimTK::State& s, AbstractPathPoint* aOldPathPoint, - AbstractPathPoint* aNewPathPoint) -{ - if (aOldPathPoint != NULL && aNewPathPoint != NULL) { - int count = 0; - int index = get_PathPointSet().getIndex(aOldPathPoint); - // If you're switching from non-via to via, check to make sure that the - // path will be left with at least 2 non-via points. - ConditionalPathPoint* oldVia = - dynamic_cast(aOldPathPoint); - ConditionalPathPoint* newVia = - dynamic_cast(aNewPathPoint); - if (oldVia == NULL && newVia != NULL) { - for (int i=0; i - (&get_PathPointSet().get(i)) == NULL) - count++; - } - } - } else { - count = 2; - } - if (count >= 2 && index >= 0) { - upd_PathPointSet().set(index, aNewPathPoint, true); - //computePath(s); - return true; - } - } - return false; -} - -//_____________________________________________________________________________ -/* - * Create a new wrap instance and add it to the set. - * - * @param aWrapObject The wrap object to use in the new wrap instance. - */ -void GeometryPath::addPathWrap(WrapObject& aWrapObject) -{ - PathWrap* newWrap = new PathWrap(); - newWrap->setWrapObject(aWrapObject); - newWrap->setMethod(PathWrap::hybrid); - upd_PathWrapSet().adoptAndAppend(newWrap); - finalizeFromProperties(); -} - -//_____________________________________________________________________________ -/* - * Move a wrap instance up in the list. Changing the order of wrap instances for - * a path may affect how the path wraps over the wrap objects. - * - * @param aIndex The index of the wrap instance to move up. - */ -void GeometryPath::moveUpPathWrap(const SimTK::State& s, int aIndex) -{ - if (aIndex > 0) { - // Make sure wrap object is not deleted by remove(). - upd_PathWrapSet().setMemoryOwner(false); - - PathWrap& wrap = get_PathWrapSet().get(aIndex); - upd_PathWrapSet().remove(aIndex); - upd_PathWrapSet().insert(aIndex - 1, &wrap); - upd_PathWrapSet().setMemoryOwner(true); - } -} - -//_____________________________________________________________________________ -/* - * Move a wrap instance down in the list. Changing the order of wrap instances - * for a path may affect how the path wraps over the wrap objects. - * - * @param aIndex The index of the wrap instance to move down. - */ -void GeometryPath::moveDownPathWrap(const SimTK::State& s, int aIndex) -{ - if (aIndex < get_PathWrapSet().getSize() - 1) { - // Make sure wrap object is not deleted by remove(). - upd_PathWrapSet().setMemoryOwner(false); - - PathWrap& wrap = get_PathWrapSet().get(aIndex); - upd_PathWrapSet().remove(aIndex); - upd_PathWrapSet().insert(aIndex + 1, &wrap); - upd_PathWrapSet().setMemoryOwner(true); - } -} - -//_____________________________________________________________________________ -/* - * Delete a wrap instance. - * - * @param aIndex The index of the wrap instance to delete. - */ -void GeometryPath::deletePathWrap(const SimTK::State& s, int aIndex) -{ - upd_PathWrapSet().remove(aIndex); - -} - //============================================================================== // SCALING //============================================================================== @@ -762,343 +181,6 @@ extendPostScale(const SimTK::State& s, const ScaleSet& scaleSet) computePath(s); } -//-------------------------------------------------------------------------- -// COMPUTATIONS -//-------------------------------------------------------------------------- -//============================================================================= -// PATH, WRAPPING, AND MOMENT ARM -//============================================================================= -//_____________________________________________________________________________ -/* - * Calculate the current path. - */ -void GeometryPath::computePath(const SimTK::State& s) const -{ - if (isCacheVariableValid(s, _currentPathCV)) { - return; - } - - // Clear the current path. - Array& currentPath = updCacheVariableValue(s, _currentPathCV); - currentPath.setSize(0); - - // Add the active fixed and moving via points to the path. - for (int i = 0; i < get_PathPointSet().getSize(); i++) { - if (get_PathPointSet()[i].isActive(s)) - currentPath.append(&get_PathPointSet()[i]); // <--- !!!!BAD - } - - // Use the current path so far to check for intersection with wrap objects, - // which may add additional points to the path. - applyWrapObjects(s, currentPath); - calcLengthAfterPathComputation(s, currentPath); - - markCacheVariableValid(s, _currentPathCV); -} - -//_____________________________________________________________________________ -/* - * Compute lengthening speed of the path. - */ -void GeometryPath::computeLengtheningSpeed(const SimTK::State& s) const -{ - if (isCacheVariableValid(s, _speedCV)) { - return; - } - - const Array& currentPath = getCurrentPath(s); - - double speed = 0.0; - - for (int i = 0; i < currentPath.getSize() - 1; i++) { - speed += currentPath[i]->calcSpeedBetween(s, *currentPath[i+1]); - } - - setLengtheningSpeed(s, speed); -} - -//_____________________________________________________________________________ -/* - * Apply the wrap objects to the current path. - */ -void GeometryPath:: -applyWrapObjects(const SimTK::State& s, Array& path) const -{ - if (get_PathWrapSet().getSize() < 1) - return; - - WrapResult best_wrap; - Array result, order; - - result.setSize(get_PathWrapSet().getSize()); - order.setSize(get_PathWrapSet().getSize()); - - // Set the initial order to be the order they are listed in the path. - for (int i = 0; i < get_PathWrapSet().getSize(); i++) - order[i] = i; - - // If there is only one wrap object, calculate the wrapping only once. - // If there are two or more objects, perform up to 8 iterations where - // the result from one wrap object is used as the starting point for - // the next wrap. - const int maxIterations = get_PathWrapSet().getSize() < 2 ? 1 : 8; - double last_length = SimTK::Infinity; - for (int kk = 0; kk < maxIterations; kk++) - { - for (int i = 0; i < get_PathWrapSet().getSize(); i++) - { - result[i] = 0; - PathWrap& ws = get_PathWrapSet().get(order[i]); - const WrapObject* wo = ws.getWrapObject(); - best_wrap.wrap_pts.setSize(0); - double min_length_change = SimTK::Infinity; - - // First remove this object's wrapping points from the current path. - for (int j = 0; j get_active()) { - // startPoint and endPoint in wrapStruct represent the - // user-defined starting and ending points in the array of path - // points that should be considered for wrapping. These indices - // take into account via points, whether or not they are active. - // Thus they are indices into mp_orig[], not mp[] (also, mp[] - // may contain wrapping points from previous wrap objects, which - // would mess up the starting and ending indices). But the goal - // is to find starting and ending indices in mp[] to consider - // for wrapping over this wrap object. Here is how that is done: - - // 1. startPoint and endPoint are 1-based, so subtract 1 from - // them to get indices into get_PathPointSet(). -1 (or any value - // less than 1) means use the first (or last) point. - const int wrapStart = (ws.getStartPoint() < 1 - ? 0 - : ws.getStartPoint() - 1); - const int wrapEnd = (ws.getEndPoint() < 1 - ? get_PathPointSet().getSize() - 1 - : ws.getEndPoint() - 1); - - // 2. Scan forward from wrapStart in get_PathPointSet() to find - // the first point that is active. Store a pointer to it (smp). - int jfwd = wrapStart; - for (; jfwd <= wrapEnd; jfwd++) - if (get_PathPointSet().get(jfwd).isActive(s)) - break; - if (jfwd > wrapEnd) // there are no active points in the path - return; - const AbstractPathPoint* const smp = &get_PathPointSet().get(jfwd); - - // 3. Scan backwards from wrapEnd in get_PathPointSet() to find - // the last point that is active. Store a pointer to it (emp). - int jrev = wrapEnd; - for (; jrev >= wrapStart; jrev--) - if (get_PathPointSet().get(jrev).isActive(s)) - break; - if (jrev < wrapStart) // there are no active points in the path - return; - const AbstractPathPoint* const emp = &get_PathPointSet().get(jrev); - - // 4. Now find the indices of smp and emp in _currentPath. - int start=-1, end=-1; - for (int j = 0; j < path.getSize(); j++) { - if (path.get(j) == smp) - start = j; - if (path.get(j) == emp) - end = j; - } - if (start == -1 || end == -1) // this should never happen - return; - - // You now have indices into _currentPath (which is a list of - // all currently active points, including wrap points) that - // represent the used-defined range of points to consider for - // wrapping over this wrap object. Check each path segment in - // this range, choosing the best wrap as the one that changes - // the path segment length the least: - for (int pt1 = start; pt1 < end; pt1++) - { - const int pt2 = pt1 + 1; - - // As long as the two points are not auto wrap points on the - // same wrap object, check them for wrapping. - if ( path.get(pt1)->getWrapObject() == NULL - || path.get(pt2)->getWrapObject() == NULL - || ( path.get(pt1)->getWrapObject() - != path.get(pt2)->getWrapObject())) - { - WrapResult wr; - wr.startPoint = pt1; - wr.endPoint = pt2; - - result[i] = wo->wrapPathSegment(s, *path.get(pt1), - *path.get(pt2), ws, wr); - if (result[i] == WrapObject::mandatoryWrap) { - // "mandatoryWrap" means the path actually - // intersected the wrap object. In this case, you - // *must* choose this segment as the "best" one for - // wrapping. If the path has more than one segment - // that intersects the object, the first one is - // taken as the mandatory wrap (this is considered - // an ill-conditioned case). - best_wrap = wr; - // Store the best wrap in the pathWrap for possible - // use next time. - ws.setPreviousWrap(wr); - break; - } else if (result[i] == WrapObject::wrapped) { - // "wrapped" means the path segment was wrapped over - // the object, but you should consider the other - // segments as well to see if one - // wraps with a smaller length change. - double path_length_change = - calcPathLengthChange(s, *wo, wr, path); - if (path_length_change < min_length_change) - { - best_wrap = wr; - // Store the best wrap in the pathWrap for - // possible use next time - ws.setPreviousWrap(wr); - min_length_change = path_length_change; - } else { - // The wrap was not shorter than the current - // minimum, so just free the wrap points that - // were allocated. - wr.wrap_pts.setSize(0); - } - } else { - // Nothing to do. - } - } - } - - // Deallocate previous wrapping points if necessary. - ws.updWrapPoint2().getWrapPath().setSize(0); - - if (best_wrap.wrap_pts.getSize() == 0) { - ws.resetPreviousWrap(); - ws.updWrapPoint2().getWrapPath().setSize(0); - } else { - // If wrapping did occur, copy wrap info into the PathStruct. - ws.updWrapPoint1().getWrapPath().setSize(0); - - Array& wrapPath = ws.updWrapPoint2().getWrapPath(); - wrapPath = best_wrap.wrap_pts; - - // In OpenSim, all conversion to/from the wrap object's - // reference frame will be performed inside - // wrapPathSegment(). Thus, all points in this function will - // be in their respective body reference frames. - // for (j = 0; j < wrapPath.getSize(); j++){ - // convert_from_wrap_object_frame(wo, wrapPath.get(j)); - // convert(ms->modelnum, wrapPath.get(j), wo->segment, - // ms->ground_segment); - // } - - ws.updWrapPoint1().setWrapLength(0.0); - ws.updWrapPoint2().setWrapLength(best_wrap.wrap_path_length); - - ws.updWrapPoint1().setLocation(best_wrap.r1); - ws.updWrapPoint2().setLocation(best_wrap.r2); - - // Now insert the two new wrapping points into mp[] array. - path.insert(best_wrap.endPoint, &ws.updWrapPoint1()); - path.insert(best_wrap.endPoint + 1, &ws.updWrapPoint2()); - } - } - } - - const double length = calcLengthAfterPathComputation(s, path); - if (std::abs(length - last_length) < 0.0005) { - break; - } else { - last_length = length; - } - - if (kk == 0 && get_PathWrapSet().getSize() > 1) { - // If the first wrap was a no wrap, and the second was a no wrap - // because a point was inside the object, switch the order of - // the first two objects and try again. - if ( result[0] == WrapObject::noWrap - && result[1] == WrapObject::insideRadius) - { - order[0] = 1; - order[1] = 0; - - // remove wrap object 0 from the list of path points - PathWrap& ws = get_PathWrapSet().get(0); - for (int j = 0; j < path.getSize(); j++) { - if (path.get(j) == &ws.updWrapPoint1()) { - path.remove(j); // remove the first wrap point - path.remove(j); // remove the second wrap point - break; - } - } - } - } - } -} - -//_____________________________________________________________________________ -/* - * _calc_path_length_change - given the output of a successful path wrap - * over a wrap object, determine the percent change in length of the - * path segment incurred by wrapping. - */ -double GeometryPath:: -calcPathLengthChange(const SimTK::State& s, const WrapObject& wo, - const WrapResult& wr, const Array& path) const -{ - const AbstractPathPoint* pt1 = path.get(wr.startPoint); - const AbstractPathPoint* pt2 = path.get(wr.endPoint); - - double straight_length = pt1->calcDistanceBetween(s, *pt2); - - double wrap_length = pt1->calcDistanceBetween(s, wo.getFrame(), wr.r1); - wrap_length += wr.wrap_path_length; - wrap_length += pt2->calcDistanceBetween(s, wo.getFrame(), wr.r2); - - return wrap_length - straight_length; // return absolute diff, not relative -} - -//_____________________________________________________________________________ -/* - * Compute the total length of the path. This function - * assumes that the path has already been updated. - */ -double GeometryPath:: -calcLengthAfterPathComputation(const SimTK::State& s, - const Array& currentPath) const -{ - double length = 0.0; - - for (int i = 0; i < currentPath.getSize() - 1; i++) { - const AbstractPathPoint* p1 = currentPath[i]; - const AbstractPathPoint* p2 = currentPath[i+1]; - - // If both points are wrap points on the same wrap object, then this - // path segment wraps over the surface of a wrap object, so just add in - // the pre-calculated length. - if ( p1->getWrapObject() - && p2->getWrapObject() - && p1->getWrapObject() == p2->getWrapObject()) - { - const PathWrapPoint* smwp = dynamic_cast(p2); - if (smwp) - length += smwp->getWrapLength(); - } else { - length += p1->calcDistanceBetween(s, *p2); - } - } - - setLength(s,length); - return( length ); -} - //_____________________________________________________________________________ // Override default implementation by object to intercept and fix the XML node // underneath the model to match current version. diff --git a/OpenSim/Simulation/Model/GeometryPath.h b/OpenSim/Simulation/Model/GeometryPath.h index 3b5d14650a..6b50fb93d0 100644 --- a/OpenSim/Simulation/Model/GeometryPath.h +++ b/OpenSim/Simulation/Model/GeometryPath.h @@ -83,7 +83,8 @@ OpenSim_DECLARE_ABSTRACT_OBJECT(GeometryPath, ModelComponent); OpenSim_DECLARE_UNNAMED_PROPERTY(Appearance, "Default appearance attributes for this GeometryPath"); -private: +// from private to public because now required in PBP +public: OpenSim_DECLARE_UNNAMED_PROPERTY(PathPointSet, "The set of points defining the path"); @@ -109,34 +110,9 @@ OpenSim_DECLARE_ABSTRACT_OBJECT(GeometryPath, ModelComponent); //============================================================================= public: GeometryPath(); - - const PathPointSet& getPathPointSet() const { return get_PathPointSet(); } - void setPathPointSet(const PathPointSet& pps) { upd_PathPointSet() = pps; } - PathPointSet& updPathPointSet() { return upd_PathPointSet(); } - - const PathWrapSet& getWrapSet() const { return get_PathWrapSet(); } - void setPathWrapSet(const PathWrapSet& pws) { upd_PathWrapSet() = pws; } - PathWrapSet& updWrapSet() { return upd_PathWrapSet(); } - void addPathWrap(WrapObject& aWrapObject); - //-------------------------------------------------------------------------- // UTILITY //-------------------------------------------------------------------------- - const Array& getCurrentPath( const SimTK::State& s) const; - AbstractPathPoint* addPathPoint(const SimTK::State& s, int index, - const PhysicalFrame& frame); - AbstractPathPoint* appendNewPathPoint(const std::string& proposedName, - const PhysicalFrame& frame, const SimTK::Vec3& locationOnFrame); - bool canDeletePathPoint(int index); - bool deletePathPoint(const SimTK::State& s, int index); - bool replacePathPoint(const SimTK::State& s, - AbstractPathPoint* oldPathPoint, - AbstractPathPoint* newPathPoint); - - void moveUpPathWrap(const SimTK::State& s, int index); - void moveDownPathWrap(const SimTK::State& s, int index); - void deletePathWrap(const SimTK::State& s, int index); - /** If you call this prior to extendAddToSystem() it will be used to initialize the color cache variable. Otherwise %GeometryPath will choose its own default which varies depending on owner. **/ @@ -177,8 +153,8 @@ OpenSim_DECLARE_ABSTRACT_OBJECT(GeometryPath, ModelComponent); /** get the path as PointForceDirections directions, which can be used to apply tension to bodies the points are connected to.*/ - void getPointForceDirections(const SimTK::State& s, - OpenSim::Array *rPFDs) const; + virtual void getPointForceDirections(const SimTK::State& s, + OpenSim::Array *rPFDs) const = 0; /** add in the equivalent body and generalized forces to be applied to the multibody system resulting from a tension along the GeometryPath @@ -187,16 +163,17 @@ OpenSim_DECLARE_ABSTRACT_OBJECT(GeometryPath, ModelComponent); @param[in,out] bodyForces Vector of SpatialVec's (torque, force) on bodies @param[in,out] mobilityForces Vector of generalized forces, one per mobility */ - void addInEquivalentForces(const SimTK::State& state, - const double& tension, - SimTK::Vector_& bodyForces, - SimTK::Vector& mobilityForces) const; + virtual void addInEquivalentForces(const SimTK::State& state, + const double& tension, + SimTK::Vector_& bodyForces, + SimTK::Vector& mobilityForces) const = 0; //-------------------------------------------------------------------------- // COMPUTATIONS //-------------------------------------------------------------------------- - virtual double computeMomentArm(const SimTK::State& s, const Coordinate& aCoord) const = 0; + virtual double computeMomentArm(const SimTK::State& s, + const Coordinate& aCoord) const = 0; //-------------------------------------------------------------------------- // SCALING @@ -224,36 +201,71 @@ OpenSim_DECLARE_ABSTRACT_OBJECT(GeometryPath, ModelComponent); void extendInitStateFromProperties(SimTK::State& s) const override; void extendAddToSystem(SimTK::MultibodySystem& system) const override; - // Visual support GeometryPath drawing in SimTK visualizer. - void generateDecorations( - bool fixed, - const ModelDisplayHints& hints, - const SimTK::State& state, - SimTK::Array_& appendToThis) const - override; - void extendFinalizeFromProperties() override; protected: + virtual void computePath(const SimTK::State& s ) const = 0; - void computePath(const SimTK::State& s ) const; - void computeLengtheningSpeed(const SimTK::State& s) const; - void applyWrapObjects(const SimTK::State& s, Array& path ) const; - double calcPathLengthChange(const SimTK::State& s, const WrapObject& wo, - const WrapResult& wr, - const Array& path) const; - double calcLengthAfterPathComputation - (const SimTK::State& s, const Array& currentPath) const; + virtual double calcLengthAfterPathComputation( + const SimTK::State& s, + const Array& currentPath) const = 0; + + virtual void generateDecorations( + bool fixed, + const ModelDisplayHints& hints, + const SimTK::State& state, + SimTK::Array_& appendToThis) const override = 0; void constructProperties(); - void namePathPoints(int aStartingIndex); - void placeNewPathPoint(const SimTK::State& s, SimTK::Vec3& aOffset, - int index, const PhysicalFrame& frame); //-------------------------------------------------------------------------- // Implement Object interface. //-------------------------------------------------------------------------- /** Override of the default implementation to account for versioning. */ - void updateFromXMLNode(SimTK::Xml::Element& aNode, int versionNumber = -1) override; + void updateFromXMLNode( + SimTK::Xml::Element& aNode, + int versionNumber = -1) override; + + + + +// related to pathpoints, so has to be removed in release +protected: + virtual double calcPathLengthChange(const SimTK::State& s, const WrapObject& wo, + const WrapResult& wr, + const Array& path) const = 0; + virtual void computeLengtheningSpeed(const SimTK::State& s) const = 0; + +public: + const PathPointSet& getPathPointSet() const { return get_PathPointSet(); } + void setPathPointSet(const PathPointSet& pps) { upd_PathPointSet() = pps; } + PathPointSet& updPathPointSet() { return upd_PathPointSet(); } + + const PathWrapSet& getWrapSet() const { return get_PathWrapSet(); } + void setPathWrapSet(const PathWrapSet& pws) { upd_PathWrapSet() = pws; } + PathWrapSet& updWrapSet() { return upd_PathWrapSet(); } + virtual void addPathWrap(WrapObject& aWrapObject) = 0; + +public: + virtual const Array& getCurrentPath( const SimTK::State& s) const = 0; + virtual AbstractPathPoint* addPathPoint(const SimTK::State& s, int index, + const PhysicalFrame& frame) = 0; + virtual AbstractPathPoint* appendNewPathPoint(const std::string& proposedName, + const PhysicalFrame& frame, const SimTK::Vec3& locationOnFrame) = 0; + virtual bool canDeletePathPoint(int index) = 0; + virtual bool deletePathPoint(const SimTK::State& s, int index) = 0; + virtual bool replacePathPoint(const SimTK::State& s, + AbstractPathPoint* oldPathPoint, + AbstractPathPoint* newPathPoint) = 0; + + virtual void moveUpPathWrap(const SimTK::State& s, int index) = 0; + virtual void moveDownPathWrap(const SimTK::State& s, int index) = 0; + virtual void deletePathWrap(const SimTK::State& s, int index) = 0; + + virtual void applyWrapObjects(const SimTK::State& s, Array& path ) const = 0; + + virtual void namePathPoints(int aStartingIndex) = 0; + virtual void placeNewPathPoint(const SimTK::State& s, SimTK::Vec3& aOffset, + int index, const PhysicalFrame& frame) = 0; //============================================================================= }; // END of class GeometryPath diff --git a/OpenSim/Simulation/Model/PointBasedPath.cpp b/OpenSim/Simulation/Model/PointBasedPath.cpp index 9c5c65f755..6da8622162 100644 --- a/OpenSim/Simulation/Model/PointBasedPath.cpp +++ b/OpenSim/Simulation/Model/PointBasedPath.cpp @@ -1,4 +1,10 @@ #include "PointBasedPath.h" +#include "GeometryPath.h" +#include "ConditionalPathPoint.h" +#include "MovingPathPoint.h" +#include "PointForceDirection.h" +#include "Model.h" +#include using namespace std; using namespace OpenSim; @@ -16,7 +22,7 @@ double PointBasedPath::getLength( const SimTK::State& s) const return getCacheVariableValue(s, _lengthCV); } -void PointBasedPath::setLength(const State &s, double length) const +void PointBasedPath::setLength(const SimTK::State &s, double length) const { setCacheVariableValue(s, _lengthCV, length); } @@ -28,18 +34,12 @@ double PointBasedPath::getLengtheningSpeed( const SimTK::State& s) const return getCacheVariableValue(s, _speedCV); } -void PointBasedPath::setLengtheningSpeed(const State &s, double speed) const +void PointBasedPath::setLengtheningSpeed(const SimTK::State &s, double speed) const { setCacheVariableValue(s, _speedCV, speed); } -//_____________________________________________________________________________ -/* - * Compute the path's moment arms for specified coordinate. - * - * @param aCoord, the coordinate - */ -double PointBasedPath::computeMomentArm(const State& s, +double PointBasedPath::computeMomentArm(const SimTK::State& s, const Coordinate& aCoord) const { if (!_maSolver) @@ -47,3 +47,946 @@ double PointBasedPath::computeMomentArm(const State& s, return _maSolver->solve(s, aCoord, *this); } + +//////////////////////////////// +// Directly from GeometryPath // +//////////////////////////////// +/* add in the equivalent spatial forces on bodies for an applied tension + along the GeometryPath to a set of bodyForces */ +void PointBasedPath::addInEquivalentForces(const SimTK::State& s, + const double& tension, + SimTK::Vector_& bodyForces, + SimTK::Vector& mobilityForces) const +{ + AbstractPathPoint* start = NULL; + AbstractPathPoint* end = NULL; + const SimTK::MobilizedBody* bo = NULL; + const SimTK::MobilizedBody* bf = NULL; + const Array& currentPath = getCurrentPath(s); + int np = currentPath.getSize(); + + const SimTK::SimbodyMatterSubsystem& matter = + getModel().getMatterSubsystem(); + + // start point, end point, direction, and force vectors in ground + Vec3 po(0), pf(0), dir(0), force(0); + // partial velocity of point in body expressed in ground + Vec3 dPodq_G(0), dPfdq_G(0); + + // gen force (torque) due to moving point under tension + double fo, ff; + + for (int i = 0; i < np-1; ++i) { + start = currentPath[i]; + end = currentPath[i+1]; + + bo = &start->getParentFrame().getMobilizedBody(); + bf = &end->getParentFrame().getMobilizedBody(); + + if (bo != bf) { + // Find the positions of start and end in the inertial frame. + po = start->getLocationInGround(s); + pf = end->getLocationInGround(s); + + // Form a vector from start to end, in the inertial frame. + dir = (pf - po); + + // Check that the two points are not coincident. + // This can happen due to infeasible wrapping of the path, + // when the origin or insertion enters the wrapping surface. + // This is a temporary fix, since the wrap algorithm should + // return NaN for the points and/or throw an Exception- aseth + if (dir.norm() < SimTK::SignificantReal){ + dir = dir*SimTK::NaN; + } + else{ + dir = dir.normalize(); + } + + force = tension*dir; + + const MovingPathPoint* mppo = + dynamic_cast(start); + + // do the same for the end point of this segment of the path + const MovingPathPoint* mppf = + dynamic_cast(end); + + // add in the tension point forces to body forces + if (mppo) {// moving path point location is a function of the state + // transform of the frame of the point to the base mobilized body + auto X_BF = mppo->getParentFrame().findTransformInBaseFrame(); + bo->applyForceToBodyPoint(s, X_BF*mppo->getLocation(s), force, + bodyForces); + } + else { + // transform of the frame of the point to the base mobilized body + auto X_BF = start->getParentFrame().findTransformInBaseFrame(); + bo->applyForceToBodyPoint(s, X_BF*start->getLocation(s), force, + bodyForces); + } + + if (mppf) {// moving path point location is a function of the state + // transform of the frame of the point to the base mobilized body + auto X_BF = mppf->getParentFrame().findTransformInBaseFrame(); + bf->applyForceToBodyPoint(s, X_BF*mppf->getLocation(s), -force, + bodyForces); + } + else { + // transform of the frame of the point to the base mobilized body + auto X_BF = end->getParentFrame().findTransformInBaseFrame(); + bf->applyForceToBodyPoint(s, X_BF*end->getLocation(s), -force, + bodyForces); + } + + // Now account for the work being done by virtue of the moving + // path point motion relative to the body it is on + if(mppo){ + // torque (genforce) contribution due to relative movement + // of a via point w.r.t. the body it is connected to. + dPodq_G = bo->expressVectorInGroundFrame(s, start->getdPointdQ(s)); + fo = ~dPodq_G*force; + + // get the mobilized body the coordinate is couple to. + const SimTK::MobilizedBody& mpbod = + matter.getMobilizedBody(mppo->getXCoordinate().getBodyIndex()); + + // apply the generalized (mobility) force to the coordinate's body + mpbod.applyOneMobilityForce(s, + mppo->getXCoordinate().getMobilizerQIndex(), + fo, mobilityForces); + } + + if(mppf){ + dPfdq_G = bf->expressVectorInGroundFrame(s, end->getdPointdQ(s)); + ff = ~dPfdq_G*(-force); + + // get the mobilized body the coordinate is couple to. + const SimTK::MobilizedBody& mpbod = + matter.getMobilizedBody(mppf->getXCoordinate().getBodyIndex()); + + mpbod.applyOneMobilityForce(s, + mppf->getXCoordinate().getMobilizerQIndex(), + ff, mobilityForces); + } + } + } +} + +// get the path as PointForceDirections directions +// CAUTION: the return points are heap allocated; you must delete them yourself! +// (TODO: that is really lame) +void PointBasedPath:: +getPointForceDirections(const SimTK::State& s, + OpenSim::Array *rPFDs) const +{ + int i; + AbstractPathPoint* start; + AbstractPathPoint* end; + const OpenSim::PhysicalFrame* startBody; + const OpenSim::PhysicalFrame* endBody; + const Array& currentPath = getCurrentPath(s); + + int np = currentPath.getSize(); + rPFDs->ensureCapacity(np); + + for (i = 0; i < np; i++) { + PointForceDirection *pfd = + new PointForceDirection(currentPath[i]->getLocation(s), + currentPath[i]->getParentFrame(), Vec3(0)); + rPFDs->append(pfd); + } + + for (i = 0; i < np-1; i++) { + start = currentPath[i]; + end = currentPath[i+1]; + startBody = &start->getParentFrame(); + endBody = &end->getParentFrame(); + + if (startBody != endBody) + { + Vec3 posStart, posEnd; + Vec3 direction(0); + + // Find the positions of start and end in the inertial frame. + //engine.getPosition(s, start->getParentFrame(), start->getLocation(), posStart); + posStart = start->getLocationInGround(s); + + //engine.getPosition(s, end->getParentFrame(), end->getLocation(), posEnd); + posEnd = end->getLocationInGround(s); + + // Form a vector from start to end, in the inertial frame. + direction = (posEnd - posStart); + + // Check that the two points are not coincident. + // This can happen due to infeasible wrapping of the path, + // when the origin or insertion enters the wrapping surface. + // This is a temporary fix, since the wrap algorithm should + // return NaN for the points and/or throw an Exception- aseth + if (direction.norm() < SimTK::SignificantReal){ + direction = direction*SimTK::NaN; + } + else{ + direction = direction.normalize(); + } + + // Get resultant direction at each point + rPFDs->get(i)->addToDirection(direction); + rPFDs->get(i+1)->addToDirection(-direction); + } + } +} + +//_____________________________________________________________________________ +/* + * Calculate the current path. + */ +void PointBasedPath::computePath(const SimTK::State& s) const +{ + if (isCacheVariableValid(s, _currentPathCV)) { + return; + } + + // Clear the current path. + Array& currentPath = updCacheVariableValue(s, _currentPathCV); + currentPath.setSize(0); + + // Add the active fixed and moving via points to the path. + for (int i = 0; i < get_PathPointSet().getSize(); i++) { + if (get_PathPointSet()[i].isActive(s)) + currentPath.append(&get_PathPointSet()[i]); // <--- !!!!BAD + } + + // Use the current path so far to check for intersection with wrap objects, + // which may add additional points to the path. + applyWrapObjects(s, currentPath); + calcLengthAfterPathComputation(s, currentPath); + + markCacheVariableValid(s, _currentPathCV); +} + +//_____________________________________________________________________________ +/* + * Compute lengthening speed of the path. + */ +void PointBasedPath::computeLengtheningSpeed(const SimTK::State& s) const +{ + if (isCacheVariableValid(s, _speedCV)) { + return; + } + + const Array& currentPath = getCurrentPath(s); + + double speed = 0.0; + + for (int i = 0; i < currentPath.getSize() - 1; i++) { + speed += currentPath[i]->calcSpeedBetween(s, *currentPath[i+1]); + } + + setLengtheningSpeed(s, speed); +} + +//_____________________________________________________________________________ +/* + * _calc_path_length_change - given the output of a successful path wrap + * over a wrap object, determine the percent change in length of the + * path segment incurred by wrapping. + */ +double PointBasedPath:: +calcPathLengthChange(const SimTK::State& s, const WrapObject& wo, + const WrapResult& wr, const Array& path) const +{ + const AbstractPathPoint* pt1 = path.get(wr.startPoint); + const AbstractPathPoint* pt2 = path.get(wr.endPoint); + + double straight_length = pt1->calcDistanceBetween(s, *pt2); + + double wrap_length = pt1->calcDistanceBetween(s, wo.getFrame(), wr.r1); + wrap_length += wr.wrap_path_length; + wrap_length += pt2->calcDistanceBetween(s, wo.getFrame(), wr.r2); + + return wrap_length - straight_length; // return absolute diff, not relative +} + +//_____________________________________________________________________________ +/* + * Compute the total length of the path. This function + * assumes that the path has already been updated. + */ +double PointBasedPath:: +calcLengthAfterPathComputation(const SimTK::State& s, + const Array& currentPath) const +{ + double length = 0.0; + + for (int i = 0; i < currentPath.getSize() - 1; i++) { + const AbstractPathPoint* p1 = currentPath[i]; + const AbstractPathPoint* p2 = currentPath[i+1]; + + // If both points are wrap points on the same wrap object, then this + // path segment wraps over the surface of a wrap object, so just add in + // the pre-calculated length. + if ( p1->getWrapObject() + && p2->getWrapObject() + && p1->getWrapObject() == p2->getWrapObject()) + { + const PathWrapPoint* smwp = dynamic_cast(p2); + if (smwp) + length += smwp->getWrapLength(); + } else { + length += p1->calcDistanceBetween(s, *p2); + } + } + + setLength(s,length); + return( length ); +} + +//------------------------------------------------------------------------------ +// GENERATE DECORATIONS +//------------------------------------------------------------------------------ +// The GeometryPath takes care of drawing itself here, using information it +// can extract from the supplied state, including position information and +// color information that may have been calculated as late as Stage::Dynamics. +// For example, muscles may want the color to reflect activation level and +// other path-using components might want to use forces (tension). We will +// ensure that the state has been realized to Stage::Dynamics before looking +// at it. (It is only guaranteed to be at Stage::Position here.) +void PointBasedPath:: +generateDecorations(bool fixed, const ModelDisplayHints& hints, + const SimTK::State& state, + SimTK::Array_& appendToThis) const +{ + // There is no fixed geometry to generate here. + if (fixed) { return; } + + const Array& pathPoints = getCurrentPath(state); + + assert(pathPoints.size() > 1); + + const AbstractPathPoint* lastPoint = pathPoints[0]; + MobilizedBodyIndex mbix(0); + + Vec3 lastPos = lastPoint->getLocationInGround(state); + if (hints.get_show_path_points()) + DefaultGeometry::drawPathPoint(mbix, lastPos, getColor(state), appendToThis); + + Vec3 pos; + + for (int i = 1; i < pathPoints.getSize(); ++i) { + AbstractPathPoint* point = pathPoints[i]; + PathWrapPoint* pwp = dynamic_cast(point); + + if (pwp) { + // A PathWrapPoint provides points on the wrapping surface as Vec3s + Array& surfacePoints = pwp->getWrapPath(); + // The surface points are expressed w.r.t. the wrap surface's body frame. + // Transform the surface points into the ground reference frame to draw + // the surface point as the wrapping portion of the GeometryPath + const Transform& X_BG = pwp->getParentFrame().getTransformInGround(state); + // Cycle through each surface point and draw it the Ground frame + for (int j = 0; jgetLocationInGround(state); + if (hints.get_show_path_points()) + DefaultGeometry::drawPathPoint(mbix, pos, getColor(state), + appendToThis); + // Line segments will be in ground frame + appendToThis.push_back(DecorativeLine(lastPos, pos) + .setLineThickness(4) + .setColor(getColor(state)).setBodyId(0).setIndexOnBody(i)); + lastPos = pos; + } + } +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + +//_____________________________________________________________________________ +/* + * Create a new wrap instance and add it to the set. + * + * @param aWrapObject The wrap object to use in the new wrap instance. + */ +void PointBasedPath::addPathWrap(WrapObject& aWrapObject) +{ + PathWrap* newWrap = new PathWrap(); + newWrap->setWrapObject(aWrapObject); + newWrap->setMethod(PathWrap::hybrid); + upd_PathWrapSet().adoptAndAppend(newWrap); + finalizeFromProperties(); +} + +//_____________________________________________________________________________ +/* + * get the current path of the path + * + * @return The array of currently active path points. + * + */ +const OpenSim::Array & PointBasedPath:: +getCurrentPath(const SimTK::State& s) const +{ + computePath(s); // compute checks if path needs to be recomputed + return getCacheVariableValue< Array >(s, "current_path"); +} + +//_____________________________________________________________________________ +/* + * Add a new path point, with default location, to the path. + * + * @param aIndex The position in the pathPointSet to put the new point in. + * @param frame The frame to attach the point to. + * @return Pointer to the newly created path point. + */ +AbstractPathPoint* PointBasedPath:: +addPathPoint(const SimTK::State& s, int aIndex, const PhysicalFrame& frame) +{ + PathPoint* newPoint = new PathPoint(); + newPoint->setParentFrame(frame); + Vec3 newLocation(0.0); + // Note: placeNewPathPoint() returns a location by reference. + // It computes a new location according to the index where the new path point + // will be inserted along the path(among the other path points). + placeNewPathPoint(s, newLocation, aIndex, frame); + // Now set computed new location into the newPoint + newPoint->setLocation(newLocation); + upd_PathPointSet().insert(aIndex, newPoint); + + // Rename the path points starting at this new one. + namePathPoints(aIndex); + + // Update start point and end point in the wrap instances so that they + // refer to the same path points they did before the new point + // was added. These indices are 1-based. + aIndex++; + for (int i=0; isetParentFrame(frame); + newPoint->setName(proposedName); + newPoint->setLocation(aPositionOnBody); + upd_PathPointSet().adoptAndAppend(newPoint); + + return newPoint; +} + +//_____________________________________________________________________________ +/* + * See if a path point can be deleted. All paths must have at least two + * active path points to define the path. + * + * @param aIndex The index of the point to delete. + * @return Whether or not the point can be deleted. + */ +bool PointBasedPath::canDeletePathPoint( int aIndex) +{ + // A path point can be deleted only if there would remain + // at least two other fixed points. + int numOtherFixedPoints = 0; + for (int i = 0; i < get_PathPointSet().getSize(); i++) { + if (i != aIndex) { + if (!( get_PathPointSet().get(i).getConcreteClassName() + ==("ConditionalPathPoint"))) + numOtherFixedPoints++; + } + } + + if (numOtherFixedPoints >= 2) + return true; + + return false; +} + +//_____________________________________________________________________________ +/* + * Delete a path point. + * + * @param aIndex The index of the point to delete. + * @return Whether or not the point was deleted. + */ +bool PointBasedPath::deletePathPoint(const SimTK::State& s, int aIndex) +{ + if (canDeletePathPoint(aIndex) == false) + return false; + + upd_PathPointSet().remove(aIndex); + + // rename the path points starting at the deleted position + namePathPoints(aIndex); + + // Update start point and end point in the wrap instances so that they + // refer to the same path points they did before the point was + // deleted. These indices are 1-based. If the point deleted is start + // point or end point, the path wrap range is made smaller by one point. + aIndex++; + for (int i=0; i get_PathPointSet().getSize())) + get_PathWrapSet().get(i).setStartPoint(s, startPoint - 1); + + if ( endPoint > 1 + && aIndex <= endPoint + && ( (endPoint > startPoint) + || (endPoint > get_PathPointSet().getSize()))) + get_PathWrapSet().get(i).setEndPoint(s, endPoint - 1); + } + + return true; +} + +//_____________________________________________________________________________ +/* + * Replace a path point in the set with another point. The new one is made a + * member of all the same groups as the old one, and is inserted in the same + * place the old one occupied. + * + * @param aOldPathPoint Path point to remove. + * @param aNewPathPoint Path point to add. + */ +bool PointBasedPath:: +replacePathPoint(const SimTK::State& s, AbstractPathPoint* aOldPathPoint, + AbstractPathPoint* aNewPathPoint) +{ + if (aOldPathPoint != NULL && aNewPathPoint != NULL) { + int count = 0; + int index = get_PathPointSet().getIndex(aOldPathPoint); + // If you're switching from non-via to via, check to make sure that the + // path will be left with at least 2 non-via points. + ConditionalPathPoint* oldVia = + dynamic_cast(aOldPathPoint); + ConditionalPathPoint* newVia = + dynamic_cast(aNewPathPoint); + if (oldVia == NULL && newVia != NULL) { + for (int i=0; i + (&get_PathPointSet().get(i)) == NULL) + count++; + } + } + } else { + count = 2; + } + if (count >= 2 && index >= 0) { + upd_PathPointSet().set(index, aNewPathPoint, true); + //computePath(s); + return true; + } + } + return false; +} + +//_____________________________________________________________________________ +/* + * Move a wrap instance up in the list. Changing the order of wrap instances for + * a path may affect how the path wraps over the wrap objects. + * + * @param aIndex The index of the wrap instance to move up. + */ +void PointBasedPath::moveUpPathWrap(const SimTK::State& s, int aIndex) +{ + if (aIndex > 0) { + // Make sure wrap object is not deleted by remove(). + upd_PathWrapSet().setMemoryOwner(false); + + PathWrap& wrap = get_PathWrapSet().get(aIndex); + upd_PathWrapSet().remove(aIndex); + upd_PathWrapSet().insert(aIndex - 1, &wrap); + upd_PathWrapSet().setMemoryOwner(true); + } +} + +//_____________________________________________________________________________ +/* + * Move a wrap instance down in the list. Changing the order of wrap instances + * for a path may affect how the path wraps over the wrap objects. + * + * @param aIndex The index of the wrap instance to move down. + */ +void PointBasedPath::moveDownPathWrap(const SimTK::State& s, int aIndex) +{ + if (aIndex < get_PathWrapSet().getSize() - 1) { + // Make sure wrap object is not deleted by remove(). + upd_PathWrapSet().setMemoryOwner(false); + + PathWrap& wrap = get_PathWrapSet().get(aIndex); + upd_PathWrapSet().remove(aIndex); + upd_PathWrapSet().insert(aIndex + 1, &wrap); + upd_PathWrapSet().setMemoryOwner(true); + } +} + +//_____________________________________________________________________________ +/* + * Delete a wrap instance. + * + * @param aIndex The index of the wrap instance to delete. + */ +void PointBasedPath::deletePathWrap(const SimTK::State& s, int aIndex) +{ + upd_PathWrapSet().remove(aIndex); + +} + +//_____________________________________________________________________________ +/* + * Apply the wrap objects to the current path. + */ +void PointBasedPath:: +applyWrapObjects(const SimTK::State& s, Array& path) const +{ + if (get_PathWrapSet().getSize() < 1) + return; + + WrapResult best_wrap; + Array result, order; + + result.setSize(get_PathWrapSet().getSize()); + order.setSize(get_PathWrapSet().getSize()); + + // Set the initial order to be the order they are listed in the path. + for (int i = 0; i < get_PathWrapSet().getSize(); i++) + order[i] = i; + + // If there is only one wrap object, calculate the wrapping only once. + // If there are two or more objects, perform up to 8 iterations where + // the result from one wrap object is used as the starting point for + // the next wrap. + const int maxIterations = get_PathWrapSet().getSize() < 2 ? 1 : 8; + double last_length = SimTK::Infinity; + for (int kk = 0; kk < maxIterations; kk++) + { + for (int i = 0; i < get_PathWrapSet().getSize(); i++) + { + result[i] = 0; + PathWrap& ws = get_PathWrapSet().get(order[i]); + const WrapObject* wo = ws.getWrapObject(); + best_wrap.wrap_pts.setSize(0); + double min_length_change = SimTK::Infinity; + + // First remove this object's wrapping points from the current path. + for (int j = 0; j get_active()) { + // startPoint and endPoint in wrapStruct represent the + // user-defined starting and ending points in the array of path + // points that should be considered for wrapping. These indices + // take into account via points, whether or not they are active. + // Thus they are indices into mp_orig[], not mp[] (also, mp[] + // may contain wrapping points from previous wrap objects, which + // would mess up the starting and ending indices). But the goal + // is to find starting and ending indices in mp[] to consider + // for wrapping over this wrap object. Here is how that is done: + + // 1. startPoint and endPoint are 1-based, so subtract 1 from + // them to get indices into get_PathPointSet(). -1 (or any value + // less than 1) means use the first (or last) point. + const int wrapStart = (ws.getStartPoint() < 1 + ? 0 + : ws.getStartPoint() - 1); + const int wrapEnd = (ws.getEndPoint() < 1 + ? get_PathPointSet().getSize() - 1 + : ws.getEndPoint() - 1); + + // 2. Scan forward from wrapStart in get_PathPointSet() to find + // the first point that is active. Store a pointer to it (smp). + int jfwd = wrapStart; + for (; jfwd <= wrapEnd; jfwd++) + if (get_PathPointSet().get(jfwd).isActive(s)) + break; + if (jfwd > wrapEnd) // there are no active points in the path + return; + const AbstractPathPoint* const smp = &get_PathPointSet().get(jfwd); + + // 3. Scan backwards from wrapEnd in get_PathPointSet() to find + // the last point that is active. Store a pointer to it (emp). + int jrev = wrapEnd; + for (; jrev >= wrapStart; jrev--) + if (get_PathPointSet().get(jrev).isActive(s)) + break; + if (jrev < wrapStart) // there are no active points in the path + return; + const AbstractPathPoint* const emp = &get_PathPointSet().get(jrev); + + // 4. Now find the indices of smp and emp in _currentPath. + int start=-1, end=-1; + for (int j = 0; j < path.getSize(); j++) { + if (path.get(j) == smp) + start = j; + if (path.get(j) == emp) + end = j; + } + if (start == -1 || end == -1) // this should never happen + return; + + // You now have indices into _currentPath (which is a list of + // all currently active points, including wrap points) that + // represent the used-defined range of points to consider for + // wrapping over this wrap object. Check each path segment in + // this range, choosing the best wrap as the one that changes + // the path segment length the least: + for (int pt1 = start; pt1 < end; pt1++) + { + const int pt2 = pt1 + 1; + + // As long as the two points are not auto wrap points on the + // same wrap object, check them for wrapping. + if ( path.get(pt1)->getWrapObject() == NULL + || path.get(pt2)->getWrapObject() == NULL + || ( path.get(pt1)->getWrapObject() + != path.get(pt2)->getWrapObject())) + { + WrapResult wr; + wr.startPoint = pt1; + wr.endPoint = pt2; + + result[i] = wo->wrapPathSegment(s, *path.get(pt1), + *path.get(pt2), ws, wr); + if (result[i] == WrapObject::mandatoryWrap) { + // "mandatoryWrap" means the path actually + // intersected the wrap object. In this case, you + // *must* choose this segment as the "best" one for + // wrapping. If the path has more than one segment + // that intersects the object, the first one is + // taken as the mandatory wrap (this is considered + // an ill-conditioned case). + best_wrap = wr; + // Store the best wrap in the pathWrap for possible + // use next time. + ws.setPreviousWrap(wr); + break; + } else if (result[i] == WrapObject::wrapped) { + // "wrapped" means the path segment was wrapped over + // the object, but you should consider the other + // segments as well to see if one + // wraps with a smaller length change. + double path_length_change = + calcPathLengthChange(s, *wo, wr, path); + if (path_length_change < min_length_change) + { + best_wrap = wr; + // Store the best wrap in the pathWrap for + // possible use next time + ws.setPreviousWrap(wr); + min_length_change = path_length_change; + } else { + // The wrap was not shorter than the current + // minimum, so just free the wrap points that + // were allocated. + wr.wrap_pts.setSize(0); + } + } else { + // Nothing to do. + } + } + } + + // Deallocate previous wrapping points if necessary. + ws.updWrapPoint2().getWrapPath().setSize(0); + + if (best_wrap.wrap_pts.getSize() == 0) { + ws.resetPreviousWrap(); + ws.updWrapPoint2().getWrapPath().setSize(0); + } else { + // If wrapping did occur, copy wrap info into the PathStruct. + ws.updWrapPoint1().getWrapPath().setSize(0); + + Array& wrapPath = ws.updWrapPoint2().getWrapPath(); + wrapPath = best_wrap.wrap_pts; + + // In OpenSim, all conversion to/from the wrap object's + // reference frame will be performed inside + // wrapPathSegment(). Thus, all points in this function will + // be in their respective body reference frames. + // for (j = 0; j < wrapPath.getSize(); j++){ + // convert_from_wrap_object_frame(wo, wrapPath.get(j)); + // convert(ms->modelnum, wrapPath.get(j), wo->segment, + // ms->ground_segment); + // } + + ws.updWrapPoint1().setWrapLength(0.0); + ws.updWrapPoint2().setWrapLength(best_wrap.wrap_path_length); + + ws.updWrapPoint1().setLocation(best_wrap.r1); + ws.updWrapPoint2().setLocation(best_wrap.r2); + + // Now insert the two new wrapping points into mp[] array. + path.insert(best_wrap.endPoint, &ws.updWrapPoint1()); + path.insert(best_wrap.endPoint + 1, &ws.updWrapPoint2()); + } + } + } + + const double length = calcLengthAfterPathComputation(s, path); + if (std::abs(length - last_length) < 0.0005) { + break; + } else { + last_length = length; + } + + if (kk == 0 && get_PathWrapSet().getSize() > 1) { + // If the first wrap was a no wrap, and the second was a no wrap + // because a point was inside the object, switch the order of + // the first two objects and try again. + if ( result[0] == WrapObject::noWrap + && result[1] == WrapObject::insideRadius) + { + order[0] = 1; + order[1] = 0; + + // remove wrap object 0 from the list of path points + PathWrap& ws = get_PathWrapSet().get(0); + for (int j = 0; j < path.getSize(); j++) { + if (path.get(j) == &ws.updWrapPoint1()) { + path.remove(j); // remove the first wrap point + path.remove(j); // remove the second wrap point + break; + } + } + } + } + } +} + +//_____________________________________________________________________________ +/* + * Name the path points based on their position in the set. To keep the + * names up to date, this method should be called every time the path changes. + * + * @param aStartingIndex The index of the first path point to name. + */ +void PointBasedPath::namePathPoints(int aStartingIndex) +{ + char indx[5]; + for (int i = aStartingIndex; i < get_PathPointSet().getSize(); i++) + { + sprintf(indx,"%d",i+1); + AbstractPathPoint& point = get_PathPointSet().get(i); + if (point.getName()=="" && hasOwner()) { + point.setName(getOwner().getName() + "-P" + indx); + } + } +} + +//_____________________________________________________________________________ +/* + * Determine an appropriate default XYZ location for a new path point. + * Note that this method is internal and should not be called directly on a new + * point as the point is not really added to the path (done in addPathPoint() + * instead) + * @param aOffset The XYZ location to be determined. + * @param aIndex The position in the pathPointSet to put the new point in. + * @param frame The body to attach the point to. + */ +void PointBasedPath:: +placeNewPathPoint(const SimTK::State& s, SimTK::Vec3& aOffset, int aIndex, + const PhysicalFrame& frame) +{ + // The location of the point is determined by moving a 'distance' from 'base' + // along a vector from 'start' to 'end.' 'base' is the existing path point + // that is in or closest to the index aIndex. 'start' and 'end' are existing + // path points--which ones depends on where the new point is being added. + // 'distance' is 0.5 for points added to the middle of a path (so the point + // appears halfway between the two adjacent points), and 0.2 for points that + // are added to either end of the path. If there is only one point in the + // path, the new point is put 0.01 units away in all three dimensions. + if (get_PathPointSet().getSize() > 1) { + int start, end, base; + double distance; + if (aIndex == 0) { + start = 1; + end = 0; + base = end; + distance = 0.2; + } else if (aIndex >= get_PathPointSet().getSize()) { + start = aIndex - 2; + end = aIndex - 1; + base = end; + distance = 0.2; + } else { + start = aIndex; + end = aIndex - 1; + base = start; + distance = 0.5; + } + + const Vec3 startPt = get_PathPointSet()[start].getLocation(s); + const Vec3 endPt = get_PathPointSet()[end].getLocation(s); + const Vec3 basePt = get_PathPointSet()[base].getLocation(s); + + Vec3 startPt2 = get_PathPointSet()[start].getParentFrame() + .findStationLocationInAnotherFrame(s, startPt, frame); + + Vec3 endPt2 = get_PathPointSet()[end].getParentFrame() + .findStationLocationInAnotherFrame(s, endPt, frame); + + aOffset = basePt + distance * (endPt2 - startPt2); + } else if (get_PathPointSet().getSize() == 1) { + aOffset= get_PathPointSet()[0].getLocation(s) + 0.01; + } + else { // first point, do nothing? + } +} + diff --git a/OpenSim/Simulation/Model/PointBasedPath.h b/OpenSim/Simulation/Model/PointBasedPath.h index a18b76cca8..07ec38604e 100644 --- a/OpenSim/Simulation/Model/PointBasedPath.h +++ b/OpenSim/Simulation/Model/PointBasedPath.h @@ -67,6 +67,66 @@ class OSIMSIMULATION_API PointBasedPath : public GeometryPath { double computeMomentArm(const SimTK::State& s, const Coordinate& aCoord) const override; + + + + + // From GeometryPath refactoring +public: + void addInEquivalentForces(const SimTK::State& state, + const double& tension, + SimTK::Vector_& bodyForces, + SimTK::Vector& mobilityForces) const; + + void getPointForceDirections(const SimTK::State& s, + OpenSim::Array *rPFDs) const; + +protected: + void computePath(const SimTK::State& s ) const; + + double calcLengthAfterPathComputation + (const SimTK::State& s, const Array& currentPath) const; + + void generateDecorations( + bool fixed, + const ModelDisplayHints& hints, + const SimTK::State& state, + SimTK::Array_& appendToThis) const + override; + + // From GeometryPath directly related to points + + +protected: + double calcPathLengthChange(const SimTK::State& s, const WrapObject& wo, + const WrapResult& wr, + const Array& path) const; + void computeLengtheningSpeed(const SimTK::State& s) const; + +public: + void addPathWrap(WrapObject& aWrapObject); + +private: + const Array& getCurrentPath( const SimTK::State& s) const; + AbstractPathPoint* addPathPoint(const SimTK::State& s, int index, + const PhysicalFrame& frame); + AbstractPathPoint* appendNewPathPoint(const std::string& proposedName, + const PhysicalFrame& frame, const SimTK::Vec3& locationOnFrame); + bool canDeletePathPoint(int index); + bool deletePathPoint(const SimTK::State& s, int index); + bool replacePathPoint(const SimTK::State& s, + AbstractPathPoint* oldPathPoint, + AbstractPathPoint* newPathPoint); + + void moveUpPathWrap(const SimTK::State& s, int index); + void moveDownPathWrap(const SimTK::State& s, int index); + void deletePathWrap(const SimTK::State& s, int index); + + void applyWrapObjects(const SimTK::State& s, Array& path ) const; + + void namePathPoints(int aStartingIndex); + void placeNewPathPoint(const SimTK::State& s, SimTK::Vec3& aOffset, + int index, const PhysicalFrame& frame); }; } From 2327c122bcb69e9fce31b000275edb6caa372e45 Mon Sep 17 00:00:00 2001 From: joris997 Date: Tue, 8 Jun 2021 11:20:43 +0200 Subject: [PATCH 19/36] removing dependencies on GeometryPath, placing in fbp and pbp both --- CMakeLists.txt.user | 7030 ----------------- .../Simulation/Model/FunctionBasedPath.cpp | 8 +- OpenSim/Simulation/Model/Ligament.cpp | 3 +- OpenSim/Simulation/Model/PathActuator.cpp | 3 +- OpenSim/Simulation/Model/PathSpring.cpp | 3 +- 5 files changed, 13 insertions(+), 7034 deletions(-) delete mode 100644 CMakeLists.txt.user diff --git a/CMakeLists.txt.user b/CMakeLists.txt.user deleted file mode 100644 index 36bc3b3993..0000000000 --- a/CMakeLists.txt.user +++ /dev/null @@ -1,7030 +0,0 @@ - - - - - - EnvironmentId - {31e18788-fd95-4ab4-9268-c7219c462e0d} - - - ProjectExplorer.Project.ActiveTarget - 0 - - - ProjectExplorer.Project.EditorSettings - - true - false - true - - Cpp - - CppGlobal - - - - QmlJS - - QmlJSGlobal - - - 2 - UTF-8 - false - 4 - false - 80 - true - true - 1 - true - false - 0 - true - true - 0 - 8 - true - 1 - true - true - true - false - - - - ProjectExplorer.Project.PluginSettings - - - - ProjectExplorer.Project.Target.0 - - Imported Kit - Imported Kit - {9285dd56-50e7-4060-bd5b-1fccd3c864ca} - 0 - 0 - 0 - - - CMAKE_BUILD_TYPE:STRING=RelWithDebInfo - - /home/none/opensim/interpolation/RelWithDebInfo-build - - - - - install - - true - CMake Build - - CMakeProjectManager.MakeStep - - 1 - Build - - ProjectExplorer.BuildSteps.Build - - - - - - clean - - true - CMake Build - - CMakeProjectManager.MakeStep - - 1 - Clean - - ProjectExplorer.BuildSteps.Clean - - 2 - false - - Release with Debug Information - Release with Debug Information - CMakeProjectManager.CMakeBuildConfiguration - - 1 - - - 0 - Deploy - - ProjectExplorer.BuildSteps.Deploy - - 1 - Deploy locally - - ProjectExplorer.DefaultDeployConfiguration - - 1 - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testLepton - - - /home/none/opensim/interpolation/RelWithDebInfo-build - 2 - - testLepton - - CMakeProjectManager.CMakeRunConfiguration.testLepton - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testTRCFileAdapter - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testTRCFileAdapter - - CMakeProjectManager.CMakeRunConfiguration.testTRCFileAdapter - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testPath - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testPath - - CMakeProjectManager.CMakeRunConfiguration.testPath - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testInducedAccelerations - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testInducedAccelerations - - CMakeProjectManager.CMakeRunConfiguration.testInducedAccelerations - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testAnalyzeTool - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testAnalyzeTool - - CMakeProjectManager.CMakeRunConfiguration.testAnalyzeTool - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testForward - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testForward - - CMakeProjectManager.CMakeRunConfiguration.testForward - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testScale - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testScale - - CMakeProjectManager.CMakeRunConfiguration.testScale - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testLiveIK - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testLiveIK - - CMakeProjectManager.CMakeRunConfiguration.testLiveIK - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testIK - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testIK - - CMakeProjectManager.CMakeRunConfiguration.testIK - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testID - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testID - - CMakeProjectManager.CMakeRunConfiguration.testID - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCSingleMuscle - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCSingleMuscle - - CMakeProjectManager.CMakeRunConfiguration.testCMCSingleMuscle - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCEMGDrivenArm_Thelen - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCEMGDrivenArm_Thelen - - CMakeProjectManager.CMakeRunConfiguration.testCMCEMGDrivenArm_Thelen - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCTwoMusclesOnBlock - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCTwoMusclesOnBlock - - CMakeProjectManager.CMakeRunConfiguration.testCMCTwoMusclesOnBlock - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testRootSolver - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testRootSolver - - CMakeProjectManager.CMakeRunConfiguration.testRootSolver - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCEMGDrivenArm_Millard - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCEMGDrivenArm_Millard - - CMakeProjectManager.CMakeRunConfiguration.testCMCEMGDrivenArm_Millard - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCArm26_Millard - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCArm26_Millard - - CMakeProjectManager.CMakeRunConfiguration.testCMCArm26_Millard - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCGait10dof18musc - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCGait10dof18musc - - CMakeProjectManager.CMakeRunConfiguration.testCMCGait10dof18musc - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCSingleRigidTendonMuscle - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCSingleRigidTendonMuscle - - CMakeProjectManager.CMakeRunConfiguration.testCMCSingleRigidTendonMuscle - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCWithControlConstraintsGait2354 - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCWithControlConstraintsGait2354 - - CMakeProjectManager.CMakeRunConfiguration.testCMCWithControlConstraintsGait2354 - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCWithControlConstraintsRunningModel - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCWithControlConstraintsRunningModel - - CMakeProjectManager.CMakeRunConfiguration.testCMCWithControlConstraintsRunningModel - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCArm26_Thelen - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCArm26_Thelen - - CMakeProjectManager.CMakeRunConfiguration.testCMCArm26_Thelen - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testRRA - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testRRA - - CMakeProjectManager.CMakeRunConfiguration.testRRA - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testFunctionBasedPathConversion - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testFunctionBasedPathConversion - - CMakeProjectManager.CMakeRunConfiguration.testFunctionBasedPathConversion - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - opensense - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - opensense - - CMakeProjectManager.CMakeRunConfiguration.opensense - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testFunctions - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testFunctions - - CMakeProjectManager.CMakeRunConfiguration.testFunctions - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testOpenSense - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testOpenSense - - CMakeProjectManager.CMakeRunConfiguration.testOpenSense - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - opensim-cmd - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - opensim-cmd - - CMakeProjectManager.CMakeRunConfiguration.opensim-cmd - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCommandLineInterface - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCommandLineInterface - - CMakeProjectManager.CMakeRunConfiguration.testCommandLineInterface - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testGCVSpline - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testGCVSpline - - CMakeProjectManager.CMakeRunConfiguration.testGCVSpline - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSerialization - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSerialization - - CMakeProjectManager.CMakeRunConfiguration.testSerialization - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testStorage - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testStorage - - CMakeProjectManager.CMakeRunConfiguration.testStorage - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testXsensDataReader - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testXsensDataReader - - CMakeProjectManager.CMakeRunConfiguration.testXsensDataReader - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testWrappingMath - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testWrappingMath - - CMakeProjectManager.CMakeRunConfiguration.testWrappingMath - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testTableProcessor - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testTableProcessor - - CMakeProjectManager.CMakeRunConfiguration.testTableProcessor - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testStatesTrajectory - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testStatesTrajectory - - CMakeProjectManager.CMakeRunConfiguration.testStatesTrajectory - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testFunctionAdapter - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testFunctionAdapter - - CMakeProjectManager.CMakeRunConfiguration.testFunctionAdapter - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testInverseKinematicsSolver - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testInverseKinematicsSolver - - CMakeProjectManager.CMakeRunConfiguration.testInverseKinematicsSolver - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testInitState - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testInitState - - CMakeProjectManager.CMakeRunConfiguration.testInitState - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testFrames - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testFrames - - CMakeProjectManager.CMakeRunConfiguration.testFrames - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testModelInterface - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testModelInterface - - CMakeProjectManager.CMakeRunConfiguration.testModelInterface - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testForces - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testForces - - CMakeProjectManager.CMakeRunConfiguration.testForces - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testAssemblySolver - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testAssemblySolver - - CMakeProjectManager.CMakeRunConfiguration.testAssemblySolver - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testManager - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testManager - - CMakeProjectManager.CMakeRunConfiguration.testManager - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMomentArms - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMomentArms - - CMakeProjectManager.CMakeRunConfiguration.testMomentArms - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testReportersWithModel - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testReportersWithModel - - CMakeProjectManager.CMakeRunConfiguration.testReportersWithModel - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testPoints - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testPoints - - CMakeProjectManager.CMakeRunConfiguration.testPoints - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testDataTable - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testDataTable - - CMakeProjectManager.CMakeRunConfiguration.testDataTable - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testContactGeometry - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testContactGeometry - - CMakeProjectManager.CMakeRunConfiguration.testContactGeometry - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testNestedModelComponents - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testNestedModelComponents - - CMakeProjectManager.CMakeRunConfiguration.testNestedModelComponents - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testPrescribedForce - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testPrescribedForce - - CMakeProjectManager.CMakeRunConfiguration.testPrescribedForce - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMuscleMetabolicsProbes - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMuscleMetabolicsProbes - - CMakeProjectManager.CMakeRunConfiguration.testMuscleMetabolicsProbes - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testProbes - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testProbes - - CMakeProjectManager.CMakeRunConfiguration.testProbes - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSimulationUtilities - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSimulationUtilities - - CMakeProjectManager.CMakeRunConfiguration.testSimulationUtilities - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testJoints - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testJoints - - CMakeProjectManager.CMakeRunConfiguration.testJoints - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testConstraints - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testConstraints - - CMakeProjectManager.CMakeRunConfiguration.testConstraints - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSerializableMuscleCurves - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSerializableMuscleCurves - - CMakeProjectManager.CMakeRunConfiguration.testSerializableMuscleCurves - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testActuators - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testActuators - - CMakeProjectManager.CMakeRunConfiguration.testActuators - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testAPDMDataReader - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testAPDMDataReader - - CMakeProjectManager.CMakeRunConfiguration.testAPDMDataReader - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMuscleFirstOrderActivationDynamicModel - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMuscleFirstOrderActivationDynamicModel - - CMakeProjectManager.CMakeRunConfiguration.testMuscleFirstOrderActivationDynamicModel - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testModelProcessor - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testModelProcessor - - CMakeProjectManager.CMakeRunConfiguration.testModelProcessor - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMuscleFixedWidthPennationModel - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMuscleFixedWidthPennationModel - - CMakeProjectManager.CMakeRunConfiguration.testMuscleFixedWidthPennationModel - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testDeGrooteFregly2016Muscle - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testDeGrooteFregly2016Muscle - - CMakeProjectManager.CMakeRunConfiguration.testDeGrooteFregly2016Muscle - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMuscles - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMuscles - - CMakeProjectManager.CMakeRunConfiguration.testMuscles - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testOutputReporter - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testOutputReporter - - CMakeProjectManager.CMakeRunConfiguration.testOutputReporter - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testExternalLoads - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testExternalLoads - - CMakeProjectManager.CMakeRunConfiguration.testExternalLoads - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testControllers - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testControllers - - CMakeProjectManager.CMakeRunConfiguration.testControllers - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testModelCopy - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testModelCopy - - CMakeProjectManager.CMakeRunConfiguration.testModelCopy - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSerializeOpenSimObjects - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSerializeOpenSimObjects - - CMakeProjectManager.CMakeRunConfiguration.testSerializeOpenSimObjects - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testComponentInterface - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testComponentInterface - - CMakeProjectManager.CMakeRunConfiguration.testComponentInterface - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testVisualization - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testVisualization - - CMakeProjectManager.CMakeRunConfiguration.testVisualization - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoContact - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoContact - - CMakeProjectManager.CMakeRunConfiguration.testMocoContact - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoInverse - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoInverse - - CMakeProjectManager.CMakeRunConfiguration.testMocoInverse - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoMetabolics - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoMetabolics - - CMakeProjectManager.CMakeRunConfiguration.testMocoMetabolics - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoInterface - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoInterface - - CMakeProjectManager.CMakeRunConfiguration.testMocoInterface - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoConstraints - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoConstraints - - CMakeProjectManager.CMakeRunConfiguration.testMocoConstraints - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoImplicit - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoImplicit - - CMakeProjectManager.CMakeRunConfiguration.testMocoImplicit - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoAnalytic - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoAnalytic - - CMakeProjectManager.CMakeRunConfiguration.testMocoAnalytic - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoGoals - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoGoals - - CMakeProjectManager.CMakeRunConfiguration.testMocoGoals - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoActuators - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoActuators - - CMakeProjectManager.CMakeRunConfiguration.testMocoActuators - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testNCSpline - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testNCSpline - - CMakeProjectManager.CMakeRunConfiguration.testNCSpline - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoTrack - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoTrack - - CMakeProjectManager.CMakeRunConfiguration.testMocoTrack - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoParameters - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoParameters - - CMakeProjectManager.CMakeRunConfiguration.testMocoParameters - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleHopperDeviceAnswers - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleHopperDeviceAnswers - - CMakeProjectManager.CMakeRunConfiguration.exampleHopperDeviceAnswers - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleHopperDevice - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleHopperDevice - - CMakeProjectManager.CMakeRunConfiguration.exampleHopperDevice - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - example2DataTable - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - example2DataTable - - CMakeProjectManager.CMakeRunConfiguration.example2DataTable - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - example1DataTable - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - example1DataTable - - CMakeProjectManager.CMakeRunConfiguration.example1DataTable - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleTRCFileAdapter - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleTRCFileAdapter - - CMakeProjectManager.CMakeRunConfiguration.exampleTRCFileAdapter - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleSlidingMass - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleSlidingMass - - CMakeProjectManager.CMakeRunConfiguration.exampleSlidingMass - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleSlidingMassAdvanced - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleSlidingMassAdvanced - - CMakeProjectManager.CMakeRunConfiguration.exampleSlidingMassAdvanced - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleTracking - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleTracking - - CMakeProjectManager.CMakeRunConfiguration.exampleTracking - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSmoothSegmentedFunctionFactory - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSmoothSegmentedFunctionFactory - - CMakeProjectManager.CMakeRunConfiguration.testSmoothSegmentedFunctionFactory - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleMarkerTracking - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleMarkerTracking - - CMakeProjectManager.CMakeRunConfiguration.exampleMarkerTracking - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleHangingMuscle - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleHangingMuscle - - CMakeProjectManager.CMakeRunConfiguration.exampleHangingMuscle - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - example2DWalkingMetabolics - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - example2DWalkingMetabolics - - CMakeProjectManager.CMakeRunConfiguration.example2DWalkingMetabolics - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - example2DWalking - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - example2DWalking - - CMakeProjectManager.CMakeRunConfiguration.example2DWalking - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleMocoInverse - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleMocoInverse - - CMakeProjectManager.CMakeRunConfiguration.exampleMocoInverse - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleMocoTrack - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleMocoTrack - - CMakeProjectManager.CMakeRunConfiguration.exampleMocoTrack - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleMocoCustomEffortGoal - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleMocoCustomEffortGoal - - CMakeProjectManager.CMakeRunConfiguration.exampleMocoCustomEffortGoal - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleCustomImplicitAuxiliaryDynamics - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleCustomImplicitAuxiliaryDynamics - - CMakeProjectManager.CMakeRunConfiguration.exampleCustomImplicitAuxiliaryDynamics - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testComponents - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testComponents - - CMakeProjectManager.CMakeRunConfiguration.testComponents - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testAddComponents - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testAddComponents - - CMakeProjectManager.CMakeRunConfiguration.testAddComponents - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSTOFileAdapter - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSTOFileAdapter - - CMakeProjectManager.CMakeRunConfiguration.testSTOFileAdapter - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testControllerExample - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testControllerExample - - CMakeProjectManager.CMakeRunConfiguration.testControllerExample - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleController - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleController - - CMakeProjectManager.CMakeRunConfiguration.exampleController - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testExampleMain - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testExampleMain - - CMakeProjectManager.CMakeRunConfiguration.testExampleMain - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleMain - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleMain - - CMakeProjectManager.CMakeRunConfiguration.exampleMain - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testOptimizationExample - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testOptimizationExample - - CMakeProjectManager.CMakeRunConfiguration.testOptimizationExample - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleOptimization - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleOptimization - - CMakeProjectManager.CMakeRunConfiguration.exampleOptimization - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCustomActuatorExample - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCustomActuatorExample - - CMakeProjectManager.CMakeRunConfiguration.testCustomActuatorExample - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleCustomActuator - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleCustomActuator - - CMakeProjectManager.CMakeRunConfiguration.exampleCustomActuator - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMuscleExample - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMuscleExample - - CMakeProjectManager.CMakeRunConfiguration.testMuscleExample - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleMuscle - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleMuscle - - CMakeProjectManager.CMakeRunConfiguration.exampleMuscle - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMarkerData - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMarkerData - - CMakeProjectManager.CMakeRunConfiguration.testMarkerData - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSimpleOptimizationExample - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSimpleOptimizationExample - - CMakeProjectManager.CMakeRunConfiguration.testSimpleOptimizationExample - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleOptimizationSimple - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleOptimizationSimple - - CMakeProjectManager.CMakeRunConfiguration.exampleOptimizationSimple - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - checkEnvironment - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - checkEnvironment - - CMakeProjectManager.CMakeRunConfiguration.checkEnvironment - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testIterators - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testIterators - - CMakeProjectManager.CMakeRunConfiguration.testIterators - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testREADME - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testREADME - - CMakeProjectManager.CMakeRunConfiguration.testREADME - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testWrapping - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testWrapping - - CMakeProjectManager.CMakeRunConfiguration.testWrapping - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testExampleLuxoMuscle - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testExampleLuxoMuscle - - CMakeProjectManager.CMakeRunConfiguration.testExampleLuxoMuscle - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testBuildDynamicWalker - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testBuildDynamicWalker - - CMakeProjectManager.CMakeRunConfiguration.testBuildDynamicWalker - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testJointReactions - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testJointReactions - - CMakeProjectManager.CMakeRunConfiguration.testJointReactions - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testStaticOptimization - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testStaticOptimization - - CMakeProjectManager.CMakeRunConfiguration.testStaticOptimization - 3768 - false - true - false - false - true - - 123 - - - - ProjectExplorer.Project.TargetCount - 1 - - - ProjectExplorer.Project.Updater.FileVersion - 18 - - - Version - 18 - - diff --git a/OpenSim/Simulation/Model/FunctionBasedPath.cpp b/OpenSim/Simulation/Model/FunctionBasedPath.cpp index fad9e1cd98..e093d8fd0a 100644 --- a/OpenSim/Simulation/Model/FunctionBasedPath.cpp +++ b/OpenSim/Simulation/Model/FunctionBasedPath.cpp @@ -960,12 +960,18 @@ void OpenSim::FunctionBasedPath::addInEquivalentForces(const SimTK::State& s, double ma; double torqueOverCoord; + const SimTK::SimbodyMatterSubsystem& matter = + getModel().getMatterSubsystem(); + std::vector coords = _impl->interp.getCoords(); for (unsigned i=0; igetBodyIndex()), + SimTK::MobilizerUIndex(coords[i]->getMobilizerQIndex()), + torqueOverCoord,mobilityForces); } } diff --git a/OpenSim/Simulation/Model/Ligament.cpp b/OpenSim/Simulation/Model/Ligament.cpp index b2e5a9cef4..37eb830cc2 100644 --- a/OpenSim/Simulation/Model/Ligament.cpp +++ b/OpenSim/Simulation/Model/Ligament.cpp @@ -246,7 +246,8 @@ void Ligament::computeForce(const SimTK::State& s, setCacheVariableValue(s, _tensionCV, force); OpenSim::Array PFDs; - path.getPointForceDirections(s, &PFDs); +// path.getPointForceDirections(s, &PFDs); + path.addInEquivalentForces(s,force,bodyForces,generalizedForces); for (int i=0; i < PFDs.getSize(); i++) { applyForceToPoint(s, PFDs[i]->frame(), PFDs[i]->point(), diff --git a/OpenSim/Simulation/Model/PathActuator.cpp b/OpenSim/Simulation/Model/PathActuator.cpp index ed95c7e2c6..dee681ca29 100644 --- a/OpenSim/Simulation/Model/PathActuator.cpp +++ b/OpenSim/Simulation/Model/PathActuator.cpp @@ -178,7 +178,8 @@ void PathActuator::computeForce( const SimTK::State& s, const GeometryPath &path = getGeometryPath(); // compute path's lengthening speed if necessary - double speed = path.getLengtheningSpeed(s); + double speed = getGeometryPath().getLengtheningSpeed(s); +// double speed = path.getLengtheningSpeed(s); // the lengthening speed of this actuator is the "speed" of the actuator // used to compute power diff --git a/OpenSim/Simulation/Model/PathSpring.cpp b/OpenSim/Simulation/Model/PathSpring.cpp index 0beff29678..35bc2cc42a 100644 --- a/OpenSim/Simulation/Model/PathSpring.cpp +++ b/OpenSim/Simulation/Model/PathSpring.cpp @@ -208,7 +208,8 @@ void PathSpring::computeForce(const SimTK::State& s, const double& tension = getTension(s); OpenSim::Array PFDs; - path.getPointForceDirections(s, &PFDs); +// path.getPointForceDirections(s, &PFDs); + path.addInEquivalentForces(s,tension,bodyForces,generalizedForces); for (int i=0; i < PFDs.getSize(); i++) { applyForceToPoint(s, PFDs[i]->frame(), PFDs[i]->point(), From 977ba7a8b6648e2355af766f3cdb97d859d5aa48 Mon Sep 17 00:00:00 2001 From: joris997 Date: Wed, 23 Jun 2021 10:18:29 +0200 Subject: [PATCH 20/36] updates to FBP --- .../Analyze/test/subject01_walk1_grf.mot | 2 +- CMakeLists.txt.user | 7030 +++++++++++++++++ 2 files changed, 7031 insertions(+), 1 deletion(-) create mode 100644 CMakeLists.txt.user diff --git a/Applications/Analyze/test/subject01_walk1_grf.mot b/Applications/Analyze/test/subject01_walk1_grf.mot index 156b087e2d..d7ed49e99d 100644 --- a/Applications/Analyze/test/subject01_walk1_grf.mot +++ b/Applications/Analyze/test/subject01_walk1_grf.mot @@ -4,7 +4,7 @@ datarows 9009 range 0.000000 15.013300 endheader time ground_force_vx ground_force_vy ground_force_vz ground_force_px ground_force_py ground_force_pz l_ground_force_vx l_ground_force_vy l_ground_force_vz l_ground_force_px l_ground_force_py l_ground_force_pz ground_torque_x ground_torque_y ground_torque_z l_ground_torque_x l_ground_torque_y l_ground_torque_z - 0.00000000 101.51197668 745.46611415 -47.44870554 0.37898285 -0.00750000 0.12774652 17.26938127 20.49185173 -7.46930128 0.81009656 -0.00750000 -0.05354309 0.00000000 13.53783445 0.00000000 1.55503970 -0.75741936 6.88030347 + 0.00000000 101.51197668 745.46611415 -47.44870554 0.37898285 -0.00750000 0.12774652 17.26938127 20.49185173 -7.46930128 0.81009656 -0.00750000 -0.05354309 0.00000000 13.53783445 0.00000000 1.55503970 -0.75741936 6.88030347 0.00170000 103.20438764 743.09734128 -46.86966548 0.37809513 -0.00750000 0.12810137 18.91380164 28.77852948 -7.85752687 0.80990349 -0.00750000 -0.05269428 0.00000000 12.55074067 0.00000000 1.31259011 -0.63901732 6.11982231 0.00330000 104.88449762 740.71354924 -46.28801443 0.37719739 -0.00750000 0.12845514 20.50537239 37.07206456 -8.27207954 0.80968278 -0.00750000 -0.05191409 0.00000000 11.57152058 0.00000000 1.08561207 -0.52055993 5.37458208 0.00500000 106.53992033 738.29961538 -45.70129774 0.37628513 -0.00750000 0.12880460 21.99210933 45.37815047 -8.73769237 0.80943495 -0.00750000 -0.05120007 0.00000000 10.60988307 0.00000000 0.87630199 -0.40049053 4.65578420 diff --git a/CMakeLists.txt.user b/CMakeLists.txt.user new file mode 100644 index 0000000000..462a80c26c --- /dev/null +++ b/CMakeLists.txt.user @@ -0,0 +1,7030 @@ + + + + + + EnvironmentId + {31e18788-fd95-4ab4-9268-c7219c462e0d} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + true + false + 0 + true + true + 0 + 8 + true + 1 + true + true + true + false + + + + ProjectExplorer.Project.PluginSettings + + + + ProjectExplorer.Project.Target.0 + + Imported Kit + Imported Kit + {5ab61cc0-5ce1-464a-9515-d4ecbb0755d3} + 0 + 0 + 0 + + + CMAKE_BUILD_TYPE:STRING=RelWithDebInfo + + /home/none/opensim/interpolation/RelWithDebInfo-build + + + + + all + + true + CMake Build + + CMakeProjectManager.MakeStep + + 1 + Build + + ProjectExplorer.BuildSteps.Build + + + + + + clean + + true + CMake Build + + CMakeProjectManager.MakeStep + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release with Debug Information + Release with Debug Information + CMakeProjectManager.CMakeBuildConfiguration + + 1 + + + 0 + Deploy + + ProjectExplorer.BuildSteps.Deploy + + 1 + Deploy locally + + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testLepton + + + /home/none/opensim/interpolation/RelWithDebInfo-build + 2 + + testLepton + + CMakeProjectManager.CMakeRunConfiguration.testLepton + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testTRCFileAdapter + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testTRCFileAdapter + + CMakeProjectManager.CMakeRunConfiguration.testTRCFileAdapter + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testDataTable + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testDataTable + + CMakeProjectManager.CMakeRunConfiguration.testDataTable + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testInducedAccelerations + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testInducedAccelerations + + CMakeProjectManager.CMakeRunConfiguration.testInducedAccelerations + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testAnalyzeTool + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testAnalyzeTool + + CMakeProjectManager.CMakeRunConfiguration.testAnalyzeTool + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testForward + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testForward + + CMakeProjectManager.CMakeRunConfiguration.testForward + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testScale + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testScale + + CMakeProjectManager.CMakeRunConfiguration.testScale + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testLiveIK + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testLiveIK + + CMakeProjectManager.CMakeRunConfiguration.testLiveIK + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testIK + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testIK + + CMakeProjectManager.CMakeRunConfiguration.testIK + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testID + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testID + + CMakeProjectManager.CMakeRunConfiguration.testID + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCArm26_Millard + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCArm26_Millard + + CMakeProjectManager.CMakeRunConfiguration.testCMCArm26_Millard + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCArm26_Thelen + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCArm26_Thelen + + CMakeProjectManager.CMakeRunConfiguration.testCMCArm26_Thelen + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCEMGDrivenArm_Thelen + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCEMGDrivenArm_Thelen + + CMakeProjectManager.CMakeRunConfiguration.testCMCEMGDrivenArm_Thelen + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testRootSolver + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testRootSolver + + CMakeProjectManager.CMakeRunConfiguration.testRootSolver + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCGait10dof18musc + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCGait10dof18musc + + CMakeProjectManager.CMakeRunConfiguration.testCMCGait10dof18musc + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCSingleMuscle + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCSingleMuscle + + CMakeProjectManager.CMakeRunConfiguration.testCMCSingleMuscle + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCSingleRigidTendonMuscle + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCSingleRigidTendonMuscle + + CMakeProjectManager.CMakeRunConfiguration.testCMCSingleRigidTendonMuscle + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCTwoMusclesOnBlock + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCTwoMusclesOnBlock + + CMakeProjectManager.CMakeRunConfiguration.testCMCTwoMusclesOnBlock + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCEMGDrivenArm_Millard + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCEMGDrivenArm_Millard + + CMakeProjectManager.CMakeRunConfiguration.testCMCEMGDrivenArm_Millard + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCWithControlConstraintsGait2354 + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCWithControlConstraintsGait2354 + + CMakeProjectManager.CMakeRunConfiguration.testCMCWithControlConstraintsGait2354 + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCWithControlConstraintsRunningModel + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCWithControlConstraintsRunningModel + + CMakeProjectManager.CMakeRunConfiguration.testCMCWithControlConstraintsRunningModel + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testRRA + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testRRA + + CMakeProjectManager.CMakeRunConfiguration.testRRA + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testFunctionBasedPathConversion + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testFunctionBasedPathConversion + + CMakeProjectManager.CMakeRunConfiguration.testFunctionBasedPathConversion + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + opensense + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + opensense + + CMakeProjectManager.CMakeRunConfiguration.opensense + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testFunctions + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testFunctions + + CMakeProjectManager.CMakeRunConfiguration.testFunctions + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testOpenSense + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testOpenSense + + CMakeProjectManager.CMakeRunConfiguration.testOpenSense + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + opensim-cmd + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + opensim-cmd + + CMakeProjectManager.CMakeRunConfiguration.opensim-cmd + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCommandLineInterface + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCommandLineInterface + + CMakeProjectManager.CMakeRunConfiguration.testCommandLineInterface + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMarkerData + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMarkerData + + CMakeProjectManager.CMakeRunConfiguration.testMarkerData + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSmoothSegmentedFunctionFactory + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testSmoothSegmentedFunctionFactory + + CMakeProjectManager.CMakeRunConfiguration.testSmoothSegmentedFunctionFactory + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testNCSpline + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testNCSpline + + CMakeProjectManager.CMakeRunConfiguration.testNCSpline + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSerialization + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testSerialization + + CMakeProjectManager.CMakeRunConfiguration.testSerialization + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testTableProcessor + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testTableProcessor + + CMakeProjectManager.CMakeRunConfiguration.testTableProcessor + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testReportersWithModel + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testReportersWithModel + + CMakeProjectManager.CMakeRunConfiguration.testReportersWithModel + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testProbes + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testProbes + + CMakeProjectManager.CMakeRunConfiguration.testProbes + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testStorage + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testStorage + + CMakeProjectManager.CMakeRunConfiguration.testStorage + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testAssemblySolver + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testAssemblySolver + + CMakeProjectManager.CMakeRunConfiguration.testAssemblySolver + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testContactGeometry + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testContactGeometry + + CMakeProjectManager.CMakeRunConfiguration.testContactGeometry + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testForces + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testForces + + CMakeProjectManager.CMakeRunConfiguration.testForces + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMuscleMetabolicsProbes + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMuscleMetabolicsProbes + + CMakeProjectManager.CMakeRunConfiguration.testMuscleMetabolicsProbes + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testFrames + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testFrames + + CMakeProjectManager.CMakeRunConfiguration.testFrames + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testStatesTrajectory + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testStatesTrajectory + + CMakeProjectManager.CMakeRunConfiguration.testStatesTrajectory + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSimulationUtilities + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testSimulationUtilities + + CMakeProjectManager.CMakeRunConfiguration.testSimulationUtilities + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testInitState + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testInitState + + CMakeProjectManager.CMakeRunConfiguration.testInitState + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testInverseKinematicsSolver + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testInverseKinematicsSolver + + CMakeProjectManager.CMakeRunConfiguration.testInverseKinematicsSolver + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testWrappingMath + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testWrappingMath + + CMakeProjectManager.CMakeRunConfiguration.testWrappingMath + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testAPDMDataReader + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testAPDMDataReader + + CMakeProjectManager.CMakeRunConfiguration.testAPDMDataReader + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMomentArms + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMomentArms + + CMakeProjectManager.CMakeRunConfiguration.testMomentArms + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testManager + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testManager + + CMakeProjectManager.CMakeRunConfiguration.testManager + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testModelInterface + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testModelInterface + + CMakeProjectManager.CMakeRunConfiguration.testModelInterface + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testNestedModelComponents + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testNestedModelComponents + + CMakeProjectManager.CMakeRunConfiguration.testNestedModelComponents + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testPoints + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testPoints + + CMakeProjectManager.CMakeRunConfiguration.testPoints + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testPrescribedForce + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testPrescribedForce + + CMakeProjectManager.CMakeRunConfiguration.testPrescribedForce + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testJoints + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testJoints + + CMakeProjectManager.CMakeRunConfiguration.testJoints + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testConstraints + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testConstraints + + CMakeProjectManager.CMakeRunConfiguration.testConstraints + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testActuators + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testActuators + + CMakeProjectManager.CMakeRunConfiguration.testActuators + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testModelProcessor + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testModelProcessor + + CMakeProjectManager.CMakeRunConfiguration.testModelProcessor + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSTOFileAdapter + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testSTOFileAdapter + + CMakeProjectManager.CMakeRunConfiguration.testSTOFileAdapter + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMuscles + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMuscles + + CMakeProjectManager.CMakeRunConfiguration.testMuscles + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMuscleFixedWidthPennationModel + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMuscleFixedWidthPennationModel + + CMakeProjectManager.CMakeRunConfiguration.testMuscleFixedWidthPennationModel + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSerializableMuscleCurves + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testSerializableMuscleCurves + + CMakeProjectManager.CMakeRunConfiguration.testSerializableMuscleCurves + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMuscleFirstOrderActivationDynamicModel + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMuscleFirstOrderActivationDynamicModel + + CMakeProjectManager.CMakeRunConfiguration.testMuscleFirstOrderActivationDynamicModel + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testDeGrooteFregly2016Muscle + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testDeGrooteFregly2016Muscle + + CMakeProjectManager.CMakeRunConfiguration.testDeGrooteFregly2016Muscle + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testOutputReporter + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testOutputReporter + + CMakeProjectManager.CMakeRunConfiguration.testOutputReporter + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testModelCopy + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testModelCopy + + CMakeProjectManager.CMakeRunConfiguration.testModelCopy + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testExternalLoads + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testExternalLoads + + CMakeProjectManager.CMakeRunConfiguration.testExternalLoads + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testVisualization + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testVisualization + + CMakeProjectManager.CMakeRunConfiguration.testVisualization + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSerializeOpenSimObjects + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testSerializeOpenSimObjects + + CMakeProjectManager.CMakeRunConfiguration.testSerializeOpenSimObjects + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testComponentInterface + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testComponentInterface + + CMakeProjectManager.CMakeRunConfiguration.testComponentInterface + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testControllers + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testControllers + + CMakeProjectManager.CMakeRunConfiguration.testControllers + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoActuators + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoActuators + + CMakeProjectManager.CMakeRunConfiguration.testMocoActuators + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoInterface + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoInterface + + CMakeProjectManager.CMakeRunConfiguration.testMocoInterface + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoParameters + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoParameters + + CMakeProjectManager.CMakeRunConfiguration.testMocoParameters + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoContact + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoContact + + CMakeProjectManager.CMakeRunConfiguration.testMocoContact + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoImplicit + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoImplicit + + CMakeProjectManager.CMakeRunConfiguration.testMocoImplicit + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoGoals + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoGoals + + CMakeProjectManager.CMakeRunConfiguration.testMocoGoals + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoAnalytic + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoAnalytic + + CMakeProjectManager.CMakeRunConfiguration.testMocoAnalytic + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoConstraints + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoConstraints + + CMakeProjectManager.CMakeRunConfiguration.testMocoConstraints + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoInverse + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoInverse + + CMakeProjectManager.CMakeRunConfiguration.testMocoInverse + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testFunctionAdapter + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testFunctionAdapter + + CMakeProjectManager.CMakeRunConfiguration.testFunctionAdapter + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoTrack + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoTrack + + CMakeProjectManager.CMakeRunConfiguration.testMocoTrack + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoMetabolics + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoMetabolics + + CMakeProjectManager.CMakeRunConfiguration.testMocoMetabolics + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleHopperDeviceAnswers + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleHopperDeviceAnswers + + CMakeProjectManager.CMakeRunConfiguration.exampleHopperDeviceAnswers + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleHopperDevice + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleHopperDevice + + CMakeProjectManager.CMakeRunConfiguration.exampleHopperDevice + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + example2DataTable + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + example2DataTable + + CMakeProjectManager.CMakeRunConfiguration.example2DataTable + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + example1DataTable + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + example1DataTable + + CMakeProjectManager.CMakeRunConfiguration.example1DataTable + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleTRCFileAdapter + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleTRCFileAdapter + + CMakeProjectManager.CMakeRunConfiguration.exampleTRCFileAdapter + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleSlidingMass + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleSlidingMass + + CMakeProjectManager.CMakeRunConfiguration.exampleSlidingMass + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleSlidingMassAdvanced + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleSlidingMassAdvanced + + CMakeProjectManager.CMakeRunConfiguration.exampleSlidingMassAdvanced + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleTracking + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleTracking + + CMakeProjectManager.CMakeRunConfiguration.exampleTracking + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testGCVSpline + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testGCVSpline + + CMakeProjectManager.CMakeRunConfiguration.testGCVSpline + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleMarkerTracking + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleMarkerTracking + + CMakeProjectManager.CMakeRunConfiguration.exampleMarkerTracking + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleHangingMuscle + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleHangingMuscle + + CMakeProjectManager.CMakeRunConfiguration.exampleHangingMuscle + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + example2DWalkingMetabolics + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + example2DWalkingMetabolics + + CMakeProjectManager.CMakeRunConfiguration.example2DWalkingMetabolics + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + example2DWalking + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + example2DWalking + + CMakeProjectManager.CMakeRunConfiguration.example2DWalking + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleMocoInverse + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleMocoInverse + + CMakeProjectManager.CMakeRunConfiguration.exampleMocoInverse + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleMocoTrack + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleMocoTrack + + CMakeProjectManager.CMakeRunConfiguration.exampleMocoTrack + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleMocoCustomEffortGoal + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleMocoCustomEffortGoal + + CMakeProjectManager.CMakeRunConfiguration.exampleMocoCustomEffortGoal + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleCustomImplicitAuxiliaryDynamics + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleCustomImplicitAuxiliaryDynamics + + CMakeProjectManager.CMakeRunConfiguration.exampleCustomImplicitAuxiliaryDynamics + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testComponents + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testComponents + + CMakeProjectManager.CMakeRunConfiguration.testComponents + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testAddComponents + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testAddComponents + + CMakeProjectManager.CMakeRunConfiguration.testAddComponents + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testXsensDataReader + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testXsensDataReader + + CMakeProjectManager.CMakeRunConfiguration.testXsensDataReader + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testControllerExample + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testControllerExample + + CMakeProjectManager.CMakeRunConfiguration.testControllerExample + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleController + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleController + + CMakeProjectManager.CMakeRunConfiguration.exampleController + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testExampleMain + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testExampleMain + + CMakeProjectManager.CMakeRunConfiguration.testExampleMain + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleMain + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleMain + + CMakeProjectManager.CMakeRunConfiguration.exampleMain + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testOptimizationExample + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testOptimizationExample + + CMakeProjectManager.CMakeRunConfiguration.testOptimizationExample + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleOptimization + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleOptimization + + CMakeProjectManager.CMakeRunConfiguration.exampleOptimization + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCustomActuatorExample + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCustomActuatorExample + + CMakeProjectManager.CMakeRunConfiguration.testCustomActuatorExample + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleCustomActuator + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleCustomActuator + + CMakeProjectManager.CMakeRunConfiguration.exampleCustomActuator + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMuscleExample + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMuscleExample + + CMakeProjectManager.CMakeRunConfiguration.testMuscleExample + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleMuscle + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleMuscle + + CMakeProjectManager.CMakeRunConfiguration.exampleMuscle + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testPath + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testPath + + CMakeProjectManager.CMakeRunConfiguration.testPath + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSimpleOptimizationExample + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testSimpleOptimizationExample + + CMakeProjectManager.CMakeRunConfiguration.testSimpleOptimizationExample + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleOptimizationSimple + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleOptimizationSimple + + CMakeProjectManager.CMakeRunConfiguration.exampleOptimizationSimple + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + checkEnvironment + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + checkEnvironment + + CMakeProjectManager.CMakeRunConfiguration.checkEnvironment + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testIterators + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testIterators + + CMakeProjectManager.CMakeRunConfiguration.testIterators + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testREADME + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testREADME + + CMakeProjectManager.CMakeRunConfiguration.testREADME + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testWrapping + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testWrapping + + CMakeProjectManager.CMakeRunConfiguration.testWrapping + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testExampleLuxoMuscle + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testExampleLuxoMuscle + + CMakeProjectManager.CMakeRunConfiguration.testExampleLuxoMuscle + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testBuildDynamicWalker + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testBuildDynamicWalker + + CMakeProjectManager.CMakeRunConfiguration.testBuildDynamicWalker + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testStaticOptimization + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testStaticOptimization + + CMakeProjectManager.CMakeRunConfiguration.testStaticOptimization + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testJointReactions + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testJointReactions + + CMakeProjectManager.CMakeRunConfiguration.testJointReactions + 3768 + false + true + false + false + true + + 123 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 18 + + + Version + 18 + + From b4a7cc67a7fac2b870e295caabbe8d7ab401fe5c Mon Sep 17 00:00:00 2001 From: joris997 Date: Wed, 23 Jun 2021 10:18:45 +0200 Subject: [PATCH 21/36] updates --- CMakeLists.txt.user | 7030 ------------------------------------------- 1 file changed, 7030 deletions(-) delete mode 100644 CMakeLists.txt.user diff --git a/CMakeLists.txt.user b/CMakeLists.txt.user deleted file mode 100644 index 462a80c26c..0000000000 --- a/CMakeLists.txt.user +++ /dev/null @@ -1,7030 +0,0 @@ - - - - - - EnvironmentId - {31e18788-fd95-4ab4-9268-c7219c462e0d} - - - ProjectExplorer.Project.ActiveTarget - 0 - - - ProjectExplorer.Project.EditorSettings - - true - false - true - - Cpp - - CppGlobal - - - - QmlJS - - QmlJSGlobal - - - 2 - UTF-8 - false - 4 - false - 80 - true - true - 1 - true - false - 0 - true - true - 0 - 8 - true - 1 - true - true - true - false - - - - ProjectExplorer.Project.PluginSettings - - - - ProjectExplorer.Project.Target.0 - - Imported Kit - Imported Kit - {5ab61cc0-5ce1-464a-9515-d4ecbb0755d3} - 0 - 0 - 0 - - - CMAKE_BUILD_TYPE:STRING=RelWithDebInfo - - /home/none/opensim/interpolation/RelWithDebInfo-build - - - - - all - - true - CMake Build - - CMakeProjectManager.MakeStep - - 1 - Build - - ProjectExplorer.BuildSteps.Build - - - - - - clean - - true - CMake Build - - CMakeProjectManager.MakeStep - - 1 - Clean - - ProjectExplorer.BuildSteps.Clean - - 2 - false - - Release with Debug Information - Release with Debug Information - CMakeProjectManager.CMakeBuildConfiguration - - 1 - - - 0 - Deploy - - ProjectExplorer.BuildSteps.Deploy - - 1 - Deploy locally - - ProjectExplorer.DefaultDeployConfiguration - - 1 - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testLepton - - - /home/none/opensim/interpolation/RelWithDebInfo-build - 2 - - testLepton - - CMakeProjectManager.CMakeRunConfiguration.testLepton - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testTRCFileAdapter - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testTRCFileAdapter - - CMakeProjectManager.CMakeRunConfiguration.testTRCFileAdapter - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testDataTable - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testDataTable - - CMakeProjectManager.CMakeRunConfiguration.testDataTable - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testInducedAccelerations - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testInducedAccelerations - - CMakeProjectManager.CMakeRunConfiguration.testInducedAccelerations - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testAnalyzeTool - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testAnalyzeTool - - CMakeProjectManager.CMakeRunConfiguration.testAnalyzeTool - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testForward - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testForward - - CMakeProjectManager.CMakeRunConfiguration.testForward - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testScale - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testScale - - CMakeProjectManager.CMakeRunConfiguration.testScale - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testLiveIK - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testLiveIK - - CMakeProjectManager.CMakeRunConfiguration.testLiveIK - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testIK - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testIK - - CMakeProjectManager.CMakeRunConfiguration.testIK - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testID - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testID - - CMakeProjectManager.CMakeRunConfiguration.testID - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCArm26_Millard - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCArm26_Millard - - CMakeProjectManager.CMakeRunConfiguration.testCMCArm26_Millard - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCArm26_Thelen - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCArm26_Thelen - - CMakeProjectManager.CMakeRunConfiguration.testCMCArm26_Thelen - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCEMGDrivenArm_Thelen - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCEMGDrivenArm_Thelen - - CMakeProjectManager.CMakeRunConfiguration.testCMCEMGDrivenArm_Thelen - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testRootSolver - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testRootSolver - - CMakeProjectManager.CMakeRunConfiguration.testRootSolver - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCGait10dof18musc - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCGait10dof18musc - - CMakeProjectManager.CMakeRunConfiguration.testCMCGait10dof18musc - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCSingleMuscle - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCSingleMuscle - - CMakeProjectManager.CMakeRunConfiguration.testCMCSingleMuscle - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCSingleRigidTendonMuscle - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCSingleRigidTendonMuscle - - CMakeProjectManager.CMakeRunConfiguration.testCMCSingleRigidTendonMuscle - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCTwoMusclesOnBlock - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCTwoMusclesOnBlock - - CMakeProjectManager.CMakeRunConfiguration.testCMCTwoMusclesOnBlock - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCEMGDrivenArm_Millard - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCEMGDrivenArm_Millard - - CMakeProjectManager.CMakeRunConfiguration.testCMCEMGDrivenArm_Millard - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCWithControlConstraintsGait2354 - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCWithControlConstraintsGait2354 - - CMakeProjectManager.CMakeRunConfiguration.testCMCWithControlConstraintsGait2354 - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCWithControlConstraintsRunningModel - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCWithControlConstraintsRunningModel - - CMakeProjectManager.CMakeRunConfiguration.testCMCWithControlConstraintsRunningModel - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testRRA - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testRRA - - CMakeProjectManager.CMakeRunConfiguration.testRRA - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testFunctionBasedPathConversion - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testFunctionBasedPathConversion - - CMakeProjectManager.CMakeRunConfiguration.testFunctionBasedPathConversion - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - opensense - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - opensense - - CMakeProjectManager.CMakeRunConfiguration.opensense - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testFunctions - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testFunctions - - CMakeProjectManager.CMakeRunConfiguration.testFunctions - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testOpenSense - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testOpenSense - - CMakeProjectManager.CMakeRunConfiguration.testOpenSense - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - opensim-cmd - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - opensim-cmd - - CMakeProjectManager.CMakeRunConfiguration.opensim-cmd - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCommandLineInterface - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCommandLineInterface - - CMakeProjectManager.CMakeRunConfiguration.testCommandLineInterface - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMarkerData - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMarkerData - - CMakeProjectManager.CMakeRunConfiguration.testMarkerData - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSmoothSegmentedFunctionFactory - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSmoothSegmentedFunctionFactory - - CMakeProjectManager.CMakeRunConfiguration.testSmoothSegmentedFunctionFactory - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testNCSpline - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testNCSpline - - CMakeProjectManager.CMakeRunConfiguration.testNCSpline - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSerialization - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSerialization - - CMakeProjectManager.CMakeRunConfiguration.testSerialization - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testTableProcessor - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testTableProcessor - - CMakeProjectManager.CMakeRunConfiguration.testTableProcessor - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testReportersWithModel - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testReportersWithModel - - CMakeProjectManager.CMakeRunConfiguration.testReportersWithModel - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testProbes - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testProbes - - CMakeProjectManager.CMakeRunConfiguration.testProbes - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testStorage - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testStorage - - CMakeProjectManager.CMakeRunConfiguration.testStorage - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testAssemblySolver - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testAssemblySolver - - CMakeProjectManager.CMakeRunConfiguration.testAssemblySolver - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testContactGeometry - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testContactGeometry - - CMakeProjectManager.CMakeRunConfiguration.testContactGeometry - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testForces - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testForces - - CMakeProjectManager.CMakeRunConfiguration.testForces - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMuscleMetabolicsProbes - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMuscleMetabolicsProbes - - CMakeProjectManager.CMakeRunConfiguration.testMuscleMetabolicsProbes - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testFrames - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testFrames - - CMakeProjectManager.CMakeRunConfiguration.testFrames - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testStatesTrajectory - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testStatesTrajectory - - CMakeProjectManager.CMakeRunConfiguration.testStatesTrajectory - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSimulationUtilities - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSimulationUtilities - - CMakeProjectManager.CMakeRunConfiguration.testSimulationUtilities - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testInitState - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testInitState - - CMakeProjectManager.CMakeRunConfiguration.testInitState - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testInverseKinematicsSolver - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testInverseKinematicsSolver - - CMakeProjectManager.CMakeRunConfiguration.testInverseKinematicsSolver - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testWrappingMath - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testWrappingMath - - CMakeProjectManager.CMakeRunConfiguration.testWrappingMath - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testAPDMDataReader - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testAPDMDataReader - - CMakeProjectManager.CMakeRunConfiguration.testAPDMDataReader - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMomentArms - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMomentArms - - CMakeProjectManager.CMakeRunConfiguration.testMomentArms - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testManager - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testManager - - CMakeProjectManager.CMakeRunConfiguration.testManager - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testModelInterface - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testModelInterface - - CMakeProjectManager.CMakeRunConfiguration.testModelInterface - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testNestedModelComponents - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testNestedModelComponents - - CMakeProjectManager.CMakeRunConfiguration.testNestedModelComponents - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testPoints - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testPoints - - CMakeProjectManager.CMakeRunConfiguration.testPoints - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testPrescribedForce - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testPrescribedForce - - CMakeProjectManager.CMakeRunConfiguration.testPrescribedForce - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testJoints - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testJoints - - CMakeProjectManager.CMakeRunConfiguration.testJoints - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testConstraints - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testConstraints - - CMakeProjectManager.CMakeRunConfiguration.testConstraints - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testActuators - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testActuators - - CMakeProjectManager.CMakeRunConfiguration.testActuators - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testModelProcessor - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testModelProcessor - - CMakeProjectManager.CMakeRunConfiguration.testModelProcessor - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSTOFileAdapter - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSTOFileAdapter - - CMakeProjectManager.CMakeRunConfiguration.testSTOFileAdapter - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMuscles - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMuscles - - CMakeProjectManager.CMakeRunConfiguration.testMuscles - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMuscleFixedWidthPennationModel - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMuscleFixedWidthPennationModel - - CMakeProjectManager.CMakeRunConfiguration.testMuscleFixedWidthPennationModel - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSerializableMuscleCurves - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSerializableMuscleCurves - - CMakeProjectManager.CMakeRunConfiguration.testSerializableMuscleCurves - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMuscleFirstOrderActivationDynamicModel - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMuscleFirstOrderActivationDynamicModel - - CMakeProjectManager.CMakeRunConfiguration.testMuscleFirstOrderActivationDynamicModel - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testDeGrooteFregly2016Muscle - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testDeGrooteFregly2016Muscle - - CMakeProjectManager.CMakeRunConfiguration.testDeGrooteFregly2016Muscle - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testOutputReporter - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testOutputReporter - - CMakeProjectManager.CMakeRunConfiguration.testOutputReporter - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testModelCopy - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testModelCopy - - CMakeProjectManager.CMakeRunConfiguration.testModelCopy - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testExternalLoads - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testExternalLoads - - CMakeProjectManager.CMakeRunConfiguration.testExternalLoads - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testVisualization - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testVisualization - - CMakeProjectManager.CMakeRunConfiguration.testVisualization - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSerializeOpenSimObjects - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSerializeOpenSimObjects - - CMakeProjectManager.CMakeRunConfiguration.testSerializeOpenSimObjects - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testComponentInterface - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testComponentInterface - - CMakeProjectManager.CMakeRunConfiguration.testComponentInterface - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testControllers - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testControllers - - CMakeProjectManager.CMakeRunConfiguration.testControllers - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoActuators - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoActuators - - CMakeProjectManager.CMakeRunConfiguration.testMocoActuators - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoInterface - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoInterface - - CMakeProjectManager.CMakeRunConfiguration.testMocoInterface - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoParameters - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoParameters - - CMakeProjectManager.CMakeRunConfiguration.testMocoParameters - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoContact - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoContact - - CMakeProjectManager.CMakeRunConfiguration.testMocoContact - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoImplicit - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoImplicit - - CMakeProjectManager.CMakeRunConfiguration.testMocoImplicit - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoGoals - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoGoals - - CMakeProjectManager.CMakeRunConfiguration.testMocoGoals - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoAnalytic - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoAnalytic - - CMakeProjectManager.CMakeRunConfiguration.testMocoAnalytic - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoConstraints - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoConstraints - - CMakeProjectManager.CMakeRunConfiguration.testMocoConstraints - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoInverse - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoInverse - - CMakeProjectManager.CMakeRunConfiguration.testMocoInverse - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testFunctionAdapter - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testFunctionAdapter - - CMakeProjectManager.CMakeRunConfiguration.testFunctionAdapter - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoTrack - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoTrack - - CMakeProjectManager.CMakeRunConfiguration.testMocoTrack - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoMetabolics - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoMetabolics - - CMakeProjectManager.CMakeRunConfiguration.testMocoMetabolics - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleHopperDeviceAnswers - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleHopperDeviceAnswers - - CMakeProjectManager.CMakeRunConfiguration.exampleHopperDeviceAnswers - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleHopperDevice - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleHopperDevice - - CMakeProjectManager.CMakeRunConfiguration.exampleHopperDevice - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - example2DataTable - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - example2DataTable - - CMakeProjectManager.CMakeRunConfiguration.example2DataTable - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - example1DataTable - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - example1DataTable - - CMakeProjectManager.CMakeRunConfiguration.example1DataTable - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleTRCFileAdapter - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleTRCFileAdapter - - CMakeProjectManager.CMakeRunConfiguration.exampleTRCFileAdapter - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleSlidingMass - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleSlidingMass - - CMakeProjectManager.CMakeRunConfiguration.exampleSlidingMass - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleSlidingMassAdvanced - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleSlidingMassAdvanced - - CMakeProjectManager.CMakeRunConfiguration.exampleSlidingMassAdvanced - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleTracking - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleTracking - - CMakeProjectManager.CMakeRunConfiguration.exampleTracking - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testGCVSpline - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testGCVSpline - - CMakeProjectManager.CMakeRunConfiguration.testGCVSpline - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleMarkerTracking - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleMarkerTracking - - CMakeProjectManager.CMakeRunConfiguration.exampleMarkerTracking - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleHangingMuscle - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleHangingMuscle - - CMakeProjectManager.CMakeRunConfiguration.exampleHangingMuscle - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - example2DWalkingMetabolics - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - example2DWalkingMetabolics - - CMakeProjectManager.CMakeRunConfiguration.example2DWalkingMetabolics - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - example2DWalking - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - example2DWalking - - CMakeProjectManager.CMakeRunConfiguration.example2DWalking - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleMocoInverse - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleMocoInverse - - CMakeProjectManager.CMakeRunConfiguration.exampleMocoInverse - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleMocoTrack - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleMocoTrack - - CMakeProjectManager.CMakeRunConfiguration.exampleMocoTrack - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleMocoCustomEffortGoal - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleMocoCustomEffortGoal - - CMakeProjectManager.CMakeRunConfiguration.exampleMocoCustomEffortGoal - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleCustomImplicitAuxiliaryDynamics - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleCustomImplicitAuxiliaryDynamics - - CMakeProjectManager.CMakeRunConfiguration.exampleCustomImplicitAuxiliaryDynamics - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testComponents - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testComponents - - CMakeProjectManager.CMakeRunConfiguration.testComponents - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testAddComponents - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testAddComponents - - CMakeProjectManager.CMakeRunConfiguration.testAddComponents - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testXsensDataReader - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testXsensDataReader - - CMakeProjectManager.CMakeRunConfiguration.testXsensDataReader - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testControllerExample - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testControllerExample - - CMakeProjectManager.CMakeRunConfiguration.testControllerExample - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleController - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleController - - CMakeProjectManager.CMakeRunConfiguration.exampleController - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testExampleMain - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testExampleMain - - CMakeProjectManager.CMakeRunConfiguration.testExampleMain - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleMain - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleMain - - CMakeProjectManager.CMakeRunConfiguration.exampleMain - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testOptimizationExample - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testOptimizationExample - - CMakeProjectManager.CMakeRunConfiguration.testOptimizationExample - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleOptimization - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleOptimization - - CMakeProjectManager.CMakeRunConfiguration.exampleOptimization - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCustomActuatorExample - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCustomActuatorExample - - CMakeProjectManager.CMakeRunConfiguration.testCustomActuatorExample - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleCustomActuator - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleCustomActuator - - CMakeProjectManager.CMakeRunConfiguration.exampleCustomActuator - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMuscleExample - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMuscleExample - - CMakeProjectManager.CMakeRunConfiguration.testMuscleExample - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleMuscle - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleMuscle - - CMakeProjectManager.CMakeRunConfiguration.exampleMuscle - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testPath - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testPath - - CMakeProjectManager.CMakeRunConfiguration.testPath - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSimpleOptimizationExample - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSimpleOptimizationExample - - CMakeProjectManager.CMakeRunConfiguration.testSimpleOptimizationExample - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleOptimizationSimple - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleOptimizationSimple - - CMakeProjectManager.CMakeRunConfiguration.exampleOptimizationSimple - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - checkEnvironment - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - checkEnvironment - - CMakeProjectManager.CMakeRunConfiguration.checkEnvironment - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testIterators - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testIterators - - CMakeProjectManager.CMakeRunConfiguration.testIterators - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testREADME - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testREADME - - CMakeProjectManager.CMakeRunConfiguration.testREADME - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testWrapping - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testWrapping - - CMakeProjectManager.CMakeRunConfiguration.testWrapping - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testExampleLuxoMuscle - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testExampleLuxoMuscle - - CMakeProjectManager.CMakeRunConfiguration.testExampleLuxoMuscle - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testBuildDynamicWalker - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testBuildDynamicWalker - - CMakeProjectManager.CMakeRunConfiguration.testBuildDynamicWalker - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testStaticOptimization - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testStaticOptimization - - CMakeProjectManager.CMakeRunConfiguration.testStaticOptimization - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testJointReactions - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testJointReactions - - CMakeProjectManager.CMakeRunConfiguration.testJointReactions - 3768 - false - true - false - false - true - - 123 - - - - ProjectExplorer.Project.TargetCount - 1 - - - ProjectExplorer.Project.Updater.FileVersion - 18 - - - Version - 18 - - From 14e734351631209e925bf7c9748a00fa94a5e49f Mon Sep 17 00:00:00 2001 From: joris997 Date: Mon, 12 Jul 2021 16:03:31 +0200 Subject: [PATCH 22/36] finally fixed interpolator. roughly 6 times speed-up achieved for arm26 --- CMakeLists.txt.user | 7030 +++++++++++++++++ .../Simulation/Model/FunctionBasedPath.cpp | 20 +- 2 files changed, 7040 insertions(+), 10 deletions(-) create mode 100644 CMakeLists.txt.user diff --git a/CMakeLists.txt.user b/CMakeLists.txt.user new file mode 100644 index 0000000000..ba855002cc --- /dev/null +++ b/CMakeLists.txt.user @@ -0,0 +1,7030 @@ + + + + + + EnvironmentId + {31e18788-fd95-4ab4-9268-c7219c462e0d} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + true + false + 0 + true + true + 0 + 8 + true + 1 + true + true + true + false + + + + ProjectExplorer.Project.PluginSettings + + + + ProjectExplorer.Project.Target.0 + + Imported Kit + Imported Kit + {5ab61cc0-5ce1-464a-9515-d4ecbb0755d3} + 0 + 0 + 0 + + + CMAKE_BUILD_TYPE:STRING=RelWithDebInfo + + /home/none/opensim/interpolation/RelWithDebInfo-build + + + -j 3 + + install + + true + CMake Build + + CMakeProjectManager.MakeStep + + 1 + Build + + ProjectExplorer.BuildSteps.Build + + + + + + clean + + true + CMake Build + + CMakeProjectManager.MakeStep + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release with Debug Information + Release with Debug Information + CMakeProjectManager.CMakeBuildConfiguration + + 1 + + + 0 + Deploy + + ProjectExplorer.BuildSteps.Deploy + + 1 + Deploy locally + + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testLepton + + + /home/none/opensim/interpolation/RelWithDebInfo-build + 2 + + testLepton + + CMakeProjectManager.CMakeRunConfiguration.testLepton + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testTRCFileAdapter + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testTRCFileAdapter + + CMakeProjectManager.CMakeRunConfiguration.testTRCFileAdapter + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testDataTable + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testDataTable + + CMakeProjectManager.CMakeRunConfiguration.testDataTable + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testInducedAccelerations + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testInducedAccelerations + + CMakeProjectManager.CMakeRunConfiguration.testInducedAccelerations + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testAnalyzeTool + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testAnalyzeTool + + CMakeProjectManager.CMakeRunConfiguration.testAnalyzeTool + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testForward + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testForward + + CMakeProjectManager.CMakeRunConfiguration.testForward + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testScale + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testScale + + CMakeProjectManager.CMakeRunConfiguration.testScale + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testLiveIK + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testLiveIK + + CMakeProjectManager.CMakeRunConfiguration.testLiveIK + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testIK + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testIK + + CMakeProjectManager.CMakeRunConfiguration.testIK + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testID + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testID + + CMakeProjectManager.CMakeRunConfiguration.testID + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCArm26_Millard + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCArm26_Millard + + CMakeProjectManager.CMakeRunConfiguration.testCMCArm26_Millard + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCArm26_Thelen + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCArm26_Thelen + + CMakeProjectManager.CMakeRunConfiguration.testCMCArm26_Thelen + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCEMGDrivenArm_Thelen + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCEMGDrivenArm_Thelen + + CMakeProjectManager.CMakeRunConfiguration.testCMCEMGDrivenArm_Thelen + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testRootSolver + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testRootSolver + + CMakeProjectManager.CMakeRunConfiguration.testRootSolver + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCGait10dof18musc + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCGait10dof18musc + + CMakeProjectManager.CMakeRunConfiguration.testCMCGait10dof18musc + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCSingleMuscle + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCSingleMuscle + + CMakeProjectManager.CMakeRunConfiguration.testCMCSingleMuscle + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCSingleRigidTendonMuscle + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCSingleRigidTendonMuscle + + CMakeProjectManager.CMakeRunConfiguration.testCMCSingleRigidTendonMuscle + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCTwoMusclesOnBlock + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCTwoMusclesOnBlock + + CMakeProjectManager.CMakeRunConfiguration.testCMCTwoMusclesOnBlock + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCEMGDrivenArm_Millard + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCEMGDrivenArm_Millard + + CMakeProjectManager.CMakeRunConfiguration.testCMCEMGDrivenArm_Millard + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCWithControlConstraintsGait2354 + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCWithControlConstraintsGait2354 + + CMakeProjectManager.CMakeRunConfiguration.testCMCWithControlConstraintsGait2354 + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCMCWithControlConstraintsRunningModel + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCMCWithControlConstraintsRunningModel + + CMakeProjectManager.CMakeRunConfiguration.testCMCWithControlConstraintsRunningModel + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testRRA + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testRRA + + CMakeProjectManager.CMakeRunConfiguration.testRRA + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testFunctionBasedPathConversion + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testFunctionBasedPathConversion + + CMakeProjectManager.CMakeRunConfiguration.testFunctionBasedPathConversion + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + opensense + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + opensense + + CMakeProjectManager.CMakeRunConfiguration.opensense + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testFunctions + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testFunctions + + CMakeProjectManager.CMakeRunConfiguration.testFunctions + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testOpenSense + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testOpenSense + + CMakeProjectManager.CMakeRunConfiguration.testOpenSense + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + opensim-cmd + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + opensim-cmd + + CMakeProjectManager.CMakeRunConfiguration.opensim-cmd + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCommandLineInterface + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCommandLineInterface + + CMakeProjectManager.CMakeRunConfiguration.testCommandLineInterface + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMarkerData + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMarkerData + + CMakeProjectManager.CMakeRunConfiguration.testMarkerData + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSmoothSegmentedFunctionFactory + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testSmoothSegmentedFunctionFactory + + CMakeProjectManager.CMakeRunConfiguration.testSmoothSegmentedFunctionFactory + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testNCSpline + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testNCSpline + + CMakeProjectManager.CMakeRunConfiguration.testNCSpline + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSerialization + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testSerialization + + CMakeProjectManager.CMakeRunConfiguration.testSerialization + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testTableProcessor + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testTableProcessor + + CMakeProjectManager.CMakeRunConfiguration.testTableProcessor + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testReportersWithModel + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testReportersWithModel + + CMakeProjectManager.CMakeRunConfiguration.testReportersWithModel + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testProbes + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testProbes + + CMakeProjectManager.CMakeRunConfiguration.testProbes + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testStorage + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testStorage + + CMakeProjectManager.CMakeRunConfiguration.testStorage + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testAssemblySolver + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testAssemblySolver + + CMakeProjectManager.CMakeRunConfiguration.testAssemblySolver + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testContactGeometry + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testContactGeometry + + CMakeProjectManager.CMakeRunConfiguration.testContactGeometry + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testForces + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testForces + + CMakeProjectManager.CMakeRunConfiguration.testForces + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMuscleMetabolicsProbes + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMuscleMetabolicsProbes + + CMakeProjectManager.CMakeRunConfiguration.testMuscleMetabolicsProbes + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testFrames + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testFrames + + CMakeProjectManager.CMakeRunConfiguration.testFrames + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testStatesTrajectory + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testStatesTrajectory + + CMakeProjectManager.CMakeRunConfiguration.testStatesTrajectory + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSimulationUtilities + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testSimulationUtilities + + CMakeProjectManager.CMakeRunConfiguration.testSimulationUtilities + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testInitState + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testInitState + + CMakeProjectManager.CMakeRunConfiguration.testInitState + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testInverseKinematicsSolver + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testInverseKinematicsSolver + + CMakeProjectManager.CMakeRunConfiguration.testInverseKinematicsSolver + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testWrappingMath + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testWrappingMath + + CMakeProjectManager.CMakeRunConfiguration.testWrappingMath + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testAPDMDataReader + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testAPDMDataReader + + CMakeProjectManager.CMakeRunConfiguration.testAPDMDataReader + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMomentArms + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMomentArms + + CMakeProjectManager.CMakeRunConfiguration.testMomentArms + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testManager + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testManager + + CMakeProjectManager.CMakeRunConfiguration.testManager + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testModelInterface + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testModelInterface + + CMakeProjectManager.CMakeRunConfiguration.testModelInterface + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testNestedModelComponents + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testNestedModelComponents + + CMakeProjectManager.CMakeRunConfiguration.testNestedModelComponents + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testPoints + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testPoints + + CMakeProjectManager.CMakeRunConfiguration.testPoints + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testPrescribedForce + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testPrescribedForce + + CMakeProjectManager.CMakeRunConfiguration.testPrescribedForce + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testJoints + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testJoints + + CMakeProjectManager.CMakeRunConfiguration.testJoints + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testConstraints + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testConstraints + + CMakeProjectManager.CMakeRunConfiguration.testConstraints + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testActuators + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testActuators + + CMakeProjectManager.CMakeRunConfiguration.testActuators + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testModelProcessor + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testModelProcessor + + CMakeProjectManager.CMakeRunConfiguration.testModelProcessor + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSTOFileAdapter + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testSTOFileAdapter + + CMakeProjectManager.CMakeRunConfiguration.testSTOFileAdapter + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMuscles + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMuscles + + CMakeProjectManager.CMakeRunConfiguration.testMuscles + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMuscleFixedWidthPennationModel + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMuscleFixedWidthPennationModel + + CMakeProjectManager.CMakeRunConfiguration.testMuscleFixedWidthPennationModel + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSerializableMuscleCurves + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testSerializableMuscleCurves + + CMakeProjectManager.CMakeRunConfiguration.testSerializableMuscleCurves + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMuscleFirstOrderActivationDynamicModel + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMuscleFirstOrderActivationDynamicModel + + CMakeProjectManager.CMakeRunConfiguration.testMuscleFirstOrderActivationDynamicModel + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testDeGrooteFregly2016Muscle + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testDeGrooteFregly2016Muscle + + CMakeProjectManager.CMakeRunConfiguration.testDeGrooteFregly2016Muscle + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testOutputReporter + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testOutputReporter + + CMakeProjectManager.CMakeRunConfiguration.testOutputReporter + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testModelCopy + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testModelCopy + + CMakeProjectManager.CMakeRunConfiguration.testModelCopy + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testExternalLoads + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testExternalLoads + + CMakeProjectManager.CMakeRunConfiguration.testExternalLoads + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testVisualization + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testVisualization + + CMakeProjectManager.CMakeRunConfiguration.testVisualization + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSerializeOpenSimObjects + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testSerializeOpenSimObjects + + CMakeProjectManager.CMakeRunConfiguration.testSerializeOpenSimObjects + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testComponentInterface + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testComponentInterface + + CMakeProjectManager.CMakeRunConfiguration.testComponentInterface + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testControllers + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testControllers + + CMakeProjectManager.CMakeRunConfiguration.testControllers + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoActuators + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoActuators + + CMakeProjectManager.CMakeRunConfiguration.testMocoActuators + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoInterface + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoInterface + + CMakeProjectManager.CMakeRunConfiguration.testMocoInterface + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoParameters + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoParameters + + CMakeProjectManager.CMakeRunConfiguration.testMocoParameters + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoContact + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoContact + + CMakeProjectManager.CMakeRunConfiguration.testMocoContact + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoImplicit + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoImplicit + + CMakeProjectManager.CMakeRunConfiguration.testMocoImplicit + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoGoals + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoGoals + + CMakeProjectManager.CMakeRunConfiguration.testMocoGoals + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoAnalytic + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoAnalytic + + CMakeProjectManager.CMakeRunConfiguration.testMocoAnalytic + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoConstraints + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoConstraints + + CMakeProjectManager.CMakeRunConfiguration.testMocoConstraints + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoInverse + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoInverse + + CMakeProjectManager.CMakeRunConfiguration.testMocoInverse + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testFunctionAdapter + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testFunctionAdapter + + CMakeProjectManager.CMakeRunConfiguration.testFunctionAdapter + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoTrack + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoTrack + + CMakeProjectManager.CMakeRunConfiguration.testMocoTrack + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMocoMetabolics + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMocoMetabolics + + CMakeProjectManager.CMakeRunConfiguration.testMocoMetabolics + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleHopperDeviceAnswers + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleHopperDeviceAnswers + + CMakeProjectManager.CMakeRunConfiguration.exampleHopperDeviceAnswers + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleHopperDevice + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleHopperDevice + + CMakeProjectManager.CMakeRunConfiguration.exampleHopperDevice + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + example2DataTable + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + example2DataTable + + CMakeProjectManager.CMakeRunConfiguration.example2DataTable + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + example1DataTable + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + example1DataTable + + CMakeProjectManager.CMakeRunConfiguration.example1DataTable + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleTRCFileAdapter + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleTRCFileAdapter + + CMakeProjectManager.CMakeRunConfiguration.exampleTRCFileAdapter + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleSlidingMass + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleSlidingMass + + CMakeProjectManager.CMakeRunConfiguration.exampleSlidingMass + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleSlidingMassAdvanced + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleSlidingMassAdvanced + + CMakeProjectManager.CMakeRunConfiguration.exampleSlidingMassAdvanced + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleTracking + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleTracking + + CMakeProjectManager.CMakeRunConfiguration.exampleTracking + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testGCVSpline + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testGCVSpline + + CMakeProjectManager.CMakeRunConfiguration.testGCVSpline + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleMarkerTracking + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleMarkerTracking + + CMakeProjectManager.CMakeRunConfiguration.exampleMarkerTracking + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleHangingMuscle + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleHangingMuscle + + CMakeProjectManager.CMakeRunConfiguration.exampleHangingMuscle + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + example2DWalkingMetabolics + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + example2DWalkingMetabolics + + CMakeProjectManager.CMakeRunConfiguration.example2DWalkingMetabolics + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + example2DWalking + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + example2DWalking + + CMakeProjectManager.CMakeRunConfiguration.example2DWalking + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleMocoInverse + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleMocoInverse + + CMakeProjectManager.CMakeRunConfiguration.exampleMocoInverse + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleMocoTrack + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleMocoTrack + + CMakeProjectManager.CMakeRunConfiguration.exampleMocoTrack + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleMocoCustomEffortGoal + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleMocoCustomEffortGoal + + CMakeProjectManager.CMakeRunConfiguration.exampleMocoCustomEffortGoal + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleCustomImplicitAuxiliaryDynamics + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleCustomImplicitAuxiliaryDynamics + + CMakeProjectManager.CMakeRunConfiguration.exampleCustomImplicitAuxiliaryDynamics + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testComponents + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testComponents + + CMakeProjectManager.CMakeRunConfiguration.testComponents + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testAddComponents + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testAddComponents + + CMakeProjectManager.CMakeRunConfiguration.testAddComponents + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testXsensDataReader + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testXsensDataReader + + CMakeProjectManager.CMakeRunConfiguration.testXsensDataReader + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testControllerExample + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testControllerExample + + CMakeProjectManager.CMakeRunConfiguration.testControllerExample + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleController + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleController + + CMakeProjectManager.CMakeRunConfiguration.exampleController + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testExampleMain + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testExampleMain + + CMakeProjectManager.CMakeRunConfiguration.testExampleMain + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleMain + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleMain + + CMakeProjectManager.CMakeRunConfiguration.exampleMain + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testOptimizationExample + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testOptimizationExample + + CMakeProjectManager.CMakeRunConfiguration.testOptimizationExample + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleOptimization + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleOptimization + + CMakeProjectManager.CMakeRunConfiguration.exampleOptimization + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testCustomActuatorExample + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testCustomActuatorExample + + CMakeProjectManager.CMakeRunConfiguration.testCustomActuatorExample + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleCustomActuator + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleCustomActuator + + CMakeProjectManager.CMakeRunConfiguration.exampleCustomActuator + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testMuscleExample + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testMuscleExample + + CMakeProjectManager.CMakeRunConfiguration.testMuscleExample + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleMuscle + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleMuscle + + CMakeProjectManager.CMakeRunConfiguration.exampleMuscle + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testPath + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testPath + + CMakeProjectManager.CMakeRunConfiguration.testPath + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testSimpleOptimizationExample + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testSimpleOptimizationExample + + CMakeProjectManager.CMakeRunConfiguration.testSimpleOptimizationExample + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + exampleOptimizationSimple + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + exampleOptimizationSimple + + CMakeProjectManager.CMakeRunConfiguration.exampleOptimizationSimple + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + checkEnvironment + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + checkEnvironment + + CMakeProjectManager.CMakeRunConfiguration.checkEnvironment + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testIterators + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testIterators + + CMakeProjectManager.CMakeRunConfiguration.testIterators + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testREADME + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testREADME + + CMakeProjectManager.CMakeRunConfiguration.testREADME + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testWrapping + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testWrapping + + CMakeProjectManager.CMakeRunConfiguration.testWrapping + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testExampleLuxoMuscle + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testExampleLuxoMuscle + + CMakeProjectManager.CMakeRunConfiguration.testExampleLuxoMuscle + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testBuildDynamicWalker + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testBuildDynamicWalker + + CMakeProjectManager.CMakeRunConfiguration.testBuildDynamicWalker + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testStaticOptimization + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testStaticOptimization + + CMakeProjectManager.CMakeRunConfiguration.testStaticOptimization + 3768 + false + true + false + false + true + + + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + testJointReactions + + + /home/none/opensim/interpolation/RelWithDebInfo-build + -1 + + testJointReactions + + CMakeProjectManager.CMakeRunConfiguration.testJointReactions + 3768 + false + true + false + false + true + + 123 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 18 + + + Version + 18 + + diff --git a/OpenSim/Simulation/Model/FunctionBasedPath.cpp b/OpenSim/Simulation/Model/FunctionBasedPath.cpp index e093d8fd0a..1b2af1f012 100644 --- a/OpenSim/Simulation/Model/FunctionBasedPath.cpp +++ b/OpenSim/Simulation/Model/FunctionBasedPath.cpp @@ -257,8 +257,10 @@ class Interpolate final { Discretization dc; for (int i = 0; i < dimensions; i++) { const OpenSim::Coordinate& c = *cBegin[i]; - dc.begin = std::max(c.getRangeMin(), -static_cast(SimTK_PI)); - dc.end = std::min(c.getRangeMax(), static_cast(SimTK_PI)); + dc.begin = -static_cast(SimTK_PI)/2; + dc.end = static_cast(SimTK_PI)/2; +// dc.begin = std::max(c.getRangeMin(), -static_cast(SimTK_PI)); +// dc.end = std::min(c.getRangeMax(), static_cast(SimTK_PI)); dc.nPoints = nPoints[i]; dc.gridsize = (dc.end - dc.begin) / (dc.nPoints - 1); dS.push_back(dc); @@ -464,7 +466,7 @@ class Interpolate final { // 1st derivative double getInterpDer(const std::vector& x, int coordinate, - double h = 0.001) { + double h = 0.0001) { assert(x.size() == dimensions); assert(coordinate <= dimensions-1); @@ -501,7 +503,7 @@ class Interpolate final { return getInterpDer(s, i); } } - + OPENSIM_THROW(OpenSim::Exception,"could not find coordinate in getInterpDer based on given coord argument") return 0.0; } @@ -957,16 +959,14 @@ void OpenSim::FunctionBasedPath::addInEquivalentForces(const SimTK::State& s, SimTK::Vector_& bodyForces, SimTK::Vector& mobilityForces) const { - double ma; - double torqueOverCoord; - const SimTK::SimbodyMatterSubsystem& matter = getModel().getMatterSubsystem(); std::vector coords = _impl->interp.getCoords(); for (unsigned i=0; igetBodyIndex()), @@ -1004,7 +1004,7 @@ calcLengthAfterPathComputation(const SimTK::State& s, const Array& currentPath) const { double length = getLength(s); - setLength(s,length); +// setLength(s,length); return( length ); } From c096599667c596f68a85abb773f762ab5be953ff Mon Sep 17 00:00:00 2001 From: joris997 Date: Mon, 12 Jul 2021 16:03:50 +0200 Subject: [PATCH 23/36] finally fixed interpolator. roughly 6 times speed-up achieved for arm26 --- CMakeLists.txt.user | 7030 ------------------------------------------- 1 file changed, 7030 deletions(-) delete mode 100644 CMakeLists.txt.user diff --git a/CMakeLists.txt.user b/CMakeLists.txt.user deleted file mode 100644 index ba855002cc..0000000000 --- a/CMakeLists.txt.user +++ /dev/null @@ -1,7030 +0,0 @@ - - - - - - EnvironmentId - {31e18788-fd95-4ab4-9268-c7219c462e0d} - - - ProjectExplorer.Project.ActiveTarget - 0 - - - ProjectExplorer.Project.EditorSettings - - true - false - true - - Cpp - - CppGlobal - - - - QmlJS - - QmlJSGlobal - - - 2 - UTF-8 - false - 4 - false - 80 - true - true - 1 - true - false - 0 - true - true - 0 - 8 - true - 1 - true - true - true - false - - - - ProjectExplorer.Project.PluginSettings - - - - ProjectExplorer.Project.Target.0 - - Imported Kit - Imported Kit - {5ab61cc0-5ce1-464a-9515-d4ecbb0755d3} - 0 - 0 - 0 - - - CMAKE_BUILD_TYPE:STRING=RelWithDebInfo - - /home/none/opensim/interpolation/RelWithDebInfo-build - - - -j 3 - - install - - true - CMake Build - - CMakeProjectManager.MakeStep - - 1 - Build - - ProjectExplorer.BuildSteps.Build - - - - - - clean - - true - CMake Build - - CMakeProjectManager.MakeStep - - 1 - Clean - - ProjectExplorer.BuildSteps.Clean - - 2 - false - - Release with Debug Information - Release with Debug Information - CMakeProjectManager.CMakeBuildConfiguration - - 1 - - - 0 - Deploy - - ProjectExplorer.BuildSteps.Deploy - - 1 - Deploy locally - - ProjectExplorer.DefaultDeployConfiguration - - 1 - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testLepton - - - /home/none/opensim/interpolation/RelWithDebInfo-build - 2 - - testLepton - - CMakeProjectManager.CMakeRunConfiguration.testLepton - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testTRCFileAdapter - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testTRCFileAdapter - - CMakeProjectManager.CMakeRunConfiguration.testTRCFileAdapter - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testDataTable - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testDataTable - - CMakeProjectManager.CMakeRunConfiguration.testDataTable - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testInducedAccelerations - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testInducedAccelerations - - CMakeProjectManager.CMakeRunConfiguration.testInducedAccelerations - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testAnalyzeTool - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testAnalyzeTool - - CMakeProjectManager.CMakeRunConfiguration.testAnalyzeTool - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testForward - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testForward - - CMakeProjectManager.CMakeRunConfiguration.testForward - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testScale - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testScale - - CMakeProjectManager.CMakeRunConfiguration.testScale - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testLiveIK - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testLiveIK - - CMakeProjectManager.CMakeRunConfiguration.testLiveIK - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testIK - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testIK - - CMakeProjectManager.CMakeRunConfiguration.testIK - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testID - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testID - - CMakeProjectManager.CMakeRunConfiguration.testID - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCArm26_Millard - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCArm26_Millard - - CMakeProjectManager.CMakeRunConfiguration.testCMCArm26_Millard - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCArm26_Thelen - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCArm26_Thelen - - CMakeProjectManager.CMakeRunConfiguration.testCMCArm26_Thelen - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCEMGDrivenArm_Thelen - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCEMGDrivenArm_Thelen - - CMakeProjectManager.CMakeRunConfiguration.testCMCEMGDrivenArm_Thelen - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testRootSolver - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testRootSolver - - CMakeProjectManager.CMakeRunConfiguration.testRootSolver - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCGait10dof18musc - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCGait10dof18musc - - CMakeProjectManager.CMakeRunConfiguration.testCMCGait10dof18musc - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCSingleMuscle - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCSingleMuscle - - CMakeProjectManager.CMakeRunConfiguration.testCMCSingleMuscle - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCSingleRigidTendonMuscle - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCSingleRigidTendonMuscle - - CMakeProjectManager.CMakeRunConfiguration.testCMCSingleRigidTendonMuscle - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCTwoMusclesOnBlock - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCTwoMusclesOnBlock - - CMakeProjectManager.CMakeRunConfiguration.testCMCTwoMusclesOnBlock - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCEMGDrivenArm_Millard - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCEMGDrivenArm_Millard - - CMakeProjectManager.CMakeRunConfiguration.testCMCEMGDrivenArm_Millard - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCWithControlConstraintsGait2354 - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCWithControlConstraintsGait2354 - - CMakeProjectManager.CMakeRunConfiguration.testCMCWithControlConstraintsGait2354 - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCMCWithControlConstraintsRunningModel - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCMCWithControlConstraintsRunningModel - - CMakeProjectManager.CMakeRunConfiguration.testCMCWithControlConstraintsRunningModel - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testRRA - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testRRA - - CMakeProjectManager.CMakeRunConfiguration.testRRA - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testFunctionBasedPathConversion - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testFunctionBasedPathConversion - - CMakeProjectManager.CMakeRunConfiguration.testFunctionBasedPathConversion - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - opensense - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - opensense - - CMakeProjectManager.CMakeRunConfiguration.opensense - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testFunctions - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testFunctions - - CMakeProjectManager.CMakeRunConfiguration.testFunctions - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testOpenSense - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testOpenSense - - CMakeProjectManager.CMakeRunConfiguration.testOpenSense - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - opensim-cmd - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - opensim-cmd - - CMakeProjectManager.CMakeRunConfiguration.opensim-cmd - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCommandLineInterface - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCommandLineInterface - - CMakeProjectManager.CMakeRunConfiguration.testCommandLineInterface - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMarkerData - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMarkerData - - CMakeProjectManager.CMakeRunConfiguration.testMarkerData - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSmoothSegmentedFunctionFactory - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSmoothSegmentedFunctionFactory - - CMakeProjectManager.CMakeRunConfiguration.testSmoothSegmentedFunctionFactory - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testNCSpline - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testNCSpline - - CMakeProjectManager.CMakeRunConfiguration.testNCSpline - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSerialization - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSerialization - - CMakeProjectManager.CMakeRunConfiguration.testSerialization - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testTableProcessor - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testTableProcessor - - CMakeProjectManager.CMakeRunConfiguration.testTableProcessor - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testReportersWithModel - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testReportersWithModel - - CMakeProjectManager.CMakeRunConfiguration.testReportersWithModel - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testProbes - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testProbes - - CMakeProjectManager.CMakeRunConfiguration.testProbes - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testStorage - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testStorage - - CMakeProjectManager.CMakeRunConfiguration.testStorage - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testAssemblySolver - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testAssemblySolver - - CMakeProjectManager.CMakeRunConfiguration.testAssemblySolver - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testContactGeometry - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testContactGeometry - - CMakeProjectManager.CMakeRunConfiguration.testContactGeometry - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testForces - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testForces - - CMakeProjectManager.CMakeRunConfiguration.testForces - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMuscleMetabolicsProbes - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMuscleMetabolicsProbes - - CMakeProjectManager.CMakeRunConfiguration.testMuscleMetabolicsProbes - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testFrames - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testFrames - - CMakeProjectManager.CMakeRunConfiguration.testFrames - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testStatesTrajectory - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testStatesTrajectory - - CMakeProjectManager.CMakeRunConfiguration.testStatesTrajectory - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSimulationUtilities - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSimulationUtilities - - CMakeProjectManager.CMakeRunConfiguration.testSimulationUtilities - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testInitState - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testInitState - - CMakeProjectManager.CMakeRunConfiguration.testInitState - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testInverseKinematicsSolver - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testInverseKinematicsSolver - - CMakeProjectManager.CMakeRunConfiguration.testInverseKinematicsSolver - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testWrappingMath - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testWrappingMath - - CMakeProjectManager.CMakeRunConfiguration.testWrappingMath - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testAPDMDataReader - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testAPDMDataReader - - CMakeProjectManager.CMakeRunConfiguration.testAPDMDataReader - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMomentArms - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMomentArms - - CMakeProjectManager.CMakeRunConfiguration.testMomentArms - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testManager - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testManager - - CMakeProjectManager.CMakeRunConfiguration.testManager - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testModelInterface - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testModelInterface - - CMakeProjectManager.CMakeRunConfiguration.testModelInterface - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testNestedModelComponents - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testNestedModelComponents - - CMakeProjectManager.CMakeRunConfiguration.testNestedModelComponents - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testPoints - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testPoints - - CMakeProjectManager.CMakeRunConfiguration.testPoints - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testPrescribedForce - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testPrescribedForce - - CMakeProjectManager.CMakeRunConfiguration.testPrescribedForce - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testJoints - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testJoints - - CMakeProjectManager.CMakeRunConfiguration.testJoints - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testConstraints - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testConstraints - - CMakeProjectManager.CMakeRunConfiguration.testConstraints - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testActuators - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testActuators - - CMakeProjectManager.CMakeRunConfiguration.testActuators - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testModelProcessor - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testModelProcessor - - CMakeProjectManager.CMakeRunConfiguration.testModelProcessor - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSTOFileAdapter - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSTOFileAdapter - - CMakeProjectManager.CMakeRunConfiguration.testSTOFileAdapter - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMuscles - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMuscles - - CMakeProjectManager.CMakeRunConfiguration.testMuscles - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMuscleFixedWidthPennationModel - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMuscleFixedWidthPennationModel - - CMakeProjectManager.CMakeRunConfiguration.testMuscleFixedWidthPennationModel - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSerializableMuscleCurves - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSerializableMuscleCurves - - CMakeProjectManager.CMakeRunConfiguration.testSerializableMuscleCurves - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMuscleFirstOrderActivationDynamicModel - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMuscleFirstOrderActivationDynamicModel - - CMakeProjectManager.CMakeRunConfiguration.testMuscleFirstOrderActivationDynamicModel - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testDeGrooteFregly2016Muscle - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testDeGrooteFregly2016Muscle - - CMakeProjectManager.CMakeRunConfiguration.testDeGrooteFregly2016Muscle - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testOutputReporter - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testOutputReporter - - CMakeProjectManager.CMakeRunConfiguration.testOutputReporter - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testModelCopy - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testModelCopy - - CMakeProjectManager.CMakeRunConfiguration.testModelCopy - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testExternalLoads - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testExternalLoads - - CMakeProjectManager.CMakeRunConfiguration.testExternalLoads - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testVisualization - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testVisualization - - CMakeProjectManager.CMakeRunConfiguration.testVisualization - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSerializeOpenSimObjects - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSerializeOpenSimObjects - - CMakeProjectManager.CMakeRunConfiguration.testSerializeOpenSimObjects - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testComponentInterface - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testComponentInterface - - CMakeProjectManager.CMakeRunConfiguration.testComponentInterface - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testControllers - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testControllers - - CMakeProjectManager.CMakeRunConfiguration.testControllers - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoActuators - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoActuators - - CMakeProjectManager.CMakeRunConfiguration.testMocoActuators - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoInterface - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoInterface - - CMakeProjectManager.CMakeRunConfiguration.testMocoInterface - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoParameters - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoParameters - - CMakeProjectManager.CMakeRunConfiguration.testMocoParameters - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoContact - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoContact - - CMakeProjectManager.CMakeRunConfiguration.testMocoContact - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoImplicit - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoImplicit - - CMakeProjectManager.CMakeRunConfiguration.testMocoImplicit - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoGoals - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoGoals - - CMakeProjectManager.CMakeRunConfiguration.testMocoGoals - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoAnalytic - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoAnalytic - - CMakeProjectManager.CMakeRunConfiguration.testMocoAnalytic - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoConstraints - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoConstraints - - CMakeProjectManager.CMakeRunConfiguration.testMocoConstraints - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoInverse - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoInverse - - CMakeProjectManager.CMakeRunConfiguration.testMocoInverse - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testFunctionAdapter - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testFunctionAdapter - - CMakeProjectManager.CMakeRunConfiguration.testFunctionAdapter - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoTrack - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoTrack - - CMakeProjectManager.CMakeRunConfiguration.testMocoTrack - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMocoMetabolics - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMocoMetabolics - - CMakeProjectManager.CMakeRunConfiguration.testMocoMetabolics - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleHopperDeviceAnswers - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleHopperDeviceAnswers - - CMakeProjectManager.CMakeRunConfiguration.exampleHopperDeviceAnswers - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleHopperDevice - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleHopperDevice - - CMakeProjectManager.CMakeRunConfiguration.exampleHopperDevice - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - example2DataTable - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - example2DataTable - - CMakeProjectManager.CMakeRunConfiguration.example2DataTable - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - example1DataTable - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - example1DataTable - - CMakeProjectManager.CMakeRunConfiguration.example1DataTable - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleTRCFileAdapter - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleTRCFileAdapter - - CMakeProjectManager.CMakeRunConfiguration.exampleTRCFileAdapter - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleSlidingMass - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleSlidingMass - - CMakeProjectManager.CMakeRunConfiguration.exampleSlidingMass - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleSlidingMassAdvanced - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleSlidingMassAdvanced - - CMakeProjectManager.CMakeRunConfiguration.exampleSlidingMassAdvanced - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleTracking - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleTracking - - CMakeProjectManager.CMakeRunConfiguration.exampleTracking - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testGCVSpline - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testGCVSpline - - CMakeProjectManager.CMakeRunConfiguration.testGCVSpline - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleMarkerTracking - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleMarkerTracking - - CMakeProjectManager.CMakeRunConfiguration.exampleMarkerTracking - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleHangingMuscle - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleHangingMuscle - - CMakeProjectManager.CMakeRunConfiguration.exampleHangingMuscle - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - example2DWalkingMetabolics - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - example2DWalkingMetabolics - - CMakeProjectManager.CMakeRunConfiguration.example2DWalkingMetabolics - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - example2DWalking - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - example2DWalking - - CMakeProjectManager.CMakeRunConfiguration.example2DWalking - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleMocoInverse - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleMocoInverse - - CMakeProjectManager.CMakeRunConfiguration.exampleMocoInverse - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleMocoTrack - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleMocoTrack - - CMakeProjectManager.CMakeRunConfiguration.exampleMocoTrack - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleMocoCustomEffortGoal - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleMocoCustomEffortGoal - - CMakeProjectManager.CMakeRunConfiguration.exampleMocoCustomEffortGoal - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleCustomImplicitAuxiliaryDynamics - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleCustomImplicitAuxiliaryDynamics - - CMakeProjectManager.CMakeRunConfiguration.exampleCustomImplicitAuxiliaryDynamics - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testComponents - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testComponents - - CMakeProjectManager.CMakeRunConfiguration.testComponents - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testAddComponents - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testAddComponents - - CMakeProjectManager.CMakeRunConfiguration.testAddComponents - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testXsensDataReader - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testXsensDataReader - - CMakeProjectManager.CMakeRunConfiguration.testXsensDataReader - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testControllerExample - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testControllerExample - - CMakeProjectManager.CMakeRunConfiguration.testControllerExample - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleController - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleController - - CMakeProjectManager.CMakeRunConfiguration.exampleController - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testExampleMain - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testExampleMain - - CMakeProjectManager.CMakeRunConfiguration.testExampleMain - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleMain - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleMain - - CMakeProjectManager.CMakeRunConfiguration.exampleMain - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testOptimizationExample - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testOptimizationExample - - CMakeProjectManager.CMakeRunConfiguration.testOptimizationExample - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleOptimization - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleOptimization - - CMakeProjectManager.CMakeRunConfiguration.exampleOptimization - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testCustomActuatorExample - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testCustomActuatorExample - - CMakeProjectManager.CMakeRunConfiguration.testCustomActuatorExample - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleCustomActuator - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleCustomActuator - - CMakeProjectManager.CMakeRunConfiguration.exampleCustomActuator - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testMuscleExample - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testMuscleExample - - CMakeProjectManager.CMakeRunConfiguration.testMuscleExample - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleMuscle - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleMuscle - - CMakeProjectManager.CMakeRunConfiguration.exampleMuscle - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testPath - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testPath - - CMakeProjectManager.CMakeRunConfiguration.testPath - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testSimpleOptimizationExample - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testSimpleOptimizationExample - - CMakeProjectManager.CMakeRunConfiguration.testSimpleOptimizationExample - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - exampleOptimizationSimple - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - exampleOptimizationSimple - - CMakeProjectManager.CMakeRunConfiguration.exampleOptimizationSimple - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - checkEnvironment - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - checkEnvironment - - CMakeProjectManager.CMakeRunConfiguration.checkEnvironment - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testIterators - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testIterators - - CMakeProjectManager.CMakeRunConfiguration.testIterators - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testREADME - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testREADME - - CMakeProjectManager.CMakeRunConfiguration.testREADME - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testWrapping - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testWrapping - - CMakeProjectManager.CMakeRunConfiguration.testWrapping - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testExampleLuxoMuscle - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testExampleLuxoMuscle - - CMakeProjectManager.CMakeRunConfiguration.testExampleLuxoMuscle - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testBuildDynamicWalker - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testBuildDynamicWalker - - CMakeProjectManager.CMakeRunConfiguration.testBuildDynamicWalker - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testStaticOptimization - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testStaticOptimization - - CMakeProjectManager.CMakeRunConfiguration.testStaticOptimization - 3768 - false - true - false - false - true - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - testJointReactions - - - /home/none/opensim/interpolation/RelWithDebInfo-build - -1 - - testJointReactions - - CMakeProjectManager.CMakeRunConfiguration.testJointReactions - 3768 - false - true - false - false - true - - 123 - - - - ProjectExplorer.Project.TargetCount - 1 - - - ProjectExplorer.Project.Updater.FileVersion - 18 - - - Version - 18 - - From 6f5cb71adce1cecfdf053aaef188416dd8982cb0 Mon Sep 17 00:00:00 2001 From: Adam Kewley Date: Wed, 18 Aug 2021 13:37:18 +0200 Subject: [PATCH 24/36] Remove VLA (doesn't compile on Windows) --- OpenSim/Simulation/Model/FunctionBasedPath.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OpenSim/Simulation/Model/FunctionBasedPath.cpp b/OpenSim/Simulation/Model/FunctionBasedPath.cpp index 1b2af1f012..8fbc44e801 100644 --- a/OpenSim/Simulation/Model/FunctionBasedPath.cpp +++ b/OpenSim/Simulation/Model/FunctionBasedPath.cpp @@ -412,7 +412,7 @@ class Interpolate final { // evaluation with the weight // create an array containing the lengths of each discretization direction - int discrLoopCnt[dimensions]; + std::vector discrLoopCnt(dimensions); for (int i = 0; i < dimensions; i++) { discrLoopCnt[i] = -1; } From 080ef82a43c983757acf1cf14975c1108a2fa1a4 Mon Sep 17 00:00:00 2001 From: Adam Kewley Date: Wed, 18 Aug 2021 20:51:20 +0200 Subject: [PATCH 25/36] Refactored CLI and CLI test suite - seems to crash when running FPB test? --- .../CMakeLists.txt | 2 +- .../functionbasedpathconversion.cpp | 235 +++++++++-------- .../test/testFunctionBasedPathConversion.cpp | 241 ++++++++++-------- 3 files changed, 266 insertions(+), 212 deletions(-) diff --git a/Applications/FunctionBasedPathConversion/CMakeLists.txt b/Applications/FunctionBasedPathConversion/CMakeLists.txt index fa6696eda8..b954307e6a 100644 --- a/Applications/FunctionBasedPathConversion/CMakeLists.txt +++ b/Applications/FunctionBasedPathConversion/CMakeLists.txt @@ -1,5 +1,5 @@ if(OPENSIM_BUILD_INDIVIDUAL_APPS) - OpenSimAddApplication(NAME functionbasedpathconversion) + OpenSimAddApplication(NAME FunctionBasedPathConversion) endif() if(BUILD_TESTING) diff --git a/Applications/FunctionBasedPathConversion/functionbasedpathconversion.cpp b/Applications/FunctionBasedPathConversion/functionbasedpathconversion.cpp index 27d126cd46..bb1721cf99 100644 --- a/Applications/FunctionBasedPathConversion/functionbasedpathconversion.cpp +++ b/Applications/FunctionBasedPathConversion/functionbasedpathconversion.cpp @@ -1,44 +1,86 @@ -#include - -#include -#include -#include +/* -------------------------------------------------------------------------- * + * OpenSim: fbp-compiler.cpp * + * -------------------------------------------------------------------------- * + * ScapulothoracicJoint is offered as an addition to the OpenSim API * + * See http://opensim.stanford.edu and the NOTICE file for more information. * + * * + * OpenSim is developed at Stanford University and is supported by: * + * * + * - The National Institutes of Health (U54 GM072970, R24 HD065690) * + * - DARPA, through the Warrior Web program * + * - The Chan Zuckerberg Initiative (CZI 2020-218896) * + * * + * Copyright (c) 2005-2021 Stanford University, TU Delft, and the Authors * + * Author(s): Joris Verhagen * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); you may * + * not use this file except in compliance with the License. You may obtain a * + * copy of the License at http://www.apache.org/licenses/LICENSE-2.0. * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + * -------------------------------------------------------------------------- */ + +#include +#include +#include + +#include #include -#include -#include -#include - -using namespace OpenSim; -using namespace std; +#include +#include -static const char usage[] = "FunctionBasedPathModelTool [--help] MODEL OUTPUT_NAME"; +static const char usage[] = "FunctionBasedPathConversion [--help] INPUT_MODEL OUTPUT_NAME"; static const char help_text[] = R"( ARGS --help print this help - -v, --verbose print verbose output DESCRIPTION - This tool tries to convert an .osim file (MODEL) that contains - `GeometryPath`s and `PointBasedPath`s, into a functionally equivalent model - file, written to ${OUTPUT_NAME}.osim, that contains `FunctionBasedPath`s. - - The main reason to do this is performance. Computing a path at each timestep - in a simulation can be computationally expensive - especially if the path is - complex (e.g. contains complex wrapping geometry). Pre-computing the - path's topology ahead of time into a function-based lookup *may* speed up - simulations that spend a significant amount of time computing paths. - - This tool effectively: - - - Reads MODEL (the source model) - - Searches for `GeometryPath`s and `PointBasedPath`s in the source model - - Tries to parameterize those paths against the source model's coordinates - (e.g. joint coordinates), to produce an n-dimensional Bezier curve fit - of those paths - - Saves the fit data to ${OUTPUT_NAME}_DATA_${i}.txt, where `i` is an + This compiler tries to convert an .osim model input file (INPUT_MODEL), which + may contain `` or ``s, into a functionally + equivalent model output file (${OUTPUT_NAME}.osim) with associated curve + fitting data (${OUTPUT_NAME}_DATA_${i}.txt). The output model is the same, + but with each `` or `` potentially replaced by a + ``. + + The phrases "functionally equivalent" and "potentially replaced" are + important. The implementation tries to parameterize each input (point-based) + path with the coordinates in the input model. The implementation will + permute through the coordinates, trying to figure out which of them + ultimately affect the input path. If the implementation determines the + coordintate-to-path relationship, it will then try and fit the relationship + to a multidimensional curve. If that curve appears to produce the same + same outputs as the input (point-based) path, it will replace that path + with the function-/curve-based equivalent. This replacement is only + "functionally equivalent" if the model is then used in ways that ensure its + coordinates roughly stay in the same value range as was used during curve + fitting. Input paths are only "potentially replaced" because the implementation + may not be able to parameterize all input paths. + + The primary reason to replace point-based (input) paths with function-based + (output) equivalents is runtime performance. Point-based path computations + can be expensive--especially if those paths are "wrapped" around other geometry-- + whereas function-based paths are (effectively) lookups into precomputed curves. + Those curves are usually smooth, so the resulting path outpus (length, speed, + etc.) are usually smoother when integrated over multiple states. This smoothness + can accelerate error-controlled integration schemes (OpenSim's default). + + If performance isn't an issue for you, you should probably keep using point-based + paths. + + IMPLEMENTATION STEPS (high-level): + + - Reads INPUT_MODEL + - Finds `GeometryPath`/`PointBasedPath`s in INPUT_MODEL + - Parameterizes each input path against each of INPUT_MODEL's coordinates + to produce an n-dimensional Bezier curve fit of those paths + - Saves the curve data to ${OUTPUT_NAME}_DATA_${i}.txt, where `i` is an arbirary ID that links the `FunctionBasedPath` in the output .osim file to the Bezier fit's data - Updates the source model to contain `FunctionBasedPath`s @@ -46,86 +88,75 @@ DESCRIPTION EXAMPLE USAGE - FunctionBasedPathModelTool RajagopalModel.osim RajagopalModel_Precomputed.osim + FunctionBasedPathModelTool RajagopalModel.osim RajagopalModel_Precomputed )"; -int main(int argc, char **argv) -{ - try { - // skip exe name - --argc; - ++argv; - - bool verbose = false; - char const* sourceModelPath = nullptr; - char const* outputName = nullptr; - - // parse CLI args - { - int nUnnamed = 0; - while (argc) { - const char* arg = argv[0]; - - // handle unnamed args - if (arg[0] != '-') { - switch (nUnnamed) { - case 0: // MODEL - sourceModelPath = arg; - break; - case 1: // OUTPUT_NAME - outputName = arg; - break; - default: - std::cerr << "FunctionBasedPathModelTool: error: too many arguments: should only supply 'MODEL' and 'OUTPUT_NAME'\n\nUSAGE: " - << usage - << std::endl; - return -1; - } - - ++nUnnamed; - --argc; - ++argv; - continue; - } - - // handle flagged args (e.g. --arg) - if (std::strcmp(arg, "--help") == 0) { - std::cout << "usage: " << usage << '\n' << help_text << std::endl; - return 0; - } else if (std::strcmp(arg, "--verbose") == 0 || std::strcmp(arg, "-v") == 0) { - verbose = true; - --argc; - ++argv; - } else { - std::cerr << "FunctionBasedPathModelTool: error: unknown argument '" - << arg - << "': see --help for usage info"; - return -1; - } - } - - if (nUnnamed != 2) { - std::cerr << "FunctionBasedPathModelTool: error: too few arguments supplied\n\n" +int main(int argc, char **argv) { + // skip exe name + --argc; + ++argv; + + // set during parsing + char const* sourceModelPath = nullptr; + char const* outputName = nullptr; + + // parse CLI args + int nUnnamed = 0; + while (argc) { + const char* arg = *argv; + + if (arg[0] != '-') { // handle unnamed args + switch (nUnnamed) { + case 0: + // INPUT_MODEL + sourceModelPath = arg; + break; + case 1: + // OUTPUT_NAME + outputName = arg; + break; + default: + std::cerr << "FunctionBasedPathModelTool: error: too many arguments: should only supply 'MODEL' and 'OUTPUT_NAME'\n\nUSAGE: " << usage << std::endl; return -1; } - assert(argc == 0); - assert(sourceModelPath != nullptr); - assert(outputName != nullptr); - } - FunctionBasedPathConversionTool tool(sourceModelPath,outputName); - bool success = tool.run(); - if (success){ - return 0; - } else { - return 1; + ++nUnnamed; + --argc; + ++argv; + continue; + } else { // else: handle named args + if (std::strcmp(arg, "--help") == 0) { + std::cout << "usage: " << usage << '\n' << help_text << std::endl; + return 0; + } else { + std::cerr << "FunctionBasedPathModelTool: error: unknown argument '" + << arg + << "': see --help for usage info"; + return -1; + } } + } - } catch(const std::exception& x) { - log_error("Exception in ID: {}", x.what()); + // ensure inputs are correct + if (nUnnamed != 2) { + std::cerr << "FunctionBasedPathModelTool: error: too few arguments supplied\n\n" + << usage + << std::endl; + return -1; + } + + assert(argc == 0); + assert(sourceModelPath != nullptr); + assert(outputName != nullptr); + + // run the tool + try { + OpenSim::FunctionBasedPathConversionTool tool(sourceModelPath,outputName); + return tool.run() ? 0 : 1; + } catch(const std::exception& ex) { + OpenSim::log_error("Exception in ID: {}", ex.what()); return -1; } - return 0; } diff --git a/Applications/FunctionBasedPathConversion/test/testFunctionBasedPathConversion.cpp b/Applications/FunctionBasedPathConversion/test/testFunctionBasedPathConversion.cpp index eefee85013..e974f7c16b 100644 --- a/Applications/FunctionBasedPathConversion/test/testFunctionBasedPathConversion.cpp +++ b/Applications/FunctionBasedPathConversion/test/testFunctionBasedPathConversion.cpp @@ -1,13 +1,16 @@ /* -------------------------------------------------------------------------- * - * OpenSim: testForward.cpp * + * OpenSim: testFunctionBasedPathConversion.cpp * * -------------------------------------------------------------------------- * - * The OpenSim API is a toolkit for musculoskeletal modeling and simulation. * + * ScapulothoracicJoint is offered as an addition to the OpenSim API * * See http://opensim.stanford.edu and the NOTICE file for more information. * - * OpenSim is developed at Stanford University and supported by the US * - * National Institutes of Health (U54 GM072970, R24 HD065690) and by DARPA * - * through the Warrior Web program. * * * - * Copyright (c) 2005-2017 Stanford University and the Authors * + * OpenSim is developed at Stanford University and is supported by: * + * * + * - The National Institutes of Health (U54 GM072970, R24 HD065690) * + * - DARPA, through the Warrior Web program * + * - The Chan Zuckerberg Initiative (CZI 2020-218896) * + * * + * Copyright (c) 2005-2021 Stanford University, TU Delft, and the Authors * * Author(s): Joris Verhagen * * * * Licensed under the Apache License, Version 2.0 (the "License"); you may * @@ -20,119 +23,139 @@ * See the License for the specific language governing permissions and * * limitations under the License. * * -------------------------------------------------------------------------- */ -// functionbasedpathconversion.cpp -// author: Joris Verhagen -// INCLUDE +#include +#include +#include +#include +#include + #include #include -#include +#include +#include +#include using namespace OpenSim; -using namespace std; -void testArm(); +void testArmModelConversionAccuracy() { + std::string inputModelPath = "arm26.osim"; + std::string outputModelName = "arm26_FBP"; + + // run the function-based path (FBP) conversion tool to create an FBP-based output + FunctionBasedPathConversionTool tool{inputModelPath, outputModelName}; + tool.run(); + + // load both the input and output into memory + Model inputModel{inputModelPath}; + Model outputModel{outputModelName + ".osim"}; + + // init the input model + inputModel.finalizeConnections(); + inputModel.finalizeFromProperties(); + inputModel.initSystem(); + + std::cout << "----- input model details -----\n"; + inputModel.printSubcomponentInfo(); + + // init the output model + outputModel.finalizeConnections(); + outputModel.finalizeFromProperties(); + outputModel.initSystem(); + + std::cout << "----- output model details -----\n"; + outputModel.printSubcomponentInfo(); + + // connect reporters to each model + std::string force = "/forceset/TRIlong"; + std::string output = "length"; + + // connect reporter to input model + { + auto inputModelReporter = std::make_unique(); + inputModelReporter->setName("point_results"); + inputModelReporter->set_report_time_interval(0.05); + inputModelReporter->addToReport(inputModel.getComponent(force + "/pointbasedpath").getOutput(output)); + inputModel.addComponent(inputModelReporter.release()); + } + // connect reporter to output model + { + auto outputModelReporter = std::make_unique(); + outputModelReporter ->setName("function_results"); + outputModelReporter ->set_report_time_interval(0.05); + outputModelReporter ->addToReport(outputModel.getComponent(force + "/functionbasedpath").getOutput(output)); + outputModel.addComponent(outputModelReporter.release()); + } -int main() { - SimTK_START_TEST("testFunctionBasedPathConversion"); - // test arm model conversion accuracy - SimTK_SUBTEST(testArm); - SimTK_END_TEST(); + // init physical system + states + SimTK::State& inputModelState = inputModel.initSystem(); + SimTK::State& outputModelState = outputModel.initSystem(); + + // these are accumulated by each test run + struct TestStats { + std::chrono::high_resolution_clock::duration simTime{0}; + int stepsAttempted = 0; + int stepsTaken = 0; + std::string name; + + TestStats(std::string name_) : name{name_} {} + }; + + // function that runs a single test + auto runTest = [](OpenSim::Model& model, SimTK::State& state, TestStats& stats, double finalSimTime) { + OpenSim::Manager manager{model}; + manager.initialize(state); + + auto before = std::chrono::high_resolution_clock::now(); + manager.integrate(finalSimTime); + auto after = std::chrono::high_resolution_clock::now(); + + stats.simTime += after - before; + stats.stepsAttempted += manager.getIntegrator().getNumStepsAttempted(); + stats.stepsTaken += manager.getIntegrator().getNumStepsTaken(); + }; + + // setup + run the tests + TestStats inputStats{"Input Model (point-based paths)"}; + TestStats outputStats{"Output Model (function-based paths)"}; + int numRepeats = 10; + double finalSimTime = 3.5; + + // exercise input model + std::cerr << "----- running input model (point based path) tests -----\n"; + for (int i = 0; i < numRepeats; ++i) { + runTest(inputModel, inputModelState, inputStats, finalSimTime); + } + + // exercise output model + std::cerr << "----- running output model (function based path) tests -----\n"; + for (int i = 0; i < numRepeats; ++i) { + runTest(outputModel, outputModelState, outputStats, finalSimTime); + } + + // average out and print the stats + for (auto ts : {inputStats, outputStats}) { + ts.simTime /= numRepeats; + ts.stepsAttempted /= numRepeats; + ts.stepsTaken /= numRepeats; + + long millis = static_cast(std::chrono::duration_cast(ts.simTime).count()); + + printf("%s: \n avg. time (ms) = %ld \n integration steps attempted = %i \n integration steps taken = %i)", + ts.name.c_str(), + millis, + ts.stepsAttempted, + ts.stepsTaken); + } } -void testArm(){ +int main() { try { - string modelName = "arm26.osim"; - string newModelName = "arm26_FBP.osim"; - - // test creating a FBP model - FunctionBasedPathConversionTool tool(modelName,newModelName); - tool.run(); - - // test loading in a FBP model - Model modelPoint(modelName); - Model modelFunction(newModelName); - // load/overwrite interp from file - - modelPoint.finalizeConnections(); - modelPoint.finalizeFromProperties(); - modelPoint.initSystem(); - modelPoint.printSubcomponentInfo(); - - modelFunction.finalizeConnections(); - modelFunction.finalizeFromProperties(); - modelFunction.initSystem(); - modelFunction.printSubcomponentInfo(); - - // test simulating a FBP model - auto reporterPoint = new ConsoleReporter(); - reporterPoint->setName("point_results"); - reporterPoint->set_report_time_interval(0.05); - reporterPoint->addToReport(modelPoint.getComponent("/forceset/TRIlong/pointbasedpath").getOutput("length")); - modelPoint.addComponent(reporterPoint); - - auto reporterFunction = new ConsoleReporter(); - reporterFunction ->setName("function_results"); - reporterFunction ->set_report_time_interval(0.05); - reporterFunction ->addToReport(modelFunction.getComponent("/forceset/TRIlong/functionbasedpath").getOutput("length")); - modelFunction.addComponent(reporterFunction); - - SimTK::State& pointState = modelPoint.initSystem(); - SimTK::State& functionState = modelFunction.initSystem(); - - chrono::milliseconds pbpSimTime{0}; - chrono::milliseconds fbpSimTime{0}; - int pbpStepsAttempted = 0; - int fbpStepsAttempted = 0; - int pbpStepsTaken = 0; - int fbpStepsTaken= 0; - - int n = 10; - double tFinal = 3.5; - for (int i=0; i(dt); - } - - for (int i=0; i(dt); - } - pbpSimTime /= n; - fbpSimTime /= n; - pbpStepsAttempted /= n; - fbpStepsAttempted /= n; - pbpStepsTaken /= n; - fbpStepsTaken /= n; - - cout << "\navg-time PBP: " << pbpSimTime.count() << endl; - cout << "avg-time FBP: " << fbpSimTime.count() << endl; - - cout << "\nsteps attempted PBP: " << pbpStepsAttempted << endl; - cout << "steps attempted FBP: " << fbpStepsAttempted << endl; - - cout << "\nsteps taken PBP: " << pbpStepsTaken << endl; - cout << "steps taken FBP: " << fbpStepsTaken << endl; - - // test accuracy of FBP approximation - - } catch (const Exception& e) { - e.print(cerr); + SimTK_START_TEST("testFunctionBasedPathConversion"); + SimTK_SUBTEST(testArmModelConversionAccuracy); + SimTK_END_TEST(); + } catch (const std::exception& ex) { + OpenSim::log_error(ex.what()); } - cout << "Done" << endl; } From 360e6d8c82930524d9e8115b6502d276e28a5074 Mon Sep 17 00:00:00 2001 From: Travis CI Date: Wed, 18 Aug 2021 21:49:55 +0200 Subject: [PATCH 26/36] Minor C++11 change to make it compile on Ubuntu --- .../test/testFunctionBasedPathConversion.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Applications/FunctionBasedPathConversion/test/testFunctionBasedPathConversion.cpp b/Applications/FunctionBasedPathConversion/test/testFunctionBasedPathConversion.cpp index e974f7c16b..46701a1a24 100644 --- a/Applications/FunctionBasedPathConversion/test/testFunctionBasedPathConversion.cpp +++ b/Applications/FunctionBasedPathConversion/test/testFunctionBasedPathConversion.cpp @@ -72,7 +72,7 @@ void testArmModelConversionAccuracy() { // connect reporter to input model { - auto inputModelReporter = std::make_unique(); + auto inputModelReporter = std::unique_ptr{new ConsoleReporter{}}; inputModelReporter->setName("point_results"); inputModelReporter->set_report_time_interval(0.05); inputModelReporter->addToReport(inputModel.getComponent(force + "/pointbasedpath").getOutput(output)); @@ -81,7 +81,7 @@ void testArmModelConversionAccuracy() { // connect reporter to output model { - auto outputModelReporter = std::make_unique(); + auto outputModelReporter = std::unique_ptr{new ConsoleReporter{}}; outputModelReporter ->setName("function_results"); outputModelReporter ->set_report_time_interval(0.05); outputModelReporter ->addToReport(outputModel.getComponent(force + "/functionbasedpath").getOutput(output)); From 4cc4100d89e7caed770c60ae0b4bdcb929d941e9 Mon Sep 17 00:00:00 2001 From: Travis CI Date: Mon, 30 Aug 2021 11:15:54 +0200 Subject: [PATCH 27/36] Made file readers switch to model dir before reading files (so apps can read files from any dir) --- .../Simulation/Model/FunctionBasedPath.cpp | 36 ++++++++++++++----- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/OpenSim/Simulation/Model/FunctionBasedPath.cpp b/OpenSim/Simulation/Model/FunctionBasedPath.cpp index 8fbc44e801..7514fe274a 100644 --- a/OpenSim/Simulation/Model/FunctionBasedPath.cpp +++ b/OpenSim/Simulation/Model/FunctionBasedPath.cpp @@ -5,6 +5,7 @@ #include "PointForceDirection.h" #include +#include #include #include #include @@ -735,7 +736,7 @@ static Interpolate readInterp(const std::string &path) { }; } -static std::vector readInterpCoords(const std::string &path, OpenSim::Component &root){ +static std::vector readInterpCoords(const std::string& path, OpenSim::Component& root) { std::ifstream file{path}; if (!file) { @@ -791,7 +792,7 @@ static std::vector readInterpCoords(const std::strin } std::vector coords; - for (std::string coord : coordinates){ + for (const std::string& coord : coordinates) { const OpenSim::Component& comp = root.getComponent(coord); if (comp.getAbsolutePathString() == coord){ const OpenSim::Coordinate* c = dynamic_cast(&comp); @@ -827,11 +828,18 @@ void OpenSim::FunctionBasedPath::extendFinalizeFromProperties() { Super::extendFinalizeFromProperties(); + // when finalizing from properties, try to load the backing file that contains + // interpolated data (the `data_path` property) + bool hasBackingFile = !get_data_path().empty(); bool hasInMemoryFittingData = !_impl->interp.getdS().empty(); if (hasBackingFile) { - // load the file, always + // change to the directory of the model file (the path in the osim is relative to + // the osim, not the process's working directory) + auto cwdchanger = IO::CwdChanger::changeToParentOf(getRoot().getDocumentFileName()); + + // read the interpolation data into a new interpolation structure _impl->interp = readInterp(get_data_path()); } else if (hasInMemoryFittingData) { // do nothing: just use the already-loaded in-memory fitting data @@ -844,20 +852,30 @@ void OpenSim::FunctionBasedPath::extendFinalizeFromProperties() } } -void OpenSim::FunctionBasedPath::extendFinalizeConnections(OpenSim::Component &root) +void OpenSim::FunctionBasedPath::extendFinalizeConnections(OpenSim::Component& root) { - Model* model = dynamic_cast(&root); // Allow (model) component to include its own subcomponents // before calling the base method which automatically invokes // connect all the subcomponents. - if (model) - connectToModel(*model); + { + Model* model = dynamic_cast(&root); + if (model) { + connectToModel(*model); + } + } bool hasBackingFile = !get_data_path().empty(); bool hasInMemoryFittingData = !_impl->interp.getdS().empty(); + if (hasBackingFile) { - // set the coordinates - _impl->interp.setCoords(readInterpCoords(get_data_path(),root)); + // change to the directory of the model file + auto cwdchanger = IO::CwdChanger::changeToParentOf(getRoot().getDocumentFileName()); + + // read the interp coords (text) file + std::vector coords = readInterpCoords(get_data_path(), root); + + // update interpolator implementation with the (deserialized) coordinates + _impl->interp.setCoords(std::move(coords)); } else if (hasInMemoryFittingData) { // do nothing: just use the already-loaded in-memory fitting data return; From c10ded64b86517e2b7d16132e7dd2aa53bea89fd Mon Sep 17 00:00:00 2001 From: Travis CI Date: Tue, 31 Aug 2021 20:11:36 +0200 Subject: [PATCH 28/36] Refactored a variety of implementation files --- .../CMakeLists.txt | 3 - .../test/testFunctionBasedPathConversion.cpp | 2 +- .../Simulation/Model/FunctionBasedPath.cpp | 1398 ++++++----------- OpenSim/Simulation/Model/FunctionBasedPath.h | 130 +- .../Model/FunctionBasedPathDiscretization.h | 44 + .../FunctionBasedPathDiscretizationSet.h | 39 + .../RegisterTypes_osimSimulation.cpp | 5 +- OpenSim/Simulation/osimSimulation.h | 2 + 8 files changed, 667 insertions(+), 956 deletions(-) create mode 100644 OpenSim/Simulation/Model/FunctionBasedPathDiscretization.h create mode 100644 OpenSim/Simulation/Model/FunctionBasedPathDiscretizationSet.h diff --git a/Applications/FunctionBasedPathConversion/CMakeLists.txt b/Applications/FunctionBasedPathConversion/CMakeLists.txt index b954307e6a..8fc5eea99b 100644 --- a/Applications/FunctionBasedPathConversion/CMakeLists.txt +++ b/Applications/FunctionBasedPathConversion/CMakeLists.txt @@ -5,6 +5,3 @@ endif() if(BUILD_TESTING) subdirs(test) endif(BUILD_TESTING) - - - diff --git a/Applications/FunctionBasedPathConversion/test/testFunctionBasedPathConversion.cpp b/Applications/FunctionBasedPathConversion/test/testFunctionBasedPathConversion.cpp index 46701a1a24..d117b2b55e 100644 --- a/Applications/FunctionBasedPathConversion/test/testFunctionBasedPathConversion.cpp +++ b/Applications/FunctionBasedPathConversion/test/testFunctionBasedPathConversion.cpp @@ -142,7 +142,7 @@ void testArmModelConversionAccuracy() { long millis = static_cast(std::chrono::duration_cast(ts.simTime).count()); - printf("%s: \n avg. time (ms) = %ld \n integration steps attempted = %i \n integration steps taken = %i)", + printf("%s: \n avg. time (ms) = %ld \n integration steps attempted = %i \n integration steps taken = %i)\n", ts.name.c_str(), millis, ts.stepsAttempted, diff --git a/OpenSim/Simulation/Model/FunctionBasedPath.cpp b/OpenSim/Simulation/Model/FunctionBasedPath.cpp index 7514fe274a..2e4727683b 100644 --- a/OpenSim/Simulation/Model/FunctionBasedPath.cpp +++ b/OpenSim/Simulation/Model/FunctionBasedPath.cpp @@ -1,67 +1,36 @@ -#include "GeometryPath.h" -#include "ConditionalPathPoint.h" #include "FunctionBasedPath.h" -#include "MovingPathPoint.h" -#include "PointForceDirection.h" -#include -#include #include #include #include +#include +#include +#include #include -#include -#include -#include -#include -#include -#include -#include - -using namespace std; -using namespace OpenSim; -using namespace SimTK; -using SimTK::Vec3; - -template -void printVector(std::vector vec){ - std::cout << "vec["< -struct Defer final { - Callback cb; - Defer(Callback _cb) : cb{std::move(_cb)} { - } - Defer(Defer const&) = delete; - Defer(Defer&&) noexcept = default; - Defer& operator=(Defer const&) = delete; - Defer& operator=(Defer&&) = delete; - ~Defer() noexcept { - cb(); - } -}; -template -Defer defer_action(Callback cb) { - return Defer{std::move(cb)}; -} +// upper limit on the number of coordinates that can be reasonably interpolated +// the implementation +// +// interpolation can suffer from a combinatorial explosion. Even if you only discretize +// two points per coordinate, 16 input coordinates can produce 2^16 discretizations +static constexpr size_t g_MaxCoordsThatCanBeInterpolated = 16; + +// number of "probing" steps to take when trying to figure out whether a given coordinate +// affects a point-based path +static constexpr int g_NumCoordProbingSteps = 3; -// Returns `true` if changing the supplied `Coordinate` changes the moment arm +// the minimum amount a moment arm must change when probing for the probing step to return +// `true` (i.e. "this coordinate does affect the path") +static constexpr double g_MinMomentArmChangeRequiredForPositiveProbe = 0.001; + +// returns `true` if changing the supplied `Coordinate` changes the moment arm // of the supplied `PointBasedPath` (PBP) -static bool coordinateAffectsPBP( +static bool coordAffectsPBP( OpenSim::PointBasedPath const& pbp, OpenSim::Coordinate const& c, SimTK::State& state) { - static constexpr int numCoordProbingSteps = 3; - static constexpr double minMomentArmChangeRequired = 0.001; - bool initialLockedState = c.getLocked(state); double initialValue = c.getValue(state); @@ -69,14 +38,14 @@ static bool coordinateAffectsPBP( double start = c.getRangeMin(); double end = c.getRangeMax(); - double step = (end - start) / numCoordProbingSteps; + double step = (end - start) / g_NumCoordProbingSteps; bool affectsCoord = false; for (double v = start; v <= end; v += step) { c.setValue(state, v); double ma = pbp.computeMomentArm(state, c); - if (std::abs(ma) >= minMomentArmChangeRequired) { + if (std::abs(ma) >= g_MinMomentArmChangeRequiredForPositiveProbe) { affectsCoord = true; break; } @@ -88,450 +57,475 @@ static bool coordinateAffectsPBP( return affectsCoord; } -// Fills the output vector with n linearly-spaced values in the inclusive range -// [begin, end] -static void linspace(double begin, - double end, - size_t n, - std::vector& out) { - if (n == 0) { - return; - } +// returns a sequence of `OpenSim::Coordinate`s that affect the supplied +// point-based path (PBP) +// +// is not guaranteed to find *all* coordinates that affect the supplied PBP, +// because that may involve extreme probing (which this implementation does not +// do) +static std::vector coordsThatAffectPBP(OpenSim::Model const& model, + OpenSim::PointBasedPath const& pbp, + SimTK::State& st) { + std::vector rv; + for (OpenSim::Coordinate const& c : model.getComponentList()){ + if (c.getMotionType() == OpenSim::Coordinate::MotionType::Coupled) { + continue; + } - if (n == 1) { - out.push_back(begin); - return; - } + if (!coordAffectsPBP(pbp, c, st)) { + continue; + } - double step = (end - begin) / (n-1); - for (size_t i = 0; i < n-1; ++i) { - out.push_back(begin + i*step); + rv.push_back(&c); } - out.push_back(end); + return rv; } -// A discretization of n points along the (incluside) interval [begin, end] +// discretization of a particular coordinate +// +// assumes `nsteps` evenly-spaced points ranging from [begin, end] (inclusive) struct Discretization final { double begin; double end; - int nPoints; - double gridsize; + int nsteps; }; -// overload for linspace that is specialized for `Discretization`s -static void linspace(const Discretization& d, std::vector& out) { - assert(d.nPoints >= 0); +// compute ideal discretization of the given coordinate +static Discretization discretizationForCoord(OpenSim::Coordinate const&) { + // TODO: these hacky ranges were imported from the original code. Joris had this + // commented out: + // dc.begin = std::max(c.getRangeMin(), -static_cast(SimTK_PI)); + // dc.end = std::min(c.getRangeMax(), static_cast(SimTK_PI)); + Discretization d; + d.begin = -static_cast(SimTK_PI)/2; + d.end = static_cast(SimTK_PI)/2; + d.nsteps = 80; + double step = (d.end-d.begin) / (d.nsteps-1); + + // expand range slightly in either direction to ensure interpolation is + // clean around the edges + d.begin -= step; + d.end += 2.0 * step; + d.nsteps += 3; + + return d; +} + +// compute all permutations of the coordinates for the given discretizations +// +// these output values are stored "lexographically", with coords being "big endian", so: +// +// - [coord[0].begin, coord[1].begin, ..., coord[n-1].begin] +// - [coord[0].begin, coord[1].begin, ..., (coord[n-1].begin + step)] +// - [coord[0].begin, coord[1].begin, ..., (coord[n-1].begin + 2*step)] +// - ... +// - [coord[0].begin, (coord[1].begin + step), ..., coord[n-1].begin] +// - [coord[0].begin, (coord[1].begin + step), ..., (coord[n-1].begin + step)] +// - ... +// - [(coord[0].begin + step), coord[1].begin, ..., coord[n-1].begin] +// - [(coord[0].begin + step), coord[1].begin, ..., (coord[n-1].begin + step)] +static std::vector computeEvaluationsFromPBP(OpenSim::PointBasedPath const& pbp, + SimTK::State& state, + OpenSim::Coordinate const** coords, + Discretization const* discs, + size_t ncoords) { + std::vector rv; + + if (ncoords == 0) { // edge-case: logic below assumes ncoords > 0 + return rv; + } + + OPENSIM_THROW_IF(ncoords > g_MaxCoordsThatCanBeInterpolated, OpenSim::Exception, "too many coordinates affect this path - the FunctionBasedPath implementation cannot handle this"); + + // number of evaluations is the total number of permutations of all dimensions for + // all discretizations + int expectedEvals = 1; + for (size_t i = 0; i < ncoords; ++i) { + expectedEvals *= discs[i].nsteps; + } + rv.reserve(expectedEvals); + + // holds which "step" in each Coordinate's [begin, end] discretization we + // have evaluated up to + std::array discStepIdx{}; + + while (discStepIdx[0] < discs[0].nsteps) { + + // set all coordinate values for this step + for (size_t i = 0; i < ncoords; ++i) { + Discretization const& discr = discs[i]; + double step = (discr.end - discr.begin) / discr.nsteps; + double val = discr.begin + step*discr.end; + coords[i]->setValue(state, val); + } + + // eval the length of the PBP for this permutation of coordinate values + { + double eval = pbp.getLength(state); + rv.push_back(eval); + } + + // update which coordinate steps we're up to for each coordinate + // + // always updates "least significant" coordinate first, then performs + // "carry propagation" to the "more significant" coordinates + int pos = ncoords - 1; + discStepIdx[pos]++; + while (pos > 0 && discStepIdx[pos] >= discs[pos].nsteps) { + discStepIdx[pos] = 0; // overflow + ++discStepIdx[pos-1]; // carry + --pos; // propagate + } + } + + SimTK_ASSERT_ALWAYS(discStepIdx[0] == discs[0].nsteps, "should be true, after the final overflow"); + for (size_t i = 1; i < discStepIdx.size(); ++i) { + SimTK_ASSERT_ALWAYS(discStepIdx[i] == 0, "these less-significant coordinates should all be overflow-n by the end of the alg"); + } + SimTK_ASSERT_ALWAYS(rv.size() == static_cast(expectedEvals), "these two values should match, given the above alg"); - out.clear(); - linspace(d.begin, d.end, static_cast(d.nPoints), out); + return rv; } -class Interpolate final { -private: - // the dimensionality of the interpolation (i.e. a 2D fit == 2) - int dimensions; +struct OpenSim::FunctionBasedPath::Impl final { + // direct pointers to the coordinates that were discretized + std::vector coords; - // vector containing the orthogonal discretization vectors - // e.g. disc[0] = xrange, disc[1] = yrange etc. - std::vector> discretizations; + // absolute paths of each coordinate (1:1 with coords) + std::vector coordAbsPaths; - std::vector discSizes; + // discretizations ranges for each coordinate (1:1 with coords) + std::vector discretizations; - // array containing the evaluations over the discretizations + // evaluations for each permutation of coordinates' discretizations std::vector evals; - // vector containing index closest to discretization point - std::vector n; - - // vector containing fraction of closest index to discretization - // point to next - std::vector u; - - // array of polynomial evaluation - std::vector> beta; - - // vector of an index in the evalsPair - std::vector loc; - - // discretization vector containing, for each dimension, a struct that - // contains [begin, end, number of points, step-size] - std::vector dS; - - // vector of coordinate pointers which are used to relate an incoming state - // to a vector of relevant coordinates for the interpolation - std::vector coords; + // satisfies clone-ability requirement of SimTK::ClonePtr + Impl* clone() const { + auto p = std::unique_ptr{new Impl{*this}}; + return p.release(); + } +}; -public: - Interpolate() = default; +// compute fresh implementation data from an existing PointBasedPath by +// evaluating it and fitting it to a function-based curve +static void Impl_ComputeFromPBP(OpenSim::FunctionBasedPath::Impl& impl, + const OpenSim::Model& model, + const OpenSim::PointBasedPath& pbp) { - // Precomputed data constructor (length evaluations are already known) - Interpolate( - std::vector coordsIn, - std::vector dSIn, - std::vector evalsIn) : + // copy model, so we can independently equilibrate + realize + modify the + // copy without having to touch the source model + std::unique_ptr modelClone{model.clone()}; + SimTK::State& initialState = modelClone->initSystem(); + modelClone->equilibrateMuscles(initialState); + modelClone->realizeVelocity(initialState); - dimensions(static_cast(dSIn.size())), - evals(evalsIn), - n(dimensions, 0), - u(dimensions, 0), - loc(dimensions, 0), - dS(dSIn), - coords(coordsIn) - { - std::vector dc_; - for (size_t i = 0; i < static_cast(dimensions); i++) { - beta.push_back({0, 0, 0, 0}); + // set `coords` + impl.coords = coordsThatAffectPBP(*modelClone, pbp, initialState); - linspace(dS[i], dc_); - discretizations.push_back(dc_); - discSizes.push_back(dS[i].gridsize); - } + // set `coordAbsPaths` + impl.coordAbsPaths.clear(); + impl.coordAbsPaths.reserve(impl.coords.size()); + for (const OpenSim::Coordinate* c : impl.coords) { + impl.coordAbsPaths.push_back(c->getAbsolutePathString()); } - // Precomputed data constructor without explicit coords - // used as a creation of an interpolation object after reading the data in - // extendFinalizeProperties. The coordinates are then related when the - // model is connected (as we need to sample the coordinates that affect a - // muscle again) - Interpolate( - std::vector dSIn, - std::vector evalsIn) : - - dimensions(static_cast(dSIn.size())), - evals(evalsIn), - n(dimensions, 0), - u(dimensions, 0), - loc(dimensions, 0), - dS(dSIn), - coords(std::vector(static_cast(dimensions))) - { - std::vector dc_; - for (size_t i = 0; i < static_cast(dimensions); i++) { - beta.push_back({0, 0, 0, 0}); - - linspace(dS[i], dc_); - discretizations.push_back(dc_); - discSizes.push_back(dS[i].gridsize); - } + // set `discretizations` + impl.discretizations.clear(); + impl.discretizations.reserve(impl.coords.size()); + for (const OpenSim::Coordinate* c : impl.coords) { + impl.discretizations.push_back(discretizationForCoord(*c)); } - // General interface constructor - // allows one to create an interface constructor as shown below with a - // vector of coordinates. This is the 'from scratch' constructor that you - // could use manually - Interpolate(OpenSim::PointBasedPath const& pbp, - OpenSim::Coordinate const** cBegin, - OpenSim::Coordinate const** cEnd, - SimTK::State& st, - std::vector& nPoints) : - - dimensions(static_cast(nPoints.size())), - n(dimensions,0), - u(dimensions,0), - loc(dimensions,0) - { - // get the size of the 'vector'. Inclusive bottom, exclusive top - std::ptrdiff_t n = (cEnd - cBegin) + 1; - assert(n > 0); - assert(dimensions == (int)n); - - for (int i = 0; i < dimensions; i++) { - // put all coordinate pointers in a vector to later unpack an - // incoming state to a vector of coordinate values - coords.push_back(cBegin[i]); - // fill an n-dimensional vector of 4 sized vectors which represent - // the polynomial values - beta.push_back({0,0,0,0}); - } - - // unlock coordinates - for (int i = 0; i < dimensions; i++) { - const OpenSim::Coordinate& c = *cBegin[i]; - bool c_was_locked = c.getLocked(st); - c.setLocked(st, false); - auto unlock_c = defer_action([&] { c.setLocked(st, c_was_locked); }); - double c_initial_value = c.getValue(st); - auto reset_c_val = defer_action([&] { c.setValue(st, c_initial_value); }); - } - - // make discretization objects for interpolation class instance - Discretization dc; - for (int i = 0; i < dimensions; i++) { - const OpenSim::Coordinate& c = *cBegin[i]; - dc.begin = -static_cast(SimTK_PI)/2; - dc.end = static_cast(SimTK_PI)/2; -// dc.begin = std::max(c.getRangeMin(), -static_cast(SimTK_PI)); -// dc.end = std::min(c.getRangeMax(), static_cast(SimTK_PI)); - dc.nPoints = nPoints[i]; - dc.gridsize = (dc.end - dc.begin) / (dc.nPoints - 1); - dS.push_back(dc); - } - - // slightly extend the bound for accurate interpolation on the edges - for (int dim = 0; dim < dimensions; dim++) { - dS[dim].begin -= 1*dS[dim].gridsize; - dS[dim].end += 2*dS[dim].gridsize; - dS[dim].nPoints += 3; - } + // set `evals` + SimTK_ASSERT_ALWAYS(impl.coords.size() == impl.discretizations.size(), "these should be equal by now"); + impl.evals = computeEvaluationsFromPBP(pbp, initialState, impl.coords.data(), impl.discretizations.data(), impl.coords.size()); +} - // compute the total number of evaluations we need to do - int numOfLoops = 1; - for (int i = 0; i < dimensions; i++) { - numOfLoops *= dS[i].nPoints; - } +// init underlying implementation data from a `FunctionBasedPath`s (precomputed) properties +// +// the properties being set in the FBP usually implies that the FBP has already been built +// from a PBP at some previous point in time +static void Impl_InitFromFBPProperties(OpenSim::FunctionBasedPath::Impl& impl, + OpenSim::FunctionBasedPath const& fbp) { - std::vector cnt(dimensions); - std::vector coordValues(dimensions); - for (int i = 0; i < numOfLoops; i++) { - for (int ii = 0; ii < dimensions; ii++) { - coordValues[ii] = dS[ii].begin + (cnt[ii]*dS[ii].gridsize); - const OpenSim::Coordinate& c = *cBegin[ii]; - c.setValue(st,coordValues[ii]); - } - evals.push_back((pbp.getLength(st))); - - // update cnt values - for (int x = dimensions-1; x >= 0; x--) { - if (cnt[x] != dS[x].nPoints-1){ - cnt[x] += 1; - break; - } else { - for (int y = x; y < dimensions; y++) { - cnt[y] = 0; - } - } - } - } + OpenSim::FunctionBasedPathDiscretizationSet const& discSet = fbp.getProperty_FunctionBasedPathDiscretizationSet().getValue(); - // just make it for using the old getInterp method - std::vector dc_; - for (int i = 0; i < dimensions; i++) { - dc_.clear(); - linspace(dS[i].begin, dS[i].end, dS[i].nPoints, dc_); - discretizations.push_back(dc_); - discSizes.push_back(dS[i].nPoints); - } + // set `coords` pointers to null + // + // they are lazily looked up in a later phase (after the model is connected up) + impl.coords.clear(); + impl.coords.resize(discSet.getSize(), nullptr); + + // set `coordAbsPaths` from discretizations property + impl.coordAbsPaths.clear(); + impl.coordAbsPaths.reserve(discSet.getSize()); + for (int i = 0; i < discSet.getSize(); ++i) { + impl.coordAbsPaths.push_back(discSet[i].getProperty_coordinate_abspath().getValue()); + } + + // set `discretizations` from discretizations property + impl.discretizations.clear(); + impl.discretizations.reserve(discSet.getSize()); + for (int i = 0; i < discSet.getSize(); ++i) { + OpenSim::FunctionBasedPathDiscretization const& disc = discSet[i]; + Discretization d; + d.begin = disc.getProperty_x_begin().getValue(); + d.end = disc.getProperty_x_end().getValue(); + d.nsteps = disc.getProperty_num_points().getValue(); + impl.discretizations.push_back(d); } - // Basic constructor having a vector of coordinate pointers as input - Interpolate( - OpenSim::PointBasedPath const& pbp, - std::vector coords, - SimTK::State& st, - std::vector& nPoints) : Interpolate(pbp, - &coords[0], - &coords[coords.size()-1], - st, - nPoints) - { + // set `evals` from evaluations property + auto const& evalsProp = fbp.getProperty_Evaluations(); + impl.evals.clear(); + impl.evals.reserve(evalsProp.size()); + for (int i = 0; i < evalsProp.size(); ++i) { + impl.evals.push_back(evalsProp.getValue(i)); } +} - std::vector getRange(int i) const { - return discretizations[i]; - } +// ensure that the OpenSim::Coordinate* pointers held in Impl are up-to-date +// +// the pointers are there to reduce runtime path lookups +static void Impl_SetCoordinatePointersFromCoordinatePaths(OpenSim::FunctionBasedPath::Impl& impl, + OpenSim::Component const& c) { - int getDimension() const { - return dimensions; + for (size_t i = 0; i < impl.coords.size(); ++i) { + impl.coords[i] = &c.getComponent(impl.coordAbsPaths[i]); } +} - std::vector getdS() const { - return dS; - } +// returns interpolated path length for a given permutation of coordinate +// values +// +// `inputVals` points to a sequence of `nCoords` values that were probably +// retrieved via `Coordinate::getValue(SimTK::State const&)`. The reason +// they're provided externally is because derivative calculation can fiddle +// the values a little bit +static double Impl_GetPathLength(OpenSim::FunctionBasedPath::Impl const& impl, + double const* inputVals, + int nCoords) { - std::vector getCoords() const { - return coords; - } + SimTK_ASSERT_ALWAYS(!impl.coords.empty(), "FBPs require at least one coordinate to affect the path"); + SimTK_ASSERT_ALWAYS(nCoords == static_cast(impl.coords.size()), "You must call this function with the correct number of (precomputed) coordinate values"); - void setCoords(std::vector coordsIn) { - coords = coordsIn; - } + // compute: + // + // - the index of the first discretization step *before* the input value + // - the polynomial of the curve at that step, given its fractional distance + // toward the next step + using Polynomial = std::array; + std::array closestDiscretizationSteps{}; + std::array betas{}; + for (int coord = 0; coord < nCoords; ++coord) { + double inputVal = inputVals[coord]; + Discretization const& disc = impl.discretizations[coord]; + + // compute index of first discretization step *before* the input value and + // the fraction that the input value is towards the *next* discretization step + int idx = -1; + double frac = -1337.0; + if (inputVal < disc.begin) { + idx = 0; + frac = 0.0; + } else if (inputVal > disc.end) { + idx = disc.nsteps-1; + frac = 0.0; + } else { + // solve for `n`: inputVal = begin + n*step + double step = (disc.end - disc.begin) / (disc.nsteps - 1); + double n = (inputVal - disc.begin) / step; + double wholePart; + double fractionalPart = std::modf(n, &wholePart); + + idx = static_cast(wholePart); + frac = fractionalPart; + } + + // compute polynomial based on fraction the point is toward the next point + Polynomial p; + p[0] = +0.5*pow(frac - 1.0, 3)*frac*(2.0*frac + 1.0); + p[1] = -0.5*(frac - 1.0)*(6.0*pow(frac, 4) - 9.0*pow(frac, 3.0) + 2*frac + 2.0); + p[2] = +0.5*frac*(6.0*pow(frac, 4) - 15.0*pow(frac, 3) + 9.0*pow(frac, 2) + frac + 1); + p[3] = -0.5*(frac - 1.0)*pow(frac, 3)*(2.0*frac - 3.0); + + closestDiscretizationSteps[coord] = idx; + betas[coord] = p; + } + + // for each coord, permute through 4 locations *around* the input's location: + // + // - A one step before B + // - B the first discretization step before the input value + // - C one step after B + // - D one step after C + // + // where: + // + // - betas are coefficients that affect each location. beta[0] affects A, + // betas[1] affects B, betas[2] affects C, and betas[3] affects D - std::vector getEvals() const { - return evals; + // represent permuting through each location around each coordinate as a string + // of integer offsets that can be -1, 0, 1, or 2 + // + // the algorithm increments this array as it goes through each permutation + std::array dimIdxOffsets; + for (int coord = 0; coord < nCoords; ++coord) { + dimIdxOffsets[coord] = -1; } - double getEval() { - // get the wrapping length evaluation given a vector 'loc' which contains, - // in ascending dimension, the index in each dimension - int factor = 1; - int idx = 0; - - for (int i = 0; i < dimensions-1; i++) { - factor = 1; - for (int ii = i+1; ii <= dimensions-1; ii++) { - factor *= dS[ii].nPoints; + // permute through all locations around the input value + // + // e.g. the location permutations for 3 coords iterate like this for each + // crank of the loop + // + // [-1, -1, -1] + // [-1, -1, 0] + // [-1, -1, 1] + // [-1, -1, 2] + // [-1, 0, -1] + // ...(4^3 steps total)... + // [ 2, 2, 1] + // [ 2, 2, 2] + // [ 3, 0, 0] (the termination condition) + + double z = 0.0; + while (dimIdxOffsets[0] < 3) { + + // compute `beta` (weighted coefficient per coord) for this particular + // permutation coordinate locations (e.g. -1, 0, 0, 2) and figure out + // what the closest input value was at the weighted location. Add the + // result the the output + + double beta = 1.0; + int evalStride = 1; // space between evaluations: gets bigger at lower idx coords + int evalIdx = 0; + + // go backwards, from least-significant coordinate (highest idx) + // + // this is so that we can compute the stride as the algorithm runs + for (int coord = nCoords-1; coord >= 0; --coord) { + int offset = dimIdxOffsets[coord]; // -1, 0, 1, or 2 + int closestStep = closestDiscretizationSteps[coord]; + int step = closestStep + offset; + + beta *= betas[coord][offset+1]; + evalIdx += evalStride * step; + evalStride *= impl.discretizations[coord].nsteps; + } + + z += beta * impl.evals[evalIdx]; + + // increment the offsets + // + // this is effectively the step that permutes [-1, -1, 2] --> [-1, 0, -1] + { + int pos = nCoords-1; + ++dimIdxOffsets[pos]; // perform first (potentially overflowing) increment + while (pos > 0 && dimIdxOffsets[pos] >= 2) { // handle overflows + carry propagation + dimIdxOffsets[pos] = 0; // overflow + ++dimIdxOffsets[pos-1]; // carry propagation + --pos; } - idx += loc[i]*factor; } - idx += loc[loc.size()-1]; - - assert(idx <= evals.size()); - - return evals[idx]; } - // 0th derivative - double getInterp(const std::vector& x) { - // This is the main interpolation function - // IN: x, a vector of points within the considered interpolation range - // OUT: eval, the interpolated value - assert(x.size() == dimensions); - -// // get the index of the closest range value to the discretization point -// for (int i = 0; i < dimensions; i++){ -// n[i] = floor((x[i]-dS[i].begin)/dS[i].gridsize); -// } - -// // compute remaining fraction -// for (int i = 0; i < dimensions; i++){ -// u[i] = (x[i]-(dS[i].begin + n[i]*dS[i].gridsize))/(dS[i].gridsize); -// } - // get the index of the closest range value to the discretization point - for (int i=0; i= x[i];}); - n[i] = std::distance(discretizations[i].begin(), it)-1; - } - - // compute remaining fraction - for (int i=0; i discrLoopCnt(dimensions); - for (int i = 0; i < dimensions; i++) { - discrLoopCnt[i] = -1; - } + return z; +} - double z = 0; - double Beta = 1; - for (int cnt=0; cnt(impl.coords.size()); - z += getEval()*Beta; - - for (int x=dimensions-1; x>=0; x--){ - if (discrLoopCnt[x] != 2){ - discrLoopCnt[x] += 1; - break; - } - if (discrLoopCnt[x] == 2){ - for (int y=x; y inputVals{}; + for (int coord = 0; coord < nCoords; ++coord) { + inputVals[coord] = impl.coords[coord]->getValue(s); } - // getLength with mapping from State to vector x - double getInterp(const SimTK::State& s) { - assert(coords.size() != 0); + return Impl_GetPathLength(impl, inputVals.data(), nCoords); +} - std::vector x; - for (const OpenSim::Coordinate* c : coords) { - x.push_back(c->getValue(s)); - } +// get the *derivative* of the path length with respect to the given Coordinate index +// (in impl.coords) +static double Impl_GetPathLengthDerivative(OpenSim::FunctionBasedPath::Impl const& impl, + SimTK::State const& s, + int coordIdx) { - return getInterp(x); - } + SimTK_ASSERT_ALWAYS(!impl.coords.empty(), "FBPs require at least one coordinate to affect the path"); + SimTK_ASSERT_ALWAYS(coordIdx != -1, "coord index must be valid"); + SimTK_ASSERT_ALWAYS(coordIdx < static_cast(impl.coords.size()), "coord index must be valid"); - // getLength based on the state - double getLength(const SimTK::State& s) { - return getInterp(s); - } + int nCoords = static_cast(impl.coords.size()); - // 1st derivative - double getInterpDer(const std::vector& x, - int coordinate, - double h = 0.0001) { + // get the input value of each coordinate in the current state + std::array inputVals{}; + for (int coord = 0; coord < nCoords; ++coord) { + inputVals[coord] = impl.coords[coord]->getValue(s); + } - assert(x.size() == dimensions); - assert(coordinate <= dimensions-1); - assert(h>0 && h < (dS[coordinate].end - x[coordinate])); + // compute value at current point + double v1 = Impl_GetPathLength(impl, inputVals.data(), nCoords); - // This is the main interpolation function for derivatives - // IN: x, a vector of points within the considered interpolation range - // coordinate, the generalized coordinate of which we take derivative - // OUT: eval, the interpolated value - double f1 = getInterp(x); + // alter the input value for the to-be-derived coordinate *slightly* + inputVals[coordIdx] += 0.0001; - std::vector x2 = x; - x2[coordinate] += h; - double f2 = getInterp(x2); + // compute value at the altered point + double v2 = Impl_GetPathLength(impl, inputVals.data(), nCoords); - return (f2 - f1)/h; - } + // the derivative is how much the output changed when the input was altered + // slightly (this is a poor-man's discrete derivative method) + return (v2 - v1) / 0.0001; +} - double getInterpDer(const SimTK::State& s, int coordinate) { - assert(coords.size() != 0); +// get the *derivative* of the path length with respect to the given Coordinate +static double Impl_GetPathLengthDerivative(OpenSim::FunctionBasedPath::Impl const& impl, + SimTK::State const& s, + OpenSim::Coordinate const& c) { - std::vector x; - for (size_t i = 0; i < coords.size(); i++) { - x.push_back(coords[i]->getValue(s)); + // figure out the index of the coordinate being referred to + int coordIdx = -1; + for (int i = 0; i < static_cast(impl.coords.size()); ++i) { + if (impl.coords[i] == &c) { + coordIdx = i; + break; } - return getInterpDer(x,coordinate); } - double getInterpDer(const SimTK::State& s, - const OpenSim::Coordinate& aCoord) { - - for (size_t i = 0; i < coords.size(); i++) { - if (coords[i]->getName() == aCoord.getName()) { - return getInterpDer(s, i); - } + // ensure the coordinate was actually found, or this alg will break + if (coordIdx == -1) { + std::stringstream msg; + msg << "could not find coordiante '" << c.getName() << "' in the set of coordinates the FunctionBasedPath handles. Coordinates handled by this path are: "; + char const* delim = ""; + for (OpenSim::Coordinate const* c : impl.coords) { + msg << delim << c->getName(); + delim = ", "; } - OPENSIM_THROW(OpenSim::Exception,"could not find coordinate in getInterpDer based on given coord argument") - return 0.0; + OPENSIM_THROW(OpenSim::Exception, std::move(msg).str()); } - double getLengtheningSpeed(const SimTK::State& s) { - double lengtheningSpeed = 0.0; - - for (int i = 0; i < dimensions; i++) { - double firstDeriv = getInterpDer(s, i); - double coordinateSpeedVal = coords[i]->getSpeedValue(s); + // use the "raw" (non-lookup) version of this function + return Impl_GetPathLengthDerivative(impl, s, coordIdx); +} - lengtheningSpeed += firstDeriv * coordinateSpeedVal; - } - return lengtheningSpeed; +// get the lengthening speed of the path in the current state +static double Impl_GetLengtheningSpeed(const OpenSim::FunctionBasedPath::Impl& impl, + const SimTK::State& state) { + double rv = 0.0; + for (int coord = 0; coord < static_cast(impl.coords.size()); ++coord) { + double deriv = Impl_GetPathLengthDerivative(impl, state, coord); + double speed = impl.coords[coord]->getSpeedValue(state); + rv += deriv * speed; } -}; - -// ----- FunctionBasedPath implementation ----- - -struct OpenSim::FunctionBasedPath::Impl final { - mutable Interpolate interp; + return rv; +} - Impl* clone() const { - auto p = std::unique_ptr{new Impl{}}; - p->interp = interp; - return p.release(); - } -}; +//---------------------------------------------------------------------------- +// PUBLIC API +//---------------------------------------------------------------------------- OpenSim::FunctionBasedPath OpenSim::FunctionBasedPath::fromPointBasedPath( const Model& model, @@ -539,284 +533,38 @@ OpenSim::FunctionBasedPath OpenSim::FunctionBasedPath::fromPointBasedPath( { FunctionBasedPath fbp; - // copy relevant data from source PBP + // copy relevant data from source PBP into the output FBP fbp.upd_Appearance() = pbp.get_Appearance(); fbp.setPathPointSet(pbp.getPathPointSet()); fbp.setPathWrapSet(pbp.getWrapSet()); - std::unique_ptr modelClone{model.clone()}; - SimTK::State& initialState = modelClone->initSystem(); - modelClone->equilibrateMuscles(initialState); - modelClone->realizeVelocity(initialState); - - std::vector coordsThatAffectPBP; - for (Coordinate const& c : modelClone->getComponentList()){ - if (c.getMotionType() == Coordinate::MotionType::Coupled) { - continue; - } - - if (!coordinateAffectsPBP(pbp, c, initialState)) { - continue; - } - - coordsThatAffectPBP.push_back(&c); - std::cout << "affecting coord: " << c.getName() << std::endl; - } - - // create vector for number of interpolation points - std::vector nPoints(coordsThatAffectPBP.size(), 80); - - // reinitialize the default-initialized interp with the points - fbp._impl->interp = Interpolate{ - pbp, - std::move(coordsThatAffectPBP), - initialState, - nPoints - }; - - return fbp; -} - -static Interpolate readInterp(const std::string &path) { - // data file for FunctionBasedPath top-level structure: - // - // - plaintext - // - line-oriented - // - 3 sections (HEADERS, DISCRETIZATIONS, and EVALUATIONS) separated - // by blank lines - // - // details: - // - // line content - // ------------------------------------------------------------------- - // 0 ID (string) - // 1 - // 2 DIMENSIONS (int) - // 3 - // --- end HEADERS - // 4 DISCRETIZATION_1 - // 5 DISCRETIZATION_2 - // 6- DISCRETIZATION_n - // 3+DIMENSIONS DISCRETIZATION_${DIMENSIONS} - // 3+DIMENSIONS+1 - // --- end DISCRETIZATIONS - // 3+DIMENSIONS+2 EVAL_1_1 - // 3+DIMENSIONS+3 EVAL_1_2 - // 3+DIMENSIONS+4- EVAL_1_m - // 3+DIMENSIONS+${points_in_range} EVAL_1_${points_in_range} - // 3+DIMENSIONS+${points_in_range}+1 EVAL_2_1 - // ... - // ? (depends on points_in_range for each discretization) - // ? EVAL_${DIMENSIONS}_${points_in_range} - // EOF - // - // where DISCRETIZATION_$n is tab-delimited (\t) line that describes - // evenly-spaced points along the `n`th DIMENSION: - // - // column content - // ------------------------------------------------ - // 0 range_start (float) - // 1 range_end (float) - // 2 points_in_range (int) - // 3 grid_size (float) - // - // and EVAL_$n_$m is a line that contains a single real-valued evaluation - // of the curve at: - // - // range_start + (m * ((range_end - range_start)/points_in_range)) - // - // along DIMENSION `n` - - std::ifstream file{path}; + OpenSim::FunctionBasedPath::Impl& impl = *fbp._impl; - if (!file) { - std::stringstream msg; - msg << path << ": error opening FunctionBasedPath data file"; - OPENSIM_THROW(OpenSim::Exception, std::move(msg).str()); - } - - int lineno = 0; - std::string line; - - // ID (ignored) - while (std::getline(file, line)) { - ++lineno; + // compute underlying impl data from the model + PBP + Impl_ComputeFromPBP(impl, model, pbp); - if (lineno >= 2) { - break; - } + // write impl discretizations into the property (for later serialization) + OpenSim::FunctionBasedPathDiscretizationSet& set = fbp.updProperty_FunctionBasedPathDiscretizationSet().updValue(); + for (size_t i = 0; i < impl.coords.size(); ++i) { + auto disc = std::unique_ptr{new FunctionBasedPathDiscretization{}}; + disc->set_x_begin(impl.discretizations[i].begin); + disc->set_x_end(impl.discretizations[i].end); + disc->set_num_points(impl.discretizations[i].nsteps); + disc->set_coordinate_abspath(impl.coordAbsPaths[i]); + set.adoptAndAppend(disc.release()); } - // DIMENSIONS - int dimensions = -1; - while (std::getline(file, line)) { - ++lineno; - if (line.empty()) { - if (dimensions <= -1) { - std::stringstream msg; - msg << path << ": L" << lineno << ": unexpected blank line (expected dimensions)"; - OPENSIM_THROW(OpenSim::Exception, std::move(msg).str()); - } - break; - } - - dimensions = std::stoi(line.c_str()); - } - - // COORDINATES - std::string coordsExist = ""; - std::vector coordinates; - while (std::getline(file,line)) { - ++lineno; - - if (line.empty()) { - if (coordsExist == ""){ - std::stringstream msg; - msg << path << ": L" << lineno << ": unexpected blank line (expected coordinates)"; - OPENSIM_THROW(OpenSim::Exception, std::move(msg).str()); - } - break; - } - coordsExist = line.c_str(); - coordinates.push_back(line.c_str()); - } - - // [DISCRETIZATION_1..DISCRETIZATION_n] - std::vector discretizations; - discretizations.reserve(static_cast(dimensions)); - while (std::getline(file, line)) { - ++lineno; - - if (line.empty()) { - if (discretizations.size() != static_cast(dimensions)) { - std::stringstream msg; - msg << path << ": L" << lineno << ": invalid number of discretizations in this file: expected: " << dimensions << " got " << discretizations.size(); - OPENSIM_THROW(OpenSim::Exception, std::move(msg).str()); - } - - break; // end of DISCRETIZATIONs - } - - // DISCRETIZATION_i - Discretization d; - std::sscanf(line.c_str(), "%lf\t%lf\t%i\t%lf", &d.begin, &d.end, &d.nPoints, &d.gridsize); - discretizations.push_back(d); + // write evals into FBP property + for (double eval : fbp._impl->evals) { + fbp.updProperty_Evaluations().appendValue(eval); } - // [EVAL_1_1..EVAL_n_m] - std::vector evals; - while (std::getline(file, line)) { - ++lineno; - - if (line.empty()){ - break; // end of EVALs - } - - evals.push_back(atof(line.c_str())); - } - - // sanity check - { - size_t expectedEvals = 1; - for (const Discretization& d : discretizations) { - expectedEvals *= static_cast(d.nPoints); - } - - if (expectedEvals != evals.size()) { - std::stringstream msg; - msg << path << ": L" << lineno << ": invalid number of function evaluations in this file: expected " << expectedEvals << " got " << evals.size(); - OPENSIM_THROW(OpenSim::Exception, std::move(msg).str()); - } - } - - return Interpolate{ - std::vector(static_cast(dimensions)), - std::move(discretizations), - std::move(evals) - }; -} - -static std::vector readInterpCoords(const std::string& path, OpenSim::Component& root) { - std::ifstream file{path}; - - if (!file) { - std::stringstream msg; - msg << path << ": error opening FunctionBasedPath data file"; - OPENSIM_THROW(OpenSim::Exception, std::move(msg).str()); - } - - int lineno = 0; - std::string line; - - // ID (ignored) - while (std::getline(file, line)) { - ++lineno; - - if (lineno >= 2) { - break; - } - } - - // DIMENSIONS - int dimensions = -1; - while (std::getline(file, line)) { - ++lineno; - if (line.empty()) { - if (dimensions <= -1) { - std::stringstream msg; - msg << path << ": L" << lineno << ": unexpected blank line (expected dimensions)"; - OPENSIM_THROW(OpenSim::Exception, std::move(msg).str()); - } - break; - } - - dimensions = std::stoi(line.c_str()); - } - - // COORDINATES - std::string coordsExist = ""; - std::vector coordinates; - while (std::getline(file,line)) { - ++lineno; - - if (line.empty()) { - if (coordsExist == ""){ - std::stringstream msg; - msg << path << ": L" << lineno << ": unexpected blank line (expected coordinates)"; - OPENSIM_THROW(OpenSim::Exception, std::move(msg).str()); - } - break; - } - coordsExist = line.c_str(); - coordinates.push_back(line.c_str()); - } - - std::vector coords; - for (const std::string& coord : coordinates) { - const OpenSim::Component& comp = root.getComponent(coord); - if (comp.getAbsolutePathString() == coord){ - const OpenSim::Coordinate* c = dynamic_cast(&comp); - coords.push_back(c); - } - } - return coords; -} - -OpenSim::FunctionBasedPath OpenSim::FunctionBasedPath::fromDataFile(const std::string &path) -{ - FunctionBasedPath fbp; - fbp.setDataPath(path); - - // the data file effectively only contains data for Interpolate, data file - // spec is in there - fbp._impl->interp = readInterp(path); - return fbp; } OpenSim::FunctionBasedPath::FunctionBasedPath() : GeometryPath{}, _impl{new Impl{}} { - constructProperty_data_path(""); + constructProperty_FunctionBasedPathDiscretizationSet(FunctionBasedPathDiscretizationSet{}); } OpenSim::FunctionBasedPath::FunctionBasedPath(const FunctionBasedPath&) = default; OpenSim::FunctionBasedPath::FunctionBasedPath(FunctionBasedPath&&) = default; @@ -826,34 +574,19 @@ OpenSim::FunctionBasedPath::~FunctionBasedPath() noexcept = default; void OpenSim::FunctionBasedPath::extendFinalizeFromProperties() { - Super::extendFinalizeFromProperties(); - - // when finalizing from properties, try to load the backing file that contains - // interpolated data (the `data_path` property) - - bool hasBackingFile = !get_data_path().empty(); - bool hasInMemoryFittingData = !_impl->interp.getdS().empty(); - - if (hasBackingFile) { - // change to the directory of the model file (the path in the osim is relative to - // the osim, not the process's working directory) - auto cwdchanger = IO::CwdChanger::changeToParentOf(getRoot().getDocumentFileName()); - - // read the interpolation data into a new interpolation structure - _impl->interp = readInterp(get_data_path()); - } else if (hasInMemoryFittingData) { - // do nothing: just use the already-loaded in-memory fitting data - return; - } else { - // error: has no backing file and has no in-memory fitting data - std::stringstream msg; - msg << getAbsolutePathString() << ": cannot call `.finalizeFromProperties()` on this `" << getConcreteClassName() << "`: the path has no fitting associated with it. A `FunctionBasedPath` must either have a valid `data_path` property that points to its underlying fitting data data, or be initialized using `FunctionBasedPath::fromPointBasedPath` (i.e. generate new fitting data)"; - OPENSIM_THROW(OpenSim::Exception, std::move(msg).str()); - } + Impl_InitFromFBPProperties(*_impl, *this); } void OpenSim::FunctionBasedPath::extendFinalizeConnections(OpenSim::Component& root) { + + // populate pointer-based coordinate lookups + // + // the reason this isn't done in `extendFinalizeFromProperties` is because the + // not-yet-property-finalized Model hasn't necessarily "connected" to the + // coordinates that the coordinate files refer to, so the implementation + // can't lookup the `OpenSim::Coordinate*` pointers during that phase + // Allow (model) component to include its own subcomponents // before calling the base method which automatically invokes // connect all the subcomponents. @@ -864,27 +597,7 @@ void OpenSim::FunctionBasedPath::extendFinalizeConnections(OpenSim::Component& r } } - bool hasBackingFile = !get_data_path().empty(); - bool hasInMemoryFittingData = !_impl->interp.getdS().empty(); - - if (hasBackingFile) { - // change to the directory of the model file - auto cwdchanger = IO::CwdChanger::changeToParentOf(getRoot().getDocumentFileName()); - - // read the interp coords (text) file - std::vector coords = readInterpCoords(get_data_path(), root); - - // update interpolator implementation with the (deserialized) coordinates - _impl->interp.setCoords(std::move(coords)); - } else if (hasInMemoryFittingData) { - // do nothing: just use the already-loaded in-memory fitting data - return; - } else { - // error: has no backing file and has no in-memory fitting data - std::stringstream msg; - msg << getAbsolutePathString() << ": cannot call `.finalizeConnections()` on this `" << getConcreteClassName() << "`: the path has no fitting associated with it. A `FunctionBasedPath` must either have a valid `data_path` property that points to its underlying fitting data data, or be initialized using `FunctionBasedPath::fromPointBasedPath` (i.e. generate new fitting data)"; - OPENSIM_THROW(OpenSim::Exception, std::move(msg).str()); - } + Impl_SetCoordinatePointersFromCoordinatePaths(*_impl, root); } double OpenSim::FunctionBasedPath::getLength(const SimTK::State& s) const @@ -893,9 +606,9 @@ double OpenSim::FunctionBasedPath::getLength(const SimTK::State& s) const return getCacheVariableValue(s, _lengthCV); } - double rv = _impl->interp.getLength(s); - setCacheVariableValue(s, _lengthCV, rv); - return rv; + double v = Impl_GetPathLength(*_impl, s); + setCacheVariableValue(s, _lengthCV, v); + return v; } void OpenSim::FunctionBasedPath::setLength(const SimTK::State& s, double length) const @@ -909,9 +622,9 @@ double OpenSim::FunctionBasedPath::getLengtheningSpeed(const SimTK::State& s) co return getCacheVariableValue(s, _speedCV); } - double rv = _impl->interp.getLengtheningSpeed(s); - setCacheVariableValue(s, _speedCV, rv); - return rv; + double v = Impl_GetLengtheningSpeed(*_impl, s); + setCacheVariableValue(s, _speedCV, v); + return v; } void OpenSim::FunctionBasedPath::setLengtheningSpeed(const SimTK::State& s, double speed) const @@ -922,54 +635,9 @@ void OpenSim::FunctionBasedPath::setLengtheningSpeed(const SimTK::State& s, doub double OpenSim::FunctionBasedPath::computeMomentArm(const SimTK::State& s, const Coordinate& aCoord) const { - return _impl->interp.getInterpDer(s,aCoord); -} - -void OpenSim::FunctionBasedPath::printContent(std::ostream& out) const -{ - // see FunctionBasedPath::fromDataFile(const std::string &path) for format - // spec - - // HEADERS - out << get_data_path() << '\n' - << '\n' - << _impl->interp.getDimension() << '\n' - << '\n'; - - // COORDINATES - for (const Coordinate* c : _impl->interp.getCoords()){ - out << c->getAbsolutePathString() << "\n"; - } - out << "\n"; - - // DISCRETIZATIONS - for (const Discretization& d : _impl->interp.getdS()) { - out << d.begin << '\t' - << d.end << '\t' - << d.nPoints << '\t' - << d.gridsize << '\n'; - } - out << '\n'; - - // EVALS - for (double d : _impl->interp.getEvals()) { - out << d << '\n'; - } - - out.flush(); + return Impl_GetPathLengthDerivative(*_impl, s, aCoord); } - - - - - - - - -//////////////////////////////// -// Directly from GeometryPath // -//////////////////////////////// /* add in the equivalent spatial forces on bodies for an applied tension along the GeometryPath to a set of bodyForces */ void OpenSim::FunctionBasedPath::addInEquivalentForces(const SimTK::State& s, @@ -977,172 +645,142 @@ void OpenSim::FunctionBasedPath::addInEquivalentForces(const SimTK::State& s, SimTK::Vector_& bodyForces, SimTK::Vector& mobilityForces) const { - const SimTK::SimbodyMatterSubsystem& matter = - getModel().getMatterSubsystem(); + const SimTK::SimbodyMatterSubsystem& matter = getModel().getMatterSubsystem(); - std::vector coords = _impl->interp.getCoords(); - for (unsigned i=0; icoords) { + double ma = computeMomentArm(s, *coord); double torqueOverCoord = -tension*ma; matter.addInMobilityForce(s, - SimTK::MobilizedBodyIndex(coords[i]->getBodyIndex()), - SimTK::MobilizerUIndex(coords[i]->getMobilizerQIndex()), - torqueOverCoord,mobilityForces); + SimTK::MobilizedBodyIndex(coord->getBodyIndex()), + SimTK::MobilizerUIndex(coord->getMobilizerQIndex()), + torqueOverCoord, + mobilityForces); } } -// get the path as PointForceDirections directions -// CAUTION: the return points are heap allocated; you must delete them yourself! -// (TODO: that is really lame) -void OpenSim::FunctionBasedPath:: -getPointForceDirections(const SimTK::State& s, - OpenSim::Array *rPFDs) const +void OpenSim::FunctionBasedPath::generateDecorations( + bool fixed, + const ModelDisplayHints& hints, + const SimTK::State& state, + SimTK::Array_& appendToThis) const { - OPENSIM_THROW(Exception,"this method is not allowed within FunctionBasedPath"); + static bool shownOnce = []() { + OpenSim::log_warn("Tried to call `generateDecorations` on a `FunctionBasedPath`. This function call will be ignored (there is no easy way to visualize function-based paths)"); + return true; + }(); + (void)shownOnce; } -//_____________________________________________________________________________ -/* - * Calculate the current path. - */ + void OpenSim::FunctionBasedPath::computePath(const SimTK::State& s) const { - OPENSIM_THROW(Exception,"this method is not allowed within FunctionBasedPath"); + OPENSIM_THROW(Exception, "Tried to call `computePath` on a `FunctionBasedPath`. You cannot call this method on a `GeometryPath` that is a `FunctionBasedPath` (it isn't path-based). Either remove this function call or replace the `FunctionBasedPath` with a `PointBasedPath` in the model"); } -//_____________________________________________________________________________ -/* - * Compute the total length of the path. This function - * assumes that the path has already been updated. - */ -double OpenSim::FunctionBasedPath:: -calcLengthAfterPathComputation(const SimTK::State& s, - const Array& currentPath) const -{ - double length = getLength(s); -// setLength(s,length); - return( length ); -} -void OpenSim::FunctionBasedPath:: -computeLengtheningSpeed(const SimTK::State& s) const +void OpenSim::FunctionBasedPath::computeLengtheningSpeed(const SimTK::State& s) const { double lengtheningspeed = getLengtheningSpeed(s); - setLengtheningSpeed(s,lengtheningspeed); + setLengtheningSpeed(s, lengtheningspeed); } -//------------------------------------------------------------------------------ -// GENERATE DECORATIONS -//------------------------------------------------------------------------------ -// The GeometryPath takes care of drawing itself here, using information it -// can extract from the supplied state, including position information and -// color information that may have been calculated as late as Stage::Dynamics. -// For example, muscles may want the color to reflect activation level and -// other path-using components might want to use forces (tension). We will -// ensure that the state has been realized to Stage::Dynamics before looking -// at it. (It is only guaranteed to be at Stage::Position here.) -void OpenSim::FunctionBasedPath:: -generateDecorations(bool fixed, const ModelDisplayHints& hints, - const SimTK::State& state, - SimTK::Array_& appendToThis) const +double OpenSim::FunctionBasedPath::calcLengthAfterPathComputation( + const SimTK::State& s, + const Array& currentPath) const { - std::cerr << "generateDecorations() called on a FunctionBasedPath"; - std::cerr << "which has no implementation yet"; - std::cerr << "call will be therefore be ignored" << std::endl; - // todo + return getLength(s); } - -//---------------------------------------------------------------------------- -// VIRTUAL METHODS EMPTY DEFINED -//---------------------------------------------------------------------------- double OpenSim::FunctionBasedPath::calcPathLengthChange(const SimTK::State& s, const WrapObject& wo, const WrapResult& wr, const Array& path) const { - OPENSIM_THROW(Exception,"this method is not allowed within FunctionBasedPath"); + OPENSIM_THROW(Exception, "Tried to call `calcPathLengthChange` on a `FunctionBasedPath`. You cannot call this method on a `GeometryPath` that is a `FunctionBasedPath` (it isn't path-based). Either remove this function call or replace the `FunctionBasedPath` with a `PointBasedPath` in the model"); } -void OpenSim::FunctionBasedPath::addPathWrap(WrapObject& aWrapObject) +void OpenSim::FunctionBasedPath::getPointForceDirections(const SimTK::State& s, + OpenSim::Array *rPFDs) const { - OPENSIM_THROW(Exception,"this method is not allowed within FunctionBasedPath"); + OPENSIM_THROW(Exception, "Tried to call `getPointForceDirections` on a `FunctionBasedPath`. You cannot call this method on a `GeometryPath` that is a `FunctionBasedPath` (it isn't path-based). Either remove this function call or replace the `FunctionBasedPath` with a `PointBasedPath` in the model"); } - -const Array& OpenSim::FunctionBasedPath::getCurrentPath( const SimTK::State& s) const +const OpenSim::Array& OpenSim::FunctionBasedPath::getCurrentPath(const SimTK::State& s) const { - OPENSIM_THROW(Exception,"this method is not allowed within FunctionBasedPath"); + OPENSIM_THROW(Exception, "Tried to call `getCurrentPath` on a `FunctionBasedPath`. You cannot call this method on a `GeometryPath` that is a `FunctionBasedPath` (it does not contain a path). Either remove this function call or replace the `FunctionBasedPath` with a `PointBasedPath` in the model"); } -AbstractPathPoint* OpenSim::FunctionBasedPath::addPathPoint(const SimTK::State& s, int index, - const PhysicalFrame& frame) +OpenSim::AbstractPathPoint* OpenSim::FunctionBasedPath::addPathPoint( + const SimTK::State& s, + int index, + const PhysicalFrame& frame) { - OPENSIM_THROW(Exception,"this method is not allowed within FunctionBasedPath"); + OPENSIM_THROW(Exception, "Tried to call `addPathPoint` on a `FunctionBasedPath`. You cannot call this method on a `GeometryPath` that is a `FunctionBasedPath` (it does not contain a path). Either remove this function call or replace the `FunctionBasedPath` with a `PointBasedPath` in the model"); } -AbstractPathPoint* OpenSim::FunctionBasedPath::appendNewPathPoint(const std::string& proposedName, - const PhysicalFrame& frame, - const SimTK::Vec3& locationOnFrame) +OpenSim::AbstractPathPoint* OpenSim::FunctionBasedPath::appendNewPathPoint( + const std::string& proposedName, + const PhysicalFrame& frame, + const SimTK::Vec3& locationOnFrame) { - std::cerr << "appendNewPathPoint called on a FunctionBasedPath"; - std::cerr << "call will be ignored" << std::endl; -// OPENSIM_THROW(Exception,"this method is not allowed within FunctionBasedPath"); - return nullptr; + OPENSIM_THROW(Exception, "Tried to call `appendNewPathPoint` on a `FunctionBasedPath`. You cannot call this method on a `GeometryPath` that is a `FunctionBasedPath` (it does not contain a path). Either remove this function call or replace the `FunctionBasedPath` with a `PointBasedPath` in the model"); } bool OpenSim::FunctionBasedPath::canDeletePathPoint(int index) { - OPENSIM_THROW(Exception,"this method is not allowed within FunctionBasedPath"); + OPENSIM_THROW(Exception, "Tried to call `canDeletePathPoint` on a `FunctionBasedPath`. You cannot call this method on a `GeometryPath` that is a `FunctionBasedPath` (it does not contain a path). Either remove this function call or replace the `FunctionBasedPath` with a `PointBasedPath` in the model"); } bool OpenSim::FunctionBasedPath::deletePathPoint(const SimTK::State& s, int index) { - OPENSIM_THROW(Exception,"this method is not allowed within FunctionBasedPath"); + OPENSIM_THROW(Exception, "Tried to call `deletePathPoint` on a `FunctionBasedPath`. You cannot call this method on a `GeometryPath` that is a `FunctionBasedPath` (it does not contain a path). Either remove this function call or replace the `FunctionBasedPath` with a `PointBasedPath` in the model"); } bool OpenSim::FunctionBasedPath::replacePathPoint(const SimTK::State& s, AbstractPathPoint* oldPathPoint, AbstractPathPoint* newPathPoint) { - OPENSIM_THROW(Exception,"this method is not allowed within FunctionBasedPath"); + OPENSIM_THROW(Exception, "Tried to call `replacePathPoint` on a `FunctionBasedPath`. You cannot call this method on a `GeometryPath` that is a `FunctionBasedPath` (it does not contain a path). Either remove this function call or replace the `FunctionBasedPath` with a `PointBasedPath` in the model"); } - -void OpenSim::FunctionBasedPath::moveUpPathWrap(const SimTK::State& s, - int index) +void OpenSim::FunctionBasedPath::addPathWrap(WrapObject& aWrapObject) { - OPENSIM_THROW(Exception,"this method is not allowed within FunctionBasedPath"); + OPENSIM_THROW(Exception, "Tried to call `addPathWrap` on a `FunctionBasedPath`. You cannot call this method on a `GeometryPath` that is a `FunctionBasedPath` (it does not contain wrapping objects). Either remove this function call or replace the `FunctionBasedPath` with a `PointBasedPath` in the model"); } -void OpenSim::FunctionBasedPath::moveDownPathWrap(const SimTK::State& s, - int index) +void OpenSim::FunctionBasedPath::deletePathWrap(const SimTK::State& s, + int index) { - OPENSIM_THROW(Exception,"this method is not allowed within FunctionBasedPath"); + OPENSIM_THROW(Exception, "Tried to call `deletePathWrap` on a `FunctionBasedPath`. You cannot call this method on a `GeometryPath` that is a `FunctionBasedPath` (it does not contain wrapping objects). Either remove this function call or replace the `FunctionBasedPath` with a `PointBasedPath` in the model"); } -void OpenSim::FunctionBasedPath::deletePathWrap(const SimTK::State& s, +void OpenSim::FunctionBasedPath::moveUpPathWrap(const SimTK::State& s, int index) { - OPENSIM_THROW(Exception,"this method is not allowed within FunctionBasedPath"); + OPENSIM_THROW(Exception, "Tried to call `moveUpPathWrap` on a `FunctionBasedPath`. You cannot call this method on a `GeometryPath` that is a `FunctionBasedPath` (it does not contain wrapping objects). Either remove this function call or replace the `FunctionBasedPath` with a `PointBasedPath` in the model"); } +void OpenSim::FunctionBasedPath::moveDownPathWrap(const SimTK::State& s, + int index) +{ + OPENSIM_THROW(Exception, "Tried to call `moveDownPathWrap` on a `FunctionBasedPath`. You cannot call this method on a `GeometryPath` that is a `FunctionBasedPath` (it does not contain wrapping objects). Either remove this function call or replace the `FunctionBasedPath` with a `PointBasedPath` in the model"); +} void OpenSim::FunctionBasedPath::applyWrapObjects(const SimTK::State& s, Array& path ) const { - OPENSIM_THROW(Exception,"this method is not allowed within FunctionBasedPath"); + OPENSIM_THROW(Exception, "Tried to call `applyWrapObjects` on a `FunctionBasedPath`. You cannot call this method on a `GeometryPath` that is a `FunctionBasedPath` (it doesn't know how to apply wrap objects to a sequence of path points). Either remove this function call or replace the `FunctionBasedPath` with a `PointBasedPath` in the model"); } - void OpenSim::FunctionBasedPath::namePathPoints(int aStartingIndex) { - std::cerr << "namePathPoints(int index) called on a FunctionBasedPath"; - std::cerr << "call will be ignored" << std::endl; -// OPENSIM_THROW(Exception,"this method is not allowed within FunctionBasedPath"); + static bool shownOnce = []() { + OpenSim::log_warn("Tried to call `namePathPoints` on a `FunctionBasedPath`. This function call will be ignored (`FunctionBasedPath`s do not contain path points)"); + return true; + }(); + (void)shownOnce; } void OpenSim::FunctionBasedPath::placeNewPathPoint(const SimTK::State& s, @@ -1150,5 +788,5 @@ void OpenSim::FunctionBasedPath::placeNewPathPoint(const SimTK::State& s, int index, const PhysicalFrame& frame) { - OPENSIM_THROW(Exception,"this method is not allowed within FunctionBasedPath"); + OPENSIM_THROW(Exception, "Tried to call `placeNwPathPoint` on a `FunctionBasedPath`. You cannot call this method on a `GeometryPath` that is a `FunctionBasedPath` (it has no path points). Either remove this function call or replace the `FunctionBasedPath` with a `PointBasedPath` in the model"); } diff --git a/OpenSim/Simulation/Model/FunctionBasedPath.h b/OpenSim/Simulation/Model/FunctionBasedPath.h index 16c34ebccc..02b93dabf1 100644 --- a/OpenSim/Simulation/Model/FunctionBasedPath.h +++ b/OpenSim/Simulation/Model/FunctionBasedPath.h @@ -24,12 +24,14 @@ * limitations under the License. * * -------------------------------------------------------------------------- */ +#include +#include #include +#include +#include +#include -#include -#include #include -#include #ifdef SWIG #ifdef OSIMSIMULATION_API @@ -40,9 +42,14 @@ // forward declarations namespace OpenSim { +class Component; +class Coordinate; class Model; class PointBasedPath; -class Coordinate; +class PointForceDirection; +class PhysicalFrame; +class WrapObject; +class WrapResult; } namespace SimTK { @@ -50,7 +57,6 @@ class State; } namespace OpenSim { - /** * An `OpenSim::GeometryPath` that computes its length/lengtheningSpeed by * interpolating a pre-computed Bezier curve. @@ -67,10 +73,12 @@ namespace OpenSim { * because a curve's paramaterization depends on its place in the Model as * a whole. */ -class OSIMSIMULATION_API FunctionBasedPath : public GeometryPath { +class OSIMSIMULATION_API FunctionBasedPath : public GeometryPath { OpenSim_DECLARE_CONCRETE_OBJECT(FunctionBasedPath, GeometryPath); - OpenSim_DECLARE_PROPERTY(data_path, std::string, "Path to the associated data file for this path. Typically, the file contains interpolated data that the implementation uses to compute the path's length and lengthening speed at simulation-time"); +public: + OpenSim_DECLARE_UNNAMED_PROPERTY(FunctionBasedPathDiscretizationSet, "Discretizations that were used for each OpenSim::Coordinate that the path was fitted against"); + OpenSim_DECLARE_LIST_PROPERTY(Evaluations, double, "The evaluated results of each *permutation* of discretizations. The FunctionBasedPathDiscretizationSet property describes how each OpenSim::Coordinate was discretized. These evaluations are the result of permuting through all possible combinations of discretizations. Effectively, this property contains a N-dimensional 'surface' of points, where each dimension of the surface is a Coordinate, and each dimension of each point is one of the evenly-spaced points in the discretization range [x_begin, x_range] for each dimension"); struct Impl; private: @@ -80,20 +88,8 @@ class OSIMSIMULATION_API FunctionBasedPath : public GeometryPath { /** * Returns an in-memory representation of a FunctionBasedPath generated * by fitting curves against the supplied PointBasedPath. - * - * Does not set the 'data' member (it's an in-memory represenation). Saving - * the resulting FunctionBasedPath without setting 'data' will throw an - * exception. */ - static FunctionBasedPath fromPointBasedPath(const Model& model, - const PointBasedPath& pbp); - - /** - * Returns an FunctionBasedPath read from an associated data file - * - * The file must contain the content written by `printContent` - */ - FunctionBasedPath fromDataFile(const std::string& path); + static FunctionBasedPath fromPointBasedPath(const Model& model, const PointBasedPath& pbp); FunctionBasedPath(); FunctionBasedPath(const FunctionBasedPath&); @@ -103,7 +99,7 @@ class OSIMSIMULATION_API FunctionBasedPath : public GeometryPath { ~FunctionBasedPath() noexcept override; void extendFinalizeFromProperties() override; - void extendFinalizeConnections(Component &root) override; + void extendFinalizeConnections(Component& root) override; double getLength(const SimTK::State& s) const override; void setLength(const SimTK::State& s, double length) const override; @@ -111,80 +107,72 @@ class OSIMSIMULATION_API FunctionBasedPath : public GeometryPath { double getLengtheningSpeed(const SimTK::State& s) const override; void setLengtheningSpeed(const SimTK::State& s, double speed) const override; - const std::string& getDataPath() const { return get_data_path(); } - void setDataPath(const std::string& newPath) { upd_data_path() = newPath; } - - double computeMomentArm(const SimTK::State& s, - const Coordinate& aCoord) const override; + double computeMomentArm(const SimTK::State& s, const Coordinate& aCoord) const override; - void printContent(std::ostream& printFile) const; - - - // From GeometryPath refactoring -public: void addInEquivalentForces(const SimTK::State& state, const double& tension, SimTK::Vector_& bodyForces, - SimTK::Vector& mobilityForces) const; + SimTK::Vector& mobilityForces) const override; - void getPointForceDirections(const SimTK::State& s, - OpenSim::Array *rPFDs) const; + void generateDecorations(bool fixed, + const ModelDisplayHints& hints, + const SimTK::State& state, + SimTK::Array_& appendToThis) const override; protected: - void computePath(const SimTK::State& s ) const; - void computeLengtheningSpeed(const SimTK::State& s) const; - - double calcLengthAfterPathComputation - (const SimTK::State& s, const Array& currentPath) const; - - void generateDecorations( - bool fixed, - const ModelDisplayHints& hints, - const SimTK::State& state, - SimTK::Array_& appendToThis) const - override; - - + void computePath(const SimTK::State& s ) const override; + void computeLengtheningSpeed(const SimTK::State& s) const override; + double calcLengthAfterPathComputation(const SimTK::State& s, + const Array& currentPath) const override; - - // related to pathpoints so has to be removed in release -protected: - double calcPathLengthChange(const SimTK::State& s, const WrapObject& wo, + double calcPathLengthChange(const SimTK::State& s, + const WrapObject& wo, const WrapResult& wr, - const Array& path) const; - -public: - void addPathWrap(WrapObject& aWrapObject); + const Array& path) const override; private: - const Array& getCurrentPath( const SimTK::State& s) const; + void getPointForceDirections(const SimTK::State& s, + OpenSim::Array *rPFDs) const override; + + const Array& getCurrentPath(const SimTK::State& s) const override; + AbstractPathPoint* addPathPoint(const SimTK::State& s, int index, - const PhysicalFrame& frame); + const PhysicalFrame& frame) override; + AbstractPathPoint* appendNewPathPoint(const std::string& proposedName, const PhysicalFrame& frame, - const SimTK::Vec3& locationOnFrame); - bool canDeletePathPoint(int index); - bool deletePathPoint(const SimTK::State& s, - int index); + const SimTK::Vec3& locationOnFrame) override; + + bool canDeletePathPoint(int index) override; + + bool deletePathPoint(const SimTK::State& s, int index) override; + bool replacePathPoint(const SimTK::State& s, AbstractPathPoint* oldPathPoint, - AbstractPathPoint* newPathPoint); + AbstractPathPoint* newPathPoint) override; + + + void addPathWrap(WrapObject& aWrapObject) override; + + void deletePathWrap(const SimTK::State& s, int index) override; void moveUpPathWrap(const SimTK::State& s, - int index); + int index) override; + void moveDownPathWrap(const SimTK::State& s, - int index); - void deletePathWrap(const SimTK::State& s, - int index); + int index) override; void applyWrapObjects(const SimTK::State& s, - Array& path) const; + Array& path) const override; + + void namePathPoints(int aStartingIndex) override; - void namePathPoints(int aStartingIndex); - void placeNewPathPoint(const SimTK::State& s, SimTK::Vec3& aOffset, - int index, const PhysicalFrame& frame); + void placeNewPathPoint(const SimTK::State& s, + SimTK::Vec3& aOffset, + int index, + const PhysicalFrame& frame) override; }; } diff --git a/OpenSim/Simulation/Model/FunctionBasedPathDiscretization.h b/OpenSim/Simulation/Model/FunctionBasedPathDiscretization.h new file mode 100644 index 0000000000..2cc9917a53 --- /dev/null +++ b/OpenSim/Simulation/Model/FunctionBasedPathDiscretization.h @@ -0,0 +1,44 @@ +#ifndef FUNCTIONBASEDPATHDISCRETIZATION_H +#define FUNCTIONBASEDPATHDISCRETIZATION_H + +/* -------------------------------------------------------------------------- * + * OpenSim: FunctionBasedPathDiscretization.h * + * -------------------------------------------------------------------------- * + * The OpenSim API is a toolkit for musculoskeletal modeling and simulation. * + * See http://opensim.stanford.edu and the NOTICE file for more information. * + * OpenSim is developed at Stanford University and supported by the US * + * National Institutes of Health (U54 GM072970, R24 HD065690) and by DARPA * + * through the Warrior Web program. * + * * + * Copyright (c) 2005-2021 TU Delft and the Authors * + * Author(s): Joris Verhagen * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); you may * + * not use this file except in compliance with the License. You may obtain a * + * copy of the License at http://www.apache.org/licenses/LICENSE-2.0. * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + * -------------------------------------------------------------------------- */ + +#include +#include + +#include + +namespace OpenSim { + class OSIMSIMULATION_API FunctionBasedPathDiscretization : public Component { + OpenSim_DECLARE_CONCRETE_OBJECT(FunctionBasedPathDiscretization, Component); + + public: + OpenSim_DECLARE_PROPERTY(coordinate_abspath, std::string, "The absolute path, in the model, to the OpenSim::Coordinate that this discretization was produced from"); + OpenSim_DECLARE_PROPERTY(x_begin, double, "The lowest OpenSim::Coordinate value that was used for discretization"); + OpenSim_DECLARE_PROPERTY(x_end, double, "The highest OpenSim:::Coordinate value that was used for discretization"); + OpenSim_DECLARE_PROPERTY(num_points, int, "The number of evenly-spaced OpenSim::Coordinate values between [x_begin, x_end] (inclusive) that were used for discretization of the OpenSim::Coordinate. E.g. [x_begin, 1*(x_begin+((x_end-x_begin)/3)), 2*(x_begin+((x_end-x_begin)/3)), x_end]"); + }; +} + +#endif // FUNCTIONBASEDPATHDISCRETIZATION_H diff --git a/OpenSim/Simulation/Model/FunctionBasedPathDiscretizationSet.h b/OpenSim/Simulation/Model/FunctionBasedPathDiscretizationSet.h new file mode 100644 index 0000000000..9557c03b66 --- /dev/null +++ b/OpenSim/Simulation/Model/FunctionBasedPathDiscretizationSet.h @@ -0,0 +1,39 @@ +#ifndef FUNCTIONBASEDPATHDISCRETIZATIONSET_H +#define FUNCTIONBASEDPATHDISCRETIZATIONSET_H + +/* -------------------------------------------------------------------------- * + * OpenSim: FunctionBasedPathDiscretizationSet.h * + * -------------------------------------------------------------------------- * + * The OpenSim API is a toolkit for musculoskeletal modeling and simulation. * + * See http://opensim.stanford.edu and the NOTICE file for more information. * + * OpenSim is developed at Stanford University and supported by the US * + * National Institutes of Health (U54 GM072970, R24 HD065690) and by DARPA * + * through the Warrior Web program. * + * * + * Copyright (c) 2005-2021 TU Delft and the Authors * + * Author(s): Joris Verhagen * + * * + * Licensed under the Apache License, Version 2.0 (the "License"); you may * + * not use this file except in compliance with the License. You may obtain a * + * copy of the License at http://www.apache.org/licenses/LICENSE-2.0. * + * * + * Unless required by applicable law or agreed to in writing, software * + * distributed under the License is distributed on an "AS IS" BASIS, * + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * + * See the License for the specific language governing permissions and * + * limitations under the License. * + * -------------------------------------------------------------------------- */ + +#include +#include +#include + +namespace OpenSim { + +class OSIMSIMULATION_API FunctionBasedPathDiscretizationSet : public Set { + OpenSim_DECLARE_CONCRETE_OBJECT(FunctionBasedPathDiscretizationSet, Set); +}; + +} + +#endif // FUNCTIONBASEDPATHDISCRETIZATIONSET_H diff --git a/OpenSim/Simulation/RegisterTypes_osimSimulation.cpp b/OpenSim/Simulation/RegisterTypes_osimSimulation.cpp index 22e4bd0df8..5a8124a1d9 100644 --- a/OpenSim/Simulation/RegisterTypes_osimSimulation.cpp +++ b/OpenSim/Simulation/RegisterTypes_osimSimulation.cpp @@ -62,6 +62,8 @@ #include "Model/GeometryPath.h" #include "Model/PointBasedPath.h" +#include "Model/FunctionBasedPathDiscretization.h" +#include "Model/FunctionBasedPathDiscretizationSet.h" #include "Model/FunctionBasedPath.h" #include "Model/PrescribedForce.h" @@ -193,8 +195,9 @@ OSIMSIMULATION_API void RegisterTypes_osimSimulation() Object::registerType( FrameGeometry()); Object::registerType( Arrow()); -// Object::registerType( GeometryPath()); Object::registerType( OpenSim::PointBasedPath()); + Object::registerType( OpenSim::FunctionBasedPathDiscretization()); + Object::registerType( OpenSim::FunctionBasedPathDiscretizationSet()); Object::registerType( OpenSim::FunctionBasedPath()); Object::registerType( ControlSet() ); diff --git a/OpenSim/Simulation/osimSimulation.h b/OpenSim/Simulation/osimSimulation.h index c70414d845..6f25443a94 100644 --- a/OpenSim/Simulation/osimSimulation.h +++ b/OpenSim/Simulation/osimSimulation.h @@ -55,6 +55,8 @@ #include "Model/GeometryPath.h" #include "Model/PointBasedPath.h" +#include "Model/FunctionBasedPathDiscretization.h" +#include "Model/FunctionBasedPathDiscretizationSet.h" #include "Model/FunctionBasedPath.h" #include "Model/PrescribedForce.h" From 9c543e04bfcd34f83568abb4fc3ede379cd7246e Mon Sep 17 00:00:00 2001 From: Travis CI Date: Wed, 1 Sep 2021 09:01:07 +0200 Subject: [PATCH 29/36] Minor refactors to FBP implementation --- .../Simulation/Model/FunctionBasedPath.cpp | 60 ++++++++++++------- 1 file changed, 37 insertions(+), 23 deletions(-) diff --git a/OpenSim/Simulation/Model/FunctionBasedPath.cpp b/OpenSim/Simulation/Model/FunctionBasedPath.cpp index 2e4727683b..cb26001911 100644 --- a/OpenSim/Simulation/Model/FunctionBasedPath.cpp +++ b/OpenSim/Simulation/Model/FunctionBasedPath.cpp @@ -174,7 +174,7 @@ static std::vector computeEvaluationsFromPBP(OpenSim::PointBasedPath con while (pos > 0 && discStepIdx[pos] >= discs[pos].nsteps) { discStepIdx[pos] = 0; // overflow ++discStepIdx[pos-1]; // carry - --pos; // propagate + --pos; } } @@ -188,7 +188,7 @@ static std::vector computeEvaluationsFromPBP(OpenSim::PointBasedPath con } struct OpenSim::FunctionBasedPath::Impl final { - // direct pointers to the coordinates that were discretized + // direct pointers to each coordinate std::vector coords; // absolute paths of each coordinate (1:1 with coords) @@ -299,10 +299,17 @@ static void Impl_SetCoordinatePointersFromCoordinatePaths(OpenSim::FunctionBased // returns interpolated path length for a given permutation of coordinate // values // +// this is the "heart" of the FPB algorithm. It's loosely based on the algorithm +// described here: +// +// "Two hierarchies of spline interpolations. Practical algorithms for multivariate higher order splines" +// https://arxiv.org/abs/0905.3564 +// // `inputVals` points to a sequence of `nCoords` values that were probably // retrieved via `Coordinate::getValue(SimTK::State const&)`. The reason -// they're provided externally is because derivative calculation can fiddle -// the values a little bit +// that `inputVals` is provided externally (rather than have this implementation +// handle calling `getValue`) is because derivative calculations need to fiddle +// the input values slightly static double Impl_GetPathLength(OpenSim::FunctionBasedPath::Impl const& impl, double const* inputVals, int nCoords) { @@ -313,6 +320,7 @@ static double Impl_GetPathLength(OpenSim::FunctionBasedPath::Impl const& impl, // compute: // // - the index of the first discretization step *before* the input value + // // - the polynomial of the curve at that step, given its fractional distance // toward the next step using Polynomial = std::array; @@ -394,12 +402,12 @@ static double Impl_GetPathLength(OpenSim::FunctionBasedPath::Impl const& impl, while (dimIdxOffsets[0] < 3) { // compute `beta` (weighted coefficient per coord) for this particular - // permutation coordinate locations (e.g. -1, 0, 0, 2) and figure out + // permutation's coordinate locations (e.g. -1, 0, 0, 2) and figure out // what the closest input value was at the weighted location. Add the // result the the output double beta = 1.0; - int evalStride = 1; // space between evaluations: gets bigger at lower idx coords + int evalStride = 1; int evalIdx = 0; // go backwards, from least-significant coordinate (highest idx) @@ -415,14 +423,16 @@ static double Impl_GetPathLength(OpenSim::FunctionBasedPath::Impl const& impl, evalStride *= impl.discretizations[coord].nsteps; } - z += beta * impl.evals[evalIdx]; + // equivalent to z += b*v, but handles rounding errors when the rhs + // is very small + z = std::fma(beta, impl.evals[evalIdx], z); // increment the offsets // // this is effectively the step that permutes [-1, -1, 2] --> [-1, 0, -1] { int pos = nCoords-1; - ++dimIdxOffsets[pos]; // perform first (potentially overflowing) increment + ++dimIdxOffsets[pos]; // perform least-significant increment (may overflow) while (pos > 0 && dimIdxOffsets[pos] >= 2) { // handle overflows + carry propagation dimIdxOffsets[pos] = 0; // overflow ++dimIdxOffsets[pos-1]; // carry propagation @@ -470,15 +480,15 @@ static double Impl_GetPathLengthDerivative(OpenSim::FunctionBasedPath::Impl cons // compute value at current point double v1 = Impl_GetPathLength(impl, inputVals.data(), nCoords); - // alter the input value for the to-be-derived coordinate *slightly* - inputVals[coordIdx] += 0.0001; + static constexpr double h = 0.0001; - // compute value at the altered point + // alter the input value for the to-be-derived coordinate *slightly* and recompute + inputVals[coordIdx] += h; double v2 = Impl_GetPathLength(impl, inputVals.data(), nCoords); // the derivative is how much the output changed when the input was altered // slightly (this is a poor-man's discrete derivative method) - return (v2 - v1) / 0.0001; + return (v2 - v1) / h; } // get the *derivative* of the path length with respect to the given Coordinate @@ -507,20 +517,23 @@ static double Impl_GetPathLengthDerivative(OpenSim::FunctionBasedPath::Impl cons OPENSIM_THROW(OpenSim::Exception, std::move(msg).str()); } - // use the "raw" (non-lookup) version of this function + // use the "raw" (non-lookup) version of this function with the index return Impl_GetPathLengthDerivative(impl, s, coordIdx); } // get the lengthening speed of the path in the current state static double Impl_GetLengtheningSpeed(const OpenSim::FunctionBasedPath::Impl& impl, const SimTK::State& state) { - double rv = 0.0; - for (int coord = 0; coord < static_cast(impl.coords.size()); ++coord) { - double deriv = Impl_GetPathLengthDerivative(impl, state, coord); - double speed = impl.coords[coord]->getSpeedValue(state); - rv += deriv * speed; + + double lengtheningSpeed = 0.0; + for (int coordIdx = 0; coordIdx < static_cast(impl.coords.size()); ++coordIdx) { + double deriv = Impl_GetPathLengthDerivative(impl, state, coordIdx); + double coordSpeedVal = impl.coords[coordIdx]->getSpeedValue(state); + + lengtheningSpeed = std::fma(deriv, coordSpeedVal, lengtheningSpeed); } - return rv; + + return lengtheningSpeed; } //---------------------------------------------------------------------------- @@ -540,10 +553,10 @@ OpenSim::FunctionBasedPath OpenSim::FunctionBasedPath::fromPointBasedPath( OpenSim::FunctionBasedPath::Impl& impl = *fbp._impl; - // compute underlying impl data from the model + PBP + // compute underlying impl data from the PBP Impl_ComputeFromPBP(impl, model, pbp); - // write impl discretizations into the property (for later serialization) + // write impl discretizations into the `Discretizations` property OpenSim::FunctionBasedPathDiscretizationSet& set = fbp.updProperty_FunctionBasedPathDiscretizationSet().updValue(); for (size_t i = 0; i < impl.coords.size(); ++i) { auto disc = std::unique_ptr{new FunctionBasedPathDiscretization{}}; @@ -554,9 +567,10 @@ OpenSim::FunctionBasedPath OpenSim::FunctionBasedPath::fromPointBasedPath( set.adoptAndAppend(disc.release()); } - // write evals into FBP property + // write evals into `Evaluations` property + auto& evalsProp = fbp.updProperty_Evaluations(); for (double eval : fbp._impl->evals) { - fbp.updProperty_Evaluations().appendValue(eval); + evalsProp.appendValue(eval); } return fbp; From 5a72b5a1e18d30a9e1df5e87398a02c5100d5375 Mon Sep 17 00:00:00 2001 From: Travis CI Date: Wed, 1 Sep 2021 12:09:42 +0200 Subject: [PATCH 30/36] Made new implementation (superficially?) work and made fitting parameters externally modifiable --- .../Simulation/Model/FunctionBasedPath.cpp | 165 ++++++++----- OpenSim/Simulation/Model/FunctionBasedPath.h | 58 ++++- .../Model/FunctionBasedPathDiscretization.h | 7 + .../Tools/FunctionBasedPathConversionTool.cpp | 227 ++++++++---------- .../Tools/FunctionBasedPathConversionTool.h | 53 +--- 5 files changed, 290 insertions(+), 220 deletions(-) diff --git a/OpenSim/Simulation/Model/FunctionBasedPath.cpp b/OpenSim/Simulation/Model/FunctionBasedPath.cpp index cb26001911..9260c4fc93 100644 --- a/OpenSim/Simulation/Model/FunctionBasedPath.cpp +++ b/OpenSim/Simulation/Model/FunctionBasedPath.cpp @@ -9,27 +9,20 @@ #include #include -// upper limit on the number of coordinates that can be reasonably interpolated -// the implementation -// -// interpolation can suffer from a combinatorial explosion. Even if you only discretize -// two points per coordinate, 16 input coordinates can produce 2^16 discretizations -static constexpr size_t g_MaxCoordsThatCanBeInterpolated = 16; - -// number of "probing" steps to take when trying to figure out whether a given coordinate -// affects a point-based path -static constexpr int g_NumCoordProbingSteps = 3; - -// the minimum amount a moment arm must change when probing for the probing step to return -// `true` (i.e. "this coordinate does affect the path") -static constexpr double g_MinMomentArmChangeRequiredForPositiveProbe = 0.001; +static constexpr size_t g_MaxCoordsThatCanBeInterpolated = 16; // important: upper limit that's used for stack allocations +static constexpr int g_MaxCoordsThatCanAffectPathDefault = static_cast(g_MaxCoordsThatCanBeInterpolated); +static constexpr int g_NumProbingDiscretizationsDefault = 3; +static constexpr double g_MinProbingMomentArmChangeDefault = 0.001; +static constexpr int g_NumDiscretizationStepsPerDimensionDefault = 80; // returns `true` if changing the supplied `Coordinate` changes the moment arm // of the supplied `PointBasedPath` (PBP) static bool coordAffectsPBP( OpenSim::PointBasedPath const& pbp, OpenSim::Coordinate const& c, - SimTK::State& state) { + SimTK::State& state, + int numProbingSteps, + double minMomentArmChangeRequired) { bool initialLockedState = c.getLocked(state); double initialValue = c.getValue(state); @@ -38,14 +31,14 @@ static bool coordAffectsPBP( double start = c.getRangeMin(); double end = c.getRangeMax(); - double step = (end - start) / g_NumCoordProbingSteps; + double step = (end - start) / numProbingSteps; bool affectsCoord = false; for (double v = start; v <= end; v += step) { c.setValue(state, v); double ma = pbp.computeMomentArm(state, c); - if (std::abs(ma) >= g_MinMomentArmChangeRequiredForPositiveProbe) { + if (std::abs(ma) >= minMomentArmChangeRequired) { affectsCoord = true; break; } @@ -65,14 +58,16 @@ static bool coordAffectsPBP( // do) static std::vector coordsThatAffectPBP(OpenSim::Model const& model, OpenSim::PointBasedPath const& pbp, - SimTK::State& st) { + SimTK::State& st, + int numProbingSteps, + double minMomentArmChangeRequired) { std::vector rv; for (OpenSim::Coordinate const& c : model.getComponentList()){ if (c.getMotionType() == OpenSim::Coordinate::MotionType::Coupled) { continue; } - if (!coordAffectsPBP(pbp, c, st)) { + if (!coordAffectsPBP(pbp, c, st, numProbingSteps, minMomentArmChangeRequired)) { continue; } @@ -91,15 +86,17 @@ struct Discretization final { }; // compute ideal discretization of the given coordinate -static Discretization discretizationForCoord(OpenSim::Coordinate const&) { +static Discretization discretizationForCoord(OpenSim::Coordinate const&, int numDiscretizationSteps) { // TODO: these hacky ranges were imported from the original code. Joris had this // commented out: // dc.begin = std::max(c.getRangeMin(), -static_cast(SimTK_PI)); // dc.end = std::min(c.getRangeMax(), static_cast(SimTK_PI)); + SimTK_ASSERT_ALWAYS(numDiscretizationSteps >= 4, "need to supply more than 4 discretization steps"); + Discretization d; d.begin = -static_cast(SimTK_PI)/2; d.end = static_cast(SimTK_PI)/2; - d.nsteps = 80; + d.nsteps = numDiscretizationSteps - 3; double step = (d.end-d.begin) / (d.nsteps-1); // expand range slightly in either direction to ensure interpolation is @@ -152,11 +149,14 @@ static std::vector computeEvaluationsFromPBP(OpenSim::PointBasedPath con while (discStepIdx[0] < discs[0].nsteps) { // set all coordinate values for this step - for (size_t i = 0; i < ncoords; ++i) { - Discretization const& discr = discs[i]; - double step = (discr.end - discr.begin) / discr.nsteps; - double val = discr.begin + step*discr.end; - coords[i]->setValue(state, val); + for (size_t coord = 0; coord < ncoords; ++coord) { + Discretization const& discr = discs[coord]; + + double stepSz = (discr.end - discr.begin) / discr.nsteps; + int step = discStepIdx[coord]; + double val = discr.begin + step*stepSz; + + coords[coord]->setValue(state, val); } // eval the length of the PBP for this permutation of coordinate values @@ -209,9 +209,12 @@ struct OpenSim::FunctionBasedPath::Impl final { // compute fresh implementation data from an existing PointBasedPath by // evaluating it and fitting it to a function-based curve -static void Impl_ComputeFromPBP(OpenSim::FunctionBasedPath::Impl& impl, +// +// returns false if too many/too little coordinates affect the path +static bool Impl_ComputeFromPBP(OpenSim::FunctionBasedPath::Impl& impl, const OpenSim::Model& model, - const OpenSim::PointBasedPath& pbp) { + const OpenSim::PointBasedPath& pbp, + const OpenSim::FunctionBasedPath::FittingParams& params) { // copy model, so we can independently equilibrate + realize + modify the // copy without having to touch the source model @@ -221,7 +224,11 @@ static void Impl_ComputeFromPBP(OpenSim::FunctionBasedPath::Impl& impl, modelClone->realizeVelocity(initialState); // set `coords` - impl.coords = coordsThatAffectPBP(*modelClone, pbp, initialState); + impl.coords = coordsThatAffectPBP(*modelClone, pbp, initialState, params.numProbingDiscretizations, params.minProbingMomentArmChange); + if (static_cast(impl.coords.size()) > params.maxCoordsThatCanAffectPath || impl.coords.size() == 0) { + impl.coords.clear(); + return false; + } // set `coordAbsPaths` impl.coordAbsPaths.clear(); @@ -234,12 +241,14 @@ static void Impl_ComputeFromPBP(OpenSim::FunctionBasedPath::Impl& impl, impl.discretizations.clear(); impl.discretizations.reserve(impl.coords.size()); for (const OpenSim::Coordinate* c : impl.coords) { - impl.discretizations.push_back(discretizationForCoord(*c)); + impl.discretizations.push_back(discretizationForCoord(*c, params.numDiscretizationStepsPerDimension)); } // set `evals` SimTK_ASSERT_ALWAYS(impl.coords.size() == impl.discretizations.size(), "these should be equal by now"); impl.evals = computeEvaluationsFromPBP(pbp, initialState, impl.coords.data(), impl.discretizations.data(), impl.coords.size()); + + return true; } // init underlying implementation data from a `FunctionBasedPath`s (precomputed) properties @@ -332,13 +341,13 @@ static double Impl_GetPathLength(OpenSim::FunctionBasedPath::Impl const& impl, // compute index of first discretization step *before* the input value and // the fraction that the input value is towards the *next* discretization step - int idx = -1; + int idx = -1337; double frac = -1337.0; if (inputVal < disc.begin) { - idx = 0; + idx = 1; frac = 0.0; } else if (inputVal > disc.end) { - idx = disc.nsteps-1; + idx = disc.nsteps-3; frac = 0.0; } else { // solve for `n`: inputVal = begin + n*step @@ -353,10 +362,10 @@ static double Impl_GetPathLength(OpenSim::FunctionBasedPath::Impl const& impl, // compute polynomial based on fraction the point is toward the next point Polynomial p; - p[0] = +0.5*pow(frac - 1.0, 3)*frac*(2.0*frac + 1.0); - p[1] = -0.5*(frac - 1.0)*(6.0*pow(frac, 4) - 9.0*pow(frac, 3.0) + 2*frac + 2.0); - p[2] = +0.5*frac*(6.0*pow(frac, 4) - 15.0*pow(frac, 3) + 9.0*pow(frac, 2) + frac + 1); - p[3] = -0.5*(frac - 1.0)*pow(frac, 3)*(2.0*frac - 3.0); + p[0] = (0.5*pow(frac - 1,3)*frac*(2*frac + 1)); + p[1] = (-0.5*(frac - 1)*(6*pow(frac,4) - 9*pow(frac,3) + 2*frac + 2)); + p[2] = (0.5*frac*(6*pow(frac,4) - 15*pow(frac,3) + 9*pow(frac,2) + frac + 1)); + p[3] = (-0.5*(frac - 1)*pow(frac,3)*(2*frac - 3)); closestDiscretizationSteps[coord] = idx; betas[coord] = p; @@ -378,7 +387,7 @@ static double Impl_GetPathLength(OpenSim::FunctionBasedPath::Impl const& impl, // of integer offsets that can be -1, 0, 1, or 2 // // the algorithm increments this array as it goes through each permutation - std::array dimIdxOffsets; + std::array dimIdxOffsets{}; for (int coord = 0; coord < nCoords; ++coord) { dimIdxOffsets[coord] = -1; } @@ -399,6 +408,7 @@ static double Impl_GetPathLength(OpenSim::FunctionBasedPath::Impl const& impl, // [ 3, 0, 0] (the termination condition) double z = 0.0; + int cnt = 0; while (dimIdxOffsets[0] < 3) { // compute `beta` (weighted coefficient per coord) for this particular @@ -425,7 +435,7 @@ static double Impl_GetPathLength(OpenSim::FunctionBasedPath::Impl const& impl, // equivalent to z += b*v, but handles rounding errors when the rhs // is very small - z = std::fma(beta, impl.evals[evalIdx], z); + z = std::fma(beta, impl.evals.at(evalIdx), z); // increment the offsets // @@ -433,12 +443,24 @@ static double Impl_GetPathLength(OpenSim::FunctionBasedPath::Impl const& impl, { int pos = nCoords-1; ++dimIdxOffsets[pos]; // perform least-significant increment (may overflow) - while (pos > 0 && dimIdxOffsets[pos] >= 2) { // handle overflows + carry propagation - dimIdxOffsets[pos] = 0; // overflow + while (pos > 0 && dimIdxOffsets[pos] > 2) { // handle overflows + carry propagation + dimIdxOffsets[pos] = -1; // overflow ++dimIdxOffsets[pos-1]; // carry propagation --pos; } } + + ++cnt; + } + + // sanity check: is `z` accumulated from the expected number of iterations? + { + int expectedIterations = pow(4, nCoords); + if (cnt != expectedIterations) { + std::stringstream msg; + msg << "invalid number of permutations explored: expected = " << expectedIterations << ", got = " << cnt; + OPENSIM_THROW(OpenSim::Exception, std::move(msg).str()); + } } return z; @@ -532,7 +554,6 @@ static double Impl_GetLengtheningSpeed(const OpenSim::FunctionBasedPath::Impl& i lengtheningSpeed = std::fma(deriv, coordSpeedVal, lengtheningSpeed); } - return lengtheningSpeed; } @@ -540,24 +561,60 @@ static double Impl_GetLengtheningSpeed(const OpenSim::FunctionBasedPath::Impl& i // PUBLIC API //---------------------------------------------------------------------------- -OpenSim::FunctionBasedPath OpenSim::FunctionBasedPath::fromPointBasedPath( +OpenSim::FunctionBasedPath::FittingParams::FittingParams() : + maxCoordsThatCanAffectPath{g_MaxCoordsThatCanAffectPathDefault}, + numProbingDiscretizations{g_NumProbingDiscretizationsDefault}, + minProbingMomentArmChange{g_MinProbingMomentArmChangeDefault}, + numDiscretizationStepsPerDimension{g_NumDiscretizationStepsPerDimensionDefault} +{ +} + +std::unique_ptr OpenSim::FunctionBasedPath::fromPointBasedPath( const Model& model, - const PointBasedPath& pbp) + const PointBasedPath& pbp, + FittingParams params) { - FunctionBasedPath fbp; + // sanitize + validate params + { + if (params.maxCoordsThatCanAffectPath == -1) { + params.maxCoordsThatCanAffectPath = g_MaxCoordsThatCanBeInterpolated; + } + + if (params.numProbingDiscretizations == -1) { + params.numProbingDiscretizations = g_NumProbingDiscretizationsDefault; + } + + if (params.minProbingMomentArmChange < 0.0) { + params.minProbingMomentArmChange = g_MinProbingMomentArmChangeDefault; + } + + if (params.numDiscretizationStepsPerDimension == -1) { + params.numDiscretizationStepsPerDimension = g_NumDiscretizationStepsPerDimensionDefault; + } + + OPENSIM_THROW_IF(params.maxCoordsThatCanAffectPath <= 0, OpenSim::Exception, "maximum coordinates that can affect the path must be a positive number that is <16"); + OPENSIM_THROW_IF(params.numProbingDiscretizations <= 0, OpenSim::Exception, "number of probing discretizations must be a positive number"); + OPENSIM_THROW_IF(params.minProbingMomentArmChange <= 0, OpenSim::Exception, "min probing moment arm change must be a positive number"); + OPENSIM_THROW_IF(params.numDiscretizationStepsPerDimension <= 0, OpenSim::Exception, "number of discretization steps per dimension must be a positive number"); + OPENSIM_THROW_IF(params.maxCoordsThatCanAffectPath > static_cast(g_MaxCoordsThatCanBeInterpolated), OpenSim::Exception, "maxCoordsThatCanAffectPath must be <=16"); + } + + std::unique_ptr fbp{new FunctionBasedPath{}}; // copy relevant data from source PBP into the output FBP - fbp.upd_Appearance() = pbp.get_Appearance(); - fbp.setPathPointSet(pbp.getPathPointSet()); - fbp.setPathWrapSet(pbp.getWrapSet()); + fbp->upd_Appearance() = pbp.get_Appearance(); + fbp->setPathPointSet(pbp.getPathPointSet()); + fbp->setPathWrapSet(pbp.getWrapSet()); - OpenSim::FunctionBasedPath::Impl& impl = *fbp._impl; + OpenSim::FunctionBasedPath::Impl& impl = *fbp->_impl; // compute underlying impl data from the PBP - Impl_ComputeFromPBP(impl, model, pbp); + if (!Impl_ComputeFromPBP(impl, model, pbp, params)) { + return nullptr; + } // write impl discretizations into the `Discretizations` property - OpenSim::FunctionBasedPathDiscretizationSet& set = fbp.updProperty_FunctionBasedPathDiscretizationSet().updValue(); + OpenSim::FunctionBasedPathDiscretizationSet& set = fbp->updProperty_FunctionBasedPathDiscretizationSet().updValue(); for (size_t i = 0; i < impl.coords.size(); ++i) { auto disc = std::unique_ptr{new FunctionBasedPathDiscretization{}}; disc->set_x_begin(impl.discretizations[i].begin); @@ -568,8 +625,8 @@ OpenSim::FunctionBasedPath OpenSim::FunctionBasedPath::fromPointBasedPath( } // write evals into `Evaluations` property - auto& evalsProp = fbp.updProperty_Evaluations(); - for (double eval : fbp._impl->evals) { + auto& evalsProp = fbp->updProperty_Evaluations(); + for (double eval : fbp->_impl->evals) { evalsProp.appendValue(eval); } @@ -579,6 +636,7 @@ OpenSim::FunctionBasedPath OpenSim::FunctionBasedPath::fromPointBasedPath( OpenSim::FunctionBasedPath::FunctionBasedPath() : GeometryPath{}, _impl{new Impl{}} { constructProperty_FunctionBasedPathDiscretizationSet(FunctionBasedPathDiscretizationSet{}); + constructProperty_Evaluations(); } OpenSim::FunctionBasedPath::FunctionBasedPath(const FunctionBasedPath&) = default; OpenSim::FunctionBasedPath::FunctionBasedPath(FunctionBasedPath&&) = default; @@ -593,7 +651,6 @@ void OpenSim::FunctionBasedPath::extendFinalizeFromProperties() void OpenSim::FunctionBasedPath::extendFinalizeConnections(OpenSim::Component& root) { - // populate pointer-based coordinate lookups // // the reason this isn't done in `extendFinalizeFromProperties` is because the diff --git a/OpenSim/Simulation/Model/FunctionBasedPath.h b/OpenSim/Simulation/Model/FunctionBasedPath.h index 02b93dabf1..9ca5c92c59 100644 --- a/OpenSim/Simulation/Model/FunctionBasedPath.h +++ b/OpenSim/Simulation/Model/FunctionBasedPath.h @@ -85,11 +85,63 @@ class OSIMSIMULATION_API FunctionBasedPath : public GeometryPath { SimTK::ClonePtr _impl; public: + struct FittingParams final { + + // maximum coords that can affect the given PointBasedPath + // + // if this is higher, more paths may be eligible for + // PointBasedPath --> FunctionBasedPath conversion, because some paths may be + // affected by more coordinates than other paths. However, be careful. Increasing + // this also *significantly* increases the memory usage of the function-based fit + // + // must be 0 < v <= 16, or -1 to mean "use a sensible default" + int maxCoordsThatCanAffectPath; + + // number of discretization steps to use for each coordinate during the "probing + // phase" + // + // in the "probing phase", each coordinate is set to this number of evenly-spaced + // values in the range [getRangeMin()..getRangeMax()] (inclusive) to see if changing + // that coordinate has any affect on the path. The higher this value is, the longer + // the probing phase takes, but the higher chance it has of spotting a pertubation + // + // must be >0, or -1 to mean "use a sensible default" + int numProbingDiscretizations; + + // minimum amount that the moment arm of the path must change by during the "probing phase" + // for the coorinate to be classified as affecting the path + // + // must be >0, or <0 to mean "use a sensible default" + double minProbingMomentArmChange; + + // the number of discretization steps for each coordinate that passes the "probing phase" and, + // therefore, is deemed to affect the input (point-based) path + // + // this is effectively "grid granulaity". More discretizations == better fit, but it can increase + // the memory usage of the fit significantly. Assume the path is parameterized as an n-dimensional + // surface. E.g. if you discretize 10 points over 10 dimensions then you may end up with + // 10^10 datapoints (ouch). + // + // must be >0, or -1 to mean "use a sensible default" + int numDiscretizationStepsPerDimension; + + FittingParams(); + }; + /** - * Returns an in-memory representation of a FunctionBasedPath generated - * by fitting curves against the supplied PointBasedPath. + * Tries to compute a `FunctionBasedPath` from the provided `PointBasedPath`, given + * the parameters. + * + * This process can fail (return nullptr) if: + * + * - No coordinates seem to affect the path + * - Too many coordinates (>params.maxCoordsThatCanAffectPath) affect the path + * + * Otherwise, returns a non-nullptr to the fitted path */ - static FunctionBasedPath fromPointBasedPath(const Model& model, const PointBasedPath& pbp); + static std::unique_ptr fromPointBasedPath(const Model& model, + const PointBasedPath& pbp, + FittingParams params); FunctionBasedPath(); FunctionBasedPath(const FunctionBasedPath&); diff --git a/OpenSim/Simulation/Model/FunctionBasedPathDiscretization.h b/OpenSim/Simulation/Model/FunctionBasedPathDiscretization.h index 2cc9917a53..4ff2c6c429 100644 --- a/OpenSim/Simulation/Model/FunctionBasedPathDiscretization.h +++ b/OpenSim/Simulation/Model/FunctionBasedPathDiscretization.h @@ -38,6 +38,13 @@ namespace OpenSim { OpenSim_DECLARE_PROPERTY(x_begin, double, "The lowest OpenSim::Coordinate value that was used for discretization"); OpenSim_DECLARE_PROPERTY(x_end, double, "The highest OpenSim:::Coordinate value that was used for discretization"); OpenSim_DECLARE_PROPERTY(num_points, int, "The number of evenly-spaced OpenSim::Coordinate values between [x_begin, x_end] (inclusive) that were used for discretization of the OpenSim::Coordinate. E.g. [x_begin, 1*(x_begin+((x_end-x_begin)/3)), 2*(x_begin+((x_end-x_begin)/3)), x_end]"); + + FunctionBasedPathDiscretization() { + constructProperty_coordinate_abspath(""); + constructProperty_x_begin(0.0); + constructProperty_x_end(0.0); + constructProperty_num_points(0); + } }; } diff --git a/OpenSim/Tools/FunctionBasedPathConversionTool.cpp b/OpenSim/Tools/FunctionBasedPathConversionTool.cpp index ce70e3c1e4..f9b723140c 100644 --- a/OpenSim/Tools/FunctionBasedPathConversionTool.cpp +++ b/OpenSim/Tools/FunctionBasedPathConversionTool.cpp @@ -10,150 +10,135 @@ using namespace OpenSim; -FunctionBasedPathConversionTool::~FunctionBasedPathConversionTool() +OpenSim::FunctionBasedPathConversionTool::FunctionBasedPathConversionTool() : + _modelPath{}, + _newModelName{}, + _verbose{false} { -// delete &_modelPath; -// delete &_newModelName; } -FunctionBasedPathConversionTool::FunctionBasedPathConversionTool() - : _modelPath(""), _newModelName("") +OpenSim::FunctionBasedPathConversionTool::FunctionBasedPathConversionTool( + const std::string& modelPath, + const std::string& newModelName) : + + _modelPath{modelPath}, + _newModelName{newModelName}, + _verbose{false} { +} +const std::string& OpenSim::FunctionBasedPathConversionTool::getModelPath() const +{ + return _modelPath; } -FunctionBasedPathConversionTool::FunctionBasedPathConversionTool( - const std::string modelPath, const std::string newModelName) - : _modelPath(modelPath), _newModelName(newModelName) +void OpenSim::FunctionBasedPathConversionTool::setModelPath(const std::string& modelPath) { + _modelPath = modelPath; +} +const std::string& OpenSim::FunctionBasedPathConversionTool::getNewModelName() const +{ + return _newModelName; } -bool FunctionBasedPathConversionTool::run(){ - try{ - Model sourceModel{_modelPath}; - Model outputModel{sourceModel}; +void OpenSim::FunctionBasedPathConversionTool::setNewModelName(const std::string& newModelName) +{ + _newModelName = newModelName; +} - sourceModel.finalizeConnections(); - sourceModel.finalizeFromProperties(); - sourceModel.initSystem(); +bool OpenSim::FunctionBasedPathConversionTool::run() +{ + Model sourceModel{_modelPath}; + sourceModel.finalizeConnections(); + sourceModel.finalizeFromProperties(); + sourceModel.initSystem(); + + Model outputModel{sourceModel}; + outputModel.finalizeConnections(); + outputModel.finalizeFromProperties(); + + // print source model structure when runnning in verbose mode + if (_verbose) { + sourceModel.printSubcomponentInfo(); + } - outputModel.finalizeConnections(); - outputModel.finalizeFromProperties(); + // struct that holds how a PBP in the source maps onto an actuator in the + // destination + struct PBPtoActuatorMapping final { + PointBasedPath& sourcePBP; + PathActuator& outputActuator; - bool verbose = false; - if (verbose) { - sourceModel.printSubcomponentInfo(); + PBPtoActuatorMapping(PointBasedPath& sourcePBP_, + PathActuator& outputActuator_) : + sourcePBP{sourcePBP_}, + outputActuator{outputActuator_} { } + }; + + // find PBPs in the source and figure out how they map onto `PathActuator`s + // in the destination + // + // (this is because `PathActuator`s are the "owners" of `GeometryPath`s in + // most models) + std::vector mappings; + for (PathActuator& pa : sourceModel.updComponentList()) { - // struct that holds how a PBP in the source maps onto an actuator in the - // destination - struct PBPtoActuatorMapping final { - PointBasedPath& sourcePBP; - PathActuator& outputActuator; - - PBPtoActuatorMapping(PointBasedPath& sourcePBP_, - PathActuator& outputActuator_) : - sourcePBP{sourcePBP_}, - outputActuator{outputActuator_} { - } - }; - - // find PBPs in the source and figure out how they map onto `PathActuator`s - // in the destination - // - // (this is because `PathActuator`s are the "owners" of `GeometryPath`s in - // most models) - std::vector mappings; - for (auto& pa : sourceModel.updComponentList()) { - - PointBasedPath* pbp = dynamic_cast(&pa.updGeometryPath()); - - // if the actuator doesn't use a PBP, ignore it - if (!pbp) { - continue; - } - - // otherwise, find the equivalent path in the destination - Component* c = const_cast(outputModel.findComponent(pa.getAbsolutePath())); - - if (!c) { - std::stringstream err; - err << "could not find '" << pa.getAbsolutePathString() << "' in the output model: this is a programming error"; - throw std::runtime_error{move(err).str()}; - } - - PathActuator* paDest = dynamic_cast(c); - - if (!paDest) { - std::stringstream err; - err << "the component '" << pa.getAbsolutePathString() << "' has a class of '" << pa.getConcreteClassName() << "' in the source model but a class of '" << c->getConcreteClassName() << "' in the destination model: this shouldn't happen"; - throw std::runtime_error{move(err).str()}; - } - - mappings.emplace_back(*pbp, *paDest); + PointBasedPath* pbp = dynamic_cast(&pa.updGeometryPath()); + + // if the actuator doesn't use a PBP, ignore it + if (!pbp) { + continue; } - // for each `PathActuator` that uses a PBP, create an equivalent - // `FunctionBasedPath` (FBP) by fitting a function against the PBP and - // replace the PBP owned by the destination's `PathActuator` with the FBP - int i = 1; - std::string newModelNameLocal = _newModelName; - for (const auto& mapping : mappings) { - // create an FBP in-memory - FunctionBasedPath fbp = FunctionBasedPath::fromPointBasedPath(sourceModel, mapping.sourcePBP); - - // write the FBP's data to the filesystem - std::string dataFilename = [newModelNameLocal, &i]() { - std::stringstream ss; - ss << newModelNameLocal << "_DATA_" << i << ".txt"; - return move(ss).str(); - }(); - - std::ofstream dataFile{dataFilename}; - - if (!dataFile) { - std::stringstream msg; - msg << "error: could not open a `FunctionBasedPath`'s data file at: " << dataFilename; - throw std::runtime_error{move(msg).str()}; - } - - fbp.printContent(dataFile); - - if (!dataFile) { - std::stringstream msg; - msg << "error: error occurred after writing `FunctionBasedPath`s data to" << dataFilename; - throw std::runtime_error{move(msg).str()}; - } - - // update the FBP to refer to the data file - fbp.setDataPath(dataFilename); + // otherwise, find the equivalent path in the destination + Component* c = const_cast(outputModel.findComponent(pa.getAbsolutePath())); - // assign the FBP over the destination's PBP - mapping.outputActuator.updProperty_GeometryPath().setValue(fbp); + if (!c) { + std::stringstream err; + err << "could not find '" << pa.getAbsolutePathString() << "' in the output model: this is a programming error"; + throw std::runtime_error{move(err).str()}; + } - ++i; + PathActuator* paDest = dynamic_cast(c); + + if (!paDest) { + std::stringstream err; + err << "the component '" << pa.getAbsolutePathString() << "' has a class of '" << pa.getConcreteClassName() << "' in the source model but a class of '" << c->getConcreteClassName() << "' in the destination model: this shouldn't happen"; + throw std::runtime_error{move(err).str()}; } - // the output model is now the same as the source model, but each PBP in - // its `PathActuator`s has been replaced with an FBP. Perform any final - // model-level fixups and save the output model. - - outputModel.finalizeFromProperties(); - outputModel.finalizeConnections(); - outputModel.initSystem(); - outputModel.print(std::string{_newModelName} + ".osim"); - - if (verbose) { - std::cerr << "--- interpolation complete ---\n\n" - << "model before:\n"; - sourceModel.printSubcomponentInfo(); - std::cerr << "\nmodel after:\n"; - outputModel.printSubcomponentInfo(); + mappings.emplace_back(*pbp, *paDest); + } + + // for each `PathActuator` that uses a PBP, create an equivalent + // `FunctionBasedPath` (FBP) by fitting a function against the PBP and + // replace the PBP owned by the destination's `PathActuator` with the FBP + for (const PBPtoActuatorMapping& mapping : mappings) { + // create an FBP in-memory + FunctionBasedPath::FittingParams p; + std::unique_ptr maybeFbp = FunctionBasedPath::fromPointBasedPath(sourceModel, mapping.sourcePBP, p); + + if (maybeFbp) { + // assign the FBP over the destination's PBP + mapping.outputActuator.updProperty_GeometryPath().setValue(*maybeFbp); } - } catch(const std::exception& x) { - log_error("Exception in FunctionBasedPathConversionTool: run", x.what()); - return false; + } + + // the output model is now the same as the source model, but each PBP in + // its `PathActuator`s has been replaced with an FBP. Perform any final + // model-level fixups and save the output model. + outputModel.finalizeFromProperties(); + outputModel.finalizeConnections(); + outputModel.initSystem(); + outputModel.print(std::string{_newModelName} + ".osim"); + + if (_verbose) { + std::cerr << "--- interpolation complete ---\n\n" + << "model before:\n"; + sourceModel.printSubcomponentInfo(); + std::cerr << "\nmodel after:\n"; + outputModel.printSubcomponentInfo(); } return true; diff --git a/OpenSim/Tools/FunctionBasedPathConversionTool.h b/OpenSim/Tools/FunctionBasedPathConversionTool.h index c874459fe3..a47d48644b 100644 --- a/OpenSim/Tools/FunctionBasedPathConversionTool.h +++ b/OpenSim/Tools/FunctionBasedPathConversionTool.h @@ -44,58 +44,27 @@ namespace OpenSim { * @version 1.0 */ class OSIMTOOLS_API FunctionBasedPathConversionTool: public AbstractTool { -OpenSim_DECLARE_CONCRETE_OBJECT(FunctionBasedPathConversionTool, AbstractTool); -//============================================================================= -// MEMBER VARIABLES -//============================================================================= -protected: + OpenSim_DECLARE_CONCRETE_OBJECT(FunctionBasedPathConversionTool, AbstractTool); + +private: std::string _modelPath; std::string _newModelName; + bool _verbose; -//============================================================================= -// METHODS -//============================================================================= - //-------------------------------------------------------------------------- - // CONSTRUCTION - //-------------------------------------------------------------------------- public: - virtual ~FunctionBasedPathConversionTool(); FunctionBasedPathConversionTool(); - FunctionBasedPathConversionTool(const std::string modelPath, const std::string newModelName); - -// void generateModelAndPrint(); + FunctionBasedPathConversionTool(const std::string& modelPath, const std::string& newModelName); - //-------------------------------------------------------------------------- - // OPERATORS - //-------------------------------------------------------------------------- -public: -//#ifndef SWIG -// FunctionBasedPathConversionTool& -// operator=(const FunctionBasedPathConversionTool &aFunctionBasedPathConversionTool); -//#endif -// void updateFromXMLNode(SimTK::Xml::Element& aNode, int versionNumber=-1) override; + const std::string& getModelPath() const; + void setModelPath(const std::string&); - //-------------------------------------------------------------------------- - // GET AND SET - //-------------------------------------------------------------------------- - void setModelPath(const std::string modelPath) {_modelPath = modelPath;} - void setNewModelName(const std::string newModelName) {_newModelName = newModelName;} - std::string getModelPath() {return _modelPath;} - std::string getNewModelName() {return _newModelName;} + const std::string& getNewModelName() const; + void setNewModelName(const std::string&); - //-------------------------------------------------------------------------- - // INTERFACE - //-------------------------------------------------------------------------- bool run() override SWIG_DECLARE_EXCEPTION; - -//============================================================================= -}; // END of class FunctionBasedPathConversionTool - -}; //namespace -//============================================================================= -//============================================================================= - +}; +} #endif // _FunctionBasedPathConversionTool_h__ From 2ecd89dda31d7077c2ea44f7080466e7f033632e Mon Sep 17 00:00:00 2001 From: Travis CI Date: Wed, 1 Sep 2021 14:29:30 +0200 Subject: [PATCH 31/36] Minor fixes/tweaks from microbenchmarks --- .../Simulation/Model/FunctionBasedPath.cpp | 31 +++++++++++-------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/OpenSim/Simulation/Model/FunctionBasedPath.cpp b/OpenSim/Simulation/Model/FunctionBasedPath.cpp index 9260c4fc93..45cca136da 100644 --- a/OpenSim/Simulation/Model/FunctionBasedPath.cpp +++ b/OpenSim/Simulation/Model/FunctionBasedPath.cpp @@ -11,9 +11,9 @@ static constexpr size_t g_MaxCoordsThatCanBeInterpolated = 16; // important: upper limit that's used for stack allocations static constexpr int g_MaxCoordsThatCanAffectPathDefault = static_cast(g_MaxCoordsThatCanBeInterpolated); -static constexpr int g_NumProbingDiscretizationsDefault = 3; +static constexpr int g_NumProbingDiscretizationsDefault = 8; static constexpr double g_MinProbingMomentArmChangeDefault = 0.001; -static constexpr int g_NumDiscretizationStepsPerDimensionDefault = 80; +static constexpr int g_NumDiscretizationStepsPerDimensionDefault = 64; // returns `true` if changing the supplied `Coordinate` changes the moment arm // of the supplied `PointBasedPath` (PBP) @@ -145,7 +145,6 @@ static std::vector computeEvaluationsFromPBP(OpenSim::PointBasedPath con // holds which "step" in each Coordinate's [begin, end] discretization we // have evaluated up to std::array discStepIdx{}; - while (discStepIdx[0] < discs[0].nsteps) { // set all coordinate values for this step @@ -333,16 +332,16 @@ static double Impl_GetPathLength(OpenSim::FunctionBasedPath::Impl const& impl, // - the polynomial of the curve at that step, given its fractional distance // toward the next step using Polynomial = std::array; - std::array closestDiscretizationSteps{}; - std::array betas{}; + std::array closestDiscretizationSteps; + std::array betas; for (int coord = 0; coord < nCoords; ++coord) { double inputVal = inputVals[coord]; Discretization const& disc = impl.discretizations[coord]; // compute index of first discretization step *before* the input value and // the fraction that the input value is towards the *next* discretization step - int idx = -1337; - double frac = -1337.0; + int idx; + double frac; if (inputVal < disc.begin) { idx = 1; frac = 0.0; @@ -361,11 +360,17 @@ static double Impl_GetPathLength(OpenSim::FunctionBasedPath::Impl const& impl, } // compute polynomial based on fraction the point is toward the next point + double frac2 = frac*frac; + double frac3 = frac2*frac; + double frac4 = frac3*frac; + double fracMinusOne = frac - 1; + double fracMinusOne3 = fracMinusOne*fracMinusOne*fracMinusOne; + Polynomial p; - p[0] = (0.5*pow(frac - 1,3)*frac*(2*frac + 1)); - p[1] = (-0.5*(frac - 1)*(6*pow(frac,4) - 9*pow(frac,3) + 2*frac + 2)); - p[2] = (0.5*frac*(6*pow(frac,4) - 15*pow(frac,3) + 9*pow(frac,2) + frac + 1)); - p[3] = (-0.5*(frac - 1)*pow(frac,3)*(2*frac - 3)); + p[0] = 0.5 * fracMinusOne3*frac*(2*frac + 1); + p[1] = -0.5 * (frac - 1)*(6*frac4 - 9*frac3 + 2*frac + 2); + p[2] = 0.5 * frac*(6*frac4 - 15*frac3 + 9*frac2 + frac + 1); + p[3] = -0.5 * (frac - 1)*frac3*(2*frac - 3); closestDiscretizationSteps[coord] = idx; betas[coord] = p; @@ -387,7 +392,7 @@ static double Impl_GetPathLength(OpenSim::FunctionBasedPath::Impl const& impl, // of integer offsets that can be -1, 0, 1, or 2 // // the algorithm increments this array as it goes through each permutation - std::array dimIdxOffsets{}; + std::array dimIdxOffsets; for (int coord = 0; coord < nCoords; ++coord) { dimIdxOffsets[coord] = -1; } @@ -455,7 +460,7 @@ static double Impl_GetPathLength(OpenSim::FunctionBasedPath::Impl const& impl, // sanity check: is `z` accumulated from the expected number of iterations? { - int expectedIterations = pow(4, nCoords); + int expectedIterations = 1 << (2*nCoords); if (cnt != expectedIterations) { std::stringstream msg; msg << "invalid number of permutations explored: expected = " << expectedIterations << ", got = " << cnt; From 5a07f37bd026043665f5b3b0b442fc2a9d84e6f3 Mon Sep 17 00:00:00 2001 From: Travis CI Date: Wed, 1 Sep 2021 14:56:40 +0200 Subject: [PATCH 32/36] Tweaked h value (used for derivative calc) --- OpenSim/Simulation/Model/FunctionBasedPath.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OpenSim/Simulation/Model/FunctionBasedPath.cpp b/OpenSim/Simulation/Model/FunctionBasedPath.cpp index 45cca136da..9001fe10e3 100644 --- a/OpenSim/Simulation/Model/FunctionBasedPath.cpp +++ b/OpenSim/Simulation/Model/FunctionBasedPath.cpp @@ -507,7 +507,7 @@ static double Impl_GetPathLengthDerivative(OpenSim::FunctionBasedPath::Impl cons // compute value at current point double v1 = Impl_GetPathLength(impl, inputVals.data(), nCoords); - static constexpr double h = 0.0001; + static constexpr double h = 0.000001; // alter the input value for the to-be-derived coordinate *slightly* and recompute inputVals[coordIdx] += h; From 6d21aeb6fe9abe951c1240013fba63d0d23f0a94 Mon Sep 17 00:00:00 2001 From: Travis CI Date: Thu, 2 Sep 2021 12:31:17 +0200 Subject: [PATCH 33/36] Implemented variety of fixes and extra measurements --- .../test/testFunctionBasedPathConversion.cpp | 159 +++++++++++++++++- .../Simulation/Model/FunctionBasedPath.cpp | 22 +-- .../Tools/FunctionBasedPathConversionTool.cpp | 72 ++++++-- .../Tools/FunctionBasedPathConversionTool.h | 7 + 4 files changed, 231 insertions(+), 29 deletions(-) diff --git a/Applications/FunctionBasedPathConversion/test/testFunctionBasedPathConversion.cpp b/Applications/FunctionBasedPathConversion/test/testFunctionBasedPathConversion.cpp index d117b2b55e..fe153128f0 100644 --- a/Applications/FunctionBasedPathConversion/test/testFunctionBasedPathConversion.cpp +++ b/Applications/FunctionBasedPathConversion/test/testFunctionBasedPathConversion.cpp @@ -38,17 +38,165 @@ using namespace OpenSim; -void testArmModelConversionAccuracy() { +// output reporter that just appends some double output to an output vector +class VectorReporter final : public AbstractReporter { +public: + struct Datapoint { double time; double v; }; +private: + const Output& m_Source; + std::vector& m_Sink; + +public: + VectorReporter(const Output& source, + std::vector& sink) : + AbstractReporter{}, + m_Source{source}, + m_Sink{sink} + { + } + + void implementReport(const SimTK::State& s) const override { + double t = s.getTime(); + double v = m_Source.getValue(s); + + m_Sink.push_back(Datapoint{t, v}); + } + + VectorReporter* clone() const override { + return new VectorReporter{*this}; + } + + const std::string& getConcreteClassName() const override { + static std::string name = "VectorReporter"; + return name; + } +}; + +static void testLengthDifferenceBetweenFBPAndPBPIsSmall() { std::string inputModelPath = "arm26.osim"; - std::string outputModelName = "arm26_FBP"; + std::string outputModelName = "arm26_FBP.osim"; + std::string force = "/forceset/TRIlong"; + std::string output = "length"; + double reportingInterval = 0.05; + int discretizationPoints = 80; + + FunctionBasedPathConversionTool tool{inputModelPath, outputModelName}; + auto params = tool.getFittingParams(); + params.numDiscretizationStepsPerDimension = discretizationPoints; + tool.setFittingParams(params); + tool.setVerbose(true); + tool.run(); + + // load + init both models + Model inputModel{inputModelPath}; + inputModel.finalizeConnections(); + inputModel.finalizeFromProperties(); + inputModel.initSystem(); + + Model outputModel{outputModelName}; + outputModel.finalizeConnections(); + outputModel.finalizeFromProperties(); + outputModel.initSystem(); + + // connect input model's force output to a vector that records the data + std::vector pbpDatapoints; + { + const AbstractOutput& ao = inputModel.getComponent(force + "/pointbasedpath").getOutput(output); + const Output* o = dynamic_cast*>(&ao); + if (!o) { + throw std::runtime_error{"Input model output is not of `double` type"}; + } + auto reporter = std::unique_ptr(new VectorReporter{*o, pbpDatapoints}); + reporter->set_report_time_interval(reportingInterval); + inputModel.addComponent(reporter.release()); + } + + // connect output model's force output to a vector that records the data + std::vector fbpDatapoints; + { + const AbstractOutput& ao = outputModel.getComponent(force + "/functionbasedpath").getOutput(output); + const Output* o = dynamic_cast*>(&ao); + if (!o) { + throw std::runtime_error{"Input model output is not of `double` type"}; + } + auto reporter = std::unique_ptr(new VectorReporter{*o, fbpDatapoints}); + reporter->set_report_time_interval(reportingInterval); + outputModel.addComponent(reporter.release()); + } + + // init initial system + states + double finalSimTime = 3.5; + + // run FD sim of PBP + { + SimTK::State& inputModelState = inputModel.initSystem(); + OpenSim::Manager manager{inputModel}; + manager.initialize(inputModelState); + manager.integrate(finalSimTime); + } + + // run FD sim of FBP + { + SimTK::State& outputModelState = outputModel.initSystem(); + OpenSim::Manager manager{outputModel}; + manager.initialize(outputModelState); + manager.integrate(finalSimTime); + } + + // validate API assumptions + size_t expectedSteps = static_cast(finalSimTime / reportingInterval); + { + OPENSIM_THROW_IF(pbpDatapoints.empty(), OpenSim::Exception, "pbpDatapoints empty: is it connected to the model?"); + OPENSIM_THROW_IF(fbpDatapoints.empty(), OpenSim::Exception, "fbpDatapoints empty: is it connected to the model?"); + OPENSIM_THROW_IF(pbpDatapoints.size() == expectedSteps, OpenSim::Exception, "pbpDatapoints has incorrect number of datapoints"); + OPENSIM_THROW_IF(fbpDatapoints.size() == expectedSteps, OpenSim::Exception, "fbpDatapoints has incorrect number of datapoints"); + + for (size_t i = 0; i < expectedSteps; ++i) { + double pbpT = pbpDatapoints[i].time; + double fbpT = fbpDatapoints[i].time; + OPENSIM_THROW_IF(!SimTK::isNumericallyEqual(pbpT, fbpT), OpenSim::Exception, "timepoints in PBP and FBP arrays differ"); + } + } + + struct RelErrStats { + double min = std::numeric_limits::max(); + double max = std::numeric_limits::min(); + double avg = 0.0; + int n = 0; + }; + RelErrStats stats; + + std::cout << "t \tpbp \tfbp \t%err \n"; + for (size_t i = 0; i < expectedSteps; ++i) { + double t = pbpDatapoints[i].time; + double pbpV = pbpDatapoints[i].v; + double fbpV = fbpDatapoints[i].v; + double relErr = (fbpV-pbpV)/pbpV; + double relPctErr = 100.0 * relErr; + + stats.min = std::min(stats.min, relErr); + stats.max = std::max(stats.max, relErr); + stats.avg = std::fma(stats.avg, stats.n, relErr) / (stats.n+1); + stats.n += 1; + + std::cout << std::fixed << std::setprecision(5) << t << '\t' << pbpV << '\t' << fbpV << '\t' << relPctErr << " %\n"; + } + + std::cout << "min = " << 100.0*stats.min << " %, max = " << 100.0*stats.max << " %, avg = " << 100.0*stats.avg << " %\n"; +} + +static void testArmModelConversionAccuracy() { + std::string inputModelPath = "arm26.osim"; + std::string outputModelName = "arm26_FBP.osim"; // run the function-based path (FBP) conversion tool to create an FBP-based output FunctionBasedPathConversionTool tool{inputModelPath, outputModelName}; + tool.setVerbose(true); tool.run(); // load both the input and output into memory Model inputModel{inputModelPath}; - Model outputModel{outputModelName + ".osim"}; + Model outputModel{outputModelName}; // init the input model inputModel.finalizeConnections(); @@ -71,7 +219,7 @@ void testArmModelConversionAccuracy() { std::string output = "length"; // connect reporter to input model - { + if (true) { auto inputModelReporter = std::unique_ptr{new ConsoleReporter{}}; inputModelReporter->setName("point_results"); inputModelReporter->set_report_time_interval(0.05); @@ -80,7 +228,7 @@ void testArmModelConversionAccuracy() { } // connect reporter to output model - { + if (true) { auto outputModelReporter = std::unique_ptr{new ConsoleReporter{}}; outputModelReporter ->setName("function_results"); outputModelReporter ->set_report_time_interval(0.05); @@ -153,6 +301,7 @@ void testArmModelConversionAccuracy() { int main() { try { SimTK_START_TEST("testFunctionBasedPathConversion"); + SimTK_SUBTEST(testLengthDifferenceBetweenFBPAndPBPIsSmall); SimTK_SUBTEST(testArmModelConversionAccuracy); SimTK_END_TEST(); } catch (const std::exception& ex) { diff --git a/OpenSim/Simulation/Model/FunctionBasedPath.cpp b/OpenSim/Simulation/Model/FunctionBasedPath.cpp index 9001fe10e3..a880e91682 100644 --- a/OpenSim/Simulation/Model/FunctionBasedPath.cpp +++ b/OpenSim/Simulation/Model/FunctionBasedPath.cpp @@ -9,11 +9,11 @@ #include #include -static constexpr size_t g_MaxCoordsThatCanBeInterpolated = 16; // important: upper limit that's used for stack allocations +static constexpr size_t g_MaxCoordsThatCanBeInterpolated = 8; // important: upper limit that's used for stack allocations static constexpr int g_MaxCoordsThatCanAffectPathDefault = static_cast(g_MaxCoordsThatCanBeInterpolated); static constexpr int g_NumProbingDiscretizationsDefault = 8; static constexpr double g_MinProbingMomentArmChangeDefault = 0.001; -static constexpr int g_NumDiscretizationStepsPerDimensionDefault = 64; +static constexpr int g_NumDiscretizationStepsPerDimensionDefault = 8; // returns `true` if changing the supplied `Coordinate` changes the moment arm // of the supplied `PointBasedPath` (PBP) @@ -44,8 +44,8 @@ static bool coordAffectsPBP( } } - c.setLocked(state, initialLockedState); c.setValue(state, initialValue); + c.setLocked(state, initialLockedState); return affectsCoord; } @@ -337,20 +337,20 @@ static double Impl_GetPathLength(OpenSim::FunctionBasedPath::Impl const& impl, for (int coord = 0; coord < nCoords; ++coord) { double inputVal = inputVals[coord]; Discretization const& disc = impl.discretizations[coord]; + double step = (disc.end - disc.begin) / (disc.nsteps - 1); // compute index of first discretization step *before* the input value and // the fraction that the input value is towards the *next* discretization step int idx; double frac; - if (inputVal < disc.begin) { + if (inputVal < disc.begin+step) { idx = 1; frac = 0.0; - } else if (inputVal > disc.end) { + } else if (inputVal > disc.end-2*step) { idx = disc.nsteps-3; frac = 0.0; } else { // solve for `n`: inputVal = begin + n*step - double step = (disc.end - disc.begin) / (disc.nsteps - 1); double n = (inputVal - disc.begin) / step; double wholePart; double fractionalPart = std::modf(n, &wholePart); @@ -597,11 +597,11 @@ std::unique_ptr OpenSim::FunctionBasedPath::fromPoin params.numDiscretizationStepsPerDimension = g_NumDiscretizationStepsPerDimensionDefault; } - OPENSIM_THROW_IF(params.maxCoordsThatCanAffectPath <= 0, OpenSim::Exception, "maximum coordinates that can affect the path must be a positive number that is <16"); - OPENSIM_THROW_IF(params.numProbingDiscretizations <= 0, OpenSim::Exception, "number of probing discretizations must be a positive number"); - OPENSIM_THROW_IF(params.minProbingMomentArmChange <= 0, OpenSim::Exception, "min probing moment arm change must be a positive number"); - OPENSIM_THROW_IF(params.numDiscretizationStepsPerDimension <= 0, OpenSim::Exception, "number of discretization steps per dimension must be a positive number"); - OPENSIM_THROW_IF(params.maxCoordsThatCanAffectPath > static_cast(g_MaxCoordsThatCanBeInterpolated), OpenSim::Exception, "maxCoordsThatCanAffectPath must be <=16"); + OPENSIM_THROW_IF(params.maxCoordsThatCanAffectPath <= 0, OpenSim::Exception, "maxCoordsThatCanAffectPath must be a positive number that is <=8"); + OPENSIM_THROW_IF(params.maxCoordsThatCanAffectPath > static_cast(g_MaxCoordsThatCanBeInterpolated), OpenSim::Exception, "maxCoordsThatCanAffectPath must be a positive number that is <=8"); + OPENSIM_THROW_IF(params.numProbingDiscretizations <= 0, OpenSim::Exception, "numProbingDiscretizations must be a positive number"); + OPENSIM_THROW_IF(params.minProbingMomentArmChange <= 0, OpenSim::Exception, "minProbingMomentArmChange must be a positive number"); + OPENSIM_THROW_IF(params.numDiscretizationStepsPerDimension <= 0, OpenSim::Exception, "numDiscretizationStepsPerDimension must be a positive number"); } std::unique_ptr fbp{new FunctionBasedPath{}}; diff --git a/OpenSim/Tools/FunctionBasedPathConversionTool.cpp b/OpenSim/Tools/FunctionBasedPathConversionTool.cpp index f9b723140c..5311ccc407 100644 --- a/OpenSim/Tools/FunctionBasedPathConversionTool.cpp +++ b/OpenSim/Tools/FunctionBasedPathConversionTool.cpp @@ -1,18 +1,23 @@ -#include #include "FunctionBasedPathConversionTool.h" -#include -#include -#include -#include -#include -#include + +#include +#include +#include +#include +#include + +#include +#include +#include #include +#include using namespace OpenSim; OpenSim::FunctionBasedPathConversionTool::FunctionBasedPathConversionTool() : _modelPath{}, _newModelName{}, + _params{}, _verbose{false} { } @@ -23,6 +28,7 @@ OpenSim::FunctionBasedPathConversionTool::FunctionBasedPathConversionTool( _modelPath{modelPath}, _newModelName{newModelName}, + _params{}, _verbose{false} { } @@ -47,6 +53,22 @@ void OpenSim::FunctionBasedPathConversionTool::setNewModelName(const std::string _newModelName = newModelName; } +const FunctionBasedPath::FittingParams& OpenSim::FunctionBasedPathConversionTool::getFittingParams() const { + return _params; +} + +void OpenSim::FunctionBasedPathConversionTool::setFittingParams(const FunctionBasedPath::FittingParams& p) { + _params = p; +} + +bool OpenSim::FunctionBasedPathConversionTool::getVerbose() const { + return _verbose; +} + +void OpenSim::FunctionBasedPathConversionTool::setVerbose(bool v) { + _verbose = v; +} + bool OpenSim::FunctionBasedPathConversionTool::run() { Model sourceModel{_modelPath}; @@ -60,6 +82,7 @@ bool OpenSim::FunctionBasedPathConversionTool::run() // print source model structure when runnning in verbose mode if (_verbose) { + OpenSim::log_info("printing source model info"); sourceModel.printSubcomponentInfo(); } @@ -114,10 +137,29 @@ bool OpenSim::FunctionBasedPathConversionTool::run() // for each `PathActuator` that uses a PBP, create an equivalent // `FunctionBasedPath` (FBP) by fitting a function against the PBP and // replace the PBP owned by the destination's `PathActuator` with the FBP + if (_verbose) { + OpenSim::log_info("using fitting params: maxCoordsThatCanAffectPath = {}, minProbingMomentArmChange = {}, numDiscretizationStepsPerDimension = {}, numProbingDiscretizations = {}", + _params.maxCoordsThatCanAffectPath, + _params.minProbingMomentArmChange, + _params.numDiscretizationStepsPerDimension, + _params.numProbingDiscretizations); + } for (const PBPtoActuatorMapping& mapping : mappings) { // create an FBP in-memory - FunctionBasedPath::FittingParams p; - std::unique_ptr maybeFbp = FunctionBasedPath::fromPointBasedPath(sourceModel, mapping.sourcePBP, p); + + if (_verbose) { + OpenSim::log_info("attempting to convert point-based path '{}' into a FunctionBasedPath", mapping.sourcePBP.getAbsolutePathString()); + } + + std::unique_ptr maybeFbp = FunctionBasedPath::fromPointBasedPath(sourceModel, mapping.sourcePBP, _params); + + if (_verbose) { + if (maybeFbp) { + OpenSim::log_info("successfully converted '{}' into a FunctionBasedPath", mapping.sourcePBP.getAbsolutePathString()); + } else { + OpenSim::log_info("failed to convert '{}' into a FunctionBasedPath", mapping.sourcePBP.getAbsolutePathString()); + } + } if (maybeFbp) { // assign the FBP over the destination's PBP @@ -125,19 +167,23 @@ bool OpenSim::FunctionBasedPathConversionTool::run() } } + if (_verbose) { + OpenSim::log_info("finished attempting to fit all point based paths: emitting new output model that contains FunctionBasedPaths"); + } + // the output model is now the same as the source model, but each PBP in // its `PathActuator`s has been replaced with an FBP. Perform any final // model-level fixups and save the output model. outputModel.finalizeFromProperties(); outputModel.finalizeConnections(); outputModel.initSystem(); - outputModel.print(std::string{_newModelName} + ".osim"); + outputModel.print(_newModelName); if (_verbose) { - std::cerr << "--- interpolation complete ---\n\n" - << "model before:\n"; + OpenSim::log_info("--- interpolation complete ---"); + OpenSim::log_info("model before:"); sourceModel.printSubcomponentInfo(); - std::cerr << "\nmodel after:\n"; + OpenSim::log_info("model after:"); outputModel.printSubcomponentInfo(); } diff --git a/OpenSim/Tools/FunctionBasedPathConversionTool.h b/OpenSim/Tools/FunctionBasedPathConversionTool.h index a47d48644b..fcabeb67a0 100644 --- a/OpenSim/Tools/FunctionBasedPathConversionTool.h +++ b/OpenSim/Tools/FunctionBasedPathConversionTool.h @@ -50,6 +50,7 @@ class OSIMTOOLS_API FunctionBasedPathConversionTool: public AbstractTool { private: std::string _modelPath; std::string _newModelName; + FunctionBasedPath::FittingParams _params; bool _verbose; public: @@ -62,6 +63,12 @@ class OSIMTOOLS_API FunctionBasedPathConversionTool: public AbstractTool { const std::string& getNewModelName() const; void setNewModelName(const std::string&); + const FunctionBasedPath::FittingParams& getFittingParams() const; + void setFittingParams(const FunctionBasedPath::FittingParams&); + + bool getVerbose() const; + void setVerbose(bool); + bool run() override SWIG_DECLARE_EXCEPTION; }; } From ad87919d794272536f39f9ea08bf73f746fb70ce Mon Sep 17 00:00:00 2001 From: Travis CI Date: Thu, 2 Sep 2021 17:20:02 +0200 Subject: [PATCH 34/36] Fixed invalid step size when computing evals --- .../Simulation/Model/FunctionBasedPath.cpp | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/OpenSim/Simulation/Model/FunctionBasedPath.cpp b/OpenSim/Simulation/Model/FunctionBasedPath.cpp index a880e91682..3d0f4f2c7e 100644 --- a/OpenSim/Simulation/Model/FunctionBasedPath.cpp +++ b/OpenSim/Simulation/Model/FunctionBasedPath.cpp @@ -9,7 +9,7 @@ #include #include -static constexpr size_t g_MaxCoordsThatCanBeInterpolated = 8; // important: upper limit that's used for stack allocations +static constexpr size_t g_MaxCoordsThatCanBeInterpolated = 8; // important: this is an upper limit that's used for stack allocations static constexpr int g_MaxCoordsThatCanAffectPathDefault = static_cast(g_MaxCoordsThatCanBeInterpolated); static constexpr int g_NumProbingDiscretizationsDefault = 8; static constexpr double g_MinProbingMomentArmChangeDefault = 0.001; @@ -31,7 +31,7 @@ static bool coordAffectsPBP( double start = c.getRangeMin(); double end = c.getRangeMax(); - double step = (end - start) / numProbingSteps; + double step = (end - start) / (numProbingSteps-1); bool affectsCoord = false; for (double v = start; v <= end; v += step) { @@ -86,16 +86,14 @@ struct Discretization final { }; // compute ideal discretization of the given coordinate -static Discretization discretizationForCoord(OpenSim::Coordinate const&, int numDiscretizationSteps) { - // TODO: these hacky ranges were imported from the original code. Joris had this - // commented out: - // dc.begin = std::max(c.getRangeMin(), -static_cast(SimTK_PI)); - // dc.end = std::min(c.getRangeMax(), static_cast(SimTK_PI)); +static Discretization discretizationForCoord(OpenSim::Coordinate const& c, int numDiscretizationSteps) { SimTK_ASSERT_ALWAYS(numDiscretizationSteps >= 4, "need to supply more than 4 discretization steps"); Discretization d; - d.begin = -static_cast(SimTK_PI)/2; - d.end = static_cast(SimTK_PI)/2; + //d.begin = -static_cast(SimTK_PI)/2; + //d.end = static_cast(SimTK_PI)/2; + d.begin = std::max(c.getRangeMin(), -static_cast(SimTK_PI)); + d.end = std::min(c.getRangeMax(), static_cast(SimTK_PI)); d.nsteps = numDiscretizationSteps - 3; double step = (d.end-d.begin) / (d.nsteps-1); @@ -151,7 +149,7 @@ static std::vector computeEvaluationsFromPBP(OpenSim::PointBasedPath con for (size_t coord = 0; coord < ncoords; ++coord) { Discretization const& discr = discs[coord]; - double stepSz = (discr.end - discr.begin) / discr.nsteps; + double stepSz = (discr.end - discr.begin) / (discr.nsteps - 1); int step = discStepIdx[coord]; double val = discr.begin + step*stepSz; @@ -507,7 +505,7 @@ static double Impl_GetPathLengthDerivative(OpenSim::FunctionBasedPath::Impl cons // compute value at current point double v1 = Impl_GetPathLength(impl, inputVals.data(), nCoords); - static constexpr double h = 0.000001; + static constexpr double h = 0.00001; // alter the input value for the to-be-derived coordinate *slightly* and recompute inputVals[coordIdx] += h; From 11fc9b0a4b16a142dc0ad71ee3fe2940042cda4d Mon Sep 17 00:00:00 2001 From: joris997 Date: Sun, 12 Sep 2021 10:55:08 +0200 Subject: [PATCH 35/36] implementation of analytical derivative and more testcases in conversion tool --- .../test/testFunctionBasedPathConversion.cpp | 19 ++- .../Simulation/Model/FunctionBasedPath.cpp | 152 ++++++++++++++++-- 2 files changed, 152 insertions(+), 19 deletions(-) diff --git a/Applications/FunctionBasedPathConversion/test/testFunctionBasedPathConversion.cpp b/Applications/FunctionBasedPathConversion/test/testFunctionBasedPathConversion.cpp index fe153128f0..7fbad15da2 100644 --- a/Applications/FunctionBasedPathConversion/test/testFunctionBasedPathConversion.cpp +++ b/Applications/FunctionBasedPathConversion/test/testFunctionBasedPathConversion.cpp @@ -73,12 +73,23 @@ class VectorReporter final : public AbstractReporter { }; static void testLengthDifferenceBetweenFBPAndPBPIsSmall() { - std::string inputModelPath = "arm26.osim"; - std::string outputModelName = "arm26_FBP.osim"; - std::string force = "/forceset/TRIlong"; +// std::string inputModelPath = "ToyLandingModel.osim"; +// std::string outputModelName = "ToyLandingModel_FBP.osim"; +// std::string force = "/forceset/glut_med1_r"; +// std::string output = "length"; + +// std::string inputModelPath = "arm26.osim"; +// std::string outputModelName = "arm26_FBP.osim"; +// std::string force = "/forceset/TRIlong"; +// std::string output = "length"; + + std::string inputModelPath = "SoccerKickingModel.osim"; + std::string outputModelName = "SoccerKickingModel_FBP.osim"; + std::string force = "/forceset/bifemlh_r"; std::string output = "length"; + double reportingInterval = 0.05; - int discretizationPoints = 80; + int discretizationPoints = 20; FunctionBasedPathConversionTool tool{inputModelPath, outputModelName}; auto params = tool.getFittingParams(); diff --git a/OpenSim/Simulation/Model/FunctionBasedPath.cpp b/OpenSim/Simulation/Model/FunctionBasedPath.cpp index 3d0f4f2c7e..5f2a08958a 100644 --- a/OpenSim/Simulation/Model/FunctionBasedPath.cpp +++ b/OpenSim/Simulation/Model/FunctionBasedPath.cpp @@ -486,34 +486,156 @@ static double Impl_GetPathLength(OpenSim::FunctionBasedPath::Impl const& impl, // get the *derivative* of the path length with respect to the given Coordinate index // (in impl.coords) -static double Impl_GetPathLengthDerivative(OpenSim::FunctionBasedPath::Impl const& impl, - SimTK::State const& s, - int coordIdx) { +//static double Impl_GetPathLengthDerivative(OpenSim::FunctionBasedPath::Impl const& impl, +// SimTK::State const& s, +// int coordIdx) { - SimTK_ASSERT_ALWAYS(!impl.coords.empty(), "FBPs require at least one coordinate to affect the path"); - SimTK_ASSERT_ALWAYS(coordIdx != -1, "coord index must be valid"); - SimTK_ASSERT_ALWAYS(coordIdx < static_cast(impl.coords.size()), "coord index must be valid"); +// SimTK_ASSERT_ALWAYS(!impl.coords.empty(), "FBPs require at least one coordinate to affect the path"); +// SimTK_ASSERT_ALWAYS(coordIdx != -1, "coord index must be valid"); +// SimTK_ASSERT_ALWAYS(coordIdx < static_cast(impl.coords.size()), "coord index must be valid"); + +// int nCoords = static_cast(impl.coords.size()); + +// // get the input value of each coordinate in the current state +// std::array inputVals{}; +// for (int coord = 0; coord < nCoords; ++coord) { +// inputVals[coord] = impl.coords[coord]->getValue(s); +// } + +// // compute value at current point +// double v1 = Impl_GetPathLength(impl, inputVals.data(), nCoords); + +// static constexpr double h = 0.00001; +// // alter the input value for the to-be-derived coordinate *slightly* and recompute +// inputVals[coordIdx] += h; +// double v2 = Impl_GetPathLength(impl, inputVals.data(), nCoords); + +// // the derivative is how much the output changed when the input was altered +// // slightly (this is a poor-man's discrete derivative method) +// return (v2 - v1) / h; +//} +static double Impl_GetPathLengthDerivative(OpenSim::FunctionBasedPath::Impl const& impl, + SimTK::State const& s, + int coordIdx) { int nCoords = static_cast(impl.coords.size()); + SimTK_ASSERT_ALWAYS(!impl.coords.empty(), "FBPs require at least one coordinate to affect the path"); + SimTK_ASSERT_ALWAYS(nCoords == static_cast(impl.coords.size()), "You must call this function with the correct number of (precomputed) coordinate values"); + // get the input value of each coordinate in the current state std::array inputVals{}; for (int coord = 0; coord < nCoords; ++coord) { inputVals[coord] = impl.coords[coord]->getValue(s); } - // compute value at current point - double v1 = Impl_GetPathLength(impl, inputVals.data(), nCoords); + // compute: + // + // - the index of the first discretization step *before* the input value + // + // - the polynomial of the curve at that step, given its fractional distance + // toward the next step + using Polynomial = std::array; + std::array closestDiscretizationSteps; + std::array betas; + for (int coord = 0; coord < nCoords; ++coord) { + double inputVal = inputVals[coord]; + Discretization const& disc = impl.discretizations[coord]; + double step = (disc.end - disc.begin) / (disc.nsteps - 1); + + // compute index of first discretization step *before* the input value and + // the fraction that the input value is towards the *next* discretization step + int idx; + double frac; + if (inputVal < disc.begin+step) { + idx = 1; + frac = 0.0; + } else if (inputVal > disc.end-2*step) { + idx = disc.nsteps-3; + frac = 0.0; + } else { + // solve for `n`: inputVal = begin + n*step + double n = (inputVal - disc.begin) / step; + double wholePart; + double fractionalPart = std::modf(n, &wholePart); - static constexpr double h = 0.00001; + idx = static_cast(wholePart); + frac = fractionalPart; + } - // alter the input value for the to-be-derived coordinate *slightly* and recompute - inputVals[coordIdx] += h; - double v2 = Impl_GetPathLength(impl, inputVals.data(), nCoords); + // compute polynomial based on fraction the point is toward the next point + double frac2 = frac*frac; + double frac3 = frac2*frac; + double frac4 = frac3*frac; + double fracMinusOne = frac - 1; + double fracMinusOne3 = fracMinusOne*fracMinusOne*fracMinusOne; - // the derivative is how much the output changed when the input was altered - // slightly (this is a poor-man's discrete derivative method) - return (v2 - v1) / h; + Polynomial p; + if (coord == coordIdx){ + // derivative + p[0] = 5*frac4 - 10*frac3 + 4.5*frac2 + frac - 0.5; + p[1] = -15*frac4 + 30*frac3 - 13.5*frac2 - 2*frac; + p[2] = 15*frac4 - 30*frac3 + 13.5*frac2 + frac + 0.5; + p[3] = frac2*(-5*frac2 + 10*frac - 4.5); + } else { + // 'normal' spline function + p[0] = 0.5 * fracMinusOne3*frac*(2*frac + 1); + p[1] = -0.5 * (frac - 1)*(6*frac4 - 9*frac3 + 2*frac + 2); + p[2] = 0.5 * frac*(6*frac4 - 15*frac3 + 9*frac2 + frac + 1); + p[3] = -0.5 * (frac - 1)*frac3*(2*frac - 3); + } + + closestDiscretizationSteps[coord] = idx; + betas[coord] = p; + } + + std::array dimIdxOffsets; + for (int coord = 0; coord < nCoords; ++coord) { + dimIdxOffsets[coord] = -1; + } + + double z = 0.0; + int cnt = 0; + while (dimIdxOffsets[0] < 3) { + + double beta = 1.0; + int evalStride = 1; + int evalIdx = 0; + + for (int coord = nCoords-1; coord >= 0; --coord) { + int offset = dimIdxOffsets[coord]; // -1, 0, 1, or 2 + int closestStep = closestDiscretizationSteps[coord]; + int step = closestStep + offset; + + beta *= betas[coord][offset+1]; + evalIdx += evalStride * step; + evalStride *= impl.discretizations[coord].nsteps; + } + + double gridSize = (impl.discretizations[coordIdx].end-impl.discretizations[coordIdx].begin)/impl.discretizations[coordIdx].nsteps; + z = std::fma(beta, impl.evals.at(evalIdx)/gridSize, z); + { + int pos = nCoords-1; + ++dimIdxOffsets[pos]; // perform least-significant increment (may overflow) + while (pos > 0 && dimIdxOffsets[pos] > 2) { // handle overflows + carry propagation + dimIdxOffsets[pos] = -1; // overflow + ++dimIdxOffsets[pos-1]; // carry propagation + --pos; + } + } + + ++cnt; + } + { + int expectedIterations = 1 << (2*nCoords); + if (cnt != expectedIterations) { + std::stringstream msg; + msg << "invalid number of permutations explored: expected = " << expectedIterations << ", got = " << cnt; + OPENSIM_THROW(OpenSim::Exception, std::move(msg).str()); + } + } + + return z; } // get the *derivative* of the path length with respect to the given Coordinate From b31afe4b5783f458a4fe6742061c5639bc24d5f3 Mon Sep 17 00:00:00 2001 From: joris997 Date: Wed, 15 Sep 2021 19:32:58 +0200 Subject: [PATCH 36/36] added some other test-cases (commented out) --- .../test/testFunctionBasedPathConversion.cpp | 43 +++++++++++-------- 1 file changed, 26 insertions(+), 17 deletions(-) diff --git a/Applications/FunctionBasedPathConversion/test/testFunctionBasedPathConversion.cpp b/Applications/FunctionBasedPathConversion/test/testFunctionBasedPathConversion.cpp index 7fbad15da2..8a6c6ef123 100644 --- a/Applications/FunctionBasedPathConversion/test/testFunctionBasedPathConversion.cpp +++ b/Applications/FunctionBasedPathConversion/test/testFunctionBasedPathConversion.cpp @@ -75,25 +75,26 @@ class VectorReporter final : public AbstractReporter { static void testLengthDifferenceBetweenFBPAndPBPIsSmall() { // std::string inputModelPath = "ToyLandingModel.osim"; // std::string outputModelName = "ToyLandingModel_FBP.osim"; -// std::string force = "/forceset/glut_med1_r"; +// std::string force = "/forceset/per_long_r"; // std::string output = "length"; -// std::string inputModelPath = "arm26.osim"; -// std::string outputModelName = "arm26_FBP.osim"; -// std::string force = "/forceset/TRIlong"; -// std::string output = "length"; - - std::string inputModelPath = "SoccerKickingModel.osim"; - std::string outputModelName = "SoccerKickingModel_FBP.osim"; - std::string force = "/forceset/bifemlh_r"; + std::string inputModelPath = "arm26.osim"; + std::string outputModelName = "arm26_FBP.osim"; + std::string force = "/forceset/TRIlong"; std::string output = "length"; +// std::string inputModelPath = "SoccerKickingModel.osim"; +// std::string outputModelName = "SoccerKickingModel_FBP.osim"; +// std::string force = "/forceset/bifemlh_r"; +// std::string output = "length"; + double reportingInterval = 0.05; - int discretizationPoints = 20; + int discretizationPoints = 10; FunctionBasedPathConversionTool tool{inputModelPath, outputModelName}; auto params = tool.getFittingParams(); params.numDiscretizationStepsPerDimension = discretizationPoints; +// params.maxCoordsThatCanAffectPath = 2; tool.setFittingParams(params); tool.setVerbose(true); tool.run(); @@ -136,7 +137,7 @@ static void testLengthDifferenceBetweenFBPAndPBPIsSmall() { } // init initial system + states - double finalSimTime = 3.5; + double finalSimTime = 1.0; // run FD sim of PBP { @@ -197,11 +198,23 @@ static void testLengthDifferenceBetweenFBPAndPBPIsSmall() { } static void testArmModelConversionAccuracy() { +// std::string inputModelPath = "ToyLandingModel.osim"; +// std::string outputModelName = "ToyLandingModel_FBP.osim"; +// std::string force = "/forceset/per_long_r"; +// std::string output = "length"; + std::string inputModelPath = "arm26.osim"; std::string outputModelName = "arm26_FBP.osim"; + std::string force = "/forceset/TRIlong"; + std::string output = "length"; // run the function-based path (FBP) conversion tool to create an FBP-based output FunctionBasedPathConversionTool tool{inputModelPath, outputModelName}; + + auto params = tool.getFittingParams(); + params.numDiscretizationStepsPerDimension = 10; +// params.maxCoordsThatCanAffectPath = 2; + tool.setFittingParams(params); tool.setVerbose(true); tool.run(); @@ -225,10 +238,6 @@ static void testArmModelConversionAccuracy() { std::cout << "----- output model details -----\n"; outputModel.printSubcomponentInfo(); - // connect reporters to each model - std::string force = "/forceset/TRIlong"; - std::string output = "length"; - // connect reporter to input model if (true) { auto inputModelReporter = std::unique_ptr{new ConsoleReporter{}}; @@ -278,8 +287,8 @@ static void testArmModelConversionAccuracy() { // setup + run the tests TestStats inputStats{"Input Model (point-based paths)"}; TestStats outputStats{"Output Model (function-based paths)"}; - int numRepeats = 10; - double finalSimTime = 3.5; + int numRepeats = 25; + double finalSimTime = 1.0; // exercise input model std::cerr << "----- running input model (point based path) tests -----\n";