Template:CMI Example CMI run C: Difference between revisions

From CSDMS
Automated import of articles *** existing text overwritten ***
Automated import of articles *** existing text overwritten ***
 
Line 3: Line 3:
             edu_csdms_models_Sedflux3D__get_data (self);
             edu_csdms_models_Sedflux3D__get_data (self);


     fprintf (stderr, "%s: Status is %s.
     edu_csdms_tools_Verbose_info (this->log,
", CMI_COMPONENT_NAME,
         edu_csdms_models_Sedflux3D_CMI_get_status (self, _ex), _ex);
         edu_csdms_models_Sedflux3D_CMI_get_status (self, _ex));


     if (this->status == CMI_STATUS_UPDATING)
     if (this->status == CMI_STATUS_UPDATING)
Line 15: Line 14:
       time_interval = BMI_Get_end_time (this->state);
       time_interval = BMI_Get_end_time (this->state);


     //if (time_interval>BMI_Get_end_time (this->state))
     edu_csdms_tools_Verbose_info (this->log, "Updating", _ex);
    //  time_interval = BMI_Get_end_time (this->state);
 
    fprintf (stderr, "%s: Updating until %f.
", CMI_COMPONENT_NAME, time_interval);
     {
     {
       double print_time = edu_csdms_tools_PrintQueue_next_print_time (
       double print_time = edu_csdms_tools_PrintQueue_next_print_time (
           this->print_queue, _ex);
           this->print_queue, _ex);
      //double stop_time = time_interval;
      fprintf (stderr, "%s: Next print time is %f.
", CMI_COMPONENT_NAME, print_time);
       while (print_time>0 && print_time<time_interval)
       while (print_time>0 && print_time<time_interval)
       {
       {
         this->status = CMI_STATUS_UPDATED;
         this->status = CMI_STATUS_UPDATED;
         fprintf (stderr, "%s: Running until print time %f.
 
", CMI_COMPONENT_NAME, print_time);
         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_models_Sedflux3D_CMI_run (self, print_time, _ex);
         edu_csdms_tools_PrintQueue_print_all (this->print_queue, print_time, _ex);
         edu_csdms_tools_PrintQueue_print_all (this->print_queue, print_time, _ex);
         print_time = edu_csdms_tools_PrintQueue_next_print_time (
         print_time = edu_csdms_tools_PrintQueue_next_print_time (
             this->print_queue, _ex);
             this->print_queue, _ex);
        fprintf (stderr, "%s: Print time is now %f.
", CMI_COMPONENT_NAME, print_time);
       }
       }
     }
     }
Line 45: Line 36:
       double t = now + port_queue_dt;
       double t = now + port_queue_dt;


      fprintf (stderr, "%s: Updating ports until %f.
", CMI_COMPONENT_NAME, time_interval);
       for (; t<time_interval; t+=port_queue_dt)
       for (; t<time_interval; t+=port_queue_dt)
       {
       {
         //edu_csdms_tools_PrintQueue_print_all (this->print_queue,
         edu_csdms_tools_Verbose_info (this->log, "Updating ports.", _ex);
         //    BMI_Get_current_time (this->state), _ex);
         edu_csdms_tools_CMIPortQueue_run_ports (this->ports, now, _ex);


        //fprintf (stderr, "%s: Forgetting ports for now.
", CMI_COMPONENT_NAME);
        fprintf (stderr, "%s: Updating ports until %f.
", CMI_COMPONENT_NAME, now);
        edu_csdms_tools_CMIPortQueue_run_ports (this->ports, now, _ex);
#if CMI_TURN_OFF_MAPPING
#if CMI_TURN_OFF_MAPPING
         fprintf (stderr, "%s: Forgetting mappers.
         edu_csdms_tools_Verbose_warning (this->log, "Forgetting mappers.", _ex);
", CMI_COMPONENT_NAME);
#else
#else
         fprintf (stderr, "%s: Run mappers.
         edu_csdms_tools_Verbose_info (this->log, "Running mappers.", _ex);
", CMI_COMPONENT_NAME);
         edu_csdms_tools_CMIPortQueue_run_mappers (this->ports, _ex);
         edu_csdms_tools_CMIPortQueue_run_mappers (this->ports, _ex);
#endif
#endif


         fprintf (stderr, "%s: Updating myself until %f.
         edu_csdms_tools_Verbose_info (this->log, "Updating myself.", _ex);
", CMI_COMPONENT_NAME, t);
         BMI_Update_until (this->state, t);
         BMI_Update_until (this->state, t);
         now = BMI_Get_current_time (this->state);
         now = BMI_Get_current_time (this->state);
Line 74: Line 55:
       if (t>time_interval)
       if (t>time_interval)
       {
       {
         //edu_csdms_tools_PrintQueue_print_all (this->print_queue,
         edu_csdms_tools_Verbose_info (this->log, "Updating ports.", _ex);
        //    BMI_Get_current_time (this->state), _ex);
 
        fprintf (stderr, "%s: Updating ports until %f.
", CMI_COMPONENT_NAME, now);
         edu_csdms_tools_CMIPortQueue_run_ports (this->ports, now, _ex);
         edu_csdms_tools_CMIPortQueue_run_ports (this->ports, now, _ex);


#if CMI_TURN_OFF_MAPPING
#if CMI_TURN_OFF_MAPPING
         fprintf (stderr, "%s: Forgetting mappers.
         edu_csdms_tools_Verbose_warning (this->log, "Forgetting mappers.", _ex);
", CMI_COMPONENT_NAME);
#else
#else
         fprintf (stderr, "%s: Run mappers.
         edu_csdms_tools_Verbose_info (this->log, "Running mappers.", _ex);
", CMI_COMPONENT_NAME);
         edu_csdms_tools_CMIPortQueue_run_mappers (this->ports, _ex);
         edu_csdms_tools_CMIPortQueue_run_mappers (this->ports, _ex);
#endif
#endif
Line 94: Line 69:
     }
     }


     fprintf (stderr, "%s: Updated.
     edu_csdms_tools_Verbose_info (this->log, "Updated.", _ex);
", CMI_COMPONENT_NAME);
     this->status = CMI_STATUS_UPDATED;
     this->status = CMI_STATUS_UPDATED;


     return TRUE;
     return TRUE;
</syntaxhighlight>
</syntaxhighlight>

Latest revision as of 11:53, 6 February 2012

    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;