Esempio n. 1
0
def analytical_pressure(mObj):

    dragModel = mObj.dragModel
    muf = mObj.dynamic_viscosity
    rhof = mObj.fluid_density
    Uf = mObj.Uf
    dp = mObj.diameter
    epsf = mObj.epsf
    xyzL = mObj.xyzL
    xyz_orig = mObj.xyz_orig

    # Obtain the pressure gradient across sample, and the inlet pressure
    # (assuming that the outlet pressure is zero)
    if dragModel == 'Drag' or dragModel == 'Stokes':
        fObj = Stokes(muf=muf, epsf=epsf, dp=dp)
    elif dragModel == 'DiFelice':
        fObj = DiFelice(muf=muf,
                        rhof=rhof,
                        epsf=epsf,
                        dp=dp,
                        Uf=Uf / epsf,
                        Vp=0.)
    elif dragModel == 'Ergun':
        fObj = Ergun(muf=muf, rhof=rhof, epsf=epsf, dp=dp, Uf=Uf / epsf, Vp=0.)
    else:
        raise ('Unknown drag force model specified')

    gradP = fObj.calculate_pressure_gradient(Uf=Uf / epsf, Vp=0.)
    pSol = gradP * (xyzL[1] - xyz_orig[1])

    return pSol
Esempio n. 2
0
def analytical_displacement(mObj):

    dragModel = mObj.dragModel
    muf = mObj.dynamic_viscosity
    rhof = mObj.fluid_density
    Uf = mObj.fluid_velocity
    epsf = mObj.epsf
    dp = mObj.diameter
    rhop = mObj.density
    kn = mObj.kn
    y0 = mObj.y0
    g = -mObj.gravity

    if dragModel == 'Drag' or dragModel == 'Stokes':
        fObj = Stokes(muf=muf, epsf=epsf, dp=dp)
    elif dragModel == 'DiFelice':
        fObj = DiFelice(muf=muf,
                        rhof=rhof,
                        epsf=epsf,
                        dp=dp,
                        Uf=Uf / epsf,
                        Vp=0.)
    elif dragModel == 'Ergun':
        fObj = Ergun(muf=muf, rhof=rhof, epsf=epsf, dp=dp, Uf=Uf / epsf, Vp=0.)
    else:
        raise ValueError('Unknown drag force model specified')

    fdi = fObj.calculate_drag_force(Uf=Uf / epsf, Vp=0.)
    volume = (np.pi / 6) * dp**3
    fi = volume * rhop * g - volume * rhof * g + fdi
    disp = fi / kn
    xySol = y0 + disp

    return xySol
def analytical_pressure(mObj):

    dragModel = mObj.dragModel
    muf = mObj.muf
    rhof = mObj.rhof
    Uf = mObj.Uf
    dp = mObj.dp
    epsf = mObj.epsf
    xyzL = mObj.xyzL
    xyz_orig = mObj.xyz_orig

    if dragModel == 'Drag' or dragModel == 'Stokes':
        fObj = Stokes(muf=muf, epsf=epsf, dp=dp)
    elif dragModel == 'DiFelice':
        fObj = DiFelice(muf=muf,
                        rhof=rhof,
                        epsf=epsf,
                        dp=dp,
                        Uf=Uf / epsf,
                        Vp=0.)
    elif dragModel == 'Ergun':
        fObj = Ergun(muf=muf, rhof=rhof, epsf=epsf, dp=dp, Uf=Uf / epsf, Vp=0.)
    else:
        raise ValueError('Unknown drag force model specified')

    gradP = fObj.calculate_pressure_gradient(Uf=Uf / epsf, Vp=0.)
    pSol = gradP * (xyzL[1] - xyz_orig[1])

    return pSol
def analytical_force(mObj):

    dragModel = mObj.dragModel
    muf = mObj.dynamic_viscosity
    rhof = mObj.fluid_density
    dp = mObj.diameter
    vy0 = mObj.vy0
    epsf = mObj.epsf

    if dragModel == 'Drag' or dragModel == 'Stokes':
        fObj = Stokes(muf=muf, epsf=epsf, dp=dp)
    elif dragModel == 'DiFelice':
        fObj = DiFelice(muf=muf, rhof=rhof, epsf=epsf, dp=dp, Uf=0., Vp=vy0)
    elif dragModel == 'Ergun':
        fObj = Ergun(muf=muf, rhof=rhof, epsf=epsf, dp=dp, Uf=0., Vp=vy0)
    else:
        raise ValueError('Unknown drag force model specified')

    fySol = fObj.calculate_drag_force(Uf=0., Vp=vy0)

    return fySol
Esempio n. 5
0
def analytical_displacement(mObj):

    dragModel = mObj.dragModel
    muf = mObj.dynamic_viscosity
    rhof = mObj.fluid_density
    Uf = mObj.Uf
    epsf = mObj.epsf
    dp = mObj.diameter
    rhop = mObj.density
    kn = mObj.kn
    y0 = mObj.y0
    g = -mObj.gravity

    if dragModel == 'Drag' or dragModel == 'Stokes':
        fObj = Stokes(muf=muf, epsf=epsf, dp=dp)
    elif dragModel == 'DiFelice':
        fObj = DiFelice(muf=muf,
                        rhof=rhof,
                        epsf=epsf,
                        dp=dp,
                        Uf=Uf / epsf,
                        Vp=0.)
    elif dragModel == 'Ergun':
        fObj = Ergun(muf=muf, rhof=rhof, epsf=epsf, dp=dp, Uf=Uf / epsf, Vp=0.)
    else:
        raise ('Unknown drag force model specified')

    if y0 < 1.0:
        CORRECTION_FACTOR = 0.5
    else:
        CORRECTION_FACTOR = 1.0

    fdi = fObj.calculate_drag_force(Uf=Uf / epsf, Vp=0.)
    print(fdi)
    volume = (np.pi / 6) * dp**3
    fi = volume * rhop * g - CORRECTION_FACTOR * volume * rhof * g + CORRECTION_FACTOR * fdi
    disp = fi / kn
    xySol = y0 + disp

    return xySol
Esempio n. 6
0
def analytical_force(mObj):

    dragModel = mObj.dragModel
    muf = mObj.dynamic_viscosity
    rhof = mObj.fluid_density
    dp = mObj.diameter
    vy0 = mObj.vy0

    # Note cell volume hard-wired (for ease)
    CELL_VOLUME = 0.1**3
    epsf = (CELL_VOLUME - (np.pi / 6) * dp**3) / CELL_VOLUME

    if dragModel == 'Drag' or dragModel == 'Stokes':
        fObj = Stokes(muf=muf, epsf=epsf, dp=dp)
    elif dragModel == 'DiFelice':
        fObj = DiFelice(muf=muf, rhof=rhof, epsf=epsf, dp=dp, Uf=0., Vp=vy0)
    elif dragModel == 'Ergun':
        fObj = Ergun(muf=muf, rhof=rhof, epsf=epsf, dp=dp, Uf=0., Vp=vy0)
    else:
        raise ValueError('Unknown drag force model specified')

    fySol = fObj.calculate_drag_force(Uf=0., Vp=vy0)

    return fySol
xyz_orig = np.array(xyz_orig, order='F', dtype=np.float64)
ncxyz = np.array(ncxyz, order='F', dtype=np.int32)

# Extract relevant parameters from the LAMMPS input script.
mObj = LAMMPS_Input(input_file='./lammps/terminal.in')
muf = mObj.dynamic_viscosity
rhof = mObj.fluid_density
dp = mObj.diameter
rhop = mObj.density
g = -mObj.gravity

Vc = ((xyzL[0]-xyz_orig[0])/ncxyz[0])*((xyzL[1]-xyz_orig[1])/ncxyz[1])*((xyzL[2]-xyz_orig[2])/ncxyz[2])
epsf = (Vc - (np.pi/6)*(dp**3))/Vc

# Initialise drag force object
fObj = Stokes(muf=muf, dp=dp, epsf=epsf)

# initialise MPI
comm = MPI.COMM_WORLD

# Initialise CPL
CPL = CPL()
CFD_COMM = CPL.init(CPL.CFD_REALM)
cart_comm = CFD_COMM.Create_cart([npxyz[0], npxyz[1], npxyz[2]])
CPL.setup_cfd(cart_comm, xyzL, xyz_orig, ncxyz)

# Setup send and recv buffers
recvbuf, sendbuf = CPL.get_arrays(recv_size=8, send_size=9)

# Main time loop
for time in range(400):
ncxyz = np.array(ncxyz, order='F', dtype=np.int32)

# Extract relevant parameters from the LAMMPS input script.
mObj = LAMMPS_Input('./lammps/constant.in')
dragModel = mObj.dragModel
muf = mObj.dynamic_viscosity
rhof = mObj.fluid_density
dp = mObj.diameter
vy0 = mObj.vy0

CELL_VOLUME = ((xyzL[0] - xyz_orig[0]) / ncxyz[0]) * (
    (xyzL[1] - xyz_orig[1]) / ncxyz[1]) * ((xyzL[2] - xyz_orig[2]) / ncxyz[2])
epsf = (CELL_VOLUME - (np.pi / 6) * (dp**3)) / CELL_VOLUME

if dragModel == 'Drag' or dragModel == 'Stokes':
    fObj = Stokes(muf=muf, epsf=epsf, dp=dp)
elif dragModel == 'DiFelice':
    fObj = DiFelice(muf=muf, rhof=rhof, epsf=epsf, dp=dp, Uf=0., Vp=vy0)
elif dragModel == 'Ergun':
    fObj = Ergun(muf=muf, rhof=rhof, epsf=epsf, dp=dp, Uf=0., Vp=vy0)
else:
    raise ValueError('Unknown drag force model specified')

# initialise MPI
comm = MPI.COMM_WORLD

# Initialise CPL
CPL = CPL()
CFD_COMM = CPL.init(CPL.CFD_REALM)
cart_comm = CFD_COMM.Create_cart([npxyz[0], npxyz[1], npxyz[2]])
CPL.setup_cfd(cart_comm, xyzL, xyz_orig, ncxyz)
# initialise MPI
comm = MPI.COMM_WORLD

# Initialise CPL
CPL = CPL()
MD_COMM = CPL.init(CPL.MD_REALM)
CPL.setup_md(MD_COMM.Create_cart([npxyz[0], npxyz[1], npxyz[2]]), xyzL,
             xyz_orig)

# Setup send and recv buffers
recvbuf, sendbuf = CPL.get_arrays(recv_size=9, send_size=8)

# Setup drag force object
if dragModel == 'Drag' or dragModel == 'Stokes':
    fObj = Stokes(muf=muf, epsf=epsf, dp=dp)
elif dragModel == 'DiFelice':
    fObj = DiFelice(muf=muf, rhof=rhof, epsf=epsf, dp=dp, Uf=Uf / epsf, Vp=0.)
elif dragModel == 'Ergun':
    fObj = Ergun(muf=muf, rhof=rhof, epsf=epsf, dp=dp, Uf=Uf / epsf, Vp=0.)
else:
    raise ValueError('Unknown drag force model specified')

# Main time loop
for time in range(200):

    print(time)
    # Recv data:
    # [Ux, Uy, Uz, gradPx, gradPy, gradPz, divTaux, divTauy, divTauz]
    recvbuf, ierr = CPL.recv(recvbuf)