Skip to content

Commit ebfd53a

Browse files
Merge pull request #12798 from KratosMultiphysics/servol_loading_with_periodic_boundary
[DEMApplication] [Fast] Servo-control algorithm with periodic boundaries
2 parents 5289b98 + 1b0b1af commit ebfd53a

17 files changed

Lines changed: 515 additions & 28 deletions

File tree

applications/DEMApplication/DEM_application.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ KRATOS_CREATE_VARIABLE(int, ROTATION_OPTION)
101101
KRATOS_CREATE_VARIABLE(int, VIRTUAL_MASS_OPTION)
102102
KRATOS_CREATE_VARIABLE(int, SEARCH_CONTROL)
103103
KRATOS_CREATE_VARIABLE(bool, IS_TIME_TO_PRINT)
104+
KRATOS_CREATE_VARIABLE(bool, IS_TIME_TO_UPDATE_CONTACT_ELEMENT)
104105
KRATOS_CREATE_VARIABLE(double, COORDINATION_NUMBER)
105106
KRATOS_CREATE_VARIABLE(double, CONTINUUM_SEARCH_RADIUS_AMPLIFICATION_FACTOR)
106107
KRATOS_CREATE_VARIABLE(double, MAX_AMPLIFICATION_RATIO_OF_THE_SEARCH_RADIUS)
@@ -153,6 +154,7 @@ KRATOS_CREATE_VARIABLE(bool, DELTA_OPTION)
153154
KRATOS_CREATE_VARIABLE(double, SKIN_SPHERE)
154155
KRATOS_CREATE_VARIABLE(int, PROPERTIES_ID)
155156
KRATOS_CREATE_VARIABLE(int, CONTACT_MESH_OPTION)
157+
KRATOS_CREATE_VARIABLE(int, BOUNDING_BOX_SERVO_LOADING_OPTION)
156158
KRATOS_CREATE_VARIABLE(double, MAX_NUMBER_OF_INTACT_BONDS_TO_CONSIDER_A_SPHERE_BROKEN)
157159
//KRATOS_CREATE_VARIABLE(int, FAILURE_CRITERION_OPTION)
158160
KRATOS_CREATE_VARIABLE(int, CONCRETE_TEST_OPTION)
@@ -612,6 +614,7 @@ void KratosDEMApplication::Register() {
612614
KRATOS_REGISTER_VARIABLE(VIRTUAL_MASS_OPTION)
613615
KRATOS_REGISTER_VARIABLE(SEARCH_CONTROL)
614616
KRATOS_REGISTER_VARIABLE(IS_TIME_TO_PRINT)
617+
KRATOS_REGISTER_VARIABLE(IS_TIME_TO_UPDATE_CONTACT_ELEMENT)
615618
KRATOS_REGISTER_VARIABLE(COORDINATION_NUMBER)
616619
KRATOS_REGISTER_VARIABLE(CONTINUUM_SEARCH_RADIUS_AMPLIFICATION_FACTOR)
617620
KRATOS_REGISTER_VARIABLE(MAX_AMPLIFICATION_RATIO_OF_THE_SEARCH_RADIUS)
@@ -660,6 +663,7 @@ void KratosDEMApplication::Register() {
660663
KRATOS_REGISTER_VARIABLE(SKIN_SPHERE)
661664
KRATOS_REGISTER_VARIABLE(PROPERTIES_ID)
662665
KRATOS_REGISTER_VARIABLE(CONTACT_MESH_OPTION)
666+
KRATOS_REGISTER_VARIABLE(BOUNDING_BOX_SERVO_LOADING_OPTION)
663667
KRATOS_REGISTER_VARIABLE(MAX_NUMBER_OF_INTACT_BONDS_TO_CONSIDER_A_SPHERE_BROKEN)
664668
//KRATOS_REGISTER_VARIABLE(FAILURE_CRITERION_OPTION)
665669
KRATOS_REGISTER_VARIABLE(CONCRETE_TEST_OPTION)

applications/DEMApplication/DEM_application_variables.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ namespace Kratos
6868
KRATOS_DEFINE_APPLICATION_VARIABLE(DEM_APPLICATION, int, VIRTUAL_MASS_OPTION)
6969
KRATOS_DEFINE_APPLICATION_VARIABLE(DEM_APPLICATION, int, SEARCH_CONTROL)
7070
KRATOS_DEFINE_APPLICATION_VARIABLE(DEM_APPLICATION, bool, IS_TIME_TO_PRINT)
71+
KRATOS_DEFINE_APPLICATION_VARIABLE(DEM_APPLICATION, bool, IS_TIME_TO_UPDATE_CONTACT_ELEMENT)
7172
KRATOS_DEFINE_APPLICATION_VARIABLE(DEM_APPLICATION, double, COORDINATION_NUMBER)
7273
KRATOS_DEFINE_APPLICATION_VARIABLE(DEM_APPLICATION, double, CONTINUUM_SEARCH_RADIUS_AMPLIFICATION_FACTOR)
7374
KRATOS_DEFINE_APPLICATION_VARIABLE(DEM_APPLICATION, double, MAX_AMPLIFICATION_RATIO_OF_THE_SEARCH_RADIUS)
@@ -125,6 +126,7 @@ namespace Kratos
125126

126127
KRATOS_DEFINE_APPLICATION_VARIABLE(DEM_APPLICATION, int, PROPERTIES_ID)
127128
KRATOS_DEFINE_APPLICATION_VARIABLE(DEM_APPLICATION, int, CONTACT_MESH_OPTION)
129+
KRATOS_DEFINE_APPLICATION_VARIABLE(DEM_APPLICATION, int, BOUNDING_BOX_SERVO_LOADING_OPTION)
128130
KRATOS_DEFINE_APPLICATION_VARIABLE(DEM_APPLICATION, double, MAX_NUMBER_OF_INTACT_BONDS_TO_CONSIDER_A_SPHERE_BROKEN)
129131
//KRATOS_DEFINE_APPLICATION_VARIABLE(DEM_APPLICATION, int, FAILURE_CRITERION_OPTION)
130132
KRATOS_DEFINE_APPLICATION_VARIABLE(DEM_APPLICATION, int, CONCRETE_TEST_OPTION)

applications/DEMApplication/custom_elements/spheric_particle.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -894,6 +894,11 @@ void SphericParticle::ComputeBallToBallContactForceAndMoment(SphericParticle::Pa
894894
if ((i < (int)mNeighbourElements.size()) && this->Id() < neighbour_iterator_id) {
895895
CalculateOnContactElements(i, LocalContactForce, GlobalContactForce);
896896
}
897+
} else if (r_process_info[IS_TIME_TO_UPDATE_CONTACT_ELEMENT] && r_process_info[CONTACT_MESH_OPTION] == 1) {
898+
unsigned int neighbour_iterator_id = data_buffer.mpOtherParticle->Id();
899+
if ((i < (int)mNeighbourElements.size()) && this->Id() < neighbour_iterator_id) {
900+
CalculateOnContactElements(i, LocalContactForce, GlobalContactForce);
901+
}
897902
}
898903

899904
if (r_process_info[ENERGY_CALCULATION_OPTION]){

applications/DEMApplication/custom_python/DEM_python_application.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ PYBIND11_MODULE(KratosDEMApplication,m)
7171
KRATOS_REGISTER_IN_PYTHON_VARIABLE(m, AUTOMATIC_SKIN_COMPUTATION)
7272
KRATOS_REGISTER_IN_PYTHON_VARIABLE(m, SKIN_FACTOR_RADIUS)
7373
KRATOS_REGISTER_IN_PYTHON_VARIABLE(m, IS_TIME_TO_PRINT)
74+
KRATOS_REGISTER_IN_PYTHON_VARIABLE(m, IS_TIME_TO_UPDATE_CONTACT_ELEMENT)
7475
KRATOS_REGISTER_IN_PYTHON_VARIABLE(m, COORDINATION_NUMBER)
7576
KRATOS_REGISTER_IN_PYTHON_VARIABLE(m, CONTINUUM_SEARCH_RADIUS_AMPLIFICATION_FACTOR)
7677
KRATOS_REGISTER_IN_PYTHON_VARIABLE(m, MAX_AMPLIFICATION_RATIO_OF_THE_SEARCH_RADIUS)
@@ -125,6 +126,7 @@ PYBIND11_MODULE(KratosDEMApplication,m)
125126
KRATOS_REGISTER_IN_PYTHON_VARIABLE(m, COHESIVE_GROUP)
126127
KRATOS_REGISTER_IN_PYTHON_VARIABLE(m, PROPERTIES_ID)
127128
KRATOS_REGISTER_IN_PYTHON_VARIABLE(m, CONTACT_MESH_OPTION)
129+
KRATOS_REGISTER_IN_PYTHON_VARIABLE(m, BOUNDING_BOX_SERVO_LOADING_OPTION)
128130
KRATOS_REGISTER_IN_PYTHON_VARIABLE(m, MAX_NUMBER_OF_INTACT_BONDS_TO_CONSIDER_A_SPHERE_BROKEN)
129131
//KRATOS_REGISTER_IN_PYTHON_VARIABLE(m, FAILURE_CRITERION_OPTION)
130132
KRATOS_REGISTER_IN_PYTHON_VARIABLE(m, CONCRETE_TEST_OPTION)

applications/DEMApplication/custom_strategies/strategies/explicit_solver_strategy.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -459,6 +459,9 @@ namespace Kratos {
459459
if (is_time_to_print_results && r_process_info[CONTACT_MESH_OPTION] == 1) {
460460
CreateContactElements();
461461
InitializeContactElements();
462+
}else if (r_process_info[IS_TIME_TO_UPDATE_CONTACT_ELEMENT] && r_process_info[CONTACT_MESH_OPTION] == 1) {
463+
CreateContactElements();
464+
InitializeContactElements();
462465
}
463466

464467
//RebuildPropertiesProxyPointers(mListOfSphericParticles);

0 commit comments

Comments
 (0)