/home/kcamus/qaas_runs/169-443-9681/intel/AMG/build/AMG/AMG/parcsr_ls/ams.c: 547 - 738
--------------------------------------------------------------------------------

547: {
548:    HYPRE_Int i, j;
549:    HYPRE_Int num_rows = hypre_ParCSRMatrixNumRows(A);
550: 
551:    hypre_CSRMatrix *A_diag = hypre_ParCSRMatrixDiag(A);
552:    HYPRE_Int *A_diag_I = hypre_CSRMatrixI(A_diag);
553:    HYPRE_Int *A_diag_J = hypre_CSRMatrixJ(A_diag);
554:    HYPRE_Real *A_diag_data = hypre_CSRMatrixData(A_diag);
555: 
556:    hypre_CSRMatrix *A_offd = hypre_ParCSRMatrixOffd(A);
557:    HYPRE_Int *A_offd_I = hypre_CSRMatrixI(A_offd);
558:    HYPRE_Int *A_offd_J = hypre_CSRMatrixJ(A_offd);
559:    HYPRE_Real *A_offd_data = hypre_CSRMatrixData(A_offd);
560:    HYPRE_Int num_cols_offd = hypre_CSRMatrixNumCols(A_offd);
561: 
562:    HYPRE_Real diag;
563:    HYPRE_Real *l1_norm = hypre_TAlloc(HYPRE_Real, num_rows);
[...]
569:    if (cf_marker != NULL)
[...]
576:       hypre_ParCSRCommPkg  *comm_pkg = hypre_ParCSRMatrixCommPkg(A);
577:       hypre_ParCSRCommHandle *comm_handle;
578: 
579:       if (num_cols_offd)
580:          cf_marker_offd = hypre_CTAlloc(HYPRE_Int, num_cols_offd);
581:       num_sends = hypre_ParCSRCommPkgNumSends(comm_pkg);
582:       if (hypre_ParCSRCommPkgSendMapStart(comm_pkg, num_sends))
583:          int_buf_data = hypre_CTAlloc(HYPRE_Int,
584:                                       hypre_ParCSRCommPkgSendMapStart(comm_pkg, num_sends));
585:       index = 0;
586:       for (i = 0; i < num_sends; i++)
587:       {
588:          start = hypre_ParCSRCommPkgSendMapStart(comm_pkg, i);
589:          for (j = start; j < hypre_ParCSRCommPkgSendMapStart(comm_pkg, i+1); j++)
590:          {
591:             int_buf_data[index++] = cf_marker[hypre_ParCSRCommPkgSendMapElmt(comm_pkg,j)];
592:          }
593:       }
594:       comm_handle = hypre_ParCSRCommHandleCreate(11, comm_pkg, int_buf_data,
595:                                                  cf_marker_offd);
596:       hypre_ParCSRCommHandleDestroy(comm_handle);
597:       hypre_TFree(int_buf_data);
598:    }
599: 
600:    if (option == 1)
601:    {
602:       for (i = 0; i < num_rows; i++)
603:       {
604:          l1_norm[i] = 0.0;
605:          if (cf_marker == NULL)
606:          {
607:             /* Add the l1 norm of the diag part of the ith row */
608:             for (j = A_diag_I[i]; j < A_diag_I[i+1]; j++)
609:                l1_norm[i] += fabs(A_diag_data[j]);
610:             /* Add the l1 norm of the offd part of the ith row */
611:             if (num_cols_offd)
612:             {
613:                for (j = A_offd_I[i]; j < A_offd_I[i+1]; j++)
614:                   l1_norm[i] += fabs(A_offd_data[j]);
615:             }
616:          }
617:          else
618:          {
619:             cf_diag = cf_marker[i];
620:             /* Add the CF l1 norm of the diag part of the ith row */
621:             for (j = A_diag_I[i]; j < A_diag_I[i+1]; j++)
622:                if (cf_diag == cf_marker[A_diag_J[j]])
623:                   l1_norm[i] += fabs(A_diag_data[j]);
624:             /* Add the CF l1 norm of the offd part of the ith row */
625:             if (num_cols_offd)
626:             {
627:                for (j = A_offd_I[i]; j < A_offd_I[i+1]; j++)
628:                   if (cf_diag == cf_marker_offd[A_offd_J[j]])
629:                      l1_norm[i] += fabs(A_offd_data[j]);
[...]
636:       for (i = 0; i < num_rows; i++)
637:       {
638:          /* Add the diag element of the ith row */
639:          l1_norm[i] = fabs(A_diag_data[A_diag_I[i]]);
640:          if (cf_marker == NULL)
641:          {
642:             /* Add the l1 norm of the offd part of the ith row */
643:             if (num_cols_offd)
644:             {
645:                for (j = A_offd_I[i]; j < A_offd_I[i+1]; j++)
646:                   l1_norm[i] += fabs(A_offd_data[j]);
647:             }
648:          }
649:          else
650:          {
651:             cf_diag = cf_marker[i];
652:             /* Add the CF l1 norm of the offd part of the ith row */
653:             if (num_cols_offd)
654:             {
655:                for (j = A_offd_I[i]; j < A_offd_I[i+1]; j++)
656:                   if (cf_diag == cf_marker_offd[A_offd_J[j]])
657:                      l1_norm[i] += fabs(A_offd_data[j]);
[...]
664:       for (i = 0; i < num_rows; i++)
665:       {
666:          l1_norm[i] = 0.0;
667:          for (j = A_diag_I[i]; j < A_diag_I[i+1]; j++)
668:             l1_norm[i] += A_diag_data[j] * A_diag_data[j];
669:          if (num_cols_offd)
670:             for (j = A_offd_I[i]; j < A_offd_I[i+1]; j++)
671:                l1_norm[i] += A_offd_data[j] * A_offd_data[j];
672:       }
673:    }
674:    else if (option == 4)
675:    {
676:       for (i = 0; i < num_rows; i++)
677:       {
678:          /* Add the diag element of the ith row */
679:          diag = l1_norm[i] = fabs(A_diag_data[A_diag_I[i]]);
680:          if (cf_marker == NULL)
681:          {
682:             /* Add the scaled l1 norm of the offd part of the ith row */
683:             if (num_cols_offd)
684:             {
685:                for (j = A_offd_I[i]; j < A_offd_I[i+1]; j++)
686:                   l1_norm[i] += 0.5*fabs(A_offd_data[j]);
687:             }
688:          }
689:          else
690:          {
691:             cf_diag = cf_marker[i];
692:             /* Add the scaled CF l1 norm of the offd part of the ith row */
693:             if (num_cols_offd)
694:             {
695:                for (j = A_offd_I[i]; j < A_offd_I[i+1]; j++)
696:                   if (cf_diag == cf_marker_offd[A_offd_J[j]])
697:                      l1_norm[i] += 0.5*fabs(A_offd_data[j]);
698:             }
699:          }
700: 
701:          /* Truncate according to Remark 6.2 */
702:          if (l1_norm[i] <= 4.0/3.0*diag)
703:             l1_norm[i] = diag;
704:       }
705:    }
706:    else if (option == 5) /*stores diagonal of A for Jacobi using matvec, rlx 7 */
707:    {
708:       for (i = 0; i < num_rows; i++)
709:       {
710:          diag = A_diag_data[A_diag_I[i]];
711:          if (diag != 0.0) l1_norm[i] = diag;
[...]
720:    for (i = 0; i < num_rows; i++)
721:       if (A_diag_data[A_diag_I[i]] < 0)
722:          l1_norm[i] = -l1_norm[i];
723: 
724:    for (i = 0; i < num_rows; i++)
725:       /* if (fabs(l1_norm[i]) < DBL_EPSILON) */
726:       if (fabs(l1_norm[i]) == 0.0)
727:       {
728:          hypre_error_in_arg(1);
729:          break;
730:       }
731: 
732:    //for (i = 0; i < num_rows; i++) l1_norm[i]=1.0/l1_norm[i];
733:    hypre_TFree(cf_marker_offd);
734: 
735:    *l1_norm_ptr = l1_norm;
736: 
737:    return hypre_error_flag;
738: }
