9#include <autodiff/forward/dual.hpp>
10#include <autodiff/forward/real.hpp>
11#include <deal.II/base/quadrature_lib.h>
15 using namespace dealii;
31 template <
typename NT,
int d,
typename FUN> NT
integrate(
const FUN &fun)
const
33 if constexpr (std::is_same_v<NT, autodiff::real> || std::is_same_v<NT, autodiff::dual>)
38 template <
typename NT,
int d,
typename FUN> NT
angle_integrate(
const FUN &fun)
const
40 if constexpr (std::is_same_v<NT, autodiff::real> || std::is_same_v<NT, autodiff::dual>)
47 if constexpr (std::is_same_v<NT, autodiff::real> || std::is_same_v<NT, autodiff::dual>)
54 if constexpr (std::is_same_v<NT, autodiff::real> || std::is_same_v<NT, autodiff::dual>)
60 template <
typename NT,
int d,
typename FUN> NT
integrate(
const FUN &fun,
const double k)
const
62 if constexpr (std::is_same_v<NT, autodiff::real> || std::is_same_v<NT, autodiff::dual>)
67 template <
typename NT,
int d,
typename FUN> NT
angle_integrate(
const FUN &fun,
const double k)
const
69 if constexpr (std::is_same_v<NT, autodiff::real> || std::is_same_v<NT, autodiff::dual>)
76 if constexpr (std::is_same_v<NT, autodiff::real> || std::is_same_v<NT, autodiff::dual>)
83 if constexpr (std::is_same_v<NT, autodiff::real> || std::is_same_v<NT, autodiff::dual>)
132 template <
typename NT,
int d,
typename FUN> NT
integrate(
const FUN &fun)
const
134 if constexpr (std::is_same_v<NT, autodiff::real> || std::is_same_v<NT, autodiff::dual>)
141 if constexpr (std::is_same_v<NT, autodiff::real> || std::is_same_v<NT, autodiff::dual>)
148 if constexpr (std::is_same_v<NT, autodiff::real> || std::is_same_v<NT, autodiff::dual>)
155 if constexpr (std::is_same_v<NT, autodiff::real> || std::is_same_v<NT, autodiff::dual>)
162 if constexpr (std::is_same_v<NT, autodiff::real> || std::is_same_v<NT, autodiff::dual>)
171 if constexpr (std::is_same_v<NT, autodiff::real> || std::is_same_v<NT, autodiff::dual>)
180 if constexpr (std::is_same_v<NT, autodiff::real> || std::is_same_v<NT, autodiff::dual>)
189 if constexpr (std::is_same_v<NT, autodiff::real> || std::is_same_v<NT, autodiff::dual>)
196 template <
typename NT,
typename FUN> NT
sum(
const FUN &fun,
const double T)
const
198 if constexpr (std::is_same_v<NT, autodiff::real> || std::is_same_v<NT, autodiff::dual>)
204 template <
typename NT,
int d,
typename FUN> NT
integrate(
const FUN &fun,
const double k)
const
206 if constexpr (std::is_same_v<NT, autodiff::real> || std::is_same_v<NT, autodiff::dual>)
211 template <
typename NT,
int d,
typename FUN> NT
angle_integrate(
const FUN &fun,
const double k)
const
213 if constexpr (std::is_same_v<NT, autodiff::real> || std::is_same_v<NT, autodiff::dual>)
220 if constexpr (std::is_same_v<NT, autodiff::real> || std::is_same_v<NT, autodiff::dual>)
227 if constexpr (std::is_same_v<NT, autodiff::real> || std::is_same_v<NT, autodiff::dual>)
234 if constexpr (std::is_same_v<NT, autodiff::real> || std::is_same_v<NT, autodiff::dual>)
241 template <
typename NT,
int d,
typename FUN>
244 if constexpr (std::is_same_v<NT, autodiff::real> || std::is_same_v<NT, autodiff::dual>)
251 template <
typename NT,
int d,
typename FUN>
254 if constexpr (std::is_same_v<NT, autodiff::real> || std::is_same_v<NT, autodiff::dual>)
261 template <
typename NT,
int d,
typename FUN>
264 if constexpr (std::is_same_v<NT, autodiff::real> || std::is_same_v<NT, autodiff::dual>)
271 template <
typename NT,
typename FUN> NT
sum(
const FUN &fun,
const double T,
const double k)
const
273 if constexpr (std::is_same_v<NT, autodiff::real> || std::is_same_v<NT, autodiff::dual>)
Definition flow_equations.hh:118
NT spatial_integrate_and_integrate(const FUN &fun) const
Definition flow_equations.hh:160
NT angle_integrate(const FUN &fun, const double k) const
Definition flow_equations.hh:211
void print_parameters(const std::string logname) const
Print all deduced extents to the given spdlog.
NT spatial_angle_integrate_and_sum(const FUN &fun, const double T, const double k) const
Definition flow_equations.hh:262
NT spatial_angle_integrate_and_sum(const FUN &fun, const double T) const
Definition flow_equations.hh:187
NT two_angle_integrate(const FUN &fun, const double k) const
Definition flow_equations.hh:218
uint jac_q0_quadrature_order
Definition flow_equations.hh:309
NT spatial_integrate_and_integrate(const FUN &fun, const double k) const
Definition flow_equations.hh:232
NT spatial_integrate_and_sum(const FUN &fun, const double T) const
Definition flow_equations.hh:178
NT spatial_angle_integrate_and_integrate(const FUN &fun) const
Definition flow_equations.hh:169
const uint q0_quadrature_order
Definition flow_equations.hh:296
const double x0_extent_tolerance
Definition flow_equations.hh:315
const std::function< double(double)> optimize_x0
Definition flow_equations.hh:321
double k
Definition flow_equations.hh:324
const QGauss< 1 > x0_quadrature
Definition flow_equations.hh:292
double x0_extent
Definition flow_equations.hh:293
const QGauss< 1 > angle_quadrature
Definition flow_equations.hh:301
NT three_angle_integrate(const FUN &fun, const double k) const
Definition flow_equations.hh:225
const uint x0_quadrature_order
Definition flow_equations.hh:291
NT sum(const FUN &fun, const double T) const
Definition flow_equations.hh:196
double x_extent
Definition flow_equations.hh:288
void set_k(const double k)
double q0_extent
Definition flow_equations.hh:298
NT integrate(const FUN &fun) const
Definition flow_equations.hh:132
NT spatial_angle_integrate_and_integrate(const FUN &fun, const double k) const
Definition flow_equations.hh:242
FlowEquationsFiniteT(const JSONValue &json, const double T, std::function< double(double)> optimize_x, std::function< double(double)> optimize_x0, std::function< double(double)> optimize_q0)
const uint x_quadrature_order
Definition flow_equations.hh:286
const int verbosity
Definition flow_equations.hh:326
QGauss< 1 > jac_x_quadrature
Definition flow_equations.hh:306
NT three_angle_integrate(const FUN &fun) const
Definition flow_equations.hh:153
QGauss< 1 > jac_x0_quadrature
Definition flow_equations.hh:308
uint jac_angle_quadrature_order
Definition flow_equations.hh:311
NT spatial_integrate_and_sum(const FUN &fun, const double T, const double k) const
Definition flow_equations.hh:252
NT sum(const FUN &fun, const double T, const double k) const
Definition flow_equations.hh:271
uint jac_x0_quadrature_order
Definition flow_equations.hh:307
const double q0_extent_tolerance
Definition flow_equations.hh:316
const uint x0_summands
Definition flow_equations.hh:290
QGauss< 1 > jac_q0_quadrature
Definition flow_equations.hh:310
uint jac_x_quadrature_order
Definition flow_equations.hh:305
const double T
Definition flow_equations.hh:318
NT two_angle_integrate(const FUN &fun) const
Definition flow_equations.hh:146
QGauss< 1 > jac_angle_quadrature
Definition flow_equations.hh:312
const QGauss< 1 > q0_quadrature
Definition flow_equations.hh:297
NT integrate(const FUN &fun, const double k) const
Definition flow_equations.hh:204
void set_jacobian_quadrature_factor(const double jacobian_quadrature_factor)
const uint q0_summands
Definition flow_equations.hh:295
bool unoptimized
Definition flow_equations.hh:325
double jacobian_quadrature_factor
Definition flow_equations.hh:303
const QGauss< 1 > x_quadrature
Definition flow_equations.hh:287
const std::function< double(double)> optimize_x
Definition flow_equations.hh:320
NT angle_integrate(const FUN &fun) const
Definition flow_equations.hh:139
const std::function< double(double)> optimize_q0
Definition flow_equations.hh:322
const double x_extent_tolerance
Definition flow_equations.hh:314
const uint angle_quadrature_order
Definition flow_equations.hh:300
Definition flow_equations.hh:18
NT integrate(const FUN &fun) const
Definition flow_equations.hh:31
uint jac_angle_quadrature_order
Definition flow_equations.hh:105
NT angle_integrate(const FUN &fun) const
Definition flow_equations.hh:38
NT three_angle_integrate(const FUN &fun, const double k) const
Definition flow_equations.hh:81
FlowEquations(const JSONValue &json, std::function< double(double)> optimize_x)
double k
Definition flow_equations.hh:112
const uint angle_quadrature_order
Definition flow_equations.hh:98
NT two_angle_integrate(const FUN &fun) const
Definition flow_equations.hh:45
NT three_angle_integrate(const FUN &fun) const
Definition flow_equations.hh:52
NT integrate(const FUN &fun, const double k) const
Definition flow_equations.hh:60
NT two_angle_integrate(const FUN &fun, const double k) const
Definition flow_equations.hh:74
void set_k(const double k)
QGauss< 1 > jac_x_quadrature
Definition flow_equations.hh:104
uint jac_x_quadrature_order
Definition flow_equations.hh:103
void set_jacobian_quadrature_factor(const double jacobian_quadrature_factor)
bool unoptimized
Definition flow_equations.hh:113
const QGauss< 1 > x_quadrature
Definition flow_equations.hh:95
const int verbosity
Definition flow_equations.hh:114
const std::function< double(double)> optimize_x
Definition flow_equations.hh:110
const double x_extent_tolerance
Definition flow_equations.hh:108
NT angle_integrate(const FUN &fun, const double k) const
Definition flow_equations.hh:67
const uint x_quadrature_order
Definition flow_equations.hh:94
double jacobian_quadrature_factor
Definition flow_equations.hh:101
double x_extent
Definition flow_equations.hh:96
void print_parameters(const std::string logname) const
Print all deduced extents to the given spdlog.
QGauss< 1 > jac_angle_quadrature
Definition flow_equations.hh:106
const QGauss< 1 > angle_quadrature
Definition flow_equations.hh:99
A wrapper around the boost json value class.
Definition json.hh:19
NT spatial_angle_integrate_and_sum(const FUN &fun, const QGauss< 1 > &x_quadrature, const double x_extent, const double k, const QGauss< 1 > &cos_quadrature, const int m_order, const QGauss< 1 > &m_quadrature, const double m_extent, const double T)
Performs the integral.
Definition loop_integrals.hh:529
NT two_angle_integrate(const FUN &fun, const QGauss< 1 > &x_quadrature, const double x_extent, const double k, const QGauss< 1 > &cos_quadrature)
Performs the integral.
Definition loop_integrals.hh:145
NT spatial_integrate_and_integrate(const FUN &fun, const QGauss< 1 > &x_quadrature, const double x_extent, const double k, const QGauss< 1 > &m_quadrature, const double m_extent)
Performs the integral.
Definition loop_integrals.hh:296
NT spatial_angle_integrate_and_integrate(const FUN &fun, const QGauss< 1 > &x_quadrature, const double x_extent, const double k, const QGauss< 1 > &cos_quadrature, const QGauss< 1 > &m_quadrature, const double m_extent)
Performs the integral.
Definition loop_integrals.hh:360
NT angle_integrate(const FUN &fun, const QGauss< 1 > &x_quadrature, const double x_extent, const double k, const QGauss< 1 > &cos_quadrature)
Performs the integral.
Definition loop_integrals.hh:84
NT three_angle_integrate(const FUN &fun, const QGauss< 1 > &x_quadrature, const double x_extent, const double k, const QGauss< 1 > &cos_quadrature)
Performs the integral.
Definition loop_integrals.hh:215
NT integrate(const FUN &fun, const QGauss< 1 > &x_quadrature, const double x_extent, const double k)
Performs the integral.
Definition loop_integrals.hh:35
NT sum(const FUN &fun, const int m_order, const QGauss< 1 > &m_quadrature, const double m_extent, const double T)
Definition loop_integrals.hh:619
NT spatial_integrate_and_sum(const FUN &fun, const QGauss< 1 > &x_quadrature, const double x_extent, const double k, const int m_order, const QGauss< 1 > &m_quadrature, const double m_extent, const double T)
Performs the integral.
Definition loop_integrals.hh:436
Definition complex_math.hh:14
unsigned int uint
Definition utils.hh:22