------------------------------------------------------------------------------
| 1922 | |
| 1923 | //------------------------------------------------------------------------------ |
| 1924 | vtkIdTypeArray** vtkPDistributedDataFilter::ExchangeIdArraysFast( |
| 1925 | vtkIdTypeArray** myArray, int deleteSendArrays, int tag) |
| 1926 | { |
| 1927 | vtkIdTypeArray** ia = nullptr; |
| 1928 | int proc; |
| 1929 | int nprocs = this->NumProcesses; |
| 1930 | int iam = this->MyId; |
| 1931 | |
| 1932 | vtkMPIController* mpiContr = vtkMPIController::SafeDownCast(this->Controller); |
| 1933 | |
| 1934 | vtkIdType* sendSize = new vtkIdType[nprocs]; |
| 1935 | vtkIdType* recvSize = new vtkIdType[nprocs]; |
| 1936 | |
| 1937 | for (proc = 0; proc < nprocs; proc++) |
| 1938 | { |
| 1939 | recvSize[proc] = sendSize[proc] = 0; |
| 1940 | |
| 1941 | if (proc == iam) |
| 1942 | { |
| 1943 | continue; |
| 1944 | } |
| 1945 | |
| 1946 | if (myArray[proc]) |
| 1947 | { |
| 1948 | sendSize[proc] = myArray[proc]->GetNumberOfTuples(); |
| 1949 | } |
| 1950 | } |
| 1951 | |
| 1952 | // Exchange sizes of arrays to send and receive |
| 1953 | |
| 1954 | vtkMPICommunicator::Request* reqBuf = new vtkMPICommunicator::Request[nprocs]; |
| 1955 | |
| 1956 | for (proc = 0; proc < nprocs; proc++) |
| 1957 | { |
| 1958 | if (proc == iam) |
| 1959 | { |
| 1960 | continue; |
| 1961 | } |
| 1962 | mpiContr->NoBlockReceive(recvSize + proc, 1, proc, tag, reqBuf[proc]); |
| 1963 | } |
| 1964 | |
| 1965 | mpiContr->Barrier(); |
| 1966 | |
| 1967 | for (proc = 0; proc < nprocs; proc++) |
| 1968 | { |
| 1969 | if (proc == iam) |
| 1970 | { |
| 1971 | continue; |
| 1972 | } |
| 1973 | mpiContr->Send(sendSize + proc, 1, proc, tag); |
| 1974 | } |
| 1975 | |
| 1976 | for (proc = 0; proc < nprocs; proc++) |
| 1977 | { |
| 1978 | if (proc == iam) |
| 1979 | { |
| 1980 | continue; |
| 1981 | } |
no test coverage detected