- Notifications
You must be signed in to change notification settings - Fork 46.7k
/
Copy pathcarrier_concentration.py
75 lines (69 loc) · 2.69 KB
/
carrier_concentration.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# 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__ importannotations
defcarrier_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):
...
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):
...
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):
...
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):
...
ValueError: Intrinsic concentration cannot be negative in a semiconductor
"""
if (electron_conc, hole_conc, intrinsic_conc).count(0) !=1:
raiseValueError("You cannot supply more or less than 2 values")
elifelectron_conc<0:
raiseValueError("Electron concentration cannot be negative in a semiconductor")
elifhole_conc<0:
raiseValueError("Hole concentration cannot be negative in a semiconductor")
elifintrinsic_conc<0:
raiseValueError(
"Intrinsic concentration cannot be negative in a semiconductor"
)
elifelectron_conc==0:
return (
"electron_conc",
intrinsic_conc**2/hole_conc,
)
elifhole_conc==0:
return (
"hole_conc",
intrinsic_conc**2/electron_conc,
)
elifintrinsic_conc==0:
return (
"intrinsic_conc",
(electron_conc*hole_conc) **0.5,
)
else:
return (-1, -1)
if__name__=="__main__":
importdoctest
doctest.testmod()