Skip to content

Commit 7229d67

Browse files
committed
Merge pull request #34 from danielru/setup/fwsw_acoustic1d
Setup/fwsw acoustic1d
2 parents 2970302 + 94491fd commit 7229d67

File tree

3 files changed

+38
-25
lines changed

3 files changed

+38
-25
lines changed

examples/acoustic_1d_imex/HookClass.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ def __init__(self):
2020

2121
# add figure object for further use
2222
# self.fig = plt.figure(figsize=(18,6))
23-
self.fig = plt.figure(figsize=(9,9))
23+
#self.fig = plt.figure(figsize=(9,9))
2424

2525

2626
def dump_step(self,status):
@@ -31,17 +31,17 @@ def dump_step(self,status):
3131
status: status object per step
3232
"""
3333
super(plot_solution,self).dump_step(status)
34-
34+
3535
if False:
3636
yplot = self.level.uend.values
3737
xx = self.level.prob.mesh
3838
self.fig.clear()
3939
plt.plot(xx, yplot[0,:])
4040
plt.axes().set_xlim(xmin = xx[0], xmax = np.max(xx))
41-
plt.axes().set_ylim(ymin=-1.0, ymax=1.0)
42-
plt.axes().set_aspect('equal')
41+
plt.axes().set_ylim(ymin=-0.1, ymax=1.1)
42+
#plt.axes().set_aspect('equal')
4343
plt.xlabel('x')
44-
plt.ylabel('u')
44+
plt.ylabel('p')
4545
#plt.tight_layout()
4646
plt.show(block=False)
4747
plt.pause(0.00001)

examples/acoustic_1d_imex/ProblemClass.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,12 @@ def __init__(self, cparams, dtype_u, dtype_f):
5656
# invoke super init, passing number of dofs, dtype_u and dtype_f
5757
super(acoustic_1d_imex,self).__init__(self.nvars,dtype_u,dtype_f)
5858

59-
self.mesh = np.linspace(0.0, 2.0*np.pi, self.nvars[1], endpoint=False)
59+
self.mesh = np.linspace(0.0, 1.0, self.nvars[1], endpoint=False)
6060
self.dx = self.mesh[1] - self.mesh[0]
6161

6262
self.Dx = -self.cadv*getWave1DAdvectionMatrix(self.nvars[1], self.dx, self.order_adv)
6363
self.Id, A = getWave1DMatrix(self.nvars[1], self.dx, ['periodic','periodic'], ['periodic','periodic'])
64-
self.A = -self.cs*A
64+
self.A = -self.cs*A
6565

6666
def solve_system(self,rhs,factor,u0,t):
6767
"""
@@ -160,9 +160,16 @@ def u_exact(self,t):
160160
exact solution
161161
"""
162162

163+
sigma_0 = 0.1
164+
k = 7.2*np.pi
165+
x_0 = 0.75
166+
x_1 = 0.25
167+
163168
me = mesh(self.nvars)
164-
me.values[0,:] = 0.5*u_initial(self.mesh - (self.cadv + self.cs)*t) + 0.5*u_initial(self.mesh - (self.cadv - self.cs)*t)
165-
me.values[1,:] = 0.5*u_initial(self.mesh - (self.cadv + self.cs)*t) - 0.5*u_initial(self.mesh - (self.cadv - self.cs)*t)
169+
#me.values[0,:] = 0.5*u_initial(self.mesh - (self.cadv + self.cs)*t) + 0.5*u_initial(self.mesh - (self.cadv - self.cs)*t)
170+
#me.values[1,:] = 0.5*u_initial(self.mesh - (self.cadv + self.cs)*t) - 0.5*u_initial(self.mesh - (self.cadv - self.cs)*t)
171+
me.values[0,:] = np.exp(-np.square(self.mesh-x_0-self.cs*t)/(sigma_0*sigma_0)) + np.exp(-np.square(self.mesh-x_1-self.cs*t)/(sigma_0*sigma_0))*np.cos(k*(self.mesh-self.cs*t)/sigma_0)
172+
me.values[1,:] = me.values[0,:]
166173
return me
167174

168175

examples/acoustic_1d_imex/playground.py

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -30,19 +30,19 @@
3030
lparams['restol'] = 1E-10
3131

3232
sparams = {}
33-
sparams['maxiter'] = 20
33+
sparams['maxiter'] = 2
3434

3535
# setup parameters "in time"
36-
t0 = 0
37-
dt = 0.01
38-
Tend = 100*dt
39-
36+
t0 = 0.0
37+
Tend = 3.0
38+
dt = Tend/float(154)
39+
4040
# This comes as read-in for the problem class
4141
pparams = {}
42-
pparams['nvars'] = [(2,500)]
43-
pparams['cadv'] = 0.1
42+
pparams['nvars'] = [(2,512)]
43+
pparams['cadv'] = 0.0
4444
pparams['cs'] = 1.0
45-
pparams['order_adv'] = 4
45+
pparams['order_adv'] = 5
4646

4747
# This comes as read-in for the transfer operations
4848
tparams = {}
@@ -55,7 +55,7 @@
5555
description['dtype_u'] = mesh
5656
description['dtype_f'] = rhs_imex_mesh
5757
description['collocation_class'] = collclass.CollGaussLobatto
58-
description['num_nodes'] = 4
58+
description['num_nodes'] = 2
5959
description['sweeper_class'] = imex_1st_order
6060
description['level_params'] = lparams
6161
description['hook_class'] = plot_solution
@@ -79,11 +79,17 @@
7979

8080
fig = plt.figure(figsize=(8,8))
8181

82-
plt.plot(P.state.grid.x.centers, uex.values[0,:], '+', color='b', label='u (exact)')
83-
plt.plot(P.state.grid.x.centers, uend.values[0,:], '-', color='b', label='u (SDC)')
84-
plt.plot(P.state.grid.x.centers, uex.values[1,:], '+', color='r', label='p (exact)')
85-
plt.plot(P.state.grid.x.centers, uend.values[1,:], '-', color='r', label='p (SDC)')
86-
plt.legend()
82+
sigma_0 = 0.1
83+
x_0 = 0.75
84+
85+
#plt.plot(P.mesh, uex.values[0,:], '+', color='b', label='u (exact)')
86+
#plt.plot(P.mesh, uend.values[0,:], '-', color='b', label='u (SDC)')
87+
#plt.plot(P.mesh, uex.values[1,:], '+', color='r', label='p (exact)')
88+
plt.plot(P.mesh, uend.values[1,:], '-', color='b', linewidth=2.0, label='p (SDC)')
89+
p_slow = np.exp(-np.square(P.mesh-x_0)/(sigma_0*sigma_0))
90+
plt.plot(P.mesh, p_slow, '+', color='r', markersize=4, label='slow mode')
91+
plt.legend(loc=2)
8792
plt.xlim([0, 1])
88-
plt.ylim([-1, 1])
89-
plt.show()
93+
plt.ylim([-0.1, 1.1])
94+
#plt.show()
95+
plt.gcf().savefig('fwsw-sdc-K'+str(sparams['maxiter'])+'-M'+str(description['num_nodes'])+'.pdf', bbox_inches='tight')

0 commit comments

Comments
 (0)