Consistency check with two-body module GEM2B
In this example we check if we can reproduce two-body results using the three-body code. This is a good test for new features of the 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, FewBodyToolkit#.GEM3B1D, FewBodyToolkit.GEM2B
#import FewBodyToolkit:comparison
Input 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)
4
Since 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.000000
This page was generated using Literate.jl.