12#include "detray/definitions/algebra.hpp"
13#include "detray/definitions/containers.hpp"
14#include "detray/definitions/detail/qualifiers.hpp"
15#include "detray/definitions/math.hpp"
27enum class direction :
int {
29 e_unknown = std::numeric_limits<int>::max(),
38enum constraint : std::size_t {
49template <concepts::scalar scalar_t>
52 template <step::constra
int type>
53 DETRAY_HOST_DEVICE
constexpr void set(
const scalar_t )
const {
58 template <step::constra
int type = step::constra
int::e_all>
59 DETRAY_HOST_DEVICE
constexpr scalar_t
size(
60 const step::direction = step::direction::e_forward)
const {
61 return std::numeric_limits<scalar_t>::max();
65 template <step::constra
int type = step::constra
int::e_actor>
66 DETRAY_HOST_DEVICE
constexpr void release()
const {
73template <concepts::scalar scalar_t>
76 template <step::constra
int type>
77 requires(type != step::constraint::e_all)
78 DETRAY_HOST_DEVICE
void set(
const scalar_t step_size) {
85 template <step::constra
int type = step::constra
int::e_all>
86 DETRAY_HOST_DEVICE scalar_t
87 size(
const step::direction dir = step::direction::e_forward)
const {
88 if constexpr (type == step::constraint::e_all) {
89 return static_cast<scalar_t
>(dir) *
min();
96 template <step::constra
int type = step::constra
int::e_actor>
98 if constexpr (type == step::constraint::e_all) {
100 std::numeric_limits<scalar_t>::max(),
101 std::numeric_limits<scalar_t>::max(),
102 std::numeric_limits<scalar_t>::max()};
104 _constraints[type] = std::numeric_limits<scalar_t>::max();
109 DETRAY_HOST_DEVICE scalar_t
min()
const {
110 scalar_t min_constr = std::numeric_limits<scalar_t>::max();
112 math::min(min_constr,
_constraints[step::constraint::e_accuracy]);
113 min_constr = math::min(min_constr,
_constraints[step::constraint::e_actor]);
115 math::min(min_constr,
_constraints[step::constraint::e_aborter]);
116 return math::min(min_constr,
_constraints[step::constraint::e_user]);
121 std::numeric_limits<scalar_t>::max(),
122 std::numeric_limits<scalar_t>::max(),
123 std::numeric_limits<scalar_t>::max()};
constexpr double u
atomic mass unit u
Definition Units.hpp:155
Detray include(s).
Definition array_operators.hpp:18
std::array< value_t, kDIM > darray
Fixed-size array container.
Definition containers.hpp:30
Struct that can be configured with a number of different step sizes by other actors and will then res...
Definition constrained_step.hpp:74
void release()
Remove [all] constraints.
Definition constrained_step.hpp:97
scalar_t size(const step::direction dir=step::direction::e_forward) const
Return the strictest active step-size constraint, with direction applied.
Definition constrained_step.hpp:87
void set(const scalar_t step_size)
Register a new.
Definition constrained_step.hpp:78
scalar_t min() const
Definition constrained_step.hpp:109
darray< scalar_t, 4 > _constraints
Current step size constraints from accuracy, actors, aborters or user.
Definition constrained_step.hpp:120
Struct that represents unconstrained stepping.
Definition constrained_step.hpp:50
constexpr void set(const scalar_t) const
Ignore a constraint request because this policy imposes no limits.
Definition constrained_step.hpp:53
constexpr scalar_t size(const step::direction=step::direction::e_forward) const
Definition constrained_step.hpp:59
constexpr void release() const
Remove constraints.
Definition constrained_step.hpp:66