ChiEFTint
Functions needed to generate nucleon-nucleon (NN) potential from Chiral EFT.
The parameters needed for chiEFTint are specified through optional_parameters.jl
or the optional argument fn_params=[PATH_TO_FILE]
in main API, make_chiEFTint()
.
NuclearToolkit.Calc_Deuteron
— MethodCalc_Deuteron(chiEFTobj::ChiralEFTobject,to;io=stdout)
Function to calculate deuteron binding energy.
NuclearToolkit.Gauss_Legendre
— MethodGauss_Legendre(xmin,xmax,n;eps=3.e-16)
Calculating mesh points x
and weights w
for Gauss-Legendre quadrature. This returns x, w
.
NuclearToolkit.Legendre
— MethodLegendre(n,x)
function to calculate Legendre polynomial $P_n(x)$
NuclearToolkit.QL
— MethodQL(z,J::Int64,ts,ws)
To calculate Legendre functions of second kind, which are needed for pion-exchange contributions, by Gauss-Legendre quadrature.
NuclearToolkit.Rnl_all_ab
— MethodRnl_all_ab(lmax,br,n_mesh,xr_fm)
Returns array for radial functions (prop to generalized Laguerre polynomials) HO w.f. in momentum space. Rnlk(l,n,k)=sqrt(br) * R(n,L,Z) *Z
with Z=br*k
(k is momentum in fm${}^{-1}$)
NuclearToolkit.Vrel
— MethodVrel(chiEFTobj::ChiralEFTobject,to)
To define V in two-particle HO basis.
NuclearToolkit.calc_Vmom!
— Methodcalc_Vmom!(pnrank,V12mom,tdict,xr,LEC,LEC2,l,lp,S,J,pfunc,n_reg,to;is_3nf=false)
calc. NN-potential for momentum mesh points
NuclearToolkit.calc_coulomb
— Methodcalculating coulomb contribution in HO base. Results are overwritten to Vcoulomb
NuclearToolkit.construct_chiEFTobj
— Methodconstruct_chiEFTobj(do2n3ncalib,itnum,optimizer,MPIcomm,io,to;fn_params="optional_parameters.jl")
It returns
chiEFTobj::ChiralEFTobject
parameters and arrays to generate NN (+2n3n) potentials. See also structChiralEFoObject
.OPTobj
(mutable) struct for LECs calibrations. It can beLHSobject
/BOobject
/MCMCobject
/MPIMCMCobject
struct.
NuclearToolkit.def_sps_snt
— Methoddef_sps_snt(emax,target_nlj)
Defining dicts for single particle states. One can truncate sps by specifying target_nlj
, but it is usually empty so this function is usually not used.
NuclearToolkit.freg
— Methodfreg(p,pp,n;Lambchi=500.0)
the regulator function used for NN or 2n3n contribution, Eq.(4.63) in EM's review: $f(p,p') = \exp [ -(p/\Lambda)^{2n} -(p'/\Lambda)^{2n} ]$
NuclearToolkit.genLaguerre
— MethodgenLaguerre(n::Int,alpha,x)
returns generalized Laguaerre polynomials, $L^{\alpha}_n(x)$
NuclearToolkit.get_twobody_channels
— Methodget_twq_2b(emax,kh,kn,kl,kj,maxsps,jab_max)
returns infos
, izs_ab
, nTBME
infos::Vector{Vector{Int64}}
information of two-body channeles: { [$T_z$,parity,J,dim] }izs_ab::Vector{Vecrtor{Int64}}
two-body kets: { [iza,ia,izb,ib] } whereiz*
stuff is isospin (-1 or 1) andi*
stuff is label of sps.
For example, [-1,1,1,1] corresponds to |p0s1/2 n0s1/2>.
nTBME::Int
# of TBMEs
NuclearToolkit.hw_formula
— Methodhw_formula(A,fnum)
empirical formula for harmonis oscillator parameter hw by mass number A fnum=2: for sd-shell, Ref. J. Blomqvist and A. Molinari, Nucl. Phys. A106, 545 (1968).
NuclearToolkit.make_chiEFTint
— Methodmake_chiEFTint(;is_show=false,itnum=1,writesnt=true,nucs=[],optimizer="",MPIcomm=false,corenuc="",ref="nucl",Operators=[],fn_params="optional_parameters.jl",write_vmom=false,do_svd=false)
The interface function in chiEFTint. This generates NN-potential in momentum space and then transforms it in HO basis to give inputs for many-body calculations. The function is exported and can be simply called make_chiEFTint() in your script.
Optional arguments: Note that these are mainly for too specific purposes, so you do not specify these.
is_show::Bool
to showTimerOutputs
itnum::Int
number of iteration for LECs calibration with HFMBPTwritesnt::Bool
, to write out interaction file in snt (KSHELL) format.julia writesnt = false
case can be usefull when you iteratively calculate with different LECs.nucs
target nuclei used for LECs calibration with HFMBPToptimizer::String
method for LECs calibration. "MCMC","LHS","BayesOpt" are availableMPIcomm::Bool
, to carry out LECs sampling with HF-MBPT and affine inveriant MCMCOperators::Vector{String}
specifies operators you need to use in LECs calibrationsfn_params::String
path to file specifying the optional parameterswrite_vmom::Bool
to write out in vmom partial wave channels
NuclearToolkit.make_sp_state
— Methodmake_sp_state(chiEFTparams;io=stdout)
Defining the two-body channels or kets.
NuclearToolkit.prepare_2b_pw_states
— Methodprepare_2b_pw_states(;io=stdout)
preparing two-body partical-wave channels, <Lp,S,J| |L,S,J>. For example, [pnrank,L,Lp,S,J] = [0, 0, 2, 1, 1] corresponds to proton-neutron 3S1-3D1 channel.
NuclearToolkit.read_LECs
— Methodread_LECs(pottype)
read LECs for a specified potential type, em500n3lo
,em500n3lo
,emn500n4lo
.
NuclearToolkit.single_Rnl
— Methodsimply calculate $R_{nl}(p,b) = \sqrt{ \frac{2 n! b^3}{\Gamma(n+l+3/2)} (pb)^l e^{-p^2b^2/2} L^{l+1/2}_{n}(p^2b^2) }$
NuclearToolkit.LO
— MethodLO(chiEFTobj,to)
Calculate Leading Order (LO), Q^0
` contact term.
NuclearToolkit.N3LO
— MethodN3LO(chiEFTobj,to)
Calculate Next-to-next-to-next-to Leading Order (N3LO), $Q^4$ contact term.
NuclearToolkit.N4LO
— MethodN4LO(chiEFTobj,to;n_reg=2)
Calculate Next-to-next-to-next-to-next-to Leading Order (N4LO) contact term.
NuclearToolkit.NLO
— MethodNLO(chiEFTobj,to;n_regulator=2)
Calculate Next to Leading Order (NLO), $Q^2$ contact term. LECs=>C23S1,C23P0,C21P1,C23P1,C21S0,C23SD1,C23DS1,C23P2
The power for exponential regulator n_reg
is 2 (default), For 3P1 channel, n_reg=3
is used as in the R.Machleidt's fortran code. I don't know the reason, but the LECs in EMN potential) may have been determined with n_reg=3
potential.
NuclearToolkit.tpe_ch
— Type9
xnthreads
matrix to store sum of each tpe channal, C/T/S/LS/SigmaL
NuclearToolkit.OPEP
— MethodOPEP(chiEFTobj,to;pigamma=false)
calc. One-pion exchange potential in the momentum-space
Reference: R. Machleidt, Phys. Rev. C 63 024001 (2001).
NuclearToolkit.Vc_term
— MethodVc_term(chi_order,w,tw2,q2,Lq,Aq,nd_mpi,c1,c2,c3,Fpi2,LoopObjects;EMN=false,usingMachleidt=true,ImVerbose=false,calc_TPE_separately=false)
- NNLO: EM NNLO eq.(4.13), EKMN Eq.(C1) + relativistic correction Eq.(D7)
- N3LO:
- f1term $c^2_i$: EM Eq.(D.1), EKMN Eq.(D1)
- f6term $c_i/M_/N$: EM Eq.(D.4)
While Eq.(D7) in EKMN paper are given with the statement "given by [1]" refering the EM review, Eq.(D7) doesn't match neither Eq.(4.13) nor Eq.(4.13)+Eq.(4.21). Since the LECs in EKMN paper are determined through the Eq.(D7) and this correction term gives minor effect, we use Eq.(D7). If usingMachleidt
is set false
, one can restore original expression in EM review.
NuclearToolkit.Vls_term
— MethodVls_term(chi_order,w,tw2,q2,Lq,Aq,nd_mpi,c2,Fpi2;EMN=false)
In EMN interaction, relativistic corrections are counted as N3LO.
NuclearToolkit.Vt_term
— MethodVt_term(chi_order,w,q2,k2,Lq,Aq,nd_mpi,r_d145,Fpi4)
- NLO: EM Eq.(4.10)
- NNLO: EM Eq.(4.15) & Eq.(4.22) =>
it_pi
term - N3LO: EM Eq.(D.11) (
1/M^2_N
` term), Eq.(D.23) (2-loop term)
NuclearToolkit.Wc_term
— MethodWc_term(chi_order,LoopObjects,w,tw2,q2,k2,Lq,Aq,nd_mpi,c4,r_d12,r_d3,r_d5,Fpi2;EMN=false,useMachleidt=true,calc_TPE_separately=false)
EMN Eq.(D8) doesn't match the expression in EM review, Eq.(4.14) nor Eq(4.14)+Eq.(4.22). Since the LECs in EKMN paper are determined through the Eqs.(D8) and these difference gives minor effect, we use EMN eq.(D8).
NuclearToolkit.Ws_term
— MethodWs_term(chi_order,LoopObjects,w,q2,Lq,Aq,nd_mpi,c4,Fpi2;EMN=false,useMachleidt=true,calc_TPE_separately=false)
- NNLO: EM Eq.(4.16) & Eq.(4.24) =>
it_pi
term - N3LO: EM Eq.(D.2) ($c^2_i$ term), Eq.(D.6) (
c_i/M_N
term), Eq.(D.12) (
1/M^2_N`` term), Eq.(D.27) (2-loop term)
NuclearToolkit.calc_LqAq
— Methodcalc_LqAq(w,q,nd_mpi,usingSFR,LamSFR)
To calculate L(q) and A(q) appear in TPE contributions; L(q)=EM Eq.(4.11), A(q)=EM Eq.(D.28). If usingSFR, Lq&Aq are replaced by Eqs.(2.24)&(C3) in EKMN paper.
NuclearToolkit.cib_lsj_opep
— FunctionRef: R. Machleidt, Phys. Rev. C 63, 024001 (2001).
NuclearToolkit.n3lo_ImVc!
— Methodn3lo_ImVc!(muvec,V,mpi,Fpi)
The expression can be found in eq.(D3) of EKMN paper.
NuclearToolkit.n3lo_ImVsVt!
— Methodn3lo_ImVsVt!(Vt,mpi,Fpi,r_d145,mudomain,ts,ws)
The expression can be found in eq.(D5) of EKMN paper and the second term in eq.(D5) is ommited. Note that LECs $\bar{d}_{14}-\bar{d}_{15}$ is given as d145 in NuclearToolkit.jl. Vt
can be used for Vs=-q2*Vt
NuclearToolkit.n3lo_ImWc!
— Methodn3lo_ImWc!(V,mpi,Fpi,r_d12,r_d3,r_d5,r_d145,mudomain,ts,ws)
The expression can be found in eq.(D4) of EKMN paper.
NuclearToolkit.n3lo_ImWsWt!
— Methodn3lo_ImWsWt!(Wt,mpi,Fpi,mudomain,ts,ws)
The expression can be found in eq.(D6) of EKMN paper. Wt
can be used for Ws=-q2*Wt
NuclearToolkit.precalc_2loop_integrals
— Method\[V_{C,S}(q) = -\frac{2q^6}{\pi} \int^{\tilde{\Lambda}}_{nm_\pi} d\mu \frac{\mathrm{Im} V_{C,S}(i\mu)}{\mu^5 (\mu^2+q^2)} \\ V_T(q) = \frac{2q^4}{\pi} \int^{\tilde{\Lambda}}_{nm_\pi} d\mu \]
NuclearToolkit.tpe
— Methodtpe(chiEFTobj,to::TimerOutput)
calc. two-pion exchange terms up to N3LO(EM) or N4LO(EMN)
The power conting schemes for EM/EMN are different; The $1/M_N$ correction terms appear at NNLO in EM and at N4LO in EMN.
References
- EM: R. Machleidt and D.R. Entem Physics Reports 503 (2011) 1–7
- EMKN: D. R. Entem, N. Kaiser, R. Machleidt, and Y. Nosyk, Phys. Rev. C 91, 014002 (2015).
NuclearToolkit.tpe_for_givenJT
— Methodtpe_for_givenJT(chiEFTobj,LoopObjects,Fpi2,tmpLECs,J,pnrank,ts,ws,fff,dwn,nd_mpi,xr,pjs_para,gis_para,opfs_para,f_idx,tVs_para,lsj,tllsj_para,tdict,V12mom,tmpsum,to;calc_TPE_sep=true)
Calculating TPE contribution in a given momentum mesh point.
NuclearToolkit.HObracket_d6j
— MethodHObracket(nl, ll, nr, lr, n1, l1, n2, l2, Lam, d::Float64,dWs,tkey9j,dict9j_HOB,to)
To calc. generalized harmonic oscillator brackets (HOBs), $<<n_l\ell_l,n_r\ell_r:\Lambda|n_1\ell_1,n_2\ell_2:\Lambda>>_d$ from the preallocated 9j dictionary.
Reference:
- [1] B.Buck& A.C.merchant, Nucl.Phys. A600 (1996) 387-402
- [2] G.P.Kamuntavicius et al., Nucl.Phys. A695 (2001) 191-201
NuclearToolkit.TMtrans
— MethodTMtrans(chiEFTobj::ChiralEFTobject,dWS,to;writesnt=true)
Function to carry out Talmi-Mochinsky transformation for NN interaction in HO space and to write out an sinput file.
NuclearToolkit.get_nkey_from_abcdarr
— Methodget_nkey_from_abcdarr(tkey;ofst=1000)
To get integer key from an Int array (with length greater than equal 4)
NuclearToolkit.kinetic_ob
— Methodkinetic_ob(nlj1, nlj2)
calc. kinetic one-body contribution \langle j_1 |T/\habr\omega| j_2 \rangle
NuclearToolkit.kinetic_tb
— Methodkinetic_tb(nljtz1, nljtz2, nljtz3, nljtz4, J, dWS)
calc. kinetic two-body contribution $\langle j_1j_2|| -p_1 p_2/\hbar\omega ||j_3j_4\rangle_J$ using preallocated 6j-symbols.
NuclearToolkit.prep_dWS2n
— MethoddWS2n
struct
NuclearToolkit.prep_dWS3N
— Methodit doesn't work for now
NuclearToolkit.prep_wsyms
— Methodprep_wsyms()
preparing Clebsch-Gordan coefficients for some special cases: cg1s = (1,0,l,0|l',0), cg2s = (2,0,l,0|l',0)
NuclearToolkit.red_nabla_j
— Methodred_nabla_j(nlj1,nlj2,d6j,key6j)
returns $b \langle j || \nabla || j_2\rangle$ Note that $l_1,l_2$ in nlj1
&nlj2
are not doubled.
NuclearToolkit.red_nabla_l
— Methodred_nabla_l(n1,l1,n2,l2)
returns $b \langle n_1,l_1|| \nabla ||n_2,l_2 \rangle$ in $l$-reduced matrix element.
NuclearToolkit.spherical_harmonics
— Methodassociated Legendre Polynomials are calculated with AssociatedLegendrePolynomials.jl
NuclearToolkit.vtrans
— Methodvtrans(chiEFTobj,pnrank,izz,ip,Jtot,iza,ia,izb,ib,izc,ic,izd,id,nljsnt,V12ab,t5v,to)
Function to calculate V in pn-formalism:
\[\langle ab;JTz|V| cd;JTz \rangle = N_{ab} N_{cd} \sum_{\Lambda S \Lambda' S'} \sum_{n\ell N L}\sum_{n'\ell' N' L'} \sum_{J_\mathrm{rel}J'_\mathrm{rel}} [\Lambda][\Lambda'] \hat{S}\hat{S'} \hat{J}_\mathrm{rel}\hat{J}'_\mathrm{rel} \hat{j}_a \hat{j}_b \hat{j}_c \hat{j}_d (-1)^{\ell + S + J_\mathrm{rel} + L} (-1)^{\ell' + S' + J'_\mathrm{rel} + L'} \langle n N [ (\ell L)\Lambda S] J| n_a n_b [ (\ell_a \ell_b)\Lambda (\tfrac{1}{2}\tfrac{1}{2})S ]J \rangle_{d=1} \langle n' N' [ (\ell' L')\Lambda' S'] J| n_c n_d [ (\ell_c \ell_d)\Lambda' (\tfrac{1}{2}\tfrac{1}{2})S' ]J \rangle_{d=1} \left\{ \begin{matrix} \ell_a & \ell_b & \Lambda \\ 1/2 & 1/2 & S \\ j_a & j_b & J \end{matrix} \right\} \left\{ \begin{matrix} \ell_c & \ell_d & \Lambda' \\ 1/2 & 1/2 & S' \\ j_c & j_d & J \end{matrix} \right\} \left\{ \begin{matrix} L & \ell & \Lambda \\ S & J & J_\mathrm{rel} \end{matrix} \right\} \left\{ \begin{matrix} L' & \ell' & \Lambda' \\ S' & J & J'_\mathrm{rel} \end{matrix} \right\} \langle n\ell S J_\mathrm{rel} T|V_\mathrm{NN}|n'\ell' S' J'_\mathrm{rel} T\rangle\]
NuclearToolkit.wigner9j
— Methodwigner9j(j1,j2,j3,j4,j5,j6,j7,j8,j9)
calculate Wigner's 9j symbols, all j should be given as integer (0,1,...) or halfinteger (3/2, 3//2,...)
NuclearToolkit.IsospinDot
— Method<τ2・τ3> = 6 (-1)^(t+t'+T+1/2) *wigner6j(t,t',1,1/2,1/2,1/2) * wigner6j(t,t',1,1/2,1/2,T)
NuclearToolkit.anti_op_isospin
— Methodanti_op_isospin(params,n12,l12,s12,j12,t12,n3,l3,j3,n45,l45,s45,j45,t45,n6,l6,j6,jtot,ttot,to)
Function to calc. matrix element of antisymmetrizer. Detailed derivation can be found in e.g., Eq.(3.119) of Master Thesis by Joachim Langhammer (2010), TUDarmstadt.
NuclearToolkit.nonlocal_regulator_3NF
— MethodEGM => Eq.(19) in E.Epelbaum et al., PRC 66, 064001(2002). Navratil => Eq.(11) in P.Navratil Few Body Syst. (2007) 41:117-140 Lambda in given in MeV
NuclearToolkit.prep_Rnls
— Methodprepare R_nl(r) with 2n12+l12 + 2N + L = e12 + e3 = N3 <= N3max Note that twice of reduced mass is used in this function
NuclearToolkit.gz
— Functionfunction used for proposals in Affine invariant MCMC
NuclearToolkit.prepOPT
— Methodcand:: candidate point given by LatinHypercubeSampling observed:: list of index of cand
which has been observed unobserved:: rest candidate indices history:: array of [logprior,logllh,logpost] for i=1:num_cand
for GP
Ktt,Kttinv,Ktp,L:: matrix needed for GP calculation yt:: mean value of training point, to be mean of initial random point yscale:: mean&std of yt that is used to scale/rescale data acquis:: vector of acquisition function values pKernel:: hypara for GP kernel, first one is tau
and the other ones are correlation lengths adhoc=> tau =1.0, l=1/domain size
NuclearToolkit.sample_AffineInvMCMC
— Functionsample_AffineInvMCMC(numwalkers::Int, x0::Matrix{Float64},nstep::Integer, thinning::Integer,a::Float64=2.)
Function to carry out a parameter sampling with Affince invariant MCMC method.
Reference: Goodman & Weare, "Ensemble samplers with affine invariance", Communications in Applied Mathematics and Computational Science, DOI: 10.2140/camcos.2010.5.65, 2010.
NuclearToolkit.RKstep
— MethodRKstep(T,Ho,eta,R,faceta,fRK,Ht)
wrapper function to calc. a Runge-Kutta (RK) step
NuclearToolkit.SRG
— MethodSRG(xr,wr,V12mom,dict_pwch,to)
Similarity Renormalization Group (SRG) transformation of NN interaction in CM-rel momentum space.
NuclearToolkit.commutator
— Methodcommutator(A,B,R,fac)
wrapper function to overwrite R
by fac*(AB-BA)
NuclearToolkit.srg_RK4
— Methodsrg_RK4(Ho,T,Ht,Hs,eta,R,sSRG,face,ds,numit,to; r_err=1.e-8,a_err=1.e-8,tol=1.e-6)
to carry out SRG transformation with RK4
NuclearToolkit.prep_QWs
— Methodprep_QWs(chiEFTobj,xr,ts,ws)
returns struct QLs
, second kind Legendre functions, Eqs.(B1)-(B5) in [Kohno2013]. Note that QLs.QLdict is also used in OPEP to avoid redundant calculations. Reference: [Kohno2013] M.Kohno Phys. Rev. C 88, 064005(2013)
NuclearToolkit.prep_integrals_for2n3n
— Methodprep_integrals_for2n3n(chiEFTobj,xr,ts,ws,to)
preparing integrals and Wigner symbols for density-dependent 3NFs:
Fis::Fis_2n3n
vectors {F0s,F1s,F2s,F3s}, Eqs.(A13)-(A16) in [Kohno2013].QWs::
second kind Legendre functions, Eqs.(B1)-(B5) in [Kohno2013].wsyms::
Wingner symbols with specificj
used for both 2n and 2n3n.
Reference: [Kohno2013] M.Kohno Phys. Rev. C 88, 064005(2013)
NuclearToolkit.dict_em500n3lo
— Methoddict_em500n3lo
returns vector&dict. for EM500N3LO: Entem-Machleidt interaction upto N3LO with 500 MeV cutoff
NuclearToolkit.dict_emn500n3lo
— Methoddict_emn500n3lo
returns vector&dict. for EMN500N3LO: Entem-Machleidt-Nosyk interaction upto N3LO with 500 MeV cutoff
NuclearToolkit.dict_emn500n4lo
— Methoddict_emn500n4lo()
returns vector&dict. for EMN500N4LO: Entem-Machleidt-Nosyk interaction upto N4LO with 500 MeV cutoff
NuclearToolkit.prep_valsidxs_dLECs!
— Methodprep_valsidxs_dLECs!(vals,idxs,dLECs)
overwrites vals
and idxs
, which are to be used in e.g., MCMC algorithms, by dict for LECs dLECs
.