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)