Coverage for backend/core/auxiliary/models/Scenario.py: 100%
41 statements
« prev ^ index » next coverage.py v7.10.7, created at 2025-11-06 23:27 +0000
« prev ^ index » next coverage.py v7.10.7, created at 2025-11-06 23:27 +0000
1from django.db import models
2from .PropertyInfo import PropertyInfo
3from .PropertyValue import PropertyValue
4from flowsheetInternals.unitops.models.SimulationObject import SimulationObject
6from core.managers import AccessControlManager
8class ScenarioTabTypeEnum(models.TextChoices):
10 SteadyState = "steady state"
11 MultiSteadyState = "mss"
12 Dynamic = "dynamic"
14class SolverOptionEnum(models.TextChoices):
15 Ipopt= "ipopt"
16 Ipopt_v2 = "ipopt_v2"
17 Bomin = "bonmin"
18 Conopt = "conopt"
22class Scenario(models.Model):
23 """
24 Stores all relevant information about an optimization
25 """
26 flowsheet = models.ForeignKey("Flowsheet", on_delete=models.CASCADE, related_name="Optimizations")
27 # owner of the optimization
28 simulationObject = models.ForeignKey(SimulationObject, on_delete=models.CASCADE, related_name="optimizations", null=True)
29 displayName = models.CharField(max_length=64, blank=True, default="Scenario")
30 enable_optimization = models.BooleanField(default=False)
31 enable_dynamics = models.BooleanField(default=False)
32 state_name = models.CharField(max_length=64, blank=True, choices=ScenarioTabTypeEnum.choices, default=ScenarioTabTypeEnum.SteadyState)
33 num_time_steps = models.IntegerField(default=1)
34 simulation_length = models.FloatField(default=1.0)
35 simulation_length_units = models.CharField(max_length=32, blank=True)
36 Uploaded_fileName = models.CharField(max_length=64, blank=True, default="No file Chosen")
37 enable_rating = models.BooleanField(default=False)
38 solver_option = models.CharField(max_length=64, blank=True, choices=SolverOptionEnum.choices, default=SolverOptionEnum.Ipopt)
39 is_LiveData = models.BooleanField(default=False)
40 disable_initialization = models.BooleanField(default=False)
42 # expression to minimize or maximize
43 objective = models.ForeignKey(PropertyInfo, on_delete=models.SET_NULL, null=True)
44 # boolean to find minimum or maximum or the objective
45 minimize = models.BooleanField(default=True)
47 created_at = models.DateTimeField(auto_now_add=True)
49 objects = AccessControlManager()
55class OptimizationDegreesOfFreedom(models.Model):
56 flowsheet = models.ForeignKey("Flowsheet", on_delete=models.CASCADE, related_name="OptimizationDegreesOfFreedoms")
57 scenario = models.ForeignKey(Scenario, on_delete=models.CASCADE, related_name="degreesOfFreedom", null=True)
58 propertyValue = models.ForeignKey(PropertyValue, on_delete=models.CASCADE, null=True)
59 upper_bound = models.FloatField(null=True, blank=True)
60 lower_bound = models.FloatField(null=True, blank=True)
61 created_at = models.DateTimeField(auto_now_add=True)
62 objects = AccessControlManager()