28 template<
typename T,
bool symm>
34 typedef std::vector<gsDofMapper> DofMappers;
149 const index_t ms = mappers.size();
151 GISMO_ASSERT(ms==s ||ms==2*s,
"Connot deduce block structure");
158 for(
index_t j=0; j<dims[i];++j)
172 else if ( ms == 2*s )
180 for (
index_t r = 1; r < d; ++r)
182 for (
index_t c = 1; c < d; ++c)
214 GISMO_ASSERT( rows > 0 && cols > 0,
"Block dimensions must be positive");
218 if ( static_cast<index_t>(
m_mappers.size()) == rows + cols )
223 else if ( static_cast<index_t>(
m_mappers.size()) == rows )
225 GISMO_ENSURE( rows == cols,
"Dof Mapper vector does not match block dimensions");
283 m_dims(colInd.size())
291 "Block dimensions must be positive");
319 m_dims .swap(other.m_dims );
362 const T bdA = opt.
getReal(
"bdA");
364 const T bdO = opt.
getReal(
"bdO");
367 for (
short_t i = 0; i != b.dim(); ++i)
368 nz *= bdA * cast<short_t,T>(b.
degree(i)) + cast<index_t,T>(bdB);
369 return cast<T,short_t>(nz*(1.0+bdO));
414 for (
index_t r = 0; r != rowSizes.size(); ++r)
417 for (
index_t c = 0; c != colSizes.size(); ++c)
521 {
return m_dims[unk];}
534 return 0 !=
m_col.size();
641 const size_t r = 0,
const size_t c = 0)
643 const index_t numActive = actives.rows();
647 for (
index_t i = 0; i != numActive; ++i)
653 for (
index_t j = 0; j != numActive; ++j)
661 if ( (!symm) || jj <= ii )
662 m_matrix.coeffRef(ii, jj) += localMat(i, j);
664 else if(0!=eliminatedDofs.size())
666 m_rhs.row(ii).noalias() -= localMat(i, j) *
693 const size_t r = 0,
const size_t c = 0)
695 const index_t numActive_i = actives_i.rows();
696 const index_t numActive_j = actives_j.rows();
701 for (
index_t i = 0; i != numActive_i; ++i)
707 for (
index_t j = 0; j != numActive_j; ++j)
715 if ( (!symm) || jj <= ii )
716 m_matrix.coeffRef(ii, jj) += localMat(i, j);
720 m_rhs.row(ii).noalias() -= localMat(i, j) *
742 const size_t r = 0,
const size_t c = 0)
744 const index_t numActive = actives.rows();
747 for (
index_t i = 0; i != numActive; ++i)
751 for (
index_t j = 0; j != numActive; ++j)
757 if ( (!symm) || jj <= ii )
758 m_matrix.coeffRef(ii, jj) += localMat(i, j);
781 const size_t r = 0,
const size_t c = 0)
783 const index_t numActive_i = actives_i.rows();
784 const index_t numActive_j = actives_j.rows();
786 for (
index_t i = 0; i != numActive_i; ++i)
790 for (
index_t j = 0; j != numActive_j; ++j)
796 if ( (!symm) || jj <= ii )
797 m_matrix.coeffRef(ii, jj) += localMat(i, j);
825 for (
index_t r_ind = 0; r_ind != r_vec.size(); ++r_ind)
827 size_t r = r_vec(r_ind);
829 const index_t numActive_i = actives_vec[r].rows();
831 for (
index_t c_ind = 0; c_ind != c_vec.size(); ++c_ind)
833 size_t c = c_vec(c_ind);
835 const index_t numActive_j = actives_vec[c].rows();
836 const gsMatrix<T> & eliminatedDofs_j = eliminatedDofs[c];
838 for (
index_t i = 0; i != numActive_i; ++i)
840 const int ii =
m_rstr.
at(r) + actives_vec[r].at(i);
841 const int iiLocal = rstrLocal + i;
846 for (
index_t j = 0; j != numActive_j; ++j)
848 const int jj =
m_cstr.
at(c) + actives_vec[c].at(j);
849 const int jjLocal = cstrLocal + j;
855 if ( (!symm) || jj <= ii )
856 m_matrix.coeffRef(ii, jj) += localMat(iiLocal, jjLocal);
860 m_rhs.row(ii).noalias() -= localMat(iiLocal, jjLocal) * eliminatedDofs_j.row( colMap.
global_to_bindex(actives_vec[c].at(j)));
865 cstrLocal += numActive_j;
868 rstrLocal += numActive_i;
889 const index_t numActive = actives.rows();
891 for (
index_t i = 0; i != numActive; ++i)
896 m_rhs.row(ii) += localRhs.row(i);
912 const index_t numActive = actives.rows();
914 for (
index_t i = 0; i != numActive; ++i)
917 m_rhs.row(ii) += localRhs.row(i);
936 for (
index_t r_ind = 0; r_ind != r_vec.size(); ++r_ind)
940 const index_t numActive_i = actives_vec[r].rows();
943 for (
index_t i = 0; i != numActive_i; ++i)
945 const int ii =
m_rstr.
at(r) + actives_vec[r].at(i);
946 const int iiLocal = rstrLocal + i;
950 m_rhs.row(ii) += localRhs.row(iiLocal);
953 rstrLocal += numActive_i;
976 const size_t r = 0,
const size_t c = 0)
978 const index_t numActive = actives.rows();
985 for (
index_t i = 0; i != numActive; ++i)
987 const int ii =
m_rstr.
at(r) + actives(i);
990 m_rhs.row(ii) += localRhs.row(i);
992 for (
index_t j = 0; j < numActive; ++j)
994 const int jj =
m_cstr.
at(c) + actives(j);
999 if ( (!symm) || jj <= ii )
1000 m_matrix.coeffRef(ii, jj) += localMat(i, j);
1004 m_rhs.row(ii).noalias() -= localMat(i, j) *
1031 const size_t r = 0,
const size_t c = 0)
1033 const index_t numActive_i = actives_i.rows();
1034 const index_t numActive_j = actives_j.rows();
1041 for (
index_t i = 0; i != numActive_i; ++i)
1043 const int ii =
m_rstr.
at(r) + actives_i.
at(i);
1046 m_rhs.row(ii) += localRhs.row(i);
1048 for (
index_t j = 0; j < numActive_j; ++j)
1050 const int jj =
m_cstr.
at(c) + actives_j.
at(j);
1055 if ( (!symm) || jj <= ii )
1056 m_matrix.coeffRef(ii, jj) += localMat(i, j);
1060 m_rhs.row(ii).noalias() -= localMat(i, j) *
1085 const size_t r = 0,
const size_t c = 0)
1087 const index_t numActive = actives.rows();
1090 for (
index_t j=0; j!=numActive; ++j)
1092 const unsigned jj =
m_cstr.
at(c) + actives(j);
1093 m_rhs.row(jj) += localRhs.row(j);
1094 for (
index_t i=0; i!=numActive; ++i)
1096 const unsigned ii =
m_rstr.
at(r) + actives(i);
1099 if ( (!symm) || jj <= ii )
1100 m_matrix( ii, jj ) += localMat(i,j);
1132 for (
index_t r_ind = 0; r_ind != r_vec.size(); ++r_ind)
1136 const index_t numActive_i = actives_vec[r].rows();
1138 for (
index_t c_ind = 0; c_ind != c_vec.size(); ++c_ind)
1142 const index_t numActive_j = actives_vec[c].rows();
1143 const gsMatrix<T> & eliminatedDofs_j = eliminatedDofs[c];
1145 for (
index_t i = 0; i != numActive_i; ++i)
1147 const int ii =
m_rstr.
at(r) + actives_vec[r].at(i);
1148 const int iiLocal = rstrLocal + i;
1154 m_rhs.row(ii) += localRhs.row(iiLocal);
1156 for (
index_t j = 0; j != numActive_j; ++j)
1158 const int jj =
m_cstr.
at(c) + actives_vec[c].at(j);
1159 const int jjLocal = cstrLocal + j;
1165 if ( (!symm) || jj <= ii )
1166 m_matrix.coeffRef(ii, jj) += localMat(iiLocal, jjLocal);
1170 m_rhs.row(ii).noalias() -= localMat(iiLocal, jjLocal) * eliminatedDofs_j.row( colMap.
global_to_bindex(actives_vec[c].at(j)));
1175 cstrLocal += numActive_j;
1178 rstrLocal += numActive_i;
1208 for (
size_t r = 0; r != actives.size(); ++r)
1211 const index_t numRowActive = actives[r].rows();
1213 for (
size_t c = 0; c != actives.size(); ++c)
1217 for (
index_t i = 0; i != numRowActive; ++i)
1219 const int ii =
m_rstr.
at(r) + actives[r].at(i);
1222 m_rhs.row(ii) += localRhs.row(i + r * numRowActive);
1223 const index_t numColActive = actives[c].rows();
1225 for (
index_t j = 0; j < numColActive; ++j)
1227 const int jj =
m_cstr.
at(c) + actives[c].at(j);
1232 if ( (!symm) || jj <= ii )
1233 m_matrix.coeffRef(ii, jj) += localMat(i + r * numRowActive,
1234 j + c * numRowActive);
1238 m_rhs.
at(ii) -= localMat(i + r * numRowActive, j + c * numRowActive) *
1289 const size_t r = 0,
const size_t c = 0)
1291 const index_t numActive = actives.rows();
1295 for (
index_t i = 0; i != numActive; ++i)
1301 for (
index_t j = 0; j != numActive; ++j)
1308 if ( (!symm) || jj <= ii )
1309 m_matrix.coeffRef(ii, jj) += localMat(i, j);
1332 const size_t r = 0,
const size_t c = 0)
1334 const index_t numActive_i = actives_i.rows();
1335 const index_t numActive_j = actives_j.rows();
1340 for (
index_t i = 0; i != numActive_i; ++i)
1342 const int ii =
m_rstr.
at(r) + actives_i.
at(i);
1346 for (
index_t j = 0; j != numActive_j; ++j)
1348 const int jj =
m_cstr.
at(c) + actives_j.
at(j);
1353 if ( (!symm) || jj <= ii )
1354 m_matrix.coeffRef(ii, jj) += localMat(i, j);
1376 const size_t r = 0,
const size_t c = 0)
1380 const index_t numActive = actives.rows();
1384 for (
index_t i = 0; i != numActive; ++i)
1386 const int ii =
m_rstr.
at(r) + actives(i);
1389 m_rhs.row(ii) += localRhs.row(i);
1391 for (
index_t j = 0; j != numActive; ++j)
1393 const int jj =
m_cstr.
at(c) + actives(j);
1398 if ( (!symm) || jj <= ii )
1399 m_matrix.coeffRef(ii, jj) += localMat(i, j);
1413 const size_t r = 0,
const size_t c = 0)
1421 for (
index_t i = 0; i<localMat.outerSize(); ++i)
1424 const int ii =
m_rstr.
at(r) + actives_i.
at(it.row());
1427 const int jj =
m_cstr.
at(c) + actives_j.
at(it.col());
1432 if ( (!symm) || jj <= ii )
1433 m_matrix.coeffRef(ii, jj) += it.value();
1437 m_rhs.row(ii).noalias() -= it.value() *
1443 for(
index_t i=0; i<actives_i.rows();++i)
1445 const int ii =
m_rstr.
at(r) + actives_i.
at(i);
1447 m_rhs.row(ii) += localRhs.row(i);
1455 std::ostream &operator<<(std::ostream &os, gsSparseSystem<T> & ss)
1458 os <<
"Right-hand side: "
1459 << ss.rhs().rows() <<
"x"<< ss.rhs().cols() <<
"\n";
matBlockView blockView()
returns a block view of the matrix, easy way to extract single blocks
Definition: gsSparseSystem.h:410
void reserve(const index_t nz, const index_t numRhs)
reserve reserves the memory for the sparse matrix and the rhs.
Definition: gsSparseSystem.h:327
void pushToMatrix(const gsMatrix< T > &localMat, const gsMatrix< index_t > &actives_i, const gsMatrix< index_t > &actives_j, const gsMatrix< T > &eliminatedDofs_j, const size_t r=0, const size_t c=0)
pushToMatrix pushes the local matrix for an element to the global system,
Definition: gsSparseSystem.h:689
matBlockView blockView(size_t numRowBlocksNew, size_t numColBlocksNew, const gsVector< index_t > &rowBlocksNew, const gsVector< index_t > &colBlocksNew)
returns a block view of the matrix, where you can choose which blocks (of gsSparseSystem) should be c...
Definition: gsSparseSystem.h:438
void pushToRhsAllFree(const gsMatrix< T > &localRhs, const gsMatrix< index_t > &actives, const size_t r=0)
pushToRhsAllFree pushes the local rhs for an element to the global system
Definition: gsSparseSystem.h:908
void push(const gsMatrix< T > &localMat, const gsMatrix< T > &localRhs, const std::vector< gsMatrix< index_t > > &actives_vec, const std::vector< gsMatrix< T > > &eliminatedDofs, const gsVector< index_t > &r_vec, const gsVector< index_t > &c_vec)
pushToMatrix pushes one local matrix and rhs consisting of several blocks corresponding to blocks of ...
Definition: gsSparseSystem.h:1122
BlockView blockView(const gsVector< index_t > &rowSizes, const gsVector< index_t > &colSizes)
Return a block view of the matrix with rowSizes and colSizes.
Definition: gsSparseMatrix.h:298
void mapColIndices(const gsMatrix< index_t > &actives, const index_t patchIndex, gsMatrix< index_t > &result, const index_t c=0) const
mapColIndices Maps a set of basis indices by the corresponding dofMapper.
Definition: gsSparseSystem.h:584
#define GISMO_NO_IMPLEMENTATION
Definition: gsDebug.h:129
void pushToMatrix(const gsMatrix< T > &localMat, const gsMatrix< index_t > &actives, const gsMatrix< T > &eliminatedDofs, const size_t r=0, const size_t c=0)
pushToMatrix pushes the local matrix for an element to the global system,
Definition: gsSparseSystem.h:638
GISMO_DEPRECATED void push(const gsMatrix< T > &localMat, const gsMatrix< T > &localRhs, const gsMatrix< index_t > &actives, const size_t r=0, const size_t c=0)
push pushes the local system matrix and rhs for an element to the global system,
Definition: gsSparseSystem.h:1373
GISMO_DEPRECATED void pushToMatrix(const gsMatrix< T > &localMat, const gsMatrix< index_t > &actives_i, const gsMatrix< index_t > &actives_j, const size_t r=0, const size_t c=0)
pushToMatrix pushes the local matrix for an element to the global system,
Definition: gsSparseSystem.h:1329
Simple wrapper class for a vector of objects.
Definition: gsStdVectorRef.h:27
index_t rhsCols() const
the number of right-hand side vectors
Definition: gsSparseSystem.h:389
#define short_t
Definition: gsConfig.h:35
void mapRowIndices(const gsMatrix< index_t > &actives, const index_t patchIndex, gsMatrix< index_t > &result, const index_t r=0) const
mapRowIndices Maps a set of basis indices by the corresponding dofMapper.
Definition: gsSparseSystem.h:567
gsSparseSystem(DofMappers &mappers, const gsVector< index_t > &dims)
gsSparseSystem Constructor of a sparse System specified by the number of unknows for each block...
Definition: gsSparseSystem.h:139
gsSparseSystem(DofMappers &mappers, const gsVector< index_t > &rowInd, const gsVector< index_t > &colInd, const gsVector< index_t > &colvar)
gsSparseSystem The constructor for the sparse system given the set of mappers, may be different for e...
Definition: gsSparseSystem.h:275
index_t cols() const
the number of matrix columns
Definition: gsSparseSystem.h:380
index_t unkSize(const index_t unk) const
return the number of components for the given component
Definition: gsSparseSystem.h:520
void mapToGlobalColIndex(const index_t active, const index_t patchIndex, index_t &result, const index_t c=0) const
mapToGlobalColIndex Maps a single basis index to the final position in the system, i.e. including the right shift due to the block structure
Definition: gsSparseSystem.h:616
virtual short_t degree(short_t i) const
Degree with respect to the i-th variable. If the basis is a tensor product of (piecewise) polynomial ...
Definition: gsBasis.hpp:650
void reserve(const gsMultiBasis< T > &mb, const gsOptionList &opt, const index_t numRhs)
Reserves the memory for the sparse matrix and the rhs, based on the polynomial degree of the first ba...
Definition: gsSparseSystem.h:350
gsSparseMatrix< T > m_matrix
the system matrix
Definition: gsSparseSystem.h:43
gsVector< index_t > m_cstr
strides for the column blocks (shifting of mapped indices). The mapper do not have this information a...
Definition: gsSparseSystem.h:72
gsVector< index_t > m_cvar
map between column blocks and used multibasis (which unknown/component correlate to which multibasis)...
Definition: gsSparseSystem.h:77
index_t numColBlocks() const
returns the number of column blocks
Definition: gsSparseSystem.h:472
#define index_t
Definition: gsConfig.h:32
#define GISMO_ENSURE(cond, message)
Definition: gsDebug.h:102
void push(const gsMatrix< T > &localMat, const gsMatrix< T > &localRhs, const gsMatrix< index_t > &actives, const gsMatrix< T > &eliminatedDofs, const size_t r=0, const size_t c=0)
push pushes the local system matrix and rhs for an element to the global system,
Definition: gsSparseSystem.h:972
const index_t & getInt(const std::string &label) const
Reads value for option label from options.
Definition: gsOptionList.cpp:37
A matrix with arbitrary coefficient type and fixed or dynamic size.
Definition: gsMatrix.h:38
index_t rows() const
the number of matrix rows
Definition: gsSparseSystem.h:383
GISMO_DEPRECATED void pushToMatrix(const gsMatrix< T > &localMat, const gsMatrix< index_t > &actives, const size_t r=0, const size_t c=0)
pushToMatrix pushes the local matrix for an element to the global system,
Definition: gsSparseSystem.h:1287
#define GISMO_ASSERT(cond, message)
Definition: gsDebug.h:89
gsVector< index_t > m_col
map between column blocks and index of m_mappers i.e. col block j is described by m_mappers[m_col[j]]...
Definition: gsSparseSystem.h:64
Maintains a mapping from patch-local dofs to global dof indices and allows the elimination of individ...
Definition: gsDofMapper.h:68
Sparse matrix class, based on gsEigen::SparseMatrix.
Definition: gsSparseMatrix.h:140
gsSparseSystem(gsDofMapper &mapper)
gsSparseSystem Constuctor for the sparse System only considering one block (scalar equation)...
Definition: gsSparseSystem.h:91
const DofMappers & dofMappers() const
returns all dof Mappers.
Definition: gsSparseSystem.h:528
T at(index_t i) const
Returns the i-th element of the vectorization of the matrix.
Definition: gsMatrix.h:211
void push(const std::vector< gsMatrix< T > > &, const std::vector< gsMatrix< T > > &, const std::vector< gsMatrix< index_t > > &, const std::vector< gsMatrix< T > > &, const gsVector< index_t > &, const gsVector< index_t > &)
push pushes several local system matrices and local rhs for an element to the global system for sever...
Definition: gsSparseSystem.h:1264
index_t global_to_bindex(index_t gl) const
Returns the boundary index of global dof gl.
Definition: gsDofMapper.h:364
gsDofMapper & rowMapper(const index_t r)
rowMapper returns the dofMapper for row block r
Definition: gsSparseSystem.h:490
bool initialized() const
checks if the system was initialized
Definition: gsSparseSystem.h:532
bool is_free_index(index_t gl) const
Returns true if global dof gl is not eliminated.
Definition: gsDofMapper.h:376
gsVector< index_t > m_rstr
strides for the row blocks (shifting of mapped indices). The mapper do not have this information anym...
Definition: gsSparseSystem.h:68
const gsSparseMatrix< T > & matrix() const
Access the system Matrix.
Definition: gsSparseSystem.h:394
Holds a set of patch-wise bases and their topology information.
Definition: gsMultiBasis.h:36
void pushAllFree(const gsMatrix< T > &localMat, const gsMatrix< T > &localRhs, const gsMatrix< index_t > &actives, const size_t r=0, const size_t c=0)
pushAllFree pushes the local system matrix and rhs for an element to the global system,
Definition: gsSparseSystem.h:1082
Small wrapper for std::vector.
gsDofMapper & colMapper(const index_t c)
colMapper returns the dofMapper for column block c
Definition: gsSparseSystem.h:508
T at(index_t i) const
Returns the i-th element of the vector.
Definition: gsVector.h:177
gsMatrix< T > m_rhs
the right hand side of the system
Definition: gsSparseSystem.h:46
rhsBlockView blockViewRhs(size_t numRowBlocksNew, const gsVector< index_t > &rowBlocksNew)
returns a block view of the rhs, where you can choose which blocks (of gsSparseSystem) should be comb...
Definition: gsSparseSystem.h:459
const gsDofMapper & rowMapper(const index_t r) const
rowMapper returns the dofMapper for row block r
Definition: gsSparseSystem.h:482
DofMappers m_mappers
the mappers for the different blocks. The assignment of the mappers to the column (and row) blocks is...
Definition: gsSparseSystem.h:56
gsSparseMatrix< T > & matrix()
Access the system Matrix.
Definition: gsSparseSystem.h:398
const gsDofMapper & colMapper(const index_t c) const
colMapper returns the dofMapper for column block c
Definition: gsSparseSystem.h:498
void push(const gsMatrix< T > &localMat, const gsMatrix< T > &localRhs, const std::vector< gsMatrix< index_t > > &actives, const std::vector< gsMatrix< T > > &eliminatedDofs)
push pushes one local system matrix and one local rhs for an element to the global system for several...
Definition: gsSparseSystem.h:1201
void pushToRhs(const gsMatrix< T > &localRhs, const gsMatrix< index_t > &actives, const size_t r=0)
pushToRhs pushes the local rhs for an element to the global system
Definition: gsSparseSystem.h:884
void pushToMatrixAllFree(const gsMatrix< T > &localMat, const gsMatrix< index_t > &actives, const size_t r=0, const size_t c=0)
pushToMatrixAllFree pushes the local matrix for an element to the global system,
Definition: gsSparseSystem.h:740
void setZero()
set everything to zero
Definition: gsSparseSystem.h:373
void pushToMatrix(const gsMatrix< T > &localMat, const std::vector< gsMatrix< index_t > > &actives_vec, const std::vector< gsMatrix< T > > &eliminatedDofs, const gsVector< index_t > &r_vec, const gsVector< index_t > &c_vec)
pushToMatrix pushes one local matrix consisting of several blocks corresponding to blocks of the glob...
Definition: gsSparseSystem.h:816
BlockView blockView(const gsVector< index_t > &rowSizes, const gsVector< index_t > &colSizes)
Return a block view of the matrix with rowSizes and colSizes.
Definition: gsMatrix.h:381
index_t numColNz(const gsMultiBasis< T > &mb, const gsOptionList &opt) const
Provides an estimation of the number of non-zero matrix entries per column. This value can be used fo...
Definition: gsSparseSystem.h:359
#define GISMO_ERROR(message)
Definition: gsDebug.h:118
void pushToMatrixAllFree(const gsMatrix< T > &localMat, const gsMatrix< index_t > &actives_i, const gsMatrix< index_t > &actives_j, const size_t r=0, const size_t c=0)
pushToMatrixAllFree pushes the local matrix for an element to the global system,
Definition: gsSparseSystem.h:778
index_t numUnknowns() const
returns the number of unknowns
Definition: gsSparseSystem.h:524
gsVector< index_t > m_row
map between row blocks and index of m_mappers, i.e. row block i is described by m_mappers[m_row[i]].
Definition: gsSparseSystem.h:60
void mapToGlobalRowIndex(const index_t active, const index_t patchIndex, index_t &result, const index_t r=0) const
mapToGlobalRowIndex Maps a single basis index to the final position in the system, i.e. including the right shift due to the block structure
Definition: gsSparseSystem.h:600
Class which holds a list of parameters/options, and provides easy access to them. ...
Definition: gsOptionList.h:32
gsMatrix< T > & rhs()
Access the right hand side.
Definition: gsSparseSystem.h:406
const gsMatrix< T > & rhs() const
Access the right hand side.
Definition: gsSparseSystem.h:402
void pushToRhs(const gsMatrix< T > &localRhs, const std::vector< gsMatrix< index_t > > &actives_vec, const gsVector< index_t > &r_vec)
pushToRhs pushes one local rhs consisting of several blocks corresponding to blocks of the global sys...
Definition: gsSparseSystem.h:930
void swap(gsSparseSystem &other)
swap swaps the content of the Sparse System with the other given one
Definition: gsSparseSystem.h:309
A sparse linear system indexed by sets of degrees of freedom.
Definition: gsSparseSystem.h:29
bool symmetry() const
returns true if only half of the matrix is stored, due to its symmetry
Definition: gsSparseSystem.h:538
index_t colBasis(const index_t c) const
colBasis returns the index of the Basis used for column block c
Definition: gsSparseSystem.h:516
void push(const gsMatrix< T > &localMat, const gsMatrix< T > &localRhs, const gsMatrix< index_t > &actives_i, const gsMatrix< index_t > &actives_j, const gsMatrix< T > &eliminatedDofs_j, const size_t r=0, const size_t c=0)
push pushes the local system matrix and rhs for an element to the global system,
Definition: gsSparseSystem.h:1026
gsSparseSystem(DofMappers &mappers, const index_t rows, const index_t cols)
gsSparseSystem Constructor for the sparse system, with given number of row and column blocks...
Definition: gsSparseSystem.h:205
A basis represents a family of scalar basis functions defined over a common parameter domain...
Definition: gsBasis.h:78
Real getReal(const std::string &label) const
Reads value for option label from options.
Definition: gsOptionList.cpp:44
index_t rhsRows() const
the rows of the right-hand side vector
Definition: gsSparseSystem.h:386
index_t numRowBlocks() const
returns the number of row blocks
Definition: gsSparseSystem.h:475