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 +}