Many to Many Functional Exchange

In one corner of our system we have several functions that iteratively improve the engineering data of our system. When I try to model that, I have four functions that produce and consume the engineering data and two additional function that just consume the engineering data.
I think the correct way in the model is to connect every producer with every consumer of the engineering data, which will result in 24 functional exchanges (see Attachment [SAB] System-n-to-m.png). Disadvantage: The diagram is not really readable and it is not possible to connect an output port of a function with an input port of the same function.
Another way is to add a “helper” function “Store Engineering Data”, that is the central distribution of the data (see Attachment [SAB] System-Helper.png). Disadvantage: The model contains that “wrong?” helper function.
Is there any better way to solve that problem?
In an SysML Activity Diagram, I could draw an object for the “Engineering Data”, I assume there is by purpose no equivalent in Arcadia, such that the focus is on the functions and not on the data.
Thank you for any support

I can imagine several ways to improve the readability of your model:

  1. If you want to stick with the 24 Functional Exchanges, you could use a function to group all “producer and consumer” ones, so that the internal complexity is hidden (cf. Fig 1). In your SAB diagram you choose to show only the high level function (cf. Fig 2). This way, instead of using one diagram, you use two but they are both readable.
  2. You say that a function in the middle would be wrong. Not necessarily. If at this stage you identify the need to manage the distribution of data between consumers and producers, with probably some performance, availability and/or confidentiality requirements related to this function, it would make sense to have this function in the middle. Of course, it would have to be renamed, as it is not only about storing data but distributing it. And create Functional Chains to better specify the possible production - consumption paths and what they represent.
  3. If you look for a radical solution to get rid of all these Functional Exchanges, you could create an Exchange Item “Engineering Data”, double click on functions’ input and output ports and select this “Engineering Data” as the incoming and outcoming exchange items. Implicitly you will be specifying that all Engineering Data exchange items that are produced by producer functions, are consumed by all the consumer functions. But you will need to add some comments to your diagram to make explicit the fact that all consumers consume produced engineering data.
    The best solution will depend on the nature of your system. I would probably go for 1 or 2.
    Hope it helps.

Hello Juan
Thank you very much for your response. I was not aware of the 3rd solution. I will try it out. Currently my favorite is 2, because in the architecture, there will be some technical solution for this distribution.
Thanks again