H2Lib  3.0
avector.h
Go to the documentation of this file.
1 /* ------------------------------------------------------------
2  This is the file "avector.h" of the H2Lib package.
3  All rights reserved, Steffen Boerm 2009
4  ------------------------------------------------------------ */
5 
10 #ifndef AVECTOR_H
11 #define AVECTOR_H
12 
21 typedef struct _avector avector;
22 
24 typedef avector *pavector;
25 
27 typedef const avector *pcavector;
28 
29 #include <assert.h>
30 #include <math.h>
31 #include <stdlib.h>
32 
33 #include "basic.h"
34 #include "blas.h"
35 #include "amatrix.h"
36 #include "settings.h"
37 
39 struct _avector {
41  field *v;
42 
45 
47  void *owner;
48 };
49 
50 /* ------------------------------------------------------------
51  Constructors and destructors
52  ------------------------------------------------------------ */
53 
66 
85 
95 
113 
129 
136 HEADER_PREFIX void
138 
149 
167 
179 
188 
198 HEADER_PREFIX void
200 
213 HEADER_PREFIX void
215 
221 HEADER_PREFIX void
223 
224 /* ------------------------------------------------------------
225  Access methods
226  ------------------------------------------------------------ */
227 
228 #ifdef __GNUC__
230 getentry_avector(pcavector, uint) __attribute__((const,unused));
231 INLINE_PREFIX void
232 setentry_avector(pavector, uint, field) __attribute__((unused));
234 addentry_avector(pavector, uint, field) __attribute__((unused));
235 #endif
236 
243 #ifdef FULL_DEBUG
244  assert(i < v->dim);
245 #endif
246  return v->v[i];
247 }
248 
254 INLINE_PREFIX void setentry_avector(pavector v, uint i, field x) {
255 #ifdef FULL_DEBUG
256  assert(i < v->dim);
257 #endif
258 
259  v->v[i] = x;
260 }
261 
269 #ifdef FULL_DEBUG
270  assert(i < v->dim);
271 #endif
272 
273  return (v->v[i] += x);
274 }
275 
276 /* ------------------------------------------------------------
277  Statistics
278  ------------------------------------------------------------ */
279 
290 HEADER_PREFIX uint
292 
303 HEADER_PREFIX size_t
305 
316 HEADER_PREFIX size_t
318 
319 /* ------------------------------------------------------------
320  Simple utility functions
321  ------------------------------------------------------------ */
322 
326 HEADER_PREFIX void
327 clear_avector(pavector v);
328 
333 HEADER_PREFIX void
334 fill_avector(pavector v, field x);
335 
339 HEADER_PREFIX void
340 random_avector(pavector v);
341 
345 HEADER_PREFIX void
346 random_real_avector(pavector v);
347 
357 HEADER_PREFIX void
358 copy_avector(pcavector v, pavector w);
359 
369 HEADER_PREFIX void
370 copy_sub_avector(pcavector v, pavector w);
371 
375 HEADER_PREFIX void
377 
378 /* ------------------------------------------------------------
379  Very basic linear algebra
380  ------------------------------------------------------------ */
381 
387 HEADER_PREFIX void
388 scale_avector(field alpha, pavector v);
389 
397 
409 
416 HEADER_PREFIX void
417 add_avector(field alpha, pcavector x, pavector y);
418 
421 #endif
field addentry_avector(pavector v, uint i, field x)
Add to a vector entry, .
Definition: avector.h:268
field dotprod_avector(pcavector x, pcavector y)
Compute the Euclidean innner product of two vectors and .
void clear_avector(pavector v)
Set a vector to zero.
const avector * pcavector
Definition: avector.h:27
void copy_avector(pcavector v, pavector w)
Copy a vector into another vector, .
field * v
Vector coefficients.
Definition: avector.h:41
uint getactives_avector()
Get number of currently initialized avector objects.
Definition: avector.h:39
size_t getsize_heap_avector(pcavector v)
Get heap size of a given avector object.
size_t getsize_avector(pcavector v)
Get size of a given avector object.
void print_avector(pcavector v)
Print a vector.
pavector init_pointer_avector(pavector v, pfield src, uint dim)
Initialize an avector object using a given array for the coefficients.
void random_real_avector(pavector v)
Fill a vector with real valued random values.
void resize_avector(pavector v, uint dim)
Change the dimension of an avector object without preserving its coefficients.
pavector new_avector(uint dim)
Create a new avector object.
pavector new_pointer_avector(pfield src, uint dim)
Create a new avector object using a given array for the coefficients.
field getentry_avector(pcavector v, uint i)
Read a vector entry .
Definition: avector.h:242
unsigned uint
Unsigned integer type.
Definition: settings.h:70
void setentry_avector(pavector v, uint i, field x)
Set a vector entry, .
Definition: avector.h:254
void scale_avector(field alpha, pavector v)
Scale a vector by a factor , .
avector * pavector
Definition: avector.h:24
uint dim
Vector dimension.
Definition: avector.h:44
double _Complex field
Field type.
Definition: settings.h:171
pavector init_avector(pavector v, uint dim)
Initialize an avector object.
#define INLINE_PREFIX
Prefix for inline functions.
Definition: settings.h:36
void add_avector(field alpha, pcavector x, pavector y)
Add two vectors, .
void random_avector(pavector v)
Fill a vector with random values.
void fill_avector(pavector v, field x)
Set all coefficients in a vector to the same value.
void del_avector(pavector v)
Delete an avector object.
pavector new_zero_avector(uint dim)
Create a new avector object representing a zero vector.
pavector init_column_avector(pavector v, pamatrix src, uint col)
Initialize an avector object to represent a column vector of a given matrix.
pavector init_sub_avector(pavector v, pavector src, uint dim, uint off)
Initialize an avector object to represent a subvector.
void copy_sub_avector(pcavector v, pavector w)
Copy a vector into another vector, .
#define HEADER_PREFIX
Prefix for function declarations.
Definition: settings.h:43
double real
real floating point type.
Definition: settings.h:97
real norm2_avector(pcavector v)
Compute the Euclidean norm of a vector .
field * pfield
Pointer to field array.
Definition: settings.h:185
pavector new_sub_avector(pavector src, uint dim, uint off)
Create a new avector object representing a subvector.
pavector init_zero_avector(pavector v, uint dim)
Initialize an avector object and set it to zero.
Representation of a matrix as an array in column-major order.
Definition: amatrix.h:43
void shrink_avector(pavector v, uint dim)
Reduce the dimension of an avector object without reallocating storage, preserving its coefficients...
void uninit_avector(pavector v)
Uninitialize an avector object.
void * owner
Points to owner of coefficient storage if this is a subvector.
Definition: avector.h:47