|
MOAB
4.9.3pre
|
#include <SparseLU_kernel_bmod.h>
Static Public Member Functions | |
| template<typename BlockScalarVector , typename ScalarVector , typename IndexVector > | |
| static EIGEN_DONT_INLINE void | run (const Index, BlockScalarVector &dense, ScalarVector &, ScalarVector &lusup, Index &luptr, const Index lda, const Index nrow, IndexVector &lsub, const Index lptr, const Index no_zeros) |
Definition at line 91 of file SparseLU_kernel_bmod.h.
| EIGEN_DONT_INLINE void Eigen::internal::LU_kernel_bmod< 1 >::run | ( | const Index | , |
| BlockScalarVector & | dense, | ||
| ScalarVector & | , | ||
| ScalarVector & | lusup, | ||
| Index & | luptr, | ||
| const Index | lda, | ||
| const Index | nrow, | ||
| IndexVector & | lsub, | ||
| const Index | lptr, | ||
| const Index | no_zeros | ||
| ) | [static] |
Definition at line 100 of file SparseLU_kernel_bmod.h.
{
typedef typename ScalarVector::Scalar Scalar;
typedef typename IndexVector::Scalar StorageIndex;
Scalar f = dense(lsub(lptr + no_zeros));
luptr += lda * no_zeros + no_zeros + 1;
const Scalar* a(lusup.data() + luptr);
const StorageIndex* irow(lsub.data()+lptr + no_zeros + 1);
Index i = 0;
for (; i+1 < nrow; i+=2)
{
Index i0 = *(irow++);
Index i1 = *(irow++);
Scalar a0 = *(a++);
Scalar a1 = *(a++);
Scalar d0 = dense.coeff(i0);
Scalar d1 = dense.coeff(i1);
d0 -= f*a0;
d1 -= f*a1;
dense.coeffRef(i0) = d0;
dense.coeffRef(i1) = d1;
}
if(i<nrow)
dense.coeffRef(*(irow++)) -= f * *(a++);
}