-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmeltdown_mitigation.py
75 lines (61 loc) · 2.87 KB
/
meltdown_mitigation.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
"""Functions to prevent a nuclear meltdown."""
#Changes made (Iteration 3): Naming all constants in Capital Letters
CRITICAL_TEMPERATURE = 800
CRITICAL_NEUTRON_NUMBER = 500
CRITCAL_CONDITION = 500000
def is_criticality_balanced(temperature, neutrons_emitted):
"""Verify criticality is balanced.
:param temperature: int or float - temperature value in kelvin.
:param neutrons_emitted: int or float - number of neutrons emitted per second.
:return: bool - is criticality balanced?
A reactor is said to be critical if it satisfies the following conditions:
- The temperature is less than 800 K.
- The number of neutrons emitted per second is greater than 500.
- The product of temperature and neutrons emitted per second is less than 500000.
"""
Critical_product = temperature * neutrons_emitted
if temperature >= CRITICAL_TEMPERATURE or neutrons_emitted <= CRITICAL_NEUTRON_NUMBER:
return False
return Critical_product < CRITCAL_CONDITION
def reactor_efficiency(voltage, current, theoretical_max_power):
"""Assess reactor efficiency zone.
:param voltage: int or float - voltage value.
:param current: int or float - current value.
:param theoretical_max_power: int or float - power that corresponds to a 100% efficiency.
:return: str - one of ('green', 'orange', 'red', or 'black').
Efficiency can be grouped into 4 bands:
1. green -> efficiency of 80% or more,
2. orange -> efficiency of less than 80% but at least 60%,
3. red -> efficiency below 60%, but still 30% or more,
4. black -> less than 30% efficient.
The percentage value is calculated as
(generated power/ theoretical max power)*100
where generated power = voltage * current
"""
generated_power = voltage * current
efficiency = generated_power / theoretical_max_power
if efficiency >= 0.8:
return "green"
if efficiency >= 0.6:
return "orange"
if efficiency >= 0.3:
return "red"
return "black"
def fail_safe(temperature, neutrons_produced_per_second, threshold):
"""Assess and return status code for the reactor.
:param temperature: int or float - value of the temperature in kelvin.
:param neutrons_produced_per_second: int or float - neutron flux.
:param threshold: int or float - threshold for category.
:return: str - one of ('LOW', 'NORMAL', 'DANGER').
1. 'LOW' -> `temperature * neutrons per second` < 90% of `threshold`
2. 'NORMAL' -> `temperature * neutrons per second` +/- 10% of `threshold`
3. 'DANGER' -> `temperature * neutrons per second` is not in the above-stated ranges
"""
low_Threshold = 0.9 * threshold
high_Threshold = 1.1 * threshold
product = temperature * neutrons_produced_per_second
if product < low_Threshold:
return "LOW"
if high_Threshold >= product >= low_Threshold:
return "NORMAL"
return "DANGER"