# CoulombN2Spline¶

class CoulombN2Spline(r_cut=None, r_i=None, i_degree=None, bonded_mode=None)

Constructor of the Coulomb solver.

Parameters: r_cut (PhysicalQuantity of type length) – The cutoff radius of this Coulomb solver. r_i (PhysicalQuantity of type length) – The inner cutoff radius where the spline smoothing starts. i_degree (int) – Deprecated. This parameter is not used anymore. bonded_mode – Either CoulombN2Spline.evaluateAll or CoulombN2Spline.evaluate4. If evaluateAll is chosen, interactions between all particles - even those that are connected by bonds - are evaluated, using the sigma and epsilon parameters. If evaluate4 is chosen, interactions between particles that are connected by a path of bonds of length less than four are omitted.
getAllParameterNames()

Return the names of all used parameters as a list.

getAllParameters()

Return all parameters of this potential and their current values as a <parameterName / parameterValue> dictionary.

static getDefaults()

Get the default parameters of this potential and return them in form of a dictionary of <parameter name, default value> key-value pairs.

getInteractionMode()

Return the currently used interaction mode.

getParameter(parameterName)

Get the current value of the parameter parameterName.

setBondedMode(bonded_mode)

Set the way how particles that are connected by bonds are treated.

Parameters: bonded_mode – Either self.evaluateAll or self.evaluate4. If evaluateAll is chosen, interactions between all particles - even those that are connected by bonds - are evaluated, using the sigma and epsilon parameters. If evaluate4 is chosen, interactions between particles that are connected by a path of bonds of length less than four are omitted.
setCutoff(r_cut)

Set the cutoff radius of the Coulomb solver.

Parameters: r_cut (PhysicalQuantity of type length) – The cutoff radius of this Coulomb solver.
setInnerCutoff(r_i)

Set the inner cutoff.

Parameters: r_i (PhysicalQuantity of type length) – The inner cutoff radius where the spline smoothing starts.
setInterpolationOrder(i_degree)

Set the interpolation order.

Parameters: i_degree (int) – Deprecated. This parameter is not used anymore.
setParameter(parameterName, value)

Set the parameter parameterName to the given value.

Parameters: parameterName (str) – The name of the parameter that will be modified. value – The new value that will be assigned to the parameter parameterName.

## Usage Examples¶

Define a potential for Quartz by adding particle types and interaction functions to the TremoloXPotentialSet.

# -------------------------------------------------------------
# Set up a SiO2 Quartz crystal
# -------------------------------------------------------------

# Set up lattice
lattice = Hexagonal(4.916*Angstrom, 5.4054*Angstrom)

# Define elements
elements = [Silicon, Silicon, Silicon, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen,
Oxygen]

# Define coordinates
fractional_coordinates = [[ 0.4697,  0.0000,  0.0000    ],
[ 0.0000,  0.4697,  0.66666667],
[ 0.5303,  0.5303,  0.33333333],
[ 0.4135,  0.2669,  0.1191    ],
[ 0.2669,  0.4135,  0.547567  ],
[ 0.7331,  0.1466,  0.785767  ],
[ 0.5865,  0.8534,  0.214233  ],
[ 0.8534,  0.5865,  0.452433  ],
[ 0.1466,  0.7331,  0.8809    ]]

# Set up configuration
bulk_configuration = BulkConfiguration(
bravais_lattice=lattice,
elements=elements,
fractional_coordinates=fractional_coordinates
)

# -------------------------------------------------------------
# Calculator
# -------------------------------------------------------------

# Create the Pedone_2006Fe2 potential by hand, by adding the individual components

potentialSet = TremoloXPotentialSet(name='Pedone_2006Fe2')

# Add the particle types to the potential set

# Add the pair potentials to the potential set
potentialSet.addPotential(MorsePotential('Si', 'O', r_0=2.1*Angstrom, k=2.0067*1/Ang, E_0=0.340554*eV, r_i=6.0*Angstrom, r_cut=7.5*Angstrom))
potentialSet.addPotential(MorsePotential('O', 'O', r_0=3.618701*Angstrom, k=1.379316*1/Ang, E_0=0.042395*eV, r_i=6.0*Angstrom, r_cut=7.5*Angstrom))

# Add the coulomb solver to the potential set
potentialSet.setCoulombSolver(CoulombN2Spline(r_cut=9.0*Angstrom, r_i=7.0*Angstrom, i_degree=3))

# Create the calculator from the potential set
calculator = TremoloXCalculator(parameters=potentialSet)

bulk_configuration.setCalculator(calculator)
bulk_configuration.update()



## Notes¶

When using TremoloXCalculator, this solver calculates the electrostatic interactions between particles with partial charges, as defined in ParticleType.

The CoulombN2 and the CoulombN2Spline solvers calculate the Coulomb sum between all particle pairs $$i$$ and $$j$$ directly:

$V_{ij}(r) = \frac{q_i q_j}{r} .$

The CoulombN2 solver uses a hard cutoff without any smoothing, whereas the CoulombN2Spline solver applies a smoothing spline between the inner and the outer cutoff.

When using bonded force fields the bonded_mode parameter can be used to modify how this potential acts between atoms that are connected by less than 4 bonds. If CoulombSolver.evaluateAll (or “mode_bondless”) is chosen, the potential acts between all selected atoms independent of the bonds between them. If CoulombSolver.evaluate4 (or “mode_14”) is chosen, the potential is switched off for all atoms that are connected via one, two, or three consecutive bonds.