/beegfs/hackathon/users/eoseret/qaas_runs_test/178-668-9639/intel/AMG/build/AMG/AMG/parcsr_mv/par_csr_matop.c: 3454 - 3640
--------------------------------------------------------------------------------

3454: #pragma omp parallel 
[...]
3462:         HYPRE_Int num_threads = hypre_NumActiveThreads();
3463: 
3464:         size = num_cols_diag_A/num_threads;
3465:         rest = num_cols_diag_A - size*num_threads;
3466:         ii = hypre_GetThreadNum();
3467:         if (ii < rest)
3468:         {
3469:            ns = ii*size+ii;
3470:            ne = (ii+1)*size+ii+1;
3471:         }
3472:         else
3473:         {
3474:            ns = ii*size+rest;
3475:            ne = (ii+1)*size+rest;
3476:         }
3477: 
3478:         B_marker = hypre_CTAlloc(HYPRE_Int, num_cols_diag_B);
3479:         B_marker_offd = hypre_CTAlloc(HYPRE_Int, num_cols_offd_C);
3480: 
3481:         for (ik = 0; ik < num_cols_diag_B; ik++)
3482:            B_marker[ik] = -1;
3483: 
3484:         for (ik = 0; ik < num_cols_offd_C; ik++)
3485:            B_marker_offd[ik] = -1;
3486: 
3487:         nnz_d = 0;
3488:         nnz_o = 0;
3489:         for (ik = ns; ik < ne; ik++)
3490:         {
3491:           for (jk = C_tmp_diag_i[ik]; jk < C_tmp_diag_i[ik+1]; jk++)
3492:           {
3493:              jcol = C_tmp_diag_j[jk];
3494:              B_marker[jcol] = ik;
3495: 	     nnz_d++;
3496:           }
3497:           for (jk = C_tmp_offd_i[ik]; jk < C_tmp_offd_i[ik+1]; jk++)
3498:           {
3499:              jcol = C_tmp_offd_j[jk];
3500:              B_marker_offd[jcol] = ik;
3501: 	     nnz_o++;
3502:           }
3503:           for (jk = 0; jk < num_sends_A; jk++)
3504:             for (j1 = send_map_starts_A[jk]; j1 < send_map_starts_A[jk+1]; j1++)
3505:              if (send_map_elmts_A[j1] == ik)
3506:              {
3507:                 for (j2 = C_ext_diag_i[j1]; j2 < C_ext_diag_i[j1+1]; j2++)
3508:                 {
3509:                     jcol = C_ext_diag_j[j2];
3510:  	            if (B_marker[jcol] < ik)
3511:                     {
3512:                        B_marker[jcol] = ik;
3513: 	               nnz_d++;
3514:                     }
3515:                 }
3516:                 for (j2 = C_ext_offd_i[j1]; j2 < C_ext_offd_i[j1+1]; j2++)
3517:                 {
3518:                     jcol = C_ext_offd_j[j2];
3519:  	            if (B_marker_offd[jcol] < ik)
3520:                     {
3521:                        B_marker_offd[jcol] = ik;
3522: 	               nnz_o++;
3523:                     }
3524:                 }
3525:                 break;
3526:              }
3527:                C_diag_array[ii] = nnz_d;
3528:                C_offd_array[ii] = nnz_o;
3529:         }
3530: #ifdef HYPRE_USING_OPENMP
3531: #pragma omp barrier
3532: #endif
3533:        if (ii == 0)
3534:        {
3535:           nnz_d = 0;
3536:           nnz_o = 0;
3537:           for (ik = 0; ik < num_threads-1; ik++)
3538:           {
3539:              C_diag_array[ik+1] += C_diag_array[ik];
3540:              C_offd_array[ik+1] += C_offd_array[ik];
3541:           }
3542:           nnz_d = C_diag_array[num_threads-1];
3543:           nnz_o = C_offd_array[num_threads-1];
3544:           C_diag_i[num_cols_diag_A] = nnz_d;
3545:           C_offd_i[num_cols_diag_A] = nnz_o;
3546: 
3547:           C_diag = hypre_CSRMatrixCreate(num_cols_diag_A, num_cols_diag_A, nnz_d);
3548:           C_offd = hypre_CSRMatrixCreate(num_cols_diag_A, num_cols_offd_C, nnz_o);
3549:           hypre_CSRMatrixI(C_diag) = C_diag_i;
3550:           hypre_CSRMatrixInitialize(C_diag);
3551:           C_diag_j = hypre_CSRMatrixJ(C_diag);
3552:           C_diag_data = hypre_CSRMatrixData(C_diag);
3553:           hypre_CSRMatrixI(C_offd) = C_offd_i;
3554:           hypre_CSRMatrixInitialize(C_offd);
3555:           C_offd_j = hypre_CSRMatrixJ(C_offd);
3556:           C_offd_data = hypre_CSRMatrixData(C_offd); 
3557:        }
3558: #ifdef HYPRE_USING_OPENMP
3559: #pragma omp barrier
[...]
3568:      for (ik = 0; ik < num_cols_diag_B; ik++)
3569:         B_marker[ik] = -1;
3570: 
3571:      for (ik = 0; ik < num_cols_offd_C; ik++)
3572:         B_marker_offd[ik] = -1;
[...]
3580:         nnz_o = 0;
3581:         if (ii)
3582:         {
3583:            nnz_d = C_diag_array[ii-1];
3584:            nnz_o = C_offd_array[ii-1];
3585:         }
3586:         for (ik = ns; ik < ne; ik++)
3587:         {
3588:            C_diag_i[ik] = nnz_d;
3589:            C_offd_i[ik] = nnz_o;
3590:            for (jk = C_tmp_diag_i[ik]; jk < C_tmp_diag_i[ik+1]; jk++)
3591:            {
3592:               jcol = C_tmp_diag_j[jk];
3593:               C_diag_j[nnz_d] = jcol;
3594:               C_diag_data[nnz_d] = C_tmp_diag_data[jk];
3595:               B_marker[jcol] = nnz_d;
3596:               nnz_d++;
3597:            }
3598:            for (jk = C_tmp_offd_i[ik]; jk < C_tmp_offd_i[ik+1]; jk++)
3599:            {
3600:               jcol = C_tmp_offd_j[jk];
3601:               C_offd_j[nnz_o] = jcol;
3602:               C_offd_data[nnz_o] = C_tmp_offd_data[jk];
3603:               B_marker_offd[jcol] = nnz_o;
3604:               nnz_o++;
3605:            }
3606:            for (jk = 0; jk < num_sends_A; jk++)
3607:               for (j1 = send_map_starts_A[jk]; j1 < send_map_starts_A[jk+1]; j1++)
3608:                  if (send_map_elmts_A[j1] == ik)
3609:                  {
3610:                     for (j2 = C_ext_diag_i[j1]; j2 < C_ext_diag_i[j1+1]; j2++)
3611:                     {
3612:                        jcol = C_ext_diag_j[j2];
3613:                        if (B_marker[jcol] < C_diag_i[ik])
3614:                        {
3615:                           C_diag_j[nnz_d] = jcol;
3616:                           C_diag_data[nnz_d] = C_ext_diag_data[j2];
3617:                           B_marker[jcol] = nnz_d;
3618:                           nnz_d++;
3619:                        }
3620:                        else
3621:                           C_diag_data[B_marker[jcol]] += C_ext_diag_data[j2];
3622:                     }
3623:                     for (j2 = C_ext_offd_i[j1]; j2 < C_ext_offd_i[j1+1]; j2++)
3624:                     {
3625:                        jcol = C_ext_offd_j[j2];
3626:                        if (B_marker_offd[jcol] < C_offd_i[ik])
3627:                        {
3628:                           C_offd_j[nnz_o] = jcol;
3629:                           C_offd_data[nnz_o] = C_ext_offd_data[j2];
3630:                           B_marker_offd[jcol] = nnz_o;
3631:                           nnz_o++;
3632:                        }
3633:                        else
3634:                           C_offd_data[B_marker_offd[jcol]] += C_ext_offd_data[j2];
3635:                     }
3636:                     break;
3637:                  }
3638:         }
3639:         hypre_TFree(B_marker);
3640:         hypre_TFree(B_marker_offd);
