/*************************************************************************** * Copyright (c) 2023 Ondsel, Inc. * * * * This file is part of OndselSolver. * * * * See LICENSE file for details about copyright. * ***************************************************************************/ #include "PosICKineNewtonRaphson.h" #include "SystemSolver.h" #include "Part.h" #include "Constraint.h" using namespace MbD; void PosICKineNewtonRaphson::initializeGlobally() { AnyPosICNewtonRaphson::initializeGlobally(); iterMax = system->iterMaxPosKine; dxTol = system->errorTolPosKine; } void PosICKineNewtonRaphson::assignEquationNumbers() { auto parts = system->parts(); //auto contactEndFrames = system->contactEndFrames(); //auto uHolders = system->uHolders(); auto constraints = system->allConstraints(); int eqnNo = 0; for (auto& part : *parts) { part->iqX(eqnNo); eqnNo = eqnNo + 3; part->iqE(eqnNo); eqnNo = eqnNo + 4; } //for (auto& endFrm : *contactEndFrames) { // endFrm->is(eqnNo); // eqnNo = eqnNo + endFrm->sSize(); //} //for (auto& uHolder : *uHolders) { // uHolder->iu(eqnNo); // eqnNo += 1; //} auto nEqns = eqnNo; //C++ uses index 0. nqsu = nEqns; for (auto& con : *constraints) { con->iG = eqnNo; eqnNo += 1; } auto lastEqnNo = eqnNo - 1; nEqns = eqnNo; //C++ uses index 0. n = nEqns; } void MbD::PosICKineNewtonRaphson::preRun() { system->Solver::logString("MbD: Solving for quasi kinematic position."); PosNewtonRaphson::preRun(); }