/*************************************************************************** * Copyright (c) 2023 Ondsel, Inc. * * * * This file is part of OndselSolver. * * * * See LICENSE file for details about copyright. * ***************************************************************************/ #pragma once #include #include "ASMTSpatialContainer.h" #include "FullColumn.h" #include "FullMatrix.h" #include "MBDynSystem.h" #include "ASMTTime.h" #include "ASMTConstantGravity.h" namespace MbD { class ASMTRefPoint; class ASMTRefCurve; class ASMTRefSurface; class ASMTPart; class ASMTKinematicIJ; class ASMTConstraintSet; class ASMTForceTorque; class ASMTConstantGravity; class ASMTSimulationParameters; class ASMTAnimationParameters; class ASMTJoint; class ASMTMotion; class Units; class ASMTTime; class SystemSolver; class ASMTItemIJ; class ASMTAssembly : public ASMTSpatialContainer { // public: ASMTAssembly(); static void runSinglePendulumSuperSimplified(); static void runSinglePendulumSuperSimplified2(); static void runSinglePendulumSimplified(); static void runSinglePendulum(); static void runFile(const char* chars); static void readWriteFile(const char* chars); void initialize() override; ASMTAssembly* root() override; void setNotes(std::string str); void parseASMT(std::vector& lines) override; void readNotes(std::vector& lines); void readParts(std::vector& lines); void readPart(std::vector& lines); void readKinematicIJs(std::vector& lines); void readKinematicIJ(std::vector& lines); void readConstraintSets(std::vector& lines); void readJoints(std::vector& lines); void readMotions(std::vector& lines); void readGeneralConstraintSets(std::vector& lines); void readForcesTorques(std::vector& lines); void readConstantGravity(std::vector& lines); void readSimulationParameters(std::vector& lines); void readAnimationParameters(std::vector& lines); void readTimeSeries(std::vector& lines); void readTimes(std::vector& lines); void readAssemblySeries(std::vector& lines); void readPartSeriesMany(std::vector& lines); void readPartSeries(std::vector& lines); void readJointSeriesMany(std::vector& lines); void readJointSeries(std::vector& lines); void readMotionSeriesMany(std::vector& lines); void readMotionSeries(std::vector& lines); void outputFor(AnalysisType type); void logString(std::string& str); void logString(double value); void preMbDrun(std::shared_ptr mbdSys); void postMbDrun(); void calcCharacteristicDimensions(); double calcCharacteristicTime(); double calcCharacteristicMass(); double calcCharacteristicLength(); std::shared_ptr>> connectorList(); std::shared_ptr>>markerMap(); void deleteMbD() override; void createMbD(std::shared_ptr mbdSys, std::shared_ptr mbdUnits) override; void outputFile(std::string filename); void storeOnLevel(std::ofstream& os, int level) override; /* This function performs a one shot solve of the assembly.*/ void solve(); void runKINEMATIC(); void initprincipalMassMarker(); std::shared_ptr spatialContainerAt(std::shared_ptr self, std::string& longname); std::shared_ptr markerAt(std::string& longname); std::shared_ptr jointAt(std::string& longname); std::shared_ptr motionAt(std::string& longname); std::shared_ptr forceTorqueAt(std::string& longname); FColDsptr vOcmO() override; FColDsptr omeOpO() override; std::shared_ptr geoTime(); void updateFromMbD() override; void compareResults(AnalysisType type) override; void outputResults(AnalysisType type) override; void addPart(std::shared_ptr part); void addJoint(std::shared_ptr joint); void addMotion(std::shared_ptr motion); void setConstantGravity(std::shared_ptr constantGravity); void setSimulationParameters(std::shared_ptr simulationParameters); std::shared_ptr partNamed(std::string partName); std::shared_ptr partPartialNamed(std::string partialName); void storeOnLevelNotes(std::ofstream& os, int level); void storeOnLevelParts(std::ofstream& os, int level); void storeOnLevelKinematicIJs(std::ofstream& os, int level); void storeOnLevelConstraintSets(std::ofstream& os, int level); void storeOnLevelForceTorques(std::ofstream& os, int level); void storeOnLevelJoints(std::ofstream& os, int level); void storeOnLevelMotions(std::ofstream& os, int level); void storeOnLevelGeneralConstraintSets(std::ofstream& os, int level); void storeOnTimeSeries(std::ofstream& os) override; std::string notes; std::shared_ptr>> parts = std::make_shared>>(); std::shared_ptr>> kinematicIJs = std::make_shared>>(); std::shared_ptr>> constraintSets = std::make_shared>>(); std::shared_ptr>> joints = std::make_shared>>(); std::shared_ptr>> motions = std::make_shared>>(); std::shared_ptr>> forcesTorques = std::make_shared>>(); std::shared_ptr constantGravity = std::make_shared(); std::shared_ptr simulationParameters; std::shared_ptr animationParameters; std::shared_ptr> times; std::shared_ptr asmtTime = std::make_shared(); std::shared_ptr mbdUnits; MBDynSystem* mbdynItem = nullptr; }; }