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

1from pyomo.environ import Reference, Var, units 

2from pyomo.dae import DerivativeVar 

3 

4 

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,:]) 

14 

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) 

20 

21 

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] 

29 

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]