SparseBlockStructure3D createRegularDistribution3D ( plint nx, plint ny, plint nz, plint numBlocksX, plint numBlocksY, plint numBlocksZ ) { return createRegularDistribution3D ( Box3D(0, nx-1, 0, ny-1, 0, nz-1), numBlocksX, numBlocksY, numBlocksZ); }
SparseBlockStructure3D createRegularDistribution3D ( Box3D const& domain, plint numProc) { std::vector<plint> repartition = algorithm::evenRepartition(numProc, 3); std::vector<plint> newRepartition(3); if(domain.getNx()>domain.getNy()) { // nx>ny if(domain.getNx()>domain.getNz()) { // nx>nz newRepartition[0] = repartition[0]; if (domain.getNy()>domain.getNz()) { // ny>nz newRepartition[1] = repartition[1]; newRepartition[2] = repartition[2]; } else { // nz>ny newRepartition[1] = repartition[2]; newRepartition[2] = repartition[1]; } } else { // nz>nx newRepartition[2] = repartition[0]; newRepartition[1] = repartition[2]; newRepartition[0] = repartition[1]; } } else { // ny>nx if (domain.getNy()>domain.getNz()) { // ny>nz newRepartition[1] = repartition[0]; if (domain.getNx()>domain.getNz()) { // nx>nz newRepartition[0] = repartition[1]; newRepartition[2] = repartition[2]; } else { // nz>nx newRepartition[0] = repartition[2]; newRepartition[2] = repartition[1]; } } else { // nz>ny newRepartition[2] = repartition[0]; newRepartition[1] = repartition[1]; newRepartition[0] = repartition[2]; } } return createRegularDistribution3D ( domain, newRepartition[0], newRepartition[1], newRepartition[2] ); }
SparseBlockStructure3D createRegularDistribution3D ( plint nx, plint ny, plint nz, int numProc) { return createRegularDistribution3D ( Box3D(0, nx-1, 0, ny-1, 0, nz-1), numProc ); }