[GeoMechanicsApplication] Extend ApplyCPhiReductionProcess to use Mohr-Coulomb constitutive model#14085
[GeoMechanicsApplication] Extend ApplyCPhiReductionProcess to use Mohr-Coulomb constitutive model#14085markelov208 wants to merge 12 commits intomasterfrom
Conversation
WPK4FEM
left a comment
There was a problem hiding this comment.
Hi Gennady,
Generally you have made the internal MC model availably for C Phi reduction. I think its good to use the names of the allowed constitutive laws for discrimination in the if, else if conditions and then do things to the parameters. The integration test files can be shrunk somewhat, by removing information that is not going to be used ( I may well be the cause of this myself as you probably started from existing files for the new tests )
I hope that Anne or Richard also will have a look.
Thank you, Wijtze Pieter
| if (r_properties.Has(GEO_COHESION)) { | ||
| check_properties.Check(GEO_COHESION); | ||
| check_properties.Check(GEO_FRICTION_ANGLE); | ||
| } else { | ||
| check_properties.CheckAvailability(UMAT_PARAMETERS); | ||
| check_properties.Check(INDEX_OF_UMAT_PHI_PARAMETER, 1, | ||
| static_cast<int>(r_properties[UMAT_PARAMETERS].size())); | ||
| check_properties.Check(INDEX_OF_UMAT_C_PARAMETER, 1, | ||
| static_cast<int>(r_properties[UMAT_PARAMETERS].size())); | ||
| } |
There was a problem hiding this comment.
GEO_COHESION may be there due to a request for capacity output. I think that the if and the else if condition should use the constitutive law to discriminate. So check for the MohrCoulomb ( continuum and interface law ) and the UDSM law, and then check the properties of their parameters.
There was a problem hiding this comment.
Thank you for the info. Now it checks for UDSM model and else for others.
| p_new_properties->SetValue(GEO_COHESION, ReducedC); | ||
| } else { | ||
| // Overwrite C and Phi in the UMAT_PARAMETERS | ||
| auto Umat_parameters = r_properties[UMAT_PARAMETERS]; |
There was a problem hiding this comment.
umat_parameters is a local variable starting with lower case according to the stylesheet.
| const auto& r_properties = rElement.GetProperties(); | ||
| Properties::Pointer p_new_properties = Kratos::make_shared<Properties>(r_properties); | ||
|
|
||
| if (r_properties.Has(GEO_FRICTION_ANGLE)) { |
There was a problem hiding this comment.
Also here its probably better to distinguish based on the constitutive law.
There was a problem hiding this comment.
Agreed, now it is like for Check function
| "SATURATED_SATURATION" : 1.0, | ||
| "K0_MAIN_DIRECTION" : 1, | ||
| "K0_VALUE_XX" : 0.42642356364895390389196808717384, | ||
| "K0_VALUE_YY" : 0.42642356364895390389196808717384, |
There was a problem hiding this comment.
The K0 main direction is 1 ( Y direction ). Then the K0_VALUE_YY is not really used, but interpreted as 1. If possible remove K0_VALUE_YY, otherwise please set it to 1.
The values for XX and ZZ are a surprise too. In the next stage the material has a friction angle of 30 deg. That would give a K0 = 1 - sin 30 = 0.5
There was a problem hiding this comment.
Now K0_VALUE_YY=1. the angle is 35 degs, not 30 degs.
| "rayleigh_k": 0.0, | ||
| "rayleigh_m": 0.0, | ||
| "reduction_factor": 0.5, |
There was a problem hiding this comment.
for a quasistatic analysis, Rayleigh parameters are not used.
| "plane_output": [], | ||
| "nodal_results": ["DISPLACEMENT"] | ||
| }, | ||
| "point_data_configuration": [] |
There was a problem hiding this comment.
the empty point_data_configuration can probably be removed.
| "active": [true,true,true], | ||
| "is_fixed": [true,false,true], |
There was a problem hiding this comment.
Please set the Z components to false
| "model_part_name": "PorousDomain.All_Nodes", | ||
| "out_of_plane_direction": 2, | ||
| "second_reference_coordinate": [ 40.0, -10.0, 0.0 ], | ||
| "specific_weight": 10000.0, |
There was a problem hiding this comment.
conflicting with the water density in the material parameters.
| "active": [true,true,true], | ||
| "is_fixed": [true,true,true], |
There was a problem hiding this comment.
Please set the Z components to false.
|
|
||
| KRATOS_EXPECT_EXCEPTION_IS_THROWN( | ||
| (ApplyCPhiReductionProcess{model, parameters}.ExecuteInitializeSolutionStep()), | ||
| (ApplyCPhiReductionProcess{model, parameters}.Check()), |
There was a problem hiding this comment.
can the ExecuteInitializeSolutionStep really be omitted?
There was a problem hiding this comment.
Yes, because I moved checks from various runtime functions to Check. ExecuteInitializeSolutionStep was used here just to check the input.
markelov208
left a comment
There was a problem hiding this comment.
Hi Wijtze Pieter, many thanks for the thorough review.
|
|
||
| KRATOS_EXPECT_EXCEPTION_IS_THROWN( | ||
| (ApplyCPhiReductionProcess{model, parameters}.ExecuteInitializeSolutionStep()), | ||
| (ApplyCPhiReductionProcess{model, parameters}.Check()), |
There was a problem hiding this comment.
Yes, because I moved checks from various runtime functions to Check. ExecuteInitializeSolutionStep was used here just to check the input.
| if (r_properties.Has(GEO_COHESION)) { | ||
| check_properties.Check(GEO_COHESION); | ||
| check_properties.Check(GEO_FRICTION_ANGLE); | ||
| } else { | ||
| check_properties.CheckAvailability(UMAT_PARAMETERS); | ||
| check_properties.Check(INDEX_OF_UMAT_PHI_PARAMETER, 1, | ||
| static_cast<int>(r_properties[UMAT_PARAMETERS].size())); | ||
| check_properties.Check(INDEX_OF_UMAT_C_PARAMETER, 1, | ||
| static_cast<int>(r_properties[UMAT_PARAMETERS].size())); | ||
| } |
There was a problem hiding this comment.
Thank you for the info. Now it checks for UDSM model and else for others.
| p_new_properties->SetValue(GEO_COHESION, ReducedC); | ||
| } else { | ||
| // Overwrite C and Phi in the UMAT_PARAMETERS | ||
| auto Umat_parameters = r_properties[UMAT_PARAMETERS]; |
| const auto& r_properties = rElement.GetProperties(); | ||
| Properties::Pointer p_new_properties = Kratos::make_shared<Properties>(r_properties); | ||
|
|
||
| if (r_properties.Has(GEO_FRICTION_ANGLE)) { |
There was a problem hiding this comment.
Agreed, now it is like for Check function
| "SATURATED_SATURATION" : 1.0, | ||
| "K0_MAIN_DIRECTION" : 1, | ||
| "K0_VALUE_XX" : 0.42642356364895390389196808717384, | ||
| "K0_VALUE_YY" : 0.42642356364895390389196808717384, |
There was a problem hiding this comment.
Now K0_VALUE_YY=1. the angle is 35 degs, not 30 degs.
| "desired_iterations": 4, | ||
| "max_radius_factor": 10.0, | ||
| "min_radius_factor": 0.1, |
| "plane_output": [], | ||
| "nodal_results": ["DISPLACEMENT"] | ||
| }, | ||
| "point_data_configuration": [] |
| "active": [true,true,true], | ||
| "is_fixed": [true,false,true], |
| "model_part_name": "PorousDomain.All_Nodes", | ||
| "out_of_plane_direction": 2, | ||
| "second_reference_coordinate": [ 40.0, -10.0, 0.0 ], | ||
| "specific_weight": 10000.0, |
| "active": [true,true,true], | ||
| "is_fixed": [true,true,true], |
📝 Description
A brief description of the PR.