Updated triplets and tripletlist
This commit is contained in:
parent
6f2eb63833
commit
a8af3fc3e6
88
src/sys/triplets.cpp
Normal file
88
src/sys/triplets.cpp
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
#include "triplets.h"
|
||||||
|
#include "tasmet_tracer.h"
|
||||||
|
#include "tasmet_io.h"
|
||||||
|
#include "tasmet_exception.h"
|
||||||
|
|
||||||
|
TripletList::operator sdmat() const {
|
||||||
|
|
||||||
|
TRACE(15,"TripletList::operator sdmat()");
|
||||||
|
|
||||||
|
vector<Triplet> validtrlist;
|
||||||
|
|
||||||
|
validtrlist.reserve(triplets.size());
|
||||||
|
|
||||||
|
for(auto& tr :triplets) {
|
||||||
|
if(tr.valid) {
|
||||||
|
validtrlist.push_back(tr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
us nvals=validtrlist.size();
|
||||||
|
|
||||||
|
arma::umat locations(2,nvals);
|
||||||
|
|
||||||
|
vd values(nvals);
|
||||||
|
|
||||||
|
for(us i=0;i<nvals;i++) {
|
||||||
|
|
||||||
|
locations(0,i)=validtrlist[i].row;
|
||||||
|
locations(1,i)=validtrlist[i].col;
|
||||||
|
values(i)=validtrlist[i].value;
|
||||||
|
TRACE(0,"row: " << validtrlist[i].row << ", col: "<< validtrlist[i].col << ", value: " << validtrlist[i].value);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
TRACE(0,"ndofs: "<< _ndofs);
|
||||||
|
|
||||||
|
return sdmat(true,locations,values,_ndofs,_ndofs);
|
||||||
|
}
|
||||||
|
void TripletList::addTriplet(const Triplet& t){
|
||||||
|
|
||||||
|
if(t.row >= _ndofs || t.col >=_ndofs){
|
||||||
|
throw TaSMETError("Invalid position for triplet");
|
||||||
|
}
|
||||||
|
triplets.push_back(t);
|
||||||
|
|
||||||
|
}
|
||||||
|
void TripletList::zeroOutRow(us rownr){
|
||||||
|
TRACE(15,"zeroOutRow()");
|
||||||
|
|
||||||
|
for(Triplet& tr: triplets){
|
||||||
|
if(tr.row==rownr){
|
||||||
|
tr.valid = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void TripletList::show() const {
|
||||||
|
for(const auto& t: triplets){
|
||||||
|
cout << "Row: " << t.row << " , column: " << t.col << " , value: " << t.value << "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void TripletList::multiplyTriplets(const d& factor){
|
||||||
|
TRACE(15,"multiplyTriplets()");
|
||||||
|
for(auto tr: triplets){
|
||||||
|
tr.value*= factor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TripletList::reserveExtraDofs(us n){
|
||||||
|
TRACE(15,"reserveExtraDofs()");
|
||||||
|
us cursize=triplets.size();
|
||||||
|
triplets.reserve(cursize+n);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TripletList::shiftTriplets(int nrows,int ncols){
|
||||||
|
// shift the position of the values in a matrix. nrows and ncols
|
||||||
|
// can be negative numbers.
|
||||||
|
TRACE(15,"shiftTriplets()");
|
||||||
|
TRACE(100,"EXTRA CHECKS HERE!");
|
||||||
|
for(auto tr: triplets){
|
||||||
|
tr.col+=ncols;
|
||||||
|
tr.row+=nrows;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
52
src/sys/triplets.h
Normal file
52
src/sys/triplets.h
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
#pragma once
|
||||||
|
#ifndef _TRIPLETS_H_
|
||||||
|
#define _TRIPLETS_H_
|
||||||
|
|
||||||
|
#include "tasmet_types.h"
|
||||||
|
|
||||||
|
struct Triplet{
|
||||||
|
us row,col;
|
||||||
|
d value;
|
||||||
|
bool valid = true;
|
||||||
|
|
||||||
|
Triplet(us row,us col,d value):row(row),col(col),value(value){}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class TripletList {
|
||||||
|
|
||||||
|
// Size of the matrix to build eventually
|
||||||
|
us _ndofs;
|
||||||
|
|
||||||
|
vector<Triplet> triplets;
|
||||||
|
|
||||||
|
public:
|
||||||
|
TripletList(us ndofs);
|
||||||
|
~TripletList(){}
|
||||||
|
|
||||||
|
// Convert to Armadillo Sparse matrix
|
||||||
|
operator sdmat() const;
|
||||||
|
|
||||||
|
void setNdofs(us ndofs){_ndofs=ndofs;}
|
||||||
|
|
||||||
|
void show() const;
|
||||||
|
|
||||||
|
void addTriplet(const Triplet&);
|
||||||
|
|
||||||
|
// Make one row zero
|
||||||
|
void zeroOutRow(us rownr);
|
||||||
|
|
||||||
|
void multiplyTriplets(const d& multiplicationfactor);
|
||||||
|
|
||||||
|
// Add to capacity
|
||||||
|
void reserveExtraDofs(us n);
|
||||||
|
|
||||||
|
// Shift position of triplets a certain number of rows and cols.
|
||||||
|
void shiftTriplets(int nrows,int ncols);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* _TRIPLETS_H_ */
|
||||||
|
|
Loading…
Reference in New Issue
Block a user