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 c50d643f3..b831cf036 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,7 +70,7 @@ 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 ]
@@ -85,6 +84,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 +110,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 +298,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
@@ -236,10 +332,96 @@ proc ::MPM::write::GetOutputProcessesList { } {
dict set output_process save_restart_process [list $restart_dict]
}
+
+ # Energy output
+ lassign [write::getValue EnergyOutput EnableEnergyOutput] energy_output
+ if {$energy_output eq "Yes"} {
+ set energy_dict [dict create ]
+ dict set energy_dict python_module mpm_write_energy_output_process
+ dict set energy_dict kratos_module "KratosMultiphysics.MPMApplication"
+ dict set energy_dict process_name MPMWriteEnergyOutputProcess
+
+ set energy_parameters_dict [dict create ]
+ dict set energy_parameters_dict model_part_name "MPM_Material"
+ set energy_output_control [write::getValue EnergyOptions OutputControlType]
+ dict set energy_parameters_dict output_control_type $energy_output_control
+ if {$energy_output_control eq "time"} {
+ dict set energy_parameters_dict output_interval [write::getValue EnergyOptions OutputDeltaTime]
+ } else {
+ dict set energy_parameters_dict output_interval [write::getValue EnergyOptions OutputDeltaStep]
+ }
+ dict set energy_parameters_dict print_format [write::getValue EnergyOptions PrintFormat]
+
+ set output_file_settings_dict [dict create ]
+ set output_path_value [write::getValue OutputFileSettings OutputPath]
+ # If OutputPath is empty, use "." (current folder), otherwise use the provided value
+ if {$output_path_value eq ""} {
+ set output_path_value "."
+ }
+ dict set output_file_settings_dict output_path [string map {} $output_path_value]
+ dict set output_file_settings_dict file_name [write::getValue OutputFileSettings FileName]
+ dict set output_file_settings_dict file_extension [write::getValue OutputFileSettings FileExtension]
+ dict set energy_parameters_dict output_file_settings $output_file_settings_dict
+
+ dict set energy_dict Parameters $energy_parameters_dict
+ 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]
@@ -291,3 +473,24 @@ proc ::MPM::write::getModelersParametersList { old_modelers } {
proc ::MPM::write::writeParametersEvent { } {
write::WriteJSON [getParametersDict]
}
+
+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/Gravity.spd b/kratos.gid/apps/MPM/xml/Gravity.spd
index afb66767d..2530396f3 100644
--- a/kratos.gid/apps/MPM/xml/Gravity.spd
+++ b/kratos.gid/apps/MPM/xml/Gravity.spd
@@ -1,11 +1,9 @@
-
-
-
-
+
+
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 63b5747fe..545cdab76 100644
--- a/kratos.gid/apps/MPM/xml/NodalConditions.xml
+++ b/kratos.gid/apps/MPM/xml/NodalConditions.xml
@@ -1,10 +1,18 @@
-
+
+
+
+
+
+
+
-
+
+
-
+
+
+
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..ac79f0136 100644
--- a/kratos.gid/apps/MPM/xml/Processes.xml
+++ b/kratos.gid/apps/MPM/xml/Processes.xml
@@ -14,5 +14,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/kratos.gid/apps/MPM/xml/Procs.spd b/kratos.gid/apps/MPM/xml/Procs.spd
index 962b02097..bc10dc0d6 100644
--- a/kratos.gid/apps/MPM/xml/Procs.spd
+++ b/kratos.gid/apps/MPM/xml/Procs.spd
@@ -1,9 +1,9 @@
-
+
@@ -36,4 +36,40 @@
]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/kratos.gid/apps/MPM/xml/Results.spd b/kratos.gid/apps/MPM/xml/Results.spd
index 7f90bf664..b481e4609 100644
--- a/kratos.gid/apps/MPM/xml/Results.spd
+++ b/kratos.gid/apps/MPM/xml/Results.spd
@@ -9,7 +9,7 @@
-
+
@@ -40,6 +40,7 @@
+
@@ -49,6 +50,60 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -61,4 +116,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 707ebc6f7..834fbbc40 100644
--- a/kratos.gid/apps/MPM/xml/XmlController.tcl
+++ b/kratos.gid/apps/MPM/xml/XmlController.tcl
@@ -46,6 +46,57 @@ proc MPM::xml::Init { } {
}
+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::ProcCheckNodalConditionStateMPM {domNode args} {
+ return [MPM::xml::CheckNodalConditionStateById [$domNode @n] $domNode]
+}
+
+proc MPM::xml::CheckNodalConditionStateById {conditionId domNode} {
+ set parts_un STParts
+ if {[spdAux::getRoute $parts_un] ne ""} {
+ set condition [Model::getNodalConditionbyId $conditionId]
+ set cnd_dim [$condition getAttribute WorkingSpaceDimension]
+ if {$cnd_dim ne "" && $cnd_dim ne $Model::SpatialDimension} {
+ return "hidden"
+ }
+ set elems [$domNode selectNodes "[spdAux::getRoute $parts_un]/condition/group/value\[@n='Element'\]"]
+ set elemnames [list]
+ foreach elem $elems {
+ lappend elemnames [$elem @v]
+ }
+ set elemnames [lsort -unique $elemnames]
+
+ set solutionType [get_domnode_attribute [$domNode selectNodes [spdAux::getRoute STSoluType]] v]
+ set params [list analysis_type $solutionType]
+ if {[::Model::CheckElementsNodalCondition $conditionId $elemnames $params]} {
+ return "normal"
+ }
+ return "hidden"
+ }
+ return "normal"
+}
proc MPM::xml::MultiAppEvent {args} {
if {$args eq "init"} {
@@ -63,6 +114,14 @@ proc MPM::xml::CustomTree { args } {
# spdAux::SetValueOnTreeItem v "time" Results OutputControlType
# spdAux::SetValueOnTreeItem values "time" Results OutputControlType
spdAux::SetValueOnTreeItem v No NodalResults PARTITION_INDEX
+ spdAux::SetValueOnTreeItem v No NodalResults REACTION
+ spdAux::SetValueOnTreeItem state {[CheckNodalConditionOutputStateMPM DISPLACEMENT]} NodalResults REACTION
+ if {[MPM::xml::UsesMixedUPElements]} {
+ spdAux::SetValueOnTreeItem v Yes NodalResults PRESSURE
+ } else {
+ spdAux::SetValueOnTreeItem v No NodalResults PRESSURE
+ }
+ spdAux::SetValueOnTreeItem state {[CheckNodalConditionOutputStateMPM DISPLACEMENT]} NodalResults PRESSURE
spdAux::SetValueOnTreeItem v "LinearSolversApplication.sparse_lu" MPMimplicitlinear_solver_settings Solver
}
@@ -77,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"
@@ -94,3 +153,90 @@ 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]} {
+ return 1
+ }
+ }
+ return 0
+}
+
+proc MPM::xml::ProcCheckNodalConditionOutputState {domNode args} {
+ set conditionId [lindex $args 0]
+ set outputId [$domNode @n]
+
+ if {![::Model::CheckNodalConditionOutputState $conditionId $outputId]} {
+ return "hidden"
+ }
+
+ if {$outputId eq "PRESSURE"} {
+ if {[MPM::xml::UsesMixedUPElements]} {
+ $domNode setAttribute v Yes
+ return "normal"
+ }
+ return "hidden"
+ }
+
+ if {$outputId eq "REACTION"} {
+ $domNode setAttribute v No
+ }
+
+ return [MPM::xml::CheckNodalConditionStateById $conditionId $domNode]
+}
+
+proc MPM::xml::ProcElementOutputState {domNode args} {
+ set outputId [$domNode @n]
+ if {$outputId eq "MP_PRESSURE"} {
+ if {[MPM::xml::UsesMixedUPElements]} {
+ $domNode setAttribute v Yes
+ return "normal"
+ }
+ return "hidden"
+ }
+
+ return [spdAux::ProcElementOutputState $domNode $args]
+}
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
+}