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

◆ nullSpace()

size_t ffpackInterface::nullSpace ( const DMatZZpFFPACK & A,
DMatZZpFFPACK & result_nullspace )

Definition at line 136 of file dmat.cpp.

137{
138 bool right_side = true; // This function is written so that one could set
139 // right_side to false.
140 // (It used to be a parameter).
141
142 DMatZZpFFPACK N(mat); // copy of mat
143 size_t nr = mat.numRows();
144 size_t nc = mat.numColumns();
145
146 DMatZZpFFPACK::ElementType* nullspaceFFPACK = nullptr;
147
148 size_t nullspace_dim;
149 size_t nullspace_leading_dim;
150
151 FFPACK::NullSpaceBasis(mat.ring().field(),
152 (right_side ? FFLAS::FflasRight : FFLAS::FflasLeft),
153 nr,
154 nc,
155 N.rowMajorArray(),
156 nc,
157 nullspaceFFPACK,
158 nullspace_leading_dim,
159 nullspace_dim);
160
161 // std::cerr << "leading dim = " << nullspace_leading_dim << " and dim = "
162 // << nullspace_dim << std::endl;
163 if (right_side && nullspace_dim != nullspace_leading_dim)
164 {
165 std::cerr << "error: this should not happen!" << std::endl;
166 }
167 else if (!right_side && nullspace_leading_dim != nc)
168 {
169 std::cerr << "error: this should not happen either!" << std::endl;
170 }
171
172 if (right_side)
173 nullspace.resize(nc, nullspace_dim);
174 else
175 nullspace.resize(nullspace_dim, nr);
176
177 std::swap(nullspace.rowMajorArray(), nullspaceFFPACK);
178
179 delete[] nullspaceFFPACK;
180 return nullspace_dim;
181}
#define DMatZZpFFPACK
void swap(mpfr::mpreal &x, mpfr::mpreal &y)
Definition mpreal.h:3244

References DMatZZpFFPACK, and std::swap().

Referenced by DMatLinAlg< M2::ARingZZpFFPACK >::kernel().