void getAndSet_applyUpdate(OccupancyMap& m, Probability (*updateFunc)(int x, int y))
{
    for(int x = m.minX(); x < m.maxX(); x++) {
        for(int y = m.minY(); y < m.maxY(); y++) {
            m.update(x, y, updateFunc(x, y));
        }
    }
}
void ParticleBatch2D::update() {
	for (int i = 0; i < maxParticles; i++) {
		if (myParticles[i].life > 0.0f) {
			updateFunc(myParticles[i]);
			myParticles[i].life -= decayRate;
		}
	}
}
int main(int argc, char **argv){

  // Archivo para imprimir las evolucion de u
  FILE *data = fopen("Navier-Stokes_LinearConvection.dat", "w");
  
  // Numero de iteraciones en espacio y tiempo y sus respectivos dt, dx
  int n_x = atoi(argv[1]);
  int n_t = atoi(argc[2]);
  FLOAT dx = 2.0/(nx-1);
  FLOAT dt = 0.001;
    
  
  // Condicion inicial
  FLOAT *x0 = malloc(n_x*sizeof(FLOAT));
  int j;
  for( j = 0; j < n_x; j++){
    x0[0] = j*dx;
  }

  // Constante c de la ecuacion diferencial de Linear convection
 
  // Vector de evolucion de la velocidad u del fluido
  FLOAT *u = malloc(n_x *sizeof(FLOAT));
  int i;
  u[i] = malloc(n_x*sizeof(FLOAT));
  for( j = 0; j < n_x; j++ ){
    u[j] = 1.0;
  }
  
  // Inicializa las condiciones iniciales en el vector u
  initCondition(u,x0,n_x);

  // Imprimir u
  for( i = 0; i < n_x-1; i++){
    fprintf(data, "%f ", (float) u[i]);
  }
  fprintf(data, "%f\n", (float) u[i]);

  // Actualiza la funcion u
  for( j= 0; j < n_t; j++){
    updateFunc(u,x0,n_x,dx,dt);
    // Imprimir la funcion u
    for( i = 0; i < n_x-1; i++){
      fprintf(data, "%f ", (float) u[i]);
    }
    fprintf(data, "%f\n", (float) u[i]);
   }
  return 0;
}
Esempio n. 4
0
void LambdaView::update(float dt)
{
	if (updateFunc) {
		updateFunc(dt);
	}
}
int main( int argc, char** argv ){
  
  printf("%f %f\n", alpha , dt);

  //---------------------------
  // Declaración de Constantes
  //---------------------------
   
  //Número de iteraciones en el tiempo
  int nt = atoi(argv[1]);
  
  // Archivo de texto de evolucion 
  FILE *in = fopen("datos.dat","w");
  
  // Contadores
  int i;
  int j;
  
  // Espacio
  FLOAT *x0 = malloc(nx*sizeof(FLOAT));

  // Funcion de onda actual
  FLOAT *Im_p = malloc(nx*sizeof(FLOAT));
  FLOAT *Re_p = malloc(nx*sizeof(FLOAT));

  //-------------------------------
  // Solucion de la ED
  //-------------------------------
  
  // Llena el vector de posicion
  for( i = 0; i < nx; i++ ){
    x0[i] = x_min + i*dx;
  }

  // Condicion inicial ( y de frontera )
  initCondition( Re_p, Im_p, x0, nx );

  // Imprime la condicion inicial
  FLOAT ro = 0;
  fprintf(in, "%f %f ", (float) x0[0], 0.0); 
  for( i = 1; i < nx-1; i += (int) (nx-1)/imprx ){
    ro = Im_p[i]*Im_p[i] + Re_p[i]*Re_p[i];
    //printf("%f\n", ro, (float) ro);
    fprintf(in, "%f %f ", (float) x0[i], (float) ro); 
  }
  fprintf(in, "%f %f\n", (float) x0[nx-1], 0.0); 
  
  // Iteracion sobre el tiempo (se tiene que doblar el numero de pasos debido a la definicion de Re e Im en enteros y semienteros de tiempo)
  for( j = 0; j < 2*nt; j++ ){
    //printf("%d\n", j);
    // Actualiza los vectores dependiendo del step de tiempo
    if( j%2 == 0 ){
      // Copia RE
      FLOAT* tempR = malloc(nx*sizeof(FLOAT));
      memcpy( tempR , Re_p, nx*sizeof(FLOAT) );
      // Calcula el siguiente paso de tiempo para Re
      updateFunc( Re_p, Im_p, x0, nx, 1.0 ); 
      // imprime ro (IM) lolol
      FLOAT ro = 0;
      if( j%impr == 0 ){
	fprintf(in, "%f %f ", (float) x0[0], 0.0); 
      }
      for( i = 1; i < nx-1; i += (int) (nx-1)/imprx ){
	ro = Im_p[i]*Im_p[i] + tempR[i]*Re_p[i];
	if( j%impr == 0 ){
	  //printf("%f\n", ro, (float) ro);
	  fprintf(in, "%f %f ", (float) x0[i], (float) ro); 
	}   
      }
      if( j%impr == 0 ){
	fprintf(in, "%f %f\n", (float) x0[nx-1], 0.0); 
      }
      // Liberar memoria de la copia
      free( tempR );
    }
    else{
      // Copia IM
      FLOAT* tempI = malloc(nx*sizeof(FLOAT));
      memcpy( tempI , Im_p, nx*sizeof(FLOAT) );
      // Calcula el siguiente paso de tiempo para Im
      updateFunc( Im_p, Re_p, x0, nx, -1.0 ); 
      // imprime ro (RE) lolol
      FLOAT ro = 0;
      if( j%impr == 0 ){
	fprintf(in, "%f %f ", (float) x0[0], 0.0); 
      }
      for( i = 1; i < nx-1;  i += (int) (nx-1)/imprx ){
	ro = Re_p[i]*Re_p[i] + tempI[i]*Im_p[i];
	if( j%impr == 0 ){
	  fprintf(in, "%f %f ", (float) x0[i], (float) ro); 
	}
      }   
      if( j%impr == 0 ){
	fprintf(in, "%f %f\n", (float) x0[nx-1], 0.0); 
      }
      // Liberar memoria de la copia
      free( tempI );
    }
  }
  return 0;
}
Esempio n. 6
0
int main(int argc, char **argv){

  // Archivo para imprimir las evolucion de u
  FILE *data = fopen("Wave_Eq.dat", "w");
  
  // Numero de iteraciones en espacio y tiempo y sus respectivos dt, dx
  int n_x = atoi(argv[1]);
  int n_t = atoi(argv[2]);
  //printf("%d \n", n_x );
  FLOAT dx = L/(n_x-1);
  //printf("%f %d \n", L, n_x );
  FLOAT dt = 2.0;
  // Parámetro de estabilidad (debe ser menor que 1)
  FLOAT r = c*(dt/dx);
  printf("%f \n", r);
  
  // Vector de posicion
  FLOAT *x0 = malloc(n_x*sizeof(FLOAT));
  int j;
  for( j = 0; j < n_x; j++){
    x0[j] = j*dx;
  }

  // Vector actual de la funcion de onda
  FLOAT *present_u = malloc(n_x *sizeof(FLOAT));
  int i;
  present_u = malloc(n_x*sizeof(FLOAT));
  
  // Condicion inicial
  initCondition(present_u,x0,n_x,dx);

  // Condiciones de frontera
  present_u[0] = 0;
  present_u[n_x-1] = 0;
  
  // Vector futuro de la funcion de onda
  FLOAT *future_u = malloc(n_x *sizeof(FLOAT));
  future_u = malloc(n_x*sizeof(FLOAT));

  // Condiciones de frontera
  future_u[0] = 0;
  future_u[n_x-1] = 0;

  // Calcula el primer valor de future_u
  for( i = 1; i < n_x-1; i++){
    future_u[i] = present_u[i] + (r*r/2.0) * (present_u[i+1] - 2.0 * present_u[i] + present_u[i-1]);
  }

  // Imprime la condicion inicial ( present_ u )
  for( i = 0; i < n_x-1; i++){
    fprintf(data, "%f ", (float) present_u[i]);
  }
  fprintf(data, "%f\n", (float) present_u[i]);

  // Calcula el siguiente valor de present_u y future_u
  for( j= 0; j < n_t; j++){
    updateFunc(present_u,future_u,x0,n_x,r);
    // Imprimir la funcion u
    for( i = 0; i < n_x-1; i++){
      fprintf(data, "%f ", (float) present_u[i]);
    }
    fprintf(data, "%f\n", (float) present_u[i]);
   }
  return 0;
}
Esempio n. 7
0
void Object::update(float dt) {
    if (updateFunc) {
        updateFunc(dt);
    }
}
Esempio n. 8
0
void FunctionScript::Update(float deltaTime)
{
	updateFunc(*gameObject, deltaTime);
}