16#ifndef BELFEM_FN_SMITH_HPP
17#define BELFEM_FN_SMITH_HPP
29 for (
uint k = 0; k < n; k++)
32 aMat(i-1,k) = aMat(j-1,k);
46 for (
uint k = 0; k < m; k++)
49 aMat(k,i-1) = aMat(k,j-1);
61 for (
uint k = 0; k < n; k++)
74 for (
uint k = 0; k < m; k++)
87 for (
uint k = 0; k < n; k++)
89 aMat(i-1,k) +=
q*aMat(j-1,k) ;
100 for (
uint k = 0; k < m; k++)
102 aMat(k,j-1) +=
q*aMat(k,i-1) ;
179 for(
uint i = k+1; i < m+1; ++i)
181 const int q = floor(aMat(i-1,l-1)/aMat(k-1,l-1));
193 for(
uint i = l+1; i < n+1; ++i)
195 const int q = floor(aMat(k-1,i-1)/aMat(k-1,l-1));
203 std::pair<uint, uint>
208 while (
alpha == 0 && k < v.length())
214 for(
uint i = k; i < v.length(); ++i)
216 if (abs(v(i)) <
alpha && abs(v(i)) != 0)
222 return std::pair(
alpha,i0);
246 for (
uint i = k; i < m; ++i)
248 if (aMat(i,l-1) != 0)
261 for (
uint i = k; i < m; ++i)
263 if (aMat(i,l-1) != 0)
275 std::tuple< Matrix< T >, Matrix< T >,
uint >
282 for(
uint i = 0; i < m; ++i)
292 while (k < m and n > 0)
296 for (
uint i = k; i < m; ++i)
298 if (aMat(i,l-1) != 0)
313 for (
uint i = k; i < m; i++ )
315 if ( aMat( i, l-1 ) != 0 )
335 std::tuple< Matrix< T >, Matrix< T > >
341 tMatT =
trans(tMatT);
348 for(
uint i = k; i < n; ++i)
352 tKer(j,tCount) = tPT(j,i);
358 for(
uint i = 0; i < k; ++i)
362 tIm(j,i) = tMatT(j,i);
366 return std::tuple< Matrix< T >,
Matrix< T > > (tKer, tIm);
372 std::pair<uint, uint>
378 moveMinNonzero(Matrix< int > &aMat, Matrix< int > &aQ, Matrix< int > &aQ_, Matrix< int > &aR, Matrix< int > &aR_,
const uint k);
382 std::tuple< bool, uint, uint, int >
388 partSmithForm(Matrix< int > &aMat, Matrix< int > &aQ, Matrix< int > &aQ_, Matrix< int > &aR, Matrix< int > &aR_,
const uint k);
392 std::tuple< Matrix< int >, Matrix< int >,Matrix< int >,Matrix< int >,
uint,
uint >
398 SolveInt(Matrix< int > aMat, Matrix< int > &aVec);
Dense column-major matrix.
Definition cl_BZ_Matrix.hpp:28
auto col(const size_t aColIndex) -> decltype(mMatrix.col(aColIndex))
Definition cl_AR_Matrix.hpp:347
size_t n_rows() const
Definition cl_AR_Matrix.hpp:205
Matrix()=default
empty constructor
size_t n_cols() const
Definition cl_AR_Matrix.hpp:213
Column vector.
Definition cl_BZ_Vector.hpp:41
USER GUIDES:
Definition cl_Capacitor.cpp:16
void rowReduce(Matrix< T > &aMat, Matrix< T > &aQ, Matrix< T > &aQ_, const uint k, const uint l)
Definition fn_Smith.hpp:240
Matrix< int > SolveInt(Matrix< int > aMat, Matrix< int > &aVec)
Definition fn_Smith.cpp:224
void columnMultiplyOperation(Matrix< T > &aMat, Matrix< T > &aR, Matrix< T > &aR_, const uint i)
Definition fn_Smith.hpp:154
std::tuple< Matrix< T >, Matrix< T > > kernelImage(Matrix< T > &aMat)
Definition fn_Smith.hpp:336
std::tuple< bool, uint, uint, int > checkForDivisibility(Matrix< int > &aMat, const uint k)
Definition fn_Smith.cpp:61
void columnAdd(Matrix< T > &aMat, const uint i, const uint j, const int q)
Definition fn_Smith.hpp:97
void rowPrepare(Matrix< T > &aMat, Matrix< T > &aQ, Matrix< T > &aQ_, const uint k, const uint l)
Definition fn_Smith.hpp:229
void rowExchangeOperation(Matrix< T > &aMat, Matrix< T > &aQ, Matrix< T > &aQ_, const uint i, const uint j)
Definition fn_Smith.hpp:110
void rowAddOperation(Matrix< T > &aMat, Matrix< T > &aQ, Matrix< T > &aQ_, const uint i, const uint j, const int q)
Definition fn_Smith.hpp:132
std::pair< uint, uint > minNonzero(Matrix< int > &aMat, const uint k)
Definition fn_Smith.cpp:26
unsigned int uint
Definition typedefs.hpp:30
void rowExchange(Matrix< T > &aMat, const uint i, const uint j)
Definition fn_Smith.hpp:25
auto trans(Matrix< T > &aMatrix) -> decltype(trans(aMatrix.matrix_data()))
Definition fn_trans.hpp:74
void rowAdd(Matrix< T > &aMat, const uint i, const uint j, const int q)
Definition fn_Smith.hpp:84
std::tuple< Matrix< int >, Matrix< int >, Matrix< int >, Matrix< int >, uint, uint > smithForm(Matrix< int > &aMat)
Definition fn_Smith.cpp:143
void rowMultiply(Matrix< T > &aMat, const uint i)
Definition fn_Smith.hpp:58
void columnMultiply(Matrix< T > &aMat, const uint i)
Definition fn_Smith.hpp:71
std::tuple< Matrix< T >, Matrix< T >, uint > rowEchelon(Matrix< T > &aMat)
Definition fn_Smith.hpp:276
void partSmithForm(Matrix< int > &aMat, Matrix< int > &aQ, Matrix< int > &aQ_, Matrix< int > &aR, Matrix< int > &aR_, const uint k)
Definition fn_Smith.cpp:84
@ alpha
Definition cl_Material.hpp:161
@ q
Definition cl_Material.hpp:176
void columnExchange(Matrix< T > &aMat, const uint i, const uint j)
Definition fn_Smith.hpp:42
void rowMultiplyOperation(Matrix< T > &aMat, Matrix< T > &aQ, Matrix< T > &aQ_, const uint i)
Definition fn_Smith.hpp:121
void moveMinNonzero(Matrix< int > &aMat, Matrix< int > &aQ, Matrix< int > &aQ_, Matrix< int > &aR, Matrix< int > &aR_, const uint k)
Definition fn_Smith.cpp:50
void columnExchangeOperation(Matrix< T > &aMat, Matrix< T > &aR, Matrix< T > &aR_, const uint i, const uint j)
Definition fn_Smith.hpp:143
void columnAddOperation(Matrix< T > &aMat, Matrix< T > &aR, Matrix< T > &aR_, const uint i, const uint j, const int q)
Definition fn_Smith.hpp:165
void partColumnReduce(Matrix< T > &aMat, Matrix< T > &aR, Matrix< T > &aR_, const uint k, const uint l)
Definition fn_Smith.hpp:190
std::pair< uint, uint > smallestNonzero(Vector< T > &v, uint k)
Definition fn_Smith.hpp:204
void partRowReduce(Matrix< T > &aMat, Matrix< T > &aQ, Matrix< T > &aQ_, const uint k, const uint l)
Definition fn_Smith.hpp:176