function thermal_conductivity_copper(c_pt,T,B) result(thermal_conductivity) bind(C)
type(c_ptr), value :: c_pt
real(dp), value :: T,B
real(dp) :: thermal_conductivity
real(dp) :: Tmin,Tmax,TT,BETA,BETAR,W1,W10,w0,p1,p2,p3,p4,p5,p6,p7,alpha,L0,BB
type(copper_cfg_t), pointer :: copper_ptr
call c_f_pointer(c_pt,copper_ptr)
Tmin=1.0_dp; Tmax=3.00e2_dp
TT=T
TT=min(TT,Tmax)
TT=max(TT,Tmin)
BETA = 0.634_dp / copper_ptr%RRR
BETAR = BETA / (0.0003_dp)
p1 = 0.00000001754_dp
p2 = 2.763_dp
p3 = 1102_dp
p4 = -0.165_dp
p5 = 70_dp
p6 = 1.756_dp
p7 = 0.838_dp / BETAR**0.1661_dp
alpha=5e-11_dp ; L0=2.44e-8_dp
W0 = BETA / TT
W0 = W0+alpha*B/TT/L0
W1 = p1 * TT**p2 / (1 + p1 * p3 * TT**(p2 + p4) * Exp(-(p5 / TT)**p6))
W10 = p7 * W0 * W1 / (W0 + W1)
thermal_conductivity = 1.0_dp / (W0 + W1 + W10)
end function thermal_conductivity_copper