Alien  1.3.0
Developer documentation
Loading...
Searching...
No Matches
VectorElementT.h
Go to the documentation of this file.
1/*
2 * Copyright 2020 IFPEN-CEA
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 *
16 * SPDX-License-Identifier: Apache-2.0
17 */
18
23
24#pragma once
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28
29namespace Alien
30{
31
32/*---------------------------------------------------------------------------*/
33/*---------------------------------------------------------------------------*/
34
35template <typename T, typename Indexer>
36VectorElementT<T, Indexer>::VectorElementT(Arccore::ArrayView<T> values,
37 Arccore::ConstArrayView<Arccore::Integer> indexes,
38 const Arccore::Integer local_offset)
39: m_values(values)
40, m_indexes(indexes)
41, m_local_offset(local_offset)
42{}
43
44/*---------------------------------------------------------------------------*/
45/*---------------------------------------------------------------------------*/
46
47template <typename T, typename Indexer>
48void VectorElementT<T, Indexer>::operator=(Arccore::ConstArrayView<T> values)
49{
50 ALIEN_ASSERT((m_indexes.size() == values.size()), ("Invalid size"));
51 for (Arccore::Integer i = 0; i < m_indexes.size(); ++i) {
52 const Arccore::Integer id = Indexer::index(m_indexes[i], m_local_offset);
53 m_values[id] = values[i];
54 }
55}
56
57/*---------------------------------------------------------------------------*/
58/*---------------------------------------------------------------------------*/
59
60template <typename T, typename Indexer>
61void VectorElementT<T, Indexer>::operator+=(Arccore::ConstArrayView<T> values)
62{
63 ALIEN_ASSERT((m_indexes.size() == values.size()), ("Invalid size"));
64 for (Arccore::Integer i = 0; i < m_indexes.size(); ++i) {
65 const Arccore::Integer id = Indexer::index(m_indexes[i], m_local_offset);
66 m_values[id] += values[i];
67 }
68}
69
70/*---------------------------------------------------------------------------*/
71/*---------------------------------------------------------------------------*/
72
73template <typename T, typename Indexer>
74void VectorElementT<T, Indexer>::operator-=(Arccore::ConstArrayView<T> values)
75{
76 ALIEN_ASSERT((m_indexes.size() == values.size()), ("Invalid size"));
77 for (Arccore::Integer i = 0; i < m_indexes.size(); ++i) {
78 const Arccore::Integer id = Indexer::index(m_indexes[i], m_local_offset);
79 m_values[id] -= values[i];
80 }
81}
82
83/*---------------------------------------------------------------------------*/
84/*---------------------------------------------------------------------------*/
85
86template <typename T, typename Indexer>
88 T factor,
89 Arccore::ConstArrayView<Arccore::Integer> indexes,
90 const Arccore::Integer local_offset)
91: m_values(values)
92, m_factor(factor)
93, m_indexes(indexes)
94, m_local_offset(local_offset)
95{}
96
97/*---------------------------------------------------------------------------*/
98/*---------------------------------------------------------------------------*/
99
100template <typename T, typename Indexer>
101void MultVectorElementT<T, Indexer>::operator=(Arccore::ConstArrayView<T> values)
102{
103 ALIEN_ASSERT((m_indexes.size() == values.size()), ("Invalid size"));
104 for (Arccore::Integer i = 0; i < m_indexes.size(); ++i) {
105 const Arccore::Integer id = Indexer::index(m_indexes[i], m_local_offset);
106 m_values[id] = m_factor * values[i];
107 }
108}
109
110/*---------------------------------------------------------------------------*/
111/*---------------------------------------------------------------------------*/
112
113template <typename T, typename Indexer>
114void MultVectorElementT<T, Indexer>::operator+=(Arccore::ConstArrayView<T> values)
115{
116 ALIEN_ASSERT((m_indexes.size() == values.size()), ("Invalid size"));
117 for (Arccore::Integer i = 0; i < m_indexes.size(); ++i) {
118 const Arccore::Integer id = Indexer::index(m_indexes[i], m_local_offset);
119 m_values[id] += m_factor * values[i];
120 }
121}
122
123/*---------------------------------------------------------------------------*/
124/*---------------------------------------------------------------------------*/
125
126template <typename T, typename Indexer>
127void MultVectorElementT<T, Indexer>::operator-=(Arccore::ConstArrayView<T> values)
128{
129 ALIEN_ASSERT((m_indexes.size() == values.size()), ("Invalid size"));
130 for (Arccore::Integer i = 0; i < m_indexes.size(); ++i) {
131 const Arccore::Integer id = Indexer::index(m_indexes[i], m_local_offset);
132 m_values[id] -= m_factor * values[i];
133 }
134}
135
136/*---------------------------------------------------------------------------*/
137/*---------------------------------------------------------------------------*/
138
139template <typename T, typename Indexer>
141 T factor,
142 Arccore::ConstArray2View<Arccore::Integer> indexes,
143 Arccore::Integer i,
144 const Arccore::Integer local_offset)
145: m_values(values)
146, m_factor(factor)
147, m_indexes(indexes)
148, m_i(i)
149, m_local_offset(local_offset)
150{}
151
152/*---------------------------------------------------------------------------*/
153/*---------------------------------------------------------------------------*/
154
155template <typename T, typename Indexer>
156void MultVectorElement2T<T, Indexer>::operator=(Arccore::ConstArray2View<T> values)
157{
158 ALIEN_ASSERT((m_indexes.dim1Size() == values.dim1Size()), ("Invalid size"));
159 for (Arccore::Integer i = 0; i < m_indexes.dim1Size(); ++i) {
160 const Arccore::Integer id = Indexer::index(m_indexes[i][m_i], m_local_offset);
161 m_values[id] = m_factor * values[i][m_i];
162 }
163}
164
165/*---------------------------------------------------------------------------*/
166/*---------------------------------------------------------------------------*/
167
168template <typename T, typename Indexer>
169void MultVectorElement2T<T, Indexer>::operator+=(Arccore::ConstArray2View<T> values)
170{
171 ALIEN_ASSERT((m_indexes.dim1Size() == values.dim1Size()), ("Invalid size"));
172 for (Arccore::Integer i = 0; i < m_indexes.dim1Size(); ++i) {
173 const Arccore::Integer id = Indexer::index(m_indexes[i][m_i], m_local_offset);
174 m_values[id] += m_factor * values[i][m_i];
175 }
176}
177
178/*---------------------------------------------------------------------------*/
179/*---------------------------------------------------------------------------*/
180
181template <typename T, typename Indexer>
182void MultVectorElement2T<T, Indexer>::operator-=(Arccore::ConstArray2View<T> values)
183{
184 ALIEN_ASSERT((m_indexes.dim1Size() == values.dim1Size()), ("Invalid size"));
185 for (Arccore::Integer i = 0; i < m_indexes.dim1Size(); ++i) {
186 const Arccore::Integer id = Indexer::index(m_indexes[i][m_i], m_local_offset);
187 m_values[id] -= m_factor * values[i][m_i];
188 }
189}
190
191/*---------------------------------------------------------------------------*/
192/*---------------------------------------------------------------------------*/
193
194} // namespace Alien
195
196/*---------------------------------------------------------------------------*/
197/*---------------------------------------------------------------------------*/
T m_factor
The scale factor.
MultVectorElement2T(Arccore::ArrayView< T > values, T factor, Arccore::ConstArray2View< Arccore::Integer > indexes, Arccore::Integer i, Arccore::Integer local_offset)
Constructor.
void operator+=(Arccore::ConstArray2View< T > values)
Operator plus equal.
Arccore::Integer m_local_offset
The offset.
void operator-=(Arccore::ConstArray2View< T > values)
Minus equal operator.
Arccore::ArrayView< T > & m_values
The array of values.
Arccore::ConstArray2View< Arccore::Integer > m_indexes
The array of indexes.
void operator=(Arccore::ConstArray2View< T > values)
Operator equal.
Arccore::Integer m_i
The block index.
MultVectorElementT(Arccore::ArrayView< T > values, T factor, Arccore::ConstArrayView< Arccore::Integer > indexes, Arccore::Integer local_offset)
Constructor.
void operator+=(Arccore::ConstArrayView< T > values)
Operator plus equal.
void operator-=(Arccore::ConstArrayView< T > values)
Minus equal operator.
void operator=(Arccore::ConstArrayView< T > values)
Operator equal.
Arccore::ConstArrayView< Arccore::Integer > m_indexes
The array of indexes.
Arccore::ArrayView< T > & m_values
The array of values.
Arccore::Integer m_local_offset
The offset.
T m_factor
The scale factor.
void operator-=(Arccore::ConstArrayView< T > values)
Minus equal operator.
Arccore::ArrayView< T > & m_values
The array of values.
void operator=(Arccore::ConstArrayView< T > values)
Operator equal.
Arccore::Integer m_local_offset
The offset.
Arccore::ConstArrayView< Arccore::Integer > m_indexes
The array of indexes.
void operator+=(Arccore::ConstArrayView< T > values)
Plus equal operator.
VectorElementT(Arccore::ArrayView< T > values, Arccore::ConstArrayView< Arccore::Integer > indexes, Arccore::Integer local_offset)
Constructor.
-- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature --
Definition BackEnd.h:17