Skip to content
Open
Show file tree
Hide file tree
Changes from all 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
}
Loading