From 3cda66441e12c04a7305fe96bb5ca89b77ff93d5 Mon Sep 17 00:00:00 2001 From: Deepak Date: Tue, 24 Nov 2020 13:57:37 -0600 Subject: [PATCH] adds full functionality test for find_n_gap --- pysuperconductor/os_gap_calc.py | 22 ++++++++++++++++++++++ tests/test_os_gap_calc.py | 9 +++++++++ 2 files changed, 31 insertions(+) diff --git a/pysuperconductor/os_gap_calc.py b/pysuperconductor/os_gap_calc.py index 7f46417..668a0c8 100644 --- a/pysuperconductor/os_gap_calc.py +++ b/pysuperconductor/os_gap_calc.py @@ -1,6 +1,9 @@ import numpy # type: ignore import scipy.integrate as integrate # type: ignore import scipy.optimize # type: ignore +import logging + +from typing import Tuple def energy(freq: float, delta: float) -> float: @@ -68,3 +71,22 @@ def n_integral(temp: float, delta: float, mu_star: float) -> float: lower = integrate.quad(integrand, 0, intermediate)[0] upper = integrate.quad(integrand, intermediate, numpy.inf)[0] return lower + upper + + +def find_gap_for_n( + temp: float, + n_bare: float, + debye_frequency: float, + nv: float +) -> Tuple[float, float]: + n = n_bare * find_gap(0, 0, debye_frequency, nv) + nv_inv = 1 / nv + sol = scipy.optimize.root( + lambda x: [ + gap_integral(temp, x[0], x[1], debye_frequency) - nv_inv, + n_integral(temp, x[0], x[1]) - n + ], + x0=[debye_frequency / (numpy.sinh(nv_inv)), 0] + ) + logging.debug(sol) + return sol.x diff --git a/tests/test_os_gap_calc.py b/tests/test_os_gap_calc.py index 2e6935f..57e168e 100644 --- a/tests/test_os_gap_calc.py +++ b/tests/test_os_gap_calc.py @@ -67,3 +67,12 @@ def test_n_integral(): verbose=True ) assert not record + + +def test_find_n_gap(): + actual = pysuperconductor.os_gap_calc.find_gap_for_n(.3, .1, 100, .2) + numpy.testing.assert_almost_equal( + actual[0], 1.0296692197710933, + decimal=7, err_msg="did not find correct delta", + verbose=True + )