!HH> BCS gap + strong coupling corrections for He3-B !> BCS energy gap, $\Delta/k_BT_c$ vs $T/T_c$ !> Newton iteration based on a note by E.Thuneberg and R.Hanninen. !>
Taken from ROTA texture library. !> See: [1] !> [2] function he3_bcsgap(ttc) !F> implicit none include 'he3.fh' integer n, m real*8 ttc,root,y,dy,ynew,g,dg if (ttc.ge.1D0) then he3_bcsgap = 0D0 return end if if (ttc.lt.0D0) then he3_bcsgap = NaN return end if m = 30 dy = 1.0D0 ynew = 1.7638D0*DSQRT(1D0-ttc)/const_2pi do while (DABS(dy) > 1.0D-8) y = ynew root = DSQRT((dble(m)*ttc)**2+y**2) g = DLOG((dble(m)*ttc+root) / (2D0*dble(m))) . - (1D0/dble(m)**2 - dble(m)*(ttc/root)**3)/24D0 dg = y/(root*(dble(m)*ttc+root)) . - dble(m)*ttc**3*y/(8D0*root**5) do n=1,m root=DSQRT((ttc*(dble(n)-0.5D0))**2 + y**2) g = g + 1D0/(dble(n)-0.5D0) - ttc/root dg = dg + ttc*y/root**3 end do dy = g/dg ynew = ynew-dy end do he3_bcsgap = const_2pi*ynew end !> BCS energy gap, $\Delta/k_BT_c$ vs $T/T_c$, Einzel approximation !> D.Einzel JLTP 84 (1991) f.68. !> <0.5% accuracy in the whole temperature range, !> 70 times faster then he3_bcsgap function he3_bcsgap_fast(ttc) !F> implicit none include 'he3.fh' real*8 ttc, dsc, ccn, c1,c2 if (ttc.ge.1D0) then he3_bcsgap_fast = 0D0 return end if if (ttc.lt.0D0) then he3_bcsgap_fast = NaN return end if he3_bcsgap_fast = 1.764D0 * . dtanh( const_pi/1.764D0 * . sqrt(2D0/3D0 * 1.426D0 * (1D0-ttc)/ttc * . (1D0+0.1916D0*(1D0-ttc) + 0.2065D0*(1D0-ttc)**2))) end !> Derivative of BCS energy gap, $d\Delta^2/d(T/Tc)$ vs $T/T_c$ !> Same method as in he3_bcsgap calculation, V.Zavjalov, 2020 function he3_bcsdgap2(ttc) !F> implicit none include 'he3.fh' integer n, m real*8 ttc,gap, root,y,dy,ynew,g1,g2 gap = he3_bcsgap(ttc)/const_2pi if (ttc.eq.1D0) then ! See Einzel-2003, Eq 3 he3_bcsdgap2 = -8D0/7D0/const_z3 * const_pi**2 return end if if (ttc.gt.1D0) then he3_bcsdgap2 = 0D0 return end if if (ttc.lt.0D0) then he3_bcsdgap2 = NaN return end if m = 30 ! From the gap formula: ! dg/dt + dg/dy^2 * dy^2/dt = 0 root = DSQRT((dble(m)*ttc)**2+gap**2) g1 = (dble(m) + dble(m)**2*ttc/root)/(dble(m)*ttc+root) . + dble(m)*ttc**2/root**3/8D0 . - dble(m)*ttc**3/root**5/8D0 * dble(m)**2 * ttc g2 = 0.5D0 /root / (dble(m)*ttc+root) . - 0.5D0 * dble(m)*ttc**3/root**5/8D0 do n=1,m root=DSQRT((ttc*(dble(n)-0.5D0))**2 + gap**2) g1 = g1 - 1D0/root . + ttc/root**3 * ttc*(dble(n)-0.5D0)**2 g2 = g2 + 0.5D0 * ttc/root**3 end do he3_bcsdgap2 = -g1/g2 * const_2pi**2 end !> Heat capacity jump for He3-B, $\Delta C_b/C_n$ vs P [bar], (exp.data, Greywall-1986) !> Greywall-1986, Fig.19 function he3_dcbcn(p) !F> implicit none include 'he3.fh' real*8 p he3_dcbcn = 41.9D0 / he3_vm(p) + 0.322D0 end !> Heat capacity jump for He3-A, $Delta C_a/C_n$ vs P [bar], (exp.data, Greywall-1986) !> Greywall-1986, Fig.19 function he3_dcacn(p) !F> implicit none include 'he3.fh' real*8 p he3_dcacn = 94.2D0 / he3_vm(p) - 1.58D0 end !> Trivial strong-coupling correction (WCP) to the BCS energy gap. $\Delta/k_BT_c$ vs $T/T_c$, P[bar] !> Approximation of Serene,Rainer-1983 corrections (Phys.Rep. 101, 221), table 4. !> Note that derivative of !> the $\Delta^2$ in $T_c$ is not strictly proportional to the heat capacity jump. !> This shows that exact heat capacity calculation requires WCP energy terms, !> not just BCS calculations with modified gap... function he3_trivgap(ttc,p) !F> implicit none include 'he3.fh' real*8 ttc, p real*8 k,x,y,a,b,c,d y = he3_dcbcn(p) - 12D0/7D0/const_z3 x = 1D0-ttc a = -0.08342397526067D0*y**2 . + 0.28724078111814D0*y + 1D0 b = 0.03832526906988D0*y**2 . + 0.38097566888497D0*y c = 0.22188897390807D0*y**2 . + 1.33772124075848D0*y . + 2.16590470748955D0 d = -2.04760212642877D0*y**2 . + 0.59148230270250D0*y . + 2.79334876756980D0 k = a + b*dexp(-x*c-x**2*d) he3_trivgap = dsqrt(k)*he3_bcsgap(ttc) end !> Derivative of the trivial strong-coupling (WCP) gap: d(Delta^2)/d(T/Tc) function he3_trivdgap2(ttc,p) !F> implicit none include 'he3.fh' real*8 ttc, p real*8 k,dk,x,y,a,b,c,d y = he3_dcbcn(p) - 12D0/7D0/const_z3 x = 1D0-ttc a = -0.08342397526067D0*y**2 . + 0.28724078111814D0*y + 1D0 b = 0.03832526906988D0*y**2 . + 0.38097566888497D0*y c = 0.22188897390807D0*y**2 . + 1.33772124075848D0*y . + 2.16590470748955D0 d = -2.04760212642877D0*y**2 . + 0.59148230270250D0*y . + 2.79334876756980D0 k = a + b*dexp(-x*c-x**2*d) dk = b*dexp(-x*c-x**2*d)*(c+2D0*x*d) ! d/dx = -d/dttc ! g^2 = g0^2 * k ! d(g^2) = d(g0^2)*k + g0^2 * dk he3_trivdgap2 = he3_bcsdgap2(ttc) * k . + he3_bcsgap(ttc)**2 * dk end !> Gap corrected to Todoschenko's value 1.99 at T=0,P=Pmelt, delta/Tc vs T/Tc, P[bar] !> Linear interpolation in density between BCS value at zero bar !> and Todoschenko's value 1.99 at melting pressure function he3_todogap(ttc,p) !F> implicit none include 'he3.fh' real*8 ttc, p, gap0, gap1 real*8 r,r0,r1 gap0 = he3_bcsgap(0D0) gap1 = 1.99D0 r0 = 1D0/he3_vm(0D0) r1 = 1D0/he3_vm(34.338D0) r = 1D0/he3_vm(p) he3_todogap = (gap0 + (r-r0)*(gap1-gap0)/(r1-r0)) * . he3_trivgap(ttc,p)/he3_trivgap(0D0,p) end !> Wrapper function which should be used everywhere in the lib, same as he3_trivgap function he3_gap(ttc,p) !F> implicit none include 'he3.fh' real*8 ttc, p !! select one of gap functions !he3_gap = he3_bscgap(ttc) !he3_gap = he3_bcsgap_fast(ttc) he3_gap = he3_trivgap(ttc,p) !he3_gap = he3_todogap(ttc,p) end !> he3_gap expressed in energy units [erg] rather then $T_c$ function he3_egap(ttc,p) !F> implicit none include 'he3.fh' real*8 ttc, p he3_egap = he3_gap(ttc,p)*he3_tc(p)/1D3*const_kb end ! Integrand for Yosida function calculations ! x = tanh(\xi)/2 change is made to get good integrand ! and [0:1] integrating range. d\xi -> 2 dx / (1-x**2) ! See also tests/he3_yosida function he3_yosida_int(x) implicit none include 'he3.fh' real*8 x, he3_yosida_int real*8 ttc, gap common /he3_yosida_int_cb/ ttc, gap, n real*8 xi, ek, n, C C=2D0 xi = datanh(x)*C ek=dsqrt(xi**2 + gap**2) he3_yosida_int = . (xi/ek)**n . / (dcosh(ek/(2D0*ttc)))**2 / 2D0/ttc . * C / (1D0-x**2) end !> Yosida function of order n vs T/Tc, gap !> See D.Einzel JLTP 84 !>
$Y_n = 2\int_0^\infty \left(\frac{\xi}{E}\right)^n\left(-\frac{\partial f^0}{\partial E}\right)$ !>
At T -> 0: !>
$Y_n = 2\Gamma\left(\frac{n+1}{2}\right)\left(\frac{2k_BT}{\Delta}\right)^{(n-1)/2} \exp\left(-\frac{\Delta}{k_BT}\right)$ function he3_yosida(ttc, gap, n) !F> implicit none include 'he3.fh' include 'he3_math.fh' real*8 he3_yosida_int external he3_yosida_int real*8 ttc, gap, n real*8 ttc1, gap1, n1 common /he3_yosida_int_cb/ ttc1, gap1, n1 ttc1=ttc gap1=gap n1=n if (ttc.lt.0D0) then he3_yosida=NaN return endif if (ttc.eq.0D0) then he3_yosida=0D0 return endif if (ttc.gt.1D0) then he3_yosida=1D0 return endif he3_yosida = math_dint(he3_yosida_int, 0D0, 1D0, 100, 0) end ! Integrand for Entropy Yosida function (see Einzel-2003, table 1) ! x = tanh(\xi)/2 change is made to get good integrand ! and [0:1] integrating range. d\xi -> 2 dx / (1-x**2) ! See also tests/he3_yosida function he3_yosida_s_int(x) implicit none include 'he3.fh' real*8 x, he3_yosida_s_int real*8 ttc, gap common /he3_yosida_s_int_cb/ ttc, gap real*8 xi, ek, C C=4D0 xi = datanh(x)*C ek=dsqrt(xi**2 + gap**2) he3_yosida_s_int = . (xi/ttc)**2 . / (dcosh(ek/(2D0*ttc)))**2 / 2D0/ttc . * C / (1D0-x**2) end !> Entropy Yosida function vs T/Tc, gap, see Einzel-2004 function he3_yosida_s(ttc, gap) !F> implicit none include 'he3.fh' include 'he3_math.fh' real*8 he3_yosida_s_int external he3_yosida_s_int real*8 ttc, gap real*8 ttc1, gap1 common /he3_yosida_s_int_cb/ ttc1, gap1 ttc1=ttc gap1=gap if (ttc.lt.0D0) then he3_yosida_s=NaN return endif if (ttc.eq.0D0) then he3_yosida_s=0D0 return endif if (ttc.gt.1D0) then he3_yosida_s=1D0 return endif he3_yosida_s = 3D0/const_pi**2 . * math_dint(he3_yosida_s_int, 0D0, 1D0, 100, 0) end ! Integrand for Heat capacity Yosida function (see Einzel-2003, table 1) ! x = tanh(\xi)/2 change is made to get good integrand ! and [0:1] integrating range. d\xi -> 2 dx / (1-x**2) ! See also tests/he3_yosida function he3_yosida_c_int(x) implicit none include 'he3.fh' real*8 x, he3_yosida_c_int real*8 ttc, gap, dgap2 common /he3_yosida_c_int_cb/ ttc, gap, dgap2 real*8 xi, ek, C C=4D0 xi = datanh(x)*C ek=dsqrt(xi**2 + gap**2) he3_yosida_c_int = . (Ek**2/ttc - 0.5D0*dgap2)/ttc . / (dcosh(ek/(2D0*ttc)))**2 / 2D0/ttc . * C / (1D0-x**2) end !> Heat Capacity Yosida function vs T/Tc, gap, dgap2, see D.Einzel-2003 function he3_yosida_c(ttc, gap, dgap2) !F> implicit none include 'he3.fh' include 'he3_math.fh' real*8 he3_yosida_c_int external he3_yosida_c_int real*8 ttc, gap, dgap2 real*8 ttc1, gap1, dgap21 common /he3_yosida_c_int_cb/ ttc1, gap1, dgap21 ttc1=ttc gap1=gap dgap21=dgap2 if (ttc.lt.0D0) then he3_yosida_c=NaN return endif if (ttc.eq.0D0) then he3_yosida_c=0D0 return endif if (ttc.gt.1D0) then he3_yosida_c=1D0 return endif he3_yosida_c = 3D0/const_pi**2 . * math_dint(he3_yosida_c_int, 0D0, 1D0, 100, 0) end !> $Y_\parallel = 2/5 Y_0 + 3/5 Y_2$, see Eizel-1991 f.90 function he3_yosida_par(ttc, gap) !F> implicit none real*8 ttc,gap include 'he3.fh' he3_yosida_par = ( . 2D0 * he3_yosida(ttc, gap,0D0) . + 3D0 * he3_yosida(ttc, gap,2D0) . )/5D0 end !> $Y_\perp = 4/5 Y_0 + 1/5 Y_2$, see Eizel-1991 f.90 function he3_yosida_perp(ttc, gap) !F> implicit none real*8 ttc,gap include 'he3.fh' he3_yosida_perp = ( . 4D0 * he3_yosida(ttc, gap,0D0) . + 1D0 * he3_yosida(ttc, gap,2D0) . )/5D0 end !H> Z3,Z5,Z7, and lambda functions !> Code from http://ltl.tkk.fi/research/theory/qc/bcsgap.html !> Original nsplit=10 is too small for (z3 - 0.9*z5 + 0.9*z5.^2./z3 - 1.5*z7) !> combination in he3_text_lhv !> Z3 function function he3_z3(ttc,gap) !F> implicit none include 'he3.fh' real*8 ttc,gap real*8 x,xs,tm,sq integer i, nsplit parameter (nsplit=100) if (ttc.lt.0D0) then he3_z3=NaN return endif tm=ttc*dfloat(nsplit) x=gap/const_2pi xs=x**2 sq=dsqrt(tm**2+xs) he3_z3 = 1D0/(sq*(tm+sq)) - tm*ttc**2/( 8D0*sq**5) do i=1,nsplit sq=dsqrt((ttc*(dfloat(i)-0.5D0))**2+xs) he3_z3 = he3_z3 + ttc/sq**3 enddo he3_z3 = he3_z3 / const_2pi**2 * gap*gap end !> Z5 function function he3_z5(ttc,gap) !F> implicit none include 'he3.fh' real*8 ttc,gap real*8 x,xs,tm,sq integer i, nsplit parameter (nsplit=100) if (ttc.lt.0D0) then he3_z5=NaN return endif tm=ttc*dfloat(nsplit) x=gap/const_2pi xs=x**2 sq=dsqrt(tm**2+xs) he3_z5 = (tm+2D0*sq)/(3D0*sq**3*(tm+sq)**2) . - 5D0*tm*ttc**2/(24D0*sq**7) do i=1,nsplit sq=dsqrt((ttc*(dfloat(i)-0.5D0))**2+xs) he3_z5 = he3_z5 + ttc/sq**5 enddo he3_z5 = he3_z5 * xs/const_2pi**2 * gap*gap end !> Z7 function function he3_z7(ttc,gap) !F> implicit none include 'he3.fh' real*8 ttc,gap real*8 x,xs,tm,sq integer i, nsplit parameter (nsplit=100) if (ttc.lt.0D0) then he3_z7=NaN return endif tm=ttc*dfloat(nsplit) x=gap/const_2pi xs=x**2 sq=dsqrt(tm**2+xs) he3_z7 = (11D0*tm**2+9D0*tm*sq+8D0*xs) . / (15D0*sq**5*(tm+sq)**3) . - 7D0*tm*ttc**2/(24D0*sq**9) do i=1,nsplit sq=dsqrt((ttc*(dfloat(i)-0.5D0))**2+xs) he3_z7 = he3_z7 + ttc/sq**7 enddo he3_z7 = he3_z7 * xs**2/const_2pi**2 * gap*gap end !> Lambda function function he3_lambda(ttc,gap) !F> implicit none include 'he3.fh' real*8 ttc,gap real*8 x,xs,tm,sq integer i, nsplit parameter (nsplit=100) if (ttc.lt.0D0) then he3_lambda=NaN return endif tm=ttc*dfloat(nsplit) x=gap/const_2pi xs=x**2 sq=dsqrt(tm**2+xs) he3_lambda = 1D0 - tm/(x+sq) - . tm*ttc**2*x*(x+2D0*sq)/(24D0*sq**3*(x+sq)**2) do i=1,nsplit sq=dsqrt((ttc*(dfloat(i)-0.5D0))**2+xs) he3_lambda = he3_lambda + ttc*x/(sq*(sq+x)) enddo end !H> B-phase normal component density, susceptibility, and heat capacity !> B-phase Normal component density \rho_n^B/\rho_0 !> VW book f.3.92 function he3_rho_nb(ttc, p) !F> implicit none real*8 ttc,p,gap,f1s,Y0 include 'he3.fh' f1s = he3_f1s(p) gap = he3_gap(ttc,p) Y0 = he3_yosida(ttc, gap, 0D0) he3_rho_nb = (3D0+f1s)*Y0/(3D0+f1s*Y0) end !> He3-B susceptibility chi_b/chi_0 !> see VW book ch.10 p.449, ch2 p.90; !> see Wheatley-75 f 3.7; !> There is also additional term to 3*chi0: + 2/5 F2a (1-Y0)^2 function he3_chi_b(ttc, p) !F> implicit none include 'he3.fh' real*8 ttc,p,gap,f0a,Y0 f0a = he3_f0a(p) gap = he3_gap(ttc,p) Y0 = he3_yosida(ttc, gap, 0D0) he3_chi_b = . (1D0 + f0a) * (2D0+Y0) / . (3D0 + f0a * (2D0+Y0)) end !> He3-B Cooper pair susceptibility ratio chi_bp/chi_b !> see Leggett-Takagi 1975, f.12 function he3_chi_bp(ttc, p) !F> implicit none include 'he3.fh' real*8 ttc,p,gap,Y0,Y2 gap = he3_gap(ttc,p) Y0 = he3_yosida(ttc, gap, 0D0) Y2 = he3_yosida(ttc, gap, 2D0) he3_chi_bp = . 2D0*(1D0 - Y2) / (2D0+Y0) end !> He3-B heat capacity (C/R) function he3_c_b(ttc,P) !F> implicit none include 'he3.fh' real*8 ttc,P real*8 gap, dgap2 gap = he3_trivgap(ttc, P) dgap2 = he3_trivdgap2(ttc, P) he3_c_b = he3_gammaf(P) . * ttc*he3_tc(P)*1D-3 ! T,K . * he3_yosida_c(ttc,gap,dgap2) end !>

Some gap-related functions on the plot: !>