Program Listing for File Gravity.cc

Program Listing for File Gravity.cc#

Return to documentation for file (doxygen_docs/GeneralKModels/Gravity.cc)

#include "Karana/GeneralKModels/Gravity.h"
#include "Karana/KCore/Allocator.h"
#include "Karana/SOADyn/SubTree.h"

/**
 * @file
 * @brief Gravity implementation.
 */

namespace Karana::Models {

    namespace kd = Karana::Dynamics;

    Gravity::Gravity(std::string_view name,
                     const kc::ks_ptr<kd::ModelManager> &mm,
                     const kc::ks_ptr<GravityInterface> gravity_interface,
                     const kc::ks_ptr<kd::SubTree> &st)
        : KModel<Gravity>(name, mm)
        , _st(st)
        , _gravity_interface(gravity_interface){};

    kc::ks_ptr<Gravity> Gravity::create(std::string_view name,
                                        const kc::ks_ptr<kd::ModelManager> &mm,
                                        const kc::ks_ptr<GravityInterface> gravity_interface,
                                        const kc::ks_ptr<kd::SubTree> &st) {
        kc::ks_ptr<Gravity> ug = std::allocate_shared<Gravity>(
            kc::Allocator<Gravity>{}, name, mm, gravity_interface, st);
        mm->registerModel(ug);
        return ug;
    }

    void Gravity::preDeriv(const km::Ktime &t, const km::Vec &) {
        // Compute the gravity
        _gravity_interface->computeGravity(t, OutputUpdateType::PRE_DERIV);

        // Accumulate the gravity. Expects the value to be in the inertial frame, since no ref_frame
        // is specified.
        _st->accumUniformGravAccel(_gravity_interface->getGravity().g);
    }

    // Destructor included for MacOS builds. Must have a key-function out-of-line to avoid dulpicate
    // symbols.
    Gravity::~Gravity(){};

    const kc::ks_ptr<GravityInterface> &Gravity::getGravityInterface() const {
        return _gravity_interface;
    }

    bool Gravity::isReady() const { return _gravity_interface->isReady(); }

    std::string Gravity::dumpString(std::string_view prefix,
                                    const Base::DumpOptions *options) const {
        return std::format(
            "{}{}    Gravity Interface:\n{}",
            KModel::dumpString(prefix, options),
            prefix,
            _gravity_interface->dumpString(std::format("{}        ", prefix), options));
    }

} // namespace Karana::Models