diff --git a/kratos.gid/apps/MPM/app.json b/kratos.gid/apps/MPM/app.json
index bc699c40a..f3cc2b3db 100644
--- a/kratos.gid/apps/MPM/app.json
+++ b/kratos.gid/apps/MPM/app.json
@@ -42,7 +42,8 @@
"unique_names": {
"parts": "MPMParts",
"nodal_conditions": "MPMNodalConditions",
- "conditions": "MPMLoads"
+ "conditions": "MPMLoads",
+ "initial_conditions": "MPMInitialConditions"
},
"write": {
"coordinates": "all",
diff --git a/kratos.gid/apps/MPM/examples/CantileverBeam.tcl b/kratos.gid/apps/MPM/examples/CantileverBeam.tcl
index ce4fcd84c..4b0fc76a1 100644
--- a/kratos.gid/apps/MPM/examples/CantileverBeam.tcl
+++ b/kratos.gid/apps/MPM/examples/CantileverBeam.tcl
@@ -153,8 +153,8 @@ proc ::MPM::examples::CantileverBeam::TreeAssignation2D {args} {
# Solution strategy parameters
spdAux::SetValueOnTreeItem v "0.01" MPTimeParameters DeltaTime
spdAux::SetValueOnTreeItem v "10" MPTimeParameters EndTime
- spdAux::SetValueOnTreeItem v "wtep" GiDOptions OutputControlType
- spdAux::SetValueOnTreeItem v "0.1" GiDOptions OutputDeltaTime
- spdAux::SetValueOnTreeItem v "time" VtkOptions OutputControlType
- spdAux::SetValueOnTreeItem v "0.1" VtkOptions OutputDeltaTime
+ spdAux::SetValueOnTreeItem v "step" GiDOptions OutputControlType
+ spdAux::SetValueOnTreeItem v "1" GiDOptions OutputDeltaTime
+ spdAux::SetValueOnTreeItem v "step" VtkOptions OutputControlType
+ spdAux::SetValueOnTreeItem v "1" VtkOptions OutputDeltaTime
}
diff --git a/kratos.gid/apps/MPM/examples/FallingSandBall.tcl b/kratos.gid/apps/MPM/examples/FallingSandBall.tcl
index ea02008e6..778ab1274 100644
--- a/kratos.gid/apps/MPM/examples/FallingSandBall.tcl
+++ b/kratos.gid/apps/MPM/examples/FallingSandBall.tcl
@@ -149,8 +149,8 @@ proc ::MPM::examples::FallingSandBall::TreeAssignation2D {args} {
# Solution strategy parameters
spdAux::SetValueOnTreeItem v "0.005" MPTimeParameters DeltaTime
spdAux::SetValueOnTreeItem v "2" MPTimeParameters EndTime
- spdAux::SetValueOnTreeItem v "time" GiDOptions OutputControlType
- spdAux::SetValueOnTreeItem v "0.02" GiDOptions OutputDeltaTime
- spdAux::SetValueOnTreeItem v "time" VtkOptions OutputControlType
- spdAux::SetValueOnTreeItem v "0.02" VtkOptions OutputDeltaTime
+ spdAux::SetValueOnTreeItem v "step" GiDOptions OutputControlType
+ spdAux::SetValueOnTreeItem v "4" GiDOptions OutputDeltaTime
+ spdAux::SetValueOnTreeItem v "step" VtkOptions OutputControlType
+ spdAux::SetValueOnTreeItem v "4" VtkOptions OutputDeltaTime
}
diff --git a/kratos.gid/apps/MPM/examples/GranularFlow.tcl b/kratos.gid/apps/MPM/examples/GranularFlow.tcl
index ada892092..1f9730a43 100644
--- a/kratos.gid/apps/MPM/examples/GranularFlow.tcl
+++ b/kratos.gid/apps/MPM/examples/GranularFlow.tcl
@@ -152,8 +152,8 @@ proc ::MPM::examples::GranularFlow::TreeAssignation2D {args} {
# Solution strategy parameters
spdAux::SetValueOnTreeItem v "0.00005" MPTimeParameters DeltaTime
spdAux::SetValueOnTreeItem v "2" MPTimeParameters EndTime
- spdAux::SetValueOnTreeItem v "time" GiDOptions OutputControlType
- spdAux::SetValueOnTreeItem v "0.01" GiDOptions OutputDeltaTime
- spdAux::SetValueOnTreeItem v "time" VtkOptions OutputControlType
- spdAux::SetValueOnTreeItem v "0.01" VtkOptions OutputDeltaTime
+ spdAux::SetValueOnTreeItem v "step" GiDOptions OutputControlType
+ spdAux::SetValueOnTreeItem v "200" GiDOptions OutputDeltaTime
+ spdAux::SetValueOnTreeItem v "step" VtkOptions OutputControlType
+ spdAux::SetValueOnTreeItem v "200" VtkOptions OutputDeltaTime
}
diff --git a/kratos.gid/apps/MPM/examples/examples.tcl b/kratos.gid/apps/MPM/examples/examples.tcl
index c9eafdaef..d18121a02 100644
--- a/kratos.gid/apps/MPM/examples/examples.tcl
+++ b/kratos.gid/apps/MPM/examples/examples.tcl
@@ -10,4 +10,4 @@ proc ::MPM::examples::ErasePreviousIntervals { } {
foreach int [$root selectNodes "$interval_base/blockdata\[@n='Interval'\]"] {
if {[$int @name] ni [list Initial Total Custom1]} {$int delete}
}
-}
\ No newline at end of file
+}
diff --git a/kratos.gid/apps/MPM/write/write.tcl b/kratos.gid/apps/MPM/write/write.tcl
index 4210306c7..36859d3a1 100644
--- a/kratos.gid/apps/MPM/write/write.tcl
+++ b/kratos.gid/apps/MPM/write/write.tcl
@@ -13,6 +13,7 @@ proc MPM::write::Init { } {
SetAttribute parts_un [::MPM::GetUniqueName parts]
SetAttribute nodal_conditions_un [::MPM:::GetUniqueName nodal_conditions]
SetAttribute conditions_un [::MPM::GetUniqueName conditions]
+ SetAttribute initial_conditions_un [::MPM::GetUniqueName initial_conditions]
SetAttribute writeCoordinatesByGroups [::MPM::GetWriteProperty coordinates]
SetAttribute main_launch_file [::MPM::GetAttribute main_launch_file]
diff --git a/kratos.gid/apps/MPM/write/writeProjectParameters.tcl b/kratos.gid/apps/MPM/write/writeProjectParameters.tcl
index 07a7702b5..c934ed292 100644
--- a/kratos.gid/apps/MPM/write/writeProjectParameters.tcl
+++ b/kratos.gid/apps/MPM/write/writeProjectParameters.tcl
@@ -36,21 +36,20 @@ proc ::MPM::write::getParametersDict { } {
}
# Pressure dofs
- set check_list [list "MPMUpdatedLagrangianUP2D" "MPMUpdatedLagrangianUP3D"]
- foreach elem $check_list {
+ foreach elem [MPM::write::GetMixedUPElements] {
if {$elem in [MPM::write::GetUsedElements Name]} {
dict set project_parameters_dict solver_settings pressure_dofs true
set active_stab [write::getValue STStratParams ActivateStabilization]
if {$active_stab eq "Off"} {
dict set project_parameters_dict solver_settings stabilization "none"
} else {
- dict set project_parameters_dict solver_settings stabilization "ppp"
+ set stab_type [write::getValue STStratParams stabilization]
+ dict set project_parameters_dict solver_settings stabilization $stab_type
}
dict unset project_parameters_dict solver_settings ActivateStabilization
break
} else {
dict set project_parameters_dict solver_settings pressure_dofs false
- dict unset project_parameters_dict solver_settings activate_stabilization
dict unset project_parameters_dict solver_settings stabilization
}
}
@@ -71,13 +70,14 @@ proc ::MPM::write::getParametersDict { } {
set solverSettingsDict [dict merge $solverSettingsDict [write::getSolversParametersDict MPM] ]
dict lappend solverSettingsDict auxiliary_variables_list RAYLEIGH_ALPHA
dict set project_parameters_dict solver_settings $solverSettingsDict
-
+
# Move slip to constraints
set slip_process_list [list ]
set new_load_process_list [list ]
set load_process_list [dict get $project_parameters_dict processes loads_process_list]
foreach load $load_process_list {
if {[dict get $load python_module] eq "apply_mpm_slip_boundary_process"} {
+ set load [MPM::write::CleanSlipBoundaryProcess $load]
lappend slip_process_list $load
} else {
lappend new_load_process_list $load
@@ -85,6 +85,14 @@ proc ::MPM::write::getParametersDict { } {
}
dict set project_parameters_dict processes loads_process_list $new_load_process_list
dict set project_parameters_dict processes list_other_processes $slip_process_list
+
+ # Initial Conditions
+ set previous_mpn [write::GetConfigurationAttribute model_part_name]
+ write::SetConfigurationAttribute model_part_name MPM_Material
+ set initial_conditions_list [write::getConditionsParametersDict [GetAttribute initial_conditions_un] "Nodal"]
+ dict set project_parameters_dict processes initial_conditions_processes $initial_conditions_list
+ #dict set project_parameters_dict processes initial_conditions_processes $initial_conditions_list Parameteres model_part_name MPM_Material
+ write::SetConfigurationAttribute model_part_name $previous_mpn
# Gravity
set activate_gravity [write::getValue ActivateGravity]
@@ -103,6 +111,86 @@ proc ::MPM::write::getParametersDict { } {
dict set project_parameters_dict processes gravity [list $gravity_dict]
}
+ # Body acceleration
+ set activate_body_acceleration [write::getValue ActivateBodyAcceleration]
+ if {$activate_body_acceleration eq "On"} {
+ set body_acceleration_dict [dict create ]
+ dict set body_acceleration_dict python_module assign_body_acceleration_to_material_point_process
+ dict set body_acceleration_dict kratos_module "KratosMultiphysics.MPMApplication"
+ dict set body_acceleration_dict process_name AssignBodyAccelerationToMaterialPointProcess
+ set body_acceleration_parameters_dict [dict create ]
+ dict set body_acceleration_parameters_dict model_part_name MPM_Material
+ dict set body_acceleration_parameters_dict variable_name MP_VOLUME_ACCELERATION
+ dict set body_acceleration_parameters_dict modulus [write::getValue MPMBodyAcceleration modulus]
+ dict set body_acceleration_parameters_dict component [MPM::write::GetBodyAccelerationComponent]
+ dict set body_acceleration_parameters_dict set_initial_mp_acceleration [MPM::write::GetBodyAccelerationInitialFlag]
+ dict set body_acceleration_dict Parameters $body_acceleration_parameters_dict
+ set list_other_processes [dict get $project_parameters_dict processes list_other_processes]
+ lappend list_other_processes $body_acceleration_dict
+ dict set project_parameters_dict processes list_other_processes $list_other_processes
+ }
+
+
+ # Tracking of mp points
+ lassign [write::getValue MPTracking ActivateTracking] track
+ if {$track eq "On"} {
+ set tracking_dict [dict create ]
+ dict set tracking_dict python_module mpm_point_output_process
+ dict set tracking_dict kratos_module "KratosMultiphysics.MPMApplication"
+ dict set tracking_dict process_name MPMPointOutputProcess
+ set tracking_parameters_dict [dict create ]
+ dict set tracking_parameters_dict model_part_name MPM_Material
+ lassign [write::getValue MPTracking position] dx dy dz
+ dict set tracking_parameters_dict position [list [expr $dx] [expr $dy] [expr $dz]]
+ lassign [write::getValue MPTracking interval] t0 tf
+ dict set tracking_parameters_dict interval [list [expr $t0] [expr $tf]]
+ lassign [write::getValue MPTracking output_press] press
+ if {$press eq "Yes" && [MPM::write::UsesMixedUPElements]} {
+ dict set tracking_parameters_dict output_pressure true
+ } else {
+ dict set tracking_parameters_dict output_pressure false
+ }
+ dict set tracking_parameters_dict print_format [write::getValue MPTracking print_format]
+ dict set tracking_parameters_dict write_tracking_output_file true
+ set output_file_settings_dict [dict create ]
+ dict set output_file_settings_dict file_name "MP_tracking.dat"
+ dict set tracking_parameters_dict output_file_settings $output_file_settings_dict
+ dict set tracking_dict Parameters $tracking_parameters_dict
+ dict set project_parameters_dict processes mp_tracking [list $tracking_dict]
+ }
+
+
+
+ # Tracking of Grid points
+ lassign [write::getValue GridTracking ActivateTrackingGrid] track
+ if {$track eq "On"} {
+ set tracking_dict [dict create ]
+ dict set tracking_dict python_module point_output_process
+ dict set tracking_dict kratos_module "KratosMultiphysics"
+ dict set tracking_dict process_name PointOutputProcess
+ set tracking_parameters_dict [dict create ]
+ dict set tracking_parameters_dict model_part_name Background_Grid
+ lassign [write::getValue GridTracking positionGrid] dx dy dz
+ dict set tracking_parameters_dict position [list [expr $dx] [expr $dy] [expr $dz]]
+ lassign [write::getValue GridTracking intervalGrid] t0 tf
+ dict set tracking_parameters_dict interval [list [expr $t0] [expr $tf]]
+
+ dict set tracking_parameters_dict print_format [write::getValue GridTracking print_formatGrid]
+ dict set tracking_parameters_dict entity_type element
+ dict set tracking_parameters_dict search_configuration initial
+ set grid_tracking_output_variables [list "DISPLACEMENT" "VELOCITY"]
+ lassign [write::getValue GridTracking output_pressGrid] press
+ if {$press eq "Yes" && [MPM::write::UsesMixedUPElements]} {
+ lappend grid_tracking_output_variables "PRESSURE"
+ }
+ dict set tracking_parameters_dict output_variables $grid_tracking_output_variables
+ set output_file_settings_dict [dict create ]
+ dict set output_file_settings_dict file_name "Grid_point_tracking.dat"
+ dict set tracking_parameters_dict output_file_settings $output_file_settings_dict
+ dict set tracking_dict Parameters $tracking_parameters_dict
+ dict set project_parameters_dict processes grid_point_tracking [list $tracking_dict]
+ }
+
# Output processes
dict set project_parameters_dict output_processes [MPM::write::GetOutputProcessesList]
@@ -211,9 +299,18 @@ proc ::MPM::write::GetOutputProcessesList { } {
dict unset project_parameters_dict output_processes vtk_output
dict unset grid_output_configuration_dict Parameters gauss_point_results
- # Append the fluid and solid output processes to the output processes list
- lappend vtk_output_processes_list $grid_output_configuration_dict
- lappend vtk_output_processes_list $body_output_configuration_dict
+ # Append only the VTK output processes selected in Results > Vtk-Output.
+ set vtk_output_processes_list [list]
+ set vtk_print_option [write::getValue VtkOptions PrintOption]
+ if {$vtk_print_option eq ""} {
+ set vtk_print_option "body"
+ }
+ if {$vtk_print_option eq "grid" || $vtk_print_option eq "both"} {
+ lappend vtk_output_processes_list $grid_output_configuration_dict
+ }
+ if {$vtk_print_option eq "body" || $vtk_print_option eq "both"} {
+ lappend vtk_output_processes_list $body_output_configuration_dict
+ }
dict set output_process vtk_output_processes $vtk_output_processes_list
@@ -271,10 +368,61 @@ proc ::MPM::write::GetOutputProcessesList { } {
dict set output_process mpm_energy_output [list $energy_dict]
}
+ # Height output
+ lassign [write::getValue HeightOutput EnableHeightOutput] height_output
+ if {$height_output eq "Yes"} {
+ set height_dict [dict create ]
+ dict set height_dict python_module mpm_particle_height_output_process
+ dict set height_dict kratos_module "KratosMultiphysics.MPMApplication"
+ dict set height_dict process_name MPMParticleHeightOutputProcess
+
+ set height_parameters_dict [dict create ]
+ dict set height_parameters_dict model_part_name "MPM_Material"
+ dict set height_parameters_dict background_grid_model_part_name "Background_Grid"
+ dict set height_parameters_dict sensor_positions [MPM::write::GetHeightSensorPositions]
+ lassign [write::getValue HeightOptions MeasuringDirection] dx dy dz
+ dict set height_parameters_dict measuring_direction [list [expr $dx] [expr $dy] [expr $dz]]
+ dict set height_parameters_dict search_radius_factor [expr [write::getValue HeightOptions SearchRadiusFactor]]
+ dict set height_parameters_dict print_format [write::getValue HeightOptions PrintFormat]
+
+ set output_file_settings_dict [dict create ]
+ dict set output_file_settings_dict file_name [write::getValue HeightOutputFileSettings FileName]
+ dict set height_parameters_dict output_file_settings $output_file_settings_dict
+
+ dict set height_dict Parameters $height_parameters_dict
+ dict set output_process height_output_process [list $height_dict]
+ }
+
return $output_process
}
+proc ::MPM::write::GetHeightSensorPositions { } {
+ set sensor_positions [list]
+ set number_of_sensors [write::getValue HeightSensors NumberOfSensors]
+ if {$number_of_sensors eq ""} {
+ set number_of_sensors 1
+ }
+ for {set i 1} {$i <= $number_of_sensors} {incr i} {
+ lassign [write::getValue HeightSensors SensorPosition$i] dx dy dz
+ lappend sensor_positions [list [expr $dx] [expr $dy] [expr $dz]]
+ }
+ return $sensor_positions
+}
+
+proc ::MPM::write::GetMixedUPElements { } {
+ return [list "MPMUpdatedLagrangianUP2D" "MPMUpdatedLagrangianUP3D"]
+}
+
+proc ::MPM::write::UsesMixedUPElements { } {
+ foreach elem [MPM::write::GetMixedUPElements] {
+ if {$elem in [MPM::write::GetUsedElements Name]} {
+ return true
+ }
+ }
+ return false
+}
+
proc ::MPM::write::getModelersParametersList { old_modelers } {
set body_groups [MPM::write::GetPartsGroupsNames Body]
@@ -327,5 +475,53 @@ proc ::MPM::write::writeParametersEvent { } {
write::WriteJSON [getParametersDict]
}
+proc ::MPM::write::CleanSlipBoundaryProcess { slip_process_dict } {
+ if {![dict exists $slip_process_dict Parameters]} {
+ return $slip_process_dict
+ }
+ set friction "Off"
+ if {[dict exists $slip_process_dict Parameters Friction]} {
+ set friction [dict get $slip_process_dict Parameters Friction]
+ dict unset slip_process_dict Parameters Friction
+ }
+ if {$friction ne "On"} {
+ foreach parameter_name [list friction_coefficient tangential_penalty_factor option] {
+ if {[dict exists $slip_process_dict Parameters $parameter_name]} {
+ dict unset slip_process_dict Parameters $parameter_name
+ }
+ }
+ return $slip_process_dict
+ }
+
+ if {[dict exists $slip_process_dict Parameters option]} {
+ set option [dict get $slip_process_dict Parameters option]
+ if {$option eq "" || $option eq "none"} {
+ dict unset slip_process_dict Parameters option
+ }
+ }
+
+ return $slip_process_dict
+}
+
+proc ::MPM::write::GetBodyAccelerationComponent { } {
+ set component [list ]
+ foreach direction [list X Y Z] {
+ set selector [write::getValue MPMBodyAcceleration selector_component_$direction]
+ if {$selector eq "ByFunction"} {
+ lappend component [write::getValue MPMBodyAcceleration function_component_$direction]
+ } else {
+ lappend component [expr [write::getValue MPMBodyAcceleration value_component_$direction]]
+ }
+ }
+ return $component
+}
+
+proc ::MPM::write::GetBodyAccelerationInitialFlag { } {
+ set initial_acceleration [write::getValue MPMBodyAcceleration InitialAcceleration]
+ if {$initial_acceleration eq "On"} {
+ return true
+ }
+ return false
+}
diff --git a/kratos.gid/apps/MPM/xml/BodyAcceleration.spd b/kratos.gid/apps/MPM/xml/BodyAcceleration.spd
new file mode 100644
index 000000000..005bb0406
--- /dev/null
+++ b/kratos.gid/apps/MPM/xml/BodyAcceleration.spd
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/kratos.gid/apps/MPM/xml/BoundaryConditions.spd b/kratos.gid/apps/MPM/xml/BoundaryConditions.spd
index c33eca7ec..a8cd99315 100644
--- a/kratos.gid/apps/MPM/xml/BoundaryConditions.spd
+++ b/kratos.gid/apps/MPM/xml/BoundaryConditions.spd
@@ -1,5 +1,5 @@
-
-
+
+
diff --git a/kratos.gid/apps/MPM/xml/Conditions.xml b/kratos.gid/apps/MPM/xml/Conditions.xml
index f59bab02e..ec2515371 100644
--- a/kratos.gid/apps/MPM/xml/Conditions.xml
+++ b/kratos.gid/apps/MPM/xml/Conditions.xml
@@ -118,6 +118,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/kratos.gid/apps/MPM/xml/ConstitutiveLaws.xml b/kratos.gid/apps/MPM/xml/ConstitutiveLaws.xml
index 27c9bd31a..0a0ca7958 100644
--- a/kratos.gid/apps/MPM/xml/ConstitutiveLaws.xml
+++ b/kratos.gid/apps/MPM/xml/ConstitutiveLaws.xml
@@ -139,6 +139,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -242,7 +266,6 @@
-
@@ -251,4 +274,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/kratos.gid/apps/MPM/xml/InitialConditions.spd b/kratos.gid/apps/MPM/xml/InitialConditions.spd
new file mode 100644
index 000000000..a91ce3578
--- /dev/null
+++ b/kratos.gid/apps/MPM/xml/InitialConditions.spd
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/kratos.gid/apps/MPM/xml/Loads.spd b/kratos.gid/apps/MPM/xml/Loads.spd
new file mode 100644
index 000000000..6485615ac
--- /dev/null
+++ b/kratos.gid/apps/MPM/xml/Loads.spd
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/kratos.gid/apps/MPM/xml/Main.spd b/kratos.gid/apps/MPM/xml/Main.spd
index 3d237ffa4..4a1efde91 100644
--- a/kratos.gid/apps/MPM/xml/Main.spd
+++ b/kratos.gid/apps/MPM/xml/Main.spd
@@ -2,6 +2,7 @@
+
diff --git a/kratos.gid/apps/MPM/xml/NodalConditions.xml b/kratos.gid/apps/MPM/xml/NodalConditions.xml
index 20d196c69..0a5b77f17 100644
--- a/kratos.gid/apps/MPM/xml/NodalConditions.xml
+++ b/kratos.gid/apps/MPM/xml/NodalConditions.xml
@@ -4,12 +4,14 @@
-
+
-
+
+
+
diff --git a/kratos.gid/apps/MPM/xml/NonConformingBoundaryConditions.spd b/kratos.gid/apps/MPM/xml/NonConformingBoundaryConditions.spd
new file mode 100644
index 000000000..9143b4828
--- /dev/null
+++ b/kratos.gid/apps/MPM/xml/NonConformingBoundaryConditions.spd
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/kratos.gid/apps/MPM/xml/Processes.xml b/kratos.gid/apps/MPM/xml/Processes.xml
index c9dbd5bd1..d5b90d6f6 100644
--- a/kratos.gid/apps/MPM/xml/Processes.xml
+++ b/kratos.gid/apps/MPM/xml/Processes.xml
@@ -11,8 +11,37 @@
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/kratos.gid/apps/MPM/xml/Procs.spd b/kratos.gid/apps/MPM/xml/Procs.spd
index ed10ed442..bc10dc0d6 100644
--- a/kratos.gid/apps/MPM/xml/Procs.spd
+++ b/kratos.gid/apps/MPM/xml/Procs.spd
@@ -1,12 +1,6 @@
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
+
@@ -40,6 +40,7 @@
+
@@ -50,6 +51,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/kratos.gid/apps/MPM/xml/SolutionStrategy.spd b/kratos.gid/apps/MPM/xml/SolutionStrategy.spd
index 7006a6400..68c4ec101 100644
--- a/kratos.gid/apps/MPM/xml/SolutionStrategy.spd
+++ b/kratos.gid/apps/MPM/xml/SolutionStrategy.spd
@@ -8,10 +8,11 @@
-
-
+
+
+
diff --git a/kratos.gid/apps/MPM/xml/Strategies.xml b/kratos.gid/apps/MPM/xml/Strategies.xml
index 58c2d46b9..a8f67d245 100644
--- a/kratos.gid/apps/MPM/xml/Strategies.xml
+++ b/kratos.gid/apps/MPM/xml/Strategies.xml
@@ -1,6 +1,6 @@
-
+
@@ -29,7 +29,7 @@
-
+
diff --git a/kratos.gid/apps/MPM/xml/XmlController.tcl b/kratos.gid/apps/MPM/xml/XmlController.tcl
index dbfc401e6..834fbbc40 100644
--- a/kratos.gid/apps/MPM/xml/XmlController.tcl
+++ b/kratos.gid/apps/MPM/xml/XmlController.tcl
@@ -46,17 +46,28 @@ proc MPM::xml::Init { } {
}
-
-proc MPM::xml::MultiAppEvent {args} {
- if {$args eq "init"} {
- spdAux::parseRoutes
- spdAux::ConvertAllUniqueNames ST MPM
- }
+proc ::MPM::xml::ProcGetSolutionStrategiesMPM { domNode args } {
+ set names ""
+ set pnames ""
+ set solutionType [get_domnode_attribute [$domNode selectNodes [spdAux::getRoute STSoluType]] v]
+ set Sols [::Model::GetSolutionStrategies [list "SolutionType" $solutionType] ]
+ set ids [list ]
+ foreach ss $Sols {
+ lappend ids [$ss getName]
+ append names [$ss getName] ","
+ append pnames [$ss getName] "," [$ss getPublicName] ","
+ }
+ set names [string range $names 0 end-1]
+ set pnames [string range $pnames 0 end-1]
+
+ $domNode setAttribute values $names
+ set dv [lindex $ids 0]
+ if {[$domNode getAttribute v] eq ""} {$domNode setAttribute v $dv}
+ if {[$domNode getAttribute v] ni $ids} {$domNode setAttribute v $dv}
+ #spdAux::RequestRefresh
+ return $pnames
}
-proc MPM::xml::getUniqueName {name} {
- return MPM${name}
-}
proc ::MPM::xml::ProcCheckNodalConditionStateMPM {domNode args} {
return [MPM::xml::CheckNodalConditionStateById [$domNode @n] $domNode]
@@ -87,6 +98,17 @@ proc MPM::xml::CheckNodalConditionStateById {conditionId domNode} {
return "normal"
}
+proc MPM::xml::MultiAppEvent {args} {
+ if {$args eq "init"} {
+ spdAux::parseRoutes
+ spdAux::ConvertAllUniqueNames ST MPM
+ }
+}
+
+proc MPM::xml::getUniqueName {name} {
+ return MPM${name}
+}
+
proc MPM::xml::CustomTree { args } {
# spdAux::SetValueOnTreeItem v "time" Results OutputControlType
@@ -114,7 +136,7 @@ proc MPM::xml::ProcCheckGeometry {domNode args} {
proc MPM::xml::ProcCheckActivateStabilizationState {domNode args} {
set ret "hidden"
- set up_mixed UpdatedLagrangianUP$::Model::SpatialDimension
+ set up_mixed MPMUpdatedLagrangianUP$::Model::SpatialDimension
set used_elements [::MPM::write::GetUsedElements Name]
if {$up_mixed in $used_elements} {
set ret "normal"
@@ -132,6 +154,48 @@ proc MPM::xml::ProcCheckStabilizationState {domNode args} {
return $ret
}
+proc MPM::xml::ProcCheckGridTrackingPressureState {domNode args} {
+ set tracking_state [write::getValue GridTracking ActivateTrackingGrid]
+ if {$tracking_state ne "On"} {
+ return "hidden"
+ }
+
+ set used_elements [::MPM::write::GetUsedElements Name]
+ foreach up_mixed [list MPMUpdatedLagrangianUP2D MPMUpdatedLagrangianUP3D] {
+ if {$up_mixed in $used_elements} {
+ return "normal"
+ }
+ }
+ return "hidden"
+}
+
+proc MPM::xml::ProcCheckMPTrackingPressureState {domNode args} {
+ set tracking_state [write::getValue MPTracking ActivateTracking]
+ if {$tracking_state ne "On"} {
+ return "hidden"
+ }
+
+ set used_elements [::MPM::write::GetUsedElements Name]
+ foreach up_mixed [list MPMUpdatedLagrangianUP2D MPMUpdatedLagrangianUP3D] {
+ if {$up_mixed in $used_elements} {
+ return "normal"
+ }
+ }
+ return "hidden"
+}
+
+proc MPM::xml::ProcCheckHeightSensorState {domNode args} {
+ set sensor_index [lindex $args 0]
+ set number_of_sensors [write::getValue HeightSensors NumberOfSensors]
+ if {$number_of_sensors eq ""} {
+ set number_of_sensors 1
+ }
+ if {$sensor_index <= $number_of_sensors} {
+ return "normal"
+ }
+ return "hidden"
+}
+
proc MPM::xml::UsesMixedUPElements { } {
foreach elem [::MPM::write::GetUsedElements Name] {
if {$elem in [list MPMUpdatedLagrangianUP2D MPMUpdatedLagrangianUP3D]} {
@@ -157,6 +221,10 @@ proc MPM::xml::ProcCheckNodalConditionOutputState {domNode args} {
return "hidden"
}
+ if {$outputId eq "REACTION"} {
+ $domNode setAttribute v No
+ }
+
return [MPM::xml::CheckNodalConditionStateById $conditionId $domNode]
}
diff --git a/kratos.gid/apps/Structural/xml/Strategies.xml b/kratos.gid/apps/Structural/xml/Strategies.xml
index c61617adc..31218d8e6 100644
--- a/kratos.gid/apps/Structural/xml/Strategies.xml
+++ b/kratos.gid/apps/Structural/xml/Strategies.xml
@@ -103,4 +103,4 @@
-
\ No newline at end of file
+
diff --git a/kratos.gid/scripts/Writing/WriteProjectParameters.tcl b/kratos.gid/scripts/Writing/WriteProjectParameters.tcl
index 104737bf9..c4500e93a 100644
--- a/kratos.gid/scripts/Writing/WriteProjectParameters.tcl
+++ b/kratos.gid/scripts/Writing/WriteProjectParameters.tcl
@@ -733,4 +733,4 @@ proc write::GetModelPartNameFromParentTree { group {stage ""} } {
incr safety
}
return $modelpart_name
-}
\ No newline at end of file
+}