Program Listing for File ComputedTorque.cc

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