/beegfs/hackathon/users/eoseret/qaas_runs_test/178-668-9639/intel/AMG/build/AMG/AMG/parcsr_ls/ams.c: 3569 - 3873
--------------------------------------------------------------------------------

3569: {
3570:    MPI_Comm         comm         = hypre_ParCSRMatrixComm(A);
3571:    hypre_CSRMatrix *A_diag       = hypre_ParCSRMatrixDiag(A);
3572:    HYPRE_Real      *A_diag_data  = hypre_CSRMatrixData(A_diag);
3573:    HYPRE_Int       *A_diag_i     = hypre_CSRMatrixI(A_diag);
3574:    HYPRE_Int       *A_diag_j     = hypre_CSRMatrixJ(A_diag);
3575:    hypre_CSRMatrix *A_offd = hypre_ParCSRMatrixOffd(A);
3576:    HYPRE_Int       *A_offd_i     = hypre_CSRMatrixI(A_offd);
3577:    HYPRE_Real      *A_offd_data  = hypre_CSRMatrixData(A_offd);
3578:    HYPRE_Int       *A_offd_j     = hypre_CSRMatrixJ(A_offd);
3579:    hypre_ParCSRCommPkg *comm_pkg = hypre_ParCSRMatrixCommPkg(A);
3580:    hypre_ParCSRCommHandle *comm_handle;
3581: 
3582:    HYPRE_Int        n             = hypre_CSRMatrixNumRows(A_diag);
3583:    HYPRE_Int        num_cols_offd = hypre_CSRMatrixNumCols(A_offd);
3584: 
3585:    hypre_Vector    *u_local = hypre_ParVectorLocalVector(u);
3586:    HYPRE_Real      *u_data  = hypre_VectorData(u_local);
3587: 
3588:    hypre_Vector    *f_local = hypre_ParVectorLocalVector(f);
3589:    HYPRE_Real      *f_data  = hypre_VectorData(f_local);
3590: 
3591:    hypre_Vector    *Vtemp_local = hypre_ParVectorLocalVector(Vtemp);
3592:    HYPRE_Real      *Vtemp_data = hypre_VectorData(Vtemp_local);
[...]
3608:    hypre_MPI_Comm_size(comm,&num_procs);
3609:    hypre_MPI_Comm_rank(comm,&my_id);
3610:    num_threads = hypre_NumThreads();
[...]
3619:    if (num_procs > 1)
3620:    {
3621:       num_sends = hypre_ParCSRCommPkgNumSends(comm_pkg);
3622:       v_buf_data = hypre_CTAlloc(HYPRE_Real,
3623:                                  hypre_ParCSRCommPkgSendMapStart(comm_pkg, num_sends));
3624: 
3625:       Vext_data = hypre_CTAlloc(HYPRE_Real,num_cols_offd);
3626:       if (num_cols_offd)
3627:       {
3628:          A_offd_j = hypre_CSRMatrixJ(A_offd);
3629:          A_offd_data = hypre_CSRMatrixData(A_offd);
3630:       }
3631: 
3632:       index = 0;
3633:       for (i = 0; i < num_sends; i++)
3634:       {
3635:          start = hypre_ParCSRCommPkgSendMapStart(comm_pkg, i);
3636:          for (j=start; j < hypre_ParCSRCommPkgSendMapStart(comm_pkg,i+1); j++)
3637:             v_buf_data[index++]
3638:                = u_data[hypre_ParCSRCommPkgSendMapElmt(comm_pkg,j)];
3639:       }
3640: 
3641:       comm_handle = hypre_ParCSRCommHandleCreate(1, comm_pkg, v_buf_data,
[...]
3647:       hypre_ParCSRCommHandleDestroy(comm_handle);
3648:       comm_handle = NULL;
3649:    }
3650: 
3651:    if (relax_type == 1) /* Jacobi */
3652:    {
3653: 
3654: #ifdef HYPRE_USING_OPENMP
3655: #pragma omp parallel for private(i) HYPRE_SMP_SCHEDULE
[...]
3662: #pragma omp parallel for private(i,ii,jj,res) HYPRE_SMP_SCHEDULE
[...]
3686:    else if (relax_type == 2) /* GS */
3687:    {
3688:       if (relax_weight == 1 && omega == 1)
3689:       {
3690:          tmp_data = hypre_CTAlloc(HYPRE_Real,n);
3691: #ifdef HYPRE_USING_OPENMP
3692: #pragma omp parallel for private(i) HYPRE_SMP_SCHEDULE
3693: #endif
3694:          for (i = 0; i < n; i++)
3695:             tmp_data[i] = u_data[i];
3696: #ifdef HYPRE_USING_OPENMP
3697: #pragma omp parallel for private(i,ii,j,jj,ns,ne,res,rest,size) HYPRE_SMP_SCHEDULE
[...]
3768:          hypre_TFree(tmp_data);
3769:       }
3770:       else
3771:       {
3772:          HYPRE_Real c1 = omega*relax_weight;
3773:          HYPRE_Real c2 = omega*(1.0-relax_weight);
3774:          tmp_data = hypre_CTAlloc(HYPRE_Real,n);
3775: #ifdef HYPRE_USING_OPENMP
3776: #pragma omp parallel for private(i) HYPRE_SMP_SCHEDULE
[...]
3783: #pragma omp parallel for private(i,ii,j,jj,ns,ne,res,rest,size) HYPRE_SMP_SCHEDULE
[...]
3861:          hypre_TFree(tmp_data);
3862:       }
3863:    } /* end of Jacobi or G.S. */
3864: 
3865: 
3866:    if (num_procs > 1)
3867:    {
3868:       hypre_TFree(Vext_data);
3869:       hypre_TFree(v_buf_data);
3870:    }
3871: 
3872:    return(relax_error);
3873: }
