Beispiel #1
0
 def init_step(self, mesh, ul, ur):
     step = np.zeros(len(mesh.centers()))
     xr   = 1.0
     x    = mesh.centers()
     for i in range(len(x)):
         if x[i] < xr:
             step[i] = ul
         elif xr <= x[i] <= 2.0:
             step[i] = 3.0-x[i] 
         elif x[i] > 2.0:
             step[i] = ur
     return step
Beispiel #2
0
def init_square(mesh):
    return (1 + sign(-(mesh.centers() / mesh.length - .25) *
                     (mesh.centers() / mesh.length - .75))) / 2
Beispiel #3
0
def init_sinper(mesh, k):
    #k = 2 # nombre d'onde
    return sin(2 * k * pi / mesh.length * mesh.centers())
Beispiel #4
0
def init_sinpack(mesh):
    return sin(2 * 2 * pi / mesh.length * mesh.centers()) * (
        1 + sign(-(mesh.centers() / mesh.length - .25) *
                 (mesh.centers() / mesh.length - .75))) / 2
Beispiel #5
0
def init_sinperk(mesh, k):
    return np.sin(2*k*np.pi/mesh.length*mesh.centers())
Beispiel #6
0
def init_rupturebarrage(mesh):
    h0_vect = np.zeros(len(mesh.centers())) + 0.5
    for i in range(len(mesh.centers())):
        if mesh.centers()[i] < 1:
            h0_vect[i] = 1
    return h0_vect
Beispiel #7
0
def init_gouttedeau(mesh, max_height):
    return max_height * (-np.exp(-((mesh.centers() - 1) / 0.1)**2)) + .1
Beispiel #8
0
u0_vect = .5 + np.zeros((ncell))
w_init = [h0_vect, u0_vect * h0_vect]

# Define RHS
rhs = modeldisc.fvm(model, mesh, xmeth, numflux=numflux, bcL=bcL, bcR=bcR)
field0 = rhs.fdata_fromprim(w_init)
# Define the solver
solver = tmeth(mesh, rhs)
# Solution
w_sol = solver.solve(field0, cfl, tsave)
# VERIFIED : w_sol contains solutions in conservative variables [h,q=h*u]
solver.show_perf()

fig2, (ax1, ax2) = plt.subplots(1, 2, figsize=(15, 7))
ax1.set_xlabel('$x$'), ax1.set_ylabel('$h(t,x)$'), ax1.set_title(
    'Hauteur de fluide au temps t = ' + str(endtime) + '\n (CFL ' + str(cfl) +
    ', flux : ' + numflux + ', ' + xmethstr + ', ' + tmethstr + ')')
ax1.set(xlim=(-0.1, mesh.centers()[-1] + 0.1), ylim=(-0.0, .2))
ax1.grid(linestyle='--', color='0.5')
line1, = ax1.plot(mesh.centers(), w_sol[-1].data[0])
#line1, = ax1.plot(mesh.centers(),h0_vect)

ax2.set_xlabel('$x$'), ax2.set_ylabel('$u(t,x)$'), ax2.set_title(
    'Vitesse du fluide au temps t = ' + str(endtime) + '\n (CFL ' + str(cfl) +
    ', flux : ' + numflux + ', ' + xmethstr + ', ' + tmethstr + ')')
ax2.grid(linestyle='--', color='0.5')
line2, = ax2.plot(mesh.centers(), w_sol[-1].data[1] / w_sol[-1].data[0])

plt.show()
Beispiel #9
0
# extrapol1(), extrapol2()=extrapolk(1), centered=extrapolk(-1), extrapol3=extrapol(1./3.)
xmeth = extrapol1()
# explicit, rk2, rk3ssp, rk4, implicit, trapezoidal=cranknicolson
tmeth = explicit

#boundary condition bc : type of boundary condition - "p"=periodic / "d"=Dirichlet
bc = 'p'

# initialization
field0 = scafield(mymodel, bc, mesh.ncell)
field0.qdata[0] = init(mesh)

# solver integration
solver = tmeth(mesh, xmeth)
start = time.clock()
results = solver.solve(field0, cfl, tsave)
print "cpu time of computation (", solver.nit, "it) :", time.clock(
) - start, "s"

# display and save results to png file
style = ['o', 'x', 'D', '*', 'o', 'o']
fig = figure(1, figsize=(10, 8))
plot(mesh.centers(), results[0].qdata[0], '-')
labels = ["initial condition"]
for t in range(1, len(tsave)):
    plot(mesh.centers(), results[t].qdata[0], style[t - 1])
    labels.append(", t=%.1f" % results[t].time)
legend(labels, loc='upper left', prop={'size': 10})
fig.savefig('result.png', bbox_inches='tight')
show()
Beispiel #10
0
 def init_sin(self, mesh):
     k = 2 # nombre d'onde
     omega = k*np.pi/mesh.length
     return .2+np.sin(omega*mesh.centers())
Beispiel #11
0
def init_sinpack_half(mesh):
    return sin(2*2*pi*mesh.centers())*(1+sign(-(mesh.centers()-.25)*(mesh.centers()-.75)))/2