MatsubaraStorage Class Reference#

DiFfRG: DiFfRG::internal::MatsubaraStorage Class Reference
DiFfRG
Discretization Framework for functional Renormalization Group flows
DiFfRG::internal::MatsubaraStorage Class Reference

A class that stores Matsubara quadrature points and weights for a given T, E. Its main purpose is to avoid recomputing the quadrature points and weights for each Matsubara integrator and provide a search algorithm to find previously computed Matsubara quadratures. More...

#include <quadrature_provider.hh>

Public Member Functions

template<typename NT = double>
MatsubaraQuadrature< NT > & get_matsubara_quadrature (const NT T, const NT E)
 Return the MatsubaraQuadrature object for a given T, E.
 
template<typename NT = double>
MatsubaraQuadrature< NT > & get_matsubara_exact_sum (const NT T, const NT freq_cutoff)
 The exact Matsubara sum for a summand of finite extent in the frequency.
 
template<typename NT = double>
MatsubaraQuadrature< NT > & get_finite_interval (const NT cutoff, const size_t order, const Kokkos::View< const NT *, CPU_memory > gl_nodes, const Kokkos::View< const NT *, CPU_memory > gl_weights)
 Gauss-Legendre over [-cutoff, cutoff] for a summand of finite extent; see MatsubaraQuadrature::reinit_finite_interval.
 
void set_verbosity (int v)
 
void set_report_port (ReportPort port)
 
void set_vacuum_quad_size (const int size)
 
void set_min_matsubara_size (const int value)
 
void set_max_matsubara_size (const int value)
 
void set_matsubara_precision_factor (const double value)
 
int get_max_matsubara_size () const
 The node ceiling every rule built here is clamped to.
 
template<typename NT = double>
int predicted_size (const NT T, const NT typical_E) const
 Nodes the Monien rule would want at (T, typical_E) under THIS provider's dials.
 

Private Types

template<typename NT = double>
using StorageType = std::map<double, std::map<double, MatsubaraQuadrature<NT>>>
 
template<typename NT = double>
using SubStorageType = std::map<double, MatsubaraQuadrature<NT>>
 
template<typename NT = double>
using TemperatureIterator = typename StorageType<NT>::iterator
 
template<typename NT = double>
using EnergyIterator = typename StorageType<NT>::mapped_type::iterator
 
template<typename NT = double>
using ExactStorageType = std::map<double, std::map<int, MatsubaraQuadrature<NT>>>
 
template<typename NT = double>
using ExactTemperatureIterator = typename ExactStorageType<NT>::iterator
 
template<typename NT = double>
using IntervalStorageType = std::map<size_t, std::map<double, MatsubaraQuadrature<NT>>>
 
template<typename NT = double>
using IntervalOrderIterator = typename IntervalStorageType<NT>::iterator
 

Private Member Functions

MatsubaraQuadrature< double > & get_matsubara_quadrature_d (const double T, const double E)
 
MatsubaraQuadrature< float > & get_matsubara_quadrature_f (const float T, const float E)
 
TemperatureIterator< double > find_T_d (const double T)
 
TemperatureIterator< float > find_T_f (const float T)
 
EnergyIterator< double > find_E_d (const double E, TemperatureIterator< double > T_it)
 
EnergyIterator< float > find_E_f (const float E, TemperatureIterator< float > T_it)
 
ExactTemperatureIterator< double > find_exact_T_d (const double T)
 
ExactTemperatureIterator< float > find_exact_T_f (const float T)
 
MatsubaraQuadrature< double > & find_exact_d (const int n, ExactTemperatureIterator< double > T_it)
 
MatsubaraQuadrature< float > & find_exact_f (const int n, ExactTemperatureIterator< float > T_it)
 
IntervalOrderIterator< double > find_interval_order_d (const size_t order)
 
IntervalOrderIterator< float > find_interval_order_f (const size_t order)
 
MatsubaraQuadrature< double > & find_interval_d (const double cutoff, IntervalOrderIterator< double > o_it, const Kokkos::View< const double *, CPU_memory > n, const Kokkos::View< const double *, CPU_memory > w)
 
MatsubaraQuadrature< float > & find_interval_f (const float cutoff, IntervalOrderIterator< float > o_it, const Kokkos::View< const float *, CPU_memory > n, const Kokkos::View< const float *, CPU_memory > w)
 

Private Attributes

StorageType< double > quadratures_d
 
StorageType< float > quadratures_f
 
ExactStorageType< double > exact_sums_d
 
ExactStorageType< float > exact_sums_f
 
IntervalStorageType< double > intervals_d
 
IntervalStorageType< float > intervals_f
 
int verbosity = 0
 
int vacuum_quad_size = 64
 
double matsubara_precision_factor = 1
 
int min_matsubara_size = 8
 
int max_matsubara_size = 128
 
std::mutex m_mutex
 
ReportPort log
 

Detailed Description

A class that stores Matsubara quadrature points and weights for a given T, E. Its main purpose is to avoid recomputing the quadrature points and weights for each Matsubara integrator and provide a search algorithm to find previously computed Matsubara quadratures.

Member Typedef Documentation

◆ EnergyIterator

template<typename NT = double>
using DiFfRG::internal::MatsubaraStorage::EnergyIterator = typename StorageType<NT>::mapped_type::iterator
private

◆ ExactStorageType

template<typename NT = double>
using DiFfRG::internal::MatsubaraStorage::ExactStorageType = std::map<double, std::map<int, MatsubaraQuadrature<NT>>>
private

◆ ExactTemperatureIterator

template<typename NT = double>
using DiFfRG::internal::MatsubaraStorage::ExactTemperatureIterator = typename ExactStorageType<NT>::iterator
private

◆ IntervalOrderIterator

template<typename NT = double>
using DiFfRG::internal::MatsubaraStorage::IntervalOrderIterator = typename IntervalStorageType<NT>::iterator
private

◆ IntervalStorageType

template<typename NT = double>
using DiFfRG::internal::MatsubaraStorage::IntervalStorageType = std::map<size_t, std::map<double, MatsubaraQuadrature<NT>>>
private

◆ StorageType

template<typename NT = double>
using DiFfRG::internal::MatsubaraStorage::StorageType = std::map<double, std::map<double, MatsubaraQuadrature<NT>>>
private

◆ SubStorageType

template<typename NT = double>
using DiFfRG::internal::MatsubaraStorage::SubStorageType = std::map<double, MatsubaraQuadrature<NT>>
private

◆ TemperatureIterator

template<typename NT = double>
using DiFfRG::internal::MatsubaraStorage::TemperatureIterator = typename StorageType<NT>::iterator
private

Member Function Documentation

◆ find_E_d()

EnergyIterator< double > DiFfRG::internal::MatsubaraStorage::find_E_d ( const double E,
TemperatureIterator< double > T_it )
private

◆ find_E_f()

EnergyIterator< float > DiFfRG::internal::MatsubaraStorage::find_E_f ( const float E,
TemperatureIterator< float > T_it )
private

◆ find_exact_d()

MatsubaraQuadrature< double > & DiFfRG::internal::MatsubaraStorage::find_exact_d ( const int n,
ExactTemperatureIterator< double > T_it )
private

◆ find_exact_f()

MatsubaraQuadrature< float > & DiFfRG::internal::MatsubaraStorage::find_exact_f ( const int n,
ExactTemperatureIterator< float > T_it )
private

◆ find_exact_T_d()

ExactTemperatureIterator< double > DiFfRG::internal::MatsubaraStorage::find_exact_T_d ( const double T)
private

◆ find_exact_T_f()

ExactTemperatureIterator< float > DiFfRG::internal::MatsubaraStorage::find_exact_T_f ( const float T)
private

◆ find_interval_d()

MatsubaraQuadrature< double > & DiFfRG::internal::MatsubaraStorage::find_interval_d ( const double cutoff,
IntervalOrderIterator< double > o_it,
const Kokkos::View< const double *, CPU_memory > n,
const Kokkos::View< const double *, CPU_memory > w )
private

◆ find_interval_f()

MatsubaraQuadrature< float > & DiFfRG::internal::MatsubaraStorage::find_interval_f ( const float cutoff,
IntervalOrderIterator< float > o_it,
const Kokkos::View< const float *, CPU_memory > n,
const Kokkos::View< const float *, CPU_memory > w )
private

◆ find_interval_order_d()

IntervalOrderIterator< double > DiFfRG::internal::MatsubaraStorage::find_interval_order_d ( const size_t order)
private

◆ find_interval_order_f()

IntervalOrderIterator< float > DiFfRG::internal::MatsubaraStorage::find_interval_order_f ( const size_t order)
private

◆ find_T_d()

TemperatureIterator< double > DiFfRG::internal::MatsubaraStorage::find_T_d ( const double T)
private

◆ find_T_f()

TemperatureIterator< float > DiFfRG::internal::MatsubaraStorage::find_T_f ( const float T)
private

◆ get_finite_interval()

template<typename NT = double>
MatsubaraQuadrature< NT > & DiFfRG::internal::MatsubaraStorage::get_finite_interval ( const NT cutoff,
const size_t order,
const Kokkos::View< const NT *, CPU_memory > gl_nodes,
const Kokkos::View< const NT *, CPU_memory > gl_weights )
inline

Gauss-Legendre over [-cutoff, cutoff] for a summand of finite extent; see MatsubaraQuadrature::reinit_finite_interval.

Keyed on (order, cutoff). The cutoff is continuous – it tracks k – so this rebuilds once per RG step, exactly as the T=0 rule it replaces already did. The Gauss-Legendre rule itself is NOT rebuilt: it comes from QuadratureStorage and only the O(N) scaling by the cutoff happens here.

◆ get_matsubara_exact_sum()

template<typename NT = double>
MatsubaraQuadrature< NT > & DiFfRG::internal::MatsubaraStorage::get_matsubara_exact_sum ( const NT T,
const NT freq_cutoff )
inline

The exact Matsubara sum for a summand of finite extent in the frequency.

Keyed on (T, node count) rather than on the cutoff, because that is all the rule depends on: the cutoff enters only through floor(cutoff / 2 pi T). Neighbouring RG steps therefore share an entry instead of each building their own, and the map stays bounded by the number of distinct mode counts the flow visits.

◆ get_matsubara_quadrature()

template<typename NT = double>
MatsubaraQuadrature< NT > & DiFfRG::internal::MatsubaraStorage::get_matsubara_quadrature ( const NT T,
const NT E )
inline

Return the MatsubaraQuadrature object for a given T, E.

◆ get_matsubara_quadrature_d()

MatsubaraQuadrature< double > & DiFfRG::internal::MatsubaraStorage::get_matsubara_quadrature_d ( const double T,
const double E )
private

◆ get_matsubara_quadrature_f()

MatsubaraQuadrature< float > & DiFfRG::internal::MatsubaraStorage::get_matsubara_quadrature_f ( const float T,
const float E )
private

◆ get_max_matsubara_size()

int DiFfRG::internal::MatsubaraStorage::get_max_matsubara_size ( ) const
inline

The node ceiling every rule built here is clamped to.

◆ predicted_size()

template<typename NT = double>
int DiFfRG::internal::MatsubaraStorage::predicted_size ( const NT T,
const NT typical_E ) const
inline

Nodes the Monien rule would want at (T, typical_E) under THIS provider's dials.

Exposed because choosing between a sum and an integral is the caller's decision (see QuadratureIntegrator_fT::refresh_matsubara) but the numbers that price it – the reach multiplier and matsubara_precision_factor – live here.

◆ set_matsubara_precision_factor()

void DiFfRG::internal::MatsubaraStorage::set_matsubara_precision_factor ( const double value)

◆ set_max_matsubara_size()

void DiFfRG::internal::MatsubaraStorage::set_max_matsubara_size ( const int value)

◆ set_min_matsubara_size()

void DiFfRG::internal::MatsubaraStorage::set_min_matsubara_size ( const int value)

◆ set_report_port()

void DiFfRG::internal::MatsubaraStorage::set_report_port ( ReportPort port)
inline

◆ set_vacuum_quad_size()

void DiFfRG::internal::MatsubaraStorage::set_vacuum_quad_size ( const int size)

◆ set_verbosity()

void DiFfRG::internal::MatsubaraStorage::set_verbosity ( int v)

Member Data Documentation

◆ exact_sums_d

ExactStorageType<double> DiFfRG::internal::MatsubaraStorage::exact_sums_d
private

◆ exact_sums_f

ExactStorageType<float> DiFfRG::internal::MatsubaraStorage::exact_sums_f
private

◆ intervals_d

IntervalStorageType<double> DiFfRG::internal::MatsubaraStorage::intervals_d
private

◆ intervals_f

IntervalStorageType<float> DiFfRG::internal::MatsubaraStorage::intervals_f
private

◆ log

ReportPort DiFfRG::internal::MatsubaraStorage::log
private

◆ m_mutex

std::mutex DiFfRG::internal::MatsubaraStorage::m_mutex
private

◆ matsubara_precision_factor

double DiFfRG::internal::MatsubaraStorage::matsubara_precision_factor = 1
private

◆ max_matsubara_size

int DiFfRG::internal::MatsubaraStorage::max_matsubara_size = 128
private

◆ min_matsubara_size

int DiFfRG::internal::MatsubaraStorage::min_matsubara_size = 8
private

◆ quadratures_d

StorageType<double> DiFfRG::internal::MatsubaraStorage::quadratures_d
private

◆ quadratures_f

StorageType<float> DiFfRG::internal::MatsubaraStorage::quadratures_f
private

◆ vacuum_quad_size

int DiFfRG::internal::MatsubaraStorage::vacuum_quad_size = 64
private

◆ verbosity

int DiFfRG::internal::MatsubaraStorage::verbosity = 0
private

The documentation for this class was generated from the following file:
  • /home/runner/work/DiFfRG_current/DiFfRG_current/DiFfRG/include/DiFfRG/common/quadrature/quadrature_provider.hh