MaMiCo 1.2
Loading...
Searching...
No Matches
Vector.h
1// Copyright (C) 2015 Technische Universitaet Muenchen
2// This file is part of the Mamico project. For conditions of distribution
3// and use, please see the copyright notice in Mamico's main folder, or at
4// www5.in.tum.de/mamico
5#ifndef _TARCH_LA_VECTOR_H_
6#define _TARCH_LA_VECTOR_H_
7#include "tarch/TarchDefinitions.h"
8#include <cmath>
9#include <iostream>
10#include <type_traits>
11#include <Kokkos_Core.hpp>
12
13namespace tarch {
14namespace la {
15template <int size, class T> class Vector;
16}
17} // namespace tarch
18
24
25template <int size, class T> class tarch::la::Vector {
26private:
27 T _entries[size];
28
29public:
30 KOKKOS_FUNCTION Vector() {}
34
35 KOKKOS_FUNCTION Vector(const T& t) {
36 for (int i = 0; i < size; i++) {
37 _entries[i] = t;
38 }
39 }
40
44 KOKKOS_FUNCTION Vector(const T& t0, const T& t1) {
45 static_assert(size == 2, "ERROR Vector(t0,t1) only valid for 2D vectors!");
46 _entries[0] = t0;
47 _entries[1] = t1;
48 }
49
54 KOKKOS_FUNCTION Vector(const T& t0, const T& t1, const T& t2) {
55 static_assert(size == 3, "ERROR Vector(t0,t1,t2) only valid for 3D vectors!");
56 _entries[0] = t0;
57 _entries[1] = t1;
58 _entries[2] = t2;
59 }
60
63 KOKKOS_FUNCTION Vector(const Vector<size, T>& v) {
64 for (int i = 0; i < size; i++) {
65 _entries[i] = v[i];
66 }
67 }
68
71 KOKKOS_FUNCTION void assign(const T& t) {
72 for (int i = 0; i < size; i++) {
73 _entries[i] = t;
74 }
75 }
76
79 KOKKOS_FUNCTION Vector<size, T>& operator=(const Vector<size, T>& v) {
80 for (int i = 0; i < size; i++) {
81 _entries[i] = v[i];
82 }
83 return *this;
84 }
85
89 KOKKOS_FUNCTION T& operator[](int i) {
90#if (TARCH_DEBUG == TARCH_YES)
91 if (i < 0 || i > size - 1) {
92 Kokkos::abort("ERROR Vector T& operator[]: i out of range!\n");
93 }
94#endif
95 return _entries[i];
96 }
97
101 KOKKOS_FUNCTION const T& operator[](int i) const {
102#if (TARCH_DEBUG == TARCH_YES)
103 if (i < 0 || i > size - 1) {
104 Kokkos::abort("ERROR Vector const T& operator[]: i out of range!\n");
105 }
106#endif
107 return _entries[i];
108 }
109
112 KOKKOS_FUNCTION Vector<size, T>& operator+=(const Vector<size, T>& v) {
113 for (int i = 0; i < size; i++) {
114 _entries[i] += v[i];
115 }
116 return *this;
117 }
118
122 KOKKOS_FUNCTION Vector<size, T>& operator-=(const Vector<size, T>& v) {
123 for (int i = 0; i < size; i++) {
124 _entries[i] -= v[i];
125 }
126 return *this;
127 }
128
130 template <class convert_to_T> explicit KOKKOS_FUNCTION operator Vector<size, convert_to_T>() const {
131 Vector<size, convert_to_T> ans;
132 for (unsigned int i = 0; i < size; i++) {
133 ans[i] = static_cast<convert_to_T>(_entries[i]);
134 }
135 return ans;
136 }
137};
138
139#include "VectorOperations.cpph"
140#endif // _TARCH_LA_VECTOR_H_
Definition Vector.h:25
KOKKOS_FUNCTION Vector(const T &t0, const T &t1, const T &t2)
special constructor for 3D; left empty for general purpose vector
Definition Vector.h:54
KOKKOS_FUNCTION T & operator[](int i)
operator overloading; access to vector entries; both () and [] are allowed
Definition Vector.h:89
KOKKOS_FUNCTION Vector< size, T > & operator+=(const Vector< size, T > &v)
operator overloading; add a vector to this existing one (this)
Definition Vector.h:112
KOKKOS_FUNCTION Vector(const Vector< size, T > &v)
constructor init. vector from vector
Definition Vector.h:63
KOKKOS_FUNCTION const T & operator[](int i) const
operator overloading; access to vector entries; both () and [] are allowed; !!! Attention: const
Definition Vector.h:101
KOKKOS_FUNCTION Vector(const T &t)
init. vector with a scalar value.
Definition Vector.h:35
KOKKOS_FUNCTION Vector< size, T > & operator-=(const Vector< size, T > &v)
operator overloading; subtracts a vector from the existing one (this)
Definition Vector.h:122
KOKKOS_FUNCTION Vector< size, T > & operator=(const Vector< size, T > &v)
operator overloading for vector assignment
Definition Vector.h:79
KOKKOS_FUNCTION Vector(const T &t0, const T &t1)
special constructor for 2D left empty for general purpose vector
Definition Vector.h:44
KOKKOS_FUNCTION void assign(const T &t)
assigns a value to all vector entries.
Definition Vector.h:71
Definition Matrix.h:10
Definition Configuration.h:11