From 3e908bb33193cafb9ed434181b2c5b905a77aa48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20G=C3=A1rate?= Date: Mon, 9 Oct 2023 21:30:04 +0200 Subject: [PATCH 01/16] typo in example --- kratos.gid/apps/GeoMechanics/examples/FirstExample.tcl | 2 +- kratos.gid/apps/GeoMechanics/write/write.tcl | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/kratos.gid/apps/GeoMechanics/examples/FirstExample.tcl b/kratos.gid/apps/GeoMechanics/examples/FirstExample.tcl index ba949eff4..ce465ce3b 100644 --- a/kratos.gid/apps/GeoMechanics/examples/FirstExample.tcl +++ b/kratos.gid/apps/GeoMechanics/examples/FirstExample.tcl @@ -154,7 +154,7 @@ proc ::GeoMechanics::examples::FirstExample::TreeAssignation {args} { # Top Pressure GiD_Groups clone Load Total GiD_Groups edit parent Total Load - spdAux::AddIntervalGroup Body "Load//Total" + spdAux::AddIntervalGroup Load "Load//Total" GiD_Groups edit state "Load//Total" hidden GiD_Groups edit color "Load" "#ff2548" GiD_Groups edit color "Load//Total" "#ff2548" diff --git a/kratos.gid/apps/GeoMechanics/write/write.tcl b/kratos.gid/apps/GeoMechanics/write/write.tcl index c3f692125..93bdb8b62 100644 --- a/kratos.gid/apps/GeoMechanics/write/write.tcl +++ b/kratos.gid/apps/GeoMechanics/write/write.tcl @@ -59,7 +59,7 @@ proc ::GeoMechanics::write::writeModelPartEvent { } { write::initWriteConfiguration [GetAttributes] if { [GetAttribute write_mdpa_mode] == "geometries" } { - write::writeModelPartFileAsGeometries + ::GeoMechanics::write::writeModelPartFileAsGeometries } else { write::writeModelPartFileOld } From 59d46a361649c556a43cc53f660a5928e55e4911 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20G=C3=A1rate?= Date: Mon, 9 Oct 2023 22:13:55 +0200 Subject: [PATCH 02/16] assign colors to groups --- .../GeoMechanics/examples/FirstExample.tcl | 66 +++++++++++++++---- 1 file changed, 55 insertions(+), 11 deletions(-) diff --git a/kratos.gid/apps/GeoMechanics/examples/FirstExample.tcl b/kratos.gid/apps/GeoMechanics/examples/FirstExample.tcl index ce465ce3b..47a87744a 100644 --- a/kratos.gid/apps/GeoMechanics/examples/FirstExample.tcl +++ b/kratos.gid/apps/GeoMechanics/examples/FirstExample.tcl @@ -59,15 +59,18 @@ proc ::GeoMechanics::examples::FirstExample::AssignGroups {args} { GiD_Groups create Clay_after_excavation GiD_EntitiesGroups assign Clay_after_excavation surfaces 2 + GiD_Groups edit color Clay_after_excavation "#1d78ff" GiD_Groups create Excavated GiD_EntitiesGroups assign Excavated surfaces 1 + GiD_Groups edit color Excavated "#6e4aff" GiD_Groups create Load GiD_EntitiesGroups assign Load lines 8 GiD_Groups create Body GiD_EntitiesGroups assign Body surfaces {1 2} + GiD_Groups edit color Body "#995e05" GiD_Groups create Hydrostatic_load_in_sloot GiD_EntitiesGroups assign Hydrostatic_load_in_sloot lines {4 5 6} @@ -117,8 +120,6 @@ proc ::GeoMechanics::examples::FirstExample::TreeAssignation {args} { GiD_Groups edit parent Total Bottom spdAux::AddIntervalGroup Bottom "Bottom//Total" GiD_Groups edit state "Bottom//Total" hidden - GiD_Groups edit color "Bottom" "#25ff48" - GiD_Groups edit color "Bottom//Total" "#25ff48" set displacement [spdAux::getRoute "GEOMNodalConditions" $stage]/condition\[@n='DISPLACEMENT'\] set displacement_node [customlib::AddConditionGroupOnXPath $displacement "Bottom//Total"] $displacement_node setAttribute ov line @@ -130,8 +131,6 @@ proc ::GeoMechanics::examples::FirstExample::TreeAssignation {args} { GiD_Groups edit parent Total Side_sliders spdAux::AddIntervalGroup Side_sliders "Side_sliders//Total" GiD_Groups edit state "Side_sliders//Total" hidden - GiD_Groups edit color "Side_sliders" "#ff2548" - GiD_Groups edit color "Side_sliders//Total" "#ff2548" set displacement [spdAux::getRoute "GEOMNodalConditions" $stage]/condition\[@n='DISPLACEMENT'\] set displacement_node [customlib::AddConditionGroupOnXPath $displacement "Side_sliders//Total"] $displacement_node setAttribute ov line @@ -143,34 +142,79 @@ proc ::GeoMechanics::examples::FirstExample::TreeAssignation {args} { GiD_Groups edit parent Total Body spdAux::AddIntervalGroup Body "Body//Total" GiD_Groups edit state "Body//Total" hidden - GiD_Groups edit color "Body" "#ff2548" - GiD_Groups edit color "Body//Total" "#ff2548" set gravity [spdAux::getRoute "GEOMLoads" $stage]/condition\[@n='SelfWeight2D'\] set gravity_node [customlib::AddConditionGroupOnXPath $gravity "Body//Total"] $gravity_node setAttribute ov surface set props [list modulus 9.81 value_direction_Y -1.0 Interval Total] spdAux::SetValuesOnBaseNode $gravity_node $props + + # Stage 2 + ::GeoMechanics::xml::NewStage "Stage 2" + set stage [$root selectNodes ".//container\[@n='stages'\]/blockdata\[@name = 'Stage 2'\]"] + # Top Pressure GiD_Groups clone Load Total GiD_Groups edit parent Total Load spdAux::AddIntervalGroup Load "Load//Total" GiD_Groups edit state "Load//Total" hidden - GiD_Groups edit color "Load" "#ff2548" - GiD_Groups edit color "Load//Total" "#ff2548" set pressure [spdAux::getRoute "GEOMLoads" $stage]/condition\[@n='LinePressure2D'\] set pressure_node [customlib::AddConditionGroupOnXPath $pressure "Load//Total"] $pressure_node setAttribute ov line set props [list value 5000 Interval Total] spdAux::SetValuesOnBaseNode $pressure_node $props + # Stage 3 + ::GeoMechanics::xml::NewStage "Stage 3" + set stage [$root selectNodes ".//container\[@n='stages'\]/blockdata\[@name = 'Stage 3'\]"] + + # Remove body to split into excavated and clay + gid_groups_conds::delete ".//container\[@n='stages'\]/blockdata\[@name = 'Stage 3'\]/container\[@n = 'Parts']/condition/group" + gid_groups_conds::delete ".//container\[@n='stages'\]/blockdata\[@name = 'Stage 3'\]/container\[@n = 'Loads']/condition\[@n='SelfWeight2D'\]/group" + # Parts + set parts [spdAux::getRoute "GEOMParts" $stage]/condition\[@n='Parts_GeoSteadyState'\] + set body_node [customlib::AddConditionGroupOnXPath $parts Clay_after_excavation] + set props [list YOUNG_MODULUS 1000 POISSON_RATIO 0.3] + spdAux::SetValuesOnBaseNode $body_node $props + set parts [spdAux::getRoute "GEOMParts" $stage]/condition\[@n='Parts_GeoSteadyState'\] + set body_node [customlib::AddConditionGroupOnXPath $parts Excavated] + set props [list YOUNG_MODULUS 1000 POISSON_RATIO 0.3] + spdAux::SetValuesOnBaseNode $body_node $props - # Prepare stages - ::GeoMechanics::xml::NewStage "Stage 2" - ::GeoMechanics::xml::NewStage "Stage 3" + + # Gravity + GiD_Groups clone Clay_after_excavation Total + GiD_Groups edit parent Total Clay_after_excavation + spdAux::AddIntervalGroup Body "Clay_after_excavation//Total" + GiD_Groups edit state "Clay_after_excavation//Total" hidden + set gravity [spdAux::getRoute "GEOMLoads" $stage]/condition\[@n='SelfWeight2D'\] + set gravity_node [customlib::AddConditionGroupOnXPath $gravity "Clay_after_excavation//Total"] + $gravity_node setAttribute ov surface + set props [list modulus 9.81 value_direction_Y -1.0 Interval Total] + spdAux::SetValuesOnBaseNode $gravity_node $props + + GiD_Groups clone Excavated Total + GiD_Groups edit parent Total Excavated + spdAux::AddIntervalGroup Body "Excavated//Total" + GiD_Groups edit state "Excavated//Total" hidden + set gravity [spdAux::getRoute "GEOMLoads" $stage]/condition\[@n='SelfWeight2D'\] + set gravity_node [customlib::AddConditionGroupOnXPath $gravity "Excavated//Total"] + $gravity_node setAttribute ov surface + set props [list modulus 9.81 value_direction_Y -1.0 Interval Total] + spdAux::SetValuesOnBaseNode $gravity_node $props + + + # Stage 4 ::GeoMechanics::xml::NewStage "Stage 4" + set stage [$root selectNodes ".//container\[@n='stages'\]/blockdata\[@name = 'Stage 4'\]"] + + # Remove excavated + gid_groups_conds::delete ".//container\[@n='stages'\]/blockdata\[@name = 'Stage 4'\]/container\[@n = 'Parts']/condition/group\[@n='Excavated'\]" + gid_groups_conds::delete ".//container\[@n='stages'\]/blockdata\[@name = 'Stage 4'\]/container\[@n = 'Loads']/condition\[@n='SelfWeight2D'\]/group\[@n='Excavated//Total'\]" + + spdAux::parseRoutes ::GeoMechanics::PrevStage From 7a63a1178614a109cfba5d699ad1d685c29f95c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20G=C3=A1rate?= Date: Mon, 9 Oct 2023 22:39:42 +0200 Subject: [PATCH 03/16] Move GetMatchSubModelPart to common --- .../Writing/WriteProjectParameters.tcl | 50 ++++++++++++++++++- kratos.gid/scripts/Writing/WriteStages.tcl | 3 +- 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/kratos.gid/scripts/Writing/WriteProjectParameters.tcl b/kratos.gid/scripts/Writing/WriteProjectParameters.tcl index c129c3f8f..793babdaf 100644 --- a/kratos.gid/scripts/Writing/WriteProjectParameters.tcl +++ b/kratos.gid/scripts/Writing/WriteProjectParameters.tcl @@ -621,4 +621,52 @@ proc write::GetTimeStepIntervals { {time_parameters_un ""} } { set time_step_intervals_list [lsort -real -index 0 $time_step_intervals_list] return $time_step_intervals_list -} \ No newline at end of file +} + + +# what can be element, condition +proc write::GetMatchSubModelPart { what {stage ""} } { + set model_part_basename [write::GetConfigurationAttribute model_part_name] + set entity_name element_name + if {$what == "condition"} {set entity_name condition_name} + + set elements_list [list ] + set processed_groups_list [list ] + set groups [apps::ExecuteOnCurrentXML GetListOfSubModelParts $stage] + foreach group $groups { + set good_name "" + # get the group and submodelpart name + set group_name [$group @n] + + set group_name [write::GetWriteGroupName $group_name] + if {$group_name ni $processed_groups_list} {lappend processed_groups_list $group_name} {continue} + if {$what == "condition"} {set cid [[$group parent] @n]} { + set element_node [$group selectNodes "./value\[@n='Element']"] + if {[llength $element_node] == 0} {continue} + set cid [write::getValueByNode $element_node] + } + if {$cid eq ""} {continue} + if {$what == "condition"} {set entity [::Model::getCondition $cid]} {set entity [::Model::getElement $cid]} + if {$entity eq ""} {continue} + if {$what == "condition"} { + if {[$entity getGroupBy] eq "Condition"} { + set good_name "_HIDDEN_$cid" + if {$good_name ni $processed_groups_list} {lappend processed_groups_list $good_name} {continue} + } + } + if {$good_name eq ""} {set good_name [write::transformGroupName $group_name]} + # Get the entity (element or condition) + if {[$group hasAttribute ov]} {set ov [get_domnode_attribute $group ov]} {set ov [get_domnode_attribute [$group parent] ov]} + + lassign [write::getEtype $ov $group_name] etype nnodes + + set kname [$entity getTopologyKratosName $etype $nnodes] + # If no topology present, it may be a nodal condition + if {$kname eq ""} {continue} + set pair [ dict create model_part_name $model_part_basename.$good_name $entity_name $kname] + + lappend elements_list $pair + + } + return $elements_list +} diff --git a/kratos.gid/scripts/Writing/WriteStages.tcl b/kratos.gid/scripts/Writing/WriteStages.tcl index 39466ed9f..f65c7f53c 100644 --- a/kratos.gid/scripts/Writing/WriteStages.tcl +++ b/kratos.gid/scripts/Writing/WriteStages.tcl @@ -4,7 +4,8 @@ proc ::write::getPreprocessForStage {stage {mdpaimporter ""}} { set stage_preprocess [dict create ] set operation_parameters [dict create ] dict set stage_preprocess operations [list [dict create name "user_operation.EmptyOperation" Parameters $operation_parameters]] - + dict set stage_preprocess modelers [list ] + if { $mdpaimporter ne "" } { # Get the modeler parameters set modeler [dict create name "Modelers.KratosMultiphysics.ImportMDPAModeler" Parameters $mdpaimporter] From c57e19e17977061a08744e8117d05095711267af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20G=C3=A1rate?= Date: Mon, 9 Oct 2023 22:39:51 +0200 Subject: [PATCH 04/16] Fluid use common --- .../Fluid/write/writeProjectParameters.tcl | 48 +------------------ 1 file changed, 2 insertions(+), 46 deletions(-) diff --git a/kratos.gid/apps/Fluid/write/writeProjectParameters.tcl b/kratos.gid/apps/Fluid/write/writeProjectParameters.tcl index a80ad0764..2c68f1a3e 100644 --- a/kratos.gid/apps/Fluid/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/Fluid/write/writeProjectParameters.tcl @@ -106,8 +106,8 @@ proc ::Fluid::write::UpdateModelers { projectParametersDict {stage ""} } { if {[GetAttribute write_mdpa_mode] eq "geometries"} { # Add the entities creation modeler set entities_modeler [dict create name "Modelers.KratosMultiphysics.CreateEntitiesFromGeometriesModeler"] - dict set entities_modeler "parameters" elements_list [Fluid::write::GetMatchSubModelPart element $stage] - dict set entities_modeler "parameters" conditions_list [Fluid::write::GetMatchSubModelPart condition $stage] + dict set entities_modeler "parameters" elements_list [::write::GetMatchSubModelPart element $stage] + dict set entities_modeler "parameters" conditions_list [::write::GetMatchSubModelPart condition $stage] lappend modelerts_list $entities_modeler } @@ -116,50 +116,6 @@ proc ::Fluid::write::UpdateModelers { projectParametersDict {stage ""} } { return $projectParametersDict } -# what can be element, condition -proc Fluid::write::GetMatchSubModelPart { what {stage ""} } { - set model_part_basename [write::GetConfigurationAttribute model_part_name] - set entity_name element_name - if {$what == "condition"} {set entity_name condition_name} - - set elements_list [list ] - set processed_groups_list [list ] - set groups [::Fluid::xml::GetListOfSubModelParts $stage] - foreach group $groups { - set good_name "" - # get the group and submodelpart name - set group_name [$group @n] - - set group_name [write::GetWriteGroupName $group_name] - if {$group_name ni $processed_groups_list} {lappend processed_groups_list $group_name} {continue} - if {$what == "condition"} {set cid [[$group parent] @n]} { - set element_node [$group selectNodes "./value\[@n='Element']"] - if {[llength $element_node] == 0} {continue} - set cid [write::getValueByNode $element_node] - } - if {$cid eq ""} {continue} - if {$what == "condition"} {set entity [::Model::getCondition $cid]} {set entity [::Model::getElement $cid]} - if {$entity eq ""} {continue} - if {$what == "condition"} { - if {[$entity getGroupBy] eq "Condition"} { - set good_name "_HIDDEN_$cid" - if {$good_name ni $processed_groups_list} {lappend processed_groups_list $good_name} {continue} - } - } - if {$good_name eq ""} {set good_name [write::transformGroupName $group_name]} - # Get the entity (element or condition) - if {[$group hasAttribute ov]} {set ov [get_domnode_attribute $group ov]} {set ov [get_domnode_attribute [$group parent] ov]} - - lassign [write::getEtype $ov $group_name] etype nnodes - - set kname [$entity getTopologyKratosName $etype $nnodes] - set pair [ dict create model_part_name $model_part_basename.$good_name $entity_name $kname] - - lappend elements_list $pair - - } - return $elements_list -} proc ::Fluid::write::writeParametersEvent { } { set write_parameters_mode 0 From b0f49ea41369a079cdb21bfaa379accf9777e7ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20G=C3=A1rate?= Date: Mon, 9 Oct 2023 22:40:01 +0200 Subject: [PATCH 05/16] Geo mechanics use GetMatchSubModelPart comon --- .../GeoMechanics/write/writeProjectParameters.tcl | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/kratos.gid/apps/GeoMechanics/write/writeProjectParameters.tcl b/kratos.gid/apps/GeoMechanics/write/writeProjectParameters.tcl index 7e6d8a96f..420dc275d 100644 --- a/kratos.gid/apps/GeoMechanics/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/GeoMechanics/write/writeProjectParameters.tcl @@ -44,11 +44,24 @@ proc ::GeoMechanics::write::GetSingleFileStageProjectParameters { } { set stage_content [::GeoMechanics::write::getParametersDict $stage] # In first iteration we add the mdpa importer if {$i == 0} { + # Import mdpa file set parameters_modeler [dict create input_filename [Kratos::GetModelName] model_part_name [write::GetConfigurationAttribute model_part_name]] dict set stages $stage_name stage_preprocess [::write::getPreprocessForStage $stage $parameters_modeler] + + # Add the entities creation modeler + set entities_modeler [dict create name "Modelers.KratosMultiphysics.CreateEntitiesFromGeometriesModeler"] + dict set entities_modeler "parameters" elements_list [::write::GetMatchSubModelPart element] + dict set entities_modeler "parameters" conditions_list [::write::GetMatchSubModelPart condition] + set modelerts_list [dict get $stages $stage_name stage_preprocess modelers] + lappend modelerts_list $entities_modeler + dict set stages $stage_name stage_preprocess modelers $modelerts_list + } else { dict set stages $stage_name stage_preprocess [::write::getPreprocessForStage $stage] } + + + dict set stages $stage_name stage_settings $stage_content dict set stages $stage_name stage_postprocess [::write::getPostprocessForStage $stage] incr i From 6d0ce58d490470d3e82f09b2f46152fc1352a7f5 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Wed, 11 Oct 2023 11:43:34 +0200 Subject: [PATCH 06/16] Add second example --- kratos.gid/apps/GeoMechanics/app.json | 3 +- .../GeoMechanics/examples/FirstExample.tcl | 11 +- .../GeoMechanics/examples/SecondExample.tcl | 299 ++++++++++++++++++ .../apps/GeoMechanics/examples/examples.xml | 4 + 4 files changed, 310 insertions(+), 7 deletions(-) create mode 100644 kratos.gid/apps/GeoMechanics/examples/SecondExample.tcl diff --git a/kratos.gid/apps/GeoMechanics/app.json b/kratos.gid/apps/GeoMechanics/app.json index 39f91ce27..bddc1411d 100644 --- a/kratos.gid/apps/GeoMechanics/app.json +++ b/kratos.gid/apps/GeoMechanics/app.json @@ -19,7 +19,8 @@ "controllers/Python.tcl", "controllers/PhreaticLine.tcl", "examples/examples.tcl", - "examples/FirstExample.tcl" + "examples/FirstExample.tcl", + "examples/SecondExample.tcl" ], "start_script": "::GeoMechanics::Init", "requirements": { diff --git a/kratos.gid/apps/GeoMechanics/examples/FirstExample.tcl b/kratos.gid/apps/GeoMechanics/examples/FirstExample.tcl index 47a87744a..8b49176e3 100644 --- a/kratos.gid/apps/GeoMechanics/examples/FirstExample.tcl +++ b/kratos.gid/apps/GeoMechanics/examples/FirstExample.tcl @@ -59,7 +59,7 @@ proc ::GeoMechanics::examples::FirstExample::AssignGroups {args} { GiD_Groups create Clay_after_excavation GiD_EntitiesGroups assign Clay_after_excavation surfaces 2 - GiD_Groups edit color Clay_after_excavation "#1d78ff" + GiD_Groups edit color Clay_after_excavation "#995e05" GiD_Groups create Excavated GiD_EntitiesGroups assign Excavated surfaces 1 @@ -68,10 +68,6 @@ proc ::GeoMechanics::examples::FirstExample::AssignGroups {args} { GiD_Groups create Load GiD_EntitiesGroups assign Load lines 8 - GiD_Groups create Body - GiD_EntitiesGroups assign Body surfaces {1 2} - GiD_Groups edit color Body "#995e05" - GiD_Groups create Hydrostatic_load_in_sloot GiD_EntitiesGroups assign Hydrostatic_load_in_sloot lines {4 5 6} @@ -107,7 +103,10 @@ proc ::GeoMechanics::examples::FirstExample::TreeAssignation {args} { # Parts set parts [spdAux::getRoute "GEOMParts" $stage]/condition\[@n='Parts_GeoSteadyState'\] - set body_node [customlib::AddConditionGroupOnXPath $parts Body] + set body_node [customlib::AddConditionGroupOnXPath $parts Clay_after_excavation] + set props [list YOUNG_MODULUS 1000 POISSON_RATIO 0.3] + spdAux::SetValuesOnBaseNode $body_node $props + set body_node [customlib::AddConditionGroupOnXPath $parts Excavated_clay] set props [list YOUNG_MODULUS 1000 POISSON_RATIO 0.3] spdAux::SetValuesOnBaseNode $body_node $props diff --git a/kratos.gid/apps/GeoMechanics/examples/SecondExample.tcl b/kratos.gid/apps/GeoMechanics/examples/SecondExample.tcl new file mode 100644 index 000000000..e0d856283 --- /dev/null +++ b/kratos.gid/apps/GeoMechanics/examples/SecondExample.tcl @@ -0,0 +1,299 @@ +namespace eval ::GeoMechanics::examples::SecondExample { + namespace path ::GeoMechanics::examples + Kratos::AddNamespace [namespace current] + +} + +proc ::GeoMechanics::examples::SecondExample::Init {args} { + if {![Kratos::IsModelEmpty]} { + set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" + set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] + if { $retval == "cancel" } { return } + } + Kratos::ResetModel + + DrawGeometry + AssignGroups + AssignMeshSizes + TreeAssignation + MeshGenerationOKDo 1 + + GiD_Process 'Redraw + GidUtils::UpdateWindow GROUPS + GidUtils::UpdateWindow LAYER + GiD_Process 'Zoom Frame +} + +proc ::GeoMechanics::examples::SecondExample::DrawGeometry {args} { + + Kratos::ResetModel + set layer_in_use Model + GiD_Layers create $layer_in_use + GiD_Layers edit to_use $layer_in_use + + set points [list {0 -15 0} {30 -15 0} {30 0 0} {29 0 0} {26 -3 0} {25 -3 0} {22 0 0} {20 0 0} {10 0 0} {0 0 0} ] + set model_points [list ] + foreach point $points { + lassign $point x y z + lappend model_points [GiD_Geometry create point append $layer_in_use $x $y $z] + } + + set model_lines [list ] + set initial [lindex $model_points 0] + foreach point [lrange $model_points 1 end] { + lappend model_lines [GiD_Geometry create line append stline $layer_in_use $initial $point] + set initial $point + } + lappend model_lines [GiD_Geometry create line append stline $layer_in_use $initial [lindex $model_points 0]] + lappend model_lines [GiD_Geometry create line append stline $layer_in_use 4 7] + + GiD_Process Mescape Geometry Create NurbsSurface 4 5 6 11 escape escape + GiD_Process Mescape Geometry Create NurbsSurface 1 2 10 7 8 9 3 4 5 6 escape escape + +} + +proc ::GeoMechanics::examples::SecondExample::AssignGroups {args} { + # Fluid group creation + GiD_Groups create Bottom + GiD_EntitiesGroups assign Bottom lines 1 + + GiD_Groups create Clay_after_excavation + GiD_EntitiesGroups assign Clay_after_excavation surfaces 2 + GiD_Groups edit color Clay_after_excavation "#995e05" + + GiD_Groups create Excavated + GiD_EntitiesGroups assign Excavated surfaces 1 + GiD_Groups edit color Excavated "#6e4aff" + + GiD_Groups create Load + GiD_EntitiesGroups assign Load lines 8 + + GiD_Groups create Hydrostatic_load_in_sloot + GiD_EntitiesGroups assign Hydrostatic_load_in_sloot lines {4 5 6} + + GiD_Groups create Side_sliders + GiD_EntitiesGroups assign Side_sliders lines {2 10} + +} + + +proc ::GeoMechanics::examples::SecondExample::AssignMeshSizes {args} { + +} + +proc ::GeoMechanics::examples::SecondExample::TreeAssignation {args} { + set nd $::Model::SpatialDimension + set root [customlib::GetBaseRoot] + + # Stage 1 + set stage [$root selectNodes ".//container\[@n='stages'\]/blockdata\[@name = 'Stage 1'\]"] + + # Solution type + set xpath [spdAux::getRoute "GEOMSoluType" $stage] + [[customlib::GetBaseRoot] selectNodes $xpath] setAttribute v "Quasi-static" + + # Time parameters + set parameters [list StartTime 0.0 EndTime 1.0] + set xpath [spdAux::getRoute "GEOMTimeParameters" $stage] + spdAux::SetValuesOnBasePath $xpath $parameters + + set parameters [list DeltaTime 1.0 StartTime 0] + set xpath "[spdAux::getRoute GEOMTimeParameters $stage]/container\[@n = 'TimeStep'\]/blockdata" + spdAux::SetValuesOnBasePath $xpath $parameters + + # Parts + set parts [spdAux::getRoute "GEOMParts" $stage]/condition\[@n='Parts_GeoSteadyState'\] + set body_node [customlib::AddConditionGroupOnXPath $parts Clay_after_excavation] + set props [list YOUNG_MODULUS 1000 POISSON_RATIO 0.3] + spdAux::SetValuesOnBaseNode $body_node $props + set body_node [customlib::AddConditionGroupOnXPath $parts Excavated_clay] + set props [list YOUNG_MODULUS 1000 POISSON_RATIO 0.3] + spdAux::SetValuesOnBaseNode $body_node $props + + # Phreatic line + ::GeoMechanics::xml::AddPhreaticPoint $stage 0.0 -1.0 0.0 + ::GeoMechanics::xml::AddPhreaticPoint $stage 30.0 -1.0 0.0 + + # Fix ground + GiD_Groups clone Bottom Total + GiD_Groups edit parent Total Bottom + spdAux::AddIntervalGroup Bottom "Bottom//Total" + GiD_Groups edit state "Bottom//Total" hidden + set displacement [spdAux::getRoute "GEOMNodalConditions" $stage]/condition\[@n='DISPLACEMENT'\] + set displacement_node [customlib::AddConditionGroupOnXPath $displacement "Bottom//Total"] + $displacement_node setAttribute ov line + set props [list selector_component_X ByValue value_component_X 0.0 selector_component_Y ByValue selector_component_Z Not Interval Total] + spdAux::SetValuesOnBaseNode $displacement_node $props + + # Fix sides only X + GiD_Groups clone Side_sliders Total + GiD_Groups edit parent Total Side_sliders + spdAux::AddIntervalGroup Side_sliders "Side_sliders//Total" + GiD_Groups edit state "Side_sliders//Total" hidden + set displacement [spdAux::getRoute "GEOMNodalConditions" $stage]/condition\[@n='DISPLACEMENT'\] + set displacement_node [customlib::AddConditionGroupOnXPath $displacement "Side_sliders//Total"] + $displacement_node setAttribute ov line + set props [list selector_component_X ByValue value_component_X 0.0 selector_component_Y Not selector_component_Z Not Interval Total] + spdAux::SetValuesOnBaseNode $displacement_node $props + + # Gravity + GiD_Groups clone Body Total + GiD_Groups edit parent Total Body + spdAux::AddIntervalGroup Body "Body//Total" + GiD_Groups edit state "Body//Total" hidden + set gravity [spdAux::getRoute "GEOMLoads" $stage]/condition\[@n='SelfWeight2D'\] + set gravity_node [customlib::AddConditionGroupOnXPath $gravity "Body//Total"] + $gravity_node setAttribute ov surface + set props [list modulus 9.81 value_direction_Y -1.0 Interval Total] + spdAux::SetValuesOnBaseNode $gravity_node $props + + + # Stage 2 + ::GeoMechanics::xml::NewStage "Stage 2" + set stage [$root selectNodes ".//container\[@n='stages'\]/blockdata\[@name = 'Stage 2'\]"] + + # Top Pressure + GiD_Groups clone Load Total + GiD_Groups edit parent Total Load + spdAux::AddIntervalGroup Load "Load//Total" + GiD_Groups edit state "Load//Total" hidden + set pressure [spdAux::getRoute "GEOMLoads" $stage]/condition\[@n='LinePressure2D'\] + set pressure_node [customlib::AddConditionGroupOnXPath $pressure "Load//Total"] + $pressure_node setAttribute ov line + set props [list value 5000 Interval Total] + spdAux::SetValuesOnBaseNode $pressure_node $props + + # Stage 3 + ::GeoMechanics::xml::NewStage "Stage 3" + set stage [$root selectNodes ".//container\[@n='stages'\]/blockdata\[@name = 'Stage 3'\]"] + + # Remove body to split into excavated and clay + gid_groups_conds::delete ".//container\[@n='stages'\]/blockdata\[@name = 'Stage 3'\]/container\[@n = 'Parts']/condition/group" + gid_groups_conds::delete ".//container\[@n='stages'\]/blockdata\[@name = 'Stage 3'\]/container\[@n = 'Loads']/condition\[@n='SelfWeight2D'\]/group" + + # Parts + set parts [spdAux::getRoute "GEOMParts" $stage]/condition\[@n='Parts_GeoSteadyState'\] + set body_node [customlib::AddConditionGroupOnXPath $parts Clay_after_excavation] + set props [list YOUNG_MODULUS 1000 POISSON_RATIO 0.3] + spdAux::SetValuesOnBaseNode $body_node $props + + set parts [spdAux::getRoute "GEOMParts" $stage]/condition\[@n='Parts_GeoSteadyState'\] + set body_node [customlib::AddConditionGroupOnXPath $parts Excavated] + set props [list YOUNG_MODULUS 1000 POISSON_RATIO 0.3] + spdAux::SetValuesOnBaseNode $body_node $props + + + # Gravity + GiD_Groups clone Clay_after_excavation Total + GiD_Groups edit parent Total Clay_after_excavation + spdAux::AddIntervalGroup Body "Clay_after_excavation//Total" + GiD_Groups edit state "Clay_after_excavation//Total" hidden + set gravity [spdAux::getRoute "GEOMLoads" $stage]/condition\[@n='SelfWeight2D'\] + set gravity_node [customlib::AddConditionGroupOnXPath $gravity "Clay_after_excavation//Total"] + $gravity_node setAttribute ov surface + set props [list modulus 9.81 value_direction_Y -1.0 Interval Total] + spdAux::SetValuesOnBaseNode $gravity_node $props + + GiD_Groups clone Excavated Total + GiD_Groups edit parent Total Excavated + spdAux::AddIntervalGroup Body "Excavated//Total" + GiD_Groups edit state "Excavated//Total" hidden + set gravity [spdAux::getRoute "GEOMLoads" $stage]/condition\[@n='SelfWeight2D'\] + set gravity_node [customlib::AddConditionGroupOnXPath $gravity "Excavated//Total"] + $gravity_node setAttribute ov surface + set props [list modulus 9.81 value_direction_Y -1.0 Interval Total] + spdAux::SetValuesOnBaseNode $gravity_node $props + + + # Stage 4 + ::GeoMechanics::xml::NewStage "Stage 4" + set stage [$root selectNodes ".//container\[@n='stages'\]/blockdata\[@name = 'Stage 4'\]"] + + # Remove excavated + gid_groups_conds::delete ".//container\[@n='stages'\]/blockdata\[@name = 'Stage 4'\]/container\[@n = 'Parts']/condition/group\[@n='Excavated'\]" + gid_groups_conds::delete ".//container\[@n='stages'\]/blockdata\[@name = 'Stage 4'\]/container\[@n = 'Loads']/condition\[@n='SelfWeight2D'\]/group\[@n='Excavated//Total'\]" + + + spdAux::parseRoutes + + ::GeoMechanics::PrevStage + return "" + + + # Time parameters + set parameters [list EndTime 40.0 DeltaTime 0.05] + set xpath [spdAux::getRoute "FLTimeParameters"] + + spdAux::SetValuesOnBasePath $xpath $parameters + + # Output + set parameters [list OutputControlType time OutputDeltaTime 1.0] + set xpath "[spdAux::getRoute FLResults]/container\[@n='GiDOutput'\]/container\[@n='GiDOptions'\]" + + spdAux::SetValuesOnBasePath $xpath $parameters + + # Fluid domain strategy settings + set parameters [list relative_velocity_tolerance "1e-8" absolute_velocity_tolerance "1e-10" relative_pressure_tolerance "1e-8" absolute_pressure_tolerance "1e-10" maximum_iterations "20"] + set xpath [spdAux::getRoute FLStratParams] + + spdAux::SetValuesOnBasePath $xpath $parameters + + # Structural + gid_groups_conds::setAttributesF {container[@n='FSI']/container[@n='Structural']/container[@n='StageInfo']/value[@n='SolutionType']} {v Dynamic} + + # Structural Parts + + set structParts [spdAux::getRoute "STParts"]/condition\[@n='Parts_Solid'\] + set structPartsNode [customlib::AddConditionGroupOnXPath $structParts Structure] + $structPartsNode setAttribute ov surface + set constLawNameStruc "LinearElasticPlaneStress2DLaw" + set props [list Element TotalLagrangianElement$nd ConstitutiveLaw $constLawNameStruc DENSITY 7850 YOUNG_MODULUS 206.9e9 POISSON_RATIO 0.29 THICKNESS 0.1] + spdAux::SetValuesOnBaseNode $structPartsNode $props + + # Structural Displacement + GiD_Groups clone Ground Total + GiD_Groups edit parent Total Ground + spdAux::AddIntervalGroup Ground "Ground//Total" + GiD_Groups edit state "Ground//Total" hidden + set structDisplacement {container[@n='FSI']/container[@n='Structural']/container[@n='Boundary Conditions']/condition[@n='DISPLACEMENT']} + set structDisplacementNode [customlib::AddConditionGroupOnXPath $structDisplacement Ground] + $structDisplacementNode setAttribute ov line + set props [list selector_component_X ByValue value_component_X 0.0 selector_component_Y ByValue value_component_Y 0.0 selector_component_Z ByValue value_component_Z 0.0 Interval Total] + spdAux::SetValuesOnBaseNode $structDisplacementNode $props + + # Structure domain time parameters + set parameters [list EndTime 40.0 DeltaTime 0.05] + set xpath [spdAux::getRoute STTimeParameters] + spdAux::SetValuesOnBasePath $xpath $parameters + + # Structural Interface + customlib::AddConditionGroupOnXPath "container\[@n='FSI'\]/container\[@n='Structural'\]/container\[@n='Loads'\]/condition\[@n='StructureInterface$nd'\]" InterfaceStructure + + # Structure domain output parameters + set parameters [list OutputControlType time OutputDeltaTime 1.0] + set xpath "[spdAux::getRoute STResults]/container\[@n='GiDOutput'\]/container\[@n='GiDOptions'\]" + spdAux::SetValuesOnBasePath $xpath $parameters + + # Structure Bossak scheme setting + spdAux::SetValueOnTreeItem v "bossak" STScheme + + # Structure domain strategy settings + set parameters [list echo_level 0 residual_relative_tolerance "1e-8" residual_absolute_tolerance "1e-10" max_iteration "20"] + set xpath [spdAux::getRoute STStratParams] + spdAux::SetValuesOnBasePath $xpath $parameters + + # Coupling settings + set parameters [list ParallelSolutionType OpenMP OpenMPNumberOfThreads 4] + set xpath [spdAux::getRoute "Parallelization"] + spdAux::SetValuesOnBasePath $xpath $parameters + + set parameters [list nl_tol "1e-8" nl_max_it 25] + set xpath [spdAux::getRoute FSIStratParams] + spdAux::SetValuesOnBasePath $xpath $parameters + + set parameters [list Solver Relaxation] + set xpath [spdAux::getRoute FSIPartitionedcoupling_strategy] + spdAux::SetValuesOnBasePath $xpath $parameters + + spdAux::RequestRefresh +} diff --git a/kratos.gid/apps/GeoMechanics/examples/examples.xml b/kratos.gid/apps/GeoMechanics/examples/examples.xml index 695e0b178..1d76fd889 100644 --- a/kratos.gid/apps/GeoMechanics/examples/examples.xml +++ b/kratos.gid/apps/GeoMechanics/examples/examples.xml @@ -4,5 +4,9 @@ + + + + \ No newline at end of file From fa80173f73da8d01754637f040877bf03ca09555 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20G=C3=A1rate?= Date: Wed, 18 Oct 2023 11:06:52 +0200 Subject: [PATCH 07/16] naming fixes --- .../GeoMechanics/examples/SecondExample.tcl | 47 +++++++++++++------ 1 file changed, 33 insertions(+), 14 deletions(-) diff --git a/kratos.gid/apps/GeoMechanics/examples/SecondExample.tcl b/kratos.gid/apps/GeoMechanics/examples/SecondExample.tcl index e0d856283..5dd414d2b 100644 --- a/kratos.gid/apps/GeoMechanics/examples/SecondExample.tcl +++ b/kratos.gid/apps/GeoMechanics/examples/SecondExample.tcl @@ -106,7 +106,7 @@ proc ::GeoMechanics::examples::SecondExample::TreeAssignation {args} { set body_node [customlib::AddConditionGroupOnXPath $parts Clay_after_excavation] set props [list YOUNG_MODULUS 1000 POISSON_RATIO 0.3] spdAux::SetValuesOnBaseNode $body_node $props - set body_node [customlib::AddConditionGroupOnXPath $parts Excavated_clay] + set body_node [customlib::AddConditionGroupOnXPath $parts Excavated] set props [list YOUNG_MODULUS 1000 POISSON_RATIO 0.3] spdAux::SetValuesOnBaseNode $body_node $props @@ -137,12 +137,26 @@ proc ::GeoMechanics::examples::SecondExample::TreeAssignation {args} { spdAux::SetValuesOnBaseNode $displacement_node $props # Gravity - GiD_Groups clone Body Total - GiD_Groups edit parent Total Body - spdAux::AddIntervalGroup Body "Body//Total" - GiD_Groups edit state "Body//Total" hidden + if {![GiD_Groups exists "Clay_after_excavation//Total"]} { + GiD_Groups clone Clay_after_excavation Total + GiD_Groups edit parent Total Clay_after_excavation + spdAux::AddIntervalGroup Clay_after_excavation "Clay_after_excavation//Total" + GiD_Groups edit state "Clay_after_excavation//Total" hidden + } set gravity [spdAux::getRoute "GEOMLoads" $stage]/condition\[@n='SelfWeight2D'\] - set gravity_node [customlib::AddConditionGroupOnXPath $gravity "Body//Total"] + set gravity_node [customlib::AddConditionGroupOnXPath $gravity "Clay_after_excavation//Total"] + $gravity_node setAttribute ov surface + set props [list modulus 9.81 value_direction_Y -1.0 Interval Total] + spdAux::SetValuesOnBaseNode $gravity_node $props + + if {![GiD_Groups exists "Excavated//Total"]} { + GiD_Groups clone Excavated Total + GiD_Groups edit parent Total Excavated + spdAux::AddIntervalGroup Excavated "Excavated//Total" + GiD_Groups edit state "Excavated//Total" hidden + } + set gravity [spdAux::getRoute "GEOMLoads" $stage]/condition\[@n='SelfWeight2D'\] + set gravity_node [customlib::AddConditionGroupOnXPath $gravity "Excavated//Total"] $gravity_node setAttribute ov surface set props [list modulus 9.81 value_direction_Y -1.0 Interval Total] spdAux::SetValuesOnBaseNode $gravity_node $props @@ -184,20 +198,25 @@ proc ::GeoMechanics::examples::SecondExample::TreeAssignation {args} { # Gravity - GiD_Groups clone Clay_after_excavation Total - GiD_Groups edit parent Total Clay_after_excavation - spdAux::AddIntervalGroup Body "Clay_after_excavation//Total" - GiD_Groups edit state "Clay_after_excavation//Total" hidden + if {![GiD_Groups exists "Clay_after_excavation//Total"]} { + GiD_Groups clone Clay_after_excavation Total + GiD_Groups edit parent Total Clay_after_excavation + spdAux::AddIntervalGroup Clay_after_excavation "Clay_after_excavation//Total" + GiD_Groups edit state "Clay_after_excavation//Total" hidden + } set gravity [spdAux::getRoute "GEOMLoads" $stage]/condition\[@n='SelfWeight2D'\] set gravity_node [customlib::AddConditionGroupOnXPath $gravity "Clay_after_excavation//Total"] $gravity_node setAttribute ov surface set props [list modulus 9.81 value_direction_Y -1.0 Interval Total] spdAux::SetValuesOnBaseNode $gravity_node $props - GiD_Groups clone Excavated Total - GiD_Groups edit parent Total Excavated - spdAux::AddIntervalGroup Body "Excavated//Total" - GiD_Groups edit state "Excavated//Total" hidden + + if {![GiD_Groups exists "Excavated//Total"]} { + GiD_Groups clone Excavated Total + GiD_Groups edit parent Total Excavated + spdAux::AddIntervalGroup Excavated "Excavated//Total" + GiD_Groups edit state "Excavated//Total" hidden + } set gravity [spdAux::getRoute "GEOMLoads" $stage]/condition\[@n='SelfWeight2D'\] set gravity_node [customlib::AddConditionGroupOnXPath $gravity "Excavated//Total"] $gravity_node setAttribute ov surface From 949f60dc8d00ef4382b6e331ba80ea1bfd9130e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20G=C3=A1rate?= Date: Wed, 18 Oct 2023 12:26:21 +0200 Subject: [PATCH 08/16] pressure on bottom line stage 1 --- .../apps/GeoMechanics/examples/SecondExample.tcl | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/kratos.gid/apps/GeoMechanics/examples/SecondExample.tcl b/kratos.gid/apps/GeoMechanics/examples/SecondExample.tcl index 5dd414d2b..9f943f32f 100644 --- a/kratos.gid/apps/GeoMechanics/examples/SecondExample.tcl +++ b/kratos.gid/apps/GeoMechanics/examples/SecondExample.tcl @@ -161,6 +161,19 @@ proc ::GeoMechanics::examples::SecondExample::TreeAssignation {args} { set props [list modulus 9.81 value_direction_Y -1.0 Interval Total] spdAux::SetValuesOnBaseNode $gravity_node $props + # Pressure on bottom line + if {![GiD_Groups exists "Bottom//Total"]} { + GiD_Groups clone Bottom Total + GiD_Groups edit parent Total Bottom + spdAux::AddIntervalGroup Bottom "Bottom//Total" + GiD_Groups edit state "Bottom//Total" hidden + } + set pressure [spdAux::getRoute "GEOMLoads" $stage]/condition\[@n='LinePressure2D'\] + set pressure_node [customlib::AddConditionGroupOnXPath $pressure "Bottom//Total"] + $pressure_node setAttribute ov line + set props [list value -137.34 Interval Total] + spdAux::SetValuesOnBaseNode $pressure_node $props + # Stage 2 ::GeoMechanics::xml::NewStage "Stage 2" From a73c5ea10ea62f4046e66b7b0186f9d20f2ab492 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20G=C3=A1rate?= Date: Wed, 18 Oct 2023 12:41:45 +0200 Subject: [PATCH 09/16] create water pressure as a boundary condition --- kratos.gid/apps/GeoMechanics/xml/NodalConditions.xml | 1 + kratos.gid/apps/GeoMechanics/xml/Processes.xml | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/kratos.gid/apps/GeoMechanics/xml/NodalConditions.xml b/kratos.gid/apps/GeoMechanics/xml/NodalConditions.xml index 5052ebfab..8390d1f88 100644 --- a/kratos.gid/apps/GeoMechanics/xml/NodalConditions.xml +++ b/kratos.gid/apps/GeoMechanics/xml/NodalConditions.xml @@ -1,4 +1,5 @@ + diff --git a/kratos.gid/apps/GeoMechanics/xml/Processes.xml b/kratos.gid/apps/GeoMechanics/xml/Processes.xml index 5feba3609..6481cf60a 100644 --- a/kratos.gid/apps/GeoMechanics/xml/Processes.xml +++ b/kratos.gid/apps/GeoMechanics/xml/Processes.xml @@ -12,6 +12,16 @@ + + + + + + + + + + From 1a9434f9889a1ed9dba17ab092f235c16ceef584 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20G=C3=A1rate?= Date: Wed, 18 Oct 2023 12:41:59 +0200 Subject: [PATCH 10/16] Allow the use of water pressure from elements --- kratos.gid/apps/GeoMechanics/xml/Elements.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kratos.gid/apps/GeoMechanics/xml/Elements.xml b/kratos.gid/apps/GeoMechanics/xml/Elements.xml index 3d55a7357..7df703617 100644 --- a/kratos.gid/apps/GeoMechanics/xml/Elements.xml +++ b/kratos.gid/apps/GeoMechanics/xml/Elements.xml @@ -26,6 +26,7 @@ + @@ -59,6 +60,7 @@ + From 9b330c49ca0ab5d83a21eb8a30370a7189176959 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20G=C3=A1rate?= Date: Wed, 18 Oct 2023 12:42:08 +0200 Subject: [PATCH 11/16] Use water pressure in example --- .../apps/GeoMechanics/examples/SecondExample.tcl | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/kratos.gid/apps/GeoMechanics/examples/SecondExample.tcl b/kratos.gid/apps/GeoMechanics/examples/SecondExample.tcl index 9f943f32f..8631ef591 100644 --- a/kratos.gid/apps/GeoMechanics/examples/SecondExample.tcl +++ b/kratos.gid/apps/GeoMechanics/examples/SecondExample.tcl @@ -162,16 +162,10 @@ proc ::GeoMechanics::examples::SecondExample::TreeAssignation {args} { spdAux::SetValuesOnBaseNode $gravity_node $props # Pressure on bottom line - if {![GiD_Groups exists "Bottom//Total"]} { - GiD_Groups clone Bottom Total - GiD_Groups edit parent Total Bottom - spdAux::AddIntervalGroup Bottom "Bottom//Total" - GiD_Groups edit state "Bottom//Total" hidden - } - set pressure [spdAux::getRoute "GEOMLoads" $stage]/condition\[@n='LinePressure2D'\] - set pressure_node [customlib::AddConditionGroupOnXPath $pressure "Bottom//Total"] + set pressure [spdAux::getRoute "STNodalConditions" $stage]/condition\[@n='WATER_PRESSURE'\] + set pressure_node [customlib::AddConditionGroupOnXPath $pressure "Bottom"] $pressure_node setAttribute ov line - set props [list value -137.34 Interval Total] + set props [list value -137.34] spdAux::SetValuesOnBaseNode $pressure_node $props From 0a56f4568648f54cdc92dfddcc745ccb3487ce7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20G=C3=A1rate?= Date: Wed, 18 Oct 2023 14:25:50 +0200 Subject: [PATCH 12/16] add more parameters to constitutive law --- .../GeoMechanics/xml/ConstitutiveLaws.xml | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/kratos.gid/apps/GeoMechanics/xml/ConstitutiveLaws.xml b/kratos.gid/apps/GeoMechanics/xml/ConstitutiveLaws.xml index 91879c8f0..bbb0071ab 100644 --- a/kratos.gid/apps/GeoMechanics/xml/ConstitutiveLaws.xml +++ b/kratos.gid/apps/GeoMechanics/xml/ConstitutiveLaws.xml @@ -1,14 +1,31 @@ - + + + + + + + + + + + + + + + + + From 5b159721a5c2ce86bf7c4e57b34bcc69c877eadb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20G=C3=A1rate?= Date: Wed, 18 Oct 2023 15:33:59 +0200 Subject: [PATCH 13/16] Remove intervals --- kratos.gid/apps/GeoMechanics/app.json | 2 +- .../GeoMechanics/examples/SecondExample.tcl | 127 ++++++------------ 2 files changed, 44 insertions(+), 85 deletions(-) diff --git a/kratos.gid/apps/GeoMechanics/app.json b/kratos.gid/apps/GeoMechanics/app.json index bddc1411d..9422c3616 100644 --- a/kratos.gid/apps/GeoMechanics/app.json +++ b/kratos.gid/apps/GeoMechanics/app.json @@ -30,7 +30,7 @@ "permissions": { "open_tree": true, "show_toolbar": true, - "intervals": true, + "intervals": false, "wizard": false, "stages": true }, diff --git a/kratos.gid/apps/GeoMechanics/examples/SecondExample.tcl b/kratos.gid/apps/GeoMechanics/examples/SecondExample.tcl index 8631ef591..7e61096f6 100644 --- a/kratos.gid/apps/GeoMechanics/examples/SecondExample.tcl +++ b/kratos.gid/apps/GeoMechanics/examples/SecondExample.tcl @@ -86,7 +86,8 @@ proc ::GeoMechanics::examples::SecondExample::TreeAssignation {args} { set root [customlib::GetBaseRoot] # Stage 1 - set stage [$root selectNodes ".//container\[@n='stages'\]/blockdata\[@name = 'Stage 1'\]"] + set stage_id "Stage 1" + set stage [$root selectNodes ".//container\[@n='stages'\]/blockdata\[@name = '$stage_id'\]"] # Solution type set xpath [spdAux::getRoute "GEOMSoluType" $stage] @@ -102,7 +103,7 @@ proc ::GeoMechanics::examples::SecondExample::TreeAssignation {args} { spdAux::SetValuesOnBasePath $xpath $parameters # Parts - set parts [spdAux::getRoute "GEOMParts" $stage]/condition\[@n='Parts_GeoSteadyState'\] + set parts [spdAux::getRoute "GEOMParts" $stage]/condition\[@n='Parts_GeoSmallStrain'\] set body_node [customlib::AddConditionGroupOnXPath $parts Clay_after_excavation] set props [list YOUNG_MODULUS 1000 POISSON_RATIO 0.3] spdAux::SetValuesOnBaseNode $body_node $props @@ -113,121 +114,78 @@ proc ::GeoMechanics::examples::SecondExample::TreeAssignation {args} { # Phreatic line ::GeoMechanics::xml::AddPhreaticPoint $stage 0.0 -1.0 0.0 ::GeoMechanics::xml::AddPhreaticPoint $stage 30.0 -1.0 0.0 + + # Pressure on bottom line + set pressure [spdAux::getRoute "GEOMNodalConditions" $stage]/condition\[@n='WATER_PRESSURE'\] + set pressure_node [customlib::AddConditionGroupOnXPath $pressure "Bottom"] + $pressure_node setAttribute ov line + set props [list value -137.34] + spdAux::SetValuesOnBaseNode $pressure_node $props # Fix ground - GiD_Groups clone Bottom Total - GiD_Groups edit parent Total Bottom - spdAux::AddIntervalGroup Bottom "Bottom//Total" - GiD_Groups edit state "Bottom//Total" hidden set displacement [spdAux::getRoute "GEOMNodalConditions" $stage]/condition\[@n='DISPLACEMENT'\] - set displacement_node [customlib::AddConditionGroupOnXPath $displacement "Bottom//Total"] + set displacement_node [customlib::AddConditionGroupOnXPath $displacement "Bottom"] $displacement_node setAttribute ov line - set props [list selector_component_X ByValue value_component_X 0.0 selector_component_Y ByValue selector_component_Z Not Interval Total] + set props [list selector_component_X ByValue value_component_X 0.0 selector_component_Y ByValue selector_component_Z Not] spdAux::SetValuesOnBaseNode $displacement_node $props # Fix sides only X - GiD_Groups clone Side_sliders Total - GiD_Groups edit parent Total Side_sliders - spdAux::AddIntervalGroup Side_sliders "Side_sliders//Total" - GiD_Groups edit state "Side_sliders//Total" hidden set displacement [spdAux::getRoute "GEOMNodalConditions" $stage]/condition\[@n='DISPLACEMENT'\] - set displacement_node [customlib::AddConditionGroupOnXPath $displacement "Side_sliders//Total"] + set displacement_node [customlib::AddConditionGroupOnXPath $displacement "Side_sliders"] $displacement_node setAttribute ov line - set props [list selector_component_X ByValue value_component_X 0.0 selector_component_Y Not selector_component_Z Not Interval Total] + set props [list selector_component_X ByValue value_component_X 0.0 selector_component_Y Not selector_component_Z Not] spdAux::SetValuesOnBaseNode $displacement_node $props # Gravity - if {![GiD_Groups exists "Clay_after_excavation//Total"]} { - GiD_Groups clone Clay_after_excavation Total - GiD_Groups edit parent Total Clay_after_excavation - spdAux::AddIntervalGroup Clay_after_excavation "Clay_after_excavation//Total" - GiD_Groups edit state "Clay_after_excavation//Total" hidden - } set gravity [spdAux::getRoute "GEOMLoads" $stage]/condition\[@n='SelfWeight2D'\] - set gravity_node [customlib::AddConditionGroupOnXPath $gravity "Clay_after_excavation//Total"] + set gravity_node [customlib::AddConditionGroupOnXPath $gravity "Clay_after_excavation"] $gravity_node setAttribute ov surface - set props [list modulus 9.81 value_direction_Y -1.0 Interval Total] + set props [list modulus 9.81 value_direction_Y -1.0] spdAux::SetValuesOnBaseNode $gravity_node $props - if {![GiD_Groups exists "Excavated//Total"]} { - GiD_Groups clone Excavated Total - GiD_Groups edit parent Total Excavated - spdAux::AddIntervalGroup Excavated "Excavated//Total" - GiD_Groups edit state "Excavated//Total" hidden - } set gravity [spdAux::getRoute "GEOMLoads" $stage]/condition\[@n='SelfWeight2D'\] - set gravity_node [customlib::AddConditionGroupOnXPath $gravity "Excavated//Total"] + set gravity_node [customlib::AddConditionGroupOnXPath $gravity "Excavated"] $gravity_node setAttribute ov surface - set props [list modulus 9.81 value_direction_Y -1.0 Interval Total] + set props [list modulus 9.81 value_direction_Y -1.0] spdAux::SetValuesOnBaseNode $gravity_node $props - # Pressure on bottom line - set pressure [spdAux::getRoute "STNodalConditions" $stage]/condition\[@n='WATER_PRESSURE'\] - set pressure_node [customlib::AddConditionGroupOnXPath $pressure "Bottom"] - $pressure_node setAttribute ov line - set props [list value -137.34] - spdAux::SetValuesOnBaseNode $pressure_node $props - # Stage 2 - ::GeoMechanics::xml::NewStage "Stage 2" - set stage [$root selectNodes ".//container\[@n='stages'\]/blockdata\[@name = 'Stage 2'\]"] + set stage_id "Stage 2" + ::GeoMechanics::xml::NewStage $stage_id + set stage [$root selectNodes ".//container\[@n='stages'\]/blockdata\[@name = '$stage_id'\]"] # Top Pressure - GiD_Groups clone Load Total - GiD_Groups edit parent Total Load - spdAux::AddIntervalGroup Load "Load//Total" - GiD_Groups edit state "Load//Total" hidden set pressure [spdAux::getRoute "GEOMLoads" $stage]/condition\[@n='LinePressure2D'\] - set pressure_node [customlib::AddConditionGroupOnXPath $pressure "Load//Total"] + set pressure_node [customlib::AddConditionGroupOnXPath $pressure "Load"] $pressure_node setAttribute ov line - set props [list value 5000 Interval Total] + set props [list value -5] spdAux::SetValuesOnBaseNode $pressure_node $props # Stage 3 ::GeoMechanics::xml::NewStage "Stage 3" set stage [$root selectNodes ".//container\[@n='stages'\]/blockdata\[@name = 'Stage 3'\]"] - - # Remove body to split into excavated and clay - gid_groups_conds::delete ".//container\[@n='stages'\]/blockdata\[@name = 'Stage 3'\]/container\[@n = 'Parts']/condition/group" - gid_groups_conds::delete ".//container\[@n='stages'\]/blockdata\[@name = 'Stage 3'\]/container\[@n = 'Loads']/condition\[@n='SelfWeight2D'\]/group" - - # Parts - set parts [spdAux::getRoute "GEOMParts" $stage]/condition\[@n='Parts_GeoSteadyState'\] - set body_node [customlib::AddConditionGroupOnXPath $parts Clay_after_excavation] - set props [list YOUNG_MODULUS 1000 POISSON_RATIO 0.3] - spdAux::SetValuesOnBaseNode $body_node $props - - set parts [spdAux::getRoute "GEOMParts" $stage]/condition\[@n='Parts_GeoSteadyState'\] - set body_node [customlib::AddConditionGroupOnXPath $parts Excavated] - set props [list YOUNG_MODULUS 1000 POISSON_RATIO 0.3] - spdAux::SetValuesOnBaseNode $body_node $props + # Delete the load and create another one here + gid_groups_conds::delete ".//container\[@n='stages'\]/blockdata\[@name = 'Stage 3'\]/container\[@n = 'Loads']/condition\[@n='LinePressure2D'\]/group" + set pressure [spdAux::getRoute "GEOMLoads" $stage]/condition\[@n='LinePressure2D'\] + set pressure_node [customlib::AddConditionGroupOnXPath $pressure "Load"] + $pressure_node setAttribute ov line + set props [list value -15] + spdAux::SetValuesOnBaseNode $pressure_node $props + # Gravity - if {![GiD_Groups exists "Clay_after_excavation//Total"]} { - GiD_Groups clone Clay_after_excavation Total - GiD_Groups edit parent Total Clay_after_excavation - spdAux::AddIntervalGroup Clay_after_excavation "Clay_after_excavation//Total" - GiD_Groups edit state "Clay_after_excavation//Total" hidden - } set gravity [spdAux::getRoute "GEOMLoads" $stage]/condition\[@n='SelfWeight2D'\] - set gravity_node [customlib::AddConditionGroupOnXPath $gravity "Clay_after_excavation//Total"] + set gravity_node [customlib::AddConditionGroupOnXPath $gravity "Clay_after_excavation"] $gravity_node setAttribute ov surface - set props [list modulus 9.81 value_direction_Y -1.0 Interval Total] + set props [list modulus 9.81 value_direction_Y -1.0] spdAux::SetValuesOnBaseNode $gravity_node $props - - if {![GiD_Groups exists "Excavated//Total"]} { - GiD_Groups clone Excavated Total - GiD_Groups edit parent Total Excavated - spdAux::AddIntervalGroup Excavated "Excavated//Total" - GiD_Groups edit state "Excavated//Total" hidden - } set gravity [spdAux::getRoute "GEOMLoads" $stage]/condition\[@n='SelfWeight2D'\] - set gravity_node [customlib::AddConditionGroupOnXPath $gravity "Excavated//Total"] + set gravity_node [customlib::AddConditionGroupOnXPath $gravity "Excavated"] $gravity_node setAttribute ov surface - set props [list modulus 9.81 value_direction_Y -1.0 Interval Total] + set props [list modulus 9.81 value_direction_Y -1.0] spdAux::SetValuesOnBaseNode $gravity_node $props @@ -237,8 +195,13 @@ proc ::GeoMechanics::examples::SecondExample::TreeAssignation {args} { # Remove excavated gid_groups_conds::delete ".//container\[@n='stages'\]/blockdata\[@name = 'Stage 4'\]/container\[@n = 'Parts']/condition/group\[@n='Excavated'\]" - gid_groups_conds::delete ".//container\[@n='stages'\]/blockdata\[@name = 'Stage 4'\]/container\[@n = 'Loads']/condition\[@n='SelfWeight2D'\]/group\[@n='Excavated//Total'\]" + gid_groups_conds::delete ".//container\[@n='stages'\]/blockdata\[@name = 'Stage 4'\]/container\[@n = 'Loads']/condition\[@n='SelfWeight2D'\]/group\[@n='Excavated'\]" + set excavation [spdAux::getRoute "GEOMLoads" $stage]/condition\[@n='Excavation'\] + set excavation_node [customlib::AddConditionGroupOnXPath $excavation "Excavated"] + $excavation_node setAttribute ov surface + set props [list deactivate_soil_part true] + spdAux::SetValuesOnBaseNode $excavation_node $props spdAux::parseRoutes @@ -273,18 +236,14 @@ proc ::GeoMechanics::examples::SecondExample::TreeAssignation {args} { set structPartsNode [customlib::AddConditionGroupOnXPath $structParts Structure] $structPartsNode setAttribute ov surface set constLawNameStruc "LinearElasticPlaneStress2DLaw" - set props [list Element TotalLagrangianElement$nd ConstitutiveLaw $constLawNameStruc DENSITY 7850 YOUNG_MODULUS 206.9e9 POISSON_RATIO 0.29 THICKNESS 0.1] + set props [list Element TotalLagrangianElement2D ConstitutiveLaw $constLawNameStruc DENSITY 7850 YOUNG_MODULUS 206.9e9 POISSON_RATIO 0.29 THICKNESS 0.1] spdAux::SetValuesOnBaseNode $structPartsNode $props # Structural Displacement - GiD_Groups clone Ground Total - GiD_Groups edit parent Total Ground - spdAux::AddIntervalGroup Ground "Ground//Total" - GiD_Groups edit state "Ground//Total" hidden set structDisplacement {container[@n='FSI']/container[@n='Structural']/container[@n='Boundary Conditions']/condition[@n='DISPLACEMENT']} set structDisplacementNode [customlib::AddConditionGroupOnXPath $structDisplacement Ground] $structDisplacementNode setAttribute ov line - set props [list selector_component_X ByValue value_component_X 0.0 selector_component_Y ByValue value_component_Y 0.0 selector_component_Z ByValue value_component_Z 0.0 Interval Total] + set props [list selector_component_X ByValue value_component_X 0.0 selector_component_Y ByValue value_component_Y 0.0 selector_component_Z ByValue value_component_Z 0.0] spdAux::SetValuesOnBaseNode $structDisplacementNode $props # Structure domain time parameters From 308e066db55bf8b2ecef6acd3c0f5e27d1fffb69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20G=C3=A1rate?= Date: Wed, 18 Oct 2023 15:34:11 +0200 Subject: [PATCH 14/16] minor --- kratos.gid/apps/GeoMechanics/xml/XmlController.tcl | 4 +++- kratos.gid/scripts/Applications.tcl | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/kratos.gid/apps/GeoMechanics/xml/XmlController.tcl b/kratos.gid/apps/GeoMechanics/xml/XmlController.tcl index 11dbc8457..1bc893cdf 100644 --- a/kratos.gid/apps/GeoMechanics/xml/XmlController.tcl +++ b/kratos.gid/apps/GeoMechanics/xml/XmlController.tcl @@ -10,7 +10,10 @@ proc ::GeoMechanics::xml::Init { } { Model::ForgetElements Model::getElements Elements.xml + + Model::getProcesses Processes.xml + # Set Water to false on all conditions coming from Structural Application foreach condition [Model::GetConditions] { $condition setAttribute Water False } @@ -22,7 +25,6 @@ proc ::GeoMechanics::xml::Init { } { Model::getNodalConditions NodalConditions.xml - Model::getProcesses Processes.xml # Structural strategies and schemes filter elements by ImplementedInApplication StructuralMechanicsApplication # In order to add our elements, we need to tell the schemes to accept GeoMechanicsApplication diff --git a/kratos.gid/scripts/Applications.tcl b/kratos.gid/scripts/Applications.tcl index 12f76e342..64f393532 100644 --- a/kratos.gid/scripts/Applications.tcl +++ b/kratos.gid/scripts/Applications.tcl @@ -339,6 +339,7 @@ proc apps::ActivateApp_do {app} { apps::ApplyAppPreferences $app + # If theme is dark, set the Black images dir before the normal one, so images for dark theme are loaded first if {[gid_themes::GetCurrentTheme] eq "GiD_black"} { set gid_groups_conds::imagesdirList [lsearch -all -inline -not -exact $gid_groups_conds::imagesdirList [list [file join $dir images]]] gid_groups_conds::add_images_dir [file join $dir images Black] From fb9a18c0dde407c3af235b61a8a3f49a068b7e31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20G=C3=A1rate?= Date: Wed, 18 Oct 2023 15:34:20 +0200 Subject: [PATCH 15/16] add water condition --- .../apps/GeoMechanics/xml/Conditions.xml | 31 ++++++++++--------- kratos.gid/apps/GeoMechanics/xml/Water.spd | 5 +-- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/kratos.gid/apps/GeoMechanics/xml/Conditions.xml b/kratos.gid/apps/GeoMechanics/xml/Conditions.xml index 582e496e6..6a0ea7c68 100644 --- a/kratos.gid/apps/GeoMechanics/xml/Conditions.xml +++ b/kratos.gid/apps/GeoMechanics/xml/Conditions.xml @@ -1,39 +1,40 @@ - - + + WorkingSpaceDimension="2D" LocalSpaceDimension="2D" RequiresLocalAxes="False" + ElementType="Surface" ProcessName="apply_excavation_process" VariableName="EXCAVATION" + help="Apply this over the excavated surface" units="" unit_magnitude="" Water="False"> - + + - - - + - + WorkingSpaceDimension="2D" LocalSpaceDimension="0" RequiresLocalAxes="False" + ElementType="Line" ProcessName="ApplyConstantBoundaryPhreaticLinePressureProcess" VariableName="NORMAL_CONTACT_STRESS" + help="Self weight application by means of the AssignVectorByDirectionProcess in the core" units="m/s^2" unit_magnitude="Acceleration" Water="True"> - - + + + diff --git a/kratos.gid/apps/GeoMechanics/xml/Water.spd b/kratos.gid/apps/GeoMechanics/xml/Water.spd index 132bbb386..2888775b1 100644 --- a/kratos.gid/apps/GeoMechanics/xml/Water.spd +++ b/kratos.gid/apps/GeoMechanics/xml/Water.spd @@ -1,5 +1,6 @@ - - + + + From 22aa6c6b66fdf2753c7b3593337aeea3a66bed91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20G=C3=A1rate?= Date: Wed, 18 Oct 2023 16:06:00 +0200 Subject: [PATCH 16/16] Name of example --- kratos.gid/apps/GeoMechanics/app.json | 3 +-- .../{SecondExample.tcl => Simple.tcl} | 18 ++++++++++++------ .../apps/GeoMechanics/examples/examples.xml | 6 +++--- .../apps/GeoMechanics/images/Simple.png | Bin 0 -> 1021 bytes .../apps/GeoMechanics/xml/Conditions.xml | 2 +- .../apps/GeoMechanics/xml/Processes.xml | 15 +++++++++++++-- 6 files changed, 30 insertions(+), 14 deletions(-) rename kratos.gid/apps/GeoMechanics/examples/{SecondExample.tcl => Simple.tcl} (95%) create mode 100644 kratos.gid/apps/GeoMechanics/images/Simple.png diff --git a/kratos.gid/apps/GeoMechanics/app.json b/kratos.gid/apps/GeoMechanics/app.json index 9422c3616..0f3e1c54d 100644 --- a/kratos.gid/apps/GeoMechanics/app.json +++ b/kratos.gid/apps/GeoMechanics/app.json @@ -19,8 +19,7 @@ "controllers/Python.tcl", "controllers/PhreaticLine.tcl", "examples/examples.tcl", - "examples/FirstExample.tcl", - "examples/SecondExample.tcl" + "examples/Simple.tcl" ], "start_script": "::GeoMechanics::Init", "requirements": { diff --git a/kratos.gid/apps/GeoMechanics/examples/SecondExample.tcl b/kratos.gid/apps/GeoMechanics/examples/Simple.tcl similarity index 95% rename from kratos.gid/apps/GeoMechanics/examples/SecondExample.tcl rename to kratos.gid/apps/GeoMechanics/examples/Simple.tcl index 7e61096f6..8d8ca736e 100644 --- a/kratos.gid/apps/GeoMechanics/examples/SecondExample.tcl +++ b/kratos.gid/apps/GeoMechanics/examples/Simple.tcl @@ -1,10 +1,10 @@ -namespace eval ::GeoMechanics::examples::SecondExample { +namespace eval ::GeoMechanics::examples::Simple { namespace path ::GeoMechanics::examples Kratos::AddNamespace [namespace current] } -proc ::GeoMechanics::examples::SecondExample::Init {args} { +proc ::GeoMechanics::examples::Simple::Init {args} { if {![Kratos::IsModelEmpty]} { set txt "We are going to draw the example geometry.\nDo you want to lose your previous work?" set retval [tk_messageBox -default ok -icon question -message $txt -type okcancel] @@ -24,7 +24,7 @@ proc ::GeoMechanics::examples::SecondExample::Init {args} { GiD_Process 'Zoom Frame } -proc ::GeoMechanics::examples::SecondExample::DrawGeometry {args} { +proc ::GeoMechanics::examples::Simple::DrawGeometry {args} { Kratos::ResetModel set layer_in_use Model @@ -52,7 +52,7 @@ proc ::GeoMechanics::examples::SecondExample::DrawGeometry {args} { } -proc ::GeoMechanics::examples::SecondExample::AssignGroups {args} { +proc ::GeoMechanics::examples::Simple::AssignGroups {args} { # Fluid group creation GiD_Groups create Bottom GiD_EntitiesGroups assign Bottom lines 1 @@ -77,11 +77,11 @@ proc ::GeoMechanics::examples::SecondExample::AssignGroups {args} { } -proc ::GeoMechanics::examples::SecondExample::AssignMeshSizes {args} { +proc ::GeoMechanics::examples::Simple::AssignMeshSizes {args} { } -proc ::GeoMechanics::examples::SecondExample::TreeAssignation {args} { +proc ::GeoMechanics::examples::Simple::TreeAssignation {args} { set nd $::Model::SpatialDimension set root [customlib::GetBaseRoot] @@ -202,6 +202,12 @@ proc ::GeoMechanics::examples::SecondExample::TreeAssignation {args} { $excavation_node setAttribute ov surface set props [list deactivate_soil_part true] spdAux::SetValuesOnBaseNode $excavation_node $props + + # Set excavation line stress + set hydro_load [spdAux::getRoute "GEOMWater" $stage]/condition\[@n='WaterPressure2D'\] + set hydro_load_node [customlib::AddConditionGroupOnXPath $hydro_load "Hydrostatic_load_in_sloot"] + $hydro_load_node setAttribute ov line + spdAux::parseRoutes diff --git a/kratos.gid/apps/GeoMechanics/examples/examples.xml b/kratos.gid/apps/GeoMechanics/examples/examples.xml index 1d76fd889..267a6c412 100644 --- a/kratos.gid/apps/GeoMechanics/examples/examples.xml +++ b/kratos.gid/apps/GeoMechanics/examples/examples.xml @@ -1,11 +1,11 @@ - + + diff --git a/kratos.gid/apps/GeoMechanics/images/Simple.png b/kratos.gid/apps/GeoMechanics/images/Simple.png new file mode 100644 index 0000000000000000000000000000000000000000..098912334940ad079e27c092b375791c613e051c GIT binary patch literal 1021 zcmeAS@N?(olHy`uVBq!ia0vp^DIm!lvI6;>1s;*b3=DjSL74G){tBRW=1HC|jv*CsZ|8XX3nxmns;~PY?-s81k3;;} zQt8L1dJPMga`$rk+}Rm$up`VWpsIBmQ&WSXp;S|#hPa}Oo{|vDl;}V~1E(IvihX{v zDH?|&U(K1UKKb&@_r5O=*Eokq%s#bGInqU?yCX$#qK?ueSC>s49%6zgm6V7U405=3 z>G(_Y^Ya(@@PA_#*%LEsrrXQhRX;a=lU-^X)3!LeKxlfvhBGtg%F5=f);a69$F#d{ zxwh=h8$UWfnN%FM{H!E+q%imA>jRJ3HEy2#SU&T)#{1t!#mUYZ&F7=S#hwR#n-e=n zX8tRq&FQypum3(<{&#`ZT{G+Mq`Nye|GRu9>gZ96Sw(N70ySEiSlcgUPWib}aZl#E zN9#VGiaK|0Z^!-jc^#!H+PhyZVqn!bere!!zS$)`SJW#%*t9S2pl6KJL8J0-R}ZIz z#~z7%cH#1j7e1{431aSF?ztJyGkjbqBJpzF`QGb~*PhKOceeR|t@`Y~b^UYt!=ude zBg@}Qd3mjIV3_5jslPq%zS+@jXE$!SvTB8a`o)b8;vQry$XUWTf6JrC9~|Ob7FMLL ztvi>Nb@<1e|4Nf}S3U~4!gb4ytK<#mG}gDm8$UQ@b3OjSdcK$UxvR*jdR6Y449~gi z&;9&Vag)>M=C_Rzp=Rk^Km4wF6n{$cy(0K<>*Isl_`_QFZMn8<^S;Tf%c6p&PrAr# zDI4dg_w%-v&9yzIFWe&&wyCzNUtBlaF#T1)WaB(fwND|4%X9NOeE7Fc+jRrRMhHQ%A3F+90`J<>T~^{j;?* z=6kt3E6;IYk3Y@yV^)=^XmOr~^MabK7uZTZ?ABq3|Djg6&8ldfT9uWcr0y0*S(Vcb ze>vRw=6TmEMY2qCRiGoWWzAH7ZvEA7-~F1w|I#DuTo2zfSCOvpYrnQ%?F^R diff --git a/kratos.gid/apps/GeoMechanics/xml/Processes.xml b/kratos.gid/apps/GeoMechanics/xml/Processes.xml index 6481cf60a..40787e238 100644 --- a/kratos.gid/apps/GeoMechanics/xml/Processes.xml +++ b/kratos.gid/apps/GeoMechanics/xml/Processes.xml @@ -11,13 +11,24 @@ - + - + + + + + + + + + + + +