Skip to content

Commit fadb976

Browse files
Add carrier concentrations calculation algorithm (#4791)
* added carrier concentrations algorithm * Add more references Added more references to the carrier concentrations file * Update electronics/carrier_concentration.py Co-authored-by: John Law <[email protected]> * Update electronics/carrier_concentration.py Co-authored-by: John Law <[email protected]> Co-authored-by: John Law <[email protected]>
1 parent 729b4d8 commit fadb976

File tree

1 file changed

+75
-0
lines changed

1 file changed

+75
-0
lines changed

electronics/carrier_concentration.py

+75
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
# https://en.wikipedia.org/wiki/Charge_carrier_density
2+
# https://www.pveducation.org/pvcdrom/pn-junctions/equilibrium-carrier-concentration
3+
# http://www.ece.utep.edu/courses/ee3329/ee3329/Studyguide/ToC/Fundamentals/Carriers/concentrations.html
4+
5+
from __future__ import annotations
6+
7+
8+
def carrier_concentration(
9+
electron_conc: float,
10+
hole_conc: float,
11+
intrinsic_conc: float,
12+
) -> tuple:
13+
"""
14+
This function can calculate any one of the three -
15+
1. Electron Concentration
16+
2, Hole Concentration
17+
3. Intrinsic Concentration
18+
given the other two.
19+
Examples -
20+
>>> carrier_concentration(electron_conc=25, hole_conc=100, intrinsic_conc=0)
21+
('intrinsic_conc', 50.0)
22+
>>> carrier_concentration(electron_conc=0, hole_conc=1600, intrinsic_conc=200)
23+
('electron_conc', 25.0)
24+
>>> carrier_concentration(electron_conc=1000, hole_conc=0, intrinsic_conc=1200)
25+
('hole_conc', 1440.0)
26+
>>> carrier_concentration(electron_conc=1000, hole_conc=400, intrinsic_conc=1200)
27+
Traceback (most recent call last):
28+
File "<stdin>", line 37, in <module>
29+
ValueError: You cannot supply more or less than 2 values
30+
>>> carrier_concentration(electron_conc=-1000, hole_conc=0, intrinsic_conc=1200)
31+
Traceback (most recent call last):
32+
File "<stdin>", line 40, in <module>
33+
ValueError: Electron concentration cannot be negative in a semiconductor
34+
>>> carrier_concentration(electron_conc=0, hole_conc=-400, intrinsic_conc=1200)
35+
Traceback (most recent call last):
36+
File "<stdin>", line 44, in <module>
37+
ValueError: Hole concentration cannot be negative in a semiconductor
38+
>>> carrier_concentration(electron_conc=0, hole_conc=400, intrinsic_conc=-1200)
39+
Traceback (most recent call last):
40+
File "<stdin>", line 48, in <module>
41+
ValueError: Intrinsic concentration cannot be negative in a semiconductor
42+
"""
43+
if (electron_conc, hole_conc, intrinsic_conc).count(0) != 1:
44+
raise ValueError("You cannot supply more or less than 2 values")
45+
elif electron_conc < 0:
46+
raise ValueError("Electron concentration cannot be negative in a semiconductor")
47+
elif hole_conc < 0:
48+
raise ValueError("Hole concentration cannot be negative in a semiconductor")
49+
elif intrinsic_conc < 0:
50+
raise ValueError(
51+
"Intrinsic concentration cannot be negative in a semiconductor"
52+
)
53+
elif electron_conc == 0:
54+
return (
55+
"electron_conc",
56+
intrinsic_conc ** 2 / hole_conc,
57+
)
58+
elif hole_conc == 0:
59+
return (
60+
"hole_conc",
61+
intrinsic_conc ** 2 / electron_conc,
62+
)
63+
elif intrinsic_conc == 0:
64+
return (
65+
"intrinsic_conc",
66+
(electron_conc * hole_conc) ** 0.5,
67+
)
68+
else:
69+
return (-1, -1)
70+
71+
72+
if __name__ == "__main__":
73+
import doctest
74+
75+
doctest.testmod()

0 commit comments

Comments
 (0)