Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Extend docs on compositional coupling with deadlock example #498

Open
wants to merge 4 commits into
base: master
Choose a base branch
from

Conversation

uekerman
Copy link
Member

@uekerman uekerman commented Feb 26, 2025

I promised in precice/precice#1907 to add a docs section on deadlocks in compositional coupling. I tried to add the simplest possible example.

The mermaid graph will probably not work on the website. Would this be easy to add? If not, I would add the comment in a comment and add the svg instead.

graph LR;
    A -- first to second --> B;
    B -- first to second --> C;
    C -- first to second --> A;
Loading

@fsimonis @carme-hp Enough information covered and would you prefer to see more examples and problems?

@orlandoisepic Could be a potential case for the checker a well.

@uekerman uekerman self-assigned this Feb 26, 2025
Copy link
Member

@carme-hp carme-hp left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think that the explanation for the deadlock and its solution is clear:)

...
</coupling-scheme:parallel-explicit>
```

For this example, all three participants are executed in parallel to one another, whereas `MySolver1` exchanges data with `MySolver2` and `MySolver3`, but not the latter two with each other. To also get an interaction between `MySolver2` and `MySolver3`, add a third coupling scheme.
For this example, all three participants are executed in parallel to one another, whereas `A` exchanges data with `B` and `C`, but not the latter two with each other.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
For this example, all three participants are executed in parallel to one another, whereas `A` exchanges data with `B` and `C`, but not the latter two with each other.
For this example, all three participants are executed in parallel to one another, whereas `A` exchanges data with `B` and `C`, but `B` and `C` do not exchange data with each other.

I know it says the same, but I think it's better to make it even more clear.

Maybe it will be nice to add a comment that "first" and "second" doesn't matter?

@fsimonis
Copy link
Member

fsimonis commented Feb 26, 2025

The mermaid graph will probably not work on the website. Would this be easy to add? If not, I would add the comment in a comment and add the svg instead.

Not difficult. But wouldn't it be neater to see an actual config visualization? You mentioned that you have a minimal example, right?

@orlandoisepic
Copy link

This error can only occur with serial coupling schemes? And is it possible to occur with two or more participants?

@uekerman
Copy link
Member Author

@fsimonis

But wouldn't it be neater to see an actual config visualization? You mentioned that you have a minimal example, right?

https://github.com/precice/precice/blob/develop/tests/serial/circular/Explicit.xml and swap participants in line 65. In the config visualization the coupling scheme is separated from the exchanges, right?

@uekerman
Copy link
Member Author

@orlandoisepic

This error can only occur with serial coupling schemes?

yes

And is it possible to occur with two or more participants?

You need at least three participant to get such a circular dependency. For two participants, you can only define one coupling scheme.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants