From 9d4a58dd5daa4f625667bfbf1a678fec6eadd7a4 Mon Sep 17 00:00:00 2001 From: "Documenter.jl" Date: Thu, 29 Aug 2024 10:35:36 +0000 Subject: [PATCH] build based on fce248b --- .documenter-siteinfo.json | 2 +- about/index.html | 2 +- api/index.html | 50 ++++++++++++------------ assets/documenter.js | 53 ++++++++++++++------------ example/index.html | 2 +- index.html | 2 +- modules/diagrammatics/index.html | 42 ++++++++++---------- modules/exact_atomic_ppgf/index.html | 10 ++--- modules/expansion/index.html | 2 +- modules/inchworm/index.html | 8 ++-- modules/mpi/index.html | 10 ++--- modules/ppgf/index.html | 32 ++++++++-------- modules/qmc_integrate/index.html | 50 ++++++++++++------------ modules/randomization/index.html | 4 +- modules/scrambled_sobol/index.html | 26 ++++++------- modules/sector_block_matrix/index.html | 20 +++++----- modules/spline_gf/index.html | 28 +++++++------- modules/topology_eval/index.html | 14 +++---- modules/utility/index.html | 24 ++++++------ search_index.js | 2 +- 20 files changed, 194 insertions(+), 189 deletions(-) diff --git a/.documenter-siteinfo.json b/.documenter-siteinfo.json index 1ebceab..97871b1 100644 --- a/.documenter-siteinfo.json +++ b/.documenter-siteinfo.json @@ -1 +1 @@ -{"documenter":{"julia_version":"1.10.4","generation_timestamp":"2024-07-24T13:47:03","documenter_version":"1.5.0"}} \ No newline at end of file +{"documenter":{"julia_version":"1.10.5","generation_timestamp":"2024-08-29T10:35:32","documenter_version":"1.6.0"}} \ No newline at end of file diff --git a/about/index.html b/about/index.html index 21a40a1..32b5499 100644 --- a/about/index.html +++ b/about/index.html @@ -1,2 +1,2 @@ -About · QInchworm.jl

About QInchworm.jl

QInchworm.jl is developed by Igor Krivenko, Hugo U. R. Strand and Joseph Kleinhenz and is distributed under the terms of the GNU General Public License version 3 or later.

We acknowledge funding from the European Research Council (ERC) under the European Union’s Horizon 2020 research and innovation programme (Grant agreement No. 854843-FASTCORR).

Large scale testing and benchmarking were enabled by resources from the National Academic Infrastructure for Supercomputing in Sweden (NAISS) and the Swedish National Infrastructure for Computing (SNIC) through the projects SNIC 2022/1-18, SNIC 2022/6-113, SNIC 2022/13-9, SNIC 2022/21-15, NAISS 2023/1-44, and NAISS 2023/6-129 at PDC, NSC and CSC partially funded by the Swedish Research Council through grant agreements no. 2022-06725 and no. 2018-05973.

+About · QInchworm.jl

About QInchworm.jl

QInchworm.jl is developed by Igor Krivenko, Hugo U. R. Strand and Joseph Kleinhenz and is distributed under the terms of the GNU General Public License version 3 or later.

We acknowledge funding from the European Research Council (ERC) under the European Union’s Horizon 2020 research and innovation programme (Grant agreement No. 854843-FASTCORR).

Large scale testing and benchmarking were enabled by resources from the National Academic Infrastructure for Supercomputing in Sweden (NAISS) and the Swedish National Infrastructure for Computing (SNIC) through the projects SNIC 2022/1-18, SNIC 2022/6-113, SNIC 2022/13-9, SNIC 2022/21-15, NAISS 2023/1-44, and NAISS 2023/6-129 at PDC, NSC and CSC partially funded by the Swedish Research Council through grant agreements no. 2022-06725 and no. 2018-05973.

diff --git a/api/index.html b/api/index.html index 8a1a5b5..f6c6034 100644 --- a/api/index.html +++ b/api/index.html @@ -1,12 +1,12 @@ -Public API · QInchworm.jl

Public API

QInchwormModule

A quasi Monte Carlo inchworm impurity solver for multi-orbital fermionic models.

source

QInchworm.expansion

QInchworm.expansion.ExpansionType
struct Expansion{ScalarGF<:Keldysh.AbstractTimeGF{ComplexF64, true}, PPGF_P0<:Union{Vector{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}}, Vector{Keldysh.ImaginaryTimeGF{ComplexF64, false}}, Vector{QInchworm.exact_atomic_ppgf.ExactAtomicPPGF}, Vector{QInchworm.spline_gf.IncSplineImaginaryTimeGF{ComplexF64, false}}, Vector{QInchworm.spline_gf.SplineInterpolatedGF{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}, ComplexF64, false}}, Vector{QInchworm.spline_gf.SplineInterpolatedGF{Keldysh.ImaginaryTimeGF{ComplexF64, false}, ComplexF64, false}}}, PPGF_P<:Union{Vector{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}}, Vector{Keldysh.ImaginaryTimeGF{ComplexF64, false}}, Vector{QInchworm.exact_atomic_ppgf.ExactAtomicPPGF}, Vector{QInchworm.spline_gf.IncSplineImaginaryTimeGF{ComplexF64, false}}, Vector{QInchworm.spline_gf.SplineInterpolatedGF{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}, ComplexF64, false}}, Vector{QInchworm.spline_gf.SplineInterpolatedGF{Keldysh.ImaginaryTimeGF{ComplexF64, false}, ComplexF64, false}}}}

The Expansion structure contains the components needed to define a strong coupling pseudo-particle expansion problem.

Fields

  • ed: Exact diagonalization solver for the local degrees of freedom

  • P0: Non-interacting propagator (pseudo-particle Green's function)

  • P: Interacting propagator (pseudo-particle Green's function)

  • pairs: List of pseudo-particle interactions

  • determinants: List of hybridization function determinants (not implemented yet)

  • corr_operators: List of operator pairs used in accumulation of two-point correlation functions

  • identity_mat: Block matrix representation of the identity operator

  • pair_operator_mat: Block matrix representation of paired operators (operator_i, operator_f)

  • corr_operators_mat: Block matrix representation of corr_operators

  • subspace_attachable_pairs: Given a subspace index s_i, lists indices of all interaction pairs with operator_i acting non-trivially on that subspace.

source
QInchworm.expansion.ExpansionMethod
Expansion(
+Public API · QInchworm.jl

Public API

QInchwormModule

A quasi Monte Carlo inchworm impurity solver for multi-orbital fermionic models.

source

QInchworm.expansion

QInchworm.expansion.ExpansionType
struct Expansion{ScalarGF<:Keldysh.AbstractTimeGF{ComplexF64, true}, PPGF_P0<:Union{Vector{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}}, Vector{Keldysh.ImaginaryTimeGF{ComplexF64, false}}, Vector{QInchworm.exact_atomic_ppgf.ExactAtomicPPGF}, Vector{QInchworm.spline_gf.IncSplineImaginaryTimeGF{ComplexF64, false}}, Vector{QInchworm.spline_gf.SplineInterpolatedGF{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}, ComplexF64, false}}, Vector{QInchworm.spline_gf.SplineInterpolatedGF{Keldysh.ImaginaryTimeGF{ComplexF64, false}, ComplexF64, false}}}, PPGF_P<:Union{Vector{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}}, Vector{Keldysh.ImaginaryTimeGF{ComplexF64, false}}, Vector{QInchworm.exact_atomic_ppgf.ExactAtomicPPGF}, Vector{QInchworm.spline_gf.IncSplineImaginaryTimeGF{ComplexF64, false}}, Vector{QInchworm.spline_gf.SplineInterpolatedGF{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}, ComplexF64, false}}, Vector{QInchworm.spline_gf.SplineInterpolatedGF{Keldysh.ImaginaryTimeGF{ComplexF64, false}, ComplexF64, false}}}}

The Expansion structure contains the components needed to define a strong coupling pseudo-particle expansion problem.

Fields

  • ed: Exact diagonalization solver for the local degrees of freedom

  • P0: Non-interacting propagator (pseudo-particle Green's function)

  • P: Interacting propagator (pseudo-particle Green's function)

  • pairs: List of pseudo-particle interactions

  • determinants: List of hybridization function determinants (not implemented yet)

  • corr_operators: List of operator pairs used in accumulation of two-point correlation functions

  • identity_mat: Block matrix representation of the identity operator

  • pair_operator_mat: Block matrix representation of paired operators (operator_i, operator_f)

  • corr_operators_mat: Block matrix representation of corr_operators

  • subspace_attachable_pairs: Given a subspace index s_i, lists indices of all interaction pairs with operator_i acting non-trivially on that subspace.

source
QInchworm.expansion.ExpansionMethod
Expansion(
     ed::KeldyshED.EDCore,
     grid::Keldysh.AbstractTimeGrid,
     interaction_pairs::Array{QInchworm.expansion.InteractionPair{ScalarGF}, 1};
     corr_operators,
     interpolate_ppgf
 ) -> QInchworm.expansion.Expansion
-

Parameters

  • ed: Exact diagonalization solution of the local problem.
  • grid: Contour time grid to define the local propagators on.
  • interaction_pairs: The list of pair interactions to expand in.
  • corr_operators: The list of operator pairs used in accumulation of two-point correlation functions.
  • interpolate_ppgf: Use a quadratic spline interpolation to represent and evaluate the local propagators. Currently works only with the imaginary time propagators.
source
QInchworm.expansion.ExpansionMethod
Expansion(
+

Parameters

  • ed: Exact diagonalization solution of the local problem.
  • grid: Contour time grid to define the local propagators on.
  • interaction_pairs: The list of pair interactions to expand in.
  • corr_operators: The list of operator pairs used in accumulation of two-point correlation functions.
  • interpolate_ppgf: Use a quadratic spline interpolation to represent and evaluate the local propagators. Currently works only with the imaginary time propagators.
source
QInchworm.expansion.ExpansionMethod
Expansion(
     hamiltonian::KeldyshED.Operators.OperatorExpr,
     soi::KeldyshED.Hilbert.SetOfIndices,
     grid::Keldysh.ImaginaryTimeGrid;
@@ -15,11 +15,11 @@
     corr_operators,
     interpolate_ppgf
 )
-

A higher-level constructor of Expansion that solves the local problem defined by a Hamiltonian and internally generates a list of pseudo-particle pair interactions from hybridization and $nn$-interaction functions.

Parameters

  • hamiltonian: Hamiltonian of the local problem.
  • soi: An ordered set of indices carried by creation/annihilation operators of the local problem.
  • grid: Imaginary time grid to define the local propagators on.
  • hybridization: A matrix-valued hybridization function $\Delta_{ij}(\tau)$. A correspondence between the matrix elements $(i, j)$ and operators $c^\dagger_i, c_j$ is established by soi.
  • nn_interaction: A matrix-valued $nn$-interaction function $U_{ij}(\tau)$. A correspondence between the matrix elements $(i, j)$ and operators $n_i, n_j$ is established by soi.
  • corr_operators: The list of operator pairs used in accumulation of two-point correlation functions.
  • interpolate_ppgf: Use a quadratic spline interpolation to represent and evaluate the local propagators.
source
QInchworm.expansion.InteractionPairType
struct InteractionPair{ScalarGF<:Keldysh.AbstractTimeGF{ComplexF64, true}}

Data type for pseudo-particle interactions containing two operators and one scalar propagator.

Indexed access to the operators stored in a pair::InteractionPair is supported: pair[1] and pair[2] are equivalent to pair.operator_i and pair.operator_f respectively.

Fields

  • operator_f::KeldyshED.Operators.RealOperatorExpr: Final time operator

  • operator_i::KeldyshED.Operators.RealOperatorExpr: Initial time operator

  • propagator::Keldysh.AbstractTimeGF{ComplexF64, true}: Scalar propagator

source
QInchworm.expansion.add_corr_operators!Function
add_corr_operators!(
+

A higher-level constructor of Expansion that solves the local problem defined by a Hamiltonian and internally generates a list of pseudo-particle pair interactions from hybridization and $nn$-interaction functions.

Parameters

  • hamiltonian: Hamiltonian of the local problem.
  • soi: An ordered set of indices carried by creation/annihilation operators of the local problem.
  • grid: Imaginary time grid to define the local propagators on.
  • hybridization: A matrix-valued hybridization function $\Delta_{ij}(\tau)$. A correspondence between the matrix elements $(i, j)$ and operators $c^\dagger_i, c_j$ is established by soi.
  • nn_interaction: A matrix-valued $nn$-interaction function $U_{ij}(\tau)$. A correspondence between the matrix elements $(i, j)$ and operators $n_i, n_j$ is established by soi.
  • corr_operators: The list of operator pairs used in accumulation of two-point correlation functions.
  • interpolate_ppgf: Use a quadratic spline interpolation to represent and evaluate the local propagators.
source
QInchworm.expansion.InteractionPairType
struct InteractionPair{ScalarGF<:Keldysh.AbstractTimeGF{ComplexF64, true}}

Data type for pseudo-particle interactions containing two operators and one scalar propagator.

Indexed access to the operators stored in a pair::InteractionPair is supported: pair[1] and pair[2] are equivalent to pair.operator_i and pair.operator_f respectively.

Fields

  • operator_f::KeldyshED.Operators.RealOperatorExpr: Final time operator

  • operator_i::KeldyshED.Operators.RealOperatorExpr: Initial time operator

  • propagator::Keldysh.AbstractTimeGF{ComplexF64, true}: Scalar propagator

source
QInchworm.expansion.add_corr_operators!Function
add_corr_operators!(
     expansion::QInchworm.expansion.Expansion,
     ops::Tuple{KeldyshED.Operators.RealOperatorExpr, KeldyshED.Operators.RealOperatorExpr}
 )
-

Add a pair of operators $(A, B)$ used to measure the two-point correlator $\langle A(t_1) B(t_2)\rangle$ to expansion.

Parameters

  • expansion: Pseudo-particle expansion.
  • ops: The pair of operators $(A, B)$.
source

QInchworm.inchworm

QInchworm.inchworm.inchworm!Function
inchworm!(
+

Add a pair of operators $(A, B)$ used to measure the two-point correlator $\langle A(t_1) B(t_2)\rangle$ to expansion.

Parameters

  • expansion: Pseudo-particle expansion.
  • ops: The pair of operators $(A, B)$.
source

QInchworm.inchworm

QInchworm.inchworm.inchworm!Function
inchworm!(
     expansion::QInchworm.expansion.Expansion,
     grid::Keldysh.ImaginaryTimeGrid,
     orders,
@@ -29,7 +29,7 @@
     rand_params,
     seq_type
 ) -> Tuple{Dict, Dict}
-

Perform a complete qMC inchworm calculation of the bold propagators on the imaginary time segment. Results of the calculation are written into expansion.P.

Parameters

  • expansion: Strong coupling expansion problem.
  • grid: Imaginary time grid of the bold propagators.
  • orders: List of expansion orders to be accounted for during a regular inchworm step.
  • orders_bare: List of expansion orders to be accounted for during the initial inchworm step.
  • N_samples: Number of samples to be used in qMC integration. Must be a power of 2.
  • n_pts_after_max: Maximum number of points in the after-$\tau_w$ region to be taken into account. By default, diagrams with all valid numbers of the after-$\tau_w$ points are considered.
  • rand_params: Parameters of the randomized qMC integration.
  • seq_type: Type of the (quasi-)random sequence to be used for integration.

Returns

  • Order-resolved contributions to the bold propagator as a dictionary Dict{Int, PPGF}.
  • Estimated standard deviations of the order-resolved contributions as a dictionary Dict{Int, PPGF}.
source
QInchworm.inchworm.diff_inchworm!Function
diff_inchworm!(
+

Perform a complete qMC inchworm calculation of the bold propagators on the imaginary time segment. Results of the calculation are written into expansion.P.

Parameters

  • expansion: Strong coupling expansion problem.
  • grid: Imaginary time grid of the bold propagators.
  • orders: List of expansion orders to be accounted for during a regular inchworm step.
  • orders_bare: List of expansion orders to be accounted for during the initial inchworm step.
  • N_samples: Number of samples to be used in qMC integration. Must be a power of 2.
  • n_pts_after_max: Maximum number of points in the after-$\tau_w$ region to be taken into account. By default, diagrams with all valid numbers of the after-$\tau_w$ points are considered.
  • rand_params: Parameters of the randomized qMC integration.
  • seq_type: Type of the (quasi-)random sequence to be used for integration.

Returns

  • Order-resolved contributions to the bold propagator as a dictionary Dict{Int, PPGF}.
  • Estimated standard deviations of the order-resolved contributions as a dictionary Dict{Int, PPGF}.
source
QInchworm.inchworm.diff_inchworm!Function
diff_inchworm!(
     expansion::QInchworm.expansion.Expansion,
     grid::Keldysh.ImaginaryTimeGrid,
     orders,
@@ -39,7 +39,7 @@
 ) -> Tuple{Dict, Dict}
 

Perform a complete qMC inchworm calculation of the bold propagators on the imaginary time segment using the differential formulation of the method described in

"Inchworm Monte Carlo Method for Open Quantum Systems"
 Z. Cai, J. Lu and S. Yang
-Comm. Pure Appl. Math., 73: 2430-2472 (2020)

Results of the calculation are written into expansion.P.

Parameters

  • expansion: Strong coupling expansion problem.
  • grid: Imaginary time grid of the bold propagators.
  • orders: List of expansion orders to be accounted for.
  • N_samples: Number of samples to be used in qMC integration. Must be a power of 2.
  • rand_params: Parameters of the randomized qMC integration.
  • seq_type: Type of the (quasi-)random sequence to be used for integration.

Returns

  • Order-resolved contributions to the pseudo-particle self-energy as a dictionary Dict{Int, PPGF}.
  • Estimated standard deviations of the order-resolved contributions as a dictionary Dict{Int, PPGF}.
source
QInchworm.inchworm.correlator_2pFunction
correlator_2p(
+Comm. Pure Appl. Math., 73: 2430-2472 (2020)

Results of the calculation are written into expansion.P.

Parameters

  • expansion: Strong coupling expansion problem.
  • grid: Imaginary time grid of the bold propagators.
  • orders: List of expansion orders to be accounted for.
  • N_samples: Number of samples to be used in qMC integration. Must be a power of 2.
  • rand_params: Parameters of the randomized qMC integration.
  • seq_type: Type of the (quasi-)random sequence to be used for integration.

Returns

  • Order-resolved contributions to the pseudo-particle self-energy as a dictionary Dict{Int, PPGF}.
  • Estimated standard deviations of the order-resolved contributions as a dictionary Dict{Int, PPGF}.
source
QInchworm.inchworm.correlator_2pFunction
correlator_2p(
     expansion::QInchworm.expansion.Expansion,
     grid::Keldysh.ImaginaryTimeGrid,
     A_B_pair_idx::Int64,
@@ -48,7 +48,7 @@
     seq_type,
     tmr
 ) -> Tuple{ComplexF64, ComplexF64}
-

Calculate value of a two-point correlator $\langle A(\tau) B(0)\rangle$ for one value of the imaginary time argument $\tau$. The pair of operators $(A, B)$ used in the calculation is taken from expansion.corr_operators[A_B_pair_idx].

Parameters

  • expansion: Strong coupling expansion problem. expansion.P must contain precomputed bold propagators.
  • grid: Imaginary time grid of the correlator to be computed.
  • A_B_pair_idx: Index of the $(A, B)$ pair within expansion.corr_operators.
  • τ: The imaginary time argument $\tau$.
  • top_data: Accumulation input data.
  • seq_type: Type of the (quasi-)random sequence to be used for integration.
  • tmr: A TimerOutput object used for profiling.

Returns

  • Accumulated value of the two-point correlator.
  • Estimated standard deviations of the computed correlator.
source
correlator_2p(
+

Calculate value of a two-point correlator $\langle A(\tau) B(0)\rangle$ for one value of the imaginary time argument $\tau$. The pair of operators $(A, B)$ used in the calculation is taken from expansion.corr_operators[A_B_pair_idx].

Parameters

  • expansion: Strong coupling expansion problem. expansion.P must contain precomputed bold propagators.
  • grid: Imaginary time grid of the correlator to be computed.
  • A_B_pair_idx: Index of the $(A, B)$ pair within expansion.corr_operators.
  • τ: The imaginary time argument $\tau$.
  • top_data: Accumulation input data.
  • seq_type: Type of the (quasi-)random sequence to be used for integration.
  • tmr: A TimerOutput object used for profiling.

Returns

  • Accumulated value of the two-point correlator.
  • Estimated standard deviations of the computed correlator.
source
correlator_2p(
     expansion::QInchworm.expansion.Expansion,
     grid::Keldysh.ImaginaryTimeGrid,
     orders,
@@ -57,7 +57,7 @@
     rand_params,
     seq_type
 ) -> Tuple{Any, Any}
-

Calculate a two-point correlator $\langle A(\tau) B(0)\rangle$ on the imaginary time segment. Accumulation is performed for each pair of operators $(A, B)$ in expansion.corr_operators. Only the operators that are a single monomial in $c/c^\dagger$ are supported.

This method is selected by the flag argument of type RequestStdDev and returns randomized qMC estimates of both mean and standard deviation of the correlators.

Parameters

  • expansion: Strong coupling expansion problem. expansion.P must contain precomputed bold propagators.
  • grid: Imaginary time grid of the correlator to be computed.
  • orders: List of expansion orders to be accounted for.
  • N_samples: Number of samples to be used in qMC integration. Must be a power of 2.
  • rand_params: Parameters of the randomized qMC integration.
  • seq_type: Type of the (quasi-)random sequence to be used for integration.

Returns

  • A list of scalar-valued GF objects containing the computed correlators, one element per a pair in expansion.corr_operators.
  • A list of scalar-valued GF objects containing estimated standard deviations of the computed correlators, one element per a pair in expansion.corr_operators.
source
correlator_2p(
+

Calculate a two-point correlator $\langle A(\tau) B(0)\rangle$ on the imaginary time segment. Accumulation is performed for each pair of operators $(A, B)$ in expansion.corr_operators. Only the operators that are a single monomial in $c/c^\dagger$ are supported.

This method is selected by the flag argument of type RequestStdDev and returns randomized qMC estimates of both mean and standard deviation of the correlators.

Parameters

  • expansion: Strong coupling expansion problem. expansion.P must contain precomputed bold propagators.
  • grid: Imaginary time grid of the correlator to be computed.
  • orders: List of expansion orders to be accounted for.
  • N_samples: Number of samples to be used in qMC integration. Must be a power of 2.
  • rand_params: Parameters of the randomized qMC integration.
  • seq_type: Type of the (quasi-)random sequence to be used for integration.

Returns

  • A list of scalar-valued GF objects containing the computed correlators, one element per a pair in expansion.corr_operators.
  • A list of scalar-valued GF objects containing estimated standard deviations of the computed correlators, one element per a pair in expansion.corr_operators.
source
correlator_2p(
     expansion::QInchworm.expansion.Expansion,
     grid::Keldysh.ImaginaryTimeGrid,
     orders,
@@ -65,57 +65,57 @@
     rand_params,
     seq_type
 ) -> Any
-

Calculate a two-point correlator $\langle A(\tau) B(0)\rangle$ on the imaginary time segment. Accumulation is performed for each pair of operators $(A, B)$ in expansion.corr_operators. Only the operators that are a single monomial in $c/c^\dagger$ are supported.

Parameters

  • expansion: Strong coupling expansion problem. expansion.P must contain precomputed bold propagators.
  • grid: Imaginary time grid of the correlator to be computed.
  • orders: List of expansion orders to be accounted for.
  • N_samples: Number of samples to be used in qMC integration. Must be a power of 2.
  • rand_params: Parameters of the randomized qMC integration.
  • seq_type: Type of the (quasi-)random sequence to be used for integration.

Returns

A list of scalar-valued GF objects containing the computed correlators, one element per a pair in expansion.corr_operators.

source

QInchworm.randomization

QInchworm.randomization.RandomizationParamsType
struct RandomizationParams

Parameters of the randomized qMC integration.

Fields

  • rng::Union{Nothing, Random.AbstractRNG}: Random Number Generator used to scramble Sobol sequences or nothing to disable scrambling
  • N_seqs::Int64: Maximal number of scrambled Sobol sequences to be used

  • target_std::Float64: Target standard deviation of the accumulated quantity (∞-norm for matrices)

source

QInchworm.ppgf

QInchworm.ppgfModule

Pseudo-particle Green's functions (propagators) of finite fermionic systems and related tools.

For a system defined by a time-independent Hamiltonian $\hat H$, the pseudo-particle Green's function (PPGF) is

\[P(z, z') = \left\{ +

Calculate a two-point correlator $\langle A(\tau) B(0)\rangle$ on the imaginary time segment. Accumulation is performed for each pair of operators $(A, B)$ in expansion.corr_operators. Only the operators that are a single monomial in $c/c^\dagger$ are supported.

Parameters

  • expansion: Strong coupling expansion problem. expansion.P must contain precomputed bold propagators.
  • grid: Imaginary time grid of the correlator to be computed.
  • orders: List of expansion orders to be accounted for.
  • N_samples: Number of samples to be used in qMC integration. Must be a power of 2.
  • rand_params: Parameters of the randomized qMC integration.
  • seq_type: Type of the (quasi-)random sequence to be used for integration.

Returns

A list of scalar-valued GF objects containing the computed correlators, one element per a pair in expansion.corr_operators.

source

QInchworm.randomization

QInchworm.randomization.RandomizationParamsType
struct RandomizationParams

Parameters of the randomized qMC integration.

Fields

  • rng::Union{Nothing, Random.AbstractRNG}: Random Number Generator used to scramble Sobol sequences or nothing to disable scrambling
  • N_seqs::Int64: Maximal number of scrambled Sobol sequences to be used

  • target_std::Float64: Target standard deviation of the accumulated quantity (∞-norm for matrices)

source

QInchworm.ppgf

QInchworm.ppgfModule

Pseudo-particle Green's functions (propagators) of finite fermionic systems and related tools.

For a system defined by a time-independent Hamiltonian $\hat H$, the pseudo-particle Green's function (PPGF) is

\[P(z, z') = \left\{ \begin{array}{ll} -i (-1)^{\hat N} e^{-i \hat H(z-z')},& z \succ -i\beta \cap -i\beta \succeq z',\\ -i e^{-i \hat H(z-z')},& \text{otherwise}. \end{array} -\right.\]

In particular, on the imaginary time segment alone one has $P(\tau) = -i e^{-\hat H \tau}$.

This operator has a block-diagonal structure determined by the symmetry sectors of $\hat H$, and is stored as a vector of GF containers corresponding to the individual diagonal blocks (FullTimePPGF, ImaginaryTimePPGF).

Exports

source
QInchworm.ppgf.atomic_ppgfFunction
atomic_ppgf(
     β::Float64,
     ed::KeldyshED.EDCore
 ) -> Vector{QInchworm.exact_atomic_ppgf.ExactAtomicPPGF}
-

Construct the exact atomic pseudo-particle Green's function.

Parameters

  • β: Inverse temperature.
  • ed: Exact diagonalization structure describing the atomic problem.
source
atomic_ppgf(
+

Construct the exact atomic pseudo-particle Green's function.

Parameters

  • β: Inverse temperature.
  • ed: Exact diagonalization structure describing the atomic problem.
source
atomic_ppgf(
     grid::Keldysh.FullTimeGrid,
     ed::KeldyshED.EDCore
 ) -> Vector{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}}
-

Compute atomic pseudo-particle Green's function on a full contour time grid for a time-independent exact diagonalization problem ed.

As the resulting PPGF $P(z, z')$ is defined up to a multiplier $e^{-i\lambda (z-z')}$, we choose the energy shift $\lambda$ to fulfil the normalization property $\mathrm{Tr}[i P(-i\beta, 0)] = 1$.

source
atomic_ppgf(
+

Compute atomic pseudo-particle Green's function on a full contour time grid for a time-independent exact diagonalization problem ed.

As the resulting PPGF $P(z, z')$ is defined up to a multiplier $e^{-i\lambda (z-z')}$, we choose the energy shift $\lambda$ to fulfil the normalization property $\mathrm{Tr}[i P(-i\beta, 0)] = 1$.

source
atomic_ppgf(
     grid::Keldysh.ImaginaryTimeGrid,
     ed::KeldyshED.EDCore
 ) -> Vector{Keldysh.ImaginaryTimeGF{ComplexF64, false}}
-

Compute atomic pseudo-particle Green's function on an imaginary time grid for a time-independent exact diagonalization problem ed.

As the resulting PPGF $P(\tau)$ is defined up to a multiplier $e^{-\lambda\tau}$, we choose the energy shift $\lambda$ to fulfil the normalization property $\mathrm{Tr}[i P(\beta)] = 1$.

source
QInchworm.ppgf.partition_functionFunction
partition_function(
+

Compute atomic pseudo-particle Green's function on an imaginary time grid for a time-independent exact diagonalization problem ed.

As the resulting PPGF $P(\tau)$ is defined up to a multiplier $e^{-\lambda\tau}$, we choose the energy shift $\lambda$ to fulfil the normalization property $\mathrm{Tr}[i P(\beta)] = 1$.

source
QInchworm.ppgf.partition_functionFunction
partition_function(
     P_0::Vector{QInchworm.exact_atomic_ppgf.ExactAtomicPPGF}
 ) -> ComplexF64
-

Extract the partition function $Z = \mathrm{Tr}[i P_0(-i\beta, 0)]$ from a un-normalized pseudo-particle Green's function P_0.

source
partition_function(
+

Extract the partition function $Z = \mathrm{Tr}[i P_0(-i\beta, 0)]$ from a un-normalized pseudo-particle Green's function P_0.

source
partition_function(
     P::Vector{<:Keldysh.AbstractTimeGF}
 ) -> ComplexF64
-

Extract the partition function $Z = \mathrm{Tr}[i P(-i\beta, 0)]$ from a un-normalized pseudo-particle Green's function P.

source
QInchworm.ppgf.density_matrixFunction
density_matrix(
+

Extract the partition function $Z = \mathrm{Tr}[i P(-i\beta, 0)]$ from a un-normalized pseudo-particle Green's function P.

source
QInchworm.ppgf.density_matrixFunction
density_matrix(
     P::Vector{QInchworm.exact_atomic_ppgf.ExactAtomicPPGF}
 ) -> Vector{Matrix{ComplexF64}}
-

Extract the equilibrium density matrix $\rho = i P(-i\beta, 0)$ from a normalized pseudo-particle Green's function P. The density matrix is block-diagonal and is returned as a vector of blocks.

source
density_matrix(
+

Extract the equilibrium density matrix $\rho = i P(-i\beta, 0)$ from a normalized pseudo-particle Green's function P. The density matrix is block-diagonal and is returned as a vector of blocks.

source
density_matrix(
     P::Vector{<:Keldysh.AbstractTimeGF}
 ) -> Vector{Matrix{ComplexF64}}
-

Extract the equilibrium density matrix $\rho = i P(-i\beta, 0)$ from a normalized pseudo-particle Green's function P. The density matrix is block-diagonal and is returned as a vector of blocks.

source
QInchworm.ppgf.normalize!Function
normalize!(
+

Extract the equilibrium density matrix $\rho = i P(-i\beta, 0)$ from a normalized pseudo-particle Green's function P. The density matrix is block-diagonal and is returned as a vector of blocks.

source
QInchworm.ppgf.normalize!Function
normalize!(
     P::Vector{<:Keldysh.AbstractTimeGF},
     β::Float64
 ) -> ComplexF64
-

Normalize a pseudo-particle Green's function P by multiplying it by $e^{-i\lambda (z-z')}$ with $\lambda$ chosen such that $\mathrm{Tr}[i P(-i\beta, 0)] = 1$.

Returns

The energy shift $\lambda$.

source
normalize!(
+

Normalize a pseudo-particle Green's function P by multiplying it by $e^{-i\lambda (z-z')}$ with $\lambda$ chosen such that $\mathrm{Tr}[i P(-i\beta, 0)] = 1$.

Returns

The energy shift $\lambda$.

source
normalize!(
     P::Vector{<:Keldysh.AbstractTimeGF},
     τ::Keldysh.TimeGridPoint
 )
-

Normalize a pseudo-particle Green's function P by multiplying it by $e^{-i\lambda (z-z')}$ with $\lambda$ chosen such that $\mathrm{max}[i P(-i\tau, 0)] = 1$.

source
normalize!(P_s::Keldysh.AbstractTimeGF, λ)
-

Multiply a given diagonal block of a pseudo-particle Green's function P_s by $e^{-i\lambda (z-z')}$.

source
normalize!(
+

Normalize a pseudo-particle Green's function P by multiplying it by $e^{-i\lambda (z-z')}$ with $\lambda$ chosen such that $\mathrm{max}[i P(-i\tau, 0)] = 1$.

source
normalize!(P_s::Keldysh.AbstractTimeGF, λ)
+

Multiply a given diagonal block of a pseudo-particle Green's function P_s by $e^{-i\lambda (z-z')}$.

source
normalize!(
     P_s::QInchworm.spline_gf.IncSplineImaginaryTimeGF{ComplexF64, false},
     λ
 )
-

Multiply a given diagonal block of a pseudo-particle Green's function P_s by $e^{-i\lambda (z-z')}$. This method is defined for the spline-interpolated imaginary-time propagators.

source

QInchworm.spline_gf

QInchworm.spline_gf.SplineInterpolatedGFType
struct SplineInterpolatedGF{GFType, T, scalar} <: Keldysh.AbstractTimeGF{T, scalar}

Wrapper around a Green's function object that allows for fast cubic spline interpolation on the time grid.

The wrapper supports square bracket access to the wrapped object, direct access to the grid property, eltype(), Keldysh.norbitals() and Keldysh.TimeDomain(). Evaluation at an arbitrary contour time point (via operator ()) is carried out by a stored set of pre-computed B-spline interpolants.

Fields

  • GF::Any: Wrapped Green's function

  • interpolants::Any: B-spline interpolants, one object per matrix element of G

source
QInchworm.spline_gf.SplineInterpolatedGFMethod
SplineInterpolatedGF(
+

Multiply a given diagonal block of a pseudo-particle Green's function P_s by $e^{-i\lambda (z-z')}$. This method is defined for the spline-interpolated imaginary-time propagators.

source

QInchworm.spline_gf

QInchworm.spline_gf.SplineInterpolatedGFType
struct SplineInterpolatedGF{GFType, T, scalar} <: Keldysh.AbstractTimeGF{T, scalar}

Wrapper around a Green's function object that allows for fast cubic spline interpolation on the time grid.

The wrapper supports square bracket access to the wrapped object, direct access to the grid property, eltype(), Keldysh.norbitals() and Keldysh.TimeDomain(). Evaluation at an arbitrary contour time point (via operator ()) is carried out by a stored set of pre-computed B-spline interpolants.

Fields

  • GF::Any: Wrapped Green's function

  • interpolants::Any: B-spline interpolants, one object per matrix element of G

source
QInchworm.spline_gf.SplineInterpolatedGFMethod
SplineInterpolatedGF(
     GF::Keldysh.AbstractTimeGF{T<:Number, scalar};
     τ_max
 ) -> QInchworm.spline_gf.SplineInterpolatedGF{_A, T} where {_A, T<:Number}
-

Make a SplineInterpolatedGF wrapper around GF and compute interpolants of its data from the start of the grid up to τ_max. By default, the entire data array is used.

source

QInchworm.keldysh_dlr

QInchworm.keldysh_dlr.DLRImaginaryTimeGridType
struct DLRImaginaryTimeGrid <: Keldysh.AbstractTimeGrid

Wrapper around Lehmann.jl describing a Discrete Lehmann Representation imaginary time grid conforming to the interface of Keldysh.jl TimeGrids.

Fields

  • contour::Keldysh.ImaginaryContour

  • points::Vector{Keldysh.TimeGridPoint}

  • branch_bounds::Tuple{Pair{Keldysh.TimeGridPoint, Keldysh.TimeGridPoint}}

  • ntau::Int64

  • dlr::Lehmann.DLRGrid

source
QInchworm.keldysh_dlr.DLRImaginaryTimeGFType
struct DLRImaginaryTimeGF{T, scalar} <: Keldysh.AbstractTimeGF{T, scalar}

Wrapper around Lehmann.jl describing a Discrete Lehmann Representation imaginary time Green's function conforming to the interface of Keldysh.jl AbstractTimeGF.

Fields

  • grid::QInchworm.keldysh_dlr.DLRImaginaryTimeGrid

  • mat::Keldysh.PeriodicStorage

  • ξ::Keldysh.GFSignEnum

source

QInchworm.utility

QInchworm.keldysh_dlr

QInchworm.keldysh_dlr.DLRImaginaryTimeGridType
struct DLRImaginaryTimeGrid <: Keldysh.AbstractTimeGrid

Wrapper around Lehmann.jl describing a Discrete Lehmann Representation imaginary time grid conforming to the interface of Keldysh.jl TimeGrids.

Fields

  • contour::Keldysh.ImaginaryContour

  • points::Vector{Keldysh.TimeGridPoint}

  • branch_bounds::Tuple{Pair{Keldysh.TimeGridPoint, Keldysh.TimeGridPoint}}

  • ntau::Int64

  • dlr::Lehmann.DLRGrid

source
QInchworm.keldysh_dlr.DLRImaginaryTimeGFType
struct DLRImaginaryTimeGF{T, scalar} <: Keldysh.AbstractTimeGF{T, scalar}

Wrapper around Lehmann.jl describing a Discrete Lehmann Representation imaginary time Green's function conforming to the interface of Keldysh.jl AbstractTimeGF.

Fields

  • grid::QInchworm.keldysh_dlr.DLRImaginaryTimeGrid

  • mat::Keldysh.PeriodicStorage

  • ξ::Keldysh.GFSignEnum

source

QInchworm.utility

QInchworm.utility.ph_conjFunction
ph_conj(
     G_int::QInchworm.spline_gf.SplineInterpolatedGF{GFType<:Keldysh.ImaginaryTimeGF{T<:Number, true}, T<:Number, true}
 )
-

Given a spline-interpolated scalar-valued imaginary time Green's function $g(\tau)$, return its particle-hole conjugate $g(\beta-\tau)$.

source
ph_conj(g::Keldysh.ImaginaryTimeGF{T, true}) -> Any
-

Given a scalar-valued imaginary time Green's function $g(\tau)$, return its particle-hole conjugate $g(\beta-\tau)$.

source
ph_conj(
+

Given a spline-interpolated scalar-valued imaginary time Green's function $g(\tau)$, return its particle-hole conjugate $g(\beta-\tau)$.

source
ph_conj(g::Keldysh.ImaginaryTimeGF{T, true}) -> Any
+

Given a scalar-valued imaginary time Green's function $g(\tau)$, return its particle-hole conjugate $g(\beta-\tau)$.

source
ph_conj(
     g::QInchworm.keldysh_dlr.DLRImaginaryTimeGF{T, true}
 ) -> QInchworm.keldysh_dlr.DLRImaginaryTimeGF{T, true} where T
-

Given a scalar-valued imaginary time Green's function $g(\tau)$, return its particle-hole conjugate $g(\beta-\tau)$.

source
+

Given a scalar-valued imaginary time Green's function $g(\tau)$, return its particle-hole conjugate $g(\beta-\tau)$.

source diff --git a/assets/documenter.js b/assets/documenter.js index b2bdd43..82252a1 100644 --- a/assets/documenter.js +++ b/assets/documenter.js @@ -77,30 +77,35 @@ require(['jquery'], function($) { let timer = 0; var isExpanded = true; -$(document).on("click", ".docstring header", function () { - let articleToggleTitle = "Expand docstring"; - - debounce(() => { - if ($(this).siblings("section").is(":visible")) { - $(this) - .find(".docstring-article-toggle-button") - .removeClass("fa-chevron-down") - .addClass("fa-chevron-right"); - } else { - $(this) - .find(".docstring-article-toggle-button") - .removeClass("fa-chevron-right") - .addClass("fa-chevron-down"); +$(document).on( + "click", + ".docstring .docstring-article-toggle-button", + function () { + let articleToggleTitle = "Expand docstring"; + const parent = $(this).parent(); + + debounce(() => { + if (parent.siblings("section").is(":visible")) { + parent + .find("a.docstring-article-toggle-button") + .removeClass("fa-chevron-down") + .addClass("fa-chevron-right"); + } else { + parent + .find("a.docstring-article-toggle-button") + .removeClass("fa-chevron-right") + .addClass("fa-chevron-down"); - articleToggleTitle = "Collapse docstring"; - } + articleToggleTitle = "Collapse docstring"; + } - $(this) - .find(".docstring-article-toggle-button") - .prop("title", articleToggleTitle); - $(this).siblings("section").slideToggle(); - }); -}); + parent + .children(".docstring-article-toggle-button") + .prop("title", articleToggleTitle); + parent.siblings("section").slideToggle(); + }); + } +); $(document).on("click", ".docs-article-toggle-button", function (event) { let articleToggleTitle = "Expand docstring"; @@ -110,7 +115,7 @@ $(document).on("click", ".docs-article-toggle-button", function (event) { debounce(() => { if (isExpanded) { $(this).removeClass("fa-chevron-up").addClass("fa-chevron-down"); - $(".docstring-article-toggle-button") + $("a.docstring-article-toggle-button") .removeClass("fa-chevron-down") .addClass("fa-chevron-right"); @@ -119,7 +124,7 @@ $(document).on("click", ".docs-article-toggle-button", function (event) { $(".docstring section").slideUp(animationSpeed); } else { $(this).removeClass("fa-chevron-down").addClass("fa-chevron-up"); - $(".docstring-article-toggle-button") + $("a.docstring-article-toggle-button") .removeClass("fa-chevron-right") .addClass("fa-chevron-down"); diff --git a/example/index.html b/example/index.html index dc70ee0..59b75fa 100644 --- a/example/index.html +++ b/example/index.html @@ -122,4 +122,4 @@ plt.legend() plt.tight_layout() plt.savefig("output.svg") - + diff --git a/index.html b/index.html index 8978277..0cc7474 100644 --- a/index.html +++ b/index.html @@ -1,2 +1,2 @@ -Home · QInchworm.jl

QInchworm.jl

The package QInchworm.jl is a Julia implementation of the quasi Monte Carlo variant[1] of the inchworm algorithm[2] for solving impurity models with multiple interacting fermions. Using quasi Monte Carlo, a $1/N$ convergence rate with the number of samples is achievable, which compares favorably to the $1/\sqrt{N}$ convergence of the Monte Carlo methods.

Below, you can find an API reference of QInchworm.jl's modules. Some parts of the API, such as handling of the atomic problem and of the pair interactions/hybridization, depend on container types from Keldysh.jl and exact diagonalization tools of KeldyshED.jl.

There is also an example page showing how to use QInchworm.jl to solve a quantum impurity problem in thermodynamic equilibrium and to compute two-point correlation functions for it.

Public API

Internals

+Home · QInchworm.jl

QInchworm.jl

The package QInchworm.jl is a Julia implementation of the quasi Monte Carlo variant[1] of the inchworm algorithm[2] for solving impurity models with multiple interacting fermions. Using quasi Monte Carlo, a $1/N$ convergence rate with the number of samples is achievable, which compares favorably to the $1/\sqrt{N}$ convergence of the Monte Carlo methods.

Below, you can find an API reference of QInchworm.jl's modules. Some parts of the API, such as handling of the atomic problem and of the pair interactions/hybridization, depend on container types from Keldysh.jl and exact diagonalization tools of KeldyshED.jl.

There is also an example page showing how to use QInchworm.jl to solve a quantum impurity problem in thermodynamic equilibrium and to compute two-point correlation functions for it.

Public API

Internals

diff --git a/modules/diagrammatics/index.html b/modules/diagrammatics/index.html index 81b0f3f..bd377fd 100644 --- a/modules/diagrammatics/index.html +++ b/modules/diagrammatics/index.html @@ -1,62 +1,62 @@ -QInchworm.diagrammatics · QInchworm.jl

QInchworm.diagrammatics

QInchworm.diagrammatics.TopologyType
struct Topology

Datatype for strong coupling diagram topology.

A topology of order $n$ consists of a partition of the tuple $s = \{1,...,2n\}$ into $n$ pairs $\{(\pi(1), \pi(2)), ..., (\pi(2n-1), \pi(2n))\}$ where $\pi$ is a permutation of $s$. Diagrammatically, a topology can be thought of as a set of arcs connecting vertices located at $\{1,...,2n\}$. The parity of the topology is the sign of the permutation $\pi$.

Fields

  • order::Int64: Topology order $n$

  • pairs::Vector{Pair{Int64, Int64}}: List of pairs $\{(\pi(1), \pi(2)), ..., (\pi(2n-1), \pi(2n))\}$

  • parity::Int64: Parity of the permutation $\pi$

source
QInchworm.diagrammatics.TopologyMethod
Topology(
+QInchworm.diagrammatics · QInchworm.jl

QInchworm.diagrammatics

QInchworm.diagrammatics.TopologyType
struct Topology

Datatype for strong coupling diagram topology.

A topology of order $n$ consists of a partition of the tuple $s = \{1,...,2n\}$ into $n$ pairs $\{(\pi(1), \pi(2)), ..., (\pi(2n-1), \pi(2n))\}$ where $\pi$ is a permutation of $s$. Diagrammatically, a topology can be thought of as a set of arcs connecting vertices located at $\{1,...,2n\}$. The parity of the topology is the sign of the permutation $\pi$.

Fields

  • order::Int64: Topology order $n$

  • pairs::Vector{Pair{Int64, Int64}}: List of pairs $\{(\pi(1), \pi(2)), ..., (\pi(2n-1), \pi(2n))\}$

  • parity::Int64: Parity of the permutation $\pi$

source
Base.isvalidMethod
isvalid(t::QInchworm.diagrammatics.Topology) -> Bool
-

Check that topology is properly constructed, i.e. that its list of pairs is derived from a permutation of 1:2order and that the parity of the permutation is correct.

source
Base.isvalidMethod
isvalid(t::QInchworm.diagrammatics.Topology) -> Bool
+

Check that topology is properly constructed, i.e. that its list of pairs is derived from a permutation of 1:2order and that the parity of the permutation is correct.

source
QInchworm.diagrammatics.pair_partitionsFunction
pair_partitions(
     pairs::Vector{Pair{Int64, Int64}},
     unpaired::Vector{Int64}
 ) -> Vector{Vector{Pair{Int64, Int64}}}
-

Given a vector of pairs representing a partial partition of the vertices and a vector of unpaired vertices, return a vector of complete partitions.

source
pair_partitions(
+

Given a vector of pairs representing a partial partition of the vertices and a vector of unpaired vertices, return a vector of complete partitions.

source
pair_partitions(
     vertices::Vector{Int64}
 ) -> Vector{Vector{Pair{Int64, Int64}}}
-

Return all possible partitions of an even number of vertices into pairs.

source
pair_partitions(
+

Return all possible partitions of an even number of vertices into pairs.

source
pair_partitions(
     n::Int64
 ) -> Vector{Vector{Pair{Int64, Int64}}}
-

Return all partitions of $\{1,\ldots,2n\}$ into $n$ pairs.

source
QInchworm.diagrammatics.iscrossingFunction
iscrossing(
     p1::Pair{Int64, Int64},
     p2::Pair{Int64, Int64}
 ) -> Bool
-

Return true if two arcs cross.

Let $p_1 = (a_1, b_1)$, $p_2 = (a_2, b_2)$ represent two arcs, where without loss of generality we assume $a_1 < b_1$ and $a_2 < b_2$. Now consider the order of the points $\{a_1, b_1, a_2, b_2\}$. The orderings $a_1 b_1 a_2 b_2$, $a_1 a_2 b_2 b_1$, $a_2 b_2 a_1 b_1$ are all non-crossing while $a_1 a_2 b_1 b_2$ and $a_2 a_1 b_2 b_1$ are crossing.

source
QInchworm.diagrammatics.traverse_crossing_graph_dfs!Function
traverse_crossing_graph_dfs!(
+

Return true if two arcs cross.

Let $p_1 = (a_1, b_1)$, $p_2 = (a_2, b_2)$ represent two arcs, where without loss of generality we assume $a_1 < b_1$ and $a_2 < b_2$. Now consider the order of the points $\{a_1, b_1, a_2, b_2\}$. The orderings $a_1 b_1 a_2 b_2$, $a_1 a_2 b_2 b_1$, $a_2 b_2 a_1 b_1$ are all non-crossing while $a_1 a_2 b_1 b_2$ and $a_2 a_1 b_2 b_1$ are crossing.

source
QInchworm.diagrammatics.traverse_crossing_graph_dfs!Function
traverse_crossing_graph_dfs!(
     connected::Vector{Pair{Int64, Int64}},
     disconnected::Vector{Pair{Int64, Int64}}
 )
-

Given a vector of connected arcs and a vector of disconnected arcs recursively add disconnected to connected if they cross with any connected. This is done by traversing the crossing graph using depth first search.

source
QInchworm.diagrammatics.is_k_connectedFunction
is_k_connected(
+

Given a vector of connected arcs and a vector of disconnected arcs recursively add disconnected to connected if they cross with any connected. This is done by traversing the crossing graph using depth first search.

source
QInchworm.diagrammatics.is_k_connectedFunction
is_k_connected(
     t::QInchworm.diagrammatics.Topology,
     k::Int64
 ) -> Bool
-

Given a topology, check if every connected component of the graph induced by crossings between the arcs contains a pair with an element <= k.

source
QInchworm.diagrammatics.split_k_connectedFunction
split_k_connected(
     pairs::Vector{Pair{Int64, Int64}},
     k::Int64
 ) -> Tuple{Vector{Pair{Int64, Int64}}, Vector{Pair{Int64, Int64}}}
-

Given a vector of integer pairs, split it into a connected set containing pairs with an element <= k and a disconnected set containing the rest.

source
QInchworm.diagrammatics.is_doubly_k_connectedFunction
is_doubly_k_connected(
     p::Pair{Int64, Int64},
     k::Int64
 ) -> Bool
-

Return true if a given integer pair has one element <= k and the other element > k.

source
is_doubly_k_connected(
+

Return true if a given integer pair has one element <= k and the other element > k.

source
is_doubly_k_connected(
     t::QInchworm.diagrammatics.Topology,
     k::Int64
 ) -> Bool
-

Given a topology, check if every connected component of the graph induced by crossings between the arcs contains a pair with one element <= k and the other element > k.

source
QInchworm.diagrammatics.split_doubly_k_connectedFunction
split_doubly_k_connected(
     pairs::Vector{Pair{Int64, Int64}},
     k::Int64
 ) -> Tuple{Vector{Pair{Int64, Int64}}, Vector{Pair{Int64, Int64}}}
-

Given a vector of integer pairs, split it into a connected set containing pairs with one element <= k and the other element > k, and a disconnected set containing the rest.

source
QInchworm.diagrammatics.generate_topologiesFunction
generate_topologies(
+

Given a vector of integer pairs, split it into a connected set containing pairs with one element <= k and the other element > k, and a disconnected set containing the rest.

source
QInchworm.diagrammatics.generate_topologies_implFunction
generate_topologies_impl(
     topology_partial::QInchworm.diagrammatics.Topology,
     unpaired::Vector{Int64}
 ) -> Vector{QInchworm.diagrammatics.Topology}
-

Given a partial topology and a vector of unpaired vertices, return a vector of complete topologies, efficiently computing the permutation sign.

source
QInchworm.diagrammatics.get_topologies_at_orderFunction
get_topologies_at_order(
     order::Int64;
     ...
 ) -> Vector{QInchworm.diagrammatics.Topology}
@@ -65,4 +65,4 @@
     k;
     with_external_arc
 ) -> Vector{QInchworm.diagrammatics.Topology}
-

Return topologies of a given order. If k is specified, then only the doubly k-connected topologies are returned. With with_external_arc set to true parity of the returned topologies is computed as if an extra arc overarching the last 2order - k vertices was present.

source
+

Return topologies of a given order. If k is specified, then only the doubly k-connected topologies are returned. With with_external_arc set to true parity of the returned topologies is computed as if an extra arc overarching the last 2order - k vertices was present.

source
diff --git a/modules/exact_atomic_ppgf/index.html b/modules/exact_atomic_ppgf/index.html index a970d47..18508bd 100644 --- a/modules/exact_atomic_ppgf/index.html +++ b/modules/exact_atomic_ppgf/index.html @@ -1,18 +1,18 @@ -QInchworm.exact_atomic_ppgf · QInchworm.jl

QInchworm.exact_atomic_ppgf

QInchworm.exact_atomic_ppgf.ExactAtomicPPGFType
struct ExactAtomicPPGF <: Keldysh.AbstractTimeGF{ComplexF64, false}

Exact atomic pseudo-particle Green's function type.

Fields

  • β::Float64: Inverse temperature

  • E::Vector{Float64}: Eigenvalues of the atomic Hamiltonian

source
QInchworm.exact_atomic_ppgf.ExactAtomicPPGFMethod

Evaluate atomic propagator at the difference between imaginary time branch points.

Parameters

  • z1: first branch point.
  • z2: second branch point.

Returns

  • Value of atomic pseudo-particle propagator $P_0(z_1 - z_2)$ as a diagonal matrix Diagonal.
source
Keldysh.interpolate!Method
interpolate!(
+QInchworm.exact_atomic_ppgf · QInchworm.jl

QInchworm.exact_atomic_ppgf

QInchworm.exact_atomic_ppgf.ExactAtomicPPGFType
struct ExactAtomicPPGF <: Keldysh.AbstractTimeGF{ComplexF64, false}

Exact atomic pseudo-particle Green's function type.

Fields

  • β::Float64: Inverse temperature

  • E::Vector{Float64}: Eigenvalues of the atomic Hamiltonian

source
QInchworm.exact_atomic_ppgf.ExactAtomicPPGFMethod

Evaluate atomic propagator at the difference between imaginary time branch points.

Parameters

  • z1: first branch point.
  • z2: second branch point.

Returns

  • Value of atomic pseudo-particle propagator $P_0(z_1 - z_2)$ as a diagonal matrix Diagonal.
source
Keldysh.interpolate!Method
interpolate!(
     x::Matrix{ComplexF64},
     P_0::QInchworm.exact_atomic_ppgf.ExactAtomicPPGF,
     z1::Keldysh.BranchPoint,
     z2::Keldysh.BranchPoint
 ) -> LinearAlgebra.Diagonal{ComplexF64, Vector{ComplexF64}}
-

In-place evaluation of the atomic propagator at the difference between imaginary time branch points.

Parameters

  • x: Matrix to store the value of the atomic pseudo-particle propagator in.
  • P_0: Atomic pseudo-particle propagator.
  • z1: first branch point.
  • z2: second branch point.

Returns

  • Value of atomic pseudo-particle propagator $P_0(z_1 - z_2)$ as a diagonal matrix Diagonal.
source
QInchworm.ppgf.atomic_ppgfMethod
atomic_ppgf(
+

In-place evaluation of the atomic propagator at the difference between imaginary time branch points.

Parameters

  • x: Matrix to store the value of the atomic pseudo-particle propagator in.
  • P_0: Atomic pseudo-particle propagator.
  • z1: first branch point.
  • z2: second branch point.

Returns

  • Value of atomic pseudo-particle propagator $P_0(z_1 - z_2)$ as a diagonal matrix Diagonal.
source
QInchworm.ppgf.atomic_ppgfMethod
atomic_ppgf(
     β::Float64,
     ed::KeldyshED.EDCore
 ) -> Vector{QInchworm.exact_atomic_ppgf.ExactAtomicPPGF}
-

Construct the exact atomic pseudo-particle Green's function.

Parameters

  • β: Inverse temperature.
  • ed: Exact diagonalization structure describing the atomic problem.
source
QInchworm.ppgf.density_matrixMethod
density_matrix(
+

Construct the exact atomic pseudo-particle Green's function.

Parameters

  • β: Inverse temperature.
  • ed: Exact diagonalization structure describing the atomic problem.
source
QInchworm.ppgf.density_matrixMethod
density_matrix(
     P::Vector{QInchworm.exact_atomic_ppgf.ExactAtomicPPGF}
 ) -> Vector{Matrix{ComplexF64}}
-

Extract the equilibrium density matrix $\rho = i P(-i\beta, 0)$ from a normalized pseudo-particle Green's function P. The density matrix is block-diagonal and is returned as a vector of blocks.

source
QInchworm.ppgf.partition_functionMethod
partition_function(
+

Extract the equilibrium density matrix $\rho = i P(-i\beta, 0)$ from a normalized pseudo-particle Green's function P. The density matrix is block-diagonal and is returned as a vector of blocks.

source
QInchworm.ppgf.partition_functionMethod
partition_function(
     P_0::Vector{QInchworm.exact_atomic_ppgf.ExactAtomicPPGF}
 ) -> ComplexF64
-

Extract the partition function $Z = \mathrm{Tr}[i P_0(-i\beta, 0)]$ from a un-normalized pseudo-particle Green's function P_0.

source
+

Extract the partition function $Z = \mathrm{Tr}[i P_0(-i\beta, 0)]$ from a un-normalized pseudo-particle Green's function P_0.

source
diff --git a/modules/expansion/index.html b/modules/expansion/index.html index 9404681..832bb93 100644 --- a/modules/expansion/index.html +++ b/modules/expansion/index.html @@ -1,2 +1,2 @@ -QInchworm.expansion · QInchworm.jl
+QInchworm.expansion · QInchworm.jl
diff --git a/modules/inchworm/index.html b/modules/inchworm/index.html index bf7dd16..be55894 100644 --- a/modules/inchworm/index.html +++ b/modules/inchworm/index.html @@ -1,5 +1,5 @@ -QInchworm.inchworm · QInchworm.jl

QInchworm.inchworm

QInchworm.inchworm.TopologiesInputDataType
struct TopologiesInputData

Inchworm algorithm input data specific to a given set of topologies.

Fields

  • order::Int64: Expansion order

  • n_pts_after::Int64: Number of points in the after-$t_w$ region

  • topologies::Vector{QInchworm.diagrammatics.Topology}: List of contributing topologies

  • N_samples::Int64: Number of qMC samples per sequence (should be a power of 2)

  • rand_params::QInchworm.randomization.RandomizationParams: qMC randomization parameters

source
QInchworm.inchworm.inchworm_stepFunction
inchworm_step(
+QInchworm.inchworm · QInchworm.jl

QInchworm.inchworm

QInchworm.inchworm.TopologiesInputDataType
struct TopologiesInputData

Inchworm algorithm input data specific to a given set of topologies.

Fields

  • order::Int64: Expansion order

  • n_pts_after::Int64: Number of points in the after-$t_w$ region

  • topologies::Vector{QInchworm.diagrammatics.Topology}: List of contributing topologies

  • N_samples::Int64: Number of qMC samples per sequence (should be a power of 2)

  • rand_params::QInchworm.randomization.RandomizationParams: qMC randomization parameters

source
QInchworm.inchworm.inchworm_stepFunction
inchworm_step(
     expansion::QInchworm.expansion.Expansion,
     c::Keldysh.AbstractContour,
     τ_i::Keldysh.TimeGridPoint,
@@ -9,7 +9,7 @@
     seq_type,
     tmr
 ) -> Tuple{Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}, Dict{Int64, Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}}, Dict{Int64, Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}}}
-

Perform one regular step of qMC inchworm accumulation of the bold propagators.

Parameters

  • expansion: Strong coupling expansion problem.
  • c: Time contour for integration.
  • τ_i: Initial time of the bold propagator to be computed.
  • τ_w: Inchworm splitting time $\tau_w$.
  • τ_f: Final time of the bold propagator to be computed.
  • top_data: Inchworm algorithm input data.
  • seq_type: Type of the (quasi-)random sequence to be used for integration.
  • tmr: A TimerOutput object used for profiling.

Returns

  • Accumulated value of the bold propagator.
  • Order-resolved contributions to the bold propagator as a dictionary Dict{Int, SectorBlockMatrix}.
  • Estimated standard deviations of the order-resolved contributions as a dictionary Dict{Int, SectorBlockMatrix}.
source
QInchworm.inchworm.inchworm_step_bareFunction
inchworm_step_bare(
+

Perform one regular step of qMC inchworm accumulation of the bold propagators.

Parameters

  • expansion: Strong coupling expansion problem.
  • c: Time contour for integration.
  • τ_i: Initial time of the bold propagator to be computed.
  • τ_w: Inchworm splitting time $\tau_w$.
  • τ_f: Final time of the bold propagator to be computed.
  • top_data: Inchworm algorithm input data.
  • seq_type: Type of the (quasi-)random sequence to be used for integration.
  • tmr: A TimerOutput object used for profiling.

Returns

  • Accumulated value of the bold propagator.
  • Order-resolved contributions to the bold propagator as a dictionary Dict{Int, SectorBlockMatrix}.
  • Estimated standard deviations of the order-resolved contributions as a dictionary Dict{Int, SectorBlockMatrix}.
source
QInchworm.inchworm.inchworm_step_bareFunction
inchworm_step_bare(
     expansion::QInchworm.expansion.Expansion,
     c::Keldysh.AbstractContour,
     τ_i::Keldysh.TimeGridPoint,
@@ -18,7 +18,7 @@
     seq_type,
     tmr
 ) -> Tuple{Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}, Dict{Int64, Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}}, Dict{Int64, Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}}}
-

Perform the initial step of qMC inchworm accumulation of the bold propagators. This step amounts to summing all (not only inchworm-proper) diagrams built out of the bare propagators.

Parameters

  • expansion: Strong coupling expansion problem.
  • c: Time contour for integration.
  • τ_i: Initial time of the bold propagator to be computed.
  • τ_f: Final time of the bold propagator to be computed.
  • top_data: Inchworm algorithm input data.
  • seq_type: Type of the (quasi-)random sequence to be used for integration.
  • tmr: A TimerOutput object used for profiling.

Returns

  • Accumulated value of the bold propagator.
  • Order-resolved contributions to the bold propagator as a dictionary Dict{Int, SectorBlockMatrix}.
  • Estimated standard deviations of the order-resolved contributions as a dictionary Dict{Int, SectorBlockMatrix}.
source
QInchworm.inchworm.diff_inchworm_step!Function
diff_inchworm_step!(
+

Perform the initial step of qMC inchworm accumulation of the bold propagators. This step amounts to summing all (not only inchworm-proper) diagrams built out of the bare propagators.

Parameters

  • expansion: Strong coupling expansion problem.
  • c: Time contour for integration.
  • τ_i: Initial time of the bold propagator to be computed.
  • τ_f: Final time of the bold propagator to be computed.
  • top_data: Inchworm algorithm input data.
  • seq_type: Type of the (quasi-)random sequence to be used for integration.
  • tmr: A TimerOutput object used for profiling.

Returns

  • Accumulated value of the bold propagator.
  • Order-resolved contributions to the bold propagator as a dictionary Dict{Int, SectorBlockMatrix}.
  • Estimated standard deviations of the order-resolved contributions as a dictionary Dict{Int, SectorBlockMatrix}.
source
QInchworm.inchworm.diff_inchworm_step!Function
diff_inchworm_step!(
     expansion::QInchworm.expansion.Expansion,
     c::Keldysh.ImaginaryContour,
     τ_i::Keldysh.TimeGridPoint,
@@ -30,4 +30,4 @@
     seq_type,
     tmr
 ) -> Tuple{Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}, Dict{Int64, Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}}, Dict{Int64, Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}}}
-

Perform one step of the differential qMC inchworm accumulation of the bold propagators.

Parameters

  • expansion: Strong coupling expansion problem.
  • c: Imaginary time contour for integration.
  • τ_i: Initial time of the bold propagator to be computed.
  • τ_f_prev: Final time of the bold propagator computed at the previous step.
  • τ_f: Final time of the bold propagator to be computed.
  • Σ: Container to store the pseudo-particle self-energy.
  • hamiltonian: Atomic Hamiltonian.
  • top_data: Inchworm algorithm input data.
  • seq_type: Type of the (quasi-)random sequence to be used for integration.
  • tmr: A TimerOutput object used for profiling.

Returns

  • Accumulated value of the bold propagator.
  • Order-resolved contributions to pseudo-particle self-energy as a dictionary Dict{Int, SectorBlockMatrix}.
  • Estimated standard deviations of the order-resolved contributions as a dictionary Dict{Int, SectorBlockMatrix}.
source
+

Perform one step of the differential qMC inchworm accumulation of the bold propagators.

Parameters

  • expansion: Strong coupling expansion problem.
  • c: Imaginary time contour for integration.
  • τ_i: Initial time of the bold propagator to be computed.
  • τ_f_prev: Final time of the bold propagator computed at the previous step.
  • τ_f: Final time of the bold propagator to be computed.
  • Σ: Container to store the pseudo-particle self-energy.
  • hamiltonian: Atomic Hamiltonian.
  • top_data: Inchworm algorithm input data.
  • seq_type: Type of the (quasi-)random sequence to be used for integration.
  • tmr: A TimerOutput object used for profiling.

Returns

  • Accumulated value of the bold propagator.
  • Order-resolved contributions to pseudo-particle self-energy as a dictionary Dict{Int, SectorBlockMatrix}.
  • Estimated standard deviations of the order-resolved contributions as a dictionary Dict{Int, SectorBlockMatrix}.
source
diff --git a/modules/mpi/index.html b/modules/mpi/index.html index 55e7dc1..5f73caf 100644 --- a/modules/mpi/index.html +++ b/modules/mpi/index.html @@ -1,11 +1,11 @@ -QInchworm.mpi · QInchworm.jl

QInchworm.mpi

QInchworm.mpi.ismasterFunction
ismaster() -> Bool
+QInchworm.mpi · QInchworm.jl

QInchworm.mpi

QInchworm.mpi.ismasterFunction
ismaster() -> Bool
 ismaster(comm::MPI.Comm) -> Bool
-

Check whether the calling process has the rank 0 within the group associated with the communicator comm.

source
QInchworm.mpi.rank_sub_rangeFunction
rank_sub_range(N::Integer; comm) -> UnitRange{Int64}
-

Split the range 1:N between MPI processes in the communicator comm as evenly as possible and return the sub-range 'owned' by the calling process.

source
QInchworm.mpi.all_gatherMethod
all_gather(subvec::Array{T, 1}; comm) -> Any
-

Perform the MPI collective operation Allgather for vectors of elements of a generic type T.

Parameters

  • subvec: Subvector to be gathered.
  • comm: MPI communicator.

Returns

The gathered vector of the same element type T.

source
QInchworm.mpi.all_reduce!Method
all_reduce!(
+

Check whether the calling process has the rank 0 within the group associated with the communicator comm.

source
QInchworm.mpi.rank_sub_rangeFunction
rank_sub_range(N::Integer; comm) -> UnitRange{Int64}
+

Split the range 1:N between MPI processes in the communicator comm as evenly as possible and return the sub-range 'owned' by the calling process.

source
QInchworm.mpi.all_gatherMethod
all_gather(subvec::Array{T, 1}; comm) -> Any
+

Perform the MPI collective operation Allgather for vectors of elements of a generic type T.

Parameters

  • subvec: Subvector to be gathered.
  • comm: MPI communicator.

Returns

The gathered vector of the same element type T.

source
QInchworm.mpi.all_reduce!Method
all_reduce!(
     sbm::Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}},
     op;
     comm
 )
-

Perform the in-place MPI collective operation Allreduce for a sector block matrix.

Parameters

  • sbm: Sector block matrices to be reduced.
  • op: Reduction operation.
  • comm: MPI communicator.

Returns

The gathered vector of the same element type T.

source
+

Perform the in-place MPI collective operation Allreduce for a sector block matrix.

Parameters

  • sbm: Sector block matrices to be reduced.
  • op: Reduction operation.
  • comm: MPI communicator.

Returns

The gathered vector of the same element type T.

source
diff --git a/modules/ppgf/index.html b/modules/ppgf/index.html index ea941b8..f3e7ab5 100644 --- a/modules/ppgf/index.html +++ b/modules/ppgf/index.html @@ -1,10 +1,10 @@ -QInchworm.ppgf · QInchworm.jl

QInchworm.ppgf

Operators and their matrices

QInchworm.ppgf.total_density_operatorFunction
total_density_operator(ed::KeldyshED.EDCore) -> Any
-

Return the total density operator $\hat N = \sum_i n_i$, where $i$ labels all single-particle basis states used to construct the exact diagonalization object ed.

source
QInchworm.ppgf.operator_matrix_representationFunction
operator_matrix_representation(
+QInchworm.ppgf · QInchworm.jl

QInchworm.ppgf

Operators and their matrices

QInchworm.ppgf.total_density_operatorFunction
total_density_operator(ed::KeldyshED.EDCore) -> Any
+

Return the total density operator $\hat N = \sum_i n_i$, where $i$ labels all single-particle basis states used to construct the exact diagonalization object ed.

source
QInchworm.ppgf.operator_matrix_representationFunction
operator_matrix_representation(
     op_expr::KeldyshED.Operators.OperatorExpr{S<:Number},
     ed::KeldyshED.EDCore
 ) -> Vector{T} where T<:(Matrix{T} where T<:Number)
-

Make matrix representation of an operator expression op_expr in each invariant subspace (symmetry sector) defined by the exact diagonalization object ed.

NB! Requires that the operator expression does not mix symmetry sectors.

source
QInchworm.ppgf.operator_productFunction
operator_product(
+

Make matrix representation of an operator expression op_expr in each invariant subspace (symmetry sector) defined by the exact diagonalization object ed.

NB! Requires that the operator expression does not mix symmetry sectors.

source
QInchworm.ppgf.operator_productFunction
operator_product(
     ed::KeldyshED.EDCore,
     P,
     s_i::Integer,
@@ -12,57 +12,57 @@
     z_f,
     vertices
 ) -> Tuple{Any, Any}
-

Evaluate a product of vertices at different contour times $z_n, n=1\ldots N$ with the pseudo-particle Green's functions sandwiched in between. The product is padded with the PPGFs $P(z_1, z_i)$ and $P(z_f, z_N)$ at the respective ends of the contour segment $[z_i, z_f]$.

vertices is a contour-time ordered list of triples (z_n, c_n, o_n) were:

  • z_n is a contour time,
  • c_n is +1/-1 for creation/annihilation operator respectively, and
  • o_n is a spin-orbital index.

Parameters

  • ed: An object defining the exact diagonalization problem.
  • P: The pseudo-particle Green's function as a list of its diagonal blocks.
  • s_i: Initial symmetry sector, in which the rightmost PPGF is acting.
  • z_i: Initial contour time $z_i$.
  • z_f: Final contour time $z_f$.
  • vertices: The list of vertices.

Returns

The evaluated matrix product and the final symmetry sector, in which the leftmost PPGF is acting.

source

Pseudo-particle Green's functions

QInchworm.ppgf.atomic_ppgf!Function
atomic_ppgf!(P::Vector, ed::KeldyshED.EDCore; Δλ)
-

In-place version of atomic_ppgf() that writes the computed PPGF into its first argument P. If Δλ is non-zero, then $P(z, z')$ is multiplied by $e^{-i\Delta\lambda (z-z')}$.

source
QInchworm.ppgf.first_order_spgfFunction
first_order_spgf(
+

Evaluate a product of vertices at different contour times $z_n, n=1\ldots N$ with the pseudo-particle Green's functions sandwiched in between. The product is padded with the PPGFs $P(z_1, z_i)$ and $P(z_f, z_N)$ at the respective ends of the contour segment $[z_i, z_f]$.

vertices is a contour-time ordered list of triples (z_n, c_n, o_n) were:

  • z_n is a contour time,
  • c_n is +1/-1 for creation/annihilation operator respectively, and
  • o_n is a spin-orbital index.

Parameters

  • ed: An object defining the exact diagonalization problem.
  • P: The pseudo-particle Green's function as a list of its diagonal blocks.
  • s_i: Initial symmetry sector, in which the rightmost PPGF is acting.
  • z_i: Initial contour time $z_i$.
  • z_f: Final contour time $z_f$.
  • vertices: The list of vertices.

Returns

The evaluated matrix product and the final symmetry sector, in which the leftmost PPGF is acting.

source

Pseudo-particle Green's functions

QInchworm.ppgf.atomic_ppgf!Function
atomic_ppgf!(P::Vector, ed::KeldyshED.EDCore; Δλ)
+

In-place version of atomic_ppgf() that writes the computed PPGF into its first argument P. If Δλ is non-zero, then $P(z, z')$ is multiplied by $e^{-i\Delta\lambda (z-z')}$.

source
QInchworm.ppgf.first_order_spgfFunction
first_order_spgf(
     P::Vector{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}},
     ed::KeldyshED.EDCore,
     o1,
     o2
 ) -> Any
-

Compute the first order pseudo-particle diagram contribution to the single-particle Green's function $g_{o_1, o_2}(z, z')$ defined on the full Keldysh contour.

Parameters

  • P: Pseudo-particle Green's function.
  • ed: An object defining the exact diagonalization problem.
  • o1: First index of the single-particle Green's function to be computed.
  • o2: Second index of the single-particle Green's function to be computed.

Returns

The computed single-particle Green's function.

source
first_order_spgf(
+

Compute the first order pseudo-particle diagram contribution to the single-particle Green's function $g_{o_1, o_2}(z, z')$ defined on the full Keldysh contour.

Parameters

  • P: Pseudo-particle Green's function.
  • ed: An object defining the exact diagonalization problem.
  • o1: First index of the single-particle Green's function to be computed.
  • o2: Second index of the single-particle Green's function to be computed.

Returns

The computed single-particle Green's function.

source
first_order_spgf(
     P::Vector{Keldysh.ImaginaryTimeGF{ComplexF64, false}},
     ed::KeldyshED.EDCore,
     o1,
     o2
 ) -> Any
-

Compute the first order pseudo-particle diagram contribution to the single-particle Green's function $g_{o_1, o_2}(\tau)$ defined on the imaginary time segment.

Parameters

  • P: Pseudo-particle Green's function.
  • ed: An object defining the exact diagonalization problem.
  • o1: First index of the single-particle Green's function to be computed.
  • o2: Second index of the single-particle Green's function to be computed.

Returns

The computed single-particle Green's function.

source
QInchworm.ppgf.check_ppgf_real_time_symmetriesFunction
check_ppgf_real_time_symmetries(
+

Compute the first order pseudo-particle diagram contribution to the single-particle Green's function $g_{o_1, o_2}(\tau)$ defined on the imaginary time segment.

Parameters

  • P: Pseudo-particle Green's function.
  • ed: An object defining the exact diagonalization problem.
  • o1: First index of the single-particle Green's function to be computed.
  • o2: Second index of the single-particle Green's function to be computed.

Returns

The computed single-particle Green's function.

source
QInchworm.ppgf.check_ppgf_real_time_symmetriesFunction
check_ppgf_real_time_symmetries(
     P::Vector{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}},
     ed::KeldyshED.EDCore
 ) -> Bool
-

Check whether a given pseudo-particle Green's function P obeys all symmetry relations between its Keldysh components.

Parameters

  • P: Pseudo-particle Green's function to check.
  • ed: An object defining the respective exact diagonalization problem.
source
QInchworm.ppgf.set_ppgf!Function
set_ppgf!(
+

Check whether a given pseudo-particle Green's function P obeys all symmetry relations between its Keldysh components.

Parameters

  • P: Pseudo-particle Green's function to check.
  • ed: An object defining the respective exact diagonalization problem.
source
QInchworm.ppgf.set_ppgf!Function
set_ppgf!(
     P::Vector{QInchworm.spline_gf.IncSplineImaginaryTimeGF{ComplexF64, false}},
     τ_i::Keldysh.TimeGridPoint,
     τ_f::Keldysh.TimeGridPoint,
     val::Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}
 )
-

Set the value of P corresponding to a given pair of imaginary time points $(\tau_f, \tau_i)$. This method is defined for the spline-interpolated imaginary-time propagators.

Parameters

  • P: Pseudo-particle Green's function.
  • τ_i: Initial imaginary time $\tau_i$.
  • τ_f: Final imaginary time $\tau_f$.
  • val: Block matrix to set $P(\tau_f, \tau_i)$ to. Expected to be block-diagonal.
source
set_ppgf!(
+

Set the value of P corresponding to a given pair of imaginary time points $(\tau_f, \tau_i)$. This method is defined for the spline-interpolated imaginary-time propagators.

Parameters

  • P: Pseudo-particle Green's function.
  • τ_i: Initial imaginary time $\tau_i$.
  • τ_f: Final imaginary time $\tau_f$.
  • val: Block matrix to set $P(\tau_f, \tau_i)$ to. Expected to be block-diagonal.
source
set_ppgf!(
     P::Union{Vector{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}}, Vector{Keldysh.ImaginaryTimeGF{ComplexF64, false}}},
     t_i::Keldysh.TimeGridPoint,
     t_f::Keldysh.TimeGridPoint,
     val::Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}
 )
-

Set the value of P corresponding to a given pair of contour time points $(t_f, t_i)$.

Parameters

  • P: Pseudo-particle Green's function.
  • t_i: Initial contour time $t_i$.
  • t_f: Final contour time $t_f$.
  • val: Block matrix to set $P(t_f, t_i)$ to. Expected to be block-diagonal.
source
QInchworm.ppgf.set_ppgf_initial_conditions!Function
set_ppgf_initial_conditions!(
+

Set the value of P corresponding to a given pair of contour time points $(t_f, t_i)$.

Parameters

  • P: Pseudo-particle Green's function.
  • t_i: Initial contour time $t_i$.
  • t_f: Final contour time $t_f$.
  • val: Block matrix to set $P(t_f, t_i)$ to. Expected to be block-diagonal.
source
QInchworm.ppgf.set_ppgf_initial_conditions!Function
set_ppgf_initial_conditions!(
     P::Union{Vector{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}}, Vector{Keldysh.ImaginaryTimeGF{ComplexF64, false}}}
 )
-

Given a pseudo-particle Green's function P, set its values to zero except for the same-time components $P(z, z) = -i$.

source
QInchworm.ppgf.ppgf_real_time_initial_conditions!Function
ppgf_real_time_initial_conditions!(
     P::Vector{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}},
     ed::KeldyshED.EDCore
 )
-

Given a pseudo-particle Green's function P, set its values at the real branch edges $t = 0$ to be consistent with values on the imaginary time branch.

Parameters

  • P: Pseudo-particle Green's function.
  • ed: Exact diagonalization object used to derive statistical sign pre-factors of PPGF sectors.
source
QInchworm.ppgf.set_ppgf_symmetric!Function
set_ppgf_symmetric!(
+

Given a pseudo-particle Green's function P, set its values at the real branch edges $t = 0$ to be consistent with values on the imaginary time branch.

Parameters

  • P: Pseudo-particle Green's function.
  • ed: Exact diagonalization object used to derive statistical sign pre-factors of PPGF sectors.
source
QInchworm.ppgf.set_ppgf_symmetric!Function
set_ppgf_symmetric!(
     P_s::Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid},
     n,
     z1::Keldysh.TimeGridPoint,
     z2::Keldysh.TimeGridPoint,
     value
 ) -> Any
-

Set real-time pseudo-particle Green's function symmetry connected time pairs.

Parameters

  • P_s: Diagonal block of the PPGF to be updated.
  • n: The number of particles in the corresponding sector.
  • z1: First argument of the PPGF.
  • z2: Second argument of the PPGF (must lie on the backward branch).
  • value: Value to set elements of the PPGF to.
source
QInchworm.ppgf.initial_ppgf_derivativeFunction
initial_ppgf_derivative(
+

Set real-time pseudo-particle Green's function symmetry connected time pairs.

Parameters

  • P_s: Diagonal block of the PPGF to be updated.
  • n: The number of particles in the corresponding sector.
  • z1: First argument of the PPGF.
  • z2: Second argument of the PPGF (must lie on the backward branch).
  • value: Value to set elements of the PPGF to.
source
QInchworm.ppgf.initial_ppgf_derivativeFunction
initial_ppgf_derivative(
     ed::KeldyshED.EDCore,
     β::Float64
 ) -> Vector{Any}
-

Compute the imaginary time derivative of the atomic pseudo-particle Green's function, $\partial_\tau P(\tau)$ at $\tau=0$.

Parameters

  • ed: Exact diagonalization object defining the atomic propagator.
  • β: Inverse temperature.

Returns

Value of the derivative as a block-diagonal matrix (a list of blocks).

source
QInchworm.ppgf.reduced_ppgfFunction
reduced_ppgf(
+

Compute the imaginary time derivative of the atomic pseudo-particle Green's function, $\partial_\tau P(\tau)$ at $\tau=0$.

Parameters

  • ed: Exact diagonalization object defining the atomic propagator.
  • β: Inverse temperature.

Returns

Value of the derivative as a block-diagonal matrix (a list of blocks).

source
QInchworm.ppgf.reduced_ppgfFunction
reduced_ppgf(
     P::Vector{<:Keldysh.AbstractTimeGF},
     ed::KeldyshED.EDCore,
     target_soi::KeldyshED.Hilbert.SetOfIndices
 ) -> Any
-

Take a partial trace of a pseudo-particle Green's function.

Parameters

  • P: Pseudo-particle Green's function.
  • ed: Exact diagonalization object compatible with P.
  • target_soi: A subset of creation/annihilation operator labels defining the target subsystem, in which the reduced PPGF acts.

Returns

The reduced PPGF written in the Fock state basis of the target subsystem.

source
+

Take a partial trace of a pseudo-particle Green's function.

Parameters

  • P: Pseudo-particle Green's function.
  • ed: Exact diagonalization object compatible with P.
  • target_soi: A subset of creation/annihilation operator labels defining the target subsystem, in which the reduced PPGF acts.

Returns

The reduced PPGF written in the Fock state basis of the target subsystem.

source
diff --git a/modules/qmc_integrate/index.html b/modules/qmc_integrate/index.html index 8fa551c..3eed020 100644 --- a/modules/qmc_integrate/index.html +++ b/modules/qmc_integrate/index.html @@ -1,10 +1,10 @@ -QInchworm.qmc_integrate · QInchworm.jl

QInchworm.qmc_integrate

Basic quasi Monte Carlo integration routines

QInchworm.qmc_integrate.qmc_integralFunction
qmc_integral(f; ...)
+QInchworm.qmc_integrate · QInchworm.jl

QInchworm.qmc_integrate

Basic quasi Monte Carlo integration routines

QInchworm.qmc_integrate.qmc_integralFunction
qmc_integral(f; ...)
 qmc_integral(f, init; trans_f, jacobian_f, seq, N)
 

Compute a quasi Monte Carlo estimate of a $d$-dimensional integral

\[F = \int_\mathscr{D} d^d \mathbf{u}\ f(\mathbf{u}).\]

The domain $\mathscr{D}$ is defined by a variable change $\mathbf{u} = \mathbf{u}(\mathbf{x}): [0,1]^d \mapsto \mathscr{D}$,

\[F = \int_{[0,1]^d} d^d\mathbf{x}\ f(\mathbf{u}(\mathbf{x})) \left|\frac{\partial\mathbf{u}}{\partial\mathbf{x}}\right| \approx \frac{1}{N} \sum_{i=1}^N - f(\mathbf{u}(\mathbf{x}_i)) J(\mathbf{u}(\mathbf{x}_i)).\]

Parameters

  • f: Integrand $f(\mathbf{u})$.
  • init: Initial (zero) value used in qMC summation.
  • trans_f: Domain transformation function $\mathbf{u}(\mathbf{x})$.
  • jacobian_f: Jacobian $J(\mathbf{u}) = \left|\frac{\partial\mathbf{u}}{\partial\mathbf{x}}\right|$.
  • seq: Quasi-random sequence generator.
  • N: Number of points to be taken from the quasi-random sequence.

Returns

Estimated value of the integral.

source
QInchworm.qmc_integrate.qmc_integral_n_samplesFunction
qmc_integral_n_samples(f; ...)
+    f(\mathbf{u}(\mathbf{x}_i)) J(\mathbf{u}(\mathbf{x}_i)).\]

Parameters

  • f: Integrand $f(\mathbf{u})$.
  • init: Initial (zero) value used in qMC summation.
  • trans_f: Domain transformation function $\mathbf{u}(\mathbf{x})$.
  • jacobian_f: Jacobian $J(\mathbf{u}) = \left|\frac{\partial\mathbf{u}}{\partial\mathbf{x}}\right|$.
  • seq: Quasi-random sequence generator.
  • N: Number of points to be taken from the quasi-random sequence.

Returns

Estimated value of the integral.

source
QInchworm.qmc_integrate.qmc_integral_n_samplesFunction
qmc_integral_n_samples(f; ...)
 qmc_integral_n_samples(
     f,
     init;
@@ -16,14 +16,14 @@
 

Compute a quasi Monte Carlo estimate of a $d$-dimensional integral

\[F = \int_\mathscr{D} d^d \mathbf{u}\ f(\mathbf{u}).\]

The domain $\mathscr{D}$ is defined by a variable change $\mathbf{u} = \mathbf{u}(\mathbf{x}): [0,1]^d \mapsto \mathscr{D}$,

\[F = \int_{[0,1]^d} d^d\mathbf{x}\ f(\mathbf{u}(\mathbf{x})) \left|\frac{\partial\mathbf{u}}{\partial\mathbf{x}}\right| \approx \frac{1}{N} \sum_{i=1}^N - f(\mathbf{u}(\mathbf{x}_i)) J(\mathbf{u}(\mathbf{x}_i)).\]

Unlike qmc_integral(), this function performs qMC summation until a given number of valid (non-nothing) samples of $f(\mathbf{u})$ are taken.

Parameters

  • f: Integrand $f(\mathbf{u})$.
  • init: Initial (zero) value used in qMC summation.
  • trans_f: Domain transformation function $\mathbf{u}(\mathbf{x})$.
  • jacobian_f: Jacobian $J(\mathbf{u}) = \left|\frac{\partial\mathbf{u}}{\partial\mathbf{x}}\right|$.
  • seq: Quasi-random sequence generator.
  • N_samples: Number of valid samples of $f(\mathbf{u})$ to be taken.

Returns

Estimated value of the integral.

source

Integration domain transformations

Base.ndimsMethod
ndims(
+    f(\mathbf{u}(\mathbf{x}_i)) J(\mathbf{u}(\mathbf{x}_i)).\]

Unlike qmc_integral(), this function performs qMC summation until a given number of valid (non-nothing) samples of $f(\mathbf{u})$ are taken.

Parameters

  • f: Integrand $f(\mathbf{u})$.
  • init: Initial (zero) value used in qMC summation.
  • trans_f: Domain transformation function $\mathbf{u}(\mathbf{x})$.
  • jacobian_f: Jacobian $J(\mathbf{u}) = \left|\frac{\partial\mathbf{u}}{\partial\mathbf{x}}\right|$.
  • seq: Quasi-random sequence generator.
  • N_samples: Number of valid samples of $f(\mathbf{u})$ to be taken.

Returns

Estimated value of the integral.

source

Integration domain transformations

Base.ndimsMethod
ndims(
     s::QInchworm.scrambled_sobol.ScrambledSobolSeq{D}
 ) -> Int64
-

Dimension D of a scrambled Sobol sequence.

source
ndims(s::QInchworm.utility.RandomSeq{RNG, D}) -> Int64
-

Dimension D of a random sequence.

source
ndims(
+

Dimension D of a scrambled Sobol sequence.

source
ndims(s::QInchworm.utility.RandomSeq{RNG, D}) -> Int64
+

Dimension D of a random sequence.

source
ndims(
     _::QInchworm.qmc_integrate.AbstractDomainTransform{D}
 ) -> Any
-

Return the number of dimensions $d$ of a domain transformation $[0, 1]^d \mapsto \mathscr{D}$.

source

Return the number of dimensions $d$ of a domain transformation $[0, 1]^d \mapsto \mathscr{D}$.

source
QInchworm.qmc_integrate.ExpModelFunctionTransformType
struct ExpModelFunctionTransform{D} <: QInchworm.qmc_integrate.AbstractDomainTransform{D}

Domain transformation

\[\mathbf{x}\in[0,1]^d \mapsto \{\mathbf{u}: u_f \geq u_1 \geq u_2 \geq \ldots \geq u_d > -\infty\}\]

induced by the implicit variable change

\[x_n(v_n) = \frac{\int_0^{v_n} d\bar v_n h(\bar v_n)} {\int_0^\infty d\bar v_n h(\bar v_n)}, \quad @@ -32,7 +32,7 @@ u_f - u_1, &n=1,\\ u_{n-1} - u_n, &n>1, \end{array} -\right.\]

where $h(v)$ is an exponential model function parametrized by decay rate $\tau$, $h(v) = e^{-v/\tau}$.

The corresponding Jacobian is $J(\mathbf{u}) = \tau^d / e^{-(u_f - u_d) / \tau}$.

Fields

  • u_f::Float64: Upper bound of the transformed domain $u_f$

  • τ::Float64: Decay rate parameter of the exponential model function

source
QInchworm.qmc_integrate.ExpModelFunctionTransformMethod
ExpModelFunctionTransform(
+\right.\]

where $h(v)$ is an exponential model function parametrized by decay rate $\tau$, $h(v) = e^{-v/\tau}$.

The corresponding Jacobian is $J(\mathbf{u}) = \tau^d / e^{-(u_f - u_d) / \tau}$.

Fields

  • u_f::Float64: Upper bound of the transformed domain $u_f$

  • τ::Float64: Decay rate parameter of the exponential model function

source
QInchworm.qmc_integrate.ExpModelFunctionTransformMethod
ExpModelFunctionTransform(
     d::Integer,
     c::Keldysh.AbstractContour,
     t_f::Keldysh.BranchPoint,
@@ -40,31 +40,31 @@
 ) -> QInchworm.qmc_integrate.ExpModelFunctionTransform
 

Make an ExpModelFunctionTransform object suitable for time contour integration over the domain

\[\{(t_1, \ldots, t_d) \in \mathcal{C}^d: t_f \succeq t_1 \succeq t_2 \succeq \ldots \succeq t_d \succeq - \text{starting point of }\mathcal{C}\}\]

N.B. ExpModelFunctionTransform describes an infinite domain where integration variables $u_n$ can approach $-\infty$. Negative values of $u_n$ cannot be mapped onto time points on $\mathcal{C}$ and will be discarded by contour_integral().

Parameters

  • d: Number of dimensions $d$.
  • c: Time contour $\mathcal{C}$.
  • t_f: Upper bound $t_f$.
  • τ: Decay rate parameter $\tau$.
source
QInchworm.qmc_integrate.RootTransformType
struct RootTransform{D} <: QInchworm.qmc_integrate.AbstractDomainTransform{D}

Hypercube-to-simplex domain transformation

\[\mathbf{x}\in[0,1]^d \mapsto + \text{starting point of }\mathcal{C}\}\]

N.B. ExpModelFunctionTransform describes an infinite domain where integration variables $u_n$ can approach $-\infty$. Negative values of $u_n$ cannot be mapped onto time points on $\mathcal{C}$ and will be discarded by contour_integral().

Parameters

  • d: Number of dimensions $d$.
  • c: Time contour $\mathcal{C}$.
  • t_f: Upper bound $t_f$.
  • τ: Decay rate parameter $\tau$.
source
QInchworm.qmc_integrate.RootTransformType
struct RootTransform{D} <: QInchworm.qmc_integrate.AbstractDomainTransform{D}

Hypercube-to-simplex domain transformation

\[\mathbf{x}\in[0,1]^d \mapsto \{\mathbf{u}: u_f \geq u_1 \geq u_2 \geq \ldots \geq u_d \geq u_i\}\]

induced by the Root mapping[2]

\[\left\{ \begin{array}{ll} \tilde u_1 &= x_1^{1/d},\\ \tilde u_2 &= \tilde u_1 x_2^{1/(d-1)},\\ &\ldots\\ \tilde u_d &= \tilde u_{d-1} x_d, -\end{array}\right.\]

\[\mathbf{u} = u_i + (u_f - u_i) \tilde{\mathbf{u}}.\]

The corresponding Jacobian is $J(\mathbf{u}) = (u_f - u_i)^d / d!$.

Fields

  • u_i::Float64: Lower bound of the transformed domain $u_i$

  • u_diff::Float64: Difference $u_f - u_i$

source
QInchworm.qmc_integrate.RootTransformMethod
RootTransform(
+\end{array}\right.\]

\[\mathbf{u} = u_i + (u_f - u_i) \tilde{\mathbf{u}}.\]

The corresponding Jacobian is $J(\mathbf{u}) = (u_f - u_i)^d / d!$.

Fields

  • u_i::Float64: Lower bound of the transformed domain $u_i$

  • u_diff::Float64: Difference $u_f - u_i$

source
QInchworm.qmc_integrate.RootTransformMethod
RootTransform(
     d::Integer,
     c::Keldysh.AbstractContour,
     t_i::Keldysh.BranchPoint,
     t_f::Keldysh.BranchPoint
 ) -> QInchworm.qmc_integrate.RootTransform
 

Make a RootTransform object suitable for time contour integration over the domain

\[\{(t_1, \ldots, t_d) \in \mathcal{C}^d: - t_f \succeq t_1 \succeq t_2 \succeq \ldots \succeq t_d \succeq t_i\}\]

Parameters

  • d: Number of dimensions $d$.
  • c: Time contour $\mathcal{C}$.
  • t_i: Lower bound $t_i$.
  • t_f: Upper bound $t_f$.
source
QInchworm.qmc_integrate.SortTransformType
struct SortTransform{D} <: QInchworm.qmc_integrate.AbstractDomainTransform{D}

Hypercube-to-simplex domain transformation

\[\mathbf{x}\in[0,1]^d \mapsto - \{\mathbf{u}: u_f \geq u_1 \geq u_2 \geq \ldots \geq u_d \geq u_i\}\]

induced by the Sort mapping[2]

\[\mathbf{u} = u_i + (u_f - u_i) \mathrm{sort}(x_1, \ldots, x_d).\]

The corresponding Jacobian is $J(\mathbf{u}) = (u_f - u_i)^d / d!$.

Fields

  • u_i::Float64: Lower bound of the transformed domain $u_i$

  • u_diff::Float64: Difference $u_f - u_i$

source
QInchworm.qmc_integrate.SortTransformMethod
SortTransform(
+    t_f \succeq t_1 \succeq t_2 \succeq \ldots \succeq t_d \succeq t_i\}\]

Parameters

  • d: Number of dimensions $d$.
  • c: Time contour $\mathcal{C}$.
  • t_i: Lower bound $t_i$.
  • t_f: Upper bound $t_f$.
source
QInchworm.qmc_integrate.SortTransformType
struct SortTransform{D} <: QInchworm.qmc_integrate.AbstractDomainTransform{D}

Hypercube-to-simplex domain transformation

\[\mathbf{x}\in[0,1]^d \mapsto + \{\mathbf{u}: u_f \geq u_1 \geq u_2 \geq \ldots \geq u_d \geq u_i\}\]

induced by the Sort mapping[2]

\[\mathbf{u} = u_i + (u_f - u_i) \mathrm{sort}(x_1, \ldots, x_d).\]

The corresponding Jacobian is $J(\mathbf{u}) = (u_f - u_i)^d / d!$.

Fields

  • u_i::Float64: Lower bound of the transformed domain $u_i$

  • u_diff::Float64: Difference $u_f - u_i$

source
QInchworm.qmc_integrate.SortTransformMethod
SortTransform(
     d::Integer,
     c::Keldysh.AbstractContour,
     t_i::Keldysh.BranchPoint,
     t_f::Keldysh.BranchPoint
 ) -> QInchworm.qmc_integrate.SortTransform
 

Make a SortTransform object suitable for time contour integration over the domain

\[\{(t_1, \ldots, t_d) \in \mathcal{C}^d: - t_f \succeq t_1 \succeq t_2 \succeq \ldots \succeq t_d \succeq t_i\}\]

Parameters

  • d: Number of dimensions $d$.
  • c: Time contour $\mathcal{C}$.
  • t_i: Lower bound $t_i$.
  • t_f: Upper bound $t_f$.
source
QInchworm.qmc_integrate.DoubleSimplexRootTransformType
struct DoubleSimplexRootTransform{D} <: QInchworm.qmc_integrate.AbstractDomainTransform{D}

Hypercube-to-double-simplex domain transformation

\[\mathbf{x}\in[0,1]^d \mapsto + t_f \succeq t_1 \succeq t_2 \succeq \ldots \succeq t_d \succeq t_i\}\]

Parameters

  • d: Number of dimensions $d$.
  • c: Time contour $\mathcal{C}$.
  • t_i: Lower bound $t_i$.
  • t_f: Upper bound $t_f$.
source
QInchworm.qmc_integrate.DoubleSimplexRootTransformType
struct DoubleSimplexRootTransform{D} <: QInchworm.qmc_integrate.AbstractDomainTransform{D}

Hypercube-to-double-simplex domain transformation

\[\mathbf{x}\in[0,1]^d \mapsto \{\mathbf{u}: u_f \geq u_1 \geq u_2 \geq \ldots \geq u_{d^>} \geq u_w \geq - u_{d^>+1} \geq \ldots \geq u_d \geq u_i\}\]

induced by the Root mapping[2] applied independently to two sets of variables $\{x_1, \ldots, x_{d^>} \}$ and $\{x_{d^>+1}, \ldots, x_d \}$ (cf. RootTransform).

The corresponding Jacobian is $J(\mathbf{u}) = \frac{(u_w - u_i)^{d^<}}{d^<!} \frac{(u_f - u_w)^{d^>}}{d^>!}$.

Here, $d^<$ and $d^>$ denote numbers of variables in the 'lesser' and 'greater' simplex respectively, and $d = d^< + d^>$. The two simplices are separated by a fixed boundary located at $u_w$.

Fields

  • d_lesser::Int64: Number of variables in the 'lesser' simplex, $d^<$

  • d_greater::Int64: Number of variables in the 'greater' simplex, $d^>$

  • u_i::Float64: Lower bound of the transformed domain $u_i$

  • u_w::Float64: Boundary $u_w$ separating the 'lesser' and the 'greater' simplices

  • u_diff_wi::Float64: Difference $u_w - u_i$

  • u_diff_fw::Float64: Difference $u_f - u_w$

source
QInchworm.qmc_integrate.DoubleSimplexRootTransformMethod
DoubleSimplexRootTransform(
+                    u_{d^>+1} \geq \ldots \geq u_d \geq u_i\}\]

induced by the Root mapping[2] applied independently to two sets of variables $\{x_1, \ldots, x_{d^>} \}$ and $\{x_{d^>+1}, \ldots, x_d \}$ (cf. RootTransform).

The corresponding Jacobian is $J(\mathbf{u}) = \frac{(u_w - u_i)^{d^<}}{d^<!} \frac{(u_f - u_w)^{d^>}}{d^>!}$.

Here, $d^<$ and $d^>$ denote numbers of variables in the 'lesser' and 'greater' simplex respectively, and $d = d^< + d^>$. The two simplices are separated by a fixed boundary located at $u_w$.

Fields

  • d_lesser::Int64: Number of variables in the 'lesser' simplex, $d^<$

  • d_greater::Int64: Number of variables in the 'greater' simplex, $d^>$

  • u_i::Float64: Lower bound of the transformed domain $u_i$

  • u_w::Float64: Boundary $u_w$ separating the 'lesser' and the 'greater' simplices

  • u_diff_wi::Float64: Difference $u_w - u_i$

  • u_diff_fw::Float64: Difference $u_f - u_w$

source
QInchworm.qmc_integrate.DoubleSimplexRootTransformMethod
DoubleSimplexRootTransform(
     d_before::Int64,
     d_after::Int64,
     c::Keldysh.AbstractContour,
@@ -74,31 +74,31 @@
 ) -> QInchworm.qmc_integrate.DoubleSimplexRootTransform
 

Make a DoubleSimplexRootTransform object suitable for time contour integration over the domain

\[\{(t_1, \ldots, t_d) \in \mathcal{C}^d: t_f \succeq t_1 \succeq t_2 \succeq \ldots \succeq t_{d_\text{after}} \succeq t_w - \succeq t_{d_\text{after}+1} \succeq \ldots \succeq t_d \succeq t_i\},\]

where $d = d_\text{before} + d_\text{after}$.

Parameters

  • d_before: Number of time variables in the 'before' region, $d_\text{before}$.
  • d_after: Number of time variables in the 'after' region, $d_\text{after}$.
  • c: Time contour $\mathcal{C}$.
  • t_i: Lower bound $t_i$.
  • t_w: Boundary point $t_w$.
  • t_f: Upper bound $t_f$.
source
QInchworm.qmc_integrate.make_trans_fFunction
make_trans_f(
+    \succeq t_{d_\text{after}+1} \succeq \ldots \succeq t_d \succeq t_i\},\]

where $d = d_\text{before} + d_\text{after}$.

Parameters

  • d_before: Number of time variables in the 'before' region, $d_\text{before}$.
  • d_after: Number of time variables in the 'after' region, $d_\text{after}$.
  • c: Time contour $\mathcal{C}$.
  • t_i: Lower bound $t_i$.
  • t_w: Boundary point $t_w$.
  • t_f: Upper bound $t_f$.
source
QInchworm.qmc_integrate.make_trans_fFunction
make_trans_f(
     t::QInchworm.qmc_integrate.ExpModelFunctionTransform
 ) -> QInchworm.qmc_integrate.var"#3#4"{QInchworm.qmc_integrate.ExpModelFunctionTransform{D}} where D
-

Return the function $\mathbf{u}(\mathbf{x})$ corresponding to a given ExpModelFunctionTransform object t.

source
make_trans_f(
+

Return the function $\mathbf{u}(\mathbf{x})$ corresponding to a given ExpModelFunctionTransform object t.

source
make_trans_f(
     t::QInchworm.qmc_integrate.RootTransform
 ) -> QInchworm.qmc_integrate.var"#7#8"{QInchworm.qmc_integrate.RootTransform{D}} where D
-

Return the function $\mathbf{u}(\mathbf{x})$ corresponding to a given RootTransform object t.

source
make_trans_f(
+

Return the function $\mathbf{u}(\mathbf{x})$ corresponding to a given RootTransform object t.

source
make_trans_f(
     t::QInchworm.qmc_integrate.SortTransform
 ) -> QInchworm.qmc_integrate.var"#11#12"{QInchworm.qmc_integrate.SortTransform{D}} where D
-

Return the function $\mathbf{u}(\mathbf{x})$ corresponding to a given SortTransform object t.

source
make_trans_f(
+

Return the function $\mathbf{u}(\mathbf{x})$ corresponding to a given SortTransform object t.

source
make_trans_f(
     t::QInchworm.qmc_integrate.DoubleSimplexRootTransform
 ) -> QInchworm.qmc_integrate.var"#15#16"{QInchworm.qmc_integrate.DoubleSimplexRootTransform{D}} where D
-

Return the function $\mathbf{u}(\mathbf{x})$ corresponding to a given DoubleSimplexRootTransform object t.

source
QInchworm.qmc_integrate.make_jacobian_fFunction
make_jacobian_f(
     t::QInchworm.qmc_integrate.ExpModelFunctionTransform
 ) -> QInchworm.qmc_integrate.var"#5#6"{QInchworm.qmc_integrate.ExpModelFunctionTransform{D}} where D
-

Return the Jacobian $J(\mathbf{u}) = \left|\frac{\partial\mathbf{u}}{\partial\mathbf{x}}\right|$ corresponding to a given ExpModelFunctionTransform object t.

source
make_jacobian_f(
+

Return the Jacobian $J(\mathbf{u}) = \left|\frac{\partial\mathbf{u}}{\partial\mathbf{x}}\right|$ corresponding to a given ExpModelFunctionTransform object t.

source
make_jacobian_f(
     t::QInchworm.qmc_integrate.RootTransform
 ) -> QInchworm.qmc_integrate.var"#9#10"{Float64}
-

Return the Jacobian $J(\mathbf{u}) = \left|\frac{\partial\mathbf{u}}{\partial\mathbf{x}}\right|$ corresponding to a given RootTransform object t.

source
make_jacobian_f(
+

Return the Jacobian $J(\mathbf{u}) = \left|\frac{\partial\mathbf{u}}{\partial\mathbf{x}}\right|$ corresponding to a given RootTransform object t.

source
make_jacobian_f(
     t::QInchworm.qmc_integrate.SortTransform
 ) -> QInchworm.qmc_integrate.var"#13#14"{Float64}
-

Return the Jacobian $J(\mathbf{u}) = \left|\frac{\partial\mathbf{u}}{\partial\mathbf{x}}\right|$ corresponding to a given SortTransform object t.

source
make_jacobian_f(
+

Return the Jacobian $J(\mathbf{u}) = \left|\frac{\partial\mathbf{u}}{\partial\mathbf{x}}\right|$ corresponding to a given SortTransform object t.

source
make_jacobian_f(
     t::QInchworm.qmc_integrate.DoubleSimplexRootTransform
 ) -> QInchworm.qmc_integrate.var"#17#18"{Float64}
-

Return the Jacobian $J(\mathbf{u}) = \left|\frac{\partial\mathbf{u}}{\partial\mathbf{x}}\right|$ corresponding to a given DoubleSimplexRootTransform object t.

source

Contour integration routines

Contour integration routines

QInchworm.qmc_integrate.contour_integralFunction
contour_integral(
     f,
     c::Keldysh.AbstractContour,
     dt::QInchworm.qmc_integrate.AbstractDomainTransform;
@@ -106,7 +106,7 @@
     seq,
     N
 )
-

Compute a quasi Monte Carlo estimate of a contour integral over a $d$-dimensional domain $\mathscr{D}$.

Parameters

  • f: Integrand.
  • c: Time contour to integrate over.
  • dt: Domain transformation $[0, 1]^d \mapsto \mathscr{D}$.
  • init: Initial (zero) value of the integral.
  • seq: Quasi-random sequence generator.
  • N: The number of points to be taken from the quasi-random sequence.

Returns

Estimated value of the contour integral.

source
QInchworm.qmc_integrate.contour_integral_n_samplesFunction
contour_integral_n_samples(
+

Compute a quasi Monte Carlo estimate of a contour integral over a $d$-dimensional domain $\mathscr{D}$.

Parameters

  • f: Integrand.
  • c: Time contour to integrate over.
  • dt: Domain transformation $[0, 1]^d \mapsto \mathscr{D}$.
  • init: Initial (zero) value of the integral.
  • seq: Quasi-random sequence generator.
  • N: The number of points to be taken from the quasi-random sequence.

Returns

Estimated value of the contour integral.

source
QInchworm.qmc_integrate.contour_integral_n_samplesFunction
contour_integral_n_samples(
     f,
     c::Keldysh.AbstractContour,
     dt::QInchworm.qmc_integrate.AbstractDomainTransform;
@@ -114,5 +114,5 @@
     seq,
     N_samples
 )
-

Compute a quasi Monte Carlo estimate of a contour integral over a $d$-dimensional domain $\mathscr{D}$.

Unlike contour_integral(), this function performs qMC summation until a given number of valid (non-nothing) samples of the integrand are taken.

Parameters

  • f: Integrand.
  • c: Time contour to integrate over.
  • dt: Domain transformation $[0, 1]^d \mapsto \mathscr{D}$.
  • init: Initial (zero) value of the integral.
  • seq: Quasi-random sequence generator.
  • N_samplex: Number of valid samples of the integrand to be taken.

Returns

  • Estimated value of the contour integral.
  • The total number of points taken from the quasi-random sequence.
source
  • 1Integration domain transformations based on product model functions are described in "Quantum Quasi-Monte Carlo Technique for Many-Body Perturbative Expansions", M. Maček, P. T. Dumitrescu, C. Bertrand, B.Triggs, O. Parcollet, and X. Waintal, Phys. Rev. Lett. 125, 047702 (2020).
  • 2Integration domain transformations Sort and Root are defined in "Transforming low-discrepancy sequences from a cube to a simplex", T. Pillards and R. Cools, J. Comput. Appl. Math. 174, 29 (2005).
+

Compute a quasi Monte Carlo estimate of a contour integral over a $d$-dimensional domain $\mathscr{D}$.

Unlike contour_integral(), this function performs qMC summation until a given number of valid (non-nothing) samples of the integrand are taken.

Parameters

Returns

source
  • 1Integration domain transformations based on product model functions are described in "Quantum Quasi-Monte Carlo Technique for Many-Body Perturbative Expansions", M. Maček, P. T. Dumitrescu, C. Bertrand, B.Triggs, O. Parcollet, and X. Waintal, Phys. Rev. Lett. 125, 047702 (2020).
  • 2Integration domain transformations Sort and Root are defined in "Transforming low-discrepancy sequences from a cube to a simplex", T. Pillards and R. Cools, J. Comput. Appl. Math. 174, 29 (2005).
diff --git a/modules/randomization/index.html b/modules/randomization/index.html index 836662d..15d7b3e 100644 --- a/modules/randomization/index.html +++ b/modules/randomization/index.html @@ -1,8 +1,8 @@ -QInchworm.randomization · QInchworm.jl

QInchworm.randomization

QInchworm.randomization.mean_std_from_randomizationFunction
mean_std_from_randomization(
+QInchworm.randomization · QInchworm.jl

QInchworm.randomization

QInchworm.randomization.mean_std_from_randomizationFunction
mean_std_from_randomization(
     f::Function,
     D::Int64,
     params::QInchworm.randomization.RandomizationParams;
     seq_type
 ) -> Tuple{Any, Any}
-

Estimate mean and standard deviation using randomized quasi Monte Carlo.

This function initializes a number of D-dimensional scrambled Sobol sequences using the set of parameters params and passes each of them to the function f. It returns the mean and the standard deviation of f's return values.

A different sequence type can be specified using the seq_type argument, provided its constructor has the same signature as ScrambledSobolSeq.

source
+

Estimate mean and standard deviation using randomized quasi Monte Carlo.

This function initializes a number of D-dimensional scrambled Sobol sequences using the set of parameters params and passes each of them to the function f. It returns the mean and the standard deviation of f's return values.

A different sequence type can be specified using the seq_type argument, provided its constructor has the same signature as ScrambledSobolSeq.

source
diff --git a/modules/scrambled_sobol/index.html b/modules/scrambled_sobol/index.html index e1fba90..d28c8dd 100644 --- a/modules/scrambled_sobol/index.html +++ b/modules/scrambled_sobol/index.html @@ -1,47 +1,47 @@ -QInchworm.scrambled_sobol · QInchworm.jl

QInchworm.scrambled_sobol

QInchworm.scrambled_sobolModule

This module contains a modified and extended version of Sobol.jl's code written by Steven G. Johnson.

The extensions include those mentioned in Sobol.jl issue #31.

  • Support for scrambled Sobol points (implementation of the scrambling is taken from SciPy).
  • Inclusion of the initial point in the Sobol sequence.
  • skip!(... ; exact=false) now skips $2^m$ points.
source
QInchworm.scrambled_sobol.ScrambledSobolSeqType
mutable struct ScrambledSobolSeq{D}

Scrambled Sobol low-discrepancy sequence of dimension D.

Fields

  • m::Matrix{UInt32}: Direction numbers, array of size (D, 32)

  • x::Vector{UInt32}: Previous sequence point $x = x_n$, array of length D

  • n::UInt32: Number of sequence points generated so far

source
QInchworm.scrambled_sobol.ScrambledSobolSeqMethod
ScrambledSobolSeq(
+QInchworm.scrambled_sobol · QInchworm.jl

QInchworm.scrambled_sobol

QInchworm.scrambled_sobolModule

This module contains a modified and extended version of Sobol.jl's code written by Steven G. Johnson.

The extensions include those mentioned in Sobol.jl issue #31.

  • Support for scrambled Sobol points (implementation of the scrambling is taken from SciPy).
  • Inclusion of the initial point in the Sobol sequence.
  • skip!(... ; exact=false) now skips $2^m$ points.
source
QInchworm.scrambled_sobol.ScrambledSobolSeqType
mutable struct ScrambledSobolSeq{D}

Scrambled Sobol low-discrepancy sequence of dimension D.

Fields

  • m::Matrix{UInt32}: Direction numbers, array of size (D, 32)

  • x::Vector{UInt32}: Previous sequence point $x = x_n$, array of length D

  • n::UInt32: Number of sequence points generated so far

source
QInchworm.scrambled_sobol.ScrambledSobolSeqMethod
ScrambledSobolSeq(
     D::Int64;
     scramble_rng
 ) -> QInchworm.scrambled_sobol.ScrambledSobolSeq
-

Create a scrambled Sobol sequence of dimension D using the Random Number Generator scramble_rng to generate scrambling parameters. The sequence remains unscrambled if no RNG is provided.

source
Base.ndimsMethod
ndims(
+

Create a scrambled Sobol sequence of dimension D using the Random Number Generator scramble_rng to generate scrambling parameters. The sequence remains unscrambled if no RNG is provided.

source
Base.ndimsMethod
ndims(
     s::QInchworm.scrambled_sobol.ScrambledSobolSeq{D}
 ) -> Int64
-

Dimension D of a scrambled Sobol sequence.

source
ndims(s::QInchworm.utility.RandomSeq{RNG, D}) -> Int64
-

Dimension D of a random sequence.

source
ndims(
+

Dimension D of a scrambled Sobol sequence.

source
ndims(s::QInchworm.utility.RandomSeq{RNG, D}) -> Int64
+

Dimension D of a random sequence.

source
ndims(
     _::QInchworm.qmc_integrate.AbstractDomainTransform{D}
 ) -> Any
-

Return the number of dimensions $d$ of a domain transformation $[0, 1]^d \mapsto \mathscr{D}$.

source
QInchworm.scrambled_sobol.next!Function
next!(
     s::QInchworm.scrambled_sobol.ScrambledSobolSeq,
     x::AbstractVector{<:AbstractFloat}
 ) -> AbstractVector{<:AbstractFloat}
-

Generate the next point $\mathbf{x}\in[0, 1]^D$ of the sequence s and write it into the array x.

source
next!(
+

Generate the next point $\mathbf{x}\in[0, 1]^D$ of the sequence s and write it into the array x.

source
next!(
     s::QInchworm.scrambled_sobol.ScrambledSobolSeq
 ) -> Vector{Float64}
-

Generate and return the next point $\mathbf{x}\in[0, 1]^D$ of the sequence s.

source
next!(
+

Generate and return the next point $\mathbf{x}\in[0, 1]^D$ of the sequence s.

source
next!(
     s::QInchworm.utility.RandomSeq,
     x::AbstractVector{<:AbstractFloat}
 ) -> AbstractVector{<:AbstractFloat}
-

Generate the next point $\mathbf{x}\in[0, 1)^D$ of the random sequence s and write it into the array x.

source
next!(s::QInchworm.utility.RandomSeq) -> Vector{Float64}
-

Generate and return the next point $\mathbf{x}\in[0, 1)^D$ of the sequence s.

source
QInchworm.scrambled_sobol.skip!Function
skip!(
+

Generate the next point $\mathbf{x}\in[0, 1)^D$ of the random sequence s and write it into the array x.

source
next!(s::QInchworm.utility.RandomSeq) -> Vector{Float64}
+

Generate and return the next point $\mathbf{x}\in[0, 1)^D$ of the sequence s.

source
QInchworm.scrambled_sobol.skip!Function
skip!(
     s::QInchworm.scrambled_sobol.ScrambledSobolSeq,
     n::Integer,
     x;
     exact
 ) -> QInchworm.scrambled_sobol.ScrambledSobolSeq
-

Skip a number of points in the sequence s using a preallocated buffer x.

  • skip!(s, n, x) skips the next $2^m$ points such that $2^m < n \leq 2^{m+1}$.
  • skip!(s, n, x, exact=true) skips the next $n$ points.
source
skip!(
+

Skip a number of points in the sequence s using a preallocated buffer x.

  • skip!(s, n, x) skips the next $2^m$ points such that $2^m < n \leq 2^{m+1}$.
  • skip!(s, n, x, exact=true) skips the next $n$ points.
source
skip!(
     s::QInchworm.scrambled_sobol.ScrambledSobolSeq,
     n::Integer;
     exact
 ) -> QInchworm.scrambled_sobol.ScrambledSobolSeq
-

Skip a number of points in the sequence s.

  • skip!(s, n) skips the next $2^m$ points such that $2^m < n \leq 2^{m+1}$.
  • skip!(s, n, exact=true) skips the next $n$ points.
source
skip!(
+

Skip a number of points in the sequence s.

  • skip!(s, n) skips the next $2^m$ points such that $2^m < n \leq 2^{m+1}$.
  • skip!(s, n, exact=true) skips the next $n$ points.
source
skip!(
     s::QInchworm.utility.RandomSeq,
     n::Integer,
     x;
     exact
 ) -> QInchworm.utility.RandomSeq
-

Skip a number of points in the random sequence s using a preallocated buffer x.

  • skip!(s, n, x) skips the next $2^m$ points such that $2^m < n \leq 2^{m+1}$.
  • skip!(s, n, x, exact=true) skips the next $n$ points.
source
skip!(
+

Skip a number of points in the random sequence s using a preallocated buffer x.

  • skip!(s, n, x) skips the next $2^m$ points such that $2^m < n \leq 2^{m+1}$.
  • skip!(s, n, x, exact=true) skips the next $n$ points.
source
skip!(
     s::QInchworm.utility.RandomSeq,
     n::Integer;
     exact
 ) -> QInchworm.utility.RandomSeq
-

Skip a number of points in the random sequence s.

  • skip!(s, n) skips the next $2^m$ points such that $2^m < n \leq 2^{m+1}$.
  • skip!(s, n, exact=true) skips the next $n$ points.
source
+

Skip a number of points in the random sequence s.

  • skip!(s, n) skips the next $2^m$ points such that $2^m < n \leq 2^{m+1}$.
  • skip!(s, n, exact=true) skips the next $n$ points.
source
diff --git a/modules/sector_block_matrix/index.html b/modules/sector_block_matrix/index.html index 815ddcd..ea46d37 100644 --- a/modules/sector_block_matrix/index.html +++ b/modules/sector_block_matrix/index.html @@ -1,39 +1,39 @@ -QInchworm.sector_block_matrix · QInchworm.jl

QInchworm.sector_block_matrix

QInchworm.sector_block_matrixModule

Matrix representation of operators acting in a many-body Hilbert space partitioned into invariant subspaces (sectors) of a Hamiltonian.

source
QInchworm.sector_block_matrix.SectorBlockMatrixType

Complex block matrix stored as a dictionary of non-vanishing blocks.

Each element of the dictionary has the form right block index => (left block index, block).

Objects of this type support addition/subtraction, matrix multiplication and multiplication/division by a scalar.

source
QInchworm.sector_block_matrix.operator_to_sector_block_matrixFunction
operator_to_sector_block_matrix(
+QInchworm.sector_block_matrix · QInchworm.jl

QInchworm.sector_block_matrix

QInchworm.sector_block_matrixModule

Matrix representation of operators acting in a many-body Hilbert space partitioned into invariant subspaces (sectors) of a Hamiltonian.

source
QInchworm.sector_block_matrix.SectorBlockMatrixType

Complex block matrix stored as a dictionary of non-vanishing blocks.

Each element of the dictionary has the form right block index => (left block index, block). A block matrix represented by this type is allowed to have at most one non-vanishing block per column.

Objects of this type support addition/subtraction, matrix multiplication and multiplication/division by a scalar.

source
Base.zerosMethod
zeros(
+

Return the SectorBlockMatrix representation of a many-body operator op acting in the Hilbert space of the exact diagonalization problem ed.

source
Base.zerosMethod
zeros(
     _::Type{Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}},
     ed::KeldyshED.EDCore
 ) -> Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}
-

Construct a block-diagonal SectorBlockMatrix, whose block structure is consistent with the invariant subspace partition of a given exact diagonalization object ed. All matrix elements of the stored blocks are set to zero.

source
Base.zeroMethod
zero(
+

Construct a block-diagonal SectorBlockMatrix, whose block structure is consistent with the invariant subspace partition of a given exact diagonalization object ed. All matrix elements of the stored blocks are set to zero.

source
Base.zeroMethod
zero(
     A::Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}
 ) -> Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}
-

Construct a SectorBlockMatrix that shares the list of stored blocks with another matrix A but has all those blocks set to zero.

source
LinearAlgebra.normFunction
norm(
     A::Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}
 ) -> Any
 norm(
     A::Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}},
     p::Real
 ) -> Any
-

p-norm of a SectorBlockMatrix A.

source
Statistics.varMethod
var(
     itr::AbstractArray{Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}};
     corrected,
     mean
 ) -> Any
-

Compute the sample variance of collection of SectorBlockMatrix itr.

If corrected is true, then the sum is scaled with n-1, whereas the sum is scaled with n if corrected is false where n is the number of elements in itr. A pre-computed mean may be provided.

source
Statistics.stdMethod
std(
+

Compute the sample variance of collection of SectorBlockMatrix itr.

If corrected is true, then the sum is scaled with n-1, whereas the sum is scaled with n if corrected is false where n is the number of elements in itr. A pre-computed mean may be provided.

source
Statistics.stdMethod
std(
     itr::AbstractArray{Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}};
     corrected,
     mean
 ) -> Dict
-

Compute the sample standard deviation of collection itr.

If corrected is true, then the sum is scaled with n-1, whereas the sum is scaled with n if corrected is false where n is the number of elements in itr. A pre-computed mean may be provided.

source
Base.isapproxMethod
isapprox(
+

Compute the sample standard deviation of collection itr.

If corrected is true, then the sum is scaled with n-1, whereas the sum is scaled with n if corrected is false where n is the number of elements in itr. A pre-computed mean may be provided.

source
Base.isapproxMethod
isapprox(
     A::Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}},
     B::Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}};
     atol
 ) -> Bool
-

Inexact equality comparison of two SectorBlockMatrix objects A and B. Block structures of the objects must agree. atol specifies the absolute tolerance for the single element comparison (zero by default).

source
+

Inexact equality comparison of two SectorBlockMatrix objects A and B. Block structures of the objects must agree. atol specifies the absolute tolerance for the single element comparison (zero by default).

source
diff --git a/modules/spline_gf/index.html b/modules/spline_gf/index.html index afa88e9..237b4f2 100644 --- a/modules/spline_gf/index.html +++ b/modules/spline_gf/index.html @@ -1,62 +1,62 @@ -QInchworm.spline_gf · QInchworm.jl

QInchworm.spline_gf

SplineInterpolatedGF

QInchworm.spline_gf.make_interpolantMethod
make_interpolant(
+QInchworm.spline_gf · QInchworm.jl

QInchworm.spline_gf

SplineInterpolatedGF

QInchworm.spline_gf.make_interpolantMethod
make_interpolant(
     GF::Keldysh.ImaginaryTimeGF{T<:Number, scalar},
     k,
     l,
     τ_max::Keldysh.TimeGridPoint
 ) -> Interpolations.ScaledInterpolation{_A, 1, Interpolations.BSplineInterpolation{T, N, TCoefs, IT, Axs}, Interpolations.BSpline{Interpolations.Cubic{Interpolations.Line{Interpolations.OnGrid}}}, <:Tuple{LinRange{T, Int64} where T}} where {_A, T, N, TCoefs<:AbstractArray, IT<:Union{Interpolations.NoInterp, Tuple{Vararg{Union{Interpolations.NoInterp, Interpolations.BSpline}}}, Interpolations.BSpline}, Axs<:Tuple{Vararg{AbstractUnitRange, N}}}
-

Make a cubic B-spline interpolant from GF's data corresponding to its matrix indices k, l. Data points from the start of the grid up to τ_max are used.

source
QInchworm.spline_gf.update_interpolant!Method
update_interpolant!(
+

Make a cubic B-spline interpolant from GF's data corresponding to its matrix indices k, l. Data points from the start of the grid up to τ_max are used.

source
QInchworm.spline_gf.update_interpolant!Method
update_interpolant!(
     G_int::QInchworm.spline_gf.SplineInterpolatedGF{Keldysh.ImaginaryTimeGF{T<:Number, scalar}, T<:Number, scalar},
     k,
     l;
     τ_max
 ) -> Interpolations.ScaledInterpolation{_A, 1, Interpolations.BSplineInterpolation{T, N, TCoefs, IT, Axs}, Interpolations.BSpline{Interpolations.Cubic{Interpolations.Line{Interpolations.OnGrid}}}, <:Tuple{LinRange{T, Int64} where T}} where {_A, T, N, TCoefs<:AbstractArray, IT<:Union{Interpolations.NoInterp, Tuple{Vararg{Union{Interpolations.NoInterp, Interpolations.BSpline}}}, Interpolations.BSpline}, Axs<:Tuple{Vararg{AbstractUnitRange, N}}}
-

Update the interpolant stored in G_int and corresponding to its matrix indices k, l. The updated interpolant interpolates data points of G_int.GF from the start of the grid up to τ_max. By default, the entire data array is used.

source
QInchworm.spline_gf.update_interpolants!Method
update_interpolants!(
+

Update the interpolant stored in G_int and corresponding to its matrix indices k, l. The updated interpolant interpolates data points of G_int.GF from the start of the grid up to τ_max. By default, the entire data array is used.

source
QInchworm.spline_gf.update_interpolants!Method
update_interpolants!(
     G_int::QInchworm.spline_gf.SplineInterpolatedGF{Keldysh.ImaginaryTimeGF{T<:Number, scalar}, T<:Number, scalar};
     τ_max
 )
-

Update all interpolants stored in G_int. The updated interpolants interpolate data points of G_int.GF from the start of the grid up to τ_max. By default, the entire data array is used.

source
Interpolations.interpolateMethod
interpolate(
+

Update all interpolants stored in G_int. The updated interpolants interpolate data points of G_int.GF from the start of the grid up to τ_max. By default, the entire data array is used.

source
Interpolations.interpolateMethod
interpolate(
     G_int::QInchworm.spline_gf.SplineInterpolatedGF{Keldysh.ImaginaryTimeGF{T, true}, T, true},
     t1::Keldysh.BranchPoint,
     t2::Keldysh.BranchPoint
 ) -> Any
-

Evaluate the spline-interpolated Green's function G_int at the contour time arguments t1, t2.

source
Interpolations.interpolateMethod
interpolate(
     G_int::QInchworm.spline_gf.SplineInterpolatedGF{Keldysh.ImaginaryTimeGF{T, false}, T, false},
     t1::Keldysh.BranchPoint,
     t2::Keldysh.BranchPoint
 ) -> Any
-

Evaluate the spline-interpolated Green's function G_int at the contour time arguments t1, t2.

source

IncSplineImaginaryTimeGF

QInchworm.spline_gf.IncSplineImaginaryTimeGFType
struct IncSplineImaginaryTimeGF{T, scalar} <: Keldysh.AbstractTimeGF{T, scalar}

Wrapper around an imaginary time Green's function object that supports interpolation based on the IncrementalSpline.

The wrapper supports square bracket access to the wrapped object, direct access to the grid property, eltype(), Keldysh.norbitals() and Keldysh.TimeDomain(). Evaluation at an arbitrary imaginary time point (via operator ()) is carried out by a stored set of pre-computed IncrementalSpline interpolants.

Fields

  • GF::Keldysh.ImaginaryTimeGF: Wrapped Green's function

  • interpolants::Any: Incremental spline interpolants, one object per matrix element of GF

source

IncSplineImaginaryTimeGF

QInchworm.spline_gf.IncSplineImaginaryTimeGFType
struct IncSplineImaginaryTimeGF{T, scalar} <: Keldysh.AbstractTimeGF{T, scalar}

Wrapper around an imaginary time Green's function object that supports interpolation based on the IncrementalSpline.

The wrapper supports square bracket access to the wrapped object, direct access to the grid property, eltype(), Keldysh.norbitals() and Keldysh.TimeDomain(). Evaluation at an arbitrary imaginary time point (via operator ()) is carried out by a stored set of pre-computed IncrementalSpline interpolants.

Fields

  • GF::Keldysh.ImaginaryTimeGF: Wrapped Green's function

  • interpolants::Any: Incremental spline interpolants, one object per matrix element of GF

source
QInchworm.spline_gf.IncSplineImaginaryTimeGFMethod
IncSplineImaginaryTimeGF(
     GF::Keldysh.ImaginaryTimeGF{T<:Number, true},
     derivative_at_0::Number
 ) -> QInchworm.spline_gf.IncSplineImaginaryTimeGF{T, true} where T<:Number
-

Make a IncSplineImaginaryTimeGF wrapper around a scalar-valued GF and initialize incremental interpolants of its data. derivative_at_0 is imaginary time derivative of GF at $\tau=0$ needed to compute the first segment of the interpolants.

source
QInchworm.spline_gf.IncSplineImaginaryTimeGFMethod
IncSplineImaginaryTimeGF(
     GF::Keldysh.ImaginaryTimeGF{T<:Number, false},
     derivative_at_0::Array{T<:Number, 2}
 ) -> QInchworm.spline_gf.IncSplineImaginaryTimeGF{T, false} where T<:Number
-

Make a IncSplineImaginaryTimeGF wrapper around a matrix-valued GF and initialize incremental interpolants of its data. derivative_at_0 is imaginary time derivative of GF at $\tau=0$ needed to compute the first segment of the interpolants.

source
QInchworm.spline_gf.make_inc_interpolantMethod
make_inc_interpolant(
     GF::Keldysh.ImaginaryTimeGF{T<:Number, scalar},
     k,
     l,
     derivative_at_0::Number
 ) -> QInchworm.utility.IncrementalSpline
-

Make an incremental spline interpolant from GF's data and corresponding to its matrix indices k, l. derivative_at_0 is imaginary time derivative of GF[k, l] at $\tau=0$ needed to compute the first segment of the interpolant.

source
Base.zeroMethod
zero(
+

Make an incremental spline interpolant from GF's data and corresponding to its matrix indices k, l. derivative_at_0 is imaginary time derivative of GF[k, l] at $\tau=0$ needed to compute the first segment of the interpolant.

source
Base.zeroMethod
zero(
     G_int::QInchworm.spline_gf.IncSplineImaginaryTimeGF{T<:Number, false}
 ) -> QInchworm.spline_gf.IncSplineImaginaryTimeGF
-

Make a zero matrix-valued IncSplineImaginaryTimeGF object similar to G_int.

source
Base.zeroMethod
zero(
     G_int::QInchworm.spline_gf.IncSplineImaginaryTimeGF{T<:Number, true}
 ) -> QInchworm.spline_gf.IncSplineImaginaryTimeGF
-

Make a zero scalar-valued IncSplineImaginaryTimeGF object similar to G_int.

source
Interpolations.interpolateMethod
interpolate(
     G_int::QInchworm.spline_gf.IncSplineImaginaryTimeGF{T, true},
     τ1::Keldysh.BranchPoint,
     τ2::Keldysh.BranchPoint
 ) -> Any
-

Evaluate the spline-interpolated scalar-valued Green's function G_int at the imaginary time arguments τ1, τ2.

source
Interpolations.interpolateMethod
interpolate(
+

Evaluate the spline-interpolated scalar-valued Green's function G_int at the imaginary time arguments τ1, τ2.

source
Interpolations.interpolateMethod
interpolate(
     G_int::QInchworm.spline_gf.IncSplineImaginaryTimeGF{T, false},
     τ1::Keldysh.BranchPoint,
     τ2::Keldysh.BranchPoint
 ) -> Any
-

Evaluate the spline-interpolated matrix-valued Green's function G_int at the imaginary time arguments τ1, τ2.

source
+

Evaluate the spline-interpolated matrix-valued Green's function G_int at the imaginary time arguments τ1, τ2.

source
diff --git a/modules/topology_eval/index.html b/modules/topology_eval/index.html index 84f97ed..f455f1b 100644 --- a/modules/topology_eval/index.html +++ b/modules/topology_eval/index.html @@ -1,30 +1,30 @@ -QInchworm.topology_eval · QInchworm.jl

QInchworm.topology_eval

QInchworm.topology_eval.NodeKindType
primitive type NodeKind <: Enum{Int32} 32

Node kind classification using @enum.

Possible values: pair_flag, identity_flag, inch_flag, operator_flag.

source
QInchworm.topology_eval.NodeType
struct Node

Node in the atomic propagator backbone of a strong-coupling diagram.

Fields

  • kind::QInchworm.topology_eval.NodeKind: Kind of the node

  • arc_index::Int64: Index for pair interaction arc

  • operator_index::Int64: Index of operator

source
QInchworm.topology_eval.FixedNodeType
struct FixedNode

Node in the atomic propagator backbone of a strong-coupling diagram fixed at a certain contour time point.

Fields

  • node::QInchworm.topology_eval.Node: Reference to operator

  • time::Keldysh.BranchPoint: Contour time point

source
QInchworm.topology_eval.PairNodeFunction
PairNode(
+QInchworm.topology_eval · QInchworm.jl

QInchworm.topology_eval

QInchworm.topology_eval.NodeKindType
primitive type NodeKind <: Enum{Int32} 32

Node kind classification using @enum.

Possible values: pair_flag, identity_flag, inch_flag, operator_flag.

source
QInchworm.topology_eval.NodeType
struct Node

Node in the atomic propagator backbone of a strong-coupling diagram.

Fields

  • kind::QInchworm.topology_eval.NodeKind: Kind of the node

  • arc_index::Int64: Index for pair interaction arc

  • operator_index::Int64: Index of operator

source
QInchworm.topology_eval.FixedNodeType
struct FixedNode

Node in the atomic propagator backbone of a strong-coupling diagram fixed at a certain contour time point.

Fields

  • node::QInchworm.topology_eval.Node: Reference to operator

  • time::Keldysh.BranchPoint: Contour time point

source
QInchworm.topology_eval.PairNodeFunction
PairNode(
     time::Keldysh.BranchPoint
 ) -> QInchworm.topology_eval.FixedNode
-

Return a node that serves as an end of a pair interaction arc fixed at time time.

source
QInchworm.topology_eval.InchNodeFunction
InchNode(
     time::Keldysh.BranchPoint
 ) -> QInchworm.topology_eval.FixedNode
-

Return a fixed 'inch' node at time time with an associated identity operator.

source
QInchworm.topology_eval.OperatorNodeFunction
OperatorNode(
     time::Keldysh.BranchPoint,
     operator_pair_index::Int64,
     operator_index::Int64
 ) -> QInchworm.topology_eval.FixedNode
-

Return a fixed operator node at time time with an associated operator. The actual operator is stored in an Expansion structure and is uniquely identified by the pair (operator_pair_index, operator_index).

source
QInchworm.topology_eval.TopologyEvaluatorType
struct TopologyEvaluator

The evaluation engine for the strong-coupling expansion diagrams.

In the following, a sequence of Node's contributing to a diagram of a certain topology is referred to as 'configuration'.

Fields

  • exp::QInchworm.expansion.Expansion: Pseudo-particle expansion problem

  • conf::Vector{QInchworm.topology_eval.Node}: Configuration as a list of nodes arranged in the contour order

  • times::Vector{Keldysh.BranchPoint}: Contour positions of nodes in the configuration

  • top_to_conf_pos::Vector{Int64}: Correspondence of node positions within a topology and a configuration

  • var_time_pos::Vector{Int64}: Positions of variable time (non-fixed) nodes within a configuration

  • use_bold_prop::Bool: Must the bold PPGFs be used?

  • ppgf_mats::Matrix{Matrix{ComplexF64}}: PPGFs evaluated at all relevant pairs of time arguments. ppgf_mats[i, s] is the s-th diagonal block of exp.P (or exp.P0) evaluated at the pair of time points $(t_{i+1}, t_i)$.

  • pair_ints::Matrix{ComplexF64}: Pair interaction arcs evaluated at all relevant pairs of time arguments.

    pair_ints[a, p] is the propagator from exp.pairs[p] evaluated at the pair of time points corresponding to the a-th arc in a topology.

  • selected_pair_ints::Vector{Int64}: Indices of pair interactions within exp.pairs assigned to each interaction arc in a topology.
  • top_result_mats::Vector{Matrix{ComplexF64}}: Pre-allocated container for per-topology evaluation results

  • matrix_prod::QInchworm.utility.LazyMatrixProduct{ComplexF64}: Pre-allocated matrix product evaluator

  • tmr::TimerOutputs.TimerOutput: Internal performance timer

source
QInchworm.topology_eval.TopologyEvaluatorMethod
TopologyEvaluator(
+

Return a fixed operator node at time time with an associated operator. The actual operator is stored in an Expansion structure and is uniquely identified by the pair (operator_pair_index, operator_index).

source
QInchworm.topology_eval.TopologyEvaluatorType
struct TopologyEvaluator

The evaluation engine for the strong-coupling expansion diagrams.

In the following, a sequence of Node's contributing to a diagram of a certain topology is referred to as 'configuration'.

Fields

  • exp::QInchworm.expansion.Expansion: Pseudo-particle expansion problem

  • conf::Vector{QInchworm.topology_eval.Node}: Configuration as a list of nodes arranged in the contour order

  • times::Vector{Keldysh.BranchPoint}: Contour positions of nodes in the configuration

  • top_to_conf_pos::Vector{Int64}: Correspondence of node positions within a topology and a configuration

  • var_time_pos::Vector{Int64}: Positions of variable time (non-fixed) nodes within a configuration

  • use_bold_prop::Bool: Must the bold PPGFs be used?

  • ppgf_mats::Matrix{Matrix{ComplexF64}}: PPGFs evaluated at all relevant pairs of time arguments. ppgf_mats[i, s] is the s-th diagonal block of exp.P (or exp.P0) evaluated at the pair of time points $(t_{i+1}, t_i)$.

  • pair_ints::Matrix{ComplexF64}: Pair interaction arcs evaluated at all relevant pairs of time arguments.

    pair_ints[a, p] is the propagator from exp.pairs[p] evaluated at the pair of time points corresponding to the a-th arc in a topology.

  • selected_pair_ints::Vector{Int64}: Indices of pair interactions within exp.pairs assigned to each interaction arc in a topology.
  • top_result_mats::Vector{Matrix{ComplexF64}}: Pre-allocated container for per-topology evaluation results

  • matrix_prod::QInchworm.utility.LazyMatrixProduct{ComplexF64}: Pre-allocated matrix product evaluator

  • tmr::TimerOutputs.TimerOutput: Internal performance timer

source
QInchworm.topology_eval.TopologyEvaluatorMethod
TopologyEvaluator(
     exp::QInchworm.expansion.Expansion,
     order::Int64,
     use_bold_prop::Bool,
     fixed_nodes::Dict{Int64, QInchworm.topology_eval.FixedNode};
     tmr
 ) -> QInchworm.topology_eval.TopologyEvaluator
-

Parameters

  • exp: Strong-coupling expansion problem.
  • order: Expansion order of the diagrams (the number of interaction arcs).
  • use_bold_prop: Must the bold PPGFs be used in the diagrams?
  • fixed_nodes: List of fixed nodes in a configuration along with their positions.
  • tmr: Internal performance timer.
source
QInchworm.topology_eval._traverse_configuration_tree!Function
_traverse_configuration_tree!(
+

Parameters

  • exp: Strong-coupling expansion problem.
  • order: Expansion order of the diagrams (the number of interaction arcs).
  • use_bold_prop: Must the bold PPGFs be used in the diagrams?
  • fixed_nodes: List of fixed nodes in a configuration along with their positions.
  • tmr: Internal performance timer.
source
QInchworm.topology_eval._traverse_configuration_tree!Function
_traverse_configuration_tree!(
     eval::QInchworm.topology_eval.TopologyEvaluator,
     pos::Int64,
     s_i::Int64,
     s_f::Int64,
     pair_int_weight::ComplexF64
 )
-

Recursively traverse a tree of all configurations stemming from a given topology and contributing to the quantity of interest. The result is accumulated in eval.top_result_mats.

Parameters

  • eval: Evaluator object.
  • pos: Position of the currently processed Node in the configuration.
  • s_i: Left block index of the matrix representation of the current node.
  • s_f: Right block index expected at the final node.
  • pair_int_weight: Current weight of the pair interaction contribution.
source
+

Recursively traverse a tree of all configurations stemming from a given topology and contributing to the quantity of interest. The result is accumulated in eval.top_result_mats.

Parameters

  • eval: Evaluator object.
  • pos: Position of the currently processed Node in the configuration.
  • s_i: Left block index of the matrix representation of the current node.
  • s_f: Right block index expected at the final node.
  • pair_int_weight: Current weight of the pair interaction contribution.
source
diff --git a/modules/utility/index.html b/modules/utility/index.html index 9fb21f3..7909f76 100644 --- a/modules/utility/index.html +++ b/modules/utility/index.html @@ -1,38 +1,38 @@ -QInchworm.utility · QInchworm.jl

QInchworm.utility

Interpolations.jl addon: Neumann boundary conditions for the cubic spline

QInchworm.utility.NeumannBCType
struct NeumannBC{GT<:Union{Nothing, Interpolations.GridType}, T<:Number} <: Interpolations.BoundaryCondition

Interpolations.jl addon: Implementation of the Neumann boundary conditions for the cubic spline.

Fields

  • gt::Union{Nothing, Interpolations.GridType}: Grid type

  • left_derivative::Number: Function derivative at the left boundary

  • right_derivative::Number: Function derivative at the right boundary

source
Interpolations.prefiltering_systemMethod
prefiltering_system(
+QInchworm.utility · QInchworm.jl

QInchworm.utility

Interpolations.jl addon: Neumann boundary conditions for the cubic spline

QInchworm.utility.NeumannBCType
struct NeumannBC{GT<:Union{Nothing, Interpolations.GridType}, T<:Number} <: Interpolations.BoundaryCondition

Interpolations.jl addon: Implementation of the Neumann boundary conditions for the cubic spline.

Fields

  • gt::Union{Nothing, Interpolations.GridType}: Grid type

  • left_derivative::Number: Function derivative at the left boundary

  • right_derivative::Number: Function derivative at the right boundary

source
Interpolations.prefiltering_systemMethod
prefiltering_system(
     _::Type{T},
     _::Type{TC},
     n::Int64,
     degree::Interpolations.Cubic{BC<:(QInchworm.utility.NeumannBC{Interpolations.OnGrid})}
 ) -> Tuple{WoodburyMatrices.Woodbury{_A, LinearAlgebra.LU{T, S, P}, SparseArrays.SparseMatrixCSC{Tv, Int64}, SparseArrays.SparseMatrixCSC{Tv1, Int64}, Matrix{_A1}} where {_A, T, S<:(LinearAlgebra.Tridiagonal{T, _B} where _B), P<:(AbstractVector{<:Integer}), Tv, Tv1, _A1}, Vector}
-

Compute the system used to prefilter cubic spline coefficients when using the Neumann boundary conditions.

Parameters

  • T, TC: Element types.
  • n: The number of rows in the data input.
  • degree: Interpolation degree information.

Returns

Woodbury matrix and the RHS of the computed system.

source

Quadratic spline that allows for incremental construction

QInchworm.utility.IncrementalSplineType
struct IncrementalSpline{KnotT<:Number, T<:Number}

Quadratic spline on an equidistant grid that allows for incremental construction.

Fields

  • knots::AbstractRange{KnotT} where KnotT<:Number: Locations of interpolation knots

  • data::Vector{T} where T<:Number: Values of the interpolated function at the knots

  • der_data::Vector{T} where T<:Number: Values of the interpolated function derivative at the knots

source
QInchworm.utility.extend!Function
extend!(
+

Compute the system used to prefilter cubic spline coefficients when using the Neumann boundary conditions.

Parameters

  • T, TC: Element types.
  • n: The number of rows in the data input.
  • degree: Interpolation degree information.

Returns

Woodbury matrix and the RHS of the computed system.

source

Quadratic spline that allows for incremental construction

QInchworm.utility.IncrementalSplineType
struct IncrementalSpline{KnotT<:Number, T<:Number}

Quadratic spline on an equidistant grid that allows for incremental construction.

Fields

  • knots::AbstractRange{KnotT} where KnotT<:Number: Locations of interpolation knots

  • data::Vector{T} where T<:Number: Values of the interpolated function at the knots

  • der_data::Vector{T} where T<:Number: Values of the interpolated function derivative at the knots

source
QInchworm.utility.extend!Function
extend!(
     G_int::QInchworm.spline_gf.IncSplineImaginaryTimeGF,
     val
 ) -> Any
-

Extend the underlying IncrementalSpline objects stored in G_int with a value val.

source
extend!(
+

Extend the underlying IncrementalSpline objects stored in G_int with a value val.

source
extend!(
     spline::QInchworm.utility.IncrementalSpline,
     val
 ) -> Vector{T} where T<:Number
-

Add a segment to an incremental spline by fixing value val of the interpolated function at the next knot.

source

Lazy matrix product

QInchworm.utility.LazyMatrixProductType
mutable struct LazyMatrixProduct{T<:Number}

A matrix product of the form $A_N A_{N-1} \ldots A_1$.

Functions pushfirst!() and popfirst!() can be used to add and remove multipliers to/from the left of the product. The product is lazy in the sense that the actual multiplication takes place only when the eval!() function is called. The structure keeps track of previously evaluated partial products and reuses them upon successive calls to eval!().

source
Base.pushfirst!Method
pushfirst!(
+

Add a segment to an incremental spline by fixing value val of the interpolated function at the next knot.

source

Lazy matrix product

QInchworm.utility.LazyMatrixProductType
mutable struct LazyMatrixProduct{T<:Number}

A matrix product of the form $A_N A_{N-1} \ldots A_1$.

Functions pushfirst!() and popfirst!() can be used to add and remove multipliers to/from the left of the product. The product is lazy in the sense that the actual multiplication takes place only when the eval!() function is called. The structure keeps track of previously evaluated partial products and reuses them upon successive calls to eval!().

source
Base.pushfirst!Method
pushfirst!(
     lmp::QInchworm.utility.LazyMatrixProduct{T<:Number},
     A::Array{T<:Number, 2}
 ) -> Matrix{T} where T<:Number
-

Add a new matrix A to the left of the product lmp.

source
Base.popfirst!Method
popfirst!(
     lmp::QInchworm.utility.LazyMatrixProduct{T<:Number}
 ) -> Int64
 popfirst!(
     lmp::QInchworm.utility.LazyMatrixProduct{T<:Number},
     n::Int64
 ) -> Int64
-

Remove n matrices from the left of the product lmp. By default, n = 1.

source
QInchworm.utility.eval!Method
eval!(
     lmp::QInchworm.utility.LazyMatrixProduct{T<:Number}
 ) -> Matrix{T} where T<:Number
-

Evaluate the matrix product lmp.

source

Random sequence

QInchworm.utility.seed!Function
seed!(s::QInchworm.utility.RandomSeq, seed)
-

Seed the underlying random number generator of the sequence s with a given integer.

source

Serialization using IOBuffer

Range partitioning utilities

Random sequence

QInchworm.utility.seed!Function
seed!(s::QInchworm.utility.RandomSeq, seed)
+

Seed the underlying random number generator of the sequence s with a given integer.

source

Serialization using IOBuffer

Range partitioning utilities

+

Given a list of chunk sizes, return the range that enumerates elements in the idx-th chunk.

source
diff --git a/search_index.js b/search_index.js index 0ff529f..b1eb8d1 100644 --- a/search_index.js +++ b/search_index.js @@ -1,3 +1,3 @@ var documenterSearchIndex = {"docs": -[{"location":"modules/sector_block_matrix/#QInchworm.sector_block_matrix","page":"QInchworm.sector_block_matrix","title":"QInchworm.sector_block_matrix","text":"","category":"section"},{"location":"modules/sector_block_matrix/","page":"QInchworm.sector_block_matrix","title":"QInchworm.sector_block_matrix","text":"CurrentModule = QInchworm.sector_block_matrix","category":"page"},{"location":"modules/sector_block_matrix/","page":"QInchworm.sector_block_matrix","title":"QInchworm.sector_block_matrix","text":"sector_block_matrix\nSectorBlockMatrix\noperator_to_sector_block_matrix\nBase.zeros(::Type{SectorBlockMatrix}, ::EDCore)\nBase.zero(::SectorBlockMatrix)\nBase.fill!(::SectorBlockMatrix, x)\nLinearAlgebra.tr(::SectorBlockMatrix)\nLinearAlgebra.norm(::SectorBlockMatrix, ::Real=2)\nStatistics.var(::AbstractArray{SectorBlockMatrix}; ::Bool, mean)\nStatistics.std(itr::AbstractArray{SectorBlockMatrix}; ::Bool, mean)\nBase.isapprox(::SectorBlockMatrix, ::SectorBlockMatrix; ::Real)","category":"page"},{"location":"modules/sector_block_matrix/#QInchworm.sector_block_matrix","page":"QInchworm.sector_block_matrix","title":"QInchworm.sector_block_matrix","text":"Matrix representation of operators acting in a many-body Hilbert space partitioned into invariant subspaces (sectors) of a Hamiltonian.\n\n\n\n\n\n","category":"module"},{"location":"modules/sector_block_matrix/#QInchworm.sector_block_matrix.SectorBlockMatrix","page":"QInchworm.sector_block_matrix","title":"QInchworm.sector_block_matrix.SectorBlockMatrix","text":"Complex block matrix stored as a dictionary of non-vanishing blocks.\n\nEach element of the dictionary has the form right block index => (left block index, block).\n\nObjects of this type support addition/subtraction, matrix multiplication and multiplication/division by a scalar.\n\n\n\n\n\n","category":"type"},{"location":"modules/sector_block_matrix/#QInchworm.sector_block_matrix.operator_to_sector_block_matrix","page":"QInchworm.sector_block_matrix","title":"QInchworm.sector_block_matrix.operator_to_sector_block_matrix","text":"operator_to_sector_block_matrix(\n ed::KeldyshED.EDCore,\n op::KeldyshED.Operators.OperatorExpr\n) -> Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}\n\n\nReturn the SectorBlockMatrix representation of a many-body operator op acting in the Hilbert space of the exact diagonalization problem ed.\n\n\n\n\n\n","category":"function"},{"location":"modules/sector_block_matrix/#Base.zeros-Tuple{Type{Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}}, KeldyshED.EDCore}","page":"QInchworm.sector_block_matrix","title":"Base.zeros","text":"zeros(\n _::Type{Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}},\n ed::KeldyshED.EDCore\n) -> Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}\n\n\nConstruct a block-diagonal SectorBlockMatrix, whose block structure is consistent with the invariant subspace partition of a given exact diagonalization object ed. All matrix elements of the stored blocks are set to zero.\n\n\n\n\n\n","category":"method"},{"location":"modules/sector_block_matrix/#Base.zero-Tuple{Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}}","page":"QInchworm.sector_block_matrix","title":"Base.zero","text":"zero(\n A::Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}\n) -> Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}\n\n\nConstruct a SectorBlockMatrix that shares the list of stored blocks with another matrix A but has all those blocks set to zero.\n\n\n\n\n\n","category":"method"},{"location":"modules/sector_block_matrix/#Base.fill!-Tuple{Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}, Any}","page":"QInchworm.sector_block_matrix","title":"Base.fill!","text":"fill!(A::Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}, x)\n\n\nSet elements of all stored blocks of a SectorBlockMatrix A to x.\n\n\n\n\n\n","category":"method"},{"location":"modules/sector_block_matrix/#LinearAlgebra.tr-Tuple{Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}}","page":"QInchworm.sector_block_matrix","title":"LinearAlgebra.tr","text":"tr(\n A::Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}\n) -> ComplexF64\n\n\nTrace of a SectorBlockMatrix A.\n\n\n\n\n\n","category":"method"},{"location":"modules/sector_block_matrix/#LinearAlgebra.norm","page":"QInchworm.sector_block_matrix","title":"LinearAlgebra.norm","text":"norm(\n A::Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}\n) -> Any\nnorm(\n A::Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}},\n p::Real\n) -> Any\n\n\np-norm of a SectorBlockMatrix A.\n\n\n\n\n\n","category":"function"},{"location":"modules/sector_block_matrix/#Statistics.var-Tuple{AbstractArray{Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}}}","page":"QInchworm.sector_block_matrix","title":"Statistics.var","text":"var(\n itr::AbstractArray{Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}};\n corrected,\n mean\n) -> Any\n\n\nCompute the sample variance of collection of SectorBlockMatrix itr.\n\nIf corrected is true, then the sum is scaled with n-1, whereas the sum is scaled with n if corrected is false where n is the number of elements in itr. A pre-computed mean may be provided.\n\n\n\n\n\n","category":"method"},{"location":"modules/sector_block_matrix/#Statistics.std-Tuple{AbstractArray{Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}}}","page":"QInchworm.sector_block_matrix","title":"Statistics.std","text":"std(\n itr::AbstractArray{Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}};\n corrected,\n mean\n) -> Dict\n\n\nCompute the sample standard deviation of collection itr.\n\nIf corrected is true, then the sum is scaled with n-1, whereas the sum is scaled with n if corrected is false where n is the number of elements in itr. A pre-computed mean may be provided.\n\n\n\n\n\n","category":"method"},{"location":"modules/sector_block_matrix/#Base.isapprox-Tuple{Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}, Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}}","page":"QInchworm.sector_block_matrix","title":"Base.isapprox","text":"isapprox(\n A::Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}},\n B::Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}};\n atol\n) -> Bool\n\n\nInexact equality comparison of two SectorBlockMatrix objects A and B. Block structures of the objects must agree. atol specifies the absolute tolerance for the single element comparison (zero by default).\n\n\n\n\n\n","category":"method"},{"location":"modules/diagrammatics/#QInchworm.diagrammatics","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics","text":"","category":"section"},{"location":"modules/diagrammatics/","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics","text":"CurrentModule = QInchworm.diagrammatics","category":"page"},{"location":"modules/diagrammatics/","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics","text":"diagrammatics\nTopology\nTopology(::PairVector)\nparity\nBase.isvalid(::Topology)\nsortpair\npop_pair\npair_partitions\niscrossing\nn_crossings\ntraverse_crossing_graph_dfs!\nis_k_connected\nsplit_k_connected\nis_doubly_k_connected\ncount_doubly_k_connected\nsplit_doubly_k_connected\ngenerate_topologies\ngenerate_topologies_impl\nget_topologies_at_order","category":"page"},{"location":"modules/diagrammatics/#QInchworm.diagrammatics","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics","text":"Strong coupling expansion diagrams and their topological properties.\n\n\n\n\n\n","category":"module"},{"location":"modules/diagrammatics/#QInchworm.diagrammatics.Topology","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics.Topology","text":"struct Topology\n\nDatatype for strong coupling diagram topology.\n\nA topology of order n consists of a partition of the tuple s = 12n into n pairs (pi(1) pi(2)) (pi(2n-1) pi(2n)) where pi is a permutation of s. Diagrammatically, a topology can be thought of as a set of arcs connecting vertices located at 12n. The parity of the topology is the sign of the permutation pi.\n\nFields\n\norder::Int64: Topology order n\npairs::Vector{Pair{Int64, Int64}}: List of pairs (pi(1) pi(2)) (pi(2n-1) pi(2n))\nparity::Int64: Parity of the permutation pi\n\n\n\n\n\n","category":"type"},{"location":"modules/diagrammatics/#QInchworm.diagrammatics.Topology-Tuple{Vector{Pair{Int64, Int64}}}","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics.Topology","text":"Topology(\n pairs::Vector{Pair{Int64, Int64}}\n) -> QInchworm.diagrammatics.Topology\n\n\nConstruct topology from a list of pairs.\n\n\n\n\n\n","category":"method"},{"location":"modules/diagrammatics/#QInchworm.diagrammatics.parity","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics.parity","text":"parity(top::QInchworm.diagrammatics.Topology) -> Int64\n\n\nReturns the parity of the topolgy.\n\n\n\n\n\n","category":"function"},{"location":"modules/diagrammatics/#Base.isvalid-Tuple{QInchworm.diagrammatics.Topology}","page":"QInchworm.diagrammatics","title":"Base.isvalid","text":"isvalid(t::QInchworm.diagrammatics.Topology) -> Bool\n\n\nCheck that topology is properly constructed, i.e. that its list of pairs is derived from a permutation of 1:2order and that the parity of the permutation is correct.\n\n\n\n\n\n","category":"method"},{"location":"modules/diagrammatics/#QInchworm.diagrammatics.sortpair","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics.sortpair","text":"sortpair(p::Pair{T, T}) -> Pair\n\n\nGiven a pair, return its version with the smallest element coming first.\n\n\n\n\n\n","category":"function"},{"location":"modules/diagrammatics/#QInchworm.diagrammatics.pop_pair","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics.pop_pair","text":"pop_pair(v::Vector, i, j) -> Tuple{Pair, Vector}\n\n\nReturn the pair v[i] => v[j] and a copy of the vector v with elements i, j removed.\n\n\n\n\n\n","category":"function"},{"location":"modules/diagrammatics/#QInchworm.diagrammatics.pair_partitions","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics.pair_partitions","text":"pair_partitions(\n pairs::Vector{Pair{Int64, Int64}},\n unpaired::Vector{Int64}\n) -> Vector{Vector{Pair{Int64, Int64}}}\n\n\nGiven a vector of pairs representing a partial partition of the vertices and a vector of unpaired vertices, return a vector of complete partitions.\n\n\n\n\n\npair_partitions(\n vertices::Vector{Int64}\n) -> Vector{Vector{Pair{Int64, Int64}}}\n\n\nReturn all possible partitions of an even number of vertices into pairs.\n\n\n\n\n\npair_partitions(\n n::Int64\n) -> Vector{Vector{Pair{Int64, Int64}}}\n\n\nReturn all partitions of 1ldots2n into n pairs.\n\n\n\n\n\n","category":"function"},{"location":"modules/diagrammatics/#QInchworm.diagrammatics.iscrossing","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics.iscrossing","text":"iscrossing(\n p1::Pair{Int64, Int64},\n p2::Pair{Int64, Int64}\n) -> Bool\n\n\nReturn true if two arcs cross.\n\nLet p_1 = (a_1 b_1), p_2 = (a_2 b_2) represent two arcs, where without loss of generality we assume a_1 b_1 and a_2 b_2. Now consider the order of the points a_1 b_1 a_2 b_2. The orderings a_1 b_1 a_2 b_2, a_1 a_2 b_2 b_1, a_2 b_2 a_1 b_1 are all non-crossing while a_1 a_2 b_1 b_2 and a_2 a_1 b_2 b_1 are crossing.\n\n\n\n\n\n","category":"function"},{"location":"modules/diagrammatics/#QInchworm.diagrammatics.n_crossings","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics.n_crossings","text":"n_crossings(top::QInchworm.diagrammatics.Topology) -> Int64\n\n\nReturn the number of crossing arcs in a topology.\n\n\n\n\n\n","category":"function"},{"location":"modules/diagrammatics/#QInchworm.diagrammatics.traverse_crossing_graph_dfs!","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics.traverse_crossing_graph_dfs!","text":"traverse_crossing_graph_dfs!(\n connected::Vector{Pair{Int64, Int64}},\n disconnected::Vector{Pair{Int64, Int64}}\n)\n\n\nGiven a vector of connected arcs and a vector of disconnected arcs recursively add disconnected to connected if they cross with any connected. This is done by traversing the crossing graph using depth first search.\n\n\n\n\n\n","category":"function"},{"location":"modules/diagrammatics/#QInchworm.diagrammatics.is_k_connected","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics.is_k_connected","text":"is_k_connected(\n t::QInchworm.diagrammatics.Topology,\n k::Int64\n) -> Bool\n\n\nGiven a topology, check if every connected component of the graph induced by crossings between the arcs contains a pair with an element <= k.\n\n\n\n\n\n","category":"function"},{"location":"modules/diagrammatics/#QInchworm.diagrammatics.split_k_connected","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics.split_k_connected","text":"split_k_connected(\n pairs::Vector{Pair{Int64, Int64}},\n k::Int64\n) -> Tuple{Vector{Pair{Int64, Int64}}, Vector{Pair{Int64, Int64}}}\n\n\nGiven a vector of integer pairs, split it into a connected set containing pairs with an element <= k and a disconnected set containing the rest.\n\n\n\n\n\n","category":"function"},{"location":"modules/diagrammatics/#QInchworm.diagrammatics.is_doubly_k_connected","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics.is_doubly_k_connected","text":"is_doubly_k_connected(\n p::Pair{Int64, Int64},\n k::Int64\n) -> Bool\n\n\nReturn true if a given integer pair has one element <= k and the other element > k.\n\n\n\n\n\nis_doubly_k_connected(\n t::QInchworm.diagrammatics.Topology,\n k::Int64\n) -> Bool\n\n\nGiven a topology, check if every connected component of the graph induced by crossings between the arcs contains a pair with one element <= k and the other element > k.\n\n\n\n\n\n","category":"function"},{"location":"modules/diagrammatics/#QInchworm.diagrammatics.count_doubly_k_connected","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics.count_doubly_k_connected","text":"count_doubly_k_connected(\n pairs::Vector{Pair{Int64, Int64}},\n k::Int64\n) -> Int64\n\n\nGiven a vector of integer pairs, count the doubly k-connected ones.\n\n\n\n\n\n","category":"function"},{"location":"modules/diagrammatics/#QInchworm.diagrammatics.split_doubly_k_connected","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics.split_doubly_k_connected","text":"split_doubly_k_connected(\n pairs::Vector{Pair{Int64, Int64}},\n k::Int64\n) -> Tuple{Vector{Pair{Int64, Int64}}, Vector{Pair{Int64, Int64}}}\n\n\nGiven a vector of integer pairs, split it into a connected set containing pairs with one element <= k and the other element > k, and a disconnected set containing the rest.\n\n\n\n\n\n","category":"function"},{"location":"modules/diagrammatics/#QInchworm.diagrammatics.generate_topologies","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics.generate_topologies","text":"generate_topologies(\n n::Int64\n) -> Vector{QInchworm.diagrammatics.Topology}\n\n\nReturn topologies of order n, efficiently computing the permutation sign for each.\n\n\n\n\n\n","category":"function"},{"location":"modules/diagrammatics/#QInchworm.diagrammatics.generate_topologies_impl","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics.generate_topologies_impl","text":"generate_topologies_impl(\n topology_partial::QInchworm.diagrammatics.Topology,\n unpaired::Vector{Int64}\n) -> Vector{QInchworm.diagrammatics.Topology}\n\n\nGiven a partial topology and a vector of unpaired vertices, return a vector of complete topologies, efficiently computing the permutation sign.\n\n\n\n\n\n","category":"function"},{"location":"modules/diagrammatics/#QInchworm.diagrammatics.get_topologies_at_order","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics.get_topologies_at_order","text":"get_topologies_at_order(\n order::Int64;\n ...\n) -> Vector{QInchworm.diagrammatics.Topology}\nget_topologies_at_order(\n order::Int64,\n k;\n with_external_arc\n) -> Vector{QInchworm.diagrammatics.Topology}\n\n\nReturn topologies of a given order. If k is specified, then only the doubly k-connected topologies are returned. With with_external_arc set to true parity of the returned topologies is computed as if an extra arc overarching the last 2order - k vertices was present.\n\n\n\n\n\n","category":"function"},{"location":"modules/expansion/#QInchworm.expansion","page":"QInchworm.expansion","title":"QInchworm.expansion","text":"","category":"section"},{"location":"modules/expansion/","page":"QInchworm.expansion","title":"QInchworm.expansion","text":"CurrentModule = QInchworm.expansion","category":"page"},{"location":"modules/expansion/","page":"QInchworm.expansion","title":"QInchworm.expansion","text":"AllPPGFSectorTypes\nAllPPGFTypes","category":"page"},{"location":"modules/expansion/#QInchworm.expansion.AllPPGFSectorTypes","page":"QInchworm.expansion","title":"QInchworm.expansion.AllPPGFSectorTypes","text":"Supported container types for a single block of an atomic propagator (PPGF)\n\n\n\n\n\n","category":"type"},{"location":"modules/expansion/#QInchworm.expansion.AllPPGFTypes","page":"QInchworm.expansion","title":"QInchworm.expansion.AllPPGFTypes","text":"Supported container types for a full atomic propagator (PPGF)\n\n\n\n\n\n","category":"type"},{"location":"modules/qmc_integrate/#QInchworm.qmc_integrate","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate","text":"","category":"section"},{"location":"modules/qmc_integrate/","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate","text":"CurrentModule = QInchworm.qmc_integrate","category":"page"},{"location":"modules/qmc_integrate/","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate","text":"qmc_integrate","category":"page"},{"location":"modules/qmc_integrate/#QInchworm.qmc_integrate","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate","text":"Quasi Monte Carlo integration routines.\n\n[1]: Integration domain transformations based on product model functions are described in \"Quantum Quasi-Monte Carlo Technique for Many-Body Perturbative Expansions\", M. Maček, P. T. Dumitrescu, C. Bertrand, B.Triggs, O. Parcollet, and X. Waintal, Phys. Rev. Lett. 125, 047702 (2020).\n\n[2]: Integration domain transformations Sort and Root are defined in \"Transforming low-discrepancy sequences from a cube to a simplex\", T. Pillards and R. Cools, J. Comput. Appl. Math. 174, 29 (2005).\n\n\n\n\n\n","category":"module"},{"location":"modules/qmc_integrate/#Basic-quasi-Monte-Carlo-integration-routines","page":"QInchworm.qmc_integrate","title":"Basic quasi Monte Carlo integration routines","text":"","category":"section"},{"location":"modules/qmc_integrate/","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate","text":"qmc_integral\nqmc_integral_n_samples","category":"page"},{"location":"modules/qmc_integrate/#QInchworm.qmc_integrate.qmc_integral","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate.qmc_integral","text":"qmc_integral(f; ...)\nqmc_integral(f, init; trans_f, jacobian_f, seq, N)\n\n\nCompute a quasi Monte Carlo estimate of a d-dimensional integral\n\nF = int_mathscrD d^d mathbfu f(mathbfu)\n\nThe domain mathscrD is defined by a variable change mathbfu = mathbfu(mathbfx) 01^d mapsto mathscrD,\n\nF = int_01^d d^dmathbfx f(mathbfu(mathbfx))\n leftfracpartialmathbfupartialmathbfxright\napprox frac1N sum_i=1^N\n f(mathbfu(mathbfx_i)) J(mathbfu(mathbfx_i))\n\nParameters\n\nf: Integrand f(mathbfu).\ninit: Initial (zero) value used in qMC summation.\ntrans_f: Domain transformation function mathbfu(mathbfx).\njacobian_f: Jacobian J(mathbfu) = leftfracpartialmathbfupartialmathbfxright.\nseq: Quasi-random sequence generator.\nN: Number of points to be taken from the quasi-random sequence.\n\nReturns\n\nEstimated value of the integral.\n\n\n\n\n\n","category":"function"},{"location":"modules/qmc_integrate/#QInchworm.qmc_integrate.qmc_integral_n_samples","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate.qmc_integral_n_samples","text":"qmc_integral_n_samples(f; ...)\nqmc_integral_n_samples(\n f,\n init;\n trans_f,\n jacobian_f,\n seq,\n N_samples\n)\n\n\nCompute a quasi Monte Carlo estimate of a d-dimensional integral\n\nF = int_mathscrD d^d mathbfu f(mathbfu)\n\nThe domain mathscrD is defined by a variable change mathbfu = mathbfu(mathbfx) 01^d mapsto mathscrD,\n\nF = int_01^d d^dmathbfx f(mathbfu(mathbfx))\n leftfracpartialmathbfupartialmathbfxright\napprox frac1N sum_i=1^N\n f(mathbfu(mathbfx_i)) J(mathbfu(mathbfx_i))\n\nUnlike qmc_integral(), this function performs qMC summation until a given number of valid (non-nothing) samples of f(mathbfu) are taken.\n\nParameters\n\nf: Integrand f(mathbfu).\ninit: Initial (zero) value used in qMC summation.\ntrans_f: Domain transformation function mathbfu(mathbfx).\njacobian_f: Jacobian J(mathbfu) = leftfracpartialmathbfupartialmathbfxright.\nseq: Quasi-random sequence generator.\nN_samples: Number of valid samples of f(mathbfu) to be taken.\n\nReturns\n\nEstimated value of the integral.\n\n\n\n\n\n","category":"function"},{"location":"modules/qmc_integrate/#Integration-domain-transformations","page":"QInchworm.qmc_integrate","title":"Integration domain transformations","text":"","category":"section"},{"location":"modules/qmc_integrate/","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate","text":"AbstractDomainTransform\nBase.ndims(::AbstractDomainTransform)\nExpModelFunctionTransform\nExpModelFunctionTransform(::Integer, ::kd.AbstractContour, ::kd.BranchPoint, ::Real)\nRootTransform\nRootTransform(::Integer, ::kd.AbstractContour, ::kd.BranchPoint, ::kd.BranchPoint)\nSortTransform\nSortTransform(::Integer, ::kd.AbstractContour, ::kd.BranchPoint, ::kd.BranchPoint)\nDoubleSimplexRootTransform\nDoubleSimplexRootTransform(::Int,\n ::Int,\n ::kd.AbstractContour,\n ::kd.BranchPoint,\n ::kd.BranchPoint,\n ::kd.BranchPoint)\nmake_trans_f\nmake_jacobian_f","category":"page"},{"location":"modules/qmc_integrate/#QInchworm.qmc_integrate.AbstractDomainTransform","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate.AbstractDomainTransform","text":"abstract type AbstractDomainTransform{D}\n\nAbstract domain transformation 0 1^d mapsto mathscrD.\n\n\n\n\n\n","category":"type"},{"location":"modules/qmc_integrate/#Base.ndims-Tuple{QInchworm.qmc_integrate.AbstractDomainTransform}","page":"QInchworm.qmc_integrate","title":"Base.ndims","text":"ndims(\n s::QInchworm.scrambled_sobol.ScrambledSobolSeq{D}\n) -> Int64\n\n\nDimension D of a scrambled Sobol sequence.\n\n\n\n\n\nndims(s::QInchworm.utility.RandomSeq{RNG, D}) -> Int64\n\n\nDimension D of a random sequence.\n\n\n\n\n\nndims(\n _::QInchworm.qmc_integrate.AbstractDomainTransform{D}\n) -> Any\n\n\nReturn the number of dimensions d of a domain transformation 0 1^d mapsto mathscrD.\n\n\n\n\n\n","category":"method"},{"location":"modules/qmc_integrate/#QInchworm.qmc_integrate.ExpModelFunctionTransform","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate.ExpModelFunctionTransform","text":"struct ExpModelFunctionTransform{D} <: QInchworm.qmc_integrate.AbstractDomainTransform{D}\n\nDomain transformation\n\nmathbfxin01^d mapsto\n mathbfu u_f geq u_1 geq u_2 geq ldots geq u_d -infty\n\ninduced by the implicit variable change\n\nx_n(v_n) = fracint_0^v_n dbar v_n h(bar v_n)\n int_0^infty dbar v_n h(bar v_n)\nquad\nv_n = left\nbeginarrayll\nu_f - u_1 n=1\nu_n-1 - u_n n1\nendarray\nright\n\nwhere h(v) is an exponential model function parametrized by decay rate tau, h(v) = e^-vtau.\n\nThe corresponding Jacobian is J(mathbfu) = tau^d e^-(u_f - u_d) tau.\n\nFields\n\nu_f::Float64: Upper bound of the transformed domain u_f\nτ::Float64: Decay rate parameter of the exponential model function\n\n\n\n\n\n","category":"type"},{"location":"modules/qmc_integrate/#QInchworm.qmc_integrate.ExpModelFunctionTransform-Tuple{Integer, Keldysh.AbstractContour, Keldysh.BranchPoint, Real}","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate.ExpModelFunctionTransform","text":"ExpModelFunctionTransform(\n d::Integer,\n c::Keldysh.AbstractContour,\n t_f::Keldysh.BranchPoint,\n τ::Real\n) -> QInchworm.qmc_integrate.ExpModelFunctionTransform\n\n\nMake an ExpModelFunctionTransform object suitable for time contour integration over the domain\n\n(t_1 ldots t_d) in mathcalC^d\n t_f succeq t_1 succeq t_2 succeq ldots succeq t_d succeq\n textstarting point of mathcalC\n\nN.B. ExpModelFunctionTransform describes an infinite domain where integration variables u_n can approach -infty. Negative values of u_n cannot be mapped onto time points on mathcalC and will be discarded by contour_integral().\n\nParameters\n\nd: Number of dimensions d.\nc: Time contour mathcalC.\nt_f: Upper bound t_f.\nτ: Decay rate parameter tau.\n\n\n\n\n\n","category":"method"},{"location":"modules/qmc_integrate/#QInchworm.qmc_integrate.RootTransform","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate.RootTransform","text":"struct RootTransform{D} <: QInchworm.qmc_integrate.AbstractDomainTransform{D}\n\nHypercube-to-simplex domain transformation\n\nmathbfxin01^d mapsto\n mathbfu u_f geq u_1 geq u_2 geq ldots geq u_d geq u_i\n\ninduced by the Root mapping[2]\n\nleft\nbeginarrayll\ntilde u_1 = x_1^1d\ntilde u_2 = tilde u_1 x_2^1(d-1)\nldots\ntilde u_d = tilde u_d-1 x_d\nendarrayright\n\nmathbfu = u_i + (u_f - u_i) tildemathbfu\n\nThe corresponding Jacobian is J(mathbfu) = (u_f - u_i)^d d.\n\nFields\n\nu_i::Float64: Lower bound of the transformed domain u_i\nu_diff::Float64: Difference u_f - u_i\n\n\n\n\n\n","category":"type"},{"location":"modules/qmc_integrate/#QInchworm.qmc_integrate.RootTransform-Tuple{Integer, Keldysh.AbstractContour, Keldysh.BranchPoint, Keldysh.BranchPoint}","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate.RootTransform","text":"RootTransform(\n d::Integer,\n c::Keldysh.AbstractContour,\n t_i::Keldysh.BranchPoint,\n t_f::Keldysh.BranchPoint\n) -> QInchworm.qmc_integrate.RootTransform\n\n\nMake a RootTransform object suitable for time contour integration over the domain\n\n(t_1 ldots t_d) in mathcalC^d\n t_f succeq t_1 succeq t_2 succeq ldots succeq t_d succeq t_i\n\nParameters\n\nd: Number of dimensions d.\nc: Time contour mathcalC.\nt_i: Lower bound t_i.\nt_f: Upper bound t_f.\n\n\n\n\n\n","category":"method"},{"location":"modules/qmc_integrate/#QInchworm.qmc_integrate.SortTransform","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate.SortTransform","text":"struct SortTransform{D} <: QInchworm.qmc_integrate.AbstractDomainTransform{D}\n\nHypercube-to-simplex domain transformation\n\nmathbfxin01^d mapsto\n mathbfu u_f geq u_1 geq u_2 geq ldots geq u_d geq u_i\n\ninduced by the Sort mapping[2]\n\nmathbfu = u_i + (u_f - u_i) mathrmsort(x_1 ldots x_d)\n\nThe corresponding Jacobian is J(mathbfu) = (u_f - u_i)^d d.\n\nFields\n\nu_i::Float64: Lower bound of the transformed domain u_i\nu_diff::Float64: Difference u_f - u_i\n\n\n\n\n\n","category":"type"},{"location":"modules/qmc_integrate/#QInchworm.qmc_integrate.SortTransform-Tuple{Integer, Keldysh.AbstractContour, Keldysh.BranchPoint, Keldysh.BranchPoint}","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate.SortTransform","text":"SortTransform(\n d::Integer,\n c::Keldysh.AbstractContour,\n t_i::Keldysh.BranchPoint,\n t_f::Keldysh.BranchPoint\n) -> QInchworm.qmc_integrate.SortTransform\n\n\nMake a SortTransform object suitable for time contour integration over the domain\n\n(t_1 ldots t_d) in mathcalC^d\n t_f succeq t_1 succeq t_2 succeq ldots succeq t_d succeq t_i\n\nParameters\n\nd: Number of dimensions d.\nc: Time contour mathcalC.\nt_i: Lower bound t_i.\nt_f: Upper bound t_f.\n\n\n\n\n\n","category":"method"},{"location":"modules/qmc_integrate/#QInchworm.qmc_integrate.DoubleSimplexRootTransform","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate.DoubleSimplexRootTransform","text":"struct DoubleSimplexRootTransform{D} <: QInchworm.qmc_integrate.AbstractDomainTransform{D}\n\nHypercube-to-double-simplex domain transformation\n\nmathbfxin01^d mapsto\n mathbfu u_f geq u_1 geq u_2 geq ldots geq u_d^ geq u_w geq\n u_d^+1 geq ldots geq u_d geq u_i\n\ninduced by the Root mapping[2] applied independently to two sets of variables x_1 ldots x_d^ and x_d^+1 ldots x_d (cf. RootTransform).\n\nThe corresponding Jacobian is J(mathbfu) = frac(u_w - u_i)^d^d^ frac(u_f - u_w)^d^d^.\n\nHere, d^ and d^ denote numbers of variables in the 'lesser' and 'greater' simplex respectively, and d = d^ + d^. The two simplices are separated by a fixed boundary located at u_w.\n\nFields\n\nd_lesser::Int64: Number of variables in the 'lesser' simplex, d^\nd_greater::Int64: Number of variables in the 'greater' simplex, d^\nu_i::Float64: Lower bound of the transformed domain u_i\nu_w::Float64: Boundary u_w separating the 'lesser' and the 'greater' simplices\nu_diff_wi::Float64: Difference u_w - u_i\nu_diff_fw::Float64: Difference u_f - u_w\n\n\n\n\n\n","category":"type"},{"location":"modules/qmc_integrate/#QInchworm.qmc_integrate.DoubleSimplexRootTransform-Tuple{Int64, Int64, Keldysh.AbstractContour, Keldysh.BranchPoint, Keldysh.BranchPoint, Keldysh.BranchPoint}","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate.DoubleSimplexRootTransform","text":"DoubleSimplexRootTransform(\n d_before::Int64,\n d_after::Int64,\n c::Keldysh.AbstractContour,\n t_i::Keldysh.BranchPoint,\n t_w::Keldysh.BranchPoint,\n t_f::Keldysh.BranchPoint\n) -> QInchworm.qmc_integrate.DoubleSimplexRootTransform\n\n\nMake a DoubleSimplexRootTransform object suitable for time contour integration over the domain\n\n(t_1 ldots t_d) in mathcalC^d\n t_f succeq t_1 succeq t_2 succeq ldots succeq t_d_textafter succeq t_w\n succeq t_d_textafter+1 succeq ldots succeq t_d succeq t_i\n\nwhere d = d_textbefore + d_textafter.\n\nParameters\n\nd_before: Number of time variables in the 'before' region, d_textbefore.\nd_after: Number of time variables in the 'after' region, d_textafter.\nc: Time contour mathcalC.\nt_i: Lower bound t_i.\nt_w: Boundary point t_w.\nt_f: Upper bound t_f.\n\n\n\n\n\n","category":"method"},{"location":"modules/qmc_integrate/#QInchworm.qmc_integrate.make_trans_f","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate.make_trans_f","text":"make_trans_f(\n t::QInchworm.qmc_integrate.ExpModelFunctionTransform\n) -> QInchworm.qmc_integrate.var\"#3#4\"{QInchworm.qmc_integrate.ExpModelFunctionTransform{D}} where D\n\n\nReturn the function mathbfu(mathbfx) corresponding to a given ExpModelFunctionTransform object t.\n\n\n\n\n\nmake_trans_f(\n t::QInchworm.qmc_integrate.RootTransform\n) -> QInchworm.qmc_integrate.var\"#7#8\"{QInchworm.qmc_integrate.RootTransform{D}} where D\n\n\nReturn the function mathbfu(mathbfx) corresponding to a given RootTransform object t.\n\n\n\n\n\nmake_trans_f(\n t::QInchworm.qmc_integrate.SortTransform\n) -> QInchworm.qmc_integrate.var\"#11#12\"{QInchworm.qmc_integrate.SortTransform{D}} where D\n\n\nReturn the function mathbfu(mathbfx) corresponding to a given SortTransform object t.\n\n\n\n\n\nmake_trans_f(\n t::QInchworm.qmc_integrate.DoubleSimplexRootTransform\n) -> QInchworm.qmc_integrate.var\"#15#16\"{QInchworm.qmc_integrate.DoubleSimplexRootTransform{D}} where D\n\n\nReturn the function mathbfu(mathbfx) corresponding to a given DoubleSimplexRootTransform object t.\n\n\n\n\n\n","category":"function"},{"location":"modules/qmc_integrate/#QInchworm.qmc_integrate.make_jacobian_f","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate.make_jacobian_f","text":"make_jacobian_f(\n t::QInchworm.qmc_integrate.ExpModelFunctionTransform\n) -> QInchworm.qmc_integrate.var\"#5#6\"{QInchworm.qmc_integrate.ExpModelFunctionTransform{D}} where D\n\n\nReturn the Jacobian J(mathbfu) = leftfracpartialmathbfupartialmathbfxright corresponding to a given ExpModelFunctionTransform object t.\n\n\n\n\n\nmake_jacobian_f(\n t::QInchworm.qmc_integrate.RootTransform\n) -> QInchworm.qmc_integrate.var\"#9#10\"{Float64}\n\n\nReturn the Jacobian J(mathbfu) = leftfracpartialmathbfupartialmathbfxright corresponding to a given RootTransform object t.\n\n\n\n\n\nmake_jacobian_f(\n t::QInchworm.qmc_integrate.SortTransform\n) -> QInchworm.qmc_integrate.var\"#13#14\"{Float64}\n\n\nReturn the Jacobian J(mathbfu) = leftfracpartialmathbfupartialmathbfxright corresponding to a given SortTransform object t.\n\n\n\n\n\nmake_jacobian_f(\n t::QInchworm.qmc_integrate.DoubleSimplexRootTransform\n) -> QInchworm.qmc_integrate.var\"#17#18\"{Float64}\n\n\nReturn the Jacobian J(mathbfu) = leftfracpartialmathbfupartialmathbfxright corresponding to a given DoubleSimplexRootTransform object t.\n\n\n\n\n\n","category":"function"},{"location":"modules/qmc_integrate/#Contour-integration-routines","page":"QInchworm.qmc_integrate","title":"Contour integration routines","text":"","category":"section"},{"location":"modules/qmc_integrate/","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate","text":"contour_integral\ncontour_integral_n_samples\nbranch_direction\ncontour_function_return_type","category":"page"},{"location":"modules/qmc_integrate/#QInchworm.qmc_integrate.contour_integral","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate.contour_integral","text":"contour_integral(\n f,\n c::Keldysh.AbstractContour,\n dt::QInchworm.qmc_integrate.AbstractDomainTransform;\n init,\n seq,\n N\n)\n\n\nCompute a quasi Monte Carlo estimate of a contour integral over a d-dimensional domain mathscrD.\n\nParameters\n\nf: Integrand.\nc: Time contour to integrate over.\ndt: Domain transformation 0 1^d mapsto mathscrD.\ninit: Initial (zero) value of the integral.\nseq: Quasi-random sequence generator.\nN: The number of points to be taken from the quasi-random sequence.\n\nReturns\n\nEstimated value of the contour integral.\n\n\n\n\n\n","category":"function"},{"location":"modules/qmc_integrate/#QInchworm.qmc_integrate.contour_integral_n_samples","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate.contour_integral_n_samples","text":"contour_integral_n_samples(\n f,\n c::Keldysh.AbstractContour,\n dt::QInchworm.qmc_integrate.AbstractDomainTransform;\n init,\n seq,\n N_samples\n)\n\n\nCompute a quasi Monte Carlo estimate of a contour integral over a d-dimensional domain mathscrD.\n\nUnlike contour_integral(), this function performs qMC summation until a given number of valid (non-nothing) samples of the integrand are taken.\n\nParameters\n\nf: Integrand.\nc: Time contour to integrate over.\ndt: Domain transformation 0 1^d mapsto mathscrD.\ninit: Initial (zero) value of the integral.\nseq: Quasi-random sequence generator.\nN_samplex: Number of valid samples of the integrand to be taken.\n\nReturns\n\nEstimated value of the contour integral.\nThe total number of points taken from the quasi-random sequence.\n\n\n\n\n\n","category":"function"},{"location":"modules/qmc_integrate/#QInchworm.qmc_integrate.branch_direction","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate.branch_direction","text":"Dictionary mapping branches of the Keldysh contour to their unitary direction coefficients in the complex time plane.\n\n\n\n\n\n","category":"constant"},{"location":"modules/qmc_integrate/#QInchworm.qmc_integrate.contour_function_return_type","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate.contour_function_return_type","text":"contour_function_return_type(f::Function) -> Any\n\n\nDetect the return type of a function applied to a vector of Keldysh.BranchPoint.\n\n\n\n\n\n","category":"function"},{"location":"about/#About-QInchworm.jl","page":"About","title":"About QInchworm.jl","text":"","category":"section"},{"location":"about/","page":"About","title":"About","text":"QInchworm.jl is developed by Igor Krivenko, Hugo U. R. Strand and Joseph Kleinhenz and is distributed under the terms of the GNU General Public License version 3 or later.","category":"page"},{"location":"about/","page":"About","title":"About","text":"We acknowledge funding from the European Research Council (ERC) under the European Union’s Horizon 2020 research and innovation programme (Grant agreement No. 854843-FASTCORR).","category":"page"},{"location":"about/","page":"About","title":"About","text":"Large scale testing and benchmarking were enabled by resources from the National Academic Infrastructure for Supercomputing in Sweden (NAISS) and the Swedish National Infrastructure for Computing (SNIC) through the projects SNIC 2022/1-18, SNIC 2022/6-113, SNIC 2022/13-9, SNIC 2022/21-15, NAISS 2023/1-44, and NAISS 2023/6-129 at PDC, NSC and CSC partially funded by the Swedish Research Council through grant agreements no. 2022-06725 and no. 2018-05973.","category":"page"},{"location":"api/#Public-API","page":"Public API","title":"Public API","text":"","category":"section"},{"location":"api/","page":"Public API","title":"Public API","text":"QInchworm","category":"page"},{"location":"api/#QInchworm","page":"Public API","title":"QInchworm","text":"A quasi Monte Carlo inchworm impurity solver for multi-orbital fermionic models.\n\n\n\n\n\n","category":"module"},{"location":"api/#api:QInchworm.expansion","page":"Public API","title":"QInchworm.expansion","text":"","category":"section"},{"location":"api/","page":"Public API","title":"Public API","text":"CurrentModule = QInchworm.expansion","category":"page"},{"location":"api/","page":"Public API","title":"Public API","text":"expansion","category":"page"},{"location":"api/#QInchworm.expansion","page":"Public API","title":"QInchworm.expansion","text":"Strong coupling pseudo-particle expansion problem.\n\nExports\n\nExpansion\nInteractionPair\nadd_corr_operators!\n\n\n\n\n\n","category":"module"},{"location":"api/","page":"Public API","title":"Public API","text":"Expansion\nExpansion(::ked.EDCore,\n ::kd.AbstractTimeGrid,\n ::Vector{InteractionPair{ScalarGF}};\n ::Vector{Tuple{Operator, Operator}},\n interpolate_ppgf) where ScalarGF\nExpansion(::op.OperatorExpr,\n ::ked.SetOfIndices,\n ::kd.ImaginaryTimeGrid;\n ::kd.ImaginaryTimeGF{ComplexF64, false},\n ::Union{Keldysh.ImaginaryTimeGF{Float64, false}, Nothing},\n ::Vector{Tuple{Operator, Operator}},\n interpolate_ppgf)\nInteractionPair\nadd_corr_operators!","category":"page"},{"location":"api/#QInchworm.expansion.Expansion","page":"Public API","title":"QInchworm.expansion.Expansion","text":"struct Expansion{ScalarGF<:Keldysh.AbstractTimeGF{ComplexF64, true}, PPGF_P0<:Union{Vector{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}}, Vector{Keldysh.ImaginaryTimeGF{ComplexF64, false}}, Vector{QInchworm.exact_atomic_ppgf.ExactAtomicPPGF}, Vector{QInchworm.spline_gf.IncSplineImaginaryTimeGF{ComplexF64, false}}, Vector{QInchworm.spline_gf.SplineInterpolatedGF{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}, ComplexF64, false}}, Vector{QInchworm.spline_gf.SplineInterpolatedGF{Keldysh.ImaginaryTimeGF{ComplexF64, false}, ComplexF64, false}}}, PPGF_P<:Union{Vector{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}}, Vector{Keldysh.ImaginaryTimeGF{ComplexF64, false}}, Vector{QInchworm.exact_atomic_ppgf.ExactAtomicPPGF}, Vector{QInchworm.spline_gf.IncSplineImaginaryTimeGF{ComplexF64, false}}, Vector{QInchworm.spline_gf.SplineInterpolatedGF{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}, ComplexF64, false}}, Vector{QInchworm.spline_gf.SplineInterpolatedGF{Keldysh.ImaginaryTimeGF{ComplexF64, false}, ComplexF64, false}}}}\n\nThe Expansion structure contains the components needed to define a strong coupling pseudo-particle expansion problem.\n\nFields\n\ned: Exact diagonalization solver for the local degrees of freedom\nP0: Non-interacting propagator (pseudo-particle Green's function)\nP: Interacting propagator (pseudo-particle Green's function)\npairs: List of pseudo-particle interactions\ndeterminants: List of hybridization function determinants (not implemented yet)\ncorr_operators: List of operator pairs used in accumulation of two-point correlation functions\nidentity_mat: Block matrix representation of the identity operator\npair_operator_mat: Block matrix representation of paired operators (operator_i, operator_f)\ncorr_operators_mat: Block matrix representation of corr_operators\nsubspace_attachable_pairs: Given a subspace index s_i, lists indices of all interaction pairs with operator_i acting non-trivially on that subspace.\n\n\n\n\n\n","category":"type"},{"location":"api/#QInchworm.expansion.Expansion-Union{Tuple{ScalarGF}, Tuple{KeldyshED.EDCore, Keldysh.AbstractTimeGrid, Array{QInchworm.expansion.InteractionPair{ScalarGF}, 1}}} where ScalarGF","page":"Public API","title":"QInchworm.expansion.Expansion","text":"Expansion(\n ed::KeldyshED.EDCore,\n grid::Keldysh.AbstractTimeGrid,\n interaction_pairs::Array{QInchworm.expansion.InteractionPair{ScalarGF}, 1};\n corr_operators,\n interpolate_ppgf\n) -> QInchworm.expansion.Expansion\n\n\nParameters\n\ned: Exact diagonalization solution of the local problem.\ngrid: Contour time grid to define the local propagators on.\ninteraction_pairs: The list of pair interactions to expand in.\ncorr_operators: The list of operator pairs used in accumulation of two-point correlation functions.\ninterpolate_ppgf: Use a quadratic spline interpolation to represent and evaluate the local propagators. Currently works only with the imaginary time propagators.\n\n\n\n\n\n","category":"method"},{"location":"api/#QInchworm.expansion.Expansion-Tuple{KeldyshED.Operators.OperatorExpr, KeldyshED.Hilbert.SetOfIndices, Keldysh.ImaginaryTimeGrid}","page":"Public API","title":"QInchworm.expansion.Expansion","text":"Expansion(\n hamiltonian::KeldyshED.Operators.OperatorExpr,\n soi::KeldyshED.Hilbert.SetOfIndices,\n grid::Keldysh.ImaginaryTimeGrid;\n hybridization,\n nn_interaction,\n corr_operators,\n interpolate_ppgf\n)\n\n\nA higher-level constructor of Expansion that solves the local problem defined by a Hamiltonian and internally generates a list of pseudo-particle pair interactions from hybridization and nn-interaction functions.\n\nParameters\n\nhamiltonian: Hamiltonian of the local problem.\nsoi: An ordered set of indices carried by creation/annihilation operators of the local problem.\ngrid: Imaginary time grid to define the local propagators on.\nhybridization: A matrix-valued hybridization function Delta_ij(tau). A correspondence between the matrix elements (i j) and operators c^dagger_i c_j is established by soi.\nnn_interaction: A matrix-valued nn-interaction function U_ij(tau). A correspondence between the matrix elements (i j) and operators n_i n_j is established by soi.\ncorr_operators: The list of operator pairs used in accumulation of two-point correlation functions.\ninterpolate_ppgf: Use a quadratic spline interpolation to represent and evaluate the local propagators.\n\n\n\n\n\n","category":"method"},{"location":"api/#QInchworm.expansion.InteractionPair","page":"Public API","title":"QInchworm.expansion.InteractionPair","text":"struct InteractionPair{ScalarGF<:Keldysh.AbstractTimeGF{ComplexF64, true}}\n\nData type for pseudo-particle interactions containing two operators and one scalar propagator.\n\nIndexed access to the operators stored in a pair::InteractionPair is supported: pair[1] and pair[2] are equivalent to pair.operator_i and pair.operator_f respectively.\n\nFields\n\noperator_f::KeldyshED.Operators.RealOperatorExpr: Final time operator\noperator_i::KeldyshED.Operators.RealOperatorExpr: Initial time operator\npropagator::Keldysh.AbstractTimeGF{ComplexF64, true}: Scalar propagator\n\n\n\n\n\n","category":"type"},{"location":"api/#QInchworm.expansion.add_corr_operators!","page":"Public API","title":"QInchworm.expansion.add_corr_operators!","text":"add_corr_operators!(\n expansion::QInchworm.expansion.Expansion,\n ops::Tuple{KeldyshED.Operators.RealOperatorExpr, KeldyshED.Operators.RealOperatorExpr}\n)\n\n\nAdd a pair of operators (A B) used to measure the two-point correlator langle A(t_1) B(t_2)rangle to expansion.\n\nParameters\n\nexpansion: Pseudo-particle expansion.\nops: The pair of operators (A B).\n\n\n\n\n\n","category":"function"},{"location":"api/#api:QInchworm.inchworm","page":"Public API","title":"QInchworm.inchworm","text":"","category":"section"},{"location":"api/","page":"Public API","title":"Public API","text":"CurrentModule = QInchworm.inchworm","category":"page"},{"location":"api/","page":"Public API","title":"Public API","text":"inchworm","category":"page"},{"location":"api/#QInchworm.inchworm","page":"Public API","title":"QInchworm.inchworm","text":"High level functions implementing the quasi Monte Carlo inchworm algorithm.\n\nExports\n\ncorrelator_2p\ndiff_inchworm!\ninchworm!\n\n\n\n\n\n","category":"module"},{"location":"api/","page":"Public API","title":"Public API","text":"inchworm!\ndiff_inchworm!\ncorrelator_2p","category":"page"},{"location":"api/#QInchworm.inchworm.inchworm!","page":"Public API","title":"QInchworm.inchworm.inchworm!","text":"inchworm!(\n expansion::QInchworm.expansion.Expansion,\n grid::Keldysh.ImaginaryTimeGrid,\n orders,\n orders_bare,\n N_samples::Int64;\n n_pts_after_max,\n rand_params,\n seq_type\n) -> Tuple{Dict, Dict}\n\n\nPerform a complete qMC inchworm calculation of the bold propagators on the imaginary time segment. Results of the calculation are written into expansion.P.\n\nParameters\n\nexpansion: Strong coupling expansion problem.\ngrid: Imaginary time grid of the bold propagators.\norders: List of expansion orders to be accounted for during a regular inchworm step.\norders_bare: List of expansion orders to be accounted for during the initial inchworm step.\nN_samples: Number of samples to be used in qMC integration. Must be a power of 2.\nn_pts_after_max: Maximum number of points in the after-tau_w region to be taken into account. By default, diagrams with all valid numbers of the after-tau_w points are considered.\nrand_params: Parameters of the randomized qMC integration.\nseq_type: Type of the (quasi-)random sequence to be used for integration.\n\nReturns\n\nOrder-resolved contributions to the bold propagator as a dictionary Dict{Int, PPGF}.\nEstimated standard deviations of the order-resolved contributions as a dictionary Dict{Int, PPGF}.\n\n\n\n\n\n","category":"function"},{"location":"api/#QInchworm.inchworm.diff_inchworm!","page":"Public API","title":"QInchworm.inchworm.diff_inchworm!","text":"diff_inchworm!(\n expansion::QInchworm.expansion.Expansion,\n grid::Keldysh.ImaginaryTimeGrid,\n orders,\n N_samples::Int64;\n rand_params,\n seq_type\n) -> Tuple{Dict, Dict}\n\n\nPerform a complete qMC inchworm calculation of the bold propagators on the imaginary time segment using the differential formulation of the method described in\n\n\"Inchworm Monte Carlo Method for Open Quantum Systems\"\nZ. Cai, J. Lu and S. Yang\nComm. Pure Appl. Math., 73: 2430-2472 (2020)\n\nResults of the calculation are written into expansion.P.\n\nParameters\n\nexpansion: Strong coupling expansion problem.\ngrid: Imaginary time grid of the bold propagators.\norders: List of expansion orders to be accounted for.\nN_samples: Number of samples to be used in qMC integration. Must be a power of 2.\nrand_params: Parameters of the randomized qMC integration.\nseq_type: Type of the (quasi-)random sequence to be used for integration.\n\nReturns\n\nOrder-resolved contributions to the pseudo-particle self-energy as a dictionary Dict{Int, PPGF}.\nEstimated standard deviations of the order-resolved contributions as a dictionary Dict{Int, PPGF}.\n\n\n\n\n\n","category":"function"},{"location":"api/#QInchworm.inchworm.correlator_2p","page":"Public API","title":"QInchworm.inchworm.correlator_2p","text":"correlator_2p(\n expansion::QInchworm.expansion.Expansion,\n grid::Keldysh.ImaginaryTimeGrid,\n A_B_pair_idx::Int64,\n τ::Keldysh.TimeGridPoint,\n top_data::Vector{QInchworm.inchworm.TopologiesInputData};\n seq_type,\n tmr\n) -> Tuple{ComplexF64, ComplexF64}\n\n\nCalculate value of a two-point correlator langle A(tau) B(0)rangle for one value of the imaginary time argument tau. The pair of operators (A B) used in the calculation is taken from expansion.corr_operators[A_B_pair_idx].\n\nParameters\n\nexpansion: Strong coupling expansion problem. expansion.P must contain precomputed bold propagators.\ngrid: Imaginary time grid of the correlator to be computed.\nA_B_pair_idx: Index of the (A B) pair within expansion.corr_operators.\nτ: The imaginary time argument tau.\ntop_data: Accumulation input data.\nseq_type: Type of the (quasi-)random sequence to be used for integration.\ntmr: A TimerOutput object used for profiling.\n\nReturns\n\nAccumulated value of the two-point correlator.\nEstimated standard deviations of the computed correlator.\n\n\n\n\n\ncorrelator_2p(\n expansion::QInchworm.expansion.Expansion,\n grid::Keldysh.ImaginaryTimeGrid,\n orders,\n N_samples::Int64,\n ::QInchworm.randomization.RequestStdDev;\n rand_params,\n seq_type\n) -> Tuple{Any, Any}\n\n\nCalculate a two-point correlator langle A(tau) B(0)rangle on the imaginary time segment. Accumulation is performed for each pair of operators (A B) in expansion.corr_operators. Only the operators that are a single monomial in cc^dagger are supported.\n\nThis method is selected by the flag argument of type RequestStdDev and returns randomized qMC estimates of both mean and standard deviation of the correlators.\n\nParameters\n\nexpansion: Strong coupling expansion problem. expansion.P must contain precomputed bold propagators.\ngrid: Imaginary time grid of the correlator to be computed.\norders: List of expansion orders to be accounted for.\nN_samples: Number of samples to be used in qMC integration. Must be a power of 2.\nrand_params: Parameters of the randomized qMC integration.\nseq_type: Type of the (quasi-)random sequence to be used for integration.\n\nReturns\n\nA list of scalar-valued GF objects containing the computed correlators, one element per a pair in expansion.corr_operators.\nA list of scalar-valued GF objects containing estimated standard deviations of the computed correlators, one element per a pair in expansion.corr_operators.\n\n\n\n\n\ncorrelator_2p(\n expansion::QInchworm.expansion.Expansion,\n grid::Keldysh.ImaginaryTimeGrid,\n orders,\n N_samples::Int64;\n rand_params,\n seq_type\n) -> Any\n\n\nCalculate a two-point correlator langle A(tau) B(0)rangle on the imaginary time segment. Accumulation is performed for each pair of operators (A B) in expansion.corr_operators. Only the operators that are a single monomial in cc^dagger are supported.\n\nParameters\n\nexpansion: Strong coupling expansion problem. expansion.P must contain precomputed bold propagators.\ngrid: Imaginary time grid of the correlator to be computed.\norders: List of expansion orders to be accounted for.\nN_samples: Number of samples to be used in qMC integration. Must be a power of 2.\nrand_params: Parameters of the randomized qMC integration.\nseq_type: Type of the (quasi-)random sequence to be used for integration.\n\nReturns\n\nA list of scalar-valued GF objects containing the computed correlators, one element per a pair in expansion.corr_operators.\n\n\n\n\n\n","category":"function"},{"location":"api/#api:QInchworm.randomization","page":"Public API","title":"QInchworm.randomization","text":"","category":"section"},{"location":"api/","page":"Public API","title":"Public API","text":"CurrentModule = QInchworm.randomization","category":"page"},{"location":"api/","page":"Public API","title":"Public API","text":"randomization","category":"page"},{"location":"api/#QInchworm.randomization","page":"Public API","title":"QInchworm.randomization","text":"Randomized quasi Monte Carlo.\n\nExports\n\nRandomizationParams\nRequestStdDev\n\n\n\n\n\n","category":"module"},{"location":"api/","page":"Public API","title":"Public API","text":"RandomizationParams\nRequestStdDev","category":"page"},{"location":"api/#QInchworm.randomization.RandomizationParams","page":"Public API","title":"QInchworm.randomization.RandomizationParams","text":"struct RandomizationParams\n\nParameters of the randomized qMC integration.\n\nFields\n\nrng::Union{Nothing, Random.AbstractRNG}: Random Number Generator used to scramble Sobol sequences or nothing to disable scrambling\n\nN_seqs::Int64: Maximal number of scrambled Sobol sequences to be used\ntarget_std::Float64: Target standard deviation of the accumulated quantity (∞-norm for matrices)\n\n\n\n\n\n","category":"type"},{"location":"api/#QInchworm.randomization.RequestStdDev","page":"Public API","title":"QInchworm.randomization.RequestStdDev","text":"struct RequestStdDev\n\nSingleton type used to select methods that return an estimate of the standard deviation in addition to the mean.\n\n\n\n\n\n","category":"type"},{"location":"api/#api:QInchworm.ppgf","page":"Public API","title":"QInchworm.ppgf","text":"","category":"section"},{"location":"api/","page":"Public API","title":"Public API","text":"CurrentModule = QInchworm.ppgf","category":"page"},{"location":"api/","page":"Public API","title":"Public API","text":"ppgf","category":"page"},{"location":"api/#QInchworm.ppgf","page":"Public API","title":"QInchworm.ppgf","text":"Pseudo-particle Green's functions (propagators) of finite fermionic systems and related tools.\n\nFor a system defined by a time-independent Hamiltonian hat H, the pseudo-particle Green's function (PPGF) is\n\nP(z z) = left\nbeginarrayll\n-i (-1)^hat N e^-i hat H(z-z) z succ -ibeta cap -ibeta succeq z\n-i e^-i hat H(z-z) textotherwise\nendarray\nright\n\nIn particular, on the imaginary time segment alone one has P(tau) = -i e^-hat H tau.\n\nThis operator has a block-diagonal structure determined by the symmetry sectors of hat H, and is stored as a vector of GF containers corresponding to the individual diagonal blocks (FullTimePPGF, ImaginaryTimePPGF).\n\nExports\n\nFullTimePPGF\nImaginaryTimePPGF\natomic_ppgf\ndensity_matrix\nnormalize!\npartition_function\n\n\n\n\n\n","category":"module"},{"location":"api/","page":"Public API","title":"Public API","text":"FullTimePPGF\nImaginaryTimePPGF\natomic_ppgf\npartition_function\ndensity_matrix\nnormalize!","category":"page"},{"location":"api/#QInchworm.ppgf.FullTimePPGF","page":"Public API","title":"QInchworm.ppgf.FullTimePPGF","text":"An atomic propagator (PPGF) defined on a full Keldysh contour\n\n\n\n\n\n","category":"type"},{"location":"api/#QInchworm.ppgf.ImaginaryTimePPGF","page":"Public API","title":"QInchworm.ppgf.ImaginaryTimePPGF","text":"An atomic propagator (PPGF) defined on an imaginary time segment\n\n\n\n\n\n","category":"type"},{"location":"api/#QInchworm.ppgf.atomic_ppgf","page":"Public API","title":"QInchworm.ppgf.atomic_ppgf","text":"atomic_ppgf(\n β::Float64,\n ed::KeldyshED.EDCore\n) -> Vector{QInchworm.exact_atomic_ppgf.ExactAtomicPPGF}\n\n\nConstruct the exact atomic pseudo-particle Green's function.\n\nParameters\n\nβ: Inverse temperature.\ned: Exact diagonalization structure describing the atomic problem.\n\n\n\n\n\natomic_ppgf(\n grid::Keldysh.FullTimeGrid,\n ed::KeldyshED.EDCore\n) -> Vector{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}}\n\n\nCompute atomic pseudo-particle Green's function on a full contour time grid for a time-independent exact diagonalization problem ed.\n\nAs the resulting PPGF P(z z) is defined up to a multiplier e^-ilambda (z-z), we choose the energy shift lambda to fulfil the normalization property mathrmTri P(-ibeta 0) = 1.\n\n\n\n\n\natomic_ppgf(\n grid::Keldysh.ImaginaryTimeGrid,\n ed::KeldyshED.EDCore\n) -> Vector{Keldysh.ImaginaryTimeGF{ComplexF64, false}}\n\n\nCompute atomic pseudo-particle Green's function on an imaginary time grid for a time-independent exact diagonalization problem ed.\n\nAs the resulting PPGF P(tau) is defined up to a multiplier e^-lambdatau, we choose the energy shift lambda to fulfil the normalization property mathrmTri P(beta) = 1.\n\n\n\n\n\n","category":"function"},{"location":"api/#QInchworm.ppgf.partition_function","page":"Public API","title":"QInchworm.ppgf.partition_function","text":"partition_function(\n P_0::Vector{QInchworm.exact_atomic_ppgf.ExactAtomicPPGF}\n) -> ComplexF64\n\n\nExtract the partition function Z = mathrmTri P_0(-ibeta 0) from a un-normalized pseudo-particle Green's function P_0.\n\n\n\n\n\npartition_function(\n P::Vector{<:Keldysh.AbstractTimeGF}\n) -> ComplexF64\n\n\nExtract the partition function Z = mathrmTri P(-ibeta 0) from a un-normalized pseudo-particle Green's function P.\n\n\n\n\n\n","category":"function"},{"location":"api/#QInchworm.ppgf.density_matrix","page":"Public API","title":"QInchworm.ppgf.density_matrix","text":"density_matrix(\n P::Vector{QInchworm.exact_atomic_ppgf.ExactAtomicPPGF}\n) -> Vector{Matrix{ComplexF64}}\n\n\nExtract the equilibrium density matrix rho = i P(-ibeta 0) from a normalized pseudo-particle Green's function P. The density matrix is block-diagonal and is returned as a vector of blocks.\n\n\n\n\n\ndensity_matrix(\n P::Vector{<:Keldysh.AbstractTimeGF}\n) -> Vector{Matrix{ComplexF64}}\n\n\nExtract the equilibrium density matrix rho = i P(-ibeta 0) from a normalized pseudo-particle Green's function P. The density matrix is block-diagonal and is returned as a vector of blocks.\n\n\n\n\n\n","category":"function"},{"location":"api/#QInchworm.ppgf.normalize!","page":"Public API","title":"QInchworm.ppgf.normalize!","text":"normalize!(\n P::Vector{<:Keldysh.AbstractTimeGF},\n β::Float64\n) -> ComplexF64\n\n\nNormalize a pseudo-particle Green's function P by multiplying it by e^-ilambda (z-z) with lambda chosen such that mathrmTri P(-ibeta 0) = 1.\n\nReturns\n\nThe energy shift lambda.\n\n\n\n\n\nnormalize!(\n P::Vector{<:Keldysh.AbstractTimeGF},\n τ::Keldysh.TimeGridPoint\n)\n\n\nNormalize a pseudo-particle Green's function P by multiplying it by e^-ilambda (z-z) with lambda chosen such that mathrmmaxi P(-itau 0) = 1.\n\n\n\n\n\nnormalize!(P_s::Keldysh.AbstractTimeGF, λ)\n\n\nMultiply a given diagonal block of a pseudo-particle Green's function P_s by e^-ilambda (z-z).\n\n\n\n\n\nnormalize!(\n P_s::QInchworm.spline_gf.IncSplineImaginaryTimeGF{ComplexF64, false},\n λ\n)\n\n\nMultiply a given diagonal block of a pseudo-particle Green's function P_s by e^-ilambda (z-z). This method is defined for the spline-interpolated imaginary-time propagators.\n\n\n\n\n\n","category":"function"},{"location":"api/#api:QInchworm.spline_gf","page":"Public API","title":"QInchworm.spline_gf","text":"","category":"section"},{"location":"api/","page":"Public API","title":"Public API","text":"CurrentModule = QInchworm.spline_gf","category":"page"},{"location":"api/","page":"Public API","title":"Public API","text":"spline_gf","category":"page"},{"location":"api/#QInchworm.spline_gf","page":"Public API","title":"QInchworm.spline_gf","text":"Spline-interpolated Green's function containers.\n\nExports\n\nSplineInterpolatedGF\nph_conj\n\n\n\n\n\n","category":"module"},{"location":"api/","page":"Public API","title":"Public API","text":"SplineInterpolatedGF\nSplineInterpolatedGF(::GFType; ::kd.TimeGridPoint) where {\n T <: Number, scalar, GFType <: kd.AbstractTimeGF{T, scalar}}","category":"page"},{"location":"api/#QInchworm.spline_gf.SplineInterpolatedGF","page":"Public API","title":"QInchworm.spline_gf.SplineInterpolatedGF","text":"struct SplineInterpolatedGF{GFType, T, scalar} <: Keldysh.AbstractTimeGF{T, scalar}\n\nWrapper around a Green's function object that allows for fast cubic spline interpolation on the time grid.\n\nThe wrapper supports square bracket access to the wrapped object, direct access to the grid property, eltype(), Keldysh.norbitals() and Keldysh.TimeDomain(). Evaluation at an arbitrary contour time point (via operator ()) is carried out by a stored set of pre-computed B-spline interpolants.\n\nFields\n\nGF::Any: Wrapped Green's function\ninterpolants::Any: B-spline interpolants, one object per matrix element of G\n\n\n\n\n\n","category":"type"},{"location":"api/#QInchworm.spline_gf.SplineInterpolatedGF-Union{Tuple{GFType}, Tuple{scalar}, Tuple{T}} where {T<:Number, scalar, GFType<:Keldysh.AbstractTimeGF{T, scalar}}","page":"Public API","title":"QInchworm.spline_gf.SplineInterpolatedGF","text":"SplineInterpolatedGF(\n GF::Keldysh.AbstractTimeGF{T<:Number, scalar};\n τ_max\n) -> QInchworm.spline_gf.SplineInterpolatedGF{_A, T} where {_A, T<:Number}\n\n\nMake a SplineInterpolatedGF wrapper around GF and compute interpolants of its data from the start of the grid up to τ_max. By default, the entire data array is used.\n\n\n\n\n\n","category":"method"},{"location":"api/#api:QInchworm.keldysh_dlr","page":"Public API","title":"QInchworm.keldysh_dlr","text":"","category":"section"},{"location":"api/","page":"Public API","title":"Public API","text":"CurrentModule = QInchworm.keldysh_dlr","category":"page"},{"location":"api/","page":"Public API","title":"Public API","text":"keldysh_dlr","category":"page"},{"location":"api/#QInchworm.keldysh_dlr","page":"Public API","title":"QInchworm.keldysh_dlr","text":"Extension of Keldysh.jl defining imaginary time Green's functions represented using the Discrete Lehmann Representation as implemented in Lehmann.jl.\n\nExports\n\nDLRImaginaryTimeGF\nDLRImaginaryTimeGrid\nph_conj\n\n\n\n\n\n","category":"module"},{"location":"api/","page":"Public API","title":"Public API","text":"DLRImaginaryTimeGrid\nDLRImaginaryTimeGF","category":"page"},{"location":"api/#QInchworm.keldysh_dlr.DLRImaginaryTimeGrid","page":"Public API","title":"QInchworm.keldysh_dlr.DLRImaginaryTimeGrid","text":"struct DLRImaginaryTimeGrid <: Keldysh.AbstractTimeGrid\n\nWrapper around Lehmann.jl describing a Discrete Lehmann Representation imaginary time grid conforming to the interface of Keldysh.jl TimeGrids.\n\nFields\n\ncontour::Keldysh.ImaginaryContour\npoints::Vector{Keldysh.TimeGridPoint}\nbranch_bounds::Tuple{Pair{Keldysh.TimeGridPoint, Keldysh.TimeGridPoint}}\nntau::Int64\ndlr::Lehmann.DLRGrid\n\n\n\n\n\n","category":"type"},{"location":"api/#QInchworm.keldysh_dlr.DLRImaginaryTimeGF","page":"Public API","title":"QInchworm.keldysh_dlr.DLRImaginaryTimeGF","text":"struct DLRImaginaryTimeGF{T, scalar} <: Keldysh.AbstractTimeGF{T, scalar}\n\nWrapper around Lehmann.jl describing a Discrete Lehmann Representation imaginary time Green's function conforming to the interface of Keldysh.jl AbstractTimeGF.\n\nFields\n\ngrid::QInchworm.keldysh_dlr.DLRImaginaryTimeGrid\nmat::Keldysh.PeriodicStorage\nξ::Keldysh.GFSignEnum\n\n\n\n\n\n","category":"type"},{"location":"api/#api:QInchworm.utility","page":"Public API","title":"QInchworm.utility","text":"","category":"section"},{"location":"api/","page":"Public API","title":"Public API","text":"CurrentModule = QInchworm.utility","category":"page"},{"location":"api/","page":"Public API","title":"Public API","text":"utility","category":"page"},{"location":"api/#QInchworm.utility","page":"Public API","title":"QInchworm.utility","text":"An assorted collection of utility types and functions.\n\nExports\n\nph_conj\n\n\n\n\n\n","category":"module"},{"location":"api/","page":"Public API","title":"Public API","text":"ph_conj","category":"page"},{"location":"api/#QInchworm.utility.ph_conj","page":"Public API","title":"QInchworm.utility.ph_conj","text":"ph_conj(\n G_int::QInchworm.spline_gf.SplineInterpolatedGF{GFType<:Keldysh.ImaginaryTimeGF{T<:Number, true}, T<:Number, true}\n)\n\n\nGiven a spline-interpolated scalar-valued imaginary time Green's function g(tau), return its particle-hole conjugate g(beta-tau).\n\n\n\n\n\nph_conj(g::Keldysh.ImaginaryTimeGF{T, true}) -> Any\n\n\nGiven a scalar-valued imaginary time Green's function g(tau), return its particle-hole conjugate g(beta-tau).\n\n\n\n\n\nph_conj(\n g::QInchworm.keldysh_dlr.DLRImaginaryTimeGF{T, true}\n) -> QInchworm.keldysh_dlr.DLRImaginaryTimeGF{T, true} where T\n\n\nGiven a scalar-valued imaginary time Green's function g(tau), return its particle-hole conjugate g(beta-tau).\n\n\n\n\n\n","category":"function"},{"location":"modules/inchworm/#QInchworm.inchworm","page":"QInchworm.inchworm","title":"QInchworm.inchworm","text":"","category":"section"},{"location":"modules/inchworm/","page":"QInchworm.inchworm","title":"QInchworm.inchworm","text":"CurrentModule = QInchworm.inchworm","category":"page"},{"location":"modules/inchworm/","page":"QInchworm.inchworm","title":"QInchworm.inchworm","text":"TopologiesInputData\ninchworm_step\ninchworm_step_bare\ndiff_inchworm_step!","category":"page"},{"location":"modules/inchworm/#QInchworm.inchworm.TopologiesInputData","page":"QInchworm.inchworm","title":"QInchworm.inchworm.TopologiesInputData","text":"struct TopologiesInputData\n\nInchworm algorithm input data specific to a given set of topologies.\n\nFields\n\norder::Int64: Expansion order\nn_pts_after::Int64: Number of points in the after-t_w region\ntopologies::Vector{QInchworm.diagrammatics.Topology}: List of contributing topologies\nN_samples::Int64: Number of qMC samples per sequence (should be a power of 2)\nrand_params::QInchworm.randomization.RandomizationParams: qMC randomization parameters\n\n\n\n\n\n","category":"type"},{"location":"modules/inchworm/#QInchworm.inchworm.inchworm_step","page":"QInchworm.inchworm","title":"QInchworm.inchworm.inchworm_step","text":"inchworm_step(\n expansion::QInchworm.expansion.Expansion,\n c::Keldysh.AbstractContour,\n τ_i::Keldysh.TimeGridPoint,\n τ_w::Keldysh.TimeGridPoint,\n τ_f::Keldysh.TimeGridPoint,\n top_data::Vector{QInchworm.inchworm.TopologiesInputData};\n seq_type,\n tmr\n) -> Tuple{Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}, Dict{Int64, Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}}, Dict{Int64, Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}}}\n\n\nPerform one regular step of qMC inchworm accumulation of the bold propagators.\n\nParameters\n\nexpansion: Strong coupling expansion problem.\nc: Time contour for integration.\nτ_i: Initial time of the bold propagator to be computed.\nτ_w: Inchworm splitting time tau_w.\nτ_f: Final time of the bold propagator to be computed.\ntop_data: Inchworm algorithm input data.\nseq_type: Type of the (quasi-)random sequence to be used for integration.\ntmr: A TimerOutput object used for profiling.\n\nReturns\n\nAccumulated value of the bold propagator.\nOrder-resolved contributions to the bold propagator as a dictionary Dict{Int, SectorBlockMatrix}.\nEstimated standard deviations of the order-resolved contributions as a dictionary Dict{Int, SectorBlockMatrix}.\n\n\n\n\n\n","category":"function"},{"location":"modules/inchworm/#QInchworm.inchworm.inchworm_step_bare","page":"QInchworm.inchworm","title":"QInchworm.inchworm.inchworm_step_bare","text":"inchworm_step_bare(\n expansion::QInchworm.expansion.Expansion,\n c::Keldysh.AbstractContour,\n τ_i::Keldysh.TimeGridPoint,\n τ_f::Keldysh.TimeGridPoint,\n top_data::Vector{QInchworm.inchworm.TopologiesInputData};\n seq_type,\n tmr\n) -> Tuple{Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}, Dict{Int64, Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}}, Dict{Int64, Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}}}\n\n\nPerform the initial step of qMC inchworm accumulation of the bold propagators. This step amounts to summing all (not only inchworm-proper) diagrams built out of the bare propagators.\n\nParameters\n\nexpansion: Strong coupling expansion problem.\nc: Time contour for integration.\nτ_i: Initial time of the bold propagator to be computed.\nτ_f: Final time of the bold propagator to be computed.\ntop_data: Inchworm algorithm input data.\nseq_type: Type of the (quasi-)random sequence to be used for integration.\ntmr: A TimerOutput object used for profiling.\n\nReturns\n\nAccumulated value of the bold propagator.\nOrder-resolved contributions to the bold propagator as a dictionary Dict{Int, SectorBlockMatrix}.\nEstimated standard deviations of the order-resolved contributions as a dictionary Dict{Int, SectorBlockMatrix}.\n\n\n\n\n\n","category":"function"},{"location":"modules/inchworm/#QInchworm.inchworm.diff_inchworm_step!","page":"QInchworm.inchworm","title":"QInchworm.inchworm.diff_inchworm_step!","text":"diff_inchworm_step!(\n expansion::QInchworm.expansion.Expansion,\n c::Keldysh.ImaginaryContour,\n τ_i::Keldysh.TimeGridPoint,\n τ_f_prev::Keldysh.TimeGridPoint,\n τ_f::Keldysh.TimeGridPoint,\n Σ::Union{Vector{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}}, Vector{Keldysh.ImaginaryTimeGF{ComplexF64, false}}, Vector{QInchworm.exact_atomic_ppgf.ExactAtomicPPGF}, Vector{QInchworm.spline_gf.IncSplineImaginaryTimeGF{ComplexF64, false}}, Vector{QInchworm.spline_gf.SplineInterpolatedGF{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}, ComplexF64, false}}, Vector{QInchworm.spline_gf.SplineInterpolatedGF{Keldysh.ImaginaryTimeGF{ComplexF64, false}, ComplexF64, false}}},\n hamiltonian::Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}},\n top_data::Vector{QInchworm.inchworm.TopologiesInputData};\n seq_type,\n tmr\n) -> Tuple{Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}, Dict{Int64, Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}}, Dict{Int64, Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}}}\n\n\nPerform one step of the differential qMC inchworm accumulation of the bold propagators.\n\nParameters\n\nexpansion: Strong coupling expansion problem.\nc: Imaginary time contour for integration.\nτ_i: Initial time of the bold propagator to be computed.\nτ_f_prev: Final time of the bold propagator computed at the previous step.\nτ_f: Final time of the bold propagator to be computed.\nΣ: Container to store the pseudo-particle self-energy.\nhamiltonian: Atomic Hamiltonian.\ntop_data: Inchworm algorithm input data.\nseq_type: Type of the (quasi-)random sequence to be used for integration.\ntmr: A TimerOutput object used for profiling.\n\nReturns\n\nAccumulated value of the bold propagator.\nOrder-resolved contributions to pseudo-particle self-energy as a dictionary Dict{Int, SectorBlockMatrix}.\nEstimated standard deviations of the order-resolved contributions as a dictionary Dict{Int, SectorBlockMatrix}.\n\n\n\n\n\n","category":"function"},{"location":"modules/randomization/#QInchworm.randomization","page":"QInchworm.randomization","title":"QInchworm.randomization","text":"","category":"section"},{"location":"modules/randomization/","page":"QInchworm.randomization","title":"QInchworm.randomization","text":"CurrentModule = QInchworm.randomization","category":"page"},{"location":"modules/randomization/","page":"QInchworm.randomization","title":"QInchworm.randomization","text":"mean_std_from_randomization","category":"page"},{"location":"modules/randomization/#QInchworm.randomization.mean_std_from_randomization","page":"QInchworm.randomization","title":"QInchworm.randomization.mean_std_from_randomization","text":"mean_std_from_randomization(\n f::Function,\n D::Int64,\n params::QInchworm.randomization.RandomizationParams;\n seq_type\n) -> Tuple{Any, Any}\n\n\nEstimate mean and standard deviation using randomized quasi Monte Carlo.\n\nThis function initializes a number of D-dimensional scrambled Sobol sequences using the set of parameters params and passes each of them to the function f. It returns the mean and the standard deviation of f's return values.\n\nA different sequence type can be specified using the seq_type argument, provided its constructor has the same signature as ScrambledSobolSeq.\n\n\n\n\n\n","category":"function"},{"location":"modules/scrambled_sobol/#QInchworm.scrambled_sobol","page":"QInchworm.scrambled_sobol","title":"QInchworm.scrambled_sobol","text":"","category":"section"},{"location":"modules/scrambled_sobol/","page":"QInchworm.scrambled_sobol","title":"QInchworm.scrambled_sobol","text":"CurrentModule = QInchworm.scrambled_sobol","category":"page"},{"location":"modules/scrambled_sobol/","page":"QInchworm.scrambled_sobol","title":"QInchworm.scrambled_sobol","text":"scrambled_sobol\nScrambledSobolSeq\nScrambledSobolSeq(::Int; ::Union{AbstractRNG, Nothing})\nBase.ndims(::ScrambledSobolSeq)\nnext!\nskip!","category":"page"},{"location":"modules/scrambled_sobol/#QInchworm.scrambled_sobol","page":"QInchworm.scrambled_sobol","title":"QInchworm.scrambled_sobol","text":"This module contains a modified and extended version of Sobol.jl's code written by Steven G. Johnson.\n\nThe extensions include those mentioned in Sobol.jl issue #31.\n\nSupport for scrambled Sobol points (implementation of the scrambling is taken from SciPy).\nInclusion of the initial point in the Sobol sequence.\nskip!(... ; exact=false) now skips 2^m points.\n\n\n\n\n\n","category":"module"},{"location":"modules/scrambled_sobol/#QInchworm.scrambled_sobol.ScrambledSobolSeq","page":"QInchworm.scrambled_sobol","title":"QInchworm.scrambled_sobol.ScrambledSobolSeq","text":"mutable struct ScrambledSobolSeq{D}\n\nScrambled Sobol low-discrepancy sequence of dimension D.\n\nFields\n\nm::Matrix{UInt32}: Direction numbers, array of size (D, 32)\nx::Vector{UInt32}: Previous sequence point x = x_n, array of length D\nn::UInt32: Number of sequence points generated so far\n\n\n\n\n\n","category":"type"},{"location":"modules/scrambled_sobol/#QInchworm.scrambled_sobol.ScrambledSobolSeq-Tuple{Int64}","page":"QInchworm.scrambled_sobol","title":"QInchworm.scrambled_sobol.ScrambledSobolSeq","text":"ScrambledSobolSeq(\n D::Int64;\n scramble_rng\n) -> QInchworm.scrambled_sobol.ScrambledSobolSeq\n\n\nCreate a scrambled Sobol sequence of dimension D using the Random Number Generator scramble_rng to generate scrambling parameters. The sequence remains unscrambled if no RNG is provided.\n\n\n\n\n\n","category":"method"},{"location":"modules/scrambled_sobol/#Base.ndims-Tuple{QInchworm.scrambled_sobol.ScrambledSobolSeq}","page":"QInchworm.scrambled_sobol","title":"Base.ndims","text":"ndims(\n s::QInchworm.scrambled_sobol.ScrambledSobolSeq{D}\n) -> Int64\n\n\nDimension D of a scrambled Sobol sequence.\n\n\n\n\n\nndims(s::QInchworm.utility.RandomSeq{RNG, D}) -> Int64\n\n\nDimension D of a random sequence.\n\n\n\n\n\nndims(\n _::QInchworm.qmc_integrate.AbstractDomainTransform{D}\n) -> Any\n\n\nReturn the number of dimensions d of a domain transformation 0 1^d mapsto mathscrD.\n\n\n\n\n\n","category":"method"},{"location":"modules/scrambled_sobol/#QInchworm.scrambled_sobol.next!","page":"QInchworm.scrambled_sobol","title":"QInchworm.scrambled_sobol.next!","text":"next!(\n s::QInchworm.scrambled_sobol.ScrambledSobolSeq,\n x::AbstractVector{<:AbstractFloat}\n) -> AbstractVector{<:AbstractFloat}\n\n\nGenerate the next point mathbfxin0 1^D of the sequence s and write it into the array x.\n\n\n\n\n\nnext!(\n s::QInchworm.scrambled_sobol.ScrambledSobolSeq\n) -> Vector{Float64}\n\n\nGenerate and return the next point mathbfxin0 1^D of the sequence s.\n\n\n\n\n\nnext!(\n s::QInchworm.utility.RandomSeq,\n x::AbstractVector{<:AbstractFloat}\n) -> AbstractVector{<:AbstractFloat}\n\n\nGenerate the next point mathbfxin0 1)^D of the random sequence s and write it into the array x.\n\n\n\n\n\nnext!(s::QInchworm.utility.RandomSeq) -> Vector{Float64}\n\n\nGenerate and return the next point mathbfxin0 1)^D of the sequence s.\n\n\n\n\n\n","category":"function"},{"location":"modules/scrambled_sobol/#QInchworm.scrambled_sobol.skip!","page":"QInchworm.scrambled_sobol","title":"QInchworm.scrambled_sobol.skip!","text":"skip!(\n s::QInchworm.scrambled_sobol.ScrambledSobolSeq,\n n::Integer,\n x;\n exact\n) -> QInchworm.scrambled_sobol.ScrambledSobolSeq\n\n\nSkip a number of points in the sequence s using a preallocated buffer x.\n\nskip!(s, n, x) skips the next 2^m points such that 2^m n leq 2^m+1.\nskip!(s, n, x, exact=true) skips the next n points.\n\n\n\n\n\nskip!(\n s::QInchworm.scrambled_sobol.ScrambledSobolSeq,\n n::Integer;\n exact\n) -> QInchworm.scrambled_sobol.ScrambledSobolSeq\n\n\nSkip a number of points in the sequence s.\n\nskip!(s, n) skips the next 2^m points such that 2^m n leq 2^m+1.\nskip!(s, n, exact=true) skips the next n points.\n\n\n\n\n\nskip!(\n s::QInchworm.utility.RandomSeq,\n n::Integer,\n x;\n exact\n) -> QInchworm.utility.RandomSeq\n\n\nSkip a number of points in the random sequence s using a preallocated buffer x.\n\nskip!(s, n, x) skips the next 2^m points such that 2^m n leq 2^m+1.\nskip!(s, n, x, exact=true) skips the next n points.\n\n\n\n\n\nskip!(\n s::QInchworm.utility.RandomSeq,\n n::Integer;\n exact\n) -> QInchworm.utility.RandomSeq\n\n\nSkip a number of points in the random sequence s.\n\nskip!(s, n) skips the next 2^m points such that 2^m n leq 2^m+1.\nskip!(s, n, exact=true) skips the next n points.\n\n\n\n\n\n","category":"function"},{"location":"modules/mpi/#QInchworm.mpi","page":"QInchworm.mpi","title":"QInchworm.mpi","text":"","category":"section"},{"location":"modules/mpi/","page":"QInchworm.mpi","title":"QInchworm.mpi","text":"CurrentModule = QInchworm.mpi","category":"page"},{"location":"modules/mpi/","page":"QInchworm.mpi","title":"QInchworm.mpi","text":"mpi\nismaster\nrank_sub_range\nall_gather(::Vector{T}; ::MPI.Comm) where T\nall_reduce!(::SectorBlockMatrix, op; ::MPI.Comm)","category":"page"},{"location":"modules/mpi/#QInchworm.mpi","page":"QInchworm.mpi","title":"QInchworm.mpi","text":"MPI-related utility functions.\n\n\n\n\n\n","category":"module"},{"location":"modules/mpi/#QInchworm.mpi.ismaster","page":"QInchworm.mpi","title":"QInchworm.mpi.ismaster","text":"ismaster() -> Bool\nismaster(comm::MPI.Comm) -> Bool\n\n\nCheck whether the calling process has the rank 0 within the group associated with the communicator comm.\n\n\n\n\n\n","category":"function"},{"location":"modules/mpi/#QInchworm.mpi.rank_sub_range","page":"QInchworm.mpi","title":"QInchworm.mpi.rank_sub_range","text":"rank_sub_range(N::Integer; comm) -> UnitRange{Int64}\n\n\nSplit the range 1:N between MPI processes in the communicator comm as evenly as possible and return the sub-range 'owned' by the calling process.\n\n\n\n\n\n","category":"function"},{"location":"modules/mpi/#QInchworm.mpi.all_gather-Union{Tuple{Vector{T}}, Tuple{T}} where T","page":"QInchworm.mpi","title":"QInchworm.mpi.all_gather","text":"all_gather(subvec::Array{T, 1}; comm) -> Any\n\n\nPerform the MPI collective operation Allgather for vectors of elements of a generic type T.\n\nParameters\n\nsubvec: Subvector to be gathered.\ncomm: MPI communicator.\n\nReturns\n\nThe gathered vector of the same element type T.\n\n\n\n\n\n","category":"method"},{"location":"modules/mpi/#QInchworm.mpi.all_reduce!-Tuple{Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}, Any}","page":"QInchworm.mpi","title":"QInchworm.mpi.all_reduce!","text":"all_reduce!(\n sbm::Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}},\n op;\n comm\n)\n\n\nPerform the in-place MPI collective operation Allreduce for a sector block matrix.\n\nParameters\n\nsbm: Sector block matrices to be reduced.\nop: Reduction operation.\ncomm: MPI communicator.\n\nReturns\n\nThe gathered vector of the same element type T.\n\n\n\n\n\n","category":"method"},{"location":"modules/spline_gf/#QInchworm.spline_gf","page":"QInchworm.spline_gf","title":"QInchworm.spline_gf","text":"","category":"section"},{"location":"modules/spline_gf/","page":"QInchworm.spline_gf","title":"QInchworm.spline_gf","text":"CurrentModule = QInchworm.spline_gf","category":"page"},{"location":"modules/spline_gf/#SplineInterpolatedGF","page":"QInchworm.spline_gf","title":"SplineInterpolatedGF","text":"","category":"section"},{"location":"modules/spline_gf/","page":"QInchworm.spline_gf","title":"QInchworm.spline_gf","text":"make_interpolant(::kd.ImaginaryTimeGF{T, scalar}, k, l, ::kd.TimeGridPoint) where {\n T <: Number, scalar}\nupdate_interpolant!(::SplineInterpolatedGF{kd.ImaginaryTimeGF{T, scalar}, T, scalar},\n k, l; ::kd.TimeGridPoint) where {T <: Number, scalar}\nupdate_interpolants!(::SplineInterpolatedGF{kd.ImaginaryTimeGF{T, scalar}, T, scalar};\n ::kd.TimeGridPoint) where {T <: Number, scalar}\ninterpolate(::SplineInterpolatedGF{kd.ImaginaryTimeGF{T, true}, T, true},\n ::kd.BranchPoint, ::kd.BranchPoint) where T\ninterpolate(::SplineInterpolatedGF{kd.ImaginaryTimeGF{T, false}, T, false},\n ::kd.BranchPoint, ::kd.BranchPoint) where T","category":"page"},{"location":"modules/spline_gf/#QInchworm.spline_gf.make_interpolant-Union{Tuple{scalar}, Tuple{T}, Tuple{Keldysh.ImaginaryTimeGF{T, scalar}, Any, Any, Keldysh.TimeGridPoint}} where {T<:Number, scalar}","page":"QInchworm.spline_gf","title":"QInchworm.spline_gf.make_interpolant","text":"make_interpolant(\n GF::Keldysh.ImaginaryTimeGF{T<:Number, scalar},\n k,\n l,\n τ_max::Keldysh.TimeGridPoint\n) -> Interpolations.ScaledInterpolation{_A, 1, Interpolations.BSplineInterpolation{T, N, TCoefs, IT, Axs}, Interpolations.BSpline{Interpolations.Cubic{Interpolations.Line{Interpolations.OnGrid}}}, <:Tuple{LinRange{T, Int64} where T}} where {_A, T, N, TCoefs<:AbstractArray, IT<:Union{Interpolations.NoInterp, Tuple{Vararg{Union{Interpolations.NoInterp, Interpolations.BSpline}}}, Interpolations.BSpline}, Axs<:Tuple{Vararg{AbstractUnitRange, N}}}\n\n\nMake a cubic B-spline interpolant from GF's data corresponding to its matrix indices k, l. Data points from the start of the grid up to τ_max are used.\n\n\n\n\n\n","category":"method"},{"location":"modules/spline_gf/#QInchworm.spline_gf.update_interpolant!-Union{Tuple{scalar}, Tuple{T}, Tuple{QInchworm.spline_gf.SplineInterpolatedGF{Keldysh.ImaginaryTimeGF{T, scalar}, T, scalar}, Any, Any}} where {T<:Number, scalar}","page":"QInchworm.spline_gf","title":"QInchworm.spline_gf.update_interpolant!","text":"update_interpolant!(\n G_int::QInchworm.spline_gf.SplineInterpolatedGF{Keldysh.ImaginaryTimeGF{T<:Number, scalar}, T<:Number, scalar},\n k,\n l;\n τ_max\n) -> Interpolations.ScaledInterpolation{_A, 1, Interpolations.BSplineInterpolation{T, N, TCoefs, IT, Axs}, Interpolations.BSpline{Interpolations.Cubic{Interpolations.Line{Interpolations.OnGrid}}}, <:Tuple{LinRange{T, Int64} where T}} where {_A, T, N, TCoefs<:AbstractArray, IT<:Union{Interpolations.NoInterp, Tuple{Vararg{Union{Interpolations.NoInterp, Interpolations.BSpline}}}, Interpolations.BSpline}, Axs<:Tuple{Vararg{AbstractUnitRange, N}}}\n\n\nUpdate the interpolant stored in G_int and corresponding to its matrix indices k, l. The updated interpolant interpolates data points of G_int.GF from the start of the grid up to τ_max. By default, the entire data array is used.\n\n\n\n\n\n","category":"method"},{"location":"modules/spline_gf/#QInchworm.spline_gf.update_interpolants!-Union{Tuple{QInchworm.spline_gf.SplineInterpolatedGF{Keldysh.ImaginaryTimeGF{T, scalar}, T, scalar}}, Tuple{scalar}, Tuple{T}} where {T<:Number, scalar}","page":"QInchworm.spline_gf","title":"QInchworm.spline_gf.update_interpolants!","text":"update_interpolants!(\n G_int::QInchworm.spline_gf.SplineInterpolatedGF{Keldysh.ImaginaryTimeGF{T<:Number, scalar}, T<:Number, scalar};\n τ_max\n)\n\n\nUpdate all interpolants stored in G_int. The updated interpolants interpolate data points of G_int.GF from the start of the grid up to τ_max. By default, the entire data array is used.\n\n\n\n\n\n","category":"method"},{"location":"modules/spline_gf/#Interpolations.interpolate-Union{Tuple{T}, Tuple{QInchworm.spline_gf.SplineInterpolatedGF{Keldysh.ImaginaryTimeGF{T, true}, T, true}, Keldysh.BranchPoint, Keldysh.BranchPoint}} where T","page":"QInchworm.spline_gf","title":"Interpolations.interpolate","text":"interpolate(\n G_int::QInchworm.spline_gf.SplineInterpolatedGF{Keldysh.ImaginaryTimeGF{T, true}, T, true},\n t1::Keldysh.BranchPoint,\n t2::Keldysh.BranchPoint\n) -> Any\n\n\nEvaluate the spline-interpolated Green's function G_int at the contour time arguments t1, t2.\n\n\n\n\n\n","category":"method"},{"location":"modules/spline_gf/#Interpolations.interpolate-Union{Tuple{T}, Tuple{QInchworm.spline_gf.SplineInterpolatedGF{Keldysh.ImaginaryTimeGF{T, false}, T, false}, Keldysh.BranchPoint, Keldysh.BranchPoint}} where T","page":"QInchworm.spline_gf","title":"Interpolations.interpolate","text":"interpolate(\n G_int::QInchworm.spline_gf.SplineInterpolatedGF{Keldysh.ImaginaryTimeGF{T, false}, T, false},\n t1::Keldysh.BranchPoint,\n t2::Keldysh.BranchPoint\n) -> Any\n\n\nEvaluate the spline-interpolated Green's function G_int at the contour time arguments t1, t2.\n\n\n\n\n\n","category":"method"},{"location":"modules/spline_gf/#IncSplineImaginaryTimeGF","page":"QInchworm.spline_gf","title":"IncSplineImaginaryTimeGF","text":"","category":"section"},{"location":"modules/spline_gf/","page":"QInchworm.spline_gf","title":"QInchworm.spline_gf","text":"IncSplineImaginaryTimeGF\nIncSplineImaginaryTimeGF(::kd.ImaginaryTimeGF{T, true}, ::T) where {T <: Number}\nIncSplineImaginaryTimeGF(::kd.ImaginaryTimeGF{T, false}, ::Matrix{T}) where {T <: Number}\nmake_inc_interpolant(::kd.ImaginaryTimeGF{T, scalar}, k, l, ::T) where {T <: Number, scalar}\nBase.zero(::IncSplineImaginaryTimeGF{T, false}) where {T <: Number}\nBase.zero(::IncSplineImaginaryTimeGF{T, true}) where {T <: Number}\nextend!(::IncSplineImaginaryTimeGF, val)\ninterpolate(::IncSplineImaginaryTimeGF{T, true}, ::kd.BranchPoint, ::kd.BranchPoint) where T\ninterpolate(::IncSplineImaginaryTimeGF{T, false}, ::kd.BranchPoint, ::kd.BranchPoint) where T","category":"page"},{"location":"modules/spline_gf/#QInchworm.spline_gf.IncSplineImaginaryTimeGF","page":"QInchworm.spline_gf","title":"QInchworm.spline_gf.IncSplineImaginaryTimeGF","text":"struct IncSplineImaginaryTimeGF{T, scalar} <: Keldysh.AbstractTimeGF{T, scalar}\n\nWrapper around an imaginary time Green's function object that supports interpolation based on the IncrementalSpline.\n\nThe wrapper supports square bracket access to the wrapped object, direct access to the grid property, eltype(), Keldysh.norbitals() and Keldysh.TimeDomain(). Evaluation at an arbitrary imaginary time point (via operator ()) is carried out by a stored set of pre-computed IncrementalSpline interpolants.\n\nFields\n\nGF::Keldysh.ImaginaryTimeGF: Wrapped Green's function\ninterpolants::Any: Incremental spline interpolants, one object per matrix element of GF\n\n\n\n\n\n","category":"type"},{"location":"modules/spline_gf/#QInchworm.spline_gf.IncSplineImaginaryTimeGF-Union{Tuple{T}, Tuple{Keldysh.ImaginaryTimeGF{T, true}, T}} where T<:Number","page":"QInchworm.spline_gf","title":"QInchworm.spline_gf.IncSplineImaginaryTimeGF","text":"IncSplineImaginaryTimeGF(\n GF::Keldysh.ImaginaryTimeGF{T<:Number, true},\n derivative_at_0::Number\n) -> QInchworm.spline_gf.IncSplineImaginaryTimeGF{T, true} where T<:Number\n\n\nMake a IncSplineImaginaryTimeGF wrapper around a scalar-valued GF and initialize incremental interpolants of its data. derivative_at_0 is imaginary time derivative of GF at tau=0 needed to compute the first segment of the interpolants.\n\n\n\n\n\n","category":"method"},{"location":"modules/spline_gf/#QInchworm.spline_gf.IncSplineImaginaryTimeGF-Union{Tuple{T}, Tuple{Keldysh.ImaginaryTimeGF{T, false}, Matrix{T}}} where T<:Number","page":"QInchworm.spline_gf","title":"QInchworm.spline_gf.IncSplineImaginaryTimeGF","text":"IncSplineImaginaryTimeGF(\n GF::Keldysh.ImaginaryTimeGF{T<:Number, false},\n derivative_at_0::Array{T<:Number, 2}\n) -> QInchworm.spline_gf.IncSplineImaginaryTimeGF{T, false} where T<:Number\n\n\nMake a IncSplineImaginaryTimeGF wrapper around a matrix-valued GF and initialize incremental interpolants of its data. derivative_at_0 is imaginary time derivative of GF at tau=0 needed to compute the first segment of the interpolants.\n\n\n\n\n\n","category":"method"},{"location":"modules/spline_gf/#QInchworm.spline_gf.make_inc_interpolant-Union{Tuple{scalar}, Tuple{T}, Tuple{Keldysh.ImaginaryTimeGF{T, scalar}, Any, Any, T}} where {T<:Number, scalar}","page":"QInchworm.spline_gf","title":"QInchworm.spline_gf.make_inc_interpolant","text":"make_inc_interpolant(\n GF::Keldysh.ImaginaryTimeGF{T<:Number, scalar},\n k,\n l,\n derivative_at_0::Number\n) -> QInchworm.utility.IncrementalSpline\n\n\nMake an incremental spline interpolant from GF's data and corresponding to its matrix indices k, l. derivative_at_0 is imaginary time derivative of GF[k, l] at tau=0 needed to compute the first segment of the interpolant.\n\n\n\n\n\n","category":"method"},{"location":"modules/spline_gf/#Base.zero-Union{Tuple{QInchworm.spline_gf.IncSplineImaginaryTimeGF{T, false}}, Tuple{T}} where T<:Number","page":"QInchworm.spline_gf","title":"Base.zero","text":"zero(\n G_int::QInchworm.spline_gf.IncSplineImaginaryTimeGF{T<:Number, false}\n) -> QInchworm.spline_gf.IncSplineImaginaryTimeGF\n\n\nMake a zero matrix-valued IncSplineImaginaryTimeGF object similar to G_int.\n\n\n\n\n\n","category":"method"},{"location":"modules/spline_gf/#Base.zero-Union{Tuple{QInchworm.spline_gf.IncSplineImaginaryTimeGF{T, true}}, Tuple{T}} where T<:Number","page":"QInchworm.spline_gf","title":"Base.zero","text":"zero(\n G_int::QInchworm.spline_gf.IncSplineImaginaryTimeGF{T<:Number, true}\n) -> QInchworm.spline_gf.IncSplineImaginaryTimeGF\n\n\nMake a zero scalar-valued IncSplineImaginaryTimeGF object similar to G_int.\n\n\n\n\n\n","category":"method"},{"location":"modules/spline_gf/#QInchworm.utility.extend!-Tuple{QInchworm.spline_gf.IncSplineImaginaryTimeGF, Any}","page":"QInchworm.spline_gf","title":"QInchworm.utility.extend!","text":"extend!(\n G_int::QInchworm.spline_gf.IncSplineImaginaryTimeGF,\n val\n) -> Any\n\n\nExtend the underlying IncrementalSpline objects stored in G_int with a value val.\n\n\n\n\n\n","category":"method"},{"location":"modules/spline_gf/#Interpolations.interpolate-Union{Tuple{T}, Tuple{QInchworm.spline_gf.IncSplineImaginaryTimeGF{T, true}, Keldysh.BranchPoint, Keldysh.BranchPoint}} where T","page":"QInchworm.spline_gf","title":"Interpolations.interpolate","text":"interpolate(\n G_int::QInchworm.spline_gf.IncSplineImaginaryTimeGF{T, true},\n τ1::Keldysh.BranchPoint,\n τ2::Keldysh.BranchPoint\n) -> Any\n\n\nEvaluate the spline-interpolated scalar-valued Green's function G_int at the imaginary time arguments τ1, τ2.\n\n\n\n\n\n","category":"method"},{"location":"modules/spline_gf/#Interpolations.interpolate-Union{Tuple{T}, Tuple{QInchworm.spline_gf.IncSplineImaginaryTimeGF{T, false}, Keldysh.BranchPoint, Keldysh.BranchPoint}} where T","page":"QInchworm.spline_gf","title":"Interpolations.interpolate","text":"interpolate(\n G_int::QInchworm.spline_gf.IncSplineImaginaryTimeGF{T, false},\n τ1::Keldysh.BranchPoint,\n τ2::Keldysh.BranchPoint\n) -> Any\n\n\nEvaluate the spline-interpolated matrix-valued Green's function G_int at the imaginary time arguments τ1, τ2.\n\n\n\n\n\n","category":"method"},{"location":"modules/exact_atomic_ppgf/#QInchworm.exact_atomic_ppgf","page":"QInchworm.exact_atomic_ppgf","title":"QInchworm.exact_atomic_ppgf","text":"","category":"section"},{"location":"modules/exact_atomic_ppgf/","page":"QInchworm.exact_atomic_ppgf","title":"QInchworm.exact_atomic_ppgf","text":"Modules = [QInchworm.exact_atomic_ppgf]","category":"page"},{"location":"modules/exact_atomic_ppgf/#QInchworm.exact_atomic_ppgf","page":"QInchworm.exact_atomic_ppgf","title":"QInchworm.exact_atomic_ppgf","text":"Exact atomic pseudo-particle Green's function module enabling exact evaluation of the atomic propagator P_0(z) by evaluating the exponential P_0(z) = -i e^-iz hat H_loc.\n\nExports\n\nExactAtomicPPGF\natomic_ppgf\ndensity_matrix\ninterpolate!\npartition_function\n\n\n\n\n\n","category":"module"},{"location":"modules/exact_atomic_ppgf/#QInchworm.exact_atomic_ppgf.ExactAtomicPPGF","page":"QInchworm.exact_atomic_ppgf","title":"QInchworm.exact_atomic_ppgf.ExactAtomicPPGF","text":"struct ExactAtomicPPGF <: Keldysh.AbstractTimeGF{ComplexF64, false}\n\nExact atomic pseudo-particle Green's function type.\n\nFields\n\nβ::Float64: Inverse temperature\nE::Vector{Float64}: Eigenvalues of the atomic Hamiltonian\n\n\n\n\n\n","category":"type"},{"location":"modules/exact_atomic_ppgf/#QInchworm.exact_atomic_ppgf.ExactAtomicPPGF-Tuple{Keldysh.BranchPoint, Keldysh.BranchPoint}","page":"QInchworm.exact_atomic_ppgf","title":"QInchworm.exact_atomic_ppgf.ExactAtomicPPGF","text":"Evaluate atomic propagator at the difference between imaginary time branch points.\n\nParameters\n\nz1: first branch point.\nz2: second branch point.\n\nReturns\n\nValue of atomic pseudo-particle propagator P_0(z_1 - z_2) as a diagonal matrix Diagonal.\n\n\n\n\n\n","category":"method"},{"location":"modules/exact_atomic_ppgf/#QInchworm.exact_atomic_ppgf.ExactAtomicPPGF-Tuple{Number}","page":"QInchworm.exact_atomic_ppgf","title":"QInchworm.exact_atomic_ppgf.ExactAtomicPPGF","text":"Evaluate atomic propagator at complex contour time z.\n\nParameters\n\nz: scalar time.\n\nReturns\n\nValue of atomic pseudo-particle propagator P_0(z) as a diagonal matrix Diagonal.\n\n\n\n\n\n","category":"method"},{"location":"modules/exact_atomic_ppgf/#Keldysh.interpolate!-Tuple{Matrix{ComplexF64}, QInchworm.exact_atomic_ppgf.ExactAtomicPPGF, Keldysh.BranchPoint, Keldysh.BranchPoint}","page":"QInchworm.exact_atomic_ppgf","title":"Keldysh.interpolate!","text":"interpolate!(\n x::Matrix{ComplexF64},\n P_0::QInchworm.exact_atomic_ppgf.ExactAtomicPPGF,\n z1::Keldysh.BranchPoint,\n z2::Keldysh.BranchPoint\n) -> LinearAlgebra.Diagonal{ComplexF64, Vector{ComplexF64}}\n\n\nIn-place evaluation of the atomic propagator at the difference between imaginary time branch points.\n\nParameters\n\nx: Matrix to store the value of the atomic pseudo-particle propagator in.\nP_0: Atomic pseudo-particle propagator.\nz1: first branch point.\nz2: second branch point.\n\nReturns\n\nValue of atomic pseudo-particle propagator P_0(z_1 - z_2) as a diagonal matrix Diagonal.\n\n\n\n\n\n","category":"method"},{"location":"modules/exact_atomic_ppgf/#QInchworm.ppgf.atomic_ppgf-Tuple{Float64, KeldyshED.EDCore}","page":"QInchworm.exact_atomic_ppgf","title":"QInchworm.ppgf.atomic_ppgf","text":"atomic_ppgf(\n β::Float64,\n ed::KeldyshED.EDCore\n) -> Vector{QInchworm.exact_atomic_ppgf.ExactAtomicPPGF}\n\n\nConstruct the exact atomic pseudo-particle Green's function.\n\nParameters\n\nβ: Inverse temperature.\ned: Exact diagonalization structure describing the atomic problem.\n\n\n\n\n\n","category":"method"},{"location":"modules/exact_atomic_ppgf/#QInchworm.ppgf.density_matrix-Tuple{Vector{QInchworm.exact_atomic_ppgf.ExactAtomicPPGF}}","page":"QInchworm.exact_atomic_ppgf","title":"QInchworm.ppgf.density_matrix","text":"density_matrix(\n P::Vector{QInchworm.exact_atomic_ppgf.ExactAtomicPPGF}\n) -> Vector{Matrix{ComplexF64}}\n\n\nExtract the equilibrium density matrix rho = i P(-ibeta 0) from a normalized pseudo-particle Green's function P. The density matrix is block-diagonal and is returned as a vector of blocks.\n\n\n\n\n\n","category":"method"},{"location":"modules/exact_atomic_ppgf/#QInchworm.ppgf.partition_function-Tuple{Vector{QInchworm.exact_atomic_ppgf.ExactAtomicPPGF}}","page":"QInchworm.exact_atomic_ppgf","title":"QInchworm.ppgf.partition_function","text":"partition_function(\n P_0::Vector{QInchworm.exact_atomic_ppgf.ExactAtomicPPGF}\n) -> ComplexF64\n\n\nExtract the partition function Z = mathrmTri P_0(-ibeta 0) from a un-normalized pseudo-particle Green's function P_0.\n\n\n\n\n\n","category":"method"},{"location":"modules/ppgf/#QInchworm.ppgf","page":"QInchworm.ppgf","title":"QInchworm.ppgf","text":"","category":"section"},{"location":"modules/ppgf/","page":"QInchworm.ppgf","title":"QInchworm.ppgf","text":"CurrentModule = QInchworm.ppgf","category":"page"},{"location":"modules/ppgf/#Operators-and-their-matrices","page":"QInchworm.ppgf","title":"Operators and their matrices","text":"","category":"section"},{"location":"modules/ppgf/","page":"QInchworm.ppgf","title":"QInchworm.ppgf","text":"total_density_operator\noperator_matrix_representation\noperator_product","category":"page"},{"location":"modules/ppgf/#QInchworm.ppgf.total_density_operator","page":"QInchworm.ppgf","title":"QInchworm.ppgf.total_density_operator","text":"total_density_operator(ed::KeldyshED.EDCore) -> Any\n\n\nReturn the total density operator hat N = sum_i n_i, where i labels all single-particle basis states used to construct the exact diagonalization object ed.\n\n\n\n\n\n","category":"function"},{"location":"modules/ppgf/#QInchworm.ppgf.operator_matrix_representation","page":"QInchworm.ppgf","title":"QInchworm.ppgf.operator_matrix_representation","text":"operator_matrix_representation(\n op_expr::KeldyshED.Operators.OperatorExpr{S<:Number},\n ed::KeldyshED.EDCore\n) -> Vector{T} where T<:(Matrix{T} where T<:Number)\n\n\nMake matrix representation of an operator expression op_expr in each invariant subspace (symmetry sector) defined by the exact diagonalization object ed.\n\nNB! Requires that the operator expression does not mix symmetry sectors.\n\n\n\n\n\n","category":"function"},{"location":"modules/ppgf/#QInchworm.ppgf.operator_product","page":"QInchworm.ppgf","title":"QInchworm.ppgf.operator_product","text":"operator_product(\n ed::KeldyshED.EDCore,\n P,\n s_i::Integer,\n z_i,\n z_f,\n vertices\n) -> Tuple{Any, Any}\n\n\nEvaluate a product of vertices at different contour times z_n n=1ldots N with the pseudo-particle Green's functions sandwiched in between. The product is padded with the PPGFs P(z_1 z_i) and P(z_f z_N) at the respective ends of the contour segment z_i z_f.\n\nvertices is a contour-time ordered list of triples (z_n, c_n, o_n) were:\n\nz_n is a contour time,\nc_n is +1/-1 for creation/annihilation operator respectively, and\no_n is a spin-orbital index.\n\nParameters\n\ned: An object defining the exact diagonalization problem.\nP: The pseudo-particle Green's function as a list of its diagonal blocks.\ns_i: Initial symmetry sector, in which the rightmost PPGF is acting.\nz_i: Initial contour time z_i.\nz_f: Final contour time z_f.\nvertices: The list of vertices.\n\nReturns\n\nThe evaluated matrix product and the final symmetry sector, in which the leftmost PPGF is acting.\n\n\n\n\n\n","category":"function"},{"location":"modules/ppgf/#Pseudo-particle-Green's-functions","page":"QInchworm.ppgf","title":"Pseudo-particle Green's functions","text":"","category":"section"},{"location":"modules/ppgf/","page":"QInchworm.ppgf","title":"QInchworm.ppgf","text":"FullTimePPGFSector\nImaginaryTimePPGFSector\natomic_ppgf!\nfirst_order_spgf\nfirst_order_spgf!\ncheck_ppgf_real_time_symmetries\nset_ppgf!\nset_ppgf_initial_conditions!\nppgf_real_time_initial_conditions!\nset_ppgf_symmetric!\ninitial_ppgf_derivative\nreduced_ppgf","category":"page"},{"location":"modules/ppgf/#QInchworm.ppgf.FullTimePPGFSector","page":"QInchworm.ppgf","title":"QInchworm.ppgf.FullTimePPGFSector","text":"A single block of an atomic propagator (PPGF) defined on a full Keldysh contour\n\n\n\n\n\n","category":"type"},{"location":"modules/ppgf/#QInchworm.ppgf.ImaginaryTimePPGFSector","page":"QInchworm.ppgf","title":"QInchworm.ppgf.ImaginaryTimePPGFSector","text":"A single block of an atomic propagator (PPGF) defined on an imaginary time segment\n\n\n\n\n\n","category":"type"},{"location":"modules/ppgf/#QInchworm.ppgf.atomic_ppgf!","page":"QInchworm.ppgf","title":"QInchworm.ppgf.atomic_ppgf!","text":"atomic_ppgf!(P::Vector, ed::KeldyshED.EDCore; Δλ)\n\n\nIn-place version of atomic_ppgf() that writes the computed PPGF into its first argument P. If Δλ is non-zero, then P(z z) is multiplied by e^-iDeltalambda (z-z).\n\n\n\n\n\n","category":"function"},{"location":"modules/ppgf/#QInchworm.ppgf.first_order_spgf","page":"QInchworm.ppgf","title":"QInchworm.ppgf.first_order_spgf","text":"first_order_spgf(\n P::Vector{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}},\n ed::KeldyshED.EDCore,\n o1,\n o2\n) -> Any\n\n\nCompute the first order pseudo-particle diagram contribution to the single-particle Green's function g_o_1 o_2(z z) defined on the full Keldysh contour.\n\nParameters\n\nP: Pseudo-particle Green's function.\ned: An object defining the exact diagonalization problem.\no1: First index of the single-particle Green's function to be computed.\no2: Second index of the single-particle Green's function to be computed.\n\nReturns\n\nThe computed single-particle Green's function.\n\n\n\n\n\nfirst_order_spgf(\n P::Vector{Keldysh.ImaginaryTimeGF{ComplexF64, false}},\n ed::KeldyshED.EDCore,\n o1,\n o2\n) -> Any\n\n\nCompute the first order pseudo-particle diagram contribution to the single-particle Green's function g_o_1 o_2(tau) defined on the imaginary time segment.\n\nParameters\n\nP: Pseudo-particle Green's function.\ned: An object defining the exact diagonalization problem.\no1: First index of the single-particle Green's function to be computed.\no2: Second index of the single-particle Green's function to be computed.\n\nReturns\n\nThe computed single-particle Green's function.\n\n\n\n\n\n","category":"function"},{"location":"modules/ppgf/#QInchworm.ppgf.first_order_spgf!","page":"QInchworm.ppgf","title":"QInchworm.ppgf.first_order_spgf!","text":"first_order_spgf!(g, P, ed::KeldyshED.EDCore, o1, o2)\n\n\nIn-place version of first_order_spgf() that writes the computed single-particle Green's function into its first argument g.\n\n\n\n\n\n","category":"function"},{"location":"modules/ppgf/#QInchworm.ppgf.check_ppgf_real_time_symmetries","page":"QInchworm.ppgf","title":"QInchworm.ppgf.check_ppgf_real_time_symmetries","text":"check_ppgf_real_time_symmetries(\n P::Vector{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}},\n ed::KeldyshED.EDCore\n) -> Bool\n\n\nCheck whether a given pseudo-particle Green's function P obeys all symmetry relations between its Keldysh components.\n\nParameters\n\nP: Pseudo-particle Green's function to check.\ned: An object defining the respective exact diagonalization problem.\n\n\n\n\n\n","category":"function"},{"location":"modules/ppgf/#QInchworm.ppgf.set_ppgf!","page":"QInchworm.ppgf","title":"QInchworm.ppgf.set_ppgf!","text":"set_ppgf!(\n P::Vector{QInchworm.spline_gf.IncSplineImaginaryTimeGF{ComplexF64, false}},\n τ_i::Keldysh.TimeGridPoint,\n τ_f::Keldysh.TimeGridPoint,\n val::Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}\n)\n\n\nSet the value of P corresponding to a given pair of imaginary time points (tau_f tau_i). This method is defined for the spline-interpolated imaginary-time propagators.\n\nParameters\n\nP: Pseudo-particle Green's function.\nτ_i: Initial imaginary time tau_i.\nτ_f: Final imaginary time tau_f.\nval: Block matrix to set P(tau_f tau_i) to. Expected to be block-diagonal.\n\n\n\n\n\nset_ppgf!(\n P::Union{Vector{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}}, Vector{Keldysh.ImaginaryTimeGF{ComplexF64, false}}},\n t_i::Keldysh.TimeGridPoint,\n t_f::Keldysh.TimeGridPoint,\n val::Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}\n)\n\n\nSet the value of P corresponding to a given pair of contour time points (t_f t_i).\n\nParameters\n\nP: Pseudo-particle Green's function.\nt_i: Initial contour time t_i.\nt_f: Final contour time t_f.\nval: Block matrix to set P(t_f t_i) to. Expected to be block-diagonal.\n\n\n\n\n\n","category":"function"},{"location":"modules/ppgf/#QInchworm.ppgf.set_ppgf_initial_conditions!","page":"QInchworm.ppgf","title":"QInchworm.ppgf.set_ppgf_initial_conditions!","text":"set_ppgf_initial_conditions!(\n P::Union{Vector{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}}, Vector{Keldysh.ImaginaryTimeGF{ComplexF64, false}}}\n)\n\n\nGiven a pseudo-particle Green's function P, set its values to zero except for the same-time components P(z z) = -i.\n\n\n\n\n\n","category":"function"},{"location":"modules/ppgf/#QInchworm.ppgf.ppgf_real_time_initial_conditions!","page":"QInchworm.ppgf","title":"QInchworm.ppgf.ppgf_real_time_initial_conditions!","text":"ppgf_real_time_initial_conditions!(\n P::Vector{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}},\n ed::KeldyshED.EDCore\n)\n\n\nGiven a pseudo-particle Green's function P, set its values at the real branch edges t = 0 to be consistent with values on the imaginary time branch.\n\nParameters\n\nP: Pseudo-particle Green's function.\ned: Exact diagonalization object used to derive statistical sign pre-factors of PPGF sectors.\n\n\n\n\n\n","category":"function"},{"location":"modules/ppgf/#QInchworm.ppgf.set_ppgf_symmetric!","page":"QInchworm.ppgf","title":"QInchworm.ppgf.set_ppgf_symmetric!","text":"set_ppgf_symmetric!(\n P_s::Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid},\n n,\n z1::Keldysh.TimeGridPoint,\n z2::Keldysh.TimeGridPoint,\n value\n) -> Any\n\n\nSet real-time pseudo-particle Green's function symmetry connected time pairs.\n\nParameters\n\nP_s: Diagonal block of the PPGF to be updated.\nn: The number of particles in the corresponding sector.\nz1: First argument of the PPGF.\nz2: Second argument of the PPGF (must lie on the backward branch).\nvalue: Value to set elements of the PPGF to.\n\n\n\n\n\n","category":"function"},{"location":"modules/ppgf/#QInchworm.ppgf.initial_ppgf_derivative","page":"QInchworm.ppgf","title":"QInchworm.ppgf.initial_ppgf_derivative","text":"initial_ppgf_derivative(\n ed::KeldyshED.EDCore,\n β::Float64\n) -> Vector{Any}\n\n\nCompute the imaginary time derivative of the atomic pseudo-particle Green's function, partial_tau P(tau) at tau=0.\n\nParameters\n\ned: Exact diagonalization object defining the atomic propagator.\nβ: Inverse temperature.\n\nReturns\n\nValue of the derivative as a block-diagonal matrix (a list of blocks).\n\n\n\n\n\n","category":"function"},{"location":"modules/ppgf/#QInchworm.ppgf.reduced_ppgf","page":"QInchworm.ppgf","title":"QInchworm.ppgf.reduced_ppgf","text":"reduced_ppgf(\n P::Vector{<:Keldysh.AbstractTimeGF},\n ed::KeldyshED.EDCore,\n target_soi::KeldyshED.Hilbert.SetOfIndices\n) -> Any\n\n\nTake a partial trace of a pseudo-particle Green's function.\n\nParameters\n\nP: Pseudo-particle Green's function.\ned: Exact diagonalization object compatible with P.\ntarget_soi: A subset of creation/annihilation operator labels defining the target subsystem, in which the reduced PPGF acts.\n\nReturns\n\nThe reduced PPGF written in the Fock state basis of the target subsystem.\n\n\n\n\n\n","category":"function"},{"location":"modules/topology_eval/#QInchworm.topology_eval","page":"QInchworm.topology_eval","title":"QInchworm.topology_eval","text":"","category":"section"},{"location":"modules/topology_eval/","page":"QInchworm.topology_eval","title":"QInchworm.topology_eval","text":"CurrentModule = QInchworm.topology_eval","category":"page"},{"location":"modules/topology_eval/","page":"QInchworm.topology_eval","title":"QInchworm.topology_eval","text":"topology_eval\nNodeKind\nNode\nFixedNode\nPairNode\nIdentityNode\nInchNode\nOperatorNode\nTopologyEvaluator\nTopologyEvaluator(::Expansion, ::Int, ::Bool, ::Dict{Int, FixedNode}; ::TimerOutput)\nTopologyEvaluator(::Topology, ::Vector{kd.BranchPoint})\nTopologyEvaluator(::Vector{Topology}, ::Vector{kd.BranchPoint})\n_traverse_configuration_tree!","category":"page"},{"location":"modules/topology_eval/#QInchworm.topology_eval","page":"QInchworm.topology_eval","title":"QInchworm.topology_eval","text":"Evaluator for strong-coupling expansion diagrams of a specific topology.\n\n\n\n\n\n","category":"module"},{"location":"modules/topology_eval/#QInchworm.topology_eval.NodeKind","page":"QInchworm.topology_eval","title":"QInchworm.topology_eval.NodeKind","text":"primitive type NodeKind <: Enum{Int32} 32\n\nNode kind classification using @enum.\n\nPossible values: pair_flag, identity_flag, inch_flag, operator_flag.\n\n\n\n\n\n","category":"type"},{"location":"modules/topology_eval/#QInchworm.topology_eval.Node","page":"QInchworm.topology_eval","title":"QInchworm.topology_eval.Node","text":"struct Node\n\nNode in the atomic propagator backbone of a strong-coupling diagram.\n\nFields\n\nkind::QInchworm.topology_eval.NodeKind: Kind of the node\narc_index::Int64: Index for pair interaction arc\noperator_index::Int64: Index of operator\n\n\n\n\n\n","category":"type"},{"location":"modules/topology_eval/#QInchworm.topology_eval.FixedNode","page":"QInchworm.topology_eval","title":"QInchworm.topology_eval.FixedNode","text":"struct FixedNode\n\nNode in the atomic propagator backbone of a strong-coupling diagram fixed at a certain contour time point.\n\nFields\n\nnode::QInchworm.topology_eval.Node: Reference to operator\ntime::Keldysh.BranchPoint: Contour time point\n\n\n\n\n\n","category":"type"},{"location":"modules/topology_eval/#QInchworm.topology_eval.PairNode","page":"QInchworm.topology_eval","title":"QInchworm.topology_eval.PairNode","text":"PairNode(\n time::Keldysh.BranchPoint\n) -> QInchworm.topology_eval.FixedNode\n\n\nReturn a node that serves as an end of a pair interaction arc fixed at time time.\n\n\n\n\n\n","category":"function"},{"location":"modules/topology_eval/#QInchworm.topology_eval.IdentityNode","page":"QInchworm.topology_eval","title":"QInchworm.topology_eval.IdentityNode","text":"IdentityNode(\n time::Keldysh.BranchPoint\n) -> QInchworm.topology_eval.FixedNode\n\n\nReturn a fixed node at time time with an associated identity operator.\n\n\n\n\n\n","category":"function"},{"location":"modules/topology_eval/#QInchworm.topology_eval.InchNode","page":"QInchworm.topology_eval","title":"QInchworm.topology_eval.InchNode","text":"InchNode(\n time::Keldysh.BranchPoint\n) -> QInchworm.topology_eval.FixedNode\n\n\nReturn a fixed 'inch' node at time time with an associated identity operator.\n\n\n\n\n\n","category":"function"},{"location":"modules/topology_eval/#QInchworm.topology_eval.OperatorNode","page":"QInchworm.topology_eval","title":"QInchworm.topology_eval.OperatorNode","text":"OperatorNode(\n time::Keldysh.BranchPoint,\n operator_pair_index::Int64,\n operator_index::Int64\n) -> QInchworm.topology_eval.FixedNode\n\n\nReturn a fixed operator node at time time with an associated operator. The actual operator is stored in an Expansion structure and is uniquely identified by the pair (operator_pair_index, operator_index).\n\n\n\n\n\n","category":"function"},{"location":"modules/topology_eval/#QInchworm.topology_eval.TopologyEvaluator","page":"QInchworm.topology_eval","title":"QInchworm.topology_eval.TopologyEvaluator","text":"struct TopologyEvaluator\n\nThe evaluation engine for the strong-coupling expansion diagrams.\n\nIn the following, a sequence of Node's contributing to a diagram of a certain topology is referred to as 'configuration'.\n\nFields\n\nexp::QInchworm.expansion.Expansion: Pseudo-particle expansion problem\nconf::Vector{QInchworm.topology_eval.Node}: Configuration as a list of nodes arranged in the contour order\ntimes::Vector{Keldysh.BranchPoint}: Contour positions of nodes in the configuration\ntop_to_conf_pos::Vector{Int64}: Correspondence of node positions within a topology and a configuration\nvar_time_pos::Vector{Int64}: Positions of variable time (non-fixed) nodes within a configuration\nuse_bold_prop::Bool: Must the bold PPGFs be used?\nppgf_mats::Matrix{Matrix{ComplexF64}}: PPGFs evaluated at all relevant pairs of time arguments. ppgf_mats[i, s] is the s-th diagonal block of exp.P (or exp.P0) evaluated at the pair of time points (t_i+1 t_i).\n\npair_ints::Matrix{ComplexF64}: Pair interaction arcs evaluated at all relevant pairs of time arguments.\npair_ints[a, p] is the propagator from exp.pairs[p] evaluated at the pair of time points corresponding to the a-th arc in a topology.\n\nselected_pair_ints::Vector{Int64}: Indices of pair interactions within exp.pairs assigned to each interaction arc in a topology.\n\ntop_result_mats::Vector{Matrix{ComplexF64}}: Pre-allocated container for per-topology evaluation results\nmatrix_prod::QInchworm.utility.LazyMatrixProduct{ComplexF64}: Pre-allocated matrix product evaluator\ntmr::TimerOutputs.TimerOutput: Internal performance timer\n\n\n\n\n\n","category":"type"},{"location":"modules/topology_eval/#QInchworm.topology_eval.TopologyEvaluator-Tuple{QInchworm.expansion.Expansion, Int64, Bool, Dict{Int64, QInchworm.topology_eval.FixedNode}}","page":"QInchworm.topology_eval","title":"QInchworm.topology_eval.TopologyEvaluator","text":"TopologyEvaluator(\n exp::QInchworm.expansion.Expansion,\n order::Int64,\n use_bold_prop::Bool,\n fixed_nodes::Dict{Int64, QInchworm.topology_eval.FixedNode};\n tmr\n) -> QInchworm.topology_eval.TopologyEvaluator\n\n\nParameters\n\nexp: Strong-coupling expansion problem.\norder: Expansion order of the diagrams (the number of interaction arcs).\nuse_bold_prop: Must the bold PPGFs be used in the diagrams?\nfixed_nodes: List of fixed nodes in a configuration along with their positions.\ntmr: Internal performance timer.\n\n\n\n\n\n","category":"method"},{"location":"modules/topology_eval/#QInchworm.topology_eval.TopologyEvaluator-Tuple{QInchworm.diagrammatics.Topology, Vector{Keldysh.BranchPoint}}","page":"QInchworm.topology_eval","title":"QInchworm.topology_eval.TopologyEvaluator","text":"Given a single diagram topology, evaluate contribution from all relevant configurations assuming that non-fixed nodes are located at contour time points times.\n\n\n\n\n\n","category":"method"},{"location":"modules/topology_eval/#QInchworm.topology_eval.TopologyEvaluator-Tuple{Vector{QInchworm.diagrammatics.Topology}, Vector{Keldysh.BranchPoint}}","page":"QInchworm.topology_eval","title":"QInchworm.topology_eval.TopologyEvaluator","text":"Given a list of diagram topologies, evaluate contribution from all relevant configurations assuming that non-fixed nodes are located at contour time points times.\n\n\n\n\n\n","category":"method"},{"location":"modules/topology_eval/#QInchworm.topology_eval._traverse_configuration_tree!","page":"QInchworm.topology_eval","title":"QInchworm.topology_eval._traverse_configuration_tree!","text":"_traverse_configuration_tree!(\n eval::QInchworm.topology_eval.TopologyEvaluator,\n pos::Int64,\n s_i::Int64,\n s_f::Int64,\n pair_int_weight::ComplexF64\n)\n\n\nRecursively traverse a tree of all configurations stemming from a given topology and contributing to the quantity of interest. The result is accumulated in eval.top_result_mats.\n\nParameters\n\neval: Evaluator object.\npos: Position of the currently processed Node in the configuration.\ns_i: Left block index of the matrix representation of the current node.\ns_f: Right block index expected at the final node.\npair_int_weight: Current weight of the pair interaction contribution.\n\n\n\n\n\n","category":"function"},{"location":"modules/utility/#QInchworm.utility","page":"QInchworm.utility","title":"QInchworm.utility","text":"","category":"section"},{"location":"modules/utility/","page":"QInchworm.utility","title":"QInchworm.utility","text":"CurrentModule = QInchworm.utility","category":"page"},{"location":"modules/utility/#Interpolations.jl-addon:-Neumann-boundary-conditions-for-the-cubic-spline","page":"QInchworm.utility","title":"Interpolations.jl addon: Neumann boundary conditions for the cubic spline","text":"","category":"section"},{"location":"modules/utility/","page":"QInchworm.utility","title":"QInchworm.utility","text":"NeumannBC\nInterpolations.prefiltering_system(::Type{T},\n ::Type{TC},\n ::Int,\n ::Interpolations.Cubic{BC}) where {\n T, TC, BC <: NeumannBC{Interpolations.OnGrid}}","category":"page"},{"location":"modules/utility/#QInchworm.utility.NeumannBC","page":"QInchworm.utility","title":"QInchworm.utility.NeumannBC","text":"struct NeumannBC{GT<:Union{Nothing, Interpolations.GridType}, T<:Number} <: Interpolations.BoundaryCondition\n\nInterpolations.jl addon: Implementation of the Neumann boundary conditions for the cubic spline.\n\nFields\n\ngt::Union{Nothing, Interpolations.GridType}: Grid type\nleft_derivative::Number: Function derivative at the left boundary\nright_derivative::Number: Function derivative at the right boundary\n\n\n\n\n\n","category":"type"},{"location":"modules/utility/#Interpolations.prefiltering_system-Union{Tuple{BC}, Tuple{TC}, Tuple{T}, Tuple{Type{T}, Type{TC}, Int64, Interpolations.Cubic{BC}}} where {T, TC, BC<:(QInchworm.utility.NeumannBC{Interpolations.OnGrid})}","page":"QInchworm.utility","title":"Interpolations.prefiltering_system","text":"prefiltering_system(\n _::Type{T},\n _::Type{TC},\n n::Int64,\n degree::Interpolations.Cubic{BC<:(QInchworm.utility.NeumannBC{Interpolations.OnGrid})}\n) -> Tuple{WoodburyMatrices.Woodbury{_A, LinearAlgebra.LU{T, S, P}, SparseArrays.SparseMatrixCSC{Tv, Int64}, SparseArrays.SparseMatrixCSC{Tv1, Int64}, Matrix{_A1}} where {_A, T, S<:(LinearAlgebra.Tridiagonal{T, _B} where _B), P<:(AbstractVector{<:Integer}), Tv, Tv1, _A1}, Vector}\n\n\nCompute the system used to prefilter cubic spline coefficients when using the Neumann boundary conditions.\n\nParameters\n\nT, TC: Element types.\nn: The number of rows in the data input.\ndegree: Interpolation degree information.\n\nReturns\n\nWoodbury matrix and the RHS of the computed system.\n\n\n\n\n\n","category":"method"},{"location":"modules/utility/#Quadratic-spline-that-allows-for-incremental-construction","page":"QInchworm.utility","title":"Quadratic spline that allows for incremental construction","text":"","category":"section"},{"location":"modules/utility/","page":"QInchworm.utility","title":"QInchworm.utility","text":"IncrementalSpline\nextend!","category":"page"},{"location":"modules/utility/#QInchworm.utility.IncrementalSpline","page":"QInchworm.utility","title":"QInchworm.utility.IncrementalSpline","text":"struct IncrementalSpline{KnotT<:Number, T<:Number}\n\nQuadratic spline on an equidistant grid that allows for incremental construction.\n\nFields\n\nknots::AbstractRange{KnotT} where KnotT<:Number: Locations of interpolation knots\ndata::Vector{T} where T<:Number: Values of the interpolated function at the knots\nder_data::Vector{T} where T<:Number: Values of the interpolated function derivative at the knots\n\n\n\n\n\n","category":"type"},{"location":"modules/utility/#QInchworm.utility.extend!","page":"QInchworm.utility","title":"QInchworm.utility.extend!","text":"extend!(\n G_int::QInchworm.spline_gf.IncSplineImaginaryTimeGF,\n val\n) -> Any\n\n\nExtend the underlying IncrementalSpline objects stored in G_int with a value val.\n\n\n\n\n\nextend!(\n spline::QInchworm.utility.IncrementalSpline,\n val\n) -> Vector{T} where T<:Number\n\n\nAdd a segment to an incremental spline by fixing value val of the interpolated function at the next knot.\n\n\n\n\n\n","category":"function"},{"location":"modules/utility/#Lazy-matrix-product","page":"QInchworm.utility","title":"Lazy matrix product","text":"","category":"section"},{"location":"modules/utility/","page":"QInchworm.utility","title":"QInchworm.utility","text":"LazyMatrixProduct\nBase.pushfirst!(::LazyMatrixProduct{T}, ::Matrix{T}) where {T <: Number}\nBase.popfirst!(::LazyMatrixProduct{T}, ::Int) where {T <: Number}\neval!(::LazyMatrixProduct{T}) where {T <: Number}","category":"page"},{"location":"modules/utility/#QInchworm.utility.LazyMatrixProduct","page":"QInchworm.utility","title":"QInchworm.utility.LazyMatrixProduct","text":"mutable struct LazyMatrixProduct{T<:Number}\n\nA matrix product of the form A_N A_N-1 ldots A_1.\n\nFunctions pushfirst!() and popfirst!() can be used to add and remove multipliers to/from the left of the product. The product is lazy in the sense that the actual multiplication takes place only when the eval!() function is called. The structure keeps track of previously evaluated partial products and reuses them upon successive calls to eval!().\n\n\n\n\n\n","category":"type"},{"location":"modules/utility/#Base.pushfirst!-Union{Tuple{T}, Tuple{QInchworm.utility.LazyMatrixProduct{T}, Matrix{T}}} where T<:Number","page":"QInchworm.utility","title":"Base.pushfirst!","text":"pushfirst!(\n lmp::QInchworm.utility.LazyMatrixProduct{T<:Number},\n A::Array{T<:Number, 2}\n) -> Matrix{T} where T<:Number\n\n\nAdd a new matrix A to the left of the product lmp.\n\n\n\n\n\n","category":"method"},{"location":"modules/utility/#Base.popfirst!-Union{Tuple{T}, Tuple{QInchworm.utility.LazyMatrixProduct{T}, Int64}} where T<:Number","page":"QInchworm.utility","title":"Base.popfirst!","text":"popfirst!(\n lmp::QInchworm.utility.LazyMatrixProduct{T<:Number}\n) -> Int64\npopfirst!(\n lmp::QInchworm.utility.LazyMatrixProduct{T<:Number},\n n::Int64\n) -> Int64\n\n\nRemove n matrices from the left of the product lmp. By default, n = 1.\n\n\n\n\n\n","category":"method"},{"location":"modules/utility/#QInchworm.utility.eval!-Union{Tuple{QInchworm.utility.LazyMatrixProduct{T}}, Tuple{T}} where T<:Number","page":"QInchworm.utility","title":"QInchworm.utility.eval!","text":"eval!(\n lmp::QInchworm.utility.LazyMatrixProduct{T<:Number}\n) -> Matrix{T} where T<:Number\n\n\nEvaluate the matrix product lmp.\n\n\n\n\n\n","category":"method"},{"location":"modules/utility/#Random-sequence","page":"QInchworm.utility","title":"Random sequence","text":"","category":"section"},{"location":"modules/utility/","page":"QInchworm.utility","title":"QInchworm.utility","text":"RandomSeq\nseed!","category":"page"},{"location":"modules/utility/#QInchworm.utility.RandomSeq","page":"QInchworm.utility","title":"QInchworm.utility.RandomSeq","text":"struct RandomSeq{RNG<:Random.AbstractRNG, D}\n\nThis structure wraps a random number generator (a subtype of AbstractRNG) and implements a subset of ScrambledSobolSeq's interface.\n\n\n\n\n\n","category":"type"},{"location":"modules/utility/#QInchworm.utility.seed!","page":"QInchworm.utility","title":"QInchworm.utility.seed!","text":"seed!(s::QInchworm.utility.RandomSeq, seed)\n\n\nSeed the underlying random number generator of the sequence s with a given integer.\n\n\n\n\n\n","category":"function"},{"location":"modules/utility/#Serialization-using-IOBuffer","page":"QInchworm.utility","title":"Serialization using IOBuffer","text":"","category":"section"},{"location":"modules/utility/","page":"QInchworm.utility","title":"QInchworm.utility","text":"iobuffer_serialize\niobuffer_deserialize","category":"page"},{"location":"modules/utility/#QInchworm.utility.iobuffer_serialize","page":"QInchworm.utility","title":"QInchworm.utility.iobuffer_serialize","text":"iobuffer_serialize(data)\n\n\nSerialize data using an IOBuffer object.\n\n\n\n\n\n","category":"function"},{"location":"modules/utility/#QInchworm.utility.iobuffer_deserialize","page":"QInchworm.utility","title":"QInchworm.utility.iobuffer_deserialize","text":"iobuffer_deserialize(data_raw)\n\n\nDeserialize data using an IOBuffer object.\n\n\n\n\n\n","category":"function"},{"location":"modules/utility/#Range-partitioning-utilities","page":"QInchworm.utility","title":"Range partitioning utilities","text":"","category":"section"},{"location":"modules/utility/","page":"QInchworm.utility","title":"QInchworm.utility","text":"split_count\nrange_from_chunks_and_idx","category":"page"},{"location":"modules/utility/#QInchworm.utility.split_count","page":"QInchworm.utility","title":"QInchworm.utility.split_count","text":"split_count(N::Integer, n::Integer) -> Any\n\n\nReturn a vector of n integers which are approximately equal and sum to N.\n\n\n\n\n\n","category":"function"},{"location":"modules/utility/#QInchworm.utility.range_from_chunks_and_idx","page":"QInchworm.utility","title":"QInchworm.utility.range_from_chunks_and_idx","text":"range_from_chunks_and_idx(\n chunk_sizes::AbstractVector,\n idx::Integer\n) -> Any\n\n\nGiven a list of chunk sizes, return the range that enumerates elements in the idx-th chunk.\n\n\n\n\n\n","category":"function"},{"location":"#QInchworm.jl","page":"Home","title":"QInchworm.jl","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"The package QInchworm.jl is a Julia implementation of the quasi Monte Carlo variant[1] of the inchworm algorithm[2] for solving impurity models with multiple interacting fermions. Using quasi Monte Carlo, a 1N convergence rate with the number of samples is achievable, which compares favorably to the 1sqrtN convergence of the Monte Carlo methods.","category":"page"},{"location":"","page":"Home","title":"Home","text":"Below, you can find an API reference of QInchworm.jl's modules. Some parts of the API, such as handling of the atomic problem and of the pair interactions/hybridization, depend on container types from Keldysh.jl and exact diagonalization tools of KeldyshED.jl.","category":"page"},{"location":"","page":"Home","title":"Home","text":"There is also an example page showing how to use QInchworm.jl to solve a quantum impurity problem in thermodynamic equilibrium and to compute two-point correlation functions for it.","category":"page"},{"location":"","page":"Home","title":"Home","text":"[1]: Inchworm quasi Monte Carlo for quantum impurities. Hugo U. R. Strand, Joseph Kleinhenz and Igor Krivenko. arXiv:2310.16957.","category":"page"},{"location":"","page":"Home","title":"Home","text":"[2]: Taming the Dynamical Sign Problem in Real-Time Evolution of Quantum Many-Body Problems. Guy Cohen, Emanuel Gull, David R. Reichman, and Andrew J. Millis. Phys. Rev. Lett. 115, 266802 (2015).","category":"page"},{"location":"#Public-API","page":"Home","title":"Public API","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"QInchworm.expansion\nQInchworm.inchworm\nQInchworm.randomization\nQInchworm.ppgf\nQInchworm.spline_gf\nQInchworm.utility","category":"page"},{"location":"#Internals","page":"Home","title":"Internals","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"QInchworm.expansion\nQInchworm.inchworm\nQInchworm.ppgf\nQInchworm.exact_atomic_ppgf\nQInchworm.sector_block_matrix\nQInchworm.spline_gf\nQInchworm.keldysh_dlr\nQInchworm.utility\nQInchworm.mpi\nQInchworm.scrambled_sobol\nQInchworm.qmc_integrate\nQInchworm.randomization\nQInchworm.diagrammatics\nQInchworm.topology_eval","category":"page"},{"location":"example/#example","page":"Example","title":"Example","text":"","category":"section"},{"location":"example/","page":"Example","title":"Example","text":"(Image: )","category":"page"},{"location":"example/","page":"Example","title":"Example","text":"The following example demonstrates solution of the single orbital Anderson model in thermodynamic equilibrium coupled to a fermionic bath with a semi-elliptic density of states. We compute the single-particle Green's function, the dynamical double-occupancy and the transversal magnetic susceptibility of the impurity. The resulting curves are shown above.","category":"page"},{"location":"example/","page":"Example","title":"Example","text":"using Markdown\nMarkdown.parse(\"\"\"\n```julia\n$(read(\"example/example.jl\", String))\n```\n\"\"\")","category":"page"}] +[{"location":"modules/sector_block_matrix/#QInchworm.sector_block_matrix","page":"QInchworm.sector_block_matrix","title":"QInchworm.sector_block_matrix","text":"","category":"section"},{"location":"modules/sector_block_matrix/","page":"QInchworm.sector_block_matrix","title":"QInchworm.sector_block_matrix","text":"CurrentModule = QInchworm.sector_block_matrix","category":"page"},{"location":"modules/sector_block_matrix/","page":"QInchworm.sector_block_matrix","title":"QInchworm.sector_block_matrix","text":"sector_block_matrix\nSectorBlockMatrix\noperator_to_sector_block_matrix\nBase.zeros(::Type{SectorBlockMatrix}, ::EDCore)\nBase.zero(::SectorBlockMatrix)\nBase.fill!(::SectorBlockMatrix, x)\nLinearAlgebra.tr(::SectorBlockMatrix)\nLinearAlgebra.norm(::SectorBlockMatrix, ::Real=2)\nStatistics.var(::AbstractArray{SectorBlockMatrix}; ::Bool, mean)\nStatistics.std(itr::AbstractArray{SectorBlockMatrix}; ::Bool, mean)\nBase.isapprox(::SectorBlockMatrix, ::SectorBlockMatrix; ::Real)","category":"page"},{"location":"modules/sector_block_matrix/#QInchworm.sector_block_matrix","page":"QInchworm.sector_block_matrix","title":"QInchworm.sector_block_matrix","text":"Matrix representation of operators acting in a many-body Hilbert space partitioned into invariant subspaces (sectors) of a Hamiltonian.\n\n\n\n\n\n","category":"module"},{"location":"modules/sector_block_matrix/#QInchworm.sector_block_matrix.SectorBlockMatrix","page":"QInchworm.sector_block_matrix","title":"QInchworm.sector_block_matrix.SectorBlockMatrix","text":"Complex block matrix stored as a dictionary of non-vanishing blocks.\n\nEach element of the dictionary has the form right block index => (left block index, block). A block matrix represented by this type is allowed to have at most one non-vanishing block per column.\n\nObjects of this type support addition/subtraction, matrix multiplication and multiplication/division by a scalar.\n\n\n\n\n\n","category":"type"},{"location":"modules/sector_block_matrix/#QInchworm.sector_block_matrix.operator_to_sector_block_matrix","page":"QInchworm.sector_block_matrix","title":"QInchworm.sector_block_matrix.operator_to_sector_block_matrix","text":"operator_to_sector_block_matrix(\n ed::KeldyshED.EDCore,\n op::KeldyshED.Operators.OperatorExpr\n) -> Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}\n\n\nReturn the SectorBlockMatrix representation of a many-body operator op acting in the Hilbert space of the exact diagonalization problem ed.\n\n\n\n\n\n","category":"function"},{"location":"modules/sector_block_matrix/#Base.zeros-Tuple{Type{Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}}, KeldyshED.EDCore}","page":"QInchworm.sector_block_matrix","title":"Base.zeros","text":"zeros(\n _::Type{Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}},\n ed::KeldyshED.EDCore\n) -> Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}\n\n\nConstruct a block-diagonal SectorBlockMatrix, whose block structure is consistent with the invariant subspace partition of a given exact diagonalization object ed. All matrix elements of the stored blocks are set to zero.\n\n\n\n\n\n","category":"method"},{"location":"modules/sector_block_matrix/#Base.zero-Tuple{Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}}","page":"QInchworm.sector_block_matrix","title":"Base.zero","text":"zero(\n A::Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}\n) -> Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}\n\n\nConstruct a SectorBlockMatrix that shares the list of stored blocks with another matrix A but has all those blocks set to zero.\n\n\n\n\n\n","category":"method"},{"location":"modules/sector_block_matrix/#Base.fill!-Tuple{Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}, Any}","page":"QInchworm.sector_block_matrix","title":"Base.fill!","text":"fill!(A::Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}, x)\n\n\nSet elements of all stored blocks of a SectorBlockMatrix A to x.\n\n\n\n\n\n","category":"method"},{"location":"modules/sector_block_matrix/#LinearAlgebra.tr-Tuple{Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}}","page":"QInchworm.sector_block_matrix","title":"LinearAlgebra.tr","text":"tr(\n A::Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}\n) -> ComplexF64\n\n\nTrace of a SectorBlockMatrix A.\n\n\n\n\n\n","category":"method"},{"location":"modules/sector_block_matrix/#LinearAlgebra.norm","page":"QInchworm.sector_block_matrix","title":"LinearAlgebra.norm","text":"norm(\n A::Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}\n) -> Any\nnorm(\n A::Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}},\n p::Real\n) -> Any\n\n\np-norm of a SectorBlockMatrix A.\n\n\n\n\n\n","category":"function"},{"location":"modules/sector_block_matrix/#Statistics.var-Tuple{AbstractArray{Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}}}","page":"QInchworm.sector_block_matrix","title":"Statistics.var","text":"var(\n itr::AbstractArray{Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}};\n corrected,\n mean\n) -> Any\n\n\nCompute the sample variance of collection of SectorBlockMatrix itr.\n\nIf corrected is true, then the sum is scaled with n-1, whereas the sum is scaled with n if corrected is false where n is the number of elements in itr. A pre-computed mean may be provided.\n\n\n\n\n\n","category":"method"},{"location":"modules/sector_block_matrix/#Statistics.std-Tuple{AbstractArray{Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}}}","page":"QInchworm.sector_block_matrix","title":"Statistics.std","text":"std(\n itr::AbstractArray{Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}};\n corrected,\n mean\n) -> Dict\n\n\nCompute the sample standard deviation of collection itr.\n\nIf corrected is true, then the sum is scaled with n-1, whereas the sum is scaled with n if corrected is false where n is the number of elements in itr. A pre-computed mean may be provided.\n\n\n\n\n\n","category":"method"},{"location":"modules/sector_block_matrix/#Base.isapprox-Tuple{Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}, Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}}","page":"QInchworm.sector_block_matrix","title":"Base.isapprox","text":"isapprox(\n A::Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}},\n B::Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}};\n atol\n) -> Bool\n\n\nInexact equality comparison of two SectorBlockMatrix objects A and B. Block structures of the objects must agree. atol specifies the absolute tolerance for the single element comparison (zero by default).\n\n\n\n\n\n","category":"method"},{"location":"modules/diagrammatics/#QInchworm.diagrammatics","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics","text":"","category":"section"},{"location":"modules/diagrammatics/","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics","text":"CurrentModule = QInchworm.diagrammatics","category":"page"},{"location":"modules/diagrammatics/","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics","text":"diagrammatics\nTopology\nTopology(::PairVector)\nparity\nBase.isvalid(::Topology)\nsortpair\npop_pair\npair_partitions\niscrossing\nn_crossings\ntraverse_crossing_graph_dfs!\nis_k_connected\nsplit_k_connected\nis_doubly_k_connected\ncount_doubly_k_connected\nsplit_doubly_k_connected\ngenerate_topologies\ngenerate_topologies_impl\nget_topologies_at_order","category":"page"},{"location":"modules/diagrammatics/#QInchworm.diagrammatics","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics","text":"Strong coupling expansion diagrams and their topological properties.\n\n\n\n\n\n","category":"module"},{"location":"modules/diagrammatics/#QInchworm.diagrammatics.Topology","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics.Topology","text":"struct Topology\n\nDatatype for strong coupling diagram topology.\n\nA topology of order n consists of a partition of the tuple s = 12n into n pairs (pi(1) pi(2)) (pi(2n-1) pi(2n)) where pi is a permutation of s. Diagrammatically, a topology can be thought of as a set of arcs connecting vertices located at 12n. The parity of the topology is the sign of the permutation pi.\n\nFields\n\norder::Int64: Topology order n\npairs::Vector{Pair{Int64, Int64}}: List of pairs (pi(1) pi(2)) (pi(2n-1) pi(2n))\nparity::Int64: Parity of the permutation pi\n\n\n\n\n\n","category":"type"},{"location":"modules/diagrammatics/#QInchworm.diagrammatics.Topology-Tuple{Vector{Pair{Int64, Int64}}}","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics.Topology","text":"Topology(\n pairs::Vector{Pair{Int64, Int64}}\n) -> QInchworm.diagrammatics.Topology\n\n\nConstruct topology from a list of pairs.\n\n\n\n\n\n","category":"method"},{"location":"modules/diagrammatics/#QInchworm.diagrammatics.parity","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics.parity","text":"parity(top::QInchworm.diagrammatics.Topology) -> Int64\n\n\nReturns the parity of the topolgy.\n\n\n\n\n\n","category":"function"},{"location":"modules/diagrammatics/#Base.isvalid-Tuple{QInchworm.diagrammatics.Topology}","page":"QInchworm.diagrammatics","title":"Base.isvalid","text":"isvalid(t::QInchworm.diagrammatics.Topology) -> Bool\n\n\nCheck that topology is properly constructed, i.e. that its list of pairs is derived from a permutation of 1:2order and that the parity of the permutation is correct.\n\n\n\n\n\n","category":"method"},{"location":"modules/diagrammatics/#QInchworm.diagrammatics.sortpair","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics.sortpair","text":"sortpair(p::Pair{T, T}) -> Pair\n\n\nGiven a pair, return its version with the smallest element coming first.\n\n\n\n\n\n","category":"function"},{"location":"modules/diagrammatics/#QInchworm.diagrammatics.pop_pair","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics.pop_pair","text":"pop_pair(v::Vector, i, j) -> Tuple{Pair, Vector}\n\n\nReturn the pair v[i] => v[j] and a copy of the vector v with elements i, j removed.\n\n\n\n\n\n","category":"function"},{"location":"modules/diagrammatics/#QInchworm.diagrammatics.pair_partitions","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics.pair_partitions","text":"pair_partitions(\n pairs::Vector{Pair{Int64, Int64}},\n unpaired::Vector{Int64}\n) -> Vector{Vector{Pair{Int64, Int64}}}\n\n\nGiven a vector of pairs representing a partial partition of the vertices and a vector of unpaired vertices, return a vector of complete partitions.\n\n\n\n\n\npair_partitions(\n vertices::Vector{Int64}\n) -> Vector{Vector{Pair{Int64, Int64}}}\n\n\nReturn all possible partitions of an even number of vertices into pairs.\n\n\n\n\n\npair_partitions(\n n::Int64\n) -> Vector{Vector{Pair{Int64, Int64}}}\n\n\nReturn all partitions of 1ldots2n into n pairs.\n\n\n\n\n\n","category":"function"},{"location":"modules/diagrammatics/#QInchworm.diagrammatics.iscrossing","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics.iscrossing","text":"iscrossing(\n p1::Pair{Int64, Int64},\n p2::Pair{Int64, Int64}\n) -> Bool\n\n\nReturn true if two arcs cross.\n\nLet p_1 = (a_1 b_1), p_2 = (a_2 b_2) represent two arcs, where without loss of generality we assume a_1 b_1 and a_2 b_2. Now consider the order of the points a_1 b_1 a_2 b_2. The orderings a_1 b_1 a_2 b_2, a_1 a_2 b_2 b_1, a_2 b_2 a_1 b_1 are all non-crossing while a_1 a_2 b_1 b_2 and a_2 a_1 b_2 b_1 are crossing.\n\n\n\n\n\n","category":"function"},{"location":"modules/diagrammatics/#QInchworm.diagrammatics.n_crossings","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics.n_crossings","text":"n_crossings(top::QInchworm.diagrammatics.Topology) -> Int64\n\n\nReturn the number of crossing arcs in a topology.\n\n\n\n\n\n","category":"function"},{"location":"modules/diagrammatics/#QInchworm.diagrammatics.traverse_crossing_graph_dfs!","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics.traverse_crossing_graph_dfs!","text":"traverse_crossing_graph_dfs!(\n connected::Vector{Pair{Int64, Int64}},\n disconnected::Vector{Pair{Int64, Int64}}\n)\n\n\nGiven a vector of connected arcs and a vector of disconnected arcs recursively add disconnected to connected if they cross with any connected. This is done by traversing the crossing graph using depth first search.\n\n\n\n\n\n","category":"function"},{"location":"modules/diagrammatics/#QInchworm.diagrammatics.is_k_connected","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics.is_k_connected","text":"is_k_connected(\n t::QInchworm.diagrammatics.Topology,\n k::Int64\n) -> Bool\n\n\nGiven a topology, check if every connected component of the graph induced by crossings between the arcs contains a pair with an element <= k.\n\n\n\n\n\n","category":"function"},{"location":"modules/diagrammatics/#QInchworm.diagrammatics.split_k_connected","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics.split_k_connected","text":"split_k_connected(\n pairs::Vector{Pair{Int64, Int64}},\n k::Int64\n) -> Tuple{Vector{Pair{Int64, Int64}}, Vector{Pair{Int64, Int64}}}\n\n\nGiven a vector of integer pairs, split it into a connected set containing pairs with an element <= k and a disconnected set containing the rest.\n\n\n\n\n\n","category":"function"},{"location":"modules/diagrammatics/#QInchworm.diagrammatics.is_doubly_k_connected","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics.is_doubly_k_connected","text":"is_doubly_k_connected(\n p::Pair{Int64, Int64},\n k::Int64\n) -> Bool\n\n\nReturn true if a given integer pair has one element <= k and the other element > k.\n\n\n\n\n\nis_doubly_k_connected(\n t::QInchworm.diagrammatics.Topology,\n k::Int64\n) -> Bool\n\n\nGiven a topology, check if every connected component of the graph induced by crossings between the arcs contains a pair with one element <= k and the other element > k.\n\n\n\n\n\n","category":"function"},{"location":"modules/diagrammatics/#QInchworm.diagrammatics.count_doubly_k_connected","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics.count_doubly_k_connected","text":"count_doubly_k_connected(\n pairs::Vector{Pair{Int64, Int64}},\n k::Int64\n) -> Int64\n\n\nGiven a vector of integer pairs, count the doubly k-connected ones.\n\n\n\n\n\n","category":"function"},{"location":"modules/diagrammatics/#QInchworm.diagrammatics.split_doubly_k_connected","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics.split_doubly_k_connected","text":"split_doubly_k_connected(\n pairs::Vector{Pair{Int64, Int64}},\n k::Int64\n) -> Tuple{Vector{Pair{Int64, Int64}}, Vector{Pair{Int64, Int64}}}\n\n\nGiven a vector of integer pairs, split it into a connected set containing pairs with one element <= k and the other element > k, and a disconnected set containing the rest.\n\n\n\n\n\n","category":"function"},{"location":"modules/diagrammatics/#QInchworm.diagrammatics.generate_topologies","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics.generate_topologies","text":"generate_topologies(\n n::Int64\n) -> Vector{QInchworm.diagrammatics.Topology}\n\n\nReturn topologies of order n, efficiently computing the permutation sign for each.\n\n\n\n\n\n","category":"function"},{"location":"modules/diagrammatics/#QInchworm.diagrammatics.generate_topologies_impl","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics.generate_topologies_impl","text":"generate_topologies_impl(\n topology_partial::QInchworm.diagrammatics.Topology,\n unpaired::Vector{Int64}\n) -> Vector{QInchworm.diagrammatics.Topology}\n\n\nGiven a partial topology and a vector of unpaired vertices, return a vector of complete topologies, efficiently computing the permutation sign.\n\n\n\n\n\n","category":"function"},{"location":"modules/diagrammatics/#QInchworm.diagrammatics.get_topologies_at_order","page":"QInchworm.diagrammatics","title":"QInchworm.diagrammatics.get_topologies_at_order","text":"get_topologies_at_order(\n order::Int64;\n ...\n) -> Vector{QInchworm.diagrammatics.Topology}\nget_topologies_at_order(\n order::Int64,\n k;\n with_external_arc\n) -> Vector{QInchworm.diagrammatics.Topology}\n\n\nReturn topologies of a given order. If k is specified, then only the doubly k-connected topologies are returned. With with_external_arc set to true parity of the returned topologies is computed as if an extra arc overarching the last 2order - k vertices was present.\n\n\n\n\n\n","category":"function"},{"location":"modules/expansion/#QInchworm.expansion","page":"QInchworm.expansion","title":"QInchworm.expansion","text":"","category":"section"},{"location":"modules/expansion/","page":"QInchworm.expansion","title":"QInchworm.expansion","text":"CurrentModule = QInchworm.expansion","category":"page"},{"location":"modules/expansion/","page":"QInchworm.expansion","title":"QInchworm.expansion","text":"AllPPGFSectorTypes\nAllPPGFTypes","category":"page"},{"location":"modules/expansion/#QInchworm.expansion.AllPPGFSectorTypes","page":"QInchworm.expansion","title":"QInchworm.expansion.AllPPGFSectorTypes","text":"Supported container types for a single block of an atomic propagator (PPGF)\n\n\n\n\n\n","category":"type"},{"location":"modules/expansion/#QInchworm.expansion.AllPPGFTypes","page":"QInchworm.expansion","title":"QInchworm.expansion.AllPPGFTypes","text":"Supported container types for a full atomic propagator (PPGF)\n\n\n\n\n\n","category":"type"},{"location":"modules/qmc_integrate/#QInchworm.qmc_integrate","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate","text":"","category":"section"},{"location":"modules/qmc_integrate/","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate","text":"CurrentModule = QInchworm.qmc_integrate","category":"page"},{"location":"modules/qmc_integrate/","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate","text":"qmc_integrate","category":"page"},{"location":"modules/qmc_integrate/#QInchworm.qmc_integrate","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate","text":"Quasi Monte Carlo integration routines.\n\n[1]: Integration domain transformations based on product model functions are described in \"Quantum Quasi-Monte Carlo Technique for Many-Body Perturbative Expansions\", M. Maček, P. T. Dumitrescu, C. Bertrand, B.Triggs, O. Parcollet, and X. Waintal, Phys. Rev. Lett. 125, 047702 (2020).\n\n[2]: Integration domain transformations Sort and Root are defined in \"Transforming low-discrepancy sequences from a cube to a simplex\", T. Pillards and R. Cools, J. Comput. Appl. Math. 174, 29 (2005).\n\n\n\n\n\n","category":"module"},{"location":"modules/qmc_integrate/#Basic-quasi-Monte-Carlo-integration-routines","page":"QInchworm.qmc_integrate","title":"Basic quasi Monte Carlo integration routines","text":"","category":"section"},{"location":"modules/qmc_integrate/","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate","text":"qmc_integral\nqmc_integral_n_samples","category":"page"},{"location":"modules/qmc_integrate/#QInchworm.qmc_integrate.qmc_integral","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate.qmc_integral","text":"qmc_integral(f; ...)\nqmc_integral(f, init; trans_f, jacobian_f, seq, N)\n\n\nCompute a quasi Monte Carlo estimate of a d-dimensional integral\n\nF = int_mathscrD d^d mathbfu f(mathbfu)\n\nThe domain mathscrD is defined by a variable change mathbfu = mathbfu(mathbfx) 01^d mapsto mathscrD,\n\nF = int_01^d d^dmathbfx f(mathbfu(mathbfx))\n leftfracpartialmathbfupartialmathbfxright\napprox frac1N sum_i=1^N\n f(mathbfu(mathbfx_i)) J(mathbfu(mathbfx_i))\n\nParameters\n\nf: Integrand f(mathbfu).\ninit: Initial (zero) value used in qMC summation.\ntrans_f: Domain transformation function mathbfu(mathbfx).\njacobian_f: Jacobian J(mathbfu) = leftfracpartialmathbfupartialmathbfxright.\nseq: Quasi-random sequence generator.\nN: Number of points to be taken from the quasi-random sequence.\n\nReturns\n\nEstimated value of the integral.\n\n\n\n\n\n","category":"function"},{"location":"modules/qmc_integrate/#QInchworm.qmc_integrate.qmc_integral_n_samples","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate.qmc_integral_n_samples","text":"qmc_integral_n_samples(f; ...)\nqmc_integral_n_samples(\n f,\n init;\n trans_f,\n jacobian_f,\n seq,\n N_samples\n)\n\n\nCompute a quasi Monte Carlo estimate of a d-dimensional integral\n\nF = int_mathscrD d^d mathbfu f(mathbfu)\n\nThe domain mathscrD is defined by a variable change mathbfu = mathbfu(mathbfx) 01^d mapsto mathscrD,\n\nF = int_01^d d^dmathbfx f(mathbfu(mathbfx))\n leftfracpartialmathbfupartialmathbfxright\napprox frac1N sum_i=1^N\n f(mathbfu(mathbfx_i)) J(mathbfu(mathbfx_i))\n\nUnlike qmc_integral(), this function performs qMC summation until a given number of valid (non-nothing) samples of f(mathbfu) are taken.\n\nParameters\n\nf: Integrand f(mathbfu).\ninit: Initial (zero) value used in qMC summation.\ntrans_f: Domain transformation function mathbfu(mathbfx).\njacobian_f: Jacobian J(mathbfu) = leftfracpartialmathbfupartialmathbfxright.\nseq: Quasi-random sequence generator.\nN_samples: Number of valid samples of f(mathbfu) to be taken.\n\nReturns\n\nEstimated value of the integral.\n\n\n\n\n\n","category":"function"},{"location":"modules/qmc_integrate/#Integration-domain-transformations","page":"QInchworm.qmc_integrate","title":"Integration domain transformations","text":"","category":"section"},{"location":"modules/qmc_integrate/","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate","text":"AbstractDomainTransform\nBase.ndims(::AbstractDomainTransform)\nExpModelFunctionTransform\nExpModelFunctionTransform(::Integer, ::kd.AbstractContour, ::kd.BranchPoint, ::Real)\nRootTransform\nRootTransform(::Integer, ::kd.AbstractContour, ::kd.BranchPoint, ::kd.BranchPoint)\nSortTransform\nSortTransform(::Integer, ::kd.AbstractContour, ::kd.BranchPoint, ::kd.BranchPoint)\nDoubleSimplexRootTransform\nDoubleSimplexRootTransform(::Int,\n ::Int,\n ::kd.AbstractContour,\n ::kd.BranchPoint,\n ::kd.BranchPoint,\n ::kd.BranchPoint)\nmake_trans_f\nmake_jacobian_f","category":"page"},{"location":"modules/qmc_integrate/#QInchworm.qmc_integrate.AbstractDomainTransform","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate.AbstractDomainTransform","text":"abstract type AbstractDomainTransform{D}\n\nAbstract domain transformation 0 1^d mapsto mathscrD.\n\n\n\n\n\n","category":"type"},{"location":"modules/qmc_integrate/#Base.ndims-Tuple{QInchworm.qmc_integrate.AbstractDomainTransform}","page":"QInchworm.qmc_integrate","title":"Base.ndims","text":"ndims(\n s::QInchworm.scrambled_sobol.ScrambledSobolSeq{D}\n) -> Int64\n\n\nDimension D of a scrambled Sobol sequence.\n\n\n\n\n\nndims(s::QInchworm.utility.RandomSeq{RNG, D}) -> Int64\n\n\nDimension D of a random sequence.\n\n\n\n\n\nndims(\n _::QInchworm.qmc_integrate.AbstractDomainTransform{D}\n) -> Any\n\n\nReturn the number of dimensions d of a domain transformation 0 1^d mapsto mathscrD.\n\n\n\n\n\n","category":"method"},{"location":"modules/qmc_integrate/#QInchworm.qmc_integrate.ExpModelFunctionTransform","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate.ExpModelFunctionTransform","text":"struct ExpModelFunctionTransform{D} <: QInchworm.qmc_integrate.AbstractDomainTransform{D}\n\nDomain transformation\n\nmathbfxin01^d mapsto\n mathbfu u_f geq u_1 geq u_2 geq ldots geq u_d -infty\n\ninduced by the implicit variable change\n\nx_n(v_n) = fracint_0^v_n dbar v_n h(bar v_n)\n int_0^infty dbar v_n h(bar v_n)\nquad\nv_n = left\nbeginarrayll\nu_f - u_1 n=1\nu_n-1 - u_n n1\nendarray\nright\n\nwhere h(v) is an exponential model function parametrized by decay rate tau, h(v) = e^-vtau.\n\nThe corresponding Jacobian is J(mathbfu) = tau^d e^-(u_f - u_d) tau.\n\nFields\n\nu_f::Float64: Upper bound of the transformed domain u_f\nτ::Float64: Decay rate parameter of the exponential model function\n\n\n\n\n\n","category":"type"},{"location":"modules/qmc_integrate/#QInchworm.qmc_integrate.ExpModelFunctionTransform-Tuple{Integer, Keldysh.AbstractContour, Keldysh.BranchPoint, Real}","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate.ExpModelFunctionTransform","text":"ExpModelFunctionTransform(\n d::Integer,\n c::Keldysh.AbstractContour,\n t_f::Keldysh.BranchPoint,\n τ::Real\n) -> QInchworm.qmc_integrate.ExpModelFunctionTransform\n\n\nMake an ExpModelFunctionTransform object suitable for time contour integration over the domain\n\n(t_1 ldots t_d) in mathcalC^d\n t_f succeq t_1 succeq t_2 succeq ldots succeq t_d succeq\n textstarting point of mathcalC\n\nN.B. ExpModelFunctionTransform describes an infinite domain where integration variables u_n can approach -infty. Negative values of u_n cannot be mapped onto time points on mathcalC and will be discarded by contour_integral().\n\nParameters\n\nd: Number of dimensions d.\nc: Time contour mathcalC.\nt_f: Upper bound t_f.\nτ: Decay rate parameter tau.\n\n\n\n\n\n","category":"method"},{"location":"modules/qmc_integrate/#QInchworm.qmc_integrate.RootTransform","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate.RootTransform","text":"struct RootTransform{D} <: QInchworm.qmc_integrate.AbstractDomainTransform{D}\n\nHypercube-to-simplex domain transformation\n\nmathbfxin01^d mapsto\n mathbfu u_f geq u_1 geq u_2 geq ldots geq u_d geq u_i\n\ninduced by the Root mapping[2]\n\nleft\nbeginarrayll\ntilde u_1 = x_1^1d\ntilde u_2 = tilde u_1 x_2^1(d-1)\nldots\ntilde u_d = tilde u_d-1 x_d\nendarrayright\n\nmathbfu = u_i + (u_f - u_i) tildemathbfu\n\nThe corresponding Jacobian is J(mathbfu) = (u_f - u_i)^d d.\n\nFields\n\nu_i::Float64: Lower bound of the transformed domain u_i\nu_diff::Float64: Difference u_f - u_i\n\n\n\n\n\n","category":"type"},{"location":"modules/qmc_integrate/#QInchworm.qmc_integrate.RootTransform-Tuple{Integer, Keldysh.AbstractContour, Keldysh.BranchPoint, Keldysh.BranchPoint}","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate.RootTransform","text":"RootTransform(\n d::Integer,\n c::Keldysh.AbstractContour,\n t_i::Keldysh.BranchPoint,\n t_f::Keldysh.BranchPoint\n) -> QInchworm.qmc_integrate.RootTransform\n\n\nMake a RootTransform object suitable for time contour integration over the domain\n\n(t_1 ldots t_d) in mathcalC^d\n t_f succeq t_1 succeq t_2 succeq ldots succeq t_d succeq t_i\n\nParameters\n\nd: Number of dimensions d.\nc: Time contour mathcalC.\nt_i: Lower bound t_i.\nt_f: Upper bound t_f.\n\n\n\n\n\n","category":"method"},{"location":"modules/qmc_integrate/#QInchworm.qmc_integrate.SortTransform","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate.SortTransform","text":"struct SortTransform{D} <: QInchworm.qmc_integrate.AbstractDomainTransform{D}\n\nHypercube-to-simplex domain transformation\n\nmathbfxin01^d mapsto\n mathbfu u_f geq u_1 geq u_2 geq ldots geq u_d geq u_i\n\ninduced by the Sort mapping[2]\n\nmathbfu = u_i + (u_f - u_i) mathrmsort(x_1 ldots x_d)\n\nThe corresponding Jacobian is J(mathbfu) = (u_f - u_i)^d d.\n\nFields\n\nu_i::Float64: Lower bound of the transformed domain u_i\nu_diff::Float64: Difference u_f - u_i\n\n\n\n\n\n","category":"type"},{"location":"modules/qmc_integrate/#QInchworm.qmc_integrate.SortTransform-Tuple{Integer, Keldysh.AbstractContour, Keldysh.BranchPoint, Keldysh.BranchPoint}","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate.SortTransform","text":"SortTransform(\n d::Integer,\n c::Keldysh.AbstractContour,\n t_i::Keldysh.BranchPoint,\n t_f::Keldysh.BranchPoint\n) -> QInchworm.qmc_integrate.SortTransform\n\n\nMake a SortTransform object suitable for time contour integration over the domain\n\n(t_1 ldots t_d) in mathcalC^d\n t_f succeq t_1 succeq t_2 succeq ldots succeq t_d succeq t_i\n\nParameters\n\nd: Number of dimensions d.\nc: Time contour mathcalC.\nt_i: Lower bound t_i.\nt_f: Upper bound t_f.\n\n\n\n\n\n","category":"method"},{"location":"modules/qmc_integrate/#QInchworm.qmc_integrate.DoubleSimplexRootTransform","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate.DoubleSimplexRootTransform","text":"struct DoubleSimplexRootTransform{D} <: QInchworm.qmc_integrate.AbstractDomainTransform{D}\n\nHypercube-to-double-simplex domain transformation\n\nmathbfxin01^d mapsto\n mathbfu u_f geq u_1 geq u_2 geq ldots geq u_d^ geq u_w geq\n u_d^+1 geq ldots geq u_d geq u_i\n\ninduced by the Root mapping[2] applied independently to two sets of variables x_1 ldots x_d^ and x_d^+1 ldots x_d (cf. RootTransform).\n\nThe corresponding Jacobian is J(mathbfu) = frac(u_w - u_i)^d^d^ frac(u_f - u_w)^d^d^.\n\nHere, d^ and d^ denote numbers of variables in the 'lesser' and 'greater' simplex respectively, and d = d^ + d^. The two simplices are separated by a fixed boundary located at u_w.\n\nFields\n\nd_lesser::Int64: Number of variables in the 'lesser' simplex, d^\nd_greater::Int64: Number of variables in the 'greater' simplex, d^\nu_i::Float64: Lower bound of the transformed domain u_i\nu_w::Float64: Boundary u_w separating the 'lesser' and the 'greater' simplices\nu_diff_wi::Float64: Difference u_w - u_i\nu_diff_fw::Float64: Difference u_f - u_w\n\n\n\n\n\n","category":"type"},{"location":"modules/qmc_integrate/#QInchworm.qmc_integrate.DoubleSimplexRootTransform-Tuple{Int64, Int64, Keldysh.AbstractContour, Keldysh.BranchPoint, Keldysh.BranchPoint, Keldysh.BranchPoint}","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate.DoubleSimplexRootTransform","text":"DoubleSimplexRootTransform(\n d_before::Int64,\n d_after::Int64,\n c::Keldysh.AbstractContour,\n t_i::Keldysh.BranchPoint,\n t_w::Keldysh.BranchPoint,\n t_f::Keldysh.BranchPoint\n) -> QInchworm.qmc_integrate.DoubleSimplexRootTransform\n\n\nMake a DoubleSimplexRootTransform object suitable for time contour integration over the domain\n\n(t_1 ldots t_d) in mathcalC^d\n t_f succeq t_1 succeq t_2 succeq ldots succeq t_d_textafter succeq t_w\n succeq t_d_textafter+1 succeq ldots succeq t_d succeq t_i\n\nwhere d = d_textbefore + d_textafter.\n\nParameters\n\nd_before: Number of time variables in the 'before' region, d_textbefore.\nd_after: Number of time variables in the 'after' region, d_textafter.\nc: Time contour mathcalC.\nt_i: Lower bound t_i.\nt_w: Boundary point t_w.\nt_f: Upper bound t_f.\n\n\n\n\n\n","category":"method"},{"location":"modules/qmc_integrate/#QInchworm.qmc_integrate.make_trans_f","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate.make_trans_f","text":"make_trans_f(\n t::QInchworm.qmc_integrate.ExpModelFunctionTransform\n) -> QInchworm.qmc_integrate.var\"#3#4\"{QInchworm.qmc_integrate.ExpModelFunctionTransform{D}} where D\n\n\nReturn the function mathbfu(mathbfx) corresponding to a given ExpModelFunctionTransform object t.\n\n\n\n\n\nmake_trans_f(\n t::QInchworm.qmc_integrate.RootTransform\n) -> QInchworm.qmc_integrate.var\"#7#8\"{QInchworm.qmc_integrate.RootTransform{D}} where D\n\n\nReturn the function mathbfu(mathbfx) corresponding to a given RootTransform object t.\n\n\n\n\n\nmake_trans_f(\n t::QInchworm.qmc_integrate.SortTransform\n) -> QInchworm.qmc_integrate.var\"#11#12\"{QInchworm.qmc_integrate.SortTransform{D}} where D\n\n\nReturn the function mathbfu(mathbfx) corresponding to a given SortTransform object t.\n\n\n\n\n\nmake_trans_f(\n t::QInchworm.qmc_integrate.DoubleSimplexRootTransform\n) -> QInchworm.qmc_integrate.var\"#15#16\"{QInchworm.qmc_integrate.DoubleSimplexRootTransform{D}} where D\n\n\nReturn the function mathbfu(mathbfx) corresponding to a given DoubleSimplexRootTransform object t.\n\n\n\n\n\n","category":"function"},{"location":"modules/qmc_integrate/#QInchworm.qmc_integrate.make_jacobian_f","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate.make_jacobian_f","text":"make_jacobian_f(\n t::QInchworm.qmc_integrate.ExpModelFunctionTransform\n) -> QInchworm.qmc_integrate.var\"#5#6\"{QInchworm.qmc_integrate.ExpModelFunctionTransform{D}} where D\n\n\nReturn the Jacobian J(mathbfu) = leftfracpartialmathbfupartialmathbfxright corresponding to a given ExpModelFunctionTransform object t.\n\n\n\n\n\nmake_jacobian_f(\n t::QInchworm.qmc_integrate.RootTransform\n) -> QInchworm.qmc_integrate.var\"#9#10\"{Float64}\n\n\nReturn the Jacobian J(mathbfu) = leftfracpartialmathbfupartialmathbfxright corresponding to a given RootTransform object t.\n\n\n\n\n\nmake_jacobian_f(\n t::QInchworm.qmc_integrate.SortTransform\n) -> QInchworm.qmc_integrate.var\"#13#14\"{Float64}\n\n\nReturn the Jacobian J(mathbfu) = leftfracpartialmathbfupartialmathbfxright corresponding to a given SortTransform object t.\n\n\n\n\n\nmake_jacobian_f(\n t::QInchworm.qmc_integrate.DoubleSimplexRootTransform\n) -> QInchworm.qmc_integrate.var\"#17#18\"{Float64}\n\n\nReturn the Jacobian J(mathbfu) = leftfracpartialmathbfupartialmathbfxright corresponding to a given DoubleSimplexRootTransform object t.\n\n\n\n\n\n","category":"function"},{"location":"modules/qmc_integrate/#Contour-integration-routines","page":"QInchworm.qmc_integrate","title":"Contour integration routines","text":"","category":"section"},{"location":"modules/qmc_integrate/","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate","text":"contour_integral\ncontour_integral_n_samples\nbranch_direction\ncontour_function_return_type","category":"page"},{"location":"modules/qmc_integrate/#QInchworm.qmc_integrate.contour_integral","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate.contour_integral","text":"contour_integral(\n f,\n c::Keldysh.AbstractContour,\n dt::QInchworm.qmc_integrate.AbstractDomainTransform;\n init,\n seq,\n N\n)\n\n\nCompute a quasi Monte Carlo estimate of a contour integral over a d-dimensional domain mathscrD.\n\nParameters\n\nf: Integrand.\nc: Time contour to integrate over.\ndt: Domain transformation 0 1^d mapsto mathscrD.\ninit: Initial (zero) value of the integral.\nseq: Quasi-random sequence generator.\nN: The number of points to be taken from the quasi-random sequence.\n\nReturns\n\nEstimated value of the contour integral.\n\n\n\n\n\n","category":"function"},{"location":"modules/qmc_integrate/#QInchworm.qmc_integrate.contour_integral_n_samples","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate.contour_integral_n_samples","text":"contour_integral_n_samples(\n f,\n c::Keldysh.AbstractContour,\n dt::QInchworm.qmc_integrate.AbstractDomainTransform;\n init,\n seq,\n N_samples\n)\n\n\nCompute a quasi Monte Carlo estimate of a contour integral over a d-dimensional domain mathscrD.\n\nUnlike contour_integral(), this function performs qMC summation until a given number of valid (non-nothing) samples of the integrand are taken.\n\nParameters\n\nf: Integrand.\nc: Time contour to integrate over.\ndt: Domain transformation 0 1^d mapsto mathscrD.\ninit: Initial (zero) value of the integral.\nseq: Quasi-random sequence generator.\nN_samplex: Number of valid samples of the integrand to be taken.\n\nReturns\n\nEstimated value of the contour integral.\nThe total number of points taken from the quasi-random sequence.\n\n\n\n\n\n","category":"function"},{"location":"modules/qmc_integrate/#QInchworm.qmc_integrate.branch_direction","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate.branch_direction","text":"Dictionary mapping branches of the Keldysh contour to their unitary direction coefficients in the complex time plane.\n\n\n\n\n\n","category":"constant"},{"location":"modules/qmc_integrate/#QInchworm.qmc_integrate.contour_function_return_type","page":"QInchworm.qmc_integrate","title":"QInchworm.qmc_integrate.contour_function_return_type","text":"contour_function_return_type(f::Function) -> Any\n\n\nDetect the return type of a function applied to a vector of Keldysh.BranchPoint.\n\n\n\n\n\n","category":"function"},{"location":"about/#About-QInchworm.jl","page":"About","title":"About QInchworm.jl","text":"","category":"section"},{"location":"about/","page":"About","title":"About","text":"QInchworm.jl is developed by Igor Krivenko, Hugo U. R. Strand and Joseph Kleinhenz and is distributed under the terms of the GNU General Public License version 3 or later.","category":"page"},{"location":"about/","page":"About","title":"About","text":"We acknowledge funding from the European Research Council (ERC) under the European Union’s Horizon 2020 research and innovation programme (Grant agreement No. 854843-FASTCORR).","category":"page"},{"location":"about/","page":"About","title":"About","text":"Large scale testing and benchmarking were enabled by resources from the National Academic Infrastructure for Supercomputing in Sweden (NAISS) and the Swedish National Infrastructure for Computing (SNIC) through the projects SNIC 2022/1-18, SNIC 2022/6-113, SNIC 2022/13-9, SNIC 2022/21-15, NAISS 2023/1-44, and NAISS 2023/6-129 at PDC, NSC and CSC partially funded by the Swedish Research Council through grant agreements no. 2022-06725 and no. 2018-05973.","category":"page"},{"location":"api/#Public-API","page":"Public API","title":"Public API","text":"","category":"section"},{"location":"api/","page":"Public API","title":"Public API","text":"QInchworm","category":"page"},{"location":"api/#QInchworm","page":"Public API","title":"QInchworm","text":"A quasi Monte Carlo inchworm impurity solver for multi-orbital fermionic models.\n\n\n\n\n\n","category":"module"},{"location":"api/#api:QInchworm.expansion","page":"Public API","title":"QInchworm.expansion","text":"","category":"section"},{"location":"api/","page":"Public API","title":"Public API","text":"CurrentModule = QInchworm.expansion","category":"page"},{"location":"api/","page":"Public API","title":"Public API","text":"expansion","category":"page"},{"location":"api/#QInchworm.expansion","page":"Public API","title":"QInchworm.expansion","text":"Strong coupling pseudo-particle expansion problem.\n\nExports\n\nExpansion\nInteractionPair\nadd_corr_operators!\n\n\n\n\n\n","category":"module"},{"location":"api/","page":"Public API","title":"Public API","text":"Expansion\nExpansion(::ked.EDCore,\n ::kd.AbstractTimeGrid,\n ::Vector{InteractionPair{ScalarGF}};\n ::Vector{Tuple{Operator, Operator}},\n interpolate_ppgf) where ScalarGF\nExpansion(::op.OperatorExpr,\n ::ked.SetOfIndices,\n ::kd.ImaginaryTimeGrid;\n ::kd.ImaginaryTimeGF{ComplexF64, false},\n ::Union{Keldysh.ImaginaryTimeGF{Float64, false}, Nothing},\n ::Vector{Tuple{Operator, Operator}},\n interpolate_ppgf)\nInteractionPair\nadd_corr_operators!","category":"page"},{"location":"api/#QInchworm.expansion.Expansion","page":"Public API","title":"QInchworm.expansion.Expansion","text":"struct Expansion{ScalarGF<:Keldysh.AbstractTimeGF{ComplexF64, true}, PPGF_P0<:Union{Vector{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}}, Vector{Keldysh.ImaginaryTimeGF{ComplexF64, false}}, Vector{QInchworm.exact_atomic_ppgf.ExactAtomicPPGF}, Vector{QInchworm.spline_gf.IncSplineImaginaryTimeGF{ComplexF64, false}}, Vector{QInchworm.spline_gf.SplineInterpolatedGF{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}, ComplexF64, false}}, Vector{QInchworm.spline_gf.SplineInterpolatedGF{Keldysh.ImaginaryTimeGF{ComplexF64, false}, ComplexF64, false}}}, PPGF_P<:Union{Vector{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}}, Vector{Keldysh.ImaginaryTimeGF{ComplexF64, false}}, Vector{QInchworm.exact_atomic_ppgf.ExactAtomicPPGF}, Vector{QInchworm.spline_gf.IncSplineImaginaryTimeGF{ComplexF64, false}}, Vector{QInchworm.spline_gf.SplineInterpolatedGF{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}, ComplexF64, false}}, Vector{QInchworm.spline_gf.SplineInterpolatedGF{Keldysh.ImaginaryTimeGF{ComplexF64, false}, ComplexF64, false}}}}\n\nThe Expansion structure contains the components needed to define a strong coupling pseudo-particle expansion problem.\n\nFields\n\ned: Exact diagonalization solver for the local degrees of freedom\nP0: Non-interacting propagator (pseudo-particle Green's function)\nP: Interacting propagator (pseudo-particle Green's function)\npairs: List of pseudo-particle interactions\ndeterminants: List of hybridization function determinants (not implemented yet)\ncorr_operators: List of operator pairs used in accumulation of two-point correlation functions\nidentity_mat: Block matrix representation of the identity operator\npair_operator_mat: Block matrix representation of paired operators (operator_i, operator_f)\ncorr_operators_mat: Block matrix representation of corr_operators\nsubspace_attachable_pairs: Given a subspace index s_i, lists indices of all interaction pairs with operator_i acting non-trivially on that subspace.\n\n\n\n\n\n","category":"type"},{"location":"api/#QInchworm.expansion.Expansion-Union{Tuple{ScalarGF}, Tuple{KeldyshED.EDCore, Keldysh.AbstractTimeGrid, Array{QInchworm.expansion.InteractionPair{ScalarGF}, 1}}} where ScalarGF","page":"Public API","title":"QInchworm.expansion.Expansion","text":"Expansion(\n ed::KeldyshED.EDCore,\n grid::Keldysh.AbstractTimeGrid,\n interaction_pairs::Array{QInchworm.expansion.InteractionPair{ScalarGF}, 1};\n corr_operators,\n interpolate_ppgf\n) -> QInchworm.expansion.Expansion\n\n\nParameters\n\ned: Exact diagonalization solution of the local problem.\ngrid: Contour time grid to define the local propagators on.\ninteraction_pairs: The list of pair interactions to expand in.\ncorr_operators: The list of operator pairs used in accumulation of two-point correlation functions.\ninterpolate_ppgf: Use a quadratic spline interpolation to represent and evaluate the local propagators. Currently works only with the imaginary time propagators.\n\n\n\n\n\n","category":"method"},{"location":"api/#QInchworm.expansion.Expansion-Tuple{KeldyshED.Operators.OperatorExpr, KeldyshED.Hilbert.SetOfIndices, Keldysh.ImaginaryTimeGrid}","page":"Public API","title":"QInchworm.expansion.Expansion","text":"Expansion(\n hamiltonian::KeldyshED.Operators.OperatorExpr,\n soi::KeldyshED.Hilbert.SetOfIndices,\n grid::Keldysh.ImaginaryTimeGrid;\n hybridization,\n nn_interaction,\n corr_operators,\n interpolate_ppgf\n)\n\n\nA higher-level constructor of Expansion that solves the local problem defined by a Hamiltonian and internally generates a list of pseudo-particle pair interactions from hybridization and nn-interaction functions.\n\nParameters\n\nhamiltonian: Hamiltonian of the local problem.\nsoi: An ordered set of indices carried by creation/annihilation operators of the local problem.\ngrid: Imaginary time grid to define the local propagators on.\nhybridization: A matrix-valued hybridization function Delta_ij(tau). A correspondence between the matrix elements (i j) and operators c^dagger_i c_j is established by soi.\nnn_interaction: A matrix-valued nn-interaction function U_ij(tau). A correspondence between the matrix elements (i j) and operators n_i n_j is established by soi.\ncorr_operators: The list of operator pairs used in accumulation of two-point correlation functions.\ninterpolate_ppgf: Use a quadratic spline interpolation to represent and evaluate the local propagators.\n\n\n\n\n\n","category":"method"},{"location":"api/#QInchworm.expansion.InteractionPair","page":"Public API","title":"QInchworm.expansion.InteractionPair","text":"struct InteractionPair{ScalarGF<:Keldysh.AbstractTimeGF{ComplexF64, true}}\n\nData type for pseudo-particle interactions containing two operators and one scalar propagator.\n\nIndexed access to the operators stored in a pair::InteractionPair is supported: pair[1] and pair[2] are equivalent to pair.operator_i and pair.operator_f respectively.\n\nFields\n\noperator_f::KeldyshED.Operators.RealOperatorExpr: Final time operator\noperator_i::KeldyshED.Operators.RealOperatorExpr: Initial time operator\npropagator::Keldysh.AbstractTimeGF{ComplexF64, true}: Scalar propagator\n\n\n\n\n\n","category":"type"},{"location":"api/#QInchworm.expansion.add_corr_operators!","page":"Public API","title":"QInchworm.expansion.add_corr_operators!","text":"add_corr_operators!(\n expansion::QInchworm.expansion.Expansion,\n ops::Tuple{KeldyshED.Operators.RealOperatorExpr, KeldyshED.Operators.RealOperatorExpr}\n)\n\n\nAdd a pair of operators (A B) used to measure the two-point correlator langle A(t_1) B(t_2)rangle to expansion.\n\nParameters\n\nexpansion: Pseudo-particle expansion.\nops: The pair of operators (A B).\n\n\n\n\n\n","category":"function"},{"location":"api/#api:QInchworm.inchworm","page":"Public API","title":"QInchworm.inchworm","text":"","category":"section"},{"location":"api/","page":"Public API","title":"Public API","text":"CurrentModule = QInchworm.inchworm","category":"page"},{"location":"api/","page":"Public API","title":"Public API","text":"inchworm","category":"page"},{"location":"api/#QInchworm.inchworm","page":"Public API","title":"QInchworm.inchworm","text":"High level functions implementing the quasi Monte Carlo inchworm algorithm.\n\nExports\n\ncorrelator_2p\ndiff_inchworm!\ninchworm!\n\n\n\n\n\n","category":"module"},{"location":"api/","page":"Public API","title":"Public API","text":"inchworm!\ndiff_inchworm!\ncorrelator_2p","category":"page"},{"location":"api/#QInchworm.inchworm.inchworm!","page":"Public API","title":"QInchworm.inchworm.inchworm!","text":"inchworm!(\n expansion::QInchworm.expansion.Expansion,\n grid::Keldysh.ImaginaryTimeGrid,\n orders,\n orders_bare,\n N_samples::Int64;\n n_pts_after_max,\n rand_params,\n seq_type\n) -> Tuple{Dict, Dict}\n\n\nPerform a complete qMC inchworm calculation of the bold propagators on the imaginary time segment. Results of the calculation are written into expansion.P.\n\nParameters\n\nexpansion: Strong coupling expansion problem.\ngrid: Imaginary time grid of the bold propagators.\norders: List of expansion orders to be accounted for during a regular inchworm step.\norders_bare: List of expansion orders to be accounted for during the initial inchworm step.\nN_samples: Number of samples to be used in qMC integration. Must be a power of 2.\nn_pts_after_max: Maximum number of points in the after-tau_w region to be taken into account. By default, diagrams with all valid numbers of the after-tau_w points are considered.\nrand_params: Parameters of the randomized qMC integration.\nseq_type: Type of the (quasi-)random sequence to be used for integration.\n\nReturns\n\nOrder-resolved contributions to the bold propagator as a dictionary Dict{Int, PPGF}.\nEstimated standard deviations of the order-resolved contributions as a dictionary Dict{Int, PPGF}.\n\n\n\n\n\n","category":"function"},{"location":"api/#QInchworm.inchworm.diff_inchworm!","page":"Public API","title":"QInchworm.inchworm.diff_inchworm!","text":"diff_inchworm!(\n expansion::QInchworm.expansion.Expansion,\n grid::Keldysh.ImaginaryTimeGrid,\n orders,\n N_samples::Int64;\n rand_params,\n seq_type\n) -> Tuple{Dict, Dict}\n\n\nPerform a complete qMC inchworm calculation of the bold propagators on the imaginary time segment using the differential formulation of the method described in\n\n\"Inchworm Monte Carlo Method for Open Quantum Systems\"\nZ. Cai, J. Lu and S. Yang\nComm. Pure Appl. Math., 73: 2430-2472 (2020)\n\nResults of the calculation are written into expansion.P.\n\nParameters\n\nexpansion: Strong coupling expansion problem.\ngrid: Imaginary time grid of the bold propagators.\norders: List of expansion orders to be accounted for.\nN_samples: Number of samples to be used in qMC integration. Must be a power of 2.\nrand_params: Parameters of the randomized qMC integration.\nseq_type: Type of the (quasi-)random sequence to be used for integration.\n\nReturns\n\nOrder-resolved contributions to the pseudo-particle self-energy as a dictionary Dict{Int, PPGF}.\nEstimated standard deviations of the order-resolved contributions as a dictionary Dict{Int, PPGF}.\n\n\n\n\n\n","category":"function"},{"location":"api/#QInchworm.inchworm.correlator_2p","page":"Public API","title":"QInchworm.inchworm.correlator_2p","text":"correlator_2p(\n expansion::QInchworm.expansion.Expansion,\n grid::Keldysh.ImaginaryTimeGrid,\n A_B_pair_idx::Int64,\n τ::Keldysh.TimeGridPoint,\n top_data::Vector{QInchworm.inchworm.TopologiesInputData};\n seq_type,\n tmr\n) -> Tuple{ComplexF64, ComplexF64}\n\n\nCalculate value of a two-point correlator langle A(tau) B(0)rangle for one value of the imaginary time argument tau. The pair of operators (A B) used in the calculation is taken from expansion.corr_operators[A_B_pair_idx].\n\nParameters\n\nexpansion: Strong coupling expansion problem. expansion.P must contain precomputed bold propagators.\ngrid: Imaginary time grid of the correlator to be computed.\nA_B_pair_idx: Index of the (A B) pair within expansion.corr_operators.\nτ: The imaginary time argument tau.\ntop_data: Accumulation input data.\nseq_type: Type of the (quasi-)random sequence to be used for integration.\ntmr: A TimerOutput object used for profiling.\n\nReturns\n\nAccumulated value of the two-point correlator.\nEstimated standard deviations of the computed correlator.\n\n\n\n\n\ncorrelator_2p(\n expansion::QInchworm.expansion.Expansion,\n grid::Keldysh.ImaginaryTimeGrid,\n orders,\n N_samples::Int64,\n ::QInchworm.randomization.RequestStdDev;\n rand_params,\n seq_type\n) -> Tuple{Any, Any}\n\n\nCalculate a two-point correlator langle A(tau) B(0)rangle on the imaginary time segment. Accumulation is performed for each pair of operators (A B) in expansion.corr_operators. Only the operators that are a single monomial in cc^dagger are supported.\n\nThis method is selected by the flag argument of type RequestStdDev and returns randomized qMC estimates of both mean and standard deviation of the correlators.\n\nParameters\n\nexpansion: Strong coupling expansion problem. expansion.P must contain precomputed bold propagators.\ngrid: Imaginary time grid of the correlator to be computed.\norders: List of expansion orders to be accounted for.\nN_samples: Number of samples to be used in qMC integration. Must be a power of 2.\nrand_params: Parameters of the randomized qMC integration.\nseq_type: Type of the (quasi-)random sequence to be used for integration.\n\nReturns\n\nA list of scalar-valued GF objects containing the computed correlators, one element per a pair in expansion.corr_operators.\nA list of scalar-valued GF objects containing estimated standard deviations of the computed correlators, one element per a pair in expansion.corr_operators.\n\n\n\n\n\ncorrelator_2p(\n expansion::QInchworm.expansion.Expansion,\n grid::Keldysh.ImaginaryTimeGrid,\n orders,\n N_samples::Int64;\n rand_params,\n seq_type\n) -> Any\n\n\nCalculate a two-point correlator langle A(tau) B(0)rangle on the imaginary time segment. Accumulation is performed for each pair of operators (A B) in expansion.corr_operators. Only the operators that are a single monomial in cc^dagger are supported.\n\nParameters\n\nexpansion: Strong coupling expansion problem. expansion.P must contain precomputed bold propagators.\ngrid: Imaginary time grid of the correlator to be computed.\norders: List of expansion orders to be accounted for.\nN_samples: Number of samples to be used in qMC integration. Must be a power of 2.\nrand_params: Parameters of the randomized qMC integration.\nseq_type: Type of the (quasi-)random sequence to be used for integration.\n\nReturns\n\nA list of scalar-valued GF objects containing the computed correlators, one element per a pair in expansion.corr_operators.\n\n\n\n\n\n","category":"function"},{"location":"api/#api:QInchworm.randomization","page":"Public API","title":"QInchworm.randomization","text":"","category":"section"},{"location":"api/","page":"Public API","title":"Public API","text":"CurrentModule = QInchworm.randomization","category":"page"},{"location":"api/","page":"Public API","title":"Public API","text":"randomization","category":"page"},{"location":"api/#QInchworm.randomization","page":"Public API","title":"QInchworm.randomization","text":"Randomized quasi Monte Carlo.\n\nExports\n\nRandomizationParams\nRequestStdDev\n\n\n\n\n\n","category":"module"},{"location":"api/","page":"Public API","title":"Public API","text":"RandomizationParams\nRequestStdDev","category":"page"},{"location":"api/#QInchworm.randomization.RandomizationParams","page":"Public API","title":"QInchworm.randomization.RandomizationParams","text":"struct RandomizationParams\n\nParameters of the randomized qMC integration.\n\nFields\n\nrng::Union{Nothing, Random.AbstractRNG}: Random Number Generator used to scramble Sobol sequences or nothing to disable scrambling\n\nN_seqs::Int64: Maximal number of scrambled Sobol sequences to be used\ntarget_std::Float64: Target standard deviation of the accumulated quantity (∞-norm for matrices)\n\n\n\n\n\n","category":"type"},{"location":"api/#QInchworm.randomization.RequestStdDev","page":"Public API","title":"QInchworm.randomization.RequestStdDev","text":"struct RequestStdDev\n\nSingleton type used to select methods that return an estimate of the standard deviation in addition to the mean.\n\n\n\n\n\n","category":"type"},{"location":"api/#api:QInchworm.ppgf","page":"Public API","title":"QInchworm.ppgf","text":"","category":"section"},{"location":"api/","page":"Public API","title":"Public API","text":"CurrentModule = QInchworm.ppgf","category":"page"},{"location":"api/","page":"Public API","title":"Public API","text":"ppgf","category":"page"},{"location":"api/#QInchworm.ppgf","page":"Public API","title":"QInchworm.ppgf","text":"Pseudo-particle Green's functions (propagators) of finite fermionic systems and related tools.\n\nFor a system defined by a time-independent Hamiltonian hat H, the pseudo-particle Green's function (PPGF) is\n\nP(z z) = left\nbeginarrayll\n-i (-1)^hat N e^-i hat H(z-z) z succ -ibeta cap -ibeta succeq z\n-i e^-i hat H(z-z) textotherwise\nendarray\nright\n\nIn particular, on the imaginary time segment alone one has P(tau) = -i e^-hat H tau.\n\nThis operator has a block-diagonal structure determined by the symmetry sectors of hat H, and is stored as a vector of GF containers corresponding to the individual diagonal blocks (FullTimePPGF, ImaginaryTimePPGF).\n\nExports\n\nFullTimePPGF\nImaginaryTimePPGF\natomic_ppgf\ndensity_matrix\nnormalize!\npartition_function\n\n\n\n\n\n","category":"module"},{"location":"api/","page":"Public API","title":"Public API","text":"FullTimePPGF\nImaginaryTimePPGF\natomic_ppgf\npartition_function\ndensity_matrix\nnormalize!","category":"page"},{"location":"api/#QInchworm.ppgf.FullTimePPGF","page":"Public API","title":"QInchworm.ppgf.FullTimePPGF","text":"An atomic propagator (PPGF) defined on a full Keldysh contour\n\n\n\n\n\n","category":"type"},{"location":"api/#QInchworm.ppgf.ImaginaryTimePPGF","page":"Public API","title":"QInchworm.ppgf.ImaginaryTimePPGF","text":"An atomic propagator (PPGF) defined on an imaginary time segment\n\n\n\n\n\n","category":"type"},{"location":"api/#QInchworm.ppgf.atomic_ppgf","page":"Public API","title":"QInchworm.ppgf.atomic_ppgf","text":"atomic_ppgf(\n β::Float64,\n ed::KeldyshED.EDCore\n) -> Vector{QInchworm.exact_atomic_ppgf.ExactAtomicPPGF}\n\n\nConstruct the exact atomic pseudo-particle Green's function.\n\nParameters\n\nβ: Inverse temperature.\ned: Exact diagonalization structure describing the atomic problem.\n\n\n\n\n\natomic_ppgf(\n grid::Keldysh.FullTimeGrid,\n ed::KeldyshED.EDCore\n) -> Vector{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}}\n\n\nCompute atomic pseudo-particle Green's function on a full contour time grid for a time-independent exact diagonalization problem ed.\n\nAs the resulting PPGF P(z z) is defined up to a multiplier e^-ilambda (z-z), we choose the energy shift lambda to fulfil the normalization property mathrmTri P(-ibeta 0) = 1.\n\n\n\n\n\natomic_ppgf(\n grid::Keldysh.ImaginaryTimeGrid,\n ed::KeldyshED.EDCore\n) -> Vector{Keldysh.ImaginaryTimeGF{ComplexF64, false}}\n\n\nCompute atomic pseudo-particle Green's function on an imaginary time grid for a time-independent exact diagonalization problem ed.\n\nAs the resulting PPGF P(tau) is defined up to a multiplier e^-lambdatau, we choose the energy shift lambda to fulfil the normalization property mathrmTri P(beta) = 1.\n\n\n\n\n\n","category":"function"},{"location":"api/#QInchworm.ppgf.partition_function","page":"Public API","title":"QInchworm.ppgf.partition_function","text":"partition_function(\n P_0::Vector{QInchworm.exact_atomic_ppgf.ExactAtomicPPGF}\n) -> ComplexF64\n\n\nExtract the partition function Z = mathrmTri P_0(-ibeta 0) from a un-normalized pseudo-particle Green's function P_0.\n\n\n\n\n\npartition_function(\n P::Vector{<:Keldysh.AbstractTimeGF}\n) -> ComplexF64\n\n\nExtract the partition function Z = mathrmTri P(-ibeta 0) from a un-normalized pseudo-particle Green's function P.\n\n\n\n\n\n","category":"function"},{"location":"api/#QInchworm.ppgf.density_matrix","page":"Public API","title":"QInchworm.ppgf.density_matrix","text":"density_matrix(\n P::Vector{QInchworm.exact_atomic_ppgf.ExactAtomicPPGF}\n) -> Vector{Matrix{ComplexF64}}\n\n\nExtract the equilibrium density matrix rho = i P(-ibeta 0) from a normalized pseudo-particle Green's function P. The density matrix is block-diagonal and is returned as a vector of blocks.\n\n\n\n\n\ndensity_matrix(\n P::Vector{<:Keldysh.AbstractTimeGF}\n) -> Vector{Matrix{ComplexF64}}\n\n\nExtract the equilibrium density matrix rho = i P(-ibeta 0) from a normalized pseudo-particle Green's function P. The density matrix is block-diagonal and is returned as a vector of blocks.\n\n\n\n\n\n","category":"function"},{"location":"api/#QInchworm.ppgf.normalize!","page":"Public API","title":"QInchworm.ppgf.normalize!","text":"normalize!(\n P::Vector{<:Keldysh.AbstractTimeGF},\n β::Float64\n) -> ComplexF64\n\n\nNormalize a pseudo-particle Green's function P by multiplying it by e^-ilambda (z-z) with lambda chosen such that mathrmTri P(-ibeta 0) = 1.\n\nReturns\n\nThe energy shift lambda.\n\n\n\n\n\nnormalize!(\n P::Vector{<:Keldysh.AbstractTimeGF},\n τ::Keldysh.TimeGridPoint\n)\n\n\nNormalize a pseudo-particle Green's function P by multiplying it by e^-ilambda (z-z) with lambda chosen such that mathrmmaxi P(-itau 0) = 1.\n\n\n\n\n\nnormalize!(P_s::Keldysh.AbstractTimeGF, λ)\n\n\nMultiply a given diagonal block of a pseudo-particle Green's function P_s by e^-ilambda (z-z).\n\n\n\n\n\nnormalize!(\n P_s::QInchworm.spline_gf.IncSplineImaginaryTimeGF{ComplexF64, false},\n λ\n)\n\n\nMultiply a given diagonal block of a pseudo-particle Green's function P_s by e^-ilambda (z-z). This method is defined for the spline-interpolated imaginary-time propagators.\n\n\n\n\n\n","category":"function"},{"location":"api/#api:QInchworm.spline_gf","page":"Public API","title":"QInchworm.spline_gf","text":"","category":"section"},{"location":"api/","page":"Public API","title":"Public API","text":"CurrentModule = QInchworm.spline_gf","category":"page"},{"location":"api/","page":"Public API","title":"Public API","text":"spline_gf","category":"page"},{"location":"api/#QInchworm.spline_gf","page":"Public API","title":"QInchworm.spline_gf","text":"Spline-interpolated Green's function containers.\n\nExports\n\nSplineInterpolatedGF\nph_conj\n\n\n\n\n\n","category":"module"},{"location":"api/","page":"Public API","title":"Public API","text":"SplineInterpolatedGF\nSplineInterpolatedGF(::GFType; ::kd.TimeGridPoint) where {\n T <: Number, scalar, GFType <: kd.AbstractTimeGF{T, scalar}}","category":"page"},{"location":"api/#QInchworm.spline_gf.SplineInterpolatedGF","page":"Public API","title":"QInchworm.spline_gf.SplineInterpolatedGF","text":"struct SplineInterpolatedGF{GFType, T, scalar} <: Keldysh.AbstractTimeGF{T, scalar}\n\nWrapper around a Green's function object that allows for fast cubic spline interpolation on the time grid.\n\nThe wrapper supports square bracket access to the wrapped object, direct access to the grid property, eltype(), Keldysh.norbitals() and Keldysh.TimeDomain(). Evaluation at an arbitrary contour time point (via operator ()) is carried out by a stored set of pre-computed B-spline interpolants.\n\nFields\n\nGF::Any: Wrapped Green's function\ninterpolants::Any: B-spline interpolants, one object per matrix element of G\n\n\n\n\n\n","category":"type"},{"location":"api/#QInchworm.spline_gf.SplineInterpolatedGF-Union{Tuple{GFType}, Tuple{scalar}, Tuple{T}} where {T<:Number, scalar, GFType<:Keldysh.AbstractTimeGF{T, scalar}}","page":"Public API","title":"QInchworm.spline_gf.SplineInterpolatedGF","text":"SplineInterpolatedGF(\n GF::Keldysh.AbstractTimeGF{T<:Number, scalar};\n τ_max\n) -> QInchworm.spline_gf.SplineInterpolatedGF{_A, T} where {_A, T<:Number}\n\n\nMake a SplineInterpolatedGF wrapper around GF and compute interpolants of its data from the start of the grid up to τ_max. By default, the entire data array is used.\n\n\n\n\n\n","category":"method"},{"location":"api/#api:QInchworm.keldysh_dlr","page":"Public API","title":"QInchworm.keldysh_dlr","text":"","category":"section"},{"location":"api/","page":"Public API","title":"Public API","text":"CurrentModule = QInchworm.keldysh_dlr","category":"page"},{"location":"api/","page":"Public API","title":"Public API","text":"keldysh_dlr","category":"page"},{"location":"api/#QInchworm.keldysh_dlr","page":"Public API","title":"QInchworm.keldysh_dlr","text":"Extension of Keldysh.jl defining imaginary time Green's functions represented using the Discrete Lehmann Representation as implemented in Lehmann.jl.\n\nExports\n\nDLRImaginaryTimeGF\nDLRImaginaryTimeGrid\nph_conj\n\n\n\n\n\n","category":"module"},{"location":"api/","page":"Public API","title":"Public API","text":"DLRImaginaryTimeGrid\nDLRImaginaryTimeGF","category":"page"},{"location":"api/#QInchworm.keldysh_dlr.DLRImaginaryTimeGrid","page":"Public API","title":"QInchworm.keldysh_dlr.DLRImaginaryTimeGrid","text":"struct DLRImaginaryTimeGrid <: Keldysh.AbstractTimeGrid\n\nWrapper around Lehmann.jl describing a Discrete Lehmann Representation imaginary time grid conforming to the interface of Keldysh.jl TimeGrids.\n\nFields\n\ncontour::Keldysh.ImaginaryContour\npoints::Vector{Keldysh.TimeGridPoint}\nbranch_bounds::Tuple{Pair{Keldysh.TimeGridPoint, Keldysh.TimeGridPoint}}\nntau::Int64\ndlr::Lehmann.DLRGrid\n\n\n\n\n\n","category":"type"},{"location":"api/#QInchworm.keldysh_dlr.DLRImaginaryTimeGF","page":"Public API","title":"QInchworm.keldysh_dlr.DLRImaginaryTimeGF","text":"struct DLRImaginaryTimeGF{T, scalar} <: Keldysh.AbstractTimeGF{T, scalar}\n\nWrapper around Lehmann.jl describing a Discrete Lehmann Representation imaginary time Green's function conforming to the interface of Keldysh.jl AbstractTimeGF.\n\nFields\n\ngrid::QInchworm.keldysh_dlr.DLRImaginaryTimeGrid\nmat::Keldysh.PeriodicStorage\nξ::Keldysh.GFSignEnum\n\n\n\n\n\n","category":"type"},{"location":"api/#api:QInchworm.utility","page":"Public API","title":"QInchworm.utility","text":"","category":"section"},{"location":"api/","page":"Public API","title":"Public API","text":"CurrentModule = QInchworm.utility","category":"page"},{"location":"api/","page":"Public API","title":"Public API","text":"utility","category":"page"},{"location":"api/#QInchworm.utility","page":"Public API","title":"QInchworm.utility","text":"An assorted collection of utility types and functions.\n\nExports\n\nph_conj\n\n\n\n\n\n","category":"module"},{"location":"api/","page":"Public API","title":"Public API","text":"ph_conj","category":"page"},{"location":"api/#QInchworm.utility.ph_conj","page":"Public API","title":"QInchworm.utility.ph_conj","text":"ph_conj(\n G_int::QInchworm.spline_gf.SplineInterpolatedGF{GFType<:Keldysh.ImaginaryTimeGF{T<:Number, true}, T<:Number, true}\n)\n\n\nGiven a spline-interpolated scalar-valued imaginary time Green's function g(tau), return its particle-hole conjugate g(beta-tau).\n\n\n\n\n\nph_conj(g::Keldysh.ImaginaryTimeGF{T, true}) -> Any\n\n\nGiven a scalar-valued imaginary time Green's function g(tau), return its particle-hole conjugate g(beta-tau).\n\n\n\n\n\nph_conj(\n g::QInchworm.keldysh_dlr.DLRImaginaryTimeGF{T, true}\n) -> QInchworm.keldysh_dlr.DLRImaginaryTimeGF{T, true} where T\n\n\nGiven a scalar-valued imaginary time Green's function g(tau), return its particle-hole conjugate g(beta-tau).\n\n\n\n\n\n","category":"function"},{"location":"modules/inchworm/#QInchworm.inchworm","page":"QInchworm.inchworm","title":"QInchworm.inchworm","text":"","category":"section"},{"location":"modules/inchworm/","page":"QInchworm.inchworm","title":"QInchworm.inchworm","text":"CurrentModule = QInchworm.inchworm","category":"page"},{"location":"modules/inchworm/","page":"QInchworm.inchworm","title":"QInchworm.inchworm","text":"TopologiesInputData\ninchworm_step\ninchworm_step_bare\ndiff_inchworm_step!","category":"page"},{"location":"modules/inchworm/#QInchworm.inchworm.TopologiesInputData","page":"QInchworm.inchworm","title":"QInchworm.inchworm.TopologiesInputData","text":"struct TopologiesInputData\n\nInchworm algorithm input data specific to a given set of topologies.\n\nFields\n\norder::Int64: Expansion order\nn_pts_after::Int64: Number of points in the after-t_w region\ntopologies::Vector{QInchworm.diagrammatics.Topology}: List of contributing topologies\nN_samples::Int64: Number of qMC samples per sequence (should be a power of 2)\nrand_params::QInchworm.randomization.RandomizationParams: qMC randomization parameters\n\n\n\n\n\n","category":"type"},{"location":"modules/inchworm/#QInchworm.inchworm.inchworm_step","page":"QInchworm.inchworm","title":"QInchworm.inchworm.inchworm_step","text":"inchworm_step(\n expansion::QInchworm.expansion.Expansion,\n c::Keldysh.AbstractContour,\n τ_i::Keldysh.TimeGridPoint,\n τ_w::Keldysh.TimeGridPoint,\n τ_f::Keldysh.TimeGridPoint,\n top_data::Vector{QInchworm.inchworm.TopologiesInputData};\n seq_type,\n tmr\n) -> Tuple{Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}, Dict{Int64, Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}}, Dict{Int64, Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}}}\n\n\nPerform one regular step of qMC inchworm accumulation of the bold propagators.\n\nParameters\n\nexpansion: Strong coupling expansion problem.\nc: Time contour for integration.\nτ_i: Initial time of the bold propagator to be computed.\nτ_w: Inchworm splitting time tau_w.\nτ_f: Final time of the bold propagator to be computed.\ntop_data: Inchworm algorithm input data.\nseq_type: Type of the (quasi-)random sequence to be used for integration.\ntmr: A TimerOutput object used for profiling.\n\nReturns\n\nAccumulated value of the bold propagator.\nOrder-resolved contributions to the bold propagator as a dictionary Dict{Int, SectorBlockMatrix}.\nEstimated standard deviations of the order-resolved contributions as a dictionary Dict{Int, SectorBlockMatrix}.\n\n\n\n\n\n","category":"function"},{"location":"modules/inchworm/#QInchworm.inchworm.inchworm_step_bare","page":"QInchworm.inchworm","title":"QInchworm.inchworm.inchworm_step_bare","text":"inchworm_step_bare(\n expansion::QInchworm.expansion.Expansion,\n c::Keldysh.AbstractContour,\n τ_i::Keldysh.TimeGridPoint,\n τ_f::Keldysh.TimeGridPoint,\n top_data::Vector{QInchworm.inchworm.TopologiesInputData};\n seq_type,\n tmr\n) -> Tuple{Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}, Dict{Int64, Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}}, Dict{Int64, Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}}}\n\n\nPerform the initial step of qMC inchworm accumulation of the bold propagators. This step amounts to summing all (not only inchworm-proper) diagrams built out of the bare propagators.\n\nParameters\n\nexpansion: Strong coupling expansion problem.\nc: Time contour for integration.\nτ_i: Initial time of the bold propagator to be computed.\nτ_f: Final time of the bold propagator to be computed.\ntop_data: Inchworm algorithm input data.\nseq_type: Type of the (quasi-)random sequence to be used for integration.\ntmr: A TimerOutput object used for profiling.\n\nReturns\n\nAccumulated value of the bold propagator.\nOrder-resolved contributions to the bold propagator as a dictionary Dict{Int, SectorBlockMatrix}.\nEstimated standard deviations of the order-resolved contributions as a dictionary Dict{Int, SectorBlockMatrix}.\n\n\n\n\n\n","category":"function"},{"location":"modules/inchworm/#QInchworm.inchworm.diff_inchworm_step!","page":"QInchworm.inchworm","title":"QInchworm.inchworm.diff_inchworm_step!","text":"diff_inchworm_step!(\n expansion::QInchworm.expansion.Expansion,\n c::Keldysh.ImaginaryContour,\n τ_i::Keldysh.TimeGridPoint,\n τ_f_prev::Keldysh.TimeGridPoint,\n τ_f::Keldysh.TimeGridPoint,\n Σ::Union{Vector{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}}, Vector{Keldysh.ImaginaryTimeGF{ComplexF64, false}}, Vector{QInchworm.exact_atomic_ppgf.ExactAtomicPPGF}, Vector{QInchworm.spline_gf.IncSplineImaginaryTimeGF{ComplexF64, false}}, Vector{QInchworm.spline_gf.SplineInterpolatedGF{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}, ComplexF64, false}}, Vector{QInchworm.spline_gf.SplineInterpolatedGF{Keldysh.ImaginaryTimeGF{ComplexF64, false}, ComplexF64, false}}},\n hamiltonian::Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}},\n top_data::Vector{QInchworm.inchworm.TopologiesInputData};\n seq_type,\n tmr\n) -> Tuple{Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}, Dict{Int64, Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}}, Dict{Int64, Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}}}\n\n\nPerform one step of the differential qMC inchworm accumulation of the bold propagators.\n\nParameters\n\nexpansion: Strong coupling expansion problem.\nc: Imaginary time contour for integration.\nτ_i: Initial time of the bold propagator to be computed.\nτ_f_prev: Final time of the bold propagator computed at the previous step.\nτ_f: Final time of the bold propagator to be computed.\nΣ: Container to store the pseudo-particle self-energy.\nhamiltonian: Atomic Hamiltonian.\ntop_data: Inchworm algorithm input data.\nseq_type: Type of the (quasi-)random sequence to be used for integration.\ntmr: A TimerOutput object used for profiling.\n\nReturns\n\nAccumulated value of the bold propagator.\nOrder-resolved contributions to pseudo-particle self-energy as a dictionary Dict{Int, SectorBlockMatrix}.\nEstimated standard deviations of the order-resolved contributions as a dictionary Dict{Int, SectorBlockMatrix}.\n\n\n\n\n\n","category":"function"},{"location":"modules/randomization/#QInchworm.randomization","page":"QInchworm.randomization","title":"QInchworm.randomization","text":"","category":"section"},{"location":"modules/randomization/","page":"QInchworm.randomization","title":"QInchworm.randomization","text":"CurrentModule = QInchworm.randomization","category":"page"},{"location":"modules/randomization/","page":"QInchworm.randomization","title":"QInchworm.randomization","text":"mean_std_from_randomization","category":"page"},{"location":"modules/randomization/#QInchworm.randomization.mean_std_from_randomization","page":"QInchworm.randomization","title":"QInchworm.randomization.mean_std_from_randomization","text":"mean_std_from_randomization(\n f::Function,\n D::Int64,\n params::QInchworm.randomization.RandomizationParams;\n seq_type\n) -> Tuple{Any, Any}\n\n\nEstimate mean and standard deviation using randomized quasi Monte Carlo.\n\nThis function initializes a number of D-dimensional scrambled Sobol sequences using the set of parameters params and passes each of them to the function f. It returns the mean and the standard deviation of f's return values.\n\nA different sequence type can be specified using the seq_type argument, provided its constructor has the same signature as ScrambledSobolSeq.\n\n\n\n\n\n","category":"function"},{"location":"modules/scrambled_sobol/#QInchworm.scrambled_sobol","page":"QInchworm.scrambled_sobol","title":"QInchworm.scrambled_sobol","text":"","category":"section"},{"location":"modules/scrambled_sobol/","page":"QInchworm.scrambled_sobol","title":"QInchworm.scrambled_sobol","text":"CurrentModule = QInchworm.scrambled_sobol","category":"page"},{"location":"modules/scrambled_sobol/","page":"QInchworm.scrambled_sobol","title":"QInchworm.scrambled_sobol","text":"scrambled_sobol\nScrambledSobolSeq\nScrambledSobolSeq(::Int; ::Union{AbstractRNG, Nothing})\nBase.ndims(::ScrambledSobolSeq)\nnext!\nskip!","category":"page"},{"location":"modules/scrambled_sobol/#QInchworm.scrambled_sobol","page":"QInchworm.scrambled_sobol","title":"QInchworm.scrambled_sobol","text":"This module contains a modified and extended version of Sobol.jl's code written by Steven G. Johnson.\n\nThe extensions include those mentioned in Sobol.jl issue #31.\n\nSupport for scrambled Sobol points (implementation of the scrambling is taken from SciPy).\nInclusion of the initial point in the Sobol sequence.\nskip!(... ; exact=false) now skips 2^m points.\n\n\n\n\n\n","category":"module"},{"location":"modules/scrambled_sobol/#QInchworm.scrambled_sobol.ScrambledSobolSeq","page":"QInchworm.scrambled_sobol","title":"QInchworm.scrambled_sobol.ScrambledSobolSeq","text":"mutable struct ScrambledSobolSeq{D}\n\nScrambled Sobol low-discrepancy sequence of dimension D.\n\nFields\n\nm::Matrix{UInt32}: Direction numbers, array of size (D, 32)\nx::Vector{UInt32}: Previous sequence point x = x_n, array of length D\nn::UInt32: Number of sequence points generated so far\n\n\n\n\n\n","category":"type"},{"location":"modules/scrambled_sobol/#QInchworm.scrambled_sobol.ScrambledSobolSeq-Tuple{Int64}","page":"QInchworm.scrambled_sobol","title":"QInchworm.scrambled_sobol.ScrambledSobolSeq","text":"ScrambledSobolSeq(\n D::Int64;\n scramble_rng\n) -> QInchworm.scrambled_sobol.ScrambledSobolSeq\n\n\nCreate a scrambled Sobol sequence of dimension D using the Random Number Generator scramble_rng to generate scrambling parameters. The sequence remains unscrambled if no RNG is provided.\n\n\n\n\n\n","category":"method"},{"location":"modules/scrambled_sobol/#Base.ndims-Tuple{QInchworm.scrambled_sobol.ScrambledSobolSeq}","page":"QInchworm.scrambled_sobol","title":"Base.ndims","text":"ndims(\n s::QInchworm.scrambled_sobol.ScrambledSobolSeq{D}\n) -> Int64\n\n\nDimension D of a scrambled Sobol sequence.\n\n\n\n\n\nndims(s::QInchworm.utility.RandomSeq{RNG, D}) -> Int64\n\n\nDimension D of a random sequence.\n\n\n\n\n\nndims(\n _::QInchworm.qmc_integrate.AbstractDomainTransform{D}\n) -> Any\n\n\nReturn the number of dimensions d of a domain transformation 0 1^d mapsto mathscrD.\n\n\n\n\n\n","category":"method"},{"location":"modules/scrambled_sobol/#QInchworm.scrambled_sobol.next!","page":"QInchworm.scrambled_sobol","title":"QInchworm.scrambled_sobol.next!","text":"next!(\n s::QInchworm.scrambled_sobol.ScrambledSobolSeq,\n x::AbstractVector{<:AbstractFloat}\n) -> AbstractVector{<:AbstractFloat}\n\n\nGenerate the next point mathbfxin0 1^D of the sequence s and write it into the array x.\n\n\n\n\n\nnext!(\n s::QInchworm.scrambled_sobol.ScrambledSobolSeq\n) -> Vector{Float64}\n\n\nGenerate and return the next point mathbfxin0 1^D of the sequence s.\n\n\n\n\n\nnext!(\n s::QInchworm.utility.RandomSeq,\n x::AbstractVector{<:AbstractFloat}\n) -> AbstractVector{<:AbstractFloat}\n\n\nGenerate the next point mathbfxin0 1)^D of the random sequence s and write it into the array x.\n\n\n\n\n\nnext!(s::QInchworm.utility.RandomSeq) -> Vector{Float64}\n\n\nGenerate and return the next point mathbfxin0 1)^D of the sequence s.\n\n\n\n\n\n","category":"function"},{"location":"modules/scrambled_sobol/#QInchworm.scrambled_sobol.skip!","page":"QInchworm.scrambled_sobol","title":"QInchworm.scrambled_sobol.skip!","text":"skip!(\n s::QInchworm.scrambled_sobol.ScrambledSobolSeq,\n n::Integer,\n x;\n exact\n) -> QInchworm.scrambled_sobol.ScrambledSobolSeq\n\n\nSkip a number of points in the sequence s using a preallocated buffer x.\n\nskip!(s, n, x) skips the next 2^m points such that 2^m n leq 2^m+1.\nskip!(s, n, x, exact=true) skips the next n points.\n\n\n\n\n\nskip!(\n s::QInchworm.scrambled_sobol.ScrambledSobolSeq,\n n::Integer;\n exact\n) -> QInchworm.scrambled_sobol.ScrambledSobolSeq\n\n\nSkip a number of points in the sequence s.\n\nskip!(s, n) skips the next 2^m points such that 2^m n leq 2^m+1.\nskip!(s, n, exact=true) skips the next n points.\n\n\n\n\n\nskip!(\n s::QInchworm.utility.RandomSeq,\n n::Integer,\n x;\n exact\n) -> QInchworm.utility.RandomSeq\n\n\nSkip a number of points in the random sequence s using a preallocated buffer x.\n\nskip!(s, n, x) skips the next 2^m points such that 2^m n leq 2^m+1.\nskip!(s, n, x, exact=true) skips the next n points.\n\n\n\n\n\nskip!(\n s::QInchworm.utility.RandomSeq,\n n::Integer;\n exact\n) -> QInchworm.utility.RandomSeq\n\n\nSkip a number of points in the random sequence s.\n\nskip!(s, n) skips the next 2^m points such that 2^m n leq 2^m+1.\nskip!(s, n, exact=true) skips the next n points.\n\n\n\n\n\n","category":"function"},{"location":"modules/mpi/#QInchworm.mpi","page":"QInchworm.mpi","title":"QInchworm.mpi","text":"","category":"section"},{"location":"modules/mpi/","page":"QInchworm.mpi","title":"QInchworm.mpi","text":"CurrentModule = QInchworm.mpi","category":"page"},{"location":"modules/mpi/","page":"QInchworm.mpi","title":"QInchworm.mpi","text":"mpi\nismaster\nrank_sub_range\nall_gather(::Vector{T}; ::MPI.Comm) where T\nall_reduce!(::SectorBlockMatrix, op; ::MPI.Comm)","category":"page"},{"location":"modules/mpi/#QInchworm.mpi","page":"QInchworm.mpi","title":"QInchworm.mpi","text":"MPI-related utility functions.\n\n\n\n\n\n","category":"module"},{"location":"modules/mpi/#QInchworm.mpi.ismaster","page":"QInchworm.mpi","title":"QInchworm.mpi.ismaster","text":"ismaster() -> Bool\nismaster(comm::MPI.Comm) -> Bool\n\n\nCheck whether the calling process has the rank 0 within the group associated with the communicator comm.\n\n\n\n\n\n","category":"function"},{"location":"modules/mpi/#QInchworm.mpi.rank_sub_range","page":"QInchworm.mpi","title":"QInchworm.mpi.rank_sub_range","text":"rank_sub_range(N::Integer; comm) -> UnitRange{Int64}\n\n\nSplit the range 1:N between MPI processes in the communicator comm as evenly as possible and return the sub-range 'owned' by the calling process.\n\n\n\n\n\n","category":"function"},{"location":"modules/mpi/#QInchworm.mpi.all_gather-Union{Tuple{Vector{T}}, Tuple{T}} where T","page":"QInchworm.mpi","title":"QInchworm.mpi.all_gather","text":"all_gather(subvec::Array{T, 1}; comm) -> Any\n\n\nPerform the MPI collective operation Allgather for vectors of elements of a generic type T.\n\nParameters\n\nsubvec: Subvector to be gathered.\ncomm: MPI communicator.\n\nReturns\n\nThe gathered vector of the same element type T.\n\n\n\n\n\n","category":"method"},{"location":"modules/mpi/#QInchworm.mpi.all_reduce!-Tuple{Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}, Any}","page":"QInchworm.mpi","title":"QInchworm.mpi.all_reduce!","text":"all_reduce!(\n sbm::Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}},\n op;\n comm\n)\n\n\nPerform the in-place MPI collective operation Allreduce for a sector block matrix.\n\nParameters\n\nsbm: Sector block matrices to be reduced.\nop: Reduction operation.\ncomm: MPI communicator.\n\nReturns\n\nThe gathered vector of the same element type T.\n\n\n\n\n\n","category":"method"},{"location":"modules/spline_gf/#QInchworm.spline_gf","page":"QInchworm.spline_gf","title":"QInchworm.spline_gf","text":"","category":"section"},{"location":"modules/spline_gf/","page":"QInchworm.spline_gf","title":"QInchworm.spline_gf","text":"CurrentModule = QInchworm.spline_gf","category":"page"},{"location":"modules/spline_gf/#SplineInterpolatedGF","page":"QInchworm.spline_gf","title":"SplineInterpolatedGF","text":"","category":"section"},{"location":"modules/spline_gf/","page":"QInchworm.spline_gf","title":"QInchworm.spline_gf","text":"make_interpolant(::kd.ImaginaryTimeGF{T, scalar}, k, l, ::kd.TimeGridPoint) where {\n T <: Number, scalar}\nupdate_interpolant!(::SplineInterpolatedGF{kd.ImaginaryTimeGF{T, scalar}, T, scalar},\n k, l; ::kd.TimeGridPoint) where {T <: Number, scalar}\nupdate_interpolants!(::SplineInterpolatedGF{kd.ImaginaryTimeGF{T, scalar}, T, scalar};\n ::kd.TimeGridPoint) where {T <: Number, scalar}\ninterpolate(::SplineInterpolatedGF{kd.ImaginaryTimeGF{T, true}, T, true},\n ::kd.BranchPoint, ::kd.BranchPoint) where T\ninterpolate(::SplineInterpolatedGF{kd.ImaginaryTimeGF{T, false}, T, false},\n ::kd.BranchPoint, ::kd.BranchPoint) where T","category":"page"},{"location":"modules/spline_gf/#QInchworm.spline_gf.make_interpolant-Union{Tuple{scalar}, Tuple{T}, Tuple{Keldysh.ImaginaryTimeGF{T, scalar}, Any, Any, Keldysh.TimeGridPoint}} where {T<:Number, scalar}","page":"QInchworm.spline_gf","title":"QInchworm.spline_gf.make_interpolant","text":"make_interpolant(\n GF::Keldysh.ImaginaryTimeGF{T<:Number, scalar},\n k,\n l,\n τ_max::Keldysh.TimeGridPoint\n) -> Interpolations.ScaledInterpolation{_A, 1, Interpolations.BSplineInterpolation{T, N, TCoefs, IT, Axs}, Interpolations.BSpline{Interpolations.Cubic{Interpolations.Line{Interpolations.OnGrid}}}, <:Tuple{LinRange{T, Int64} where T}} where {_A, T, N, TCoefs<:AbstractArray, IT<:Union{Interpolations.NoInterp, Tuple{Vararg{Union{Interpolations.NoInterp, Interpolations.BSpline}}}, Interpolations.BSpline}, Axs<:Tuple{Vararg{AbstractUnitRange, N}}}\n\n\nMake a cubic B-spline interpolant from GF's data corresponding to its matrix indices k, l. Data points from the start of the grid up to τ_max are used.\n\n\n\n\n\n","category":"method"},{"location":"modules/spline_gf/#QInchworm.spline_gf.update_interpolant!-Union{Tuple{scalar}, Tuple{T}, Tuple{QInchworm.spline_gf.SplineInterpolatedGF{Keldysh.ImaginaryTimeGF{T, scalar}, T, scalar}, Any, Any}} where {T<:Number, scalar}","page":"QInchworm.spline_gf","title":"QInchworm.spline_gf.update_interpolant!","text":"update_interpolant!(\n G_int::QInchworm.spline_gf.SplineInterpolatedGF{Keldysh.ImaginaryTimeGF{T<:Number, scalar}, T<:Number, scalar},\n k,\n l;\n τ_max\n) -> Interpolations.ScaledInterpolation{_A, 1, Interpolations.BSplineInterpolation{T, N, TCoefs, IT, Axs}, Interpolations.BSpline{Interpolations.Cubic{Interpolations.Line{Interpolations.OnGrid}}}, <:Tuple{LinRange{T, Int64} where T}} where {_A, T, N, TCoefs<:AbstractArray, IT<:Union{Interpolations.NoInterp, Tuple{Vararg{Union{Interpolations.NoInterp, Interpolations.BSpline}}}, Interpolations.BSpline}, Axs<:Tuple{Vararg{AbstractUnitRange, N}}}\n\n\nUpdate the interpolant stored in G_int and corresponding to its matrix indices k, l. The updated interpolant interpolates data points of G_int.GF from the start of the grid up to τ_max. By default, the entire data array is used.\n\n\n\n\n\n","category":"method"},{"location":"modules/spline_gf/#QInchworm.spline_gf.update_interpolants!-Union{Tuple{QInchworm.spline_gf.SplineInterpolatedGF{Keldysh.ImaginaryTimeGF{T, scalar}, T, scalar}}, Tuple{scalar}, Tuple{T}} where {T<:Number, scalar}","page":"QInchworm.spline_gf","title":"QInchworm.spline_gf.update_interpolants!","text":"update_interpolants!(\n G_int::QInchworm.spline_gf.SplineInterpolatedGF{Keldysh.ImaginaryTimeGF{T<:Number, scalar}, T<:Number, scalar};\n τ_max\n)\n\n\nUpdate all interpolants stored in G_int. The updated interpolants interpolate data points of G_int.GF from the start of the grid up to τ_max. By default, the entire data array is used.\n\n\n\n\n\n","category":"method"},{"location":"modules/spline_gf/#Interpolations.interpolate-Union{Tuple{T}, Tuple{QInchworm.spline_gf.SplineInterpolatedGF{Keldysh.ImaginaryTimeGF{T, true}, T, true}, Keldysh.BranchPoint, Keldysh.BranchPoint}} where T","page":"QInchworm.spline_gf","title":"Interpolations.interpolate","text":"interpolate(\n G_int::QInchworm.spline_gf.SplineInterpolatedGF{Keldysh.ImaginaryTimeGF{T, true}, T, true},\n t1::Keldysh.BranchPoint,\n t2::Keldysh.BranchPoint\n) -> Any\n\n\nEvaluate the spline-interpolated Green's function G_int at the contour time arguments t1, t2.\n\n\n\n\n\n","category":"method"},{"location":"modules/spline_gf/#Interpolations.interpolate-Union{Tuple{T}, Tuple{QInchworm.spline_gf.SplineInterpolatedGF{Keldysh.ImaginaryTimeGF{T, false}, T, false}, Keldysh.BranchPoint, Keldysh.BranchPoint}} where T","page":"QInchworm.spline_gf","title":"Interpolations.interpolate","text":"interpolate(\n G_int::QInchworm.spline_gf.SplineInterpolatedGF{Keldysh.ImaginaryTimeGF{T, false}, T, false},\n t1::Keldysh.BranchPoint,\n t2::Keldysh.BranchPoint\n) -> Any\n\n\nEvaluate the spline-interpolated Green's function G_int at the contour time arguments t1, t2.\n\n\n\n\n\n","category":"method"},{"location":"modules/spline_gf/#IncSplineImaginaryTimeGF","page":"QInchworm.spline_gf","title":"IncSplineImaginaryTimeGF","text":"","category":"section"},{"location":"modules/spline_gf/","page":"QInchworm.spline_gf","title":"QInchworm.spline_gf","text":"IncSplineImaginaryTimeGF\nIncSplineImaginaryTimeGF(::kd.ImaginaryTimeGF{T, true}, ::T) where {T <: Number}\nIncSplineImaginaryTimeGF(::kd.ImaginaryTimeGF{T, false}, ::Matrix{T}) where {T <: Number}\nmake_inc_interpolant(::kd.ImaginaryTimeGF{T, scalar}, k, l, ::T) where {T <: Number, scalar}\nBase.zero(::IncSplineImaginaryTimeGF{T, false}) where {T <: Number}\nBase.zero(::IncSplineImaginaryTimeGF{T, true}) where {T <: Number}\nextend!(::IncSplineImaginaryTimeGF, val)\ninterpolate(::IncSplineImaginaryTimeGF{T, true}, ::kd.BranchPoint, ::kd.BranchPoint) where T\ninterpolate(::IncSplineImaginaryTimeGF{T, false}, ::kd.BranchPoint, ::kd.BranchPoint) where T","category":"page"},{"location":"modules/spline_gf/#QInchworm.spline_gf.IncSplineImaginaryTimeGF","page":"QInchworm.spline_gf","title":"QInchworm.spline_gf.IncSplineImaginaryTimeGF","text":"struct IncSplineImaginaryTimeGF{T, scalar} <: Keldysh.AbstractTimeGF{T, scalar}\n\nWrapper around an imaginary time Green's function object that supports interpolation based on the IncrementalSpline.\n\nThe wrapper supports square bracket access to the wrapped object, direct access to the grid property, eltype(), Keldysh.norbitals() and Keldysh.TimeDomain(). Evaluation at an arbitrary imaginary time point (via operator ()) is carried out by a stored set of pre-computed IncrementalSpline interpolants.\n\nFields\n\nGF::Keldysh.ImaginaryTimeGF: Wrapped Green's function\ninterpolants::Any: Incremental spline interpolants, one object per matrix element of GF\n\n\n\n\n\n","category":"type"},{"location":"modules/spline_gf/#QInchworm.spline_gf.IncSplineImaginaryTimeGF-Union{Tuple{T}, Tuple{Keldysh.ImaginaryTimeGF{T, true}, T}} where T<:Number","page":"QInchworm.spline_gf","title":"QInchworm.spline_gf.IncSplineImaginaryTimeGF","text":"IncSplineImaginaryTimeGF(\n GF::Keldysh.ImaginaryTimeGF{T<:Number, true},\n derivative_at_0::Number\n) -> QInchworm.spline_gf.IncSplineImaginaryTimeGF{T, true} where T<:Number\n\n\nMake a IncSplineImaginaryTimeGF wrapper around a scalar-valued GF and initialize incremental interpolants of its data. derivative_at_0 is imaginary time derivative of GF at tau=0 needed to compute the first segment of the interpolants.\n\n\n\n\n\n","category":"method"},{"location":"modules/spline_gf/#QInchworm.spline_gf.IncSplineImaginaryTimeGF-Union{Tuple{T}, Tuple{Keldysh.ImaginaryTimeGF{T, false}, Matrix{T}}} where T<:Number","page":"QInchworm.spline_gf","title":"QInchworm.spline_gf.IncSplineImaginaryTimeGF","text":"IncSplineImaginaryTimeGF(\n GF::Keldysh.ImaginaryTimeGF{T<:Number, false},\n derivative_at_0::Array{T<:Number, 2}\n) -> QInchworm.spline_gf.IncSplineImaginaryTimeGF{T, false} where T<:Number\n\n\nMake a IncSplineImaginaryTimeGF wrapper around a matrix-valued GF and initialize incremental interpolants of its data. derivative_at_0 is imaginary time derivative of GF at tau=0 needed to compute the first segment of the interpolants.\n\n\n\n\n\n","category":"method"},{"location":"modules/spline_gf/#QInchworm.spline_gf.make_inc_interpolant-Union{Tuple{scalar}, Tuple{T}, Tuple{Keldysh.ImaginaryTimeGF{T, scalar}, Any, Any, T}} where {T<:Number, scalar}","page":"QInchworm.spline_gf","title":"QInchworm.spline_gf.make_inc_interpolant","text":"make_inc_interpolant(\n GF::Keldysh.ImaginaryTimeGF{T<:Number, scalar},\n k,\n l,\n derivative_at_0::Number\n) -> QInchworm.utility.IncrementalSpline\n\n\nMake an incremental spline interpolant from GF's data and corresponding to its matrix indices k, l. derivative_at_0 is imaginary time derivative of GF[k, l] at tau=0 needed to compute the first segment of the interpolant.\n\n\n\n\n\n","category":"method"},{"location":"modules/spline_gf/#Base.zero-Union{Tuple{QInchworm.spline_gf.IncSplineImaginaryTimeGF{T, false}}, Tuple{T}} where T<:Number","page":"QInchworm.spline_gf","title":"Base.zero","text":"zero(\n G_int::QInchworm.spline_gf.IncSplineImaginaryTimeGF{T<:Number, false}\n) -> QInchworm.spline_gf.IncSplineImaginaryTimeGF\n\n\nMake a zero matrix-valued IncSplineImaginaryTimeGF object similar to G_int.\n\n\n\n\n\n","category":"method"},{"location":"modules/spline_gf/#Base.zero-Union{Tuple{QInchworm.spline_gf.IncSplineImaginaryTimeGF{T, true}}, Tuple{T}} where T<:Number","page":"QInchworm.spline_gf","title":"Base.zero","text":"zero(\n G_int::QInchworm.spline_gf.IncSplineImaginaryTimeGF{T<:Number, true}\n) -> QInchworm.spline_gf.IncSplineImaginaryTimeGF\n\n\nMake a zero scalar-valued IncSplineImaginaryTimeGF object similar to G_int.\n\n\n\n\n\n","category":"method"},{"location":"modules/spline_gf/#QInchworm.utility.extend!-Tuple{QInchworm.spline_gf.IncSplineImaginaryTimeGF, Any}","page":"QInchworm.spline_gf","title":"QInchworm.utility.extend!","text":"extend!(\n G_int::QInchworm.spline_gf.IncSplineImaginaryTimeGF,\n val\n) -> Any\n\n\nExtend the underlying IncrementalSpline objects stored in G_int with a value val.\n\n\n\n\n\n","category":"method"},{"location":"modules/spline_gf/#Interpolations.interpolate-Union{Tuple{T}, Tuple{QInchworm.spline_gf.IncSplineImaginaryTimeGF{T, true}, Keldysh.BranchPoint, Keldysh.BranchPoint}} where T","page":"QInchworm.spline_gf","title":"Interpolations.interpolate","text":"interpolate(\n G_int::QInchworm.spline_gf.IncSplineImaginaryTimeGF{T, true},\n τ1::Keldysh.BranchPoint,\n τ2::Keldysh.BranchPoint\n) -> Any\n\n\nEvaluate the spline-interpolated scalar-valued Green's function G_int at the imaginary time arguments τ1, τ2.\n\n\n\n\n\n","category":"method"},{"location":"modules/spline_gf/#Interpolations.interpolate-Union{Tuple{T}, Tuple{QInchworm.spline_gf.IncSplineImaginaryTimeGF{T, false}, Keldysh.BranchPoint, Keldysh.BranchPoint}} where T","page":"QInchworm.spline_gf","title":"Interpolations.interpolate","text":"interpolate(\n G_int::QInchworm.spline_gf.IncSplineImaginaryTimeGF{T, false},\n τ1::Keldysh.BranchPoint,\n τ2::Keldysh.BranchPoint\n) -> Any\n\n\nEvaluate the spline-interpolated matrix-valued Green's function G_int at the imaginary time arguments τ1, τ2.\n\n\n\n\n\n","category":"method"},{"location":"modules/exact_atomic_ppgf/#QInchworm.exact_atomic_ppgf","page":"QInchworm.exact_atomic_ppgf","title":"QInchworm.exact_atomic_ppgf","text":"","category":"section"},{"location":"modules/exact_atomic_ppgf/","page":"QInchworm.exact_atomic_ppgf","title":"QInchworm.exact_atomic_ppgf","text":"Modules = [QInchworm.exact_atomic_ppgf]","category":"page"},{"location":"modules/exact_atomic_ppgf/#QInchworm.exact_atomic_ppgf","page":"QInchworm.exact_atomic_ppgf","title":"QInchworm.exact_atomic_ppgf","text":"Exact atomic pseudo-particle Green's function module enabling exact evaluation of the atomic propagator P_0(z) by evaluating the exponential P_0(z) = -i e^-iz hat H_loc.\n\nExports\n\nExactAtomicPPGF\natomic_ppgf\ndensity_matrix\ninterpolate!\npartition_function\n\n\n\n\n\n","category":"module"},{"location":"modules/exact_atomic_ppgf/#QInchworm.exact_atomic_ppgf.ExactAtomicPPGF","page":"QInchworm.exact_atomic_ppgf","title":"QInchworm.exact_atomic_ppgf.ExactAtomicPPGF","text":"struct ExactAtomicPPGF <: Keldysh.AbstractTimeGF{ComplexF64, false}\n\nExact atomic pseudo-particle Green's function type.\n\nFields\n\nβ::Float64: Inverse temperature\nE::Vector{Float64}: Eigenvalues of the atomic Hamiltonian\n\n\n\n\n\n","category":"type"},{"location":"modules/exact_atomic_ppgf/#QInchworm.exact_atomic_ppgf.ExactAtomicPPGF-Tuple{Keldysh.BranchPoint, Keldysh.BranchPoint}","page":"QInchworm.exact_atomic_ppgf","title":"QInchworm.exact_atomic_ppgf.ExactAtomicPPGF","text":"Evaluate atomic propagator at the difference between imaginary time branch points.\n\nParameters\n\nz1: first branch point.\nz2: second branch point.\n\nReturns\n\nValue of atomic pseudo-particle propagator P_0(z_1 - z_2) as a diagonal matrix Diagonal.\n\n\n\n\n\n","category":"method"},{"location":"modules/exact_atomic_ppgf/#QInchworm.exact_atomic_ppgf.ExactAtomicPPGF-Tuple{Number}","page":"QInchworm.exact_atomic_ppgf","title":"QInchworm.exact_atomic_ppgf.ExactAtomicPPGF","text":"Evaluate atomic propagator at complex contour time z.\n\nParameters\n\nz: scalar time.\n\nReturns\n\nValue of atomic pseudo-particle propagator P_0(z) as a diagonal matrix Diagonal.\n\n\n\n\n\n","category":"method"},{"location":"modules/exact_atomic_ppgf/#Keldysh.interpolate!-Tuple{Matrix{ComplexF64}, QInchworm.exact_atomic_ppgf.ExactAtomicPPGF, Keldysh.BranchPoint, Keldysh.BranchPoint}","page":"QInchworm.exact_atomic_ppgf","title":"Keldysh.interpolate!","text":"interpolate!(\n x::Matrix{ComplexF64},\n P_0::QInchworm.exact_atomic_ppgf.ExactAtomicPPGF,\n z1::Keldysh.BranchPoint,\n z2::Keldysh.BranchPoint\n) -> LinearAlgebra.Diagonal{ComplexF64, Vector{ComplexF64}}\n\n\nIn-place evaluation of the atomic propagator at the difference between imaginary time branch points.\n\nParameters\n\nx: Matrix to store the value of the atomic pseudo-particle propagator in.\nP_0: Atomic pseudo-particle propagator.\nz1: first branch point.\nz2: second branch point.\n\nReturns\n\nValue of atomic pseudo-particle propagator P_0(z_1 - z_2) as a diagonal matrix Diagonal.\n\n\n\n\n\n","category":"method"},{"location":"modules/exact_atomic_ppgf/#QInchworm.ppgf.atomic_ppgf-Tuple{Float64, KeldyshED.EDCore}","page":"QInchworm.exact_atomic_ppgf","title":"QInchworm.ppgf.atomic_ppgf","text":"atomic_ppgf(\n β::Float64,\n ed::KeldyshED.EDCore\n) -> Vector{QInchworm.exact_atomic_ppgf.ExactAtomicPPGF}\n\n\nConstruct the exact atomic pseudo-particle Green's function.\n\nParameters\n\nβ: Inverse temperature.\ned: Exact diagonalization structure describing the atomic problem.\n\n\n\n\n\n","category":"method"},{"location":"modules/exact_atomic_ppgf/#QInchworm.ppgf.density_matrix-Tuple{Vector{QInchworm.exact_atomic_ppgf.ExactAtomicPPGF}}","page":"QInchworm.exact_atomic_ppgf","title":"QInchworm.ppgf.density_matrix","text":"density_matrix(\n P::Vector{QInchworm.exact_atomic_ppgf.ExactAtomicPPGF}\n) -> Vector{Matrix{ComplexF64}}\n\n\nExtract the equilibrium density matrix rho = i P(-ibeta 0) from a normalized pseudo-particle Green's function P. The density matrix is block-diagonal and is returned as a vector of blocks.\n\n\n\n\n\n","category":"method"},{"location":"modules/exact_atomic_ppgf/#QInchworm.ppgf.partition_function-Tuple{Vector{QInchworm.exact_atomic_ppgf.ExactAtomicPPGF}}","page":"QInchworm.exact_atomic_ppgf","title":"QInchworm.ppgf.partition_function","text":"partition_function(\n P_0::Vector{QInchworm.exact_atomic_ppgf.ExactAtomicPPGF}\n) -> ComplexF64\n\n\nExtract the partition function Z = mathrmTri P_0(-ibeta 0) from a un-normalized pseudo-particle Green's function P_0.\n\n\n\n\n\n","category":"method"},{"location":"modules/ppgf/#QInchworm.ppgf","page":"QInchworm.ppgf","title":"QInchworm.ppgf","text":"","category":"section"},{"location":"modules/ppgf/","page":"QInchworm.ppgf","title":"QInchworm.ppgf","text":"CurrentModule = QInchworm.ppgf","category":"page"},{"location":"modules/ppgf/#Operators-and-their-matrices","page":"QInchworm.ppgf","title":"Operators and their matrices","text":"","category":"section"},{"location":"modules/ppgf/","page":"QInchworm.ppgf","title":"QInchworm.ppgf","text":"total_density_operator\noperator_matrix_representation\noperator_product","category":"page"},{"location":"modules/ppgf/#QInchworm.ppgf.total_density_operator","page":"QInchworm.ppgf","title":"QInchworm.ppgf.total_density_operator","text":"total_density_operator(ed::KeldyshED.EDCore) -> Any\n\n\nReturn the total density operator hat N = sum_i n_i, where i labels all single-particle basis states used to construct the exact diagonalization object ed.\n\n\n\n\n\n","category":"function"},{"location":"modules/ppgf/#QInchworm.ppgf.operator_matrix_representation","page":"QInchworm.ppgf","title":"QInchworm.ppgf.operator_matrix_representation","text":"operator_matrix_representation(\n op_expr::KeldyshED.Operators.OperatorExpr{S<:Number},\n ed::KeldyshED.EDCore\n) -> Vector{T} where T<:(Matrix{T} where T<:Number)\n\n\nMake matrix representation of an operator expression op_expr in each invariant subspace (symmetry sector) defined by the exact diagonalization object ed.\n\nNB! Requires that the operator expression does not mix symmetry sectors.\n\n\n\n\n\n","category":"function"},{"location":"modules/ppgf/#QInchworm.ppgf.operator_product","page":"QInchworm.ppgf","title":"QInchworm.ppgf.operator_product","text":"operator_product(\n ed::KeldyshED.EDCore,\n P,\n s_i::Integer,\n z_i,\n z_f,\n vertices\n) -> Tuple{Any, Any}\n\n\nEvaluate a product of vertices at different contour times z_n n=1ldots N with the pseudo-particle Green's functions sandwiched in between. The product is padded with the PPGFs P(z_1 z_i) and P(z_f z_N) at the respective ends of the contour segment z_i z_f.\n\nvertices is a contour-time ordered list of triples (z_n, c_n, o_n) were:\n\nz_n is a contour time,\nc_n is +1/-1 for creation/annihilation operator respectively, and\no_n is a spin-orbital index.\n\nParameters\n\ned: An object defining the exact diagonalization problem.\nP: The pseudo-particle Green's function as a list of its diagonal blocks.\ns_i: Initial symmetry sector, in which the rightmost PPGF is acting.\nz_i: Initial contour time z_i.\nz_f: Final contour time z_f.\nvertices: The list of vertices.\n\nReturns\n\nThe evaluated matrix product and the final symmetry sector, in which the leftmost PPGF is acting.\n\n\n\n\n\n","category":"function"},{"location":"modules/ppgf/#Pseudo-particle-Green's-functions","page":"QInchworm.ppgf","title":"Pseudo-particle Green's functions","text":"","category":"section"},{"location":"modules/ppgf/","page":"QInchworm.ppgf","title":"QInchworm.ppgf","text":"FullTimePPGFSector\nImaginaryTimePPGFSector\natomic_ppgf!\nfirst_order_spgf\nfirst_order_spgf!\ncheck_ppgf_real_time_symmetries\nset_ppgf!\nset_ppgf_initial_conditions!\nppgf_real_time_initial_conditions!\nset_ppgf_symmetric!\ninitial_ppgf_derivative\nreduced_ppgf","category":"page"},{"location":"modules/ppgf/#QInchworm.ppgf.FullTimePPGFSector","page":"QInchworm.ppgf","title":"QInchworm.ppgf.FullTimePPGFSector","text":"A single block of an atomic propagator (PPGF) defined on a full Keldysh contour\n\n\n\n\n\n","category":"type"},{"location":"modules/ppgf/#QInchworm.ppgf.ImaginaryTimePPGFSector","page":"QInchworm.ppgf","title":"QInchworm.ppgf.ImaginaryTimePPGFSector","text":"A single block of an atomic propagator (PPGF) defined on an imaginary time segment\n\n\n\n\n\n","category":"type"},{"location":"modules/ppgf/#QInchworm.ppgf.atomic_ppgf!","page":"QInchworm.ppgf","title":"QInchworm.ppgf.atomic_ppgf!","text":"atomic_ppgf!(P::Vector, ed::KeldyshED.EDCore; Δλ)\n\n\nIn-place version of atomic_ppgf() that writes the computed PPGF into its first argument P. If Δλ is non-zero, then P(z z) is multiplied by e^-iDeltalambda (z-z).\n\n\n\n\n\n","category":"function"},{"location":"modules/ppgf/#QInchworm.ppgf.first_order_spgf","page":"QInchworm.ppgf","title":"QInchworm.ppgf.first_order_spgf","text":"first_order_spgf(\n P::Vector{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}},\n ed::KeldyshED.EDCore,\n o1,\n o2\n) -> Any\n\n\nCompute the first order pseudo-particle diagram contribution to the single-particle Green's function g_o_1 o_2(z z) defined on the full Keldysh contour.\n\nParameters\n\nP: Pseudo-particle Green's function.\ned: An object defining the exact diagonalization problem.\no1: First index of the single-particle Green's function to be computed.\no2: Second index of the single-particle Green's function to be computed.\n\nReturns\n\nThe computed single-particle Green's function.\n\n\n\n\n\nfirst_order_spgf(\n P::Vector{Keldysh.ImaginaryTimeGF{ComplexF64, false}},\n ed::KeldyshED.EDCore,\n o1,\n o2\n) -> Any\n\n\nCompute the first order pseudo-particle diagram contribution to the single-particle Green's function g_o_1 o_2(tau) defined on the imaginary time segment.\n\nParameters\n\nP: Pseudo-particle Green's function.\ned: An object defining the exact diagonalization problem.\no1: First index of the single-particle Green's function to be computed.\no2: Second index of the single-particle Green's function to be computed.\n\nReturns\n\nThe computed single-particle Green's function.\n\n\n\n\n\n","category":"function"},{"location":"modules/ppgf/#QInchworm.ppgf.first_order_spgf!","page":"QInchworm.ppgf","title":"QInchworm.ppgf.first_order_spgf!","text":"first_order_spgf!(g, P, ed::KeldyshED.EDCore, o1, o2)\n\n\nIn-place version of first_order_spgf() that writes the computed single-particle Green's function into its first argument g.\n\n\n\n\n\n","category":"function"},{"location":"modules/ppgf/#QInchworm.ppgf.check_ppgf_real_time_symmetries","page":"QInchworm.ppgf","title":"QInchworm.ppgf.check_ppgf_real_time_symmetries","text":"check_ppgf_real_time_symmetries(\n P::Vector{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}},\n ed::KeldyshED.EDCore\n) -> Bool\n\n\nCheck whether a given pseudo-particle Green's function P obeys all symmetry relations between its Keldysh components.\n\nParameters\n\nP: Pseudo-particle Green's function to check.\ned: An object defining the respective exact diagonalization problem.\n\n\n\n\n\n","category":"function"},{"location":"modules/ppgf/#QInchworm.ppgf.set_ppgf!","page":"QInchworm.ppgf","title":"QInchworm.ppgf.set_ppgf!","text":"set_ppgf!(\n P::Vector{QInchworm.spline_gf.IncSplineImaginaryTimeGF{ComplexF64, false}},\n τ_i::Keldysh.TimeGridPoint,\n τ_f::Keldysh.TimeGridPoint,\n val::Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}\n)\n\n\nSet the value of P corresponding to a given pair of imaginary time points (tau_f tau_i). This method is defined for the spline-interpolated imaginary-time propagators.\n\nParameters\n\nP: Pseudo-particle Green's function.\nτ_i: Initial imaginary time tau_i.\nτ_f: Final imaginary time tau_f.\nval: Block matrix to set P(tau_f tau_i) to. Expected to be block-diagonal.\n\n\n\n\n\nset_ppgf!(\n P::Union{Vector{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}}, Vector{Keldysh.ImaginaryTimeGF{ComplexF64, false}}},\n t_i::Keldysh.TimeGridPoint,\n t_f::Keldysh.TimeGridPoint,\n val::Dict{Int64, Tuple{Int64, Matrix{ComplexF64}}}\n)\n\n\nSet the value of P corresponding to a given pair of contour time points (t_f t_i).\n\nParameters\n\nP: Pseudo-particle Green's function.\nt_i: Initial contour time t_i.\nt_f: Final contour time t_f.\nval: Block matrix to set P(t_f t_i) to. Expected to be block-diagonal.\n\n\n\n\n\n","category":"function"},{"location":"modules/ppgf/#QInchworm.ppgf.set_ppgf_initial_conditions!","page":"QInchworm.ppgf","title":"QInchworm.ppgf.set_ppgf_initial_conditions!","text":"set_ppgf_initial_conditions!(\n P::Union{Vector{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}}, Vector{Keldysh.ImaginaryTimeGF{ComplexF64, false}}}\n)\n\n\nGiven a pseudo-particle Green's function P, set its values to zero except for the same-time components P(z z) = -i.\n\n\n\n\n\n","category":"function"},{"location":"modules/ppgf/#QInchworm.ppgf.ppgf_real_time_initial_conditions!","page":"QInchworm.ppgf","title":"QInchworm.ppgf.ppgf_real_time_initial_conditions!","text":"ppgf_real_time_initial_conditions!(\n P::Vector{Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid}},\n ed::KeldyshED.EDCore\n)\n\n\nGiven a pseudo-particle Green's function P, set its values at the real branch edges t = 0 to be consistent with values on the imaginary time branch.\n\nParameters\n\nP: Pseudo-particle Green's function.\ned: Exact diagonalization object used to derive statistical sign pre-factors of PPGF sectors.\n\n\n\n\n\n","category":"function"},{"location":"modules/ppgf/#QInchworm.ppgf.set_ppgf_symmetric!","page":"QInchworm.ppgf","title":"QInchworm.ppgf.set_ppgf_symmetric!","text":"set_ppgf_symmetric!(\n P_s::Keldysh.GenericTimeGF{ComplexF64, false, Keldysh.FullTimeGrid},\n n,\n z1::Keldysh.TimeGridPoint,\n z2::Keldysh.TimeGridPoint,\n value\n) -> Any\n\n\nSet real-time pseudo-particle Green's function symmetry connected time pairs.\n\nParameters\n\nP_s: Diagonal block of the PPGF to be updated.\nn: The number of particles in the corresponding sector.\nz1: First argument of the PPGF.\nz2: Second argument of the PPGF (must lie on the backward branch).\nvalue: Value to set elements of the PPGF to.\n\n\n\n\n\n","category":"function"},{"location":"modules/ppgf/#QInchworm.ppgf.initial_ppgf_derivative","page":"QInchworm.ppgf","title":"QInchworm.ppgf.initial_ppgf_derivative","text":"initial_ppgf_derivative(\n ed::KeldyshED.EDCore,\n β::Float64\n) -> Vector{Any}\n\n\nCompute the imaginary time derivative of the atomic pseudo-particle Green's function, partial_tau P(tau) at tau=0.\n\nParameters\n\ned: Exact diagonalization object defining the atomic propagator.\nβ: Inverse temperature.\n\nReturns\n\nValue of the derivative as a block-diagonal matrix (a list of blocks).\n\n\n\n\n\n","category":"function"},{"location":"modules/ppgf/#QInchworm.ppgf.reduced_ppgf","page":"QInchworm.ppgf","title":"QInchworm.ppgf.reduced_ppgf","text":"reduced_ppgf(\n P::Vector{<:Keldysh.AbstractTimeGF},\n ed::KeldyshED.EDCore,\n target_soi::KeldyshED.Hilbert.SetOfIndices\n) -> Any\n\n\nTake a partial trace of a pseudo-particle Green's function.\n\nParameters\n\nP: Pseudo-particle Green's function.\ned: Exact diagonalization object compatible with P.\ntarget_soi: A subset of creation/annihilation operator labels defining the target subsystem, in which the reduced PPGF acts.\n\nReturns\n\nThe reduced PPGF written in the Fock state basis of the target subsystem.\n\n\n\n\n\n","category":"function"},{"location":"modules/topology_eval/#QInchworm.topology_eval","page":"QInchworm.topology_eval","title":"QInchworm.topology_eval","text":"","category":"section"},{"location":"modules/topology_eval/","page":"QInchworm.topology_eval","title":"QInchworm.topology_eval","text":"CurrentModule = QInchworm.topology_eval","category":"page"},{"location":"modules/topology_eval/","page":"QInchworm.topology_eval","title":"QInchworm.topology_eval","text":"topology_eval\nNodeKind\nNode\nFixedNode\nPairNode\nIdentityNode\nInchNode\nOperatorNode\nTopologyEvaluator\nTopologyEvaluator(::Expansion, ::Int, ::Bool, ::Dict{Int, FixedNode}; ::TimerOutput)\nTopologyEvaluator(::Topology, ::Vector{kd.BranchPoint})\nTopologyEvaluator(::Vector{Topology}, ::Vector{kd.BranchPoint})\n_traverse_configuration_tree!","category":"page"},{"location":"modules/topology_eval/#QInchworm.topology_eval","page":"QInchworm.topology_eval","title":"QInchworm.topology_eval","text":"Evaluator for strong-coupling expansion diagrams of a specific topology.\n\n\n\n\n\n","category":"module"},{"location":"modules/topology_eval/#QInchworm.topology_eval.NodeKind","page":"QInchworm.topology_eval","title":"QInchworm.topology_eval.NodeKind","text":"primitive type NodeKind <: Enum{Int32} 32\n\nNode kind classification using @enum.\n\nPossible values: pair_flag, identity_flag, inch_flag, operator_flag.\n\n\n\n\n\n","category":"type"},{"location":"modules/topology_eval/#QInchworm.topology_eval.Node","page":"QInchworm.topology_eval","title":"QInchworm.topology_eval.Node","text":"struct Node\n\nNode in the atomic propagator backbone of a strong-coupling diagram.\n\nFields\n\nkind::QInchworm.topology_eval.NodeKind: Kind of the node\narc_index::Int64: Index for pair interaction arc\noperator_index::Int64: Index of operator\n\n\n\n\n\n","category":"type"},{"location":"modules/topology_eval/#QInchworm.topology_eval.FixedNode","page":"QInchworm.topology_eval","title":"QInchworm.topology_eval.FixedNode","text":"struct FixedNode\n\nNode in the atomic propagator backbone of a strong-coupling diagram fixed at a certain contour time point.\n\nFields\n\nnode::QInchworm.topology_eval.Node: Reference to operator\ntime::Keldysh.BranchPoint: Contour time point\n\n\n\n\n\n","category":"type"},{"location":"modules/topology_eval/#QInchworm.topology_eval.PairNode","page":"QInchworm.topology_eval","title":"QInchworm.topology_eval.PairNode","text":"PairNode(\n time::Keldysh.BranchPoint\n) -> QInchworm.topology_eval.FixedNode\n\n\nReturn a node that serves as an end of a pair interaction arc fixed at time time.\n\n\n\n\n\n","category":"function"},{"location":"modules/topology_eval/#QInchworm.topology_eval.IdentityNode","page":"QInchworm.topology_eval","title":"QInchworm.topology_eval.IdentityNode","text":"IdentityNode(\n time::Keldysh.BranchPoint\n) -> QInchworm.topology_eval.FixedNode\n\n\nReturn a fixed node at time time with an associated identity operator.\n\n\n\n\n\n","category":"function"},{"location":"modules/topology_eval/#QInchworm.topology_eval.InchNode","page":"QInchworm.topology_eval","title":"QInchworm.topology_eval.InchNode","text":"InchNode(\n time::Keldysh.BranchPoint\n) -> QInchworm.topology_eval.FixedNode\n\n\nReturn a fixed 'inch' node at time time with an associated identity operator.\n\n\n\n\n\n","category":"function"},{"location":"modules/topology_eval/#QInchworm.topology_eval.OperatorNode","page":"QInchworm.topology_eval","title":"QInchworm.topology_eval.OperatorNode","text":"OperatorNode(\n time::Keldysh.BranchPoint,\n operator_pair_index::Int64,\n operator_index::Int64\n) -> QInchworm.topology_eval.FixedNode\n\n\nReturn a fixed operator node at time time with an associated operator. The actual operator is stored in an Expansion structure and is uniquely identified by the pair (operator_pair_index, operator_index).\n\n\n\n\n\n","category":"function"},{"location":"modules/topology_eval/#QInchworm.topology_eval.TopologyEvaluator","page":"QInchworm.topology_eval","title":"QInchworm.topology_eval.TopologyEvaluator","text":"struct TopologyEvaluator\n\nThe evaluation engine for the strong-coupling expansion diagrams.\n\nIn the following, a sequence of Node's contributing to a diagram of a certain topology is referred to as 'configuration'.\n\nFields\n\nexp::QInchworm.expansion.Expansion: Pseudo-particle expansion problem\nconf::Vector{QInchworm.topology_eval.Node}: Configuration as a list of nodes arranged in the contour order\ntimes::Vector{Keldysh.BranchPoint}: Contour positions of nodes in the configuration\ntop_to_conf_pos::Vector{Int64}: Correspondence of node positions within a topology and a configuration\nvar_time_pos::Vector{Int64}: Positions of variable time (non-fixed) nodes within a configuration\nuse_bold_prop::Bool: Must the bold PPGFs be used?\nppgf_mats::Matrix{Matrix{ComplexF64}}: PPGFs evaluated at all relevant pairs of time arguments. ppgf_mats[i, s] is the s-th diagonal block of exp.P (or exp.P0) evaluated at the pair of time points (t_i+1 t_i).\n\npair_ints::Matrix{ComplexF64}: Pair interaction arcs evaluated at all relevant pairs of time arguments.\npair_ints[a, p] is the propagator from exp.pairs[p] evaluated at the pair of time points corresponding to the a-th arc in a topology.\n\nselected_pair_ints::Vector{Int64}: Indices of pair interactions within exp.pairs assigned to each interaction arc in a topology.\n\ntop_result_mats::Vector{Matrix{ComplexF64}}: Pre-allocated container for per-topology evaluation results\nmatrix_prod::QInchworm.utility.LazyMatrixProduct{ComplexF64}: Pre-allocated matrix product evaluator\ntmr::TimerOutputs.TimerOutput: Internal performance timer\n\n\n\n\n\n","category":"type"},{"location":"modules/topology_eval/#QInchworm.topology_eval.TopologyEvaluator-Tuple{QInchworm.expansion.Expansion, Int64, Bool, Dict{Int64, QInchworm.topology_eval.FixedNode}}","page":"QInchworm.topology_eval","title":"QInchworm.topology_eval.TopologyEvaluator","text":"TopologyEvaluator(\n exp::QInchworm.expansion.Expansion,\n order::Int64,\n use_bold_prop::Bool,\n fixed_nodes::Dict{Int64, QInchworm.topology_eval.FixedNode};\n tmr\n) -> QInchworm.topology_eval.TopologyEvaluator\n\n\nParameters\n\nexp: Strong-coupling expansion problem.\norder: Expansion order of the diagrams (the number of interaction arcs).\nuse_bold_prop: Must the bold PPGFs be used in the diagrams?\nfixed_nodes: List of fixed nodes in a configuration along with their positions.\ntmr: Internal performance timer.\n\n\n\n\n\n","category":"method"},{"location":"modules/topology_eval/#QInchworm.topology_eval.TopologyEvaluator-Tuple{QInchworm.diagrammatics.Topology, Vector{Keldysh.BranchPoint}}","page":"QInchworm.topology_eval","title":"QInchworm.topology_eval.TopologyEvaluator","text":"Given a single diagram topology, evaluate contribution from all relevant configurations assuming that non-fixed nodes are located at contour time points times.\n\n\n\n\n\n","category":"method"},{"location":"modules/topology_eval/#QInchworm.topology_eval.TopologyEvaluator-Tuple{Vector{QInchworm.diagrammatics.Topology}, Vector{Keldysh.BranchPoint}}","page":"QInchworm.topology_eval","title":"QInchworm.topology_eval.TopologyEvaluator","text":"Given a list of diagram topologies, evaluate contribution from all relevant configurations assuming that non-fixed nodes are located at contour time points times.\n\n\n\n\n\n","category":"method"},{"location":"modules/topology_eval/#QInchworm.topology_eval._traverse_configuration_tree!","page":"QInchworm.topology_eval","title":"QInchworm.topology_eval._traverse_configuration_tree!","text":"_traverse_configuration_tree!(\n eval::QInchworm.topology_eval.TopologyEvaluator,\n pos::Int64,\n s_i::Int64,\n s_f::Int64,\n pair_int_weight::ComplexF64\n)\n\n\nRecursively traverse a tree of all configurations stemming from a given topology and contributing to the quantity of interest. The result is accumulated in eval.top_result_mats.\n\nParameters\n\neval: Evaluator object.\npos: Position of the currently processed Node in the configuration.\ns_i: Left block index of the matrix representation of the current node.\ns_f: Right block index expected at the final node.\npair_int_weight: Current weight of the pair interaction contribution.\n\n\n\n\n\n","category":"function"},{"location":"modules/utility/#QInchworm.utility","page":"QInchworm.utility","title":"QInchworm.utility","text":"","category":"section"},{"location":"modules/utility/","page":"QInchworm.utility","title":"QInchworm.utility","text":"CurrentModule = QInchworm.utility","category":"page"},{"location":"modules/utility/#Interpolations.jl-addon:-Neumann-boundary-conditions-for-the-cubic-spline","page":"QInchworm.utility","title":"Interpolations.jl addon: Neumann boundary conditions for the cubic spline","text":"","category":"section"},{"location":"modules/utility/","page":"QInchworm.utility","title":"QInchworm.utility","text":"NeumannBC\nInterpolations.prefiltering_system(::Type{T},\n ::Type{TC},\n ::Int,\n ::Interpolations.Cubic{BC}) where {\n T, TC, BC <: NeumannBC{Interpolations.OnGrid}}","category":"page"},{"location":"modules/utility/#QInchworm.utility.NeumannBC","page":"QInchworm.utility","title":"QInchworm.utility.NeumannBC","text":"struct NeumannBC{GT<:Union{Nothing, Interpolations.GridType}, T<:Number} <: Interpolations.BoundaryCondition\n\nInterpolations.jl addon: Implementation of the Neumann boundary conditions for the cubic spline.\n\nFields\n\ngt::Union{Nothing, Interpolations.GridType}: Grid type\nleft_derivative::Number: Function derivative at the left boundary\nright_derivative::Number: Function derivative at the right boundary\n\n\n\n\n\n","category":"type"},{"location":"modules/utility/#Interpolations.prefiltering_system-Union{Tuple{BC}, Tuple{TC}, Tuple{T}, Tuple{Type{T}, Type{TC}, Int64, Interpolations.Cubic{BC}}} where {T, TC, BC<:(QInchworm.utility.NeumannBC{Interpolations.OnGrid})}","page":"QInchworm.utility","title":"Interpolations.prefiltering_system","text":"prefiltering_system(\n _::Type{T},\n _::Type{TC},\n n::Int64,\n degree::Interpolations.Cubic{BC<:(QInchworm.utility.NeumannBC{Interpolations.OnGrid})}\n) -> Tuple{WoodburyMatrices.Woodbury{_A, LinearAlgebra.LU{T, S, P}, SparseArrays.SparseMatrixCSC{Tv, Int64}, SparseArrays.SparseMatrixCSC{Tv1, Int64}, Matrix{_A1}} where {_A, T, S<:(LinearAlgebra.Tridiagonal{T, _B} where _B), P<:(AbstractVector{<:Integer}), Tv, Tv1, _A1}, Vector}\n\n\nCompute the system used to prefilter cubic spline coefficients when using the Neumann boundary conditions.\n\nParameters\n\nT, TC: Element types.\nn: The number of rows in the data input.\ndegree: Interpolation degree information.\n\nReturns\n\nWoodbury matrix and the RHS of the computed system.\n\n\n\n\n\n","category":"method"},{"location":"modules/utility/#Quadratic-spline-that-allows-for-incremental-construction","page":"QInchworm.utility","title":"Quadratic spline that allows for incremental construction","text":"","category":"section"},{"location":"modules/utility/","page":"QInchworm.utility","title":"QInchworm.utility","text":"IncrementalSpline\nextend!","category":"page"},{"location":"modules/utility/#QInchworm.utility.IncrementalSpline","page":"QInchworm.utility","title":"QInchworm.utility.IncrementalSpline","text":"struct IncrementalSpline{KnotT<:Number, T<:Number}\n\nQuadratic spline on an equidistant grid that allows for incremental construction.\n\nFields\n\nknots::AbstractRange{KnotT} where KnotT<:Number: Locations of interpolation knots\ndata::Vector{T} where T<:Number: Values of the interpolated function at the knots\nder_data::Vector{T} where T<:Number: Values of the interpolated function derivative at the knots\n\n\n\n\n\n","category":"type"},{"location":"modules/utility/#QInchworm.utility.extend!","page":"QInchworm.utility","title":"QInchworm.utility.extend!","text":"extend!(\n G_int::QInchworm.spline_gf.IncSplineImaginaryTimeGF,\n val\n) -> Any\n\n\nExtend the underlying IncrementalSpline objects stored in G_int with a value val.\n\n\n\n\n\nextend!(\n spline::QInchworm.utility.IncrementalSpline,\n val\n) -> Vector{T} where T<:Number\n\n\nAdd a segment to an incremental spline by fixing value val of the interpolated function at the next knot.\n\n\n\n\n\n","category":"function"},{"location":"modules/utility/#Lazy-matrix-product","page":"QInchworm.utility","title":"Lazy matrix product","text":"","category":"section"},{"location":"modules/utility/","page":"QInchworm.utility","title":"QInchworm.utility","text":"LazyMatrixProduct\nBase.pushfirst!(::LazyMatrixProduct{T}, ::Matrix{T}) where {T <: Number}\nBase.popfirst!(::LazyMatrixProduct{T}, ::Int) where {T <: Number}\neval!(::LazyMatrixProduct{T}) where {T <: Number}","category":"page"},{"location":"modules/utility/#QInchworm.utility.LazyMatrixProduct","page":"QInchworm.utility","title":"QInchworm.utility.LazyMatrixProduct","text":"mutable struct LazyMatrixProduct{T<:Number}\n\nA matrix product of the form A_N A_N-1 ldots A_1.\n\nFunctions pushfirst!() and popfirst!() can be used to add and remove multipliers to/from the left of the product. The product is lazy in the sense that the actual multiplication takes place only when the eval!() function is called. The structure keeps track of previously evaluated partial products and reuses them upon successive calls to eval!().\n\n\n\n\n\n","category":"type"},{"location":"modules/utility/#Base.pushfirst!-Union{Tuple{T}, Tuple{QInchworm.utility.LazyMatrixProduct{T}, Matrix{T}}} where T<:Number","page":"QInchworm.utility","title":"Base.pushfirst!","text":"pushfirst!(\n lmp::QInchworm.utility.LazyMatrixProduct{T<:Number},\n A::Array{T<:Number, 2}\n) -> Matrix{T} where T<:Number\n\n\nAdd a new matrix A to the left of the product lmp.\n\n\n\n\n\n","category":"method"},{"location":"modules/utility/#Base.popfirst!-Union{Tuple{T}, Tuple{QInchworm.utility.LazyMatrixProduct{T}, Int64}} where T<:Number","page":"QInchworm.utility","title":"Base.popfirst!","text":"popfirst!(\n lmp::QInchworm.utility.LazyMatrixProduct{T<:Number}\n) -> Int64\npopfirst!(\n lmp::QInchworm.utility.LazyMatrixProduct{T<:Number},\n n::Int64\n) -> Int64\n\n\nRemove n matrices from the left of the product lmp. By default, n = 1.\n\n\n\n\n\n","category":"method"},{"location":"modules/utility/#QInchworm.utility.eval!-Union{Tuple{QInchworm.utility.LazyMatrixProduct{T}}, Tuple{T}} where T<:Number","page":"QInchworm.utility","title":"QInchworm.utility.eval!","text":"eval!(\n lmp::QInchworm.utility.LazyMatrixProduct{T<:Number}\n) -> Matrix{T} where T<:Number\n\n\nEvaluate the matrix product lmp.\n\n\n\n\n\n","category":"method"},{"location":"modules/utility/#Random-sequence","page":"QInchworm.utility","title":"Random sequence","text":"","category":"section"},{"location":"modules/utility/","page":"QInchworm.utility","title":"QInchworm.utility","text":"RandomSeq\nseed!","category":"page"},{"location":"modules/utility/#QInchworm.utility.RandomSeq","page":"QInchworm.utility","title":"QInchworm.utility.RandomSeq","text":"struct RandomSeq{RNG<:Random.AbstractRNG, D}\n\nThis structure wraps a random number generator (a subtype of AbstractRNG) and implements a subset of ScrambledSobolSeq's interface.\n\n\n\n\n\n","category":"type"},{"location":"modules/utility/#QInchworm.utility.seed!","page":"QInchworm.utility","title":"QInchworm.utility.seed!","text":"seed!(s::QInchworm.utility.RandomSeq, seed)\n\n\nSeed the underlying random number generator of the sequence s with a given integer.\n\n\n\n\n\n","category":"function"},{"location":"modules/utility/#Serialization-using-IOBuffer","page":"QInchworm.utility","title":"Serialization using IOBuffer","text":"","category":"section"},{"location":"modules/utility/","page":"QInchworm.utility","title":"QInchworm.utility","text":"iobuffer_serialize\niobuffer_deserialize","category":"page"},{"location":"modules/utility/#QInchworm.utility.iobuffer_serialize","page":"QInchworm.utility","title":"QInchworm.utility.iobuffer_serialize","text":"iobuffer_serialize(data)\n\n\nSerialize data using an IOBuffer object.\n\n\n\n\n\n","category":"function"},{"location":"modules/utility/#QInchworm.utility.iobuffer_deserialize","page":"QInchworm.utility","title":"QInchworm.utility.iobuffer_deserialize","text":"iobuffer_deserialize(data_raw)\n\n\nDeserialize data using an IOBuffer object.\n\n\n\n\n\n","category":"function"},{"location":"modules/utility/#Range-partitioning-utilities","page":"QInchworm.utility","title":"Range partitioning utilities","text":"","category":"section"},{"location":"modules/utility/","page":"QInchworm.utility","title":"QInchworm.utility","text":"split_count\nrange_from_chunks_and_idx","category":"page"},{"location":"modules/utility/#QInchworm.utility.split_count","page":"QInchworm.utility","title":"QInchworm.utility.split_count","text":"split_count(N::Integer, n::Integer) -> Any\n\n\nReturn a vector of n integers which are approximately equal and sum to N.\n\n\n\n\n\n","category":"function"},{"location":"modules/utility/#QInchworm.utility.range_from_chunks_and_idx","page":"QInchworm.utility","title":"QInchworm.utility.range_from_chunks_and_idx","text":"range_from_chunks_and_idx(\n chunk_sizes::AbstractVector,\n idx::Integer\n) -> Any\n\n\nGiven a list of chunk sizes, return the range that enumerates elements in the idx-th chunk.\n\n\n\n\n\n","category":"function"},{"location":"#QInchworm.jl","page":"Home","title":"QInchworm.jl","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"The package QInchworm.jl is a Julia implementation of the quasi Monte Carlo variant[1] of the inchworm algorithm[2] for solving impurity models with multiple interacting fermions. Using quasi Monte Carlo, a 1N convergence rate with the number of samples is achievable, which compares favorably to the 1sqrtN convergence of the Monte Carlo methods.","category":"page"},{"location":"","page":"Home","title":"Home","text":"Below, you can find an API reference of QInchworm.jl's modules. Some parts of the API, such as handling of the atomic problem and of the pair interactions/hybridization, depend on container types from Keldysh.jl and exact diagonalization tools of KeldyshED.jl.","category":"page"},{"location":"","page":"Home","title":"Home","text":"There is also an example page showing how to use QInchworm.jl to solve a quantum impurity problem in thermodynamic equilibrium and to compute two-point correlation functions for it.","category":"page"},{"location":"","page":"Home","title":"Home","text":"[1]: Inchworm quasi Monte Carlo for quantum impurities. Hugo U. R. Strand, Joseph Kleinhenz and Igor Krivenko. arXiv:2310.16957.","category":"page"},{"location":"","page":"Home","title":"Home","text":"[2]: Taming the Dynamical Sign Problem in Real-Time Evolution of Quantum Many-Body Problems. Guy Cohen, Emanuel Gull, David R. Reichman, and Andrew J. Millis. Phys. Rev. Lett. 115, 266802 (2015).","category":"page"},{"location":"#Public-API","page":"Home","title":"Public API","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"QInchworm.expansion\nQInchworm.inchworm\nQInchworm.randomization\nQInchworm.ppgf\nQInchworm.spline_gf\nQInchworm.utility","category":"page"},{"location":"#Internals","page":"Home","title":"Internals","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"QInchworm.expansion\nQInchworm.inchworm\nQInchworm.ppgf\nQInchworm.exact_atomic_ppgf\nQInchworm.sector_block_matrix\nQInchworm.spline_gf\nQInchworm.keldysh_dlr\nQInchworm.utility\nQInchworm.mpi\nQInchworm.scrambled_sobol\nQInchworm.qmc_integrate\nQInchworm.randomization\nQInchworm.diagrammatics\nQInchworm.topology_eval","category":"page"},{"location":"example/#example","page":"Example","title":"Example","text":"","category":"section"},{"location":"example/","page":"Example","title":"Example","text":"(Image: )","category":"page"},{"location":"example/","page":"Example","title":"Example","text":"The following example demonstrates solution of the single orbital Anderson model in thermodynamic equilibrium coupled to a fermionic bath with a semi-elliptic density of states. We compute the single-particle Green's function, the dynamical double-occupancy and the transversal magnetic susceptibility of the impurity. The resulting curves are shown above.","category":"page"},{"location":"example/","page":"Example","title":"Example","text":"using Markdown\nMarkdown.parse(\"\"\"\n```julia\n$(read(\"example/example.jl\", String))\n```\n\"\"\")","category":"page"}] }