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

1747:              if (n_fine) 
[...]
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;
