25namespace weighting_function
38 const real_t atomisticRegionHalfDiameter_;
39 const real_t hybridRegionDiameter_;
40 const idx_t exponent_;
44 KOKKOS_INLINE_FUNCTION
47 auto dx = x - center_[0];
48 auto absDx = std::abs(dx);
50 return (absDx < atomisticRegionHalfDiameter_);
52 KOKKOS_INLINE_FUNCTION
55 auto dx = x - center_[0];
56 auto absDx = std::abs(dx);
58 if (absDx < atomisticRegionHalfDiameter_)
62 return (absDx < atomisticRegionHalfDiameter_ + hybridRegionDiameter_);
64 KOKKOS_INLINE_FUNCTION
67 auto dx = x - center_[0];
68 auto absDx = std::abs(dx);
70 return !(absDx < atomisticRegionHalfDiameter_ + hybridRegionDiameter_);
73 KOKKOS_INLINE_FUNCTION
82 switch (interfaceType_)
87 dx, absDx, lambda, modulatedLambda, gradLambdaX, gradLambdaY, gradLambdaZ);
96 KOKKOS_INLINE_FUNCTION
103 real_t& gradLambdaZ)
const
106 pi / (2_r * hybridRegionDiameter_) * (absDx - atomisticRegionHalfDiameter_);
107 auto base = std::cos(arg);
108 lambda = base * base;
112 auto factor = -
pi / (2_r * hybridRegionDiameter_) *
real_c(exponent_) * std::sin(arg) *
117 gradLambdaX = factor * dx;
122 KOKKOS_INLINE_FUNCTION
127 real_t& gradLambdaZ)
const
130 setWeightInAT(lambda, modulatedLambda, gradLambdaX, gradLambdaY, gradLambdaZ);
133 KOKKOS_INLINE_FUNCTION
138 real_t& gradLambdaZ)
const
141 modulatedLambda = 1_r;
147 KOKKOS_INLINE_FUNCTION
152 real_t& gradLambdaZ)
const
155 modulatedLambda = 0_r;
161 KOKKOS_INLINE_FUNCTION
169 real_t& gradLambdaZ)
const
171 real_t dx = x - center_[0];
172 real_t absDx = std::abs(dx);
174 if (absDx < atomisticRegionHalfDiameter_)
176 setWeightInAT(lambda, modulatedLambda, gradLambdaX, gradLambdaY, gradLambdaZ);
178 else if (absDx > atomisticRegionHalfDiameter_ + hybridRegionDiameter_)
180 setWeightInCG(lambda, modulatedLambda, gradLambdaX, gradLambdaY, gradLambdaZ);
185 dx, absDx, lambda, modulatedLambda, gradLambdaX, gradLambdaY, gradLambdaZ);
190 const real_t atomisticRegionDiameter,
191 const real_t hybridRegionDiameter,
195 atomisticRegionHalfDiameter_(0.5_r * atomisticRegionDiameter),
196 hybridRegionDiameter_(hybridRegionDiameter),
198 interfaceType_(interfaceType)
KOKKOS_INLINE_FUNCTION void setWeightInHY(real_t &dx, real_t &absDx, real_t &lambda, real_t &modulatedLambda, real_t &gradLambdaX, real_t &gradLambdaY, real_t &gradLambdaZ) const
Definition Slab.hpp:74
KOKKOS_INLINE_FUNCTION void setSmoothWeightInHY(real_t &dx, real_t &absDx, real_t &lambda, real_t &modulatedLambda, real_t &gradLambdaX, real_t &gradLambdaY, real_t &gradLambdaZ) const
Definition Slab.hpp:97
KOKKOS_INLINE_FUNCTION void setAbruptWeightInHY(real_t &lambda, real_t &modulatedLambda, real_t &gradLambdaX, real_t &gradLambdaY, real_t &gradLambdaZ) const
Definition Slab.hpp:123
KOKKOS_INLINE_FUNCTION void operator()(const real_t x, const real_t, const real_t, real_t &lambda, real_t &modulatedLambda, real_t &gradLambdaX, real_t &gradLambdaY, real_t &gradLambdaZ) const
Definition Slab.hpp:162
KOKKOS_INLINE_FUNCTION bool isInATRegion(const real_t &x, const real_t &, const real_t &) const
Definition Slab.hpp:45
InterfaceType
Definition Slab.hpp:31
KOKKOS_INLINE_FUNCTION bool isInCGRegion(const real_t &x, const real_t &, const real_t &) const
Definition Slab.hpp:65
Slab(const Point3D ¢er, const real_t atomisticRegionDiameter, const real_t hybridRegionDiameter, const idx_t nu, const InterfaceType interfaceType=InterfaceType::SMOOTH)
Definition Slab.hpp:189
KOKKOS_INLINE_FUNCTION bool isInHYRegion(const real_t &x, const real_t &, const real_t &) const
Definition Slab.hpp:53
KOKKOS_INLINE_FUNCTION void setWeightInAT(real_t &lambda, real_t &modulatedLambda, real_t &gradLambdaX, real_t &gradLambdaY, real_t &gradLambdaZ) const
Definition Slab.hpp:134
KOKKOS_INLINE_FUNCTION void setWeightInCG(real_t &lambda, real_t &modulatedLambda, real_t &gradLambdaX, real_t &gradLambdaY, real_t &gradLambdaZ) const
Definition Slab.hpp:148
#define MRMD_DEVICE_ASSERT(...)
Definition device.hpp:465
KOKKOS_INLINE_FUNCTION real_t powInt(const real_t &x, const idx_t n)
Definition math.hpp:31
Definition BerendsenBarostat.cpp:18
Kokkos::Array< real_t, 3 > Point3D
Definition datatypes.hpp:100
constexpr auto pi
Definition constants.hpp:26
int64_t idx_t
Definition datatypes.hpp:91
double real_t
Definition datatypes.hpp:99
KOKKOS_INLINE_FUNCTION constexpr real_t real_c(T t)
Definition datatypes.hpp:114