PSCF v1.2
pscf/math/complex.h
1#ifndef PSCF_MATH_COMPLEX_H
2#define PSCF_MATH_COMPLEX_H
3
4/*
5* PSCF Package - Polymer Self-Consistent Field Theory
6*
7* Copyright 2016 - 2022, The Regents of the University of Minnesota
8* Distributed under the terms of the GNU General Public License.
9*/
10
11#include <complex>
12#include <iostream>
13
14namespace Pscf {
15
16 // Real and imaginary components
17
25 template <typename CT, typename RT>
26 RT real(CT const& a);
27
35 template <typename CT, typename RT>
36 RT imag(CT const& a);
37
38 // Absolute magnitude
39
47 template <typename CT, typename RT>
48 RT abs(CT const& a);
49
57 template <typename CT, typename RT>
58 RT absSq(CT const& a);
59
60 // CT Conjugation
61
70 template <typename CT>
71 void conj(CT& z, CT const& a);
72
80 template <typename CT>
81 void conj(CT& a);
82
83 // Assignment
84
94 template <typename CT, typename RT>
95 void assign(CT& z, RT const& a, RT const& b);
96
105 template <typename CT, typename RT>
106 void assign(CT& z, RT const& a);
107
116 template <typename CT>
117 void assign(CT& z, CT const& a);
118
127 template <typename CT, typename RT>
128 void assign(CT & z, std::complex<RT> const& a);
129
138 template <typename CT, typename RT>
139 void assign(std::complex<RT> & z, CT const& a);
140
141 // Addition
142
152 template <typename CT>
153 void add(CT& z, CT const& a, CT const& b);
154
164 template <typename CT, typename RT>
165 void add(CT& z, CT const& a, RT const& b);
166
175 template <typename CT>
176 void addEq(CT& a, CT const& b);
177
186 template <typename CT, typename RT>
187 void addEq(CT& a, RT const& b);
188
189 // Subtraction
190
200 template <typename CT>
201 void sub(CT& z, CT const& a, CT const& b);
202
212 template <typename CT, typename RT>
213 void sub(CT& z, CT const& a, RT const& b);
214
223 template <typename CT>
224 void subEq(CT & a, CT const& b);
225
234 template <typename CT, typename RT>
235 void subEq(CT & a, RT const& b);
236
247 template <typename CT, typename RT>
248 RT absSqDiff(CT const& a, CT const& b);
249
250 // Multiplication
251
261 template <typename CT>
262 void mul(CT& z, CT const& a, CT const& b);
263
273 template <typename CT, typename RT>
274 void mul(CT& z, CT const& a, RT const& b);
275
284 template <typename CT>
285 void mulEq(CT & a, CT const& b);
286
295 template <typename CT, typename RT>
296 void mulEq(CT & a, RT const& b);
297
306 template <typename CT>
307 void square(CT& z, CT const& a);
308
309 // Division
310
320 template <typename CT>
321 void div(CT& z, CT const& a, CT const& b);
322
332 template <typename CT, typename RT>
333 void div(CT& z, CT const& a, RT const& b);
334
343 template <typename CT>
344 void divEq(CT & a, CT const & b);
345
354 template <typename CT, typename RT>
355 void divEq(CT & a, RT const& b);
356
357 #if 0
364 std::istream& operator >> (std::istream& is, CT & z);
365
373 std::ostream& operator << (std::ostream& os, CT const & z);
374 #endif
375
376} // namespace Pscf
377#endif
void div(CT &z, CT const &a, CT const &b)
Division of two complex numbers, z = a / b .
void square(CT &z, CT const &a)
Compute complex square of a complex number, z = a * a.
void conj(CT &z, CT const &a)
Compute complex conjugate, z = a^*.
void divEq(CT &a, CT const &b)
In place division of two complex number, a /= b.
void subEq(CT &a, CT const &b)
In place subtraction of two complex numbers, a -= b.
RT imag(CT const &a)
Return the imaginary part of a complex number.
RT abs(CT const &a)
Return absolute magnitude of a complex number.
void mulEq(CT &a, CT const &b)
In place multiplication of two complex number, a *= b.
RT absSq(CT const &a)
Return square of absolute magnitude of a complex number.
void assign(CT &z, RT const &a, RT const &b)
Create a complex number from real and imaginary parts, z = a + ib.
void addEq(CT &a, CT const &b)
In place addition of complex numbers, a += b.
RT absSqDiff(CT const &a, CT const &b)
Return square of the absolute magnitude of a complex difference.
RT real(CT const &a)
Return the real part of a complex number.
void add(CT &z, CT const &a, CT const &b)
Addition of two complex numbers, z = a + b.
void sub(CT &z, CT const &a, CT const &b)
Subtraction of two complex numbers, z = a - b.
void mul(CT &z, CT const &a, CT const &b)
Multiplication of two complex numbers, z = a * b.
PSCF package top-level namespace.
Definition param_pc.dox:1
std::istream & operator>>(std::istream &in, Pair< Data > &pair)
Input a Pair from an istream.
Definition Pair.h:44
std::ostream & operator<<(std::ostream &out, const Pair< Data > &pair)
Output a Pair to an ostream, without line breaks.
Definition Pair.h:57