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

3363: #pragma omp parallel for private(i,ii,j,k,ns,ne,rest,size,diag,cf_diag) HYPRE_SMP_SCHEDULE
3364: #endif
3365:    for (k = 0; k < num_threads; k++)
3366:    {
3367:       size = num_rows/num_threads;
3368:       rest = num_rows - size*num_threads;
3369:       if (k < rest)
3370:       {
3371:          ns = k*size+k;
3372:          ne = (k+1)*size+k+1;
3373:       }
3374:       else
3375:       {
3376:          ns = k*size+rest;
3377:          ne = (k+1)*size+rest;
3378:       }
3379: 
3380:       if (option == 1)
3381:       {
3382:          for (i = ns; i < ne; i++)
3383:          {
3384:             l1_norm[i] = 0.0;
3385:             if (cf_marker == NULL)
3386:             {
3387:                /* Add the l1 norm of the diag part of the ith row */
3388:                for (j = A_diag_I[i]; j < A_diag_I[i+1]; j++)
3389:                   l1_norm[i] += fabs(A_diag_data[j]);
3390:                /* Add the l1 norm of the offd part of the ith row */
3391:                if (num_cols_offd)
3392:                {
3393:                   for (j = A_offd_I[i]; j < A_offd_I[i+1]; j++)
3394:                      l1_norm[i] += fabs(A_offd_data[j]);
3395:                }
3396:             }
3397:             else
3398:             {
3399:                cf_diag = cf_marker[i];
3400:                /* Add the CF l1 norm of the diag part of the ith row */
3401:                for (j = A_diag_I[i]; j < A_diag_I[i+1]; j++)
3402:                   if (cf_diag == cf_marker[A_diag_J[j]])
3403:                      l1_norm[i] += fabs(A_diag_data[j]);
3404:                /* Add the CF l1 norm of the offd part of the ith row */
3405:                if (num_cols_offd)
3406:                {
3407:                   for (j = A_offd_I[i]; j < A_offd_I[i+1]; j++)
3408:                      if (cf_diag == cf_marker_offd[A_offd_J[j]])
3409:                         l1_norm[i] += fabs(A_offd_data[j]);
[...]
3416:          for (i = ns; i < ne; i++)
3417:          {
3418:             l1_norm[i] = 0.0;
3419:             if (cf_marker == NULL)
3420:             {
3421:                /* Add the diagonal and the local off-thread part of the ith row */
3422:                for (j = A_diag_I[i]; j < A_diag_I[i+1]; j++)
3423:                {
3424:                   ii = A_diag_J[j];
3425:                   if (ii == i || ii < ns || ii >= ne)
3426:                      l1_norm[i] += fabs(A_diag_data[j]);
3427:                }
3428:                /* Add the l1 norm of the offd part of the ith row */
3429:                if (num_cols_offd)
3430:                {
3431:                   for (j = A_offd_I[i]; j < A_offd_I[i+1]; j++)
3432:                      l1_norm[i] += fabs(A_offd_data[j]);
3433:                }
3434:             }
3435:             else
3436:             {
3437:                cf_diag = cf_marker[i];
3438:                /* Add the diagonal and the local off-thread part of the ith row */
3439:                for (j = A_diag_I[i]; j < A_diag_I[i+1]; j++)
3440:                {
3441:                   ii = A_diag_J[j];
3442:                   if ((ii == i || ii < ns || ii >= ne) &&
3443:                       (cf_diag == cf_marker[A_diag_J[j]]))
3444:                      l1_norm[i] += fabs(A_diag_data[j]);
3445:                }
3446:                /* Add the CF l1 norm of the offd part of the ith row */
3447:                if (num_cols_offd)
3448:                {
3449:                   for (j = A_offd_I[i]; j < A_offd_I[i+1]; j++)
3450:                      if (cf_diag == cf_marker_offd[A_offd_J[j]])
3451:                         l1_norm[i] += fabs(A_offd_data[j]);
[...]
3458:          for (i = ns; i < ne; i++)
3459:          {
3460:             l1_norm[i] = 0.0;
3461:             for (j = A_diag_I[i]; j < A_diag_I[i+1]; j++)
3462:                l1_norm[i] += A_diag_data[j] * A_diag_data[j];
3463:             if (num_cols_offd)
3464:                for (j = A_offd_I[i]; j < A_offd_I[i+1]; j++)
3465:                   l1_norm[i] += A_offd_data[j] * A_offd_data[j];
3466:          }
3467:       }
3468:       else if (option == 4)
3469:       {
3470:          for (i = ns; i < ne; i++)
3471:          {
3472:             l1_norm[i] = 0.0;
3473:             if (cf_marker == NULL)
3474:             {
3475:                /* Add the diagonal and the local off-thread part of the ith row */
3476:                for (j = A_diag_I[i]; j < A_diag_I[i+1]; j++)
3477:                {
3478:                   ii = A_diag_J[j];
3479:                   if (ii == i || ii < ns || ii >= ne)
3480:                   {
3481:                      if (ii == i)
3482:                      {
3483:                         diag = fabs(A_diag_data[j]);
3484:                         l1_norm[i] += fabs(A_diag_data[j]);
3485:                      }
3486:                      else
3487:                         l1_norm[i] += 0.5*fabs(A_diag_data[j]);
3488:                   }
3489:                }
3490:                /* Add the l1 norm of the offd part of the ith row */
3491:                if (num_cols_offd)
3492:                {
3493:                   for (j = A_offd_I[i]; j < A_offd_I[i+1]; j++)
3494:                      l1_norm[i] += 0.5*fabs(A_offd_data[j]);
3495:                }
3496:             }
3497:             else
3498:             {
3499:                cf_diag = cf_marker[i];
3500:                /* Add the diagonal and the local off-thread part of the ith row */
3501:                for (j = A_diag_I[i]; j < A_diag_I[i+1]; j++)
3502:                {
3503:                   ii = A_diag_J[j];
3504:                   if ((ii == i || ii < ns || ii >= ne) &&
3505:                       (cf_diag == cf_marker[A_diag_J[j]]))
3506:                   {
3507:                      if (ii == i)
3508:                      {
3509:                         diag = fabs(A_diag_data[j]);
3510:                         l1_norm[i] += fabs(A_diag_data[j]);
3511:                      }
3512:                      else
3513:                         l1_norm[i] += 0.5*fabs(A_diag_data[j]);
3514:                   }
3515:                }
3516:                /* Add the CF l1 norm of the offd part of the ith row */
3517:                if (num_cols_offd)
3518:                {
3519:                   for (j = A_offd_I[i]; j < A_offd_I[i+1]; j++)
3520:                      if (cf_diag == cf_marker_offd[A_offd_J[j]])
3521:                         l1_norm[i] += 0.5*fabs(A_offd_data[j]);
3522:                }
3523:             }
3524: 
3525:             /* Truncate according to Remark 6.2 */
3526:             if (l1_norm[i] <= 4.0/3.0*diag)
3527:                l1_norm[i] = diag;
3528:          }
3529:       }
3530: 
3531:       /* Handle negative definite matrices */
3532:       for (i = ns; i < ne; i++)
3533:          if (A_diag_data[A_diag_I[i]] < 0)
3534:             l1_norm[i] = -l1_norm[i];
3535: 
3536:       for (i = ns; i < ne; i++)
3537:          /* if (fabs(l1_norm[i]) < DBL_EPSILON) */
3538:          if (fabs(l1_norm[i]) == 0.0)
3539:          {
3540:             hypre_error_in_arg(1);
3541:             break;
3542:          }
3543: 
3544:    }
