33 std::lock_guard<std::mutex> lock(
m_mutex);
35 if constexpr (std::is_same_v<NT, double>) {
39 }
else if constexpr (std::is_same_v<NT, float>) {
44 static_assert(std::is_same_v<NT, double> || std::is_same_v<NT, float>,
45 "Unknown type requested of MatsubaraStorage::get_matsubara_quadrature");
58 template <
typename NT =
double>
using StorageType = std::map<double, std::map<double, MatsubaraQuadrature<NT>>>;
59 template <
typename NT =
double>
using SubStorageType = std::map<double, MatsubaraQuadrature<NT>>;
91 std::lock_guard<std::mutex> lock(
m_mutex);
93 if constexpr (std::is_same_v<NT, double>) {
96 return order_it->second;
97 }
else if constexpr (std::is_same_v<NT, float>) {
100 return order_it->second;
102 static_assert(std::is_same_v<NT, double> || std::is_same_v<NT, float>,
103 "Unknown type requested of QuadratureStorage::get_quadrature");
112 template <
typename NT =
double>
using StorageType = std::map<QuadratureType, std::map<size_t, Quadrature<NT>>>;
113 template <
typename NT =
double>
using SubStorageType = std::map<size_t, Quadrature<NT>>;
150 template <
typename NT =
double>
162 template <
typename NT =
double>
197 template <
typename NT =
double>
210 template <
typename NT =
double>
224 template <
typename NT =
double>
236 template <
typename NT =
double>
A wrapper around the boost json value class.
Definition json.hh:19
A quadrature rule for (bosonic) Matsubara frequencies, based on the method of Monien [1]....
Definition matsubara.hh:26
A class that provides quadrature points and weights, in host and device memory. The quadrature points...
Definition quadrature_provider.hh:139
int verbosity
Definition quadrature_provider.hh:247
const std::vector< NT > & get_matsubara_weights(const NT T, const NT typical_E)
Get the quadrature weights for a quadrature of size quadrature_size.
Definition quadrature_provider.hh:185
internal::QuadratureStorage quadrature_storage
Definition quadrature_provider.hh:245
const NT * get_device_weights(const size_t order, const int device=0, const QuadratureType type=QuadratureType::legendre)
Get the device-side quadrature weights for a quadrature of size quadrature_size.
Definition quadrature_provider.hh:211
const std::vector< NT > & get_weights(const size_t order, const QuadratureType type=QuadratureType::legendre)
Get the quadrature weights for a quadrature of size quadrature_size.
Definition quadrature_provider.hh:163
const NT * get_device_matsubara_points(const NT T, const NT typical_E, const int device=0)
Get the device-side quadrature points for a quadrature of size quadrature_size.
Definition quadrature_provider.hh:225
const std::vector< NT > & get_matsubara_points(const NT T, const NT typical_E)
Get the quadrature points for a quadrature of size quadrature_size.
Definition quadrature_provider.hh:174
const std::vector< NT > & get_points(const size_t order, const QuadratureType type=QuadratureType::legendre)
Get the quadrature points for a quadrature of size quadrature_size.
Definition quadrature_provider.hh:151
QuadratureProvider(const JSONValue &json)
const NT * get_device_points(const size_t order, const int device=0, const QuadratureType type=QuadratureType::legendre)
Get the device-side quadrature points for a quadrature of size quadrature_size.
Definition quadrature_provider.hh:198
const NT * get_device_matsubara_weights(const NT T, const NT typical_E, const int device=0)
Get the device-side quadrature weights for a quadrature of size quadrature_size.
Definition quadrature_provider.hh:237
internal::MatsubaraStorage matsubara_storage
Definition quadrature_provider.hh:244
Definition quadrature.hh:50
A class that stores Matsubara quadrature points and weights for a given T, E. Its main purpose is to ...
Definition quadrature_provider.hh:25
EnergyIterator< double > find_E_d(const double E, TemperatureIterator< double > T_it)
int add_matsubara_size
Definition quadrature_provider.hh:75
void set_min_matsubara_size(const int value)
void set_vacuum_quad_size(const int size)
StorageType< double > quadratures_d
Definition quadrature_provider.hh:70
void set_verbosity(int v)
EnergyIterator< float > find_E_f(const float E, TemperatureIterator< float > T_it)
std::mutex m_mutex
Definition quadrature_provider.hh:78
void set_add_matsubara_size(const int value)
int min_matsubara_size
Definition quadrature_provider.hh:76
int vacuum_quad_size
Definition quadrature_provider.hh:74
MatsubaraQuadrature< NT > & get_matsubara_quadrature(const NT T, const NT E)
Return the MatsubaraQuadrature object for a given T, E.
Definition quadrature_provider.hh:31
TemperatureIterator< double > find_T_d(const double T)
std::map< double, MatsubaraQuadrature< NT > > SubStorageType
Definition quadrature_provider.hh:59
MatsubaraQuadrature< float > & get_matsubara_quadrature_f(const float T, const float E)
typename StorageType< NT >::mapped_type::iterator EnergyIterator
Definition quadrature_provider.hh:62
typename StorageType< NT >::iterator TemperatureIterator
Definition quadrature_provider.hh:61
int verbosity
Definition quadrature_provider.hh:73
TemperatureIterator< float > find_T_f(const float T)
MatsubaraQuadrature< double > & get_matsubara_quadrature_d(const double T, const double E)
StorageType< float > quadratures_f
Definition quadrature_provider.hh:71
std::map< double, std::map< double, MatsubaraQuadrature< NT > > > StorageType
Definition quadrature_provider.hh:58
A class that stores Quadrature points and weights for a given type and order Its main purpose is to a...
Definition quadrature_provider.hh:87
typename StorageType< NT >::mapped_type::iterator OrderIterator
Definition quadrature_provider.hh:116
Quadrature< NT > & get_quadrature(const size_t order, const QuadratureType type)
Definition quadrature_provider.hh:89
TypeIterator< float > find_type_f(const QuadratureType type)
std::mutex m_mutex
Definition quadrature_provider.hh:129
std::map< size_t, Quadrature< NT > > SubStorageType
Definition quadrature_provider.hh:113
int verbosity
Definition quadrature_provider.hh:127
TypeIterator< double > find_type_d(const QuadratureType type)
typename StorageType< NT >::iterator TypeIterator
Definition quadrature_provider.hh:115
OrderIterator< double > find_order_d(const size_t order, TypeIterator< double > type_it)
StorageType< float > quadratures_f
Definition quadrature_provider.hh:125
Quadrature< double > & get_quadrature_d(const size_t order, const QuadratureType type)
std::map< QuadratureType, std::map< size_t, Quadrature< NT > > > StorageType
Definition quadrature_provider.hh:112
OrderIterator< float > find_order_f(const size_t order, TypeIterator< float > type_it)
StorageType< double > quadratures_d
Definition quadrature_provider.hh:124
Quadrature< float > & get_quadrature_f(const size_t order, const QuadratureType type)
void set_verbosity(int v)
Definition complex_math.hh:14
QuadratureType
Definition quadrature.hh:47