From a56e5420ca9b0b14942740e67bc0e17bdcb9b6e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= Date: Sat, 25 Apr 2015 16:39:38 +0100 Subject: [PATCH] Calculate mutual information in all regions. --- scrambling.cpp | 80 +++++++++++++++++++++++++++++--------------------- 1 file changed, 46 insertions(+), 34 deletions(-) diff --git a/scrambling.cpp b/scrambling.cpp index 4930cd7..fde7508 100644 --- a/scrambling.cpp +++ b/scrambling.cpp @@ -31,50 +31,62 @@ int main() double tPlus = 0; // time on the left boundary double tMinus = 0; // time on the right boundary alpha = 0.4; // encodes the conformal dimention of local operator h_Psi - double y = 1; // endpoint of interval A - double L = 5; // length of interval A + double y = 3; // endpoint of interval A + double L = 15; // length of interval A double epsilon = 0.01; // smearing parameter beta = 10; // inverse temperature - double tOmega = 5.4418; // thermal state is perturbed by operator inserted at time -tOmega +// double tOmega = /*5.4418*/; // thermal state is perturbed by operator inserted at time -tOmega double c = 600; // central charge. Must be large in our approximation // End of parameters + for(unsigned int i = 0; i < 1000; ++i) + { + double tOmega = i*2*L/1000; - // Operator insertion points: Left boundary - std::complex x1 (0, -epsilon), x4 (0, epsilon), x1bar, x4bar; - x1bar = conj(x1); - x4bar = conj(x4); - double x2 = y - tOmega - tMinus; - double x2bar = y + tOmega + tMinus; - double x3 = L + x2; - double x3bar = L + x2bar; + // Operator insertion points: Left boundary + std::complex x1 (0, -epsilon), x4 (0, epsilon), x1bar, x4bar; + x1bar = conj(x1); + x4bar = conj(x4); + double x2 = y - tOmega - tMinus; + double x2bar = y + tOmega + tMinus; + double x3 = L + x2; + double x3bar = L + x2bar; - // Operator insertion points: Right boundary - std::complex x6 (y - tPlus - tOmega, beta/2); - std::complex x6bar (y + tPlus + tOmega, -beta/2); - std::complex x5 = L + x6; - std::complex x5bar = L + x6bar; + // Operator insertion points: Right boundary + std::complex x6 (y - tPlus - tOmega, beta/2); + std::complex x6bar (y + tPlus + tOmega, -beta/2); + std::complex x5 = L + x6; + std::complex x5bar = L + x6bar; - // Cross-ratios for S_A - std::complex zA = crossRatio(x1, x2, x3, x4); - std::complex zAbar = crossRatio(x1bar, x2bar, x3bar, x4bar); + // Cross-ratios for S_A + std::complex zA = crossRatio(x1, x2, x3, x4); + std::complex zAbar = crossRatio(x1bar, x2bar, x3bar, x4bar); - // Cross-ratios for S_B - std::complex zB = crossRatio(x1, x5, x6, x4); - std::complex zBbar = crossRatio(x1bar, x5bar, x6bar, x4bar); + // Cross-ratios for S_B + std::complex zB = crossRatio(x1, x5, x6, x4); + std::complex zBbar = crossRatio(x1bar, x5bar, x6bar, x4bar); - // Cross-ratios for S_{A union B} - std::complex z2 = crossRatio(x1, x2, x6, x4); - std::complex z2bar = crossRatio(x1bar, x2bar, x6bar, x4bar); - std::complex z5 = crossRatio(x1, x5, x3, x4); - std::complex z5bar = crossRatio(x1bar, x5bar, x3bar, x4bar); + // Cross-ratios for S_{A union B} + std::complex z2 = crossRatio(x1, x2, x6, x4); + std::complex z2bar = crossRatio(x1bar, x2bar, x6bar, x4bar); + std::complex z5 = crossRatio(x1, x5, x3, x4); + std::complex z5bar = crossRatio(x1bar, x5bar, x3bar, x4bar); - // Now we calculate entanglement entropies using Fitzpatrick, Kaplan, Walters formula. - double S_A = c/6 * log(Fitzpatrick(zA, zAbar, 2*M_PI)); - double S_B = c/6 * log(Fitzpatrick(zB, zBbar, 0)); - double S_union = c/6 * log(Fitzpatrick(z2, z2bar, 2*M_PI) * Fitzpatrick(z5, z5bar, 0)); - double S_thermal = 2*c/3 * log(sinh(M_PI*L/beta)/cosh(M_PI/beta*(tMinus-tPlus))); - double I = S_A + S_B - S_union + S_thermal; - std::cout << I << std::endl; + // Now we calculate entanglement entropies using Fitzpatrick, Kaplan, Walters formula. + double S_A = c/6 * log(Fitzpatrick(zA, zAbar, y < tMinus + tOmega && tMinus + tOmega < y + L ? 2*M_PI : 0)); + // std::cerr << "S_A = " << S_A << std::endl; + // double S_A_analytic = c/6 * log(beta/M_PI/epsilon/sinh(M_PI*L/beta)*sinh(M_PI/beta*(y+L-tMinus-tOmega))*sinh(M_PI/beta*(tMinus+tOmega-y)) * sin(M_PI*alpha)/alpha); +// double S_A_analytic = 0; +// std::cerr << "S_A (analytic) = " << S_A_analytic << std::endl; + double S_B = c/6 * log(Fitzpatrick(zB, zBbar, 0)); + double S_union = c/6 * log(Fitzpatrick(z2, z2bar, y < tMinus + tOmega ? 2*M_PI : 0) * Fitzpatrick(z5, z5bar, y +L < tMinus + tOmega ? -2*M_PI : 0)); +// std::cerr << "S_A+B = " << S_union << std::endl; + double S_union_analytic = c/3 * log(beta/M_PI/epsilon * sin(M_PI*alpha)/alpha) + c/6* log(sinh(M_PI/beta*(tMinus + tOmega - y)) * cosh(M_PI/beta*(tPlus + tOmega - y)) * sinh(M_PI/beta*(tMinus + tOmega - y - L)) * cosh(M_PI/beta*(tPlus + tOmega - y - L))); +// std::cerr << "S_A+B (analytic) = " << S_union_analytic << std::endl; + double S_thermal = 2*c/3 * log(sinh(M_PI*L/beta)/cosh(M_PI/beta*(tMinus-tPlus))); + double I = S_A + S_B - S_union + S_thermal; +// double I_analytic = S_A_analytic - S_union_analytic + S_thermal; + std::cout << tOmega << "\t" << I /*<< "\t" << I_analytic*/ << std::endl; +} return 0; }