Skip to content
Open
Show file tree
Hide file tree
Changes from 5 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions kratos.gid/apps/MPM/app.json
Original file line number Diff line number Diff line change
Expand Up @@ -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": {
Expand All @@ -47,7 +49,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"
Expand Down
144 changes: 23 additions & 121 deletions kratos.gid/apps/MPM/write/write.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand All @@ -33,23 +32,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"
Expand All @@ -58,43 +41,38 @@ 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
}

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
}

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] }
Expand All @@ -103,92 +81,16 @@ proc ::MPM::write::GetUsedElements { {get "Objects"} } {
return $lista
}

proc MPM::write::writeBodyNodalCoordinates { } {
write::writeNodalCoordinatesOnGroups [MPM::write::GetPartsGroups 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 { } {
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
}
}
}

proc MPM::write::writeConditions { } {
variable ConditionsDictGroupIterators
set ConditionsDictGroupIterators [::write::writeConditions [GetAttribute conditions_un] ]
}

proc MPM::write::writeSubmodelparts { type } {

set grid_elements [list GRID2D GRID3D]
set xp1 "[spdAux::getRoute [GetAttribute parts_un]]/condition/group"
foreach gNode [MPM::write::GetPartsGroups $type node] {
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
}
}

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
}

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
}

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"
}
}
set groups [::write::GetGroupsNamesAssignedIn [GetAttribute conditions_un]]
return $groups
}

proc MPM::write::writeCustomFilesEvent { } {
Expand Down
21 changes: 21 additions & 0 deletions kratos.gid/apps/MPM/write/writeBody.tcl
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
proc MPM::write::WriteBodyMDPA { } {
write::writeModelPartData
write::WriteString "Begin Properties 0"
write::WriteString "End Properties"

# Nodal coordinates
::write::writeNodalCoordinatesOnGroups [MPM::write::GetPartsGroupsNames Body]

# Body element connectivities
::write::writeGeometryConnectivities [MPM::write::GetPartsGroups body]

# Write Submodelparts
writeSubmodelparts particles
}

proc MPM::write::writeConditionsSubmodelparts { } {
foreach group [MPM::write::GetConditionsGroups] {
write::writeGroupSubModelPartAsGeometry $group
}
}

39 changes: 39 additions & 0 deletions kratos.gid/apps/MPM/write/writeGrid.tcl
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
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::GetPartsGroupsNames grid] [MPM::write::GetConditionsGroups] [MPM::write::GetNodalConditionsGroups]]
::write::writeNodalCoordinatesOnGroups $list_of_groups

# Grid element connectivities
::write::writeGeometryConnectivities [MPM::write::GetPartsGroups grid]

# Write conditions
::write::writeGeometryConnectivities [::write::GetGroupsAssignedIn [GetAttribute conditions_un]]

# 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
}
54 changes: 43 additions & 11 deletions kratos.gid/apps/MPM/write/writeProjectParameters.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -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
Comment thread
jginternational marked this conversation as resolved.

# 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]
Expand Down Expand Up @@ -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
}

Expand Down Expand Up @@ -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"
Comment thread
jginternational marked this conversation as resolved.
Outdated
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"
Comment thread
jginternational marked this conversation as resolved.
Outdated
} else {
dict set new_element model_part_name $model_part_name
}
Comment thread
jginternational marked this conversation as resolved.
Outdated
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]
Expand Down
Loading