SYSTEMS AND METHODS FOR DESIGNING SELF-ASSEMBLED NANOSTRUCTURES

20230081282 · 2023-03-16

    Inventors

    Cpc classification

    International classification

    Abstract

    A general framework which transforms the inverse problem of self-assembly of colloidal crystals into a Boolean satisfiability problem for which solutions can be found numerically is described herein. Given a reference structure and the desired number of components, our approach produces designs for which the target structure is an energy minimum, and also allows to exclude solutions that correspond to competing structures.

    Claims

    1. A method for determining a patch type scheme for at least one particle species of patchy particles such that the patchy particles assemble into a target structure, the method comprising: receiving a patchy particle model descriptive of a respective patch scheme for at least one particle species of patchy particles, the patchy particle model including a plurality of variables representative of: a plurality of patch slots defined for each particle species; a plurality of patch types defined for each particle species; wherein each patch type of the plurality of patch types is compatible with one other patch type of the plurality of patch types; wherein each patch slot of the plurality of patch slots is associated with a respective patch type of the plurality of patch types; and a patch type interaction matrix representative of compatibility between each patch type of the plurality of patch types; receiving a target lattice structure, the target lattice structure including a plurality of possible lattice positions of a unit cell of the target lattice structure, wherein the unit cell includes one or more patchy particles; determining a plurality of conditional clauses representative of a plurality of constraints that the one or more variables of the patchy particle model of each of the at least one particle species of patchy particles must satisfy such that the one or more particle species of patchy particles are operable to self-assemble into the target lattice structure based on their respective patch scheme; and applying the plurality of conditional clauses to the plurality of variables representative of the respective patch scheme to identify one or more solutions to the plurality of variables such that each conditional clause of the plurality of conditional clauses is satisfied.

    2. The method of claim 1, further comprising: simulating the patchy particle model with each solution for each respective particle species to obtain a resultant crystal formation.

    3. The method of claim 2, further comprising: excluding one or more solutions that form a competing structure.

    4. The method of claim 1, wherein the plurality of conditional clauses include a first clause, the first clause enforcing a restriction that each patch type of the patchy particle model is compatible with exactly one patch type of the plurality of patch types.

    5. The method of claim 1, wherein the plurality of conditional clauses includes a second clause, the second clause enforcing a restriction that each patch slot of the plurality of patch slots is assigned exactly one patch type.

    6. The method of claim 1, wherein the plurality of conditional clauses includes a third clause, the third clause enforcing a restriction that each lattice position of the plurality of possible lattice positions is occupied by a single patchy particle species with one assigned orientation.

    7. The method of claim 1, wherein the plurality of conditional clauses includes a fourth clause, the fourth clause enforcing a restriction that patch types of patches of the patchy particles that interact within the target lattice structure are operable for binding to one another according to one or more compatibility rules determined by the patch type interaction matrix.

    8. The method of claim 1, wherein the plurality of conditional clauses includes a fifth clause, the fifth clause enforcing that each of the plurality of patch slots associated with each lattice position of the unit cell are set to have a patch type of the patch occupying each respective patch slot.

    9. The method of claim 1, wherein the plurality of conditional clauses include: a sixth clause, the sixth clause enforcing that all particle species of the plurality of particle species are included in the target lattice structure; and a seventh clause, the seventh clause enforcing that all patch types of the plurality of patch types are used in the one or more solutions.

    10. The method of claim 1, wherein the one or more solutions is a null solution, the null solution being indicative of an inability of the one or more patchy particle species to self-assemble to a target configuration.

    11. A system, comprising: one or more processors, the one or more processors implementing a module including a plurality of sub-modules, the plurality of sub-modules including: a first module configured to receive a patchy particle model descriptive of a respective patch scheme for at least one particle species of patchy particles, the patchy particle model including a plurality of variables representative of: a plurality of patch slots defined for each particle species; a plurality of patch types defined for each particle species; wherein each patch type of the plurality of patch types is compatible with one other patch type of the plurality of patch types; wherein each patch slot of the plurality of patch slots is associated with a respective patch type of the plurality of patch types; and a patch type interaction matrix representative of compatibility between each patch type of the plurality of patch types; a second module configured to receive a target lattice structure, the target lattice structure including a plurality of possible lattice positions of a unit cell of the target lattice structure, wherein the unit cell includes one or more patchy particles; a third module configured to determine a plurality of conditional clauses representative of a plurality of constraints that the one or more variables of the patchy particle model of each of the at least one particle species must satisfy such that the one or more patchy particle species are operable to self-assemble into the target lattice structure based on their respective patch scheme; and a satisfiability module configured to apply the plurality of conditional clauses to the plurality of variables representative of the patch scheme to identify one or more solutions to the plurality of variables such that each conditional clause of the plurality of conditional clauses is satisfied.

    13. The system of claim 11, further comprising a model simulator module, the model simulator module configured to simulate the patchy particle model with each solution for each respective particle species to obtain a resultant crystal formation.

    14. The system of claim 13, wherein one or more simulated solutions that form a competing structure are excluded.

    15. The system of claim 11, wherein the plurality of conditional clauses include a first clause, the first clause enforcing a restriction that each patch type of the patchy particle model is compatible with exactly one other patch type of the plurality of patch types.

    16. The system of claim 11, wherein the plurality of conditional clauses includes a second clause, the second clause enforcing a restriction that each patch slot of the plurality of patch slots is assigned exactly one patch type of the plurality of patch types.

    17. The system of claim 11, wherein the plurality of conditional clauses includes a third clause, the third clause enforcing a restriction that each lattice position of the plurality of possible lattice positions is occupied by a single patchy particle species with one assigned orientation.

    18. The system of claim 11, wherein the plurality of conditional clauses includes a fourth clause, the fourth clause enforcing a restriction that patch types of patches of the patchy particles that interact within the target lattice structure are operable for binding to one another according to one or more compatibility rules determined by the patch type interaction matrix.

    19. The system of claim 11, wherein the plurality of conditional clauses includes a fifth clause, the fifth clause enforcing that each of the plurality of patch slots associated with each lattice position of the unit cell are set to have a patch type of the patch occupying each respective patch slot.

    20. The system of claim 11, wherein the plurality of conditional clauses include: a sixth clause, the sixth clause enforcing that all particle species of the plurality of particle species are included in the target lattice structure; and a seventh clause, the seventh clause enforcing that all patch types of the plurality of patch types are used in the one or more solutions.

    Description

    BRIEF DESCRIPTION OF THE DRAWINGS

    [0008] The patent or application file contains at least one drawing executed in color. Copies of this patent or patent application publication with color drawing(s) will be provided by the Office upon request and payment of the necessary fee.

    [0009] FIG. 1A is a diagram showing a schematic representation of a unit cell of a tetrastack lattice (target configuration) including 16 positions, each bound to its neighbors by a plurality of numbered slots;

    [0010] FIG. 1B is a diagram showing a topology representative of the unit lattice for the unit cell of FIG. 1A, showing each lattice position connected to 6 other positions;

    [0011] FIG. 1C is a diagram showing a patchy particle (PP) with 6 patches, each patch including a different patch type that can be positioned into the lattice for the unit cell of FIG. 1A such that each patch fills a slot of the unit cell;

    [0012] FIG. 1D is a diagram showing an interaction matrix showing which patch types of the PP of FIG. 1C interact;

    [0013] FIG. 1E is a diagram showing a solution found by a Boolean satisfiability solver, the solution including assigned PP species and orientation such that each lattice position of the unit cell of FIG. 1A is filled and all conditional clauses imposing arrangement restrictions are satisfied;

    [0014] FIG. 2A is a diagram showing a simulated tetrastack (TS) assembled lattice structure and a corresponding graphical representation showing energy per particle over the course of simulations at differing temperatures;

    [0015] FIG. 2B is a diagram showing a simulated diamond cubic (DC) assembled lattice structure and a corresponding graphical representation showing energy per particle over the course of simulations at differing temperatures;

    [0016] FIG. 2C is a diagram showing a simulated clathrate Si34 (CSi34) assembled lattice structure and a corresponding graphical representation showing energy per particle over the course of simulations at differing temperatures;

    [0017] FIG. 3A is a diagram showing further simulations of diamond cubic (DC) assembled lattice structure and a corresponding graphical representation showing energy as a function of Monte Carlo sweeps;

    [0018] FIG. 3B is a diagram showing further simulations of clathrate Si34 (CSi34) assembled lattice structure and a corresponding graphical representation showing energy as a function of Monte Carlo sweeps;

    [0019] FIG. 4 is a diagram showing a general framework for determining a patch type scheme for at least one particle species of patchy particles such that the patchy particles assemble into a target structure;

    [0020] FIG. 5 is a diagram showing an overall methodology for determining a patch type scheme for at least one particle species of patchy particles such that the patchy particles assemble into a target structure; and

    [0021] FIG. 6 is a simplified diagram showing an exemplary computing system for implementation of the system of FIGS. 1A-5.

    [0022] Corresponding reference characters indicate corresponding elements among the view of the drawings. The headings used in the figures do not limit the scope of the claims.

    DETAILED DESCRIPTION

    [0023] A general framework for designing self-assembling systems of patchy particles (PP) into any arbitrary structure is disclosed herein, with the option to exclude the formation of competing structures that are identified in simulations. The framework described herein focuses on PP systems that have geometric properties, such as the number and placement of patches on a particle that reflect the local environment of the target lattice. To introduce selectivity in the framework, each patch is assigned a patch type, or “type”, that encodes its binding properties and N.sub.c is defined as a number of different patch types on a given particle. Binding is allowed only between patches that have compatible types as specified by an interaction matrix. In some embodiments, the framework does not impose any torsional restrictions and all bonds have the same strength. While all particles have the same placement of the patches, the framework allows for the possibility of having N.sub.s different PP “species”, which are defined by an arrangement of the typing of their patches. Relative concentrations of each type of PP species are also free parameters. This system can be realized experimentally with patches based on single-stranded DNA thanks to the selective binding of DNA sequences. To simplify sequence design, the framework imposes that each patch is assigned a type that can only bind with one other type (which can be the same in the case of self-complementarity). The goal is to determine the patch typing for each PP species and type interaction matrix so that the PPs assemble into a desired structure. Referring to the drawings, embodiments of a system and associated method for designing patchy interactions to self-assemble arbitrary structures are illustrated and generally indicated as 100 in FIGS. 1-6.

    [0024] The target structure is described by a unit cell, shown in FIG. 1A, including l∈[1,L] particles. The unit cell can be a combination of two or more true unit cells of the target lattice. The positions of the patches in the target lattice (slots) are labeled as k∈[1,N.sub.p], from which a list of neighboring slots is computed, as illustrated in FIG. 1B. Designed PPs can be of different species s∈[1,N.sub.s], and have p∈[1,N.sub.p] patches on their surface which can take a patch type c∈[1,N.sub.c], as shown in FIG. 1C. o represents one of the N.sub.o possible orientations of each particle, and it is uniquely identified by a map between its patches and the patch slots they occupy. Not all mappings are possible, only those that can be reached by a physical rotation of the particle. FIG. 1D illustrates an interaction matrix that shows interaction compatibility between patch types of different PP species. FIG. 1E illustrates a solution formed by two PP species that forms the unit cell lattice structure of FIG. 1A by selected arrangement and orientation of each modeled PP according to their patch types described in the interaction matrix of FIG. 1D.

    [0025] A brute-force search of all possible combinations of (i) patch type arrangements for all particle species

    [00001] ( N c N s N p ) ,

    (ii) rotations and symmetry operations of each particle, up to N.sub.p.sup.L! and (iii) interaction matrix between patch types,

    [00002] ( ( N c + 1 ) / 2 N c ) ,

    becomes intractable with increasing N.sub.c, N.sub.s, N.sub.p, and L even if they are relatively small. Instead, and this is a crucial contribution of this disclosure, the problem is mapped to a Boolean satisfiability problem (SAT) where recent algorithmic developments have dramatically advanced the present ability to solve problems involving tens of thousands of variables and millions of constraints. In some embodiments, the framework uses a publicly available SAT solver that can find solutions to the design problems considered here in time ranging from few seconds up to one hour.

    [0026] Mapping the particle design onto a SAT problem requires the definition of (i) binary variables x.sub.i that describe the PPs' patch typing for each particle species and the type interaction matrix and (ii) binary clauses C.sub.j that represent the constraints that the variables need to satisfy, such as the ability to form all the bonds in the target lattice. Each binary clause contains a subset of the variables x.sub.i (or their negation ¬x.sub.i) connected by an OR statement, and a solution is found whenever a combination of values of the x.sub.i satisfies all clauses at the same time. Formally, this corresponds to finding a set of variables xi such that C.sub.1ΛC.sub.2ΛC.sub.3Λ . . . is true. The SAT mapping can also be used to prove the impossibility of achieving some (desired or unwanted) binding pattern with a given combination of input parameters N.sub.s and N.sub.c by proving the absence of solutions to the associated SAT problem. This is crucial since it allows filtering of undesired binding patterns, which may represent competing global arrangements (i.e., another crystal form) or local arrangements (kinetic traps).

    [0027] A design problem thus translates into a set of binary variables and clauses, as defined in Table I. In order, the clauses enforce that (i) C.sup.int: each type is compatible with exactly one type, (ii) C.sup.pcol: each patch is assigned exactly one type, (iii) C.sup.L: each lattice position is occupied by a single PP species with one assigned orientation, (iv) C.sup.lint: types of patches that interact in the target lattice can bind to each other according to the interaction matrix, (v) C.sup.LS: the slots in each lattice position are set to have the type of the patch occupying them, C.sub.s.sup.alls.: all N.sub.s particle species are used for the lattice assembly, (vii) C.sup.all c.: all N.sub.c patch types are used in the solution. The final SAT problem is a conjunction of all clauses (i)-(vii). The conditions (vi) and (vii) are used to avoid getting trivial solutions such as having a single PP species with all patches typed by the same self-complementary type. It allows formulation of the SAT problems for different combinations of N.sub.s and N.sub.c to see for which the solutions exist.

    TABLE-US-00001 TABLE 1 SAT Clauses and Variables Id Clauses Boolean expression (i) C.sub.c.sub.i.sub., c.sub.j.sub., c.sub.k.sup.int ¬x.sub.c.sub.i.sub., c.sub.j.sup.int ∨ ¬x.sub.c.sub.i.sub., c.sub.k.sup.int (ii) C.sub.s, p, c.sub.k.sub., c.sub.l.sup.pcol ¬x.sub.s, p, c.sub.k.sup.pcol ∨ ¬x.sub.s, p, c.sub.l.sup.pcol (iii) C.sub.l, s.sub.i.sub., o.sub.i.sub., s.sub.j.sub., o.sub.j.sup.L ¬x.sub.l, .sub.s.sub.i.sub., .sub.o.sub.i.sup.L ∨ ¬x.sub.l, .sub.s.sub.j.sub., .sub.o.sub.j.sup.L (iv) C.sub.l.sub.i.sub., k.sub.i.sub., l.sub.j.sub., k.sub.j.sub., c.sub.i.sub., c.sub.j.sup.lint (x.sub.l.sub.i.sub., k.sub.i.sub., c.sub.i.sup.A ∧ x.sub.l.sub.j.sub., k.sub.j.sub., c.sub.j.sup.A.sup.) .Math. x.sub.c.sub.i.sub., c.sub.j.sup.int (v) C.sub.l, s, o, c, k.sup.LS x.sub.l, s, o.sup.L .Math. (x.sub.l, k, c.sup.A ⇔ x.sub.s, ϕ.sub.o.sub.(k), c.sup.pcol) (vi) C.sub.s.sup.all s. ∨.sub.∀l, o x.sub.l, s, o.sup.L (vii) C.sub.c.sup.all c. ∨.sub.∀s, p x.sub.s, p, c.sup.pcol

    [0028] For the lattice design problems considered in the present disclosure, the number of binary variables ranges from about 10.sup.3 to 10.sup.5, and the number of clauses ranges from approx. 10.sup.4 to 10.sup.7, which were found to be within reach of a commonly used SAT solver. If a solution is found in terms of the binary variables x, it can be straightforwardly converted into human-readable form by listing the variables x.sub.s,p,c.sup.pcol and x.sub.c.sub.i.sub.,c.sub.j.sup.int that are 1, as their subscripts will specify respectively i) the type c of patch p in PP species s, ii) the compatible types c.sub.i and c.sub.j. Additionally, the present framework allows the user to quickly check if a specific combination of PP species with a patch typing and type interaction matrix can satisfy a given lattice geometry. The framework uses clauses (i)-(iv) discussed above, and additionally add clauses that constrain the variables x.sup.pcol and x.sup.int accordingly for the set of PPs that need to be checked. If such a SAT problem is solvable, the indices of the variables x.sub.l,s,o.sup.L that are 1 readily provide the particle species s and orientation o assigned to each lattice position l, allowing visualization of the lattice, as shown in FIG. 1E.

    [0029] To demonstrate the versatility of the SAT mapping approach for particle design, three of the most challenging and sought after lattice geometries were selected. After using the SAT solver to obtain PP species design and type interaction matrix, molecular simulations were ran and the success and quality of crystals obtained from homogenous nucleation were studied. The SAT solver guarantees that the target structure is an energy minimum, but cannot say whether kinetic traps or other energy minima, both often associated with competing crystalline structures, are present along the self-assembly pathway. If a competing structure is found in the molecular simulations, it can be explicitly excluded by redesigning the SAT problem by adding additional clauses or by discarding all generated solutions that can form the identified undesired structures. Thus, the framework iteratively arrives at a design which self-assembles into the desired crystal formation through homogeneous nucleation. In contrast to previous solutions to this problem, it is stressed that these crystalline structures are being nucleated without introducing torsional interactions or hierarchical assembly. Moreover, the crystals are nucleated homogeneously, without the need for seeding or templating, and grow without stacking defects.

    [0030] The first target structure is the cubic tetrastack (TS) lattice (also known as pyrochlore, shown in FIG. 2A) that together with the cubic diamond has been proposed for its omnidirectional photonic band gap for use as a photonic crystal. A design with 6 patches in the direction of the closest neighbors is adopted, as shown in FIGS. 1A and 1C. To mimic the possible experimental realization of the system using 3D DNA nanostructures, with single-stranded DNA representing individual patches, the PPs are modeled as soft spheres with attractive point-patches (as described below in “Patchy Particle Models and SAT Solver Logic” section) Solutions can be found with N.sub.s=1, N.sub.c=3 but suffer from the geometric problem in which two particles can bind with two bonds at the same time, leading to alternative assemblies in the simulations. To avoid this, an additional clause is introduced (further defined in “Patchy Particle Models and SAT Solver Logic” section) that requires that no pair of particles can bind through more than one bond. This SAT problem has no solution (null solution) for N.sub.s=1. For N.sub.s=2, solutions were found for different N.sub.c, and the one with N.sub.c=12 was tested in simulation (FIGS. 1D and 1E), which showed successful nucleation (FIG. 2A). To simulate the assembly kinetics, simulations at a range of temperatures of a point-patch particle model were used (further defined in “Patchy Particle Models and SAT Solver Logic” section). The simulations were carried out with 2048 particles at number density 0.1 (corresponding to a volume fraction of 0.05). This density was chosen to mimic the common experimental scenario of phase-separation-induced crystallization from a low-density solution. FIG. 2A shows a nucleation event: the left panel shows a snapshot of the nucleus, the right panel shows the time evolution of the energy for runs at different temperatures, where the nucleating trajectory is signaled by the sharp decrease in energy

    [0031] Next, consider the tetravalent PP assembly. One of the most popular models for the study of tetravalent systems is the Kern-Frenkel (KF) potential, which is a square-well potential with angular dependence (see “Patchy Particle Models and SAT Solver Logic” section) The thermodynamic and crystallizability of the model have been well characterized, and have highlighted the difficulty of obtaining nucleations of a pure crystal due to the many kinetic traps represented by competing structures. Due to the discontinuous nature of the potential, the Monte Carlo (MC) method is commonly employed to study its assembly. Previous studies have shown the nucleation process to be very similar between MD and MC simulations, because the dynamics in the melt is not significantly different between MD and MC integrators (as long as the MC trial displacements are small).

    [0032] The assembly of the cubic diamond (DC, shown in FIG. 2B) lattice is further sought, probably the most sought-after crystal for photonic applications. Systems that can assemble DC lattice are almost inevitably found to be also able to assemble into hexagonal diamond (HD) lattice, resulting in imperfect crystals with defects and stacking faults. A tetrahedral PP design (N.sub.p=4) was adopted, and solutions that type an 8-particle unit cell of DC but cannot type an 8-particle unit cell of HD were looked for. Even in this case, the SAT solver showed that any PP solution that satisfies 8-particle DC cell can also assemble a 32-particle HD unit cell. A strategy to avoid the HD lattice in this case is to employ a larger unit cell for the DC. Hence, a larger 16-particle unit cell of a DC lattice was used and a range of combinations of N.sub.s>8 and N.sub.c were scanned. For each solution that was obtained for a given N.sub.s and N.sub.c, each solution was checked with the SAT solver to determine if it can assemble into a 32-particle HD unit cell. The solution with the smallest N.sub.s that was found to be able to form DC and not form 32-particle HD cell had N.sub.s=9 and N.sub.c=31, and it successfully nucleated the DC lattice in a Kern-Frenkel PP simulation (FIG. 2B), which was done with 495 particles split equally into 9 PP species, at number density 0.2 (corresponding to volume fraction 0.1). Simulations were also carried out at 0.1 number density with 2048 particles, which also showed homogeneous nucleation of a DC lattice (further discussed in “Patchy Particle Models and SAT Solver Logic” section).

    [0033] As the last example, the present approach was used to find a system able to nucleate into the Si34 clathrate (CSi34, shown in FIG. 2C) starting from tetrahedral PPs in the KF model. The smallest N.sub.s for which a solution was found that could form CSi34 and not DC or HD lattices had N.sub.s=4, N.sub.c=12, and was confirmed to successfully nucleate CSi34 (FIG. 2C) in a simulation at 0.2 number density with 476 particles in species ratio 6:3:2:6, as well as in a larger simulation at number density 0.1 and 1904 particles (shown in “Patchy Particle Models and SAT Solver Logic” section).

    [0034] The patch typing and interaction matrices for all PP solutions are given in the Supp. Mat. While the framework has focused so far only on designing systems for the assembly of difficult 3D lattices, the approach can be generalized to other systems, such as finite-size clusters. The framework is not limited to spherical PPs and can be used for any model where simulations or other stochastic methods can identify undesired assemblies as a list of interactions between PP species and their patches. It can be also combined with other techniques, such as using different strengths of interactions to disfavor undesired assemblies identified in the simulations. The approach proposed here is extensible and the systems designed in the present system should be amenable of experimental realization.

    Patchy Particle Models and SAT Solver Logic

    [0035] The patchy particle (PP) models that were used to carry out the simulations of the lattice assemblies are further discussed herein. Both 6-valent PP model for TS assembly and tetrahedral PP model for DC and CSi34 lattice assembly were implemented in the oxDNA simulation tool package and are freely available with its source code. The energy scale is in simulation unit energy ∈*, and the simulation temperature reported in FIGS. 2A-2C is in reduced units ∈*/kB. For each simulated system, a few simulations were run at empirically chosen temperatures. A temperature range was identified such that at the lowest temperature, the PPs would form a glassy state, and at the highest temperature they would remain in the gas state. The range was then partitioned into different temperatures at 0.001 interval to run respective simulations to find optimal crystallization temperature. Each simulation was started from randomly positioned non-overlapping PPs.

    Patchy Particle Model for Tetrastack Assembly

    [0036] In simulations of tetrastack (TS) lattice assembly of FIG. 2A, each particle is represented by a sphere covered by 6 patches at distance d.sub.p=0.5 distance units (d.u.) from the center of the sphere. The positions of the patches, defined in terms of the orthonormal base associated with the patchy particle, are:


    p.sub.1=α(0,1,ξ)


    p.sub.2=α(0,−1,ξ)


    p.sub.3=α(ξ,0,1)


    p.sub.4=α(0,−1,−ξ)


    p.sub.5=α(0,1,−ξ)


    p.sub.6=α(−ξ(0,−1),

    [0037] where ξ=(1+√{square root over (5)})/2 and α=d.sub.p/√{square root over (1+ξ2)}. The position of patch i in the simulation box coordinate system is given by


    r.sub.p.sub.i=r.sub.cm+p.sub.i.sub.x,e.sub.1+p.sub.i.sub.ye.sub.2+p.sub.i.sub.ze.sub.3  (S1)

    [0038] where r.sub.cm is the center of mass of the patchy particle, and e.sub.1,2,3 are the x, y, and z orthonormal base vectors associated with the patchy particle's orientation

    [0039] The interaction potential between a pair of patches on two distinct particles is

    [00003] V patch ( r p ) = { - 1.001 δ ij exp [ - ( r p α ) 10 ] - C if r p r pmax 0 otherwise ( S 2 )

    [0040] where δ.sub.ij is 1 if patch types i and j can bind and 0 otherwise, r.sub.p is the distances between a pair of patches, and α=0.12 d.u. sets the patch width. The constant C is set so that for V.sub.patch(r.sub.pmax)=0, r.sub.pmax=0.18 d.u. The patchy particles further interact through excluded volume interactions ensuring that two particles do not overlap

    [00004] f exc ( r , ϵ , σ , r * ) = { V LJ ( r , ϵ , σ ) if r < r * , ϵ V smooth ( r , b , r c ) if r * < r < r c , 0 otherwise . ( S 3 )

    [0041] where r is the distance between the centers of the patchy particles, and σ is set to 2R=0.8, twice the desired radius of the patchy particle. The choice of a radius smaller than d.sub.p has been done to mimic very soft particles, where the assembly has to be driven purely by bonds without being affected by excluded volume. The repulsive potential is a piecewise function, consisting of Lennard-Jones potential function

    [00005] V LJ ( r , σ ) = 8 [ ( σ r ) 12 - ( σ r ) 6 ] . ( S 4 )

    [0042] that is truncated using a quadratic smoothening function


    V.sub.smooth(x,b,x.sup.c)=b(x.sub.c−x).sup.2,  (S5)

    [0043] with b and x.sub.c are set so that the potential is a differentiable function that is equal to 0 after a specified cutoff distance r.sup.c=0.8.

    [0044] The patchy particle system was simulated using rigid-body Molecular Dynamics with an Andersen-like thermostat as well as using Monte Carlo (MC) simulations. During the simulation, each patch was only able to be bound to one other patch at the time, and if the binding energy between a pair of patches, as given by Eq. (S2), is smaller than 0, none of the patches can bind to any other patch until their pair interaction potential is again 0.

    Patchy Particle Model for Diamond and Clathrate Lattice Assembly

    [0045] For the diamond cubic (DC) and clathrate Si34 (CSi34) lattice assembly of FIGS. 2B and 2C, tetravalent patchy particles with tetrahedral patch arrangements are used. The positions of the patches, in the orthonormal base associated with the patchy particle, are given as


    p.sub.1=R(√{square root over ( 8/9)},0,−⅓)


    p.sub.2=R(−√{square root over ( 2/9)},√{square root over (⅔)},−⅓)


    p.sub.3=R(−√{square root over ( 2/9)},−√{square root over (⅔)},−⅓)


    p.sub.4=R(0,0,1),

    where R=0.5 d.u. is the radius of the patchy particle represented by a sphere. MC simulations of the DC and CSi34 lattice assembly is performed. Each patchy particle is modeled as a hard sphere, with excluded volume interaction between two particles at distance r defined as

    [00006] V hs ( r ) = { if r < 2 R , 0 otherwise . ( S 6 )

    [0046] The interaction between a pair of patches p.sub.i and q.sub.j on distinct particles i and j is modeled through the Kern-Frenkel interaction potential:

    [00007] V FK ( r , θ p , θ q ) = { - 1 if r < 2 R + δ and cos θ p < θ max and cos θ q < θ max , 0 otherwise . ( S 7 )

    [0047] where δ is set to 0.12 d.u. in our simulations and θ.sub.max is set to 0.98. Furthermore, we use r=r.sub.cm.sub.qr.sub.cm.sub.p, where r=∥r∥ is the distance between the centers of mass of the patchy particles p and q, to define angles

    [00008] cos θ p = r .Math. p i .Math. r .Math. .Math. p i .Math. ( S 8 ) cos θ q = - r .Math. q j .Math. r .Math. .Math. q j .Math. ( S 9 )

    [0048] where p.sub.i is the vector from center of mass of particle p towards patch p.sub.i, and analogously for patch q.sub.j.

    Simulations of DC and CSi34 Lattice Assembly at 0.1 Number Density

    [0049] Additionally to simulations shown in FIGS. 2A-2C, further simulations include the homogeneous nucleation of the DC lattice with a simulation 2048 particles (at 0.1 number density, corresponding to 0.05 volume fraction), split into the 9 respective species in ratio 2:2:2:1:2:2:2:1:2, which corresponds to the number of times each PP species is represented in the 16-particle DC unit cell. CSi34 lattice assembly was further simulated with 1904 particles respectively, split into 4 species in ratio 6:3:2:6, corresponding to the relative PP species ratio in the 34-particle unit cell of CSi34. Both systems have shown homogeneous nucleation and the summary of the simulations is in FIG. 3A.

    Patchy Particle Solutions for Crystal Lattices

    [0050] Listed here are the patch typing and type interaction rules that were found by the SAT solver and verified by simulations to assemble into the TS, DC, and CSi34 lattices respectively. For each PP species, the patch typings are specified as a list (p, c), where p is a number that identifies the patch on a particle (1 to 6 for patchy particles that assemble in TS lattice, and 1 to 4 for patchy particles that assemble in DC or CSi34 lattice), and c identifies the patch type (from 1 to N.sub.c, where N.sub.c is the total number of types used). The interacting types are then listed as pairs (c.sub.i, c.sub.j), where type c.sub.i can only bind to type c.sub.j and vice versa. For self-complementary types, list (c.sub.i, c.sub.j). The designs of patchy particles for assembly of TS, DC, and CSi34 lattices respectively are given below:

    [0051] TS crystal lattice design with N.sub.s=2 and N.sub.c=12:

    TABLE-US-00002 PP species Patch Coloring 1: (1, 1) (2, 2) (3, 3) (4, 4)  (5, 5)  (6, 6)  2: (1, 7) (2, 8) (3, 9) (4, 10) (5, 11) (6, 12) Color interactions (1, 5), (2, 12), (3, 8), (4, 7), (6, 11), (9, 10)

    [0052] DC crystal design with N.sub.s=9 and N.sub.c=31:

    TABLE-US-00003 PP species Patch Coloring 1: (1, 16) (2, 9)  (3, 18) (4, 4)  2: (1, 26) (2, 13) (3, 23) (4, 1)  3: (1, 5)  (2, 8)  (3, 24) (4, 31) 4: (1, 12) (2, 21) (3, 27) (4, 19) 5: (1, 12) (2, 29) (3, 14) (4, 17) 6: (1, 28) (2, 15) (3, 7)  (4, 6)  7: (1, 3)  (2, 22) (3, 11) (4, 2)  8: (1, 21) (2, 30) (3, 12) (4, 19) 9: (1, 20) (2, 25) (3, 8)  (4, 10) Color interactions (1, 4), (2, 25), (11, 17), (12, 12), (13, 13), (6, 18) (16, 31), (19, 22), (20, 23), (3, 9), (5, 26), (7, 14) (21, 28), (24, 24), (27, 30), (29, 29), (8, 8), (10, 15)

    [0053] CSi34 crystal design with N.sub.s=4 and N.sub.c=12:

    TABLE-US-00004 PP species Patch Coloring 1: (1, 3)  (2, 11) (3, 8) (4, 5) 2:  (1, 12) (2, 9) (3, 4)  (4, 12) 3: (1, 7) (2, 7) (3, 4) (4, 7) 4: (1, 6)  (2, 10) (3, 1) (4, 2) Color interactions (1, 1) (2, 2) (3, 12) (4, 4) (5, 6) (7, 8) (9, 9) (10, 11)

    Boolean Clause Formulation for SAT

    [0054] The PP design problem is formulated as a SAT problem by specifying it as a set of binary clauses in a format acceptable by SAT solver software. A detailed formulation is provided of the binary clauses in a format required as an input into the commonly used SAT solvers

    [0055] The set of binary clauses as defined in Table 1 fully specify the PP design problem. For a target lattice structure with unit cell consisting of L positions, where each position has N.sub.p neighbors (and hence N.sub.p slots), we are looking for a solution that has N.sub.s PP species and uses in total N.sub.p different types. The particle geometry (i.e. patch positions on the PP) is hard-coded by the lattice geometry, and we need to provide all possible rotations No that a PP can make in a given lattice position so that its patches overlap with the slots of the given position (illustrated in FIGS. 1A-1E). For the PPs used for TS lattice assembly N.sub.o=6. For tetrahedral PPs used in DC and CSi34 lattices, N.sub.o=12. For each PP orientation o, we assign a mapping (ϕ.sub.0, which maps patch on the PP to the slot of the lattice position, e.g. (ϕ.sub.1=(1,2,3,4,5,6).fwdarw.(2,3,1,5,6,4) for a particle with 6 patches used for TS assembly.

    [0056] Binary variables x.sub.c.sub.i.sub.,c.sub.j.sup.int are defined, which are 1 if given pair c.sub.i≤c.sub.j∈[1,N.sub.c] of types can interact and 0 if they cannot. Next set of variables x.sub.s,p,c.sup.pcol define typing of patches for each particle species s∈[1,N.sub.s] and x.sub.s,p,c.sup.pcol is 1 if p-th patch (p∈[1,N.sub.p]) of s-th particle species is assigned to have type c. A set of variables that define arrangement of PP types in the lattice are further defined, where x.sub.l,s,r.sup.L is 1 if in the desired lattice geometry, the PP species that occupies position l∈[1,L] is of PP type .sup.s∈[1,N.sub.s] and its orientation is set to o∈[1,N.sub.o]. Lastly, variables x.sub.l,k,c.sup.A are defined, which are 1 if the PP in lattice position l∈[1,L] is oriented in such a way that the slot k∈[1,N.sub.p] of that position overlaps with PP's patch that has type c. The variables are defined for all possible combinations of types, PP species, patches, orientations, lattice positions. The solution is specified by a list of variables that are 1 (true). For instance x.sub.c.sub.a.sub.,c.sub.b.sup.int=1 means that in the type interaction matrix, type c.sub.a is compatible with c.sub.b. However, to make sure that the assignment of true and false values to all defined variables is a correct solution to the design task, it is necessary to define binary clauses that introduce relations between the variables that have to be satisfied.

    [0057] The clauses (i)-(iii) in Table 1 ensure feasibility of the solution: as binary variables x.sup.pcol, x.sup.L, x.sup.int correspond to all possible combinations of type interactions, patch typing and PP assignment to positions on the lattice, the first three sets of clauses ensure that in the obtained solution, the variables that are mutually exclusive (e.g. a patch having at the same time two different types) cannot be both true at the same time. The clauses (iv)-(v) enforce that for the correct solution, the PPs have to be arranged in the target lattice in such a way that patches in contact have compatible types. Finally, clauses (vi)-(vii) impose that for the solution found by the SAT solver, all N.sub.s PP species have to be included in the lattice formation, and all N.sub.c types have to be used. This requirement is added to avoid the solvers coming up with trivial solutions, such as designing one PP species with all patches typed to a self-complementary type, which would then trivially satisfy the target lattice.

    [0058] As an input for the SAT solver, the problem has to be formulated in terms of clauses C.sub.j, each of them containing variables x.sub.i connected by OR clauses. The final SAT problem corresponds to all respective clauses C.sub.j connected by AND clauses. To conform with this input format, the Boolean clauses introduced in Table 1 in the main text can be all reformulated as detailed below. The final SAT problem is a conjunction of all individual clauses from sets (i)-(vii) described below. The definitions use the following logic symbols: ¬: negation; ∧: conjunction (AND); ∨: disjunction (OR); .Math.: implies; ⇐ .Math.: if and only if.

    [0059] (i) Each type ci can only bind to one other type C.sub.f (including possible self-complementarity).


    c.sub.i≤c.sub.j<c.sub.k∈[1,N.sub.c]:C.sub.c.sub.i.sub.,c.sub.j.sub.,c.sub.k.sup.int=¬x.sub.c.sub.i.sub.,c.sub.j.sup.int∧¬x.sub.c.sub.i.sub.,c.sub.k.sup.int.  (S10)

    [0060] To illustrate how the above clauses achieve unique binding int between types, consider variable x.sub.c.sub.a.sub.,c.sub.b.sup.int=1 for particular choice of c.sub.a and c.sub.b (meaning that these types can bind). Consider a type c.sub.k different from c.sub.a and c.sub.b. The SAT problem includes conjunction of all clauses C.sup.int as defined in Eqs. S10. Hence all of the clauses have to be true, including the clause C.sub.c.sub.a.sub.,c.sub.b.sub.,c.sub.k.sup.int=¬x.sub.c.sub.a.sub.,c.sub.b.sup.int∧¬x.sub.c.sub.a.sub.,c.sub.k.sup.int. Since ¬x.sub.c.sub.a.sub.,c.sub.b.sup.int is false, satisfying this clause is only possible if x.sub.c.sub.a.sub.,c.sub.k.sup.int=0, i.e. types c.sub.a and c.sub.k are not allowed to interact. Analogously, it can be shown that x.sub.c.sub.b.sub.,c.sub.k.sup.int must be 0 and therefore c.sub.b and c.sub.k do not interact either.

    [0061] (ii) Each patch p of each PP species s is assigned exactly one type:


    s∈[1,N.sub.s],p∈[1,N.sub.p],c.sub.l<c.sub.k∈[1,N.sub.c]:C.sub.s,p,c.sub.k.sub.,c.sub.l.sup.pcol=¬x.sub.s,p,c.sub.k.sup.pcol∧¬x.sub.s,p,c.sub.i.sup.pcol.  (S11)

    [0062] In a manner analogous to Eqs. S10, the clauses C.sup.pcol ensure that if for example x.sub.s,p,c.sub.a.sup.pcol is 1, the framework needs to have x.sub.s,p,c.sub.k.sup.pcol=0 for all other c.sub.k≠0 ca in order to satisfy the C.sup.pcol clauses, and hence patch p on PP species s can only have type c.sub.a.

    [0063] (iii) Each lattice position l is only assigned exactly one PP species with exactly one assigned orientation:


    l∈[1,L],s.sub.i<s.sub.j∈[1,N.sub.s],o.sub.i<o.sub.j∈[1,N.sub.o]:C.sub.l,s,o.sub.i.sub.,s.sub.j.sub.,o.sub.j.sup.L=¬x.sub.l,s.sub.i.sub.,o.sub.i.sup.L∧¬x.sub.l,s.sub.j.sub.,o.sub.j.sup.L.  (S12)

    [0064] Analogously to clauses (i) and (ii), the set of clauses defined in Eqs. S12 ensure that there can be only one PP species with only one assigned orientation occupying given slot I in the target lattice.

    [0065] (iv) For all pairs of slots k.sub.i and k.sub.j that are in contact in neighboring lattice positions l.sub.i, l.sub.j (e.g. as shown in FIG. 1B), the patches that occupy them need to have complementary types:


    c.sub.i≤c.sub.j∈[1,N.sub.c]:C.sub.l.sub.i.sub.,k.sub.i.sub.,l.sub.j.sub.,k.sub.j.sub.,c.sub.i.sub.,c.sub.j.sup.lint=(x.sub.l.sub.i.sub.,k.sub.i.sub.,c.sub.i.sup.A∧x.sub.l.sub.j.sub.,k.sub.j.sub.,c.sub.j.sup.A).Math.x.sub.c.sub.i.sub.,c.sub.j.sup.C,

    [0066] which can be equivalently rewritten as


    C.sub.l.sub.i.sub.,k.sub.i.sub.,l.sub.j.sub.,k.sub.j.sub.,c.sub.i.sub.,c.sub.j.sup.lint=¬x.sub.l.sub.i.sub.,k.sub.i.sub.,c.sub.i.sup.A∨¬x.sub.l.sub.j.sub.,k.sub.j.sub.,c.sub.j.sup.A∨x.sub.c.sub.i.sub.,c.sub.j.sup.C.  (S13)

    [0067] These clauses assure that PPs placed in neighboring positions in the lattice interact through the correctly typed slots. The Eqs. (S13) hence encode the geometry of the target lattice.

    [0068] (v) The slot of lattice position I is typed with the same type as the patch of the PP species occupying it:


    l∈[1,L],k∈[1,N.sub.p],o∈[1,N.sub.o],s∈[1,N.sub.s],c∈[1,N.sub.c]:C.sub.l,s,o,c,k.sup.LS=x.sub.l,s,o.sup.L.Math.(x.sub.l,k,c.sup.A⇔x.sub.s,ϕ.sub.o.sub.(k),c.sup.pcol),

    [0069] which can be equivalently rewritten as


    C.sub.l,x,o,c,k.sup.LS=(¬x.sub.l,s,l.sup.L∨¬x.sub.l,k,c.sup.A∨x.sub.s,ϕ.sub.o.sub.(k),c.sup.pcol)∧(¬x.sub.l,s,l.sup.L∨x.sub.l,k,c.sup.A≙¬x.sub.s,ϕ.sub.o.sub.(k),c.sup.pcol)   (S14)

    [0070] These clauses are required to correctly set variables x.sup.A, which are used in clauses (iv). A PP of type s can be placed in N.sub.o different orientations o into a specific position l on the lattice. For a particular choice of o, the mapping function φ.sub.o maps φ.sub.o(k)-th patch to k-th slot, assuring that variable x.sub.l,k,c.sup.A is 1 if the φ.sub.o(k)-th patch of particle on lattice position l has type c.

    [0071] (vi) All N.sub.s PP species have to be used at least once in the assembled lattice:

    [00009] s [ 1 , N s ] : C s all s . = l [ 1 , L ] , o [ 1 , N o ] x l , s , o L ( S 15 )

    [0072] For each s, the variables in the clause C.sub.s.sup.alls are connected by OR (disjunction). Each clause contains al combinations of variables for all lattice positions l and orientations o. These clauses ensure that in the solution, each PP species appears at least once in the lattice. For examples, consider that there is a solution that does not contain PP species number sa in the lattice. In that case, variables x.sub.l,s.sub.a.sub.,o.sup.L are 0 for all values of l and o, which makes the clause C.sub.s.sub.a.sup.alls. false.

    [0073] (vii) Each type c of N.sub.c total number of types is assigned to at least one patch of one of the PP species

    [00010] c [ 1 , N c ] : C c all c . = s [ 1 , N s ] , p [ 1 , N p ] x s , p , c pcol . ( S 16 )

    [0074] These clauses ensure that all types are used in the solution in a similar way that clauses (vi) ensure that all PP species are used.

    [0075] For the design of the TS lattice, we introduced an additional set of clauses that ensure that any pair of particles (of the same or different species) cannot bind by more than one bond at a time:


    s.sub.i,s.sub.j∈[1,N.sub.s],c.sub.i.sup.1,c.sub.i.sup.2,c.sub.j.sup.1,c.sub.j.sup.2∈[1,N.sub.c]C.sub.s,s.sub.j.sub.,p.sub.1.sub.i.sub.,p.sub.2.sub.i.sub.,p.sub.1.sub.i.sub.,p.sub.2.sub.j.sub.,c.sub.i.sub.1.sub.,c.sub.i.sub.2.sub.,c.sub.j.sub.1.sub.,c.sub.j.sub.2=¬(x.sub.s,p.sub.1.sub.i.sub.,c.sub.i.sub.1.sup.pcol∧x.sub.s.sub.i.sub.,p.sub.2.sub.i.sub.,c.sub.i.sub.2.sup.pcol∧x.sub.s.sub.j.sub.,p.sub.1.sub.i.sub.,c.sub.j.sub.1.sup.pcol∧x.sub.s.sub.j.sub.,p.sub.2.sub.i.sub.,c.sub.j.sub.2.sup.pcol∧x.sub.c.sub.i.sub.1.sub.,c.sub.j.sub.1.sup.int∧x.sub.c.sub.2.sub.i.sub.,x.sub.j.sub.2.sup.int),  (S17)

    [0076] where p.sub.1.sup.i, p.sub.2.sup.i, p.sub.1.sup.j, p.sub.2.sup.j are all possible pairs of patches on PP of type s.sub.i and s.sub.j respectively for which there is a possible orientation so that they can both bind if they have compatible types.

    [0077] To find solutions for SAT problems considered in the present disclosure, MiniSat, MapleSAT, or Walksat solvers were used. These are popular standard tools used by researchers in constraint satisfaction problems community and we used them as ‘black box’. Walksat was found to be the fastest in finding the solutions to most of the PP design problems (typically in several seconds). However, if the solution does not exist, Walksat algorithm is unable to prove the impossibility, as it just continues its search for a solution even if it does not exist. MapleSAT had performance similar to MiniSat in terms of time it took them to find a solution (between few seconds to tens of minutes), but MapleSAT is more memory efficient (less than 2 GB RAM for SAT problems that we encountered in this work), allowing multiple MapleSAT solvers to run in parallel without running out of available memory on a typical workstation. As opposed to Walksat, MiniSat and MapleSAT can also be used to prove that no solution (null solution) exists for a given SAT problem. However, for certain combinations of Ns and Nc for DC and CSi34 lattices, the algorithms were not able to find solution nor prove impossibility within the maximum 2 hours running time that was imposed for the solvers. It is possible the solutions could be found (or impossibility proved) if algorithms were run for longer.

    [0078] For each successful solution that was found for a given lattice and N.sub.s and N.sub.c, the solution was tested for its ability to assemble into undesired structures using MiniSat. In this case, true values were explicitly set to the combination of patch typing and type interactions (x.sup.int and .sup.xpcol) variables that encodes the solution that were found, and use clauses (i)-(v) to formulate the SAT problem. For this task, it takes MiniSat (or MapleSat) only few seconds to find out if the PP species (or their subset) can or cannot assemble into a given undesired lattice. Hence, one can test the solution very quickly against a list of known undesired structures.

    [0079] Referring to FIGS. 4 and 5, a general framework 100 and associated methodology 200 for determining a patch type scheme for at least one particle species of patchy particles such that the patchy particles assemble into a target structure.

    [0080] In particular, FIG. 4 illustrates the framework 100 for determining a solution in the form of a patch type scheme x.sup.pcol, an interaction matrix x.sup.int and an orientation x.sup.L of each PP within a target lattice structure. The framework 100 includes a first module 102 associated with the PP models for each PP species and associated attributes, including definitions for variables corresponding to patch type scheme x.sup.pcol, an interaction matrix x.sup.int and an orientation x.sup.L of each PP within a target lattice structure. Framework 100 can also include a second module 104 associated with the target lattice structure and can include one or more descriptors of a unit cell including one or more target lattice slots. Actions performed by module 102 of the framework 100 corresponds with step 202 of method 200 of FIG. 5, which indicates receiving a model of one or more patchy particle species including the set of variables descriptive of a respective patch scheme for each patchy particle species. Step 204 corresponds to module 104 of framework 100, which indicates receiving a target lattice structure including a plurality of possible lattice positions of a unit cell.

    [0081] Framework 100 of FIG. 4 can also include a third module 106 including a plurality of conditions to be imposed by an SAT solver such that attributes of the PP models as determined by the SAT solver allow assembly of the plurality of PPs into the target lattice structure. Conditions and associated definitions can include clauses described in Table 1 of this disclosure, but can also be manually added to or improved upon when imposing additional restrictions to prevent formation of certain undesirable lattice structures including competing structures or unstable structures. Actions performed by module 106 of the framework 100 correspond with step 206 of method 200 of FIG. 5, which indicates determining a plurality of conditional clauses representative of a plurality of constraints that the one or more variables must satisfy in order to self-assemble to a target configuration based on their respective patch schemes.

    [0082] SAT solver module 108 of framework 100 of FIG. 4 receives the PP model definitions from first module 102, target lattice structure definitions from second module 104 and conditions from third module 106 to determine appropriate PP model values including the patch type scheme x.sup.pcol, interaction matrix x.sup.int and orientation x.sup.L of each PP within the target lattice structure such that the PPs assemble into the target lattice structure. Actions performed by SAT solver module 108 of the framework 100 correspond with step 208 of method 200 of FIG. 5, which indicates applying the plurality of conditional clauses to the plurality of variables representative of the patch scheme to identify one or more solutions to the plurality of variables such that each conditional clause of the plurality of conditional clauses is satisfied. In some cases, multiple solutions exist that can be simulated in a further step to select a subset of solutions that produce a desired result. In other cases, a “null” solution is found, corresponding with step 222 of FIG. 5, indicating that no solution exists that will allow assembly into the target structure given one or more parameters of the PP model.

    [0083] Once SAT solver module 108 identifies one or more solutions including one or more patch type schemes, interaction matrices, and orientations of each PP within the target lattice structure, a model simulator module 110 of FIG. 4 can be used to verify the one or more solutions. In particular, simulating the solutions by model simulator module 110 can identify solutions that also create competing or otherwise undesirable lattice structures. Such solutions can then be removed from a listing of viable solutions, and in some embodiments, additional conditional clauses can be added to module 106 to provide further preventative limitations when running the SAT solver module 108 to identify solutions. Actions performed by model simulator module 110 of the framework 100 correspond with step 212 of method 200 of FIG. 5, which indicates simulating given solutions to identify an optimal patch scheme for each of the one or more patchy particle species. Step 214 indicates excluding patch schemes or solutions that form undesirable lattice structures.

    Computer-Implemented System

    [0084] FIG. 6 illustrates an example of a suitable computing and networking environment (computer system 300) which may be used to implement various aspects of the present disclosure. Example embodiments described herein may be implemented at least in part in electronic circuitry; in computer hardware executing firmware and/or software instructions; and/or in combinations thereof. Example embodiments also may be implemented using a computer program product (e.g., a computer program tangibly or non-transitorily embodied in a machine-readable medium and including instructions for execution by, or to control the operation of, a data processing apparatus, such as, for example, one or more programmable processors or computers). A computer program may be written in any form of programming language, including compiled or interpreted languages, and may be deployed in any form, including as a stand-alone program or as a subroutine or other unit suitable for use in a computing environment. Also, a computer program can be deployed to be executed on one computer, or to be executed on multiple computers at one site or distributed across multiple sites and interconnected by a communication network.

    [0085] Certain embodiments are described herein as including one or more modules. Such modules are hardware-implemented, and thus include at least one tangible unit capable of performing certain operations and may be configured or arranged in a certain manner. For example, a hardware-implemented module may comprise dedicated circuitry that is permanently configured (e.g., as a special-purpose processor, such as a field-programmable gate array (FPGA) or an application-specific integrated circuit (ASIC)) to perform certain operations. A hardware-implemented module may also comprise programmable circuitry (e.g., as encompassed within a general-purpose processor or other programmable processor) that is temporarily configured by software or firmware to perform certain operations. In some example embodiments, one or more computer systems (e.g., a standalone system, a client and/or server computer system, or a peer-to-peer computer system) or one or more processors may be configured by software (e.g., an application or application portion) as a hardware-implemented module that operates to perform certain operations as described herein.

    [0086] Accordingly, the term “hardware-implemented module” encompasses a tangible entity, be that an entity that is physically constructed, permanently configured (e.g., hardwired), or temporarily configured (e.g., programmed) to operate in a certain manner and/or to perform certain operations described herein. Considering embodiments in which hardware-implemented modules are temporarily configured (e.g., programmed), each of the hardware-implemented modules need not be configured or instantiated at any one instance in time. For example, where the hardware-implemented modules comprise a general-purpose processor configured using software, the general-purpose processor may be configured as respective different hardware-implemented modules at different times. Software, in the form of the system application 200 or otherwise, may include a hardware-implemented module and may accordingly configure a processor 302, for example, to constitute a particular hardware-implemented module at one instance of time and to constitute a different hardware-implemented module at a different instance of time.

    [0087] Hardware-implemented modules may provide information to, and/or receive information from, other hardware-implemented modules. Accordingly, the described hardware-implemented modules may be regarded as being communicatively coupled. Where multiple of such hardware-implemented modules exist contemporaneously, communications may be achieved through signal transmission (e.g., over appropriate circuits and buses) that connect the hardware-implemented modules. In embodiments in which multiple hardware-implemented modules are configured or instantiated at different times, communications between such hardware-implemented modules may be achieved, for example, through the storage and retrieval of information in memory structures to which the multiple hardware-implemented modules have access. For example, one hardware-implemented module may perform an operation, and may store the output of that operation in a memory device to which it is communicatively coupled. A further hardware-implemented module may then, at a later time, access the memory device to retrieve and process the stored output. Hardware-implemented modules may also initiate communications with input or output devices.

    [0088] As illustrated, the computing and networking environment 300 may be a general purpose computing device 300, although it is contemplated that the networking environment 300 may include other computing systems, such as personal computers, server computers, hand-held or laptop devices, tablet devices, multiprocessor systems, microprocessor-based systems, set top boxes, programmable consumer electronic devices, network PCs, minicomputers, mainframe computers, digital signal processors, state machines, logic circuitries, distributed computing environments that include any of the above computing systems or devices, and the like.

    [0089] Components of the general purpose computing device 300 may include various hardware components, such as a processing unit 302, a main memory 304 (e.g., a memory or a system memory), and a system bus 301 that couples various system components of the general purpose computing device 300 to the processing unit 302. The system bus 301 may be any of several types of bus structures including a memory bus or memory controller, a peripheral bus, and a local bus using any of a variety of bus architectures. For example, such architectures may include Industry Standard Architecture (ISA) bus, Micro Channel Architecture (MCA) bus, Enhanced ISA (EISA) bus, Video Electronics Standards Association (VESA) local bus, and Peripheral Component Interconnect (PCI) bus also known as Mezzanine bus.

    [0090] The general purpose computing device 300 may further include a variety of computer-readable media 307 that includes removable/non-removable media and volatile/nonvolatile media, but excludes transitory propagated signals. Computer-readable media 307 may also include computer storage media and communication media. Computer storage media includes removable/non-removable media and volatile/nonvolatile media implemented in any method or technology for storage of information, such as computer-readable instructions, data structures, program modules or other data, such as RAM, ROM, EPSOM, flash memory or other memory technology, CD-ROM, digital versatile disks (DVD) or other optical disk storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other medium that may be used to store the desired information/data and which may be accessed by the general purpose computing device 300. Communication media includes computer-readable instructions, data structures, program modules, or other data in a modulated data signal such as a carrier wave or other transport mechanism and includes any information delivery media. The term “modulated data signal” means a signal that has one or more of its characteristics set or changed in such a manner as to encode information in the signal. For example, communication media may include wired media such as a wired network or direct-wired connection and wireless media such as acoustic, RF, infrared, and/or other wireless media, or some combination thereof. Computer-readable media may be embodied as a computer program product, such as software stored on computer storage media.

    [0091] The main memory 304 includes computer storage media in the form of volatile/nonvolatile memory such as read only memory (ROM) and random access memory (RAM). A basic input/output system (BIOS), containing the basic routines that help to transfer information between elements within the general purpose computing device 300 (e.g., during start-up) is typically stored in ROM. RAM typically contains data and/or program modules that are immediately accessible to and/or presently being operated on by processing unit 302. For example, in one embodiment, data storage 306 holds an operating system, application programs, and other program modules and program data.

    [0092] Data storage 306 may also include other removable/non-removable, volatile/nonvolatile computer storage media. For example, data storage 306 may be: a hard disk drive that reads from or writes to non-removable, nonvolatile magnetic media; a magnetic disk drive that reads from or writes to a removable, nonvolatile magnetic disk; and/or an optical disk drive that reads from or writes to a removable, nonvolatile optical disk such as a CD-ROM or other optical media. Other removable/non-removable, volatile/nonvolatile computer storage media may include magnetic tape cassettes, flash memory cards, digital versatile disks, digital video tape, solid state RAM, solid state ROM, and the like. The drives and their associated computer storage media provide storage of computer-readable instructions, data structures, program modules and other data for the general purpose computing device 300.

    [0093] A user may enter commands and information through a user interface 340 or other input devices 345 such as a tablet, electronic digitizer, a microphone, keyboard, and/or pointing device, commonly referred to as mouse, trackball, or touch pad. Other input devices 345 may include a joystick, game pad, satellite dish, scanner, or the like. Additionally, voice inputs, gesture inputs (e.g., via hands or fingers), or other natural user interfaces may also be used with the appropriate input devices, such as a microphone, camera, tablet, touch pad, glove, or other sensor. These and other input devices 345 are often connected to the processing unit 302 through a user interface 340 that is coupled to the system bus 301, but may be connected by other interface and bus structures, such as a parallel port, game port or a universal serial bus (USB). A monitor 360 or other type of display device is also connected to the system bus 301 via user interface 340, such as a video interface. The monitor 360 may also be integrated with a touch-screen panel or the like.

    [0094] The general purpose computing device 300 may operate in a networked or cloud-computing environment using logical connections of a network Interface 303 to one or more remote devices, such as a remote computer. The remote computer may be a personal computer, a server, a router, a network PC, a peer device or other common network node, and typically includes many or all of the elements described above relative to the general purpose computing device 300. The logical connection may include one or more local area networks (LAN) and one or more wide area networks (WAN), but may also include other networks. Such networking environments are commonplace in offices, enterprise-wide computer networks, intranets and the Internet.

    [0095] When used in a networked or cloud-computing environment, the general purpose computing device 300 may be connected to a public and/or private network through the network interface 303. In such embodiments, a modem or other means for establishing communications over the network is connected to the system bus 301 via the network interface 303 or other appropriate mechanism. A wireless networking component including an interface and antenna may be coupled through a suitable device such as an access point or peer computer to a network. In a networked environment, program modules depicted relative to the general purpose computing device 300, or portions thereof, may be stored in the remote memory storage device.

    [0096] It should be understood from the foregoing that, while particular embodiments have been illustrated and described, various modifications can be made thereto without departing from the spirit and scope of the invention as will be apparent to those skilled in the art. Such changes and modifications are within the scope and teachings of this invention as defined in the claims appended hereto.