[gmx-users] work from pulling simulation
Daniel S. Han
dsh2002 at med.cornell.edu
Thu Dec 4 15:50:23 CET 2008
Hi,
Thanks for the quick response, and I apologize for being too vague.
Here's a second attempt.
In Gromacs 3.3.1, I am running a steered MD simulation with commands,
mdrun -s topol -o traj.trr -e ener -c conf -g log \
-pi pull.ppa -pn pull.ndx \
-pd pull.pdo -po pullout.ppa
Here is my pull.ppa input file:
;
; GENERAL
verbose = yes
; Skip steps = 1
; Runtype: afm, constraint, umbrella
runtype = afm
; Number of pull groups
ngroups = 1
; Groups to be pulled
group_1 = hx23loop_A
; The group for the reaction force.
; reference_group = Protein
; Weights for all atoms in each group (default all 1)
weights_1 =
reference_weights =
; Ref. type: com, com_t0, dynamic, dynamic_t0
reftype = com
; Use running average for reflag steps for com calculation
reflag = 1
; Select components for the pull vector. default: Y Y Y
pull_dim = N N Y
; DYNAMIC REFERENCE GROUP OPTIONS
; Cylinder radius for dynamic reaction force groups (nm)
r = 0
; Switch from r to rc in case of dynamic reaction force
rc = 0
; Update frequency for dynamic reference groups (steps)
update = 1
; AFM OPTIONS
; Pull rates in nm/ps = 1nm/1ns , if rate = 0.0010
afm_rate1 = 0.001
; Force constants in kJ/(mol*nm^2)
afm_k1 = 3000
; Directions
afm_dir1 = 0.0 0.0 1.0
; Initial spring positions
afm_init1 = 3.128236 2.156135 18.042684
The first few lines of the PDO output file are:
# AFM 3.0
# Component selection: 0 0 1
# nSkip 1
# Ref. Group ''
# Nr. of pull groups 1
# Group 1 'hx23loop_A' afmVec 0.000000 0.000000 1.000000 AfmRate 0.001000 AfmK 3000.000000
#####
0.000000 0.000000 18.042684 18.042684
0.002000 0.000000 18.042795 18.042686
0.004000 0.000000 18.042913 18.042688
Where the columns indicate the time, reference group, COM of the pulled group, and position of the spring.
So, my original question given this type of output, is how can one calculate the work done by the spring on the pulled protein group?
So for the above sample data, at t = .002, I get
F = Spring Force = AfmK * (18.042686- 18.042795) == AfmK * -0.000109
dZ = Change in Position of spring = (18.042795-18.042684) == 0.000111
Work by spring on Pulled group = F * dZ = AfmK * -0.000109 * 0.000111 ???
I can do this at every time step, and then sum the incremental work values to get the total work done.
Originally, I thought it would be more accurate to get the work by
using an average force.
For example, at t=1,
W = (F(t=1)+F(t=0))/2 * dZ(t=1),
but the results obtained this way seem to be worse -- meaning they
were very different than what I expected in my control systems.
If someone could please comment on whether this seems to be the
correct/incorrect way to calculate things, I would appreciate it.
I hope this was more clear, but please ask for more clarification/details if I something if needed.
Thank you,
Danny.
-- original message --
1. What is Z_bead?
2. Could you give us a real .pdo file segment?
3. I can only assume AFM, or something similar, but need to see a pull
code input file. Can you provide one?
4. What version of gromacs?
This is all to say I don't have enough information. But from what I can see:
1. If you are using force averages, your equation for W seems totally
incorrect. You should be averaging forces in a given histogram bin of
z and then integrating over the general reaction coordinate of z. But
again, I have no idea what Z_bead means.
2. If you are doing average force by current position vs umbrella then
be sure that you take the negative (ensemble average of system force
equals negative ensemble average of umbrella force: see Neale et al.
Chem Phys Lett 460, 375-381 (2008). -- and lots of other papers I
imagine).
Chris.
-- original message --
Hello GMXers,
I am performing steered MD simulations using the pull code in
1-Dimension (z) and I'd like to calculate the work done on my system (in
the z-direction) by the pulling spring.
If my output PDO pulling file looks something like this:
Time Z_pulled_group Z_bead
0 0 0
1 .5 1
2 1 2
Then my forces and work should be this?
Time dZ Spring Force Work_on_system
0 0 0 * k 0 * 0 * k ???
1 .5 .5 * k .5 * .5 * k ???
2 1 1 * k 1 * 1 * k ???
where
dZ = (Z_bead-Z_pulled_group)
F = k*dz
W = F*dz
Originally, I thought it would be more accurate to get the work by
using an average force.
For example, at t=1,
W = (F(t=1)+F(t=0))/2 * dZ(t=1),
but the results obtained this way seem to be worse -- meaning they
were very different than what I expected in my control systems.
If someone could please comment on whether this seems to be the
correct/incorrect way to calculate things, I would appreciate it.
Thanks,
Danny.
More information about the gromacs.org_gmx-users
mailing list