Program Listing for File SubhingeSpringDamper.cc#
↰ Return to documentation for file (doxygen_docs/GeneralKModels/SubhingeSpringDamper.cc)
#include"Karana/GeneralKModels/SubhingeSpringDamper.h"
#include"Karana/KCore/Allocator.h"
namespaceKarana::Models{
namespacekd=Karana::Dynamics;
SubhingeSpringDamper::SubhingeSpringDamper(std::string_viewname,
constkc::ks_ptr<kd::ModelManager>&mm,
constkc::ks_ptr<kd::PhysicalSubhinge>&sh)
:KModel<SubhingeSpringDamper,SubhingeSpringDamperParams>(name,mm)
,_sh(sh){
params=std::allocate_shared<SubhingeSpringDamperParams>(
kc::Allocator<SubhingeSpringDamperParams>{},std::format("{}_params",name));
};
kc::ks_ptr<SubhingeSpringDamper>
SubhingeSpringDamper::create(std::string_viewname,
constkc::ks_ptr<kd::ModelManager>&mm,
constkc::ks_ptr<kd::PhysicalSubhinge>&sh){
kc::ks_ptr<SubhingeSpringDamper>ssd=std::allocate_shared<SubhingeSpringDamper>(
kc::Allocator<SubhingeSpringDamper>{},name,mm,sh);
mm->registerModel(ssd);
returnssd;
}
voidSubhingeSpringDamper::preDeriv(constkm::Ktime&,constkm::Vec&){
_sh->setT(params->k*(params->setpoint-_sh->getQ())-params->d*_sh->getU());
}
SubhingeSpringDamperParams::SubhingeSpringDamperParams(std::string_viewname)
:KModelParams(name){
setpoint.resize(1);
km::makeNotReady(setpoint);
k=km::notReadyNaN;
d=km::notReadyNaN;
}
boolSubhingeSpringDamperParams::isReady()const{
boolflag=true;
if(km::isNotReadyNaN(k)){
kc::warn("Parameterkisnotready.");
flag=false;
}
if(km::isNotReadyNaN(d)){
kc::warn("Parameterdisnotready.");
flag=false;
}
if(notkm::isReady(setpoint)){
kc::warn("Parametersetpointisnotready.");
flag=false;
}
returnflag;
}
boolSubhingeSpringDamper::isReady()const{
boolflag=true;
if(_sh->nQ()!=size_t(params->setpoint.size())){
kc::warn("Thesubhingesize{}isnotequaltothesetpointsize{}.",
_sh->nQ(),
params->setpoint.size());
flag=false;
}
returnflag;
};
//DestructorincludedforMacOSbuilds.Musthaveakey-functionout-of-linetoavoiddulpicate
//symbols.
SubhingeSpringDamper::~SubhingeSpringDamper(){};
}//namespaceKarana::Models