Пример #1
0
// -----------------------------------------------------------------------------
//
// -----------------------------------------------------------------------------
void InitializeData::readFilterParameters(AbstractFilterParametersReader* reader, int index)
{
  reader->openFilterGroup(this, index);
  setCellAttributeMatrixPaths( reader->readDataArrayPathVector("CellAttributeMatrixPaths", getCellAttributeMatrixPaths() ) );
  setXMin( reader->readValue("XMin", getXMin()) );
  setYMin( reader->readValue("YMin", getYMin()) );
  setZMin( reader->readValue("ZMin", getZMin()) );
  setXMax( reader->readValue("XMax", getXMax()) );
  setYMax( reader->readValue("YMax", getYMax()) );
  setZMax( reader->readValue("ZMax", getZMax()) );
  setInitType(reader->readValue("InitType", getInitType()));
  setInitValue(reader->readValue("InitValue", getInitValue()));
  setInitRange(reader->readPairOfDoubles("InitRange", getInitRange()));
  reader->closeFilterGroup();
}
Пример #2
0
void startMethod() {

//        Старт с заданным начальным распределением (см далее) и количеством
//        потоков K
//        Начальное распределение может быть задано в двух вариантах (нужно
//        реализовать оба):
//        а)файл в формате CSV (https://ru.wikipedia.org/wiki/CSV)
//        б)задаются лишь размеры NxM, поле генерируется случайным образом
    int choice = getInitType();
    
    if (choice == 1) {
        
        if (getCSVTable() == 1) {
            getTable();
        }
        
        cout << "Here's your initial table:" << endl;
        drawTable(init_table);        
        
    } else if (choice == 2) {
        
        getTable();
        cerr << "Here's your initial table:" << endl;
        drawTable(init_table);        
    } else {
        cerr << "Wrong choice while starting..." << endl;
    }
        
    int count = world_size - 1;
    int integral = N / count;
    int last = N / count + N % count;
//    cout << "integral: " << integral << endl;
//    cout << "last: " << last << endl;
    
    if (N < count) { 
        cerr << "Too many processes:)" << endl;
        exit(0);
    }
    
    
    MPI_Bcast(&M, 1, MPI_INT, MPI_ROOT, intercomm);
    
    //processes 1 .. count - 2
    int work_N;
    for (int i = 1; i < count - 1; ++i) {
        work_N = integral + 2;
        MPI_Send(&work_N, 1, MPI_INT, i, data_tag, intercomm);
        MPI_Send(init_table[(i - 1) * integral], work_N * M, MPI_INT, i, data_tag, intercomm);
    }

    //process 0
    work_N = integral + 1;
    MPI_Send(&work_N, 1, MPI_INT, 0, data_tag, intercomm);
    MPI_Send(init_table[0], work_N * M, MPI_INT, 0, data_tag, intercomm);
    
    //process count - 1
    work_N = last + 1;
    MPI_Send(&work_N, 1, MPI_INT, count - 1, data_tag, intercomm);
    MPI_Send(init_table[N - last - 1], work_N * M, MPI_INT, count - 1, data_tag, intercomm);
    
}