Skip to content

Commit f6a1f9a

Browse files
committed
updates
1 parent 2a2ad0a commit f6a1f9a

File tree

1 file changed

+28
-39
lines changed

1 file changed

+28
-39
lines changed

src/types.jl

Lines changed: 28 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,10 @@ export
2121
masses,
2222
charges,
2323
MollyCalculator,
24-
ASECalculator
24+
ASECalculator,
25+
NBodyInteraction,
26+
SpecificInteraction,
27+
PairwiseInteraction
2528

2629
const DefaultFloat = Float64
2730

@@ -35,9 +38,10 @@ Base type for all n-body interactions. `N` denotes the body order
3538
"""
3639
abstract type NBodyInteraction{N} <: Interaction end
3740

38-
39-
abstract type SpecificInteraction <: Interaction end
40-
abstract type GeneralInteraction <: Interaction end
41+
"""
42+
Base type for all specific interactions. `N` denotes number of atoms in the interaction.
43+
"""
44+
abstract type SpecificInteraction{N} <: Interaction end
4145

4246
"""
4347
Type alias for pairwise interactions
@@ -51,7 +55,7 @@ const PairwiseInteraction = NBodyInteraction{2}
5155
5256
A list of specific interactions that involve one atom such as position restraints.
5357
"""
54-
struct InteractionList1Atoms{I, T} <: SpecificInteraction
58+
struct InteractionList1Atoms{I, T} <: SpecificInteraction{1}
5559
is::I
5660
inters::T
5761
types::Vector{String}
@@ -64,7 +68,7 @@ end
6468
6569
A list of specific interactions that involve two atoms such as bond potentials.
6670
"""
67-
struct InteractionList2Atoms{I, T} <: SpecificInteraction
71+
struct InteractionList2Atoms{I, T} <: SpecificInteraction{2}
6872
is::I
6973
js::I
7074
inters::T
@@ -78,7 +82,7 @@ end
7882
7983
A list of specific interactions that involve three atoms such as bond angle potentials.
8084
"""
81-
struct InteractionList3Atoms{I, T} <: SpecificInteraction
85+
struct InteractionList3Atoms{I, T} <: SpecificInteraction{3}
8286
is::I
8387
js::I
8488
ks::I
@@ -93,7 +97,7 @@ end
9397
9498
A list of specific interactions that involve four atoms such as torsion potentials.
9599
"""
96-
struct InteractionList4Atoms{I, T} <: SpecificInteraction
100+
struct InteractionList4Atoms{I, T} <: SpecificInteraction{4}
97101
is::I
98102
js::I
99103
ks::I
@@ -636,42 +640,27 @@ Convenience constructor for `System` that takes all interactions in one tuple.
636640
These are passed through the `interactions` kwarg.
637641
"""
638642
function System(;
639-
atoms,
640-
coords,
641-
boundary,
642-
velocities=nothing,
643-
atoms_data=[],
644-
topology=nothing,
645643
interactions=(),
646-
constraints=(),
647-
neighbor_finder=NoNeighborFinder(),
648-
loggers=(),
649-
force_units=u"kJ * mol^-1 * nm^-1",
650-
energy_units=u"kJ * mol^-1",
651-
k=default_k(energy_units),
652-
data=nothing)
644+
kwargs...
645+
)
653646

654-
general_inters = filter(i -> i isa GeneralInteraction, interactions)
655-
pairwise_inters = filter(i -> i isa PairwiseInteraction, interactions)
656-
specific_inters = filter(i -> i isa SpecificInteraction, interactions)
647+
pairwise_inter_idxs = findall(i -> i isa PairwiseInteraction, interactions)
648+
specific_inter_idxs = findall(i -> i isa SpecificInteraction, interactions)
649+
nbody_inter_idxs = findall(i -> i isa NBodyInteraction, interactions)
650+
651+
length(nbody_inter_idxs) > length(pairwise_inters_idxs) || error("Molly does not currently support n-body potentials beyond pair.")
652+
653+
# All remaining interactions assumed to be general
654+
idxs = trues(length(interactions))
655+
idxs[pairwise_inter_idxs] .= false
656+
idxs[specific_inter_idxs] .= false
657+
general_inters = interactions[idxs]
657658

658659
return System(
659-
atoms=atoms,
660-
coords=coords,
661-
boundary=boundary,
662-
velocities=velocities,
663-
atoms_data=atoms_data,
664-
topology=topology,
665-
pairwise_inters=pairwise_inters,
666-
specific_inter_lists=specific_inters,
660+
pairwise_inters=pairwise_inters[pairwise_inter_idxs],
661+
specific_inter_lists=specific_inters[specific_inter_idxs],
667662
general_inters=general_inters,
668-
constraints=constraints,
669-
neighbor_finder=neighbor_finder,
670-
loggers=loggers,
671-
force_units=force_units,
672-
energy_units=energy_units,
673-
k=k,
674-
data=data,
663+
kwargs...
675664
)
676665

677666
end

0 commit comments

Comments
 (0)