Allen–Cahn Phase-Field Void Shrinking – Why Does Mesh Adaptivity Cause “Steady-State” Behavior? #32051
-
|
Dear MOOSE team, I am running a simple test case of curvature-driven void shrinkage using a pure Allen–Cahn phase-field model. The physics is extremely standard and the problem runs perfectly on a uniform mesh. However, once mesh adaptivity is activated, the solution immediately becomes “steady”—the void stops evolving, the nonlinear residual becomes extremely small (~1e-12), and the time step keeps shrinking until I would like to ask for guidance on:
1️⃣ Governing equation & material parametersThe simulation uses a standard Allen–Cahn phase-field equation: [ where
Initial condition is a diffuse circular void ( 2️⃣ Baseline case (uniform 250×250 mesh): works perfectlyBelow is the link to the full input (no adaptivity): Mesh block & Executioner excerptLog excerpt (uniform mesh)Allen–Cahn behaves as expected. Residual decreases smoothly; Newton fully converges: Void evolution result (works correctly)(👉 Here I will insert the figures showing the void shrinking over time)
3️⃣ After enabling Mesh Adaptivity → void stops shrinking + solver “pseudo-diverges”Adaptivity is added here (link): Adaptivity block excerptEverything else (Kernels, Materials, ICs, dt control) is unchanged. ❌ Problem: residual stagnates at 1e-12, Newton stalls,
|
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 3 replies
-
|
Hello If the solver thinks it has converged already it won't do anything and essentially skip the step. This could explain the problem. I would recommend you force a solve using nl_forced_its in the executioner block. Also the starting residual is very small. Most physics are happily converged with 1e-12 You could try to increase that by either using a different unit system for your equations OR using large scaling factors (applied in the Variables block for each variable, or using automatic scaling in the Executioner) |
Beta Was this translation helpful? Give feedback.


Hello
If the solver thinks it has converged already it won't do anything and essentially skip the step. This could explain the problem.
I would recommend you force a solve using nl_forced_its in the executioner block.
Also the starting residual is very small. Most physics are happily converged with 1e-12
You could try to increase that by either using a different unit system for your equations OR using large scaling factors (applied in the Variables block for each variable, or using automatic scaling in the Executioner)