phaseField
phaseField copied to clipboard
Look into pinning a point for Neumann only BCs
We have this functionality, but it is currently commented out in init.cc. That section of the code needs to be reviewed.
The current code checks a component of a variable to see if the governing equation is TIME_INDEPENDENT or IMPLICIT_TIME_DEPENDENT and if it has only non-Dirichlet BCs. If both conditions are true, it marks that component as having a rigid body mode. This isn't quite true, which is why it is currently commented out. There needs to be an additional check on whether the value of the variable is used in the governing equation. If so, then there is no rigid body mode, but the current code says there is.
This came up when developing the steady-state Allen-Cahn app. It should be a fairly straightforward matter of adding the check for whether the variable value is in the governing equation.
Thanks for submitting the issue, Steve.
I just have a few questions for clarification
-
Does the current issue affect the performance of the code? Will it fail or give erroneous results? Or is it just the output.
-
Does "rigid body mode" imply that the solution is translation invariant and therefore it needs a pinning point?
-
Why does it matter if the value of the variable is used in the governing equation?
-
Does this apply to both NATURAL and PERIODIC BSs?
Thanks!
On Wed, Oct 28, 2020 at 3:36 PM Stephen DeWitt [email protected] wrote:
The current code checks a component of a variable to see if the governing equation is TIME_INDEPENDENT or IMPLICIT_TIME_DEPENDENT and if it has only non-Dirichlet BCs. If both conditions are true, it marks that component as having a rigid body mode. This isn't quite true, which is why it is currently commented out. There needs to be an additional check on whether the value of the variable is used in the governing equation. If so, then there is no rigid body mode, but the current code says there is.
This came up when developing the steady-state Allen-Cahn app. It should be a fairly straightforward matter of adding the check for whether the variable value is in the governing equation.
— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/prisms-center/phaseField/issues/116#issuecomment-718163214, or unsubscribe https://github.com/notifications/unsubscribe-auth/AD3FA476RDP72UZR4WMQE7LSNBXDXANCNFSM4FWX3KMQ .
-
As it is currently, there are times where it simply won't converge without pinning a point. The solution just keeps bouncing around by an additive constant indefinitely. I suppose eventually it will hit the max number of linear solver iterations, so perhaps by tuning that you could get the right answer in a reasonable amount of time, but it'd be hard to pick that well enough.
-
Yes.
-
If the equation uses the value of the variable it is no longer translationally invariant. That is, grad(phi) is the same for phi = x^2 and phi = x^2 +1, but grad(phi) + phi is different for those two solutions.
-
Yes, it applies to all non-Dirichlet BCs.