From 6dc2dd9962dea641396eda6b832cec6b5bfd598e Mon Sep 17 00:00:00 2001 From: Sidhaant Thakker Date: Mon, 27 Sep 2021 14:56:08 +0530 Subject: [PATCH 1/4] added carrier concentrations algorithm --- electronics/carrier_concentration.py | 73 ++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 electronics/carrier_concentration.py diff --git a/electronics/carrier_concentration.py b/electronics/carrier_concentration.py new file mode 100644 index 000000000000..f0eefce27896 --- /dev/null +++ b/electronics/carrier_concentration.py @@ -0,0 +1,73 @@ +# https://en.wikipedia.org/wiki/Charge_carrier_density + +from __future__ import annotations + + +def carrier_concentration( + electron_conc: float, + hole_conc: float, + intrinsic_conc: float, +) -> tuple: + """ + This function can calculate any one of the three - + 1. Electron Concentration + 2, Hole Concentration + 3. Intrinsic Concentration + given the other two. + Examples - + >>> carrier_concentration(electron_conc=25, hole_conc=100, intrinsic_conc=0) + ('intrinsic_conc', 50.0) + >>> carrier_concentration(electron_conc=0, hole_conc=1600, intrinsic_conc=200) + ('electron_conc', 25.0) + >>> carrier_concentration(electron_conc=1000, hole_conc=0, intrinsic_conc=1200) + ('hole_conc', 1440.0) + >>> carrier_concentration(electron_conc=1000, hole_conc=400, intrinsic_conc=1200) + Traceback (most recent call last): + File "", line 37, in + ValueError: You cannot supply more or less than 2 values + >>> carrier_concentration(electron_conc=-1000, hole_conc=0, intrinsic_conc=1200) + Traceback (most recent call last): + File "", line 40, in + ValueError: Electron concentration cannot be negative in a semiconductor + >>> carrier_concentration(electron_conc=0, hole_conc=-400, intrinsic_conc=1200) + Traceback (most recent call last): + File "", line 44, in + ValueError: Hole concentration cannot be negative in a semiconductor + >>> carrier_concentration(electron_conc=0, hole_conc=400, intrinsic_conc=-1200) + Traceback (most recent call last): + File "", line 48, in + ValueError: Intrinsic concentration cannot be negative in a semiconductor + """ + if (electron_conc, hole_conc, intrinsic_conc).count(0) != 1: + raise ValueError("You cannot supply more or less than 2 values") + elif electron_conc < 0: + raise ValueError("Electron concentration cannot be negative in a semiconductor") + elif hole_conc < 0: + raise ValueError("Hole concentration cannot be negative in a semiconductor") + elif intrinsic_conc < 0: + raise ValueError( + "Intrinsic concentration cannot be negative in a semiconductor" + ) + elif electron_conc == 0: + return ( + "electron_conc", + intrinsic_conc * intrinsic_conc / hole_conc, + ) + elif hole_conc == 0: + return ( + "hole_conc", + intrinsic_conc * intrinsic_conc / electron_conc, + ) + elif intrinsic_conc == 0: + return ( + "intrinsic_conc", + (electron_conc * hole_conc) ** 0.5, + ) + else: + return (-1, -1) + + +if __name__ == "__main__": + import doctest + + doctest.testmod() From 8792ff09ec28dd14b55fbeb78b115f82d7799fa2 Mon Sep 17 00:00:00 2001 From: Sidhaant Thakker <59668364+SidhaantThakker@users.noreply.github.com> Date: Thu, 7 Oct 2021 12:28:34 +0530 Subject: [PATCH 2/4] Add more references Added more references to the carrier concentrations file --- electronics/carrier_concentration.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/electronics/carrier_concentration.py b/electronics/carrier_concentration.py index f0eefce27896..b92a81a14b61 100644 --- a/electronics/carrier_concentration.py +++ b/electronics/carrier_concentration.py @@ -1,4 +1,6 @@ # https://en.wikipedia.org/wiki/Charge_carrier_density +# https://www.pveducation.org/pvcdrom/pn-junctions/equilibrium-carrier-concentration +# http://www.ece.utep.edu/courses/ee3329/ee3329/Studyguide/ToC/Fundamentals/Carriers/concentrations.html from __future__ import annotations From f8adfd39b3d40bc0c18f7e59aae8816eca7cafcf Mon Sep 17 00:00:00 2001 From: Sidhaant Thakker <59668364+SidhaantThakker@users.noreply.github.com> Date: Thu, 7 Oct 2021 20:47:53 +0530 Subject: [PATCH 3/4] Update electronics/carrier_concentration.py Co-authored-by: John Law --- electronics/carrier_concentration.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/electronics/carrier_concentration.py b/electronics/carrier_concentration.py index b92a81a14b61..75554fab624e 100644 --- a/electronics/carrier_concentration.py +++ b/electronics/carrier_concentration.py @@ -58,7 +58,7 @@ def carrier_concentration( elif hole_conc == 0: return ( "hole_conc", - intrinsic_conc * intrinsic_conc / electron_conc, + intrinsic_conc ** 2 / electron_conc, ) elif intrinsic_conc == 0: return ( From 60ee1808360040d47c89c291bf4b8d5d4ef2bbcc Mon Sep 17 00:00:00 2001 From: Sidhaant Thakker <59668364+SidhaantThakker@users.noreply.github.com> Date: Fri, 8 Oct 2021 02:32:34 +0530 Subject: [PATCH 4/4] Update electronics/carrier_concentration.py Co-authored-by: John Law --- electronics/carrier_concentration.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/electronics/carrier_concentration.py b/electronics/carrier_concentration.py index 75554fab624e..87bcad8df398 100644 --- a/electronics/carrier_concentration.py +++ b/electronics/carrier_concentration.py @@ -53,7 +53,7 @@ def carrier_concentration( elif electron_conc == 0: return ( "electron_conc", - intrinsic_conc * intrinsic_conc / hole_conc, + intrinsic_conc ** 2 / hole_conc, ) elif hole_conc == 0: return (