Ejemplo n.º 1
0
void
ConnectAdapter::initMUSIC(int argc, char** argv)
{
  MUSIC::Setup* setup = new MUSIC::Setup (argc, argv);

  setup->config("stoptime", &stoptime);
  setup->config("music_timestep", &timestep);
  setup->config("weights_filename", &weights_filename);

  port_in = setup->publishContInput("in");
  port_out = setup->publishContOutput("out");

  comm = setup->communicator ();
  int rank = comm.Get_rank ();       
  int nProcesses = comm.Get_size (); 
  if (nProcesses > 1)
    {
      std::cout << "ERROR: num processes (np) not equal 1" << std::endl;
      comm.Abort(1);
    }

  // get dimensions of data
  if (port_in->hasWidth() && port_out->hasWidth())
    {
      size_data_in = port_in->width();
      size_data_out = port_out->width();
    }
  else
    {
      std::cout << "ERROR: Port-width not defined" << std::endl;
      comm.Abort(1);
    }

  data_in = new double[size_data_in];
  for (int i = 0; i < size_data_in; ++i)
    {
      data_in[i] = 0.;
    }
  vec_data_in = gsl_vector_view_array(data_in, size_data_in);

  data_out = new double[size_data_out];
  for (int i = 0; i < size_data_out; ++i)
    {
      data_out[i] = 0.;
    }
  vec_data_out = gsl_vector_view_array(data_out, size_data_out);

  weights = new double[size_data_out * size_data_in];
  for (int i = 0; i < size_data_out * size_data_in; ++i)
    {
      weights[i] = 0.; 
    }
  mat_weights = gsl_matrix_view_array(weights, size_data_out, size_data_in);

  // Declare where in memory to put command_data
  MUSIC::ArrayData dmap_in(data_in,
			   MPI::DOUBLE,
			   0,
			   size_data_in);
  port_in->map (&dmap_in, 0., 1, false);
    
  MUSIC::ArrayData dmap_out(data_out,
			    MPI::DOUBLE,
			    0,
			    size_data_out);
  port_out ->map (&dmap_out, 1);

  MPI::COMM_WORLD.Barrier();
  runtime = new MUSIC::Runtime (setup, timestep);
}