Ejemplo n.º 1
0
from ase.io import read
from molecular_builder import carve_geometry, write
from molecular_builder.geometry import ProceduralSurfaceGeometry

atoms = read("block.data", format="lammps-data", style="molecular")


# Define function to add
def f(x, y):
    if x < 100:
        return x / 100
    else:
        return 1 - (x - 100) / 100


# Carve out geometry from beta-cristobalite
geometry = ProceduralSurfaceGeometry(point=(100, 100, 40),
                                     normal=(0, 0, 1),
                                     thickness=20,
                                     method='simplex',
                                     scale=3,
                                     octaves=2,
                                     seed=16591,
                                     threshold=0,
                                     repeat=True,
                                     f=f)
num_carved = carve_geometry(atoms, geometry, side="out")

write(atoms, "add_function.data")
write(atoms, "add_function.png", camera_dir=[0, 1, -1])
c = 5.51891759  # length of triclinic unit cell in c-dir (and z-dir)
angle = 60
h = b * np.sin(np.deg2rad(angle))  # length of triclinic unit cell in y-dir

numcellsx = -(-xlen // a)   # number of cells in x-dir, rounded up
numcellsy = -(-ylen // h)   # number of cells in y-dir, rounded up
numcellsz = -(-zlen // c)   # number of cells in z-dir, rounded up

lengthx = numcellsx * a     # actual length in x-dir
lengthy = numcellsy * h     # actual length in y-dir
lengthz = numcellsz * c     # actual length in z-dir

lengthnoise = np.asarray((lengthx, lengthy, lengthz))
scalenoise = lengthnoise / scale

# Create bulk of alpha-quartz
quartz = create_bulk_crystal("alpha_quartz", (xlen, ylen, zlen))

# Carve out geometry from alpha-quartz
surface_geometry = ProceduralSurfaceGeometry(point=(xlen/2, ylen/2, zlen/2),
                                             normal=(0, 0, 1),
                                             thickness=noise_thickness,
                                             octaves=octaves,
                                             scale=scalenoise,
                                             pbc=lengthnoise,
                                             angle=angle,
                                             method='perlin',
                                             threshold=0)
carve_geometry(quartz, surface_geometry, side="in")
quartz.write("quartz.data", format="lammps-data")
Ejemplo n.º 3
0
from ase.io import read
from molecular_builder import carve_geometry, write
from molecular_builder.geometry import ProceduralSurfaceGeometry

atoms = read("block.data", format="lammps-data", style="molecular")

# Carve out geometry from beta-cristobalite
geometry = ProceduralSurfaceGeometry(point=(100, 100, 40),
                                     normal=(0, 0, 1),
                                     thickness=20,
                                     seed=97455)
num_carved = carve_geometry(atoms, geometry, side="out")

write(atoms, "basic.data")
write(atoms, "basic.png", camera_dir=[2, 1, -1])
Ejemplo n.º 4
0
from ase.io import read
from molecular_builder import carve_geometry, write
from molecular_builder.geometry import ProceduralSurfaceGeometry

atoms = read("block.data", format="lammps-data", style="molecular")

# Carve out geometry from beta-cristobalite
geometry = ProceduralSurfaceGeometry(point=(100, 100, 40),
                                     normal=(0, 0, 1),
                                     thickness=20,
                                     method='simplex',
                                     scale=3,
                                     octaves=2,
                                     seed=16591)
num_carved = carve_geometry(atoms, geometry, side="out")

write(atoms, "parameters.data")
write(atoms, "parameters.png", camera_dir=[2, 1, -1])
from molecular_builder import create_bulk_crystal, carve_geometry, write
from molecular_builder.geometry import ProceduralSurfaceGeometry

# Create bulk of beta-cristobalite
atoms = create_bulk_crystal("beta_cristobalite", [200, 200, 50])
write(atoms, "block.png")

# Carve out geometry from beta-cristobalite
geometry = ProceduralSurfaceGeometry(point=(100, 100, 40),
                                     normal=(0, 0, 1),
                                     thickness=20,
                                     octaves=1,
                                     method='simplex',
                                     )
num_carved, carved = carve_geometry(atoms, geometry, side="out", return_carved=True)

write(atoms, "block_with_procedural_surface.png")