I think IfcDistributionPort should not be in any IfcSystem.RelatedObjects even if the relating (by IfcRelConnectsPorts) IfcDistributionElement is part any IfcSystem.RelatedObjects. Because the IfcDistributionPort is not a physical element, but defines only a connection with other possible IfcDistributionElement through another IfcDistributionPort.
I found some IFC models, which contain IfcDistributionPort -s in IfcSystem.RelatedObjects aggregation. I think it is a redundant information, because if an IfcSystem contains IfcDistributionElement, than it contains all of IfcDistributionPort relating to the IfcDistributionElement.
We set flow direction (please see IfcFlowDirectionEnum) when we export ports. I don’t know is anybody (in receiving end) using that information but at least in calculation cases flow direction is needed.
actually there is a use case, when you want to include some (not all) of the IfcDistributionPort’s of an IfcDistributionElement in an IfcSystem (or IfcDistributionSystem).
Consider an IfcPump - it plays a role in two system, the electrical system and the water system. The pump has four ports, two concerning electricity (phase, null) and two conserning water (inlet, outlet). In order to group only elements and ports related to the electric circuit, an IfcDistributionSystem/ELECTRICAL would group the IfcPump and the two IfcDistributionPort’s for electrical, and the IfcDistributionSystem/WATERSUPPLY would group the IfcPump and the two IfcDistributionPort’s for water.
If the elements have multiple ports of the same predefined type, and the element has multiple systems associated of the same predefined type, then you should explicitly nominate which ports relate to appropriate systems when it’s not consistent across all those ports. So you shouldn’t have to nominate the port system relationship for many elements that have ports with differing system predefined type.