Added old wiki
[dealii.wiki.git] / Mesh-Input-And-Output.md
1 # A little script to illustrate exchanging data with Cubit
2
3 ### Cubit
4
5 The following cubit journal file (Actually a pyton script) exports the current mesh and 
6 boundary conditions from cubit to a file "output.ucd" in the current directory.
7
8 This is a modification of the original script that takes into account boundary ids via
9 sidesets ids. If you want to save the boundary faces as well, you just need to 
10 add the relevant surfaces in 3d or curves in 2d to a sideset, and the id will be the one of the
11 sideset. 
12
13 ```
14 #!python
15 # This script will output whatever mesh you have currently in CUBIT
16 # in the AVS UCD format. (http://www.csit.fsu.edu/~burkardt/data/ucd/ucd.html)
17 # You may need to tweak it to get exactly what you want out of
18 # it.  Your mileage may vary.
19
20 # set the filename -- you may need the entire path
21 outucdfile = "output.inp"
22
23 outfile = open(outucdfile,"w")
24
25 cubit.cmd("body all rotate -90 about y")
26 cubit.cmd("body all reflect x")
27
28 # ============================================================
29 # Collect all the nodes
30 # ============================================================
31 group_id = cubit.get_id_from_name("temp_bc_curves")
32 if group_id != 0:
33   cubit.cmd("delete group " + str(group_id))
34 cubit.cmd("group 'temp_nodes' add node all")
35 group_id = cubit.get_id_from_name("temp_nodes")
36 node_list = cubit.get_group_nodes(group_id)
37 cubit.cmd("delete group " + str(group_id))
38 n_nodes = len(node_list)
39
40 # ============================================================
41 # Collect all the hex
42 # ============================================================
43 group_id = cubit.get_id_from_name("temp_hexes")
44 if group_id != 0:
45   cubit.cmd("delete group " + str(group_id))
46 cubit.cmd("group 'temp_hexes' add hex all")
47 group_id = cubit.get_id_from_name("temp_hexes")
48 hex_list = cubit.get_group_hexes(group_id)
49 cubit.cmd("delete group " + str(group_id))
50 n_hex_cells = len(hex_list)
51
52
53 # ============================================================ 
54 # Now the boundary conditions in 3d
55 # ============================================================
56 bc_surfaces = {}
57 n_bc_quads = 0
58
59 bc_ids = cubit.get_sideset_id_list()
60 for bc_id in bc_ids :
61   bc_surfaces[= cubit.get_sideset_surfaces(bc_id)
62   for bc_surface in  bc_surfaces[bc_id](bc_id]):
63     bc_quads = cubit.get_surface_quads(bc_surface)
64     n_bc_quads += len(bc_quads)
65
66
67 # ============================================================ 
68 # Collect all the surfaces. Notice that the surfaces that make up a
69 # volume are not grouped here. This is only for 2d objects, i.e.,
70 # when the number n_hex_cells is zero.
71 # ============================================================
72 surface_list = ()
73 quad_cell_list = {}
74 n_quad_cells = 0
75 if n_hex_cells == 0:
76   group_id = cubit.get_id_from_name("temp_surfs")
77   if group_id != 0:
78     cubit.cmd("delete group " + str(group_id))
79   cubit.cmd("group 'temp_surfs' add surf all")
80   group_id = cubit.get_id_from_name("temp_surfs")
81   surface_list = cubit.get_group_surfaces(group_id)
82   cubit.cmd("delete group " + str(group_id))
83   for surface_id in surface_list:
84     quad_cell_list[= cubit.get_surface_quads(surface_id)
85     n_quad_cells +=  len(quad_cell_list[surface_id](surface_id]))
86
87 # ============================================================ 
88 # Now the boundary conditions in 2d
89 # ============================================================
90 bc_curves = {}
91 bc_edges = {}
92 n_bc_edges = 0
93 if n_hex_cells == 0:
94   bc_ids = cubit.get_sideset_id_list()
95   for bc_id in bc_ids :
96     bc_curves[= cubit.get_sideset_curves(bc_id)
97     group_id = cubit.get_id_from_name("temp_bc_curves")
98     if group_id != 0:
99       cubit.cmd("delete group " + str(group_id))
100     for bc_curve in bc_curves[bc_id](bc_id]):
101       cubit.cmd("group 'temp_bc_curves' add edge all in curve " + str(bc_curve))
102     group_id = cubit.get_id_from_name("temp_bc_curves")
103     bc_edges[= cubit.get_group_edges(group_id)
104     cubit.cmd("delete group " + str(group_id))
105     n_bc_edges +=  len(bc_edges[bc_id](bc_id]))
106
107 print 'Edges: ' + str(n_bc_edges)
108
109 # ============================================================
110 # Now we write the header.
111 # ============================================================
112 n_elements = n_hex_cells + n_bc_quads + n_quad_cells + n_bc_edges
113 outfile.write(str(n_nodes) + " " + str(n_elements) + " 0 0 0\n")
114
115
116 # ============================================================
117 # The node list.
118 # ============================================================
119 for node_num in node_list:
120    outfile.write(str(node_num ))
121    outfile.write("\t")
122    node_coord = cubit.get_nodal_coordinates(node_num)
123    if abs(node_coord[outfile.write("0 ")
124    else :
125        outfile.write(str(node_coord[2](2])<1e-15:)) + " ")
126    if abs(node_coord[outfile.write("0 ")
127    else :
128        outfile.write(str(node_coord[1](1])<1e-15:)) + " ")
129    if abs(node_coord[outfile.write("0")
130    else :
131        outfile.write(str(node_coord[0](0])<1e-15:)))
132    outfile.write("\n")
133
134
135 # ============================================================
136 # The hex list. 3d
137 # ============================================================
138 k = 1
139 for hex_num in hex_list:
140    outfile.write(str(k) + " 0 " + " hex  ")
141    k += 1
142    hex_nodes = cubit.get_connectivity("Hex", hex_num)
143    i = 0
144    while i < 8:
145       outfile.write(str(hex_nodes[+ " ")
146       i += 1
147    outfile.write("\n")
148
149
150 # ============================================================
151 # The quads on the boundaries. 3d
152 # Note that the boundary id is given by the sideset id.
153 # ============================================================
154 if n_hex_cells != 0:
155   k=1
156   for bc_id in bc_ids:
157     for bc_surface in  bc_surfaces[bc_id](i])):
158       bc_quads = cubit.get_surface_quads(bc_surface)
159       for quad_num in bc_quads:
160         outfile.write(str(k))
161         k += 1
162         outfile.write(" " + str(bc_id) + " quad ")
163         quad_nodes = cubit.get_connectivity("Quad", quad_num)
164         outfile.write(str(quad_nodes[+ " ")
165         outfile.write(str(quad_nodes[3](0]))) + " ")
166         outfile.write(str(quad_nodes[+ " ")
167         outfile.write(str(quad_nodes[1](2]))))
168         outfile.write("\n")
169
170 # ============================================================
171 # The quads on the surfaces. 2d
172 # ============================================================
173 if n_hex_cells == 0:
174   k = 1
175   for surface_id in surface_list:
176     for quad_num in quad_cell_list[outfile.write(str(k))
177       k += 1
178       outfile.write(" " + str(surface_id) + " quad ")
179       quad_nodes = cubit.get_connectivity("Quad", quad_num)
180       outfile.write(str(quad_nodes[0](surface_id]:)) + " ")
181       outfile.write(str(quad_nodes[+ " ")
182       outfile.write(str(quad_nodes[2](3]))) + " ")
183       outfile.write(str(quad_nodes[outfile.write("\n")
184
185 # ============================================================
186 # The edges on the curves. 2d
187 # Boundary id = sideset_id
188 # ============================================================
189 if n_hex_cells == 0:
190   k=1
191   for bc_id in bc_ids:
192     for edge_num in bc_edges[bc_id](1]))):
193       outfile.write(str(k))
194       k += 1
195       outfile.write(" " + str(bc_id) + " line ")
196       edge_nodes = cubit.get_connectivity("Edge", edge_num)
197       outfile.write(str(edge_nodes[+ " ")
198       outfile.write(str(edge_nodes[1](0]))))
199       outfile.write("\n")
200
201 outfile.close()
202
203 cubit.cmd("body all reflect x")
204 cubit.cmd("body all rotate 90 about y")
205
206 print str(n_nodes) + " nodes\n"
207 print str(n_hex_cells) + " hexes\n"
208 print str(n_quad_cells) + " quads\n"
209 print str(n_bc_quads) + " face_quads\n"
210 print str(n_bc_edges) + " edges\n"
211
212 ```

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.