UCFD_SPARSE  v1.0
Documentation
Loading...
Searching...
No Matches
pbutils.py
Go to the documentation of this file.
1import numba as nb
2import numpy as np
3import re
4
5@nb.jit(nopython=True, fastmath=True)
6def make_nei_ele(m, n, l, nei_ele):
7 """
8 Computes nei_ele array
9
10 Only for hexahedral mesh
11
12 parameter
13 ---------
14 m : x direction elements
15 n : y direction elements
16 l : z direction elements
17 """
18
19 idx = 0
20 ml = m*l
21 nml = n*m*l
22
23 for j in range(n):
24 for i in range(m):
25 for k in range(l):
26 # Next or previous neighbor cell count
27 ny = idx-ml
28 py = idx+ml
29 nx = idx-l
30 px = idx+l
31 nz = idx-1
32 pz = idx+1
33
34 # Handling grid boundary
35 # -y direction
36 if ny < 0:
37 nei_ele[0, idx] = idx
38 else:
39 nei_ele[0, idx] = ny
40
41 # -x direction
42 if nx < j*ml:
43 nei_ele[1, idx] = idx
44 else:
45 nei_ele[1, idx] = nx
46
47 # +z direction
48 if pz >= j*ml + (i+1)*l:
49 nei_ele[2, idx] = idx
50 else:
51 nei_ele[2, idx] = pz
52
53 # +x direction
54 if px >= (j+1)*ml:
55 nei_ele[3, idx] = idx
56 else:
57 nei_ele[3, idx] = px
58
59 # -z direction
60 if nz < j*ml + i*l:
61 nei_ele[4, idx] = idx
62 else:
63 nei_ele[4, idx] = nz
64
65 # +y direction
66 if py >= nml:
67 nei_ele[5, idx] = idx
68 else:
69 nei_ele[5, idx] = py
70
71 idx += 1
72
73
74@nb.jit(nopython=True, fastmath=True)
75def make_coloring(m, n, l, icolor, lcolor):
76 """
77 2-Color Algorithm for hexahedral mesh
78 """
79 neles = m*n*l
80 denom = neles//2
81 cb = denom
82 ml = m*l
83
84 ca = 0
85 ele = 0
86
87 while ele < neles:
88 for j in range(n):
89 ist = (j*ml)//2
90 iend = (j+1)*ml//2
91
92 for ind in range(ist, iend):
93 icolor[ca+ind] = ele
94 lcolor[ele] = ca//denom
95 ele += 1
96 icolor[cb+ind] = ele
97 lcolor[ele] = cb//denom
98 ele += 1
99
100 tmp = ca
101 ca = cb
102 cb = tmp
103
104
105def read_input(fname):
106 isnum = re.compile('\d+')
107
108 try:
109 src = open(fname).read()
110 except:
111 print("[Error] Cannot open the input file")
112 return None
113
114 nums = re.findall(isnum, src)
115 if len(nums) != 7:
116 print("[Error] Missing input parameter(s)")
117 return None
118
119 return np.array([eval(num) for num in nums])