Computing conformal blocks
The library uses the Zamolodchikov recursion to compute four-point conformal blocks on the sphere, and one-point conformal blocks on the torus. Because it is common in bootstrap computations to have to evaluate a given block at hundreds of positions, the library first creates a Block object which stores the coefficients of the block's series expansion, which can then be evaluated at any number of positions.
Examples
The two blocks of code below can be copy-pasted and ran as is. More detailed documentation of the package's functionality can be found below.
Chiral conformal blocks
using BootstrapVirasoro
setprecision(BigFloat, 20, base=10) # work with 20 digits of precision
# define a central charge. big"..." is the syntax for abitrary precision numbers.
# b is the Liouville parameter
c = CC(b = big"0.523"+big"0.1"*im)
# if only standard (16-digit) precision is needed, just do c = CC(b=0.523+0.1*im)
# standard precision is *much* faster.
d1 = ConformalDimension(c, r=1, s=0) # Conformal dimension with Kac indices (r, s) = (1, 0).
d2 = CD(c, P=big"0.54") # CD is synonymous to ConformalDimension, P is the momentum.
d3 = CD(c, Δ=big"4.32") # Δ is the conformal dimension. Type it as \Delta, then tab or enter.
d4 = d3
d = CD(c, P=big"0.32"+big"0.1"*im)
# four-point block:
co1 = Correlation(d1, d2, d3, d4, 10) # Create a correlation object that stores the R_{m, n} up to Nmax=10.
b1 = ChiralBlock(co1, :s, d) # Create a chiral s-channel four-point block with dimension d in the channel.
b2 = CBlock(co1, :t, d) # t-channel block. CBlock is synonymous of ChiralBlock.
x = big"0.3" + big"0.2" * im
println(b1(x)) # print the value of the block at position `x`.
# one-point block:
co2 = Correlation(d1, 10)
b3 = ChiralBlock(co2, d) # chiral one-point block
τ = big"1.1" + big"0.3" * im
println(b3(τ))Non-chiral conformal blocks
using BootstrapVirasoro
setprecision(BigFloat, 20, base=10) # work with 20 digits of precision
# define a central charge. big"..." is the syntax for abitrary precision numbers.
# b is the Liouville parameter
c = CC(b = big"0.523"+big"0.1"*im)
V2 = Field(c, P=big"0.54") # Field with momentum P=0.54.
V1 = Field(c, r=1, s=1) # non-diagonal field of dimensions (Δ_(1, 1), Δ_(1, -1))
V1 = Field(c, r=1, s=2, diagonal=true) # degenerate field with Kac indices (r, s) = (1, 2).
V3 = Field(c, Δ=big"4.32") # Δ is the conformal dimension. Type it as \Delta, then tab or enter.
V4 = V3
V = Field(c, P=big"0.32"+big"0.1"*im)
V_degenerate = Field(c, r=2, s=3, diagonal=true)
# four-point block:
co1 = Correlation(V1, V2, V3, V4, 10) # Create a correlation object that stores the R_{m, n} up to Nmax=10.
b1 = NonChiralBlock(co1, :s, V) # Create a non-chiral s-channel four-point block with field V in the channel.
b2 = NCBlock(co1, :t, V_degenerate) # regularised t-channel four-point block with degenerate field V_degenerate in the channel.
# NCBlock is synonymous of NonChiralBlock
x = big"0.3" + big"0.2" * im
println(b1(x)) # print the value of the block at position `x`.
# one-point block:
co2 = Correlation(d1, 10)
b2 = NCBlock(co2, d) # non chiral one-point block
τ = big"1.1" + big"0.3" * im
println(b2(τ))Documentation
The library provides a hierarchy of conformal block types:
BootstrapVirasoro.Block — Type
Abstract supertype for all conformal block types.
Hierarchy
Block (Abstract Type)
├─ ChiralBlock
├─ NonChiralBlock (Abstract Type)
│ ├─ Factorised block
│ └─ LogBlock
└─ LinearCombinationBlockBootstrapVirasoro.ChiralBlock — Type
Type
Type to represent the series expansion of a chiral block. Aliased to CBlock.
Constructors
ChiralBlock(::ChiralCorrelation4, ::Symbol, ::CD, Δmax=co.Δmax::Int, der=false) # 4pt 𝕊² chiral block
ChiralBlock(::ChiralCorrelation1, ::CD, Δmax=co.Δmax::Int, der=false) # 1pt 𝕋² chiral blockCompute the series coefficients of a chiral block associated to the ChiralCorrelation co, in the channel chan. If V is a degenerate field, compute the $P$-regularisation of the block instead. If der=true, also compute the coefficients of the series expansion of the derivative of the block.
Aliased to CBlock.
Arguments
- A chiral correlation object
- A channel for the block. Only required for four-point blocks.
- A channel
ConformalDimension Δmax: integer up to which the series is evaluated.der: whether to compute the coefficients of the block's derivative as well.
BootstrapVirasoro.NonChiralBlock — Type
Type
Abstract supertype to represent the series expansion of a non chiral block, either left-right factorised or logarithmic.
Aliased to NCBlock.
Constructors
NCBlock(::NonChiralCorrelation, ::Symbol, ::Field, Δmax=co.Δmax::Int) # 4pt 𝕊² chiral block
NCBlock(::NonChiralCorrelation, ::Field, Δmax=co.Δmax::Int) # 1pt 𝕋² chiral blockCompute the series coefficients of the left and right blocks associated to the non chiral correlation co, in the channel chan. If the channel field is degenerate, compute the $P$-regularisation of the block instead. If the channel field is a non-diagonal field of the type $V_{(r, s>0)}$, the block is logarithmic, except if the residue $R_{r,s}$ vanishes.
Arguments
- A
NonChiralCorrelationobject - A channel for the block. Only required for four-point blocks.
- A channel
Field Δmax: integer up to which the series is evaluated. Defaults to the correlation'sΔmax.
BootstrapVirasoro.LinearCombinationBlock — Type
Type
Type to represent linear combinations of blocks. Contains
- an array of
Blocks - an array of coefficients of the linear combination.
Constructors
LinearCombinationBlocks are constructed by summing blocks
Examples
# define a correlation co, two fields V1, V2.
b1 = CBlock(co, :s, V1)
b2 = CBlock(co, :s, V2)
b = b1 - 2b2 # LinearCombinationBlockDefining and computing blocks requires defining a central charge, and conformal dimensions of the external and channel fields.
BootstrapVirasoro.CentralCharge — Type
CentralCharge(; β, c, B, b)Create a CentralCharge object from one of the parameters $β, c = 13 - 6 β^2 - 6 β^{-2}, b = i β, B = b^2$.
Aliased to CC.
Examples
c1 = CentralCharge(β=0.5+0.3im)
c2 = CC(c=big"0.4")
c2.c ≈ big"0.4" # access any of the parametersBootstrapVirasoro.ConformalDimension — Type
ConformalDimension(c::CC; Δ, δ, P, p, r, s)Create a ConformalDimension object from one of the parameters $P, p = iP, δ = P^2, Δ = δ + \frac{c-1}{24}$ or from Kac indices r, s ($P_{(r, s)} = \frac{1}{2}(rβ - sβ^{-1})$). The index r must be integer or rational, s can be arbitrary.
Aliased to CD.
Examples
c = CC(β = big"0.3"+big"0.1"*im)
d1 = CD(c, P=big"0.5"*im)
d2 = CD(c, r=2, s=1//2)
d3 = CD(c, r=0, s=big"0.1")
d2.r == 2 # trueBootstrapVirasoro.Field — Type
Field(c::CC; Δ, δ, P, p, r, s, diagonal)Create a Field object from one of the parameters P, p, δ, Δ (see ConformalDimension) or from Kac indices r, s. The index r must be integer or rational, s can be arbitrary. Left and right dimensions are accessed with [:left], [:right]. The conformal spin of the field is computed with spin(V).
Examples
c = CC(β = big"0.3"+big"0.1"*im)
V1 = Field(c, r=2, s=1//2) # non-diagonal, (Δ(2, 1//2), Δ(2, -1//2))
V2 = Field(c, P=0.5) # diagonal
V3 = Field(c, r=1, s=2, diagonal=true) # degenerate
V3[:left].Δ == V3[:right].Δ # true
spin(V1) == 1 # trueThe parameters of the external fields are stored in a Correlation object, that also stores the residues $R_{m, n}$ for each channel, and their sums
\[C^N_{m,n} = R_{m,n}\left(\delta_{N-mn,0} + \sum_{m'n'\leq N-mn} \frac{C^{N-mn}_{m',n'}}{\delta_{(m,-n)}-\delta_{(m',n')}} \right)\]
used in the Zamolodchikov recursion.
They are all created via a common interface
BootstrapVirasoro.Correlation — Type
Abstract supertype for all correlation types.
Hierarchy
Correlation (Abstract Type)
├─ Correlation1 (Abstract Type)
│ ├─ ChiralCorrelation1
│ └─ NonChiralCorrelation1
└─ Correlation4 (Abstract Type)
├─ ChiralCorrelation4
└─ NonChiralCorrelation4Constructors
Correlation(fields, Δmax)Create a Correlation object. The fields can be passed as independent arguments or as collections, there can be 1 or 4 of them. The Correlation object stores residues $R_{m, n}$ and $C^N_{m, n}$ up to Δmax.
Aliased to Corr, Co.
Examples
c = CC(β = 0.5)
V = Field(c, r=2, s=1//2)
co1 = Correlation(V, V, V, V, 10) # NonChiralCorrelation4
co2 = Corr(V, 10) # NonChiralCorrelation1
co3 = Corr(Tuple(V[:left] for _ in 1:4), 20) # ChiralCorrelation4
co3.fields[1] == V[:left]