示例#1
0
    dt = 100.0
    if (ca.velocity().max()>1.0e-7):
        dt = float(0.5*smallest_size/ca.velocity().max())
    if (max_dt < dt):
        dt = max_dt
    it.command("solve time {}".format(dt))
    it.command("cfd update")
    cfd_link.send_data(dt) # solve interval
    
    new_porosity = ca.porosity()
    cfd_link.send_data(old_porosity*(1-r_factor)+new_porosity*r_factor)
    old_porosity = new_porosity
    
    new_force = (ca.drag().T/element_volume).T/fluid_density
    cfd_link.send_data(old_force*(1-r_factor)+new_force*r_factor)
    old_force = new_force
    
    ca.set_pressure(cfd_link.read_data())
    ca.set_pressure_gradient(cfd_link.read_data())
    
    time += dt
    newu = cfd_link.read_data()
    ca.set_velocity(oldu*(1-r_factor)+newu*r_factor)
    oldu = newu

cfd_link.send_data(0.0) # solve interval
cfd_link.close()
del cfd_link

it.command("history write 1,2 file 'fluidized_bed_4.txt' truncate")
    set gravity 0 0 -9.81
    def fluid_time
      global fluid_time = mech.age
    end
    ball history id 1 zvelocity id 1
    history add id 2 fish @fluid_time
    plot clear
    plot add hist 1 vs 2
    plot add cfdelement shape arrow colorby vectorattribute "velocity"
    """.format(fluid_density, fluid_viscosity))

    element_volume = ca.volume()
    dt = 0.005

    for i in range(100):
        it.command("solve age {}".format(it.mech_age()+dt))
        print "sending solve time"
        cfd_link.send_data(dt) # solve interval
        cfd_link.send_data(ca.porosity())
        cfd_link.send_data((ca.drag().T/element_volume).T/fluid_density)
        print " cfd solve started"
        ca.set_pressure(cfd_link.read_data())
        ca.set_pressure_gradient(cfd_link.read_data())
        ca.set_velocity(cfd_link.read_data())
        print " cfd solve ended"

    cfd_link.send_data(0.0) # solve interval


    print "ball z velocity", it.ball.find(1).vel_z()
        n=ca.porosity()
        cfd_link.send_data(n)
        ca.set_extra(1, np.zeros(it.element.cfd.count()))
        ca.set_extra(2, np.zeros(it.element.cfd.count()))
        ca.set_extra(3, np.zeros((it.element.cfd.count(),3)))
        for b in it.ball.cfd.list():
            for e,v in zip(b.elements(), b.overlaps()):
                e.set_extra(1, e.extra(1)+v*b.ball().radius())
                e.set_extra(2, e.extra(2)+v)
                e.set_extra(3, e.extra(3)+v*b.ball().vel())
        dbar = 2*ca.extra(1)/ca.extra(2)
        ubar =  (ca.extra(3).T/ca.extra(2)).T
        du = np.linalg.norm(ubar.T - ca.velocity().T,axis=0)
        re = (du*fluid_density*dbar/fluid_viscosity).T
        beta = fluid_viscosity*(1-n)/dbar**2/n*(150*(1-n)+1.75*re)/fluid_density
        #print beta, ubar
        new_force = (ca.drag().T/element_volume).T/fluid_density
        cfd_link.send_data(beta)
        cfd_link.send_data(ubar)        
        print " cfd solve started"
        ca.set_pressure(cfd_link.read_data())
        ca.set_pressure_gradient(cfd_link.read_data())
        newu = cfd_link.read_data()
        ca.set_velocity(oldu*(1-r_factor)+newu*r_factor)
        oldu = newu
        print " cfd solve ended"

    cfd_link.send_data(0.0)

it.command('plot bitmap filename "simple_porous1.png"')
示例#4
0
    ball prop kn 1e2 ks 1e2 fric 0.25
    set gravity 0 0 -9.81
    def fluid_time
      global fluid_time = mech.age
    end
    ball history id 1 zvelocity id 1
    history add id 2 fish @fluid_time
    plot clear
    plot add hist 1 vs 2
    plot add cfdelement shape arrow colorby vectorattribute "velocity"
    """.format(fluid_density, fluid_viscosity))

    element_volume = ca.volume()
    dt = 0.005

    for i in range(100):
        it.command("solve age {}".format(it.mech_age() + dt))
        print "sending solve time"
        cfd_link.send_data(dt)  # solve interval
        cfd_link.send_data(ca.porosity())
        cfd_link.send_data((ca.drag().T / element_volume).T / fluid_density)
        print " cfd solve started"
        ca.set_pressure(cfd_link.read_data())
        ca.set_pressure_gradient(cfd_link.read_data())
        ca.set_velocity(cfd_link.read_data())
        print " cfd solve ended"

    cfd_link.send_data(0.0)  # solve interval

    print "ball z velocity", it.ball.find(1).vel_z()