Skip to content

Commit

Permalink
Add smooth silica surface (#4)
Browse files Browse the repository at this point in the history
* add smooth silica surface

* update README

* Update entry points

* Fix import bug

* fix test
  • Loading branch information
daico007 authored Sep 27, 2021
1 parent 2909b08 commit dbe97e3
Show file tree
Hide file tree
Showing 7 changed files with 84 additions and 5 deletions.
52 changes: 52 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# Surface Coatings

## Overview
Surface Coatings (`surface_coatings`) is an [mBuild](https://mbuild.mosdef.org/) recipe to construct monolayer systems,
i.e., surfaces coated with monolayers.
Recipes are desgined to be add-ons to [mBuild](https://mbuild.mosdef.org/),
allowing users to construct classes of chemical sysetms utilizing routines developed earlier using [mBuild](https://mbuild.mosdef.org/).


## Installation
The `surface_coatings` can be install using `pip`. While its dependencies can be found in `environment.yml`.
```bash
conda env update --file environemnt.yml
pip install .
```

## Example Usage
```python
import mbuild as mb
from mbuild.lib.molecules import WaterSPC as H2O
from surface_coatings.surfaces import SiicaInterfaceCarve
from surface_coatings.chains import Alkylsilane
from surface_coatings import Monolayer, DualMonolayer, SolvatedMonolayer, SolvatedDualMonolayer

silane_chain = Alkylsilane()
silica_surface = SiicaInterfaceCarve()

silica_monolayer = Monolayer(surface=silica_surface,
chains=silane_chain,
n_chains=100,
tile_x=1,
tile_y=1)
silica.visualize()

# Create a dual monolayer with the created monolayer
dual_monolayer = DualMonolayer(top=mb.clone(silica_monolayer),
bottom=mb.cone(silica_monolayer),
separation=3)
dual_monolayer.visualize()

# Solvate a monolayer system
solvated_monolayer = SolvatedMonolayer(monolayer=mb.clone(silica_monolayer),
solvent=H2O())

solvated_monolayer.visualize()

# Solvate a dual monolayer system
solvated_dual_monolayer = SolvatedDualMonolayer(dual_monolayer=dual_monolayer,
solvent=H2O())
solvated_dual_monolayer.visualize()

```
5 changes: 4 additions & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@
zip_safe=False,
entry_points={
"mbuild.plugins": [
""
"Monolayer = surface_coatings.monolayer:Monolayer",
"DualMonolayer = surface_coatings.monolayer:DualMonolayer",
"SolvatedMonolayer = surface_coatings.solvated_monolayer:SolvatedMonolayer",
"SolvatedDualMonolayer = surface_coatings.solvated_monolayer:SolvatedDualMonolayer",
]
}
)
2 changes: 1 addition & 1 deletion surface_coatings/chains/alkylsilane.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,4 @@ def __init__(self, chain_length=17, terminal_group="methyl"):
self.add(silane, 'silane')
mb.force_overlap(self['silane'], self['silane']['up'], self['alkane']['down'])

self.add(silane['down'], 'down', con tainment=False)
self.add(silane['down'], 'down', containment=False)
1 change: 0 additions & 1 deletion surface_coatings/monolayer.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@

import mbuild as mb
from mbuild.lib.atoms import H
from mbuild.lib.recipes import Monolayer


class Monolayer(mb.Compound):
Expand Down
1 change: 1 addition & 0 deletions surface_coatings/surfaces/__init__.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
from .silicon_interface import SiliconInterface
from .silica_interface_carve import SilicaInterfaceCarve
from .silica_interface import SilicaInterface
20 changes: 20 additions & 0 deletions surface_coatings/surfaces/silica_interface.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import mbuild as mb
from mbuild.lib.surfaces import Betacristobalite

class SilicaInterface(mb.Compound):
def __init__(self, tile_x=1, tile_y=1):
super(SilicaInterface, self).__init__()
silica_crystal = Betacristobalite()
tiled_compound = mb.lib.recipes.TiledCompound(mb.clone(silica_crystal),
n_tiles=(tile_x, tile_y, 1))
self.add(tiled_compound, "TiledCompound")
self._transfer_ports()
self.periodicity = (True, True, False)

def _transfer_ports(self):
"""Transfer available ports from TiledCompound to parents level"""
for port in self["TiledCompound"].available_ports():
clone_port = mb.clone(port)
clone_port.anchor = port.anchor
self.remove(port)
self.add(clone_port)
8 changes: 6 additions & 2 deletions surface_coatings/tests/test_surfaces.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import mbuild as mb
from surface_coatings.surfaces import SiliconInterface, SilicaInterfaceCarve
from surface_coatings.surfaces import SiliconInterface, SilicaInterfaceCarve, SilicaInterface


class TestSystem(object):
Expand All @@ -8,5 +8,9 @@ def test_silicon_interface(self):
assert silicon_surface.periodicity == (True, True, False)

def test_silica_interface_carve(self):
silica_surface = SilicaInterfaceCarve)
silica_surface_carve = SilicaInterfaceCarve()
assert silica_surface_carve.periodicity == (True, True, False)

def test_silica_interface(self):
silica_surface = SilicaInterface()
assert silica_surface.periodicity == (True, True, False)

0 comments on commit dbe97e3

Please sign in to comment.