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