Program Listing for File ComputedTorque.cc#
↰ Return to documentation for file (doxygen_docs/GeneralKModels/ComputedTorque.cc)
#include "Karana/GeneralKModels/ComputedTorque.h"
#include "Karana/KCore/Allocator.h"
#include "Karana/SOADyn/Algorithms.h"
#include "Karana/SOADyn/CoordData.h"
/**
* @file
* @brief ComputedTorque implementation.
*/
namespace Karana::Models {
namespace kd = Karana::Dynamics;
ComputedTorque::ComputedTorque(std::string_view name,
const kc::ks_ptr<kd::ModelManager> &mm,
const kc::ks_ptr<kd::SubTree> &st,
const SetAccelFn &set_accels_fn)
: KModel<ComputedTorque>(name, mm)
, _st(st)
, _set_accels(set_accels_fn) {
// TODO: Check whether _st is a child of SubTree
model_manager->getSubTree();
};
kc::ks_ptr<ComputedTorque> ComputedTorque::create(std::string_view name,
const kc::ks_ptr<kd::ModelManager> &mm,
const kc::ks_ptr<kd::SubTree> &st,
const SetAccelFn &set_accels_fn) {
kc::ks_ptr<ComputedTorque> ct = std::allocate_shared<ComputedTorque>(
kc::Allocator<ComputedTorque>{}, name, mm, st, set_accels_fn);
mm->registerModel(ct);
return ct;
}
void ComputedTorque::preDeriv(const km::Ktime &t, const km::Vec &x) {
_set_accels(t, x);
_st->subhingeCoordData()->setT(kd::Algorithms::evalComputedTorque(*_st));
}
// Destructor included for MacOS builds. Must have a key-function out-of-line to avoid dulpicate
// symbols.
ComputedTorque::~ComputedTorque(){};
} // namespace Karana::Models