DFT-EFE
 
Loading...
Searching...
No Matches
SmoothCutoffFunctions.h
Go to the documentation of this file.
1#ifndef dftefe_SmoothCutoffFunctions_h
2#define dftefe_SmoothCutoffFunctions_h
3
4#include <vector>
5#include <utils/TypeConfig.h>
9#include <cmath>
10
11namespace dftefe
12{
13 namespace atoms
14 {
18
19 // scalar single-point evaluation — inline so every TU (CPU or GPU) that
20 // includes this header gets its own inline copy callable from host and
21 // device.
23 smoothCutoffValue(const double x, const double r, const double d)
24 {
25 const double y = 1.0 - d * (x - r) / r;
26 const double f1_y = (y <= 0.0) ? 0.0 : exp(-1.0 / y);
27 const double omy = 1.0 - y;
28 const double f1_1my = (omy <= 0.0) ? 0.0 : exp(-1.0 / omy);
29 return f1_y / (f1_y + f1_1my);
30 }
31
33 smoothCutoffDerivative(const double x,
34 const double r,
35 const double d,
36 const double tolerance)
37 {
38 const double y = 1.0 - d * (x - r) / r;
39 if (fabs(y) < tolerance || fabs(1.0 - y) < tolerance)
40 return 0.0;
41 const double f1_y = (y <= 0.0) ? 0.0 : exp(-1.0 / y);
42 const double omy = 1.0 - y;
43 const double f1_1my = (omy <= 0.0) ? 0.0 : exp(-1.0 / omy);
44 const double f1Der_y = f1_y / (y * y);
45 const double f1Der_1my = f1_1my / (omy * omy);
46 const double denom = f1_y + f1_1my;
47 const double f2Der =
48 (f1Der_y * f1_1my + f1_y * f1Der_1my) / (denom * denom);
49 return f2Der * (-d / r);
50 }
51
52 template <dftefe::utils::MemorySpace memorySpace>
53 void
55 const double * x,
56 const double r,
57 const double d,
58 double * out,
60
61 template <dftefe::utils::MemorySpace memorySpace>
62 void
64 size_type numPoints,
65 const double * x,
66 const double r,
67 const double d,
68 const double tolerance,
69 double * out,
71
75 } // namespace atoms
76} // namespace dftefe
77
78#endif // dftefe_SmoothCutoffFunctions_h
#define DFTEFE_HOST_DEVICE_FUNC
Definition: DeviceKernelLauncherHelpers.h:306
DFTEFE_HOST_DEVICE_FUNC double smoothCutoffDerivative(const double x, const double r, const double d, const double tolerance)
Definition: SmoothCutoffFunctions.h:33
double f2Der(const double x, const double tolerance)
Definition: SphericalHarmonics.cpp:36
DFTEFE_HOST_DEVICE_FUNC double smoothCutoffValue(const double x, const double r, const double d)
Definition: SmoothCutoffFunctions.h:23
static cudaStream_t defaultStream
Definition: DeviceTypeConfig.cu.h:62
cudaStream_t deviceStream_t
Definition: DeviceTypeConfig.cu.h:27
dealii includes
Definition: AtomFieldDataSpherical.cpp:31
std::uint64_t size_type
Definition: TypeConfig.h:9