Program Listing for File SubhingeSpringDamper.cc

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::StatePropagator>&sp,
constkc::ks_ptr<kd::PhysicalSubhinge>&sh)
:KModel<SubhingeSpringDamper,SubhingeSpringDamperParams>(name,sp)
,_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::StatePropagator>&sp,
constkc::ks_ptr<kd::PhysicalSubhinge>&sh){
kc::ks_ptr<SubhingeSpringDamper>ssd=std::allocate_shared<SubhingeSpringDamper>(
kc::Allocator<SubhingeSpringDamper>{},name,sp,sh);
sp->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::uninitialize(setpoint);
k=km::uninitializedNaN;
d=km::uninitializedNaN;
}

boolSubhingeSpringDamperParams::isFinalized()const{
boolflag=true;
if(km::isUninitializedNaN(k)){
kc::warn("Parameterkisuninitialized.");
flag=false;
}
if(km::isUninitializedNaN(d)){
kc::warn("Parameterdisuninitialized.");
flag=false;
}
if(notkm::isInitialized(setpoint)){
kc::warn("Parametersetpointisuninitialized.");
flag=false;
}
returnflag;
}

boolSubhingeSpringDamper::isFinalized()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