Coverage for backend/idaes_service/solver/custom/add_initial_dynamics.py: 31%
14 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 pyomo.environ import Reference, Var, units
2from pyomo.dae import DerivativeVar
5def add_initial_dynamics(unit_model):
6 """
7 Adds the reference variables for initial holdup and initial accumulation.
8 Makes it easier for us to set initial conditions in the frontend, as we can reference them directly.
9 """
10 if unit_model.config.dynamic: 10 ↛ 12line 10 didn't jump to line 12 because the condition on line 10 was never true
11 # add initial holdup reference
12 unit_model.initial_material_holdup = Reference(unit_model.control_volume.material_holdup[0,:,:])
13 unit_model.initial_energy_holdup = Reference(unit_model.control_volume.energy_holdup[0,:])
15 # For some reason we can't do references to the initialaccumulation variables,
16 # Error ( Can only take the derivative of a Varcomponent.)
17 # so we create them as vars
18 unit_model.initial_material_accumulation = Var(unit_model.config.property_package.phase_list, unit_model.config.property_package.component_list, initialize=0,units=units.mol/units.s)
19 unit_model.initial_energy_accumulation = Var(unit_model.config.property_package.phase_list, initialize=0,units=units.kW)
22 @unit_model.Constraint(
23 unit_model.config.property_package.phase_list,
24 unit_model.config.property_package.component_list,
25 doc="Initial material accumulation constraint"
26 )
27 def initial_material_accumulation_constraint(b, p, j):
28 return b.initial_material_accumulation[p, j] == b.control_volume.material_accumulation[0, p, j]
30 @unit_model.Constraint(
31 unit_model.config.property_package.phase_list,
32 doc="Initial energy accumulation constraint"
33 )
34 def initial_energy_accumulation_constraint(b, p):
35 return b.initial_energy_accumulation[p] == b.control_volume.energy_accumulation[0, p]