/home/kcamus/qaas_runs/169-443-9681/intel/AMG/build/AMG/AMG/parcsr_ls/par_multi_interp.c: 1737 - 1881
--------------------------------------------------------------------------------

1737: #pragma omp parallel private(thread_start,thread_stop,my_thread_num,num_threads,k,k1,i,i1,j,j1,sum_C,sum_N,j_start,j_end,cnt,tmp_marker,tmp_marker_offd,cnt_offd,diagonal,alfa,tmp_array,tmp_array_offd)
[...]
1747:              if (n_fine) 
1748:              {    tmp_marker = hypre_CTAlloc(HYPRE_Int,n_fine); }
1749:              tmp_marker_offd = NULL;
1750:              if (num_cols_offd) 
1751:              {    tmp_marker_offd = hypre_CTAlloc(HYPRE_Int,num_cols_offd); }
1752:              tmp_array = NULL;
1753:              if (n_coarse) 
1754:              {    tmp_array = hypre_CTAlloc(HYPRE_Int,n_coarse); }
[...]
1760:              for (i=0; i < n_fine; i++)
1761:              {    tmp_marker[i] = -1; }
1762:              for (i=0; i < num_cols_offd; i++)
1763:              {    tmp_marker_offd[i] = -1; }
1764: 
1765:              /* Compute this thread's range of pass_length */
1766:              my_thread_num = hypre_GetThreadNum();
1767:              num_threads = hypre_NumActiveThreads();
1768:              thread_start = pass_pointer[pass] + (pass_length/num_threads)*my_thread_num;
1769:              if (my_thread_num == num_threads-1)
1770:              {  thread_stop = pass_pointer[pass] + pass_length; }
1771:              else
1772:              {  thread_stop = pass_pointer[pass] + (pass_length/num_threads)*(my_thread_num+1); }
1773: 
1774:              for (i=thread_start; i < thread_stop; i++)
1775:              {
1776:                 i1 = pass_array[i];
1777:                 sum_C = 0;
1778:                 sum_N = 0;
1779:                 j_start = P_diag_start[i1];
1780:                 j_end = j_start+P_diag_i[i1+1]-P_diag_i[i1];
1781:                 cnt = P_diag_i[i1];
1782:                 for (j=j_start; j < j_end; j++)
1783:                 {
1784:                    k1 = P_diag_pass[pass][j];
1785:                tmp_array[k1] = cnt;
1786:                P_diag_data[cnt] = 0;
1787:                P_diag_j[cnt++] = k1;
1788:                 }
1789:                 j_start = P_offd_start[i1];
1790:                 j_end = j_start+P_offd_i[i1+1]-P_offd_i[i1];
1791:                 cnt_offd = P_offd_i[i1];
1792:                 for (j=j_start; j < j_end; j++)
1793:                 {
1794:                    k1 = P_offd_pass[pass][j];
1795:                tmp_array_offd[k1] = cnt_offd;
1796:                P_offd_data[cnt_offd] = 0;
1797:                P_offd_j[cnt_offd++] = k1;
1798:                 }
1799:                 for (j=S_diag_i[i1]; j < S_diag_i[i1+1]; j++)
1800:                 {
1801:                j1 = S_diag_j[j];
1802:                if (assigned[j1] == pass-1)
1803:                   tmp_marker[j1] = i1;
1804:                 }
1805:                 for (j=S_offd_i[i1]; j < S_offd_i[i1+1]; j++)
1806:                 {
1807:                j1 = S_offd_j[j];
1808:                if (assigned_offd[j1] == pass-1)
1809:                   tmp_marker_offd[j1] = i1; 
1810:                 }
1811:                 for (j=A_diag_i[i1]+1; j < A_diag_i[i1+1]; j++)
1812:                 {
1813:                j1 = A_diag_j[j];
1814:                if (tmp_marker[j1] == i1)
1815:                {
1816:                   for (k=P_diag_i[j1]; k < P_diag_i[j1+1]; k++)
1817:                   {
1818:                  k1 = P_diag_j[k];
1819:                      alfa = A_diag_data[j]*P_diag_data[k];
1820:                      P_diag_data[tmp_array[k1]] += alfa;
1821:                      sum_C += alfa;
1822:                      sum_N += alfa;
1823:                       }
1824:                   for (k=P_offd_i[j1]; k < P_offd_i[j1+1]; k++)
1825:                   {
1826:                  k1 = P_offd_j[k];
1827:                      alfa = A_diag_data[j]*P_offd_data[k];
1828:                      P_offd_data[tmp_array_offd[k1]] += alfa;
1829:                      sum_C += alfa;
1830:                      sum_N += alfa;
1831:                       }
1832:                    }
1833:                    else
1834:                    {
1835:                       if (CF_marker[j1] != -3 && 
1836:                 (num_functions == 1 || dof_func[i1] == dof_func[j1]))
1837:                  sum_N += A_diag_data[j];
1838:                    }
1839:                 }
1840:                 for (j=A_offd_i[i1]; j < A_offd_i[i1+1]; j++)
1841:                 {
1842:                if (col_offd_S_to_A)
1843:                   j1 = map_A_to_S[A_offd_j[j]];
1844:                else
1845:                   j1 = A_offd_j[j];
1846:  
1847:                if (j1 > -1 && tmp_marker_offd[j1] == i1)
1848:                {
1849:                   j_start = Pext_start[j1];
1850:                   j_end = j_start+Pext_i[j1+1];
1851:                   for (k=j_start; k < j_end; k++)
1852:                   {
1853:                  k1 = Pext_pass[pass][k];
1854:                      alfa = A_offd_data[j]*Pext_data[k];
1855:                  if (k1 < 0) 
1856:                         P_diag_data[tmp_array[-k1-1]] += alfa;
1857:                  else
1858:                         P_offd_data[tmp_array_offd[k1]] += alfa;
1859:                      sum_C += alfa;
1860:                      sum_N += alfa;
1861:                       }
1862:                    }
1863:                    else
1864:                    {
1865:                       if (CF_marker_offd[j1] != -3 && 
1866:                 (num_functions == 1 || dof_func_offd[j1] == dof_func[i1])) 
1867:                  sum_N += A_offd_data[j];
1868:                    }
1869:                 }
1870:                 diagonal = A_diag_data[A_diag_i[i1]];
1871:                 if (sum_C*diagonal) alfa = -sum_N/(sum_C*diagonal);
1872: 
1873:                 for (j=P_diag_i[i1]; j < P_diag_i[i1+1]; j++)
1874:                P_diag_data[j] *= alfa;
1875:                 for (j=P_offd_i[i1]; j < P_offd_i[i1+1]; j++)
1876:                P_offd_data[j] *= alfa;
1877:              }
1878:              hypre_TFree(tmp_marker);
1879:              hypre_TFree(tmp_marker_offd);
1880:              hypre_TFree(tmp_array);
1881:              hypre_TFree(tmp_array_offd);
