From bb3499217c8e00db469250747266a4b19559b93f Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Thu, 26 Feb 2026 10:56:15 +0100 Subject: [PATCH 01/10] mdpa geometries --- kratos.gid/apps/MPM/app.json | 2 +- kratos.gid/apps/MPM/write/write.tcl | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/kratos.gid/apps/MPM/app.json b/kratos.gid/apps/MPM/app.json index 15be6fd97..332fba2be 100644 --- a/kratos.gid/apps/MPM/app.json +++ b/kratos.gid/apps/MPM/app.json @@ -47,7 +47,7 @@ "materials_file": "ParticleMaterials.json", "properties_location": "json", "model_part_name": "Background_Grid", - "write_mdpa_mode": "entities" + "write_mdpa_mode": "geometries" }, "main_launch_file": "../../exec/MainKratos.py", "examples": "examples/examples.xml" diff --git a/kratos.gid/apps/MPM/write/write.tcl b/kratos.gid/apps/MPM/write/write.tcl index ed6adb166..3c9c1cb50 100644 --- a/kratos.gid/apps/MPM/write/write.tcl +++ b/kratos.gid/apps/MPM/write/write.tcl @@ -117,12 +117,18 @@ proc MPM::write::writeBodyElementConnectivities { } { } proc MPM::write::writeGridConnectivities { } { + set grid_elems [list GRID2D GRID3D] + set grid_groups [list] foreach gNode [MPM::write::GetPartsGroups grid node] { set elem [write::getValueByNode [$gNode selectNodes ".//value\[@n='Element'\]"] ] if {$elem in [list GRID2D GRID3D]} { - write::writeGroupElementConnectivities $gNode $elem + # write::writeGroupElementConnectivities $gNode $elem + lappend grid_groups $gNode } } + + # Write the geometries + ::write::writeGeometryConnectivities $grid_groups } proc MPM::write::writeConditions { } { From 04d05f3745f3bead882a671bd5f9e58be3b9c189 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Thu, 26 Feb 2026 16:00:26 +0100 Subject: [PATCH 02/10] split in files --- kratos.gid/apps/MPM/write/write.tcl | 58 +++---------------- kratos.gid/apps/MPM/write/writeBody.tcl | 14 +++++ kratos.gid/apps/MPM/write/writeGrid.tcl | 19 ++++++ .../scripts/Writing/WriteConditions.tcl | 34 ++++++++--- 4 files changed, 66 insertions(+), 59 deletions(-) create mode 100644 kratos.gid/apps/MPM/write/writeBody.tcl create mode 100644 kratos.gid/apps/MPM/write/writeGrid.tcl diff --git a/kratos.gid/apps/MPM/write/write.tcl b/kratos.gid/apps/MPM/write/write.tcl index 3c9c1cb50..2eb07d028 100644 --- a/kratos.gid/apps/MPM/write/write.tcl +++ b/kratos.gid/apps/MPM/write/write.tcl @@ -33,23 +33,7 @@ proc MPM::write::writeModelPartEvent { } { set filename [Kratos::GetModelName] ## Grid MPDA ## - # Headers - write::writeModelPartData - write::WriteString "Begin Properties 0" - write::WriteString "End Properties" - - # Nodal coordinates - set list_of_groups [concat [MPM::write::GetPartsGroups grid] [MPM::write::GetConditionsGroups] [MPM::write::GetNodalConditionsGroups]] - write::writeNodalCoordinatesOnGroups $list_of_groups - - # Grid element connectivities - writeGridConnectivities - - # Write conditions - writeConditions - - # Write Submodelparts - writeSubmodelparts grid + MPM::write::WriteGridMDPA write::CloseFile write::RenameFileInModel "$filename.mdpa" "${filename}_Grid.mdpa" @@ -58,18 +42,7 @@ proc MPM::write::writeModelPartEvent { } { write::OpenFile "${filename}_Body.mdpa" # Headers - write::writeModelPartData - write::WriteString "Begin Properties 0" - write::WriteString "End Properties" - - # Nodal coordinates - writeBodyNodalCoordinates - - # Body element connectivities - writeBodyElementConnectivities - - # Write Submodelparts - writeSubmodelparts particles + MPM::write::WriteBodyMDPA write::CloseFile } @@ -132,8 +105,7 @@ proc MPM::write::writeGridConnectivities { } { } proc MPM::write::writeConditions { } { - variable ConditionsDictGroupIterators - set ConditionsDictGroupIterators [::write::writeConditions [GetAttribute conditions_un] ] + write::writeGeometryConnectivities [::write::GetGroupsAssignedIn [GetAttribute conditions_un]] } proc MPM::write::writeSubmodelparts { type } { @@ -156,29 +128,13 @@ proc MPM::write::writeSubmodelparts { type } { } proc MPM::write::GetConditionsGroups { } { - set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition/group" - set condition_groups [list ] - foreach gNode [[customlib::GetBaseRoot] selectNodes $xp1] { - set group_name [get_domnode_attribute $gNode n] - set good_group_name [write::GetWriteGroupName $group_name] - if {$good_group_name ne $condition_groups} { - lappend condition_groups $good_group_name - } - } - return $condition_groups + + set groups [::write::GetGroupsNamesAssignedIn [GetAttribute conditions_un]] + return $groups } proc MPM::write::GetNodalConditionsGroups { } { - set xp1 "[spdAux::getRoute [GetAttribute nodal_conditions_un]]/condition/group" - set condition_groups [list ] - foreach gNode [[customlib::GetBaseRoot] selectNodes $xp1] { - set group_name [get_domnode_attribute $gNode n] - set good_group_name [write::GetWriteGroupName $group_name] - if {$good_group_name ne $condition_groups} { - lappend condition_groups $good_group_name - } - } - return $condition_groups + return [::write::GetGroupsNamesAssignedIn [GetAttribute nodal_conditions_un]] } proc MPM::write::writeLoads { } { diff --git a/kratos.gid/apps/MPM/write/writeBody.tcl b/kratos.gid/apps/MPM/write/writeBody.tcl new file mode 100644 index 000000000..33fc051ac --- /dev/null +++ b/kratos.gid/apps/MPM/write/writeBody.tcl @@ -0,0 +1,14 @@ +proc MPM::write::WriteBodyMDPA { } { + write::writeModelPartData + write::WriteString "Begin Properties 0" + write::WriteString "End Properties" + + # Nodal coordinates + writeBodyNodalCoordinates + + # Body element connectivities + writeBodyElementConnectivities + + # Write Submodelparts + writeSubmodelparts particles +} \ No newline at end of file diff --git a/kratos.gid/apps/MPM/write/writeGrid.tcl b/kratos.gid/apps/MPM/write/writeGrid.tcl new file mode 100644 index 000000000..2d433fe58 --- /dev/null +++ b/kratos.gid/apps/MPM/write/writeGrid.tcl @@ -0,0 +1,19 @@ +proc MPM::write::WriteGridMDPA { } { + # Headers + write::writeModelPartData + write::WriteString "Begin Properties 0" + write::WriteString "End Properties" + + # Nodal coordinates + set list_of_groups [concat [MPM::write::GetPartsGroups grid] [MPM::write::GetConditionsGroups] [MPM::write::GetNodalConditionsGroups]] + write::writeNodalCoordinatesOnGroups $list_of_groups + + # Grid element connectivities + writeGridConnectivities + + # Write conditions + writeConditions + + # Write Submodelparts + writeSubmodelparts grid +} \ No newline at end of file diff --git a/kratos.gid/scripts/Writing/WriteConditions.tcl b/kratos.gid/scripts/Writing/WriteConditions.tcl index a8cefbc62..e3409edf2 100644 --- a/kratos.gid/scripts/Writing/WriteConditions.tcl +++ b/kratos.gid/scripts/Writing/WriteConditions.tcl @@ -2,14 +2,7 @@ proc ::write::writeConditions { baseUN {iter 0} {domNode ""}} { set dictGroupsIterators [dict create] - set root [customlib::GetBaseRoot] - - set xp1 "[spdAux::getRoute $baseUN $domNode]/condition/group" - set groupNodes [$root selectNodes $xp1] - if {[llength $groupNodes] < 1} { - set xp1 "[spdAux::getRoute $baseUN $domNode]/group" - set groupNodes [$root selectNodes $xp1] - } + set groupNodes [::write::GetGroupsAssignedIn $baseUN $domNode] foreach groupNode $groupNodes { set condid [[$groupNode parent] @n] set groupid [get_domnode_attribute $groupNode n] @@ -24,6 +17,31 @@ proc ::write::writeConditions { baseUN {iter 0} {domNode ""}} { return $dictGroupsIterators } +proc ::write::GetGroupsAssignedIn {baseUN {domNode ""}} { + + set root [customlib::GetBaseRoot] + + set xp1 "[spdAux::getRoute $baseUN $domNode]/condition/group" + set groupNodes [$root selectNodes $xp1] + if {[llength $groupNodes] < 1} { + set xp1 "[spdAux::getRoute $baseUN $domNode]/group" + set groupNodes [$root selectNodes $xp1] + } + return $groupNodes +} + +proc ::write::GetGroupsNamesAssignedIn {baseUN {domNode ""}} { + set groups [list ] + foreach gNode [::write::GetGroupsAssignedIn $baseUN $domNode] { + set group_name [get_domnode_attribute $gNode n] + set good_group_name [write::GetWriteGroupName $group_name] + if {$good_group_name ne $groups} { + lappend groups $good_group_name + } + } + return $groups +} + proc ::write::writeGroupNodeCondition {dictGroupsIterators groupNode condid iter} { set groupid [get_domnode_attribute $groupNode n] set groupid [GetWriteGroupName $groupid] From 764502a31bbdf03e660096616f7685bc7d201df9 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Fri, 27 Feb 2026 11:52:15 +0100 Subject: [PATCH 03/10] optimize functions --- kratos.gid/apps/MPM/app.json | 4 +- kratos.gid/apps/MPM/write/write.tcl | 62 ++++++++----------------- kratos.gid/apps/MPM/write/writeBody.tcl | 2 +- kratos.gid/apps/MPM/write/writeGrid.tcl | 16 +++---- 4 files changed, 32 insertions(+), 52 deletions(-) diff --git a/kratos.gid/apps/MPM/app.json b/kratos.gid/apps/MPM/app.json index 332fba2be..bc699c40a 100644 --- a/kratos.gid/apps/MPM/app.json +++ b/kratos.gid/apps/MPM/app.json @@ -22,7 +22,9 @@ "examples/GranularFlow.tcl", "xml/XmlController.tcl", "write/write.tcl", - "write/writeProjectParameters.tcl" + "write/writeProjectParameters.tcl", + "write/writeBody.tcl", + "write/writeGrid.tcl" ], "start_script": "::MPM::Init", "requirements": { diff --git a/kratos.gid/apps/MPM/write/write.tcl b/kratos.gid/apps/MPM/write/write.tcl index 2eb07d028..efc464738 100644 --- a/kratos.gid/apps/MPM/write/write.tcl +++ b/kratos.gid/apps/MPM/write/write.tcl @@ -3,13 +3,12 @@ namespace eval MPM::write { Kratos::AddNamespace [namespace current] variable writeAttributes - variable ConditionsDictGroupIterators + variable ConditionsDictGroupIterators [dict create] + + variable grid_elems [list GRID2D GRID3D] } proc MPM::write::Init { } { - # Namespace variables inicialization - variable ConditionsDictGroupIterators - set ConditionsDictGroupIterators [dict create] SetAttribute parts_un [::MPM::GetUniqueName parts] SetAttribute nodal_conditions_un [::MPM:::GetUniqueName nodal_conditions] @@ -47,19 +46,25 @@ proc MPM::write::writeModelPartEvent { } { write::CloseFile } -proc MPM::write::GetPartsGroups { part_type {what "name"} } { +proc MPM::write::GetPartsGroupsNames { part_type } { + set groups [MPM::write::GetPartsGroups $part_type] + set result [list ] + foreach group $groups { + lappend result [$group @n] + } + return $result +} + +proc MPM::write::GetPartsGroups { part_type } { + variable grid_elems set xp1 "[spdAux::getRoute [GetAttribute parts_un]]/condition/group" set body_groups [list ] - set grid_elems [list GRID2D GRID3D] + foreach gNode [[customlib::GetBaseRoot] selectNodes $xp1] { set elem [write::getValueByNode [$gNode selectNodes ".//value\[@n='Element'\]"] ] if {($part_type eq "grid" && $elem in $grid_elems) || ($part_type ne "grid" && $elem ni $grid_elems)} { - if {$what eq "name"} { - lappend body_groups [$gNode @n] - } { - lappend body_groups $gNode - } + lappend body_groups $gNode } } return $body_groups @@ -67,7 +72,7 @@ proc MPM::write::GetPartsGroups { part_type {what "name"} } { proc ::MPM::write::GetUsedElements { {get "Objects"} } { set lista [list ] - foreach gNode [MPM::write::GetPartsGroups Body node] { + foreach gNode [MPM::write::GetPartsGroups Body] { set elem_name [write::getValueByNode [$gNode selectNodes ".//value\[@n='Element']"] ] set e [Model::getElement $elem_name] if {$get eq "Name"} { set e [$e getName] } @@ -77,42 +82,15 @@ proc ::MPM::write::GetUsedElements { {get "Objects"} } { } proc MPM::write::writeBodyNodalCoordinates { } { - write::writeNodalCoordinatesOnGroups [MPM::write::GetPartsGroups Body] + write::writeNodalCoordinatesOnGroups [MPM::write::GetPartsGroupsNames Body] } -proc MPM::write::writeBodyElementConnectivities { } { - foreach gNode [MPM::write::GetPartsGroups Body node] { - set elem [write::getValueByNode [$gNode selectNodes ".//value\[@n='Element'\]"] ] - if {$elem ni [list GRID2D GRID3D]} { - write::writeGroupElementConnectivities $gNode $elem - } - } -} - -proc MPM::write::writeGridConnectivities { } { - set grid_elems [list GRID2D GRID3D] - set grid_groups [list] - foreach gNode [MPM::write::GetPartsGroups grid node] { - set elem [write::getValueByNode [$gNode selectNodes ".//value\[@n='Element'\]"] ] - if {$elem in [list GRID2D GRID3D]} { - # write::writeGroupElementConnectivities $gNode $elem - lappend grid_groups $gNode - } - } - - # Write the geometries - ::write::writeGeometryConnectivities $grid_groups -} - -proc MPM::write::writeConditions { } { - write::writeGeometryConnectivities [::write::GetGroupsAssignedIn [GetAttribute conditions_un]] -} proc MPM::write::writeSubmodelparts { type } { - set grid_elements [list GRID2D GRID3D] + variable grid_elements set xp1 "[spdAux::getRoute [GetAttribute parts_un]]/condition/group" - foreach gNode [MPM::write::GetPartsGroups $type node] { + foreach gNode [MPM::write::GetPartsGroups $type] { set elem [write::getValueByNode [$gNode selectNodes ".//value\[@n='Element'\]"] ] set part_name [get_domnode_attribute [$gNode parent] n] set group_name [get_domnode_attribute $gNode n] diff --git a/kratos.gid/apps/MPM/write/writeBody.tcl b/kratos.gid/apps/MPM/write/writeBody.tcl index 33fc051ac..fcfa5c207 100644 --- a/kratos.gid/apps/MPM/write/writeBody.tcl +++ b/kratos.gid/apps/MPM/write/writeBody.tcl @@ -7,7 +7,7 @@ proc MPM::write::WriteBodyMDPA { } { writeBodyNodalCoordinates # Body element connectivities - writeBodyElementConnectivities + ::write::writeGeometryConnectivities [MPM::write::GetPartsGroups body] # Write Submodelparts writeSubmodelparts particles diff --git a/kratos.gid/apps/MPM/write/writeGrid.tcl b/kratos.gid/apps/MPM/write/writeGrid.tcl index 2d433fe58..73a8732db 100644 --- a/kratos.gid/apps/MPM/write/writeGrid.tcl +++ b/kratos.gid/apps/MPM/write/writeGrid.tcl @@ -1,19 +1,19 @@ proc MPM::write::WriteGridMDPA { } { # Headers - write::writeModelPartData - write::WriteString "Begin Properties 0" - write::WriteString "End Properties" + ::write::writeModelPartData + ::write::WriteString "Begin Properties 0" + ::write::WriteString "End Properties" # Nodal coordinates - set list_of_groups [concat [MPM::write::GetPartsGroups grid] [MPM::write::GetConditionsGroups] [MPM::write::GetNodalConditionsGroups]] - write::writeNodalCoordinatesOnGroups $list_of_groups + set list_of_groups [concat [MPM::write::GetPartsGroupsNames grid] [MPM::write::GetConditionsGroups] [MPM::write::GetNodalConditionsGroups]] + ::write::writeNodalCoordinatesOnGroups $list_of_groups # Grid element connectivities - writeGridConnectivities + ::write::writeGeometryConnectivities [MPM::write::GetPartsGroups grid] # Write conditions - writeConditions + ::write::writeGeometryConnectivities [::write::GetGroupsAssignedIn [GetAttribute conditions_un]] # Write Submodelparts writeSubmodelparts grid -} \ No newline at end of file +} From 5fdbe5b4634d982f071dcc0fdcbc6557a2d7b95a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20G=C3=A1rate?= Date: Fri, 27 Feb 2026 19:48:08 +0100 Subject: [PATCH 04/10] submodelparts --- kratos.gid/apps/MPM/write/write.tcl | 42 ++----------------------- kratos.gid/apps/MPM/write/writeBody.tcl | 11 +++++-- kratos.gid/apps/MPM/write/writeGrid.tcl | 20 ++++++++++++ 3 files changed, 31 insertions(+), 42 deletions(-) diff --git a/kratos.gid/apps/MPM/write/write.tcl b/kratos.gid/apps/MPM/write/write.tcl index efc464738..4210306c7 100644 --- a/kratos.gid/apps/MPM/write/write.tcl +++ b/kratos.gid/apps/MPM/write/write.tcl @@ -81,27 +81,9 @@ proc ::MPM::write::GetUsedElements { {get "Objects"} } { return $lista } -proc MPM::write::writeBodyNodalCoordinates { } { - write::writeNodalCoordinatesOnGroups [MPM::write::GetPartsGroupsNames Body] -} - - proc MPM::write::writeSubmodelparts { type } { - - variable grid_elements - set xp1 "[spdAux::getRoute [GetAttribute parts_un]]/condition/group" - foreach gNode [MPM::write::GetPartsGroups $type] { - set elem [write::getValueByNode [$gNode selectNodes ".//value\[@n='Element'\]"] ] - set part_name [get_domnode_attribute [$gNode parent] n] - set group_name [get_domnode_attribute $gNode n] - write::writeGroupSubModelPart $part_name $group_name "Elements" - } - if {$type eq "grid"} { - # Write the boundary conditions submodelpart - write::writeNodalConditions [GetAttribute nodal_conditions_un] - - # A Condition y a meshes-> salvo lo que no tenga topologia - writeLoads + foreach group [MPM::write::GetPartsGroupsNames $type] { + write::writeGroupSubModelPartAsGeometry $group } } @@ -111,26 +93,6 @@ proc MPM::write::GetConditionsGroups { } { return $groups } -proc MPM::write::GetNodalConditionsGroups { } { - return [::write::GetGroupsNamesAssignedIn [GetAttribute nodal_conditions_un]] -} - -proc MPM::write::writeLoads { } { - variable ConditionsDictGroupIterators - set root [customlib::GetBaseRoot] - set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition/group" - foreach group [$root selectNodes $xp1] { - set groupid [$group @n] - set groupid [write::GetWriteGroupName $groupid] - #W "Writing mesh of Load $groupid" - if {$groupid in [dict keys $ConditionsDictGroupIterators]} { - ::write::writeGroupSubModelPart [[$group parent] @n] $groupid "Conditions" [dict get $ConditionsDictGroupIterators $groupid] - } else { - ::write::writeGroupSubModelPart [[$group parent] @n] $groupid "nodal" - } - } -} - proc MPM::write::writeCustomFilesEvent { } { # Materials file set mats_json [dict get [write::getPropertiesList [GetAttribute parts_un] True Initial_MPM_Material] properties ] diff --git a/kratos.gid/apps/MPM/write/writeBody.tcl b/kratos.gid/apps/MPM/write/writeBody.tcl index fcfa5c207..a8ed633bc 100644 --- a/kratos.gid/apps/MPM/write/writeBody.tcl +++ b/kratos.gid/apps/MPM/write/writeBody.tcl @@ -4,11 +4,18 @@ proc MPM::write::WriteBodyMDPA { } { write::WriteString "End Properties" # Nodal coordinates - writeBodyNodalCoordinates + ::write::writeNodalCoordinatesOnGroups [MPM::write::GetPartsGroupsNames Body] # Body element connectivities ::write::writeGeometryConnectivities [MPM::write::GetPartsGroups body] # Write Submodelparts writeSubmodelparts particles -} \ No newline at end of file +} + +proc MPM::write::writeConditionsSubmodelparts { } { + foreach group [MPM::write::GetConditionsGroups] { + write::writeGroupSubModelPartAsGeometry $group + } +} + diff --git a/kratos.gid/apps/MPM/write/writeGrid.tcl b/kratos.gid/apps/MPM/write/writeGrid.tcl index 73a8732db..7b81993ad 100644 --- a/kratos.gid/apps/MPM/write/writeGrid.tcl +++ b/kratos.gid/apps/MPM/write/writeGrid.tcl @@ -16,4 +16,24 @@ proc MPM::write::WriteGridMDPA { } { # Write Submodelparts writeSubmodelparts grid + writeConditionsSubmodelparts + +} + +proc MPM::write::writeConditionsSubmodelparts { } { + foreach group [MPM::write::GetConditionsGroups] { + write::writeGroupSubModelPartAsGeometry $group + } + foreach group [MPM::write::GetNodalConditionsGroups] { + write::writeGroupSubModelPartAsGeometry $group 0 + } +} + +proc MPM::write::GetNodalConditionsGroups { } { + set groups [::write::GetGroupsNamesAssignedIn [GetAttribute nodal_conditions_un]] + return $groups } +proc MPM::write::GetConditionsGroups { } { + set groups [::write::GetGroupsNamesAssignedIn [GetAttribute conditions_un]] + return $groups +} \ No newline at end of file From 658bd4513e087c5601c2cc0dc14673f275656936 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20G=C3=A1rate?= Date: Fri, 27 Feb 2026 20:55:11 +0100 Subject: [PATCH 05/10] modelers --- .../apps/MPM/write/writeProjectParameters.tcl | 54 +++++++++++++++---- 1 file changed, 43 insertions(+), 11 deletions(-) diff --git a/kratos.gid/apps/MPM/write/writeProjectParameters.tcl b/kratos.gid/apps/MPM/write/writeProjectParameters.tcl index 685e9f779..be784ba1a 100644 --- a/kratos.gid/apps/MPM/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/MPM/write/writeProjectParameters.tcl @@ -24,17 +24,6 @@ proc ::MPM::write::getParametersDict { } { # 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] @@ -124,6 +113,8 @@ proc ::MPM::write::getParametersDict { } { # REMOVE use_old_stiffness_in_first_iteration dict unset project_parameters_dict solver_settings use_old_stiffness_in_first_iteration + dict set project_parameters_dict modelers [write::getModelersParametersList [dict get $project_parameters_dict modelers]] + return $project_parameters_dict } @@ -247,6 +238,47 @@ proc ::MPM::write::GetOutputProcessesList { } { return $output_process } +proc ::MPM::write::getModelersParametersList { old_modelers } { + + set body_groups [MPM::write::GetPartsGroupsNames Body] + set lista [list ] + foreach modeler $old_modelers { + set new_modeler [dict create] + # if [dict get $modeler name] contains "ImportMDPAModeler" + set name [dict get $modeler name] + if {[string match "*ImportMDPAModeler" $name]} { + dict set new_modeler name $name + dict set new_modeler parameters input_filename [Kratos::GetModelName]_Grid + dict set new_modeler parameters model_part_name "Background_Grid" + lappend lista $new_modeler + + dict set new_modeler name $name + dict set new_modeler parameters input_filename [Kratos::GetModelName]_Body + dict set new_modeler parameters model_part_name "MPM_Material" + lappend lista $new_modeler + } elseif {[string match "*CreateEntitiesFromGeometriesModeler" $name]} { + dict set new_modeler name $name + set elements_list [list ] + foreach element [dict get $modeler parameters elements_list] { + set new_element [dict create] + set model_part_name [dict get $element model_part_name] + set group_name [lindex [split $model_part_name "."] end] + if {$group_name in $body_groups} { + dict set new_element model_part_name "MPM_Material.$group_name" + } else { + dict set new_element model_part_name $model_part_name + } + dict set new_element element_name [dict get $element element_name] + lappend elements_list $new_element + } + + dict set new_modeler parameters elements_list $elements_list + dict set new_modeler parameters conditions_list [dict get $modeler parameters conditions_list] + lappend lista $new_modeler + } + } + return $lista +} proc ::MPM::write::writeParametersEvent { } { write::WriteJSON [getParametersDict] From 3f8f46f5986fba5f6b2520fc359c08b56a58b4e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20G=C3=A1rate?= Date: Mon, 2 Mar 2026 10:57:53 +0100 Subject: [PATCH 06/10] Update kratos.gid/apps/MPM/write/writeProjectParameters.tcl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Nicolò Crescenzio <82459917+ncrescenzio@users.noreply.github.com> --- kratos.gid/apps/MPM/write/writeProjectParameters.tcl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kratos.gid/apps/MPM/write/writeProjectParameters.tcl b/kratos.gid/apps/MPM/write/writeProjectParameters.tcl index be784ba1a..b1e701f96 100644 --- a/kratos.gid/apps/MPM/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/MPM/write/writeProjectParameters.tcl @@ -254,7 +254,7 @@ proc ::MPM::write::getModelersParametersList { old_modelers } { dict set new_modeler name $name dict set new_modeler parameters input_filename [Kratos::GetModelName]_Body - dict set new_modeler parameters model_part_name "MPM_Material" + dict set new_modeler parameters model_part_name "Initial_MPM_Material" lappend lista $new_modeler } elseif {[string match "*CreateEntitiesFromGeometriesModeler" $name]} { dict set new_modeler name $name From 1c98d492e0d6c8edfe0f2f12b5bd41aaf9c912a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20G=C3=A1rate?= Date: Mon, 2 Mar 2026 10:58:10 +0100 Subject: [PATCH 07/10] Update kratos.gid/apps/MPM/write/writeProjectParameters.tcl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Nicolò Crescenzio <82459917+ncrescenzio@users.noreply.github.com> --- kratos.gid/apps/MPM/write/writeProjectParameters.tcl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kratos.gid/apps/MPM/write/writeProjectParameters.tcl b/kratos.gid/apps/MPM/write/writeProjectParameters.tcl index b1e701f96..1dbcded8d 100644 --- a/kratos.gid/apps/MPM/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/MPM/write/writeProjectParameters.tcl @@ -264,7 +264,7 @@ proc ::MPM::write::getModelersParametersList { old_modelers } { set model_part_name [dict get $element model_part_name] set group_name [lindex [split $model_part_name "."] end] if {$group_name in $body_groups} { - dict set new_element model_part_name "MPM_Material.$group_name" + dict set new_element model_part_name "Initial_MPM_Material.$group_name" } else { dict set new_element model_part_name $model_part_name } From e0ccc4a1fadd6d2b3f21011dd368dee932fbd655 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 2 Mar 2026 11:48:00 +0100 Subject: [PATCH 08/10] grid_model_import_settings must be there --- kratos.gid/apps/MPM/write/writeProjectParameters.tcl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kratos.gid/apps/MPM/write/writeProjectParameters.tcl b/kratos.gid/apps/MPM/write/writeProjectParameters.tcl index 1dbcded8d..000abc9d2 100644 --- a/kratos.gid/apps/MPM/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/MPM/write/writeProjectParameters.tcl @@ -24,6 +24,8 @@ proc ::MPM::write::getParametersDict { } { # Change the model part name dict set project_parameters_dict solver_settings model_part_name MPM_Material + # create grid_import_settings + dict set project_parameters_dict solver_settings grid_model_import_settings input_type use_input_model_part # materials file dict set project_parameters_dict solver_settings material_import_settings materials_filename [GetAttribute materials_file] From ee1fd2d0fcd45fe96d81c4d56d032b45243970b6 Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 2 Mar 2026 12:13:08 +0100 Subject: [PATCH 09/10] correct names in filtering --- kratos.gid/apps/MPM/write/writeProjectParameters.tcl | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/kratos.gid/apps/MPM/write/writeProjectParameters.tcl b/kratos.gid/apps/MPM/write/writeProjectParameters.tcl index 000abc9d2..e54017510 100644 --- a/kratos.gid/apps/MPM/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/MPM/write/writeProjectParameters.tcl @@ -243,6 +243,11 @@ proc ::MPM::write::GetOutputProcessesList { } { proc ::MPM::write::getModelersParametersList { old_modelers } { set body_groups [MPM::write::GetPartsGroupsNames Body] + set corrected_names [list ] + foreach g $body_groups { + lappend corrected_names [write::transformGroupName $g] + } + set body_groups $corrected_names set lista [list ] foreach modeler $old_modelers { set new_modeler [dict create] @@ -265,8 +270,9 @@ proc ::MPM::write::getModelersParametersList { old_modelers } { set new_element [dict create] set model_part_name [dict get $element model_part_name] set group_name [lindex [split $model_part_name "."] end] - if {$group_name in $body_groups} { - dict set new_element model_part_name "Initial_MPM_Material.$group_name" + set good_name [write::transformGroupName $group_name] + if {$good_name in $body_groups} { + dict set new_element model_part_name "Initial_MPM_Material.$good_name" } else { dict set new_element model_part_name $model_part_name } From 2fae8c66c6592dc56018208fffb6162912014b3d Mon Sep 17 00:00:00 2001 From: Javi Garate Date: Mon, 2 Mar 2026 12:13:51 +0100 Subject: [PATCH 10/10] spaces --- .../apps/MPM/write/writeProjectParameters.tcl | 146 +++++++++--------- 1 file changed, 73 insertions(+), 73 deletions(-) diff --git a/kratos.gid/apps/MPM/write/writeProjectParameters.tcl b/kratos.gid/apps/MPM/write/writeProjectParameters.tcl index e54017510..c50d643f3 100644 --- a/kratos.gid/apps/MPM/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/MPM/write/writeProjectParameters.tcl @@ -42,9 +42,9 @@ 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" + dict set project_parameters_dict solver_settings stabilization "ppp" } dict unset project_parameters_dict solver_settings ActivateStabilization break @@ -101,7 +101,7 @@ 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] - } + } # Output processes dict set project_parameters_dict output_processes [MPM::write::GetOutputProcessesList] @@ -129,97 +129,97 @@ proc write::GetResultsList { un {cnd ""} } { proc ::MPM::write::GetOutputProcessesList { } { - set output_process [dict create] + set output_process [dict create] - set project_parameters_dict [Structural::write::getParametersDict] - # Change the model part name - dict set project_parameters_dict solver_settings model_part_name MPM_Material + set project_parameters_dict [Structural::write::getParametersDict] + # 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 + # 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 - dict set project_parameters_dict solver_settings model_import_settings $model_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 + dict set project_parameters_dict solver_settings model_import_settings $model_import_settings_dict - set need_gid [write::getValue EnableGiDOutput] - if {[write::isBooleanTrue $need_gid]} { + set need_gid [write::getValue EnableGiDOutput] + if {[write::isBooleanTrue $need_gid]} { - set body_output_configuration_dict [lindex [dict get $project_parameters_dict output_processes gid_output] 0] - set grid_output_configuration_dict [lindex [dict get $project_parameters_dict output_processes gid_output] 0] - dict set body_output_configuration_dict python_module mpm_gid_output_process - dict set body_output_configuration_dict kratos_module KratosMultiphysics.MPMApplication - dict set body_output_configuration_dict process_name MPMGiDOutputProcess - dict set body_output_configuration_dict Parameters model_part_name MPM_Material - dict set grid_output_configuration_dict Parameters model_part_name Background_Grid - dict set body_output_configuration_dict Parameters output_name [dict get $project_parameters_dict solver_settings model_import_settings input_filename] - 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 + set body_output_configuration_dict [lindex [dict get $project_parameters_dict output_processes gid_output] 0] + set grid_output_configuration_dict [lindex [dict get $project_parameters_dict output_processes gid_output] 0] + dict set body_output_configuration_dict python_module mpm_gid_output_process + dict set body_output_configuration_dict kratos_module KratosMultiphysics.MPMApplication + dict set body_output_configuration_dict process_name MPMGiDOutputProcess + dict set body_output_configuration_dict Parameters model_part_name MPM_Material + dict set grid_output_configuration_dict Parameters model_part_name Background_Grid + dict set body_output_configuration_dict Parameters output_name [dict get $project_parameters_dict solver_settings model_import_settings input_filename] + 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 + dict unset grid_output_configuration_dict Parameters postprocess_parameters result_file_configuration gauss_point_results - 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 gid_output + 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 gid_output - # Append the fluid and solid output processes to the output processes list - lappend gid_output_processes_list $body_output_configuration_dict - lappend gid_output_processes_list $grid_output_configuration_dict - dict set output_process gid_output_processes $gid_output_processes_list + # Append the fluid and solid output processes to the output processes list + lappend gid_output_processes_list $body_output_configuration_dict + lappend gid_output_processes_list $grid_output_configuration_dict + dict set output_process gid_output_processes $gid_output_processes_list - } + } - 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 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 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] + 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 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 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 + 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 - dict set output_process vtk_output_processes $vtk_output_processes_list + # 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 + dict set output_process vtk_output_processes $vtk_output_processes_list - } + } - # Restart + # Restart set need_restart [write::getValue EnableRestartOutput] if {[write::isBooleanTrue $need_restart]} { set restart_dict [dict create ] @@ -235,7 +235,7 @@ proc ::MPM::write::GetOutputProcessesList { } { dict set restart_dict Parameters $restart_parameters_dict dict set output_process save_restart_process [list $restart_dict] - } + } return $output_process } @@ -258,7 +258,7 @@ proc ::MPM::write::getModelersParametersList { old_modelers } { dict set new_modeler parameters input_filename [Kratos::GetModelName]_Grid dict set new_modeler parameters model_part_name "Background_Grid" lappend lista $new_modeler - + dict set new_modeler name $name dict set new_modeler parameters input_filename [Kratos::GetModelName]_Body dict set new_modeler parameters model_part_name "Initial_MPM_Material"