Consistency check with two-body module GEM2B
In this example we show how to reproduce two-body results using the three-body code. This is a good test for new features of a three-body code and whenever there are no other known results to compare to.
For that we use only one interaction between particles 1 and 2, i.e. particle 3 remains a spectator. Moreover, we employ only a single basis function to describe the relative motion of particle 3 relative to the center of mass of particles 1 and 2. This ensures minimal impact on the two-body subsystem and hence reproduces the two-body results.
Setup
using Printf, Plots, FewBodyToolkitInput parameters:
Physical parameters
We use only a single interaction between particles 1 and 2. Particle 3 therefore does not interact and acts as a spectator.
v2(r) = -40 * 1/(1+r^4)
vint_arr=[[],[],[v2]] #[[v23],[v31],[v12]]
mass_arr = [1.0,20.0,20.0]# array of masses of particles (m1,m2,m3)
mur = 1/(1/mass_arr[1]+1/mass_arr[2]) # reduced mass
phys_params2B = make_phys_params2B(;mur,vint_arr=vint_arr[3],dim=1)
phys_params3B = make_phys_params3B1D(;mass_arr,vint_arr)(hbar = 1.0, mass_arr = [1.0, 20.0, 20.0], svals = ["x", "y", "z"], vint_arr = Vector{Any}[[], [], [Main.v2]], parity = 1)Numerical parameters
For the $R$- Jacobi coordinate we use only a single basis function with a very large range. This ensures the contribution from the kinetic energy operator corresponding to this Jacobi-coordinate is negligible.
nmax = 8; r1=1.0;rnmax=10.0;
num_params2B = make_num_params2B(;gem_params=(;nmax, r1, rnmax))
num_params3B = make_num_params3B1D(;gem_params=(;nmax, r1, rnmax, Nmax= 1, R1=10000.0, RNmax=10000.0))(lmin = 0, Lmin = 0, lmax = 0, Lmax = 0, gem_params = (nmax = 8, r1 = 1.0, rnmax = 10.0, Nmax = 1, R1 = 10000.0, RNmax = 10000.0), theta_csm = 0.0, omega_cr = 0.9, kmax_interpol = 1000, threshold = 1.0e-8)Numerical solution
e2 = GEM2B.GEM2B_solve(phys_params2B,num_params2B);
e3 = GEM3B1D.GEM3B1D_solve(phys_params3B,num_params3B);Determine the number of bound states
simax = findlast(e2.<0)4Since particle 3 only acts as a spectator, the three-body system is effectively a two-body system. We can compare the results of the two codes. The three-body code can reproduce the two-body results, as it should:
println("Check if we can recover 2-body results with the 3-body code:")
comparison(e2,e3,simax;s1="2-body",s2="3-body")Check if we can recover 2-body results with the 3-body code:
Index 2-body 3-body Difference
1 -37.454671 -37.454671 0.000000
2 -16.557801 -16.557800 0.000002
3 -2.179895 -2.179892 0.000003
4 -0.035973 -0.035972 0.000000This page was generated using Literate.jl.