Macaulay2 Engine
Loading...
Searching...
No Matches

◆ vec_row_op2()

template<typename CoeffRing>
void SMat< CoeffRing >::vec_row_op2 ( sparsevec *& v,
size_t r1,
size_t r2,
const elem & a1,
const elem & a2,
const elem & b1,
const elem & b2 ) const
private

Definition at line 664 of file smat.hpp.

674{
675 // v[row r1] = a1 * v[r1] + a2 * v[r2]
676 // v[row r2] = b1 * v[r1] + b2 * v[r2]
677 Element e1(ring()), e2(ring()), c1(ring()), c2(ring()), c3(ring()),
678 c4(ring());
679
680 ring().set_zero(c1);
681 ring().set_zero(c2);
682 ring().set_zero(c3);
683 ring().set_zero(c4);
684 ring().set_zero(e1);
685 ring().set_zero(e2);
686 bool r1_nonzero = vec_get_entry(v, r1, e1);
687 bool r2_nonzero = vec_get_entry(v, r2, e2);
688 if (!r1_nonzero && !r2_nonzero)
689 {
690 return;
691 }
692 if (r1_nonzero)
693 {
694 ring().mult(c1, a1, e1);
695 ring().mult(c3, b1, e1);
696 }
697 if (r2_nonzero)
698 {
699 ring().mult(c2, a2, e2);
700 ring().mult(c4, b2, e2);
701 }
702
703 ring().add(c1, c1, c2);
704 ring().add(c3, c3, c4);
705 vec_set_entry(v, r1, c1);
706 vec_set_entry(v, r2, c3);
707}
const CoeffRing & ring() const
Definition smat.hpp:104
CoeffRing::Element Element
Definition smat.hpp:52
void vec_set_entry(sparsevec *&v, size_t r, const elem &result) const
Definition smat.hpp:347
bool vec_get_entry(const sparsevec *v, size_t r, elem &result) const
Definition smat.hpp:331
Definition smat.hpp:43

References ring(), vec_get_entry(), and vec_set_entry().

Referenced by row2by2().