4 * This source code is part of
8 * GROningen MAchine for Chemical Simulations
12 * Copyright (c) 1991-1999
13 * BIOSON Research Institute, Dept. of Biophysical Chemistry
14 * University of Groningen, The Netherlands
17 * GROMACS: A message-passing parallel molecular dynamics implementation
18 * H.J.C. Berendsen, D. van der Spoel and R. van Drunen
19 * Comp. Phys. Comm. 91, 43-56 (1995)
21 * Also check out our WWW page:
22 * http://md.chem.rug.nl/~gmx
27 * Green Red Orange Magenta Azure Cyan Skyblue
29 static char *SRCID_mvdata_c
= "$Id$";
45 static void ld_nsb(int src
,t_nsborder
*nsb
)
47 blockrx(src
,nsb
->nprocs
);
48 blockrx(src
,nsb
->shift
);
49 blockrx(src
,nsb
->bshift
);
50 blockrx(src
,nsb
->nstDlb
);
51 blockrx(src
,nsb
->cgtotal
);
52 blockrx(src
,nsb
->natoms
);
53 nblockrx(src
,MAXPROC
,nsb
->homenr
);
54 nblockrx(src
,MAXPROC
,nsb
->index
);
55 nblockrx(src
,MAXPROC
,nsb
->cgload
);
56 nblockrx(src
,MAXPROC
,nsb
->workload
);
59 static char **ld_string(int src
,t_symtab
*symtab
)
64 return get_symtab_handle(symtab
,name
);
67 static int ld_strings(int src
,t_symtab
*symtab
,char ****nm
)
75 nblockrx(src
,nr
,handle
);
79 for (i
=0; (i
<nr
); i
++)
80 NM
[i
]=get_symtab_handle(symtab
,handle
[i
]);
86 static void ld_symtab(int src
,t_symtab
*symtab
)
90 blockrx(src
,symtab
->nr
);
92 snew(symtab
->symbuf
,1);
93 symtab
->symbuf
->bufsize
=nr
;
94 snew(symtab
->symbuf
->buf
,nr
);
98 snew(symtab
->symbuf
->buf
[i
],len
);
99 nblockrx(src
,len
,symtab
->symbuf
->buf
[i
]);
103 static void ld_grps(int src
,t_grps grps
[])
107 for(i
=0; (i
<egcNR
); i
++) {
108 blockrx(src
,grps
[i
].nr
);
109 snew(grps
[i
].nm_ind
,grps
[i
].nr
);
110 nblockrx(src
,grps
[i
].nr
,grps
[i
].nm_ind
);
112 for( ; (i
<egcNR
); i
++) {
118 static void ld_atoms(int src
,t_symtab
*symtab
,t_atoms
*atoms
)
122 blockrx(src
,atoms
->nr
);
123 snew(atoms
->atom
,atoms
->nr
);
124 nblockrx(src
,atoms
->nr
,atoms
->atom
);
125 atomnr
=ld_strings(src
,symtab
,&atoms
->atomname
);
126 assert(atomnr
==atoms
->nr
);
127 atoms
->nres
=ld_strings(src
,symtab
,&atoms
->resname
);
128 atoms
->ngrpname
=ld_strings(src
,symtab
,&atoms
->grpname
);
129 ld_grps(src
,atoms
->grps
);
130 ld_block(src
,&atoms
->excl
);
133 static void ld_vectors(int src
,rvec x
[],rvec v
[])
138 nblockrx(src
,natoms
,x
);
139 nblockrx(src
,natoms
,v
);
142 static void ld_ilist(int src
,t_ilist
*ilist
)
144 blockrx(src
,ilist
->nr
);
145 nblockrx(src
,MAXPROC
,ilist
->multinr
);
146 snew(ilist
->iatoms
,ilist
->nr
);
147 nblockrx(src
,ilist
->nr
,ilist
->iatoms
);
150 static void ld_idef(int src
,t_idef
*idef
)
154 blockrx(src
,idef
->ntypes
);
155 blockrx(src
,idef
->atnr
);
156 snew(idef
->functype
,idef
->ntypes
);
157 snew(idef
->iparams
,idef
->ntypes
);
158 nblockrx(src
,idef
->ntypes
,idef
->functype
);
159 nblockrx(src
,idef
->ntypes
,idef
->iparams
);
160 for(i
=0; (i
<F_NRE
); i
++)
161 ld_ilist(src
,&idef
->il
[i
]);
164 static void ld_grpopts(int src
,t_grpopts
*g
)
166 blockrx(src
,g
->ngtc
);
167 blockrx(src
,g
->ngacc
);
168 blockrx(src
,g
->ngfrz
);
169 snew(g
->nrdf
,g
->ngtc
);
170 snew(g
->tau_t
,g
->ngtc
);
171 snew(g
->ref_t
,g
->ngtc
);
172 snew(g
->acc
,g
->ngacc
);
173 snew(g
->nFreeze
,g
->ngfrz
);
174 nblockrx(src
,g
->ngtc
,g
->nrdf
);
175 nblockrx(src
,g
->ngtc
,g
->tau_t
);
176 nblockrx(src
,g
->ngtc
,g
->ref_t
);
177 nblockrx(src
,g
->ngacc
,g
->acc
);
178 nblockrx(src
,g
->ngfrz
,g
->nFreeze
);
181 static void ld_cosines(int src
,t_cosines
*cs
)
187 nblockrx(src
,cs
->n
,cs
->a
);
188 nblockrx(src
,cs
->n
,cs
->phi
);
192 static void ld_parm(int src
,t_parm
*parm
)
197 ld_grpopts(src
,&(parm
->ir
.opts
));
198 for(i
=0; (i
<DIM
); i
++) {
199 ld_cosines(src
,&(parm
->ir
.ex
[i
]));
200 ld_cosines(src
,&(parm
->ir
.et
[i
]));
204 void ld_data(int left
,int right
,t_parm
*parm
,t_nsborder
*nsb
,
205 t_topology
*top
,rvec
**x
,rvec
**v
)
210 if (debug
) fprintf(stdlog
,"after ld_parm");
212 if (debug
) fprintf(stdlog
,"after ld_nsb");
213 ld_symtab(left
,&top
->symtab
);
214 if (debug
) fprintf(stdlog
,"after ld_symtab");
215 top
->name
=ld_string(left
,&top
->symtab
);
216 if (debug
) fprintf(stdlog
,"after ld_name");
217 ld_atoms(left
,&top
->symtab
,&top
->atoms
);
218 if (debug
) fprintf(stdlog
,"after ld_atoms");
219 ld_idef(left
,&top
->idef
);
220 if (debug
) fprintf(stdlog
,"after ld_idef");
221 for (i
=0; (i
<ebNR
); i
++)
222 ld_block(left
,&top
->blocks
[i
]);
223 if (debug
) fprintf(stdlog
,"after ld_block");
224 snew(*x
,top
->atoms
.nr
);
225 snew(*v
,top
->atoms
.nr
);
226 ld_vectors(left
,*x
,*v
);
227 if (debug
) fprintf(stdlog
,"after ld_vectors");
230 static void mv_grpopts(int dest
,t_grpopts
*g
)
232 blocktx(dest
,g
->ngtc
);
233 blocktx(dest
,g
->ngacc
);
234 blocktx(dest
,g
->ngfrz
);
235 nblocktx(dest
,g
->ngtc
,g
->nrdf
);
236 nblocktx(dest
,g
->ngtc
,g
->tau_t
);
237 nblocktx(dest
,g
->ngtc
,g
->ref_t
);
238 nblocktx(dest
,g
->ngacc
,g
->acc
);
239 nblocktx(dest
,g
->ngfrz
,g
->nFreeze
);
242 static void mv_cosines(int dest
,t_cosines
*cs
)
246 nblocktx(dest
,cs
->n
,cs
->a
);
247 nblocktx(dest
,cs
->n
,cs
->phi
);
251 static void mv_parm(int dest
,t_parm
*parm
)
256 mv_grpopts(dest
,&(parm
->ir
.opts
));
257 for(i
=0; (i
<DIM
); i
++) {
258 mv_cosines(dest
,&(parm
->ir
.ex
[i
]));
259 mv_cosines(dest
,&(parm
->ir
.et
[i
]));
263 static void mv_nsb(int dest
,t_nsborder
*nsb
)
265 blocktx(dest
,nsb
->nprocs
);
266 blocktx(dest
,nsb
->shift
);
267 blocktx(dest
,nsb
->bshift
);
268 blocktx(dest
,nsb
->nstDlb
);
269 blocktx(dest
,nsb
->cgtotal
);
270 blocktx(dest
,nsb
->natoms
);
271 nblocktx(dest
,MAXPROC
,nsb
->homenr
);
272 nblocktx(dest
,MAXPROC
,nsb
->index
);
273 nblocktx(dest
,MAXPROC
,nsb
->cgload
);
274 nblocktx(dest
,MAXPROC
,nsb
->workload
);
277 static void mv_string(int dest
,t_symtab
*symtab
,char **s
)
281 handle
=lookup_symtab(symtab
,s
);
282 blocktx(dest
,handle
);
285 static void mv_strings(int dest
,t_symtab
*symtab
,int nr
,
292 for(i
=0; (i
<nr
); i
++)
293 handle
[i
]=lookup_symtab(symtab
,nm
[i
]);
295 nblocktx(dest
,nr
,handle
);
299 static void mv_symtab(int dest
,t_symtab
*symtab
)
302 struct symbuf
*symbuf
;
304 blocktx(dest
,symtab
->nr
);
306 symbuf
=symtab
->symbuf
;
309 for (i
=0; (i
<symbuf
->bufsize
)&&(i
<nr
); i
++)
311 len
=strlen(symbuf
->buf
[i
])+1;
313 nblocktx(dest
,len
,symbuf
->buf
[i
]);
321 static void mv_grps(int dest
,t_grps grps
[])
325 for(i
=0; (i
<egcNR
); i
++) {
326 blocktx(dest
,grps
[i
].nr
);
327 nblocktx(dest
,grps
[i
].nr
,grps
[i
].nm_ind
);
332 static void mv_atoms(int dest
,t_symtab
*symtab
,t_atoms
*atoms
)
338 nblocktx(dest
,nr
,atoms
->atom
);
339 mv_strings(dest
,symtab
,atoms
->nr
,atoms
->atomname
);
340 mv_strings(dest
,symtab
,atoms
->nres
,atoms
->resname
);
341 mv_strings(dest
,symtab
,atoms
->ngrpname
,atoms
->grpname
);
342 mv_grps(dest
,atoms
->grps
);
343 mv_block(dest
,&atoms
->excl
);
346 static void mv_vectors(int dest
,int natoms
,rvec x
[],rvec v
[])
348 blocktx(dest
,natoms
);
349 nblocktx(dest
,natoms
,x
);
350 nblocktx(dest
,natoms
,v
);
353 static void mv_ilist(int dest
,t_ilist
*ilist
)
355 blocktx(dest
,ilist
->nr
);
356 nblocktx(dest
,MAXPROC
,ilist
->multinr
);
357 nblocktx(dest
,ilist
->nr
,ilist
->iatoms
);
360 static void mv_idef(int dest
,t_idef
*idef
)
364 blocktx(dest
,idef
->ntypes
);
365 blocktx(dest
,idef
->atnr
);
366 nblocktx(dest
,idef
->ntypes
,idef
->functype
);
367 nblocktx(dest
,idef
->ntypes
,idef
->iparams
);
368 for(i
=0; (i
<F_NRE
); i
++)
369 mv_ilist(dest
,&idef
->il
[i
]);
372 void mv_data(int left
,int right
,t_parm
*parm
,t_nsborder
*nsb
,
373 t_topology
*top
,rvec x
[],rvec v
[])
379 mv_symtab(right
,&top
->symtab
);
380 mv_string(right
,&top
->symtab
,top
->name
);
381 mv_atoms(right
,&top
->symtab
,&top
->atoms
);
382 mv_idef(right
,&top
->idef
);
383 for (i
=0; (i
<ebNR
); i
++)
384 mv_block(right
,&top
->blocks
[i
]);
385 mv_vectors(right
,top
->atoms
.nr
,x
,v
);