"""
he3xi.py

Characteristic `coherence' lengths for superfluid 3He.
Make sure you have a lot of tables in /data/exp/ref/... if you want this script to work

Lev Levitin, 1 Aug 2011
"""
import he3, numpy, flib

def xi_GL(P,T): "Ginzburg-Landau regime transverse coherence length"; return he3.xi_GL(P,T)
def xi_GL0(P): "Ginzburg-Landau regime transverse coherence length extrapolated to T=0"; return he3.xi0(P)
def xi0(P): "Theorist's favourite T=0 coherence length (\hbar v_F / 2\pi T_c^bulk)"; return he3.xi0(P) * 1.5417

BCS_t,BCS_DA,BCS_DB = flib.loadascii('/data/exp/ref/he3/p-wave_BCS_gap.dat', unpack=True)

Nagai_Dc_s,Nagai_tc_s = flib.loadascii('/data/exp/ref/he3/Nagato_Nagai_AB_transition/nagato_nagai_T_AB_specular.dat', unpack=True)
Nagai_Dc_s /= 1.1264
ii = Nagai_Dc_s <= 20
Nagai_Dc_s = Nagai_Dc_s[ii]
Nagai_tc_s = Nagai_tc_s[ii]

Nagai_Dc_d,Nagai_tc_d = flib.loadascii('/data/exp/ref/he3/Nagato_Nagai_AB_transition/nagato_nagai_T_AB_diffuse.dat', unpack=True)
Nagai_Dc_d /= 1.1264
ii = Nagai_Dc_d <= 20
Nagai_Dc_d = Nagai_Dc_d[ii]
Nagai_tc_d = Nagai_tc_d[ii]

def xi0_invgap(P): return 1.78107 / numpy.pi / (10)**0.5 * he3.__hbar__ * he3.v_Fermi(P) / (he3.__k_B__ * 1e-3*he3.Tc(P)) * 1e9
def xi_invgap(P,T): return xi0_invgap(P) / numpy.interp(T, BCS_t, (BCS_DB / max(BCS_DB))**2, left=numpy.nan, right=numpy.nan)**0.5
def xi0_to_P(xi0): return numpy.interp(xi0, he3.xi0(he3.__Pc__)[-1::-1]*1.7367, he3.__Pc__[-1::-1], left=numpy.nan, right=numpy.nan)

def xi_AB_spec(P,T): return xi0_invgap(P) * numpy.interp(T, Nagai_tc_s, Nagai_Dc_s**-2, left=numpy.nan, right=numpy.nan)**-0.5 / 7.69
def xi_AB_diff(P,T): return xi0_invgap(P) * numpy.interp(T, Nagai_tc_d, Nagai_Dc_d**-2, left=numpy.nan, right=numpy.nan)**-0.5 / 7.21
