From 7b5d5722477da72069ef2a3119f725f81cc94f47 Mon Sep 17 00:00:00 2001 From: ysyapa Date: Thu, 15 Feb 2024 17:45:15 +0000 Subject: [PATCH] Move B2R into a seperate file --- B2R_test.jl | 46 ++++++++++++++++++++++++++++++++++++++++++++++ EC_test.ipynb | 43 ------------------------------------------- 2 files changed, 46 insertions(+), 43 deletions(-) create mode 100644 B2R_test.jl diff --git a/B2R_test.jl b/B2R_test.jl new file mode 100644 index 0000000..111ac1f --- /dev/null +++ b/B2R_test.jl @@ -0,0 +1,46 @@ +using Plots, LinearAlgebra +include("p_space.jl") + +vertices = (0, 0.4 - 0.15im, 0.8, 6) +subdivisions = 128 +p, w = get_mesh(vertices, subdivisions) +mesh_E = p.*p ./ (2*0.5) + +# ResonanceEC: Eq. (20) +V_system(c) = (p, q) -> c*(-5*g0(sqrt(3), p, q) + 2*g0(sqrt(10), p, q)) + +training_points = range(1.35, 0.9, 5) +training_E = Vector{ComplexF64}(undef, length(training_points)) +EC_basis = Matrix{ComplexF64}(undef, length(p), length(training_points)) + +for (j, c) in enumerate(training_points) + evals, evecs = eigen(get_H_matrix(V_system(c), p, w)) + i = identify_pole_i(p, evals) + training_E[j] = evals[i] + EC_basis[:, j] = evecs[:, i] +end + +EC_basis = hcat(EC_basis, conj.(EC_basis)) # CA-EC +EC_basis_w = EC_basis .* w +N_EC = transpose(EC_basis_w) * EC_basis + +extrapolate_points = range(0.75, 0.40, 8) + +exact_E = Vector{ComplexF64}(undef, length(extrapolate_points)) +extrapolate_E = Vector{ComplexF64}(undef, length(extrapolate_points)) + +for (j, c) in enumerate(extrapolate_points) + exact_E[j] = quick_pole_E(V_system(c)) + + H = get_H_matrix(V_system(c), p, w) + H_EC = transpose(EC_basis_w) * H * EC_basis + evals = eigvals(H_EC, N_EC) + i = argmin(abs.(evals .- exact_E[j])) + extrapolate_E[j] = evals[i] +end + +scatter(real.(training_E), imag.(training_E), label="training") +scatter!(real.(exact_E), imag.(exact_E), label="exact") +scatter!(real.(extrapolate_E), imag.(extrapolate_E), label="extrapolated") +plot!(real.(mesh_E), imag.(mesh_E), label="contour") +xlims!(-0.7,0.7) \ No newline at end of file diff --git a/EC_test.ipynb b/EC_test.ipynb index c9756ee..32f5be4 100644 --- a/EC_test.ipynb +++ b/EC_test.ipynb @@ -80,49 +80,6 @@ "plot!(real.(mesh_E), imag.(mesh_E), label=\"contour\")\n", "xlims!(0,1)" ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "training_points = range(1.35, 0.9, 5)\n", - "training_E = Vector{ComplexF64}(undef, length(training_points))\n", - "EC_basis = Matrix{ComplexF64}(undef, length(p), length(training_points))\n", - "\n", - "for (j, c) in enumerate(training_points)\n", - " evals, evecs = eigen(get_H_matrix(V_system(c), p, w))\n", - " i = identify_pole_i(p, evals)\n", - " training_E[j] = evals[i]\n", - " EC_basis[:, j] = evecs[:, i]\n", - "end\n", - "\n", - "EC_basis = hcat(EC_basis, conj.(EC_basis)) # CA-EC\n", - "EC_basis_w = EC_basis .* w\n", - "N_EC = transpose(EC_basis_w) * EC_basis\n", - "\n", - "extrapolate_points = range(0.75, 0.40, 8)\n", - "\n", - "exact_E = Vector{ComplexF64}(undef, length(extrapolate_points))\n", - "extrapolate_E = Vector{ComplexF64}(undef, length(extrapolate_points))\n", - "\n", - "for (j, c) in enumerate(extrapolate_points)\n", - " exact_E[j] = quick_pole_E(V_system(c))\n", - "\n", - " H = get_H_matrix(V_system(c), p, w)\n", - " H_EC = transpose(EC_basis_w) * H * EC_basis\n", - " evals = eigvals(H_EC, N_EC)\n", - " i = argmin(abs.(evals .- exact_E[j]))\n", - " extrapolate_E[j] = evals[i]\n", - "end\n", - "\n", - "scatter(real.(training_E), imag.(training_E), label=\"training\")\n", - "scatter!(real.(exact_E), imag.(exact_E), label=\"exact\")\n", - "scatter!(real.(extrapolate_E), imag.(extrapolate_E), label=\"extrapolated\")\n", - "plot!(real.(mesh_E), imag.(mesh_E), label=\"contour\")\n", - "xlims!(-0.7,0.7)" - ] } ], "metadata": {