Hi all,
I am currently using the Aspect software to calculate 3D elasticity models in spherical domains, with a focus on viscosity and viscoelasticity. During my simulations, I’ve noticed some abnormal velocity results, and upon further investigation, I discovered that the AMG and GMG solvers provide inconsistent results, which I have discussed in this issue.
To troubleshoot this problem, I tested a simple example from the Aspect cookbook (shell_simple_3d.prm) to check whether the issue persists in other cases. When using a single material (without other components), the results from both solvers are consistent, whether in pure viscosity or viscoelasticity. However, when I apply a stratified material model (with a 60 km thick crust in the upper layer), the results from AMG and GMG become inconsistent.
This observation leads me to suspect that the inconsistency is related to the stratified material model, as the simpler, uniform material models do not exhibit this issue.
Additionally, I came across the following code snippet in the Aspect source code (aspect/source/material_model/rheology/elasticity.cc at main · geodynamics/aspect · GitHub), which might be relevant to understanding this issue:
// Functionality to average the additional RHS terms over the cell is not implemented.
// Also, there is no option implemented in this rheology module to project to Q1 the viscosity
// in the elastic force term for the RHS.
// Consequently, it is only possible to use elasticity with the Material averaging schemes
// 'none', 'harmonic average only viscosity', and 'geometric average only viscosity'.
// TODO: Find a way to include 'project to Q1 only viscosity'.
AssertThrow((this->get_parameters().material_averaging == MaterialModel::MaterialAveraging::none
|| this->get_parameters().material_averaging == MaterialModel::MaterialAveraging::harmonic_average_only_viscosity
|| this->get_parameters().material_averaging == MaterialModel::MaterialAveraging::geometric_average_only_viscosity
|| this->get_parameters().material_averaging == MaterialModel::MaterialAveraging::default_averaging),
ExcMessage("Material models with elasticity can only be used with the material "
"averaging schemes 'none', 'harmonic average only viscosity' and "
"'geometric average only viscosity'. This parameter ('Material averaging') "
"is located within the 'Material model' subsection."));
This leads me to wonder whether the discrepancy could be due to how the averaging schemes are handled under the viscoelastic model. I’m not entirely clear on the details of the AMG and GMG solvers—could it be that their averaging schemes differ? Has anyone experienced a similar issue or might be able to offer any insights into this behavior?
Thank you in advance for any help or suggestions!
The RMS velocity, maximum velocity, and time step evolutions produced by the two solvers are as follows:
It seems that the AMG solver seems to be more stable and does not fluctuate.
The prm parameter files and logs related to the reproducible model are as follows:
amg-log.txt (34.5 KB)
gmg-log.txt (32.7 KB)
shell_simple_3d-amg-elastic-init_comp-fixed_dt-uniform.prm (1.3 KB)
shell_simple_3d-gmg-elastic-init_comp-fixed_dt-uniform.prm (1.3 KB)
shell_simple_3d.prm (2.0 KB)
Best regards,
Ninghui Tian