Opened 5 years ago
Closed 5 years ago
#6190 closed defect (fixed)
Issue with homotopy and Pantelides during initialization in Buildings
| Reported by: | Francesco Casella | Owned by: | Karim Adbdelhak |
|---|---|---|---|
| Priority: | critical | Milestone: | 1.18.0 |
| Component: | Backend | Version: | |
| Keywords: | Cc: | Andreas Heuermann |
Description (last modified by )
Please check Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.CoolingCoilHumidifyingHeating_ClosedLoop. The backend fails with
[3] 20:24:23 Translation Notification
The given system is mixed-determined. [index = 1]
[4] 20:24:23 Translation Error
Internal error IndexReduction.pantelidesIndexReduction failed! System is structurally singular and cannot be handled because the number of unassigned equations is larger than the number of states. Use -d=bltdump to get more information.
[5] 20:24:23 Symbolic Error
Model is structurally singular, error found sorting equations
390: ahu.cooCoi.ele[2].preDro2.dp = if {false, false, false, true} then 0.0 else 0.0
129: ahu.cooCoi.ele[2].preDro2.dp = ahu.cooCoi.ele[3].vol2.p - ahu.cooCoi.ele[2].vol2.p
571: ahu.cooCoi.ele[2].vol2.dynBal.mXi[1] = $START.ahu.cooCoi.ele[2].vol2.dynBal.mXi[1]
404: ahu.cooCoi.ele[2].vol2.dynBal.m = 1.184307920059215e-05 * ahu.cooCoi.ele[2].vol2.dynBal.fluidVolume * ahu.cooCoi.ele[2].vol2.p
403: ahu.cooCoi.ele[2].vol2.dynBal.mXi[1] = ahu.cooCoi.ele[2].vol2.dynBal.m * ahu.cooCoi.ele[2].vol2.dynBal.medium.Xi[1]
15: ahu.cooCoi.ele[2].vol2.dynBal.medium.Xi[1] = 0.01
570: ahu.cooCoi.ele[3].vol2.dynBal.mXi[1] = $START.ahu.cooCoi.ele[3].vol2.dynBal.mXi[1]
22: ahu.cooCoi.ele[3].vol2.dynBal.medium.Xi[1] = 0.01
354: ahu.cooCoi.ele[3].vol2.dynBal.mXi[1] = ahu.cooCoi.ele[3].vol2.dynBal.m * ahu.cooCoi.ele[3].vol2.dynBal.medium.Xi[1]
341: ahu.cooCoi.ele[3].preDro2.dp = if {false, false, false, true} then 0.0 else 0.0
355: ahu.cooCoi.ele[3].vol2.dynBal.m = 1.184307920059215e-05 * ahu.cooCoi.ele[3].vol2.dynBal.fluidVolume * ahu.cooCoi.ele[3].vol2.p
120: ahu.cooCoi.ele[3].preDro2.dp = ahu.cooCoi.ele[4].vol2.p - ahu.cooCoi.ele[3].vol2.p
307: ahu.cooCoi.ele[4].vol2.dynBal.m = 1.184307920059215e-05 * ahu.cooCoi.ele[4].vol2.dynBal.fluidVolume * ahu.cooCoi.ele[4].vol2.p
29: ahu.cooCoi.ele[4].vol2.dynBal.medium.Xi[1] = 0.01
306: ahu.cooCoi.ele[4].vol2.dynBal.mXi[1] = ahu.cooCoi.ele[4].vol2.dynBal.m * ahu.cooCoi.ele[4].vol2.dynBal.medium.Xi[1]
7: ahu.cooCoi.ele[4].vol2.dynBal.mXi[1] = $START.ahu.cooCoi.ele[4].vol2.dynBal.mXi[1]
for variables
362: ahu.cooCoi.ele[2].preDro2.dp:VARIABLE(start = 0.0 unit = "Pa" nominal = if 0.0 > 1e-15 then 0.0 else 1.0 protected = true ) "Pressure difference between port_a and port_b"Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.CoolingCoilHumidifyingHeating_ClosedLoop, Buildings.Applications.DataCenters.ChillerCooled.Equipment.CoolingCoilHumidifyingHeating, Buildings.Fluid.HeatExchangers.WetCoilCounterFlow, ahu.cooCoi.HexElement, Buildings.Fluid.FixedResistances.PressureDrop type: Real [4]
386: ahu.cooCoi.ele[2].vol2.p:VARIABLE(min = max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, 0.0))))))))))) max = min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, 100000000.0)))))))))) start = 101325.0 unit = "Pa" nominal = 100000.0 protected = true final = true ) "Pressure of the fluid"Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.CoolingCoilHumidifyingHeating_ClosedLoop, Buildings.Applications.DataCenters.ChillerCooled.Equipment.CoolingCoilHumidifyingHeating, Buildings.Fluid.HeatExchangers.WetCoilCounterFlow, ahu.cooCoi.HexElement, Buildings.Fluid.MixingVolumes.BaseClasses.MixingVolumeHeatMoisturePort type: Real [4]
372: ahu.cooCoi.ele[2].vol2.dynBal.mXi[1]:VARIABLE(min = max(0.0, 0.0) start = ahu.cooCoi.ele[2].vol2.dynBal.fluidVolume * 1.2 * 0.01 unit = "kg" protected = true final = true ) "Masses of independent components in the fluid"Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.CoolingCoilHumidifyingHeating_ClosedLoop, Buildings.Applications.DataCenters.ChillerCooled.Equipment.CoolingCoilHumidifyingHeating, Buildings.Fluid.HeatExchangers.WetCoilCounterFlow, ahu.cooCoi.HexElement, Buildings.Fluid.MixingVolumes.BaseClasses.MixingVolumeHeatMoisturePort, Buildings.Fluid.Interfaces.ConservationEquation type: Real [4,1]
374: ahu.cooCoi.ele[2].vol2.dynBal.m:VARIABLE(min = max(0.0, 0.0) start = ahu.cooCoi.ele[2].vol2.V * 1.2 unit = "kg" stateSelect=StateSelect.prefer protected = true final = true ) "Mass of fluid"Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.CoolingCoilHumidifyingHeating_ClosedLoop, Buildings.Applications.DataCenters.ChillerCooled.Equipment.CoolingCoilHumidifyingHeating, Buildings.Fluid.HeatExchangers.WetCoilCounterFlow, ahu.cooCoi.HexElement, Buildings.Fluid.MixingVolumes.BaseClasses.MixingVolumeHeatMoisturePort, Buildings.Fluid.Interfaces.ConservationEquation type: Real [4]
385: ahu.cooCoi.ele[2].vol2.dynBal.medium.Xi[1]:VARIABLE(flow=false min = max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, 0.0))))))))))))))) max = min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, 1.0))))))))))))))) start = 0.01 unit = "1" nominal = 0.1 protected = true ) "Structurally independent mass fractions"Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.CoolingCoilHumidifyingHeating_ClosedLoop, Buildings.Applications.DataCenters.ChillerCooled.Equipment.CoolingCoilHumidifyingHeating, Buildings.Fluid.HeatExchangers.WetCoilCounterFlow, ahu.cooCoi.HexElement, Buildings.Fluid.MixingVolumes.BaseClasses.MixingVolumeHeatMoisturePort, Buildings.Fluid.Interfaces.ConservationEquation, ahu.cooCoi.ele.vol2.dynBal.Medium.BaseProperties type: Real [4,1]
304: ahu.cooCoi.ele[3].vol2.dynBal.mXi[1]:VARIABLE(min = max(0.0, 0.0) start = ahu.cooCoi.ele[3].vol2.dynBal.fluidVolume * 1.2 * 0.01 unit = "kg" protected = true final = true ) "Masses of independent components in the fluid"Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.CoolingCoilHumidifyingHeating_ClosedLoop, Buildings.Applications.DataCenters.ChillerCooled.Equipment.CoolingCoilHumidifyingHeating, Buildings.Fluid.HeatExchangers.WetCoilCounterFlow, ahu.cooCoi.HexElement, Buildings.Fluid.MixingVolumes.BaseClasses.MixingVolumeHeatMoisturePort, Buildings.Fluid.Interfaces.ConservationEquation type: Real [4,1]
317: ahu.cooCoi.ele[3].vol2.dynBal.medium.Xi[1]:VARIABLE(flow=false min = max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, 0.0))))))))))))))) max = min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, 1.0))))))))))))))) start = 0.01 unit = "1" nominal = 0.1 protected = true ) "Structurally independent mass fractions"Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.CoolingCoilHumidifyingHeating_ClosedLoop, Buildings.Applications.DataCenters.ChillerCooled.Equipment.CoolingCoilHumidifyingHeating, Buildings.Fluid.HeatExchangers.WetCoilCounterFlow, ahu.cooCoi.HexElement, Buildings.Fluid.MixingVolumes.BaseClasses.MixingVolumeHeatMoisturePort, Buildings.Fluid.Interfaces.ConservationEquation, ahu.cooCoi.ele.vol2.dynBal.Medium.BaseProperties type: Real [4,1]
306: ahu.cooCoi.ele[3].vol2.dynBal.m:VARIABLE(min = max(0.0, 0.0) start = ahu.cooCoi.ele[3].vol2.V * 1.2 unit = "kg" stateSelect=StateSelect.prefer protected = true final = true ) "Mass of fluid"Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.CoolingCoilHumidifyingHeating_ClosedLoop, Buildings.Applications.DataCenters.ChillerCooled.Equipment.CoolingCoilHumidifyingHeating, Buildings.Fluid.HeatExchangers.WetCoilCounterFlow, ahu.cooCoi.HexElement, Buildings.Fluid.MixingVolumes.BaseClasses.MixingVolumeHeatMoisturePort, Buildings.Fluid.Interfaces.ConservationEquation type: Real [4]
294: ahu.cooCoi.ele[3].preDro2.dp:VARIABLE(start = 0.0 unit = "Pa" nominal = if 0.0 > 1e-15 then 0.0 else 1.0 protected = true ) "Pressure difference between port_a and port_b"Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.CoolingCoilHumidifyingHeating_ClosedLoop, Buildings.Applications.DataCenters.ChillerCooled.Equipment.CoolingCoilHumidifyingHeating, Buildings.Fluid.HeatExchangers.WetCoilCounterFlow, ahu.cooCoi.HexElement, Buildings.Fluid.FixedResistances.PressureDrop type: Real [4]
318: ahu.cooCoi.ele[3].vol2.p:VARIABLE(min = max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, 0.0))))))))))) max = min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, 100000000.0)))))))))) start = 101325.0 unit = "Pa" nominal = 100000.0 protected = true final = true ) "Pressure of the fluid"Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.CoolingCoilHumidifyingHeating_ClosedLoop, Buildings.Applications.DataCenters.ChillerCooled.Equipment.CoolingCoilHumidifyingHeating, Buildings.Fluid.HeatExchangers.WetCoilCounterFlow, ahu.cooCoi.HexElement, Buildings.Fluid.MixingVolumes.BaseClasses.MixingVolumeHeatMoisturePort type: Real [4]
256: ahu.cooCoi.ele[4].vol2.p:VARIABLE(min = max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, 0.0))))))))))) max = min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, 100000000.0)))))))))) start = 101325.0 unit = "Pa" nominal = 100000.0 protected = true final = true ) "Pressure of the fluid"Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.CoolingCoilHumidifyingHeating_ClosedLoop, Buildings.Applications.DataCenters.ChillerCooled.Equipment.CoolingCoilHumidifyingHeating, Buildings.Fluid.HeatExchangers.WetCoilCounterFlow, ahu.cooCoi.HexElement, Buildings.Fluid.MixingVolumes.BaseClasses.MixingVolumeHeatMoisturePort type: Real [4]
244: ahu.cooCoi.ele[4].vol2.dynBal.m:VARIABLE(min = max(0.0, 0.0) start = ahu.cooCoi.ele[4].vol2.V * 1.2 unit = "kg" stateSelect=StateSelect.prefer protected = true final = true ) "Mass of fluid"Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.CoolingCoilHumidifyingHeating_ClosedLoop, Buildings.Applications.DataCenters.ChillerCooled.Equipment.CoolingCoilHumidifyingHeating, Buildings.Fluid.HeatExchangers.WetCoilCounterFlow, ahu.cooCoi.HexElement, Buildings.Fluid.MixingVolumes.BaseClasses.MixingVolumeHeatMoisturePort, Buildings.Fluid.Interfaces.ConservationEquation type: Real [4]
255: ahu.cooCoi.ele[4].vol2.dynBal.medium.Xi[1]:VARIABLE(flow=false min = max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, 0.0)))))))))))))))))) max = min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, 1.0)))))))))))))))))) start = 0.01 unit = "1" nominal = 0.1 protected = true ) "Structurally independent mass fractions"Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.CoolingCoilHumidifyingHeating_ClosedLoop, Buildings.Applications.DataCenters.ChillerCooled.Equipment.CoolingCoilHumidifyingHeating, Buildings.Fluid.HeatExchangers.WetCoilCounterFlow, ahu.cooCoi.HexElement, Buildings.Fluid.MixingVolumes.BaseClasses.MixingVolumeHeatMoisturePort, Buildings.Fluid.Interfaces.ConservationEquation, ahu.cooCoi.ele.vol2.dynBal.Medium.BaseProperties type: Real [4,1]
242: ahu.cooCoi.ele[4].vol2.dynBal.mXi[1]:VARIABLE(min = max(0.0, 0.0) start = ahu.cooCoi.ele[4].vol2.dynBal.fluidVolume * 1.2 * 0.01 unit = "kg" protected = true final = true ) "Masses of independent components in the fluid"Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.CoolingCoilHumidifyingHeating_ClosedLoop, Buildings.Applications.DataCenters.ChillerCooled.Equipment.CoolingCoilHumidifyingHeating, Buildings.Fluid.HeatExchangers.WetCoilCounterFlow, ahu.cooCoi.HexElement, Buildings.Fluid.MixingVolumes.BaseClasses.MixingVolumeHeatMoisturePort, Buildings.Fluid.Interfaces.ConservationEquation type: Real [4,1]
241: $DER.ahu.cooCoi.ele[4].vol2.dynBal.mXi[1]:VARIABLE(min = max(0.0, 0.0) start = ahu.cooCoi.ele[4].vol2.dynBal.fluidVolume * 1.2 * 0.01 unit = "kg" protected = true final = true ) "Masses of independent components in the fluid"Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.CoolingCoilHumidifyingHeating_ClosedLoop, Buildings.Applications.DataCenters.ChillerCooled.Equipment.CoolingCoilHumidifyingHeating, Buildings.Fluid.HeatExchangers.WetCoilCounterFlow, ahu.cooCoi.HexElement, Buildings.Fluid.MixingVolumes.BaseClasses.MixingVolumeHeatMoisturePort, Buildings.Fluid.Interfaces.ConservationEquation type: Real [4,1]
303: $DER.ahu.cooCoi.ele[3].vol2.dynBal.mXi[1]:VARIABLE(min = max(0.0, 0.0) start = ahu.cooCoi.ele[3].vol2.dynBal.fluidVolume * 1.2 * 0.01 unit = "kg" protected = true final = true ) "Masses of independent components in the fluid"Buildings.Applications.DataCenters.ChillerCooled.Equipment.Validation.CoolingCoilHumidifyingHeating_ClosedLoop, Buildings.Applications.DataCenters.ChillerCooled.Equipment.CoolingCoilHumidifyingHeating, Buildings.Fluid.HeatExchangers.WetCoilCounterFlow, ahu.cooCoi.HexElement, Buildings.Fluid.MixingVolumes.BaseClasses.MixingVolumeHeatMoisturePort, Buildings.Fluid.Interfaces.ConservationEquation type: Real [4,1]
[6] 20:24:23 Translation Error
post-optimization module replaceHomotopyWithSimplified (initialization) failed.
[7] 20:24:23 Translation Error
No system for the symbolic initialization was generated
I turned on -b=bltdump to get more info.
I'm not sure I can fully make sense of the reason why Pantelides' algorithm fails and what is the role of homotopy. I compiled the model in Dymola forcing homotopy to be considered, and the simulation was successful, so it looks like the simplified system should be well-posed.
@Karim, @AnHeuermann, any idea what could be going wrong here?
Change History (7)
comment:1 by , 5 years ago
| Summary: | Issue with homotopy during initialization in Buildings → Issue with homotopy and Pantelides during initialization in Buildings |
|---|
comment:2 by , 5 years ago
comment:3 by , 5 years ago
I am analyzing other issues involving parameters ending in nominal_pos, that are possibly being wrongly evaluated to zero. They don't seem to be constant-evaluated, so this should probably cause some runtime division-by-zero error, not structural issues.
See #6203 for further analysis.
comment:4 by , 5 years ago
| Milestone: | 1.17.0 → 1.18.0 |
|---|
comment:5 by , 5 years ago
| Description: | modified (diff) |
|---|
comment:6 by , 5 years ago
After #6203 was fixed, we get a slightly different error output
Error: Internal error IndexReduction.pantelidesIndexReduction failed! System is structurally singular and cannot be handled because the number of unassigned equations is larger than the number of states. Use -d=bltdump to get more information. Notification: Performance of <failed> postOpt replaceHomotopyWithSimplified (initialization): time 0.009187/2.856, allocations: 3.411 MB / 1.35 GB, free: 148.3 MB / 0.9011 GB Error: post-optimization module replaceHomotopyWithSimplified (initialization) failed.
comment:7 by , 5 years ago
| Resolution: | → fixed |
|---|---|
| Status: | new → closed |
After more recent fixes from @Karim, this model now runs successfully.

These are the replacements done by the backend:
old: homotopy(Buildings.Fluid.Actuators.BaseClasses.equalPercentage(PID.y, ahu.watVal.R, ahu.watVal.l, ahu.watVal.delta0), ahu.watVal.l + PID.y * (1.0 - ahu.watVal.l)) simp: ahu.watVal.l + PID.y * (1.0 - ahu.watVal.l) old: homotopy(Buildings.Fluid.BaseClasses.FlowModels.basicFlowFunction_m_flow(res_1.m_flow, ahu.watVal.k, ahu.watVal.m_flow_turbulent), ahu.watVal.dp_nominal_pos * res_1.m_flow / ahu.watVal.m_flow_nominal_pos) simp: ahu.watVal.dp_nominal_pos * res_1.m_flow / ahu.watVal.m_flow_nominal_pos old: homotopy(Buildings.Fluid.Movers.BaseClasses.Characteristics.efficiency(Buildings.Fluid.Movers.BaseClasses.Characteristics.efficiencyParameters({0.0}, {0.7}), ahu.fan.VMachine_flow, ahu.fan.eff.motDer, ahu.fan.filter.x[2], 0.05), Buildings.Fluid.Movers.BaseClasses.Characteristics.efficiency(Buildings.Fluid.Movers.BaseClasses.Characteristics.efficiencyParameters({0.0}, {0.7}), 17.04999999999998, ahu.fan.eff.motDer, ahu.fan.filter.x[2], 0.05)) simp: Buildings.Fluid.Movers.BaseClasses.Characteristics.efficiency(Buildings.Fluid.Movers.BaseClasses.Characteristics.efficiencyParameters({0.0}, {0.7}), 17.04999999999998, ahu.fan.eff.motDer, ahu.fan.filter.x[2], 0.05) old: homotopy(Buildings.Fluid.Movers.BaseClasses.Characteristics.efficiency(Buildings.Fluid.Movers.BaseClasses.Characteristics.efficiencyParameters({0.0}, {0.7}), ahu.fan.VMachine_flow, ahu.fan.eff.hydDer, ahu.fan.filter.x[2], 0.05), Buildings.Fluid.Movers.BaseClasses.Characteristics.efficiency(Buildings.Fluid.Movers.BaseClasses.Characteristics.efficiencyParameters({0.0}, {0.7}), 17.04999999999998, ahu.fan.eff.hydDer, ahu.fan.filter.x[2], 0.05)) simp: Buildings.Fluid.Movers.BaseClasses.Characteristics.efficiency(Buildings.Fluid.Movers.BaseClasses.Characteristics.efficiencyParameters({0.0}, {0.7}), 17.04999999999998, ahu.fan.eff.hydDer, ahu.fan.filter.x[2], 0.05) old: homotopy(Buildings.Fluid.Movers.BaseClasses.Characteristics.pressure(ahu.fan.VMachine_flow, ahu.fan.filter.x[2], ahu.fan.eff.preDer2, 360.0, 17.04999999999998, Buildings.Fluid.Movers.BaseClasses.Characteristics.flowParametersInternal(4, {0.0, 1.65, 3.3, 17.04999999999998}, {360.0, 336.0087096774194, 300.0174193548387, 0.0})), ahu.fan.filter.x[2] * (Buildings.Fluid.Movers.BaseClasses.Characteristics.pressure(3.3, 1.0, ahu.fan.eff.preDer2, 360.0, 17.04999999999998, Buildings.Fluid.Movers.BaseClasses.Characteristics.flowParametersInternal(4, {0.0, 1.65, 3.3, 17.04999999999998}, {360.0, 336.0087096774194, 300.0174193548387, 0.0})) + (ahu.fan.VMachine_flow - 3.3) * (Buildings.Fluid.Movers.BaseClasses.Characteristics.pressure(3.465, 1.0, ahu.fan.eff.preDer2, 360.0, 17.04999999999998, Buildings.Fluid.Movers.BaseClasses.Characteristics.flowParametersInternal(4, {0.0, 1.65, 3.3, 17.04999999999998}, {360.0, 336.0087096774194, 300.0174193548387, 0.0})) - Buildings.Fluid.Movers.BaseClasses.Characteristics.pressure(3.135, 1.0, ahu.fan.eff.preDer2, 360.0, 17.04999999999998, Buildings.Fluid.Movers.BaseClasses.Characteristics.flowParametersInternal(4, {0.0, 1.65, 3.3, 17.04999999999998}, {360.0, 336.0087096774194, 300.0174193548387, 0.0}))) / 0.33)) simp: ahu.fan.filter.x[2] * (Buildings.Fluid.Movers.BaseClasses.Characteristics.pressure(3.3, 1.0, ahu.fan.eff.preDer2, 360.0, 17.04999999999998, Buildings.Fluid.Movers.BaseClasses.Characteristics.flowParametersInternal(4, {0.0, 1.65, 3.3, 17.04999999999998}, {360.0, 336.0087096774194, 300.0174193548387, 0.0})) + (ahu.fan.VMachine_flow - 3.3) * (Buildings.Fluid.Movers.BaseClasses.Characteristics.pressure(3.465, 1.0, ahu.fan.eff.preDer2, 360.0, 17.04999999999998, Buildings.Fluid.Movers.BaseClasses.Characteristics.flowParametersInternal(4, {0.0, 1.65, 3.3, 17.04999999999998}, {360.0, 336.0087096774194, 300.0174193548387, 0.0})) - Buildings.Fluid.Movers.BaseClasses.Characteristics.pressure(3.135, 1.0, ahu.fan.eff.preDer2, 360.0, 17.04999999999998, Buildings.Fluid.Movers.BaseClasses.Characteristics.flowParametersInternal(4, {0.0, 1.65, 3.3, 17.04999999999998}, {360.0, 336.0087096774194, 300.0174193548387, 0.0}))) / 0.33) old: homotopy(smooth(1, if noEvent(abs(ahu.fan.VMachine_flow) + -0.03409999999999996 > 0.01704999999999998) then ahu.fan.heaDis.QThe_flow else if noEvent(abs(ahu.fan.VMachine_flow) + -0.03409999999999996 < -0.01704999999999998) then 0.0 else 0.25 * (2.0 - abs(ahu.fan.VMachine_flow) / 0.01704999999999998) * ((abs(ahu.fan.VMachine_flow) / 0.01704999999999998 + -2.0) ^ 2.0 - 3.0) * ahu.fan.heaDis.QThe_flow + 0.5 * ahu.fan.heaDis.QThe_flow), 0.0) simp: 0.0 old: homotopy(Buildings.Fluid.BaseClasses.FlowModels.basicFlowFunction_m_flow(ahu.m2_flow, if {false, false, false, true} then 0.2333452377915607 else 0.0, if {false, false, false, true} then 0.33 else 0.0), 60.60606060606061 * ahu.m2_flow) simp: 60.60606060606061 * ahu.m2_flow old: homotopy(Buildings.Fluid.BaseClasses.FlowModels.basicFlowFunction_m_flow(ahu.cooCoi.ele[4].m1_flow, ahu.cooCoi.ele[4].preDro1.k, ahu.cooCoi.ele[4].preDro1.m_flow_turbulent), 0.0) simp: 0.0 old: homotopy(Buildings.Fluid.BaseClasses.FlowModels.basicFlowFunction_m_flow(ahu.cooCoi.ele[3].m2_flow, if {false, false, false, true} then 3.3 / 0.0 else 0.0, if {false, false, false, true} then 0.33 else 0.0), 0.0) simp: 0.0 old: homotopy(Buildings.Fluid.BaseClasses.FlowModels.basicFlowFunction_m_flow(ahu.cooCoi.ele[3].m1_flow, ahu.cooCoi.ele[3].preDro1.k, ahu.cooCoi.ele[3].preDro1.m_flow_turbulent), 0.0) simp: 0.0 old: homotopy(Buildings.Fluid.BaseClasses.FlowModels.basicFlowFunction_m_flow(ahu.cooCoi.ele[2].m2_flow, if {false, false, false, true} then 3.3 / 0.0 else 0.0, if {false, false, false, true} then 0.33 else 0.0), 0.0) simp: 0.0 old: homotopy(Buildings.Fluid.BaseClasses.FlowModels.basicFlowFunction_m_flow(ahu.cooCoi.ele[2].m1_flow, ahu.cooCoi.ele[2].preDro1.k, ahu.cooCoi.ele[2].preDro1.m_flow_turbulent), 0.0) simp: 0.0 old: homotopy(Buildings.Fluid.BaseClasses.FlowModels.basicFlowFunction_m_flow(ahu.cooCoi.ele[1].m2_flow, ahu.cooCoi.ele[1].preDro2.k, if {false, false, false, true} then 0.33 else 0.0), ahu.cooCoi.ele[1].preDro2.dp_nominal_pos * ahu.cooCoi.ele[1].m2_flow / 3.3) simp: ahu.cooCoi.ele[1].preDro2.dp_nominal_pos * ahu.cooCoi.ele[1].m2_flow / 3.3 old: homotopy(Buildings.Fluid.BaseClasses.FlowModels.basicFlowFunction_m_flow(ahu.m1_flow, ahu.cooCoi.ele[1].preDro1.k, ahu.cooCoi.ele[1].preDro1.m_flow_turbulent), 0.0) simp: 0.0 old: homotopy(Buildings.Fluid.BaseClasses.FlowModels.basicFlowFunction_dp(res_1.dp, res_1.k, res_1.m_flow_turbulent), res_1.m_flow_nominal_pos * res_1.dp / 3000.0) simp: res_1.m_flow_nominal_pos * res_1.dp / 3000.0 old: homotopy(Buildings.Fluid.BaseClasses.FlowModels.basicFlowFunction_dp(res_2.dp, 0.33, 0.9899999999999999), 0.033 * res_2.dp) simp: 0.033 * res_2.dpAll of them are correct and it does not fail on any other homotopy operator. Can you see anything suspicious? The structurally singular subsystem in question is the following:
Error: Internal error IndexReduction.pantelidesIndexReduction failed! System is structurally singular and cannot be handled because the number of unassigned equations is larger than the number of states. Use -d=bltdump to get more information. Error: Model is structurally singular, error found sorting equations 390: ahu.cooCoi.ele[2].preDro2.dp = if {false, false, false, true} then 0.0 else 0.0 129: ahu.cooCoi.ele[2].preDro2.dp = ahu.cooCoi.ele[3].vol2.p - ahu.cooCoi.ele[2].vol2.p 571: ahu.cooCoi.ele[2].vol2.dynBal.mXi[1] = $START.ahu.cooCoi.ele[2].vol2.dynBal.mXi[1] 404: ahu.cooCoi.ele[2].vol2.dynBal.m = 1.184307920059215e-05 * ahu.cooCoi.ele[2].vol2.dynBal.fluidVolume * ahu.cooCoi.ele[2].vol2.p 403: ahu.cooCoi.ele[2].vol2.dynBal.mXi[1] = ahu.cooCoi.ele[2].vol2.dynBal.m * ahu.cooCoi.ele[2].vol2.dynBal.medium.Xi[1] 15: ahu.cooCoi.ele[2].vol2.dynBal.medium.Xi[1] = 0.01 570: ahu.cooCoi.ele[3].vol2.dynBal.mXi[1] = $START.ahu.cooCoi.ele[3].vol2.dynBal.mXi[1] 22: ahu.cooCoi.ele[3].vol2.dynBal.medium.Xi[1] = 0.01 354: ahu.cooCoi.ele[3].vol2.dynBal.mXi[1] = ahu.cooCoi.ele[3].vol2.dynBal.m * ahu.cooCoi.ele[3].vol2.dynBal.medium.Xi[1] 341: ahu.cooCoi.ele[3].preDro2.dp = if {false, false, false, true} then 0.0 else 0.0 355: ahu.cooCoi.ele[3].vol2.dynBal.m = 1.184307920059215e-05 * ahu.cooCoi.ele[3].vol2.dynBal.fluidVolume * ahu.cooCoi.ele[3].vol2.p 120: ahu.cooCoi.ele[3].preDro2.dp = ahu.cooCoi.ele[4].vol2.p - ahu.cooCoi.ele[3].vol2.p 307: ahu.cooCoi.ele[4].vol2.dynBal.m = 1.184307920059215e-05 * ahu.cooCoi.ele[4].vol2.dynBal.fluidVolume * ahu.cooCoi.ele[4].vol2.p 29: ahu.cooCoi.ele[4].vol2.dynBal.medium.Xi[1] = 0.01 306: ahu.cooCoi.ele[4].vol2.dynBal.mXi[1] = ahu.cooCoi.ele[4].vol2.dynBal.m * ahu.cooCoi.ele[4].vol2.dynBal.medium.Xi[1] 7: ahu.cooCoi.ele[4].vol2.dynBal.mXi[1] = $START.ahu.cooCoi.ele[4].vol2.dynBal.mXi[1] for variables 362: ahu.cooCoi.ele[2].preDro2.dp:VARIABLE(start = 0.0 unit = \"Pa\" nominal = if 0.0 > 1e-15 then 0.0 else 1.0 protected = true ) \"Pressure difference between port_a and port_b\" type: Real [4] 386: ahu.cooCoi.ele[2].vol2.p:VARIABLE(min = max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, 0.0))))))))))) max = min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, 100000000.0)))))))))) start = 101325.0 unit = \"Pa\" nominal = 100000.0 protected = true final = true ) \"Pressure of the fluid\" type: Real [4] 372: ahu.cooCoi.ele[2].vol2.dynBal.mXi[1]:VARIABLE(min = max(0.0, 0.0) start = ahu.cooCoi.ele[2].vol2.dynBal.fluidVolume * 1.2 * 0.01 unit = \"kg\" protected = true final = true ) \"Masses of independent components in the fluid\" type: Real [4,1] 374: ahu.cooCoi.ele[2].vol2.dynBal.m:VARIABLE(min = max(0.0, 0.0) start = ahu.cooCoi.ele[2].vol2.V * 1.2 unit = \"kg\" stateSelect=StateSelect.prefer protected = true final = true ) \"Mass of fluid\" type: Real [4] 385: ahu.cooCoi.ele[2].vol2.dynBal.medium.Xi[1]:VARIABLE(flow=false min = max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, 0.0)))))))))))))) max = min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, 1.0)))))))))))))) start = 0.01 unit = \"1\" nominal = 0.1 protected = true ) \"Structurally independent mass fractions\" type: Real [4,1] 304: ahu.cooCoi.ele[3].vol2.dynBal.mXi[1]:VARIABLE(min = max(0.0, 0.0) start = ahu.cooCoi.ele[3].vol2.dynBal.fluidVolume * 1.2 * 0.01 unit = \"kg\" protected = true final = true ) \"Masses of independent components in the fluid\" type: Real [4,1] 317: ahu.cooCoi.ele[3].vol2.dynBal.medium.Xi[1]:VARIABLE(flow=false min = max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, 0.0)))))))))))))) max = min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, 1.0)))))))))))))) start = 0.01 unit = \"1\" nominal = 0.1 protected = true ) \"Structurally independent mass fractions\" type: Real [4,1] 306: ahu.cooCoi.ele[3].vol2.dynBal.m:VARIABLE(min = max(0.0, 0.0) start = ahu.cooCoi.ele[3].vol2.V * 1.2 unit = \"kg\" stateSelect=StateSelect.prefer protected = true final = true ) \"Mass of fluid\" type: Real [4] 294: ahu.cooCoi.ele[3].preDro2.dp:VARIABLE(start = 0.0 unit = \"Pa\" nominal = if 0.0 > 1e-15 then 0.0 else 1.0 protected = true ) \"Pressure difference between port_a and port_b\" type: Real [4] 318: ahu.cooCoi.ele[3].vol2.p:VARIABLE(min = max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, 0.0))))))))))) max = min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, 100000000.0)))))))))) start = 101325.0 unit = \"Pa\" nominal = 100000.0 protected = true final = true ) \"Pressure of the fluid\" type: Real [4] 256: ahu.cooCoi.ele[4].vol2.p:VARIABLE(min = max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, 0.0))))))))))) max = min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, min(100000000.0, 100000000.0)))))))))) start = 101325.0 unit = \"Pa\" nominal = 100000.0 protected = true final = true ) \"Pressure of the fluid\" type: Real [4] 244: ahu.cooCoi.ele[4].vol2.dynBal.m:VARIABLE(min = max(0.0, 0.0) start = ahu.cooCoi.ele[4].vol2.V * 1.2 unit = \"kg\" stateSelect=StateSelect.prefer protected = true final = true ) \"Mass of fluid\" type: Real [4] 255: ahu.cooCoi.ele[4].vol2.dynBal.medium.Xi[1]:VARIABLE(flow=false min = max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, max(0.0, 0.0))))))))))))))))) max = min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, min(1.0, 1.0))))))))))))))))) start = 0.01 unit = \"1\" nominal = 0.1 protected = true ) \"Structurally independent mass fractions\" type: Real [4,1] 242: ahu.cooCoi.ele[4].vol2.dynBal.mXi[1]:VARIABLE(min = max(0.0, 0.0) start = ahu.cooCoi.ele[4].vol2.dynBal.fluidVolume * 1.2 * 0.01 unit = \"kg\" protected = true final = true ) \"Masses of independent components in the fluid\" type: Real [4,1] 241: $DER.ahu.cooCoi.ele[4].vol2.dynBal.mXi[1]:VARIABLE(min = max(0.0, 0.0) start = ahu.cooCoi.ele[4].vol2.dynBal.fluidVolume * 1.2 * 0.01 unit = \"kg\" protected = true final = true ) \"Masses of independent components in the fluid\" type: Real [4,1] 303: $DER.ahu.cooCoi.ele[3].vol2.dynBal.mXi[1]:VARIABLE(min = max(0.0, 0.0) start = ahu.cooCoi.ele[3].vol2.dynBal.fluidVolume * 1.2 * 0.01 unit = \"kg\" protected = true final = true ) \"Masses of independent components in the fluid\" type: Real [4,1]It seems like the homotopy operators which get replaced by
0.0cause the issue because they contain some of the variables of this system in theiractual-expression. The other ones seem to be independent of this system entirely.