Skip to content

Commit 7a97e27

Browse files
authored
Update fsm.py
1 parent fa031ee commit 7a97e27

File tree

1 file changed

+95
-6
lines changed

1 file changed

+95
-6
lines changed

fsm.py

Lines changed: 95 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,98 @@
1+
import numpy as np
2+
import matplotlib.pyplot as plt
3+
from numba import jit
14

2-
class FSM():
3-
4-
def __init__(self):
5-
6-
5+
@jit(nopython=True)
6+
def gsi(isweepStart, isweepEnd, istep, jsweepStart, jsweepEnd, jstep, u):
7+
bx = len(u)-1
8+
by = len(u[0])-1
9+
for i in range(isweepStart, isweepEnd, istep):
10+
for j in range(jsweepStart, jsweepEnd, jstep):
11+
# Local Solver
12+
if not((i == 0) or (i == bx)):
13+
a = min(u[i-1][j], u[i+1][j])
14+
else:
15+
if((i == 0)):
16+
a = min(u[i][j], u[i+1][j])
17+
else:
18+
a = min(u[i][j], u[i-1][j])
19+
if not((j==0) or (j == by)):
20+
b = min(u[i][j-1], u[i][j+1])
21+
else:
22+
if((j == 0)):
23+
b = min(u[i][j], u[i][j+1])
24+
else:
25+
b = min(u[i][j], u[i][j-1])
26+
ubar = inf
27+
if(abs(a-b) >= f[i][j]*h):
28+
ubar = min(a,b) + f[i][j]*h
29+
else:
30+
ubar = (a + b + np.sqrt(2*(f[i][j]*h)**2 - (a - b)**2))/2
31+
u[i][j] = min(ubar, u[i][j])
32+
return u
33+
def norm_2(mat1, mat2, h):
34+
return np.sqrt(sum(sum(abs(mat1-mat2) ** 2))* h**2)
735

36+
837
if __name__ == "__main__":
9-
print("-")
38+
gridNum =500
39+
center = round((gridNum)/2.0)
40+
inf = 10**6 # Assign Large positive value as Sup-Viscosity Solution
41+
h = 0.02 #
42+
u = np.zeros((gridNum+1, gridNum+1))
43+
f = np.zeros((gridNum+1, gridNum+1))
44+
for i in range(0, gridNum+1, 1):
45+
for j in range(0, gridNum+1, 1):
46+
u[i][j] = inf
47+
# ------ A Layer Model ----------------------
48+
for i in range(0, gridNum+1, 1):
49+
for j in range(0, gridNum+1, 1):
50+
if i < center:
51+
f[i][j] = 1/1
52+
else:
53+
f[i][j] = 1/2
54+
#---------------------------------------------
55+
src_x = 0
56+
src_y = 0
57+
u[src_x][src_y] = 0
58+
# --------------------------------------------
59+
dict1 = {
60+
"1": [gridNum,-1,0, gridNum,-1,0],
61+
"2": [gridNum,-1,0, 0,1,gridNum+1],
62+
"3": [0, 1,gridNum+1, gridNum,-1,0],
63+
"4": [0, 1,gridNum+1, 0,1,gridNum+1]
64+
}
65+
MaxIteration = 3 # In simple model error less than tolerance after 1-2 Iteration
66+
last_u = u.copy()
67+
# While(error<tolerance)
68+
for i in range(MaxIteration):
69+
[isweepStart,istep,isweepEnd,jsweepStart,jstep, jsweepEnd] = dict1["1"]
70+
u = gsi(isweepStart, isweepEnd, istep, jsweepStart, jsweepEnd, jstep, u)
71+
[isweepStart,istep,isweepEnd,jsweepStart,jstep, jsweepEnd] = dict1["2"]
72+
u = gsi(isweepStart, isweepEnd, istep, jsweepStart, jsweepEnd, jstep, u)
73+
[isweepStart,istep,isweepEnd,jsweepStart,jstep, jsweepEnd] = dict1["3"]
74+
u = gsi(isweepStart, isweepEnd, istep, jsweepStart, jsweepEnd, jstep, u)
75+
[isweepStart,istep,isweepEnd,jsweepStart,jstep, jsweepEnd] = dict1["4"]
76+
u = gsi(isweepStart, isweepEnd, istep, jsweepStart, jsweepEnd, jstep, u)
77+
print(norm_2(u, last_u,h))
78+
last_u = u.copy()
79+
print('---------------')
80+
81+
# ------ Show some figure ----------------------
82+
fig = plt.figure(figsize=(5, 5), dpi=300)
83+
ax = plt.gca()
84+
plt.imshow(u)
85+
ax.invert_yaxis()
86+
plt.title("FSM")
87+
cbar = plt.colorbar(fraction=0.05, pad=0.05)
88+
plt.show()
89+
90+
fig = plt.figure(figsize=(5, 5), dpi=300)
91+
ax = plt.gca()
92+
print(len(u))
93+
wait_item = abs(u)
94+
ctr = plt.contour(wait_item, levels=14,rightside_up =True)
95+
plt.clabel(ctr,fontsize=6,colors=('r'))
96+
k = plt.imshow(1/f)
97+
plt.show()
98+

0 commit comments

Comments
 (0)