122std::unique_ptr<SparseMtrx> CompCol :: clone()
const
124 return std::make_unique<CompCol>(*
this);
130 if ( x.
giveSize() != this->giveNumberOfColumns() ) {
148 if ( x.
giveSize() != this->giveNumberOfRows() ) {
149 OOFEM_ERROR(
"Error in CompCol -- incompatible dimensions");
166void CompCol :: times(
double x)
180 std :: vector< std :: set< int > > columns(neq);
185 elem->giveLocationArray(loc, s);
187 for (
int ii : loc ) {
189 for (
int jj : loc ) {
191 columns [ jj - 1 ].insert(ii - 1);
200 std :: vector< IntArray >r_locs;
201 std :: vector< IntArray >c_locs;
203 for (
auto &gbc : domain->
giveBcs() ) {
207 for ( std :: size_t k = 0; k < r_locs.size(); k++ ) {
210 for (
int ii : krloc ) {
212 for (
int jj : kcloc ) {
214 columns [ jj - 1 ].insert(ii - 1);
226 for (
auto &in: eModel->giveIntegralList()) {
228 for (
auto &elem: in->set->giveElementList()) {
230 in->getElementTermCodeNumbers (locr, locc, domain->
giveElement(elem), *in->term, s) ;
231 for (
int ii : locr ) {
233 for (
int jj : locc ) {
235 columns [ jj - 1 ].insert(ii - 1);
244 for (
int i = 0; i < neq; i++ ) {
245 this->
nz += columns [ i ].size();
252 for (
int j = 0; j < neq; j++ ) {
254 for (
int row: columns [ j ] ) {
281 OOFEM_ERROR(
"dimension of 'k' and 'loc' mismatch");
285 for (
int j = 0; j < dim; j++ ) {
288 int cstart =
colptr[jj - 1];
290 int last_ii = this->
nRows + 1;
291 for (
int i = 0; i < dim; i++ ) {
297 else if ( ii > last_ii )
299 for ( ;
rowind[t] < ii - 1; t++ ) {
302 OOFEM_ERROR(
"Couldn't find row %d in the sparse structure", ii);
325 for (
int j = 0; j < dim2; j++ ) {
328 int cstart =
colptr[jj - 1];
330 int last_ii = this->
nRows + 1;
331 for (
int i = 0; i < dim1; i++ ) {
337 else if ( ii > last_ii )
339 for ( ;
rowind[t] < ii - 1; t++ ) {
342 OOFEM_ERROR(
"Couldn't find row %d in the sparse structure", ii);
357void CompCol :: zero()
368void CompCol :: printYourself()
const
372double &CompCol :: at(
int i,
int j)
377 if (
rowind[t] == i - 1 ) {
382 OOFEM_ERROR(
"Array accessing exception -- (%d,%d) out of bounds", i, j);
386double CompCol :: at(
int i,
int j)
const
389 if (
rowind[t] == i - 1 ) {
397 OOFEM_ERROR(
"Array accessing exception -- (%d,%d) out of bounds", i, j);
402double CompCol :: operator() (
int i,
int j)
const
413 OOFEM_ERROR(
"Array accessing exception -- (%d,%d) out of bounds", i, j);
418double &CompCol :: operator() (
int i,
int j)
428 OOFEM_ERROR(
"Array element (%d,%d) not in sparse structure -- cannot assign", i, j);
#define REGISTER_SparseMtrx(class, type)
virtual void giveLocationArrays(std ::vector< IntArray > &rows, std ::vector< IntArray > &cols, CharType type, const UnknownNumberingScheme &r_s, const UnknownNumberingScheme &c_s)
std ::vector< std ::unique_ptr< GeneralBoundaryCondition > > & giveBcs()
Element * giveElement(int n)
std ::vector< std ::unique_ptr< Element > > & giveElements()
virtual int giveNumberOfDomainEquations(int di, const UnknownNumberingScheme &num)
Domain * giveDomain(int n)
Index giveSize() const
Returns the size of receiver.
void zero()
Zeroes all coefficients of receiver.
int giveNumberOfColumns() const
Returns number of columns of receiver.
int giveNumberOfRows() const
Returns number of rows of receiver.
int nColumns
Number of columns.
SparseMtrxVersionType version
int giveNumberOfRows() const
Returns number of rows of receiver.
int giveNumberOfColumns() const
Returns number of columns of receiver.
SparseMtrx(int n=0, int m=0)
#define OOFEM_LOG_DEBUG(...)
@ SMT_CompCol
Compressed column.