DFT-EFE
 
Loading...
Searching...
No Matches
ScalarSpatialFunction.h
Go to the documentation of this file.
1#ifndef dftefeScalarSpatialFunction_h
2#define dftefeScalarSpatialFunction_h
3#include "Point.h"
4#include "TypeConfig.h"
5#include "Exceptions.h"
6#include "MemorySpaceType.h"
7#include <complex>
8#include <vector>
9namespace dftefe
10{
11 namespace utils
12 {
21 template <typename Q>
23 {
24 public:
25 virtual ~ScalarSpatialFunction() = default;
26
27 virtual Q
28 operator()(const utils::Point &point) const = 0;
29
30 virtual std::vector<Q>
31 operator()(const std::vector<utils::Point> &points) const = 0;
32
33 template <MemorySpace memorySpace>
34 void
35 eval(const size_type numPoints, const double *t, Q *q) const
36 {
37 if constexpr (memorySpace == MemorySpace::DEVICE)
38 {
39#ifdef DFTEFE_WITH_DEVICE
40 evalDevice(numPoints, t, q);
41#else
43 false, "eval<DEVICE>() called but DEVICE support not compiled.");
44#endif
45 }
46 else
47 {
48 evalHost(numPoints, t, q);
49 }
50 }
51
52 protected:
53 virtual void
54 evalHost(size_type numPoints, const double *t, Q *q) const
55 {
57 false, "evalHost() not implemented for this ScalarSpatialFunction.");
58 }
59
60#ifdef DFTEFE_WITH_DEVICE
61 virtual void
62 evalDevice(size_type numPoints, const double *t, Q *q) const
63 {
65 false,
66 "evalDevice() not implemented for this ScalarSpatialFunction.");
67 }
68#endif
69 };
70
71 template <typename Q>
73
75
78
83 {
84 public:
85 virtual ~ScalarSpatialFunctionReal1D() = default;
86
87 virtual double
88 operator()(double x) const = 0;
89
90 virtual std::vector<double>
91 operator()(const std::vector<double> &x) const = 0;
92
93 template <MemorySpace memorySpace>
94 void
95 eval(const size_type numPoints, const double *t, double *q) const
96 {
97 if constexpr (memorySpace == MemorySpace::DEVICE)
98 {
99#ifdef DFTEFE_WITH_DEVICE
100 evalDevice(numPoints, t, q);
101#else
103 false, "eval<DEVICE>() called but DEVICE support not compiled.");
104#endif
105 }
106 else
107 {
108 evalHost(numPoints, t, q);
109 }
110 }
111
112 protected:
113 virtual void
114 evalHost(size_type numPoints, const double *t, double *q) const
115 {
117 false,
118 "evalHost() not implemented for this ScalarSpatialFunctionReal1D.");
119 }
120
121#ifdef DFTEFE_WITH_DEVICE
122 virtual void
123 evalDevice(size_type numPoints, const double *t, double *q) const
124 {
126 false,
127 "evalDevice() not implemented for this ScalarSpatialFunctionReal1D.");
128 }
129#endif
130 };
131
132 } // end of namespace utils
133} // end of namespace dftefe
134#endif // dftefeScalarSpatialFunction_h
Definition: PointImpl.h:13
Abstract base for scalar functions of a single real variable.
Definition: ScalarSpatialFunction.h:83
virtual std::vector< double > operator()(const std::vector< double > &x) const =0
virtual double operator()(double x) const =0
void eval(const size_type numPoints, const double *t, double *q) const
Definition: ScalarSpatialFunction.h:95
virtual void evalHost(size_type numPoints, const double *t, double *q) const
Definition: ScalarSpatialFunction.h:114
Abstract base for scalar functions of a spatial point.
Definition: ScalarSpatialFunction.h:23
void eval(const size_type numPoints, const double *t, Q *q) const
Definition: ScalarSpatialFunction.h:35
virtual std::vector< Q > operator()(const std::vector< utils::Point > &points) const =0
virtual ~ScalarSpatialFunction()=default
virtual Q operator()(const utils::Point &point) const =0
virtual void evalHost(size_type numPoints, const double *t, Q *q) const
Definition: ScalarSpatialFunction.h:54
void throwException(bool condition, std::string msg)
Definition: Exceptions.cpp:56
dealii includes
Definition: AtomFieldDataSpherical.cpp:31
std::uint64_t size_type
Definition: TypeConfig.h:9