void simu_controller_loop(MBSdataStruct *MBSdata)
{
    // variables declaration
    double tsim;

    UserIOStruct     *uvs;
    ControllerStruct *cvs;
    
    // variables initialization
    tsim = MBSdata->tsim;

    uvs = MBSdata->user_IO;
	cvs = uvs->cvs;

    
    // controller called every milli-second (PERIOD_CTRL)
    if (tsim >= uvs->last_t_ctrl + PERIOD_CTRL - TIME_EPSILON)
    {
        uvs->last_t_ctrl = tsim;
        
        controller_loop_interface(MBSdata);
    }

    // simulation outputs for simulink (useless for the Standalone version)
    simulink_outputs(MBSdata);

	// stopping the simulation if needed
	stop_simu(MBSdata);
}
void simu_controller_loop(MBSdataStruct *MBSdata)
{
    double tsim;

    ControllerStruct *cvs;
    UserIOStruct *uvs;

    uvs = MBSdata->user_IO;
	cvs = uvs->cvs;

    tsim = MBSdata->tsim;
    
    // controller
    if (tsim >= uvs->last_t_ctrl + PERIOD_CTRL - TIME_EPSILON)
    {
        uvs->last_t_ctrl = tsim;
        
        controller_inputs(MBSdata);
        controller_loop(cvs);
        controller_outputs(MBSdata);
    }

    // simulation outputs
    simu_outputs(MBSdata);
    
    // objective function
    fitness(MBSdata);

	// stopping the simulation if needed
	stop_simu(MBSdata);
}