28#ifndef _SSVECTORBASE_H_
29#define _SSVECTORBASE_H_
73 assert(
idx !=
nullptr);
116 this->_tolerances = newTolerances;
133 return this->_tolerances ==
nullptr ? R(0) : R(this->
tolerances()->epsilon());
152 for(
int i = 0; i < d; ++i)
176 for(
int i = 0; i <
num; ++i)
182 assert(!entry[
idx[i]]);
183 entry[
idx[i]] =
true;
186 for(
int i = 0; i < VectorBase<R>::dim(); ++i)
215 assert(n >= 0 && n <
size());
302 assert(
index(n) >= 0);
390 assert(
vec.isSetup());
392 for(
int i =
vec.size() - 1; i >= 0; --i)
429 for(
int i =
vec.size() - 1; i >= 0; --i)
451 for(
int i =
size() - 1; i >= 0; --i)
467 int j = w.
size() - 1;
475 while(i != 0 && j != 0)
491 while(i != 0 && vi != wj)
494 while(j != 0 && vi != wj)
506 template <
class S,
class T >
510 template <
class S,
class T >
525 template <
class S,
class T >
529 template <
class S,
class T >
533 template <
class S,
class T >
535 Timer* timeSparse,
Timer* timeFull,
int& nCallsSparse,
int& nCallsFull);
540 template <
class S,
class T >
550 for(
int i = 0; i <
num; ++i)
571 for(
int i = 0; i <
num; ++i)
603 if(
index(i) >= newdim)
637 for(
int i = 0; i <
num; ++i)
652#ifdef ENABLE_CONSISTENCY_CHECKS
662 for(
int i = 0; i < VectorBase<R>::dim(); ++i)
691 explicit SSVectorBase(
int p_dim, std::shared_ptr<Tolerances> tol =
nullptr)
696 len = (p_dim < 1) ? 1 : p_dim;
762 for(
int i =
size() - 1; i >= 0; --i)
773 for(
int i = 0; i < d; ++i)
775 if(isNotZero(rhs.
val[i], this->getEpsilon()))
817 for(
int i =
size() - 1; i >= 0; --i)
828 for(
int i = 0; i < d; ++i)
830 if(
spxAbs(rhs.
val[i]) > this->getEpsilon())
863 for(
int i =
size() - 1; i >= 0; --i)
873 for(
int i = 0; i < rhs.
dim(); ++i)
875 if(
spxAbs(rhs.
val[i]) > this->getEpsilon())
924 template <
class S,
class T >
928 template <
class S,
class T >
932 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.
void spx_realloc(T &p, size_t n)
Change amount of allocated memory.
void spx_free(T &p)
Release memory.
Real spxSqrt(Real a)
returns square root
void spx_alloc(T &p, size_t 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::VERB_ERROR.
#define SPX_MSG_INCONSISTENT(name)