#include #include "SystemSolver.h" #include "NewtonRaphson.h" #include "PosICNewtonRaphson.h" using namespace MbD; //class PosICNewtonRaphson; std::shared_ptr MbD::SystemSolver::Create(System* x) { auto item = std::make_shared(x); item->initialize(); return item; } void MbD::SystemSolver::initialize() { tstartPasts = std::make_shared>(); } void SystemSolver::initializeLocally() { setsOfRedundantConstraints = std::make_shared>>>(); direction = (tstart < tend) ? 1.0 : -1.0; toutFirst = tstart + (direction * hout); } void SystemSolver::initializeGlobally() { } void SystemSolver::runAllIC() { while (true) { initializeLocally(); initializeGlobally(); runPosIC(); while (needToRedoPosIC()) { runPosIC(); } runVelIC(); runAccIC(); auto discontinuities = system->discontinuitiesAtIC(); if (discontinuities->size() == 0) break; if (std::find(discontinuities->begin(), discontinuities->end(), "REBOUND") != discontinuities->end()) { preCollision(); runCollisionDerivativeIC(); runBasicCollision(); } } } void MbD::SystemSolver::runPosIC() { icTypeSolver = std::make_shared(); icTypeSolver->setSystem(this); icTypeSolver->run(); } void MbD::SystemSolver::runVelIC() { } void MbD::SystemSolver::runAccIC() { } bool MbD::SystemSolver::needToRedoPosIC() { return false; } void MbD::SystemSolver::preCollision() { } void MbD::SystemSolver::runCollisionDerivativeIC() { } void MbD::SystemSolver::runBasicCollision() { } void SystemSolver::runBasicKinematic() { } void MbD::SystemSolver::partsJointsMotionsDo(const std::function)>& f) { system->partsJointsMotionsDo(f); }