PSCF v1.3.3
cpu/VecOp.h
1#ifndef RPC_VEC_OP_H
2#define RPC_VEC_OP_H
3
4#include <util/containers/Array.h>
5
6/*
7* PSCF - Polymer Self-Consistent Field
8*
9* Copyright 2015 - 2025, The Regents of the University of Minnesota
10* Distributed under the terms of the GNU General Public License.
11*/
12
13// Forward declaration
14namespace Util {
15 template <typename T> class Array;
16}
17
18namespace Pscf {
19namespace Prdc {
20namespace Cpu {
21
22 using namespace Util;
23
50 namespace VecOp {
51
52 // Assignment
53
60 void eqV(Array<double>& a, Array<double> const & b);
61
68 void eqS(Array<double>& a, double b);
69
70 // Addition
71
79 void addVV(Array<double>& a, Array<double> const & b,
80 Array<double> const & c);
81
89 void addVS(Array<double>& a, Array<double> const & b, double c);
90
91 // Subtraction
92
100 void subVV(Array<double>& a,
101 Array<double> const & b, Array<double> const & c);
102
110 void subVS(Array<double>& a, Array<double> const & b, double c);
111
112 // Multiplication
113
121 void mulVV(Array<double>& a,
122 Array<double> const & b, Array<double> const & c);
123
131 void mulVS(Array<double>& a, Array<double> const & b, double c);
132
133 // Division
134
142 void divVV(Array<double>& a,
143 Array<double> const & b, Array<double> const & c);
144
152 void divVS(Array<double>& a, Array<double> const & b, double c);
153
161 void divSV(Array<double>& a, double b, Array<double> const & c);
162
163 // Exponentiation
164
171 void expV(Array<double>& a, Array<double> const & b);
172
173
174 // Compound addition
175
182 void addEqV(Array<double>& a, Array<double> const & b);
183
190 void addEqS(Array<double>& a, double b);
191
192 // Compound subtraction
193
200 void subEqV(Array<double>& a, Array<double> const & b);
201
208 void subEqS(Array<double>& a, double b);
209
210 // Compound multiplication
211
218 void mulEqV(Array<double>& a, Array<double> const & b);
219
226 void mulEqS(Array<double>& a, double b);
227
228 // Compound division
229
236 void divEqV(Array<double>& a, Array<double> const & b);
237
244 void divEqS(Array<double>& a, double b);
245
247
248 } // namespace VecOp
249
250} // namespace Cpu
251} // namespace Prdc
252} // namespace Pscf
253
254#endif
Array container class template.
Definition Array.h:34
Functions that perform element-wise vector operations on the Cpu.
Definition VecOp.cpp:16
void subVV(Array< double > &a, Array< double > const &b, Array< double > const &c)
Vector subtraction, a[i] = b[i] - c[i].
Definition VecOp.cpp:81
void divSV(Array< double > &a, double b, Array< double > const &c)
Vector division, a[i] = b / c[i].
Definition VecOp.cpp:169
void mulEqV(Array< double > &a, Array< double > const &b)
Vector multiplication in-place, a[i] *= b[i].
Definition VecOp.cpp:254
void addEqV(Array< double > &a, Array< double > const &b)
Vector addition in-place, a[i] += b[i].
Definition VecOp.cpp:199
void eqV(Array< double > &a, Array< double > const &b)
Vector assignment, a[i] = b[i].
Definition VecOp.cpp:23
void mulVS(Array< double > &a, Array< double > const &b, double c)
Vector multiplication, a[i] = b[i] * c.
Definition VecOp.cpp:126
void divEqS(Array< double > &a, double b)
Vector division in-place, a[i] /= b.
Definition VecOp.cpp:294
void addEqS(Array< double > &a, double b)
Vector addition in-place, a[i] += b.
Definition VecOp.cpp:212
void addVV(Array< double > &a, Array< double > const &b, Array< double > const &c)
Vector addition, a[i] = b[i] + c[i].
Definition VecOp.cpp:50
void subVS(Array< double > &a, Array< double > const &b, double c)
Vector subtraction, a[i] = b[i] - c.
Definition VecOp.cpp:96
void divEqV(Array< double > &a, Array< double > const &b)
Vector division in-place, a[i] /= b[i].
Definition VecOp.cpp:281
void mulEqS(Array< double > &a, double b)
Vector multiplication in-place, a[i] *= b.
Definition VecOp.cpp:267
void divVS(Array< double > &a, Array< double > const &b, double c)
Vector division, a[i] = b[i] / c.
Definition VecOp.cpp:156
void divVV(Array< double > &a, Array< double > const &b, Array< double > const &c)
Vector division, a[i] = b[i] / c[i].
Definition VecOp.cpp:141
void eqS(Array< double > &a, double b)
Vector assignment, a[i] = b.
Definition VecOp.cpp:36
void addVS(Array< double > &a, Array< double > const &b, double c)
Vector addition, a[i] = b[i] + c.
Definition VecOp.cpp:65
void mulVV(Array< double > &a, Array< double > const &b, Array< double > const &c)
Vector multiplication, a[i] = b[i] * c[i].
Definition VecOp.cpp:111
void subEqV(Array< double > &a, Array< double > const &b)
Vector subtraction in-place, a[i] -= b[i].
Definition VecOp.cpp:227
void expV(Array< double > &a, Array< double > const &b)
Vector exponentiation, a[i] = exp(b[i]).
Definition VecOp.cpp:184
void subEqS(Array< double > &a, double b)
Vector subtraction in-place, a[i] -= b.
Definition VecOp.cpp:240
Fields and FFTs for periodic boundary conditions (CPU)
Definition CField.cpp:12
Periodic fields and crystallography.
Definition CField.cpp:11
PSCF package top-level namespace.
Utility classes for scientific computation.