From 8e969567f700896171f16b53ac35133d2d598e72 Mon Sep 17 00:00:00 2001 From: Yimin Jin Date: Fri, 20 Jun 2025 13:21:23 -0700 Subject: [PATCH 1/3] modify the plastic dilation terms to reduce noises in effective viscosity --- .../material_model/rheology/visco_plastic.cc | 20 ++++++------------- source/material_model/visco_plastic.cc | 20 +++++++++++-------- 2 files changed, 18 insertions(+), 22 deletions(-) diff --git a/source/material_model/rheology/visco_plastic.cc b/source/material_model/rheology/visco_plastic.cc index 43c4436fbd7..94f91c241ea 100644 --- a/source/material_model/rheology/visco_plastic.cc +++ b/source/material_model/rheology/visco_plastic.cc @@ -429,20 +429,12 @@ namespace aspect // Compute the dilation terms if necessary. if (this->get_parameters().enable_prescribed_dilation == true) { - if (output_parameters.composition_yielding[j] == true) - { - output_parameters.drucker_prager_parameters[j].angle_dilation *= weakening_factors[1]; - const std::pair dilation_terms = drucker_prager_plasticity.compute_dilation_terms_for_stokes_system (output_parameters.drucker_prager_parameters[j], - non_yielding_viscosity, - effective_edot_ii); - output_parameters.dilation_lhs_terms[j] = dilation_terms.first; - output_parameters.dilation_rhs_terms[j] = dilation_terms.second; - } - else - { - output_parameters.dilation_lhs_terms[j] = 0; - output_parameters.dilation_rhs_terms[j] = 0; - } + output_parameters.drucker_prager_parameters[j].angle_dilation *= weakening_factors[1]; + const std::pair dilation_terms = drucker_prager_plasticity.compute_dilation_terms_for_stokes_system (output_parameters.drucker_prager_parameters[j], + non_yielding_viscosity, + effective_edot_ii); + output_parameters.dilation_lhs_terms[j] = dilation_terms.first; + output_parameters.dilation_rhs_terms[j] = dilation_terms.second; } } diff --git a/source/material_model/visco_plastic.cc b/source/material_model/visco_plastic.cc index 840e807184a..18b2ce83505 100644 --- a/source/material_model/visco_plastic.cc +++ b/source/material_model/visco_plastic.cc @@ -287,14 +287,18 @@ namespace aspect if (const std::shared_ptr> plastic_dilation = out.template get_additional_output_object>()) { - plastic_dilation->dilation_lhs_term[i] - = MaterialUtilities::average_value(volume_fractions, - isostrain_viscosities.dilation_lhs_terms, - MaterialUtilities::arithmetic); - plastic_dilation->dilation_rhs_term[i] - = MaterialUtilities::average_value(volume_fractions, - isostrain_viscosities.dilation_rhs_terms, - MaterialUtilities::arithmetic); + const double dilation_lhs_term = MaterialUtilities::average_value(volume_fractions, + isostrain_viscosities.dilation_lhs_terms, + MaterialUtilities::arithmetic); + const double dilation_rhs_term = MaterialUtilities::average_value(volume_fractions, + isostrain_viscosities.dilation_rhs_terms, + MaterialUtilities::arithmetic); + + plastic_dilation->dilation_lhs_term[i] = dilation_lhs_term; + if (dilation_rhs_term - dilation_lhs_term * in.pressure[i] > 0) + plastic_dilation->dilation_rhs_term[i] = dilation_rhs_term; + else + plastic_dilation->dilation_rhs_term[i] = dilation_lhs_term * in.pressure[i]; } } From 5e12f4dd6c0b7663d5000fe6d95626d1a4ea5b69 Mon Sep 17 00:00:00 2001 From: Yimin Jin Date: Sat, 21 Jun 2025 22:31:56 -0700 Subject: [PATCH 2/3] update the test results --- .../screen-output | 47 ++++++++++++++++--- .../statistics | 2 +- 2 files changed, 42 insertions(+), 7 deletions(-) diff --git a/tests/kaus_2010_with_plastic_dilation/screen-output b/tests/kaus_2010_with_plastic_dilation/screen-output index e7a4c503121..cc0633b142e 100644 --- a/tests/kaus_2010_with_plastic_dilation/screen-output +++ b/tests/kaus_2010_with_plastic_dilation/screen-output @@ -9,16 +9,51 @@ Number of mesh deformation degrees of freedom: 594 Solving temperature system... 0 iterations. Advecting particles... done. Rebuilding Stokes preconditioner... - Solving Stokes system (AMG)... 34+0 iterations. - Relative nonlinear residuals (temperature, compositional fields, Stokes system): 1.14953e-16, 0, 0, 0, 0, 0, 0, 0, 0, 1 - Relative nonlinear residual (total system) after nonlinear iteration 1: 1 + Solving Stokes system (AMG)... 27+0 iterations. + Relative nonlinear residuals (temperature, compositional fields, Stokes system): 1.14953e-16, 0, 0, 0, 0, 0, 0, 0, 0, 0.375107 + Relative nonlinear residual (total system) after nonlinear iteration 1: 0.375107 Solving temperature system... 0 iterations. Advecting particles... done. Rebuilding Stokes preconditioner... - Solving Stokes system (AMG)... 0+0 iterations. - Relative nonlinear residuals (temperature, compositional fields, Stokes system): 1.14953e-16, 0, 0, 0, 0, 0, 0, 0, 0, 9.42459e-08 - Relative nonlinear residual (total system) after nonlinear iteration 2: 9.42459e-08 + Solving Stokes system (AMG)... 21+0 iterations. + Relative nonlinear residuals (temperature, compositional fields, Stokes system): 1.14953e-16, 0, 0, 0, 0, 0, 0, 0, 0, 0.0350776 + Relative nonlinear residual (total system) after nonlinear iteration 2: 0.0350776 + + Solving temperature system... 0 iterations. + Advecting particles... done. + Rebuilding Stokes preconditioner... + Solving Stokes system (AMG)... 19+0 iterations. + Relative nonlinear residuals (temperature, compositional fields, Stokes system): 1.14953e-16, 0, 0, 0, 0, 0, 0, 0, 0, 0.0089287 + Relative nonlinear residual (total system) after nonlinear iteration 3: 0.0089287 + + Solving temperature system... 0 iterations. + Advecting particles... done. + Rebuilding Stokes preconditioner... + Solving Stokes system (AMG)... 16+0 iterations. + Relative nonlinear residuals (temperature, compositional fields, Stokes system): 1.14953e-16, 0, 0, 0, 0, 0, 0, 0, 0, 0.00232937 + Relative nonlinear residual (total system) after nonlinear iteration 4: 0.00232937 + + Solving temperature system... 0 iterations. + Advecting particles... done. + Rebuilding Stokes preconditioner... + Solving Stokes system (AMG)... 14+0 iterations. + Relative nonlinear residuals (temperature, compositional fields, Stokes system): 1.14953e-16, 0, 0, 0, 0, 0, 0, 0, 0, 0.000636386 + Relative nonlinear residual (total system) after nonlinear iteration 5: 0.000636386 + + Solving temperature system... 0 iterations. + Advecting particles... done. + Rebuilding Stokes preconditioner... + Solving Stokes system (AMG)... 12+0 iterations. + Relative nonlinear residuals (temperature, compositional fields, Stokes system): 1.14953e-16, 0, 0, 0, 0, 0, 0, 0, 0, 0.000187177 + Relative nonlinear residual (total system) after nonlinear iteration 6: 0.000187177 + + Solving temperature system... 0 iterations. + Advecting particles... done. + Rebuilding Stokes preconditioner... + Solving Stokes system (AMG)... 10+0 iterations. + Relative nonlinear residuals (temperature, compositional fields, Stokes system): 1.14953e-16, 0, 0, 0, 0, 0, 0, 0, 0, 6.02812e-05 + Relative nonlinear residual (total system) after nonlinear iteration 7: 6.02812e-05 Postprocessing: diff --git a/tests/kaus_2010_with_plastic_dilation/statistics b/tests/kaus_2010_with_plastic_dilation/statistics index cf40684b10b..6b0c96ea8d9 100644 --- a/tests/kaus_2010_with_plastic_dilation/statistics +++ b/tests/kaus_2010_with_plastic_dilation/statistics @@ -38,4 +38,4 @@ # 38: Particle file name # 39: RMS velocity (m/year) # 40: Max. velocity (m/year) -0 0.000000000000e+00 0.000000000000e+00 256 2507 297 18432 2 0 34 35 73 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.11111111e-01 3.47222222e+05 10240 output-kaus_2010_with_plastic_dilation/particles/particles-00000 8.17289302e-04 1.40766238e-03 +0 0.000000000000e+00 0.000000000000e+00 256 2507 297 18432 7 0 119 126 293 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.11111111e-01 3.47222222e+05 10240 output-kaus_2010_with_plastic_dilation/particles/particles-00000 8.17267895e-04 1.40762515e-03 From 7dc5c02d44c243b693d16e14b58b85254cc571a6 Mon Sep 17 00:00:00 2001 From: Yimin Jin Date: Tue, 24 Jun 2025 12:36:15 -0700 Subject: [PATCH 3/3] add comments --- source/material_model/visco_plastic.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/material_model/visco_plastic.cc b/source/material_model/visco_plastic.cc index 18b2ce83505..0e54fad8dee 100644 --- a/source/material_model/visco_plastic.cc +++ b/source/material_model/visco_plastic.cc @@ -294,6 +294,9 @@ namespace aspect isostrain_viscosities.dilation_rhs_terms, MaterialUtilities::arithmetic); + // When plastic yielding occurs (RHS - LHS * p > 0$), the LHS and RHS terms are set to + // the values calculated by the Drucker Prager model; otherwise, the LHS and RHS terms + // should cancel out (RHS = LHS * p) so as to satisfy the loading-unloading conditions. plastic_dilation->dilation_lhs_term[i] = dilation_lhs_term; if (dilation_rhs_term - dilation_lhs_term * in.pressure[i] > 0) plastic_dilation->dilation_rhs_term[i] = dilation_rhs_term;