Ejemplo n.º 1
0
static int update_frac(void *self, double f) {
  if (f > 0) {
    double dt;

    get_time_step(self, &dt);

    time_step = f * dt;

    update(self);

    time_step = dt;
  }

  return BMI_SUCCESS;
}
Ejemplo n.º 2
0
void particle_loop(int fd, int num_particles) {
    struct particle *particles;
    int i;
    particles = malloc(sizeof(struct particle) * num_particles);

    for (i=0; i<num_particles; i++)
	particle_init(&particles[i]);

    while (1) {
	float dt = get_time_step();
	for (i=0; i<num_particles; i++)
	    particle_update(&particles[i], dt);
	rwand_update(fd, particles, num_particles, 40);
    }

    free(particles);
}
Ejemplo n.º 3
0
static int update_until(void *self, double t) {
  {
    double dt;
    double now;

    get_time_step(self, &dt);
    get_current_time(self, &now);

    {
      int n;
      const double n_steps = (t - now) / dt;
      const int n_full_steps = (int)n_steps;
      for (n = 0; n < n_full_steps; n++) {
        update(self);
      }

      update_frac(self, n_steps - n_full_steps);
    }
  }

  return BMI_SUCCESS;
}