ExternalPotentials will need to be removed temporarily as they block the removal of keywords (they are the last places which use them). Reintroducing them should be thought about since they are either massively inefficient and probably shouldn't come back (RegionalPotential which used an Expression- yuck) or they are slightly awkward to bring back in their original form now that we have moved to node/graph.
The general question is "How do we retrieve an energy or force kernel from anywhere in the graph which knows about any external potentials?". The obvious answer seems to be "Define external potentials at the Graph level, and have a pass-through function a bit like dissolveGraph() to traverse upwards as necessary". Another extension to this idea could be to have specialised Graphs which themselves embody the potentials - i.e. they have the options to control them. For example a PointRestraintGraph would offer energy / force kernels which restricted the movements of atoms / molecules about some reference positions (e.g. as a Structure input to the graph) or which can be set on the ConfigurationAtoms in a specific Vector3 (faster and neater at the expense of memory).
ExternalPotentialswill need to be removed temporarily as they block the removal of keywords (they are the last places which use them). Reintroducing them should be thought about since they are either massively inefficient and probably shouldn't come back (RegionalPotentialwhich used anExpression- yuck) or they are slightly awkward to bring back in their original form now that we have moved to node/graph.The general question is "How do we retrieve an energy or force kernel from anywhere in the graph which knows about any external potentials?". The obvious answer seems to be "Define external potentials at the
Graphlevel, and have a pass-through function a bit likedissolveGraph()to traverse upwards as necessary". Another extension to this idea could be to have specialisedGraphs which themselves embody the potentials - i.e. they have the options to control them. For example aPointRestraintGraphwould offer energy / force kernels which restricted the movements of atoms / molecules about some reference positions (e.g. as aStructureinput to the graph) or which can be set on theConfigurationAtoms in a specificVector3(faster and neater at the expense of memory).