-
Notifications
You must be signed in to change notification settings - Fork 3
Description
Till now, I was using a threshold of the form alpha * beta^k where alpha is any constant, beta is a constant between 0 and 1 and k is the iteration number. This threshold decreases with iterations and goes to zero asymptotically. When an event for communication is not triggered at the sender, the receiver keeps using the last communicated values for its own local solve. I think there are two problems with this scheme (seen through experiments) :
-
The threshold is dependent on time (iterations) but it is not dependent on space. In other words, it decreases with iterations but every PE uses the same threshold during a particular iteration regardless of its location in the domain. This is not desired since the rate of change of boundary values in a PE will be different from another PE depending on the initial conditions. Therefore threshold has to be made space dependent.
-
When the receiver does not receive a new value because an event for communication was not triggered in the corresponding sender, using the last communicated value for its own local solve at the receiver will lead to the same local solution again (the "local" boundary conditions for the receiver stays the same and hence it converges to the same solution). As a result, the receiver's boundary values don't change and hence an event for communication is not triggered unless fresh values come to it from neighbors. This situation often leads to a "communication deadlock" (a processor does not trigger communication unless it receives new values, the same holds for its neighbors and so on). A possible solution is to extrapolate the ghost cells at the receiver using last received values so that the local solve yields a different local solution, leading to change in its boundary values which may trigger a communication.
Please comment what you think.