diff --git a/kratos.gid/apps/MPM/app.json b/kratos.gid/apps/MPM/app.json index 15be6fd97..5aead7bd5 100644 --- a/kratos.gid/apps/MPM/app.json +++ b/kratos.gid/apps/MPM/app.json @@ -40,7 +40,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..7f98a5003 100644 --- a/kratos.gid/apps/MPM/examples/FallingSandBall.tcl +++ b/kratos.gid/apps/MPM/examples/FallingSandBall.tcl @@ -124,6 +124,9 @@ proc ::MPM::examples::FallingSandBall::TreeAssignation2D {args} { set props [list Element GRID$nd ] spdAux::SetValuesOnBaseNode $mpm_grid_part $props + # Set Initial Conditions Off + spdAux::SetValueOnTreeItem v "Off" InitialCondition + # Fix Displacement ## Create interval subgroup GiD_Groups clone FixedDisplacement Total @@ -149,8 +152,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..d61f0d249 100644 --- a/kratos.gid/apps/MPM/examples/examples.tcl +++ b/kratos.gid/apps/MPM/examples/examples.tcl @@ -4,10 +4,13 @@ namespace eval ::MPM::examples { } + proc ::MPM::examples::ErasePreviousIntervals { } { set root [customlib::GetBaseRoot] set interval_base [spdAux::getRoute "Intervals"] 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 ed6adb166..c5e0c420f 100644 --- a/kratos.gid/apps/MPM/write/write.tcl +++ b/kratos.gid/apps/MPM/write/write.tcl @@ -14,6 +14,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] @@ -146,6 +147,9 @@ proc MPM::write::writeSubmodelparts { type } { # A Condition y a meshes-> salvo lo que no tenga topologia writeLoads + } else { + # Write the initial conditions submodelpart + write::writeNodalConditions [GetAttribute initial_conditions_un] } } diff --git a/kratos.gid/apps/MPM/write/writeProjectParameters.tcl b/kratos.gid/apps/MPM/write/writeProjectParameters.tcl index 685e9f779..1ad032b41 100644 --- a/kratos.gid/apps/MPM/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/MPM/write/writeProjectParameters.tcl @@ -1,10 +1,9 @@ # Project Parameters proc ::MPM::write::getParametersDict { } { set project_parameters_dict [Structural::write::getParametersDict] - + # Analysis stage field - dict set project_parameters_dict analysis_stage "KratosMultiphysics.MPMApplication.mpm_analysis" - + dict set project_parameters_dict analysis_stage "KratosMultiphysics.MPMApplication.particle_mechanics_analysis" # Quasi-static must be written as Quasi-static... set solutiontype [write::getValue STSoluType] dict set project_parameters_dict solver_settings solver_type $solutiontype @@ -12,38 +11,39 @@ proc ::MPM::write::getParametersDict { } { dict set project_parameters_dict solver_settings time_integration_method [write::getValue STSolStrat] dict set project_parameters_dict solver_settings scheme_type [write::getValue STcheme] } - + # Time Parameters if {$solutiontype eq "Dynamic"} { dict unset project_parameters_dict solver_settings time_stepping "time_step_table" dict set project_parameters_dict solver_settings time_stepping "time_step" [write::getValue MPTimeParameters DeltaTime] dict set project_parameters_dict problem_data start_time [write::getValue MPTimeParameters StartTime] dict set project_parameters_dict problem_data end_time [write::getValue MPTimeParameters EndTime] - } + } + # Change the model part name dict set project_parameters_dict solver_settings model_part_name MPM_Material - + # create grid_import_settings set grid_import_settings_dict [dict get $project_parameters_dict solver_settings model_import_settings] dict append grid_import_settings_dict input_filename _Grid dict set project_parameters_dict solver_settings grid_model_import_settings $grid_import_settings_dict - + # add _Body to model_import_settings set model_import_settings_dict [dict get $project_parameters_dict solver_settings model_import_settings] dict append model_import_settings_dict input_filename _Body if {[write::isBooleanTrue [write::getValue EnableRestartOutput]]} {dict set model_import_settings_dict restart_load_file_label " "} dict set project_parameters_dict solver_settings model_import_settings $model_import_settings_dict - - + + # materials file dict set project_parameters_dict solver_settings material_import_settings materials_filename [GetAttribute materials_file] - + # Axis-symmetric flag if {$::Model::SpatialDimension eq "2Da"} { dict set project_parameters_dict solver_settings axis_symmetric_flag true } - + # Pressure dofs set check_list [list "MPMUpdatedLagrangianUP2D" "MPMUpdatedLagrangianUP3D"] foreach elem $check_list { @@ -51,36 +51,36 @@ proc ::MPM::write::getParametersDict { } { 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" + 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 } } - - + + # Rotation dofs dict unset project_parameters_dict solver_settings rotation_dofs - + # Line search dict unset project_parameters_dict solver_settings line_search - + # Volumetric strain dofs dict unset project_parameters_dict solver_settings strain_dofs dict unset project_parameters_dict solver_settings volumetric_strain_dofs - + # Add the solver information set solverSettingsDict [dict get $project_parameters_dict solver_settings] 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 ] @@ -94,6 +94,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] @@ -110,20 +118,74 @@ proc ::MPM::write::getParametersDict { } { dict set gravity_parameters_dict direction [list [expr $dx] [expr $dy] [expr $dz]] dict set gravity_dict Parameters $gravity_parameters_dict dict set project_parameters_dict processes gravity [list $gravity_dict] + } + + # 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"} { + 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 + dict set tracking_parameters_dict output_variables [list "DISPLACEMENT" "VELOCITY"] + 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] - - + # REMOVE RAYLEIGH dict set project_parameters_dict solver_settings auxiliary_variables_list [list NORMAL IS_STRUCTURE] dict unset project_parameters_dict solver_settings rayleigh_alpha dict unset project_parameters_dict solver_settings rayleigh_beta - + # REMOVE use_old_stiffness_in_first_iteration dict unset project_parameters_dict solver_settings use_old_stiffness_in_first_iteration - + return $project_parameters_dict } @@ -133,8 +195,6 @@ proc write::GetResultsList { un {cnd ""} } { return [GetResultsByXPathList $xp1] } - - proc ::MPM::write::GetOutputProcessesList { } { set output_process [dict create] @@ -166,7 +226,6 @@ proc ::MPM::write::GetOutputProcessesList { } { dict set grid_output_configuration_dict Parameters output_name [dict get $project_parameters_dict solver_settings grid_model_import_settings input_filename] dict unset body_output_configuration_dict Parameters postprocess_parameters result_file_configuration nodal_results - dict unset grid_output_configuration_dict Parameters postprocess_parameters result_file_configuration gauss_point_results @@ -184,49 +243,68 @@ proc ::MPM::write::GetOutputProcessesList { } { set need_vtk [write::getValue EnableVtkOutput] if {[write::isBooleanTrue $need_vtk]} { #set vtk_options_xpath "[spdAux::getRoute $results_UN]/container\[@n='VtkOutput'\]/container\[@n='VtkOptions'\]" + set print_vtk [write::getValue VtkOptions PrintOption] + set body_output_configuration_dict [lindex [dict get $project_parameters_dict output_processes vtk_output] 0] + + dict set body_output_configuration_dict python_module particle_vtk_output_process + dict set body_output_configuration_dict kratos_module KratosMultiphysics.MPMApplication + dict set body_output_configuration_dict process_name ParticleVtkOutputProcess + dict set body_output_configuration_dict Parameters model_part_name MPM_Material + dict unset body_output_configuration_dict Parameters nodal_data_value_variables + dict unset body_output_configuration_dict Parameters element_data_value_variables + dict unset body_output_configuration_dict Parameters condition_data_value_variables + dict unset body_output_configuration_dict Parameters nodal_solution_step_data_variables + #dict unset body_output_configuration_dict Parameters output_interval + #set outputCT [getValueByXPath $vtk_options_xpath OutputControlType] + #dict set resultDict output_control_type $outputCT + #if {$outputCT eq "time"} {set frequency [getValueByXPath $vtk_options_xpath OutputDeltaTime]} {set frequency [getValueByXPath $vtk_options_xpath OutputDeltaStep]} + + + dict set body_output_configuration_dict Parameters output_path "vtk_output_Body" + dict unset body_output_configuration_dict Parameters gauss_point_variables_extrapolated_to_nodes + dict set body_output_configuration_dict Parameters gauss_point_variables_in_elements [write::GetResultsList ElementResults] + dict set project_parameters_dict output_processes body_output_process [list $body_output_configuration_dict] + set grid_output_configuration_dict [lindex [dict get $project_parameters_dict output_processes vtk_output] 0] + dict set body_output_configuration_dict python_module mpm_vtk_output_process + dict set body_output_configuration_dict kratos_module KratosMultiphysics.MPMApplication + dict set body_output_configuration_dict process_name MPMVtkOutputProcess + dict set body_output_configuration_dict Parameters model_part_name MPM_Material + dict unset body_output_configuration_dict Parameters nodal_data_value_variables + dict unset body_output_configuration_dict Parameters element_data_value_variables + dict unset body_output_configuration_dict Parameters condition_data_value_variables + dict unset body_output_configuration_dict Parameters nodal_solution_step_data_variables + #dict unset body_output_configuration_dict Parameters output_interval + #set outputCT [getValueByXPath $vtk_options_xpath OutputControlType] + #dict set resultDict output_control_type $outputCT + #if {$outputCT eq "time"} {set frequency [getValueByXPath $vtk_options_xpath OutputDeltaTime]} {set frequency [getValueByXPath $vtk_options_xpath OutputDeltaStep]} + dict set body_output_configuration_dict Parameters output_path "vtk_output_Body" + dict unset body_output_configuration_dict Parameters gauss_point_variables_extrapolated_to_nodes + dict set body_output_configuration_dict Parameters gauss_point_variables_in_elements [write::GetResultsList ElementResults] + + + dict set grid_output_configuration_dict Parameters model_part_name Background_Grid + dict unset grid_output_configuration_dict Parameters gauss_point_variables_extrapolated_to_nodes + dict unset grid_output_configuration_dict Parameters nodal_data_value_variables + dict unset grid_output_configuration_dict Parameters element_data_value_variables + dict unset grid_output_configuration_dict Parameters condition_data_value_variables + dict unset grid_output_configuration_dict Parameters gauss_point_results - set body_output_configuration_dict [lindex [dict get $project_parameters_dict output_processes vtk_output] 0] - set grid_output_configuration_dict [lindex [dict get $project_parameters_dict output_processes vtk_output] 0] - - - dict set body_output_configuration_dict python_module mpm_vtk_output_process - dict set body_output_configuration_dict kratos_module KratosMultiphysics.MPMApplication - dict set body_output_configuration_dict process_name MPMVtkOutputProcess - dict set body_output_configuration_dict Parameters model_part_name MPM_Material - dict unset body_output_configuration_dict Parameters nodal_data_value_variables - dict unset body_output_configuration_dict Parameters element_data_value_variables - dict unset body_output_configuration_dict Parameters condition_data_value_variables - dict unset body_output_configuration_dict Parameters nodal_solution_step_data_variables - #dict unset body_output_configuration_dict Parameters output_interval - #set outputCT [getValueByXPath $vtk_options_xpath OutputControlType] - #dict set resultDict output_control_type $outputCT - #if {$outputCT eq "time"} {set frequency [getValueByXPath $vtk_options_xpath OutputDeltaTime]} {set frequency [getValueByXPath $vtk_options_xpath OutputDeltaStep]} - dict set body_output_configuration_dict Parameters output_path "vtk_output_Body" - dict unset body_output_configuration_dict Parameters gauss_point_variables_extrapolated_to_nodes - dict set body_output_configuration_dict Parameters gauss_point_variables_in_elements [write::GetResultsList ElementResults] - - - dict set grid_output_configuration_dict Parameters model_part_name Background_Grid - dict unset grid_output_configuration_dict Parameters gauss_point_variables_extrapolated_to_nodes - dict unset grid_output_configuration_dict Parameters nodal_data_value_variables - dict unset grid_output_configuration_dict Parameters element_data_value_variables - dict unset grid_output_configuration_dict Parameters condition_data_value_variables - - - dict set project_parameters_dict output_processes body_output_process [list $body_output_configuration_dict] #dict set project_parameters_dict output_processes grid_output_process [list $grid_output_configuration_dict] 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 + if {$print_vtk eq "grid"} {lappend vtk_output_processes_list $grid_output_configuration_dict} + if {$print_vtk eq "body"} {lappend vtk_output_processes_list $body_output_configuration_dict} + if {$print_vtk eq "both"} {lappend vtk_output_processes_list $grid_output_configuration_dict + lappend vtk_output_processes_list $body_output_configuration_dict} + dict set output_process vtk_output_processes $vtk_output_processes_list } # Restart + set need_restart [write::getValue EnableRestartOutput] if {[write::isBooleanTrue $need_restart]} { set restart_dict [dict create ] @@ -241,9 +319,9 @@ proc ::MPM::write::GetOutputProcessesList { } { if {$restOutputCT eq "time"} {dict set restart_parameters_dict restart_save_frequency [write::getValue RestartOptions OutputDeltaTime]} {dict set restart_parameters_dict restart_save_frequency [write::getValue RestartOptions OutputDeltaStep]} dict set restart_dict Parameters $restart_parameters_dict dict set output_process save_restart_process [list $restart_dict] - - } - + + } + return $output_process } @@ -251,3 +329,6 @@ proc ::MPM::write::GetOutputProcessesList { } { proc ::MPM::write::writeParametersEvent { } { write::WriteJSON [getParametersDict] } + + + 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..ab3d98ca5 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..110cf0951 100644 --- a/kratos.gid/apps/MPM/xml/ConstitutiveLaws.xml +++ b/kratos.gid/apps/MPM/xml/ConstitutiveLaws.xml @@ -127,7 +127,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -158,6 +185,7 @@ + @@ -174,6 +202,7 @@ + @@ -207,6 +236,7 @@ + @@ -234,6 +264,7 @@ + @@ -242,7 +273,7 @@ - + @@ -251,4 +282,22 @@ + + + + + + + + + + + + + + + + + + diff --git a/kratos.gid/apps/MPM/xml/Elements.xml b/kratos.gid/apps/MPM/xml/Elements.xml index 2b525d42e..a43421e68 100644 --- a/kratos.gid/apps/MPM/xml/Elements.xml +++ b/kratos.gid/apps/MPM/xml/Elements.xml @@ -152,7 +152,6 @@ - @@ -211,5 +210,4 @@ - 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..01650422a 100644 --- a/kratos.gid/apps/MPM/xml/NodalConditions.xml +++ b/kratos.gid/apps/MPM/xml/NodalConditions.xml @@ -1,10 +1,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..eee93904f 100644 --- a/kratos.gid/apps/MPM/xml/Processes.xml +++ b/kratos.gid/apps/MPM/xml/Processes.xml @@ -1,18 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kratos.gid/apps/MPM/xml/Procs.spd b/kratos.gid/apps/MPM/xml/Procs.spd index 962b02097..2525b6871 100644 --- a/kratos.gid/apps/MPM/xml/Procs.spd +++ b/kratos.gid/apps/MPM/xml/Procs.spd @@ -1,9 +1,9 @@ - + diff --git a/kratos.gid/apps/MPM/xml/Results.spd b/kratos.gid/apps/MPM/xml/Results.spd index 7f90bf664..c0e9c4ce0 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,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/kratos.gid/apps/MPM/xml/SolutionStrategy.spd b/kratos.gid/apps/MPM/xml/SolutionStrategy.spd index 7006a6400..1139f66d4 100644 --- a/kratos.gid/apps/MPM/xml/SolutionStrategy.spd +++ b/kratos.gid/apps/MPM/xml/SolutionStrategy.spd @@ -8,8 +8,8 @@ - - + + diff --git a/kratos.gid/apps/MPM/xml/Strategies.xml b/kratos.gid/apps/MPM/xml/Strategies.xml index 2483a4d00..66c61ae95 100644 --- a/kratos.gid/apps/MPM/xml/Strategies.xml +++ b/kratos.gid/apps/MPM/xml/Strategies.xml @@ -1,8 +1,9 @@ - + + @@ -28,9 +29,10 @@ - + + diff --git a/kratos.gid/apps/MPM/xml/XmlController.tcl b/kratos.gid/apps/MPM/xml/XmlController.tcl index 707ebc6f7..68a7503da 100644 --- a/kratos.gid/apps/MPM/xml/XmlController.tcl +++ b/kratos.gid/apps/MPM/xml/XmlController.tcl @@ -4,13 +4,18 @@ namespace eval MPM::xml { } + proc MPM::xml::Init { } { # Namespace variables inicialization Model::InitVariables dir $::MPM::dir + # Import our elements Model::ForgetElements Model::getElements Elements.xml + + Model::ForgetSolutionStrategies + Model::getSolutionStrategies Strategies.xml Model::ForgetSolutionStrategies Model::getSolutionStrategies Strategies.xml @@ -46,6 +51,49 @@ 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} { + # Overwritten the base function to add Solution Type restrictions + set parts_un STParts + if {[spdAux::getRoute $parts_un] ne ""} { + set conditionId [$domNode @n] + set condition [Model::getNodalConditionbyId $conditionId] + set cnd_dim [$condition getAttribute WorkingSpaceDimension] + if {$cnd_dim ne ""} { + if {$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"} else {return "hidden"} + } {return "normal"} +} proc MPM::xml::MultiAppEvent {args} { if {$args eq "init"} { @@ -77,7 +125,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" diff --git a/kratos.gid/apps/Structural/xml/Strategies.xml b/kratos.gid/apps/Structural/xml/Strategies.xml index c61617adc..63efd263f 100644 --- a/kratos.gid/apps/Structural/xml/Strategies.xml +++ b/kratos.gid/apps/Structural/xml/Strategies.xml @@ -103,4 +103,5 @@ - \ No newline at end of file + + diff --git a/kratos.gid/scripts/Writing/WriteProjectParameters.tcl b/kratos.gid/scripts/Writing/WriteProjectParameters.tcl index 2ed2690e5..26c77d5bb 100644 --- a/kratos.gid/scripts/Writing/WriteProjectParameters.tcl +++ b/kratos.gid/scripts/Writing/WriteProjectParameters.tcl @@ -571,7 +571,7 @@ proc write::GetDefaultParametersOutputVTKDict { {appid ""} } { set outputCT [getValueByXPath $vtk_options_xpath OutputControlType] dict set resultDict output_control_type $outputCT if {$outputCT eq "time"} {set frequency [getValueByXPath $vtk_options_xpath OutputDeltaTime]} {set frequency [getValueByXPath $vtk_options_xpath OutputDeltaStep]} - dict set resultDict output_interval $frequency + dict set resultDict output_interval $frequency dict set resultDict file_format [getValueByXPath $vtk_options_xpath VtkFileFormat] dict set resultDict output_precision 7 dict set resultDict output_sub_model_parts "false" @@ -645,6 +645,7 @@ proc write::GetModelersDict { projectParametersDict {stage ""} } { + # what can be element, condition proc write::GetMatchSubModelPart { what {stage ""} } { set model_part_basename [write::GetConfigurationAttribute model_part_name] @@ -708,7 +709,6 @@ proc write::GetMatchSubModelPart { what {stage ""} } { return $elements_list } - # in the xml file, look up to find if some of the ancestors define a property modelpartname proc write::GetModelPartNameFromParentTree { group {stage ""} } { set modelpart_name "" @@ -729,4 +729,4 @@ proc write::GetModelPartNameFromParentTree { group {stage ""} } { incr safety } return $modelpart_name -} \ No newline at end of file +}