[gmx-developers] Help needed with hacking mdrun
Semen Esilevsky
yesint4 at yahoo.com
Thu Apr 7 11:11:42 CEST 2011
Dear All,
I need to hack mdrun in rather complex way and need some help from people, who
understand Gromacs internals really well.
My problem is the following. Each N MD steps I want to pass current
coordinates and forces to custom function, which transforms them in a certain
way (doesn't matter how at this point). Then I want to pass modified forces and
coordinates back and continue simulation. Currently I got stuck with domain
decomposition stuff. I figured out how to collect data on master node and pass
it to my function. However, I have no idea how to distribute it back to all
nodes correctly after modification.
Here is my additional code in md.c so far:
...
/* ######## END FIRST UPDATE STEP ############## */
/* ######## If doing VV, we now have v(dt) ###### */
/* ################## START TRAJECTORY OUTPUT ################# */
/* Some preparations goes here */
...
/* Collecting data*/
if (DOMAINDECOMP(cr))
{
/*We need to collect x and f only*/
dd_collect_vec(cr->dd,state_local,state_local->x,state_global->x);
dd_collect_vec(cr->dd,state_local,f_local,f_global);
}
if (MASTER(cr))
{
printf("Collected %d atoms at step: %d\n",top_global->natoms,step);
/* Actually pass data */
pass_to(top_global->natoms, t, state_global->x, f_global);
...
/* Processing data here */
...
/* Get data back */
pass_from(state_global->x, f_global);
}
...
if (DOMAINDECOMP(cr)){
/* Here I have to redistribute it back from state_global->x and I'm totally
stuck :( */
}
The problem is that functions like dd_distribute_vector(...) are only used
deep inside domain decomposition code and they use some data structures, which
are not exposed in .h files.
Is there any other more elegant way of plugging custom code to mdrun?
Any hints are deeply appreciated!
Regards,
Semen
More information about the gromacs.org_gmx-developers
mailing list