SwitchingForceField

SwitchingForceField #

It performs molecular dynamics simulation and changes forcefields at the given frame.

It takes one system and several forcefields to run the simulation.

Example #

[simulator]
type          = "SwitchingForceField"
boundary_type = "Unlimited"
precision     = "double"
delta_t       = 0.1
total_step    = 3_000_000
save_step     = 100
seed          = 2374

integrator.type = "BAOABLangevin"
integrator.parameters = [
{index =  0, gamma = 1.00},
{index =  1, gamma = 1.00},
]

schedule      = [
    {until = 1_000_000, forcefield = "close"},
    {until = 2_000_000, forcefield = "open"},
    {until = 3_000_000, forcefield = "close"},
]

[[forcefields]]
name = "close"
[[forcefields.local]]
# ...

[[forcefields]]
name = "open"
[[forcefields.local]]
# ...

Input Reference #

  • type: String
    • Name of the simulator. Here, it is "SwitchingForceField".
  • boundary_type: String
    • Type of the boundary condition. The size will be specified in [[systems]].
    • "Unlimited": No boundary condition will applied.
    • "Periodic": Periodic boundary condition will be applied. The shape is recutangular box.
  • precision: String
    • Precision of floating point number used in the simulation.
    • "float": 32bit floating point number.
    • "double": 64bit floating point number.
  • parallelism: String (Optional. By default, "sequencial".)
    • "OpenMP": OpenMP implementation will be used.
    • "sequencial": Simulation runs on single core.
  • seed: Integer
    • Random number generator will be initialized by this value.
  • delta_t: Floating
    • Time step of the simulation. The unit depends on the unit system defined in [units]
  • total_step: Integer
    • Total time step of the simulation.
  • save_step: Integer
    • The state of the system will be saved at this interval.
  • integrator: Table
  • schedule: Array of Tables
    • The schedule for forcefield control. See below.

schedule #

schedule is an array of tables and each table has the following fields.

  • until: Integer
    • It uses the specified forcefield until this frame.
  • forcefield: String
    • Name of the forcefield.
schedule      = [
    {until = 1_000_000, forcefield = "close"},
    {until = 2_000_000, forcefield = "open"},
    {until = 3_000_000, forcefield = "close"},
]

The name of the forcefield is defined via name under [[forcefields]].

[[forcefields]]
name = "close"

[[forcefields.local]]
# This is a component of "close" forcefield.
interaction = "BondLength"
potential = "Harmonic"
# ...

[[forcefields.local]]
# This is a component of "close" forcefield.
interaction = "BondAngle"
potential = "Harmonic"
# ...

[[forcefields]]
name = "open"

[[forcefields.local]]
# This is a component of "open" forcefield.
# ...