#include #include "SystemSolver.h" #include "NewtonRaphson.h" #include "PosICNewtonRaphson.h" #include "CREATE.h" using namespace MbD; //class PosICNewtonRaphson; 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 = CREATE::With(); 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); } void MbD::SystemSolver::logString(std::string& str) { system->logString(str); } std::shared_ptr>> MbD::SystemSolver::parts() { return system->parts; } std::shared_ptr>> MbD::SystemSolver::essentialConstraints2() { return system->essentialConstraints2(); } std::shared_ptr>> MbD::SystemSolver::displacementConstraints() { return system->displacementConstraints(); } std::shared_ptr>> MbD::SystemSolver::perpendicularConstraints2() { return system->perpendicularConstraints2(); }