Skip to content

Commit 801f0dc

Browse files
Merge pull request #697 from KratosMultiphysics/hotfix-dem-customsmp
Hotfix dem customsmp
2 parents de80cf6 + 501503d commit 801f0dc

6 files changed

Lines changed: 58 additions & 58 deletions

File tree

kratos.gid/apps/DEM/start.tcl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ proc ::DEM::CustomMenus { } {
6060
proc ::DEM::BeforeMeshGeneration {elementsize} {
6161
set root [customlib::GetBaseRoot]
6262
set xp1 "[spdAux::getRoute DEMParts]/group"
63-
foreach group [$root selectNodes $xp1] {
63+
foreach group [concat [$root selectNodes $xp1] [DEM::write::GetDEMGroupsCustomSubmodelpart]] {
6464
set groupid [$group @n]
6565
set advanced_meshing_features [write::getValueByNode [$group selectNodes "./value\[@n='AdvancedMeshingFeatures'\]"]]
6666
if {![write::isBooleanTrue $advanced_meshing_features]} {

kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl

Lines changed: 35 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ proc DEM::write::WriteMDPAParts { } {
1111

1212
# Nodal coordinates (only for DEM Parts <inefficient> )
1313
write::writeNodalCoordinatesOnParts
14-
#write::writeNodalCoordinatesOnGroups [GetDEMGroupsCustomSubmodelpart]
14+
write::writeNodalCoordinatesOnGroups [DEM::write::GetDEMGroupNamesCustomSubmodelpart]
1515
write::writeNodalCoordinatesOnGroups [WriteWallGraphsFlag]
1616
write::writeNodalCoordinatesOnGroups [GetDEMGroupsInitialC]
1717
write::writeNodalCoordinatesOnGroups [GetDEMGroupsBoundayC]
@@ -30,38 +30,41 @@ proc DEM::write::WriteMDPAParts { } {
3030
writeDEMConditionMeshes
3131

3232
# CustomSubmodelParts
33-
#WriteWallCustomDEMSmp not required for dem.
33+
WriteWallCustomDEMSmp; # not required for dem.
3434
}
3535

36-
## TODO: proc under revision. Duplicated code. Unused in some situations
3736
proc DEM::write::WriteWallCustomDEMSmp { } {
38-
set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-CustomSmp'\]/group"
39-
foreach group [[customlib::GetBaseRoot] selectNodes $xp1] {
40-
set groupid [$group @n]
41-
set destination_mdpa [write::getValueByNode [$group selectNodes "./value\[@n='WhatMdpa'\]"]]
42-
if {$destination_mdpa == "DEM"} {
37+
foreach group [GetDEMGroupsCustomSubmodelpart] {
38+
set groupid [write::GetWriteGroupName [$group @n]]
4339

44-
#write::WriteString "Begin SubModelPart $groupid \/\/ Custom SubModelPart. Group name: $groupid"
45-
write::WriteString "Begin SubModelPart $groupid \/\/ Custom SubModelPart. Group name: $groupid"
46-
write::WriteString "Begin SubModelPartData // DEM-FEM-Wall. Group name: $groupid"
47-
write::WriteString "End SubModelPartData"
48-
write::WriteString "Begin SubModelPartNodes"
49-
GiD_WriteCalculationFile nodes -sorted [dict create [write::GetWriteGroupName $groupid] [subst "%10i\n"]]
50-
write::WriteString "End SubModelPartNodes"
51-
write::WriteString "End SubModelPart"
52-
write::WriteString ""
53-
}
40+
# TODO: Missing write properties for Custom Submodelparts
41+
42+
# Nodes are previously printed
43+
# Print elements and connectivities
44+
set elem [write::getValueByNode [$group selectNodes ".//value\[@n='Element']"] ]
45+
write::writeGroupElementConnectivities $group $elem
46+
47+
DEM::write::writeSphereRadiusOnGroup $group
48+
49+
write::writeGroupSubModelPart DEM-CustomSmp $groupid Elements
5450
}
5551
}
5652

53+
proc DEM::write::GetDEMGroupNamesCustomSubmodelpart { } {
54+
set groups [list ]
55+
foreach group [DEM::write::GetDEMGroupsCustomSubmodelpart] {
56+
set groupid [$group @n]
57+
lappend groups [write::GetWriteGroupName $groupid]
58+
}
59+
return $groups
60+
}
5761
proc DEM::write::GetDEMGroupsCustomSubmodelpart { } {
5862
set groups [list ]
5963
set xp2 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-CustomSmp'\]/group"
6064
foreach group [[customlib::GetBaseRoot] selectNodes $xp2] {
6165
set destination_mdpa [write::getValueByNode [$group selectNodes "./value\[@n='WhatMdpa'\]"]]
6266
if {$destination_mdpa == "DEM"} {
63-
set groupid [$group @n]
64-
lappend groups [write::GetWriteGroupName $groupid]
67+
lappend groups $group
6568
}
6669
}
6770
return $groups
@@ -94,31 +97,18 @@ proc DEM::write::writeSphereRadius { } {
9497
set root [customlib::GetBaseRoot]
9598
set xp1 "[spdAux::getRoute [GetAttribute parts_un]]/group"
9699
foreach group [$root selectNodes $xp1] {
97-
set groupid [$group @n]
98-
set grouppid [write::GetWriteGroupName $groupid]
99-
write::WriteString "Begin NodalData RADIUS // GUI group identifier: $grouppid"
100-
GiD_WriteCalculationFile connectivities [dict create $groupid "%.0s %10d 0 %10g\n"]
101-
write::WriteString "End NodalData"
102-
write::WriteString ""
100+
DEM::write::writeSphereRadiusOnGroup $group
103101
}
104102
}
105103

106-
# proc DEM::write::GetNodalConditionsGroups { {include_cond 0} } { # TODO UNUSED CODE
107-
# set groups [list ]
108-
# set xp1 "[spdAux::getRoute [GetAttribute nodal_conditions_un]]/condition/group"
109-
# foreach group [[customlib::GetBaseRoot] selectNodes $xp1] {
110-
# set groupid [$group @n]
111-
# if {$include_cond} {lappend groups [[$group parent] @n]}
112-
# lappend groups [write::GetWriteGroupName $groupid]
113-
# }
114-
# return $groups
115-
# }
116-
117-
# proc DEM::write::write2VelocityMeshes { } {
118-
# foreach {cid groupid} [DEM::write::GetNodalConditionsGroups 1] {
119-
# ::write::writeGroupSubModelPart $cid $groupid "nodal"
120-
# }
121-
# }
104+
proc DEM::write::writeSphereRadiusOnGroup { group } {
105+
set groupid [$group @n]
106+
set print_groupid [write::GetWriteGroupName $groupid]
107+
write::WriteString "Begin NodalData RADIUS // GUI group identifier: $print_groupid"
108+
GiD_WriteCalculationFile connectivities [dict create $groupid "%.0s %10d 0 %10g\n"]
109+
write::WriteString "End NodalData"
110+
write::WriteString ""
111+
}
122112

123113
proc DEM::write::writeDEMConditionMeshes { } {
124114
set i 0
@@ -319,14 +309,15 @@ proc DEM::write::writeDEMConditionMeshes { } {
319309
}
320310
}
321311

312+
# TODO: This code is extremely inefficient -> find a simple way to solve it
322313
proc DEM::write::GetSpheresGroupsListInConditions { } {
323314
set conds_groups_dict [dict create ]
324315
set groups [list ]
325316

326317
# Get all the groups with spheres
327318
foreach group [GetSpheresGroups] {
328-
foreach surface [GiD_EntitiesGroups get $group elements] {
329-
foreach involved_group [GiD_EntitiesGroups entity_groups elements $surface] {
319+
foreach surface [GiD_EntitiesGroups get $group nodes] {
320+
foreach involved_group [GiD_EntitiesGroups entity_groups nodes $surface] {
330321
set involved_group_id [write::GetWriteGroupName $involved_group]
331322
if {$involved_group_id ni $groups} {lappend groups $involved_group_id}
332323
}

kratos.gid/apps/DEM/xml/Conditions.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@
5858
<outputs></outputs>
5959
</ConditionItem>
6060

61-
<ConditionItem n="DEM-CustomSmp" pn="DEM-CustomSmp" Interval="False" ImplementedInApplication="DEMApplication" MinimumKratosVersion="9000" ProductionReady="ProductionReady" WorkingSpaceDimension="3D" LocalSpaceDimension="2" ProcessName="CustomSMP-Process" help="" VariableName="SUBMP">
61+
<ConditionItem n="DEM-CustomSmp" pn="DEM-CustomSmp" Interval="False" ImplementedInApplication="DEMApplication" MinimumKratosVersion="9000" ProductionReady="ProductionReady" WorkingSpaceDimension="3D" LocalSpaceDimension="2" ProcessName="CustomSMP-Process" help="Elements defined as custom must be previously defined as Parts. Please make sure material properties for the selected elements has already been defined." VariableName="SUBMP">
6262
<TopologyFeatures></TopologyFeatures>
6363
<inputs></inputs>
6464
<outputs></outputs>

kratos.gid/apps/DEM/xml/Processes.xml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,9 @@
344344

345345
<Process n="CustomSMP-Process" pn="Define custom submodelparts" python_module="assign_vector_by_direction_to_condition_process" kratos_module="KratosMultiphysics" check="DirectorVectorNonZero direction">
346346
<inputs>
347-
<parameter n="WhatMdpa" pn="Destination mdpa" type="combo" values="DEM,DEM-Inlet,FEM" help="Decide what mpda file you want this SubModelPart to be added to"/>
347+
<parameter n="WhatMdpa" pn="Destination mdpa" type="combo" v="DEM" values="DEM,DEM-Inlet,FEM" help="Decide what mpda file you want this SubModelPart to be added to"/>
348+
<parameter n="Element" pn="Element" type="combo" help=""/>
349+
<parameter n="AdvancedMeshingFeatures" pn="AdvancedMeshingFeatures" type="combo" v="0" values="1,0" help="" />
348350
</inputs>
349351
</Process>
350352

kratos.gid/apps/DEM/xml/XmlController.tcl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ proc DEM::xml::CustomTree { args } {
3636
}
3737
}
3838

39+
set custom_smp_xpath "[spdAux::getRoute DEMConditions]/condition\[@n='DEM-CustomSmp'\]/value\[@n='Element'\]"
40+
gid_groups_conds::setAttributes $custom_smp_xpath [list state hidden dict {[GetElements ElementType DEM]} ]
41+
set custom_smp_xpath "[spdAux::getRoute DEMConditions]/condition\[@n='DEM-CustomSmp'\]/value\[@n='AdvancedMeshingFeatures'\]"
42+
gid_groups_conds::setAttributes $custom_smp_xpath [list state hidden ]
3943
# # Graphs in output settings
4044
# if {[$root selectNodes "[spdAux::getRoute DEMResults]/condition\[@n='Graphs'\]"] eq ""} {
4145
# gid_groups_conds::addF [spdAux::getRoute DEMResults] include [list n Graphs active 1 path {apps/DEM/xml/Graphs.spd}]

kratos.gid/scripts/Writing/WriteElements.tcl

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -30,17 +30,10 @@ proc write::writeGroupElementConnectivities { gNode kelemtype} {
3030
if {$nnodes ne ""} {
3131
if {$etype ne "none"} {
3232
set elem [::Model::getElement $kelemtype]
33-
set top [$elem getTopologyFeature $etype $nnodes]
34-
if {$top ne ""} {
35-
set kratosElemName [$top getKratosName]
36-
set s [mdpaIndent]
37-
WriteString "${s}Begin Elements $kratosElemName// GUI group identifier: $group"
38-
incr ::write::current_mdpa_indent_level
39-
set formats [GetFormatDict $group $mid $nnodes]
40-
GiD_WriteCalculationFile connectivities $formats
41-
incr ::write::current_mdpa_indent_level -1
42-
WriteString "${s}End Elements"
43-
WriteString ""
33+
set topology [$elem getTopologyFeature $etype $nnodes]
34+
if {$topology ne ""} {
35+
set kratos_element_type [$topology getKratosName]
36+
write::writeGroupElementConnectivitiesFor $kratos_element_type $nnodes $group $mid
4437
} else {
4538
error [= "Element $kelemtype $etype ($nnodes nodes) not available for $ov entities on group $group"]
4639
}
@@ -51,3 +44,13 @@ proc write::writeGroupElementConnectivities { gNode kelemtype} {
5144
error [= "You have not assigned a proper entity to group $group"]
5245
}
5346
}
47+
proc write::writeGroupElementConnectivitiesFor { kratos_element_type nnodes group mid } {
48+
set s [mdpaIndent]
49+
WriteString "${s}Begin Elements $kratos_element_type// GUI group identifier: $group"
50+
incr ::write::current_mdpa_indent_level
51+
set formats [GetFormatDict $group $mid $nnodes]
52+
GiD_WriteCalculationFile connectivities $formats
53+
incr ::write::current_mdpa_indent_level -1
54+
WriteString "${s}End Elements"
55+
WriteString ""
56+
}

0 commit comments

Comments
 (0)