Пример #1
0
for n in range(numat):
    symb[n].vel.x = my.random_maxwell(symb[n], 2 * T)
    symb[n].vel.y = my.random_maxwell(symb[n], 2 * T)
    symb[n].vel.z = my.random_maxwell(symb[n], 2 * T)

while t_heat <= time / my.au_time:

    Mass_total = sum(symb[k].mass for k in range(numat))
    MC_vel_X = sum(symb[k].mass * symb[k].vel.x
                   for k in xrange(numat)) / Mass_total
    MC_vel_Y = sum(symb[k].mass * symb[k].vel.y
                   for k in xrange(numat)) / Mass_total
    MC_vel_Z = sum(symb[k].mass * symb[k].vel.z
                   for k in xrange(numat)) / Mass_total

    angular_vel = my.Inertia_matrix(symb)
    rot_comp = [
        my.cross(angular_vel, [symb[k].cart.x, symb[k].cart.y, symb[k].cart.z])
        for k in range(numat)
    ]

    for i in xrange(numat):
        symb[i].vel.x = symb[i].vel.x - MC_vel_X - rot_comp[i][0]
        symb[i].vel.y = symb[i].vel.y - MC_vel_Y - rot_comp[i][1]
        symb[i].vel.z = symb[i].vel.z - MC_vel_Z - rot_comp[i][2]

    my.nose_hoover_1(symb, dt, thermo, T, numat)

    # Transformation to internal coordinates
    mol.cart = [var.cart for var in symb]
    mol.internas_bonds(bond, nbond)