TheAlgorithms-Python

Форк
0
/
builtin_voltage.py 
67 строк · 2.4 Кб
1
from math import log
2

3
from scipy.constants import Boltzmann, physical_constants
4

5
T = 300  # TEMPERATURE (unit = K)
6

7

8
def builtin_voltage(
9
    donor_conc: float,  # donor concentration
10
    acceptor_conc: float,  # acceptor concentration
11
    intrinsic_conc: float,  # intrinsic concentration
12
) -> float:
13
    """
14
    This function can calculate the Builtin Voltage of a pn junction diode.
15
    This is calculated from the given three values.
16
    Examples -
17
    >>> builtin_voltage(donor_conc=1e17, acceptor_conc=1e17, intrinsic_conc=1e10)
18
    0.833370010652644
19
    >>> builtin_voltage(donor_conc=0, acceptor_conc=1600, intrinsic_conc=200)
20
    Traceback (most recent call last):
21
      ...
22
    ValueError: Donor concentration should be positive
23
    >>> builtin_voltage(donor_conc=1000, acceptor_conc=0, intrinsic_conc=1200)
24
    Traceback (most recent call last):
25
      ...
26
    ValueError: Acceptor concentration should be positive
27
    >>> builtin_voltage(donor_conc=1000, acceptor_conc=1000, intrinsic_conc=0)
28
    Traceback (most recent call last):
29
      ...
30
    ValueError: Intrinsic concentration should be positive
31
    >>> builtin_voltage(donor_conc=1000, acceptor_conc=3000, intrinsic_conc=2000)
32
    Traceback (most recent call last):
33
      ...
34
    ValueError: Donor concentration should be greater than intrinsic concentration
35
    >>> builtin_voltage(donor_conc=3000, acceptor_conc=1000, intrinsic_conc=2000)
36
    Traceback (most recent call last):
37
      ...
38
    ValueError: Acceptor concentration should be greater than intrinsic concentration
39
    """
40

41
    if donor_conc <= 0:
42
        raise ValueError("Donor concentration should be positive")
43
    elif acceptor_conc <= 0:
44
        raise ValueError("Acceptor concentration should be positive")
45
    elif intrinsic_conc <= 0:
46
        raise ValueError("Intrinsic concentration should be positive")
47
    elif donor_conc <= intrinsic_conc:
48
        raise ValueError(
49
            "Donor concentration should be greater than intrinsic concentration"
50
        )
51
    elif acceptor_conc <= intrinsic_conc:
52
        raise ValueError(
53
            "Acceptor concentration should be greater than intrinsic concentration"
54
        )
55
    else:
56
        return (
57
            Boltzmann
58
            * T
59
            * log((donor_conc * acceptor_conc) / intrinsic_conc**2)
60
            / physical_constants["electron volt"][0]
61
        )
62

63

64
if __name__ == "__main__":
65
    import doctest
66

67
    doctest.testmod()
68

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.