Program Listing for File DataLogger.cc

Program Listing for File DataLogger.cc#

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

#include"Karana/GeneralKModels/DataLogger.h"
#include"Karana/KCore/Allocator.h"


namespaceKarana::Models{

namespaceku=Karana::KUtils;
namespacekm=Karana::Math;

DataLogger::DataLogger(std::string_viewname,
constkc::ks_ptr<kd::ModelManager>&mm,
constkc::ks_ptr<ku::H5Writer>&h5_writer)
:KModel<DataLogger,DataLoggerParams>(name,mm)
,_h5_writer(h5_writer){
params=std::allocate_shared<DataLoggerParams>(kc::Allocator<DataLoggerParams>{},
std::format("{}_params",name));
};

kc::ks_ptr<DataLogger>DataLogger::create(std::string_viewname,
constkc::ks_ptr<kd::ModelManager>&mm,
constkc::ks_ptr<ku::H5Writer>&h5_writer){
kc::ks_ptr<DataLogger>dl=
std::allocate_shared<DataLogger>(kc::Allocator<DataLogger>{},name,mm,h5_writer);
mm->registerModel(dl);
returndl;
}

voidDataLogger::postModelStep(constkm::Ktime&,constkm::Vec&){_h5_writer->log();}

DataLoggerParams::DataLoggerParams(std::string_viewname)
:KModelParams(name){}

boolDataLoggerParams::isReady()const{returntrue;}

kc::ks_ptr<ku::H5Writer>DataLogger::getH5Writer(){return_h5_writer;}

voidDataLogger::_registerModel(){
//Calltheparent.Thiswilldothenormalregistration.
KModel<DataLogger, DataLoggerParams>::_registerModel();

kc::ks_ptr<Base>dark=shared_from_this();
autot=kc::static_pointer_cast<DataLogger>(dark);

//Alsoregisteratimedeventnowifweshouldlogthefirststep.
kc::ks_ptr<kd::StatePropagator>sp=
kc::dynamic_pointer_cast<kd::StatePropagator>(model_manager);
if(spandparams->log_first_step){
autote=kd::TimedEvent::create(
std::format("{}_first_step",name()),
model_manager->getTime(),
[t](constkm::Ktime&){t->_h5_writer->log();},
true);
sp->registerTimedEvent(te);
}
}

voidDataLogger::_unregisterModel(){
//Calltheparent.Thiswilldothenormalunregistration.
KModel<DataLogger, DataLoggerParams>::_unregisterModel();

//Tryandunregisterthiseventregardlessoftheparametersetting.
//It'spossibletheparameterhasbeenchangedsincethelastregistration.
kc::ks_ptr<kd::StatePropagator>sp=
kc::dynamic_pointer_cast<kd::StatePropagator>(model_manager);
if(sp){
sp->unregisterTimedEvent(std::format("{}_first_step",name()),true,true);
}
}

//DestructorincludedforMacOSbuilds.Musthaveakey-functionout-of-linetoavoiddulpicate
//symbols.
DataLogger::~DataLogger(){};

}//namespaceKarana::Models