11namespace eval MPM::write {
22 namespace path ::MPM
33 Kratos::AddNamespace [namespace current]
4-
4+
55 variable writeAttributes
66 variable ConditionsDictGroupIterators
77}
@@ -14,7 +14,7 @@ proc MPM::write::Init { } {
1414 SetAttribute parts_un [::MPM::GetUniqueName parts]
1515 SetAttribute nodal_conditions_un [::MPM:::GetUniqueName nodal_conditions]
1616 SetAttribute conditions_un [::MPM::GetUniqueName conditions]
17-
17+
1818 SetAttribute writeCoordinatesByGroups [::MPM::GetWriteProperty coordinates]
1919 SetAttribute main_launch_file [::MPM::GetAttribute main_launch_file]
2020 SetAttribute materials_file [::MPM::GetWriteProperty materials_file]
@@ -28,21 +28,21 @@ proc MPM::write::writeModelPartEvent { } {
2828 write::initWriteConfiguration [GetAttributes]
2929
3030 MPM::write::UpdateMaterials
31-
31+
3232 set filename [Kratos::GetModelName]
33-
33+
3434 # # Grid MPDA ##
3535 # Headers
3636 write::writeModelPartData
3737 write::WriteString " Begin Properties 0"
3838 write::WriteString " End Properties"
3939
40- # Nodal coordinates
40+ # Nodal coordinates
4141 write::writeNodalCoordinates
4242
4343 # Grid element connectivities
4444 writeGridConnectivities
45-
45+
4646 # Write conditions
4747 writeConditions
4848
@@ -72,22 +72,30 @@ proc MPM::write::writeModelPartEvent { } {
7272 write::CloseFile
7373}
7474
75- proc MPM::write::writeBodyNodalCoordinates { } {
75+ proc MPM::write::GetPartsGroups { part_type {what " name " } } {
7676 set xp1 " [ spdAux::getRoute [GetAttribute parts_un] ]/condition/group"
7777 set body_groups [list ]
78+ set grid_elems [list GRID2D GRID3D]
7879 foreach gNode [[customlib::GetBaseRoot] selectNodes $xp1 ] {
7980 set elem [write::getValueByNode [$gNode selectNodes " .//value\[ @n='Element'\] " ] ]
80- if {$elem ni [list GRID2D GRID3D]} {
81- lappend body_groups [$gNode @n]
81+
82+ if {($part_type eq " grid" && $elem in $grid_elems ) || ($part_type ne " grid" && $elem ni $grid_elems )} {
83+ if {$what eq " name" } {
84+ lappend body_groups [$gNode @n]
85+ } {
86+ lappend body_groups $gNode
87+ }
8288 }
8389 }
84- write::writeNodalCoordinatesOnGroups $body_groups
90+ return $body_groups
91+ }
92+
93+ proc MPM::write::writeBodyNodalCoordinates { } {
94+ write::writeNodalCoordinatesOnGroups [MPM::write::GetPartsGroups Body]
8595}
8696
8797proc MPM::write::writeBodyElementConnectivities { } {
88- set xp1 " [ spdAux::getRoute [GetAttribute parts_un] ]/condition/group"
89- set body_groups [list ]
90- foreach gNode [[customlib::GetBaseRoot] selectNodes $xp1 ] {
98+ foreach gNode [MPM::write::GetPartsGroups Body node] {
9199 set elem [write::getValueByNode [$gNode selectNodes " .//value\[ @n='Element'\] " ] ]
92100 if {$elem ni [list GRID2D GRID3D]} {
93101 write::writeGroupElementConnectivities $gNode $elem
@@ -96,8 +104,7 @@ proc MPM::write::writeBodyElementConnectivities { } {
96104}
97105
98106proc MPM::write::writeGridConnectivities { } {
99- set xp1 " [ spdAux::getRoute [GetAttribute parts_un] ]/condition/group"
100- foreach gNode [[customlib::GetBaseRoot] selectNodes $xp1 ] {
107+ foreach gNode [MPM::write::GetPartsGroups grid node] {
101108 set elem [write::getValueByNode [$gNode selectNodes " .//value\[ @n='Element'\] " ] ]
102109 if {$elem in [list GRID2D GRID3D]} {
103110 write::writeGroupElementConnectivities $gNode $elem
@@ -106,40 +113,29 @@ proc MPM::write::writeGridConnectivities { } {
106113}
107114
108115proc MPM::write::writeConditions { } {
109-
110116 variable ConditionsDictGroupIterators
111117 set ConditionsDictGroupIterators [::write::writeConditions [GetAttribute conditions_un] ]
112118}
113119
114120proc MPM::write::writeSubmodelparts { type } {
115121
116122 set grid_elements [list GRID2D GRID3D]
117-
118123 set xp1 " [ spdAux::getRoute [GetAttribute parts_un] ]/condition/group"
119- set body_groups [list ]
120- foreach gNode [[customlib::GetBaseRoot] selectNodes $xp1 ] {
124+ foreach gNode [MPM::write::GetPartsGroups $type node] {
121125 set elem [write::getValueByNode [$gNode selectNodes " .//value\[ @n='Element'\] " ] ]
122126 set part_name [get_domnode_attribute [$gNode parent] n]
123127 set group_name [get_domnode_attribute $gNode n]
124- if {$type eq " grid" } {
125- if {$elem in $grid_elements } {
126- write::writeGroupSubModelPart $part_name $group_name " Elements"
127- }
128- } else {
129- if {$elem ni $grid_elements } {
130- write::writeGroupSubModelPart $part_name $group_name " Elements"
131- }
132- }
128+ write::writeGroupSubModelPart $part_name $group_name " Elements"
133129 }
134-
135130 if {$type eq " grid" } {
136131 # Write the boundary conditions submodelpart
137132 write::writeNodalConditions [GetAttribute nodal_conditions_un]
138-
133+
139134 # A Condition y a meshes-> salvo lo que no tenga topologia
140135 writeLoads
141136 }
142137}
138+
143139proc MPM::write::writeLoads { } {
144140 variable ConditionsDictGroupIterators
145141 set root [customlib::GetBaseRoot]
@@ -158,7 +154,20 @@ proc MPM::write::writeLoads { } {
158154
159155proc MPM::write::writeCustomFilesEvent { } {
160156 # Materials file
161- write::writePropertiesJsonFile [GetAttribute parts_un] [GetAttribute materials_file] True Initial_MPM_Material
157+ set mats_json [dict get [write::getPropertiesList [GetAttribute parts_un] True Initial_MPM_Material] properties ]
158+ set new_mats [list ]
159+ foreach mat $mats_json {
160+ set type [dict exists $mat Material constitutive_law]
161+ if {$type eq 0} {
162+ set submodelpart [lindex [split [dict get $mat model_part_name] " ." ] end]
163+ dict set mat model_part_name Background_Grid.$submodelpart
164+ }
165+ lappend new_mats $mat
166+ }
167+ write::OpenFile [GetAttribute materials_file]
168+ write::WriteJSON [dict create properties $new_mats ]
169+ write::CloseFile
170+
162171 write::SetConfigurationAttribute main_launch_file [GetAttribute main_launch_file]
163172}
164173
@@ -167,13 +176,13 @@ proc MPM::write::UpdateMaterials { } {
167176 foreach {mat props} $matdict {
168177 # Modificar la ley constitutiva
169178 dict set matdict $mat THICKNESS 1.0000E+00
170-
179+
171180 set xp1 " [ spdAux::getRoute [GetAttribute parts_un] ]/condition/group\[ @n='$mat '\] /value\[ @n='THICKNESS'\] "
172- set vNode [[customlib::GetBaseRoot] selectNodes $xp1 ]
181+ set vNode [[customlib::GetBaseRoot] selectNodes $xp1 ]
173182 if {$vNode ne " " } {
174183 dict set matdict $mat THICKNESS [write::getValueByNode $vNode ]
175184 }
176-
185+
177186 }
178187 write::setMatDict $matdict
179188}
0 commit comments