~/bend-docscommunity

sim.bend checks

raw source on the hub · import 0xdf198d67659100c90a58ecd6b01d034d/sim.bend as Sim

7 imports
import Base
import ./geom.bend as G
import ./protein.bend as P
import ./topology.bend as T
import ./force.bend as F
import ./bonded.bend as B
import ./rng.bend as Rng

Types

type DynAtom source · line 20 · raw

Data

type SimParams source · line 23 · raw

Data

Definitions

def acc_conv source · line 26 · raw

F32

def boltzmann source · line 29 · raw

F32

def ke_coul source · line 32 · raw

F32

def dyn_of_atom source · line 35 · raw

@h:0xdf198d67659100c90a58ecd6b01d034d/protein.Atom -> DynAtom

def dyn_of_atoms source · line 40 · raw

@xs:List<&2, 0xdf198d67659100c90a58ecd6b01d034d/protein.Atom> -> List<&2, DynAtom>

def dyn_atoms source · line 47 · raw

@ds:List<&2, DynAtom> -> List<&2, 0xdf198d67659100c90a58ecd6b01d034d/protein.Atom>

def zero_charges source · line 58 · raw

@xs:List<&2, 0xdf198d67659100c90a58ecd6b01d034d/protein.Atom> -> List<&2, F32>

Zero charges aligned with atoms (no charge model yet; Coulomb kernels take external charges and are exercised by laws).

def kick_vec source · line 66 · raw

@+s:U32 -> 0xdf198d67659100c90a58ecd6b01d034d/geom.Vec3

Uniform kicks in [-0.5, 0.5) per component, seeded per serial.

def init_kick_atom source · line 69 · raw

@h:DynAtom -> DynAtom

def init_kicks source · line 74 · raw

@ds:List<&2, DynAtom> -> List<&2, DynAtom>

def sum_vels_ds source · line 81 · raw

@ds:List<&2, DynAtom> -> 0xdf198d67659100c90a58ecd6b01d034d/geom.Vec3

def sub_com_ds source · line 90 · raw

@ds:List<&2, DynAtom> -> @+com:0xdf198d67659100c90a58ecd6b01d034d/geom.Vec3 -> List<&2, DynAtom>

def ke_head source · line 99 · raw

@h:DynAtom -> F32

def ke_sim_of source · line 104 · raw

@ds:List<&2, DynAtom> -> F32

def temp_of_ke source · line 111 · raw

@ke:F32 -> @n:Nat -> F32

def temp_of_ds source · line 114 · raw

@ds:List<&2, DynAtom> -> @n:Nat -> F32

def vv_scale_head source · line 117 · raw

@h:DynAtom -> @lam:F32 -> DynAtom

def vv_scale source · line 122 · raw

@ds:List<&2, DynAtom> -> @+lam:F32 -> List<&2, DynAtom>

def scale_to_temp source · line 129 · raw

@ds:List<&2, DynAtom> -> @+now:F32 -> @want:F32 -> List<&2, DynAtom>

def com_of_n source · line 132 · raw

@+kicked:List<&2, DynAtom> -> @n:Nat -> 0xdf198d67659100c90a58ecd6b01d034d/geom.Vec3

def init_scaled source · line 135 · raw

@+nocom:List<&2, DynAtom> -> @+n:Nat -> @temp0:F32 -> List<&2, DynAtom>

def init_nocom source · line 138 · raw

@+kicked:List<&2, DynAtom> -> @+n:Nat -> @temp0:F32 -> List<&2, DynAtom>

def init_vels source · line 141 · raw

@+ds:List<&2, DynAtom> -> @+temp0:F32 -> List<&2, DynAtom>

def dyn_set_force source · line 145 · raw

@ds:List<&2, DynAtom> -> @fs:List<&2, 0xdf198d67659100c90a58ecd6b01d034d/geom.Vec3> -> List<&2, DynAtom>

Set per-atom forces from a force list (truncates to the shorter).

def add_forces source · line 158 · raw

@a:List<&2, 0xdf198d67659100c90a58ecd6b01d034d/geom.Vec3> -> @b:List<&2, 0xdf198d67659100c90a58ecd6b01d034d/geom.Vec3> -> List<&2, 0xdf198d67659100c90a58ecd6b01d034d/geom.Vec3>

def set_forces source · line 170 · raw

@+ds:List<&2, DynAtom> -> @+qs:List<&2, F32> -> @+bonds:List<&2, U32> -> @+p:SimParams -> List<&2, DynAtom>

Fresh forces (uniform-LJ with exclusions + Coulomb + bonds) into state.

def vv_half_head source · line 176 · raw

@h:DynAtom -> @+dt:F32 -> DynAtom

Velocity Verlet halves over explicit state (forces must be fresh).

def vv_half source · line 183 · raw

@ds:List<&2, DynAtom> -> @+dt:F32 -> List<&2, DynAtom>

def vv_full_head source · line 190 · raw

@h:DynAtom -> @dt:F32 -> DynAtom

def vv_full source · line 196 · raw

@ds:List<&2, DynAtom> -> @+dt:F32 -> List<&2, DynAtom>

def md_thermo source · line 204 · raw

@+ds:List<&2, DynAtom> -> @+dt:F32 -> @+tau:F32 -> @+temp0:F32 -> @+n:Nat -> List<&2, DynAtom>

Berendsen thermostat folded into the step (T == 0 keeps velocities).

def md_step source · line 208 · raw

@+ds:List<&2, DynAtom> -> @+qs:List<&2, F32> -> @+bonds:List<&2, U32> -> @+p:SimParams -> @+dt:F32 -> @+tau:F32 -> @+temp0:F32 -> @+n:Nat -> List<&2, DynAtom>

def md_run source · line 211 · raw

@steps:Nat -> @ds:List<&2, DynAtom> -> @+qs:List<&2, F32> -> @+bonds:List<&2, U32> -> @+p:SimParams -> @+dt:F32 -> @+tau:F32 -> @+temp0:F32 -> @+n:Nat -> List<&2, DynAtom>

def sd_norm_head source · line 221 · raw

@h:DynAtom -> @+step:F32 -> DynAtom

Steepest descent over state (fixed fuel; CLI reports convergedness). Normalized steps (fixed distance along each force) relax clashes that raw F*dt would overshoot; raw forces still feed MD and max-force.

def sd_norm_sweep source · line 227 · raw

@ds:List<&2, DynAtom> -> @+step:F32 -> List<&2, DynAtom>

def min_run source · line 234 · raw

@fuel:Nat -> @ds:List<&2, DynAtom> -> @+qs:List<&2, F32> -> @+bonds:List<&2, U32> -> @+p:SimParams -> @+dt:F32 -> List<&2, DynAtom>

def maxforce2_of source · line 242 · raw

@ds:List<&2, DynAtom> -> F32

def converged_ds source · line 251 · raw

@ds:List<&2, DynAtom> -> @+tol:F32 -> Bool

def pairs_of_flat source · line 255 · raw

@bs:List<&2, U32> -> List<&1, Pair(U32, U32)>

Flat bonds back to pairs for the pair-list energies.

def energy_sum source · line 265 · raw

@+xs:List<&2, 0xdf198d67659100c90a58ecd6b01d034d/protein.Atom> -> @+qs:List<&2, F32> -> @+bonds:List<&2, U32> -> @+p:SimParams -> F32

Reportable potential: excluded uniform LJ + Coulomb + bonds.

def total_energy source · line 270 · raw

@+ds:List<&2, DynAtom> -> @+qs:List<&2, F32> -> @+bonds:List<&2, U32> -> @+p:SimParams -> F32