def exercise_reference_impl_quick(): sites_cart = fmri.create_triangle_with_center_of_mass_at_origin() assert approx_equal(flex.vec3_double(sites_cart).mean(), (0, 0, 0)) inertia1 = fmri.body_inertia(sites_cart=sites_cart) inertia2 = matrix.sym(sym_mat3=scitbx.math.inertia_tensor( points=flex.vec3_double(sites_cart), pivot=(0, 0, 0))) assert approx_equal(inertia1, inertia2) # for use_classical_accel in [False, True]: sim = fmri.simulation() assert approx_equal( [sim.e_pot, sim.e_kin_ang, sim.e_kin_lin, sim.e_kin, sim.e_tot], [ 0.64030878777041611, 0.012310594130384761, 0.02835, 0.04066059413038476, 0.68096938190080092 ]) for i in range(100): sim.dynamics_step(delta_t=0.01, use_classical_accel=use_classical_accel) expected = [[ 0.028505221929112364, 0.091503230553568404, 0.56329655444242244, 0.65479978499599079, 0.6833050069251031 ], [ 0.053276067541032097, 0.091503230553568404, 0.53805622991666513, 0.62955946047023348, 0.68283552801126557 ]][int(use_classical_accel)] assert approx_equal( [sim.e_pot, sim.e_kin_ang, sim.e_kin_lin, sim.e_kin, sim.e_tot], expected)
def motion(n_steps=20, callback=None): points = create_triangle_with_center_of_mass_at_origin() shift = matrix.col((0.1, 0.1, 0.1)) i_step = 0 while (callback is not None or i_step != n_steps): if (callback is None): print[point.elems for point in points] else: status = callback(points) if status == False: break for i in xrange(len(points)): points[i] += shift i_step += 1 if (i_step % 10 == 0): shift = -shift
def motion(n_steps=20, callback=None): points = create_triangle_with_center_of_mass_at_origin() shift = matrix.col((0.1,0.1,0.1)) i_step = 0 while (callback is not None or i_step != n_steps): if (callback is None): print [point.elems for point in points] else: status = callback(points) if status == False : break for i in xrange(len(points)): points[i] += shift i_step += 1 if (i_step % 10 == 0): shift = -shift
def exercise_reference_impl_quick(): sites_cart = fmri.create_triangle_with_center_of_mass_at_origin() assert approx_equal(flex.vec3_double(sites_cart).mean(), (0, 0, 0)) inertia1 = fmri.body_inertia(sites_cart=sites_cart) inertia2 = matrix.sym(sym_mat3=scitbx.math.inertia_tensor(points=flex.vec3_double(sites_cart), pivot=(0, 0, 0))) assert approx_equal(inertia1, inertia2) # for use_classical_accel in [False, True]: sim = fmri.simulation() assert approx_equal( [sim.e_pot, sim.e_kin_ang, sim.e_kin_lin, sim.e_kin, sim.e_tot], [0.64030878777041611, 0.012310594130384761, 0.02835, 0.04066059413038476, 0.68096938190080092], ) for i in xrange(100): sim.dynamics_step(delta_t=0.01, use_classical_accel=use_classical_accel) expected = [ [0.028505221929112364, 0.091503230553568404, 0.56329655444242244, 0.65479978499599079, 0.6833050069251031], [0.053276067541032097, 0.091503230553568404, 0.53805622991666513, 0.62955946047023348, 0.68283552801126557], ][int(use_classical_accel)] assert approx_equal([sim.e_pot, sim.e_kin_ang, sim.e_kin_lin, sim.e_kin, sim.e_tot], expected)
def create_triangle_with_random_center_of_mass(mersenne_twister): sites = create_triangle_with_center_of_mass_at_origin() t = matrix.col(mersenne_twister.random_double(size=3)*2-1) return [site+t for site in sites]