Reference
PicardLefschetzIntegration.indexPicardLefschetzIntegration.parametersPicardLefschetzIntegration.pointPicardLefschetzIntegration.quadraturePicardLefschetzIntegration.quadraturePicardLefschetzIntegration.thimblePicardLefschetzIntegration.PL_integratePicardLefschetzIntegration.PL_integratePicardLefschetzIntegration.dividePicardLefschetzIntegration.divide_repPicardLefschetzIntegration.flow!PicardLefschetzIntegration.flow_pointPicardLefschetzIntegration.flow_pointsPicardLefschetzIntegration.hypercube_triangulation_indicesPicardLefschetzIntegration.initialGridPicardLefschetzIntegration.normalizePicardLefschetzIntegration.remove_inactive_pointsPicardLefschetzIntegration.volume_simplex
PicardLefschetzIntegration.index — Type
indexThe indices that span a simplex. coord::Vector{Int} The indices of the simplex refering to vertices in the vector points. active When the simplex is active, it is still part of the Picard Lefschetz flow.
PicardLefschetzIntegration.parameters — Type
parametersContains the parameters of the Picard Lefschetz integration method.
dim The dimension of the integral.
δ The maximal edge length of the simplices.
τ Threshold on the real part of the exponent.
ϵ The steps size of the downward flow.
N The number of steps in the downward flow.
n The order of the simplex quadrature integration scheme.PicardLefschetzIntegration.point — Type
pointA point with two boolian attributes. The first determines whether the point is active. The second determines whether the point flows or stays fixed.
coord::Vector{Complex} The coordinates of the point.
active When the point is active, it is still part of the Picard Lefschetz flow.
frozen When a point is fozen, it does not flow. This is particularly relevant for points on the boundary of the integration domain.PicardLefschetzIntegration.quadrature — Type
quadratureThe simplex quadrature rule on a thimble. Building it once and reusing it avoids repeating the setup in every call of PL_integrate, for instance when evaluating the integral for many values of the parameters on the same thimble.
nodes::Matrix{ComplexF64} The quadrature nodes, one per column.
weights::Vector{ComplexF64} The quadrature weights multiplied by the Jacobian of their simplex.
vertices::Matrix{ComplexF64} The vertices of the thimble, one per column.
simplices::Vector{Vector{Int}} The indices of the vertices spanning each simplex.
npts::Int The number of quadrature nodes per simplex.PicardLefschetzIntegration.quadrature — Method
quadrature(thim::thimble, pars::parameters)Construct the simplex quadrature rule of order pars.n on the thimble.
PicardLefschetzIntegration.thimble — Type
thimbleThe thimble consisting of a set of points and a set of simplices.
PicardLefschetzIntegration.PL_integrate — Method
PL_integrate(S, Q::quadrature, pars::parameters)Evaluate the integral ∫exp(im * S(x))dx with the quadrature rule Q on the thimble. Simplices on which the real part of im * S is below the threshold pars.τ at all vertices are skipped.
PicardLefschetzIntegration.PL_integrate — Method
PL_integrate(S, thim::thimble, pars::parameters)Evaluate the integral ∫exp(im * S(x))dx along the thimble.
PicardLefschetzIntegration.divide — Function
divide(thim, pars::parameters, dictionary = Dict{Vector{Int}, Int}())Subdivide the simplices that have an edge longer than the threshold pars.δ by bisecting their longest edge. A simplex whose edges are all shorter than pars.δ, but which has an edge that was bisected in a neighbouring simplex, is bisected along that edge, so that the triangulation stays conforming. The dictionary maps the bisected edges to the index of their midpoint.
PicardLefschetzIntegration.divide_rep — Method
divide_rep(thim::thimble, pars::parameters)Repeat subdivision till all edges of the simplices are shorter than par.δ. The bisected edges are remembered across the repetitions, so that no hanging vertices remain.
PicardLefschetzIntegration.flow! — Method
flow!(S, thim::thimble, pars::parameters)Flow the thimble pars.N steps forward in the downward flow.
PicardLefschetzIntegration.flow_point — Method
flow_point(S, p, pars::parameters)Push a point one step in the downward flow.
PicardLefschetzIntegration.flow_points — Method
flow_points(S, thim::thimble, pars::parameters)Flow the thimble one step in the downward flow.
PicardLefschetzIntegration.hypercube_triangulation_indices — Method
hypercube_triangulation_indices(dim::Int)Triangulate a dim dimensional hypercube and output the simplices.
PicardLefschetzIntegration.initialGrid — Function
initialGrid(min, max, pars::parameters, frozen = false)Initialize a cubic grid with the lower left corner min and the upper right corner max. When forzen = true, the boundary points do not flow.
PicardLefschetzIntegration.normalize — Function
normalize(p, thres = 1.)Normalize a vector when the norm exceeds the threshold.
PicardLefschetzIntegration.remove_inactive_points — Method
remove_inactive_points(thim::thimble)Remove inactive points.
PicardLefschetzIntegration.volume_simplex — Method
volume_simplex(vertices)The volume of a simplex.