Here's a longer script which you might find useful. The problem is to compute the RMSD between each timestep of the simulation and the first frame. Usually in a simulation there is no initial global velocity, so the center of mass doesn't move, but because of angular rotations and because of numerical imprecisions that slowly build up, the script aligns the molecule before computing its RMSD.
# Prints the RMSD of the protein atoms between each timestep # and the first timestep for the given molecule id (default: top) proc print_rmsd_through_time {{mol top}} { # use frame 0 for the reference set reference [atomselect $mol "protein" frame 0] # the frame being compared set compare [atomselect $mol "protein"] set num_steps [molinfo $mol get numframes] for {set frame 0} {$frame < $num_steps} {incr frame} { # get the correct frame $compare frame $frame # compute the transformation set trans_mat [measure fit $compare $reference] # do the alignment $compare move $trans_mat # compute the RMSD set rmsd [measure rmsd $compare $reference] # print the RMSD puts "RMSD of $frame is $rmsd" } }To use this, load a molecule with an animation (for example, $VMDDIR/proteins/alanin.DCD from the VMD distribution). Then run print_rmsd_through_time. Example output is shown here:
vmd > print_rmsd_through_time RMSD of 0 is 0.000000 RMSD of 1 is 1.060704 RMSD of 2 is 0.977208 RMSD of 3 is 0.881330 RMSD of 4 is 0.795466 RMSD of 5 is 0.676938 RMSD of 6 is 0.563725 RMSD of 7 is 0.423108 RMSD of 8 is 0.335384 RMSD of 9 is 0.488800 RMSD of 10 is 0.675662 RMSD of 11 is 0.749352 [...]