Lines Matching refs:mumps
532 #define PetscMUMPS_c(mumps) \ argument
534 if (mumps->use_petsc_omp_support) { \
535 if (mumps->is_omp_master) { \
536 PetscCall(PetscOmpCtrlOmpRegionOnMasterBegin(mumps->omp_ctrl)); \
538 PetscCall(PetscCallMumps_Private(&mumps->id)); \
540 PetscCall(PetscOmpCtrlOmpRegionOnMasterEnd(mumps->omp_ctrl)); \
542 PetscCall(PetscOmpCtrlBarrier(mumps->omp_ctrl)); \
549 …PetscCallMPI(MPI_Bcast(mumps->id.infog, PETSC_STATIC_ARRAY_LENGTH(tmp.infog), MPIU_MUMPSINT, 0, mu…
550 …PetscCallMPI(MPI_Bcast(mumps->id.info, PETSC_STATIC_ARRAY_LENGTH(tmp.info), MPIU_MUMPSINT, 0, mump…
551 …PetscCallMPI(MPI_Bcast(mumps->id.rinfog, PETSC_STATIC_ARRAY_LENGTH(tmp.rinfog), MPIU_MUMPSREAL(&mu…
552 …PetscCallMPI(MPI_Bcast(mumps->id.rinfo, PETSC_STATIC_ARRAY_LENGTH(tmp.rinfo), MPIU_MUMPSREAL(&mump…
555 PetscCall(PetscCallMumps_Private(&mumps->id)); \
560 #define PetscMUMPS_c(mumps) \ argument
563 PetscCall(PetscCallMumps_Private(&mumps->id)); \
619 static PetscErrorCode PetscMUMPSIntCSRCast(PETSC_UNUSED Mat_MUMPS *mumps, PetscInt nrow, PetscInt *… in PetscMUMPSIntCSRCast() argument
627 if (nrow + 1 > mumps->cur_ilen) { /* realloc ia_alloc/ja_alloc to fit ia/ja */ in PetscMUMPSIntCSRCast()
628 PetscCall(PetscFree(mumps->ia_alloc)); in PetscMUMPSIntCSRCast()
629 PetscCall(PetscMalloc1(nrow + 1, &mumps->ia_alloc)); in PetscMUMPSIntCSRCast()
630 mumps->cur_ilen = nrow + 1; in PetscMUMPSIntCSRCast()
632 if (nnz > mumps->cur_jlen) { in PetscMUMPSIntCSRCast()
633 PetscCall(PetscFree(mumps->ja_alloc)); in PetscMUMPSIntCSRCast()
634 PetscCall(PetscMalloc1(nnz, &mumps->ja_alloc)); in PetscMUMPSIntCSRCast()
635 mumps->cur_jlen = nnz; in PetscMUMPSIntCSRCast()
637 for (i = 0; i < nrow + 1; i++) PetscCall(PetscMUMPSIntCast(ia[i], &mumps->ia_alloc[i])); in PetscMUMPSIntCSRCast()
638 for (i = 0; i < nnz; i++) PetscCall(PetscMUMPSIntCast(ja[i], &mumps->ja_alloc[i])); in PetscMUMPSIntCSRCast()
639 *ia_mumps = mumps->ia_alloc; in PetscMUMPSIntCSRCast()
640 *ja_mumps = mumps->ja_alloc; in PetscMUMPSIntCSRCast()
650 static PetscErrorCode MatMumpsResetSchur_Private(Mat_MUMPS *mumps) in MatMumpsResetSchur_Private() argument
653 PetscCall(PetscFree(mumps->id.listvar_schur)); in MatMumpsResetSchur_Private()
654 …PetscCall(PetscFree(mumps->redrhs)); // if needed, id.redrhs will be freed in MatMumpsFreeInternal… in MatMumpsResetSchur_Private()
655 PetscCall(PetscFree(mumps->schur_sol)); in MatMumpsResetSchur_Private()
656 mumps->id.size_schur = 0; in MatMumpsResetSchur_Private()
657 mumps->id.schur_lld = 0; in MatMumpsResetSchur_Private()
658 if (mumps->id.internal_id) mumps->id.ICNTL(19) = 0; // sometimes, the inner id is yet built in MatMumpsResetSchur_Private()
665 Mat_MUMPS *mumps = (Mat_MUMPS *)F->data; in MatMumpsSolveSchur_Private() local
674 …PetscCall(MatMumpsCastMumpsScalarArray(mumps->sizeredrhs, mumps->id.precision, mumps->id.redrhs, m… in MatMumpsSolveSchur_Private()
676 …PetscCall(MatCreateSeqDense(PETSC_COMM_SELF, mumps->id.size_schur, mumps->id.nrhs, mumps->redrhs, … in MatMumpsSolveSchur_Private()
683 …PetscCall(MatCreateSeqDense(PETSC_COMM_SELF, mumps->id.size_schur, mumps->id.nrhs, mumps->redrhs, … in MatMumpsSolveSchur_Private()
688 if (!mumps->id.ICNTL(9)) { /* transpose solve */ in MatMumpsSolveSchur_Private()
695 sizesol = mumps->id.nrhs * mumps->id.size_schur; in MatMumpsSolveSchur_Private()
696 if (!mumps->schur_sol || sizesol > mumps->schur_sizesol) { in MatMumpsSolveSchur_Private()
697 PetscCall(PetscFree(mumps->schur_sol)); in MatMumpsSolveSchur_Private()
698 PetscCall(PetscMalloc1(sizesol, &mumps->schur_sol)); in MatMumpsSolveSchur_Private()
699 mumps->schur_sizesol = sizesol; in MatMumpsSolveSchur_Private()
701 …PetscCall(MatCreateSeqDense(PETSC_COMM_SELF, mumps->id.size_schur, mumps->id.nrhs, mumps->schur_so… in MatMumpsSolveSchur_Private()
707 if (!mumps->id.ICNTL(9)) { /* transpose solve */ in MatMumpsSolveSchur_Private()
723 …PetscCall(MatMumpsCastPetscScalarArray(mumps->sizeredrhs, xarray, mumps->id.precision, mumps->id.r… in MatMumpsSolveSchur_Private()
733 Mat_MUMPS *mumps = (Mat_MUMPS *)F->data; in MatMumpsHandleSchur_Private() local
736 if (!mumps->id.ICNTL(19)) { /* do nothing when Schur complement has not been computed */ in MatMumpsHandleSchur_Private()
740 PetscInt sizeredrhs = mumps->id.nrhs * mumps->id.size_schur; in MatMumpsHandleSchur_Private()
742 if (!mumps->id.redrhs || sizeredrhs > mumps->sizeredrhs) { in MatMumpsHandleSchur_Private()
743 mumps->id.lredrhs = mumps->id.size_schur; in MatMumpsHandleSchur_Private()
744 mumps->sizeredrhs = mumps->id.nrhs * mumps->id.lredrhs; in MatMumpsHandleSchur_Private()
745 if (mumps->id.redrhs_len) PetscCall(PetscFree(mumps->id.redrhs)); in MatMumpsHandleSchur_Private()
746 PetscCall(PetscFree(mumps->redrhs)); in MatMumpsHandleSchur_Private()
747 PetscCall(PetscMalloc1(mumps->sizeredrhs, &mumps->redrhs)); in MatMumpsHandleSchur_Private()
748 …MakeMumpsScalarArray(PETSC_FALSE, mumps->sizeredrhs, mumps->redrhs, mumps->id.precision, &mumps->i… in MatMumpsHandleSchur_Private()
752 mumps->id.ICNTL(26) = 2; /* expansion phase */ in MatMumpsHandleSchur_Private()
753 PetscMUMPS_c(mumps); in MatMumpsHandleSchur_Private()
754 …ck(mumps->id.INFOG(1) >= 0, PETSC_COMM_SELF, PETSC_ERR_LIB, "MUMPS error in solve: INFOG(1)=%d, IN… in MatMumpsHandleSchur_Private()
756 mumps->id.ICNTL(26) = -1; in MatMumpsHandleSchur_Private()
758 if (mumps->id.nrhs > 1) { in MatMumpsHandleSchur_Private()
759 if (mumps->id.redrhs_len) PetscCall(PetscFree(mumps->id.redrhs)); in MatMumpsHandleSchur_Private()
760 PetscCall(PetscFree(mumps->redrhs)); in MatMumpsHandleSchur_Private()
761 mumps->id.redrhs_len = 0; in MatMumpsHandleSchur_Private()
762 mumps->id.lredrhs = 0; in MatMumpsHandleSchur_Private()
763 mumps->sizeredrhs = 0; in MatMumpsHandleSchur_Private()
787 …rrorCode MatConvertToTriples_seqaij_seqaij(Mat A, PetscInt shift, MatReuse reuse, Mat_MUMPS *mumps) in MatConvertToTriples_seqaij_seqaij() argument
811 mumps->val = (PetscScalar *)av; in MatConvertToTriples_seqaij_seqaij()
812 mumps->irn = row; in MatConvertToTriples_seqaij_seqaij()
813 mumps->jcn = col; in MatConvertToTriples_seqaij_seqaij()
814 mumps->nnz = nz; in MatConvertToTriples_seqaij_seqaij()
815 …} else if (mumps->nest_vals) PetscCall(PetscArraycpy(mumps->val, av, aa->nz)); /* MatConvertToTrip… in MatConvertToTriples_seqaij_seqaij()
816 …else mumps->val = (PetscScalar *)av; /* in the default c… in MatConvertToTriples_seqaij_seqaij()
821 …rorCode MatConvertToTriples_seqsell_seqaij(Mat A, PetscInt shift, MatReuse reuse, Mat_MUMPS *mumps) in MatConvertToTriples_seqsell_seqaij() argument
835 mumps->irn = row; in MatConvertToTriples_seqsell_seqaij()
836 mumps->jcn = col; in MatConvertToTriples_seqsell_seqaij()
837 mumps->nnz = nz; in MatConvertToTriples_seqsell_seqaij()
838 mumps->val = a->val; in MatConvertToTriples_seqsell_seqaij()
839 …} else if (mumps->nest_vals) PetscCall(PetscArraycpy(mumps->val, a->val, nz)); /* MatConvertToTrip… in MatConvertToTriples_seqsell_seqaij()
840 …else mumps->val = a->val; /* in the default c… in MatConvertToTriples_seqsell_seqaij()
844 …rorCode MatConvertToTriples_seqbaij_seqaij(Mat A, PetscInt shift, MatReuse reuse, Mat_MUMPS *mumps) in MatConvertToTriples_seqbaij_seqaij() argument
872 mumps->irn = row; in MatConvertToTriples_seqbaij_seqaij()
873 mumps->jcn = col; in MatConvertToTriples_seqbaij_seqaij()
874 mumps->nnz = nz; in MatConvertToTriples_seqbaij_seqaij()
875 mumps->val = aa->a; in MatConvertToTriples_seqbaij_seqaij()
876 …} else if (mumps->nest_vals) PetscCall(PetscArraycpy(mumps->val, aa->a, nz)); /* MatConvertToTripl… in MatConvertToTriples_seqbaij_seqaij()
877 …else mumps->val = aa->a; /* in the default ca… in MatConvertToTriples_seqbaij_seqaij()
881 …Code MatConvertToTriples_seqsbaij_seqsbaij(Mat A, PetscInt shift, MatReuse reuse, Mat_MUMPS *mumps) in MatConvertToTriples_seqsbaij_seqsbaij() argument
907 PetscCall(PetscMalloc1(alloc_size, &mumps->val_alloc)); in MatConvertToTriples_seqsbaij_seqsbaij()
908 mumps->val = mumps->val_alloc; in MatConvertToTriples_seqsbaij_seqsbaij()
910 mumps->val = aa->a; in MatConvertToTriples_seqsbaij_seqsbaij()
912 mumps->irn = row; in MatConvertToTriples_seqsbaij_seqsbaij()
913 mumps->jcn = col; in MatConvertToTriples_seqsbaij_seqsbaij()
915 row = mumps->irn; in MatConvertToTriples_seqsbaij_seqsbaij()
916 col = mumps->jcn; in MatConvertToTriples_seqsbaij_seqsbaij()
918 val = mumps->val; in MatConvertToTriples_seqsbaij_seqsbaij()
950 } else if (mumps->nest_vals) in MatConvertToTriples_seqsbaij_seqsbaij()
951 …PetscCall(PetscArraycpy(mumps->val, aa->a, aa->nz)); /* bs == 1 and MAT_REUSE_MATRIX, MatConvertTo… in MatConvertToTriples_seqsbaij_seqsbaij()
952 …else mumps->val = aa->a; /* in the default case, mumps->val is never… in MatConvertToTriples_seqsbaij_seqsbaij()
953 if (reuse == MAT_INITIAL_MATRIX) mumps->nnz = nz; in MatConvertToTriples_seqsbaij_seqsbaij()
957 …orCode MatConvertToTriples_seqaij_seqsbaij(Mat A, PetscInt shift, MatReuse reuse, Mat_MUMPS *mumps) in MatConvertToTriples_seqaij_seqsbaij() argument
998 mumps->nnz = nz; in MatConvertToTriples_seqaij_seqsbaij()
999 mumps->irn = row; in MatConvertToTriples_seqaij_seqsbaij()
1000 mumps->jcn = col; in MatConvertToTriples_seqaij_seqsbaij()
1001 mumps->val = mumps->val_alloc = val; in MatConvertToTriples_seqaij_seqsbaij()
1039 val = mumps->val; in MatConvertToTriples_seqaij_seqsbaij()
1065 …Code MatConvertToTriples_mpisbaij_mpisbaij(Mat A, PetscInt shift, MatReuse reuse, Mat_MUMPS *mumps) in MatConvertToTriples_mpisbaij_mpisbaij() argument
1102 mumps->irn = row; in MatConvertToTriples_mpisbaij_mpisbaij()
1103 mumps->jcn = col; in MatConvertToTriples_mpisbaij_mpisbaij()
1104 mumps->val = mumps->val_alloc = val; in MatConvertToTriples_mpisbaij_mpisbaij()
1106 val = mumps->val; in MatConvertToTriples_mpisbaij_mpisbaij()
1168 if (reuse == MAT_INITIAL_MATRIX) mumps->nnz = jj; in MatConvertToTriples_mpisbaij_mpisbaij()
1172 …rrorCode MatConvertToTriples_mpiaij_mpiaij(Mat A, PetscInt shift, MatReuse reuse, Mat_MUMPS *mumps) in MatConvertToTriples_mpiaij_mpiaij() argument
1202 mumps->nnz = nz; in MatConvertToTriples_mpiaij_mpiaij()
1203 mumps->irn = row; in MatConvertToTriples_mpiaij_mpiaij()
1204 mumps->jcn = col; in MatConvertToTriples_mpiaij_mpiaij()
1205 mumps->val = mumps->val_alloc = val; in MatConvertToTriples_mpiaij_mpiaij()
1207 val = mumps->val; in MatConvertToTriples_mpiaij_mpiaij()
1244 …rorCode MatConvertToTriples_mpibaij_mpiaij(Mat A, PetscInt shift, MatReuse reuse, Mat_MUMPS *mumps) in MatConvertToTriples_mpibaij_mpiaij() argument
1264 mumps->nnz = nz; in MatConvertToTriples_mpibaij_mpiaij()
1265 mumps->irn = row; in MatConvertToTriples_mpibaij_mpiaij()
1266 mumps->jcn = col; in MatConvertToTriples_mpibaij_mpiaij()
1267 mumps->val = mumps->val_alloc = val; in MatConvertToTriples_mpibaij_mpiaij()
1269 val = mumps->val; in MatConvertToTriples_mpibaij_mpiaij()
1314 …orCode MatConvertToTriples_mpiaij_mpisbaij(Mat A, PetscInt shift, MatReuse reuse, Mat_MUMPS *mumps) in MatConvertToTriples_mpiaij_mpisbaij() argument
1361 mumps->nnz = nz; in MatConvertToTriples_mpiaij_mpisbaij()
1362 mumps->irn = row; in MatConvertToTriples_mpiaij_mpisbaij()
1363 mumps->jcn = col; in MatConvertToTriples_mpiaij_mpisbaij()
1364 mumps->val = mumps->val_alloc = val; in MatConvertToTriples_mpiaij_mpisbaij()
1366 val = mumps->val; in MatConvertToTriples_mpiaij_mpisbaij()
1405 …onvertToTriples_diagonal_xaij(Mat A, PETSC_UNUSED PetscInt shift, MatReuse reuse, Mat_MUMPS *mumps) in MatConvertToTriples_diagonal_xaij() argument
1422 mumps->val = (PetscScalar *)av; in MatConvertToTriples_diagonal_xaij()
1423 mumps->irn = row; in MatConvertToTriples_diagonal_xaij()
1424 mumps->jcn = col; in MatConvertToTriples_diagonal_xaij()
1425 mumps->nnz = M; in MatConvertToTriples_diagonal_xaij()
1426 …} else if (mumps->nest_vals) PetscCall(PetscArraycpy(mumps->val, av, M)); /* MatConvertToTriples_n… in MatConvertToTriples_diagonal_xaij()
1427 …else mumps->val = (PetscScalar *)av; /* in the default case, … in MatConvertToTriples_diagonal_xaij()
1432 …atConvertToTriples_dense_xaij(Mat A, PETSC_UNUSED PetscInt shift, MatReuse reuse, Mat_MUMPS *mumps) in MatConvertToTriples_dense_xaij() argument
1453 if (lda == m) mumps->val = v; in MatConvertToTriples_dense_xaij()
1455 PetscCall(PetscMalloc1(m * N, &mumps->val)); in MatConvertToTriples_dense_xaij()
1456 mumps->val_alloc = mumps->val; in MatConvertToTriples_dense_xaij()
1457 for (j = 0; j < N; j++) PetscCall(PetscArraycpy(mumps->val + m * j, v + lda * j, m)); in MatConvertToTriples_dense_xaij()
1459 mumps->irn = row; in MatConvertToTriples_dense_xaij()
1460 mumps->jcn = col; in MatConvertToTriples_dense_xaij()
1461 mumps->nnz = m * N; in MatConvertToTriples_dense_xaij()
1463 if (lda == m && !mumps->nest_vals) mumps->val = v; in MatConvertToTriples_dense_xaij()
1465 for (j = 0; j < N; j++) PetscCall(PetscArraycpy(mumps->val + m * j, v + lda * j, m)); in MatConvertToTriples_dense_xaij()
1512 …tscErrorCode MatConvertToTriples_nest_xaij(Mat A, PetscInt shift, MatReuse reuse, Mat_MUMPS *mumps) in MatConvertToTriples_nest_xaij() argument
1516 PetscBool chol = mumps->sym ? PETSC_TRUE : PETSC_FALSE; in MatConvertToTriples_nest_xaij()
1530 …PetscCall(PetscMalloc2(nr * nc + 1, &mumps->nest_vals_start, nr * nc, &mumps->nest_convert_to_trip… in MatConvertToTriples_nest_xaij()
1535 mumps->nest_convert_to_triples[r * nc + c] = NULL; in MatConvertToTriples_nest_xaij()
1577 mumps->nest_convert_to_triples[r * nc + c] = convert_to_triples; in MatConvertToTriples_nest_xaij()
1612 mumps->nest_vals_start[r * nc + c] = cumnnz; in MatConvertToTriples_nest_xaij()
1615 if (!mumps->nest_convert_to_triples[r * nc + c]) { in MatConvertToTriples_nest_xaij()
1621 if (!mumps->nest_convert_to_triples[r * nc + c]) continue; in MatConvertToTriples_nest_xaij()
1634 PetscCall((*mumps->nest_convert_to_triples[r * nc + c])(sub, 0, MAT_INITIAL_MATRIX, mumps)); in MatConvertToTriples_nest_xaij()
1647 for (PetscInt k = 0; k < mumps->nnz; k++) pjcns_w[k] = mumps->jcn[k]; in MatConvertToTriples_nest_xaij()
1648 …} else pjcns_w = (PetscInt *)mumps->jcn; /* This cast is needed only to silence warnings for 64bit… in MatConvertToTriples_nest_xaij()
1650 PetscCall(PetscIntCast(mumps->nnz, &innz)); in MatConvertToTriples_nest_xaij()
1658 for (PetscInt k = 0; k < mumps->nnz; k++) { in MatConvertToTriples_nest_xaij()
1659 PetscCall(PetscMUMPSIntCast(ridx[mumps->irn[k] - rst] + shift, &jcns[cumnnz + k])); in MatConvertToTriples_nest_xaij()
1663 for (PetscInt k = 0; k < mumps->nnz; k++) { in MatConvertToTriples_nest_xaij()
1664 PetscCall(PetscMUMPSIntCast(ridx[mumps->irn[k] - rst] + shift, &irns[cumnnz + k])); in MatConvertToTriples_nest_xaij()
1672 for (PetscInt k = 0; k < mumps->nnz; k++) v[k] = vscale * PetscConj(mumps->val[k]); in MatConvertToTriples_nest_xaij()
1675 for (PetscInt k = 0; k < mumps->nnz; k++) v[k] = vscale * mumps->val[k]; in MatConvertToTriples_nest_xaij()
1676 } else PetscCall(PetscArraycpy(vals + cumnnz, mumps->val, mumps->nnz)); in MatConvertToTriples_nest_xaij()
1679 cumnnz += mumps->nnz; in MatConvertToTriples_nest_xaij()
1683 PetscCall(PetscFree2(mumps->irn, mumps->jcn)); in MatConvertToTriples_nest_xaij()
1684 PetscCall(PetscFree(mumps->val_alloc)); in MatConvertToTriples_nest_xaij()
1685 mumps->val = NULL; in MatConvertToTriples_nest_xaij()
1686 mumps->nnz = 0; in MatConvertToTriples_nest_xaij()
1689 if (mumps->id.ICNTL(15) == 1) { in MatConvertToTriples_nest_xaij()
1698 PetscCall(PetscMUMPSIntCast(Mbs, &mumps->id.nblk)); in MatConvertToTriples_nest_xaij()
1699 PetscCall(PetscFree(mumps->id.blkptr)); in MatConvertToTriples_nest_xaij()
1700 PetscCall(PetscMalloc1(Mbs + 1, &mumps->id.blkptr)); in MatConvertToTriples_nest_xaij()
1701 mumps->id.blkptr[0] = 1; in MatConvertToTriples_nest_xaij()
1711 …Int j = 0, start = mumps->id.blkptr[shift] + bs; j < ranges[i + 1] - ranges[i]; j += bs) PetscCall… in MatConvertToTriples_nest_xaij()
1716 } else mumps->id.ICNTL(15) = 0; in MatConvertToTriples_nest_xaij()
1723 mumps->nest_vals_start[nr * nc] = cumnnz; in MatConvertToTriples_nest_xaij()
1726 mumps->nest_vals = vals; in MatConvertToTriples_nest_xaij()
1727 …mumps->val_alloc = NULL; /* do not use val_alloc since it may be reallocated with the OMP callpath… in MatConvertToTriples_nest_xaij()
1728 mumps->val = vals; in MatConvertToTriples_nest_xaij()
1729 mumps->irn = irns; in MatConvertToTriples_nest_xaij()
1730 mumps->jcn = jcns; in MatConvertToTriples_nest_xaij()
1731 mumps->nnz = cumnnz; in MatConvertToTriples_nest_xaij()
1733 PetscScalar *oval = mumps->nest_vals; in MatConvertToTriples_nest_xaij()
1741 if (!mumps->nest_convert_to_triples[midx]) continue; in MatConvertToTriples_nest_xaij()
1744 mumps->val = oval + mumps->nest_vals_start[midx]; in MatConvertToTriples_nest_xaij()
1745 PetscCall((*mumps->nest_convert_to_triples[midx])(sub, shift, MAT_REUSE_MATRIX, mumps)); in MatConvertToTriples_nest_xaij()
1747 PetscCount nnz = mumps->nest_vals_start[midx + 1] - mumps->nest_vals_start[midx]; in MatConvertToTriples_nest_xaij()
1748 for (PetscCount k = 0; k < nnz; k++) mumps->val[k] = vscale * PetscConj(mumps->val[k]); in MatConvertToTriples_nest_xaij()
1750 PetscCount nnz = mumps->nest_vals_start[midx + 1] - mumps->nest_vals_start[midx]; in MatConvertToTriples_nest_xaij()
1751 for (PetscCount k = 0; k < nnz; k++) mumps->val[k] *= vscale; in MatConvertToTriples_nest_xaij()
1755 mumps->val = oval; in MatConvertToTriples_nest_xaij()
1762 Mat_MUMPS *mumps = (Mat_MUMPS *)A->data; in MatDestroy_MUMPS() local
1765 PetscCall(PetscFree(mumps->id.isol_loc)); in MatDestroy_MUMPS()
1766 PetscCall(VecScatterDestroy(&mumps->scat_rhs)); in MatDestroy_MUMPS()
1767 PetscCall(VecScatterDestroy(&mumps->scat_sol)); in MatDestroy_MUMPS()
1768 PetscCall(VecDestroy(&mumps->b_seq)); in MatDestroy_MUMPS()
1769 PetscCall(VecDestroy(&mumps->x_seq)); in MatDestroy_MUMPS()
1770 PetscCall(PetscFree(mumps->id.perm_in)); in MatDestroy_MUMPS()
1771 PetscCall(PetscFree(mumps->id.blkvar)); in MatDestroy_MUMPS()
1772 PetscCall(PetscFree(mumps->id.blkptr)); in MatDestroy_MUMPS()
1773 PetscCall(PetscFree2(mumps->irn, mumps->jcn)); in MatDestroy_MUMPS()
1774 PetscCall(PetscFree(mumps->val_alloc)); in MatDestroy_MUMPS()
1775 PetscCall(PetscFree(mumps->info)); in MatDestroy_MUMPS()
1776 PetscCall(PetscFree(mumps->ICNTL_pre)); in MatDestroy_MUMPS()
1777 PetscCall(PetscFree(mumps->CNTL_pre)); in MatDestroy_MUMPS()
1778 PetscCall(MatMumpsResetSchur_Private(mumps)); in MatDestroy_MUMPS()
1779 …if (mumps->id.job != JOB_NULL) { /* cannot call PetscMUMPS_c() if JOB_INIT has never been called f… in MatDestroy_MUMPS()
1780 mumps->id.job = JOB_END; in MatDestroy_MUMPS()
1781 PetscMUMPS_c(mumps); in MatDestroy_MUMPS()
1782 …PetscCheck(mumps->id.INFOG(1) >= 0, PETSC_COMM_SELF, PETSC_ERR_LIB, "MUMPS error in termination: I… in MatDestroy_MUMPS()
1783 if (mumps->mumps_comm != MPI_COMM_NULL) { in MatDestroy_MUMPS()
1784 …if (PetscDefined(HAVE_OPENMP_SUPPORT) && mumps->use_petsc_omp_support) PetscCallMPI(MPI_Comm_free(… in MatDestroy_MUMPS()
1785 else PetscCall(PetscCommRestoreComm(PetscObjectComm((PetscObject)A), &mumps->mumps_comm)); in MatDestroy_MUMPS()
1788 PetscCall(MatMumpsFreeInternalID(&mumps->id)); in MatDestroy_MUMPS()
1790 if (mumps->use_petsc_omp_support) { in MatDestroy_MUMPS()
1791 PetscCall(PetscOmpCtrlDestroy(&mumps->omp_ctrl)); in MatDestroy_MUMPS()
1792 PetscCall(PetscFree2(mumps->rhs_loc, mumps->rhs_recvbuf)); in MatDestroy_MUMPS()
1793 PetscCall(PetscFree3(mumps->rhs_nrow, mumps->rhs_recvcounts, mumps->rhs_disps)); in MatDestroy_MUMPS()
1796 PetscCall(PetscFree(mumps->ia_alloc)); in MatDestroy_MUMPS()
1797 PetscCall(PetscFree(mumps->ja_alloc)); in MatDestroy_MUMPS()
1798 PetscCall(PetscFree(mumps->recvcount)); in MatDestroy_MUMPS()
1799 PetscCall(PetscFree(mumps->reqs)); in MatDestroy_MUMPS()
1800 PetscCall(PetscFree(mumps->irhs_loc)); in MatDestroy_MUMPS()
1801 PetscCall(PetscFree2(mumps->nest_vals_start, mumps->nest_convert_to_triples)); in MatDestroy_MUMPS()
1802 PetscCall(PetscFree(mumps->nest_vals)); in MatDestroy_MUMPS()
1827 Mat_MUMPS *mumps = (Mat_MUMPS *)A->data; in MatMumpsSetUpDistRHSInfo() local
1828 const PetscMPIInt ompsize = mumps->omp_comm_size; in MatMumpsSetUpDistRHSInfo()
1836 if (!mumps->irhs_loc) { in MatMumpsSetUpDistRHSInfo()
1837 mumps->nloc_rhs = (PetscMUMPSInt)m; in MatMumpsSetUpDistRHSInfo()
1838 PetscCall(PetscMalloc1(m, &mumps->irhs_loc)); in MatMumpsSetUpDistRHSInfo()
1840 …for (i = 0; i < m; i++) PetscCall(PetscMUMPSIntCast(rstart + i + 1, &mumps->irhs_loc[i])); /* use … in MatMumpsSetUpDistRHSInfo()
1842 …sMakeMumpsScalarArray(PETSC_TRUE, m * nrhs, array, mumps->id.precision, &mumps->id.rhs_loc_len, &m… in MatMumpsSetUpDistRHSInfo()
1850 if (mumps->is_omp_master) { in MatMumpsSetUpDistRHSInfo()
1852 if (!mumps->irhs_loc) { in MatMumpsSetUpDistRHSInfo()
1854 …PetscCall(PetscMalloc3(ompsize, &mumps->rhs_nrow, ompsize, &mumps->rhs_recvcounts, ompsize, &mumps… in MatMumpsSetUpDistRHSInfo()
1855 PetscCallMPI(MPI_Comm_group(mumps->petsc_comm, &petsc_group)); in MatMumpsSetUpDistRHSInfo()
1856 PetscCallMPI(MPI_Comm_group(mumps->omp_comm, &omp_group)); in MatMumpsSetUpDistRHSInfo()
1861 mumps->nloc_rhs = 0; in MatMumpsSetUpDistRHSInfo()
1864 mumps->rhs_nrow[j] = ranges[petsc_ranks[j] + 1] - ranges[petsc_ranks[j]]; in MatMumpsSetUpDistRHSInfo()
1865 mumps->nloc_rhs += mumps->rhs_nrow[j]; in MatMumpsSetUpDistRHSInfo()
1867 PetscCall(PetscMalloc1(mumps->nloc_rhs, &mumps->irhs_loc)); in MatMumpsSetUpDistRHSInfo()
1869 …ranges[petsc_ranks[j] + 1]; i++, k++) PetscCall(PetscMUMPSIntCast(i + 1, &mumps->irhs_loc[k])); /*… in MatMumpsSetUpDistRHSInfo()
1878 if (nrhs > mumps->max_nrhs) { in MatMumpsSetUpDistRHSInfo()
1879 PetscCall(PetscFree2(mumps->rhs_loc, mumps->rhs_recvbuf)); in MatMumpsSetUpDistRHSInfo()
1880 …PetscCall(PetscMalloc2(mumps->nloc_rhs * nrhs, &mumps->rhs_loc, mumps->nloc_rhs * nrhs, &mumps->rh… in MatMumpsSetUpDistRHSInfo()
1881 mumps->max_nrhs = nrhs; in MatMumpsSetUpDistRHSInfo()
1885 …for (j = 0; j < ompsize; j++) PetscCall(PetscMPIIntCast(mumps->rhs_nrow[j] * nrhs, &mumps->rhs_rec… in MatMumpsSetUpDistRHSInfo()
1886 mumps->rhs_disps[0] = 0; in MatMumpsSetUpDistRHSInfo()
1888 mumps->rhs_disps[j] = mumps->rhs_disps[j - 1] + mumps->rhs_recvcounts[j - 1]; in MatMumpsSetUpDistRHSInfo()
1889 …PetscCheck(mumps->rhs_disps[j] >= 0, PETSC_COMM_SELF, PETSC_ERR_ARG_OUTOFRANGE, "PetscMPIInt overf… in MatMumpsSetUpDistRHSInfo()
1891 …recvbuf = (nrhs == 1) ? mumps->rhs_loc : mumps->rhs_recvbuf; /* Directly use rhs_loc[] as recvbuf.… in MatMumpsSetUpDistRHSInfo()
1895 …herv(array, sendcount, MPIU_SCALAR, recvbuf, mumps->rhs_recvcounts, mumps->rhs_disps, MPIU_SCALAR,… in MatMumpsSetUpDistRHSInfo()
1897 if (mumps->is_omp_master) { in MatMumpsSetUpDistRHSInfo()
1899 PetscScalar *dst, *dstbase = mumps->rhs_loc; in MatMumpsSetUpDistRHSInfo()
1901 const PetscScalar *src = mumps->rhs_recvbuf + mumps->rhs_disps[j]; in MatMumpsSetUpDistRHSInfo()
1904 PetscCall(PetscArraycpy(dst, src, mumps->rhs_nrow[j])); in MatMumpsSetUpDistRHSInfo()
1905 src += mumps->rhs_nrow[j]; in MatMumpsSetUpDistRHSInfo()
1906 dst += mumps->nloc_rhs; in MatMumpsSetUpDistRHSInfo()
1908 dstbase += mumps->rhs_nrow[j]; in MatMumpsSetUpDistRHSInfo()
1911 …keMumpsScalarArray(PETSC_TRUE, mumps->nloc_rhs * nrhs, mumps->rhs_loc, mumps->id.precision, &mumps… in MatMumpsSetUpDistRHSInfo()
1915 mumps->id.nrhs = (PetscMUMPSInt)nrhs; in MatMumpsSetUpDistRHSInfo()
1916 mumps->id.nloc_rhs = (PetscMUMPSInt)mumps->nloc_rhs; in MatMumpsSetUpDistRHSInfo()
1917 mumps->id.lrhs_loc = mumps->nloc_rhs; in MatMumpsSetUpDistRHSInfo()
1918 mumps->id.irhs_loc = mumps->irhs_loc; in MatMumpsSetUpDistRHSInfo()
1924 Mat_MUMPS *mumps = (Mat_MUMPS *)A->data; in MatSolve_MUMPS() local
1942 …called with singular matrix factor, INFOG(1)=%d, INFO(2)=%d\n", mumps->id.INFOG(1), mumps->id.INFO… in MatSolve_MUMPS()
1946 mumps->id.nrhs = 1; in MatSolve_MUMPS()
1947 if (mumps->petsc_size > 1) { in MatSolve_MUMPS()
1948 if (mumps->ICNTL20 == 10) { in MatSolve_MUMPS()
1949 mumps->id.ICNTL(20) = 10; /* dense distributed RHS, need to set rhs_loc[], irhs_loc[] */ in MatSolve_MUMPS()
1953 mumps->id.ICNTL(20) = 0; /* dense centralized RHS; Scatter b into a sequential b_seq vector*/ in MatSolve_MUMPS()
1954 PetscCall(VecScatterBegin(mumps->scat_rhs, b, mumps->b_seq, INSERT_VALUES, SCATTER_FORWARD)); in MatSolve_MUMPS()
1955 PetscCall(VecScatterEnd(mumps->scat_rhs, b, mumps->b_seq, INSERT_VALUES, SCATTER_FORWARD)); in MatSolve_MUMPS()
1956 if (!mumps->myid) { in MatSolve_MUMPS()
1957 PetscCall(VecGetArray(mumps->b_seq, &array)); in MatSolve_MUMPS()
1958 …MumpsMakeMumpsScalarArray(PETSC_TRUE, mumps->b_seq->map->n, array, mumps->id.precision, &mumps->id… in MatSolve_MUMPS()
1962 mumps->id.ICNTL(20) = 0; in MatSolve_MUMPS()
1965 …psMakeMumpsScalarArray(PETSC_TRUE, x->map->n, array, mumps->id.precision, &mumps->id.rhs_len, &mum… in MatSolve_MUMPS()
1975 if (mumps->id.size_schur > 0) { in MatSolve_MUMPS()
1976 …PetscCheck(mumps->petsc_size <= 1, PetscObjectComm((PetscObject)A), PETSC_ERR_SUP, "Parallel Schur… in MatSolve_MUMPS()
1977 if (mumps->id.ICNTL(26) < 0 || mumps->id.ICNTL(26) > 2) { in MatSolve_MUMPS()
1980 mumps->id.ICNTL(26) = 1; /* condensation phase */ in MatSolve_MUMPS()
1981 } else if (mumps->id.ICNTL(26) == 1) PetscCall(MatMumpsHandleSchur_Private(A, PETSC_FALSE)); in MatSolve_MUMPS()
1984 mumps->id.job = JOB_SOLVE; in MatSolve_MUMPS()
1985 PetscMUMPS_c(mumps); // reduced solve, put solution in id.redrhs in MatSolve_MUMPS()
1986 …ck(mumps->id.INFOG(1) >= 0, PETSC_COMM_SELF, PETSC_ERR_LIB, "MUMPS error in solve: INFOG(1)=%d, IN… in MatSolve_MUMPS()
1990 else if (mumps->id.ICNTL(26) == 1) { // condense the right hand side in MatSolve_MUMPS()
1992 …for (i = 0; i < mumps->id.size_schur; ++i) array[mumps->id.listvar_schur[i] - 1] = ID_FIELD_GET(mu… in MatSolve_MUMPS()
1995 if (mumps->petsc_size > 1) { /* convert mumps distributed solution to PETSc mpi x */ in MatSolve_MUMPS()
1996 if (mumps->scat_sol && mumps->ICNTL9_pre != mumps->id.ICNTL(9)) { in MatSolve_MUMPS()
1998 PetscCall(VecScatterDestroy(&mumps->scat_sol)); in MatSolve_MUMPS()
2000 if (!mumps->scat_sol) { /* create scatter scat_sol */ in MatSolve_MUMPS()
2002 PetscCall(ISCreateStride(PETSC_COMM_SELF, mumps->id.lsol_loc, 0, 1, &is_iden)); /* from */ in MatSolve_MUMPS()
2003 PetscCall(PetscMalloc1(mumps->id.lsol_loc, &isol2_loc)); in MatSolve_MUMPS()
2004 …for (i = 0; i < mumps->id.lsol_loc; i++) isol2_loc[i] = mumps->id.isol_loc[i] - 1; … in MatSolve_MUMPS()
2005 …PetscCall(ISCreateGeneral(PETSC_COMM_SELF, mumps->id.lsol_loc, isol2_loc, PETSC_OWN_POINTER, &is_p… in MatSolve_MUMPS()
2006 PetscCall(VecScatterCreate(mumps->x_seq, is_iden, x, is_petsc, &mumps->scat_sol)); in MatSolve_MUMPS()
2009 mumps->ICNTL9_pre = mumps->id.ICNTL(9); /* save current value of id.ICNTL(9) */ in MatSolve_MUMPS()
2013 PetscCall(VecGetArray(mumps->x_seq, &xarray)); in MatSolve_MUMPS()
2014 …PetscCall(MatMumpsCastMumpsScalarArray(mumps->id.lsol_loc, mumps->id.precision, mumps->id.sol_loc,… in MatSolve_MUMPS()
2015 PetscCall(VecRestoreArray(mumps->x_seq, &xarray)); in MatSolve_MUMPS()
2016 PetscCall(VecScatterBegin(mumps->scat_sol, mumps->x_seq, x, INSERT_VALUES, SCATTER_FORWARD)); in MatSolve_MUMPS()
2017 PetscCall(VecScatterEnd(mumps->scat_sol, mumps->x_seq, x, INSERT_VALUES, SCATTER_FORWARD)); in MatSolve_MUMPS()
2019 if (mumps->ICNTL20 == 10) { // distributed RHS in MatSolve_MUMPS()
2021 } else if (!mumps->myid) { // centralized RHS in MatSolve_MUMPS()
2022 PetscCall(VecRestoreArray(mumps->b_seq, &array)); in MatSolve_MUMPS()
2026 PetscCall(MatMumpsCastMumpsScalarArray(x->map->n, mumps->id.precision, mumps->id.rhs, array)); in MatSolve_MUMPS()
2030 …PetscCall(PetscLogFlops(2.0 * PetscMax(0, (mumps->id.INFO(28) >= 0 ? mumps->id.INFO(28) : -1000000… in MatSolve_MUMPS()
2036 Mat_MUMPS *mumps = (Mat_MUMPS *)A->data; in MatSolveTranspose_MUMPS() local
2037 const PetscMUMPSInt value = mumps->id.ICNTL(9); in MatSolveTranspose_MUMPS()
2040 mumps->id.ICNTL(9) = 0; in MatSolveTranspose_MUMPS()
2042 mumps->id.ICNTL(9) = value; in MatSolveTranspose_MUMPS()
2050 Mat_MUMPS *mumps = (Mat_MUMPS *)A->data; in MatMatSolve_MUMPS() local
2078 mumps->id.ICNTL(20) = 0; /* dense RHS */ in MatMatSolve_MUMPS()
2087 mumps->id.ICNTL(20) = 1; /* sparse RHS */ in MatMatSolve_MUMPS()
2092 mumps->id.nrhs = (PetscMUMPSInt)nrhs; in MatMatSolve_MUMPS()
2093 mumps->id.lrhs = (PetscMUMPSInt)M; in MatMatSolve_MUMPS()
2095 if (mumps->petsc_size == 1) { // handle this easy case specially and return early in MatMatSolve_MUMPS()
2110 …PetscCall(PetscMUMPSIntCSRCast(mumps, spnr, ia, ja, &mumps->id.irhs_ptr, &mumps->id.irhs_sparse, &… in MatMatSolve_MUMPS()
2111 …MumpsMakeMumpsScalarArray(PETSC_TRUE, mumps->id.nz_rhs, aa, mumps->id.precision, &mumps->id.rhs_sp… in MatMatSolve_MUMPS()
2113 …l(MatMumpsMakeMumpsScalarArray(denseB, nrhsM, array, mumps->id.precision, &mumps->id.rhs_len, &mum… in MatMatSolve_MUMPS()
2116 if (mumps->id.size_schur > 0) { in MatMatSolve_MUMPS()
2117 if (mumps->id.ICNTL(26) < 0 || mumps->id.ICNTL(26) > 2) { in MatMatSolve_MUMPS()
2120 …mumps->id.ICNTL(26) = 1; /* condensation phase, i.e, to solve id.re… in MatMatSolve_MUMPS()
2121 } else if (mumps->id.ICNTL(26) == 1) PetscCall(MatMumpsHandleSchur_Private(A, PETSC_FALSE)); in MatMatSolve_MUMPS()
2124 mumps->id.job = JOB_SOLVE; in MatMatSolve_MUMPS()
2125 PetscMUMPS_c(mumps); in MatMatSolve_MUMPS()
2126 …ck(mumps->id.INFOG(1) >= 0, PETSC_COMM_SELF, PETSC_ERR_LIB, "MUMPS error in solve: INFOG(1)=%d, IN… in MatMatSolve_MUMPS()
2130 else if (mumps->id.ICNTL(26) == 1) { // condense the right hand side in MatMatSolve_MUMPS()
2133 …for (i = 0; i < mumps->id.size_schur; ++i) array[mumps->id.listvar_schur[i] - 1 + j * M] = ID_FIEL… in MatMatSolve_MUMPS()
2143 PetscCall(MatMumpsCastMumpsScalarArray(nrhsM, mumps->id.precision, mumps->id.rhs, array)); in MatMatSolve_MUMPS()
2149 …PetscCheck(!mumps->id.ICNTL(19), PetscObjectComm((PetscObject)A), PETSC_ERR_SUP, "Parallel Schur c… in MatMatSolve_MUMPS()
2152 …isol_loc_save = mumps->id.isol_loc; /* save these, as we want to reuse them in MatSolve() … in MatMatSolve_MUMPS()
2153 sol_loc_save = mumps->id.sol_loc; in MatMatSolve_MUMPS()
2154 sol_loc_len_save = mumps->id.sol_loc_len; in MatMatSolve_MUMPS()
2155 mumps->id.isol_loc = NULL; // an init state in MatMatSolve_MUMPS()
2156 mumps->id.sol_loc = NULL; in MatMatSolve_MUMPS()
2157 mumps->id.sol_loc_len = 0; in MatMatSolve_MUMPS()
2159 lsol_loc = mumps->id.lsol_loc; in MatMatSolve_MUMPS()
2162 …eMumpsScalarArray(PETSC_FALSE, nlsol_loc, sol_loc, mumps->id.precision, &mumps->id.sol_loc_len, &m… in MatMatSolve_MUMPS()
2163 mumps->id.isol_loc = isol_loc; in MatMatSolve_MUMPS()
2168 if (mumps->ICNTL20 == 10) { in MatMatSolve_MUMPS()
2169 mumps->id.ICNTL(20) = 10; /* dense distributed RHS */ in MatMatSolve_MUMPS()
2176 mumps->id.ICNTL(20) = 0; /* dense centralized RHS */ in MatMatSolve_MUMPS()
2190 if (!mumps->myid) { in MatMatSolve_MUMPS()
2195 for (proc = 0, k = 0; proc < mumps->petsc_size; proc++) { in MatMatSolve_MUMPS()
2216 if (!mumps->myid) { /* define rhs on the host */ in MatMatSolve_MUMPS()
2218 …MumpsMakeMumpsScalarArray(PETSC_TRUE, nrhsM, barray, mumps->id.precision, &mumps->id.rhs_len, &mum… in MatMatSolve_MUMPS()
2231 if (!mumps->myid) { in MatMatSolve_MUMPS()
2235 …PetscCall(PetscMUMPSIntCSRCast(mumps, spnr, ia, ja, &mumps->id.irhs_ptr, &mumps->id.irhs_sparse, &… in MatMatSolve_MUMPS()
2236 …(PETSC_TRUE, ((Mat_SeqAIJ *)b->A->data)->nz, aa, mumps->id.precision, &mumps->id.rhs_sparse_len, &… in MatMatSolve_MUMPS()
2238 mumps->id.irhs_ptr = NULL; in MatMatSolve_MUMPS()
2239 mumps->id.irhs_sparse = NULL; in MatMatSolve_MUMPS()
2240 mumps->id.nz_rhs = 0; in MatMatSolve_MUMPS()
2241 if (mumps->id.rhs_sparse_len) { in MatMatSolve_MUMPS()
2242 PetscCall(PetscFree(mumps->id.rhs_sparse)); in MatMatSolve_MUMPS()
2243 mumps->id.rhs_sparse_len = 0; in MatMatSolve_MUMPS()
2249 mumps->id.job = JOB_SOLVE; in MatMatSolve_MUMPS()
2250 PetscMUMPS_c(mumps); in MatMatSolve_MUMPS()
2251 …PetscCheck(mumps->id.INFOG(1) >= 0, PETSC_COMM_SELF, PETSC_ERR_LIB, "MUMPS error in solve: INFOG(1… in MatMatSolve_MUMPS()
2266 for (proc = 0; proc < mumps->petsc_size; proc++) { in MatMatSolve_MUMPS()
2279 …PetscCall(MatMumpsCastMumpsScalarArray(nlsol_loc, mumps->id.precision, mumps->id.sol_loc, sol_loc)… in MatMatSolve_MUMPS()
2287 if (mumps->id.sol_loc_len) { // in case we allocated intermediate buffers in MatMatSolve_MUMPS()
2288 mumps->id.sol_loc_len = 0; in MatMatSolve_MUMPS()
2289 PetscCall(PetscFree(mumps->id.sol_loc)); in MatMatSolve_MUMPS()
2293 mumps->id.sol_loc = sol_loc_save; in MatMatSolve_MUMPS()
2294 mumps->id.sol_loc_len = sol_loc_len_save; in MatMatSolve_MUMPS()
2295 mumps->id.isol_loc = isol_loc_save; in MatMatSolve_MUMPS()
2302 if (!mumps->myid) { in MatMatSolve_MUMPS()
2309 if (mumps->ICNTL20 == 0) { in MatMatSolve_MUMPS()
2315 …Call(PetscLogFlops(nrhs * PetscMax(0, 2.0 * (mumps->id.INFO(28) >= 0 ? mumps->id.INFO(28) : -10000… in MatMatSolve_MUMPS()
2321 Mat_MUMPS *mumps = (Mat_MUMPS *)A->data; in MatMatSolveTranspose_MUMPS() local
2322 const PetscMUMPSInt value = mumps->id.ICNTL(9); in MatMatSolveTranspose_MUMPS()
2325 mumps->id.ICNTL(9) = 0; in MatMatSolveTranspose_MUMPS()
2327 mumps->id.ICNTL(9) = value; in MatMatSolveTranspose_MUMPS()
2359 Mat_MUMPS *mumps = (Mat_MUMPS *)F->data; in MatGetInertia_SBAIJMUMPS() local
2365 …mumps->id.ICNTL(13) == 1, PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "ICNTL(13)=%d. -mat_mumps_icntl_13… in MatGetInertia_SBAIJMUMPS()
2367 if (nneg) *nneg = mumps->id.INFOG(12); in MatGetInertia_SBAIJMUMPS()
2369 …PetscCheck(mumps->id.ICNTL(24) == 1, PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "-mat_mumps_icntl_24 mu… in MatGetInertia_SBAIJMUMPS()
2370 if (nzero) *nzero = mumps->id.INFOG(28); in MatGetInertia_SBAIJMUMPS()
2371 if (npos) *npos = F->rmap->N - (mumps->id.INFOG(12) + mumps->id.INFOG(28)); in MatGetInertia_SBAIJMUMPS()
2377 static PetscErrorCode MatMumpsGatherNonzerosOnMaster(MatReuse reuse, Mat_MUMPS *mumps) in MatMumpsGatherNonzerosOnMaster() argument
2383 const PetscInt osize = mumps->omp_comm_size; in MatMumpsGatherNonzerosOnMaster()
2390 if (mumps->is_omp_master) PetscCall(PetscMalloc1(osize, &mumps->recvcount)); in MatMumpsGatherNonzerosOnMaster()
2391 …PetscCallMPI(MPI_Gather(&mumps->nnz, 1, MPIU_INT64, mumps->recvcount, 1, MPIU_INT64, 0 /*master*/,… in MatMumpsGatherNonzerosOnMaster()
2394 if (mumps->is_omp_master) { in MatMumpsGatherNonzerosOnMaster()
2397 …for (PetscMPIInt i = 1; i < osize; i++) nreqs += (mumps->recvcount[i] + PETSC_MPI_INT_MAX - 1) / P… in MatMumpsGatherNonzerosOnMaster()
2399 nreqs = (PetscMPIInt)(((mumps->nnz + PETSC_MPI_INT_MAX - 1) / PETSC_MPI_INT_MAX)); in MatMumpsGatherNonzerosOnMaster()
2401 …PetscCall(PetscMalloc1(nreqs * 3, &mumps->reqs)); /* Triple the requests since we send irn, jcn an… in MatMumpsGatherNonzerosOnMaster()
2409 if (mumps->is_omp_master) { in MatMumpsGatherNonzerosOnMaster()
2412 …for (PetscMPIInt i = 0; i < osize; i++) totnnz += mumps->recvcount[i]; /* totnnz = sum of nnz over… in MatMumpsGatherNonzerosOnMaster()
2417 PetscCall(PetscArraycpy(irn, mumps->irn, mumps->nnz)); in MatMumpsGatherNonzerosOnMaster()
2418 PetscCall(PetscArraycpy(jcn, mumps->jcn, mumps->nnz)); in MatMumpsGatherNonzerosOnMaster()
2419 PetscCall(PetscArraycpy(val, mumps->val, mumps->nnz)); in MatMumpsGatherNonzerosOnMaster()
2422 PetscCall(PetscFree2(mumps->irn, mumps->jcn)); in MatMumpsGatherNonzerosOnMaster()
2423 PetscCall(PetscFree(mumps->val_alloc)); in MatMumpsGatherNonzerosOnMaster()
2424 mumps->nnz = totnnz; in MatMumpsGatherNonzerosOnMaster()
2425 mumps->irn = irn; in MatMumpsGatherNonzerosOnMaster()
2426 mumps->jcn = jcn; in MatMumpsGatherNonzerosOnMaster()
2427 mumps->val = mumps->val_alloc = val; in MatMumpsGatherNonzerosOnMaster()
2429 irn += mumps->recvcount[0]; /* recvcount[0] is old mumps->nnz on omp rank 0 */ in MatMumpsGatherNonzerosOnMaster()
2430 jcn += mumps->recvcount[0]; in MatMumpsGatherNonzerosOnMaster()
2431 val += mumps->recvcount[0]; in MatMumpsGatherNonzerosOnMaster()
2435 count = (PetscMPIInt)PetscMin(mumps->recvcount[i], (PetscMPIInt)PETSC_MPI_INT_MAX); in MatMumpsGatherNonzerosOnMaster()
2436 remain = mumps->recvcount[i] - count; in MatMumpsGatherNonzerosOnMaster()
2438 …PetscCallMPI(MPIU_Irecv(irn, count, MPIU_MUMPSINT, i, mumps->tag, mumps->omp_comm, &mumps->reqs[nr… in MatMumpsGatherNonzerosOnMaster()
2439 …PetscCallMPI(MPIU_Irecv(jcn, count, MPIU_MUMPSINT, i, mumps->tag, mumps->omp_comm, &mumps->reqs[nr… in MatMumpsGatherNonzerosOnMaster()
2440 …PetscCallMPI(MPIU_Irecv(val, count, MPIU_SCALAR, i, mumps->tag, mumps->omp_comm, &mumps->reqs[nreq… in MatMumpsGatherNonzerosOnMaster()
2449 irn = mumps->irn; in MatMumpsGatherNonzerosOnMaster()
2450 jcn = mumps->jcn; in MatMumpsGatherNonzerosOnMaster()
2451 val = mumps->val; in MatMumpsGatherNonzerosOnMaster()
2452 count = (PetscMPIInt)PetscMin(mumps->nnz, (PetscMPIInt)PETSC_MPI_INT_MAX); in MatMumpsGatherNonzerosOnMaster()
2453 remain = mumps->nnz - count; in MatMumpsGatherNonzerosOnMaster()
2455 …PetscCallMPI(MPIU_Isend(irn, count, MPIU_MUMPSINT, 0, mumps->tag, mumps->omp_comm, &mumps->reqs[nr… in MatMumpsGatherNonzerosOnMaster()
2456 …PetscCallMPI(MPIU_Isend(jcn, count, MPIU_MUMPSINT, 0, mumps->tag, mumps->omp_comm, &mumps->reqs[nr… in MatMumpsGatherNonzerosOnMaster()
2457 …PetscCallMPI(MPIU_Isend(val, count, MPIU_SCALAR, 0, mumps->tag, mumps->omp_comm, &mumps->reqs[nreq… in MatMumpsGatherNonzerosOnMaster()
2467 if (mumps->is_omp_master) { in MatMumpsGatherNonzerosOnMaster()
2468 val = mumps->val + mumps->recvcount[0]; in MatMumpsGatherNonzerosOnMaster()
2470 count = (PetscMPIInt)PetscMin(mumps->recvcount[i], (PetscMPIInt)PETSC_MPI_INT_MAX); in MatMumpsGatherNonzerosOnMaster()
2471 remain = mumps->recvcount[i] - count; in MatMumpsGatherNonzerosOnMaster()
2473 …PetscCallMPI(MPIU_Irecv(val, count, MPIU_SCALAR, i, mumps->tag, mumps->omp_comm, &mumps->reqs[nreq… in MatMumpsGatherNonzerosOnMaster()
2480 val = mumps->val; in MatMumpsGatherNonzerosOnMaster()
2481 count = (PetscMPIInt)PetscMin(mumps->nnz, (PetscMPIInt)PETSC_MPI_INT_MAX); in MatMumpsGatherNonzerosOnMaster()
2482 remain = mumps->nnz - count; in MatMumpsGatherNonzerosOnMaster()
2484 …PetscCallMPI(MPIU_Isend(val, count, MPIU_SCALAR, 0, mumps->tag, mumps->omp_comm, &mumps->reqs[nreq… in MatMumpsGatherNonzerosOnMaster()
2491 PetscCallMPI(MPI_Waitall(nreqs, mumps->reqs, MPI_STATUSES_IGNORE)); in MatMumpsGatherNonzerosOnMaster()
2492 mumps->tag++; /* It is totally fine for above send/recvs to share one mpi tag */ in MatMumpsGatherNonzerosOnMaster()
2499 Mat_MUMPS *mumps = (Mat_MUMPS *)F->data; in MatFactorNumeric_MUMPS() local
2502 if (mumps->id.INFOG(1) < 0 && !(mumps->id.INFOG(1) == -16 && mumps->id.INFOG(1) == 0)) { in MatFactorNumeric_MUMPS()
2503 …mumps->id.INFOG(1) == -6) PetscCall(PetscInfo(A, "MatFactorNumeric is called with singular matrix … in MatFactorNumeric_MUMPS()
2504 … called after analysis phase fails, INFOG(1)=%d, INFO(2)=%d\n", mumps->id.INFOG(1), mumps->id.INFO… in MatFactorNumeric_MUMPS()
2508 PetscCall((*mumps->ConvertToTriples)(A, 1, MAT_REUSE_MATRIX, mumps)); in MatFactorNumeric_MUMPS()
2509 PetscCall(MatMumpsGatherNonzerosOnMaster(MAT_REUSE_MATRIX, mumps)); in MatFactorNumeric_MUMPS()
2512 mumps->id.job = JOB_FACTNUMERIC; in MatFactorNumeric_MUMPS()
2513 if (!mumps->id.ICNTL(18)) { /* A is centralized */ in MatFactorNumeric_MUMPS()
2514 …if (!mumps->myid) PetscCall(MatMumpsMakeMumpsScalarArray(PETSC_TRUE, mumps->nnz, mumps->val, mumps… in MatFactorNumeric_MUMPS()
2516 …atMumpsMakeMumpsScalarArray(PETSC_TRUE, mumps->nnz, mumps->val, mumps->id.precision, &mumps->id.a_… in MatFactorNumeric_MUMPS()
2521 MUMPS_INT size = mumps->id.size_schur; in MatFactorNumeric_MUMPS()
2523 …keMumpsScalarArray(PETSC_FALSE, size * size, array, mumps->id.precision, &mumps->id.schur_len, &mu… in MatFactorNumeric_MUMPS()
2527 …if (mumps->id.ICNTL(22)) PetscCall(PetscStrncpy(mumps->id.ooc_prefix, ((PetscObject)F)->prefix, si… in MatFactorNumeric_MUMPS()
2529 PetscMUMPS_c(mumps); in MatFactorNumeric_MUMPS()
2530 if (mumps->id.INFOG(1) < 0) { in MatFactorNumeric_MUMPS()
2531 …merical factorization: INFOG(1)=%d, INFO(2)=%d " MUMPS_MANUALS, mumps->id.INFOG(1), mumps->id.INFO… in MatFactorNumeric_MUMPS()
2532 if (mumps->id.INFOG(1) == -10) { in MatFactorNumeric_MUMPS()
2533 …on: matrix is numerically singular, INFOG(1)=%d, INFO(2)=%d\n", mumps->id.INFOG(1), mumps->id.INFO… in MatFactorNumeric_MUMPS()
2535 } else if (mumps->id.INFOG(1) == -13) { in MatFactorNumeric_MUMPS()
2536 …: INFOG(1)=%d, cannot allocate required memory %d megabytes\n", mumps->id.INFOG(1), mumps->id.INFO… in MatFactorNumeric_MUMPS()
2538 …} else if (mumps->id.INFOG(1) == -8 || mumps->id.INFOG(1) == -9 || (-16 < mumps->id.INFOG(1) && mu… in MatFactorNumeric_MUMPS()
2539 …orization: INFOG(1)=%d, INFO(2)=%d, problem with work array\n", mumps->id.INFOG(1), mumps->id.INFO… in MatFactorNumeric_MUMPS()
2542 …S error in numerical factorization: INFOG(1)=%d, INFO(2)=%d\n", mumps->id.INFOG(1), mumps->id.INFO… in MatFactorNumeric_MUMPS()
2546 …k(mumps->myid || mumps->id.ICNTL(16) <= 0, PETSC_COMM_SELF, PETSC_ERR_LIB, "MUMPS error in numeric… in MatFactorNumeric_MUMPS()
2556 …PetscCall(MatMumpsCastMumpsScalarArray(mumps->id.size_schur * mumps->id.size_schur, mumps->id.prec… in MatFactorNumeric_MUMPS()
2558 if (mumps->id.ICNTL(19) == 1) { /* stored by rows */ in MatFactorNumeric_MUMPS()
2559 mumps->id.ICNTL(19) = 2; in MatFactorNumeric_MUMPS()
2566 if (!mumps->sym && mumps->id.ICNTL(19) && mumps->id.ICNTL(19) != 1) mumps->id.ICNTL(19) = 3; in MatFactorNumeric_MUMPS()
2568 if (!mumps->is_omp_master) mumps->id.INFO(23) = 0; in MatFactorNumeric_MUMPS()
2576 if (mumps->petsc_size > 1) { in MatFactorNumeric_MUMPS()
2581 if (mumps->x_seq) { in MatFactorNumeric_MUMPS()
2582 PetscCall(VecScatterDestroy(&mumps->scat_sol)); in MatFactorNumeric_MUMPS()
2583 PetscCall(PetscFree(mumps->id.isol_loc)); in MatFactorNumeric_MUMPS()
2584 PetscCall(VecDestroy(&mumps->x_seq)); in MatFactorNumeric_MUMPS()
2586 lsol_loc = mumps->id.INFO(23); /* length of sol_loc */ in MatFactorNumeric_MUMPS()
2587 PetscCall(PetscMalloc1(lsol_loc, &mumps->id.isol_loc)); in MatFactorNumeric_MUMPS()
2588 PetscCall(VecCreateSeq(PETSC_COMM_SELF, lsol_loc, &mumps->x_seq)); in MatFactorNumeric_MUMPS()
2589 PetscCall(VecGetArray(mumps->x_seq, &array)); in MatFactorNumeric_MUMPS()
2590 …MakeMumpsScalarArray(PETSC_FALSE, lsol_loc, array, mumps->id.precision, &mumps->id.sol_loc_len, &m… in MatFactorNumeric_MUMPS()
2591 PetscCall(VecRestoreArray(mumps->x_seq, &array)); in MatFactorNumeric_MUMPS()
2592 mumps->id.lsol_loc = (PetscMUMPSInt)lsol_loc; in MatFactorNumeric_MUMPS()
2594 PetscCall(PetscLogFlops((double)ID_RINFO_GET(mumps->id, 2))); in MatFactorNumeric_MUMPS()
2601 Mat_MUMPS *mumps = (Mat_MUMPS *)F->data; in MatSetFromOptions_MUMPS() local
2606 …PetscBool schur = mumps->id.icntl ? (PetscBool)(mumps->id.ICNTL(26) == -1) : (PetscBool)(mumps… in MatSetFromOptions_MUMPS()
2611 if (mumps->id.job == JOB_NULL) { /* MatSetFromOptions_MUMPS() has never been called before */ in MatSetFromOptions_MUMPS()
2614 PetscInt nCNTL_pre = mumps->CNTL_pre ? mumps->CNTL_pre[0] : 0; in MatSetFromOptions_MUMPS()
2615 PetscInt nICNTL_pre = mumps->ICNTL_pre ? mumps->ICNTL_pre[0] : 0; in MatSetFromOptions_MUMPS()
2618 mumps->petsc_comm = PetscObjectComm((PetscObject)A); in MatSetFromOptions_MUMPS()
2619 PetscCallMPI(MPI_Comm_size(mumps->petsc_comm, &mumps->petsc_size)); in MatSetFromOptions_MUMPS()
2620 …PetscCallMPI(MPI_Comm_rank(mumps->petsc_comm, &mumps->myid)); /* "if (!myid)" still works even if … in MatSetFromOptions_MUMPS()
2622 …s_use_omp_threads", "Convert MPI processes into OpenMP threads", "None", &mumps->use_petsc_omp_sup… in MatSetFromOptions_MUMPS()
2623 …if (mumps->use_petsc_omp_support) nthreads = -1; /* -1 will let PetscOmpCtrlCreate() guess a prope… in MatSetFromOptions_MUMPS()
2626 if (mumps->use_petsc_omp_support) { in MatSetFromOptions_MUMPS()
2629 PetscCall(PetscOmpCtrlCreate(mumps->petsc_comm, nthreads, &mumps->omp_ctrl)); in MatSetFromOptions_MUMPS()
2630 …PetscCall(PetscOmpCtrlGetOmpComms(mumps->omp_ctrl, &mumps->omp_comm, &mumps->mumps_comm, &mumps->i… in MatSetFromOptions_MUMPS()
2636 mumps->omp_comm = PETSC_COMM_SELF; in MatSetFromOptions_MUMPS()
2637 mumps->mumps_comm = mumps->petsc_comm; in MatSetFromOptions_MUMPS()
2638 mumps->is_omp_master = PETSC_TRUE; in MatSetFromOptions_MUMPS()
2640 PetscCallMPI(MPI_Comm_size(mumps->omp_comm, &mumps->omp_comm_size)); in MatSetFromOptions_MUMPS()
2641 mumps->reqs = NULL; in MatSetFromOptions_MUMPS()
2642 mumps->tag = 0; in MatSetFromOptions_MUMPS()
2644 if (mumps->mumps_comm != MPI_COMM_NULL) { in MatSetFromOptions_MUMPS()
2645 if (PetscDefined(HAVE_OPENMP_SUPPORT) && mumps->use_petsc_omp_support) { in MatSetFromOptions_MUMPS()
2648 PetscCallMPI(MPI_Comm_dup(mumps->mumps_comm, &comm)); in MatSetFromOptions_MUMPS()
2649 mumps->mumps_comm = comm; in MatSetFromOptions_MUMPS()
2650 } else PetscCall(PetscCommGetComm(mumps->petsc_comm, &mumps->mumps_comm)); in MatSetFromOptions_MUMPS()
2653 mumps->id.comm_fortran = MPI_Comm_c2f(mumps->mumps_comm); in MatSetFromOptions_MUMPS()
2654 mumps->id.job = JOB_INIT; in MatSetFromOptions_MUMPS()
2655 mumps->id.par = 1; /* host participates factorizaton and solve */ in MatSetFromOptions_MUMPS()
2656 mumps->id.sym = mumps->sym; in MatSetFromOptions_MUMPS()
2658 size = mumps->id.size_schur; in MatSetFromOptions_MUMPS()
2659 arr = mumps->id.schur; in MatSetFromOptions_MUMPS()
2660 listvar_schur = mumps->id.listvar_schur; in MatSetFromOptions_MUMPS()
2661 nblk = mumps->id.nblk; in MatSetFromOptions_MUMPS()
2662 blkvar = mumps->id.blkvar; in MatSetFromOptions_MUMPS()
2663 blkptr = mumps->id.blkptr; in MatSetFromOptions_MUMPS()
2673 PetscCall(MatMumpsAllocateInternalID(&mumps->id, precision)); in MatSetFromOptions_MUMPS()
2675 PetscMUMPS_c(mumps); in MatSetFromOptions_MUMPS()
2676 …PetscCheck(mumps->id.INFOG(1) >= 0, PETSC_COMM_SELF, PETSC_ERR_LIB, "MUMPS error: INFOG(1)=%d " MU… in MatSetFromOptions_MUMPS()
2679 mumps->id.ICNTL(3) = 0; in MatSetFromOptions_MUMPS()
2680 mumps->id.ICNTL(4) = 0; in MatSetFromOptions_MUMPS()
2681 if (mumps->petsc_size == 1) { in MatSetFromOptions_MUMPS()
2682 mumps->id.ICNTL(18) = 0; /* centralized assembled matrix input */ in MatSetFromOptions_MUMPS()
2683 mumps->id.ICNTL(7) = 7; /* automatic choice of ordering done by the package */ in MatSetFromOptions_MUMPS()
2685 mumps->id.ICNTL(18) = 3; /* distributed assembled matrix input */ in MatSetFromOptions_MUMPS()
2686 mumps->id.ICNTL(21) = 1; /* distributed solution */ in MatSetFromOptions_MUMPS()
2689 mumps->id.ICNTL(15) = 1; in MatSetFromOptions_MUMPS()
2690 mumps->id.nblk = nblk; in MatSetFromOptions_MUMPS()
2691 mumps->id.blkvar = blkvar; in MatSetFromOptions_MUMPS()
2692 mumps->id.blkptr = blkptr; in MatSetFromOptions_MUMPS()
2693 } else mumps->id.ICNTL(15) = 0; in MatSetFromOptions_MUMPS()
2696 …for (icntl = 0; icntl < nICNTL_pre; ++icntl) mumps->id.ICNTL(mumps->ICNTL_pre[1 + 2 * icntl]) = mu… in MatSetFromOptions_MUMPS()
2697 …l = 0; icntl < nCNTL_pre; ++icntl) ID_CNTL_SET(mumps->id, (PetscInt)mumps->CNTL_pre[1 + 2 * icntl]… in MatSetFromOptions_MUMPS()
2699 PetscCall(PetscFree(mumps->ICNTL_pre)); in MatSetFromOptions_MUMPS()
2700 PetscCall(PetscFree(mumps->CNTL_pre)); in MatSetFromOptions_MUMPS()
2703 mumps->id.size_schur = size; in MatSetFromOptions_MUMPS()
2704 mumps->id.schur_lld = size; in MatSetFromOptions_MUMPS()
2705 mumps->id.schur = arr; in MatSetFromOptions_MUMPS()
2706 mumps->id.listvar_schur = listvar_schur; in MatSetFromOptions_MUMPS()
2707 if (mumps->petsc_size > 1) { in MatSetFromOptions_MUMPS()
2710 …mumps->id.ICNTL(19) = 1; … in MatSetFromOptions_MUMPS()
2711 …gs = mumps->myid ? (mumps->id.size_schur ? PETSC_FALSE : PETSC_TRUE) : PETSC_TRUE… in MatSetFromOptions_MUMPS()
2712 PetscCallMPI(MPIU_Allreduce(MPI_IN_PLACE, &gs, 1, MPI_C_BOOL, MPI_LAND, mumps->petsc_comm)); in MatSetFromOptions_MUMPS()
2716 mumps->id.ICNTL(19) = 3; /* MUMPS returns full matrix */ in MatSetFromOptions_MUMPS()
2718 mumps->id.ICNTL(19) = 2; /* MUMPS returns lower triangular part */ in MatSetFromOptions_MUMPS()
2721 mumps->id.ICNTL(26) = -1; in MatSetFromOptions_MUMPS()
2727 PetscCallMPI(MPI_Bcast(mumps->id.icntl, 40, MPI_INT, 0, mumps->omp_comm)); in MatSetFromOptions_MUMPS()
2728 PetscCallMPI(MPI_Bcast(mumps->id.cntl, 15, MPIU_MUMPSREAL(&mumps->id), 0, mumps->omp_comm)); in MatSetFromOptions_MUMPS()
2730 mumps->scat_rhs = NULL; in MatSetFromOptions_MUMPS()
2731 mumps->scat_sol = NULL; in MatSetFromOptions_MUMPS()
2733 …mat_mumps_icntl_1", "ICNTL(1): output stream for error messages", "None", mumps->id.ICNTL(1), &icn… in MatSetFromOptions_MUMPS()
2734 if (flg) mumps->id.ICNTL(1) = icntl; in MatSetFromOptions_MUMPS()
2735 … output stream for diagnostic printing, statistics, and warning", "None", mumps->id.ICNTL(2), &icn… in MatSetFromOptions_MUMPS()
2736 if (flg) mumps->id.ICNTL(2) = icntl; in MatSetFromOptions_MUMPS()
2737 …3): output stream for global information, collected on the host", "None", mumps->id.ICNTL(3), &icn… in MatSetFromOptions_MUMPS()
2738 if (flg) mumps->id.ICNTL(3) = icntl; in MatSetFromOptions_MUMPS()
2740 …Int("-mat_mumps_icntl_4", "ICNTL(4): level of printing (0 to 4)", "None", mumps->id.ICNTL(4), &icn… in MatSetFromOptions_MUMPS()
2741 if (flg) mumps->id.ICNTL(4) = icntl; in MatSetFromOptions_MUMPS()
2742 …if (mumps->id.ICNTL(4) || PetscLogPrintInfo) mumps->id.ICNTL(3) = 6; /* resume MUMPS default id.IC… in MatSetFromOptions_MUMPS()
2744 …rmutes to a zero-free diagonal and/or scale the matrix (0 to 7)", "None", mumps->id.ICNTL(6), &icn… in MatSetFromOptions_MUMPS()
2745 if (flg) mumps->id.ICNTL(6) = icntl; in MatSetFromOptions_MUMPS()
2747 …, 2=AMF, 3=Scotch, 4=PORD, 5=Metis, 6=QAMD, and 7=auto(default)", "None", mumps->id.ICNTL(7), &icn… in MatSetFromOptions_MUMPS()
2750 mumps->id.ICNTL(7) = icntl; in MatSetFromOptions_MUMPS()
2753 …cntl_8", "ICNTL(8): scaling strategy (-2 to 8 or 77)", "None", mumps->id.ICNTL(8), &mumps->id.ICNT… in MatSetFromOptions_MUMPS()
2755 …_mumps_icntl_10", "ICNTL(10): max num of refinements", "None", mumps->id.ICNTL(10), &mumps->id.ICN… in MatSetFromOptions_MUMPS()
2756 …tistics related to an error analysis (via -ksp_view)", "None", mumps->id.ICNTL(11), &mumps->id.ICN… in MatSetFromOptions_MUMPS()
2757 …an ordering strategy for symmetric matrices (0 to 3)", "None", mumps->id.ICNTL(12), &mumps->id.ICN… in MatSetFromOptions_MUMPS()
2758 …f the root node (enable ScaLAPACK) and its splitting", "None", mumps->id.ICNTL(13), &mumps->id.ICN… in MatSetFromOptions_MUMPS()
2759 …: percentage increase in the estimated working space", "None", mumps->id.ICNTL(14), &mumps->id.ICN… in MatSetFromOptions_MUMPS()
2761 if (rbs == cbs && rbs > 1) mumps->id.ICNTL(15) = (PetscMUMPSInt)-rbs; in MatSetFromOptions_MUMPS()
2762 …on of the input matrix resulting from a block format", "None", mumps->id.ICNTL(15), &mumps->id.ICN… in MatSetFromOptions_MUMPS()
2764 …if (mumps->id.ICNTL(15) < 0) PetscCheck((-mumps->id.ICNTL(15) % cbs == 0) && (-mumps->id.ICNTL(15)… in MatSetFromOptions_MUMPS()
2765 else if (mumps->id.ICNTL(15) > 0) { in MatSetFromOptions_MUMPS()
2798 …icntl_19", "ICNTL(19): computes the Schur complement", "None", mumps->id.ICNTL(19), &mumps->id.ICN… in MatSetFromOptions_MUMPS()
2799 if (mumps->id.ICNTL(19) <= 0 || mumps->id.ICNTL(19) > 3) { /* reset any Schur data (if any) */ in MatSetFromOptions_MUMPS()
2801 PetscCall(MatMumpsResetSchur_Private(mumps)); in MatSetFromOptions_MUMPS()
2811 mumps->ICNTL20 = 10; /* Distributed dense RHS, by default */ in MatSetFromOptions_MUMPS()
2813 mumps->ICNTL20 = 0; /* Centralized dense RHS, if need be */ in MatSetFromOptions_MUMPS()
2815 …ralized (0) or distributed (10) dense right-hand sides", "None", mumps->ICNTL20, &mumps->ICNTL20, … in MatSetFromOptions_MUMPS()
2816 …mumps->ICNTL20 == 10 || mumps->ICNTL20 == 0, PETSC_COMM_SELF, PETSC_ERR_SUP, "ICNTL(20)=%d is not … in MatSetFromOptions_MUMPS()
2818 …PetscCheck(!flg || mumps->ICNTL20 != 10, PETSC_COMM_SELF, PETSC_ERR_SUP, "ICNTL(20)=10 is not supp… in MatSetFromOptions_MUMPS()
2822 …in-core/out-of-core factorization and solve (0 or 1)", "None", mumps->id.ICNTL(22), &mumps->id.ICN… in MatSetFromOptions_MUMPS()
2823 …if (flg && mumps->id.ICNTL(22) != 1) mumps->id.ICNTL(22) = 0; // MUMPS treats values other than 1 … in MatSetFromOptions_MUMPS()
2824 if (mumps->id.ICNTL(22)) { in MatSetFromOptions_MUMPS()
2827 …ring("-mat_mumps_ooc_tmpdir", "Out of core directory", "None", mumps->id.ooc_tmpdir, mumps->id.ooc… in MatSetFromOptions_MUMPS()
2829 … working memory (MB) that can allocate per processor", "None", mumps->id.ICNTL(23), &mumps->id.ICN… in MatSetFromOptions_MUMPS()
2830 …", "ICNTL(24): detection of null pivot rows (0 or 1)", "None", mumps->id.ICNTL(24), &mumps->id.ICN… in MatSetFromOptions_MUMPS()
2831 …if (mumps->id.ICNTL(24)) mumps->id.ICNTL(13) = 1; /* turn-off ScaLAPACK to help with the correct d… in MatSetFromOptions_MUMPS()
2833 …olution of a deficient matrix and a null space basis", "None", mumps->id.ICNTL(25), &mumps->id.ICN… in MatSetFromOptions_MUMPS()
2834 …ives the solution phase if a Schur complement matrix", "None", mumps->id.ICNTL(26), &mumps->id.ICN… in MatSetFromOptions_MUMPS()
2835 …rols the blocking size for multiple right-hand sides", "None", mumps->id.ICNTL(27), &mumps->id.ICN… in MatSetFromOptions_MUMPS()
2836 …g, or 2 for parallel analysis and ICNTL(29) ordering", "None", mumps->id.ICNTL(28), &mumps->id.ICN… in MatSetFromOptions_MUMPS()
2837 …TL(29): parallel ordering 1 = ptscotch, 2 = parmetis", "None", mumps->id.ICNTL(29), &mumps->id.ICN… in MatSetFromOptions_MUMPS()
2839 … which factors may be discarded during factorization", "None", mumps->id.ICNTL(31), &mumps->id.ICN… in MatSetFromOptions_MUMPS()
2841 …mat_mumps_icntl_33", "ICNTL(33): compute determinant", "None", mumps->id.ICNTL(33), &mumps->id.ICN… in MatSetFromOptions_MUMPS()
2842 …: activates Block Low Rank (BLR) based factorization", "None", mumps->id.ICNTL(35), &mumps->id.ICN… in MatSetFromOptions_MUMPS()
2843 …36", "ICNTL(36): choice of BLR factorization variant", "None", mumps->id.ICNTL(36), &mumps->id.ICN… in MatSetFromOptions_MUMPS()
2844 …NTL(37): compression of the contribution blocks (CB)", "None", mumps->id.ICNTL(37), &mumps->id.ICN… in MatSetFromOptions_MUMPS()
2845 …): estimated compression rate of LU factors with BLR", "None", mumps->id.ICNTL(38), &mumps->id.ICN… in MatSetFromOptions_MUMPS()
2846 …8", "ICNTL(48): multithreading with tree parallelism", "None", mumps->id.ICNTL(48), &mumps->id.ICN… in MatSetFromOptions_MUMPS()
2847 … compact workarray at the end of factorization phase", "None", mumps->id.ICNTL(49), &mumps->id.ICN… in MatSetFromOptions_MUMPS()
2848 …NTL(56): postponing and rank-revealing factorization", "None", mumps->id.ICNTL(56), &mumps->id.ICN… in MatSetFromOptions_MUMPS()
2849 …CNTL(58): defines options for symbolic factorization", "None", mumps->id.ICNTL(58), &mumps->id.ICN… in MatSetFromOptions_MUMPS()
2851 …", "CNTL(1): relative pivoting threshold", "None", (PetscReal)ID_CNTL_GET(mumps->id, 1), &cntl, &f… in MatSetFromOptions_MUMPS()
2852 if (flg) ID_CNTL_SET(mumps->id, 1, cntl); in MatSetFromOptions_MUMPS()
2853 …NTL(2): stopping criterion of refinement", "None", (PetscReal)ID_CNTL_GET(mumps->id, 2), &cntl, &f… in MatSetFromOptions_MUMPS()
2854 if (flg) ID_CNTL_SET(mumps->id, 2, cntl); in MatSetFromOptions_MUMPS()
2855 …", "CNTL(3): absolute pivoting threshold", "None", (PetscReal)ID_CNTL_GET(mumps->id, 3), &cntl, &f… in MatSetFromOptions_MUMPS()
2856 if (flg) ID_CNTL_SET(mumps->id, 3, cntl); in MatSetFromOptions_MUMPS()
2857 …_4", "CNTL(4): value for static pivoting", "None", (PetscReal)ID_CNTL_GET(mumps->id, 4), &cntl, &f… in MatSetFromOptions_MUMPS()
2858 if (flg) ID_CNTL_SET(mumps->id, 4, cntl); in MatSetFromOptions_MUMPS()
2859 …l_5", "CNTL(5): fixation for null pivots", "None", (PetscReal)ID_CNTL_GET(mumps->id, 5), &cntl, &f… in MatSetFromOptions_MUMPS()
2860 if (flg) ID_CNTL_SET(mumps->id, 5, cntl); in MatSetFromOptions_MUMPS()
2861 …L(7): dropping parameter used during BLR", "None", (PetscReal)ID_CNTL_GET(mumps->id, 7), &cntl, &f… in MatSetFromOptions_MUMPS()
2862 if (flg) ID_CNTL_SET(mumps->id, 7, cntl); in MatSetFromOptions_MUMPS()
2867 PetscCall(PetscMalloc1(ninfo, &mumps->info)); in MatSetFromOptions_MUMPS()
2868 mumps->ninfo = ninfo; in MatSetFromOptions_MUMPS()
2871 mumps->info[i] = info[i]; in MatSetFromOptions_MUMPS()
2878 …ymbolic_MUMPS_ReportIfError(Mat F, Mat A, PETSC_UNUSED const MatFactorInfo *info, Mat_MUMPS *mumps) in MatFactorSymbolic_MUMPS_ReportIfError() argument
2881 if (mumps->id.INFOG(1) < 0) { in MatFactorSymbolic_MUMPS_ReportIfError()
2882 …MM_SELF, PETSC_ERR_LIB, "MUMPS error in analysis: INFOG(1)=%d " MUMPS_MANUALS, mumps->id.INFOG(1)); in MatFactorSymbolic_MUMPS_ReportIfError()
2883 if (mumps->id.INFOG(1) == -6) { in MatFactorSymbolic_MUMPS_ReportIfError()
2884 …or in analysis: matrix is singular, INFOG(1)=%d, INFO(2)=%d\n", mumps->id.INFOG(1), mumps->id.INFO… in MatFactorSymbolic_MUMPS_ReportIfError()
2886 } else if (mumps->id.INFOG(1) == -5 || mumps->id.INFOG(1) == -7) { in MatFactorSymbolic_MUMPS_ReportIfError()
2887 … analysis: problem with work array, INFOG(1)=%d, INFO(2)=%d\n", mumps->id.INFOG(1), mumps->id.INFO… in MatFactorSymbolic_MUMPS_ReportIfError()
2890 …rror in analysis: INFOG(1)=%d, INFO(2)=%d " MUMPS_MANUALS "\n", mumps->id.INFOG(1), mumps->id.INFO… in MatFactorSymbolic_MUMPS_ReportIfError()
2894 if (!mumps->id.n) F->factorerrortype = MAT_FACTOR_NOERROR; in MatFactorSymbolic_MUMPS_ReportIfError()
2900 Mat_MUMPS *mumps = (Mat_MUMPS *)F->data; in MatLUFactorSymbolic_AIJMUMPS() local
2905 if (mumps->matstruc == SAME_NONZERO_PATTERN) { in MatLUFactorSymbolic_AIJMUMPS()
2913 PetscCall((*mumps->ConvertToTriples)(A, 1, MAT_INITIAL_MATRIX, mumps)); in MatLUFactorSymbolic_AIJMUMPS()
2914 PetscCall(MatMumpsGatherNonzerosOnMaster(MAT_INITIAL_MATRIX, mumps)); in MatLUFactorSymbolic_AIJMUMPS()
2917 mumps->id.job = JOB_FACTSYMBOLIC; in MatLUFactorSymbolic_AIJMUMPS()
2918 PetscCall(PetscMUMPSIntCast(M, &mumps->id.n)); in MatLUFactorSymbolic_AIJMUMPS()
2919 switch (mumps->id.ICNTL(18)) { in MatLUFactorSymbolic_AIJMUMPS()
2921 if (!mumps->myid) { in MatLUFactorSymbolic_AIJMUMPS()
2922 mumps->id.nnz = mumps->nnz; in MatLUFactorSymbolic_AIJMUMPS()
2923 mumps->id.irn = mumps->irn; in MatLUFactorSymbolic_AIJMUMPS()
2924 mumps->id.jcn = mumps->jcn; in MatLUFactorSymbolic_AIJMUMPS()
2925 …mumps->id.ICNTL(6) && mumps->id.ICNTL(6) < 7) PetscCall(MatMumpsMakeMumpsScalarArray(PETSC_TRUE, m… in MatLUFactorSymbolic_AIJMUMPS()
2926 if (r && mumps->id.ICNTL(7) == 7) { in MatLUFactorSymbolic_AIJMUMPS()
2927 mumps->id.ICNTL(7) = 1; in MatLUFactorSymbolic_AIJMUMPS()
2928 if (!mumps->myid) { in MatLUFactorSymbolic_AIJMUMPS()
2932 PetscCall(PetscMalloc1(M, &mumps->id.perm_in)); in MatLUFactorSymbolic_AIJMUMPS()
2934 …for (i = 0; i < M; i++) PetscCall(PetscMUMPSIntCast(idx[i] + 1, &mumps->id.perm_in[i])); /* perm_i… in MatLUFactorSymbolic_AIJMUMPS()
2941 mumps->id.nnz_loc = mumps->nnz; in MatLUFactorSymbolic_AIJMUMPS()
2942 mumps->id.irn_loc = mumps->irn; in MatLUFactorSymbolic_AIJMUMPS()
2943 mumps->id.jcn_loc = mumps->jcn; in MatLUFactorSymbolic_AIJMUMPS()
2944 …mumps->id.ICNTL(6) && mumps->id.ICNTL(6) < 7) PetscCall(MatMumpsMakeMumpsScalarArray(PETSC_TRUE, m… in MatLUFactorSymbolic_AIJMUMPS()
2945 …if (mumps->ICNTL20 == 0) { /* Centralized rhs. Create scatter scat_rhs for repeated use in MatSolv… in MatLUFactorSymbolic_AIJMUMPS()
2947 PetscCall(VecScatterCreateToZero(b, &mumps->scat_rhs, &mumps->b_seq)); in MatLUFactorSymbolic_AIJMUMPS()
2952 PetscMUMPS_c(mumps); in MatLUFactorSymbolic_AIJMUMPS()
2953 PetscCall(MatFactorSymbolic_MUMPS_ReportIfError(F, A, info, mumps)); in MatLUFactorSymbolic_AIJMUMPS()
2962 mumps->matstruc = SAME_NONZERO_PATTERN; in MatLUFactorSymbolic_AIJMUMPS()
2969 Mat_MUMPS *mumps = (Mat_MUMPS *)F->data; in MatLUFactorSymbolic_BAIJMUMPS() local
2974 if (mumps->matstruc == SAME_NONZERO_PATTERN) { in MatLUFactorSymbolic_BAIJMUMPS()
2982 PetscCall((*mumps->ConvertToTriples)(A, 1, MAT_INITIAL_MATRIX, mumps)); in MatLUFactorSymbolic_BAIJMUMPS()
2983 PetscCall(MatMumpsGatherNonzerosOnMaster(MAT_INITIAL_MATRIX, mumps)); in MatLUFactorSymbolic_BAIJMUMPS()
2986 mumps->id.job = JOB_FACTSYMBOLIC; in MatLUFactorSymbolic_BAIJMUMPS()
2987 PetscCall(PetscMUMPSIntCast(M, &mumps->id.n)); in MatLUFactorSymbolic_BAIJMUMPS()
2988 switch (mumps->id.ICNTL(18)) { in MatLUFactorSymbolic_BAIJMUMPS()
2990 if (!mumps->myid) { in MatLUFactorSymbolic_BAIJMUMPS()
2991 mumps->id.nnz = mumps->nnz; in MatLUFactorSymbolic_BAIJMUMPS()
2992 mumps->id.irn = mumps->irn; in MatLUFactorSymbolic_BAIJMUMPS()
2993 mumps->id.jcn = mumps->jcn; in MatLUFactorSymbolic_BAIJMUMPS()
2994 …mumps->id.ICNTL(6) && mumps->id.ICNTL(6) < 7) PetscCall(MatMumpsMakeMumpsScalarArray(PETSC_TRUE, m… in MatLUFactorSymbolic_BAIJMUMPS()
2998 mumps->id.nnz_loc = mumps->nnz; in MatLUFactorSymbolic_BAIJMUMPS()
2999 mumps->id.irn_loc = mumps->irn; in MatLUFactorSymbolic_BAIJMUMPS()
3000 mumps->id.jcn_loc = mumps->jcn; in MatLUFactorSymbolic_BAIJMUMPS()
3001 …mumps->id.ICNTL(6) && mumps->id.ICNTL(6) < 7) PetscCall(MatMumpsMakeMumpsScalarArray(PETSC_TRUE, m… in MatLUFactorSymbolic_BAIJMUMPS()
3002 …if (mumps->ICNTL20 == 0) { /* Centralized rhs. Create scatter scat_rhs for repeated use in MatSolv… in MatLUFactorSymbolic_BAIJMUMPS()
3004 PetscCall(VecScatterCreateToZero(b, &mumps->scat_rhs, &mumps->b_seq)); in MatLUFactorSymbolic_BAIJMUMPS()
3009 PetscMUMPS_c(mumps); in MatLUFactorSymbolic_BAIJMUMPS()
3010 PetscCall(MatFactorSymbolic_MUMPS_ReportIfError(F, A, info, mumps)); in MatLUFactorSymbolic_BAIJMUMPS()
3017 mumps->matstruc = SAME_NONZERO_PATTERN; in MatLUFactorSymbolic_BAIJMUMPS()
3024 Mat_MUMPS *mumps = (Mat_MUMPS *)F->data; in MatCholeskyFactorSymbolic_MUMPS() local
3029 if (mumps->matstruc == SAME_NONZERO_PATTERN) { in MatCholeskyFactorSymbolic_MUMPS()
3037 PetscCall((*mumps->ConvertToTriples)(A, 1, MAT_INITIAL_MATRIX, mumps)); in MatCholeskyFactorSymbolic_MUMPS()
3038 PetscCall(MatMumpsGatherNonzerosOnMaster(MAT_INITIAL_MATRIX, mumps)); in MatCholeskyFactorSymbolic_MUMPS()
3041 mumps->id.job = JOB_FACTSYMBOLIC; in MatCholeskyFactorSymbolic_MUMPS()
3042 PetscCall(PetscMUMPSIntCast(M, &mumps->id.n)); in MatCholeskyFactorSymbolic_MUMPS()
3043 switch (mumps->id.ICNTL(18)) { in MatCholeskyFactorSymbolic_MUMPS()
3045 if (!mumps->myid) { in MatCholeskyFactorSymbolic_MUMPS()
3046 mumps->id.nnz = mumps->nnz; in MatCholeskyFactorSymbolic_MUMPS()
3047 mumps->id.irn = mumps->irn; in MatCholeskyFactorSymbolic_MUMPS()
3048 mumps->id.jcn = mumps->jcn; in MatCholeskyFactorSymbolic_MUMPS()
3049 …mumps->id.ICNTL(6) && mumps->id.ICNTL(6) < 7) PetscCall(MatMumpsMakeMumpsScalarArray(PETSC_TRUE, m… in MatCholeskyFactorSymbolic_MUMPS()
3053 mumps->id.nnz_loc = mumps->nnz; in MatCholeskyFactorSymbolic_MUMPS()
3054 mumps->id.irn_loc = mumps->irn; in MatCholeskyFactorSymbolic_MUMPS()
3055 mumps->id.jcn_loc = mumps->jcn; in MatCholeskyFactorSymbolic_MUMPS()
3056 …mumps->id.ICNTL(6) && mumps->id.ICNTL(6) < 7) PetscCall(MatMumpsMakeMumpsScalarArray(PETSC_TRUE, m… in MatCholeskyFactorSymbolic_MUMPS()
3057 …if (mumps->ICNTL20 == 0) { /* Centralized rhs. Create scatter scat_rhs for repeated use in MatSolv… in MatCholeskyFactorSymbolic_MUMPS()
3059 PetscCall(VecScatterCreateToZero(b, &mumps->scat_rhs, &mumps->b_seq)); in MatCholeskyFactorSymbolic_MUMPS()
3064 PetscMUMPS_c(mumps); in MatCholeskyFactorSymbolic_MUMPS()
3065 PetscCall(MatFactorSymbolic_MUMPS_ReportIfError(F, A, info, mumps)); in MatCholeskyFactorSymbolic_MUMPS()
3079 mumps->matstruc = SAME_NONZERO_PATTERN; in MatCholeskyFactorSymbolic_MUMPS()
3087 Mat_MUMPS *mumps = (Mat_MUMPS *)A->data; in MatView_MUMPS() local
3099 …Call(PetscViewerASCIIPrintf(viewer, " SYM (matrix type): %d\n", mumps->id.sym)); in MatView_MUMPS()
3100 …Call(PetscViewerASCIIPrintf(viewer, " PAR (host participation): %d\n", mumps->id.par)); in MatView_MUMPS()
3101 …PetscViewerASCIIPrintf(viewer, " ICNTL(1) (output for error): %d\n", mumps->id.ICNTL(1))); in MatView_MUMPS()
3102 …PetscViewerASCIIPrintf(viewer, " ICNTL(2) (output of diagnostic msg): %d\n", mumps->id.ICNTL(2))); in MatView_MUMPS()
3103 …PetscViewerASCIIPrintf(viewer, " ICNTL(3) (output for global info): %d\n", mumps->id.ICNTL(3))); in MatView_MUMPS()
3104 …PetscViewerASCIIPrintf(viewer, " ICNTL(4) (level of printing): %d\n", mumps->id.ICNTL(4))); in MatView_MUMPS()
3105 …PetscViewerASCIIPrintf(viewer, " ICNTL(5) (input mat struct): %d\n", mumps->id.ICNTL(5))); in MatView_MUMPS()
3106 …PetscViewerASCIIPrintf(viewer, " ICNTL(6) (matrix prescaling): %d\n", mumps->id.ICNTL(6))); in MatView_MUMPS()
3107 …etscViewerASCIIPrintf(viewer, " ICNTL(7) (sequential matrix ordering):%d\n", mumps->id.ICNTL(7))); in MatView_MUMPS()
3108 …PetscViewerASCIIPrintf(viewer, " ICNTL(8) (scaling strategy): %d\n", mumps->id.ICNTL(8))); in MatView_MUMPS()
3109 …etscViewerASCIIPrintf(viewer, " ICNTL(10) (max num of refinements): %d\n", mumps->id.ICNTL(10))); in MatView_MUMPS()
3110 …etscViewerASCIIPrintf(viewer, " ICNTL(11) (error analysis): %d\n", mumps->id.ICNTL(11))); in MatView_MUMPS()
3111 if (mumps->id.ICNTL(11) > 0) { in MatView_MUMPS()
3112 …iewer, " RINFOG(4) (inf norm of input mat): %g\n", (double)ID_RINFOG_GET(mumps->id, 4))); in MatView_MUMPS()
3113 …iewer, " RINFOG(5) (inf norm of solution): %g\n", (double)ID_RINFOG_GET(mumps->id, 5))); in MatView_MUMPS()
3114 …iewer, " RINFOG(6) (inf norm of residual): %g\n", (double)ID_RINFOG_GET(mumps->id, 6))); in MatView_MUMPS()
3115 …(backward error est): %g, %g\n", (double)ID_RINFOG_GET(mumps->id, 7), (double)ID_RINFOG_GET(mumps-… in MatView_MUMPS()
3116 …iewer, " RINFOG(9) (error estimate): %g\n", (double)ID_RINFOG_GET(mumps->id, 9))); in MatView_MUMPS()
3117 …)(condition numbers): %g, %g\n", (double)ID_RINFOG_GET(mumps->id, 10), (double)ID_RINFOG_GET(mumps… in MatView_MUMPS()
3119 …tf(viewer, " ICNTL(12) (efficiency control): %d\n", mumps->id.ICNTL(12))); in MatView_MUMPS()
3120 …tf(viewer, " ICNTL(13) (sequential factorization of the root node): %d\n", mumps->id.ICNTL(13))); in MatView_MUMPS()
3121 …tf(viewer, " ICNTL(14) (percentage of estimated workspace increase): %d\n", mumps->id.ICNTL(14))); in MatView_MUMPS()
3122 …tf(viewer, " ICNTL(15) (compression of the input matrix): %d\n", mumps->id.ICNTL(15))); in MatView_MUMPS()
3124 …tf(viewer, " ICNTL(18) (input mat struct): %d\n", mumps->id.ICNTL(18))); in MatView_MUMPS()
3125 …tf(viewer, " ICNTL(19) (Schur complement info): %d\n", mumps->id.ICNTL(19))); in MatView_MUMPS()
3126 …tf(viewer, " ICNTL(20) (RHS sparse pattern): %d\n", mumps->id.ICNTL(20))); in MatView_MUMPS()
3127 …tf(viewer, " ICNTL(21) (solution struct): %d\n", mumps->id.ICNTL(21))); in MatView_MUMPS()
3128 …tf(viewer, " ICNTL(22) (in-core/out-of-core facility): %d\n", mumps->id.ICNTL(22))); in MatView_MUMPS()
3129 …tf(viewer, " ICNTL(23) (max size of memory can be allocated locally):%d\n", mumps->id.ICNTL(23))); in MatView_MUMPS()
3131 …tf(viewer, " ICNTL(24) (detection of null pivot rows): %d\n", mumps->id.ICNTL(24))); in MatView_MUMPS()
3132 …tf(viewer, " ICNTL(25) (computation of a null space basis): %d\n", mumps->id.ICNTL(25))); in MatView_MUMPS()
3133 …tf(viewer, " ICNTL(26) (Schur options for RHS or solution): %d\n", mumps->id.ICNTL(26))); in MatView_MUMPS()
3134 …tf(viewer, " ICNTL(27) (blocking size for multiple RHS): %d\n", mumps->id.ICNTL(27))); in MatView_MUMPS()
3135 …tf(viewer, " ICNTL(28) (use parallel or sequential ordering): %d\n", mumps->id.ICNTL(28))); in MatView_MUMPS()
3136 …tf(viewer, " ICNTL(29) (parallel ordering): %d\n", mumps->id.ICNTL(29))); in MatView_MUMPS()
3138 …tf(viewer, " ICNTL(30) (user-specified set of entries in inv(A)): %d\n", mumps->id.ICNTL(30))); in MatView_MUMPS()
3139 …tf(viewer, " ICNTL(31) (factors is discarded in the solve phase): %d\n", mumps->id.ICNTL(31))); in MatView_MUMPS()
3140 …tf(viewer, " ICNTL(33) (compute determinant): %d\n", mumps->id.ICNTL(33))); in MatView_MUMPS()
3141 …tf(viewer, " ICNTL(35) (activate BLR based factorization): %d\n", mumps->id.ICNTL(35))); in MatView_MUMPS()
3142 …tf(viewer, " ICNTL(36) (choice of BLR factorization variant): %d\n", mumps->id.ICNTL(36))); in MatView_MUMPS()
3143 …tf(viewer, " ICNTL(37) (compression of the contribution blocks): %d\n", mumps->id.ICNTL(37))); in MatView_MUMPS()
3144 …tf(viewer, " ICNTL(38) (estimated compression rate of LU factors): %d\n", mumps->id.ICNTL(38))); in MatView_MUMPS()
3145 …tf(viewer, " ICNTL(48) (multithreading with tree parallelism): %d\n", mumps->id.ICNTL(48))); in MatView_MUMPS()
3146 …r, " ICNTL(49) (compact workarray at the end of factorization phase):%d\n", mumps->id.ICNTL(49))); in MatView_MUMPS()
3147 …tf(viewer, " ICNTL(56) (postponing and rank-revealing factorization):%d\n", mumps->id.ICNTL(56))); in MatView_MUMPS()
3148 …tf(viewer, " ICNTL(58) (options for symbolic factorization): %d\n", mumps->id.ICNTL(58))); in MatView_MUMPS()
3150 …(viewer, " CNTL(1) (relative pivoting threshold): %g\n", (double)ID_CNTL_GET(mumps->id, 1))); in MatView_MUMPS()
3151 …(viewer, " CNTL(2) (stopping criterion of refinement): %g\n", (double)ID_CNTL_GET(mumps->id, 2))); in MatView_MUMPS()
3152 …(viewer, " CNTL(3) (absolute pivoting threshold): %g\n", (double)ID_CNTL_GET(mumps->id, 3))); in MatView_MUMPS()
3153 …(viewer, " CNTL(4) (value of static pivoting): %g\n", (double)ID_CNTL_GET(mumps->id, 4))); in MatView_MUMPS()
3154 …(viewer, " CNTL(5) (fixation for null pivots): %g\n", (double)ID_CNTL_GET(mumps->id, 5))); in MatView_MUMPS()
3155 …(viewer, " CNTL(7) (dropping parameter for BLR): %g\n", (double)ID_CNTL_GET(mumps->id, 7))); in MatView_MUMPS()
3160 …scViewerASCIISynchronizedPrintf(viewer, " [%d] %g\n", mumps->myid, (double)ID_RINFO_GET(mumps->… in MatView_MUMPS()
3163 …scViewerASCIISynchronizedPrintf(viewer, " [%d] %g\n", mumps->myid, (double)ID_RINFO_GET(mumps->… in MatView_MUMPS()
3166 …scViewerASCIISynchronizedPrintf(viewer, " [%d] %g\n", mumps->myid, (double)ID_RINFO_GET(mumps->… in MatView_MUMPS()
3170 …PetscCall(PetscViewerASCIISynchronizedPrintf(viewer, " [%d] %d\n", mumps->myid, mumps->id.INFO(… in MatView_MUMPS()
3174 …PetscCall(PetscViewerASCIISynchronizedPrintf(viewer, " [%d] %d\n", mumps->myid, mumps->id.INFO(… in MatView_MUMPS()
3178 …PetscCall(PetscViewerASCIISynchronizedPrintf(viewer, " [%d] %d\n", mumps->myid, mumps->id.INFO(… in MatView_MUMPS()
3181 if (mumps->ninfo && mumps->ninfo <= 80) { in MatView_MUMPS()
3183 for (i = 0; i < mumps->ninfo; i++) { in MatView_MUMPS()
3184 … PetscCall(PetscViewerASCIIPrintf(viewer, " INFO(%" PetscInt_FMT "):\n", mumps->info[i])); in MatView_MUMPS()
3185 …PetscViewerASCIISynchronizedPrintf(viewer, " [%d] %d\n", mumps->myid, mumps->id.INFO(mumps->inf… in MatView_MUMPS()
3192 if (mumps->myid == 0) { /* information from the host */ in MatView_MUMPS()
3193 … estimated flops for the elimination after analysis): %g\n", (double)ID_RINFOG_GET(mumps->id, 1))); in MatView_MUMPS()
3194 …stimated flops for the assembly after factorization): %g\n", (double)ID_RINFOG_GET(mumps->id, 2))); in MatView_MUMPS()
3195 …mated flops for the elimination after factorization): %g\n", (double)ID_RINFOG_GET(mumps->id, 3))); in MatView_MUMPS()
3196 …ant): (%g,%g)*(2^%d)\n", (double)ID_RINFOG_GET(mumps->id, 12), (double)ID_RINFOG_GET(mumps->id, 13… in MatView_MUMPS()
3198 …stimated real workspace for factors on all processors after analysis): %d\n", mumps->id.INFOG(3))); in MatView_MUMPS()
3199 …mated integer workspace for factors on all processors after analysis): %d\n", mumps->id.INFOG(4))); in MatView_MUMPS()
3200 …ewer, " INFOG(5) (estimated maximum front size in the complete tree): %d\n", mumps->id.INFOG(5))); in MatView_MUMPS()
3201 …SCIIPrintf(viewer, " INFOG(6) (number of nodes in the complete tree): %d\n", mumps->id.INFOG(6))); in MatView_MUMPS()
3202 …viewer, " INFOG(7) (ordering option effectively used after analysis): %d\n", mumps->id.INFOG(7))); in MatView_MUMPS()
3203 …structural symmetry in percent of the permuted matrix after analysis): %d\n", mumps->id.INFOG(8))); in MatView_MUMPS()
3204 …al/complex workspace to store the matrix factors after factorization): %d\n", mumps->id.INFOG(9))); in MatView_MUMPS()
3205 …) (total integer space store the matrix factors after factorization): %d\n", mumps->id.INFOG(10))); in MatView_MUMPS()
3206 …, " INFOG(11) (order of largest frontal matrix after factorization): %d\n", mumps->id.INFOG(11))); in MatView_MUMPS()
3207 …ewerASCIIPrintf(viewer, " INFOG(12) (number of off-diagonal pivots): %d\n", mumps->id.INFOG(12))); in MatView_MUMPS()
3208 …(viewer, " INFOG(13) (number of delayed pivots after factorization): %d\n", mumps->id.INFOG(13))); in MatView_MUMPS()
3209 …viewer, " INFOG(14) (number of memory compress after factorization): %d\n", mumps->id.INFOG(14))); in MatView_MUMPS()
3210 … INFOG(15) (number of steps of iterative refinement after solution): %d\n", mumps->id.INFOG(15))); in MatView_MUMPS()
3211 …zation after analysis: value on the most memory consuming processor): %d\n", mumps->id.INFOG(16))); in MatView_MUMPS()
3212 …rnal data for factorization after analysis: sum over all processors): %d\n", mumps->id.INFOG(17))); in MatView_MUMPS()
3213 … during factorization: value on the most memory consuming processor): %d\n", mumps->id.INFOG(18))); in MatView_MUMPS()
3214 …ternal data allocated during factorization: sum over all processors): %d\n", mumps->id.INFOG(19))); in MatView_MUMPS()
3215 …tf(viewer, " INFOG(20) (estimated number of entries in the factors): %d\n", mumps->id.INFOG(20))); in MatView_MUMPS()
3216 …during factorization - value on the most memory consuming processor): %d\n", mumps->id.INFOG(21))); in MatView_MUMPS()
3217 …ory effectively used during factorization - sum over all processors): %d\n", mumps->id.INFOG(22))); in MatView_MUMPS()
3218 …r, " INFOG(23) (after analysis: value of ICNTL(6) effectively used): %d\n", mumps->id.INFOG(23))); in MatView_MUMPS()
3219 …, " INFOG(24) (after analysis: value of ICNTL(12) effectively used): %d\n", mumps->id.INFOG(24))); in MatView_MUMPS()
3220 … (after factorization: number of pivots modified by static pivoting): %d\n", mumps->id.INFOG(25))); in MatView_MUMPS()
3221 … INFOG(28) (after factorization: number of null pivots encountered): %d\n", mumps->id.INFOG(28))); in MatView_MUMPS()
3222 …ffective number of entries in the factors (sum over all processors)): %d\n", mumps->id.INFOG(29))); in MatView_MUMPS()
3223 …ze in Mbytes of memory used during solution phase): %d, %d\n", mumps->id.INFOG(30), mumps->id.INFO… in MatView_MUMPS()
3224 …IPrintf(viewer, " INFOG(32) (after analysis: type of analysis done): %d\n", mumps->id.INFOG(32))); in MatView_MUMPS()
3225 …etscViewerASCIIPrintf(viewer, " INFOG(33) (value used for ICNTL(8)): %d\n", mumps->id.INFOG(33))); in MatView_MUMPS()
3226 … INFOG(34) (exponent of the determinant if determinant is requested): %d\n", mumps->id.INFOG(34))); in MatView_MUMPS()
3227 …aking into account BLR factor compression - sum over all processors): %d\n", mumps->id.INFOG(35))); in MatView_MUMPS()
3228 … running BLR in-core - value on the most memory consuming processor): %d\n", mumps->id.INFOG(36))); in MatView_MUMPS()
3229 …MPS internal data for running BLR in-core - sum over all processors): %d\n", mumps->id.INFOG(37))); in MatView_MUMPS()
3230 …ning BLR out-of-core - value on the most memory consuming processor): %d\n", mumps->id.INFOG(38))); in MatView_MUMPS()
3231 …internal data for running BLR out-of-core - sum over all processors): %d\n", mumps->id.INFOG(39))); in MatView_MUMPS()
3240 Mat_MUMPS *mumps = (Mat_MUMPS *)A->data; in MatGetInfo_MUMPS() local
3244 …info->nz_allocated = mumps->id.INFOG(20) >= 0 ? mumps->id.INFOG(20) : -1000000 * mumps->id.IN… in MatGetInfo_MUMPS()
3245 …info->nz_used = mumps->id.INFOG(20) >= 0 ? mumps->id.INFOG(20) : -1000000 * mumps->id.IN… in MatGetInfo_MUMPS()
3258 Mat_MUMPS *mumps = (Mat_MUMPS *)F->data; in MatFactorSetSchurIS_MUMPS() local
3268 PetscCall(PetscMUMPSIntCast(size, &mumps->id.size_schur)); in MatFactorSetSchurIS_MUMPS()
3269 PetscCall(PetscMUMPSIntCast(size, &mumps->id.schur_lld)); in MatFactorSetSchurIS_MUMPS()
3270 if (mumps->sym == 1) PetscCall(MatSetOption(F->schur, MAT_SPD, PETSC_TRUE)); in MatFactorSetSchurIS_MUMPS()
3273 PetscCall(PetscFree(mumps->id.listvar_schur)); in MatFactorSetSchurIS_MUMPS()
3274 PetscCall(PetscMalloc1(size, &mumps->id.listvar_schur)); in MatFactorSetSchurIS_MUMPS()
3276 for (i = 0; i < size; i++) PetscCall(PetscMUMPSIntCast(idxs[i] + 1, &mumps->id.listvar_schur[i])); in MatFactorSetSchurIS_MUMPS()
3279 if (mumps->id.icntl) mumps->id.ICNTL(26) = -1; in MatFactorSetSchurIS_MUMPS()
3280 else mumps->ICNTL26 = -1; in MatFactorSetSchurIS_MUMPS()
3287 Mat_MUMPS *mumps = (Mat_MUMPS *)F->data; in MatFactorCreateSchurComplement_MUMPS() local
3289 PetscInt i, j, N = mumps->id.size_schur; in MatFactorCreateSchurComplement_MUMPS()
3292 …PetscCheck(mumps->id.ICNTL(19), PetscObjectComm((PetscObject)F), PETSC_ERR_ORDER, "Schur complemen… in MatFactorCreateSchurComplement_MUMPS()
3294 …PetscCall(MatSetSizes(St, PETSC_DECIDE, PETSC_DECIDE, mumps->id.size_schur, mumps->id.size_schur)); in MatFactorCreateSchurComplement_MUMPS()
3298 if (!mumps->sym) { /* MUMPS always return a full matrix */ in MatFactorCreateSchurComplement_MUMPS()
3299 if (mumps->id.ICNTL(19) == 1) { /* stored by rows */ in MatFactorCreateSchurComplement_MUMPS()
3301 for (j = 0; j < N; j++) array[j * N + i] = ID_FIELD_GET(mumps->id, schur, i * N + j); in MatFactorCreateSchurComplement_MUMPS()
3304 PetscCall(MatMumpsCastMumpsScalarArray(N * N, mumps->id.precision, mumps->id.schur, array)); in MatFactorCreateSchurComplement_MUMPS()
3307 if (mumps->id.ICNTL(19) == 2) { /* lower triangular stored by columns */ in MatFactorCreateSchurComplement_MUMPS()
3309 …for (j = i; j < N; j++) array[i * N + j] = array[j * N + i] = ID_FIELD_GET(mumps->id, schur, i * N… in MatFactorCreateSchurComplement_MUMPS()
3311 } else if (mumps->id.ICNTL(19) == 3) { /* full matrix */ in MatFactorCreateSchurComplement_MUMPS()
3312 PetscCall(MatMumpsCastMumpsScalarArray(N * N, mumps->id.precision, mumps->id.schur, array)); in MatFactorCreateSchurComplement_MUMPS()
3315 …for (j = 0; j < i + 1; j++) array[i * N + j] = array[j * N + i] = ID_FIELD_GET(mumps->id, schur, i… in MatFactorCreateSchurComplement_MUMPS()
3326 Mat_MUMPS *mumps = (Mat_MUMPS *)F->data; in MatMumpsSetIcntl_MUMPS() local
3329 …if (mumps->id.job == JOB_NULL) { /* need to cache icntl… in MatMumpsSetIcntl_MUMPS()
3330 …PetscMUMPSInt i, nICNTL_pre = mumps->ICNTL_pre ? mumps->ICNTL_pre[0] : 0; /* number of already cac… in MatMumpsSetIcntl_MUMPS()
3332 if (mumps->ICNTL_pre[1 + 2 * i] == icntl) break; /* is this ICNTL already cached? */ in MatMumpsSetIcntl_MUMPS()
3334 …if (i > 0) PetscCall(PetscRealloc(sizeof(PetscMUMPSInt) * (2 * nICNTL_pre + 3), &mumps->ICNTL_pre)… in MatMumpsSetIcntl_MUMPS()
3335 else PetscCall(PetscCalloc(sizeof(PetscMUMPSInt) * 3, &mumps->ICNTL_pre)); in MatMumpsSetIcntl_MUMPS()
3336 mumps->ICNTL_pre[0]++; in MatMumpsSetIcntl_MUMPS()
3338 mumps->ICNTL_pre[1 + 2 * i] = (PetscMUMPSInt)icntl; in MatMumpsSetIcntl_MUMPS()
3339 PetscCall(PetscMUMPSIntCast(ival, mumps->ICNTL_pre + 2 + 2 * i)); in MatMumpsSetIcntl_MUMPS()
3340 } else PetscCall(PetscMUMPSIntCast(ival, &mumps->id.ICNTL(icntl))); in MatMumpsSetIcntl_MUMPS()
3346 Mat_MUMPS *mumps = (Mat_MUMPS *)F->data; in MatMumpsGetIcntl_MUMPS() local
3349 if (mumps->id.job == JOB_NULL) { in MatMumpsGetIcntl_MUMPS()
3350 PetscInt i, nICNTL_pre = mumps->ICNTL_pre ? mumps->ICNTL_pre[0] : 0; in MatMumpsGetIcntl_MUMPS()
3353 if (mumps->ICNTL_pre[1 + 2 * i] == icntl) *ival = mumps->ICNTL_pre[2 + 2 * i]; in MatMumpsGetIcntl_MUMPS()
3355 } else *ival = mumps->id.ICNTL(icntl); in MatMumpsGetIcntl_MUMPS()
3421 Mat_MUMPS *mumps = (Mat_MUMPS *)F->data; in MatMumpsSetCntl_MUMPS() local
3424 if (mumps->id.job == JOB_NULL) { in MatMumpsSetCntl_MUMPS()
3425 PetscInt i, nCNTL_pre = mumps->CNTL_pre ? mumps->CNTL_pre[0] : 0; in MatMumpsSetCntl_MUMPS()
3427 if (mumps->CNTL_pre[1 + 2 * i] == icntl) break; in MatMumpsSetCntl_MUMPS()
3429 if (i > 0) PetscCall(PetscRealloc(sizeof(PetscReal) * (2 * nCNTL_pre + 3), &mumps->CNTL_pre)); in MatMumpsSetCntl_MUMPS()
3430 else PetscCall(PetscCalloc(sizeof(PetscReal) * 3, &mumps->CNTL_pre)); in MatMumpsSetCntl_MUMPS()
3431 mumps->CNTL_pre[0]++; in MatMumpsSetCntl_MUMPS()
3433 mumps->CNTL_pre[1 + 2 * i] = icntl; in MatMumpsSetCntl_MUMPS()
3434 mumps->CNTL_pre[2 + 2 * i] = val; in MatMumpsSetCntl_MUMPS()
3435 } else ID_CNTL_SET(mumps->id, icntl, val); in MatMumpsSetCntl_MUMPS()
3441 Mat_MUMPS *mumps = (Mat_MUMPS *)F->data; in MatMumpsGetCntl_MUMPS() local
3444 if (mumps->id.job == JOB_NULL) { in MatMumpsGetCntl_MUMPS()
3445 PetscInt i, nCNTL_pre = mumps->CNTL_pre ? mumps->CNTL_pre[0] : 0; in MatMumpsGetCntl_MUMPS()
3448 if (mumps->CNTL_pre[1 + 2 * i] == icntl) *val = mumps->CNTL_pre[2 + 2 * i]; in MatMumpsGetCntl_MUMPS()
3450 } else *val = ID_CNTL_GET(mumps->id, icntl); in MatMumpsGetCntl_MUMPS()
3473 Mat_MUMPS *mumps = (Mat_MUMPS *)F->data; in MatMumpsSetOocTmpDir() local
3478 …PetscCall(PetscStrncpy(mumps->id.ooc_tmpdir, tmpdir, sizeof(((MUMPS_STRUC_C *)NULL)->ooc_tmpdir))); in MatMumpsSetOocTmpDir()
3502 Mat_MUMPS *mumps = (Mat_MUMPS *)F->data; in MatMumpsGetOocTmpDir() local
3507 if (tmpdir) *tmpdir = mumps->id.ooc_tmpdir; in MatMumpsGetOocTmpDir()
3573 Mat_MUMPS *mumps = (Mat_MUMPS *)F->data; in MatMumpsGetInfo_MUMPS() local
3576 *info = mumps->id.INFO(icntl); in MatMumpsGetInfo_MUMPS()
3582 Mat_MUMPS *mumps = (Mat_MUMPS *)F->data; in MatMumpsGetInfog_MUMPS() local
3585 *infog = mumps->id.INFOG(icntl); in MatMumpsGetInfog_MUMPS()
3591 Mat_MUMPS *mumps = (Mat_MUMPS *)F->data; in MatMumpsGetRinfo_MUMPS() local
3594 *rinfo = ID_RINFO_GET(mumps->id, icntl); in MatMumpsGetRinfo_MUMPS()
3600 Mat_MUMPS *mumps = (Mat_MUMPS *)F->data; in MatMumpsGetRinfog_MUMPS() local
3603 *rinfog = ID_RINFOG_GET(mumps->id, icntl); in MatMumpsGetRinfog_MUMPS()
3609 Mat_MUMPS *mumps = (Mat_MUMPS *)F->data; in MatMumpsGetNullPivots_MUMPS() local
3612 …PetscCheck(mumps->id.ICNTL(24) == 1, PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "-mat_mumps_icntl_24 mu… in MatMumpsGetNullPivots_MUMPS()
3615 if (!mumps->myid) { in MatMumpsGetNullPivots_MUMPS()
3616 *size = mumps->id.INFOG(28); in MatMumpsGetNullPivots_MUMPS()
3618 for (int i = 0; i < *size; i++) (*array)[i] = mumps->id.pivnul_list[i] - 1; in MatMumpsGetNullPivots_MUMPS()
3627 Mat_MUMPS *mumps = (Mat_MUMPS *)F->data; in MatMumpsGetInverse_MUMPS() local
3640 if (mumps->petsc_size > 1) { in MatMumpsGetInverse_MUMPS()
3648 mumps->id.nrhs = (PetscMUMPSInt)nrhs; in MatMumpsGetInverse_MUMPS()
3649 PetscCall(PetscMUMPSIntCast(M, &mumps->id.lrhs)); in MatMumpsGetInverse_MUMPS()
3650 mumps->id.rhs = NULL; in MatMumpsGetInverse_MUMPS()
3652 if (!mumps->myid) { in MatMumpsGetInverse_MUMPS()
3656 …PetscCall(PetscMUMPSIntCSRCast(mumps, spnr, ia, ja, &mumps->id.irhs_ptr, &mumps->id.irhs_sparse, &… in MatMumpsGetInverse_MUMPS()
3657 …PETSC_TRUE, ((Mat_SeqAIJ *)Btseq->data)->nz, aa, mumps->id.precision, &mumps->id.rhs_sparse_len, &… in MatMumpsGetInverse_MUMPS()
3659 mumps->id.irhs_ptr = NULL; in MatMumpsGetInverse_MUMPS()
3660 mumps->id.irhs_sparse = NULL; in MatMumpsGetInverse_MUMPS()
3661 mumps->id.nz_rhs = 0; in MatMumpsGetInverse_MUMPS()
3662 if (mumps->id.rhs_sparse_len) { in MatMumpsGetInverse_MUMPS()
3663 PetscCall(PetscFree(mumps->id.rhs_sparse)); in MatMumpsGetInverse_MUMPS()
3664 mumps->id.rhs_sparse_len = 0; in MatMumpsGetInverse_MUMPS()
3667 mumps->id.ICNTL(20) = 1; /* rhs is sparse */ in MatMumpsGetInverse_MUMPS()
3668 mumps->id.ICNTL(21) = 0; /* solution is in assembled centralized format */ in MatMumpsGetInverse_MUMPS()
3671 mumps->id.job = JOB_SOLVE; in MatMumpsGetInverse_MUMPS()
3672 PetscMUMPS_c(mumps); in MatMumpsGetInverse_MUMPS()
3673 …eck(mumps->id.INFOG(1) >= 0, PETSC_COMM_SELF, PETSC_ERR_LIB, "MUMPS error in solve: INFOG(1)=%d IN… in MatMumpsGetInverse_MUMPS()
3675 if (!mumps->myid) { in MatMumpsGetInverse_MUMPS()
3748 Mat_MUMPS *mumps = (Mat_MUMPS *)F->data; in MatMumpsSetBlk_MUMPS() local
3753 PetscCall(PetscMUMPSIntCast(nblk, &mumps->id.nblk)); in MatMumpsSetBlk_MUMPS()
3754 PetscCall(PetscFree(mumps->id.blkptr)); in MatMumpsSetBlk_MUMPS()
3755 PetscCall(PetscMalloc1(nblk + 1, &mumps->id.blkptr)); in MatMumpsSetBlk_MUMPS()
3756 …for (PetscInt i = 0; i < nblk + 1; ++i) PetscCall(PetscMUMPSIntCast(blkptr[i], mumps->id.blkptr + … in MatMumpsSetBlk_MUMPS()
3761 PetscCall(PetscFree(mumps->id.blkvar)); in MatMumpsSetBlk_MUMPS()
3762 PetscCall(PetscMalloc1(F->rmap->N, &mumps->id.blkvar)); in MatMumpsSetBlk_MUMPS()
3763 …for (PetscInt i = 0; i < F->rmap->N; ++i) PetscCall(PetscMUMPSIntCast(blkvar[i], mumps->id.blkvar … in MatMumpsSetBlk_MUMPS()
3766 PetscCall(PetscFree(mumps->id.blkptr)); in MatMumpsSetBlk_MUMPS()
3767 PetscCall(PetscFree(mumps->id.blkvar)); in MatMumpsSetBlk_MUMPS()
3769 mumps->id.nblk = 0; in MatMumpsSetBlk_MUMPS()
4066 Mat_MUMPS *mumps; in MatGetFactor_aij_mumps() local
4085 PetscCall(PetscNew(&mumps)); in MatGetFactor_aij_mumps()
4109 if (isSeqAIJ) mumps->ConvertToTriples = MatConvertToTriples_seqaij_seqaij; in MatGetFactor_aij_mumps()
4110 else if (isDiag) mumps->ConvertToTriples = MatConvertToTriples_diagonal_xaij; in MatGetFactor_aij_mumps()
4111 else if (isDense) mumps->ConvertToTriples = MatConvertToTriples_dense_xaij; in MatGetFactor_aij_mumps()
4112 else mumps->ConvertToTriples = MatConvertToTriples_mpiaij_mpiaij; in MatGetFactor_aij_mumps()
4114 mumps->sym = 0; in MatGetFactor_aij_mumps()
4118 if (isSeqAIJ) mumps->ConvertToTriples = MatConvertToTriples_seqaij_seqsbaij; in MatGetFactor_aij_mumps()
4119 else if (isDiag) mumps->ConvertToTriples = MatConvertToTriples_diagonal_xaij; in MatGetFactor_aij_mumps()
4120 else if (isDense) mumps->ConvertToTriples = MatConvertToTriples_dense_xaij; in MatGetFactor_aij_mumps()
4121 else mumps->ConvertToTriples = MatConvertToTriples_mpiaij_mpisbaij; in MatGetFactor_aij_mumps()
4123 if (PetscDefined(USE_COMPLEX)) mumps->sym = 2; in MatGetFactor_aij_mumps()
4124 else if (A->spd == PETSC_BOOL3_TRUE) mumps->sym = 1; in MatGetFactor_aij_mumps()
4125 else mumps->sym = 2; in MatGetFactor_aij_mumps()
4137 B->data = (void *)mumps; in MatGetFactor_aij_mumps()
4140 mumps->id.job = JOB_NULL; in MatGetFactor_aij_mumps()
4141 mumps->ICNTL_pre = NULL; in MatGetFactor_aij_mumps()
4142 mumps->CNTL_pre = NULL; in MatGetFactor_aij_mumps()
4143 mumps->matstruc = DIFFERENT_NONZERO_PATTERN; in MatGetFactor_aij_mumps()
4151 Mat_MUMPS *mumps; in MatGetFactor_sbaij_mumps() local
4166 PetscCall(PetscNew(&mumps)); in MatGetFactor_sbaij_mumps()
4169 mumps->ConvertToTriples = MatConvertToTriples_seqsbaij_seqsbaij; in MatGetFactor_sbaij_mumps()
4171 mumps->ConvertToTriples = MatConvertToTriples_mpisbaij_mpisbaij; in MatGetFactor_sbaij_mumps()
4195 if (PetscDefined(USE_COMPLEX)) mumps->sym = 2; in MatGetFactor_sbaij_mumps()
4196 else if (A->spd == PETSC_BOOL3_TRUE) mumps->sym = 1; in MatGetFactor_sbaij_mumps()
4197 else mumps->sym = 2; in MatGetFactor_sbaij_mumps()
4209 B->data = (void *)mumps; in MatGetFactor_sbaij_mumps()
4212 mumps->id.job = JOB_NULL; in MatGetFactor_sbaij_mumps()
4213 mumps->ICNTL_pre = NULL; in MatGetFactor_sbaij_mumps()
4214 mumps->CNTL_pre = NULL; in MatGetFactor_sbaij_mumps()
4215 mumps->matstruc = DIFFERENT_NONZERO_PATTERN; in MatGetFactor_sbaij_mumps()
4222 Mat_MUMPS *mumps; in MatGetFactor_baij_mumps() local
4234 PetscCall(PetscNew(&mumps)); in MatGetFactor_baij_mumps()
4238 if (isSeqBAIJ) mumps->ConvertToTriples = MatConvertToTriples_seqbaij_seqaij; in MatGetFactor_baij_mumps()
4239 else mumps->ConvertToTriples = MatConvertToTriples_mpibaij_mpiaij; in MatGetFactor_baij_mumps()
4240 mumps->sym = 0; in MatGetFactor_baij_mumps()
4271 B->data = (void *)mumps; in MatGetFactor_baij_mumps()
4274 mumps->id.job = JOB_NULL; in MatGetFactor_baij_mumps()
4275 mumps->ICNTL_pre = NULL; in MatGetFactor_baij_mumps()
4276 mumps->CNTL_pre = NULL; in MatGetFactor_baij_mumps()
4277 mumps->matstruc = DIFFERENT_NONZERO_PATTERN; in MatGetFactor_baij_mumps()
4285 Mat_MUMPS *mumps; in MatGetFactor_sell_mumps() local
4297 PetscCall(PetscNew(&mumps)); in MatGetFactor_sell_mumps()
4319 mumps->ConvertToTriples = MatConvertToTriples_seqsell_seqaij; in MatGetFactor_sell_mumps()
4320 mumps->sym = 0; in MatGetFactor_sell_mumps()
4332 B->data = (void *)mumps; in MatGetFactor_sell_mumps()
4335 mumps->id.job = JOB_NULL; in MatGetFactor_sell_mumps()
4336 mumps->ICNTL_pre = NULL; in MatGetFactor_sell_mumps()
4337 mumps->CNTL_pre = NULL; in MatGetFactor_sell_mumps()
4338 mumps->matstruc = DIFFERENT_NONZERO_PATTERN; in MatGetFactor_sell_mumps()
4346 Mat_MUMPS *mumps; in MatGetFactor_nest_mumps() local
4426 PetscCall(PetscNew(&mumps)); in MatGetFactor_nest_mumps()
4450 mumps->sym = 0; in MatGetFactor_nest_mumps()
4454 if (PetscDefined(USE_COMPLEX)) mumps->sym = 2; in MatGetFactor_nest_mumps()
4455 else if (A->spd == PETSC_BOOL3_TRUE) mumps->sym = 1; in MatGetFactor_nest_mumps()
4456 else mumps->sym = 2; in MatGetFactor_nest_mumps()
4458 mumps->ConvertToTriples = MatConvertToTriples_nest_xaij; in MatGetFactor_nest_mumps()
4471 B->data = (void *)mumps; in MatGetFactor_nest_mumps()
4474 mumps->id.job = JOB_NULL; in MatGetFactor_nest_mumps()
4475 mumps->ICNTL_pre = NULL; in MatGetFactor_nest_mumps()
4476 mumps->CNTL_pre = NULL; in MatGetFactor_nest_mumps()
4477 mumps->matstruc = DIFFERENT_NONZERO_PATTERN; in MatGetFactor_nest_mumps()