diff --git a/topology.py b/topology.py index cfb0478ab89dbdf6961d60ad7d056843a81c5f02..0fa52ff717bd820dc39e76f8ef7d2ba54bf2fe79 100644 --- a/topology.py +++ b/topology.py @@ -117,57 +117,77 @@ class Topology: output_commodity_2, ) = component.get_input_output_commodities() if input_commodity_1 != None: - self._connectors[component_name + ".input_1"] = Connector( + self._connectors[component_name, "input_1"] = Connector( component_name + ".input_1" ) if input_commodity_2 != None: - self._connectors[component_name + ".input_2"] = Connector( + self._connectors[component_name, "input_2"] = Connector( component_name + ".input_2" ) if output_commodity_1 != None: - self._connectors[component_name + ".output_1"] = Connector( + self._connectors[component_name, "output_1"] = Connector( component_name + ".output_1" ) if output_commodity_2 != None: - self._connectors[component_name + ".output_2"] = Connector( + self._connectors[component_name, "output_2"] = Connector( component_name + ".output_2" ) - self._flows = [] self._connections = [] self._connections_map = dict() for connection in configuration["connections"]: index = len(self._connections) if connection["type"] == "OneToOne": - flow_from = connection["from"] - in_flow = flow_from + "_" + str(index) - self._flows.append(in_flow) - connector_from = self._connectors[flow_from] + flow_from = connection["from"].split(".") + flow_from_component = flow_from[0] + flow_from_connector = flow_from[1] + in_flow = ( + flow_from_component + "." + flow_from_connector + "__" + str(index) + ) + connector_from = self._connectors[ + flow_from_component, flow_from_connector + ] connector_from.flows.append(in_flow) # connector_from.other_sides.append(index) in_flows = [in_flow] - flow_to = connection["to"] - out_flow = str(index) + "_" + flow_to - self._flows.append(out_flow) - connector_to = self._connectors[flow_to] + flow_to = connection["to"].split(".") + flow_to_component = flow_to[0] + flow_to_connector = flow_to[1] + out_flow = ( + str(index) + "__" + flow_to_component + "." + flow_to_connector + ) + connector_to = self._connectors[flow_to_component, flow_to_connector] connector_to.flows.append(out_flow) # connector_to.other_sides.append(index) out_flows = [out_flow] - self._connections_map[flow_from, flow_to] = index + self._connections_map[connection["from"], connection["to"]] = index elif connection["type"] == "Sum": in_flows = [] out_flows = [] for member in connection["members"]: + temp = member.split(".") + member_component = temp[0] + member_connector = temp[1] if "output" in member: - flow = member + "_" + str(index) - self._flows.append(flow) + flow = ( + member_component + + "." + + member_connector + + "__" + + str(index) + ) in_flows.append(flow) else: - flow = str(index) + "_" + member - self._flows.append(flow) + flow = ( + str(index) + + "__" + + member_component + + "." + + member_connector + ) out_flows.append(flow) - connector = self._connectors[member] + connector = self._connectors[member_component, member_connector] connector.flows.append(flow) # connector.other_sides.append(index) if "loss_factor" in connection: @@ -403,10 +423,10 @@ class Topology: self._components[component].add_state_model(d_block, o_block, s_block) self._components[component].add_additional_model_logic(d_block, o_block) - for flow in self._flows: - o_block.add(flow, pyo.Var(o_block.T, bounds=(0, None))) - for connector in self._connectors.values(): + for flow in connector.flows: + o_block.add(flow, pyo.Var(o_block.T, bounds=(0, None))) + connector_var = o_block.component_dict[connector.name] def rule(m, t): @@ -547,8 +567,9 @@ class Topology: self._components[component].state_base_variable_names() ) - for flow in self._flows: - base_variable_names.append((flow, VariableKind.INDEXED)) + for connector in self._connectors.values(): + for flow in connector.flows: + base_variable_names.append((flow, VariableKind.INDEXED)) result = EntityResult(architecture) result.register_dynamic(architecture.dynamic, "", base_variable_names) @@ -574,8 +595,9 @@ class Topology: self._components[component].state_base_variable_names() ) - for flow in self._flows: - operational_base_variable_names.append((flow, VariableKind.INDEXED)) + for connector in self._connectors.values(): + for flow in connector.flows: + operational_base_variable_names.append((flow, VariableKind.INDEXED)) result.register_dynamic( architecture.value_dynamic,