Skip to content

Commit 5a4b29c

Browse files
Merge pull request #957 from KratosMultiphysics/mdpa-import-quadratic-mesh
MDPA Import quadratic mesh
2 parents 2ba04d1 + cd93f66 commit 5a4b29c

1 file changed

Lines changed: 85 additions & 9 deletions

File tree

kratos.gid/scripts/Controllers/MdpaImportMesh.tcl

Lines changed: 85 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

187220
proc 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
259335
GiD_RegisterExtensionProc ".mdpa" PRE Kratos::ReadPreSingleFile

0 commit comments

Comments
 (0)