49inverse(std::vector<PetscScalar> & A,
unsigned int n)
51 mooseAssert(n >= 1,
"MatrixTools::inverse - n (leading dimension) needs to be positive");
52 mooseAssert(n <= std::numeric_limits<unsigned int>::max(),
53 "MatrixTools::inverse - n (leading dimension) too large");
55 std::vector<PetscBLASInt> ipiv(n);
56 std::vector<PetscScalar> buffer(n * 64);
61 PetscBLASInt return_value;
62 LAPACKgetrf_(
reinterpret_cast<PetscBLASInt *
>(&n),
63 reinterpret_cast<PetscBLASInt *
>(&n),
65 reinterpret_cast<PetscBLASInt *
>(&n),
69 if (return_value != 0)
73 " was invalid during LU factorization in MatrixTools::inverse."
75 " was exactly zero during LU factorization in MatrixTools::inverse.");
78 PetscBLASInt buffer_size = buffer.size();
79 LAPACKgetri_(
reinterpret_cast<PetscBLASInt *
>(&n),
81 reinterpret_cast<PetscBLASInt *
>(&n),
87 if (return_value != 0)
90 " was invalid during invert in MatrixTools::inverse."
92 " was exactly zero during invert in MatrixTools::inverse.");