@@ -74,6 +74,29 @@ proc Kratos::ReadPre { filename } {
7474 }
7575 }
7676 }
77+
78+ if {[string match " Begin Geometries*" $line ]} {
79+ set element_type [Kratos::GuessElementTypeFromMDPA $line ]
80+ while { ![eof $fp ] } {
81+ gets $fp line
82+ if {$line ne " End Geometries" } {
83+ # lo del elemento
84+ set raw [regsub -all {\s+} $line $space ]
85+ set id [lindex $raw 0]
86+ set nodes [lrange $raw 1 end]
87+ if {[llength $nodes ] > 1} {
88+ set nodes_new [list ]
89+ foreach node $nodes {lappend nodes_new [expr $node + $offset_nodes ]}
90+ GiD_Mesh create element [expr $offset_elements + $id ] $element_type [llength $nodes_new ] $nodes_new
91+ } else {
92+ dict set spheres_dict $nodes element_type $element_type
93+ dict set spheres_dict $nodes element $id
94+ }
95+ } else {
96+ break
97+ }
98+ }
99+ }
77100 if {[string match " Begin NodalData RADIUS*" $line ]} {
78101 while { ![eof $fp ] } {
79102 gets $fp line
@@ -142,6 +165,16 @@ proc Kratos::ReadPre { filename } {
142165 }
143166 }
144167 }
168+ if {[string trim $line ] eq " Begin SubModelPartGeometries" } {
169+ while { ![eof $fp ] } {
170+ gets $fp line
171+ if {[string trim $line ] ne " End SubModelPartGeometries" } {
172+ GiD_EntitiesGroups assign $group_name elements [expr $offset_elements + [string trim $line ]]
173+ } else {
174+ break
175+ }
176+ }
177+ }
145178 if {[string trim $line ] eq " Begin SubModelPartConditions" } {
146179 while { ![eof $fp ] } {
147180 gets $fp line
@@ -186,24 +219,46 @@ proc Kratos::ReadPre { filename } {
186219
187220proc Kratos::GuessElementTypeFromMDPA {line} {
188221 set element_type " unknown"
189- set element_name [lindex $line 2]
190- set element_name [lindex [split $element_name " //" ] 0]
191-
222+ set entity [lindex $line 1]
223+ set element_name1 [lindex $line 2]
224+ set element_name [lindex [split $element_name1 " //" ] 0]
225+
192226 if {$element_name eq " Sphere3D" } {
193227 set element_type " Sphere"
194228 } elseif {$element_name in {" SphericContinuumParticle3D" " SphericParticle3D" }} {
195229 set element_type " Sphere"
196230 } elseif {$element_name in {" CylinderContinuumParticle2D" " CylinderParticle2D" }} {
197231 set element_type " Circle"
198232 } else {
199- set dim [string index $element_name end-3]
200- set nnodes [string index $element_name end-1]
233+ if {$entity eq " Geometries" } {
234+ set dim [string index $element_name end-2]
235+ set nnodes [string index $element_name end]
236+ } else {
237+ set dim [string index $element_name end-3]
238+ set nnodes [string index $element_name end-1]
239+ }
240+ # 0: linear, 1: quadratic, 2: biquadratic
241+ set detected_mesh_quad [Kratos::GuessQuadMesh $element_name $dim $nnodes ]
242+ set is_quadratic [GiD_Set Model(QuadraticType)]
243+ if { $detected_mesh_quad eq " 0" } {
244+ if {$is_quadratic ne " 0" } {W " We have changed the mesh mode to linear. Check Mesh menu to change it back." }
245+ GiD_Set Model(QuadraticType) 0
246+ }
247+ if {$detected_mesh_quad eq " 1" } {
248+ if {$is_quadratic ne " 1" } {W " We have changed the mesh mode to quadratic. Check Mesh menu to change it back." }
249+ GiD_Set Model(QuadraticType) 1
250+ }
251+
201252 switch $nnodes {
202253 2 {
203254 set element_type " Line"
204255 }
205256 3 {
206- set element_type " Triangle"
257+ if {$is_quadratic eq " 0" } {
258+ set element_type " Triangle"
259+ } else {
260+ set element_type " Line"
261+ }
207262 }
208263 4 {
209264 if {$dim eq 2} {
@@ -216,10 +271,14 @@ proc Kratos::GuessElementTypeFromMDPA {line} {
216271 set element_type " Pyramid"
217272 }
218273 6 {
219- if {$dim eq 2} {
220- set element_type " Triangle"
274+ if {$is_quadratic eq " 0" } {
275+ if {$dim eq 2} {
276+ set element_type " Triangle"
277+ }
221278 } else {
222- set element_type " Prism"
279+ if {$dim eq 2} {
280+ set element_type " Triangle"
281+ }
223282 }
224283 }
225284 8 {
@@ -255,5 +314,22 @@ proc Kratos::GuessElementTypeFromMDPA {line} {
255314 return $element_type
256315}
257316
317+ proc Kratos::GuessQuadMesh {element_name dim nnodes} {
318+ if {$nnodes eq 6 && $dim eq 2} {return 1}
319+ if {$nnodes eq 4 && $dim eq 2} {return 0}
320+ if {$nnodes eq 4 && $dim eq 3} {return 0}
321+ if {$nnodes eq 8 && $dim eq 2} {return 1}
322+ if {$nnodes eq 8 && $dim eq 3} {return 0}
323+ if {$nnodes eq 2 } {return 0}
324+ if {$nnodes eq 9 } {return 2}
325+ if {$nnodes eq 20 } {return 1}
326+ if {$nnodes eq 27 } {return 2}
327+ if {$nnodes eq 15 } {return 1}
328+ if {$nnodes eq 18 } {return 2}
329+ if {$nnodes eq 5 } {return 0}
330+ if {$nnodes eq 13 } {return 1}
331+ return -1
332+ }
333+
258334# register the proc to be automatically called when dropping a file
259335GiD_RegisterExtensionProc " .mdpa" PRE Kratos::ReadPreSingleFile
0 commit comments