Пример #1
0
def rk2_step(sld_bodies, free_stream, vort_elems, dt):

    k1 = np.zeros((len(vort_elems), 1), dtype=complex)
    pos, strg, delta = np.array([
        vort_elems[i].pos for i in range(len(vort_elems))
    ]), np.array([vort_elems[i].strg
                  for i in range(len(vort_elems))]), vort_elems[0].delta
    poscp = [vort_elems[i].poscp for i in range(len(vort_elems))]

    k1[:] += [
        VPM.vel_body(sld_bodies, vort_elems[i].pos)
        for i in range(len(vort_elems))
    ]

    for i in range(len(vort_elems)):
        k1[i] += free_stream
    k1[:, 0] += vel_vort(pos, pos, strg, delta)

    for i in range(len(vort_elems)):
        vort_elems[i].pos += 0.5 * k1[i][0] * dt

    for body in sld_bodies:
        body.move_body(0.5 * dt)
    VPM.depenetrator(sld_bodies, vort_elems)

    A = VPM.get_coefficient_mat(sld_bodies)
    b = VPM.get_rhs(sld_bodies, free_stream, vort_elems)
    gamma = VPM.solve_gamma(sld_bodies, A, b)

    k2 = np.zeros((len(vort_elems), 1), dtype=complex)
    pos, strg, delta = np.array([
        vort_elems[i].pos for i in range(len(vort_elems))
    ]), np.array([vort_elems[i].strg
                  for i in range(len(vort_elems))]), vort_elems[0].delta
    poscp = [vort_elems[i].poscp for i in range(len(vort_elems))]

    k2[:] += [
        VPM.vel_body(sld_bodies, vort_elems[i].pos)
        for i in range(len(vort_elems))
    ]

    for i in range(len(vort_elems)):
        k2[i] += free_stream
    k2[:, 0] += vel_vort(pos, pos, strg, delta)

    for i in range(len(vort_elems)):
        vort_elems[i].poscp += k2[i][0] * dt
        vort_elems[i].pos = cp.copy(vort_elems[i].poscp)

    for body in sld_bodies:
        body.move_body(0.5 * dt)
    VPM.depenetrator(sld_bodies, vort_elems)
Пример #2
0
def plot_velfield(grid,SimulationData_pos,SimulationData_strg,body,fignum,Vinf=1+0j):
    x,y = grid
    z = x + 1j*y
    vel = np.zeros_like(z,dtype = complex)
    # print(np.shape(vel))
    for i in range(np.shape(vel)[1]):
        vel[i] = np.array([VPM.vel_body([body],z[i][j]) for j in range(np.shape(vel)[0])])[0] + Vinf
        vel[i] += itg.vel_vort(z[i].copy(),SimulationData_pos.copy(),SimulationData_strg.copy(),body.get_pnl_len()[0]/np.pi)
    plt.figure(fignum)
    plt.quiver(x,y,vel.real,vel.imag,scale = 75.0)
    plt.plot(body.get_vert().real,body.get_vert().imag,'b')
    plt.gca().set_aspect('equal',adjustable='box')
    plt.show()
Пример #3
0
def diffusion_step(vort_list, nu, dt):
    for j in range(len(vort_list)):
        if abs(vort_list[j].strg) > 0.01:
            n = int(abs(vort_list[j].strg) / 0.01)

            vort_list[j].strg = np.sign(vort_list[j].strg) * 0.01  # + zeta[0]
            temp = [
                vort_list.append(
                    VPM.vortex(vort_list[j].pos, vort_list[j].strg,
                               vort_list[j].delta)) for i in range(n - 1)
            ]

    zetax, zetay = nmdist([0, 0], [[2 * nu * dt, 0], [0, 2 * nu * dt]],
                          len(vort_list)).T
    zeta = zetax + 1j * zetay
    for i in range(len(vort_list)):
        vort_list[i].pos += zeta[i]
Пример #4
0
    return ret[n - 1:] / n

def accelometer(SimulationData_pos,SimulationData_strg):
	tsteps = len(SimulationData_pos)-1
	Xforce = []
	Xmom = np.array([np.sum(np.array(SimulationData_pos[i+1]).real*np.array(SimulationData_strg[i+1])) for i in range(tsteps)])

	Xforce = [(-(Xmom[i] - Xmom[i-1])/0.1) for i in range(1,len(Xmom))]
	Cd = np.array(Xforce)/(0.5*1*2)


	return Cd	

if __name__ == "__main__":
	body_list = []
	body_list.append(VPM.sld_bd(ctr_circ_vert(0j,1,50),1,0j))
	# body_list.append(VPM.sld_bd(ctr_circ_vert(3j,1,50),1,3j))
	# body_list.append(VPM.sld_bd(ctr_circ_vert(3+0j,1,50),1,3+0j))

	Vinf = 1+0j

	vort_pos = np.array([-2]*100) + 1j*np.linspace(-4,4,100)
	vort_list = [] #[VPM.vortex(1j,0,0.005)]
	# for i in range(len(vort_pos)):
	# 	#print(vort_pos[i])
	# 	vort_list.append(VPM.vortex(vort_pos[i],0.0,0.005))

	post,circt,t,vort_list = itg.simulate(body_list,Vinf,vort_list,0.002,2,0.1)
	
	# plotting_ParticlesPath(post,1)
	
Пример #5
0
def read_file(path):
    return VPM.read_file(path)
Пример #6
0
def write_file(path, data):
    VPM.write_file(path, data)
Пример #7
0
def simulate(sld_bodies, free_stream, vort_elems, nu, final_time, time_step):
    t = np.linspace(0, final_time, (final_time / time_step) + 1)
    position_t = []
    position_t.append(
        [cp.copy(vort_elems[j].pos) for j in range(len(vort_elems))])
    circulation_t = []
    circulation_t.append(
        [cp.copy(vort_elems[j].strg) for j in range(len(vort_elems))])

    vort_elems.append(VPM.vortex(0j, 0.0, 0.1))

    A = VPM.get_coefficient_mat(sld_bodies)
    b = VPM.get_rhs(sld_bodies, free_stream, vort_elems)
    gamma = cp.copy(VPM.solve_gamma(sld_bodies, A, b))

    new_blobs = VPM.slip_nullify(sld_bodies, vort_elems)

    rk2_step(sld_bodies, free_stream, vort_elems, time_step)

    len(vort_elems)
    pos, strg, delta = np.array([
        vort_elems[i].pos for i in range(len(vort_elems))
    ]), np.array([vort_elems[i].strg
                  for i in range(len(vort_elems))]), vort_elems[0].delta

    vort_elems.pop(-1)

    for i in range(len(t)):
        # print(i)

        [vort_elems.append(new_blobs[i]) for i in range(len(new_blobs))]

        diffusion_step(vort_elems, nu, time_step)

        VPM.depenetrator(sld_bodies, vort_elems)

        position_t.append(
            [cp.copy(vort_elems[j].pos) for j in range(len(vort_elems))])
        circulation_t.append(
            [cp.copy(vort_elems[j].strg) for j in range(len(vort_elems))])

        A = VPM.get_coefficient_mat(sld_bodies)
        b = VPM.get_rhs(sld_bodies, free_stream, vort_elems)
        gamma = VPM.solve_gamma(sld_bodies, A, b)

        new_blobs = VPM.slip_nullify(sld_bodies, vort_elems)

        rk2_step(sld_bodies, free_stream, vort_elems, time_step)

        len(vort_elems)
        pos, strg, delta = np.array([
            vort_elems[i].pos for i in range(len(vort_elems))
        ]), np.array([vort_elems[i].strg
                      for i in range(len(vort_elems))]), vort_elems[0].delta

    return position_t, circulation_t, t, vort_elems