Template:CMI Example CMI run C
From CSDMS
struct edu_csdms_models_Sedflux3D__data *this =
edu_csdms_models_Sedflux3D__get_data (self);
edu_csdms_tools_Verbose_info (this->log,
edu_csdms_models_Sedflux3D_CMI_get_status (self, _ex), _ex);
if (this->status == CMI_STATUS_UPDATING)
return TRUE;
else
this->status = CMI_STATUS_UPDATING;
if (time_interval<0)
time_interval = BMI_Get_end_time (this->state);
edu_csdms_tools_Verbose_info (this->log, "Updating", _ex);
{
double print_time = edu_csdms_tools_PrintQueue_next_print_time (
this->print_queue, _ex);
while (print_time>0 && print_time<time_interval)
{
this->status = CMI_STATUS_UPDATED;
edu_csdms_tools_Verbose_info (this->log, "Running until next print time.", _ex);
edu_csdms_models_Sedflux3D_CMI_run (self, print_time, _ex);
edu_csdms_tools_PrintQueue_print_all (this->print_queue, print_time, _ex);
print_time = edu_csdms_tools_PrintQueue_next_print_time (
this->print_queue, _ex);
}
}
{
double now = BMI_Get_current_time (this->state);
const double port_queue_dt = CMI_PORT_QUEUE_DT;
double t = now + port_queue_dt;
for (; t<time_interval; t+=port_queue_dt)
{
edu_csdms_tools_Verbose_info (this->log, "Updating ports.", _ex);
edu_csdms_tools_CMIPortQueue_run_ports (this->ports, now, _ex);
#if CMI_TURN_OFF_MAPPING
edu_csdms_tools_Verbose_warning (this->log, "Forgetting mappers.", _ex);
#else
edu_csdms_tools_Verbose_info (this->log, "Running mappers.", _ex);
edu_csdms_tools_CMIPortQueue_run_mappers (this->ports, _ex);
#endif
edu_csdms_tools_Verbose_info (this->log, "Updating myself.", _ex);
BMI_Update_until (this->state, t);
now = BMI_Get_current_time (this->state);
}
if (t>time_interval)
{
edu_csdms_tools_Verbose_info (this->log, "Updating ports.", _ex);
edu_csdms_tools_CMIPortQueue_run_ports (this->ports, now, _ex);
#if CMI_TURN_OFF_MAPPING
edu_csdms_tools_Verbose_warning (this->log, "Forgetting mappers.", _ex);
#else
edu_csdms_tools_Verbose_info (this->log, "Running mappers.", _ex);
edu_csdms_tools_CMIPortQueue_run_mappers (this->ports, _ex);
#endif
BMI_Update_until (this->state, time_interval);
}
}
edu_csdms_tools_Verbose_info (this->log, "Updated.", _ex);
this->status = CMI_STATUS_UPDATED;
return TRUE;