Coverage for backend/django/PinchAnalysis/models/OutputModels.py: 91%
109 statements
« prev ^ index » next coverage.py v7.10.7, created at 2026-07-22 05:22 +0000
« prev ^ index » next coverage.py v7.10.7, created at 2026-07-22 05:22 +0000
1from django.db import models
2from django.contrib.postgres.fields import ArrayField
3from core.auxiliary.enums import pinchEnums
4from core.managers import AccessControlManager, AllFlowsheetStatesManager
6class PinchOutputs(models.Model):
7 flowsheet_state = models.ForeignKey("core_auxiliary.FlowsheetState", on_delete=models.CASCADE, related_name="Outputs")
8 project_owner = models.OneToOneField("PinchAnalysis.StreamDataProject", on_delete=models.CASCADE, related_name="Outputs", null=True)
9 name = models.CharField(max_length=64, blank=True, null=True)
11 created_at = models.DateTimeField(auto_now_add=True)
12 objects = AccessControlManager()
13 all_states = AllFlowsheetStatesManager()
17class PinchTemp(models.Model):
18 flowsheet_state = models.ForeignKey("core_auxiliary.FlowsheetState", on_delete=models.CASCADE, related_name="PinchTemps")
19 cold_temp = models.FloatField(blank=True, null=True)
20 hot_temp = models.FloatField(blank=True, null=True)
22 created_at = models.DateTimeField(auto_now_add=True)
23 objects = AccessControlManager()
24 all_states = AllFlowsheetStatesManager()
28class TargetSummary(models.Model):
29 flowsheet_state = models.ForeignKey("core_auxiliary.FlowsheetState", on_delete=models.CASCADE, related_name="TargetSummaries")
30 output_owner = models.ForeignKey(PinchOutputs, on_delete=models.CASCADE, related_name="targets", null=True)
31 name = models.CharField(max_length=128)
32 row_type = models.CharField(choices=pinchEnums.SummaryRowType.choices , default=pinchEnums.SummaryRowType.CONTENT)
33 temp_pinch = models.ForeignKey(PinchTemp, on_delete=models.CASCADE, related_name="summary_owner", null=True, blank=True)
34 Qh = models.FloatField(default=0.0, blank=True, null=True)
35 Qc = models.FloatField(default=0.0, blank=True, null=True)
36 Qr = models.FloatField(default=0.0, blank=True, null=True)
37 degree_of_integration = models.FloatField(default=100.0, blank=True, null=True)
38 utility_cost = models.FloatField(default=0.0, blank=True, null=True)
39 work_target = models.FloatField(default=0.0, blank=True, null=True)
40 turbine_efficiency_target = models.FloatField(default=0.0, blank=True, null=True)
41 area = models.FloatField(default=0.0, blank=True, null=True)
42 num_units = models.FloatField(default=0.0, blank=True, null=True)
43 capital_cost = models.FloatField(default=0.0, blank=True, null=True)
44 total_cost = models.FloatField(default=0.0, blank=True, null=True)
45 exergy_sources = models.FloatField(default=0.0, blank=True, null=True)
46 exergy_sinks = models.FloatField(default=0.0, blank=True, null=True)
47 ETE = models.FloatField(default=0.0, blank=True, null=True)
48 exergy_req_min = models.FloatField(default=0.0, blank=True, null=True)
49 exergy_des_min = models.FloatField(default=0.0, blank=True, null=True)
51 created_at = models.DateTimeField(auto_now_add=True)
52 objects = AccessControlManager()
53 all_states = AllFlowsheetStatesManager()
56 class Meta:
57 ordering = ['created_at']
59 @classmethod
60 def create(cls, **kwargs):
61 defaults = {
62 'output_owner': kwargs.get('output_owner', None),
63 'name': kwargs.get('name', None),
64 'Qh': kwargs.get('Qh', 0.0),
65 'Qc': kwargs.get('Qc', 0.0),
66 'Qr': kwargs.get('Qr', 0.0),
67 'degree_of_integration': kwargs.get('degree_of_integration', 100.0),
68 'utility_cost': kwargs.get('utility_cost', 0.0),
69 'work_target': kwargs.get('work_target', 0.0),
70 'turbine_efficiency_target': kwargs.get('turbine_efficiency_target', 0.0),
71 'area': kwargs.get('area', 0.0),
72 'num_units': kwargs.get('num_units', 0.0),
73 'capital_cost': kwargs.get('capital_cost', 0.0),
74 'total_cost': kwargs.get('total_cost', 0.0),
75 }
77 defaults.update(**kwargs)
78 instance = cls.objects.create(**defaults)
79 instance.save()
80 return instance
82class HeatSupplierUtilitySummary(models.Model):
83 flowsheet_state = models.ForeignKey("core_auxiliary.FlowsheetState", on_delete=models.CASCADE, related_name="HeatSupplierUtilities")
84 name = models.CharField(max_length=128)
85 summary_owner = models.ForeignKey(TargetSummary, on_delete=models.CASCADE, related_name="hot_utilities", null=True, blank=True)
86 heat_flow = models.FloatField(default=None, null=True)
88 created_at = models.DateTimeField(auto_now_add=True)
89 objects = AccessControlManager()
90 all_states = AllFlowsheetStatesManager()
95class HeatReceiverUtilitySummary(models.Model):
96 flowsheet_state = models.ForeignKey("core_auxiliary.FlowsheetState", on_delete=models.CASCADE, related_name="HeatReceiverUtilities")
97 name = models.CharField(max_length=128)
98 summary_owner = models.ForeignKey(TargetSummary, on_delete=models.CASCADE, related_name="cold_utilities", null=True, blank=True)
99 heat_flow = models.FloatField(default=None, null=True)
101 created_at = models.DateTimeField(auto_now_add=True)
102 objects = AccessControlManager()
103 all_states = AllFlowsheetStatesManager()
107class PinchGraphSet(models.Model):
108 flowsheet_state = models.ForeignKey("core_auxiliary.FlowsheetState", on_delete=models.CASCADE, related_name="PinchGraphSets")
109 name = models.CharField(max_length=64)
110 output_owner = models.ForeignKey(PinchOutputs, on_delete=models.CASCADE, related_name="graph_sets", null=True)
112 created_at = models.DateTimeField(auto_now_add=True)
113 objects = AccessControlManager()
114 all_states = AllFlowsheetStatesManager()
117 class Meta:
118 ordering = ['created_at']
120 @classmethod
121 def create(cls, **kwargs):
122 defaults = {
123 'output_owner': kwargs.get('output_owner', None),
124 'name': kwargs.get('name', None),
125 }
127 defaults.update(**kwargs)
128 instance = cls.objects.create(**defaults)
129 instance.save()
130 return instance
132class PinchGraph(models.Model):
133 flowsheet_state = models.ForeignKey("core_auxiliary.FlowsheetState", on_delete=models.CASCADE, related_name="PinchGraphs")
134 name = models.CharField(max_length=64, null=True, blank=True)
135 graph_set = models.ForeignKey(PinchGraphSet, on_delete=models.CASCADE, related_name="graphs", null=True)
136 type = models.CharField(choices=pinchEnums.GraphType.choices , default=pinchEnums.GraphType.CC)
138 created_at = models.DateTimeField(auto_now_add=True)
139 objects = AccessControlManager()
140 all_states = AllFlowsheetStatesManager()
144# Can be considered a "line segment" for CC's
145class PinchCurve(models.Model):
146 flowsheet_state = models.ForeignKey("core_auxiliary.FlowsheetState", on_delete=models.CASCADE, related_name="PinchCurves")
147 graph = models.ForeignKey(PinchGraph, on_delete=models.CASCADE, related_name="segments", null=True)
148 title = models.CharField(max_length=64)
149 colour = models.IntegerField(choices=pinchEnums.LineColour.choices , default=pinchEnums.LineColour.Hot)
150 arrow = models.CharField(choices=pinchEnums.ArrowHead.choices , default=pinchEnums.ArrowHead.NO_ARROW)
152 created_at = models.DateTimeField(auto_now_add=True)
153 objects = AccessControlManager()
154 all_states = AllFlowsheetStatesManager()
158class GraphDataPoint(models.Model):
159 flowsheet_state = models.ForeignKey("core_auxiliary.FlowsheetState", on_delete=models.CASCADE, related_name="GraphDataPoints")
160 curve = models.ForeignKey(PinchCurve, on_delete=models.CASCADE, related_name="data_points")
161 x = models.FloatField(null=True)
162 y = models.FloatField(null=True)
164 created_at = models.DateTimeField(auto_now_add=True)
165 objects = AccessControlManager()
166 all_states = AllFlowsheetStatesManager()