Skip to content
Merged
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
2 changes: 1 addition & 1 deletion kratos.gid/apps/DEM/start.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ proc ::DEM::CustomMenus { } {
proc ::DEM::BeforeMeshGeneration {elementsize} {
set root [customlib::GetBaseRoot]
set xp1 "[spdAux::getRoute DEMParts]/group"
foreach group [$root selectNodes $xp1] {
foreach group [concat [$root selectNodes $xp1] [DEM::write::GetDEMGroupsCustomSubmodelpart]] {
set groupid [$group @n]
set advanced_meshing_features [write::getValueByNode [$group selectNodes "./value\[@n='AdvancedMeshingFeatures'\]"]]
if {![write::isBooleanTrue $advanced_meshing_features]} {
Expand Down
79 changes: 35 additions & 44 deletions kratos.gid/apps/DEM/write/writeMDPA_Parts.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ proc DEM::write::WriteMDPAParts { } {

# Nodal coordinates (only for DEM Parts <inefficient> )
write::writeNodalCoordinatesOnParts
#write::writeNodalCoordinatesOnGroups [GetDEMGroupsCustomSubmodelpart]
write::writeNodalCoordinatesOnGroups [DEM::write::GetDEMGroupNamesCustomSubmodelpart]
write::writeNodalCoordinatesOnGroups [WriteWallGraphsFlag]
write::writeNodalCoordinatesOnGroups [GetDEMGroupsInitialC]
write::writeNodalCoordinatesOnGroups [GetDEMGroupsBoundayC]
Expand All @@ -30,38 +30,41 @@ proc DEM::write::WriteMDPAParts { } {
writeDEMConditionMeshes

# CustomSubmodelParts
#WriteWallCustomDEMSmp not required for dem.
WriteWallCustomDEMSmp; # not required for dem.
}

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

#write::WriteString "Begin SubModelPart $groupid \/\/ Custom SubModelPart. Group name: $groupid"
write::WriteString "Begin SubModelPart $groupid \/\/ Custom SubModelPart. Group name: $groupid"
write::WriteString "Begin SubModelPartData // DEM-FEM-Wall. Group name: $groupid"
write::WriteString "End SubModelPartData"
write::WriteString "Begin SubModelPartNodes"
GiD_WriteCalculationFile nodes -sorted [dict create [write::GetWriteGroupName $groupid] [subst "%10i\n"]]
write::WriteString "End SubModelPartNodes"
write::WriteString "End SubModelPart"
write::WriteString ""
}
# TODO: Missing write properties for Custom Submodelparts

# Nodes are previously printed
# Print elements and connectivities
set elem [write::getValueByNode [$group selectNodes ".//value\[@n='Element']"] ]
write::writeGroupElementConnectivities $group $elem

DEM::write::writeSphereRadiusOnGroup $group

write::writeGroupSubModelPart DEM-CustomSmp $groupid Elements
}
}

proc DEM::write::GetDEMGroupNamesCustomSubmodelpart { } {
set groups [list ]
foreach group [DEM::write::GetDEMGroupsCustomSubmodelpart] {
set groupid [$group @n]
lappend groups [write::GetWriteGroupName $groupid]
}
return $groups
}
proc DEM::write::GetDEMGroupsCustomSubmodelpart { } {
set groups [list ]
set xp2 "[spdAux::getRoute [GetAttribute conditions_un]]/condition\[@n = 'DEM-CustomSmp'\]/group"
foreach group [[customlib::GetBaseRoot] selectNodes $xp2] {
set destination_mdpa [write::getValueByNode [$group selectNodes "./value\[@n='WhatMdpa'\]"]]
if {$destination_mdpa == "DEM"} {
set groupid [$group @n]
lappend groups [write::GetWriteGroupName $groupid]
lappend groups $group
}
}
return $groups
Expand Down Expand Up @@ -94,31 +97,18 @@ proc DEM::write::writeSphereRadius { } {
set root [customlib::GetBaseRoot]
set xp1 "[spdAux::getRoute [GetAttribute parts_un]]/group"
foreach group [$root selectNodes $xp1] {
set groupid [$group @n]
set grouppid [write::GetWriteGroupName $groupid]
write::WriteString "Begin NodalData RADIUS // GUI group identifier: $grouppid"
GiD_WriteCalculationFile connectivities [dict create $groupid "%.0s %10d 0 %10g\n"]
write::WriteString "End NodalData"
write::WriteString ""
DEM::write::writeSphereRadiusOnGroup $group
}
}

# proc DEM::write::GetNodalConditionsGroups { {include_cond 0} } { # TODO UNUSED CODE
# set groups [list ]
# set xp1 "[spdAux::getRoute [GetAttribute nodal_conditions_un]]/condition/group"
# foreach group [[customlib::GetBaseRoot] selectNodes $xp1] {
# set groupid [$group @n]
# if {$include_cond} {lappend groups [[$group parent] @n]}
# lappend groups [write::GetWriteGroupName $groupid]
# }
# return $groups
# }

# proc DEM::write::write2VelocityMeshes { } {
# foreach {cid groupid} [DEM::write::GetNodalConditionsGroups 1] {
# ::write::writeGroupSubModelPart $cid $groupid "nodal"
# }
# }
proc DEM::write::writeSphereRadiusOnGroup { group } {
set groupid [$group @n]
set print_groupid [write::GetWriteGroupName $groupid]
write::WriteString "Begin NodalData RADIUS // GUI group identifier: $print_groupid"
GiD_WriteCalculationFile connectivities [dict create $groupid "%.0s %10d 0 %10g\n"]
write::WriteString "End NodalData"
write::WriteString ""
}

proc DEM::write::writeDEMConditionMeshes { } {
set i 0
Expand Down Expand Up @@ -319,14 +309,15 @@ proc DEM::write::writeDEMConditionMeshes { } {
}
}

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

# Get all the groups with spheres
foreach group [GetSpheresGroups] {
foreach surface [GiD_EntitiesGroups get $group elements] {
foreach involved_group [GiD_EntitiesGroups entity_groups elements $surface] {
foreach surface [GiD_EntitiesGroups get $group nodes] {
foreach involved_group [GiD_EntitiesGroups entity_groups nodes $surface] {
set involved_group_id [write::GetWriteGroupName $involved_group]
if {$involved_group_id ni $groups} {lappend groups $involved_group_id}
}
Expand Down
2 changes: 1 addition & 1 deletion kratos.gid/apps/DEM/xml/Conditions.xml
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@
<outputs></outputs>
</ConditionItem>

<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">
<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">
<TopologyFeatures></TopologyFeatures>
<inputs></inputs>
<outputs></outputs>
Expand Down
4 changes: 3 additions & 1 deletion kratos.gid/apps/DEM/xml/Processes.xml
Original file line number Diff line number Diff line change
Expand Up @@ -344,7 +344,9 @@

<Process n="CustomSMP-Process" pn="Define custom submodelparts" python_module="assign_vector_by_direction_to_condition_process" kratos_module="KratosMultiphysics" check="DirectorVectorNonZero direction">
<inputs>
<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"/>
<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"/>
<parameter n="Element" pn="Element" type="combo" help=""/>
<parameter n="AdvancedMeshingFeatures" pn="AdvancedMeshingFeatures" type="combo" v="0" values="1,0" help="" />
</inputs>
</Process>

Expand Down
4 changes: 4 additions & 0 deletions kratos.gid/apps/DEM/xml/XmlController.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,10 @@ proc DEM::xml::CustomTree { args } {
}
}

set custom_smp_xpath "[spdAux::getRoute DEMConditions]/condition\[@n='DEM-CustomSmp'\]/value\[@n='Element'\]"
gid_groups_conds::setAttributes $custom_smp_xpath [list state hidden dict {[GetElements ElementType DEM]} ]
set custom_smp_xpath "[spdAux::getRoute DEMConditions]/condition\[@n='DEM-CustomSmp'\]/value\[@n='AdvancedMeshingFeatures'\]"
gid_groups_conds::setAttributes $custom_smp_xpath [list state hidden ]
# # Graphs in output settings
# if {[$root selectNodes "[spdAux::getRoute DEMResults]/condition\[@n='Graphs'\]"] eq ""} {
# gid_groups_conds::addF [spdAux::getRoute DEMResults] include [list n Graphs active 1 path {apps/DEM/xml/Graphs.spd}]
Expand Down
25 changes: 14 additions & 11 deletions kratos.gid/scripts/Writing/WriteElements.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -30,17 +30,10 @@ proc write::writeGroupElementConnectivities { gNode kelemtype} {
if {$nnodes ne ""} {
if {$etype ne "none"} {
set elem [::Model::getElement $kelemtype]
set top [$elem getTopologyFeature $etype $nnodes]
if {$top ne ""} {
set kratosElemName [$top getKratosName]
set s [mdpaIndent]
WriteString "${s}Begin Elements $kratosElemName// GUI group identifier: $group"
incr ::write::current_mdpa_indent_level
set formats [GetFormatDict $group $mid $nnodes]
GiD_WriteCalculationFile connectivities $formats
incr ::write::current_mdpa_indent_level -1
WriteString "${s}End Elements"
WriteString ""
set topology [$elem getTopologyFeature $etype $nnodes]
if {$topology ne ""} {
set kratos_element_type [$topology getKratosName]
write::writeGroupElementConnectivitiesFor $kratos_element_type $nnodes $group $mid
} else {
error [= "Element $kelemtype $etype ($nnodes nodes) not available for $ov entities on group $group"]
}
Expand All @@ -51,3 +44,13 @@ proc write::writeGroupElementConnectivities { gNode kelemtype} {
error [= "You have not assigned a proper entity to group $group"]
}
}
proc write::writeGroupElementConnectivitiesFor { kratos_element_type nnodes group mid } {
set s [mdpaIndent]
WriteString "${s}Begin Elements $kratos_element_type// GUI group identifier: $group"
incr ::write::current_mdpa_indent_level
set formats [GetFormatDict $group $mid $nnodes]
GiD_WriteCalculationFile connectivities $formats
incr ::write::current_mdpa_indent_level -1
WriteString "${s}End Elements"
WriteString ""
}