void run_test(const Opm::parameter::ParameterGroup& param) { int N=100; int procs, rank; MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &procs); int n = N/procs; // number of unknowns per process int bigger = N%procs; // number of process with n+1 unknows int start, end, istart, iend; // Compute owner region if(rank<bigger) { start = rank*(n+1); end = start+(n+1); }else{ start = bigger*(n+1) + (rank-bigger) * n; end = start+n; } // Compute owner region if(rank<bigger) { istart = rank*(n+1); iend = start+(n+1); }else{ istart = bigger*(n+1) + (rank-bigger) * n; iend = start+n; } // Compute overlap region if(istart>0) start = istart - 1; else start = istart; if(iend<N) end = iend + 1; else end = iend; Opm::ParallelISTLInformation comm(MPI_COMM_WORLD); auto mat = create1DLaplacian(*comm.indexSet(), N, start, end, istart, iend); std::vector<double> x(end-start), b(end-start); createRandomVectors(comm, end-start, x, b, *mat); std::vector<double> exact(x); std::fill(x.begin(), x.end(), 0.0); Opm::LinearSolverFactory ls(param); boost::any anyComm(comm); ls.solve(b.size(), mat->data.size(), &(mat->rowStart[0]), &(mat->colIndex[0]), &(mat->data[0]), &(b[0]), &(x[0]), anyComm); }
void run_test(const Opm::parameter::ParameterGroup& param) { int N=100; int start, end, istart, iend; std::tie(start,istart,iend,end) = computeRegions(N); Opm::ParallelISTLInformation comm(MPI_COMM_WORLD); auto mat = create1DLaplacian(*comm.indexSet(), N, start, end, istart, iend); std::vector<double> x(end-start), b(end-start); createRandomVectors(comm, end-start, x, b, *mat); std::vector<double> exact(x); std::fill(x.begin(), x.end(), 0.0); Opm::LinearSolverFactory ls(param); boost::any anyComm(comm); ls.solve(b.size(), mat->data.size(), &(mat->rowStart[0]), &(mat->colIndex[0]), &(mat->data[0]), &(b[0]), &(x[0]), anyComm); }