Skip to content

Commit 7274079

Browse files
Improved mdpa import for dem
1 parent d2676f3 commit 7274079

1 file changed

Lines changed: 36 additions & 6 deletions

File tree

kratos.gid/scripts/Controllers/MdpaImportMesh.tcl

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ proc Kratos::ReadPre { filename } {
3030
set layer Layer0
3131
set fail 0
3232
set state 0
33+
set spheres_dict [dict create]
34+
set space " "
3335
::GidUtils::WaitState
3436
while { ![eof $fp] } {
3537
# take next line
@@ -39,7 +41,7 @@ proc Kratos::ReadPre { filename } {
3941
while { ![eof $fp] } {
4042
gets $fp line
4143
if {$line ne "End Nodes"} {
42-
lassign [regsub -all {\s+} $line " "] id x y z
44+
lassign [regsub -all {\s+} $line $space] id x y z
4345
GiD_Mesh create node [expr $offset_nodes + $id] [list $x $y $z]
4446
} else {
4547
break
@@ -52,12 +54,36 @@ proc Kratos::ReadPre { filename } {
5254
gets $fp line
5355
if {$line ne "End Elements"} {
5456
# lo del elemento
55-
set raw [regsub -all {\s+} $line " "]
57+
set raw [regsub -all {\s+} $line $space]
5658
set id [lindex $raw 0]
5759
set nodes [lrange $raw 2 end]
58-
set nodes_new [list ]
59-
foreach node $nodes {lappend nodes_new [expr $node + $offset_nodes]}
60-
GiD_Mesh create element [expr $offset_elements + $id] $element_type [llength $nodes_new] $nodes_new
60+
if {[llength $nodes] > 1} {
61+
set nodes_new [list ]
62+
foreach node $nodes {lappend nodes_new [expr $node + $offset_nodes]}
63+
GiD_Mesh create element [expr $offset_elements + $id] $element_type [llength $nodes_new] $nodes_new
64+
} else {
65+
dict set spheres_dict $nodes element_type $element_type
66+
dict set spheres_dict $nodes element $id
67+
}
68+
} else {
69+
break
70+
}
71+
}
72+
}
73+
if {[string match "Begin NodalData RADIUS*" $line]} {
74+
while { ![eof $fp] } {
75+
gets $fp line
76+
if {$line ne "End NodalData"} {
77+
set raw [regsub -all {\s+} $line $space]
78+
set id [lindex $raw 0]
79+
set element [dict get $spheres_dict $id element]
80+
set rad [lindex $raw 2]
81+
set element_type [dict get $spheres_dict $id element_type]
82+
if {$element_type eq "Circle"} {
83+
GiD_Mesh create element [expr $offset_elements + $element] $element_type 1 [expr $id + $offset_nodes] $rad 0 0 1
84+
} else {
85+
GiD_Mesh create element [expr $offset_elements + $element] $element_type 1 [expr $id + $offset_nodes] $rad
86+
}
6187
} else {
6288
break
6389
}
@@ -69,7 +95,7 @@ proc Kratos::ReadPre { filename } {
6995
gets $fp line
7096
if {$line ne "End Conditions"} {
7197
# lo del elemento
72-
set raw [regsub -all {\s+} $line " "]
98+
set raw [regsub -all {\s+} $line $space]
7399
set id [lindex $raw 0]
74100
if {$id in [dict exists $conditions_dict $id]} {next}
75101
set nodes [lrange $raw 2 end]
@@ -153,6 +179,10 @@ proc Kratos::GuessElementTypeFromMDPA {line} {
153179

154180
if {$element_name eq "Sphere3D"} {
155181
set element_type "Sphere"
182+
} elseif {$element_name in {"SphericContinuumParticle3D" "SphericParticle3D"}} {
183+
set element_type "Sphere"
184+
} elseif {$element_name in {"CylinderContinuumParticle2D" "CylinderParticle2D"}} {
185+
set element_type "Circle"
156186
} else {
157187
set dim [string index $element_name end-3]
158188
set nnodes [string index $element_name end-1]

0 commit comments

Comments
 (0)