Opened 4 years ago

Closed 4 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 Francesco Casella)

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 Francesco Casella, 4 years ago

Summary: Issue with homotopy during initialization in BuildingsIssue with homotopy and Pantelides during initialization in Buildings

comment:2 by Karim Adbdelhak, 4 years ago

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.dp

All 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.0 cause the issue because they contain some of the variables of this system in their actual-expression. The other ones seem to be independent of this system entirely.

comment:3 by Francesco Casella, 4 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 Francesco Casella, 4 years ago

Milestone: 1.17.01.18.0

comment:5 by Francesco Casella, 4 years ago

Description: modified (diff)

comment:6 by Francesco Casella, 4 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 Francesco Casella, 4 years ago

Resolution: fixed
Status: newclosed

After more recent fixes from @Karim, this model now runs successfully.

Note: See TracTickets for help on using tickets.