Example #1
0
def createFromMesh(density, vertices, triangles, inertia, niter):

    import ymero as ymr

    def recenter(coords, com):
        coords = [[r[0] - com[0], r[1] - com[1], r[2] - com[2]]
                  for r in coords]
        return coords

    dt = 0.001

    # bounding box
    bb_hi = np.array(vertices).max(axis=0).tolist()
    bb_lo = np.array(vertices).min(axis=0).tolist()

    mesh_size = [hi - lo for lo, hi in zip(bb_lo, bb_hi)]

    fact = 2.0
    domain = (float(int(fact * mesh_size[0] + 1)),
              float(int(fact * mesh_size[1] + 1)),
              float(int(fact * mesh_size[2] + 1)))

    ranks = (1, 1, 1)

    u = ymr.ymero(ranks, domain, dt, debug_level=3, log_filename='log')

    dpd = ymr.Interactions.DPD('dpd',
                               1.0,
                               a=10.0,
                               gamma=10.0,
                               kbt=0.5,
                               power=0.5)
    vv = ymr.Integrators.VelocityVerlet('vv')

    coords = [bb_lo, bb_hi]
    com_q = [[0.5 * domain[0], 0.5 * domain[1], 0.5 * domain[2], 1., 0, 0, 0]]

    mesh = ymr.ParticleVectors.Mesh(vertices, triangles)

    fakeOV = ymr.ParticleVectors.RigidObjectVector('OV',
                                                   mass=1,
                                                   inertia=inertia,
                                                   object_size=len(coords),
                                                   mesh=mesh)
    fakeIc = ymr.InitialConditions.Rigid(com_q=com_q, coords=coords)
    belongingChecker = ymr.BelongingCheckers.Mesh("meshChecker")

    pvMesh = u.makeFrozenRigidParticles(belongingChecker, fakeOV, fakeIc, dpd,
                                        vv, density, niter)

    if pvMesh:
        frozenCoords = pvMesh.getCoordinates()
        frozenCoords = recenter(frozenCoords, com_q[0])
    else:
        frozenCoords = [[]]

    if u.isMasterTask():
        return frozenCoords
    else:
        return None
Example #2
0
def run(niter, statsFname, commAddress):
    dt = 0.001

    ranks = (2, 1, 1)
    domain = (12, 8, 10)

    u = ymr.ymero(commAddress,
                  ranks,
                  domain,
                  debug_level=8,
                  log_filename='log')

    pv = ymr.ParticleVectors.ParticleVector('pv', mass=1)
    ic = ymr.InitialConditions.Uniform(density=2)
    u.registerParticleVector(pv=pv, ic=ic)

    dpd = ymr.Interactions.DPD('dpd',
                               1.0,
                               a=10.0,
                               gamma=10.0,
                               kbt=1.0,
                               dt=dt,
                               power=0.5)
    u.registerInteraction(dpd)
    u.setInteraction(dpd, pv, pv)

    vv = ymr.Integrators.VelocityVerlet('vv', dt=dt)
    u.registerIntegrator(vv)
    u.setIntegrator(vv, pv)

    stats = ymr.Plugins.createStats('stats', statsFname, 1000)
    u.registerPlugins(stats)

    u.run(niter)
Example #3
0
def createEllipsoid(density, axes, niter):
    import ymero as ymr

    def recenter(coords, com):
        coords = [[r[0] - com[0], r[1] - com[1], r[2] - com[2]]
                  for r in coords]
        return coords

    dt = 0.001
    axes = tuple(axes)

    ranks = (1, 1, 1)
    fact = 3
    domain = (fact * axes[0], fact * axes[1], fact * axes[2])

    u = ymr.ymero(ranks, domain, debug_level=3, log_filename='log')

    dpd = ymr.Interactions.DPD('dpd',
                               1.0,
                               a=10.0,
                               gamma=10.0,
                               kbt=0.5,
                               dt=dt,
                               power=0.5)
    vv = ymr.Integrators.VelocityVerlet('vv', dt=dt)

    coords = [[-axes[0], -axes[1], -axes[2]], [axes[0], axes[1], axes[2]]]
    com_q = [[0.5 * domain[0], 0.5 * domain[1], 0.5 * domain[2], 1., 0, 0, 0]]

    fakeOV = ymr.ParticleVectors.RigidEllipsoidVector('OV',
                                                      mass=1,
                                                      object_size=len(coords),
                                                      semi_axes=axes)
    fakeIc = ymr.InitialConditions.Rigid(com_q=com_q, coords=coords)
    belongingChecker = ymr.BelongingCheckers.Ellipsoid("ellipsoidChecker")

    pvEllipsoid = u.makeFrozenRigidParticles(belongingChecker, fakeOV, fakeIc,
                                             dpd, vv, density, niter)

    if pvEllipsoid:
        frozenCoords = pvEllipsoid.getCoordinates()
        frozenCoords = recenter(frozenCoords, com_q[0])
    else:
        frozenCoords = [[]]

    if u.isMasterTask():
        return frozenCoords
    else:
        return None
Example #4
0
def createEllipsoid(density, axes, niter):
    import ymero as ymr
    
    def recenter(coords, com):
        coords = [[r[0]-com[0], r[1]-com[1], r[2]-com[2]] for r in coords]
        return coords

    dt = 0.001
    axes = tuple(axes)

    ranks  = (1, 1, 1)
    fact = 3
    domain = (fact*axes[0], fact*axes[1], fact*axes[2])
    
    u = ymr.ymero(ranks, domain, dt, debug_level=3, log_filename='log')
    
    dpd = ymr.Interactions.DPD('dpd', 1.0, a=10.0, gamma=10.0, kbt=0.5, power=0.5)
    vv = ymr.Integrators.VelocityVerlet('vv')
    
    coords = [[-axes[0], -axes[1], -axes[2]],
              [ axes[0],  axes[1],  axes[2]]]
    com_q = [[0.5 * domain[0], 0.5 * domain[1], 0.5 * domain[2],   1., 0, 0, 0]]
    
    fakeOV = ymr.ParticleVectors.RigidEllipsoidVector('OV', mass=1, object_size=len(coords), semi_axes=axes)
    fakeIc = ymr.InitialConditions.Rigid(com_q=com_q, coords=coords)
    belongingChecker = ymr.BelongingCheckers.Ellipsoid("ellipsoidChecker")
    
    pvEllipsoid = u.makeFrozenRigidParticles(belongingChecker, fakeOV, fakeIc, [dpd], vv, density, niter)
    
    if pvEllipsoid:
        frozenCoords = pvEllipsoid.getCoordinates()
        frozenCoords = recenter(frozenCoords, com_q[0])
    else:
        frozenCoords = [[]]

    if u.isMasterTask():
        return frozenCoords
    else:
        return None
Example #5
0
def run(niter, statsFname, comm_address):
    dt = 0.001

    ranks  = (2, 1, 1)
    domain = (12, 8, 10)
    
    u = ymr.ymero(ranks, domain, dt, debug_level=8, log_filename='log', comm_ptr=comm_address)
    
    pv = ymr.ParticleVectors.ParticleVector('pv', mass = 1)
    ic = ymr.InitialConditions.Uniform(density=2)
    u.registerParticleVector(pv=pv, ic=ic)

    dpd = ymr.Interactions.DPD('dpd', 1.0, a=10.0, gamma=10.0, kbt=1.0, power=0.5)
    u.registerInteraction(dpd)
    u.setInteraction(dpd, pv, pv)
    
    vv = ymr.Integrators.VelocityVerlet('vv')
    u.registerIntegrator(vv)
    u.setIntegrator(vv, pv)
    
    stats = ymr.Plugins.createStats('stats', statsFname, 1000)
    u.registerPlugins(stats)
    
    u.run(niter)
Example #6
0
parser = argparse.ArgumentParser()
parser.add_argument('--kbounds', type=float, default=0.0)
parser.add_argument('--ktwist', type=float, default=0.0)
parser.add_argument('--kbending', type=float, nargs=3, default=(0.0, 0.0, 0.0))
parser.add_argument('--l0_factor', type=float, default=1.0)
parser.add_argument('--tau0', type=float, default=0.0)
parser.add_argument('--tau0_eq', type=float, default=0.0)
parser.add_argument('--center_line', type=str, choices=["helix", "line"])
args = parser.parse_args()

ranks  = (1, 1, 1)
domain = [16, 16, 16]

dt = 1e-3

u = ymr.ymero(ranks, tuple(domain), dt, debug_level=8, log_filename='log', no_splash=True)

com_q = [[ 8., 8., 8.,    1.0, 0.0, 0.0, 0.0]]

L = 5.0
P = 1.0
R = 1.0

if args.center_line == "helix":
    def center_line(s):
        t = s * L * np.pi / P 
        return (R * np.cos(t),
                R * np.sin(t),
                (s-0.5) * L)

    def torsion(s):
Example #7
0
parser = argparse.ArgumentParser()
parser.add_argument("--type", choices=["squarePipe", 'cylinderPipe'])
args = parser.parse_args()


dt = 0.001

ranks  = (1, 1, 1)
domain = (16, 8, 8)
force = (1.0, 0, 0)

density = 4
rc = 1.0

u = ymr.ymero(ranks, domain, debug_level=3, log_filename='stdout')

pv = ymr.ParticleVectors.ParticleVector('pv', mass = 1)
ic = ymr.InitialConditions.Uniform(density=density)
u.registerParticleVector(pv=pv, ic=ic)
    
dpd = ymr.Interactions.DPD('dpd', rc=rc, a=10.0, gamma=50.0, kbt=0.01, dt=dt, power=0.5)
u.registerInteraction(dpd)

if   args.type == "cylinderPipe":
    center=(domain[1]*0.5, domain[2]*0.5)
    wall = ymr.Walls.Cylinder("cylinder", center=center, radius=0.5*domain[1]-rc, axis="x", inside=True)

elif args.type == "squarePipe":
    lo = ( -domain[0],           rc,           rc)
    hi = (2*domain[0], domain[1]-rc, domain[2]-rc)
Example #8
0
def report():
    print('Started with the following parameters: ' + str(args))
    if unknown is not None and len(unknown) > 0:
        print('Some arguments are not recognized and will be ignored: ' + str(unknown))
    print('')
    sys.stdout.flush()


if args.dry_run:
    report()
    quit()

domain = args.domain
rc     = args.rc
    
u = ymr.ymero(tuple(args.nranks), tuple(domain), debug_level=args.debug_lvl, log_filename='log')

if u.isMasterTask():
    report()

#====================================================================================
#====================================================================================

pv = ymr.ParticleVectors.ParticleVector('pv', mass = 1)
ic = ymr.InitialConditions.Uniform(density=args.rho)
u.registerParticleVector(pv=pv, ic=ic)
    
dpd = ymr.Interactions.DPD('dpd', rc, args.a, args.gamma, args.kbt, args.dt, args.power)
u.registerInteraction(dpd)

vveq = ymr.Integrators.VelocityVerlet('vveq', args.dt)
Example #9
0
#!/usr/bin/env python

import ymero as ymr
import numpy as np
import argparse

parser = argparse.ArgumentParser()
parser.add_argument("--restart", action='store_true', default=False)
args = parser.parse_args()

ranks  = (1, 1, 1)
domain = (4, 6, 8)

u = ymr.ymero(ranks, domain, dt=0, debug_level=3, log_filename='log', checkpoint_every = (5 if not args.restart else 0), no_splash=True)
    
pv = ymr.ParticleVectors.ParticleVector('pv', mass = 1)
u.registerParticleVector(pv=pv, ic=ymr.InitialConditions.Uniform(density=8))

coords = [[-1, -1, -1], [1, 1, 1]]
com_q = [[0.5 * domain[0], 0.5 * domain[1], 0.5 * domain[2],   1., 0, 0, 0]]
ov = ymr.ParticleVectors.RigidEllipsoidVector('ov', mass=1, object_size=len(coords), semi_axes=(1,1,1))
u.registerParticleVector(pv=ov, ic=ymr.InitialConditions.Rigid(com_q=com_q, coords=coords))

checker = ymr.BelongingCheckers.Ellipsoid('checker')
u.registerObjectBelongingChecker(checker, ov)
inner = u.applyObjectBelongingChecker(checker, pv, inside='inner')

if args.restart:
    u.restart("restart/")
u.run(7)
Example #10
0
import trimesh

from mpi4py import MPI

parser = argparse.ArgumentParser()
parser.add_argument("--restart", action='store_true', default=False)
parser.add_argument("--ranks", type=int, nargs=3)
args = parser.parse_args()

comm   = MPI.COMM_WORLD
ranks  = args.ranks
domain = (16, 16, 16)
dt = 0

if args.restart:
    u = ymr.ymero(ranks, domain, dt, comm_ptr=MPI._addressof(comm), debug_level=8, log_filename='log', checkpoint_every=0)
else:
    u = ymr.ymero(ranks, domain, dt, comm_ptr=MPI._addressof(comm), debug_level=8, log_filename='log', checkpoint_every=5)

    
mesh = trimesh.creation.icosphere(subdivisions=1, radius = 0.1)
    
udx_mesh = ymr.ParticleVectors.MembraneMesh(mesh.vertices.tolist(), mesh.faces.tolist())
pv       = ymr.ParticleVectors.MembraneVector("pv", mass=1.0, mesh=udx_mesh)

if args.restart:
    ic   = ymr.InitialConditions.Restart("restart/")
else:
    nobjs = 10
    pos = [ np.array(domain) * t for t in np.linspace(0, 1.0, nobjs) ]
    Q = [ np.array([1.0, 0., 0., 0.])  for i in range(nobjs) ]
Example #11
0
#!/usr/bin/env python

import ymero as ymr

dt = 0.001

ranks = (1, 1, 1)
domain = (12, 8, 10)

u = ymr.ymero(ranks, domain, dt, debug_level=3, log_filename='log')

pv = ymr.ParticleVectors.ParticleVector('pv', mass=1)
ic = ymr.InitialConditions.Uniform(density=2)
u.registerParticleVector(pv=pv, ic=ic)

dpd = ymr.Interactions.DPD('dpd', 1.0, a=10.0, gamma=10.0, kbt=1.0, power=0.5)
u.registerInteraction(dpd)
u.setInteraction(dpd, pv, pv)

vv = ymr.Integrators.VelocityVerlet('vv')
u.registerIntegrator(vv)
u.setIntegrator(vv, pv)

stats = ymr.Plugins.createStats('stats', "stats.txt", 1000)
u.registerPlugins(stats)

u.run(5001)

# nTEST: flow.rest
# cd flow
# rm -rf stats.txt
Example #12
0
parser = argparse.ArgumentParser()
parser.add_argument("--restart", action='store_true', default=False)
parser.add_argument("--ranks", type=int, nargs=3)
args = parser.parse_args()

ranks  = args.ranks
domain = (4, 6, 8)
dt = 0

if args.restart:
    restart_folder="restart2/"
else:
    restart_folder="restart/"

u = ymr.ymero(ranks, domain, dt, debug_level=3, log_filename='log', checkpoint_every=5, checkpoint_folder=restart_folder)
    
pv = ymr.ParticleVectors.ParticleVector('pv', mass = 1)
ic = ymr.InitialConditions.Uniform(density=2)
u.registerParticleVector(pv, ic)

dpd = ymr.Interactions.DPD('dpd', 1.0, a=10.0, gamma=10.0, kbt=1.0, power=0.5)
u.registerInteraction(dpd)
u.setInteraction(dpd, pv, pv)

if args.restart:
    u.restart("restart/")
u.run(7)
    

# TEST: restart.interactions
Example #13
0
File: h5.py Project: wadaniel/YMeRo
#!/usr/bin/env python

import ymero as ymr
import numpy as np
import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--ranks', type=int, nargs=3, required=True)
args = parser.parse_args()

domain = (8, 16, 4)

u = ymr.ymero(args.ranks, domain, dt=0, debug_level=8, log_filename='log')

pv = ymr.ParticleVectors.ParticleVector('pv', mass=1)
ic = ymr.InitialConditions.Uniform(density=3)
u.registerParticleVector(pv=pv, ic=ic)

sampleEvery = 1
dumpEvery = 1
binSize = (1., 1., 1.)

field = ymr.Plugins.createDumpAverage('field', [pv], sampleEvery, dumpEvery,
                                      binSize,
                                      [("velocity", "vector_from_float8")],
                                      'h5/solvent-')
u.registerPlugins(field)

u.run(3)

# TEST: dump.h5
Example #14
0
#!/usr/bin/env python

import numpy as np
import ymero as ymr

ranks  = (1, 1, 1)
domain = [4., 4., 4.]
density = 8

u = ymr.ymero(ranks, tuple(domain), dt=0, debug_level=3, log_filename='log')

pv = ymr.ParticleVectors.ParticleVector('pv', mass = 1)
ic = ymr.InitialConditions.UniformSphere(density=density, center=(2., 2., 2.), radius=2.0, inside=True)
u.registerParticleVector(pv=pv, ic=ic)

u.run(2)

if pv:
    icpos = pv.getCoordinates()
    icvel = pv.getVelocities()
    np.savetxt("pos.ic.txt", icpos)
    np.savetxt("vel.ic.txt", icvel)
    

# TEST: ic.uniform.sphere
# cd ic
# rm -rf pos*.txt vel*.txt
# ymr.run --runargs "-n 2" ./sphere.py > /dev/null
# paste pos.ic.txt vel.ic.txt | LC_ALL=en_US.utf8 sort > ic.out.txt
Example #15
0
import numpy as np
import argparse
import trimesh

parser = argparse.ArgumentParser()
parser.add_argument("--restart", action='store_true', default=False)
parser.add_argument("--ranks", type=int, nargs=3)
args = parser.parse_args()

ranks = args.ranks
domain = (16, 16, 16)

if args.restart:
    u = ymr.ymero(ranks,
                  domain,
                  debug_level=8,
                  log_filename='log',
                  checkpoint_every=0)
else:
    u = ymr.ymero(ranks,
                  domain,
                  debug_level=8,
                  log_filename='log',
                  checkpoint_every=5)

mesh = trimesh.creation.icosphere(subdivisions=1, radius=0.1)

coords = [[-0.01, 0., 0.], [0.01, 0., 0.], [0., -0.01, 0.], [0., 0.01, 0.],
          [0., 0., -0.01], [0., 0., 0.01]]

udx_mesh = ymr.ParticleVectors.Mesh(mesh.vertices.tolist(),
Example #16
0
import argparse

from mpi4py import MPI

parser = argparse.ArgumentParser()
parser.add_argument("--restart", action='store_true', default=False)
parser.add_argument("--ranks", type=int, nargs=3)
args = parser.parse_args()

ranks  = args.ranks
domain = (4, 6, 8)

comm = MPI.COMM_WORLD

if args.restart:
    u = ymr.ymero(MPI._addressof(comm), ranks, domain, debug_level=3, log_filename='log', checkpoint_every=0)
else:
    u = ymr.ymero(MPI._addressof(comm), ranks, domain, debug_level=3, log_filename='log', checkpoint_every=5)

pv = ymr.ParticleVectors.ParticleVector('pv', mass = 1)

if args.restart:
    ic = ymr.InitialConditions.Restart("restart/")
else:
    ic = ymr.InitialConditions.Uniform(density=2)

u.registerParticleVector(pv=pv, ic=ic)

u.run(7)

rank = comm.Get_rank()
Example #17
0
#!/usr/bin/env python

import ymero as ymr
import numpy as np
import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--ranks', type=int, nargs=3, required=True)
args = parser.parse_args()

domain = (8, 16, 4)

u = ymr.ymero(args.ranks, domain, dt=0, debug_level=8, log_filename='log')

pv = ymr.ParticleVectors.ParticleVector('pv', mass = 1)
ic = ymr.InitialConditions.Uniform(density=3)
u.registerParticleVector(pv=pv, ic=ic)

sampleEvery = 1
dumpEvery   = 1
binSize     = (1., 1., 1.)

field = ymr.Plugins.createDumpAverage('field', [pv], sampleEvery, dumpEvery, binSize, [("velocity", "vector_from_float8")], 'h5/solvent-')
u.registerPlugins(field)

u.run(3)

# TEST: dump.h5
# cd dump
# rm -rf h5
# ymr.run --runargs "-n 2" ./h5.py --ranks 1 1 1 > /dev/null
Example #18
0
def report():
    print('Started with the following parameters: ' + str(args))
    if unknown is not None and len(unknown) > 0:
        print('Some arguments are not recognized and will be ignored: ' + str(unknown))
    print('Outer viscosity: %f, inner: %f' % (mu_outer, mu_inner))
    print('Generated %d cells %s, real hematocrit is %f' % (len(rbcs_ic), str(ncells), real_ht))
    print('Cell parameters: %s' % str(params2dict(params)))
    print('')
    sys.stdout.flush()


if args.dry_run:
    report()
    quit()

u = ymr.ymero(args.nranks, args.domain, debug_level=args.debug_lvl, log_filename='generate', restart_folder="generated/")

if u.isMasterTask():
    report()

#====================================================================================
#====================================================================================

# Interactions:
#   DPD
dpd = ymr.Interactions.DPD('dpd', rc=1.0, a=args.a, gamma=args.gamma, kbt=args.kbt, dt=args.dt, power=args.power)
u.registerInteraction(dpd)
#   Contact (LJ)
contact = ymr.Interactions.LJ('contact', rc=1.0, epsilon=10, sigma=1.0, object_aware=True, max_force=2000)
u.registerInteraction(contact)
Example #19
0
#!/usr/bin/env python

import numpy as np
import ymero as ymr

ranks = (1, 1, 1)
domain = [4., 6., 8.]

u = ymr.ymero(ranks, tuple(domain), debug_level=3, log_filename='log')

a = (0.1, 0.2, 0.3)

coords = [[-a[0], -a[1], -a[2]], [-a[0], -a[1], a[2]], [-a[0], a[1], -a[2]],
          [-a[0], a[1], a[2]], [a[0], a[1], -a[2]], [a[0], a[1], a[2]]]

com_q = [
    [1., 0., 0., 1.0, 0.0, 0.0, 0.0],
    [3., 0., 0., 1.0, 2.0, 0.0, 0.0],
    [-1., 0., 0., 1.0, 0.0, 3.0, 0.0],  # out of the domain
    [2., 0., 0., 1.0, 0.0, 0.0, 1.0]
]

pv = ymr.ParticleVectors.RigidEllipsoidVector('ellipsoid',
                                              mass=1,
                                              object_size=len(coords),
                                              semi_axes=a)
ic = ymr.InitialConditions.Rigid(com_q=com_q, coords=coords)
u.registerParticleVector(pv=pv, ic=ic)

# xyz = ymr.Plugins.createDumpXYZ('xyz', pv, 1, "xyz/")
# u.registerPlugins(xyz)
Example #20
0
parser = argparse.ArgumentParser()
parser.add_argument("--restart", action='store_true', default=False)
parser.add_argument("--ranks", type=int, nargs=3)
args = parser.parse_args()

comm = MPI.COMM_WORLD
ranks = args.ranks
domain = (16, 16, 16)
dt = 0

if args.restart:
    u = ymr.ymero(ranks,
                  domain,
                  dt,
                  comm_ptr=MPI._addressof(comm),
                  debug_level=8,
                  log_filename='log',
                  checkpoint_every=0)
else:
    u = ymr.ymero(ranks,
                  domain,
                  dt,
                  comm_ptr=MPI._addressof(comm),
                  debug_level=8,
                  log_filename='log',
                  checkpoint_every=5)

mesh = trimesh.creation.icosphere(subdivisions=1, radius=0.1)

udx_mesh = ymr.ParticleVectors.MembraneMesh(mesh.vertices.tolist(),
Example #21
0
parser = argparse.ArgumentParser()
parser.add_argument('--subStep', action='store_true', default=False)
parser.add_argument('--vis', action='store_true', default=False)
args = parser.parse_args()

dt = 0.001

substeps = 10
if args.subStep:
    dt = dt * substeps

ranks  = (1, 1, 1)
domain = (8, 8, 8)

u = ymr.ymero(ranks, domain, dt, debug_level=3, log_filename='log')

nparts = 1000
pos = np.random.normal(loc   = [0.5, 0.5 * domain[1] + 1.0, 0.5 * domain[2]],
                       scale = [0.1, 0.3, 0.3],
                       size  = (nparts, 3))

vel = np.random.normal(loc   = [1.0, 0., 0.],
                       scale = [0.1, 0.01, 0.01],
                       size  = (nparts, 3))


pvSolvent = ymr.ParticleVectors.ParticleVector('pv', mass = 1)
icSolvent = ymr.InitialConditions.FromArray(pos=pos.tolist(), vel=vel.tolist())
vv        = ymr.Integrators.VelocityVerlet('vv')
u.registerParticleVector(pvSolvent, icSolvent)
Example #22
0
#!/usr/bin/env python

import ymero as ymr
import numpy as np
import argparse

parser = argparse.ArgumentParser()
parser.add_argument("--restart", action='store_true', default=False)
args = parser.parse_args()

ranks = (1, 1, 1)
domain = (4, 6, 8)

u = ymr.ymero(ranks,
              domain,
              dt=0,
              debug_level=3,
              log_filename='log',
              checkpoint_every=(5 if not args.restart else 0))
if args.restart:
    u.restart("restart/")

pv = ymr.ParticleVectors.ParticleVector('pv', mass=1)
u.registerParticleVector(pv=pv, ic=ymr.InitialConditions.Uniform(density=8))

coords = [[-1, -1, -1], [1, 1, 1]]
com_q = [[0.5 * domain[0], 0.5 * domain[1], 0.5 * domain[2], 1., 0, 0, 0]]
ov = ymr.ParticleVectors.RigidEllipsoidVector('ov',
                                              mass=1,
                                              object_size=len(coords),
                                              semi_axes=(1, 1, 1))
u.registerParticleVector(pv=ov,