28#ifndef _SSVECTORBASE_H_
29#define _SSVECTORBASE_H_
73 assert(
idx !=
nullptr);
116 this->_tolerances = newTolerances;
122 assert(this->_tolerances !=
nullptr);
134 assert(this->_tolerances !=
nullptr);
135 return this->_tolerances ==
nullptr ? R(0) : R(this->
tolerances()->epsilon());
154 for(
int i = 0; i < d; ++i)
198 assert(n >= 0 && n <
size());
285 assert(
index(n) >= 0);
373 assert(
vec.isSetup());
375 for(
int i =
vec.size() - 1; i >= 0; --i)
412 for(
int i =
vec.size() - 1; i >= 0; --i)
434 for(
int i =
size() - 1; i >= 0; --i)
450 int j = w.
size() - 1;
458 while(i != 0 && j != 0)
474 while(i != 0 && vi != wj)
477 while(j != 0 && vi != wj)
489 template <
class S,
class T >
493 template <
class S,
class T >
508 template <
class S,
class T >
512 template <
class S,
class T >
516 template <
class S,
class T >
518 Timer* timeSparse,
Timer* timeFull,
int& nCallsSparse,
int& nCallsFull);
523 template <
class S,
class T >
533 for(
int i = 0; i <
num; ++i)
554 for(
int i = 0; i <
num; ++i)
586 if(
index(i) >= newdim)
620 for(
int i = 0; i <
num; ++i)
635#ifdef ENABLE_CONSISTENCY_CHECKS
645 for(
int i = 0; i < VectorBase<R>::dim(); ++i)
674 explicit SSVectorBase(
int p_dim, std::shared_ptr<Tolerances> tol =
nullptr)
679 len = (p_dim < 1) ? 1 : p_dim;
745 for(
int i =
size() - 1; i >= 0; --i)
756 for(
int i = 0; i < d; ++i)
760 if(
spxAbs(rhs.
val[i]) > this->getEpsilon())
803 for(
int i =
size() - 1; i >= 0; --i)
814 for(
int i = 0; i < d; ++i)
816 if(
spxAbs(rhs.
val[i]) > this->getEpsilon())
849 for(
int i =
size() - 1; i >= 0; --i)
859 for(
int i = 0; i < rhs.
dim(); ++i)
861 if(
spxAbs(rhs.
val[i]) > this->getEpsilon())
910 template <
class S,
class T >
914 template <
class S,
class T >
918 template <
class S,
class T >
bool isConsistent() const
consistency check.
int pos(int i) const
returns the position of index i.
void addIdx(int i)
appends index i.
void remove(int n, int m)
removes indices at position numbers n through m.
int max() const
returns the maximal number of indices which can be stored in IdxSet.
int num
number of used indices
int index(int n) const
access n 'th index.
int dim() const
returns the maximal index.
int * idx
array of indices
void clear()
removes all indices.
void add(int n)
appends n uninitialized indices.
int size() const
returns the number of used indices.
IdxSet & operator=(const IdxSet &set)
assignment operator.
int len
length of array idx
R * get_ptr()
Only used in slufactor.hpp.
SSVectorBase(const SSVectorBase< S > &vec)
Copy constructor.
SSVectorBase< R > & assign2productShort(const SVSetBase< S > &A, const SSVectorBase< T > &x)
Assignment helper.
SSVectorBase< R > & assign2product1(const SVSetBase< S > &A, const SSVectorBase< T > &x)
Assignment helper.
bool setupStatus
Is the SSVectorBase set up?
const R * values() const
Returns array values.
SSVectorBase< R > & multAdd(S xx, const SVectorBase< T > &vec)
Addition of a scaled vector.
SSVectorBase(const SSVectorBase< R > &vec)
Copy constructor.
R length() const
Floating point approximation of euclidian norm (without any approximation guarantee).
SSVectorBase< R > & assign(const SVectorBase< S > &rhs)
Assigns only the elements of rhs.
SSVectorBase< R > & assign2product4setup(const SVSetBase< S > &A, const SSVectorBase< T > &x, Timer *timeSparse, Timer *timeFull, int &nCallsSparse, int &nCallsFull)
Assigns SSVectorBase to for a setup x.
SSVectorBase(const VectorBase< S > &vec)
Constructs nonsetup copy of vec.
R length2() const
Squared euclidian norm.
void scaleValue(int i, int scaleExp)
Scale i 'th element by a.
SSVectorBase< R > & operator-=(const VectorBase< S > &vec)
Subtraction.
R maxAbs() const
Maximum absolute value, i.e., infinity norm.
bool isConsistent() const
consistency check.
SSVectorBase(int p_dim, std::shared_ptr< Tolerances > tol=nullptr)
Default constructor.
R * altValues()
Returns array values.
virtual void setTolerances(std::shared_ptr< Tolerances > newTolerances)
set the _tolerances member variable
void setup()
Initializes nonzero indices for elements with absolute values above epsilon and sets all other elemen...
SSVectorBase< R > & assign2product(const SSVectorBase< S > &x, const SVSetBase< T > &A)
Assigns to SSVectorBase.
SSVectorBase< R > & operator-=(const SSVectorBase< S > &vec)
Subtraction.
void reMem(int newsize)
Resets memory consumption to newsize.
int pos(int i) const
Finds the position of index i in the IdxSet, or -1 if i doesn't exist.
R value(int n) const
Returns value of the n 'th nonzero element.
void add(int i, R x)
Adds nonzero (i, x) to SSVectorBase.
std::shared_ptr< Tolerances > _tolerances
SSVectorBase< R > & assignPWproduct4setup(const SSVectorBase< S > &x, const SSVectorBase< T > &y)
Assigns pair wise vector product to SSVectorBase.
SSVectorBase< R > & operator=(const SSVectorBase< S > &rhs)
Assignment operator.
void clearIdx(int i)
Clears element i.
void forceSetup()
Forces setup status.
SSVectorBase< R > & operator=(const SSVectorBase< R > &rhs)
Assignment operator.
void unSetup()
Makes SSVectorBase not setup.
SSVectorBase< R > & multAdd(S x, const VectorBase< T > &vec)
Addition of a scaled vector.
void setSize(int n)
Sets number of nonzeros (thereby unSetup SSVectorBase).
R operator[](int i) const
Returns i 'th value.
SSVectorBase< R > & operator*=(S x)
Scaling.
void setValue(int i, R x)
Sets i 'th element to x.
int * altIndexMem()
Returns array indices.
~SSVectorBase()
destructor
int index(int n) const
Returns index of the n 'th nonzero element.
int dim() const
Dimension of VectorBase.
SSVectorBase< R > & operator+=(const VectorBase< S > &vec)
Addition.
void setup_and_assign(SSVectorBase< S > &rhs)
Sets up rhs vector, and assigns it.
const int * indexMem() const
Returns array indices.
R operator*(const SSVectorBase< S > &w)
IdxSet & altIndices()
Returns indices.
void clear()
Clears vector.
void setMax(int newmax)
Allocates enough space to accommodate newmax values.
const IdxSet & indices() const
Returns indices.
void reDim(int newdim)
Resets dimension to newdim.
SSVectorBase< R > & operator+=(const SSVectorBase< S > &vec)
Addition.
SSVectorBase< R > & assign2productFull(const SVSetBase< S > &A, const SSVectorBase< T > &x)
Assignment helper.
SSVectorBase< R > & operator=(const VectorBase< S > &rhs)
Assignment operator.
bool isSetup() const
Returns setup status.
const std::shared_ptr< Tolerances > & tolerances() const
returns current tolerances
void clearNum(int n)
Sets n 'th nonzero element to 0 (index n must exist).
SSVectorBase< R > & assign2productAndSetup(const SVSetBase< S > &A, SSVectorBase< T > &x)
Assigns SSVectorBase to thereby setting up x.
int size() const
Returns the number of nonzeros.
Wrapper for the system time query methods.
R * get_ptr()
Conversion to C-style pointer.
VectorBase< R > & operator+=(const VectorBase< S > &vec)
Addition.
VectorBase< R > & operator=(const VectorBase< S > &vec)
Assignment operator.
R length2() const
Squared norm.
R maxAbs() const
Maximum absolute value, i.e., infinity norm.
bool isConsistent() const
Consistency check.
VectorBase< R > & operator-=(const VectorBase< S > &vec)
Subtraction.
void reDim(int newdim, const bool setZero=true)
Resets VectorBase's dimension to newdim.
int dim() const
Dimension of vector.
std::vector< R > val
Values of vector.
void reSize(int newsize)
Resets VectorBase's memory size to newsize.
const std::vector< R > & vec()
Return underlying std::vector.
void clear()
Set vector to contain all-zeros (keeping the same length)
VectorBase< R > & multAdd(const S &x, const VectorBase< T > &vec)
Addition of scaled vector.
Everything should be within this namespace.
boost::multiprecision::number< T > spxLdexp(boost::multiprecision::number< T, eto > x, int exp)
void spx_realloc(T &p, int n)
Change amount of allocated memory.
Real spxSqrt(Real a)
returns square root
void spx_free(T &p)
Release memory.
void spx_alloc(T &p, int n=1)
Allocate memory.
Memory allocation routines.
Debugging, floating point type and parameter definitions.
#define SPX_MSG_ERROR(x)
Prints out message x if the verbosity level is at least SPxOut::ERROR.
#define SPX_MSG_INCONSISTENT(name)