@@ -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